From 7e768022e7330666ac6d9cd90491fc6966574f6e Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Thu, 19 Dec 2024 23:08:19 -0500 Subject: [PATCH] Add hotkeys and window management to sway. --- nix/configuration/roles/sway/default.nix | 104 +++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/nix/configuration/roles/sway/default.nix b/nix/configuration/roles/sway/default.nix index c90e860..1c99cc2 100644 --- a/nix/configuration/roles/sway/default.nix +++ b/nix/configuration/roles/sway/default.nix @@ -34,10 +34,114 @@ bindsym $mod+grave exec $term exec ${pkgs.alacritty}/bin/alacritty +include ${base-hotkeys} +include ${display-configs} +include ${window-management} include ~/.config/sway/config.d/*.conf include /etc/sway/config.d/* ''; }; + base-hotkeys = pkgs.writeTextFile { + name = "base-hotkeys.conf"; + text = '' +### Key bindings +# +# Basics: +# + # kill focused window + bindsym $mod+Shift+q kill + + # start your launcher + bindsym $mod+Return 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 normal + + # reload the configuration file + bindsym $mod+Shift+c reload + + # exit sway (logs you out of your Wayland session) + bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit' +''; + }; + display-configs = pkgs.writeTextFile { + name = "display-configs.conf"; + text = '' +output 'Unknown 0x095F 0x00000000' scale 1.5 +output 'BOE 0x095F Unknown' scale 1.5 +output 'BOE 0x0BCA Unknown' scale 1.5 +''; + }; + window-management = pkgs.writeTextFile { + name = "window-management.conf"; + text = '' +# +# 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+h 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 +# +# 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 + + # ditto, with arrow keys + 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" +''; + }; in { imports = [];