---
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)