Arch Linux + Nix hybrid configuration for a work machine. Uses Home Manager with Nix flakes to declaratively manage dotfiles, packages, and application settings on top of a base Arch Linux install.
Arch Linux handles the base system, kernel, and GPU drivers. Nix + Home Manager handles the user environment — packages, dotfiles, and app configuration — for reproducibility and rollbacks without giving up the Arch rolling release and AUR.
- Window manager: Niri (Wayland, scrollable tiling)
- Terminal: Kitty
- Shell: Fish + Starship prompt
- Editor: Neovim / Zed
- Git: GitButler (GUI via Nix, CLI via install script)
- File manager: Yazi (terminal file manager)
- Browser: Zen Browser / Qutebrowser (keyboard-driven)
- Theme: Catppuccin Mocha everywhere (Kitty, Zed, system dark mode via GTK/Qt/dconf)
- GPU: Intel Arc, GUI apps wrapped with nixGL for hardware acceleration
| Module | What it configures |
|---|---|
fish.nix |
Fish shell, aliases, custom functions |
starship.nix |
Starship prompt |
kitty.nix |
Kitty terminal (nixGL-wrapped) |
neovim.nix |
Neovim (plugins, LSP servers, formatters via Nix) |
zed.nix |
Zed editor (nixGL-wrapped) |
zen.nix |
Zen Browser |
niri.nix |
Niri window manager dotfiles |
git.nix |
Shared Git config |
git-local.nix |
Personal Git identity (gitignored, see template) |
lazygit.nix |
Lazygit TUI |
fzf.nix |
Fuzzy finder |
mise.nix |
Runtime version manager |
fonts.nix |
Fonts (Dank Mono, Hack Nerd Font, Noto Color Emoji) + fontconfig |
claude.nix |
Claude Code settings and skills |
yazi.nix |
Yazi file manager and keybindings |
qutebrowser.nix |
Qutebrowser (nixGL-wrapped) |
1password.nix |
1Password desktop entry override (XWayland fix for niri) |
codium.nix |
VS Codium editor |
The dotfiles/ directory contains raw config files that modules source via home.file:
fish/functions/— Custom Fish functions (git helpers likegwip,gcy,gfom)fish/conf.d/— Fish conf.d scripts (GitButler dynamic completions)niri/config.kdl— Niri window manager configurationniri/monitor-layout.sh— Dynamic monitor positioning scriptstarship.toml— Starship prompt configurationnvim/— Neovim configuration (init.lua, per-module plugin configs, LSP server configs)claude/— Claude Code skills and settings
- Arch Linux with:
- Niri installed (window manager)
- Intel Arc GPU drivers
xdg-desktop-portal-gtk(for portal backend service)
- Nix with flakes enabled
# Clone to the default Home Manager path
git clone <repo-url> ~/.config/home-manager
# Copy git identity template and fill in your details
cp git-local.nix.template git-local.nix
# Apply configuration
home-manager switch
# Install tools not managed by Nix
./setup.shhome-manager switch # Build and activate
home-manager switch -n # Dry run
home-manager switch --rollback # Roll back to previous generation
home-manager generations # List generations
nix flake update # Update all inputs
nixfmt *.nix # Format Nix filesMigration to system-manager is planned to also manage system-level configuration with Nix.