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
|
Acer's own fontconfig/DPI resolving `ch` the same way — try it under a
|
||||||
**JetBrainsMono 14 theme** (summer-day/night, kanagawa), the widest case.
|
**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
|
## Latitude 5310 / 5410 only
|
||||||
- [ ] **v1 QA batch on-hardware pass** (583708d batch was QEMU-verified) —
|
- [ ] **v1 QA batch on-hardware pass** (583708d batch was QEMU-verified) —
|
||||||
general smoke before the next `main → v1` promotion (broader than
|
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)
|
## 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
|
- **Task:** Bernardo live: rofi#2317 got a maintainer reply → adopt; plus
|
||||||
"make executive-slate's app menu the boreal-style icon grid".
|
"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
|
unsupervised/custom bars; `reload_style_on_change` stays for manual
|
||||||
`home-update` restyles. VM-verified on the headless software-GL
|
`home-update` restyles. VM-verified on the headless software-GL
|
||||||
desktop: SIGKILL → new pid; clean kill → respawn; SIGUSR2 → alive.
|
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-rebuild`** (Latitude QA request): the no-update twin of
|
||||||
`sys-update` — snapshot-first system rebuild against the *current*
|
`sys-update` — snapshot-first system rebuild against the *current*
|
||||||
lock, for config-only changes; `home-update` was already lock-free.
|
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"
|
filefile="$run/nomarchy-record.file"
|
||||||
|
|
||||||
alive() { [ -f "$pidfile" ] && kill -0 "$(cat "$pidfile")" 2>/dev/null; }
|
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
|
case "''${1:-}" in
|
||||||
start)
|
start)
|
||||||
|
|||||||
@@ -128,8 +128,18 @@ in
|
|||||||
color: #${base16.base00};
|
color: #${base16.base00};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dialog / message-box action buttons (#98). */
|
/* Dialog / message-box action buttons (#98) — dialog-scoped
|
||||||
button, button label,
|
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,
|
||||||
.dialog-action-area button label,
|
.dialog-action-area button label,
|
||||||
messagedialog button,
|
messagedialog button,
|
||||||
@@ -138,7 +148,9 @@ in
|
|||||||
.message-dialog button label {
|
.message-dialog button label {
|
||||||
color: #${base16.base05};
|
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);
|
color: alpha(#${base16.base05}, 0.5);
|
||||||
}
|
}
|
||||||
/* Accent buttons: the palette's base as the label, on a chip
|
/* 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=$(${pkgs.systemd}/bin/timedatectl show -p Timezone --value 2>/dev/null || true)
|
||||||
[ "$cur" = "$last" ] && continue
|
[ "$cur" = "$last" ] && continue
|
||||||
last=$cur
|
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
|
done
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ let
|
|||||||
echo 0
|
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
|
case "''${1:-status}" in
|
||||||
check)
|
check)
|
||||||
|
|||||||
@@ -36,9 +36,10 @@ let
|
|||||||
# Waybar supervisor — exec-once has no restart, so a crashed bar used to
|
# 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
|
# leave the session bar-less until relogin (seen on hardware: a theme
|
||||||
# switch crashed waybar mid-reload). Respawns on ANY exit — a plain
|
# switch crashed waybar mid-reload). Respawns on ANY exit — a plain
|
||||||
# `pkill -x waybar` is now a clean restart, which nomarchy-state-sync
|
# `pkill -x 'waybar|\.waybar-wrapped'` (nixpkgs wraps the binary, so
|
||||||
# uses instead of the crash-prone in-place SIGUSR2 reload when it sees
|
# the comm is `.waybar-wrapped`) is now a clean restart, which
|
||||||
# this supervisor running. Crash-loop guard: 5 exits within 10s of
|
# 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
|
# their start → give up with a critical notification instead of
|
||||||
# spinning. Stop the bar for real: pkill -f nomarchy-waybar (TERM is
|
# spinning. Stop the bar for real: pkill -f nomarchy-waybar (TERM is
|
||||||
# trapped to take the child down too).
|
# trapped to take the child down too).
|
||||||
|
|||||||
@@ -22,8 +22,11 @@ writeShellScriptBin "nomarchy-airplane" ''
|
|||||||
networkmanager util-linux bluez coreutils gnugrep gawk libnotify procps
|
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() {
|
poke_bar() {
|
||||||
pkill -RTMIN+11 waybar 2>/dev/null || true
|
pkill -RTMIN+11 -x 'waybar|\.waybar-wrapped' 2>/dev/null || true
|
||||||
}
|
}
|
||||||
|
|
||||||
wifi_enabled() {
|
wifi_enabled() {
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
stdenvNoCC.mkDerivation {
|
stdenvNoCC.mkDerivation {
|
||||||
pname = "nomarchy-state-sync";
|
pname = "nomarchy-state-sync";
|
||||||
version = "0.5.1";
|
version = "0.5.2";
|
||||||
|
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
|
||||||
|
|||||||
@@ -447,14 +447,23 @@ def run_switch() -> None:
|
|||||||
# reload_style_on_change while the symlinks flip), so prefer the
|
# reload_style_on_change while the symlinks flip), so prefer the
|
||||||
# restart whenever the supervisor is there to catch it; fall back to
|
# restart whenever the supervisor is there to catch it; fall back to
|
||||||
# SIGUSR2 for unsupervised/custom bars. No-ops if nothing is running.
|
# 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"):
|
if shutil.which("pkill"):
|
||||||
supervised = subprocess.run(
|
supervised = subprocess.run(
|
||||||
["pgrep", "-f", "nomarchy-waybar"], capture_output=True
|
["pgrep", "-f", "nomarchy-waybar"], capture_output=True
|
||||||
).returncode == 0
|
).returncode == 0
|
||||||
if supervised:
|
if supervised:
|
||||||
subprocess.run(["pkill", "-x", "waybar"], check=False)
|
subprocess.run(["pkill", "-x", r"waybar|\.waybar-wrapped"], check=False)
|
||||||
else:
|
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) ────────────────────────────────────────────
|
# ─── Theme assets (wallpapers) ────────────────────────────────────────────
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ pkgs.testers.runNixOSTest {
|
|||||||
machine.succeed("grep -q 'theme\\[main_bg\\]' /home/nomarchy/.config/btop/themes/nomarchy.theme")
|
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
|
# Poke custom/doctor (signal 10) so a first-poll miss at session start
|
||||||
# doesn't leave the tripwire blank for the full 300s interval.
|
# 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)
|
machine.sleep(3)
|
||||||
# Park the cursor in the bottom-right corner so it doesn't sit in the
|
# 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
|
# middle of the desktop shot (that frame doubles as the theme-picker
|
||||||
|
|||||||
Reference in New Issue
Block a user