feat(bar): doctor tripwire indicator (LATER item)
All checks were successful
Check / eval (push) Successful in 3m3s
All checks were successful
Check / eval (push) Successful in 3m3s
nomarchy-doctor-status: silent while nomarchy-doctor exits 0 (or is absent), so the module only exists when something is actually broken — then a red warning glyph with the first ✖ lines jq-escaped into the tooltip; clicking opens the full sheet (nomarchy-menu doctor). Interval 300s: the health check is real work (unit/disk/git sweeps), and this is a tripwire, not a monitor. Added to the generated bar (status group, after battery) and to BOTH summer whole-swap bars (module list + jsonc block + CSS membership + @red rule) per the parity rule. Verified: V0; V1 — template-home builds with the module in config + CSS, the status script passes bash -n, both summer jsonc still parse; functional — the self-gate exits silently, and a shimmed failing doctor yields jq-valid JSON with class "bad" and the ✖ lines in the tooltip. Live render queued for hardware. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -95,6 +95,18 @@ let
|
||||
printf '{"text":"","tooltip":"VPN active (click to manage)","class":"on"}\n'
|
||||
'';
|
||||
|
||||
# Health warning — self-gates: prints nothing while nomarchy-doctor
|
||||
# exits 0, so the module only appears when the sheet has a ✖ (the
|
||||
# same self-hide discipline as vpn/nightlight/updates). The tooltip
|
||||
# carries the first failing lines; click opens the full sheet.
|
||||
doctorStatus = pkgs.writeShellScriptBin "nomarchy-doctor-status" ''
|
||||
command -v nomarchy-doctor >/dev/null 2>&1 || exit 0
|
||||
out=$(nomarchy-doctor 2>/dev/null) && exit 0
|
||||
tip=$(printf '%s\n' "$out" | grep '✖' | head -5 \
|
||||
| ${pkgs.jq}/bin/jq -Rs 'rtrimstr("\n") + "\n(click for the full sheet)"')
|
||||
printf '{"text":"","tooltip":%s,"class":"bad"}\n' "$tip"
|
||||
'';
|
||||
|
||||
# Per-theme override probe.
|
||||
assetDir = config.nomarchy.themesDir + "/${t.slug}";
|
||||
styleOverride = assetDir + "/waybar.css";
|
||||
@@ -123,7 +135,7 @@ let
|
||||
modules-center = [ "clock" ];
|
||||
modules-right = [ "custom/recording" "idle_inhibitor" "tray" "custom/vpn" "pulseaudio" "cpu" "memory" "custom/powerprofile" "custom/nightlight" ]
|
||||
++ lib.optional showLanguage "hyprland/language"
|
||||
++ [ "battery" "custom/updates" "custom/notification" ];
|
||||
++ [ "battery" "custom/doctor" "custom/updates" "custom/notification" ];
|
||||
|
||||
"hyprland/workspaces" = {
|
||||
format = "{icon}";
|
||||
@@ -197,6 +209,15 @@ let
|
||||
on-click = "nomarchy-vpn";
|
||||
};
|
||||
|
||||
# Health check is real work (systemctl/disk/git sweeps), so a long
|
||||
# interval — this is a tripwire, not a monitor.
|
||||
"custom/doctor" = {
|
||||
exec = "nomarchy-doctor-status";
|
||||
return-type = "json";
|
||||
interval = 300;
|
||||
on-click = "nomarchy-menu doctor";
|
||||
};
|
||||
|
||||
# Screen recording indicator. Self-gates: visible only while
|
||||
# nomarchy-record runs (status prints nothing otherwise), and the
|
||||
# click IS the stop surface — the menu only starts recordings.
|
||||
@@ -310,7 +331,7 @@ let
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#tray, #pulseaudio, #cpu, #memory, #custom-powerprofile, #custom-nightlight, #custom-updates, #custom-vpn, #custom-recording, #idle_inhibitor, #language, #battery, #custom-notification {
|
||||
#tray, #pulseaudio, #cpu, #memory, #custom-powerprofile, #custom-nightlight, #custom-updates, #custom-vpn, #custom-recording, #idle_inhibitor, #language, #battery, #custom-doctor, #custom-notification {
|
||||
color: alpha(@text, 0.85);
|
||||
padding: 0 10px;
|
||||
}
|
||||
@@ -337,6 +358,10 @@ let
|
||||
/* Updates pending → accent, to draw the eye. */
|
||||
#custom-updates.available { color: @accent; }
|
||||
|
||||
/* Doctor tripwire — only rendered when something is ✖, so it is
|
||||
always the alert color. */
|
||||
#custom-doctor { color: @bad; }
|
||||
|
||||
/* The power-profile speedometer glyph renders small in its em box —
|
||||
size it up so it reads at a glance like the other indicators. */
|
||||
#custom-powerprofile { font-size: ${toString (t.fonts.size + 3)}pt; }
|
||||
@@ -386,5 +411,5 @@ in
|
||||
# whole-swap themes' static waybar.jsonc can exec them by name — plus
|
||||
# the supervisor hyprland.nix exec-onces.
|
||||
home.packages = lib.optionals config.nomarchy.waybar.enable
|
||||
[ waybarSupervisor powerProfileStatus powerProfileCycle vpnStatus ];
|
||||
[ waybarSupervisor powerProfileStatus powerProfileCycle vpnStatus doctorStatus ];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user