summarylogtreecommitdiffstats
path: root/0005-Add-hook-to-manage-services.patch
diff options
context:
space:
mode:
Diffstat (limited to '0005-Add-hook-to-manage-services.patch')
-rw-r--r--0005-Add-hook-to-manage-services.patch208
1 files changed, 208 insertions, 0 deletions
diff --git a/0005-Add-hook-to-manage-services.patch b/0005-Add-hook-to-manage-services.patch
new file mode 100644
index 000000000000..73aaf568ce36
--- /dev/null
+++ b/0005-Add-hook-to-manage-services.patch
@@ -0,0 +1,208 @@
+From e6c38034a069ad6e0e451d8bf7418e6b743d6575 Mon Sep 17 00:00:00 2001
+From: Aren Moynihan <aren@peacevolution.org>
+Date: Fri, 13 Oct 2023 17:23:28 -0400
+Subject: [PATCH sxmo-utils 5/6] Add hook to manage services
+
+This adds a layer of abstraction over superctl and systemctl, and
+possibly others like s6 if someone wants to add that in the future. The
+command format is mostly the same as it was with superd, but this allows
+us to hide the differences between service managers.
+---
+ .../default_hooks/sxmo_hook_contextmenu.sh | 12 ++--
+ configs/default_hooks/sxmo_hook_service.sh | 65 +++++++++++++++++++
+ configs/default_hooks/sxmo_hook_start.sh | 7 +-
+ scripts/core/sxmo_appmenu.sh | 4 +-
+ scripts/core/sxmo_common.sh | 1 +
+ scripts/core/sxmo_winit.sh | 1 +
+ scripts/core/sxmo_xinit.sh | 1 +
+ 7 files changed, 75 insertions(+), 16 deletions(-)
+ create mode 100644 configs/default_hooks/sxmo_hook_service.sh
+
+diff --git a/configs/default_hooks/sxmo_hook_contextmenu.sh b/configs/default_hooks/sxmo_hook_contextmenu.sh
+index 2445c2f..e0a8953 100755
+--- a/configs/default_hooks/sxmo_hook_contextmenu.sh
++++ b/configs/default_hooks/sxmo_hook_contextmenu.sh
+@@ -14,10 +14,6 @@
+ XPROPOUT="$(sxmo_wm.sh focusedwindow)"
+ WMCLASS="${1:-$(printf %s "$XPROPOUT" | grep app: | cut -d" " -f2- | tr '[:upper:]' '[:lower:]')}"
+
+-superd_service_isrunning() {
+- superctl status "$1" | grep -q started
+-}
+-
+ sxmo_service_isrunning() {
+ sxmo_jobs.sh running "$1" > /dev/null
+ }
+@@ -44,7 +40,7 @@ case "$WMCLASS" in
+ CHOICES="
+ $icon_plk Modem PIN ^ 0 ^ sxmo_unlocksim.sh
+ $icon_phn Modem Monitor $(
+- superd_service_isrunning sxmo_modemmonitor &&
++ sxmo_hook_service.sh is-active sxmo_modemmonitor &&
+ printf %b "$icon_ton ^ 1 ^ superctl stop sxmo_modemmonitor" ||
+ printf %b "$icon_tof ^ 1 ^ superctl start sxmo_modemmonitor"
+ ) && sxmo_hook_statusbar.sh modem_monitor
+@@ -72,9 +68,9 @@ case "$WMCLASS" in
+ printf %b "$icon_tof ^ 1 ^ sxmo_wm.sh inputevent stylus on"
+ )
+ $icon_cfg Gestures $(
+- superd_service_isrunning "sxmo_hook_lisgd" &&
++ sxmo_hook_service.sh is-active "sxmo_hook_lisgd" &&
+ printf "%s" "$icon_ton" || printf "%s" "$icon_tof"
+- ) ^ 1 ^ supertoggle_daemon 'sxmo_hook_lisgd' && (rm $XDG_CACHE_HOME/sxmo/sxmo.nogesture 2>/dev/null || touch $XDG_CACHE_HOME/sxmo/sxmo.nogesture)
++ ) ^ 1 ^ toggle_service 'sxmo_hook_lisgd' && (rm $XDG_CACHE_HOME/sxmo/sxmo.nogesture 2>/dev/null || touch $XDG_CACHE_HOME/sxmo/sxmo.nogesture)
+ $icon_cfg Toggle Bar ^ 0 ^ sxmo_wm.sh togglebar
+ $icon_bth Bluetooth $(
+ rfkill list bluetooth | grep -q "yes" &&
+@@ -642,7 +638,7 @@ case "$WMCLASS" in
+ ;;
+ org.gnome.maps)
+ CHOICES="
+- $icon_gps Toggle Geoclue ^ 0 ^ superctl status geoclue-agent |grep started >/dev/null && superctl stop geoclue-agent || superctl start geoclue-agent
++ $icon_gps Toggle Geoclue ^ 0 ^ toggle_service geoclue-agent
+ $icon_zmi Zoom in ^ 1 ^ sxmo_type -M ctrl =
+ $icon_zmo Zoom out ^ 1 ^ sxmo_type -M ctrl -k minus
+ $icon_fnd Explore POI ^ 0 ^ sxmo_type -M ctrl -M Shift F
+diff --git a/configs/default_hooks/sxmo_hook_service.sh b/configs/default_hooks/sxmo_hook_service.sh
+new file mode 100644
+index 0000000..18ae8b3
+--- /dev/null
++++ b/configs/default_hooks/sxmo_hook_service.sh
+@@ -0,0 +1,65 @@
++#! /bin/sh
++# SPDX-License-Identifier: AGPL-3.0-only
++# Copyright 2023 Sxmo Contributors
++
++# include common definitions
++# shellcheck source=scripts/core/sxmo_common.sh
++. sxmo_common.sh
++# prevent infinite recursion
++unalias superd
++
++set -e
++
++if [ -n "$SXMO_SERVICE_MANAGER" ]; then
++ MANAGER="$SXMO_SERVICE_MANAGER"
++elif command -v systemctl > /dev/null; then
++ MANAGER=systemd
++elif command -v superd > /dev/null; then
++ MANAGER=superd
++fi
++
++case "$1" in
++ restart|start|status|stop|is-active|sxmo_starting|sxmo_stopping) ;;
++ *)
++ cat <<EOF
++sxmo_hook_service.sh is a thin wrapper around the superctl / systemctl commands
++that provides a single interface for the rest of the sxmo to use.
++
++Usage: sxmo_hook_service.sh <restart|start|status|stop|is-active> [args]
++
++Unknown subcommand: $1
++EOF
++ exit 127
++ ;;
++esac
++
++case "$MANAGER" in
++ superd)
++ case "$1" in
++ sxmo_starting)
++ sxmo_jobs.sh start daemon_manager superd
++ # wait for superd to start
++ while ! superctl status > /dev/null 2>&1; do
++ sleep 0.5
++ done
++ ;;
++ sxmo_stopping) ;;
++ "is-active") superctl status "$1" | grep -q started ;;
++ *) superctl "$@" ;;
++ esac
++ ;;
++ systemd)
++ # systemd waits for processes to start, run start asyncrounously
++ # to prevent hanging the start hook
++ case "$1" in
++ sxmo_starting)
++ printenv | cut -d '=' -f 1 | xargs systemctl --user import-environment
++ ;;
++ sxmo_stopping)
++ systemctl --user unset-environment \
++ WAYLAND_DISPLAY DISPLAY SXMO_WM XDG_CURRENT_DESKTOP
++ ;;
++ start) systemctl --user "$@" & ;;
++ *) systemctl --user "$@" ;;
++ esac
++esac
+diff --git a/configs/default_hooks/sxmo_hook_start.sh b/configs/default_hooks/sxmo_hook_start.sh
+index 35bc59a..1a79d63 100755
+--- a/configs/default_hooks/sxmo_hook_start.sh
++++ b/configs/default_hooks/sxmo_hook_start.sh
+@@ -9,12 +9,7 @@
+ # Create xdg user directories, such as ~/Pictures
+ xdg-user-dirs-update
+
+-sxmo_jobs.sh start daemon_manager superd
+-
+-# let time to superd to start correctly
+-while ! superctl status > /dev/null 2>&1; do
+- sleep 0.5
+-done
++sxmo_hook_service.sh sxmo_starting
+
+ # Not dangerous if "locker" isn't an available state
+ sxmo_state.sh set locker
+diff --git a/scripts/core/sxmo_appmenu.sh b/scripts/core/sxmo_appmenu.sh
+index 10c2f51..a7c7733 100755
+--- a/scripts/core/sxmo_appmenu.sh
++++ b/scripts/core/sxmo_appmenu.sh
+@@ -18,8 +18,8 @@ confirm() {
+ fi
+ }
+
+-supertoggle_daemon() {
+- if superctl status "$1" | grep -q started; then
++toggle_service() {
++ if sxmo_hook_service.sh is-active "$1"; then
+ superctl stop "$1"
+ sxmo_notify_user.sh "$1 Stopped"
+ else
+diff --git a/scripts/core/sxmo_common.sh b/scripts/core/sxmo_common.sh
+index 4eb0a1f..b6cabf9 100755
+--- a/scripts/core/sxmo_common.sh
++++ b/scripts/core/sxmo_common.sh
+@@ -16,6 +16,7 @@ command -v shopt > /dev/null && shopt -s expand_aliases
+ alias dmenu="sxmo_dmenu.sh"
+ alias bemenu="sxmo_dmenu.sh"
+ alias jq="gojq" # better performances
++alias superctl=sxmo_hook_service.sh
+
+ if ! command -v sxmobar > /dev/null; then
+ sxmobar() {
+diff --git a/scripts/core/sxmo_winit.sh b/scripts/core/sxmo_winit.sh
+index 220daac..a8c381f 100755
+--- a/scripts/core/sxmo_winit.sh
++++ b/scripts/core/sxmo_winit.sh
+@@ -23,6 +23,7 @@ with_dbus() {
+ }
+
+ cleanup() {
++ sxmo_hook_service.sh sxmo_stopping
+ sxmo_jobs.sh stop all
+ pkill bemenu
+ pkill wvkbd
+diff --git a/scripts/core/sxmo_xinit.sh b/scripts/core/sxmo_xinit.sh
+index 9a491ba..f490aa4 100755
+--- a/scripts/core/sxmo_xinit.sh
++++ b/scripts/core/sxmo_xinit.sh
+@@ -45,6 +45,7 @@ with_dbus() {
+ }
+
+ cleanup() {
++ sxmo_hook_service.sh sxmo_stopping
+ sxmo_jobs.sh stop all
+ pkill svkbd
+ pkill dmenu
+--
+2.43.0
+