~mil/sxmo-devel

This thread contains a patchset. You're looking at the original emails, but you may wish to use the patch review UI. Review patch
4 2

[PATCH sxmo-utils v2 1/4] sxmo_migrate.sh: added config management for i3_template.

Details
Message ID
<20250131214630.27532-1-hazardchem@disroot.org>
Sender timestamp
1738395886
DKIM signature
pass
Download raw message
Patch: +248 -0
i3_template: new file for default config of i3.

This is apart of the new wm i3 update.

Signed-off-by: hazardchem <hazardchem@disroot.org>
---

v2 - sent as one git send-email as per aren's request

 configs/appcfg/i3_template   | 237 +++++++++++++++++++++++++++++++++++
 scripts/core/sxmo_migrate.sh |  11 ++
 2 files changed, 248 insertions(+)
 create mode 100644 configs/appcfg/i3_template

diff --git a/configs/appcfg/i3_template b/configs/appcfg/i3_template
new file mode 100644
index 0000000..729a15a
--- /dev/null
+++ b/configs/appcfg/i3_template
@@ -0,0 +1,237 @@
# Default config for i3
#
# Copy this to ~/.config/i3/config and edit it to your liking.
#
# Please see https://i3wm.org/docs/userguide.html for a complete reference!

### Variables
#
# Logo key. Use Mod1 for Alt.
set $mod Mod4
# Home row direction keys, like vim
set $left h
set $down j
set $up k
set $right l
# Your preferred terminal emulator
set $term sxmo_terminal.sh
# Your preferred application launcher
# Note: pass the final command to i3msg so that the resulting window can be opened
# on the original workspace that the command was run on.
set $menu dmenu-run

font pango:Sxmo 40px

mode "menu" {
    # This is slower than remapping the keys using a keymap, but we don't need
    # to know the device names, so use it as a fallback so this functionality
    # keeps working if a deviceprofile doesn't exist.
    bindsym XF86PowerOff exec xdotool type Return
    bindsym XF86AudioRaiseVolume exec xdotool type Up
    bindsym XF86AudioLowerVolume exec xdotool type Down
}

### Key bindings
#
# Basics:
#

    # Start a terminal
    bindsym $mod+Return exec $term

    # Launch appmenu
    bindsym $mod+p exec sxmo_appmenu.sh
    bindsym $mod+Shift+p exec sxmo_appmenu.sh sys

    # Wm menu switcher
    bindsym $mod+i exec sxmo_wmmenu.sh windowswitcher

    # Kill focused window
    bindsym $mod+Shift+q kill

    # Start your launcher
    bindsym $mod+d exec $menu

    # Drag floating windows by holding down $mod and left mouse button.
    # Resize them with right mouse button + $mod.
    # Despite the name, also works for non-floating windows.
    # Change normal to inverse to use left mouse button for resizing and right
    # mouse button for dragging.
    floating_modifier $mod

    # Reload the configuration file
    bindsym $mod+Shift+c reload

    # Exit i3 (logs you out of your i3 session)
    bindsym $mod+Shift+e exec i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your i3 session.' -b 'Yes, exit i3' 'i3-msg exit'
#
# Moving around:
#
    # Move your focus around
    bindsym $mod+$left focus left
    bindsym $mod+$down focus down
    bindsym $mod+$up focus up
    bindsym $mod+$right focus right
    # Or use $mod+[up|down|left|right]
    bindsym $mod+Left focus left
    bindsym $mod+Down focus down
    bindsym $mod+Up focus up
    bindsym $mod+Right focus right

    # Move the focused window with the same, but add Shift
    bindsym $mod+Shift+$left move left
    bindsym $mod+Shift+$down move down
    bindsym $mod+Shift+$up move up
    bindsym $mod+Shift+$right move right
    # Ditto, with arrow keys
    bindsym $mod+Shift+Left move left
    bindsym $mod+Shift+Down move down
    bindsym $mod+Shift+Up move up
    bindsym $mod+Shift+Right move right

    # Move the focused workspace to output
    bindsym $mod+Shift+Ctrl+$left move workspace output left
    bindsym $mod+Shift+Ctrl+$down move workspace output down
    bindsym $mod+Shift+Ctrl+$up move workspace output up
    bindsym $mod+Shift+Ctrl+$right move workspace output right
#
# Workspaces:
#
    # Switch to workspace
    bindsym $mod+1 workspace number 1
    bindsym $mod+2 workspace number 2
    bindsym $mod+3 workspace number 3
    bindsym $mod+4 workspace number 4
    bindsym $mod+5 workspace number 5
    bindsym $mod+6 workspace number 6
    bindsym $mod+7 workspace number 7
    bindsym $mod+8 workspace number 8
    bindsym $mod+9 workspace number 9
    bindsym $mod+0 workspace number 10
    # Move focused container to workspace
    bindsym $mod+Shift+1 move container to workspace number 1
    bindsym $mod+Shift+2 move container to workspace number 2
    bindsym $mod+Shift+3 move container to workspace number 3
    bindsym $mod+Shift+4 move container to workspace number 4
    bindsym $mod+Shift+5 move container to workspace number 5
    bindsym $mod+Shift+6 move container to workspace number 6
    bindsym $mod+Shift+7 move container to workspace number 7
    bindsym $mod+Shift+8 move container to workspace number 8
    bindsym $mod+Shift+9 move container to workspace number 9
    bindsym $mod+Shift+0 move container to workspace number 10
    # Note: workspaces can have any name you want, not just numbers.
    # We just use 1-10 as the default.
#
# Layout stuff:
#
    # You can "split" the current object of your focus with
    # $mod+b or $mod+v, for horizontal and vertical splits
    # respectively.
    bindsym $mod+b splith
    bindsym $mod+v splitv

    # Switch the current container between different layout styles
    bindsym $mod+s layout stacking
    bindsym $mod+w layout tabbed
    bindsym $mod+e layout toggle split

    # Make the current focus fullscreen
    bindsym $mod+f fullscreen

    # Toggle the current focus between tiling and floating mode
    bindsym $mod+Shift+space floating toggle

    # Swap focus between the tiling area and the floating area
    bindsym $mod+space focus mode_toggle

    # Move focus to the parent container
    bindsym $mod+a focus parent

    # Manual locker
    bindsym $mod+g exec sxmo_state.sh set locker

    # Shutdown
    bindsym $mod+t exec sxmo_appmenu.sh power

#
# Scratchpad:
#
    # i3 has a "scratchpad", which is a bag of holding for windows.
    # You can send windows there and get them back later.

    # Move the currently focused window to the scratchpad
    bindsym $mod+Shift+minus move scratchpad

    # Show the next scratchpad window or hide the focused scratchpad window.
    # If there are multiple scratchpad windows, this command cycles through them.
    bindsym $mod+minus scratchpad show
#
# Resizing containers:
#
mode "resize" {
    # left will shrink the containers width
    # right will grow the containers width
    # up will shrink the containers height
    # down will grow the containers height
    bindsym $left resize shrink width 30px
    bindsym $down resize grow height 30px
    bindsym $up resize shrink height 30px
    bindsym $right resize grow width 30px

    # Ditto, with arrow keys
    bindsym Left resize shrink width 30px
    bindsym Down resize grow height 30px
    bindsym Up resize shrink height 30px
    bindsym Right resize grow width 30px

    # Return to default mode
    bindsym Return mode "default"
    bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"

#
# Status Bar:
#
# Read `man 5 i3bar` for more information about this section.
bar {
    position top

    # When the status_command prints a new line to stdout, i3bar updates.
    # The default just shows the current date and time.
    status_command sxmo_status_watch.sh -o plain
    font pango:Sxmo 40px

	padding 0 20px 8px 8px

    colors {
        statusline #ffffff
        background #323232
        inactive_workspace #323232 #323232 #ffffff

    }
}

for_window [class="pinentry-.*"] floating enable
for_window [class="st" title=".*sxmo/modem/.*/draft.txt.*"] resize set height 25
for_window [class="megapixels"] inhibit_idle open
for_window [class="ep[yr].*"] inhibit_idle visible
for_window [class="tabbed"] border pixel 0
no_focus [class="svkbd"]

smart_gaps on

# Need playerctl installed and running
bindsym XF86AudioPlay exec playerctl play-pause
bindsym XF86AudioStop exec playerctl stop
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous

bindsym XF86MonBrightnessUp exec sxmo_brightness.sh up
bindsym XF86MonBrightnessDown exec sxmo_brightness.sh down

bindsym Print exec sxmo_screenshot.sh

bindsym button2 kill

exec i3 --get-socketpath > "$XDG_RUNTIME_DIR"/sxmo.i3sock
diff --git a/scripts/core/sxmo_migrate.sh b/scripts/core/sxmo_migrate.sh
index fc722d6..0c48926 100755
--- a/scripts/core/sxmo_migrate.sh
+++ b/scripts/core/sxmo_migrate.sh
@@ -300,6 +300,10 @@ common() {
	defaultconfig "$(xdg_data_path sxmo/appcfg/fontconfig.conf)" "$XDG_CONFIG_HOME/fontconfig/conf.d/50-sxmo.conf" 644
}

i3() {
	defaultconfig "$(xdg_data_path sxmo/appcfg/i3_template)" "$XDG_CONFIG_HOME/sxmo/i3" 644
}

sway() {
	defaultconfig "$(xdg_data_path sxmo/appcfg/sway_template)" "$XDG_CONFIG_HOME/sxmo/sway" 644
	defaultconfig "$(xdg_data_path sxmo/appcfg/foot.ini)" "$XDG_CONFIG_HOME/foot/foot.ini" 644
@@ -347,12 +351,18 @@ for MODE in "$@"; do
	case "$MODE" in
		"interactive"|"all")
			common
			i3
			sway
			xorg
			checkhooks
			;;
		"sync"|"reset")
			case "$SXMO_WM" in
				i3)
					common
					i3
					xorg
					;;
				sway)
					common
					sway
@@ -363,6 +373,7 @@ for MODE in "$@"; do
					;;
				*)
					common
					i3
					sway
					xorg
					;;
-- 
2.48.1

[PATCH sxmo-utils v2 2/4] sxmo_bg: added i3 settings

Details
Message ID
<20250131214630.27532-2-hazardchem@disroot.org>
In-Reply-To
<20250131214630.27532-1-hazardchem@disroot.org> (view parent)
Sender timestamp
1738395887
DKIM signature
pass
Download raw message
Patch: +184 -20
sxmo_brun.sh: added i3 settings.

sxmo_dmenu.sh: added i3 settings.

sxmo_idle.sh: added i3 settings.

sxmo_killwindow.sh: added i3 setting.

sxmo_rotate.sh: added i3 settings.

sxmo_type.sh: added i3 setting.

sxmo_wm.sh: added i3 settings.

sxmo_wmmenu.sh: added i3 settings.

sxmo_hook_lisgdstart.sh: added i3 setting.

sxmo_hook_start.sh: added i3 setting.

sxmo_hook_unlock.sh: added i3 setting.

This is apart of the new wm i3 update. Origially these were seperate patches but
have been squashed

Signed-off-by: hazardchem <hazardchem@disroot.org>
---
 configs/default_hooks/sxmo_hook_lisgdstart.sh |  18 +--
 configs/default_hooks/sxmo_hook_start.sh      |   2 +-
 configs/default_hooks/sxmo_hook_unlock.sh     |   2 +-
 scripts/core/sxmo_bg.sh                       |   2 +-
 scripts/core/sxmo_brun.sh                     |   2 +-
 scripts/core/sxmo_dmenu.sh                    |   2 +-
 scripts/core/sxmo_idle.sh                     |   2 +-
 scripts/core/sxmo_killwindow.sh               |   1 +
 scripts/core/sxmo_rotate.sh                   |   4 +-
 scripts/core/sxmo_type.sh                     |   2 +-
 scripts/core/sxmo_wm.sh                       | 107 +++++++++++++++++-
 scripts/core/sxmo_wmmenu.sh                   |  60 +++++++++-
 12 files changed, 184 insertions(+), 20 deletions(-)

diff --git a/configs/default_hooks/sxmo_hook_lisgdstart.sh b/configs/default_hooks/sxmo_hook_lisgdstart.sh
index 812434a..8f4efce 100755
--- a/configs/default_hooks/sxmo_hook_lisgdstart.sh
+++ b/configs/default_hooks/sxmo_hook_lisgdstart.sh
@@ -10,14 +10,16 @@ LISGD_THRESHOLD="${SXMO_LISGD_THRESHOLD:-125}"
LISGD_THRESHOLD_PRESSED="${SXMO_LISGD_THRESHOLD_PRESSED:-60}"
LISGD_INPUT_DEVICE="${SXMO_LISGD_INPUT_DEVICE:-"/dev/input/by-path/first-touchscreen"}"

if [ dwm = "$SXMO_WM" ]; then
	case "$(xrandr | grep primary | cut -d' ' -f 5)" in
		right) orientation=1;;
		left) orientation=3;;
		inverted) orientation=2;;
		*) orientation=0;;
	esac
fi
case "$SXMO_WM" in
	dwm|i3)
		case "$(xrandr | grep primary | cut -d' ' -f 5)" in
			right) orientation=1;;
			left) orientation=3;;
			inverted) orientation=2;;
			*) orientation=0;;
		esac
	;;
esac

#-g format:
#   fingers,swipe,edge,distance,command
diff --git a/configs/default_hooks/sxmo_hook_start.sh b/configs/default_hooks/sxmo_hook_start.sh
index c6f300e..8fa5eef 100755
--- a/configs/default_hooks/sxmo_hook_start.sh
+++ b/configs/default_hooks/sxmo_hook_start.sh
@@ -54,7 +54,7 @@ case "$SXMO_WM" in
		superctl start sxmo_menumode_toggler
		superctl start bonsaid
		;;
	dwm)
	dwm|i3)
		superctl start dunst
		superctl start sxmo_xob

diff --git a/configs/default_hooks/sxmo_hook_unlock.sh b/configs/default_hooks/sxmo_hook_unlock.sh
index 48d8201..cca7543 100755
--- a/configs/default_hooks/sxmo_hook_unlock.sh
+++ b/configs/default_hooks/sxmo_hook_unlock.sh
@@ -28,7 +28,7 @@ else
					exec sxmo_state.sh idle
				"'
			;;
		dwm)
		dwm|i3)
			sxmo_jobs.sh start idle_locker sxmo_idle.sh -w \
				timeout "${SXMO_UNLOCK_IDLE_TIME:-120}" "sxmo_state.sh idle"
			;;
diff --git a/scripts/core/sxmo_bg.sh b/scripts/core/sxmo_bg.sh
index 38f4f14..a7dbd3a 100644
--- a/scripts/core/sxmo_bg.sh
+++ b/scripts/core/sxmo_bg.sh
@@ -3,7 +3,7 @@
bg="$(sxmo_hook_wallpaper.sh)"

case "$SXMO_WM" in
	dwm)
	dwm|i3)
		exec feh "${1+--bg-$1}" "$bg"
		;;
	sway)
diff --git a/scripts/core/sxmo_brun.sh b/scripts/core/sxmo_brun.sh
index 990fc87..30bb85b 100644
--- a/scripts/core/sxmo_brun.sh
+++ b/scripts/core/sxmo_brun.sh
@@ -12,7 +12,7 @@ if [ -z "$SXMO_MENU" ]; then
		sway)
			SXMO_MENU=bemenu
			;;
		dwm)
		dwm|i3)
			SXMO_MENU=dmenu
			;;
	esac
diff --git a/scripts/core/sxmo_dmenu.sh b/scripts/core/sxmo_dmenu.sh
index aef44ce..ddda27e 100755
--- a/scripts/core/sxmo_dmenu.sh
+++ b/scripts/core/sxmo_dmenu.sh
@@ -25,7 +25,7 @@ if [ -z "$SXMO_MENU" ]; then
		sway)
			SXMO_MENU=bemenu
			;;
		dwm)
		dwm|i3)
			SXMO_MENU=dmenu
			;;
	esac
diff --git a/scripts/core/sxmo_idle.sh b/scripts/core/sxmo_idle.sh
index 81fd166..a5de8c7 100755
--- a/scripts/core/sxmo_idle.sh
+++ b/scripts/core/sxmo_idle.sh
@@ -61,7 +61,7 @@ xorgidle() {
}

case "$SXMO_WM" in
	dwm)
	dwm|i3)
		xorgidle "$@"
		;;
	*)
diff --git a/scripts/core/sxmo_killwindow.sh b/scripts/core/sxmo_killwindow.sh
index 4c8257c..318aad2 100755
--- a/scripts/core/sxmo_killwindow.sh
+++ b/scripts/core/sxmo_killwindow.sh
@@ -7,6 +7,7 @@
. sxmo_common.sh

case "$SXMO_WM" in
	i3) i3-msg kill ;;
	sway) swaymsg kill;;
	dwm) xdotool windowkill "$(xdotool getactivewindow)";;
esac
diff --git a/scripts/core/sxmo_rotate.sh b/scripts/core/sxmo_rotate.sh
index f0bfc45..a31d839 100755
--- a/scripts/core/sxmo_rotate.sh
+++ b/scripts/core/sxmo_rotate.sh
@@ -116,7 +116,7 @@ isrotated() {
		sway)
			"swayisrotated"
			;;
		dwm)
		dwm|i3)
			"xorgisrotated"
			;;
	esac
@@ -137,7 +137,7 @@ case "$SXMO_WM" in
	sway)
		"sway$1" "$@"
		;;
	dwm)
	dwm|i3)
		"xorg$1" "$@"
		;;
esac
diff --git a/scripts/core/sxmo_type.sh b/scripts/core/sxmo_type.sh
index 851c981..ed4430f 100755
--- a/scripts/core/sxmo_type.sh
+++ b/scripts/core/sxmo_type.sh
@@ -39,7 +39,7 @@ case "$SXMO_WM" in
	sway)
		wtype "$@"
		;;
	dwm)
	dwm|i3)
		wtype_to_xdotool "$@"
		;;
esac
diff --git a/scripts/core/sxmo_wm.sh b/scripts/core/sxmo_wm.sh
index 67360ac..8abb8c7 100755
--- a/scripts/core/sxmo_wm.sh
+++ b/scripts/core/sxmo_wm.sh
@@ -6,6 +6,10 @@
# shellcheck source=scripts/core/sxmo_common.sh
. sxmo_common.sh

i3dpms() {
	xorgdpms "$@"
}

xorgdpms() {
	STATE=off
	if xset q | grep -q "Off: 3"; then
@@ -41,6 +45,10 @@ swaydpms() {

}

i3inputevent() {
	xorginputevent "$@"
}

xorginputevent() {
	if [ "$1" = "touchscreen" ]; then
		TOUCH_POINTER_ID="$SXMO_TOUCHSCREEN_ID"
@@ -100,6 +108,23 @@ swayinputevent() {
	fi
}

i3focusedwindow() {
	i3-msg -t get_tree | jq -r '
		recurse(.nodes[]) |
		select(.focused == true) |
		{
			app_id: (if .app_id != null then
					.app_id
				else
					.window_properties.class
				end),
			name: .name,
		} |
		select(.app_id != null and .name != null) |
		"app: " + .app_id, "title: " + .name
	'
}

xorgfocusedwindow() {
	activeoutput="$(xprop -id "$(xdotool getactivewindow 2>/dev/null)" 2>/dev/null)"
	printf %s "$activeoutput" | \
@@ -128,15 +153,33 @@ swayfocusedwindow() {
	'
}

i3paste () {
	xclip -o
}

swaypaste() {
	wl-paste
}

xorgpaste() {

	xclip -o
}

i3exec() {
	i3-msg exec -- "$@"
}

i3execwait() {
	PIDFILE="$(mktemp)"
	printf '"%s" & printf %%s "$!" > "%s"' "$*" "$PIDFILE" \
		| xargs -I{} i3-msg exec -- '{}'
	while : ; do
		sleep 0.5
		kill -0 "$(cat "$PIDFILE")" 2> /dev/null || break
	done
	rm "$PIDFILE"
}

swayexec() {
	swaymsg exec -- "$@"
}
@@ -166,6 +209,10 @@ xorgexecwait() {
	exec "$@"
}

i3togglelayout() {
	i3-msg layout toggle splith splitv tabbed
}

swaytogglelayout() {
	swaymsg layout toggle splith splitv tabbed
}
@@ -177,6 +224,10 @@ xorgtogglelayout() {
	xdotool key --clearmodifiers key Super+space
}

i3switchfocus() {
	sxmo_wmmenu.sh i3windowswitcher
}

swayswitchfocus() {
	sxmo_wmmenu.sh swaywindowswitcher
}
@@ -188,6 +239,32 @@ xorgswitchfocus() {
	xdotool key --clearmodifiers Super+x
}

_i3getcurrentworkspace() {
	i3-msg -t get_workspaces | jq -r '.[] | select(.focused==true).name'
}

_i3getnextworkspace() {
	value="$(($(_i3getcurrentworkspace)+1))"
	if [ "$value" -eq "$((${SXMO_WORKSPACE_WRAPPING:-4}+1))" ]; then
		printf 1
	else
		printf %s "$value"
	fi
}

_i3getpreviousworkspace() {
	value="$(($(_i3getcurrentworkspace)-1))"
	if [ "$value" -lt 1 ]; then
		if [ "${SXMO_WORKSPACE_WRAPPING:-4}" -ne 0 ]; then
			printf %s "${SXMO_WORKSPACE_WRAPPING:-4}"
		else
			return 1 # cant have previous workspace
		fi
	else
		printf %s "$value"
	fi
}

_swaygetcurrentworkspace() {
	swaymsg -t get_outputs  | \
		jq -r '.[] | select(.focused) | .current_workspace'
@@ -215,6 +292,10 @@ _swaygetpreviousworkspace() {
	fi
}

i3nextworkspace() {
	i3-msg "workspace $(_i3getnextworkspace)"
}

swaynextworkspace() {
	swaymsg "workspace $(_swaygetnextworkspace)"
}
@@ -226,6 +307,10 @@ xorgnextworkspace() {
	xdotool key --clearmodifiers Super+Shift+r
}

i3previousworkspace() {
	_i3getpreviousworkspace | xargs -r i3-msg -- workspace
}

swaypreviousworkspace() {
	_swaygetpreviousworkspace | xargs -r swaymsg -- workspace
}
@@ -237,6 +322,10 @@ xorgpreviousworkspace() {
	xdotool key --clearmodifiers Super+Shift+e
}

i3movenextworkspace() {
	i3-msg "move container to workspace $(_i3getnextworkspace)"
}

swaymovenextworkspace() {
	swaymsg "move container to workspace $(_swaygetnextworkspace)"
}
@@ -248,6 +337,10 @@ xorgmovenextworkspace() {
	xdotool key --clearmodifiers Super+r
}

i3movepreviousworkspace() {
	_i3getpreviousworkspace | xargs -r i3-msg -- move container to workspace
}

swaymovepreviousworkspace() {
	_swaygetpreviousworkspace | xargs -r swaymsg -- move container to workspace
}
@@ -259,6 +352,10 @@ xorgmovepreviousworkspace() {
	xdotool key --clearmodifiers Super+e
}

i3workspace() {
	i3-msg "workspace $1"
}

swayworkspace() {
	swaymsg "workspace $1"
}
@@ -270,6 +367,10 @@ xorgworkspace() {
	xdotool key --clearmodifiers "Super+$1"
}

i3moveworkspace() {
	i3-msg "move container to workspace $1"
}

swaymoveworkspace() {
	swaymsg "move container to workspace $1"
}
@@ -281,6 +382,10 @@ xorgmoveworkspace() {
	xdotool key --clearmodifiers "Super+shift+$1"
}

i3togglebar() {
	i3-msg bar mode toggle
}

swaytogglebar() {
	swaymsg bar mode toggle
}
diff --git a/scripts/core/sxmo_wmmenu.sh b/scripts/core/sxmo_wmmenu.sh
index 67f9f60..1073514 100755
--- a/scripts/core/sxmo_wmmenu.sh
+++ b/scripts/core/sxmo_wmmenu.sh
@@ -160,6 +160,60 @@ EOF
	done
}

i3windowswitcher() {
	SWITCHINDEX=0

	while : ; do
		FORMAT='"W:" + .workspace + " | " + .app_id + " - " + .name + " (" + .id + ")"'

		WINDOWSLIST="$(
			i3-msg -t get_tree |
				jq -r ".nodes[]
					| {output: .name, content: .nodes[]}
					| {output: .output, workspace: .content.name, apps: .content
					| ..
					| {id: .id?|tostring, name: .name?, app_id: .app_id?, shell: .shell?}
					| select(.app_id != null or .shell != null)}
					| {output: .output, workspace: .workspace,
						id: .apps.id, app_id: .apps.app_id, name: .apps.name }
					| $FORMAT
					| tostring
				"
		)"

		# Get the container ID from the node tree
		CHOICES="$(
			cat <<EOF
$icon_cls Close Menu
$icon_arl Previous Workspace
$icon_arr Next Workspace
$WINDOWSLIST
EOF
		)"

		PICKED="$(printf "%s" "$CHOICES" | dmenu -p "Switch menu" -I "$SWITCHINDEX")"
		SWITCHINDEX="$(($(printf "%s" "$CHOICES" | grep -nm1 "^$PICKED$" | cut -d: -f1) -1))"

		case "$PICKED" in
			""|"$icon_cls Close Menu")
				return
				;;
			"$icon_arr Next Workspace")
				sxmo_wm.sh nextworkspace
				;;
			"$icon_arl Previous Workspace")
				sxmo_wm.sh previousworkspace
				;;
			*)
				# Requires the actual `id` to be at the end and between parentheses
				CON_ID=${PICKED##*(}
				CON_ID=${CON_ID%)}
				i3-msg "[con_id=$CON_ID]" focus
				;;
		esac
	done
}

swaywindowswitcher() {
	SWITCHINDEX=0

@@ -218,5 +272,7 @@ if [ -n "$1" ]; then
	"$SXMO_WM$1"
	exit
fi

"$SXMO_WM"wmmenu
case "$SXMO_WM" in
	dwm|i3) dwmwmmenu ;;
	sway) swaywmmenu ;;
esac
-- 
2.48.1

[PATCH sxmo-utils v2 3/4] sxmo i3: Modifications to startup and wm switching scripts.

Details
Message ID
<20250131214630.27532-3-hazardchem@disroot.org>
In-Reply-To
<20250131214630.27532-1-hazardchem@disroot.org> (view parent)
Sender timestamp
1738395888
DKIM signature
pass
Download raw message
Patch: +110 -35
The following modifications were nessisary to allow another wm to exist in sxmo
ecosystem for starting the wm.

Added wm specific .desktop files that call the respective wm init scripts. This
path was decided after discussions on irc as the best path moving forward.

Modified contextmenu to set togglewm in power to call sxmo_togglewm.sh through
sxmo_power.sh.

Modified sxmo_power.sh to call sxmo_togglewm.sh instead of handling logic
internally.

sxmo_togglewm.sh: script to be called from sxmo_power.sh to facilitate switching
wms and will detect which wm you are currently running and will provide the
options of selecting the other options. Code was taken from sxmo_power.sh.

Added new desktop files to Makefile.

All these changes were needed together so they have been bundled.

Signed-off-by: hazardchem <hazardchem@disroot.org>
---
 Makefile                                      |  5 +-
 configs/applications/swmo.desktop             |  2 +-
 configs/applications/sxmo.desktop             |  2 +-
 configs/applications/sxmo_i3.desktop          |  5 ++
 .../default_hooks/sxmo_hook_contextmenu.sh    |  5 +-
 .../core/{sxmo_xinit.sh => sxmo_dwminit.sh}   |  0
 scripts/core/sxmo_i3init.sh                   | 63 +++++++++++++++++++
 scripts/core/sxmo_power.sh                    | 30 +--------
 .../core/{sxmo_winit.sh => sxmo_swayinit.sh}  |  0
 scripts/core/sxmo_togglewm.sh                 | 33 ++++++++++
 10 files changed, 110 insertions(+), 35 deletions(-)
 create mode 100644 configs/applications/sxmo_i3.desktop
 rename scripts/core/{sxmo_xinit.sh => sxmo_dwminit.sh} (100%)
 create mode 100755 scripts/core/sxmo_i3init.sh
 rename scripts/core/{sxmo_winit.sh => sxmo_swayinit.sh} (100%)
 create mode 100755 scripts/core/sxmo_togglewm.sh

diff --git a/Makefile b/Makefile
index 5534cfd..acfde9f 100644
--- a/Makefile
+++ b/Makefile
@@ -98,7 +98,7 @@ programs/%.test: programs/%.c
clean:
	rm -f ${PROGRAMS} ${DOCS} ${HTMLDOCS} programs/test_legacy_nerdfont programs/sxmo_status_led.test

install: install-sway install-dwm install-scripts install-docs
install: install-sway install-dwm install-i3 install-scripts install-docs

install-docs: $(DOCS)
	cd docs && find . -type f -name '*.7' -exec install -D -m 0644 "{}" "$(DESTDIR)$(MANDIR)/man7/{}" \; && find . -type f -name '*.1' -exec install -D -m 0644 "{}" "$(DESTDIR)$(MANDIR)/man1/{}" \; && cd ..
@@ -112,6 +112,9 @@ install-sway:
install-dwm:
	install -D -m 0644 -t $(DESTDIR)$(PREFIX)/share/xsessions/ configs/applications/sxmo.desktop

install-i3:
	install -D -m 0644 -t $(DESTDIR)$(PREFIX)/share/xsessions/ configs/applications/sxmo_i3.desktop

install-scripts: $(PROGRAMS)
	cd configs && find . -type f -not -exec install -D -m 0644 "{}" "$(DESTDIR)$(PREFIX)/share/sxmo/{}" \; && cd ..

diff --git a/configs/applications/swmo.desktop b/configs/applications/swmo.desktop
index b8be34f..01f679e 100644
--- a/configs/applications/swmo.desktop
+++ b/configs/applications/swmo.desktop
@@ -1,5 +1,5 @@
[Desktop Entry]
Name=Swmo
Exec=sxmo_winit.sh
Exec=sxmo_swayinit.sh
Terminal=false
Type=Application
diff --git a/configs/applications/sxmo.desktop b/configs/applications/sxmo.desktop
index 30ef7d6..4ff5f70 100644
--- a/configs/applications/sxmo.desktop
+++ b/configs/applications/sxmo.desktop
@@ -1,5 +1,5 @@
[Desktop Entry]
Name=Sxmo
Exec=sxmo_xinit.sh
Exec=sxmo_dwminit.sh
Terminal=false
Type=Application
diff --git a/configs/applications/sxmo_i3.desktop b/configs/applications/sxmo_i3.desktop
new file mode 100644
index 0000000..1fcfdb8
--- /dev/null
+++ b/configs/applications/sxmo_i3.desktop
@@ -0,0 +1,5 @@
[Desktop Entry]
Name=Sxmo
Exec=sxmo_i3init.sh
Terminal=false
Type=Application
diff --git a/configs/default_hooks/sxmo_hook_contextmenu.sh b/configs/default_hooks/sxmo_hook_contextmenu.sh
index 9c75275..2ffe846 100755
--- a/configs/default_hooks/sxmo_hook_contextmenu.sh
+++ b/configs/default_hooks/sxmo_hook_contextmenu.sh
@@ -115,10 +115,7 @@ case "$WMCLASS" in
			$icon_lck Lock               ^ 0 ^ sxmo_state.sh set lock
			$icon_lck Lock (Screen off)  ^ 0 ^ sxmo_state.sh set screenoff
			$icon_out Logout             ^ 0 ^ confirm Logout && sxmo_power.sh logout
			$([ -f "$(xdg_data_path xsessions/sxmo.desktop)" ] &&
				[ -f "$(xdg_data_path wayland-sessions/swmo.desktop)" ] &&
				echo "$icon_rol Toggle WM ^ 0 ^ confirm Toggle && sxmo_power.sh togglewm"
			)
			$icon_rol Toggle WM          ^ 0 ^ sxmo_power.sh togglewm
			$icon_rld Reboot             ^ 0 ^ confirm Reboot && sxmo_power.sh reboot
			$icon_pwr Poweroff           ^ 0 ^ confirm Poweroff && sxmo_power.sh poweroff
		"
diff --git a/scripts/core/sxmo_xinit.sh b/scripts/core/sxmo_dwminit.sh
similarity index 100%
rename from scripts/core/sxmo_xinit.sh
rename to scripts/core/sxmo_dwminit.sh
diff --git a/scripts/core/sxmo_i3init.sh b/scripts/core/sxmo_i3init.sh
new file mode 100755
index 0000000..d20de59
--- /dev/null
+++ b/scripts/core/sxmo_i3init.sh
@@ -0,0 +1,63 @@
#!/bin/sh
# SPDX-License-Identifier: AGPL-3.0-only
# Copyright 2022 Sxmo Contributors

# shellcheck source=scripts/core/sxmo_common.sh
. sxmo_common.sh

envvars() {
	export SXMO_WM=i3
	export XDG_CURRENT_DESKTOP=i3
	[ -z "$SXMO_MENU" ] && export SXMO_MENU=dmenu
	# shellcheck disable=SC2086
	command -v $SXMO_TERMINAL "" >/dev/null || export SXMO_TERMINAL="st"
	command -v "$KEYBOARD" >/dev/null || defaultkeyboard
	[ -z "$MOZ_USE_XINPUT2" ] && export MOZ_USE_XINPUT2=1
}

defaults() {
	xmodmap "$(xdg_data_path sxmo/appcfg/xmodmap_caps_esc)"
	xsetroot -mod 29 29 -fg '#0b3a4c' -bg '#082430'
	xset s off -dpms
	[ -e "$HOME"/.Xresources ] && xrdb -merge "$HOME"/.Xresources
	SCREENWIDTH=$(xrandr | grep "Screen 0" | cut -d" " -f 8)
	SCREENHEIGHT=$(xrandr | grep "Screen 0" | cut -d" " -f 10 | tr -d ",")
	if [ "$SCREENWIDTH" -lt 1024 ] || [ "$SCREENHEIGHT" -lt 768 ]; then
		gsettings set org.gtk.Settings.FileChooser window-size "($SCREENWIDTH,$((SCREENHEIGHT / 2)))"
	fi
}

defaultkeyboard() {
	if command -v svkbd-mobile-intl >/dev/null; then
		export KEYBOARD=svkbd-mobile-intl
	elif command -v svkbd-mobile-plain >/dev/null; then
		export KEYBOARD=svkbd-mobile-plain
	else
		#legacy
		export KEYBOARD=svkbd-sxmo
	fi
}

with_dbus() {
	echo "$DBUS_SESSION_BUS_ADDRESS" > "$XDG_RUNTIME_DIR"/dbus.bus
	# shellcheck source=configs/appcfg/xinit_template
	. "$XDG_CONFIG_HOME"/sxmo/xinit
	exec i3 -c "$XDG_CONFIG_HOME"/sxmo/i3
}

cleanup() {
	sxmo_jobs.sh stop all
	pkill svkbd
	case "$SXMO_MENU" in
		dmenu)
			pkill dmenu
			;;
		bemenu)
			pkill bemenu
			;;
	esac
	pkill superd
}

# shellcheck source=scripts/core/sxmo_init.sh
. sxmo_init.sh
diff --git a/scripts/core/sxmo_power.sh b/scripts/core/sxmo_power.sh
index b08d4c4..fc4ce2d 100755
--- a/scripts/core/sxmo_power.sh
+++ b/scripts/core/sxmo_power.sh
@@ -23,38 +23,12 @@ case "$1" in
	logout)
		sxmo_hook_logout.sh
		case "$SXMO_WM" in
			"i3") i3-msg exit ;;
			"sway") swaymsg exit ;;
			"dwm") pkill dwm ;;
		esac
		;;
	togglewm)
		case "$(realpath /var/lib/tinydm/default-session.desktop)" in
			*"swmo.desktop")
				if command -v dwm > /dev/null; then
					if doas tinydm-set-session -f -s "$(xdg_data_path xsessions/sxmo.desktop)"; then
						sxmo_hook_logout.sh
						swaymsg exit
					else
						sxmo_notify_user.sh "You do not have tinydm installed."
					fi
				else
					sxmo_notify_user.sh "You do not have dwm installed."
				fi
				;;
			*"sxmo.desktop")
				if command -v sway >/dev/null; then
					if doas tinydm-set-session -f -s "$(xdg_data_path wayland-sessions/swmo.desktop)"; then
						sxmo_hook_logout.sh
						pkill dwm
					else
						sxmo_notify_user.sh "You do not have tinydm installed."
					fi
				else
					sxmo_notify_user.sh "You do not have sway installed."
				fi
				;;
		esac
		;;
	togglewm) sxmo_togglewm.sh ;;
	*)
		usage
		exit 1
diff --git a/scripts/core/sxmo_winit.sh b/scripts/core/sxmo_swayinit.sh
similarity index 100%
rename from scripts/core/sxmo_winit.sh
rename to scripts/core/sxmo_swayinit.sh
diff --git a/scripts/core/sxmo_togglewm.sh b/scripts/core/sxmo_togglewm.sh
new file mode 100755
index 0000000..d699c9b
--- /dev/null
+++ b/scripts/core/sxmo_togglewm.sh
@@ -0,0 +1,33 @@
#!/bin/sh

# SPDX-License-Identifier: AGPL-3.0-only
# Copyright 2024 Sxmo Contributors
. sxmo_common.sh

switch_to() {
	file="$(xdg_data_path "$1")"
	if ! [ -e "$file" ]; then
		sxmo_notify_user.sh "Selected window manager not found, please install relevent sxmo-ui package."
		return
	fi

	if doas tinydm-set-session -f -s "$file"; then
		sxmo_power.sh logout
	else
		sxmo_notify_user.sh "tinydm failed to change the session"
	fi
}

CHOICE="$(grep -v "$SXMO_WM" <<-EOF | sxmo_dmenu.sh -p "Toggle WM"
	i3
	dwm
	sway
EOF
)" || exit

case "$CHOICE" in
	'Close Menu') exit ;;
	i3) switch_to "xsessions/sxmo_i3.desktop" ;;
	dwm) switch_to "xsessions/sxmo.desktop" ;;
	sway) switch_to "wayland_sessions/swmo.desktop" ;;
esac
-- 
2.48.1

[PATCH sxmo-utils v2 4/4] sxmo_init.sh: added i3 settings.

Details
Message ID
<20250131214630.27532-4-hazardchem@disroot.org>
In-Reply-To
<20250131214630.27532-1-hazardchem@disroot.org> (view parent)
Sender timestamp
1738395889
DKIM signature
pass
Download raw message
Patch: +16 -0
This is apart of the new wm i3 update.

Signed-off-by: hazardchem <hazardchem@disroot.org>
---
 configs/profile.d/sxmo_init.sh | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/configs/profile.d/sxmo_init.sh b/configs/profile.d/sxmo_init.sh
index 6dbd46c..1727f41 100644
--- a/configs/profile.d/sxmo_init.sh
+++ b/configs/profile.d/sxmo_init.sh
@@ -20,6 +20,16 @@ _sxmo_is_running() {
			return 0
		fi
	fi

	if [ -f "${_XDG_RUNTIME_DIR}"/sxmo.i3sock ]; then
		if I3SOCK="$(cat "${_XDG_RUNTIME_DIR}"/sxmo.i3sock)" i3-msg 2>/dev/null
		then
			printf "Detected the i3 environment\n" >&2
			export SXMO_WM=i3
			unset _XDG_RUNTIME_DIR
			return 0
		fi
	fi
	unset _XDG_RUNTIME_DIR

	if DISPLAY=:0 xrandr >/dev/null 2>&1; then
@@ -158,6 +168,12 @@ _sxmo_grab_session() {
				export SWAYSOCK
			fi
			;;
		i3)
			if [ -f "$XDG_RUNTIME_DIR"/sxmo.i3sock ]; then
				I3SOCK="$(cat "$XDG_RUNTIME_DIR"/sxmo.i3sock)"
				export I3SOCK
			fi
			;;
	esac
}

-- 
2.48.1

Re: [PATCH sxmo-utils v2 4/4] sxmo_init.sh: added i3 settings.

Details
Message ID
<D7GVT57Y10GJ.2Y4P5JGA4NBFU@willowbarraco.fr>
In-Reply-To
<20250131214630.27532-4-hazardchem@disroot.org> (view parent)
Sender timestamp
1738393556
DKIM signature
pass
Download raw message
Marked as superseded !
Reply to thread Export thread (mbox)