- Notifications
You must be signed in to change notification settings - Fork 0
Customization Guide
NullOS is designed to be highly customizable while remaining declarative and reproducible. This guide covers the main ways to customize your system.
NullOS uses a layered configuration approach driven by a feature-flag pipeline:
machines/profiles/base.nix- System-wide defaults and available feature flags.machines/profiles/{pc,server}.nix- Machine-class specific feature overrides.machines/{hostname}/default.nix- Per-machine overrides and variable definitions.home/- User-level configurations (Home Manager, loaded conditionally).modules/- System-level configurations (NixOS, loaded conditionally).
✅ Essential Configuration (in machines/{hostname}/default.nix):
- Username and hostname
- Enabling/disabling features (e.g.
enableSteam,enableOllama) - Monitor configuration (
extraMonitorSettings) - Wallpaper path (
stylixImage)
✅ Desktop Customization:
- Waybar configuration (
home/waybar/) - Hyprland keybindings (
home/hyprland/binds.nix) - Animation settings (
home/hyprland/animations-end4.nix) - Theme and colors (via Stylix)
✅ Application Management:
- System packages (
modules/software/packages.nix) - Home Manager packages (
home/default.nix)
The default.nix file inside your machine's folder is your main configuration hub.
{useNvidiaPrime=false;}Any key that isn't a reserved feature flag becomes extraNixosConfig automatically.
{services.openssh.enable=true;boot.devSize="8G";}NullOS utilizes dynamic keybindings managed via home/hyprland/binds.nix.
Some of the most important bindings include:
SUPER + Return: Open terminal (Ghostty)SUPER + SHIFT + Return(or just releasing SUPER): Toggle Rofi app launcherSUPER + W: Open BrowserSUPER + S: Interactive Screenshot (usingscreenshotinscript)SUPER + SHIFT + S: Screenshot OCR to clipboard (usingscreenshot-ocrscript)SUPER + T: Toggle dropdown scratchpad terminalSUPER + SPACE: Toggle special workspace (scratchpad)
Tip: Press SUPER + K (or run list-keybinds) to view a searchable Rofi menu of all current keybindings!
Modify home/hyprland/windowrules.nix to customize window behavior:
windowrulev2=float,class:^(pavucontrol)$
windowrulev2=size800600,class:^(pavucontrol)$
windowrulev2=center,class:^(pavucontrol)$Stylix provides system-wide theming based on your wallpaper.
# In machines/{hostname}/default.nix{stylixImage=../../wallpapers/your-wallpaper.jpg;}If you want specific colors instead of auto-generated:
# In home/stylix.nixstylix.base16Scheme="${pkgs.base16-schemes}/share/themes/gruvbox-dark-medium.yaml";# In home/default.nixstylix.targets={vscode.enable=false;# Keep VSCode themefirefox.enable=false;# Keep Firefox theme};Edit modules/software/packages.nix:
{config,pkgs,vars, ... }:
{environment.systemPackages=withpkgs;[# Add your packages herebtopneofetchvlc]++lib.optionalsvars.enableDevMisc[binwalkhexedit];}Edit home/default.nix:
{config,pkgs,vars, ... }:
{home.packages=withpkgs;[# Add user-level packagesdiscordspotify];}NullOS provides handy zsh aliases for rebuilding:
fr: Rebuild current machine (runsnh os switch --hostname ${hostname})fu: Rebuild + update inputs (runsnh os switch --hostname ${hostname} --update)
Make sure you run nix develop first before running the rebuild command!
nix flake checkIf something breaks:
- Reboot
- Select previous generation from the boot menu
- System boots with old configuration
nh os rollback- Variables Reference - Complete list of all feature flags
- Per-Machine Config - Managing multiple machines
- Theming - Advanced theming techniques