This repository contains the declarative configuration for the systems I actively manage: NixOS workstations, a WSL development environment, a macOS workstation and a dedicated engineering server.
The workstation configurations share development tools and user-level defaults where that is useful. The Forge server follows a separate, smaller composition path so public infrastructure does not inherit desktop settings, personal secrets or workstation state.
| Host | Platform | Purpose |
|---|---|---|
chad |
NixOS, x86-64 | Desktop workstation with encrypted ZFS, impermanence and virtualization |
legion |
NixOS, x86-64 | Laptop with encrypted ZFS, impermanence and wireless networking |
ghost |
NixOS on WSL2, x86-64 | Lightweight Windows development environment |
darwin |
macOS, Apple Silicon | Daily workstation managed with nix-darwin, Home Manager and Homebrew |
forge |
NixOS, x86-64 | Engineering server for forge services, monitoring, backups and the native Nix cache |
Forge is not a general-purpose homelab or a platform for customer data. Its architecture and operating procedures are documented in the Forge guide.
The flake composes each host from platform modules and a machine-specific definition:
chad, legion, ghost = shared modules + NixOS modules + machine definition
darwin = shared modules + Darwin modules + machine definition
forge = stable NixOS + Disko + server modules + machine definition
machines/contains host identity, hardware and host-specific settings.modules/shared/contains the Home Manager environment and configuration shared by workstation-class NixOS and Darwin systems.modules/nixos/contains Linux desktop, storage, connectivity, virtualization and server modules.modules/nixos/server/contains the reusable server baseline and the Forge service composition.modules/darwin/contains macOS system, desktop and Homebrew configuration.lib/contains helper functions used by the module system.overlays/defines local packages, selected stable packages and a small set of packages taken from the current Nixpkgs master branch.pkgs/contains local packages and Forge operator commands.secrets/contains SOPS-encrypted workstation secrets;public-keys.nixcontains public identity material that is safe to commit.
The workstation configurations use NixOS unstable as their primary package
set. Forge uses the stable NixOS package set and does not inherit the shared
workstation modules. This separation is explicit in flake.nix.
- encrypted ZFS roots and ephemeral system state on
chadandlegion; - Home Manager configuration shared across Linux and macOS workstations;
- a separate NixVim flake for the editor configuration;
- Hyprland on graphical NixOS hosts and declarative macOS desktop settings;
- SOPS with age-backed secret decryption for workstation configuration;
- WireGuard-only administration, Restic backups, Prometheus, Alertmanager and Grafana on Forge;
- a signed, read-only native Nix binary cache for managed systems;
- a selectively replicating public Radicle node with a dedicated host identity;
- a hardened Tangled Knot for self-hosted public Git repositories; and
- repository-local packages for repeatable Forge provisioning and cache publication.
Enter the development shell and run the repository checks with:
nix develop
nix fmt
pre-commit run --all-filesInspect the available packages, checks and host outputs with:
nix flake showOn an already configured host, nh uses this repository as its default flake:
# NixOS workstation
nh os switch --hostname chad
# macOS workstation
nh darwin switch --hostname darwinEquivalent direct commands are:
# NixOS workstation
doas nixos-rebuild switch --flake .#chad
# macOS workstation
darwin-rebuild switch --flake .#darwinForge is built remotely from the Apple Silicon workstation and follows a test-before-switch workflow. See the Forge build and deployment procedure instead of applying the workstation commands to that host.
SOPS-encrypted files support the personal workstation configurations. Forge does not receive that material. Its small set of bootstrap secrets is resolved from the operator workstation with SecretSpec and provisioned over WireGuard; private values are not stored in the repository or the Nix store.
Managed systems trust the public Forge cache key in public-keys.nix and
can read from https://cache.decort.tech. Publishing requires WireGuard SSH
access and a root-only command on Forge. GitHub Actions continues to use
Cachix and does not receive Forge cache publication authority.
The docs/ directory contains host guides, module explanations, maintenance
procedures and troubleshooting notes. NDG combines those files with generated
module-option documentation:
nix build .#docsDocumentation changes merged to main are built and deployed to GitHub Pages.
GitHub Actions runs formatting and static checks, builds every NixOS host, and
builds the Apple Silicon nix-darwin configuration on a macOS runner. Forge also
has dedicated checks for its Disko layout and Prometheus alert rules. Successful
pushes to main may publish build results to Cachix; pull requests are
read-only cache consumers.
This is a personal configuration rather than a general-purpose NixOS distribution. The module structure and individual snippets may be useful elsewhere, but hardware identifiers, usernames, network addresses and secret recipients need to be adapted before reuse.
Related references:
The desktop wallpapers are from orxngc/walls-catppuccin-mocha.

