Run breadd as a systemd user service by default
All checks were successful
Mirror to GitHub / mirror (push) Successful in 6s

Best practice for the long-running bread daemon: ship an enabled user unit in
skel (~/.config/systemd/user/breadd.service + default.target.wants symlink)
instead of a bare Hyprland exec-once. Gives crash-restart, journald logging
(journalctl --user -u breadd), and proper lifecycle.

- ExecStart uses %h so it works for any account created from skel (not a
  hardcoded home).
- RuntimeDirectoryPreserve=yes so restarting breadd doesn't wipe the shared
  theme.css that bread-theme writes into /run/user/<uid>/bread.
- hyprland.lua: replace the `breadd` exec-once with a Wayland-env import
  (dbus-update-activation-environment) + `systemctl --user restart breadd`, so
  the service — which autostarts at login before Hyprland exists — picks up
  HYPRLAND_INSTANCE_SIGNATURE and can drive the compositor.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Breadway 2026-06-17 14:47:58 +08:00
parent 95b2277525
commit cfe97a7c4f
3 changed files with 28 additions and 1 deletions

View file

@ -203,7 +203,12 @@ hl.on("hyprland.start", function()
"awww-daemon",
-- set the default wallpaper once the daemon is up (retry until ready)
[[bash -c 'until awww img /usr/share/backgrounds/bos/bread-background.png 2>/dev/null; do sleep 0.3; done']],
"breadd",
-- breadd runs as a systemd user service (~/.config/systemd/user/breadd.service,
-- enabled in skel). It autostarts at login but before Hyprland exists, so
-- push the compositor's Wayland env into the user manager and restart breadd
-- to pick it up — that's how it gets HYPRLAND_INSTANCE_SIGNATURE to talk to Hyprland.
"dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP HYPRLAND_INSTANCE_SIGNATURE",
"systemctl --user restart breadd",
"breadbar",
"breadbox-sync",
"hypridle",

View file

@ -0,0 +1,21 @@
[Unit]
Description=Bread Runtime Daemon
[Service]
Type=simple
# %h = the user's home — works for any account created from this skel.
ExecStart=%h/.local/bin/breadd
Restart=on-failure
RestartSec=2
UMask=0077
RuntimeDirectory=bread
RuntimeDirectoryMode=0700
# Keep /run/user/<uid>/bread across restarts so the shared theme.css that
# bread-theme writes there (and the daemon socket) survive a `restart breadd`.
RuntimeDirectoryPreserve=yes
KillSignal=SIGTERM
TimeoutStopSec=5
Environment=RUST_LOG=info
[Install]
WantedBy=default.target

View file

@ -0,0 +1 @@
../breadd.service