diff options
Diffstat (limited to 'sway')
| -rw-r--r-- | sway/config | 129 | ||||
| -rw-r--r-- | sway/config~ | 295 | ||||
| -rwxr-xr-x | sway/otherwindow~ | 60 | ||||
| -rwxr-xr-x | sway/switch.py | 101 | ||||
| -rwxr-xr-x | sway/switch.sh~ | 10 | ||||
| -rwxr-xr-x | sway/toEmacs.sh~ | 11 |
6 files changed, 167 insertions, 439 deletions
diff --git a/sway/config b/sway/config index d3f2c0a..beec2af 100644 --- a/sway/config +++ b/sway/config @@ -15,8 +15,6 @@ set $term foot # on the original workspace that the command was run on. set $menu exec wofi -G --show run,drun -exec swayrd 1>/dev/null 2>/dev/null -#this think doesnt stop when sway dies #general preferences focus_follows_mouse no @@ -27,9 +25,13 @@ input type:keyboard { repeat_rate 35 # xkb_file ~/.xkb/symbols/tmucustom.xkb xkb_options compose:ralt + #,grp:rctrl_toggle + xkb_numlock enabled +# xkb_layout us,us +# xkb_variant ,dvorak } input type:touchpad { - dwt enabled + dwt disabled tap enabled drag disabled drag_lock disabled @@ -38,16 +40,21 @@ input type:touchpad { } #specfically the little red one -#input "1739:52619:SYNA8006:00_06CB:CD8B_Mouse" { +input "1739:52619:SYNA8006:00_06CB:CD8B_Mouse" { # pointer_accel -1 # accel_profile flat # scroll_factor 0.25 -#} + dwt disabled +} +for_window [app_id=mpv] floating enable #start language switcher exec fcitx5 -d +#notifs +exec mako + #handle monitors properly exec_always bash -c 'if $(swaymsg -t get_outputs | grep -q -F "HDMI"); then swaymsg output eDP-1 disable; swaymsg output HDMI-A-1 enable; swaymsg output DP-2 enable; else swaymsg output eDP-1 enable; swaymsg output HDMI-A-1 disable; swaymsg output DP-2 disable; fi' @@ -73,45 +80,48 @@ output DP-2 { mode 1920x1080@60Hz } + +# +# Status Bar: +# +# Read `man 5 sway-bar` for more information about this section. +bar { + swaybar_command waybar +# position bottom +# height 20 + +# # When the status_command prints a new line to stdout, swaybar updates. +# # The default just shows the current date and time. +# # status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done + +# # colors { +# # statusline #ffffff +# # background #323232 +# # inactive_workspace #32323200 #32323200 #d0d0d0 +# # } +} + #theming stuff #titlebar_border_thickness 2 #no extra padding -titlebar_padding 2 +# titlebar_padding 2 #hide_edge_borders both #smart_borders on -default_border none -font monospace 10 workspace_layout stacking -focus_wrapping no +focus_wrapping yes show_marks on - - -### I want to be able to open a bunch of stuff quickly on startup and have it go the right place -for_window [app_id="foot" title="terminal"] { - move container to workspace T - mark "t" - fullscreen -} - - - -exec foot -T "terminal" -#bindsym $mod+Shift+s exec vivaldi-stable; exec brave; exec foot -T "terminal" - - -# things I want to toggle -#bindsym $mod+m [title="Messages for web"] scratchpad show -#bindsym $mod+n [class="Spotify"] scratchpad show - - -### dedicated terminal -# I want a permanent terminal that is fullscreened -bindsym $mod+Shift+Return exec ~/.config/sway/switch.sh - -### marking -# using sway-marker -bindsym $mod+bracketright exec sway-marker mark -bindsym $mod+bracketleft exec sway-marker goto +# start in normal state +default_border none +titlebar_border_thickness 0 +titlebar_padding 2 +font monospace 10 +# bar mode dock +# two modes, with and without metadata +bindsym $mod+g default_border none, titlebar_border_thickness 0, titlebar_padding 2, font monospace 10, bar mode dock +bindsym $mod+Shift+g default_border pixel 0, titlebar_border_thickness 0, titlebar_padding 0, font monospace 0, bar mode hide +# more jumping stuff +bindsym --to-code $mod+m exec sway-marker mark +bindsym --to-code $mod+Shift+m exec sway-marker goto ### Key bindings # @@ -127,13 +137,13 @@ bindsym $mod+Shift+q kill bindsym $mod+d exec $menu # get me to emacs -bindsym $mod+p exec ~/.config/sway/toEmacs.sh +bindsym $mod+Shift+p exec ~/.config/sway/toEmacs.sh # make a new emacs frame here -bindsym $mod+Shift+p exec emacsclient -c +bindsym $mod+p exec emacsclient -c --alternate-editor=emacs -# start throwaway browser -bindsym $mod+e exec MOZ_ENABLE_WAYLAND=1 BDK_BACKEND=wayland firefox +# start browser +bindsym $mod+e exec firefox # start quick-open menu #bindsym $mod+o exec $term --title quicklauncher -e bash -c 'read line; eval $line | less -r' @@ -168,6 +178,9 @@ bindsym XF86MonBrightnessUp exec brightnessctl -e s +10% bindsym $mod+grave exec systemctl suspend bindsym $mod+Escape exec sh -c 'swaylock -i /home/tmu/Pictures/capture/installsource.png -l -e -t --indicator-radius 100 & systemctl suspend' +bindsym $mod+w exec sh -c '/home/tmu/.config/sway/switch.py' + + # # Moving around: # @@ -177,11 +190,21 @@ bindsym $mod+Down focus down bindsym $mod+Up focus up bindsym $mod+Right focus right +bindsym $mod+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l 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 + +bindsym $mod+Shift+h move left +bindsym $mod+Shift+j move down +bindsym $mod+Shift+k move up +bindsym $mod+Shift+l move right # # Workspaces: # @@ -227,8 +250,8 @@ bindsym $mod+v splitv # Switch the current container between different layout styles bindsym $mod+s layout stacking #not sure I need, I'll leave it -bindsym $mod+w exec swayr switch-window -#bindsym $mod+e layout toggle split +bindsym $mod+y layout tabbed +bindsym $mod+t layout toggle split # Make the current focus fullscreen bindsym $mod+f fullscreen @@ -272,24 +295,4 @@ mode "resize" { } bindsym $mod+r mode "resize" -# -# Status Bar: -# -# Read `man 5 sway-bar` for more information about this section. -bar { - swaybar_command waybar -# position bottom -# height 20 - -# # When the status_command prints a new line to stdout, swaybar updates. -# # The default just shows the current date and time. -# # status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done - -# # colors { -# # statusline #ffffff -# # background #323232 -# # inactive_workspace #32323200 #32323200 #d0d0d0 -# # } -} - include /etc/sway/config.d/* diff --git a/sway/config~ b/sway/config~ deleted file mode 100644 index 80eeb46..0000000 --- a/sway/config~ +++ /dev/null @@ -1,295 +0,0 @@ -# Default config for sway -# -# Copy this to ~/.config/sway/config and edit it to your liking. -# -# Read `man 5 sway` for a complete reference. - -### Variables -# -# Logo key. Use Mod1 for Alt. -set $mod Mod4 -# Your preferred terminal emulator -set $term foot -# Your preferred application launcher -# Note: pass the final command to swaymsg so that the resulting window can be opened -# on the original workspace that the command was run on. -set $menu exec wofi -G --show run,drun - -exec swayrd 1>/dev/null 2>/dev/null -#this think doesnt stop when sway dies - -#general preferences -focus_follows_mouse no -seat * hide_cursor when-typing enable - -input type:keyboard { - repeat_delay 210 - repeat_rate 35 -# xkb_file ~/.xkb/symbols/tmucustom.xkb - xkb_options compose:ralt -} -input type:touchpad { - dwt enabled - tap enabled - drag disabled - drag_lock disabled - middle_emulation disabled - tap_button_map lrm -} - -#specfically the little red one -#input "1739:52619:SYNA8006:00_06CB:CD8B_Mouse" { -# pointer_accel -1 -# accel_profile flat -# scroll_factor 0.25 -#} - - -#start language switcher -exec fcitx5 -d - -#handle monitors properly -exec_always bash -c 'if $(swaymsg -t get_outputs | grep -q -F "HDMI"); then swaymsg output eDP-1 disable; swaymsg output HDMI-A-1 enable; swaymsg output DP-2 enable; else swaymsg output eDP-1 enable; swaymsg output HDMI-A-1 disable; swaymsg output DP-2 disable; fi' - -#get me a background -#exec_always bash -c 'sleep 0.5s ;systemctl --user start background.service' -exec_always bash -c 'setwallpaper ~/Pictures/capture/aesthetic/turquoiseCity.jpg' - -output HDMI-A-1 { -# background ~/Pictures/tree.jpg fill - pos 0 0 - mode 1920x1080@60Hz -} - -output eDP-1 { -# background ~/Pictures/tree.jpg fill - pos 0 0 - mode 1920x1080@60Hz -} - -output DP-2 { -# background ~/Pictures/tree.jpg fill - pos 1920 0 - mode 1920x1080@60Hz -} - -#theming stuff -#titlebar_border_thickness 2 -#no extra padding -titlebar_padding 2 -#hide_edge_borders both -#smart_borders on -default_border none -font monospace 10 -workspace_layout stacking -focus_wrapping no -show_marks on - - -### I want to be able to open a bunch of stuff quickly on startup and have it go the right place -for_window [app_id="foot" title="terminal"] { - move container to workspace T - mark "t" - fullscreen -} - - - -exec foot -T "terminal" -#bindsym $mod+Shift+s exec vivaldi-stable; exec brave; exec foot -T "terminal" - - -# things I want to toggle -#bindsym $mod+m [title="Messages for web"] scratchpad show -#bindsym $mod+n [class="Spotify"] scratchpad show - - -### dedicated terminal -# I want a permanent terminal that is fullscreened -bindsym $mod+Return exec ~/.config/sway/switch.sh - -### marking -# using sway-marker -bindsym $mod+bracketright exec sway-marker mark -bindsym $mod+bracketleft exec sway-marker goto - -### Key bindings -# -# Basics: -# -# Start a terminal -bindsym $mod+Shift+Return exec $term - -# Kill focused window -bindsym $mod+Shift+q kill - -# Start your launcher -bindsym $mod+d exec $menu - -# get me to emacs -bindsym $mod+p exec ~/.config/sway/toEmacs.sh - -# make a new emacs frame here -bindsym $mod+Shift+p exec emacsclient -c - -# start throwaway browser -bindsym $mod+e exec MOZ_ENABLE_WAYLAND=1 BDK_BACKEND=wayland firefox - -# start quick-open menu -#bindsym $mod+o exec $term --title quicklauncher -e bash -c 'read line; eval $line | less -r' -#for_window [title="quicklauncher"] floating enable, resize set 30 ppt 35 ppt, border pixel 2 - -#other window swap -bindsym $mod+o exec swaymsg [con_id=$(~/.config/sway/otherwindow f)] focus - -# 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 normal - -# Reload the configuration file -bindsym $mod+Shift+c reload - -# Exit sway (logs you out of your Wayland session) -bindsym $mod+Shift+e exit - -# media keys -bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5% && $refresh_i3status -bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5% && $refresh_i3status -bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status -bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status - -bindsym XF86MonBrightnessDown exec brightnessctl -e s 10%- -bindsym XF86MonBrightnessUp exec brightnessctl -e s +10% - -# other bindings -bindsym $mod+grave exec systemctl suspend -bindsym $mod+Escape exec sh -c 'swaylock -i /home/tmu/Pictures/capture/installsource.png -l -e -t --indicator-radius 100 & systemctl suspend' - -# -# Moving around: -# -# 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 -# -# 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 - -# move workspaces between monitors -bindsym $mod+Prior focus output left -bindsym $mod+Next focus output right -bindsym $mod+Shift+Prior move workspace output left -bindsym $mod+Shift+Next move workspace output right - -# 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 #not sure I need, I'll leave it -bindsym $mod+w exec swayr switch-window -#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 -# -# Scratchpad: -# -# Sway 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 10px - bindsym Down resize grow height 10px - bindsym Up resize shrink height 10px - bindsym Right resize grow width 10px - - # Return to default mode - bindsym Return mode "default" - bindsym Escape mode "default" -} -bindsym $mod+r mode "resize" - -# -# Status Bar: -# -# Read `man 5 sway-bar` for more information about this section. -bar { - swaybar_command waybar -# position bottom -# height 20 - -# # When the status_command prints a new line to stdout, swaybar updates. -# # The default just shows the current date and time. -# # status_command while date +'%Y-%m-%d %I:%M:%S %p'; do sleep 1; done - -# # colors { -# # statusline #ffffff -# # background #323232 -# # inactive_workspace #32323200 #32323200 #d0d0d0 -# # } -} - -include /etc/sway/config.d/* diff --git a/sway/otherwindow~ b/sway/otherwindow~ deleted file mode 100755 index 0a82e72..0000000 --- a/sway/otherwindow~ +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python3 - -import sys -import json -import subprocess - -direction=bool(sys.argv[1] == 't' or sys.argv[1] == 'T') -swaymsg = subprocess.run(['swaymsg', '-t', 'get_tree'], stdout=subprocess.PIPE) -data = json.loads(swaymsg.stdout) -current = data["nodes"][1]["current_workspace"] - -for output in data["nodes"]: - if "current_workspace" in output: - for workspace in output["nodes"]: - if workspace["name"] == output["current_workspace"]: - #maybe gives all the visible ones in multi monitor mode? - roi = workspace - break - -#workspace = int(data["nodes"][1]["current_workspace"])-1 -#roi = data["nodes"][1]["nodes"][workspace] -#print(roi) -temp = roi -windows = list() - -def getNextWindow(): - if focus < len(windows) - 1: - return focus+1 - else: - return 0 - -def getPrevWindow(): - if focus > 0: - return focus-1 - else: - return len(windows)-1 - -def makelist(temp): - for nodes in "floating_nodes", "nodes": - for i in range(len(temp[nodes])): - # print(temp[nodes][i]["name"]) - # print() - if temp[nodes][i]["name"] is None: - makelist(temp[nodes][i]) - elif temp[nodes][i]["visible"]: - windows.append(temp[nodes][i]) - -def focused(temp_win): - for i in range(len(temp_win)): - if temp_win[i]["focused"] == True: - return i - -makelist(temp) -#print(windows) -# print(len(windows)) -focus = focused(windows) -if str(sys.argv[1]) == 't' or str(sys.argv[1]) == 'T': - print(windows[getNextWindow()]["id"]) -else: - print(windows[getPrevWindow()]["id"]) diff --git a/sway/switch.py b/sway/switch.py new file mode 100755 index 0000000..479cf74 --- /dev/null +++ b/sway/switch.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import subprocess +import json +import re +import gi +gi.require_version('Gtk', '3.0') +from gi.repository import Gtk + +def parse_icon_name(app_name): + app_name = app_name.lower() + if app_name in icon_names: + return icon_names[app_name] + if app_name.endswith('telegram_desktop'): + return 'telegram' + if app_name.startswith('gimp'): + return 'gimp' + return app_name + +def get_icon(app_name): + icon_info = icon_theme.lookup_icon(parse_icon_name(app_name), 48, 0) + if icon_info == None: + print("Failed to get icon for: " + app_name) + # return icon_info.get_filename() if icon_info != None else default_icon_file + return default_icon_file + +def get_cons(tree): + if len(tree.get('nodes')) == 0 and len(tree.get('floating_nodes')) == 0 and (tree.get('type') == 'con' or tree.get('type') == 'floating_con'): + return [tree] + nodes = [] + for node in tree.get('floating_nodes'): + cons = get_cons(node) + nodes += cons + for node in tree.get('nodes'): + cons = get_cons(node) + nodes += cons + return nodes + +def show_wofi(windows): + # command = 'wofi -W 600 -L ' + str(len(windows)) + ' -I -d -i -b -k /dev/null -p "Window" 2>/dev/null' + command = 'wofi -G -L ' + str(len(windows)) + ' -I -d -i -b -p "Window" 2>/dev/null' + process = subprocess.Popen(command, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) + (result, _) = process.communicate(input='\n'.join(windows).encode()) + return result + + +def get_tree(): + sway_tree = subprocess.check_output(['swaymsg', '-rt', 'get_tree']) + return json.loads(sway_tree) + +def get_windows(): + cons = get_cons(get_tree()) + windows = [] + for con in cons: + name = con['name'] + if len(name) > 70: + name = name[:67]+"..." + app_id = con.get('app_id') + if app_id == None: + window_prop = con.get('window_properties') + if window_prop != None: + app_id = window_prop.get('instance') + + if app_id != None: + app_icon = get_icon(app_id) + else: + app_icon = default_icon_file + + # windows.append("img:id=" + str(con.get('id')) +":img:" + app_icon + ":text:" + name) + windows.append("img:id=" + str(con.get('id')) +":img:" + app_icon + ":text:" + app_id + ": " + name) + return windows + +def parse_selection(selection): + id_search = re.search('id=([0-9]*):', selection, re.IGNORECASE) + if id_search: + return id_search.group(1) + return None + +def switch_window(id): + command="swaymsg [con_id={}] focus".format(id) + process = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE) + process.communicate() + +if __name__ == "__main__": + icon_theme = Gtk.IconTheme.get_default() + default_icon = icon_theme.lookup_icon("preferences-system-windows", 48, 0) + default_icon_file = "" + if default_icon: + default_icon_file = default_icon.get_filename() + + icon_names = { + "code": "visual-studio-code", + "qt5ct": "preferences-desktop-theme" + } + + windows = get_windows() + selection = show_wofi(windows) + con_id = parse_selection(str(selection)) + if con_id: + switch_window(con_id) diff --git a/sway/switch.sh~ b/sway/switch.sh~ deleted file mode 100755 index ccd1bf7..0000000 --- a/sway/switch.sh~ +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -a="$(swaymsg -t get_tree | jq '.. | objects | select(.type == "con") | select(.focused == true) | .marks | index("t") != null')" - -#echo $a -if [ $a = "true" ]; then - swaymsg '[con_mark="l"] focus' -else - swaymsg 'mark --add "l"; [con_mark="t"] focus' -fi diff --git a/sway/toEmacs.sh~ b/sway/toEmacs.sh~ deleted file mode 100755 index 30d1dc3..0000000 --- a/sway/toEmacs.sh~ +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -#get be to emacs and back - -f=$(swaymsg -t get_tree | jq '.. | objects | select(.focused) | .app_id') - -if [ $f = "emacs" ]; then - swaymsg '[con_mark="E"] focus' -else - swaymsg 'mark --add "E", [app_id="emacs"] focus' -fi |
