![](./assets/nixhomelab-logo.png) NixOS homelab configuration managed with flakes. ## Layout - `flake.nix`: entrypoint and pinned `nixpkgs` input - `hosts//default.nix`: per-host settings and service toggles - `hosts//hardware-configuration.example.nix`: template showing expected file location - `profiles/*.nix`: shared host profiles (server base, workstation base, etc.) - `modules/control.nix`: central `control` option definitions - `modules/services/*.nix`: per-service implementation modules ## Central Service Control Services are toggled in one place inside each host config: ```nix control = { jellyfin.enable = true; gitea.enable = true; navidrome = { enable = true; musicFolder = "/mnt/seagate8tb/navidrome/music"; dataFolder = "/mnt/seagate8tb/navidrome/data"; }; }; ``` Each service has its own module in `modules/services/`. ## Hardware Config Pattern `hosts//default.nix` automatically imports `./hardware-configuration.nix` only if that file exists. On each NixOS host, generate and store host hardware data in the host folder: ```bash sudo nixos-generate-config --show-hardware-config > hosts/nixos/hardware-configuration.nix ``` ## Usage Build a host config: ```bash nix build .#nixosConfigurations.nixos.config.system.build.toplevel ``` Test on a target machine: ```bash sudo nixos-rebuild test --flake .#nixos ``` Apply on a target machine: ```bash sudo nixos-rebuild switch --flake .#nixos ``` ## Included Native Modules - Home Assistant - Jellyfin - Gitea - Navidrome - Vaultwarden - Nextcloud - k3s Nextcloud requires `control.nextcloud.adminPassFile` when enabled.