dotfiles/bin/rice-session
Sarthak 7f41cf7a82 replace the old dotfiles with the sakura line rice
The bare $HOME repo is gone. This is now the rice: install.sh, rice-*
scripts in bin/, configs in home/ linked into $HOME, theme templates, st
and the particle wallpaper. Clone to ~/rice and run install.sh.
2026-09-14 19:44:44 +05:30

81 lines
2.7 KiB
Bash
Executable file

#!/usr/bin/env bash
# rice-session - start everything the desktop needs, exactly once.
#
# rice-session start called by bspwmrc (safe to call again on bspwm restart)
# rice-session restart stop and start the rice daemons
#
# Output goes to ~/.local/state/rice/session.log.
set -u
state="${XDG_STATE_HOME:-$HOME/.local/state}/rice"
theme="$state/theme"
mkdir -p "$state"
exec >>"$state/session.log" 2>&1
running() { pgrep -u "$UID" -x "$1" >/dev/null; }
# start <process-name> <command...>: launch detached unless already running
launch() {
local name="$1"; shift
if running "$name"; then return 0; fi
command -v "$1" >/dev/null || { echo "missing: $1"; return 0; }
setsid -f "$@" >/dev/null 2>&1 && echo "started $name"
}
daemons=(xsettingsd picom sxhkd dunst greenclip flameshot eww polybar xidlehook xss-lock)
start() {
echo "== $(date -Is) session start"
systemctl --user import-environment DISPLAY XAUTHORITY XDG_CURRENT_DESKTOP PATH QT_QPA_PLATFORMTHEME GTK_THEME
dbus-update-activation-environment --systemd DISPLAY XAUTHORITY XDG_CURRENT_DESKTOP
[[ -d $theme ]] || rice-theme render
[[ -f $theme/Xresources ]] && xrdb -merge "$theme/Xresources"
# Daemons left over from another setup keep their old config files, so a
# bspwm restart alone would never switch them. Replace those.
local pid args
for pid in $(pgrep -u "$UID" -x sxhkd); do
args=$(tr '\0' ' ' < "/proc/$pid/cmdline" 2>/dev/null)
if [[ $args == *" -c "* && $args != *panel-keys* ]]; then kill "$pid" && echo "replaced: $args"; fi
done
for pid in $(pgrep -u "$UID" -x picom); do
args=$(tr '\0' ' ' < "/proc/$pid/cmdline" 2>/dev/null)
if [[ $args != *"$HOME/.config/picom/picom.conf"* ]]; then kill "$pid" && echo "replaced: $args"; fi
done
for _ in {1..20}; do
pgrep -u "$UID" -f 'sxhkd -c .*bspwm|picom --config .*bspwm' >/dev/null || break
sleep 0.1
done
pgrep -u "$UID" -x dunst >/dev/null && dunstctl reload
launch xsettingsd xsettingsd -c "$theme/xsettingsd.conf"
launch picom picom --config "$HOME/.config/picom/picom.conf"
launch sxhkd sxhkd
launch dunst dunst
launch greenclip greenclip daemon
launch flameshot flameshot
launch eww eww daemon
if ! pgrep -u "$UID" -f polkit-gnome-authentication-agent-1 >/dev/null; then
setsid -f /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 >/dev/null 2>&1
fi
rice-wallpaper restore
rice-bar start
rice-idle start
(sleep 2 && rice-hook post-boot) &
}
stop() {
echo "== $(date -Is) session stop"
for d in "${daemons[@]}"; do pkill -u "$UID" -x "$d"; done
}
case "${1:-start}" in
start) start ;;
stop) stop ;;
restart) stop; sleep 0.5; start ;;
*) echo "usage: rice-session start|stop|restart" >&2; exit 2 ;;
esac