# swaync — notification daemon + control centre, themed from # theme-state.json. Until this shipped, nothing rendered notify-send at # all: the theme-switch progress toasts, the CLI's font warnings and the # live ISO's welcome message were all invisible. { config, lib, ... }: let cfg = config.nomarchy; t = cfg.theme; c = t.colors; r = toString t.ui.rounding; in { config = lib.mkIf cfg.swaync.enable { services.swaync = { enable = true; settings = { positionX = "right"; positionY = "top"; control-center-margin-top = t.ui.gapsOut; control-center-margin-right = t.ui.gapsOut; control-center-width = 420; notification-window-width = 400; notification-icon-size = 48; timeout = 6; timeout-low = 3; timeout-critical = 0; # critical stays until dismissed }; style = '' /* Palette baked from theme-state.json. Only roles guaranteed to contrast @base in EVERY palette are used: subtext/surface mean "on-surface" in some light themes (summer-day: subtext==base, surface==text — body text was invisible on hardware, item 25). Chips/hovers are alpha(@text) tints — contrast by construction. tools/check-theme-contrast.py guards the hex-on-hex pairings. */ @define-color base ${c.base}; @define-color text ${c.text}; @define-color accent ${c.accent}; @define-color bad ${c.bad}; .notification { background: alpha(@base, 0.95); border: ${toString t.ui.borderSize}px solid alpha(@accent, 0.4); border-radius: ${r}px; color: @text; } .notification-content .summary { color: @text; font-weight: bold; } .notification-content .body { color: @text; } .notification.critical { border-color: @bad; } .control-center { background: alpha(@base, 0.95); border: ${toString t.ui.borderSize}px solid alpha(@accent, 0.4); border-radius: ${r}px; color: @text; } .control-center .notification-row:focus, .control-center .notification-row:hover { background: alpha(@text, 0.1); border-radius: ${r}px; } .widget-title { color: @text; font-weight: bold; } .widget-title > button { background: alpha(@text, 0.1); color: @text; border: none; border-radius: ${r}px; } .widget-title > button:hover { background: @accent; color: @base; } ''; }; }; }