.dotfiles/sway/bindings

354 lines
12 KiB
Bash

# vim: ft=sh
# TODO: get started with Distrobox. Once I have apps in a distro toolbox they can be added to the launcher with:
# distrobox-export --app <app>
# Attempt to remove as many rpm-ostree layers as possible and replace them with containerized versions.
# Also change terminal bindings to launch in a distro toolbox with the primary binding and the host in a secondary:
# - Research terminals that supprot "profiles"
# - Create "profiles" for each box that are visually distinct from the host
# - Set an auto-run command to: distrobox-enter --name <distro>
### Keybindings
## Vim-style navigation and movement
# Vim navigation between containers
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# Add Shift: move containers around display
bindsym $mod+Shift+h move left
bindsym $mod+Shift+j move down
bindsym $mod+Shift+k move up
bindsym $mod+Shift+l move right
# alternatively, you can use the cursor 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
## Home Row Left
# Index Stretch: todo.txt
bindsym $mod+i exec /usr/bin/uxterm -e "$HOME/.local/bin/todotxt-machine $HOME/nextcloud/todo.txt"
# Add Shift: resize mode ($mod + right-mouse is easier)
bindsym $mod+Shift+i mode "resize"
# Index: start wofi (launch applications)
bindsym $mod+u exec $HOME/scripts/wofi/wofi-drun.sh
# Add Shift: Alternative launcher for literal commands
bindsym $mod+Shift+u exec gmrun
# Middle: Host terminal (should be rarely used)
bindsym $mod+e exec gnome-terminal --profile=host --class=Host
# Add Shift: start a remote shell
# TODO: bindsym $mod+Shift+e exec $HOME/scripts/wofi/wofi-ssh-menu.sh
bindsym $mod+Shift+e exec $HOME/scripts/rofi/rofi-ssh-menu.sh
# Ring: start a file manager
#bindsym $mod+o exec xfce4-terminal -c /usr/bin/mc
bindsym $mod+o exec thunar
# Add Shift: VPN quick menu
# TODO: bindsym $mod+Shift+o exec $HOME/scripts/wofi/wofi-vpn.sh
bindsym $mod+Shift+o exec $HOME/scripts/rofi/rofi-openvpn.sh
# Pinky: Open Browser
bindsym $mod+a exec $HOME/.local/bin/firefox/firefox-bin
# Add Shift: Secondary Browser
bindsym $mod+Shift+a exec $HOME/scripts/send-to-kodi.sh
### Above Home Row: Distroboxes
# Index Stretch: Unassigned (Alpine?)
# Add Shift: Unassigned
# Index: Fedora ('toolbox' is a legacy naming convention)
bindsym $mod+p exec gnome-terminal --profile=toolbox --class=Distrobox-Toolbox
# Add Shift: Fedora Ephemeral
bindsym $mod+Shift+p exec gnome-terminal --profile=toolbox-ephemeral --class=Distrobox-Fedora-Ephemeral
# Middle: Debian (Testing)
bindsym $mod+period exec gnome-terminal --profile=debian12 --class=Distrobox-Debian12
# Add Shift: Debian (Testing) Ephemeral
bindsym $mod+Shift+period exec gnome-terminal --profile=debian12-ephemeral --class=Distrobox-Debian12-Ephemeral
# Ring: Ubuntu
bindsym $mod+comma exec gnome-terminal --profile=ubuntu --class=Distrobox-Ubuntu
# Add Shift: ubuntu Ephemeral
bindsym $mod+Shift+comma exec gnome-terminal --profile=ubuntu-ephemeral --class=Distrobox-Ubuntu-Ephemeral
# Pinky: ArchLinux
bindsym $mod+apostrophe exec gnome-terminal --profile=archlinux --class=Distrobox-ArchLinux
# Add Shift: ArchLinux Ephemeral
bindsym $mod+Shift+apostrophe exec gnome-terminal --profile=archlinux-ephemeral --class=Distrobox-ArchLinux-Ephemeral
## Below Home Row: Program hotkeys as applicable to workspace number
# Pinky Irssi
bindsym $mod+semicolon exec xterm -e /bin/bash -c "ssh -i ~/.ssh/no_pass jpm@john.me.tz -t 'screen -x irssi'"
#Add Shift: Discord
bindsym $mod+Shift+Semicolon exec flatpak run com.discordapp.Discord
# Ring: Email
bindsym $mod+q exec thunderbird
# Add Shift: Calendar (deprecated, TODO: figure out a new calendar)
#bindsym $mod+Shift+q exec orage -t
# Middle: Occupied at top; switch to container below
# Add Shift: Occupied at top; move focused container down
# Index: Occupied at top; switch to container above
# Add Shift: Occupied at top; move focused container up
# Index Stretch: Windows VNC
# TODO: I no longer have/need a windows or Mac machine to connect to. Replace with something useful
#bindsym $mod+x exec vncviewer 192.168.2.166 -p .vnc/passwd
# Add Shift: Mac VNC
#bindsym $mod+x exec vncviewer 192.168.2.167 -p .vnc/passwd
### Right Hand
## Home Row Right : Window/workspace management; power
# Index Stretch: set future splits to horizontal (to the side of the home key)
bindsym $mod+d split h
# Add Shift: Unassigned
#bindsym $mod+Shift+d
# Index : Occupied above; switch to container to the left
# Add Shift: Occupied above; move container to the left
# TODO: Middle: Switch to output to the left
# TODO: Add Shift: Move workspace to output to the left
# TODO: Ring: Switch to output to the right
# TODO: Add Shift: Move workspace to output to the right
# Pinky: toggle float/tile
bindsym $mod+s floating toggle
# Add Shift: Toggle stickying of floating container to the focused workspace
bindsym $mod+Shift+s sticky toggle
# Pinky Stretch: kill focused container
bindsym $mod+minus kill
# Add Shift: Power menu
bindsym $mod+underscore exec $HOME/scripts/sway/power-menu.sh
## Above Home Row: Change containers arrangement methods
# Index Stretch: Fullscreen
bindsym $mod+f fullscreen
# Add Shift: Unassigned
#bindsym $mod+Shift+f
# Index: split layout (toggles vertical/horizontal)
bindsym $mod+g layout toggle split
# Add Shift: Unassigned
#bindsym $mod+Shift+g
# Middle: tabbed layout
bindsym $mod+c layout tabbed
# Add Shift: Unassigned
#bindsym $mod+Shift+c
# Ring: stacked layout
bindsym $mod+r layout stacking
# Add Shift: Unassigned
#bindsym $mod+Shift+r
# Pinky: Occupied above; switch to container to the right
# Add Shift: Occupied above; move container to the right
# Pinky Stretch: Unassigned
#bindsym $mod+slash
# Add Shift: Unassigned
#bindsym $mod+Shift+slash
## Below Home Row: Preemplive split direction, focus switching
# Index Stretch: Rotate wallpaper
bindsym $mod+b exec $HOME/scripts/sway/rotate-wallpaper.sh
# Add Shift: Unassigned
#bindsym $mod+Shift+b
# Index: set future splits to vertical (beneath the home key, get it?)
bindsym $mod+m split v
# Add Shift: Unassigned
#bindsym $mod+Shift+m
# Middle: focus parent
bindsym $mod+w focus parent
# Add shift: focus child
bindsym $mod+Shift+w focus child
# Ring: Unassigned
#bindsym $mod+v
# Add Shift: Unassigned
#bindsym $mod+Shift+v
# Pinky: change between focuses
bindsym $mod+z focus mode_toggle
# Add Shift: Unassigned
#bindsym $mod+Shift+z
### Numberline: Workspace Swtching and Movement
# Grave: DIY version of Tilde pop-up terminal
bindsym $mod+Grave exec $HOME/scripts/sway/popup-term.pl
# Add Shift: Switch to Grave workspace
bindsym $mod+Shift+Grave move container to workspace grave
# Add Control: Move to Grave workspace
bindsym $mod+Control+Grave workspace grave
# Numbers: Switch to workspace
bindsym $mod+1 workspace 1
bindsym $mod+2 workspace 2
bindsym $mod+3 workspace 3
bindsym $mod+4 workspace 4
bindsym $mod+5 workspace 5
bindsym $mod+6 workspace 6
bindsym $mod+7 workspace 7
bindsym $mod+8 workspace 8
bindsym $mod+9 workspace 9
bindsym $mod+0 workspace 0
# Add Shift: Move focused container to workspace
bindsym $mod+Shift+1 move container to workspace 1
bindsym $mod+Shift+2 move container to workspace 2
bindsym $mod+Shift+3 move container to workspace 3
bindsym $mod+Shift+4 move container to workspace 4
bindsym $mod+Shift+5 move container to workspace 5
bindsym $mod+Shift+6 move container to workspace 6
bindsym $mod+Shift+7 move container to workspace 7
bindsym $mod+Shift+8 move container to workspace 8
bindsym $mod+Shift+9 move container to workspace 9
bindsym $mod+Shift+0 move container to workspace 0
## Add Control: Switch to overflow workspaces
bindsym $mod+Control+1 workspace C1
bindsym $mod+Control+2 workspace C2
bindsym $mod+Control+3 workspace C3
bindsym $mod+Control+4 workspace C4
bindsym $mod+Control+5 workspace C5
bindsym $mod+Control+6 workspace C6
bindsym $mod+Control+7 workspace C7
bindsym $mod+Control+8 workspace C8
bindsym $mod+Control+9 workspace C9
bindsym $mod+Control+0 workspace C0
## Add Control+Shift: Move container to overflow workspaces
bindsym $mod+Control+Shift+1 move container to workspace C1
bindsym $mod+Control+Shift+2 move container to workspace C2
bindsym $mod+Control+Shift+3 move container to workspace C3
bindsym $mod+Control+Shift+4 move container to workspace C4
bindsym $mod+Control+Shift+5 move container to workspace C5
bindsym $mod+Control+Shift+6 move container to workspace C6
bindsym $mod+Control+Shift+7 move container to workspace C7
bindsym $mod+Control+Shift+8 move container to workspace C8
bindsym $mod+Control+Shift+9 move container to workspace C9
bindsym $mod+Control+Shift+0 move container to workspace C0
# Square bracket left: Unassigned; pretty sure that this keycode is incorrect
#bindsym $mod+[
# Add Shift: Unassigned
#bindsym $mod+Shift+[
# Square bracket right: Unassigned; pretty sure that this keycode is incorrect
#bindsym $mod+]
# Add Shift: Unassigned
#bindsym $mod+Shift+]
# Backspace: switch between previous workspace
bindsym $mod+Backspace workspace back_and_forth
# Add Shift: move container between previous workspaces
bindsym $mod+Shift+Backspace move container to workspace back_and_forth
### Function row
# Escape: Lock
bindsym $mod+Escape exec /usr/bin/kill -SIGUSR1 `cat ${HOME}/.spool/sway-transparency`
# Add Shift: Blank screen
bindsym $mod+Shift+Escape exec /usr/bin/sh -c "sleep 1 ; /usr/bin/kill -SIGUSR1 $(pgrep swayidle)"
# F1: Mute Audio
bindsym $mod+F1 $HOME/scripts/audio/mute.sh
# F2: Volume down
#bindsym $mod+F2
# F3: Volume up
#bindsym $mod+F3
# F4: Mute microphone
#bindsym $mod+F4
# F5: Brightness down
bindsym $mod+F5 exec $HOME/scripts/thinkpad/blc.pl --notify --
# F6: Brightness up
bindsym $mod+F6 exec $HOME/scripts/thinkpad/blc.pl --notify ++
# F7: Switch between docked and detached
bindsym $mod+F7 $HOME/scripts/thinkpad/toggle_outputs.sh
# F8: Toggle wifi
#bindsym $mod+F8
# F9: Open settings
#bindsym $mod+F9
# F10: Open bluetooth devices
#bindsym $mod+F10
# F10: TODO: use actual PrtSc button
bindsym $mod+F10 exec grim
# Add Shift: capture region
#bindsym $mod+Shift+F10
# F11: Keyboard Backlight
bindsym $mod+F11 exec $HOME/scripts/thinkpad/kbd_backlight.pl 2> /dev/null
# F12: Unassigned
#bindsym $mod+F12
# Home+End: Increase Brightness
bindsym $mod+Home exec $HOME/scripts/thinkpad/blc.pl --notify ++
# Add Shift: Change Bigly
bindsym $mod+Shift+Home exec $HOME/scripts/thinkpad/blc.pl --notify += 10
# End: Reduce Brightness
bindsym $mod+End exec $HOME/scripts/thinkpad/blc.pl --notify --
# Add Shift: Change Bigly
bindsym $mod+Shift+End exec $HOME/scripts/thinkpad/blc.pl --notify -= 10
# Insert: Unassigned
#bindsym $mod+Insert
# Delete: Unassigned
#bindsym $mod+Delete
# Miscellaneous
# Tab: Quick change. Shows all windows on all pages by name in wofi
bindsym $mod+tab exec $HOME/scripts/wofi/alt-tab.py
# Resize Mode (you can also use the mouse for that): Entered with $mod+i
mode "resize" {
# Vim direction key to modify the size of containers
# D: shrink width
bindsym d resize shrink width 10 px or 10 ppt
# N: grow width
bindsym n resize grow width 10 px or 10 ppt
# H: shrink height
bindsym h resize shrink height 10 px or 10 ppt
# T: grow height
bindsym t resize grow height 10 px or 10 ppt
# Same system with half of the effect for more granularity with the arrow keys
bindsym Left resize shrink width 5 px or 5 ppt
bindsym Down resize grow height 5 px or 5 ppt
bindsym Up resize shrink height 5 px or 5 ppt
bindsym Right resize grow width 5 px or 5 ppt
# Switch back to normal mode: Enter, Escape or Q
bindsym q mode "default"
bindsym Return mode "default"
bindsym Escape mode "default"
}