Files

272 lines
17 KiB
Markdown

---
title: "AwesomeWM Ricing"
date: 2022-04-23
author: "archos"
draft: false
categories: ['Návody']
tags: ['awesomewm']
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](https://github.com/raven2cz) již máte dostatek zkušeností pro plný ricing pokročilého prostředí AwesomeWM.
![](https://arch-linux.cz/wp-content/uploads/2022/04/awesomewm-1-1-1024x576.jpg)
![](https://arch-linux.cz/wp-content/uploads/2022/04/awesomewm-2-1-1024x576.jpg)
https://www.youtube.com/watch?v=FCxd5id77c4&t=31s
## 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í.**
![](https://arch-linux.cz/wp-content/uploads/2022/04/mvc.png)
## 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.
### [](https://github.com/raven2cz/tux/tree/main/211207-awesome-ricing#model-view---themesthemelua)
### **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.
#### [](https://github.com/raven2cz/tux/tree/main/211207-awesome-ricing#view-common-libs)
#### 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.
#### [](https://github.com/raven2cz/tux/tree/main/211207-awesome-ricing#view-color-schemes)
#### 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.
#### [](https://github.com/raven2cz/tux/tree/main/211207-awesome-ricing#view-theme)
#### 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.
### [](https://github.com/raven2cz/tux/tree/main/211207-awesome-ricing#controller---rclua)
### **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](https://github.com/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](https://github.com/phillbush/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](https://youtu.be/wMrdCbrQjnQ).
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](https://forum.arch-linux.cz/).
## Základní ovládání
Complete Guide [here](https://github.com/raven2cz/tux/blob/main/211207-awesome-ricing/awesome-keybindings-en.org).
`super+ctrl+s`
![](https://arch-linux.cz/wp-content/uploads/2022/04/awesome-multicolor-keybindings-1024x685.jpg)
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`
![](https://arch-linux.cz/wp-content/uploads/2022/04/awesome-multicolor-theme-910x1024.jpg)
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.
https://www.youtube.com/watch?v=KDJbas2FVXM
# [](https://github.com/raven2cz/tux/tree/main/211207-awesome-ricing#důležité-odkazy)
# Důležité odkazy
- [raven2cz/awesomewm-config](https://github.com/raven2cz/awesomewm-config)
- [Youtube Channel TUX: Svět Linuxu](https://www.youtube.com/user/tondafischer/featured)
- [archlinux.org](https://archlinux.org/)
- [wiki.a](https://wiki.archlinux.org/)[c](https://wiki.archlinux.org/)[hlinux.org](https://wiki.archlinux.org/)
- [fishlive.org/blog](https://fishlive.org/en/blog-tech-art/arch)
- [github/raven2cz/tux](https://github.com/raven2cz/tux)
- [github/raven2cz/dotfiles](https://github.com/raven2cz/dotfiles)
- [raven2cz/public-wallpapers](https://github.com/raven2cz/public-wallpapers)
- [raven2cz/global-colorschemes](https://github.com/raven2cz/global-colorscheme)