# Nomarchy State Schema # Defines the complete state shape with defaults for both home and system state { lib }: { # Home state defaults (user preferences) home = { # Theme and appearance theme = "nord"; wallpaper = ""; font = "JetBrainsMono Nerd Font"; nightlightTemperature = 4000; # Feature toggles suspend = true; screensaver = true; idle = true; nightlight = false; waybar = true; skipVsCodeTheme = false; # Hyprland window manager settings hyprland = { gaps_in = 5; gaps_out = 10; border_size = 2; }; }; # System state defaults (system-level configuration) system = { # Theme (can differ from home for system-level theming) theme = "nord"; # Timezone timezone = "UTC"; # DNS configuration dns = "DHCP"; # Options: "DHCP", "Cloudflare", "Google", "Custom" customDns = []; # Wi-Fi settings wifi = { powersave = true; }; # Optional features features = { fingerprint = false; fido2 = false; hybridGPU = false; makima = false; }; }; # Get a value from state with fallback to default getWithDefault = state: path: default: let pathList = lib.splitString "." path; getValue = obj: remaining: if remaining == [] then obj else if builtins.isAttrs obj && builtins.hasAttr (builtins.head remaining) obj then getValue obj.${builtins.head remaining} (builtins.tail remaining) else default; in getValue state pathList; }