Personal flake-based NixOS + Home Manager setup. Workstations only for now — modular, hostname-scoped builds, Niri + Noctalia by default.
Use with caution. Review files before applying. Hostnames, usernames, mounts, secrets, and hardware paths are specific to my machines. Modules exist so you can turn pieces off or fork more easily.
| Path | Purpose |
|---|---|
/config |
App configs (ghostty, niri, noctalia, fuzzel, starship, etc.). Mostly wired through Home Manager into ~/.config. |
/devices |
Per-machine entry points under /desktop and /laptop. Imports modules, sets host options, holds hardware-configuration.nix. Replace hardware configs if you fork this. |
/home |
Home Manager: baseline (common.nix), shell (zsh.nix), WM (niri.nix), extras (steam.nix). |
/modules |
Feature modules (baseline, niri, gaming, backup, …) plus profiles/workstation.nix which pulls the common set together. |
/pkgs |
Local package definitions. |
/scripts |
Small helper scripts. |
/secrets |
agenix secrets (encrypted). |
/dotfiles |
Extra dotfiles (e.g. Doom Emacs) not always fully Nix-managed. |
Flake outputs are hostname-only (no hostname-profile combos like prometheus-hypr):
| Flake attr | Device | Notes |
|---|---|---|
prometheus |
Laptop | Primary daily driver |
mactheus |
Laptop | Lighter profile (workstation.profile.full = false) |
karuppu |
Desktop | Full workstation |
Build shape:
.#prometheus
.#mactheus
.#karuppu
Each host is assembled via mkWorkstation in flake.nix (device module + shared Home Manager imports + optional extras).
- Channel / kernel / unfree: workstations track nixpkgs unstable, latest kernel, and allow unfree. Automatic GC keeps generations ≤ 7 days.
- Baseline:
/modules/baseline.nix— boot, networking, users, locale, core services. Enable withworkstation.baseline.enable = true(on by default via the workstation profile). - Packages:
/modules/packages.nix— shared packages underworkstation.baseline.packageswith toggles fortools,dev, andapps. - Profile:
/modules/profiles/workstation.niximports the common module set. Toggle heavy extras withworkstation.profile.full. - Shell: zsh by default (
home/zsh.nixinbaseHmImportsinflake.nix). - Desktop: Niri + Noctalia Shell + Stylix (Tokyo Night). Display manager is ly, default session
niri.- Skip Noctalia: drop the
noctaliainput inflake.nix, remove its package frommodules/niri.nix, and clean startup/spawn lines in/config/niri.
- Skip Noctalia: drop the
- User:
sid— change usernames, home paths, and HMusers.*if you reuse this. - Secrets: agenix. You need matching age keys; encrypted files in
/secretswill not work as-is on another machine. - Kanata: keyboard remapping module with layout files under
/modules/kanata. - Older experiments (multi-profile flake attrs, large server tree, wallpaper blobs) are not part of this tree. Repo is small on purpose.
From the repo root:
# Laptop (primary)
sudo nixos-rebuild switch --flake .#prometheus
# Laptop (lighter)
sudo nixos-rebuild switch --flake .#mactheus
# Desktop
sudo nixos-rebuild switch --flake .#karuppu
# Next-boot only (safer when testing)
sudo nixos-rebuild boot --flake .#prometheusDry-run / build without activating:
nixos-rebuild build --flake .#prometheus
nix build .#nixosConfigurations.prometheus.config.system.build.toplevel- Clone the repo and enter it.
- Replace
devices/<type>/<host>/hardware-configuration.nixwith your own (nixos-generate-config). - Rename host attrs in
flake.nixandnetworking.hostNamein the device module. - Change
users.users.sid/ Home Managerusers.sidif needed. - Disable modules you do not want via the device file (
workstation.<module>.enable = falseorprofile.full = false). - Set up agenix (or strip secret references) before rebuild.
- Rebuild with
sudo nixos-rebuild switch --flake .#<your-host>.
Most knobs live under the workstation option namespace so device files stay short.
| Area | Modules |
|---|---|
| Core | baseline, packages, polkit, ssh, backup |
| Desktop | niri, kanata |
| Editors / tools | nixvim, emacs, yazi, tmux, zennotes, stt |
| Apps | browser, comms, media, office, creative, books, localsend |
| Heavy | gaming, virtualization, torrent, ai, hermes, surfshark, flatpak |
Enable/disable from the device default.nix rather than editing every module.
If this ecosystem is useful to you, consider sponsoring NixOS:
https://github.com/sponsors/NixOS