Недавно я понял, что мой ноутбук недостаточно производителен. Ему не хватает мощности вывезти всё вместе: Vim (+ 20 плагинов), VSCode (+ столько же расширений), Google Chrome (+ 20 вкладок) и так далее. Казалось бы, обычная проблема на ноутбуках с 4 ГБ ОЗУ, однако я не стал сдаваться. Я люблю ноутбуки за их компактность, а также за то, что они могут работать на батарее где угодно. Мне нужно было просто подумать, как освободить лишнюю ОЗУ, а также увеличить энергоэффективность.
Если вам нужны сразу конфиги, то пролистывайте вниз к разделу "Разбираем установочку"
Операционная система
Так как мне нужна ОС, которая будет жрать наименьшее количество ОЗУ и батареи, я выбрал Arch Linux. Классика, ничего нового. Его репозитории позволят мне автоматизировать кучу ненужной работы, а AUR позволит сократить ещё больше времени.
Менеджер окон
Я решил взять именно менеджер окон, а не полноценное окружение. Хоть мне и нравятся кеды (KDE), но они все равно кушают достаточно много, из-за того, что они подтягивают за собой достаточно много библиотек и зависимостей. Ну и сама по себе DE'шка жрёт достаточно много из-за всяких ненужных виджетов.
Разбираем установочку
Для начала нам нужно установить все основные пакеты (нужно же нам что-то конфигурировать)
sudo pacman -Sy --noconfirm i3 i3-gaps base-devel rofi okular feh vim code picom kitty ranger git xdotool xautolock i3lock-color scrot imagemagick rxvt-unicode urxvt-perls
Вот примерная схема, как всё будет работать
Какие пакеты для чего нужны?
Пакет | Для чего нужен |
---|---|
xwinwrap | Нужен для установки файлов с расширением .gif в виде анимированных обоев |
polybar | Нужен для того, чтобы в менеджере окон отображался топбар |
i3 | Сам оконный менеджер |
i3-gaps | Расширение для оконного менеджера |
base-devel | Компоненты необходимые для установки polybar |
rofi | Программа для запуска приложений |
okular | Программа для просмотра документов |
zathura | Программа для просмотра документов (поддерживает не так много расширений, однако более минималистичная) |
feh | Программа для просмотра картинок, а также для установки фоновых изображений |
vim | Основной редактор |
code | Дополнительный редактор |
picom | Композитор (программа которая создает тени, прозрачность, блюрит фон) |
kitty | Основной терминал |
urxvt | Дополнительный терминал |
ranger | Файловый менеджер |
git | Система контроля версий |
xdotool | Утилита, которая поможет при разработке скриптов и взаимодействии с окнами |
xautolock | Утилита, которая блокирует компьютер при бездействии и запускает i3-lock |
i3lock-color | Улучшенная версия i3lock. Программа нужна для блокировки компьютера и ввода пароля |
scrot | Минималистиченое приложение для создания скриншотов |
imagemagick | Программа, которая поможет при взаимодействии с картинками (блюрит их заранее, конвертирует, меняет разрешение) |
Конфигурируем i3
i3 — Оконный менеджер, который не потребляет много ресурсов, тем самым, он будет полезен нам для того, чтобы "эмулировать" другие обычные оконные менеджеры. (В подарок конечно же идёт тилинг — способность оконного менеджера раскрывать приложения на всю свободную часть экрана)
Я буду приводить конфиг i3 по частям, для того, чтобы даже новички всё поняли. Начнём с самого главного — кнопка $Mod. Она служит для того, чтобы взаимодействовать с i3. Через неё будут проходить все основные хоткеи.
### Tweaks ###
# Set main key (Win)
set $mod Mod4
Далее научим наш оконный менеджер двигать окна мышью при нажатии $mod
# Press MOD key and click on mouse to move your window
floating_modifier $mod
# Focus doesn't follow the mouse
focus_follows_mouse no
Установим шрифты для наших приложений, а также для приложений, которые зависят от i3
# Fonts
font pango: JetBrains Mono 10
Моей задумкой было сделать все окна изначально летающими (что, как оказалось, очень удобно). Для пояснения: в i3 есть много видов стыковки окон (Tilling, Fullscreen, Tabbed, Float, Stacking), все они удобны в различных ситуациях, однако я не вижу смысла делать все окна заполняющими весь экран. Пусть лучше они заполняют его при нажатии $mod + f
, а висят в воздухе по умолчанию, это я и сделал в следующем куске кода:
# Maximum width for floating windows
floating_minimum_size 400 x 350
floating_maximum_size 1800 x 900
# (1920 - 10)/2 and (1080 - 10)/2
for_window [class=".*"] floating enable
for_window [class=".*"] resize set 955 535
for_window [class=".*"] focus
Для того, чтобы вы не путались выражение (1920 - 10)/2 and (1080 - 10)/2
означает что каждое окно будет занимать четверть экрана, а также будет отступ (друг от друга) ровно в 5 пикселей (5 со всех сторон).
Далее давайте забиндим все основные приложения. Все хоткеи стараются соответствовать данной схеме
## Keyboard Settings ##
# Apps
bindsym $mod+Return exec kitty
bindsym $mod+Mod1+r exec "kitty sh -c 'ranger'"
bindsym $mod+Mod1+g exec google-chrome-stable
bindsym $mod+Mod1+c exec code
bindsym $mod+Mod1+v exec dolphin
bindsym Print exec spectacle
Также, забиндим все основные функции, которые мы выполняем не думая, и которые обязательно должны быть
# System / Volume
bindsym XF86AudioMute "exec amixer -D pulse sset Master toggle && notify-send \"Volume\" \"Sound is (un)muted\" --urgency low"
bindsym XF86AudioRaiseVolume "exec amixer -D pulse sset Master 5%+ && notify-send \"Volume\" \"Volume added +5%\n Volume level is now $(amixer -D pulse get Master | awk -F 'Left:|[][]' 'BEGIN {RS=\"\"}{ print $3 }')\" --urgency low"
bindsym XF86AudioLowerVolume "exec amixer -D pulse sset Master 5%- && notify-send \"Volume\" \"Volume added -5%\n Volume level is now $(amixer -D pulse get Master | awk -F 'Left:|[][]' 'BEGIN {RS=\"\"}{ print $3 }')\" --urgency low"
# System / Brightness
bindsym XF86MonBrightnessDown exec xbacklight -dec 5
bindsym XF86MonBrightnessUp exec xbacklight -inc 5
# Moving from one window to another
bindsym $mod+h focus left
bindsym $mod+j focus down
bindsym $mod+k focus up
bindsym $mod+l focus right
# Choose one of your workspaces
bindsym $mod+1 workspace $workspace1
bindsym $mod+2 workspace $workspace2
bindsym $mod+3 workspace $workspace3
bindsym $mod+4 workspace $workspace4
# Move window to the workspace
bindsym $mod+Shift+1 move container to workspace $workspace1
bindsym $mod+Shift+2 move container to workspace $workspace2
bindsym $mod+Shift+3 move container to workspace $workspace3
bindsym $mod+Shift+4 move container to workspace $workspace4
## Floating manipulation ##
# Make window floating
bindsym $mod+f floating toggle
# Change focus
bindsym $mod+Shift+f focus mode_toggle
# Move windows
bindsym $mod+Shift+h move left 20px
bindsym $mod+Shift+j move down 20px
bindsym $mod+Shift+k move up 20px
bindsym $mod+Shift+l move right 20px
# Resizing Windows
bindsym $mod+Ctrl+l resize shrink width 10 px or 10 ppt
bindsym $mod+Ctrl+k resize grow height 10 px or 10 ppt
bindsym $mod+Ctrl+j resize shrink height 10 px or 10 ppt
bindsym $mod+Ctrl+h resize grow width 10 px or 10 ppt
# Make window fullscreen
bindcode 95 fullscreen toggle
# Reload Configuration
bindsym $mod+p reload
# Kill a window
bindsym $mod+x exec xdotool getwindowfocus windowkill
Сделаем секцию автостарта
### Autostart ###
# Lockscreen after 10min delay
exec --no-startup-id "$HOME/.config/i3/lockscreen"
# Convert background gif to jpg
exec --no-startup-id convert -verbose $HOME/.config/i3/{gif.gif,gif.jpg}
# Generate Colorscheme
exec_always --no-startup-id wal -i $HOME/.config/i3/gif-0.jpg
# Compositor
exec_always --no-startup-id "killall -q picom; picom --config $HOME/.config/picom.conf"
# Language
exec --no-startup-id setxkbmap -model pc105 -layout us,ru -option grp:win_space_toggle
# Dunst
exec --no-startup-id dunst
# Kitty
exec kitty
# Dropbox
exec --no-startup-id dropbox &
# Polybar
exec_always --no-startup-id $HOME/.config/polybar/launch.sh
# Cursor
exec_always --no-startup-id xsetroot -cursor_name left_ptr
i3-gaps — сборка i3, которая добавляет много новых функций. Одной из них является добавление отступов (gaps), которые визуально выглядят очень хорошо.
### i3-gaps ###
# Borders for windows
for_window [class=".*"] border pixel 5
# Gaps for i3bar
for_window [class="i3bar"] gaps outer current set 10
# Gaps
gaps inner 10
gaps outer 4
### Topbar and color theme ###
# Color theme of borders
client.focused #bf616a #2f343f #d8dee8 #bf616a #d8dee8
client.focused_inactive #2f343f #kf343f #d8dee8 #2f343f #2f343f
client.unfocused #2f343f #2f343f #d8dee8 #2f343f #2f343f
client.urgent #2f343f #2f343f #d8dee8 #2f343f #2f343f
client.placeholder #2f343f #2f343f #d8dee8 #2f343f #2f343f
client.background #2f343f
Что получилось?
А получилась довольно минималистичная сборка на i3, которая очень шустро работает на ноутбуках и даёт неплохие показатели
Так как конфигураций я написал ещё очень много (что отлично видно на скриншоте) их можно найти в репозитории Great i3.
Ещё пару скриншотов
v1000
название словно специально созвучно с названием процессора интел
ogost
Название i3-wm кивок в сторону wmii, на котором он основан.