refactor: implement component-based architecture for enhanced maintainability
- Reorganize directory structure into core/, features/, and themes/ - Colocate application Nix logic, configs, scripts, and theme overrides - Implement 'Inversion of Control' for theming: apps now pull theme-specific layouts - Update flake.nix and shared library paths to match the new structure - Document the new Feature-Centric architecture in README.md
This commit is contained in:
66
lib/state-schema.nix
Normal file
66
lib/state-schema.nix
Normal file
@@ -0,0 +1,66 @@
|
||||
# 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;
|
||||
}
|
||||
Reference in New Issue
Block a user