This repository contains my personal flake for managing several machines with NixOS and Home-Manager. It is heavily inspired by Fufexan's work and acts as my single source of truth for both system and user configuration.
The code is tailored for my own use, but it can also serve as an example of how to structure a multi‑host setup. Feel free to explore and adapt pieces that interest you.
I treat this repo as a training ground for version-control and coding practises - don't take stuff like releases seriously. I am just trying to learn, like you.
- hosts – NixOS configuration for each machine.
- home – Home‑Manager modules and profiles.
- modules – extra Home‑Manager modules (dynamic wallpaper, speakerctl, theme).
- pkgs – custom packages (scripts, helpers and small utilities).
- system – common NixOS modules shared by all hosts.
- lib – helper functions and wallpaper assets used throughout the flake.
The flake currently builds two machines:
- nixus – an AMD desktop tower.
- linx – an Intel/NVIDIA laptop.
Each host imports the shared modules from system/
and also pulls in its
corresponding Home‑Manager profile from home/profiles
.
- Home‑Manager is used as a NixOS module.
flake-parts
is used to organise the flake.- A development shell is provided via
nix develop
which also installs pre‑commit hooks.
Several small modules live under modules/
:
- dynamicWallpaper – systemd timer that rotates wallpapers based on the time of day.
- speakerctl – helper for controlling Tuya smart sockets to toggle my speakers.
- theme – stores a simple theme name and wallpaper path which other modules can query.
The pkgs/
directory contains small utilities packaged with Nix. Notable ones
include:
- bibata-hyprcursor – Bibata cursor theme packaged for
hyprcursor
. (credits to mihai) - dynamic-wallpaper – script used by the dynamic wallpaper module.
- speakerctl – Python script to control smart plugs.
- wl-ocr – screenshot an area and OCR it using Tesseract.
- repl – convenience wrapper to launch a flake-aware
nix repl
.
I daily drive the Hyprland compositor along with several extras including
- Quickshell using the
- Caelestia configuration, of which I am currently using my own fork.
Browser wise I use zen-browser
and qutebrowser
. My main shell is fish
but
zsh
is also lightly configured.