This repository contains my personal system configurations for multiple machines using Nix, managed through the Den aspect-oriented configuration framework.
- harmony (x86_64-linux): Home server running media services, Minecraft servers, and infrastructure
- melaan (x86_64-linux): Framework laptop with GNOME desktop
- OMARSHAL-M-2FD2 (aarch64-darwin): MacBook with development environment
- Nix with flakes enabled
- Appropriate system (NixOS, macOS, or Linux for home-manager only)
git clone https://github.com/OscarMarshall/dotfiles.git
cd dotfilesNixOS systems (harmony, melaan):
sudo nixos-rebuild switch --flake .#<hostname>macOS systems (OMARSHAL-M-2FD2):
darwin-rebuild switch --flake .#OMARSHAL-M-2FD2# nix flake check currently fails due to cross-architecture issues
# Use platform-specific builds instead:
nix build .#nixosConfigurations.harmony.config.system.build.toplevel
nix build .#nixosConfigurations.melaan.config.system.build.toplevel
nix build .#darwinConfigurations.OMARSHAL-M-2FD2.config.system.build.toplevel
# Show available outputs
nix flake show
# Format code
nix fmtThis repository uses Den, an aspect-oriented configuration system built on flake-parts. Configuration is organized into composable aspects:
modules/aspects/hosts/: Host-specific configurations (one aspect per host)modules/aspects/users/: User-specific configurations (one aspect per user)modules/aspects/my/: Reusable service and feature aspects (~43 total)modules/aspects/defaults.nix: Default includes applied to all configurations
Each aspect can provide configuration for different targets using these classes:
os: Applies to both NixOS and Darwin (avoids duplicating identical config innixosanddarwin)nixos: NixOS-specific configuration onlydarwin: macOS (nix-darwin) specific configuration onlyhomeManager: Home Manager configuration (cross-platform user environment)
Each host declares which services and features to enable:
# modules/aspects/hosts/harmony/harmony.nix
den.aspects.harmony = {
includes = with my; [
nginx
(minecraft-servers { administrators = [ "oscar" ]; })
(qbittorrent { administrators = [ "oscar" ]; })
plex
# ... more aspects
];
};Each user declares their environment and applications:
# modules/aspects/users/oscar/oscar.nix
den.aspects.oscar = {
user.description = "Oscar Marshall";
includes = with my; [
emacs
git
(host-flag "graphical" {
includes = [ discord ghostty ];
})
];
};- Media: Plex, Radarr, Sonarr, Prowlarr, Autobrr, Cross-seed
- Downloads: qBittorrent (via Gluetun VPN)
- Gaming: Minecraft servers
- Infrastructure: Nginx reverse proxy with Let's Encrypt, Samba file sharing, ZFS storage
- GNOME on melaan (Wayland, via NixOS)
- macOS desktop: Fonts, Homebrew-based applications, and Nix-managed development environment on OMARSHAL-M-2FD2
- Applications: Emacs, Ghostty terminal, Zen Browser, Discord, Steam, Krita, PrusaSlicer
- Framework laptop support via nixos-hardware
- Emacs with doom configuration
- Git with per-machine configuration
- GPG and SSH setup
- Shell: Fish shell via Home Manager
Secrets are encrypted using ragenix (age-based encryption):
# Edit a secret
nix run github:yaxitech/ragenix -- -e secrets/my-secret.age
# Re-key secrets after adding a new host
nix run github:yaxitech/ragenix -- -rPublic keys are defined in secrets/secrets.nix.
nix flake updatenix flake update <input-name>The flake.nix is auto-generated by flake-file. After modifying inputs in
modules/inputs.nix:
nix run .#write-flake- Create
modules/aspects/my/<service>.nix - Define the aspect (with parameters if needed)
- Include in host's aspect:
modules/aspects/hosts/<hostname>/<hostname>.nix
- Create
modules/aspects/hosts/<hostname>/<hostname>.nix - Add a NixOS
hardware-configuration.nixfor the host - Declare the host in
modules/den.nix
- Create
modules/aspects/hosts/<hostname>/<hostname>.nix - Configure the host-specific nix-darwin options in your aspect
- Declare the host in
modules/den.nix
- Create
modules/aspects/users/<username>/<username>.nix - Add user to host declarations in
modules/den.nix
- Den Documentation - Aspect system patterns and usage
- Dendritic Template - Template this repo is based on
- NixOS Manual - NixOS configuration reference
- Home Manager Manual - Home Manager options
- nix-darwin Manual - macOS system configuration
This is a personal configuration repository. Feel free to use it as reference or template for your own configurations.