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
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>
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.
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.