{ config, lib, ... }: let nomarchyLib = import ../../lib { inherit lib; }; # Single source of truth for default values when state.json is missing # a key. Both core/system/options.nix and core/home/options.nix read # from this same file — changing a default in one place updates # everywhere. (Was: each consumer hardcoded its own `or X` literal, # which is how the summer-night/nord split lived for so long.) schema = import ../../lib/state-schema.nix { inherit lib; }; assetsPath = ../../themes/palettes; # Read unified state from ~/.config/nomarchy/state.json togglesState = nomarchyLib.readHomeState config.home.homeDirectory; in { config = { nomarchy = { toggles = { suspend = togglesState.suspend or schema.home.suspend; screensaver = togglesState.screensaver or schema.home.screensaver; idle = togglesState.idle or schema.home.idle; nightlight = togglesState.nightlight or schema.home.nightlight; waybar = togglesState.waybar or schema.home.waybar; skipVsCodeTheme = togglesState.skipVsCodeTheme or schema.home.skipVsCodeTheme; }; nightlightTemperature = togglesState.nightlightTemperature or schema.home.nightlightTemperature; theme = togglesState.theme or schema.home.theme; wallpaper = togglesState.wallpaper or schema.home.wallpaper; panelPosition = togglesState.panelPosition or schema.home.panelPosition; hyprland = { gaps_in = togglesState.hyprland.gaps_in or schema.home.hyprland.gaps_in; gaps_out = togglesState.hyprland.gaps_out or schema.home.hyprland.gaps_out; border_size = togglesState.hyprland.border_size or schema.home.hyprland.border_size; }; fonts.monospace = togglesState.font or schema.home.font; # Derived properties from the theme directory isLightMode = nomarchyLib.isThemeLightMode { themeName = togglesState.theme or schema.home.theme; inherit assetsPath; }; iconsTheme = nomarchyLib.getIconsTheme { themeName = togglesState.theme or schema.home.theme; inherit assetsPath; }; }; }; }