Linux
October 23

Минимальная конфигурация Arch Linux + BSPWM

Здесь я буду ставить оконный менеджер BSPWM и создавать минимальную среду рабочего стола по своим предпочтениям. Такой подход позволит получить более минималистичную, удобную и быструю среду, в которой будет невероятно комфортно работать в режиме тайлинга. Если вы до этого не работали с BSPWM, то советую почитать вот эту статью, в которой я постарался максимально подробно обо всем рассказать. Он простой и удобный. То, что надо.

Наши задачи:

  1. Установить Arch Linux (с шифрованием для безопасности)
  2. Установить базовое консольное ПО для комфортного взаимодействия с системой
  3. Установить BSPWM
  4. Настроить BSPWM и SXHKD для комфортной работы с окнами и быстрого запуска приложений
  5. Настроить переключение раскладок клавиатуры
  6. Настроить терминал (Kitty) и командную оболочку (Zsh) для комфортного использования
  7. Создать и включить swap-файл
  8. Установить и настроить менеджер входа (tuigreet)
  9. Установить и настроить менеджер блокировки экрана
  10. Установить базовый набор программ для работы (веб-браузер, файловый менеджер, медиаплеер и т.п.)
  11. Установить темы для Qt и GTK
  12. Установить и настроить USBGuard
  13. Установить и настроить лаунчер приложений (rofi)
  14. Установить и настроить агент аутентификации (lxqt-policykit-agent)
  15. Установить и настроить демон уведомлений (dunst)
  16. Установить и настроить статус-бар (polybar)

Сразу отмечу, что это далеко не весь список необходимых действий. Дополнительно было бы неплохо настроить фаерволл, службу tor, прокси, ClamAV, настроить профили Apparmor и Firejail и сделать еще кучу всего, чтобы повысить безопасность системы, но статья получилось бы невероятно длинной. Здесь я собрал информацию лишь о первоначальной конфигурации системы для базового использования. Основной акцент сделан на настройку оконного менеджера и прочих компонентов среды рабочего стола.

1. Установка Arch Linux с шифрованием и LVM:

Здесь я не буду подробно расписывать шаги по установке Arch Linux, т.к. это уже делал в другой статье. Советую лишь обратить внимание на очистку диска, шифрование, LVM, конфигурацию initramfs и установку загрузчика. Остальное по дефолту.

Выставляем время и проверяем:
timedatectl set-ntp true && timedate set-timezone Europe/Moscow && timedatectl

Смотрим список дисков:
fdisk -l

После того, как нашли нужный диск, стираем с него все данные с помощью blkdiscard:
blkdiscard -s /dev/nvme0n1
Если диск не поддерживает режим --secure, то можно использовать --zeroout, чтобы заполнить его нулями:
blkdiscard -z /dev/nvme0n1
Если на диске уже есть базовая разметка, то может понадобиться использовать -f (программа сама сообщит об этом):
blkdiscard -z -f /dev/nvme0n1

Думаю, стоит отметить, что этот процесс не быстрый и придется долго ждать завершения операции. Использовать blkdiscard необходимо для того, чтобы избежать утечки данных. Далее делаем разметку и шифруем основной раздел:
cfdisk /dev/nvme0n1 (здесь создаем загрузочный раздел с типом EFI System и основной с типом Linux Filesystem)

cryptsetup luksFormat /dev/nvme0n1p2
cryptsetup open /dev/nvme0n1p2 luks
ls /dev/mapper (должна быть директория luks)
pvcreate /dev/mapper/luks
vgcreate main /dev/mapper/luks
lvcreate -l 100%FREE main -n root

Проверяем:
lvs

Форматируем:
mkfs.ext4 /dev/mapper/main-root
mkfs.fat -F32 /dev/nvme0n1p1

Монтируем:
mount /dev/mapper/main-root /mnt
mkdir /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot

Устанавливаем систему:
pacstrap -i /mnt base linux linux-firmware base-devel lvm2 nano sudo networkmanager

Генерируем fstab:
genfstab -U /mnt >> /mnt/etc/fstab

Генерируем конфиг initramfs:
arch-chroot /mnt
nano /etc/mkinicpio.conf
в HOOKS после filesystems добавляем encrypt и lvm2, чтобы было вот так:

mkinitcpio -p linux

Ставим загрузчик:
bootctl install --path=/boot

Настриваем:
nano /boot/loader/loader.conf
В файле указываем timeout 0, чтобы не ждать 3 секунды и сразу загружалась система, а также указываем файл arch (который мы далее создадим):

timeout 0
default arch

nano /boot/loader/entries/arch.conf

title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options rw cryptdevice=UUID=UUID-раздела:main root=/dev/mapper/main-root

(вместо "UUID-раздела" ставим свое значение. UUID раздела можно узнать с помощью cryptsetup luksUUID /dev/nvme0n1p2)

Настраиваем время:
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
hwclock --systohc

Генерируем локали:
nano /etc/locale.gen - здесь раскомментируем en_US и ru_RU с кодировкой UTF-8.
locale-gen

Прописываем hostname:
nano /etc/hostname

Редачим hosts:
nano /etc/hosts

127.0.0.1    localhost
::1          localhost

Настраиваем пользовательские данные:
passwd
useradd -m user
passwd user
usermod -aG wheel,audio,video,storage,optical,scanner,floppy user
EDITOR=nano visudo - убираем комментарий с %wheel ALL=(ALL:ALL) ALL

Включаем NetworkManager:
systemctl enable NetworkManager

Выходим и перезагружаем:
exit
umount /mnt -l
reboot

2. Установка базового консольного ПО:

sudo pacman -Syu
sudo pacman -S locate net-tools neofetch htop openssh xdg-user-dirs ntfs-3g exfatprogs bash-completion vim pacman-contrib git wget bleueman aspell aspell-en aspell-ru noto-fonts-cjk noto-fonts-emoji nvidia-utils nvidia-settings nvidia-open gvfs-mtp

Остальное поставим потом, а сейчас нам нужно перезапустить систему, установить и настройть BSPWM, а также другие необходимые элементы для создания полноценной среды рабочего стола.

3. Установка BSPWM:

sudo pacman -S xorg-server xorg-xinit xorg-xkill bspwm sxhkd
Для тех, кто не в курсе, sxhkd - это демон горячих клавиш и он нам нужен для включения и настройки хоткеев. Вообще, если вы до этого не работали с BSPWM, то ничего страшного, ибо тут я максимально подробно все рассказал и показал.

Далее редактируем .xinitrc и добавляем в него строки для запуска sxhkd и bspwm:
cp /etc/X11/xinit/xinitrc ~/.xinitrc

sxhkd &
exec bspwm

Теперь копируем конфиги:
mkdir ~/.config/bspwm
mkdir ~/.config/sxhkd
cp /usr/share/doc/bspwm/examples/bspwmrc ~/.config/bspwm/
cp /usr/share/doc/bspwm/examples/sxhkd/sxhkdrc ~/.config/sxhkd/

Конфиг bspwm обязательно должен быть исполняемым:
chmod +x ~/.config/bspwm/bspwmrc

Сразу установим терминал и пропишем его открытие по Win+ENTER в конфиге sxhkd:
sudo pacman -S kitty
nano ~/.config/sxhkd/sxhkdrc

# terminal emulator
super + Return
		kitty

Запускаем BSPWM:
startx

В итоге нас должен встретить пустой черный экран. Запустим терминал по Win+ENTER и если все удачно, то можно приступать к настройке BSPWM и SXHKD.

4. Настройка BSPWM и SXHKD:

Иногда я подключаю ноутбук к монитору, поэтому следовало бы написать bash-скрипт, который будет проверять, подключен ли монитор или нет. Если монитор подключен, то скрипт и конфиг будут настраивать его.

Сам скрипт:

#!/bin/bash

my_second_monitor=$(xrandr --query | grep 'HDMI-1-0')
if [[ $my_second_monitor = *connected* ]]; then
    xrandr --output eDP-1 --primary --mode 1920x1080 --rotate normal --output HDMI-1-0 --mode 1920x1080 --rotate normal --right-of eDP-1
fi

В конфиге прописываем его запуск при старте:
~/.config/bspwm/scripts/dual_monitor.sh

А также настройку через bspc:

bspc monitor eDP-1 -d I II III IV
bspc monitor HDMI-1-0 -d V VI VII VIII IX X

Единственное, что осталось изменить - дефолтный рабочий стол, на котором будет фокусировка при запуске BSPWM. Дело в том, что при данной настройке мониторов, у меня фокусировка по умолчанию на 7 рабочем столе, а я хочу, чтобы фокусировка была на 1 рабочем столе. Для этого пропишем в конфиге BSPWM следующее:
bspc desktop -f ^1

Дальше настроим хоткеи для запуска программ в sxhkdrc. Т.к. у меня ничего кроме терминала не установлено - хоткеи пока что бесполезны, но после того как все установлю они будут работать.

# firefox
super + f
		firefox

# obsidian
super + o
		obsidian

# vs-code
super + v
		code

# telegram
super + t
		telegram-desktop

# flameshot gui
super + Print
		flameshot gui

Тут важно заметить, что на открытие firefox я назначил сочетание Win + R, в то время, как данное сочетание клавиш используется для режима fullscreen:

Чуть позже мы это изменим так, чтобы fullscreen открывался по сочетанию Win + Shift + F. Может показаться неудобным, но на самом деле довольно большое кол-во приложений поддерживает fullscreen по нажатию F11, да и включать этот режим приходится редко.

Еще поменяю сочетание клавиш для перезапуска sxhkd:

super + ctrl + r
		pkill -USR1 -x sxhkd

И сделаем более удобное управление окнами (в том числе, чтобы можно было переключаться между ними по стрелочкам):

Наконец, хоткеи для переключения режимов управления окном:

Теперь для тайлинга - Win + Shift + T, для псевдотайлинга - Win + Shift + P, для плавающего режима - Win + Shift + S и для полноэкранного режима Win + Shift + F соответственно.

Осталось заняться настройкой рамки для окон и курсора:
bspc config window_gap 5 - уменьшаем расстояние между окнами;
xsetroot -cursor_name left_ptr - делаем так, чтобы курсор на рабочем столе отображался нормально, а не в виде крестика.

Больше я ничего настраивать не хочу. Этого достаточно для комфортной работы с окнами, рабочими столами и мониторами. Стилизацию окон через picom делать тоже не вижу смысла, т.к. в системе, которая будет использоваться в качестве инструмента для аудита кибербезопасности это просто ни к чему. Единственное, что я буду стилизовать - bar, лаунчер rofi, Qt, GTK и скорее всего несколько апплетов, но это все не для красоты, а для комфортной работы, поэтому кастомизация будет минимальная.

5. Настройка раскладок клавиатуры:

Прописываем в .xinitrc:
setxkbmap -layout 'us,ru' -option 'grp:alt_shift_toggle' &

Желательно тоже самое прописать в конфиге SXHKD, т.к. иногда настройка раскладок может сбиваться (например, при обновление пакетов):

super + shift + k
		setxkbmap -layout 'us,ru' -option 'grp:alt_shift_toggle'

6. Настройка Kitty и Zsh:

Для начала настроим внешний вид эмулятора терминала. Для этого откроем конфиг Kitty (ctrl+shft+F2):

Листаем вниз и нажимаем стрелочку вправо, чтобы перейти к редактированию конфига:

Во-первых, сразу меняем размер текста, т.к. по дефолту для ноутбука он слишком мелкий:
font_size 15.0

Во-вторых, становим cursor_trail на 3, чтобы была анимация перемещения курсора:
cursor_trail 3
Это полезно, когда курсор перемещается по терминалу, т.к. позовляет более удобно определять его расположение.

В-третьих, меняем стиль подчеркивания URL:
url_style straight

Обязательно добавляем возможность копирования и вставки, убрав комментарий со строчки:

Еще убираем комментарий со строчки, которая отвечает за удаление пробелов в конце скопированного текста:

Ну и напоследок отключаем звук в терминале, т.к. он меня бесит:

Для обновления конфига ctrl+shift+F5. Настраивать внешний вид не вижу смысла, поэтому переходим к настройке оболочки Zsh. Ставим zsh и oh my zsh:
sudo pacman -S zsh zshchsh -s /bin/zshsh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"`

Плагины:
Arch Linux - добавляет алиасы для работы с pacman, aur и др.:

web-search - отправка поисковых запросов из терминала.

Dirhistory - перемещение по директориям с помощью хоткеев:

History - удобная работа с историей команд:

Zsh-autosuggestions - автодополнение на основе ранее введенных команд. Предложение по автодополнению будет подсвечиваться после курсора:

zsh-syntax-highlighting - подсветка комманд:

И powerlevel10k, который позволяет создать более комфортное визуальное оформление, например вот такое:

Или такое:

7. SWAP-файл:

Многие не создают swap-файл, предпочитая обходиться исключительно возможностями оперативки, но я на всякий случай создам его. Не то чтобы он часто пригождается, но все-таки иногда может быть полезен. Размер ему выделю на 8 Гб:
sudo fallocate -l 8G /swapfile
Обязательно устанавливаем права:
sudo chmod 600 /swapfile
Форматируем:
sudo mkswap /swapfile
И активируем:
sudo swapon /swapfile

Все хорошо, но для того, чтобы файл подкачки использовался после каждой перезагрузки, нужно сделать дополнительные действия:
nano /etc/fstab - добавляем следующую строку:

/swapfile none swap defaults 0 0

8. Менеджер входа:

Тут я решил поставить tuigreet. Это консольный менеджер входа, с множеством настроек. Зачем? Ну, потому что я не вижу смысла ставить графический, когда в консольном и так есть весь необходимый функционал.

Установка:
pacin greetd greetd-tuigreet - в этой команде и далее я использую pacin, что является алиасом для команды sudo pacman -S.

nano /etc/greetd/config.toml
В файле нужно прописать запуск иксов:

command = "tuigreet --cmd startx"

Запускаем службу и проверяем:
systemctl enable greetd.service now

Если все ровно, то идем дальше. В tuigreet можно настроить внешний вид, но меня это не интересует. Я хочу лишь добавить отображение времени:

command = "tuigreet --time --cmd startx"

9. Менеджер блокировки экрана:

Будем ставить xsecurelock, т.к. он минималистичный и удобный в настройке:
pacin xsecurelock

Создаем скрипт для конфигурации xsecurelock:
mkdir ~/.local/scripts
nano ~/.local/scripts/xsecurelock_conf.sh

И добавляем туда "конфигурацию". Вот пример, в котором мы скрываем ввод пароля, имя пользователя и хоста, а также отображаем дату и время:

#!/bin/zsh

export XSECURELOCK_PASSWORD_PROMPT=hidden
export XSECURELOCK_SHOW_DATETIME=1
export XSECURELOCK_SHOW_USERNAME=0
export XSECURELOCK_SHOW_HOSTNAME=0
xsecurelock

Более подробно про переменные для конфигурации xsecurelock можно посмотреть в документации на официальной странице репозитория GitHub или выполнив xsecurelock --help. Например, можно изменить цвет фона или других элементов экрана блокировки:
XSECURELOCK_BACKGROUND_COLOR="#333"

Меняем права на файл:
chmod -w ~/.local/scripts/xsecurelock_conf.sh

Хоткеи для ручной блокировки экрана:

# xsecurelock
super + l
		~/.local/scripts/xsecurelock_conf.sh

Автоматическая блокировка:
pacin xautolock

Добавляем это в .xinitrc:
xautolock -time 10 -notify 5 -notifier '/usr/lib/xsecurelock/until_nonidle /usr/lib/xsecurelock/dimmer' -locker "~/.local/scripts/xsecurelock_conf.sh" &

И, т.к. у нас ноутбук, нужно еще добавить действие при закрытии крышки с помощью события ACPI. Тут я вижу 2 адекватных варианта:

  1. При закрытии крышки просто отправлять систему в сон;
  2. При закрытии крышки полностью выключать ноутбук.

И мне больше по душе 2 вариант, потому что я не помню ни одного случая, когда мне приходилось пользоваться режимом сна. Всегда, когда я закрываю крышку ноутбука - это означает, что я закончил работать и в ближайшее время ноутбук мне не понадобится.
Редактируем файл:
sudo nano /etc/systemd/logind.conf
И меняем значение HandleLidSwitch на poweroff. При необходимости можно поменять и остальные значения.

10. Устанавливаем базовый набор программ:

Вот список базовых програм, которые я обязательно ставлю:

  1. Веб-браузер (Firefox)
  2. Файловый менеджер (Nemo или XFE)
  3. PDF-reader (PDFArranger)
  4. Архиватор (Ark)
  5. Просмотрщик изображений (gwenview)
  6. Медиаплеер (VLC)
  7. Текстовый редактор (Mousepad)
  8. Календарь (Calcurse)

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

  1. Obsidian (pacin obsidian)
  2. GParted (pacin gparted)
  3. Tor Browser (pacin torbrowser-launcher)
  4. VS Code (pacin code)
  5. VeraCrypt (pacin veracrypt)

11. Темы для QT и GTK:

Начнем с QT. Чтобы редактировать темы, можно воспользоваться графическими инструментами:
pacin qt5ct qt6ct

Для того, чтобы темы применялись, нужно прописать в /etc/environment следующую строку:
QT_QPA_PLATFORMTHEME=qt5ct:qt6ct

Теперь запускаем qt5ct и qt6ct, а далее настраиваем темы по своему вкусу. Я просто сделал темную тему, чтобы было комфортнее:

На предупреждение о том, что программа якобы неправильно настроена не обращаем внимание, т.к. по дефолту она требует, чтобы переменную мы задавали в файле .profile, ну а я же задал ее в /etc/environment. На функционал и примененные темы это никак не повлияет и разницы никакой.

Чтобы принудительно использовать стиль для Qt 5, можно установить переменную среды QT_STYLE_OVERRIDE, но я этого делать не стал, т.к. пока что не было необходимости. Если замечу, что какое-то приложение будет неправильно отображать тему, то может быть и сделаю.

Теперь GTK. Для GTK2 и GTK3 есть пакет lxappearance, который поставляется с графическим интерфейсом для редактирования тем.
Для GTK2 по дефолту темой является Raleigh, но в Arch Linux есть отдельный конфигурационный файл /usr/share/gtk-2.0/gtkrc и чтобы изменить тему для GTK2, нужно использовать GTK2_RC_FILES. Например, чтобы запустить GIMP с темой Raleigh:
GTK2_RC_FILES=/usr/share/themes/Raleigh/gtk-2.0/gtkrc gimp
Дополнительные темы можно установить из официальных репозиториев или AUR. извлеченные вручную должны быть в ~/.themes/ или /usr/share/themes/.
GUI для смены темы GTK2:
pacin gtk-chtheme

Я установил тему adapta-gtk-theme с помощью pacman:
pacin adapta-gtk-theme

Для GTK3 и GTK4 по умолчанию темой является Adwaita, но также включены темы HighContrast и HighContrastInverse. Чтобы использовать определенную тему, ее нужно установить в org.gnome.desktop.interface через gsettings. Например:
gsettings set org.gnome.desktop.interface gtk-theme HighContrastInverse.

Очень удобно юзать dconf-editor, который можно установить через pacman. Это GUI-программа для редактирования базы данных dconf. Через него я также поставил тему из пакета adapta-gtk-theme.

Иногда темы GTK3 содержат вариант тёмной темы, но программы используют их только тогда, когда они явно запрашиваются. Чтобы принудительно использовать тёмную тему для всех программ GTK3, пишем в /usr/share/gtk-2.0/gtkrc:
gtk-application-prefer-dark-theme = true

Для GTK4:
gsettings set org.gnome.desktop.interface color-scheme prefer-dark (ну или через dconf-editor)

Чтобы юзать сочетания клавиш в GTK, наведя на соответствующий пункт в меню:
gtk-can-change-accels = 1
Удобно, если привыкли пользоваться клавой (особенно, на тайловом WM).

Сразу скажу, что единый стиль для QT и GTK мне необязателен, поэтому я и использую разные темы для них. Главное, чтобы была темная тема, а остальное не важно.

Еще, необходимо создать следующие файлы и установить вместо Theme и Font свои значения:
~/.config/gtk-3.0/settings.ini:

[Settings]
gtk-icon-theme-name = Theme
gtk-theme-name = Theme
gtk-font-name = Font

~/.config/gtk-4.0/settings.ini:

[Settings]
gtk-icon-theme-name = Theme
gtk-theme-name = Theme
gtk-font-name = Font

12. USBGuard для защиты от вредоносных USB-устройств:

С помощью USBGuard можно создать белый список USB-устройств. Установка:
pacin usbguard
Создаём исходный набор правил (от имени root):
sudo su
usbguard generate-policy > /etc/usbguard/rules.conf
Для того чтобы отредактировать исходный набор правил:
nano /etc/usbguard/rules.conf
Запуск службы:
systemctl start usbguard.service
Добавляем в автозагрузку:
systemctl enable usbguard.service

Чтобы вывести список всех USB-устройств, распознаваемых USBGuard:
usbguard list-devices
Чтобы авторизовать устройство для взаимодействия с системой:
usbguard allow-device <ID устройства (можно узнать с помощью предыдущей команды)>
Для деавторизации и удаления устройства из системы:
reject-device <ID устройства>
Для деавторизации без удаления устройства из системы:
usbguard block-device <ID устройства>

13. Лаунчер приложений (rofi):

pacin rofi
Сочетание клавиш для запуска:

# program launcher
super + d
        rofi -show drun

Создаем файл конфигурации:
mkdir -p ~/.config/rofi
rofi -dump-config > ~/.config/rofi/config.rasi

А также нам нужен файл с темой. С дизайном я не очень дружу, да и заморачиваться сейчас не хочу над этим, поэтому взял готовое решение отсюда. В итоге получилось так:

Некоторые скрипты, которые я использую:
Monitor Layout - изменение настроек мониторов
Finder - поиск по файлам
Power - управление питанием

14. Агент аутентификации:

Установка:
pacin lxqt-policykit

Автозапуск через .xinitrc:
lxqt-policykit-agent &

15. Демон уведомлений:

Мой выбор пал на Dunst. Устанваливаем и копируем файл конфигурации:
pacin dunst

mkdir ~/.config/dunstcp /etc/dunst/dunstrc

Кидаем в автозагрузку через .xinitrc:
dunst &

Теперь редактируем конфиг. Т.к. у меня ноутбук, но иногда я его подключаю к внешнему монитору - было бы неплохо отображать уведомления на сфокусированном мониторе:
follow = keyboard

Немного изменим размеры отображаемых уведомлений, чтобы они были более заметными:
width = (300, 500)
height = (100, 300)

И сделаем, чтобы воспроизводился звук при отображении уведомления:
bash-скрипт:

#!/bin/zsh
paplay /path/to/alert_sound.wav

dunstrc:

[play_sound]
    summary = "*"
    script = /path/to/alert.sh

16. Polybar:

Установка:
pacin polybar

Копирование файла конфигурации:
mkdir -p ~/.conifg/polybar
cp /usr/share/doc/polybar/examples/config.ini ~/.config/polybar/config.ini

По умолчанию polybar выглядит вот так:

Напишем скрипт для отображения на двух мониторах:

killall -q polybar
while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done

if type "xrandr"; then
  for m in $(xrandr --query | grep " connected" | cut -d" " -f1); do
    MONITOR=$m polybar --reload mybar &
  done
else
  polybar --reload mybar &
fi
monitor=${env:MONITOR:}

Отлично, теперь нам нужно:

  • Настроить отображение цифр для переключения рабочих столов
  • Избавиться от отображения заголовка сфокусированного окна
  • Избавиться от отображения информации о дисковом пространстве, а также загруженности RAM и CPU
  • Настроить управление звуком
  • Настроить управление сетевыми подключениями
  • Настроить отображение даты и времени
  • Настроить внешний вид

Будем делать все по порядку. Для начала вместо римских цифр я хочу сделать современные. Да, это можно было сделать еще во время базовой настройки конфига bspwm, но тогда я об этом не подумал. Итак, меняем значения:

Обновляем bspwm (в моем случае Super + Alt + R) и проверяем:

Теперь избавимся от отображения вот этих заголовков окон:

Я это хочу сделать, потому что для меня они не несут никакой пользы. Я и так знаю, на каком окне сфокусирован, потому что на сфокусированном окне появляется рамка. Достаточно просто закомментировать или удалить вот эти строки:

Тоже самое делаем с модулями filesystem, memory и cpu, чтобы они тоже перестали отображать ненужную информацию.

Итак, у нас остались модули для отображения рабочих столов, управления звуком, раскладкой клавиатуры, сетевыми подключениями и отображения времени. Теперь настроим все эти модули для комфортного взаимодействия с ними. Начнем со звука. Для начала нужно установить pulseaudio и pipewire, а также настроить совместимость pipewire с pulseaudio. Я ставлю и то, и другое, потому что у pulseaudio есть ограничения в поддержке некоторых технологий, но при этом он легко настраивается, а в pipewire гораздо больше возможностей, но при этом, с ним взаимодействовать тяжелее.

Убираем раздражающий текст "VOL ":

Теперь настраиваем так, чтобы при нажатии ПКМ открывался pavucontrol (его еще установить нужно с помощью команды pacin pavucontrol):
click-right = pavucontrol

Чтобы pavucontrol открывался в плавающем режиме, с определенными размерами и рядом с модулем, нужно прописать правила в конфиге bspwm. Например:
bspc rule -a pavucontrol state=floating rectangle=750x450+1000+50

Теперь поработаем с сетевыми подключениями. Нужно, чтобы при нажатии ПКМ, открывался менеджер подключений Wi-Fi Для этого подойдет iwgtk:
yain iwgtk
systemctl enable iwd.service
systemctl start iwd.service

Еще я убрал отображение локального IP-адреса.

Для Bluetooth:
systemctl enable bluetooth.service
systemctl start bluetooth.service
blueman-manager

Чуть-чуть настроим цвета:

[colors]
background = #0f0f0f
background-alt = #1b1d1f
foreground = #C5C8C6
primary = #f2ae55
secondary = #8ABEB7
alert = #A54242
disabled = #707880

В итоге у нас получился вот такой статус-бар:

Результат:

Что мы получили в итоге? Минималистичную ОС, которая просто идеально подойдет для ноутбука и повысит эффективность работы благодаря тайлингу и удобным хоткеям. Вот пара скриншотов:

Да, здесь нет красивого визуального оформления, обоев с аниме-девочками, анимаций и прочего. Для исключительно профессиональных нужд всего этого и не требуется. Достаточно оконного менеджера, некоторых других составляющих DE и установленного набора нужных программ. Таким образом, нас ничего не отвлекает от работы и система не нагружена лишними процессами. Идеально же!


Мой Telegram

Мой GitHub

Поддержать автора донатом