AwesomeWM Ricing

Posted by
This entry is part 11 of 14 in the series Arch Linux instalace

AwesomeWM patří k nejlepším window managerům s podporou vyššího programovacího jazyka Lua. V našem seriálu Tondy Fischera již máte dostatek zkušeností pro plný ricing pokročilého prostředí AwesomeWM.

Awesome Ricing - Pokročilá Konfigurace

Nyní již můžeme přikročit k plné a pokročilé konfiguraci AwesomeWM. Cest je nekonečné množství. Já jsem zvolil cestu pro jednoduchou údržbu, vysokou efektivitu práce a kvalitní grafický design, který nesníží performance systému. Podobně jako u xfce v minulých dílech. Zde je navíc možné vše integrovat dohromady, jakoukoliv věc si přizpůsobit svému workflow a propojit WM s vašimi pracovními skripty a nástroji.

Vše, co tady bude probíráno je moje aktuální řešení problematiky. Je nutné pochopit, že ve chvíli, kdy máte framework awesomewm k dispozici, můžete si vše vytvořit podle vlastní představy, variant je tedy nekončné množství, toto je největší rozdíl od fixních WMs nebo DEs, které lze pouze omezeně konfigurovat.

Základ dobrého designu a dlouhodobého úspěšného programování

Úspěchem dobrého programování a nejlepšího designu jsou 3 věci:

  • Jednoduchost a přehlednost
  • Vlastní knihovna / framework
  • Omezení a minimalismus třetích stran

Vždy nejlepší řešení je to nejjednodušší. Je velmi obtížné se k němu dostat, protože lidé přemýšlí komplexně. Vždy dbejte na tom se k němu dostat a mít vše přehledné i pro další lidi, je to v podstatě zásada free open source.

Obecné věci, které používáte a určtiě budete používat i dále si ukládejte do svého frameworku a knihoven. Toto je nutný základ. Vlastní přehledný framework je naprostým základem pro každého programátora, ať už děláte v jakémkoliv jazyce. Správná správa balíčků a knihoven je základ, pouze takto lze se neustále zdokonalovat, vyvíjet a minimalizovat chyby, stabilizací frameworku.

Používání 3 stran je potřeba minimalizovat na rozumnou úroveň. Knihovny musí být otevřené, aktivní a opět jednoduché. Nikdy neberte nic komplikovaného. Vždy dejte přednost svému řešení, pokud je v časovém rámci. Pečlivě volte knihovny, které potom již velmi težce lze opouštět!

V našem případě je zde vytvořen základní lua balíček fishlive, který slouží k rozšíření frameworku awesome pro moje osobní potřeby a přístupy. Vytvořte si svůj vlastní.

Pattern MVC - Model, View, Controller

Tento návrhový vzor umožňuje rozdělit funkcionalitu do 3 základních celků, které mezi sebou navzájem komunikují. Jeho nespornou výhodou je oddělení business logic od grafického zpracování a doménové vrstvy. Stav aplikace je držen v modelu, který je zpravováván controllerem, ve finále je předán model komponentě view, která jej zobrazí. Pro frontend je toto základ, kdy views může být celá řada, business logiky mají různou implementaci a je jednoduché udržovat a zprovávvat doménové objekty v rámci modelu i zcela jiným procovním teamem. Tento pattern je již starší, takže existuje řada modifikací a pokročilých nápadů, které jej doplňují, nicméně základní myšlenka zůstavá.

My si tento pattern půjčíme a pomocí něj si myšlenkově upravíme defaultní rc.lua, který již používáte z předchozí nahrávky. Defaultní konfigurace je tvořena pouze jedním konfiguračním souborem rc.lua a doplňkovým souborem theme.lua, která umoňuje záměnu dle zvoleného theme. Myšlenka je správná, ale implementace je nevhodná. Brzy zjistíte, že jakákoliv větší grafická úprava zasahuje zejména do rc.lua, neboť je velmi nekvalitně odděleno řízení controller a view. Naše první kroky tedy musí nutně vést k základnímu oddělení controller a model-view části.

Provedeme zjednodušení na controller část a model-view část. Stav systému/grafického prostředí necháme držet ve vhodných sdílených lua tabulkách, které jsou sdíleny mezi oběma částmi. View část musíme nutně oddělit od rc.lua, kde ponecháme striktně pouze controller.

Model-View - themes/…/theme.lua

část je dobré rozdělit si na 3 základní podčásti:

  • View Common Libs - použitelné části, které budeme používat i dalších našich themes a views, toto přesuneme do vlastní lua knihovny
  • View Color Schemes - barevná schémata, která lze aplikovat na naše views a která jsou rovněž obecná.
  • View Theme - specifická část pro každé vaše jednotlivé theme. Definice a konfigurace všech grafických komponent a jejich chování, aplikace základních view coomon libs a color schemat do těchto komponent. Tato třetí část je jako jediná definována vždy od začátku pro každé vaše nové theme.

View Common Libs

Tato knihovna byla založena a uložena v adresáři ~/.config/awesome/fishlive. Obsahuje colorschemes, nové layouts, wallpaper různorodá ovládání, widgety a utility.

View Color Schemes

Jsou zavedena pomocí vytvořeného příkazu local theme = fishlive.colorscheme.default, který do modelu/tabulky theme nastaví všechny důležité barvy, základní proměnné pro grafické view pro zvolené poslední barevné schéma, které lze dynamicky měnit.

View Theme

Je uloženo v každém theme.lua souboru. Tento soubor mám principiálně tvořen touto strukturou:

  • theme = fishlive.colorscheme.default Defaultní naplnění modelu daným barevných schématem a přípravou atributů modelu
  • model attribute settings Další specifické nastavení modelu dle zvoleného theme, okraje, fonty, notifikační události, taglist, layouts, menu
  • wallpaper support Nastavení adresářů a základních atributů pro ovládání wallpapers v awesomewm
  • widget declaration Vytvoření instanací widgetů a jejich specifické nakonfigurování do wibox grafických prvků, které lze umístit do prostředí
  • menu a application launcher declaration Deklarace grafické části menu dle modelu a controlleru
  • screen.connect_signal(request:desktop_decoration) Hlavní funkce, která provádí zavádění a hlavní činnost každého theme při jeho inicializačním procesu. Další body jsou již součástí tohoto procesu, volání této funkce, listenera.
  • tags and layout settings Nastavení tagů a layotů, taglistu pro dané theme
  • tasklist configuration Nastavení tasklistu pro zobrazování aktivně běžících aplikací systému
  • main panel configuration Sestavení hlavního top panelu ze všech wiboxes, taglistu, tasklistu, systray apod.
  • naughty configuration Nastavení notifikačních událostí a notification center a error handling support
  • wallpaper handling Nastavení wallpaper ovládání a propojení s controllerem. V mém případě mám rád wallpapers, takže mám i velmi silnou podporu vytvořenou v awesomewm.

Controller - rc.lua

je možné taky rovněž dělit na další celky. Nicméně já mám v tomto ohledu rád minimalismus a lepší údržbu, neměl jsem tedy důvod tento soubor rozdělovat, naopak jej strukturalizuji pomoci folding sekcí a používám jednotlivé listenery, které awesome API nabízí k oddělení jednotlivých funkcionálních bloků. Soubor je tedy pořád jeden rc.lua, obsahuje však pouze vše co není grafika nebo grafická komponenta. Obsahuje tedy veškerou business logiku a workflow. Konkrétně obsahuje:

  • naughty.connect_signal(request:display_error) Error handling (zpracování výjimek a chyb v awesome a spojených aplikacích)
  • modkey, terminal, editor, menus Definice základních proměnných pro základní klávesy, terminaly, editory, menu modely
  • tag.connect_signal(request:default_layouts) Definice základních layouts, které budete používat
  • beautiful.init Výběr model-view (theme), které bude napojedno a zobrazováno
  • awful.mouse.append_global_mousebindings Nadefinování myších událostí a chování myši
  • awful.keyboard.append_global_keybindings Definice globálních keybindings pro váš systém, rozděleno dle kategorií a účelu (folding style a separátní listeners)
  • client.connect_signal(request:default_keybindings) Clientská konfigurace keybindings pro jednotlivá zobrazovaná okna (client = běžící aplikace v okně)
  • ruled.client.connect_signal("request:rules" ...) Definice pravidel (rules) pro zobrazování aplikací, druhů aplikací a reakce oken na speciální events
  • special connect_signal events for specific handling Poslech dalších několik speciálních událostí pro specifické změny v awesomewm prostředí. Patří sem titlebars (horní lišta na okně), zpracování událostí, další chování myši apod.
  • awful.spawn.with_shell("~/.config/awesome/autorun.sh") Poslední částí rc.lua souboru je spuštění vašeho autorun.sh skriptu pro aplikace, služby a další přednastavení prostředí, ve kterém awesomewm běží.

AwesomeWM Multicolor Theme Instalace

Demostraci principů si předvedeme na mém github projektu raven2cz/awesomewm-config.

Zajištění resources a podpůrných skriptů pro spolupráci systémového prostředí (external resources)

# 1. backup your awesomewm configuration first
# 2. git clone repository to ~/.config/awesome
git clone git@github.com:raven2cz/awesomewm-config.git ~/.config/awesome
# 3. ensure prerequsities and dependencies
paru -S rofi # rofi similar app like d-menu
# my used wallpapers and event images
mkdir ~/Pictures/wallpapers && git clone git@github.com:raven2cz/public-wallpapers.git
# my global colorscheme switcher script
# make steps which are described in the raven2cz/global-colorscheme.git project, you need themes for your terminal mainly
mkdir ~/git/github && git clone git@github.com:raven2cz/global-colorscheme.git && cd ~/git/github/global-colorscheme && ./install.sh
# rofi project themes
mkdir ~/.config/rofi && git clone https://github.com/raven2cz/rofi-themes ~/.config/rofi

Těmito několika kroky jsme si připravili celé prostředí a zajistili potřebné grafické resources, které jsou v projektu používány. Nejedná se tedy pouze o jeden projekt, ale řadu několika projektů, které spolu spolupracují. Pamatujte, že vždy v GNU/Linux platí, každá věc musí dělat jednu dílčí činnost a dělat ji správně. Nedělejte multi věci, pak se to nabaluje na sebe a nefunguje. Dělejte malé komponenty, které se navzájem používají a dají se použít i pro další linuxová prostředí a uživatele…

Já ještě používám externí aplikaci xmenu, pro rychlé restartování, vypnutí počítače, oblíbené aplikace, kernel nástroje a skupiny aplikací. Nicméně to není podmínkou. Mám jej na klávesové zkratce super+w. Viz například nahrávka DistroTube XMenu.

Nyní již máte připraveno celé prostředí pro spuštění. Jediné co chybí je zkontrolovat váš ~/.xinitrc, který by měl být nastaven již z minulé nahrávky a autorun.sh, který pouze jako ukázku zde prezentuji.

#!/usr/bin/env bash
function run {
  if ! pgrep -f $1 ;
  then
    $@&
  fi
}

run /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
run /usr/lib/kactivitymanagerd
#run /use/lib/polkit-kde-authentication-agent-1
run /usr/lib/pam_kwallet_init
run nm-applet
run pamac-tray
if ! pgrep -f cloud-drive-ui; then synology-drive start; fi
run parcellite
run clipmenud
run volctl
run /usr/bin/emacs --daemon
run ~/.config/conky/start_conky ~/.config/conky/MX-CoreBlue/conkyrc2core
run remmina -i
run picom --experimental-backends --config $HOME/.config/picom/picom.conf

Autorun běžících aplikací a služeb je nespočet. Tento berte jako můj základ, pokud budou nejasnosti, napište to do youtube vlákna k nahrávce, nebo na naše diskuzní fórum.

Základní ovládání

Complete Guide here.

super+ctrl+s

Základní ovládání se točí kolem klávesy Super (modkey), která je výhdardně určena pro AW prostředí. Samostatné alt, ctrl a shift nikdy nejsou použity, pouze ve vazbě. Toto je nezbytné pro další všechna programová prostředí a aplikace. Výhradně se snažte nastavovat ve svých prostředích X11 bindingkeys. Například DWM svůj default používá velmi nevhodně.

S učením klávesových zkratek nespěchejte, doporučuji se je osvojit, jsou totiž sebrány z nejlepších WM současnosti a nastaveny pro nejlepší ergonomii a efektivní práci. Několik rad bude uvedeno ve videu.

Změna barevných schémat a aplikací

super+c -> change color scheme, super+alt+c -> next colorschme wallpaper, super+ctrl+c -> previous colorscheme wallpaper

Změna barevného schématu probíhá na třech úrovních:

  • Nejprve se zavolá globální skript global_colorscheme.sh, který změní podporované externí aplikace. V aktuální verzi mezi ně patří kitty, alacritty, doom emacs, atom. Dojde k okamžité dynamické změně.
  • Pak dojde ke změně základních barev pro conky aplikaci. Ta vytváří změnu v konfiguračním souboru, který je načítán conky knihovnou. Dojde k okamžité dynamické změně.
  • Naposled dojde k přepsání souboru last.lua v multicolor scheme AW, kam se nastaví aktuální zvolené schéma a dojde k restartu AW. Celkově se tak završí celkové přenastavení všech schémat celého systému

Změna wallpapers pro jednotlivé tagy

  • random wallpaper for 1st tag
  • different wallpaper per actual shown tag
  • user wallpaper tags

super+alt+w next user wallpaper, super+ctrl+w previous user wallpaper

  • dev tag uses as default colorscheme wallpaper

super+c -> change color scheme, super+alt+c -> next colorschme wallpaper, super+ctrl+c -> previous colorscheme wallpaper

Prohlídka prostředí a programového Lua řešení

Po spuštění multicolor theme awesomewm projektu si můžeme prohlédnout detailněji strukturu projektu.

nvim ~/.config/awesome/rc.lua
nvim ~/.config/awesmoe/themes/multicolor/theme.lua

Zde se opět vraťe k první kapitole a postupně projděte seznam rc.lua a theme.lua přímo v kódu si mozkově propojit, které části kódu patří k daným strukturám.

Tato část je popsána primárně ve druhé video nahrávce věnované awesomewm ricing…

Propojení aplikací do awesomewm prostředí

  • ukázka s tmux a nvim propojení s awesomewm

Spustit tmux, nvim a zobrazit super+ctrl+s, napojení na awesomewm a jeho klávesové propojení a možnosti controlleru

  • propjení barevných schémat a unifikace GNU/Linux aplikací s prostředím awesomewm a jeho model-view schématem
  • napojení událostí aplikací s naughty

dokončená kompilace nebo testy vašich projektů v maven, komprimací, událostí z browseru, napojení cron tasků, stavů běhu aplikací na pozadí bash terminálu, dokončení kdenlive vytvoření videií a mnoho dalšího.

Důležité odkazy

Series Navigation<< AwesomeWM BasicsKDE Plasma – Pracovní prostředí nové generace pro Linux >>

Leave a Reply

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..