selkies/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 | charly.yml, task:, 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 task: 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 candy)Works with any wlroots compositor via wlr-layer-shell protocol:
Send and verify notifications declaratively with the dbus: check verb (served
out-of-process by candy/plugin-dbus, driving the session bus with gdbus — no
shell quoting issues), run with charly check live <image> --filter dbus:
notify-test:
check: a desktop notification is delivered
dbus: notify
context: [deploy]
text: Title
description: Body text
notifications-registered:
check: swaync is receiving notifications
dbus: list
context: [deploy]
stdout:
contains: Notifications
Host-side alternatives:
# charly cmd with completion notification (gdbus, host-side)
charly cmd <image> "sleep 2 && echo done"
# Low-level: notify-send (requires libnotify layer)
charly cmd <image> "notify-send 'Title' 'Body text'" --no-notify
# swaync-client operations
charly cmd <image> "swaync-client -c" # notification count
charly cmd <image> "swaync-client -C" # clear all
charly cmd <image> "swaync-client -t" # toggle panel
charly cmd <image> "swaync-client -d" # toggle DnD
/charly-selkies:sway-desktop -- via metalayer composition/charly-selkies:selkies-desktop-layer -- via metalayer composition/charly-selkies:sway-browser-vnc (via sway-desktop metalayer)/charly-selkies:selkies-labwc (via selkies-desktop metalayer)/charly-selkies:selkies-labwc-nvidia (via selkies-desktop metalayer)/charly-infrastructure:dbus-layer -- D-Bus session bus dependency/charly-selkies:libnotify -- notify-send CLI (optional; the dbus: notify check verb uses gdbus instead)/charly-selkies:waybar -- notification bell module/charly-selkies:waybar-labwc -- same notification bell module/charly-selkies:desktop-fonts -- Nerd Font icons for notification bellUse when the user asks about:
/charly-image:layer — candy authoring reference (charly.yml schema, task verbs, service declarations)/charly-check:check — declarative testing (check: block, charly check box, charly check live)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).