ov-layers/skills/swaync/SKILL.md
SwayNotificationCenter notification daemon for wlroots compositors (sway, labwc). Use when working with desktop notifications, notification center, or swaync configuration.
npx skillsauth add overthinkos/overthink-plugins swayncInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Property | Value |
|----------|-------|
| Dependencies | dbus |
| Service | swaync (supervisord, priority 14, startsecs=2) |
| Install files | layer.yml, tasks:, swaync-wrapper, config.json, style.css |
SwayNotificationCenter (RPM) -- provides swaync, swaync-clientRuns as a supervisord service (priority 14, startsecs=2) via swaync-wrapper which waits for the Wayland socket before starting. The wrapper uses pkill -9 -x swaync (exact name match) to kill any stale instance before exec, preventing D-Bus name conflicts on restart. startsecs=2 gives swaync time to claim the D-Bus name before supervisord declares it running. Priority 14 ensures swaync starts after the compositor (10-12) but before waybar (15), so the notification indicator module is ready.
The tasks: removes D-Bus auto-activation service files (org.erikreider.swaync.service, org.erikreider.swaync.cc.service) at build time. Without this fix, D-Bus spawns a competing swaync instance when waybar's swaync-client -swb queries the notification service ~2 seconds after startup. The SystemdService= directive in those files is intended to delegate to systemd, but since containers use supervisord (not systemd as PID 1), D-Bus falls back to Exec=/usr/bin/swaync, creating a second instance that steals the D-Bus bus name from the supervisord-managed one — causing the supervisord instance to exit with FATAL status.
~/.config/swaync/config.json)~/.config/swaync/style.css)Catppuccin Mocha theme matching waybar:
The waybar custom/notification module displays a notification bell icon using swaync-client:
swaync-client -t)swaync-client -d)desktop-fonts layer)Works with any wlroots compositor via wlr-layer-shell protocol:
# Preferred: use ov test dbus notify (native Go D-Bus, no shell quoting issues)
ov test dbus notify <image> "Title" "Body text"
# Alternative: use ov cmd with notification (triggers on completion)
ov cmd <image> "sleep 2 && echo done"
# Check if swaync is receiving notifications
ov test dbus list <image> | grep Notifications
# Low-level: notify-send (requires libnotify layer)
ov cmd <image> "notify-send 'Title' 'Body text'" --no-notify
# swaync-client operations
ov cmd <image> "swaync-client -c" # notification count
ov cmd <image> "swaync-client -C" # clear all
ov cmd <image> "swaync-client -t" # toggle panel
ov cmd <image> "swaync-client -d" # toggle DnD
/ov-layers:sway-desktop -- via metalayer composition/ov-layers:selkies-desktop -- via metalayer composition/ov-images:sway-browser-vnc (via sway-desktop metalayer)/ov-images:openclaw-sway-browser (via sway-desktop metalayer)/ov-images:openclaw-ollama-sway-browser (via sway-desktop metalayer)/ov-images:selkies-desktop (via selkies-desktop metalayer)/ov-images:selkies-desktop-nvidia (via selkies-desktop metalayer)/ov-layers:dbus -- D-Bus session bus dependency/ov-layers:libnotify -- notify-send CLI (optional; ov test dbus notify uses native Go D-Bus instead)/ov-layers:waybar -- notification bell module/ov-layers:waybar-labwc -- same notification bell module/ov-layers:desktop-fonts -- Nerd Font icons for notification bellUse when the user asks about:
/ov:layer — layer authoring reference (layer.yml schema, task verbs, service declarations)/ov:test — declarative testing (tests: block, ov image test, ov test)tools
Use when authoring or modifying a charly PLUGIN — a candy with a `plugin:` block that contributes Providers (verbs/kinds/deploy-targets/steps/builders/commands), its own CUE schema, builtin (compiled-in) or external (out-of-tree git repo). Covers the unified Provider model, the per-plugin CUE-schema contract (single source → Go params for dev + schema-over-Describe RPC for runtime), the SDK, and the loader.
tools
The CUE data-validation / configuration CLI (cue), pinned to v0.16.1. Use when working with the cue candy, installing the cue binary into a box or onto a target:local dev host, or running the offline schema-vendoring pipeline that feeds charly's egress validation.
tools
CUE EGRESS validation — validating (and, where it adds value, generating) the config files charly WRITES to a system BEFORE the bytes hit disk. MUST be invoked before working on charly/egress.go, the vendored schemas under candy/plugin-egress/egress-schemas/vendor/, the ValidateEgress / registerVendoredEgressKind path, the offline `task cue:vendor` pipeline, or adding an egress schema for any written artifact (cloud-init, k8s manifests, traefik routes, runtime config, install ledger, systemd/quadlet units, ssh_config, libvirt XML).
tools
Kubernetes cluster-probe declarative check verb — the `kube:` check verb (nodes, pods, ingress, storage class, addon health, apply/delete, and arbitrary resource GETs) served out-of-process by the candy/plugin-kube plugin (vendored client-go; no external kubectl required).