Compare commits
2 Commits
f658b0087e
...
3abeccf071
| Author | SHA1 | Date | |
|---|---|---|---|
| 3abeccf071 | |||
| 76941c55b7 |
@@ -616,6 +616,15 @@ Everything else below stays open; order is convenience, not a gate.
|
||||
Acer's own fontconfig/DPI resolving `ch` the same way — try it under a
|
||||
**JetBrainsMono 14 theme** (summer-day/night, kanagawa), the widest case.
|
||||
|
||||
- [ ] **Theme-switch bar round-trip (2026-07-19 waybar-poke + gtk-pin fix)** —
|
||||
after `nomarchy-pull` + `nomarchy-home`, switch dark → light → dark
|
||||
(e.g. boreal → kiln-clay → kiln). Pass = the bar visibly restarts on
|
||||
each switch and the workspace digits land per theme (dark-on-accent
|
||||
active pill, dimmed inactives on dark themes) with no color carried
|
||||
over from the previous theme; then start/stop a screen recording and
|
||||
toggle airplane mode — the supervisor must survive both pokes
|
||||
(`pgrep -lx nomarchy-waybar` still lists it).
|
||||
|
||||
## Latitude 5310 / 5410 only
|
||||
- [ ] **v1 QA batch on-hardware pass** (583708d batch was QEMU-verified) —
|
||||
general smoke before the next `main → v1` promotion (broader than
|
||||
|
||||
@@ -19,6 +19,26 @@ Template:
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-19 — stale workspace-digit colors after theme switch (prev commit + this)
|
||||
- **Task:** Bernardo live: bar digit colors wrong for boreal /
|
||||
executive-slate / kiln after switching; a reboot "fixed" it.
|
||||
- **Did:** Root-caused on Newton. (1) Every bar poke used `pkill -x
|
||||
waybar`, but the nixpkgs wrap renamed the comm `.waybar-wrapped` —
|
||||
switches never restarted/reloaded the bar (and unanchored RTMIN pokes
|
||||
were killing the supervisor). (2) Stylix's #98 bare `button label` pin
|
||||
outranks the colors waybar.css inherits onto `#workspaces button`,
|
||||
frozen at bar start — all three screenshots' digits were kiln-clay's
|
||||
@text. Fixed the pattern in 7 sites; scoped the #98 pin to dialogs.
|
||||
- **Verified:** V0 flake check + py_compile; V1 HM generation + system
|
||||
toplevel; live on Newton (V3-grade): restart via the new pattern,
|
||||
RTMIN poke with the supervisor surviving, pixel-verified boreal digits
|
||||
(@base-on-accent active, @muted inactive) under the scoped gtk.css.
|
||||
- **Pending:** HARDWARE-QUEUE: deploy round-trip after nomarchy-home.
|
||||
NB: waybar 0.15.0 `reload_style_on_change` is inert with HM symlinks
|
||||
(upstream); harmless now that the restart path works.
|
||||
- **Next suggestion:** close the queue entry once Bernardo's deploy
|
||||
round-trip passes.
|
||||
|
||||
## 2026-07-17 — #143 closed via upstream's own knob; executive-slate gets the icon grid (f899b19 + this)
|
||||
- **Task:** Bernardo live: rofi#2317 got a maintainer reply → adopt; plus
|
||||
"make executive-slate's app menu the boreal-style icon grid".
|
||||
|
||||
@@ -1947,6 +1947,12 @@ Design/decision records and a running log of shipped work (items marked
|
||||
unsupervised/custom bars; `reload_style_on_change` stays for manual
|
||||
`home-update` restyles. VM-verified on the headless software-GL
|
||||
desktop: SIGKILL → new pid; clean kill → respawn; SIGUSR2 → alive.
|
||||
**Follow-up (2026-07-19):** a later waybar package wrap renamed the
|
||||
comm to `.waybar-wrapped`, silently no-oping every `pkill -x waybar`
|
||||
(switches stopped touching the bar → the stale workspace-digit-color
|
||||
bug), while the *unanchored* RTMIN pokes substring-matched the
|
||||
supervisor's `nomarchy-waybar` comm and killed it. All pokes now use
|
||||
`-x 'waybar|\.waybar-wrapped'`.
|
||||
- ✓ **`sys-rebuild`** (Latitude QA request): the no-update twin of
|
||||
`sys-update` — snapshot-first system rebuild against the *current*
|
||||
lock, for config-only changes; `home-update` was already lock-free.
|
||||
|
||||
@@ -18,7 +18,10 @@ lib.mkIf config.nomarchy.rofi.enable {
|
||||
filefile="$run/nomarchy-record.file"
|
||||
|
||||
alive() { [ -f "$pidfile" ] && kill -0 "$(cat "$pidfile")" 2>/dev/null; }
|
||||
poke_bar() { pkill -RTMIN+8 waybar 2>/dev/null || true; }
|
||||
# -x, both comm names: nixpkgs wraps the binary as `.waybar-wrapped`,
|
||||
# and an unanchored `waybar` also matches (and kills) the
|
||||
# nomarchy-waybar supervisor, whose bash dies on an unhandled RTMIN.
|
||||
poke_bar() { pkill -RTMIN+8 -x 'waybar|\.waybar-wrapped' 2>/dev/null || true; }
|
||||
|
||||
case "''${1:-}" in
|
||||
start)
|
||||
|
||||
@@ -128,8 +128,18 @@ in
|
||||
color: #${base16.base00};
|
||||
}
|
||||
|
||||
/* Dialog / message-box action buttons (#98). */
|
||||
button, button label,
|
||||
/* Dialog / message-box action buttons (#98) — dialog-scoped
|
||||
ONLY, never a bare `button` / `button label`. This file is
|
||||
loaded by every GTK3 process including Waybar, and a direct
|
||||
`button label` rule beats the color waybar.css puts on
|
||||
`#workspaces button` (a rule matching the label node always
|
||||
outranks color inherited from the button), so the old bare
|
||||
pin painted the workspace digits with whatever palette was
|
||||
live when the bar process started — the 2026-07-19
|
||||
stale-digit bug: switch themes, digits keep the previous
|
||||
gtk.css color until the bar restarts. The real #98 fix is
|
||||
forcing adw-gtk3-dark (below); these pins are only the
|
||||
dialog safety net for a light sheet slipping in. */
|
||||
.dialog-action-area button,
|
||||
.dialog-action-area button label,
|
||||
messagedialog button,
|
||||
@@ -138,7 +148,9 @@ in
|
||||
.message-dialog button label {
|
||||
color: #${base16.base05};
|
||||
}
|
||||
button:disabled, button:disabled label {
|
||||
.dialog-action-area button:disabled, .dialog-action-area button:disabled label,
|
||||
messagedialog button:disabled, messagedialog button:disabled label,
|
||||
.message-dialog button:disabled, .message-dialog button:disabled label {
|
||||
color: alpha(#${base16.base05}, 0.5);
|
||||
}
|
||||
/* Accent buttons: the palette's base as the label, on a chip
|
||||
|
||||
@@ -24,7 +24,8 @@ let
|
||||
cur=$(${pkgs.systemd}/bin/timedatectl show -p Timezone --value 2>/dev/null || true)
|
||||
[ "$cur" = "$last" ] && continue
|
||||
last=$cur
|
||||
${pkgs.procps}/bin/pkill -SIGUSR2 -x waybar 2>/dev/null || true
|
||||
# Both comm names: nixpkgs wraps the binary as `.waybar-wrapped`.
|
||||
${pkgs.procps}/bin/pkill -SIGUSR2 -x 'waybar|\.waybar-wrapped' 2>/dev/null || true
|
||||
done
|
||||
'';
|
||||
in
|
||||
|
||||
@@ -71,7 +71,8 @@ let
|
||||
echo 0
|
||||
}
|
||||
|
||||
refresh_bar() { ${pkgs.procps}/bin/pkill -RTMIN+9 -x waybar 2>/dev/null || true; }
|
||||
# Both comm names: nixpkgs wraps the binary as `.waybar-wrapped`.
|
||||
refresh_bar() { ${pkgs.procps}/bin/pkill -RTMIN+9 -x 'waybar|\.waybar-wrapped' 2>/dev/null || true; }
|
||||
|
||||
case "''${1:-status}" in
|
||||
check)
|
||||
|
||||
@@ -36,9 +36,10 @@ let
|
||||
# Waybar supervisor — exec-once has no restart, so a crashed bar used to
|
||||
# leave the session bar-less until relogin (seen on hardware: a theme
|
||||
# switch crashed waybar mid-reload). Respawns on ANY exit — a plain
|
||||
# `pkill -x waybar` is now a clean restart, which nomarchy-state-sync
|
||||
# uses instead of the crash-prone in-place SIGUSR2 reload when it sees
|
||||
# this supervisor running. Crash-loop guard: 5 exits within 10s of
|
||||
# `pkill -x 'waybar|\.waybar-wrapped'` (nixpkgs wraps the binary, so
|
||||
# the comm is `.waybar-wrapped`) is now a clean restart, which
|
||||
# nomarchy-state-sync uses instead of the crash-prone in-place SIGUSR2
|
||||
# reload when it sees this supervisor running. Crash-loop guard: 5 exits within 10s of
|
||||
# their start → give up with a critical notification instead of
|
||||
# spinning. Stop the bar for real: pkill -f nomarchy-waybar (TERM is
|
||||
# trapped to take the child down too).
|
||||
|
||||
@@ -22,8 +22,11 @@ writeShellScriptBin "nomarchy-airplane" ''
|
||||
networkmanager util-linux bluez coreutils gnugrep gawk libnotify procps
|
||||
]}
|
||||
|
||||
# -x, both comm names: nixpkgs wraps the binary as `.waybar-wrapped`,
|
||||
# and an unanchored `waybar` also matches (and kills) the
|
||||
# nomarchy-waybar supervisor, whose bash dies on an unhandled RTMIN.
|
||||
poke_bar() {
|
||||
pkill -RTMIN+11 waybar 2>/dev/null || true
|
||||
pkill -RTMIN+11 -x 'waybar|\.waybar-wrapped' 2>/dev/null || true
|
||||
}
|
||||
|
||||
wifi_enabled() {
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
stdenvNoCC.mkDerivation {
|
||||
pname = "nomarchy-state-sync";
|
||||
version = "0.5.1";
|
||||
version = "0.5.2";
|
||||
|
||||
src = ./.;
|
||||
|
||||
|
||||
@@ -447,14 +447,23 @@ def run_switch() -> None:
|
||||
# reload_style_on_change while the symlinks flip), so prefer the
|
||||
# restart whenever the supervisor is there to catch it; fall back to
|
||||
# SIGUSR2 for unsupervised/custom bars. No-ops if nothing is running.
|
||||
# The pattern matches both comm names: nixpkgs wraps the binary, so
|
||||
# the process is `.waybar-wrapped` — a bare `pkill -x waybar` matched
|
||||
# nothing, theme switches never touched the bar, and it kept the
|
||||
# gtk.css of whatever theme it was started under (the 2026-07-19
|
||||
# stale-digit-color bug). Keep -x: unanchored `waybar` also matches
|
||||
# the supervisor's own `nomarchy-waybar` comm and would kill it.
|
||||
if shutil.which("pkill"):
|
||||
supervised = subprocess.run(
|
||||
["pgrep", "-f", "nomarchy-waybar"], capture_output=True
|
||||
).returncode == 0
|
||||
if supervised:
|
||||
subprocess.run(["pkill", "-x", "waybar"], check=False)
|
||||
subprocess.run(["pkill", "-x", r"waybar|\.waybar-wrapped"], check=False)
|
||||
else:
|
||||
subprocess.run(["pkill", "--signal", "SIGUSR2", "-x", "waybar"], check=False)
|
||||
subprocess.run(
|
||||
["pkill", "--signal", "SIGUSR2", "-x", r"waybar|\.waybar-wrapped"],
|
||||
check=False,
|
||||
)
|
||||
|
||||
|
||||
# ─── Theme assets (wallpapers) ────────────────────────────────────────────
|
||||
|
||||
@@ -79,7 +79,7 @@ pkgs.testers.runNixOSTest {
|
||||
machine.succeed("grep -q 'theme\\[main_bg\\]' /home/nomarchy/.config/btop/themes/nomarchy.theme")
|
||||
# Poke custom/doctor (signal 10) so a first-poll miss at session start
|
||||
# doesn't leave the tripwire blank for the full 300s interval.
|
||||
machine.execute("su - nomarchy -c 'pkill -RTMIN+10 waybar' >/dev/null 2>&1 || true")
|
||||
machine.execute("su - nomarchy -c \"pkill -RTMIN+10 -x 'waybar|\\.waybar-wrapped'\" >/dev/null 2>&1 || true")
|
||||
machine.sleep(3)
|
||||
# Park the cursor in the bottom-right corner so it doesn't sit in the
|
||||
# middle of the desktop shot (that frame doubles as the theme-picker
|
||||
|
||||
Reference in New Issue
Block a user