Skip to content

h0useofdupree/dotfiles

Repository files navigation

NixOS Multi-Host Configuration

Build

GitHub Actions Workflow Status GitHub repo size GitHub last commit GitHub commits since latest release

Overview

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.

Repository layout

  • 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.

Hosts

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.

Nix

  • 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.

Custom modules

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.

Custom packages

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.

Desktop usage

I daily drive the Hyprland compositor along with several extras including

Browser wise I use zen-browser and qutebrowser. My main shell is fish but zsh is also lightly configured.