a dotfile but it's really big
nix dotfiles home-manager flake
README.md

dotfiles #

The repository contains system and user configuration as a Nix flake. Jujutsu (jj) provides version control.

Hosts #

Host Type Arch Notes
kiwi Laptop x86_64 Work — Niri, Waybar, YubiKey, Linear/Sentry MCP
belaf Laptop x86_64 Personal — Niri, Secure Boot (Lanzaboote)
ozen WSL x86_64 Dev environment on Windows
reg Server x86_64 Tailscale, SSH, PDS
wakuna Server aarch64 ARM — built as SD image

Components #

  • System: NixOS unstable, Lix, flake-parts, easy-hosts
  • User: home-manager, Catppuccin (macchiato)
  • Desktop: Niri/Noctalia Shell, Ghostty, Helium browser
  • Dev: Nushell, Starship, Atuin, Zellij, Helix (custom fork), Jujutsu, Docker, direnv
  • AI: OpenCode with custom agents, skills, MCP (GitHub, Outline, Linear, Sentry)
  • Secrets: sops-nix (age)
  • Cache: Attic at nix-cache.karitham.dev/dotfiles

Commands #

nh os switch                    # rebuild & switch (uses ~/dotfiles)
nixos-rebuild switch --flake .#kiwi  # explicit host
nix build .#wakuna-image        # SD image for wakuna
nix fmt                         # format (nixfmt, nufmt, biome)

nh os switch rebuilds and switches for the current host and assumes the repository at ~/dotfiles. nixos-rebuild switch targets an explicit host. nix build produces the wakuna image. nix fmt formats the repository.

Repository structure #

flake.nix              # Flake entry point
flake-parts.nix        # Systems, packages, module exports
modules/
├── core.nix           # my.username, user groups
├── nix.nix            # Lix, Attic cache push
├── locale.nix         # Europe/Paris, en_US + fr_FR
├── home/              # home-manager, Catppuccin
├── desktop/           # Niri/Noctalia, Ghostty, audio, apps
├── dev/               # Nushell, Helix, jj, Docker, OpenCode
├── server/            # Tailscale, SSH
├── wsl/               # NixOS-WSL
├── tags/              # work, secureboot
└── opencode/          # Agents, skills, plugins, commands
systems/
├── default.nix        # easy-hosts definitions
├── kiwi/ belaf/ ozen/ reg/ wakuna/
pkgs/                  # Custom derivations
secrets/               # sops-nix encrypted (age)

Module system #

flake.nix imports flake-parts.nix. flake-parts.nix declares supported systems, custom packages, and module exports. systems/default.nix declares hosts through easy-hosts. Each host has a class (desktop, server, wsl) that includes the corresponding module group. Tags (work, secureboot) add further configuration. desktop.enable includes window manager, terminal, audio, applications, and sub-features. dev.enable includes shell, editor, version control, tools, OpenCode, and Docker. Each feature provides nixos.nix for the system and home.nix for the user.

Secret management #

sops-nix with age encryption manages secrets. Files in secrets/ decrypt at build time. .sops.yaml defines keys and creation rules.