74 lines
1.6 KiB
Markdown
74 lines
1.6 KiB
Markdown

|
|
|
|
NixOS homelab configuration managed with flakes.
|
|
|
|
## Layout
|
|
|
|
- `flake.nix`: entrypoint and pinned `nixpkgs` input
|
|
- `hosts/<name>/default.nix`: per-host settings and service toggles
|
|
- `hosts/<name>/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/<name>/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.
|