gvolpe's NixOS config keeps three machines and one Home Manager setup in a flake
:space_invader: NixOS configuration :space_invader:
At a glance
- What is it?
- This NixOS configuration is a single flake that produces three machine configurations, three Home Manager configurations and a set of custom packages, and the README is careful to show what the flake actually outputs rather than describing it in the abstract. It is also a record of a desktop journey from XMonad through Hyprland to Niri, which makes it as much a reference as a configuration.
- Who is it for?
- Adopt this configuration as a reference for how a real NixOS flake is structured, since the README shows the actual flake outputs rather than a description of them, which makes it easy to see how machine configurations, Home Manager configurations, library functions and custom packages fit together. Do not adopt it as a ready-to-use system configuration, since the machine names and the desktop stack belong to one person's hardware.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 3 days ago.
- What is it written in?
- Mainly Nix, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The flake output listing is the real documentation
The README publishes the complete output tree of the flake, which is the most useful thing in the repository. The command is `dnix flake show --drv-names github:gvolpe/nix-config`, and the tree it produces has several top level branches. There is a `devShells` entry giving a development environment for x86_64-linux. There is a `homeConfigurations` branch with three entries, `niri`, `niri-desktop` and `niri-laptop`, each a Home Manager configuration. There is a `lib` branch with two library functions, `mkHome` and `mkNixos`. There is a `nixosConfigurations` branch with three machines, `aorus`, `dell-xps` and `thinkpad-x1`, each built against a nixos-system version dated 20260908. There is an `out` branch with two custom instances, `overlays` and `pkgs`, described as instances to be used by consumers of the flake. And there is a `packages` branch for x86_64-linux listing bazecor, metals, metals-updater, neovim, nix, quickemu and slack.
Packages are patched in place, not replaced
The `packages` output is worth reading closely because it shows how this configuration handles software that does not cooperate with Nix. The neovim package is listed as `neovim-0.12.5` with no suffix, and nix is listed as `determinate-nix-3.22.3`, which is a specific distribution of Nix rather than the upstream one. The interesting entry is bazecor, listed as `bazecor-1.10.0-patched`, and the word patched in the derivation name is the convention for a package that has been modified locally. There is also a `metals-updater` package, described in the tree as a script, which is a small executable that exists to update the metals package. The `out` branch with its `overlays` and `pkgs` instances is where those local modifications are published for anything else that consumes the flake.
Two installation routes, one of them virtualised
The further installation instructions describe how to test the configuration rather than how to adopt it. The `xmod` configuration also contains the Home Manager configuration using the NixOS module, so it can be tested with a single command:
nixos-rebuild switch --flake github:gvolpe/nix-config#xmodThe alternative is to test it directly on a QEMU virtual machine, with the caveat stated in the README that it has limitations in terms of graphics. That caveat is not a detail to skip, because a configuration with a Wayland compositor, a status bar, a notification daemon and a wallpaper daemon is precisely the kind of thing a virtual machine without graphics acceleration will not exercise properly. The README also gives a `nix flake metadata` command for the same repository, which prints the declared flake inputs. The `system/` directory and the `switch` file at the repository root, alongside a `flake.nix` and a `flake.lock`, are the pieces that make those commands work.
Three desktops, kept side by side in one repository
The README documents three desktop environments, and the framing around each one tells a story. Niri is presented as an incredible scrollable-tiling Wayland compositor and is the current setup, with Fuzzel and Vicinae as launchers, Waybar as the status bar, Kitty as the terminal, Nemo as the file manager, Sway NC for notifications, Hyprlax for wallpapers, the Juno Ocean GTK theme, the Beauty Line icon theme and JetBrainsMono as the terminal font. Hyprland is described as the author's first Wayland compositor experience, with Wofi as the launcher, Foot as the terminal, Dunst for notifications and the same theme, icons and font. XMonad is described as being forever in the author's heart and the best X window manager, with Rofi, Polybar, Alacritty, Nautilus and Dunst. Keeping all three in one repository, with screenshots for each, is what makes it a reference rather than a single desktop.
The v1.0.0 tag points at the older desktops
There is a small inconsistency worth noticing, because it affects how you read the release history. The repository has one release, v1.0.0, dated 2026-10-02, and its title is Hyprland and XMonad. Yet the current setup in the README is Niri, and the Hyprland and XMonad sections both point back to the v1.0.0 tag as the place to see those versions. So the tag marks the state of the repository at the time those two desktops were the ones in use, and the main branch has since moved on to Niri without cutting a new release. The last push to the main branch was on 2026-10-17, and the repository description is a NixOS configuration with the author describing it as current and ever evolving, so the tag is a snapshot rather than a version scheme.
The editor config lives somewhere else entirely
The NeoVim configuration is not in this repository. The README points to a separate project, the mnw-flake, as the home of the author's NeoVim configuration, and the same editor appears in the environment tables for all three desktops, so the editor setup is shared across the whole machine fleet rather than duplicated. That is the pattern the flake structure implies: the Home Manager configurations handle the user environment, the machine configurations handle the system, and the editor gets its own flake so it can be updated on its own schedule. The repository also has a `.tangled/` directory and a `notes/` directory, plus `home/`, `lib/` and `outputs/` at the top level, which is the standard split for a configuration that supports several machines without duplicating files.
Two CI workflows, one for the system and one for the home
The badges at the top of the README show two separate continuous integration workflows, `home.yml` and `nixos.yml`, which mirrors the split between the two halves of the configuration. Building the system and building the home environment are different jobs with different failure modes, and separating them means a broken home module does not hide a broken system module. The README is also explicit that this is a personal configuration rather than a distribution or a framework, and the license is Apache-2.0 with the licence file in the repository root. The topics attached to the repository give the wider stack: fish shell, neovim, niri, hyprland, wayland, xmonad, polybar, waybar, home-manager, nixpkgs and dotfiles. For anyone reading this as a template, the parts worth copying are the flake structure and the module boundaries, not the program choices.
Editorial conclusion
Adopt this configuration as a reference for how a real NixOS flake is structured, since the README shows the actual flake outputs rather than a description of them, which makes it easy to see how machine configurations, Home Manager configurations, library functions and custom packages fit together. Do not adopt it as a ready-to-use system configuration, since the machine names and the desktop stack belong to one person's hardware. Verify first which output you want, since the flake exposes several NixOS configurations and several Home Manager configurations, and note that the editor configuration lives in a separate repository, the mnw-flake, rather than in this one.
Frequently asked questions
What outputs does the gvolpe/nix-config flake provide?
The published output tree lists a devShell for x86_64-linux, three Home Manager configurations named niri, niri-desktop and niri-laptop, library functions mkHome and mkNixos, three NixOS configurations named aorus, dell-xps and thinkpad-x1, custom overlays and pkgs instances, and x86_64-linux packages including bazecor, metals, neovim, nix, quickemu and slack.
How do I test the gvolpe NixOS configuration?
Run `nixos-rebuild switch --flake github:gvolpe/nix-config#xmod`, which also brings in the Home Manager configuration through the NixOS module. The README also suggests testing it on a QEMU virtual machine, with the caveat that it has limitations in terms of graphics.
Which window managers and desktop components does the configuration cover?
Three, each with a full environment table: Niri with Fuzzel and Vicinae, Waybar, Kitty, Nemo and Sway NC; Hyprland with Wofi, Foot and Dunst; and XMonad with Rofi, Polybar, Alacritty, Nautilus and Dunst. The GTK theme, icon theme and terminal font are shared across all three.
Where is the NeoVim configuration for this NixOS setup?
It lives in a separate repository, the mnw-flake, as the README states. The same editor appears in the environment tables for all three desktop configurations, so it is shared rather than duplicated.
What licence is gvolpe/nix-config released under?
The configuration is under the Apache-2.0 licence, with the licence file in the repository root. The repository has a single release, v1.0.0 from 2026-10-02, whose title refers to the Hyprland and XMonad desktops.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/gvolpe-nix-config)Was this useful?