# User-level `nomarchy.*` options — the full surface downstream users # configure in their home.nix. Kept small on purpose. { lib, pkgs, ... }: { options.nomarchy = { # ── Required ─────────────────────────────────────────────────── stateFile = lib.mkOption { type = lib.types.path; example = lib.literalExpression "./theme-state.json"; description = '' Path to theme-state.json, the single source of truth for all UI configuration. Must live inside your flake (so evaluation stays pure) and be git-tracked. nomarchy-theme-sync writes to the on-disk copy; rebuilds bake it into the generation. ''; }; # ── Preferences ──────────────────────────────────────────────── terminal = lib.mkOption { type = lib.types.str; default = "ghostty"; description = "Terminal emulator command, used by keybinds and $TERMINAL."; }; keyboard.layout = lib.mkOption { type = lib.types.str; default = "us"; example = "de"; description = '' XKB layout for the Hyprland session. The console (and the LUKS passphrase prompt) take theirs from the system side — the installer writes services.xserver.xkb + console.useXkbConfig into system.nix with the same value. ''; }; keyboard.variant = lib.mkOption { type = lib.types.str; default = ""; example = "nodeadkeys"; description = "XKB variant for the Hyprland session."; }; package = lib.mkOption { type = lib.types.package; default = pkgs.nomarchy-theme-sync; defaultText = lib.literalExpression "pkgs.nomarchy-theme-sync"; description = "The nomarchy-theme-sync package (provided by overlays.default)."; }; themesDir = lib.mkOption { type = lib.types.path; default = ../../themes; defaultText = lib.literalExpression "\"\${nomarchy}/themes\""; description = '' Theme presets/assets directory probed at eval time for per-theme app overrides (/waybar.css, /waybar.jsonc). Point it at your own directory to ship custom layouts downstream. ''; }; # ── Component toggles ────────────────────────────────────────── hyprland.enable = lib.mkEnableOption "Nomarchy's Hyprland configuration" // { default = true; }; waybar.enable = lib.mkEnableOption "Nomarchy's Waybar configuration" // { default = true; }; rofi.enable = lib.mkEnableOption "Nomarchy's themed rofi launcher + the nomarchy-menu dispatcher" // { default = true; }; swaync.enable = lib.mkEnableOption "swaync notifications, themed from the state file" // { default = true; }; idle.enable = lib.mkEnableOption "hyprlock + hypridle (idle lock, display off, suspend)" // { default = true; }; yazi.enable = lib.mkEnableOption "the yazi TUI file manager, themed with a curated plugin set" // { default = true; }; ghostty.enable = lib.mkEnableOption "Nomarchy's Ghostty configuration" // { default = true; }; btop.enable = lib.mkEnableOption "btop with the per-theme nomarchy theme" // { default = true; }; stylix.enable = lib.mkEnableOption "Stylix theming for the long tail of apps (GTK, Qt, cursors)" // { default = true; }; # ── Computed (read-only) ─────────────────────────────────────── theme = lib.mkOption { type = lib.types.attrs; readOnly = true; description = "The parsed theme state (stateFile merged over defaults)."; }; lib = lib.mkOption { type = lib.types.attrs; readOnly = true; description = "Color-format helpers shared by the theme consumers."; }; }; }