-
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 launcher -
SUPER + W: Open Browser -
SUPER + S: Interactive Screenshot (usingscreenshotinscript) -
SUPER + SHIFT + S: Screenshot OCR to clipboard (usingscreenshot-ocrscript) -
SUPER + T: Toggle dropdown scratchpad terminal -
SUPER + 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 = size 800 600, 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.nix
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-medium.yaml";# In home/default.nix
stylix.targets = {
vscode.enable = false; # Keep VSCode theme
firefox.enable = false; # Keep Firefox theme
};Edit modules/software/packages.nix:
{ config, pkgs, vars, ... }:
{
environment.systemPackages = with pkgs; [
# Add your packages here
btop
neofetch
vlc
] ++ lib.optionals vars.enableDevMisc [
binwalk
hexedit
];
}Edit home/default.nix:
{ config, pkgs, vars, ... }:
{
home.packages = with pkgs; [
# Add user-level packages
discord
spotify
];
}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