Skip to main content

Sway

Описание в wiki Arch Linux.

Установка

pikaur -S sway swaylock swayidle swaybg wmenu dmenu foot waybar xdg-desktop-portal-wlr mako \
          qt5-wayland qt6-wayland

Настройка

Общая настройка sway

Рекомендуется предварительно выполнить настройку шрифтов.

Создать каталоги для конфигурационных файлов и скопировать системный конфигурационный файл:

mkdir -p ~/.config/sway/config.d && cp /etc/sway/config ~/.config/sway

Подключить каталог с пользовательскими конфигурационными файлами в скопированном конфигурационном файле (в конце файла):

include /etc/sway/config.d/*
include ~/.config/sway/config.d/*

Экран авторизации greetd и gtkgreet

Подробности см. в wiki Arch Linux.

Установить greetd и gtkgreet:

pikaur -S greetd gtkgreet

Создать файл /etc/greetd/environments со следующим содержимым:

sway
bash

Создать файл /etc/greetd/sway-config со следующим содержимым:

# `-l` activates layer-shell mode. Notice that `swaymsg exit` will run after gtkgreet.
exec "gtkgreet -l; swaymsg exit"

bindsym Mod4+shift+e exec swaynag \
-t warning \
-m 'What do you want to do?' \
-b 'Poweroff' 'systemctl poweroff' \
-b 'Reboot' 'systemctl reboot'

include /etc/sway/config.d/*

В конфигурационном файле /etc/greetd/config.toml установить опцию command:

[default_session]
command = "sway --config /etc/greetd/sway-config"

Авторизация при запуске приложений

Для запуска приложений с правами root (например, gparted) следует установить необходимые пакеты:

pikaur -S xorg-xhost polkit-gnome

Создать файл ~/.config/sway/config.d/10-authentication:

exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1

Клавиатура

Создать файл ~/.config/sway/config.d/20-input:

# Layout should be "ru" without "(mac)", but waybar indicator is empty in this case.
input type:keyboard {
    xkb_model "pc104"
    xkb_layout "us+typo,ru(mac):2+typo"
    xkb_options "grp:alt_space_toggle,lv3:ralt_switch"
}

input "1452:592:Apple_Inc._Apple_Keyboard" {
    xkb_model "apple_iso"
    xkb_layout "us+typo,ru(mac):2+typo"
    xkb_options "grp:win_space_toggle,lv3:ralt_switch"
}

bindsym XF86AudioRaiseVolume exec pactl set-sink-volume @DEFAULT_SINK@ +5%
bindsym XF86AudioLowerVolume exec pactl set-sink-volume @DEFAULT_SINK@ -5%
bindsym XF86AudioMute exec pactl set-sink-mute @DEFAULT_SINK@ toggle
bindsym XF86AudioMicMute exec pactl set-source-mute @DEFAULT_SOURCE@ toggle
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 XF86Search exec dmenu_run

Закомментировать в конфигурационном файле ~/.config/sway/config комбинации с $mod+space:

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

Настроить работу горячих клавиш в русской раскладке (добавить параметр --to-code к опции bindsym):

sed -i -e 's/\(bindsym\)/\1 --to-code/' ~/.config/sway/config

Сенсорная панель

Добавить в файл ~/.config/sway/config.d/20-input:

input type:touchpad {
    tap enabled
    drag enabled
    natural_scroll enabled
}

# Allow switching between workspaces with left and right swipes
bindgesture swipe:right workspace prev
bindgesture swipe:left workspace next

Экран

Создать файл ~/.config/sway/config.d/20-output для изменения разрешения и частоты обновления кадров:

output DP-1 mode 1920x1080@75Hz

Доступные экраны и их параметры можно посмотреть при помощи команды:

swaymsg -t get_outputs

Для настройки обоев рабочего стола нужно добавить:

# Wallpaper.
output * bg ../background.img fill

В каталоге ~/.config/sway должен лежать файл с изображением для обоев рабочего стола или символическая ссылка на такой файл, например:

ln -sf /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png background.img
Настройка динамической смены обоев.

Для настройки динамической смены обоев создать файл ~/.config/sway/config.d/90-wallpaper с отключение штатного запуска swaybg и запуска сценария обоев:

swaybg_command -
exec /home/ob1/.config/sway/swaybg-random.sh

Создать файл сценария и установить ему права на исполнения, например:

#!/bin/sh

TIMEOUT=900 # seconds
IMGPATH="${HOME}/Изображения/Russian Military Bears/"

while true; do
    PID=$(pidof swaybg)
    swaybg -o DP-1 -i /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png -m fill &
    IMG="$(find "${IMGPATH}" -type f | shuf -n1)"
    swaybg -o eDP-1 -i "${IMG}" -m fit &
    sleep .2
    swaybg -o eDP-1 -i "${IMG}" -m fill &
    sleep 1
    [ "z${PID}" != z ] && kill ${PID}
    sleep $((TIMEOUT-2))
done

 

Для настройки тёмной темы см. Тёмная тема.

Снимки экрана

Подсмотрено тут.

Установить пакет sway-contrib с зависимостями для скрипта grimshot.

pikaur -S sway-contrib

Создать файл ~/.config/sway/config.d/70-screenshot:

bindsym --to-code {
    # Capture the currently active output
    $mod+p exec /usr/share/sway-contrib/grimshot save output

    # Capture the currently active window
    $mod+Alt+p exec /usr/share/sway-contrib/grimshot save active

    # Select and capture a custom rectangular area
    $mod+Ctrl+p exec /usr/share/sway-contrib/grimshot save area

    # Capture the currently active output to clipboard
    $mod+Shift+p exec /usr/share/sway-contrib/grimshot copy output

    # Capture the currently active window to clipboard
    $mod+Alt+Shift+p exec /usr/share/sway-contrib/grimshot copy active

    # Select and capture a custom rectangular area to clipboard
    $mod+Ctrl+Shift+p exec /usr/share/sway-contrib/grimshot copy area
}

Статусная строка waybar

Закомментировать запуск swaybar в конфигурационном файле (в конце файла):

#
# Read `man 5 sway-bar` for more information about this section.
#bar {
#    position top
#
#    # 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 %X'; do sleep 1; done
#
#    colors {
#        statusline #ffffff
#        background #323232
#        inactive_workspace #32323200 #32323200 #5c5c5c
#    }
#}

Создать файл ~/.config/sway/config.d/30-waybar:

bar swaybar_command waybar

Создать каталог для конфигурации waybar:

mkdir -p ~/.config/waybar

Создать пользовательский конфигурационный файл ~/.config/waybar/config.jsonc, (опционально запретить вывод на встроенный экран и) подключить системный конфигурационный файл:

{
    //"output"  : "!eDP-1",
    "include" : "/etc/xdg/waybar/config.jsonc",
}

Для работы модуля keyboard-state (отображение состояния Caps Lock и Num Lock) требуется, чтобы пользователь был в группе input. При необходимости добавить пользователя в группу можно следующей командой:

sudo usermod -a -G input $USER

Уведомления mako

Создать каталог конфигурации make:

mkdir -p ~/.config/mako

Создать файл ~/.config/mako/config следующего содержания:

ignore-timeout=1
default-timeout=5000
anchor=top-right

# Following lines for Gruvbox theme
font=iosevka 14px
background-color=#282828
text-color=#ebdbb2
border-color=#282828
progress-color=over #ebdbb2

Завершение работы

Подсмотрено на Reddit.

Закомментировать в конфигурационном файле ~/.config/sway/config комбинацию с $mod+e:

#    # Exit sway (logs you out of your Wayland session)
#    bindsym --to-code $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'

Создать файл ~/.config/sway/config.d/60-shutdown:

set $wmexit swaymsg exit
#set $lock swaylock -e -f -c 000000 -i ../background.img -t
set $lock swayidle -w  \
    timeout 1 'swaylock -e -f -c 000000 -i ../background.img -t' \
        resume 'pkill -nx swayidle' \
    timeout 600 'swaymsg "output * dpms off"' \
        resume 'swaymsg "output * dpms on"; pkill -nx swayidle'

set $Shutdown System (l)lock, (e) exit, (r) reboot, (h) halt
mode "$Shutdown" {
    bindsym --to-code e exec --no-startup-id $wmexit, mode "default"
    bindsym --to-code r exec --no-startup-id systemctl reboot, mode "default"
    bindsym --to-code h exec --no-startup-id systemctl poweroff -i, mode "default"
    bindsym --to-code l exec --no-startup-id $lock, mode "default"

    bindsym Return mode "default"
    bindsym Escape mode "default"
}

bindsym --to-code $mod+Shift+e mode "$Shutdown"
bindsym --to-code $mod+Shift+Delete exec --no-startup-id $lock

Терминал foot

Foot на wiki Arch Linux.

Создать каталог конфигурации foot:

mkdir -p ~/.config/foot

Создать файл ~/.config/foot/foot.ini следующего содержания:

# -*- conf -*-

term=xterm-256color
font=MesloLGS NF:size=9

[mouse]
hide-when-typing=yes

[main]
include=/usr/share/foot/themes/gruvbox-dark
Настройка цветов в стиле Ubuntu.

Создать файл ~/.config/foot/gogh-colors.ini с цветовой схемой (чтобы не выжигало глаза):

# -*- conf -*-
# Some color palette from gogh.

[colors]
foreground=A4A4A4
background=1E2127

regular0=000000 # black          # HOST
regular1=E06C75 # red            # SYNTAX_STRING
regular2=98C379 # green          # COMMAND
regular3=117A65 # yellow         # (MC: txt, css, html, pdf, xlsx, doc, docx, rtf files) COMMAND_COLOR2
regular4=0F0F18 # blue           # (MC: background)
regular5=C678DD # magenta        # SYNTAX_VAR
regular6=5C6370 # cyan           # (MC: menu beckground) PROMP
regular7=848484 # white          # (MC: panel lines)

bright0=5C6370  # bright black   #
bright1=ff5555  # bright red     # COMMAND_ERROR
bright2=98C379  # bright green   # (MC: exec files) EXEC FILES #55FF55
bright3=008080  # bright yellow  # (MC: panel headers)
bright4=61AFEF  # bright blue    # FOLDERS
bright5=F4A460  # bright magenta # (MC: zip, rar, tar.xz, tar.gz files)
bright6=87CEEB  # bright cyan    # (MC: png, jpg files)
bright7=A4A4A4  # bright white   #

Добавить в ~/.config/foot/foot.ini подключение цветовой схемы (можно в конец):

[main]
include=~/.config/foot/gogh-colors.ini

 

Запуск приложений

Примеры конфигурационных файлов приложений, которые работают на выделенных экранах или запускаются из scratchpad:

Браузер в ~/.config/sway/config.d/50-browser.
set $browser_icon "󰖟"
set $browser_app_id "brave*"
set $browser_app_name brave
#set $browser_app_id "LibreWolf*"
#set $browser_app_name librewolf

for_window [app_id=$browser_app_id] {
    move to workspace $browser_icon
    move position 0 0
    border none
    workspace $browser_icon
}

bindsym --to-code $mod+i exec swaymsg '[app_id=$browser_app_id]' workspace $browser_icon || exec $browser_app_name
bindsym --to-code $mod+Shift+i exec swaymsg '[app_id=$browser_app_id]' move container to workspace $browser_icon
Почтовый клиент в ~/.config/sway/config.d/50-mailer.
set $mail_icon ✉
#set $mail_app_id "thunderbird"
#set $mail_app_name thunderbird
set $mail_app_id "org.gnome.Evolution"
set $mail_app_name evolution

for_window [app_id=$mail_app_id] {
    move to workspace $mail_icon
    move position 0 0
    border none
    workspace $mail_icon
}

bindsym --to-code $mod+m exec swaymsg '[app_id=$mail_app_id]' workspace $mail_icon || exec $mail_app_name
#bindsym --to-code $mod+Shift+m exec swaymsg '[app_id=$mail_app_id]' move container to workspace $mail_icon
Клиент Telegram в ~/.config/sway/config.d/50-telegram.
for_window [app_id="org.telegram.desktop"] {
    move scratchpad
    resize set 800 1056
    move position 0 0
    scratchpad show
}

bindsym --to-code $mod+t exec swaymsg [app_id="org.telegram.desktop"] scratchpad show || exec telegram-desktop -startintray
exec telegram-desktop -startintray
Менеджер беспроводной сети iwgtk в ~/.config/sway/config.d/50-iwgtk.
for_window [app_id="org.twosheds.iwgtk"] {
    move scratchpad
    resize set 800 1056
    move position 1120 0
    scratchpad show
}

bindsym --to-code $mod+z exec swaymsg [app_id="org.twosheds.iwgtk"] scratchpad show || exec iwgtk
exec iwgtk -i
Редактор VSCodium в ~/.config/sway/config.d/50-codium.
for_window [app_id="codium*"] {
    move to workspace "󰨞"
    layout stacking
    move position 0 0
    workspace "󰨞"
}

bindsym --to-code $mod+c exec swaymsg [app_id="codium*"] workspace "󰨞" || exec codium