# structure how the config is organized. ## top-level ``` nix-config/ ├── flake.nix # entry point - dispatches to hosts ├── home/ # home-manager (user space) ├── hosts/ # system-level configs ├── secrets/ # sops-nix encrypted files └── docs/ # this folder ``` ## flake.nix flow ``` flake.nix ├── nixosConfigurations │ ├── muscari → hosts/muscari/ + home/ │ └── rosemary → hosts/rosemary/ + home/ └── darwinConfigurations └── poppy → hosts/poppy/ + home/ ``` ## home/ vs hosts/ | what | where | why | |------|-------|-----| | shell config | `home/` | same on all machines | | terminal emulator | `home/` | gui apps belong here | | system packages | `hosts//` | os-specific | | networking | `hosts//` | per-host | | hostname | `hosts//` | obviously | ## adding things **new package for all hosts:** → add to `home/cli.nix` in `home.packages` **new package for one host:** → add to `hosts//default.nix` in `environment.systemPackages` **new alias for all hosts:** → add to `home/zsh.nix` in `programs.zsh.shellAliases` **new alias for one host:** → add to `hosts//default.nix` in `home-manager.users.mikl.programs.zsh.shellAliases` ## host-specific imports poppy imports `home/kitty.nix` because it has a screen. muscari doesn't. ```nix # hosts/poppy/default.nix home-manager.users.mikl = { imports = [ ../../home/kitty.nix ]; programs.zsh.shellAliases = { switch = "darwin-rebuild switch --flake .#poppy"; }; }; ```