A collection of system configurations, expressed in Nix. This repository is based on Nix Flakes, composed elegantly by flakelight.
- All non-nix configuration that could be considered inconvenient to maintain as a string lives in
conf.d
- To keep things tidy, flakelight allows for the use of a directory structure that mimic’s a flake’s
outputs
. As such, expressions can be found in their dir counterparts undernix/
(with one exception:nixosConfigurations
->nixos
) - In keeping with good practices, common “recipies” are presented as modules which are “layered” onto a system’s configuration. For example, a laptop configuration may import:
common
,home
, andgraphical
modules - which are defined undernix/nixosModules
- Individual machine configurations are kept as minimal as possible, such that they only include properties pertaining only to that machine
Quite hard to capture all the benefits I feel I’ve garnered by way of my meticulous obsession with declarative systems, but here are a few key points
- Supports some flake native conventions: additional checks (
nix flake check
) with deadnix & statix, formatter (nix fmt
) with nixpkgs-fmt (also enforced in-editor via nil) - Dead-simple remote deployments with lollypops, mapped to a flake app (
nix run
interface for deployments & local rebuild) - Secrets management is also handled by lollypops, backed by pass, which I secure with a YubiKey (in fact all cryptographic operations, including SSH - which extends to the previously mentioned deployments - and Git signing, all go via PGP, and thus my YubiKey)
- Graphical systems are pure Wayland: minimal session management handled by greetd/tuigreet, colour scheme (configurable on a per-system basis) inherited with stylix (further composed & mapped to CSS)
- My other OS, Emacs, wrapped up into a package, nixified via emacs-overlay’s
emacsWithPackagesFromUsePackage
, with aninit.el
derivation included in relevant system closures - Many more fancy things… 💫
There are several machines defined in nix/nixos
My daily driver: an M2 MacBook Air (running NixOS, courtesy of the amazing Asahi Project & nixos-apple-silicon). A minimal macOS installation remains, but it’s pretty much just an Ableton hypervisor
M3 MacBook Pro for work, macOS
A Raspberry Pi 5 that acts as a DHCP (Kea), DNS (blocky), and proxy (nginx) server for upstream media services, also a WireGuard gateway to my home network
3 Intel NUCs that occupy 1u in my cabinet. Homelab & various media management services