A fully declarative NixOS configuration featuring Hyprland, AGS shell, and Home Manager. Modular host management and dynamic theming with matugen.
- Hyprland - Tiling Wayland compositor with animations and blur
- AGS Shell - GTK4 desktop shell with launcher, tray, workspace overview, notifications, and more
- Fully Declarative - Entire system reproducible from flake
- Multi-Host - Easy per-machine configuration (laptops, desktops)
- Dynamic Theming - Wallpaper-based colorschemes via matugen
Requirements: NixOS unstable, repo at ~/.dotfiles
cd ~
git clone --recurse-submodules https://github.com/TheWolfStreet/dotfiles.git .dotfiles
cd .dotfilesConfigure once:
nvim flake.nix # set username, gitName, gitEmailOn fresh installs:
sudo nixos-generate-config --show-hardware-config \
| sudo tee /etc/nixos/hardware-configuration.nixCreate/edit host in hosts/:
- copy template (see hosts)
- set gpu, cpu, monitors, keyboard, power
- register in
flake.nix
First build:
sudo nixos-rebuild switch --flake .#<hostname> --impure
sudo rebootFirst login:
- GDM greeter appears, login (password = username)
passwdin terminal to change it
Never type the long command again:
nx-switch # rebuild + switch
nx-boot # apply on next boot
nx-test # test without commitment
nx-update # update inputs + rebuild
nx-gc # garbage collectTypical edit:
nvim ~/.dotfiles/home/packages.nix
nx-switchHosts define hardware, monitors, and machine-specific settings.
Template:
{ username, hostname, ... }: {
imports = [
./common.nix
/etc/nixos/hardware-configuration.nix
../modules/hardware/amd.nix
];
networking.hostName = hostname;
hardware = {
enableAllFirmware = true;
nvidia.enable = true;
nvidia.persistence.enable = true;
amd.cpu.enable = true;
};
power.enable = true; # enable for laptops
home-manager.users.${username} = {
wayland.windowManager.hyprland.settings = {
monitor = [ "eDP-1,1920x1080@60,0x0,1" ];
input.kb_layout = "us";
};
};
}~/.dotfiles/
├── hosts/ # machine-specific configs
├── modules/
│ ├── system/ # base OS layer
│ ├── hardware/ # cpu/gpu tuning
│ └── desktop/ # compositor + desktop services
└── home/
├── packages.nix # user packages
├── terminal/ # shell, prompt, tmux
├── desktop/ # hyprland, ags, browser, theme
├── dev/ # git, lf
└── scripts/ # helpers
Detailed breakdown
base.nix- users, shells, home-managerboot.nix- bootloader, kernel paramshardware.nix- bluetooth, firmwarelocale.nix- timezone, languagenetwork.nix- networking, firewallpower.nix- suspend, power profilessecurity.nix- sudo, polkitservices.nix- background daemonsvirtualization.nix- vms, containersresponsiveness.nix- tuning
amd.nix- amd cpu/gpu, microcodenvidia.nix- nvidia driver, wayland
audio.nix- pipewire, low-latencygreeter.nix- GDM display managerhyprland.nix- compositor, portals, lockscreennautilus.nix- file managerplymouth.nix- boot splash
hyprland.nix- user config, keybindsags.nix- ags2-shell dependenciesbrowser.nix- browser policiesspotify.nix- spicetify themingdconf.nix- gsettingstheme.nix- gtk/icons/cursorsdefs.nix- centralized theme definitions
Change settings:
- username →
flake.nix - packages →
home/packages.nix - timezone/locale →
modules/system/locale.nix - keyboard/monitors →
hosts/<hostname>.nix - keybinds →
home/desktop/hyprland.nix
Find monitor names:
hyprctl monitorsCore navigation
| keybind | action |
|---|---|
| super + 1..7 | workspace 1–7 |
| super + shift + 1..7 | move to workspace |
| super + grave | special workspace |
| super + q | close window |
| super + f | fullscreen |
| super + space | float/tile |
| super + arrows | move window |
| super + shift + arrows | resize window |
| alt + tab | cycle windows |
| super + left/right mouse | move/resize window |
Launcher & apps
| keybind | action |
|---|---|
| super + r | launcher |
| super + tab | overview |
| super + x | terminal |
| super + b | browser |
| super + e | file manager |
| super + l | lock |
| ctrl + alt + delete | restart ags shell |
Media & hardware
| keybind | action |
|---|---|
| screenshot (area) | |
| shift + print | screenshot (full) |
| super + print | record area |
| super + shift + print | record screen |
| xf86audio play/pause/next | media controls |
| xf86audio mute | toggle mute |
| shift + xf86audiomute | toggle mic |
| xf86monbrightness up/down | brightness |
| xf86touchpadtoggle | toggle touchpad |
- GDM display manager (Wayland)
- flakes required
- first rebuild needs
--impure, rest are routine
MIT. Provided as-is.