No description
Find a file
deko 5e7b284a34 Multi-Host-Struktur, Nvidia-Modul, Zsh/Security-Feinschliff und neuen Host mf01
- flake.nix auf mkHost-Helper umgestellt: hosts/<name>/ (Hardware +
  Host-Settings) getrennt von modules/ (gemeinsame Config), pro Host
  optional eigene packages.nix
- modules/nvidia.nix: parametrisiertes Nvidia-Optimus/Prime-Modul statt
  auskommentiertem Codeblock, aktiviert für hosts/gaming-laptop
- Zsh (Autosuggestions, Syntax-Highlighting, host-aware Aliases via
  $(hostname)), zoxide, fzf, direnv, Kitty/Neovim-Feinschliff in home.nix
- Minimal-Security-Härtung (sudo execWheelOnly, SSH KbdInteractive/X11
  Forwarding aus) und zusätzliche CLI-Tools in modules/packages.nix
- Neuer Host mf01: Nachbildung der CachyOS-Workstation (limine, fish,
  btrfs-Subvolumes/zram, Nvidia-eGPU, OpenRazer, Netbird, Snapper) mit
  gegen echtes NixOS (vs215) verifizierter Paketliste

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-28 21:48:40 +02:00
hosts Multi-Host-Struktur, Nvidia-Modul, Zsh/Security-Feinschliff und neuen Host mf01 2026-07-28 21:48:40 +02:00
modules Multi-Host-Struktur, Nvidia-Modul, Zsh/Security-Feinschliff und neuen Host mf01 2026-07-28 21:48:40 +02:00
flake.lock dark theme, plasma-manager, papirus icons 2026-04-05 00:34:25 +02:00
flake.nix Multi-Host-Struktur, Nvidia-Modul, Zsh/Security-Feinschliff und neuen Host mf01 2026-07-28 21:48:40 +02:00
home.nix Multi-Host-Struktur, Nvidia-Modul, Zsh/Security-Feinschliff und neuen Host mf01 2026-07-28 21:48:40 +02:00
README.md Multi-Host-Struktur, Nvidia-Modul, Zsh/Security-Feinschliff und neuen Host mf01 2026-07-28 21:48:40 +02:00

NixOS Konfiguration

Deklarative NixOS-Systemkonfiguration mit Flakes und Home-Manager.
Zielumgebung: Proxmox VM (später erweiterbar auf Bare-Metal mit Nvidia Optimus).

Dateistruktur

/etc/nixos/
├── flake.nix                        # Einstiegspunkt  Inputs, mkHost-Helper, ein Eintrag pro Host
├── flake.lock                       # Lockfile  pinnt exakte Versionen (automatisch generiert)
├── home.nix                         # User-Konfiguration via Home-Manager (Shell, Git, Tools)  gemeinsam für alle Hosts
├── modules/
│   ├── common.nix                   # System: Boot, Netzwerk, Desktop, Dienste, User  für alle Hosts gleich
│   ├── packages.nix                 # Alle System-Pakete  getrennt für Übersichtlichkeit
│   └── nvidia.nix                   # Nvidia-Optimus-Modul (options.modules.nvidia.*), per Host an/aus
└── hosts/
    ├── nixos-vm/
    │   ├── hardware-configuration.nix   # Hardware-spezifisch (wird bei Installation generiert)
    │   └── config.nix                    # Host-Settings: hostName, VM-Gast-Integration
    ├── gaming-laptop/
    │   ├── hardware-configuration.nix   # Platzhalter  vor Nutzung neu generieren
    │   └── config.nix                    # Host-Settings: hostName, Nvidia aktiviert + Bus-IDs
    └── mf01/
        ├── hardware-configuration.nix   # Platzhalter (btrfs-Subvolumes, zram)  vor Nutzung neu generieren
        ├── config.nix                    # Host-Settings: limine, fish, eGPU, OpenRazer, Netbird, Snapper, ...
        └── packages.nix                  # Host-eigene Paketliste (Nachbildung des CachyOS-Setups)

Jeder Host lebt in einem eigenen Ordner unter hosts/. Alles, was für alle Rechner gleich ist, steht in modules/. Ein neuer Rechner braucht nur einen neuen hosts/<name>/-Ordner plus eine Zeile in flake.nix (siehe Flake-Struktur).

Voraussetzungen

  • Proxmox VE mit OVMF (UEFI) Support
  • NixOS Minimal ISO (oder Netboot.xyz)
  • Netzwerkzugang für Paket-Downloads

Installation (Proxmox VM)

1. VM in Proxmox erstellen

Einstellung Wert
OS Type Linux 6.x
BIOS OVMF (UEFI)
Disk 40+ GB, VirtIO SCSI
RAM 4+ GB
CPU 2+ Kerne, Typ host
Display VirtIO-GPU
Netzwerk VirtIO, Bridge

Nach der Installation eine EFI Disk hinzufügen (ohne Pre-Enroll Keys).

2. Ins Live-System booten

# Root-Shell starten
sudo -i

# Tastatur auf Deutsch setzen
loadkeys de

# Internetverbindung prüfen
ping -c 3 nixos.org

3. Disk partitionieren

# GPT-Partitionstabelle erstellen
parted /dev/vda -- mklabel gpt

# EFI-Partition (512 MB)
parted /dev/vda -- mkpart ESP fat32 1MiB 512MiB
parted /dev/vda -- set 1 esp on

# Root-Partition (Rest)
parted /dev/vda -- mkpart primary 512MiB 100%

4. Formatieren und mounten

# Formatieren
mkfs.fat -F32 /dev/vda1
mkfs.ext4 /dev/vda2

# Mounten
mount /dev/vda2 /mnt
mkdir -p /mnt/boot
mount /dev/vda1 /mnt/boot

5. Konfiguration erstellen

# Hardware-Konfiguration automatisch generieren
nixos-generate-config --root /mnt

# generierte hardware-configuration.nix an die richtige Stelle verschieben
mkdir -p /mnt/etc/nixos/hosts/nixos-vm
mv /mnt/etc/nixos/hardware-configuration.nix /mnt/etc/nixos/hosts/nixos-vm/

# Config-Dateien anlegen/bearbeiten
nano /mnt/etc/nixos/flake.nix
nano /mnt/etc/nixos/modules/common.nix
nano /mnt/etc/nixos/modules/packages.nix
nano /mnt/etc/nixos/hosts/nixos-vm/config.nix
nano /mnt/etc/nixos/home.nix

6. System installieren

nixos-install --flake /mnt/etc/nixos#nixos-vm
# Root-Passwort setzen wenn gefragt

# Neustarten
reboot

7. Nach dem ersten Boot

# Passwort ändern falls nötig
passwd

# System aktualisieren
sudo nix flake update --flake /etc/nixos
sudo nixos-rebuild switch --flake /etc/nixos

Täglicher Workflow

Config ändern und anwenden

# 1. Datei bearbeiten (z.B. Paket hinzufügen)
sudo nano /etc/nixos/modules/packages.nix

# 2. System neu bauen
rebuild

# 3. Änderungen committen und pushen
sudo git -C /etc/nixos add .
sudo git -C /etc/nixos commit -m "paket xyz hinzugefügt"
sudo git -C /etc/nixos push

Wichtige Befehle

Befehl Beschreibung
rebuild System neu bauen und aktivieren (nutzt automatisch #$(hostname))
rebuild-test Testen ohne permanent zu setzen (wird beim Reboot verworfen)
update Flake-Inputs (nixpkgs, home-manager) aktualisieren
garbage Alte Generationen und ungenutzten Store aufräumen

Die Aliases sind sowohl für Bash als auch für Zsh definiert (Standard-Login-Shell ist Zsh).

Pakete verwalten

# Paket suchen
nix search nixpkgs firefox

# Paket temporär nutzen (ohne Installation)
nix-shell -p python3

# Dev-Shell starten (aus flake.nix)
nix develop

Nützliche Konzepte

Generationen

NixOS speichert bei jedem rebuild eine neue Generation. Beim Booten kannst du jederzeit eine ältere Generation auswählen perfektes Rollback.

# Alle Generationen anzeigen
sudo nix-env --list-generations --profile /nix/var/nix/profiles/system

# Alte Generationen aufräumen
sudo nix-collect-garbage -d

Flake-Struktur

Der #nixos-vm Teil im Rebuild-Befehl referenziert einen Host, den mkHost-Helper in flake.nix baut:

mkHost = hostName: nixpkgs.lib.nixosSystem {
  system = "x86_64-linux";
  modules = [
    ./hosts/${hostName}/hardware-configuration.nix
    ./hosts/${hostName}/config.nix
    ./modules/common.nix
    ./modules/packages.nix
    ./modules/nvidia.nix
    # ... home-manager
  ];
};

nixosConfigurations = {
  nixos-vm = mkHost "nixos-vm";
  gaming-laptop = mkHost "gaming-laptop";
};

Ein neuer Rechner braucht nur:

  1. Neuen Ordner hosts/<name>/ mit hardware-configuration.nix (per nixos-generate-config) und config.nix (mind. networking.hostName).
  2. Einen weiteren Eintrag <name> = mkHost "<name>"; in flake.nix.

Danach baut --flake /etc/nixos#<name> das jeweilige System.

Bare-Metal mit Nvidia (gaming-laptop)

Der Host gaming-laptop ist für den Wechsel auf echte Hardware (Ryzen 5xxxH + RTX 3080 Laptop) bereits vorbereitet. Das Nvidia-Verhalten wird über ein eigenes Modul (modules/nvidia.nix) gesteuert, das pro Host per Option ein-/ausgeschaltet wird kein Ein-/Auskommentieren von Codeblöcken mehr nötig:

# modules/nvidia.nix definiert:
options.modules.nvidia = {
  enable = ...;        # Nvidia Optimus/Prime an oder aus
  amdgpuBusId = ...;    # Bus-ID der internen/AMD-GPU
  nvidiaBusId = ...;    # Bus-ID der Nvidia-GPU
};

hosts/gaming-laptop/config.nix setzt bereits modules.nvidia.enable = true mit Platzhalter-Bus-IDs. Für den echten Umzug:

  1. Repo auf der Hardware klonen.
  2. hosts/gaming-laptop/hardware-configuration.nix neu generieren:
    sudo nixos-generate-config
    sudo cp /etc/nixos/hardware-configuration.nix /pfad/zum/repo/hosts/gaming-laptop/hardware-configuration.nix
    
  3. Bus-IDs ermitteln (dezimal, nicht Hex!) und in hosts/gaming-laptop/config.nix eintragen:
    lspci | grep -E "VGA|3D"
    
  4. Optional: Gaming-Pakete (Steam, MangoHud, Gamemode, etc.) in hosts/gaming-laptop/config.nix ergänzen.
  5. sudo nixos-rebuild switch --flake /etc/nixos#gaming-laptop.

Für weitere Nvidia-Hosts genügt ein neuer hosts/<name>/-Ordner mit eigenem modules.nvidia.enable/Bus-IDs die Logik in modules/nvidia.nix wird automatisch mitgenutzt.

mf01 Nachbildung der CachyOS-Workstation

Der Host mf01 (Minisforum U890 Pro) bildet die aktuelle CachyOS-Installation so nah wie möglich in NixOS nach zunächst als Parallel-/Referenz-Config, mit der Option auf einen echten Umstieg später. Die Daten (Pakete, Dienste, Hardware) wurden direkt vom laufenden CachyOS-System erhoben, nicht geraten.

Besonderheiten gegenüber den anderen Hosts:

  • Bootloader: boot.loader.limine statt systemd-boot (Parität zu CachyOS).
  • Login-Shell: fish statt zsh (users.users.deko.shell = pkgs.fish;, home.nix enthält dafür einen eigenen programs.fish-Block mit denselben Aliases wie bash/zsh).
  • Storage: btrfs mit CachyOS-typischem Subvolume-Schema (@, @home, @srv, @log, @cache, @tmp) und zram-Swap statt Swap-Partition siehe hosts/mf01/hardware-configuration.nix (Platzhalter-UUIDs, vor echter Installation neu generieren).
  • Nvidia-eGPU (Oculink): Die eGPU ist nicht fest verbaut, daher wird hardware.nvidia.open = true gesetzt, aber kein services.xserver.videoDrivers = [ "nvidia" ] amdgpu bleibt Primärtreiber. Muss mit tatsächlich angeschlossener eGPU verifiziert werden (siehe TODO-Kommentar in hosts/mf01/config.nix).
  • OpenRazer: hardware.openrazer.enable ersetzt die AUR-DKMS-Pakete; polychromatic als GUI.

Manueller Schritt: Citrix Workspace

pkgs.citrix_workspace ist unfree und erfordert ein manuell heruntergeladenes Tarball (Citrix-EULA-Gate, kein automatischer Download möglich):

  1. Auf citrix.com/downloads das Linux-Tarball passend zur nixpkgs-Version herunterladen.
  2. Per nix-store --add-fixed sha256 <datei> bzw. dem in der nixpkgs-Doku zu Citrix beschriebenen requireFile-Mechanismus einbinden.
  3. pkgs.citrix_workspace in hosts/mf01/packages.nix einkommentieren.

Bewusst ausgelassen (Stand jetzt)

  • whisper-server, patchmon-agent: kein nixpkgs-Paket vorhanden, bräuchten eigenes Packaging/Custom-Service auf Wunsch erstmal nicht mitgebaut, bei Bedarf einzeln nachrüsten.
  • ufw: durch die native networking.firewall (aus modules/common.nix) ersetzt, um keine zwei Firewall-Systeme parallel zu betreiben.
  • limine-snapper-sync (Snapshot-Einträge im Bootmenü): kein NixOS-Äquivalent gefunden; NixOS-Generationen decken Rollback bereits über limine selbst ab.
  • linux-arctis-manager (SteelSeries): ersetzt durch headsetcontrol als Best-Effort-Alternative, keine 1:1-Funktionsgarantie.
  • Ein paar Pakete mit unklarem nixpkgs-Namen/Zweck sind in hosts/mf01/packages.nix als # TODO markiert statt geraten.

Ressourcen