Files
Nomarchy/modules/lib/state-schema.nix
Bernardo Magri b27fc5aee8 refactor: major architectural restructure for theme-centric organization
Theme System:
- Move all theme app configs to apps/ subdirectory (20 themes)
- Add theme-loader.nix for dynamic theme config deployment
- Simplify stylix.nix to focus on base theming only

Override System:
- Add overrides.nix for file-based config overrides
- Add behavior-configs.nix for non-visual configuration
- Split hypr/nomarchy.conf into behavior vs visual sections

Module Improvements:
- Add lib.mkDefault to all customizable settings
- Add modules/lib/ with shared utilities and state schema
- Update all home and system modules for downstream overridability

Installer:
- New minimal TTY installer (installer/install.sh)
- Golden path: BTRFS + LUKS2 (disko-golden.nix)
- New installer-iso.nix for TTY-only installation
- Keep graphical installer as installerIsoGraphical option

Cleanup:
- Remove obsolete install.sh, disko-ext4.nix, install-nomarchy.sh
- Update live-iso.nix references
- Add .claude/ to .gitignore for local IDE settings

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-11 19:38:27 +01:00

67 lines
1.5 KiB
Nix

# 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;
}