From e9dd3d14c58e533d490993f4ce4209544a929bc3 Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Wed, 15 Jul 2026 12:06:38 +0100 Subject: [PATCH] =?UTF-8?q?fix(theme):=20dark=20adw-gtk3=20for=20dark=20pa?= =?UTF-8?q?lettes=20=E2=80=94=20GTK=20dialog=20buttons=20(#98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stylix always used the light adw-gtk3 sheet with recolored tokens; that sheet hardcodes near-black button labels, which became black-on-dark in Boreal GTK dialogs. Force adw-gtk3-dark (and prefer-dark) for dark mode, and pin dialog button label colours in Stylix extraCss. --- README.md | 2 +- agent/BACKLOG.md | 16 ----------- agent/JOURNAL.md | 11 ++++++++ docs/ROADMAP.md | 5 ++++ modules/home/stylix.nix | 61 +++++++++++++++++++++++++++++++++++++++-- 5 files changed, 75 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 75bda63..3a636c8 100644 --- a/README.md +++ b/README.md @@ -479,7 +479,7 @@ gp gpl gf # push · pull · fetch --all --prune # nix (lifecycle: nomarchy-pull / nomarchy-rebuild / nomarchy-home — full names) ns nr # nix shell · nix run (e.g. ns nixpkgs#ripgrep) nfu nfc # nix flake update · check (prefer nomarchy-pull for day-to-day) -nsearch ngc # nix search nixpkgs · nix-collect-garbage -d +nsearch ngc # nix search · nix-collect-garbage -d (prefer: sudo nomarchy-gen-prune) # misc path # print $PATH, one entry per line diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index 6e7acdb..888a4aa 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -31,22 +31,6 @@ post-boot sessions). Preserve separation: the installer bake failure and the flake pin are different root causes even when they show up on the same machine. (Terminal / Ghostty-on-Acer → shipped as Kitty-only, #95.) -### 98. Boreal: button text renders black and is difficult to read - -Audit GTK button foreground/background contrast under Boreal, including the -installer surface where it was observed. Follow THEME-DESIGN's two-theme -visual protocol. Pass = normal, hover, focused, and disabled button labels -remain legible and palette-consistent. - -**Progress 2026-07-13:** scripted checks pass all 24 themes — not -palette-level. Stylix gtk.css for Boreal audited: fg roles are light -(#d3dae0); the near-black values are `accent/warning/error_fg_color` -(#21272f) on their pastel bgs (deliberate, ~4.4:1). Candidate surfaces: -adw-gtk3 (light base) + dark recolor edge cases, or gum's TUI confirm -buttons in the installer (VM gum screens under Boreal look legible — -artifacts in `/tmp/nomarchy-v2-swap-93/`). Needs Bernardo's screenshot or -an Acer repro to pin the actual widget before fixing. - ### 127. `[blocked:hw]` Docked idle: black screens, no wake, undock does not restore panel Bernardo 2026-07-15 (AMD dev box, docked): left the laptop docked; after a diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index 6721b70..00e209a 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -19,6 +19,17 @@ Template: --- +## 2026-07-15 — #98 GTK dialog button black-on-dark (Boreal) +- **Task:** Bernardo: GTK dialog button labels black vs dark Boreal chrome. +- **Did:** Root cause — Stylix pins light `adw-gtk3` for all polarities. + Force `adw-gtk3-dark` when mode=dark, prefer-dark, and extraCss for + dialog/action button labels (suggested/destructive keep dark-on-pastel). +- **Verified:** V1 HM gen: settings.ini `gtk-theme-name=adw-gtk3-dark`, + prefer-dark=true, gtk.css button rules present. V3: open a GTK dialog + after nomarchy-home. +- **Pending:** V3 eyeball on real session. +- **Next suggestion:** hardware queue or human #115/#120. + ## 2026-07-15 — Document generation prune for users (#128 docs) - **Task:** User-facing docs for the 14d / keep-≥3-past policy. - **Did:** RECOVERY §4 (how gens are kept); README generation section + diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 470a716..c9a2380 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -427,6 +427,11 @@ Design/decision records and a running log of shipped work (items marked default `$TERMINAL` / SUPER+Return, doctor + calendar + what-changed use `kitty --class=com.nomarchy.*`. Ghostty module and install-time GL probe removed. V3: Acer SUPER+Return + doctor float. +- ✓ **GTK dialog button labels (#98):** Stylix always set `gtk-theme-name= + adw-gtk3` (light sheet) while recoloring tokens for dark palettes — light + sheet hardcodes near-black button text → black-on-dark in GTK dialogs + (Boreal). Fix: force `adw-gtk3-dark` / `adw-gtk3` from palette mode, + prefer-dark, and pin dialog button colours in Stylix extraCss. - ✓ **Generation prune (#128):** weekly `nomarchy-gen-prune` (system + HM): delete only gens older than **14 days** that are also beyond the **3 most recent past** gens (current always kept). Stock `nix.gc` no longer uses diff --git a/modules/home/stylix.nix b/modules/home/stylix.nix index 24aa626..152e1f7 100644 --- a/modules/home/stylix.nix +++ b/modules/home/stylix.nix @@ -54,6 +54,13 @@ in # contrast selected rows + explicit arrow colour. Appended to # Stylix's generated gtk.css (not gtk.gtk3.extraCss — that is a # no-op under Stylix). + # + # #98: dialog button labels. Stylix always installs theme name + # "adw-gtk3" (light sheet) and only recolors @define-color vars. + # The light sheet hardcodes dark/black button text in places; on a + # dark palette that becomes black-on-dark in GTK dialogs. We force + # adw-gtk3-dark for dark mode (below) and still pin button label + # colours here so dialogs stay legible if a light sheet slips in. extraCss = '' menu menuitem, .menu menuitem, .context-menu menuitem { color: #${base16.base05}; @@ -95,6 +102,33 @@ in background-color: #${base16.base0D}; color: #${base16.base00}; } + + /* Dialog / message-box action buttons (#98). */ + button, button label, + .dialog-action-area button, + .dialog-action-area button label, + messagedialog button, + messagedialog button label, + .message-dialog button, + .message-dialog button label { + color: #${base16.base05}; + } + button:disabled, button:disabled label { + color: alpha(#${base16.base05}, 0.5); + } + /* Suggested/destructive sit on pastel accent/bad — dark label + is intentional and contrast-checked (~4:1 on Boreal accent). */ + button.suggested-action, button.suggested-action label, + button.destructive-action, button.destructive-action label, + button.default, button.default label { + color: #${base16.base00}; + } + button.suggested-action.flat, button.suggested-action.flat label { + color: #${base16.base0D}; + } + button.destructive-action.flat, button.destructive-action.flat label { + color: #${base16.base08}; + } ''; }; qt.enable = true; @@ -147,7 +181,23 @@ in # udiskie — are built as image menu items, so without this their icons # silently vanish. Stylix drives the HM gtk module, so extraConfig # merges into the same settings.ini it already writes. - gtk.gtk3.extraConfig."gtk-menu-images" = 1; + gtk.gtk3.extraConfig = { + "gtk-menu-images" = 1; + # Pair with adw-gtk3-dark so the theme sheet itself is dark, not just + # the @define-color recolor (see gtk.theme.name below). + "gtk-application-prefer-dark-theme" = t.mode != "light"; + }; + gtk.gtk4.extraConfig."gtk-application-prefer-dark-theme" = t.mode != "light"; + + # #98: Stylix hardcodes gtk.theme.name = "adw-gtk3" (light CSS) for every + # polarity and only injects libadwaita colour tokens. The light adw-gtk3 + # sheet assumes light chrome and hardcodes near-black button labels in + # places — on Boreal that is black text on dark dialog buttons. Force + # the matching dark/light sheet; the package still provides both names. + gtk.theme = { + package = lib.mkDefault pkgs.adw-gtk3; + name = lib.mkForce (if t.mode == "light" then "adw-gtk3" else "adw-gtk3-dark"); + }; # GTK4/libadwaita and Qt6 apps decide dark vs light from the XDG # portal's color-scheme (org.freedesktop.appearance), which @@ -155,7 +205,12 @@ in # the GTK theme and `polarity` but not this, so a light theme still # rendered libadwaita/Qt apps dark (and vice-versa). Drive it from the # palette mode. (programs.dconf.enable is already on system-side.) - dconf.settings."org/gnome/desktop/interface".color-scheme = - if t.mode == "light" then "prefer-light" else "prefer-dark"; + dconf.settings."org/gnome/desktop/interface" = { + color-scheme = + if t.mode == "light" then "prefer-light" else "prefer-dark"; + gtk-theme = + if t.mode == "light" then "adw-gtk3" else "adw-gtk3-dark"; + }; }; } +