5.0 KiB
5.0 KiB
Project Guide — ZaneyOS
Scope
- A reproducible NixOS flake tailored for desktop systems with per-host overrides, GPU/VM profiles, and an integrated Home Manager layer (Hyprland, Waybar, shells, scripts).
- Repo location is expected at ~/zaneyos. If you place it elsewhere, update modules/core/nh.nix (programs.nh.flake) to the new path.
Quick commands
- Build and switch (preferred: nh/zcli)
- fr → nh os switch --hostname # alias provided by zsh/bash modules
- fu → nh os switch --hostname --update
- zcli rebuild
- zcli update
- Build for next boot (safer for larger changes)
- zcli rebuild-boot
- or: sudo nixos-rebuild boot --flake .#
- Direct NixOS (if you prefer without nh/zcli)
- sudo nixos-rebuild switch --flake .#
- Validate the flake
- nix flake check
- Format Nix files (nixfmt-rfc-style is included)
- find . -name "*.nix" -print0 | xargs -0 nixfmt
- Host management
- zcli update-host [hostname] [profile] # edits flake.nix host/profile
- zcli add-host [profile] # copies hosts/default and guides hardware.nix
- Diagnostics and maintenance
- zcli diag # writes ~/diag.txt
- zcli cleanup # prunes older generations (prompts for retention)
zcli advanced options (for rebuild/update)
- --dry (-n) preview only
- --ask (-a) confirm before proceeding
- --cores N cap build CPU usage
- --verbose (-v) more logs
- --no-nom disable nix-output-monitor
Profiles and when to use them
- amd, intel, nvidia, nvidia-laptop (hybrid), vm
- Choose with the argument in nh/nixos-rebuild commands (e.g., .#vm)
High-level architecture
- flake.nix
- Inputs: nixpkgs 25.05, home-manager 25.05, stylix, nvf, nix-flatpak
- Local constants: system, host, profile, username
- nixosConfigurations: one per GPU/VM profile via mkNixosConfig
- Each configuration imports profiles/
- profiles//default.nix
- Imports the active host and the system module stacks:
- ../../hosts/${host}
- ../../modules/drivers
- ../../modules/core
- Flips toggles: drivers.*.enable and vm.guest-services.enable
- Hybrid laptops: profiles/nvidia-laptop pulls intel/nvidia Bus IDs from the host’s variables.nix and wires nvidia-prime
- Imports the active host and the system module stacks:
- hosts//
- default.nix imports hardware.nix and host-packages.nix
- variables.nix is the control panel for UX + feature toggles:
- displayManager (greetd vs sddm)
- terminal/browser defaults (enable per-terminal via flags)
- waybarChoice, animChoice, stylixImage
- 24h clock, thunarEnable, printEnable, NFS
- intelID/nvidiaID for Prime offload
- modules/core
- default.nix composes focused NixOS modules: boot, flatpak, fonts, hardware, network, nfs, nh, packages, printing, display manager (conditional greetd/sddm), security, services (PipeWire, SSH, Bluetooth, fstrim; smartd conditional on profile), steam, stylix, syncthing, system (nix settings, locales, env vars), thunar, user (Home Manager), virtualisation, xserver
- user.nix integrates Home Manager and creates users.${username}; passes extraSpecialArgs { inputs, username, host, profile } to the home layer
- nh.nix enables nh, configures GC, and pins programs.nh.flake = /home/${username}/zaneyos
- modules/drivers
- Aggregates AMD, Intel, NVIDIA, NVIDIA Prime, and VM guest services
- nvidia-prime-drivers.nix exposes options.drivers.nvidia-prime.{enable,intelBusID,nvidiaBusID} consumed by the nvidia-laptop profile
- vm-guest-services.nix enables qemu-guest, spice agents when vm.guest-services.enable = true
- modules/home
- default.nix composes the user environment (Hyprland, Waybar via waybarChoice, Rofi, Yazi, Kitty/WezTerm/Ghostty/Alacritty toggles, Zsh/Bash config, Git, NVF/Neovim, OBS, swaync, scripts, Stylix, optional Doom Emacs/VSCodium/Helix)
- scripts/default.nix installs user-space tools including zcli; zcli wraps rebuild/update/boot builds, cleanup, diagnostics, host management, and Doom Emacs lifecycle
Where to change what
- flake.nix: set username, host, profile; add inputs; wire outputs
- hosts//{variables.nix,hardware.nix,host-packages.nix}: per-machine behavior, theming, and hardware
- modules/core/*: system-level settings, services, packages
- modules/home/*: user apps, shell, window manager, UI
Common workflows
- Small UX tweaks: edit hosts//variables.nix → fr
- Theme swap: edit stylixImage/waybarChoice in variables.nix → fr (or zcli rebuild-boot)
- GPU/VM switch: choose nixos-rebuild/nh profile (e.g., nh os switch --hostname vm) and optionally update host/profile constants with zcli update-host
Validation and troubleshooting
- nix flake check for a quick sanity test
- zcli diag to produce a detailed hardware/system report
- If the repo is not under ~/zaneyos, update modules/core/nh.nix so zcli/nh operate on the correct path
Documentation pointers
- README.md: requirements, first-time install methods, upgrade overview
- zcli.md: full CLI documentation, commands, options, and examples
- cheatsheets/: quick-reference guides for Hyprland, terminals, editors, etc.