# Arch Linux

# ZSH

Основная информация в [wiki Arch Linux](https://wiki.archlinux.org/title/Zsh).

## Установка

```shell
pikaur -S zsh zsh-completions
```

Установить `zsh` оболочкой по умолчанию (потребуется ввести пароль пользователя):

```shell
chsh -s /bin/zsh
```

Скопировать всё необходимое из `.bashrc` в `.zshrc` и из `.bash_profile` в `.zprofile`.

[Установить шрифты](https://kb.fallback.ru/books/arch-linux/page/nastroika-sriftov "Настройка шрифтов") (обязательно `ttf-meslo-nerd-font-powerlevel10k`) и настроить шрифт в терминале (см. [инструкцию](https://github.com/romkatv/powerlevel10k?tab=readme-ov-file#meslo-nerd-font-patched-for-powerlevel10k)).

## Oh My ZSH и Powerlevel10k

Установить <span class="s1">[фреймворк Oh My Zsh](https://github.com/ohmyzsh/ohmyzsh) и [тему Powerlevel10k](https://github.com/romkatv/powerlevel10k):</span>

```shell
pikaur -S oh-my-zsh-git zsh-theme-powerlevel10k-git
```

Установить (переопределить) в `.zshrc` переменную `ZSH`:

```
# Path to your oh-my-zsh installation.
export ZSH="/usr/share/oh-my-zsh"
```

Подключить тему в `.zshrc`:

```
#ZSH_THEME="robbyrussell"
source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme
```

Запустить `zsh` и выполнить предложенную настройку темы.

## Подсветка синтаксиса и автодополнение

Установить дополнения:

```shell
pikaur -S zsh-syntax-highlighting zsh-autosuggestions
```

Добавить в `.zshrc`:

```
# Fish-like syntax highlighting and autosuggestions
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
```

## Обработка неизвестных команд

Подробнее см. в [wiki Arch Linux](https://wiki.archlinux.org/title/Pkgfile).

Установить `pkgfile`:

```shell
pikaur -S pkgfile
```

Инициализировать базу данных:

```
sudo pkgfile --update
```

Включить автоматическое обновление базы:

```shell
sudo systemctl enable pkgfile-update.timer
sudo systemctl start pkgfile-update.timer
```

Добавить в `.zshrc`:

```
# pkgfile "command not found" handler
source /usr/share/doc/pkgfile/command-not-found.zsh
```

## Включение плагинов

Включить плагин sudo (добавление команды `sudo` в по двойному ESC) в .zshrc:

```
plugins=(git sudo)
```

# Настройка шрифтов

Вдохновлено [этим](https://gist.github.com/YoEight/d19112db56cd8f93835bf2d009d617f7).

Установка базовых шрифтов:

```shell
pikaur -S ttf-dejavu ttf-liberation noto-fonts
```

Установка дополнительных шрифтов:

```shell
pikaur -S ttf-caladea ttf-carlito ttf-dejavu ttf-impallari-cantora \
          ttf-liberation noto-fonts ttf-opensans otf-overpass ttf-roboto \
          tex-gyre-fonts ttf-ubuntu-font-family ttf-courier-prime \
          ttf-gelasio ttf-croscore ttf-merriweather ttf-signika
```

Установка шрифта для zsh:

```shell
pikaur -S ttf-meslo-nerd-font-powerlevel10k
```

Установка шрифта для waybar:

```shell
pikaur -S otf-font-awesome ttf-iosevka
```

Отключение растровых шрифтов лучше не делать, т.к. пропадут emoji. Установка шрифтов с emoji:

```shell
pikaur -S noto-fonts-emoji ttf-joypixels otf-openmoji 
```

В файле `/etc/profile.d/freetype2.sh` расскоментировать строку:

```shell
export FREETYPE_PROPERTIES="truetype:interpreter-version=40"
```

<s>Создать файл `/etc/fonts/local.conf` со следующим содержимым:</s>

<details id="bkmrk-%D0%BA%D0%B0%D0%BA-%D1%8D%D1%82%D0%BE-%D0%BC%D0%BE%D0%B3%D0%BB%D0%BE-%D0%B1%D1%8B-%D0%B1%D1%8B%D1%82"><summary>как это могло бы быть</summary>

```xml
<?xml version="1.0" encoding="UTF-8"?>

<fontconfig>
   <match>
      <edit mode="prepend" name="family">
         <string>Noto Sans</string>
      </edit>
   </match>
   <match target="pattern">
      <test qual="any" name="family">
         <string>serif</string>
      </test>
      <edit name="family" mode="assign" binding="same">
         <string>Noto Serif</string>
      </edit>
   </match>
   <match target="pattern">
      <test qual="any" name="family">
         <string>sans-serif</string>
      </test>
      <edit name="family" mode="assign" binding="same">
         <string>Noto Sans</string>
      </edit>
   </match>
   <match target="pattern">
      <test qual="any" name="family">
         <string>monospace</string>
      </test>
      <edit name="family" mode="assign" binding="same">
         <string>Noto Mono</string>
      </edit>
   </match>
</fontconfig>
```

</details>

# Sway

> [Описание в wiki Arch Linux.](https://wiki.archlinux.org/title/Sway)

## Установка

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

## Настройка

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

Рекомендуется предварительно выполнить [настройку шрифтов](https://kb.fallback.ru/books/arch-linux/page/nastroika-sriftov "Настройка шрифтов").

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

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

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

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

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

Подробности см. в [wiki Arch Linux](https://wiki.archlinux.org/title/Greetd).

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

```shell
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`:

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

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

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

```shell
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`:

```bash
# 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`:

```bash
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
```

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

```shell
swaymsg -t get_outputs
```

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

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

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

```shell
ln -sf /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png background.img
```

<details id="bkmrk-%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA"><summary>Настройка динамической смены обоев.</summary>

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

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

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

```shell
#!/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
```

</details>Для настройки тёмной темы см. [Тёмная тема](https://kb.fallback.ru/books/arch-linux/page/temnaia-tema "Тёмная тема").

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

Подсмотрено [тут](https://www.reddit.com/r/swaywm/comments/bb4dam/take_screenshot_to_clipboard/).

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

```shell
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` в конфигурационном файле (в конце файла):

```bash
#
# 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`:

```bash
bar swaybar_command waybar
```

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

```bash
mkdir -p ~/.config/waybar
```

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

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

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

```shell
sudo usermod -a -G input $USER
```

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

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

```shell
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](https://www.reddit.com/r/swaywm/comments/chi4fr/question_shutdown_and_restart_binding/?rdt=37992).

Закомментировать в конфигурационном файле `~/.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.](https://wiki.archlinux.org/title/Foot)

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

```shell
mkdir -p ~/.config/foot
```

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

```ini
# -*- conf -*-

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

[mouse]
hide-when-typing=yes

[main]
include=/usr/share/foot/themes/gruvbox-dark
```

<details id="bkmrk-%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-%D1%86%D0%B2%D0%B5%D1%82%D0%BE%D0%B2-%D0%B2-%D1%81"><summary>Настройка цветов в стиле Ubuntu.</summary>

Создать файл `~/.config/foot/gogh-colors.ini` с цветовой схемой ([чтобы не выжигало глаза](https://gist.github.com/samitnuk/ef568fac49afe493d42d6a0395d761ee)):

```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` подключение цветовой схемы (можно в конец):

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

</details>### Запуск приложений

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

<details id="bkmrk-%D0%91%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80-%D0%B2-%7E%2F.config%2F"><summary>Браузер в ~/.config/sway/config.d/50-browser.</summary>

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

</details><details id="bkmrk-%D0%9F%D0%BE%D1%87%D1%82%D0%BE%D0%B2%D1%8B%D0%B9-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82-%D0%B2-%7E%2F"><summary>Почтовый клиент в ~/.config/sway/config.d/50-mailer.</summary>

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

</details><details id="bkmrk-%D0%9A%D0%BB%D0%B8%D0%B5%D0%BD%D1%82-telegram-%D0%B2-%7E%2F"><summary>Клиент Telegram в ~/.config/sway/config.d/50-telegram.</summary>

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

</details><details id="bkmrk-%D0%9C%D0%B5%D0%BD%D0%B5%D0%B4%D0%B6%D0%B5%D1%80-%D0%B1%D0%B5%D1%81%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%BD%D0%BE"><summary>Менеджер беспроводной сети iwgtk в ~/.config/sway/config.d/50-iwgtk.</summary>

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

</details><details id="bkmrk-%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80-vscodium-%D0%B2-"><summary>Редактор VSCodium в ~/.config/sway/config.d/50-codium.</summary>

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

</details>

# Тёмная тема

## Базовая настройка тёмной темы

Для включения тёмной темы в GTK и Qt/KDE приложения нужно установить следующие пакеты:

```shell
pikaur -S gnome-themes-extra adwaita-qt5-git adwaita-qt6-git
```

Создать файл `/etc/profile.d/dark-theme.sh` со следующим содержимым:

```
export GTK_THEME=Adwaita:dark
export GTK2_RC_FILES=/usr/share/themes/Adwaita-dark/gtk-2.0/gtkrc
export QT_QPA_PLATFORMTHEME=qt5ct:qt6ct
export QT_QPA_PLATFORM=wayland
```

Запустить `qt5ct` и `qt6ct` и на вкладке **Внешний вид** выбрать **Стиль** *Adwaita-Dark*.

Для запуска brave нужно создать файл `~/.config/brave-flags.conf` со следующим содержимым:

```
--ozone-platform=wayland
```

## Настройка тёмной темы Gruvbox

Подсмотрено в разных источниках, в т.ч. [тут](https://pingvinus.ru/note/gtk-qt-style).

Необходимо выполнить шаги по базовой настройке тёмной темы, а затем **дополнительно** выполнить следующие действия или изменения.

Установить пакеты с темами Gruvbox для GTK:

```shell
pikaur -S gruvbox-gtk-theme-git gruvbox-icon-theme-git gruvbox-plus-icon-theme adw-gtk-theme
```

Создать файлы с цветовой схемой Gruvbox для `qt5qc` и `qt6qc` соответственно `~/.config/qt5ct/colors/gruvbox.conf` и `~/.config/qt6ct/colors/gruvbox.conf` со следующим содержимым:

```
[ColorScheme]
active_colors=#ffebdbb2, #ff1d2021, #ffbdae93, #ffa89984, #ff3c3836, #ff504945, #ffebdbb2, #ffebdbb2, #ffebdbb2, #ff282828, #ff1d2021, #ff504945, #ff458588, #ff282828, #ff458588, #ffcc241d, #ff282828, #ffebdbb2, #ff1d2021, #ffebdbb2, #ffbdae93
disabled_colors=#ffbdae93, #ff1d2021, #ffbdae93, #ffa89984, #ff3c3836, #ff504945, #ffbdae93, #ffbdae93, #ffbdae93, #ff282828, #ff1d2021, #ff504945, #ff438184, #ff3c3836, #ff458588, #ffcc241d, #ff282828, #ffebdbb2, #ff1d2021, #ffebdbb2, #ffbdae93
inactive_colors=#ffebdbb2, #ff1d2021, #ffbdae93, #ffa89984, #ff3c3836, #ff504945, #ffebdbb2, #ffebdbb2, #ffebdbb2, #ff282828, #ff1d2021, #ff504945, #ff438184, #ffa89984, #ff458588, #ffcc241d, #ff282828, #ffebdbb2, #ff1d2021, #ffebdbb2, #ffbdae93
```

В `qt5ct` и `qt6ct` на вкладке **Внешний вид** выбрать **Цветовую схему** *gruvbox*, на вкладке **Стиль значков** выбрать *Gruvbox Plus Dark*, на вкладке **Шрифты** установить **Общий** *Noto Sans 10* и **Фиксированной ширины** *Adwaita Mono 11*.

Скопировать тему adw-gtk3-dark для изменения в adw-gtk3-gruvbox-dark, для этого выполнить команду:

```shell
sudo cp -r /usr/share/themes/adw-gtk3-dark /usr/share/themes/adw-gtk3-gruvbox-dark
```

Заменить файл содержимое файла `/usr/share/themes/adw-gtk3-gruvbox-dark/gtk-3.0/gtk.css` на [файл с темой gruvbox из репозитория adw-colors](https://github.com/lassekongo83/adw-colors/blob/main/themes/gruvbox-dark/gtk.css). Далее в файл потребуется внести ряд изменений: подключить CSS с базовой тёмной темой adw-gtk3-dark и заменить некоторые цвета:

```
...

@import '../../adw-gtk3-dark/gtk-3.0/gtk.css';

...

@define-color accent_bg_color #83a598;
...
@define-color popover_bg_color #3c3836;
```

<details id="bkmrk-%D0%9F%D0%BE%D0%BB%D0%BD%D1%8B%D0%B9-%D1%82%D0%B5%D0%BA%D1%81%D1%82-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0-%2F"><summary>Полный текст файла /usr/share/themes/adw-gtk3-gruvbox-dark/gtk-3.0/gtk.css.</summary>

```
/*

  Gruvbox theme for libadwaita
  and adw-gtk3 - https://github.com/lassekongo83/adw-gtk3

  Colors from - https://github.com/morhetz/gruvbox

  1. If ~/.config/gtk-4.0/gtk.css and/or ~/.config/gtk-3.0/gtk.css exists, make backups
  2. Enable the adw-gtk3-dark theme
  3. Save this file to ~/.config/gtk-4.0/gtk.css
  4. Make the file a symbolic link to ~/.config/gtk-3.0/gtk.css (or copy it to that location)
  5. Close and re-open any open apps or log out and in again

*/

@import '../../adw-gtk3-dark/gtk-3.0/gtk.css';

/* Global color definitions */

@define-color window_bg_color #282828; /* dark gray */
@define-color window_fg_color #ebdbb2; /* light brown */
@define-color view_bg_color #3c3836;   /* gray */
@define-color view_fg_color @window_fg_color;
@define-color accent_bg_color #83a598; /* blue */ /* was: #928374; creamy */
@define-color accent_color @accent_bg_color;
@define-color headerbar_bg_color @window_bg_color;
@define-color headerbar_fg_color @window_fg_color;
@define-color popover_bg_color #3c3836; /* gray */ /* was: #627321; salad green */
@define-color popover_fg_color @view_fg_color;
@define-color dialog_bg_color @popover_bg_color;
@define-color dialog_fg_color @popover_fg_color;
@define-color card_bg_color rgba(255, 255, 255, 0.08);
@define-color card_fg_color @window_fg_color;

:root {
  --accent-bg-color: @accent_bg_color;
  --accent-fg-color: @accent_fg_color;

  --destructive-bg-color: @destructive_bg_color;
  --destructive-fg-color: @destructive_fg_color;

  --success-bg-color: @success_bg_color;
  --success-fg-color: @success_fg_color;

  --warning-bg-color: @warning_bg_color;
  --warning-fg-color: @warning_fg_color;

  --error-bg-color: @error_bg_color;
  --error-fg-color: @error_fg_color;

  --window-bg-color: @window_bg_color;
  --window-fg-color: @window_fg_color;

  --view-bg-color: @view_bg_color;
  --view-fg-color: @view_fg_color;

  --headerbar-bg-color: @headerbar_bg_color;
  --headerbar-fg-color: @headerbar_fg_color;
  --headerbar-border-color: @headerbar_border_color;
  --headerbar-backdrop-color: @headerbar_backdrop_color;
  --headerbar-shade-color: @headerbar_shade_color;
  --headerbar-darker-shade-color: @headerbar_darker_shade_color;

  --sidebar-bg-color: @sidebar_bg_color;
  --sidebar-fg-color: @sidebar_fg_color;
  --sidebar-backdrop-color: @sidebar_backdrop_color;
  --sidebar-border-color: @sidebar_border_color;
  --sidebar-shade-color: @sidebar_shade_color;

  --secondary-sidebar-bg-color: @secondary_sidebar_bg_color;
  --secondary-sidebar-fg-color: @secondary_sidebar_fg_color;
  --secondary-sidebar-backdrop-color: @secondary_sidebar_backdrop_color;
  --secondary-sidebar-border-color: @secondary_sidebar_border_color;
  --secondary-sidebar-shade-color: @secondary_sidebar_shade_color;

  --card-bg-color: @card_bg_color;
  --card-fg-color: @card_fg_color;
  --card-shade-color: @card_shade_color;

  --dialog-bg-color: @dialog_bg_color;
  --dialog-fg-color: @dialog_fg_color;

  --popover-bg-color: @popover_bg_color;
  --popover-fg-color: @popover_fg_color;
  --popover-shade-color: @popover_shade_color;

  --thumbnail-bg-color: @thumbnail_bg_color;
  --thumbnail-fg-color: @thumbnail_fg_color;

  --shade-color: @shade_color;
  --scrollbar-outline-color: @scrollbar_outline_color;
}

/* More customizations */

button.titlebutton { /* GTK3 */
  color: transparent;
  min-width: 18px;
  min-height: 18px;
}
button.titlebutton:backdrop {
  opacity: 0.5;
}

windowcontrols > button > image { /* GTK4 */
  color: transparent;
  min-width: 18px;
  min-height: 18px;
  border-radius: 100%;
  padding: 0;
  margin: 0 5px;
}

button.titlebutton.close,
windowcontrols > button.close > image,
button.titlebutton.close:hover:backdrop,
windowcontrols > button.close:hover:backdrop > image {
  background-color: #cc241d;
}

button.titlebutton.close:hover,
windowcontrols > button.close:hover > image {
  background-color: #fb4934;
}

button.titlebutton.maximize,
windowcontrols > button.maximize > image,
button.titlebutton.maximize:hover:backdrop,
windowcontrols > button.maximize:hover:backdrop > image {
  background-color: #98971a;
}

button.titlebutton.maximize:hover,
windowcontrols > button.maximize:hover > image {
  background-color: #b8bb26;
}

button.titlebutton.minimize,
windowcontrols > button.minimize > image,
button.titlebutton.minimize:hover:backdrop,
windowcontrols > button.minimize:hover:backdrop > image {
  background-color: #d79921;
}

button.titlebutton.minimize:hover,
windowcontrols > button.minimize:hover > image {
  background-color: #fabd2f;
}

button.titlebutton.close:backdrop,
button.titlebutton.maximize:backdrop,
button.titlebutton.minimize:backdrop,
windowcontrols > button.close:backdrop > image,
windowcontrols > button.maximize:backdrop > image,
windowcontrols > button.minimize:backdrop > image {
  background-color: #665c54;
}
```

</details>Создать файл (или заменить в нём ранее созданное содержимое) `/etc/profile.d/dark-theme.sh` со следующим содержимым:

```
export GTK_THEME=adw-gtk3-gruvbox-dark
export GTK2_RC_FILES=/usr/share/themes/Gruvbox-Dark/gtk-2.0/gtkrc
export QT_QPA_PLATFORMTHEME=qt5ct
export QT_QPA_PLATFORM=wayland
```

Таким образом настраивается тёмная тема Gruvbox для большинства приложений GTK и Qt/KDE, но для некоторых приложений потребуется дополнительная настройка.

# Настройка сети

Настройка сети при помощи systemd-networkd по руководству в [Arch Linux wiki](https://wiki.archlinux.org/title/Systemd-networkd). Приведены примеры статической и динамической (DHCP) настройки сети.

## Беспроводная сеть (Wi-Fi)

Для настройки Wi-Fi совместно с systemd требуется установить подключение с точкой доступа при помощи [wpa\_supplicant](https://wiki.archlinux.org/title/Wpa_supplicant) или [iwd](https://wiki.archlinux.org/title/Iwd). Далее рассматривается настройка на основе iwd.

Установить необходимые пакеты:

```shell
pikaur -S iwd iwgtk
```

Запустить сервис iwd:

```shell
sudo systemctl enable --now iwd.service
```

Настройку подключения к точке доступа можно выполнить либо по инструкции к [iwd](https://wiki.archlinux.org/title/Iwd), либо через графический интерфейс iwgtk.

## Бондинг

Настройка бондинга тоже описана в [Arch Linux wiki](https://wiki.archlinux.org/title/Systemd-networkd#Bonding_a_wired_and_wireless_interface). Порядок действий примерно следующий.

Создать файл `/etc/systemd/network/30-bond0.netdev` со следующим содержимым:

```
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=active-backup
PrimaryReselectPolicy=always
MIIMonitorSec=1s
```

Создать файл `/etc/systemd/network/30-ethernet-bond0.network` со следующим содержимым:

```
[Match]
Name=enp0s13f0u1u1i5

[Network]
Bond=bond0
PrimarySlave=true
```

Создать файл `/etc/systemd/network/30-wifi-bond0.network` со следующим содержимым:

```
[Match]
Name=wlan0

[Network]
Bond=bond0
```

Создать файл `/etc/systemd/network/30-bond0.network` со следующим содержимым:

```
[Match]
Name=bond0

[Network]
BindCarrier=enp0s13f0u1u1i5 wlan0
#DHCP=yes
Address=192.168.21.??/24
Gateway=192.168.21.20
DNS=192.168.21.20
```

Если использовать DHCP для конфигурации интерфейса, то сеть работает работает, но отваливаются подключения по VPN и SSH при переключение с Ethernet на Wi-Fi.

Не указано в wiki, но без следующего шага не работал интерфейс. Создать файл `/etc/modprobe.d/bonding.conf` со следующим содержимым:

```
options bonding max_bonds=0 miimon=1000 mode=active-backup fail_over_mac=active
```

Удалить старую конфигурацию сети из `/etc/systemd/network` и выполнить перезагрузку системы. После этого вывод `networkctl` должен иметь следующий вид:

```
IDX LINK            TYPE     OPERATIONAL SETUP     
  1 lo              loopback carrier     unmanaged
  2 enp0s13f0u1u1i5 ether    enslaved    configured
  3 bond0           bond     routable    configured
  5 wlan0           wlan     enslaved    configured
```

# Настройка звука

## Отключение ненужных устройств

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

```shell
mkdir -p ~/.config/wireplumber/wireplumber.conf.d
```

Создать файл `~/.config/wireplumber/wireplumber.conf.d/51-alsa-disable.conf` следующего содержимого:

```
monitor.alsa.rules = [
  {
    matches = [
      {
        device.name = "alsa_card.usb-DisplayLink_Dell_Universal_Dock_D6000_2009297873-02"
      }
    ]
    actions = {
      update-props = {
         device.disabled = true
      }
    }
  }
]
```

Посмотреть номер устройства (ID) в секции Devices в выводе команды:

```shell
wpctl status
```

Узнать имя устройства (device.name) по его ID в выводе команды:

```shell
wpctl inspect ID | grep name
```

## Подключение Bluetooth гарнитуры

Порядок подключения см. в [Arch Linux Wiki](https://wiki.archlinux.org/title/Bluetooth#Pairing).

После подключения стоит выбрать гарнитуру устройством по умолчанию, тогда при подключении звук будет выводиться на неё:

```shell
wpctl set-default ID
```