Nomarchy's Hyprland/Ghostty/Waybar settings were set at normal priority, so a downstream `home.nix` setting any value Nomarchy already set threw a "conflicting definition values" error — overriding required lib.mkForce, contradicting the README's "mkDefault throughout" claim. Now: behaviour/chrome leaves (input, misc, monitor, animations, dwindle, gesture, decoration.blur sizing, ghostty padding/decoration, waybar settings+style) are lib.mkDefault — a plain home.nix assignment wins. Appearance values that flow from theme-state.json (gaps, colors, rounding, opacity, fonts) stay at normal priority on purpose: change them via nomarchy-theme-sync (their source of truth) or lib.mkForce to hardcode. bind/exec-once lists stay normal priority so additions concatenate rather than replace. Verified: behaviour/ghostty plain overrides build; theme values still conflict (steering to the CLI); default rendered config is byte-identical. New docs/OVERRIDES.md with the appearance→CLI / behaviour→home.nix / component→toggle model and worked examples; linked from the README. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
44 lines
1.7 KiB
Nix
44 lines
1.7 KiB
Nix
# Ghostty — Nomarchy's default terminal, themed from theme-state.json.
|
|
# Colors, fonts and the full 16-color ANSI palette are baked from the
|
|
# JSON at eval time.
|
|
{ config, lib, ... }:
|
|
|
|
let
|
|
t = config.nomarchy.theme;
|
|
c = t.colors;
|
|
in
|
|
{
|
|
programs.ghostty = lib.mkIf config.nomarchy.ghostty.enable {
|
|
enable = true;
|
|
enableBashIntegration = true;
|
|
|
|
settings = {
|
|
# ── Typography (from theme-state.json) ────────────────────────
|
|
font-family = t.fonts.mono;
|
|
font-size = t.fonts.size;
|
|
|
|
# ── Colors (from theme-state.json) ────────────────────────────
|
|
background = c.base;
|
|
foreground = c.text;
|
|
cursor-color = c.accent;
|
|
selection-background = c.overlay;
|
|
selection-foreground = c.text;
|
|
split-divider-color = c.surface;
|
|
|
|
# "N=#rrggbb" entries; Ghostty accepts repeated `palette` keys,
|
|
# which the HM module renders from this list.
|
|
palette = lib.imap0 (i: color: "${toString i}=${color}") t.ansi;
|
|
|
|
# ── Chrome ────────────────────────────────────────────────────
|
|
# background-opacity is theme-driven (normal priority — use the
|
|
# CLI); the rest are mkDefault so a plain home.nix value wins.
|
|
background-opacity = t.ui.terminalOpacity;
|
|
window-padding-x = lib.mkDefault 12;
|
|
window-padding-y = lib.mkDefault 12;
|
|
window-decoration = lib.mkDefault false;
|
|
gtk-single-instance = lib.mkDefault true;
|
|
confirm-close-surface = lib.mkDefault false;
|
|
};
|
|
};
|
|
}
|