Быстрая настройка I3-wm с помощью GOAPPLE
Данная программа была разработана в целях бэкапа конфигурации моей системы Solus I3. Я приготовил 3 конфигурации оконного менеджера I3 для систем: Manjaro, Solus и Fedora, так как они наиболее популярны на мой взгляд. Я использовал каждый из представленных дистрибутивов и временами меняю совой основной дистрибутив на один из представленных.
Я пользуюсь Linux с 18 февраля 2019 года, но летом 2020 я начал использовать Linux как основную систему(на тот момент ещё Ubuntu 20.04 LTS).
Что меня привело к Linux
Как я уже писал выше, до 2019 года я использовал операционную систему Windows, но в один момент мне захотелось преобразить её и моя затея сильно затянулась, т.к оформление, которое я надумал, требовало большой работы над Windows 10 и некоторые нужные мне задачи реализовались не так удобно и практично, как могло бы быть. По этому, я решил попробовать что-то новое и открыл для себя Linux, а именно дистрибутив KDE Neon. Я быстро настроил внешний вид системы и решил попробовать использовать её для своих нужд(программирование, серфинг в интернете, игры).
Немного разобравшись в теме Linux я открыл для себя терминал, и то как нужно его применять и был приятно удивлен его возможностями по сравнению с MS DOS (Командная строка Windows). Стало удобнее обращаться с системой, я мог быстрее реализовать нужные мне задачи, например компиляция программ. Да и в целом, система была чуть менее требовательна к ресурсам ПК, нежели Windows 10.
Мне очень понравилось так взаимодействовать с системой, и с тех пор я использую Linux, как основную ОС на своем домашнем ПК. В процессе изучения, как и все, сменил много дистрибутивов и через время остановился на Manjaro.
Как зарождался мой проект
В августе 2021 года мне стали интересны тайловые оконные менеджеры, и почему некоторые люди предпочитают их стековым оконным менеджерам. Поразмыслив на эту тему, я решил посмотреть, что в них такого интересного и установил I3wm на мой дистрибутив.С тех пор я заинтересовался возможными конфигурациями таких систем под управлением I3, так же мне очень понравилось то, что теперь системе нужно намного меньше ресурсов в отличие от Windows 10, которая требует 2гб ОЗУ для нормальной работы с ней и тяжеловесных сред рабочего стола Gnome и KDE.
Так я начал изучать тайловый оконный менеджер I3. Я экспериментировал с конфигурациями I3wm, собрав свою собственную. Через некоторое время я понял, что мне нужен бэкап(точка восстановления) моей системы, я сохранил мою конфигурацию и все нужные файлы на мой github, чтобы в случае сбоя системы, при очередных экспериментах, я мог быстро восстановить старую сборку.
Ещё через некоторое время я понял, что не стоит ограничиваться одной системой, и написал конфигурации под все дистрибутивы, которые использовал или когда-нибудь буду использовать, чтобы если я решу перейти на тот или иной дистрибутив, я мог бы как всегда применить свой конфиг I3wm. Таким образом, я написал все нужные мне конфигурации и решил обернуть их в небольшую утилиту, которая мне поможет их автоматически установить, опять же ради экономии времени (иначе пришлось бы вручную переносить все файлы в конфиг системы). Спустя некоторое время, методом проб и ошибок, я написал эту утилиту.
Так же я надеюсь, что моя работа поможет новичкам, изучающим I3, быстрее и лучше разобраться в настройке своей системы.
Как работает программа
Чтобы запустить программу нужно:
- Клонировать репозиторий:
git clone https://github.com/Avdushin/GOAPPLE - Перейти в склонированный репозиторий:
cd GOAPPLE - Запустить утилиту:
./pin3apple
При запуске программы вы видите главное меню:
В этом пункте нужно выбрать ваш дистрибутив, нажав нужную кнопку, и программа начнет устанавливать все необходимые компоненты и файлы на ваш ПК. После будет проведена перезагрузка системы.
Что я использовал для написания программы
Изначально, я решил писать проект на bash, так как подумал что было бы интересно реализовать на нем эту затею (первые версии программы были написаны на bash). Но потом, я решил поработать над интерфейсом, и тут мне на помощь пришёл Python, т.к я понимал как можно реализовать на нём поставленные мной задачи, но через время я решил что python не так эффективен для моей программы и переписал её на GO.
Проект на python (неактуально) - https://github.com/Avdushin/PIN3APPLE
Проект на GO (актуальная версия) - https://github.com/Avdushin/GOAPPLE
Для реализации программы я использовал библиотеки GO:
"os/exec" - для запуска команд
"github.com/mbndr/figlet4go" - для вывода логотипа
Код проекта - https://github.com/Avdushin/GOAPPLE/blob/main/main.go
Можно заметить, что код простой, но при этом он выполняет поставленную задачу.
Как настраивается конфигурационный файл I3
Конфигурация I3 настраивается с помощью всего одного конфигурационного файла, он находится в "~/.config/i3/config"
"~" - домашняя директория пользователя
В начале конфига назначается клавиша $MOD - главная клавиша в системе, с помощью которой можно управлять окнами, запуском приложений и другими действиями в системе.
Далее я настроил раскладку клавиатуры:
exec --no-startup-id setxkbmap -model pc105 -layout us,ru -variant -option grp:alt_shift_toggle
русский, английский языки и переключение раскладки на alt+shift
Настройка рабочих столов для нескольких мониторов:
exec --no-startup-id xrandr --output HDMI-0 --left-of DP-1-1 --auto
# Выбор монитора рабочих для мест
workspace 1 output $firstMonitor
workspace 6 output $secondMonitor
P.s если у вас один монитор, всё автоматически будет подстроено под него.
Настройка перемещения окон и смены переключения на рабочее место
# перемещение на рабочие места
# перемещение выделенных окон на рабочее место
bindsym $mod+Shift+1 move container to workspace 1; workspace 1
bindsym $mod+Shift+2 move container to workspace 2; workspace 2
bindsym $mod+Shift+3 move container to workspace 3; workspace 3
Для меню запуска программ я использую приложение rofi
bindsym $mod+space exec --no-startup-id rofi -show run -font "Noto Sans 13"
Таким образом можно настраивать автоматический старт программ
exec_always --no-startup-id ~/.config/polybar/launch.sh &
Запуск программ по горячим клавишам
bindsym $mod+Return exec kitty;focus
bindsym Print exec --no-startup-id flameshot gui
Управление плавающими/статичными окнами
for_window [class="gcolor3"] floating enable
for_window [class="Nitrogen"] floating disable
for_window [class="^.*"] border pixel 2
# class обводка фон текст индикатор
client.focused #6790EB #6790EB #e5e5e5 #6790EB
client.unfocused #222222 #222222 #aaaaaa #222222
client.focused_inactive #222222 #222222 #a9a9a9 #222222
client.placeholder #222222 #222222 #aaaaaa #222222
client.urgent #d42121 #d42121 #f7f7f7 #d42121
Настройка панели POLYBAR
Polybar - это панель, которая расположена у меня в верхней части экрана, она позволяет использовать её встроенные модули или дописывать свои собственные, с помощью простого синтаксиса и программирования.
Конфигурационный файл POLYBAR находится в "~/.config/polybar/config".
В конфиге панели я дописал пару тем оформления и несколько модулей (подробнее см. в моём GitHub)
modules-right = cpu2 memory3 volume date xkeyboard2 uptime variety trash wireless-network powermenu
По умолчанию системный трей в polybar включен, но я не использую его. Чтобы его включить, вам нужно раскоментировать строки:
; комментарий выглядит так ";"
tray-background = ${colors.background}
(Иконки используют шрифт Awesome)
exec = ~/.config/polybar/trash
format-prefix-padding-left = 0
format-prefix-padding-right = 0
format-prefix-foreground = ${colors.foreground}
label-foreground = ${colors.foreground}
click-left = rm -rf ~/.local/share/Trash/files/* ;exec notify-send 'Корзина пуста'
(По умолчанию я добавил 12-часовой формат, он меняется при клике на модуль на самой панели)
format-prefix-foreground = #c1941a
format-foreground = ${colors.foreground}
format-background = ${colors.background}
Выше я продемонстрировал как выглядят модули панели изнутри, вы можете попробовать написать нужные вам модули сами, или поискать их в интернете.
Приглашаю вас на GitHub репозиторий проекта - там вы можете ознакомиться с его кодом/скриптами и посмотреть интересующие вас настройки.
Благодарю за внимание! Надеюсь я поделился чем-то новым и интересным для вас.