Multi-host configuration files for my NixOS machines.
NixOS is an atomic, declarative, immutable Linux distribution that offers both rolling and stable releases (More Info). I first tried NixOS in June 2024 and have been daily driving it since around that time.
| Hostname | Device Type | Active | Primary Purpose | Namesake |
|---|---|---|---|---|
| RioTinto | Desktop | 🗹 | Gaming | Rio Tinto, Spain |
| celebrant | Laptop | 🗹 | Workstation | Celebrant, Middle Earth |
| tokoro | Server | 🗹 | Jellyfin/File Backups | Tokoro River, Japan |
| wsl | Virtual Machine | 🗹 | WSL Config | Windows Subsystem for Linux |
| vaal | Laptop | ☐ | School | Vaal River, South Africa |
We have a long-standing tradition at my house to name our devices after a river. After a few decades of this, basic names like "Nile" are long gone. My desktop is named after the Rio Tinto because when I first started learning Spanish I used to speak the dialect from Spain. Celebrant is named after the Celebrant river (pronounced [ˈkɛlɛbrant]), which comes from "celeb," meaning silver, and "brant," meaning something like stream. The computer is named so because it has a silvery-blue chassis, and because I was rewatching The Hobbit and The Lord of the Rings when I named it. Tokoro is a river in Japan. I have always been fascinated by Japanese culture (original, I know /s), so I just chose a name that sounded cool. Vaal was chosen because the name looked cool and because I found the letter v appealing.
The exact configuration of a given host is defined in terms of traits, which are essentially composable modules of nix code.
Some traits define the general type of system that I'm building. This allows me to compose functionality without repeating myself, and creates the necessary granularity to define systems with complex use cases. The current hierarchy looks something like this:
Any
├─ Machine
│ ├─ Graphical
│ │ └─ Workstation
│ └─ Server
└─ WSL
Where Any is the most general and Workstation is the most specific.
There also several traits that define additional functionality/requirements
for a given system. Note that some of the hierarchical traits imply the
the presence of extension traits. For example all systems have the Neovim
trait (because I will always need to edit text on any system).
The current list is as follows:
- neovim
- gaming
- jellyfin-service
- nvidia
- syncthing
- virtualisation
- RioTinto: Workstation + Gaming + Nvidia
- celebrant: Workstation
- Tokoro: Server + Syncthing + JellyfinService
- wsl: WSL
- Assets - Static assets for certain applications
- Checks - Testing for my configs
- Docs - Documentation and notes
- Hosts - Entry points for the configs
- Lib - Custom nix utilities
- Modules - Everything else
- Dots - Configurations for specific applications
- Traits - Definitions of the capabilities a host can have
- Constants - Variables that may be re-used in multiple places.
- Overlay - Random things I've packaged and overlayed into my local
nixpkgs - Shells - Definitions for Nix DevShells
- Templates - Flake templates for use with
nix flake init


