diff --git a/services/openrc/ollie.initd b/services/openrc/ollie.initd new file mode 100644 index 0000000..9c336d2 --- /dev/null +++ b/services/openrc/ollie.initd @@ -0,0 +1,58 @@ +#!/sbin/openrc-run + +description="Ollie agent runtime: superpowerd + elevate adapter" + +supervisor=supervise-daemon + +: ${DBUS_SESSION_BUS_ADDRESS:=$(cat /proc/$(pgrep -u $USER plasmashell | head -1)/environ 2>/dev/null | tr '\0' '\n' | sed -n 's/^DBUS_SESSION_BUS_ADDRESS=//p')} +: ${DBUS_SESSION_BUS_ADDRESS:="unix:path=${XDG_RUNTIME_DIR}/bus"} +export DBUS_SESSION_BUS_ADDRESS + +command="/home/lkn/.local/bin/superpowerd" +command_args="${SUPERPOWERD_OPTS}" + +output_log="${XDG_RUNTIME_DIR}/superpowerd/superpowerd.log" +error_log="${XDG_RUNTIME_DIR}/superpowerd/superpowerd.log" + +respawn_delay=3 +respawn_max=10 +respawn_period=60 + +: ${OLLIE_CFG_PATH:="${HOME}/.config/ollie"} +elevate_adapter="${OLLIE_CFG_PATH}/scripts/x/elevate-adapter-superpowerd" +elevate_sock="${OLLIE_ELEVATE_SOCKET:-${XDG_RUNTIME_DIR}/ollie/elevate.sock}" + +depend() { + need dbus + use ssh-agent +} + +start_pre() { + checkpath -o $USER -d "${XDG_RUNTIME_DIR}/superpowerd" +} + +start_post() { + # Give superpowerd a moment to bind its socket + sleep 0.5 + + # Start the elevate adapter + if [ -x "${elevate_adapter}" ] || [ -f "${elevate_adapter}" ]; then + ebegin "Starting elevate-adapter" + export OLLIE_ELEVATE_SOCKET="${elevate_sock}" + checkpath -o $USER -d "$(dirname ${elevate_sock})" + python3 "${elevate_adapter}" >/dev/null 2>&1 & + echo $! > "${XDG_RUNTIME_DIR}/superpowerd/elevate-adapter.pid" + eend 0 + fi +} + +stop_pre() { + # Kill the elevate adapter when stopping + if [ -f "${XDG_RUNTIME_DIR}/superpowerd/elevate-adapter.pid" ]; then + ebegin "Stopping elevate-adapter" + kill $(cat "${XDG_RUNTIME_DIR}/superpowerd/elevate-adapter.pid") 2>/dev/null + rm -f "${XDG_RUNTIME_DIR}/superpowerd/elevate-adapter.pid" + rm -f "${elevate_sock}" + eend 0 + fi +} diff --git a/services/systemd/ollie-elevate-adapter.service b/services/systemd/ollie-elevate-adapter.service new file mode 100644 index 0000000..ccd926a --- /dev/null +++ b/services/systemd/ollie-elevate-adapter.service @@ -0,0 +1,17 @@ +[Unit] +Description=Ollie elevate adapter (superpowerd bridge) +After=superpowerd.service +Requires=superpowerd.service +PartOf=superpowerd.service + +[Service] +Type=simple +ExecStartPre=/bin/mkdir -p %t/ollie +ExecStart=/usr/bin/python3 %h/.config/ollie/scripts/x/elevate-adapter-superpowerd +Environment=OLLIE_ELEVATE_SOCKET=%t/ollie/elevate.sock +Environment=XDG_RUNTIME_DIR=/run/user/%U +Restart=on-failure +RestartSec=3 + +[Install] +WantedBy=default.target diff --git a/services/systemd/superpowerd.service b/services/systemd/superpowerd.service new file mode 100644 index 0000000..fed03f5 --- /dev/null +++ b/services/systemd/superpowerd.service @@ -0,0 +1,16 @@ +[Unit] +Description=Superpowerd elevated execution daemon +After=dbus.service +Requires=dbus.service + +[Service] +Type=simple +ExecStart=%h/.local/bin/superpowerd +Restart=on-failure +RestartSec=3 +Environment=XDG_RUNTIME_DIR=/run/user/%U +RuntimeDirectory=superpowerd +LogsDirectory=superpowerd + +[Install] +WantedBy=default.target