Welcome to my Nix Dotfiles, a configuration using Home Manager as a nix module, featuring the Niri, Noctalia, Catppuccin theme via Stylix, and essential development tools.
Note
This configuration is built for my personal use. I don't intend for others to use it as-is, and making it portable or beginner-friendly is not a goal of this dotfiles. There is no setup script. This setup now uses Noctalia (not Stylix) to dynamically generate theme and restyle applications every time the wallpaper changes, live at runtime instead of at rebuild time.
├── home/
│ ├── default.nix # Env vars, xdg defaults
│ ├── niri/ # Niri compositor config
│ ├── noctalia/ # Noctalia shell config
│ ├── helix/ # Helix editor config
│ ├── yazi/ # Yazi terminal file manager config
│ ├── zellij/ # Zellij TUI multiplexer config
│ └── ... # Other Home Manager modules
├── system/ # System-level NixOS config
│ ├── configuration.nix
│ ├── desktop.nix
│ ├── virtualisation.nix
│ └── ...
├── flake.nix # all flake inputs and home-manager config
├── README.md
└── ...
This configuration uses Home Manager as a Nix module (instead of running a standalone home-manager CLI setup). Home Manager declaratively manages the user environment: packages, dotfiles, and user services in a reproducible way.
- Nix packages: CLI tools, dev tooling and software I trust. Declarative, one shared store.
- nixpak: GUI and network apps I don't trust or want hardened (Alpaca, Convey, Komikku). Same nixpkgs build as the rest of the system, but sandboxed, with data redirected to
~/.var/nixpak/<app-id>. No duplicate runtimes like Flatpak, but all the benefits of Nix packages. - Flatpak: a test and discovery bench. I find apps in an app store like Bazaar, try them, read their permissions in Flatseal, then either port them to nixpak or uninstall them. App data stays in Flatpak's own dirs, so removal is cleaner than
nix run nixpkgs#something.
Light theming is implemented via NixOS specialisations combined with Stylix, which handles theming for all programs. Since this config uses Home Manager as a NixOS module, the system level Stylix configuration is inherited by Home Manager directly, so home modules don't need to define any specialisations of their own. Theme switching is handled by the specialisation activation script (requires root privilege), which applies the corresponding light/dark Stylix settings atomically across the configured programs (GTK theme, terminal colors, editor theme, wallpaper, and other program-specific configurations). There's also 2 desktop shortucts to activate themes from application launchers.
This setup features deep integration of Helix with Zellij, Yazi, and Lazygit:
- Helix: The
post modernstable editor whose plugins don’t crash every other day because it doesn’t need 50 of them (or any) to be useful in the first place. All language configurations are managed inhome/helix/language.nixfor:- Rust, C, C++, Nix, Lua, Typst, Python, Bash, Dockerfile, Docker Compose, JavaScript, TypeScript, JSX, TSX, JSON, YAML, Markdown, HTML, CSS, SCSS, Svelte, TOML, PowerShell
- Most of the language is configured with formatters and language servers.
- Yazi: Integrated as a file picker within Helix.
- Lazygit: Integrated as the Git UI inside Helix.
- Zellij: tHe InTEgRRattion: Used to open Yazi and Lazygit in floating panes, making them appear as native Helix popups for a unified workflow.
Yazi and Lazygit are launched in context aware floating panes via Zellij, making them feel like native extensions of Helix. This tight integration allows seamless file navigation and Git operations without ever leaving the editor environment.
This configuration is built upon the excellent work of the following projects and their maintainers:
NixOS - The Nix Operating System that enables reproducible and declarative system configurations.
Niri - A scrollable-tiling Wayland compositor written in Rust.
Noctalia - A sleek, customizable desktop shell crafted for Wayland.
Home Manager - Nix-based user environment configurator by the nix-community, enabling declarative management of user packages and dotfiles.
Stylix - Declarative theming for NixOS and Home Manager, generating consistent colors, fonts, and UI styling across entire OS.
Helix - The post modern stable editor whose plugins don’t crash every other day because it doesn’t need 50 of them (or any) to be useful in the first place.
Zellij - A terminal workspace with batteries included.
Yazi - Blazing fast terminal file manager by sxyazi, written in Rust with async I/O.
Wezterm - A powerful cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust.
Rofi - An application launcher and dmenu replacement.
Catppuccin - Soothing pastel theme ecosystem maintained by the Catppuccin organization, providing consistent theming across multiple applications.
Starship - Cross-shell prompt by the Starship contributors, providing a fast and customizable command line prompt.
LazyGit - Simple terminal UI for git commands by jesseduffield, providing an intuitive interface for Git operations.
Delta - Syntax-highlighting pager for git by dandavison, enhancing git diff output with beautiful formatting.
Zsh – A fast, POSIX-compatible shell with sane scripting, proper interactivity, and plugin support that doesn’t fight you. No structured data fantasies, just a shell that gets out of the way and gets shit done.
This project is licensed under MIT license
Feel free to open issues or submit pull requests if you have suggestions for improvements.





