From 9e7b380bba97305f0e7c43660c8a05d25ec05b39 Mon Sep 17 00:00:00 2001 From: Ivan Reshetnikov Date: Sat, 13 Apr 2024 16:15:51 +0500 Subject: [PATCH] feat: add support for sway --- roles/desktop/files/sway.conf | 20 ++++ roles/desktop/files/sway.d/appearance.conf | 5 + roles/desktop/files/sway.d/bar.conf | 7 ++ roles/desktop/files/sway.d/inputs.conf | 9 ++ roles/desktop/files/sway.d/keybindings.conf | 123 ++++++++++++++++++++ roles/desktop/files/sway.d/resize.conf | 25 ++++ roles/desktop/tasks/main.yml | 2 + roles/desktop/tasks/sway.yml | 20 ++++ 8 files changed, 211 insertions(+) create mode 100644 roles/desktop/files/sway.conf create mode 100644 roles/desktop/files/sway.d/appearance.conf create mode 100644 roles/desktop/files/sway.d/bar.conf create mode 100644 roles/desktop/files/sway.d/inputs.conf create mode 100644 roles/desktop/files/sway.d/keybindings.conf create mode 100644 roles/desktop/files/sway.d/resize.conf create mode 100644 roles/desktop/tasks/sway.yml diff --git a/roles/desktop/files/sway.conf b/roles/desktop/files/sway.conf new file mode 100644 index 0000000..fcf1b18 --- /dev/null +++ b/roles/desktop/files/sway.conf @@ -0,0 +1,20 @@ +### 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 alacritty + +# 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 wofi --show run | xargs swaymsg exec -- + +include ~/.config/sway/config.d/* diff --git a/roles/desktop/files/sway.d/appearance.conf b/roles/desktop/files/sway.d/appearance.conf new file mode 100644 index 0000000..cc759d5 --- /dev/null +++ b/roles/desktop/files/sway.d/appearance.conf @@ -0,0 +1,5 @@ +default_border none + +# Wallpaper +output * bg ~/Pictures/wallpapers/$(ls -1 ~/Pictures/wallpapers | shuf | head -1) fill + diff --git a/roles/desktop/files/sway.d/bar.conf b/roles/desktop/files/sway.d/bar.conf new file mode 100644 index 0000000..ff52744 --- /dev/null +++ b/roles/desktop/files/sway.d/bar.conf @@ -0,0 +1,7 @@ +# +# Status Bar: +# +# Read `man 5 sway-bar` for more information about this section. +bar { + swaybar_command waybar +} diff --git a/roles/desktop/files/sway.d/inputs.conf b/roles/desktop/files/sway.d/inputs.conf new file mode 100644 index 0000000..8440224 --- /dev/null +++ b/roles/desktop/files/sway.d/inputs.conf @@ -0,0 +1,9 @@ +# Input configuration +input "type:keyboard" { + xkb_layout us,ru + xkb_options grp:alt_shift_toggle +} + +input type:touchpad { + natural_scroll enabled +} diff --git a/roles/desktop/files/sway.d/keybindings.conf b/roles/desktop/files/sway.d/keybindings.conf new file mode 100644 index 0000000..77b1d90 --- /dev/null +++ b/roles/desktop/files/sway.d/keybindings.conf @@ -0,0 +1,123 @@ +### Key bindings +# +# Basics: +# + # Start a terminal + bindsym $mod+Return exec $term + + # 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 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' +# +# 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 +# +# 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 +# +# 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 + +bindsym XF86MonBrightnessDown exec brightnessctl set 5%- +bindsym XF86MonBrightnessUp exec brightnessctl set 5%+ +bindsym XF86AudioPlay exec playerctl play-pause +bindsym XF86AudioNext exec playerctl next +bindsym XF86AudioPrev exec playerctl previous +bindsym XF86AudioRaiseVolume exec wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+ +bindsym XF86AudioLowerVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindsym XF86AudioMute exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindsym XF86AudioMicMute exec wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle diff --git a/roles/desktop/files/sway.d/resize.conf b/roles/desktop/files/sway.d/resize.conf new file mode 100644 index 0000000..c54972c --- /dev/null +++ b/roles/desktop/files/sway.d/resize.conf @@ -0,0 +1,25 @@ +# +# 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" diff --git a/roles/desktop/tasks/main.yml b/roles/desktop/tasks/main.yml index f86e05c..19a4bfc 100644 --- a/roles/desktop/tasks/main.yml +++ b/roles/desktop/tasks/main.yml @@ -1,2 +1,4 @@ +- name: Sway + import_tasks: sway.yml - name: Waybar import_tasks: waybar.yml diff --git a/roles/desktop/tasks/sway.yml b/roles/desktop/tasks/sway.yml new file mode 100644 index 0000000..85cbff2 --- /dev/null +++ b/roles/desktop/tasks/sway.yml @@ -0,0 +1,20 @@ +- name: Install sway + become: true + ansible.builtin.apt: + pkg: + - sway +- name: Create sway config dir + ansible.builtin.file: + path: "{{ ansible_env.HOME }}/.config/sway" + state: directory + mode: '1770' +- name: Copy sway config file + ansible.builtin.copy: + src: files/sway.conf + dest: "{{ ansible_env.HOME }}/.config/sway/config" + mode: '0660' +- name: Copy sway config.d files + ansible.builtin.copy: + src: files/sway.d/ + dest: "{{ ansible_env.HOME }}/.config/sway/config.d/" + mode: '1770'