i3wm
March 27, 2022

Быстрая настройка 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

При запуске программы вы видите главное меню:

  • DISTROS - открывает меню выбора дистрибутивов

В этом пункте нужно выбрать ваш дистрибутив, нажав нужную кнопку, и программа начнет устанавливать все необходимые компоненты и файлы на ваш ПК. После будет проведена перезагрузка системы.

меню выбора дистрибутивов
  • MYOS - выводит информацию о системе
MYOS - информация о системе
  • SETTINGS - открывает настройки утилиты (можно выбрать язык)
Меню настроек

Что я использовал для написания программы

Изначально, я решил писать проект на 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"

"~" - домашняя директория пользователя

Конфиг I3

В начале конфига назначается клавиша $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

set $firstMonitor HDMI-0

set $secondMonitor DP-1-1

# Выбор монитора рабочих для мест

workspace 1 output $firstMonitor

...

workspace 6 output $secondMonitor

...

P.s если у вас один монитор, всё автоматически будет подстроено под него.

Настройка перемещения окон и смены переключения на рабочее место

# перемещение на рабочие места

bindsym $mod+1 workspace 1

bindsym $mod+2 workspace 2

bindsym $mod+3 workspace 3

...

# перемещение выделенных окон на рабочее место

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

# старт rofi

bindsym $mod+space exec --no-startup-id rofi -show run -font "Noto Sans 13"

Rofi menu - меню запуска приложений

Автостарт программ

Таким образом можно настраивать автоматический старт программ

# Polybar панель

exec_always --no-startup-id ~/.config/polybar/launch.sh &

Запуск программ по горячим клавишам

# запуск терминала kitty

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

Отступы между окнами

# отступы с помощью I3-gaps

for_window [class="^.*"] border pixel 2

# внутренние отступы

gaps inner 8

# внешние отступы

gaps outer 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

client.background #242424

Настройка панели POLYBAR

Polybar - это панель, которая расположена у меня в верхней части экрана, она позволяет использовать её встроенные модули или дописывать свои собственные, с помощью простого синтаксиса и программирования.

Конйиг файл панели Polybar

Конфигурационный файл POLYBAR находится в "~/.config/polybar/config".

Как выглядит панель

В конфиге панели я дописал пару тем оформления и несколько модулей (подробнее см. в моём GitHub)

Настройка цветов панели

; Solarized Dark =======

background = #223C43

foreground = #f3f4f5

; ======================

Радиус и отступы

radius = 12

padding-left = 5

padding-right = 5

РАСПОЛОЖЕНИЕ МОДУЛЕЙ

(Слева, по центру, справа)

modules-left = i3 xwindow

modules-center =

modules-right = cpu2 memory3 volume date xkeyboard2 uptime variety trash wireless-network powermenu

Трей

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

; комментарий выглядит так ";"

tray-detached = false

tray-offset-x = 0

tray-offset-y = 0

tray-padding = 2

tray-maxsize = 20

tray-scale = 1.0

tray-position = right

tray-background = ${colors.background}

Значки рабочих мест

# ЗНАЧКИ РАБОЧИХ СТОЛОВ

(Иконки используют шрифт Awesome)

ws-icon-0 = 1;

ws-icon-1 = 2;

ws-icon-2 = 3;

ws-icon-3 = 4;

ws-icon-4 = 5;

ws-icon-5 = 6;

ws-icon-6 = 7;

ws-icon-7 = 8;

ws-icon-8 = 9;

ws-icon-9 = 10;

ws-icon-default = ""

Модуль корзины

[module/trash]

type = custom/script

interval = 1

exec = ~/.config/polybar/trash

format-prefix = "  "

format-prefix-padding-left = 0

format-prefix-padding-right = 0

format-prefix-foreground = ${colors.foreground}

label-padding = 0

label-foreground = ${colors.foreground}

click-left = rm -rf ~/.local/share/Trash/files/* ;exec notify-send 'Корзина пуста'

format-background =

format-underline = #FF7676

Модуль даты и времени

(По умолчанию я добавил 12-часовой формат, он меняется при клике на модуль на самой панели)

[module/date]

type = internal/date

interval = 1

date = " %d-%m-%Y "

date-alt = " %d-%m-%Y"

time = %l:%M:%S %p

#time = %H:%M:%S

time-alt = %H:%M:%S

format-prefix = " "

format-prefix-foreground = #c1941a

format-underline = #6C6565

format-foreground = ${colors.foreground}

format-background = ${colors.background}

label =  %time% |  %date%

Выше я продемонстрировал как выглядят модули панели изнутри, вы можете попробовать написать нужные вам модули сами, или поискать их в интернете.

Приглашаю вас на GitHub репозиторий проекта - там вы можете ознакомиться с его кодом/скриптами и посмотреть интересующие вас настройки.

Благодарю за внимание! Надеюсь я поделился чем-то новым и интересным для вас.