Personal NixOS configuration built with flake-parts, NixOS modules, and Home Manager.
This branch uses a dendritic layout: small feature modules are auto-imported, while each host decides which features are enabled.
.
├── flake.nix
├── hosts/
│ └── hallnet/
│ ├── default.nix
│ ├── configuration.nix
│ ├── home.nix
│ └── hardware-configuration.nix
├── modules/
│ ├── nixos/
│ └── home-manager/
├── config/
└── pkgs/
flake.nixis the top-level flake entry point.hosts/hallnet/default.nixdefinesflake.nixosConfigurations.hallnet.hosts/hallnet/configuration.nixenables NixOS/system feature flags forhallnet.hosts/hallnet/home.nixenables Home Manager/user feature flags forhallwack.hosts/hallnet/hardware-configuration.nixis the generated NixOS hardware file.
NixOS modules live in:
modules/nixos/
├── default.nix
├── desktop/
├── services/
└── system/
modules/nixos/default.nix recursively imports all .nix files under modules/nixos, except default.nix and paths containing /_.
These modules define options such as:
hallwack.system.core.enable
hallwack.system.audio.enable
hallwack.system.bluetooth.enable
hallwack.system.fonts.enable
hallwack.system.pcsc.enable
hallwack.system.shell.enable
hallwack.system.users.enable
hallwack.services.openssh.enable
hallwack.desktop.gnome.enable
hallwack.desktop.niri.enableEnable them from hosts/hallnet/configuration.nix.
Home Manager modules live in:
modules/home-manager/
├── default.nix
├── cli/
├── desktop/
├── editors/
├── terminal/
└── user/
modules/home-manager/default.nix recursively imports all .nix files under modules/home-manager, except default.nix and paths containing /_.
These modules define options such as:
hallwack.user.enable
hallwack.cli.devtools.enable
hallwack.cli.git.enable
hallwack.cli.nodejs.enable
hallwack.cli.rust.enable
hallwack.cli.shell.enable
hallwack.desktop.niri.enable
hallwack.desktop.noctalia.enable
hallwack.editors.neovim.enable
hallwack.terminal.ghostty.enable
hallwack.terminal.kitty.enableEnable them from hosts/hallnet/home.nix.
Desktop configuration is split into system and user layers.
Niri system enablement is in:
modules/nixos/desktop/niri.nix
Niri user config is in:
modules/home-manager/desktop/niri.nix
Both currently use the same option name, hallwack.desktop.niri.enable, but they live in different module systems:
- NixOS sees
hallwack.desktop.niri.enable. - Home Manager sees
home-manager.users.hallwack.hallwack.desktop.niri.enable.
That is valid. Enable the system layer in configuration.nix and the user layer in home.nix.
The config/ directory stores editable application configuration that Home Manager links into the user environment.
Examples:
config/niriconfig/nvimconfig/ghosttyconfig/kittyconfig/zshconfig/starship.toml
Dotfiles are not active by themselves. A Home Manager module must link or configure them.
Local package definitions live in:
pkgs/
├── helium-browser/
└── zennotes/
They can be referenced from NixOS or Home Manager modules through flake inputs or pkgs depending on how they are exposed.
From this repository:
sudo nixos-rebuild switch --flake .#hallnetThe hallwack.cli.shell module also defines a switch shell alias using the configured repository path.
nix flake check --no-buildSTRUCTURE.md: repository structure and module conventions.ADDING_PACKAGES.md: where to add packages and new feature modules.FLAKES_VS_HOME_MANAGER.md: how flakes, NixOS, and Home Manager fit together.MIGRATING_TO_DENDRITIC.md: migration notes for this module layout.MACOS.md: planned nix-darwin/macOS extension strategy.