~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
6 2

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

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

This is a part 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
v3 - fixed bugs in sxmo_togglewm.sh and removed padding from i3_template. These
were noted from aren via irc.

 configs/appcfg/i3_template   | 235 +++++++++++++++++++++++++++++++++++
 scripts/core/sxmo_migrate.sh |  11 ++
 2 files changed, 246 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..bf80b61
--- /dev/null
+++ b/configs/appcfg/i3_template
@@ -0,0 +1,235 @@
# 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

    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 v3 2/4] sxmo_bg: added i3 settings

Details
Message ID
<20250131234702.6781-2-hazardchem@disroot.org>
In-Reply-To
<20250131234702.6781-1-hazardchem@disroot.org> (view parent)
Sender timestamp
1738403127
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 a part 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 v3 3/4] sxmo i3: Modifications to startup and wm switching scripts.

Details
Message ID
<20250131234702.6781-3-hazardchem@disroot.org>
In-Reply-To
<20250131234702.6781-1-hazardchem@disroot.org> (view parent)
Sender timestamp
1738403128
DKIM signature
pass
Download raw message
Patch: +111 -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                 | 34 ++++++++++
 10 files changed, 111 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..1fa7507
--- /dev/null
+++ b/scripts/core/sxmo_togglewm.sh
@@ -0,0 +1,34 @@
#!/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
	Close Menu
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 v3 4/4] sxmo_init.sh: added i3 settings.

Details
Message ID
<20250131234702.6781-4-hazardchem@disroot.org>
In-Reply-To
<20250131234702.6781-1-hazardchem@disroot.org> (view parent)
Sender timestamp
1738403129
DKIM signature
pass
Download raw message
Patch: +16 -0
This is a part 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
Details
Message ID
<ezoiunbkgarocmsr5csvwi4cxvktnvrkadqtugyr4rgoeplxb5@q6tql37zf7t2>
In-Reply-To
<20250131234702.6781-1-hazardchem@disroot.org> (view parent)
Sender timestamp
1740923164
DKIM signature
pass
Download raw message
This series has had plenty of time for comments, I've applied it with a
fix to change "wayland_sessions" to "wayland-sessions" since that caused
using the togglewm script to break when switching to sway.

Possibly also a couple of fixes to make shellcheck happy, I should've
taken better notes.

I expect there will be some polishing to do, some things I noticed:
 - it only works with bonsai (this was already known)
 - svkbd is a floating window, should onboard it be the default? I
   couldn't get onboard to work right either, it kept segfaulting.
 - the status bar is taller and has a larger font than dwm / sway

To git.sr.ht:~mil/sxmo-utils
   4aed78b5..ee20d323  ee20d323 -> master

On Sat, Feb 01, 2025 at 09:45:26AM +1000, hazardchem wrote:
> i3_template: new file for default config of i3.
> 
> This is a part 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
> v3 - fixed bugs in sxmo_togglewm.sh and removed padding from i3_template. These
> were noted from aren via irc.
> 
>  configs/appcfg/i3_template   | 235 +++++++++++++++++++++++++++++++++++
>  scripts/core/sxmo_migrate.sh |  11 ++
>  2 files changed, 246 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..bf80b61
> --- /dev/null
> +++ b/configs/appcfg/i3_template
> @@ -0,0 +1,235 @@
> +# 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
> +
> +    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
> 
Details
Message ID
<Z8Vi8ORSqqGr0vuX@oneplus-enchilada>
In-Reply-To
<ezoiunbkgarocmsr5csvwi4cxvktnvrkadqtugyr4rgoeplxb5@q6tql37zf7t2> (view parent)
Sender timestamp
1741025168
DKIM signature
pass
Download raw message
On Sun, Mar 02, 2025 at 01:46:04PM -0500, Aren wrote:
> This series has had plenty of time for comments, I've applied it with a
> fix to change "wayland_sessions" to "wayland-sessions" since that caused
> using the togglewm script to break when switching to sway.

That must have slipped through, apologies Aren.

> Possibly also a couple of fixes to make shellcheck happy, I should've
> taken better notes.
> 
> I expect there will be some polishing to do, some things I noticed:
>  - it only works with bonsai (this was already known)
>  - svkbd is a floating window, should onboard it be the default? I
>    couldn't get onboard to work right either, it kept segfaulting.

Svkbd is a faster keyboard that has.no issues running on i3. As long as the -d
switch is used.

What would be the best way to ensure that this switch is used?

I'm thinking now that maybe a case statement in sxmo_keyboard.sh that has a check
for i3 running and svkbd is set as the keyboard and call the following:

` isopen || eval "$KEYBOARD" -d $KEYBOARD_ARGS >> "${XDG_STATE_HOME:-$HOME}"/sxmo.log 2>&1 &`

>  - the status bar is taller and has a larger font than dwm / sway

That could be a my bad as it might have slipped through from my config. I'll
send a patch to fix that.
Details
Message ID
<23qpnvzhpjggtiopjjbv2imcci45nj5taqtva54l6366bsdtgs@mnsz5vxqopwu>
In-Reply-To
<Z8Vi8ORSqqGr0vuX@oneplus-enchilada> (view parent)
Sender timestamp
1741026110
DKIM signature
pass
Download raw message
On Mon, Mar 03, 2025 at 06:06:08PM +1000, hazardchem wrote:
> On Sun, Mar 02, 2025 at 01:46:04PM -0500, Aren wrote:
> > This series has had plenty of time for comments, I've applied it with a
> > fix to change "wayland_sessions" to "wayland-sessions" since that caused
> > using the togglewm script to break when switching to sway.
> 
> That must have slipped through, apologies Aren.
> 
> > Possibly also a couple of fixes to make shellcheck happy, I should've
> > taken better notes.
> > 
> > I expect there will be some polishing to do, some things I noticed:
> >  - it only works with bonsai (this was already known)
> >  - svkbd is a floating window, should onboard it be the default? I
> >    couldn't get onboard to work right either, it kept segfaulting.
> 
> Svkbd is a faster keyboard that has.no issues running on i3. As long as the -d
> switch is used.
> 
> What would be the best way to ensure that this switch is used?
> 
> I'm thinking now that maybe a case statement in sxmo_keyboard.sh that has a check
> for i3 running and svkbd is set as the keyboard and call the following:
> 
> ` isopen || eval "$KEYBOARD" -d $KEYBOARD_ARGS >> "${XDG_STATE_HOME:-$HOME}"/sxmo.log 2>&1 &`

Humm, that'll break if someone changes $KEYBOARD. Setting $KEYBOARD_ARGS
in i3init would be a little better, but would have the same issue if
someone sets $KEYBOARD but not $KEYBOARD_ARGS.

Maybe we should launch the keyboard through sxmo_jobs.sh? Then we don't
have to pgrep for it, and we can combine $KEYBOARD with $KEYBOARD_ARGS.
Then all that would let us initialize $KEYBOARD to `svkbd -d` in i3init.

pgrep / pidof are good to avoid anyway -- there's a lot of edge cases
that come along with scanning /proc. Off-topic now, it looks like
there's only a handful of them left, it might be worthwhile to go
through them at some point to see if others can also be replaced.

> >  - the status bar is taller and has a larger font than dwm / sway
> 
> That could be a my bad as it might have slipped through from my config. I'll
> send a patch to fix that.
Reply to thread Export thread (mbox)