mirror of
https://github.com/SqrtMinusOne/sqrtminusone.github.io.git
synced 2025-12-10 15:53:03 +03:00
5196 lines
620 KiB
HTML
5196 lines
620 KiB
HTML
<!DOCTYPE html>
|
|
<html lang=""><head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
|
|
<title>Desktop</title>
|
|
<meta name="description" content="Freedom is a state of mind">
|
|
<meta name="author" content='SqrtMinusOne'>
|
|
|
|
<link href="https://fonts.googleapis.com/css2?family=Inconsolata:wght@400;700&display=swap" rel="stylesheet">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w==" crossorigin="anonymous">
|
|
|
|
|
|
<link rel="stylesheet" href="/sass/researcher.min.css">
|
|
|
|
|
|
<link rel="icon" type="image/ico" href="https://sqrtminusone.xyz/favicon.ico">
|
|
|
|
|
|
<script defer data-domain="sqrtminusone.xyz" src="https://plausible.sqrtminusone.xyz/js/plausible.js"></script>
|
|
|
|
</head>
|
|
|
|
<body><div class="container mt-5">
|
|
<nav class="navbar navbar-expand-sm flex-column flex-sm-row text-nowrap p-0">
|
|
<a class="navbar-brand mx-0 mr-sm-auto" href="https://sqrtminusone.xyz/" title="SqrtMinusOne">
|
|
|
|
SqrtMinusOne
|
|
</a>
|
|
<div class="navbar-nav flex-row flex-wrap justify-content-center">
|
|
|
|
|
|
|
|
<a class="nav-item nav-link" href="/" title="Index">
|
|
Index
|
|
</a>
|
|
|
|
<span class="nav-item navbar-text mx-1">/</span>
|
|
|
|
|
|
<a class="nav-item nav-link" href="/posts/" title="Posts">
|
|
Posts
|
|
</a>
|
|
|
|
<span class="nav-item navbar-text mx-1">/</span>
|
|
|
|
|
|
<a class="nav-item nav-link" href="/configs/readme" title="Configs">
|
|
Configs
|
|
</a>
|
|
|
|
<span class="nav-item navbar-text mx-1">/</span>
|
|
|
|
|
|
<a class="nav-item nav-link" href="/emacs-packages/" title="Emacs packages">
|
|
Emacs packages
|
|
</a>
|
|
|
|
|
|
|
|
</div>
|
|
</nav>
|
|
</div>
|
|
<hr>
|
|
<div id="content">
|
|
<script defer language="javascript" type="text/javascript" src="/js/dynamic-toc.js"></script>
|
|
<div class="root">
|
|
<h1 id="title-small-screen">
|
|
Desktop
|
|
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=dotfiles&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
|
</h1>
|
|
<div class="container" id="actual-content">
|
|
<h1 id="title-large-screen" class="dotfiles-title">
|
|
Desktop
|
|
<iframe src="https://ghbtns.com/github-btn.html?user=SqrtMinusOne&repo=dotfiles&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
|
|
</h1>
|
|
<p>My general desktop environment configuration.</p>
|
|
<p>Parts prefixed with (OFF) are not used, but kept for historic purposes. For some reason GitHub’s org renderer ignores TODO status, hence such a prefix. Round brackets instead of square ones to prevent GitHub’s org renderer from screwing up.</p>
|
|
<p>References:</p>
|
|
<ul>
|
|
<li><a href="https://sqrtminusone.xyz/posts/2022-02-12-literate/">A few cases of literate configuration</a>. A few interesting ways in which literate configuration is used in this file.</li>
|
|
</ul>
|
|
<h2 id="some-remarks">Some remarks</h2>
|
|
<p>Removed features:</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Feature</th>
|
|
<th>Last commit</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>rofi-buku</td>
|
|
<td>e22476b0cc6315e104e5ce4de5559a61c830c429</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h2 id="global-customization">Global customization</h2>
|
|
<h3 id="colors">Colors</h3>
|
|
<p>I used to define color codes here (see <a href="https://github.com/SqrtMinusOne/dotfiles/commit/2dbf1cdd008ec0061456782cca3ebd76e603b31e">previous version of the file</a>), now I just get colors from the current Emacs theme.</p>
|
|
<p>To use them, let’s define a noweb block:</p>
|
|
<p><a id="code-snippet--get-color"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">let</span> ((<span style="color:#19177c">color</span> (<span style="color:#008000">or</span> (<span style="color:#19177c">my/color-value</span> <span style="color:#19177c">name</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#00f">></span> <span style="color:#008000">quote</span> <span style="color:#666">0</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#ba2121">"\""</span> <span style="color:#19177c">color</span> <span style="color:#ba2121">"\""</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">color</span>))
|
|
</span></span></code></pre></div><p>Test:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span><span style="color:#19177c"><<get-color</span>(<span style="color:#19177c">name=</span><span style="color:#ba2121">"red"</span><span style="color:#666">,</span> <span style="color:#19177c">quote=1</span>)<span style="color:#19177c">>></span>
|
|
</span></span></code></pre></div><p>Also, get a foreground for the current color:</p>
|
|
<p><a id="code-snippet--get-fg-for-color"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">let</span> ((<span style="color:#19177c">val</span> (<span style="color:#008000">if</span> (<span style="color:#19177c">ct-light-p</span> (<span style="color:#19177c">my/color-value</span> <span style="color:#19177c">name</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/color-value</span> <span style="color:#19177c">'black</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/color-value</span> <span style="color:#19177c">'white</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#00f">eq</span> <span style="color:#008000">quote</span> <span style="color:#666">1</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#ba2121">"\""</span> <span style="color:#19177c">val</span> <span style="color:#ba2121">"\""</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">val</span>))
|
|
</span></span></code></pre></div><p>Test;</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span><span style="color:#19177c"><<get-fg-for-color</span>(<span style="color:#19177c">name=</span><span style="color:#ba2121">"red"</span><span style="color:#666">,</span> <span style="color:#19177c">quote=1</span>)<span style="color:#19177c">>></span>
|
|
</span></span></code></pre></div><p>This table used to have values, now it has only keys:</p>
|
|
<p><a id="table--colors"></a></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>color</th>
|
|
<th>key</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>black</td>
|
|
<td>color0</td>
|
|
</tr>
|
|
<tr>
|
|
<td>red</td>
|
|
<td>color1</td>
|
|
</tr>
|
|
<tr>
|
|
<td>green</td>
|
|
<td>color2</td>
|
|
</tr>
|
|
<tr>
|
|
<td>yellow</td>
|
|
<td>color3</td>
|
|
</tr>
|
|
<tr>
|
|
<td>blue</td>
|
|
<td>color4</td>
|
|
</tr>
|
|
<tr>
|
|
<td>magenta</td>
|
|
<td>color5</td>
|
|
</tr>
|
|
<tr>
|
|
<td>cyan</td>
|
|
<td>color6</td>
|
|
</tr>
|
|
<tr>
|
|
<td>white</td>
|
|
<td>color7</td>
|
|
</tr>
|
|
<tr>
|
|
<td>light-black</td>
|
|
<td>color8</td>
|
|
</tr>
|
|
<tr>
|
|
<td>light-red</td>
|
|
<td>color9</td>
|
|
</tr>
|
|
<tr>
|
|
<td>light-green</td>
|
|
<td>color10</td>
|
|
</tr>
|
|
<tr>
|
|
<td>light-yellow</td>
|
|
<td>color11</td>
|
|
</tr>
|
|
<tr>
|
|
<td>light-blue</td>
|
|
<td>color12</td>
|
|
</tr>
|
|
<tr>
|
|
<td>light-magenta</td>
|
|
<td>color13</td>
|
|
</tr>
|
|
<tr>
|
|
<td>light-cyan</td>
|
|
<td>color14</td>
|
|
</tr>
|
|
<tr>
|
|
<td>light-white</td>
|
|
<td>color15</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="xresources">Xresources</h3>
|
|
<h4 id="colors-in-xresources">Colors in Xresources</h4>
|
|
<p>Some programs get their colors from <code>XResources</code>. Let’s generate that file.</p>
|
|
<p><a id="code-snippet--get-xresources"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#00f">mapconcat</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">elem</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> <span style="color:#ba2121">"*"</span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">elem</span>) <span style="color:#ba2121">": "</span> (<span style="color:#19177c">my/color-value</span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">elem</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-filter</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">elem</span>) (<span style="color:#008000">and</span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">elem</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#19177c">string-empty-p</span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">elem</span>)))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">table</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"\n"</span>)
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span><<get-xresources()>>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>*background: <<get-color(name=<span style="color:#ba2121">"bg"</span>)>>
|
|
</span></span><span style="display:flex;"><span>*foreground: <<get-color(name=<span style="color:#ba2121">"fg"</span>)>>
|
|
</span></span></code></pre></div><p>Run <code>xrdb -load ~/.Xresources</code> to apply the changes.</p>
|
|
<h4 id="fonts">Fonts</h4>
|
|
<p>Also, Xresources are used to set <code>Xft</code> settings. Unfortunately, the DPI setting has to be unique for each machine, which means I cannot commit <code>Xresources</code> to the repo.</p>
|
|
<p><a id="code-snippet--get-dpi"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">let</span> ((<span style="color:#19177c">hostname</span> (<span style="color:#00f">system-name</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span> ((<span style="color:#00f">string-equal</span> <span style="color:#19177c">hostname</span> <span style="color:#ba2121">"azure"</span>) <span style="color:#666">120</span>)
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">string-equal</span> <span style="color:#19177c">hostname</span> <span style="color:#ba2121">"eminence"</span>) <span style="color:#666">120</span>)
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">string-equal</span> <span style="color:#19177c">hostname</span> <span style="color:#ba2121">"violet"</span>) <span style="color:#666">120</span>)
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">string-equal</span> <span style="color:#19177c">hostname</span> <span style="color:#ba2121">"iris"</span>) <span style="color:#666">120</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#800">t</span> <span style="color:#666">96</span>)))
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>Xft.dpi: <<get-dpi()>>
|
|
</span></span></code></pre></div><h3 id="themes">Themes</h3>
|
|
<p>A few programs I use to customize the apperance are listed below.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Guix dependency</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>matcha-theme</td>
|
|
<td>My preferred GTK theme</td>
|
|
</tr>
|
|
<tr>
|
|
<td>papirus-icon-theme</td>
|
|
<td>My preferred Icon theme</td>
|
|
</tr>
|
|
<tr>
|
|
<td>gnome-themes-standard</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>xsettingsd</td>
|
|
<td>X11 settings daemon</td>
|
|
</tr>
|
|
<tr>
|
|
<td>gnome-themes-extra</td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><a href="https://github.com/derat/xsettingsd">xsettingsd</a> is a lightweight daemon which configures X11 applications. It is launched with shepherd in the <a href="#services">Services</a> section.</p>
|
|
<p><a id="code-snippet--get-gtk-theme"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">if</span> (<span style="color:#19177c">my/light-p</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Matcha-light-azul"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Matcha-dark-azul"</span>)
|
|
</span></span></code></pre></div><p><a id="code-snippet--get-icons-theme"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">if</span> (<span style="color:#19177c">my/light-p</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Papirus"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Papirus-Dark"</span>)
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>Net/ThemeName <span style="color:#ba2121">"<<get-gtk-theme()>>"</span>
|
|
</span></span><span style="display:flex;"><span>Net/IconThemeName <span style="color:#ba2121">"<<get-icons-theme()>>"</span>
|
|
</span></span><span style="display:flex;"><span>Gtk/DecorationLayout <span style="color:#ba2121">"menu:minimize,maximize,close"</span>
|
|
</span></span><span style="display:flex;"><span>Gtk/FontName <span style="color:#ba2121">"Sans 10"</span>
|
|
</span></span><span style="display:flex;"><span>Gtk/MonospaceFontName <span style="color:#ba2121">"JetBrainsMono Nerd Mono 12"</span>
|
|
</span></span><span style="display:flex;"><span>Gtk/CursorThemeName <span style="color:#ba2121">"Adwaita"</span>
|
|
</span></span><span style="display:flex;"><span>Xft/Antialias <span style="color:#666">1</span>
|
|
</span></span><span style="display:flex;"><span>Xft/Hinting <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span>Xft/HintStyle <span style="color:#ba2121">"hintnone"</span>
|
|
</span></span></code></pre></div><h3 id="mime">MIME</h3>
|
|
<p>Setting the default MIME types</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[Default Applications]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">text/html</span><span style="color:#666">=</span><span style="color:#ba2121">qutebrowser.desktop</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">x-scheme-handler/http</span><span style="color:#666">=</span><span style="color:#ba2121">firefox.desktop</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">x-scheme-handler/https</span><span style="color:#666">=</span><span style="color:#ba2121">firefox.desktop</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">x-scheme-handler/tg</span><span style="color:#666">=</span><span style="color:#ba2121">userapp-Telegram Desktop-7PVWF1.desktop</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">image/png</span><span style="color:#666">=</span><span style="color:#ba2121">feh.desktop</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">image/jpg</span><span style="color:#666">=</span><span style="color:#ba2121">feh.desktop</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">image/jpeg</span><span style="color:#666">=</span><span style="color:#ba2121">feh.desktop</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">application/pdf</span><span style="color:#666">=</span><span style="color:#ba2121">org.pwmt.zathura.desktop</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[Added Associations]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">x-scheme-handler/tg</span><span style="color:#666">=</span><span style="color:#ba2121">userapp-Telegram Desktop-7PVWF1.desktop;</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">application/pdf</span><span style="color:#666">=</span><span style="color:#ba2121">org.pwmt.zathura.desktop</span>
|
|
</span></span></code></pre></div><h3 id="device-specific-settings">Device-specific settings</h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Guix dependency</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>xrandr</td>
|
|
<td>X11 CLI to RandR</td>
|
|
</tr>
|
|
<tr>
|
|
<td>xgamma</td>
|
|
<td>A tool to alter monitor’s gamma correction</td>
|
|
</tr>
|
|
<tr>
|
|
<td>xinput</td>
|
|
<td>Configure input devices</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Set screen layout & other params depending on hostname</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#19177c">hostname</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>hostname<span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$hostname</span><span style="color:#ba2121">"</span> <span style="color:#666">=</span> <span style="color:#ba2121">"indigo"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> xrandr --output DisplayPort-0 --off --output HDMI-A-0 --mode 1920x1080 --pos 0x0 --rotate normal --output DVI-D-0 --mode 1920x1080 --pos 1920x0 --rotate normal
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">elif</span> <span style="color:#666">[</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$hostname</span><span style="color:#ba2121">"</span> <span style="color:#666">=</span> <span style="color:#ba2121">"eminence"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> xgamma -gamma 1.25
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">elif</span> <span style="color:#666">[</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$hostname</span><span style="color:#ba2121">"</span> <span style="color:#666">=</span> <span style="color:#ba2121">"violet"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> xrandr --output HDMI-0 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output DP-0 --off --output DP-1 --mode 1920x1080 --pos 1920x0 --rotate normal --output DP-2 --off --output DP-3 --off --output DP-4 --off --output DP-5 --off --output None-1-1 --off
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><h2 id="exwm">EXWM</h2>
|
|
<p>Settings for <a href="https://github.com/ch11ng/exwm">Emacs X Window Manager</a>, a tiling WM implemented in Emacs Lisp. This part has a few bits copied from my blog post.</p>
|
|
<p>References:</p>
|
|
<ul>
|
|
<li><a href="https://github.com/ch11ng/exwm/wiki">EXWM Wiki</a></li>
|
|
<li><a href="https://github.com/daviwil/emacs-from-scratch/blob/master/Desktop.org">Emacs From Scratch config</a></li>
|
|
<li><a href="https://sqrtminusone.xyz/posts/2022-01-03-exwm/">Using EXWM and perspective.el on a multi-monitor setup</a></li>
|
|
</ul>
|
|
<h3 id="startup-and-ui">Startup & UI</h3>
|
|
<h4 id="xsession">Xsession</h4>
|
|
<p>First things first, Emacs has to be launched as a window manager. On a more conventional system I’d create a .desktop file in some system folder that can be seen by a login manager, but in the case of Guix it’s a bit more complicated, because all such folders are not meant to be changed manually.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>xinit</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>xss-lock</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>However, GDM, the login manager that seems to be the default on Guix, launches <code>~/.xsession</code> on the startup if it’s present, which is just fine for my purposes.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Source .profile</span>
|
|
</span></span><span style="display:flex;"><span>. ~/.profile
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Disable access control for the current user</span>
|
|
</span></span><span style="display:flex;"><span>xhost +SI:localuser:<span style="color:#19177c">$USER</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Fix for Java applications</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">export</span> <span style="color:#19177c">_JAVA_AWT_WM_NONREPARENTING</span><span style="color:#666">=</span><span style="color:#666">1</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Apply XResourses</span>
|
|
</span></span><span style="display:flex;"><span>xrdb -merge ~/.Xresources
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Turn off the system bell</span>
|
|
</span></span><span style="display:flex;"><span>xset -b
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Use i3lock as a screen locker</span>
|
|
</span></span><span style="display:flex;"><span>xss-lock -- i3lock -f -i /home/pavel/Pictures/lock-wallpaper.png &
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Some apps that have to be launched only once.</span>
|
|
</span></span><span style="display:flex;"><span>picom &
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># nm-applet &</span>
|
|
</span></span><span style="display:flex;"><span>dunst &
|
|
</span></span><span style="display:flex;"><span>copyq &
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Run the Emacs startup script as a session.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># exec dbus-launch --exit-with-session ~/.emacs.d/run-exwm.sh</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">exec</span> dbus-launch --exit-with-session emacs -mm --debug-init -l ~/.emacs.d/desktop.el
|
|
</span></span></code></pre></div><h4 id="startup-apps">Startup apps</h4>
|
|
<p>Now that Emacs is launched, it is necessary to set up the EXWM-specific parts of config.</p>
|
|
<p>I want to launch some apps from EXWM instead of the Xsession file for two purposes:</p>
|
|
<ul>
|
|
<li>the app may need to have the entire desktop environment set up</li>
|
|
<li>or it may need to be restarted if Emacs is killed.</li>
|
|
</ul>
|
|
<p>As of now, these are polybar, feh and, shepherd:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-run-polybar</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">call-process</span> <span style="color:#ba2121">"~/bin/polybar.sh"</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-set-wallpaper</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">call-process-shell-command</span> <span style="color:#ba2121">"feh --bg-fill ~/Pictures/wallpaper.jpg"</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-run-shepherd</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#19177c">string-empty-p</span> (<span style="color:#19177c">shell-command-to-string</span> <span style="color:#ba2121">"pgrep -u pavel shepherd"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">call-process</span> <span style="color:#ba2121">"shepherd"</span>)))
|
|
</span></span></code></pre></div><h4 id="pinentry">Pinentry</h4>
|
|
<p>The GUI pinentry doesn’t work too well with EXWM because of issues with popup windows, so we will use the Emacs one.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">pinentry</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:after</span> (<span style="color:#19177c">exwm</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">setenv</span> <span style="color:#ba2121">"GPG_AGENT_INFO"</span> <span style="color:#800">nil</span>) <span style="color:#408080;font-style:italic">;; use emacs pinentry</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">auth-source-debug</span> <span style="color:#800">t</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">epg-gpg-program</span> <span style="color:#ba2121">"gpg"</span>) <span style="color:#408080;font-style:italic">;; not necessary</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">require</span> <span style="color:#19177c">'epa-file</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">epa-file-enable</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">epa-pinentry-mode</span> <span style="color:#19177c">'loopback</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">epg-pinentry-mode</span> <span style="color:#19177c">'loopback</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">pinentry-start</span>))
|
|
</span></span></code></pre></div><p><a id="code-snippet--find-pinentry"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">executable-find</span> <span style="color:#ba2121">"pinentry"</span>)
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>default-cache-ttl <span style="color:#666">3600</span>
|
|
</span></span><span style="display:flex;"><span>max-cache-ttl <span style="color:#666">3600</span>
|
|
</span></span><span style="display:flex;"><span>allow-emacs-pinentry
|
|
</span></span><span style="display:flex;"><span>allow-loopback-pinentry
|
|
</span></span><span style="display:flex;"><span>pinentry-program <<find-pinentry()>>
|
|
</span></span></code></pre></div><h4 id="modeline">Modeline</h4>
|
|
<p>Show the current workspace in the modeline.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">exwm-modeline</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'exwm-init-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">exwm-modeline-mode</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/use-colors</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-modeline-current-workspace</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:foreground</span> (<span style="color:#19177c">my/color-value</span> <span style="color:#19177c">'yellow</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:weight</span> <span style="color:#19177c">'bold</span>)))
|
|
</span></span></code></pre></div><h4 id="misc">Misc</h4>
|
|
<p>Check if running Arch and not Guix.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/is-arch</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">file-exists-p</span> <span style="color:#ba2121">"/etc/arch-release"</span>))
|
|
</span></span></code></pre></div><h3 id="windows">Windows</h3>
|
|
<p>A bunch of functions related to managing windows in EXWM.</p>
|
|
<h4 id="moving-windows">Moving windows</h4>
|
|
<p>As I wrote in my <a href="https://sqrtminusone.xyz/posts/2021-10-04-emacs-i3/">Emacs and i3</a> post, I want to have a rather specific behavior when moving windows (which does resemble i3 in some way):</p>
|
|
<ul>
|
|
<li>if there is space in the required direction, move the Emacs window there;</li>
|
|
<li>if there is no space in the required direction, but space in two orthogonal directions, move the Emacs window so that there is no more space in the orthogonal directions;</li>
|
|
</ul>
|
|
<p>I can’t say it’s better or worse than the built-in functionality or one provided by evil, but I’m used to it and I think it fits better for managing a lot of windows.</p>
|
|
<p>So, first, we need a predicate that checks whether there is space in the given direction:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">require</span> <span style="color:#19177c">'windmove</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-direction-exists-p</span> (<span style="color:#19177c">dir</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Check if there is space in the direction DIR.
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">Does not take the minibuffer into account."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">cl-some</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">dir</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">win</span> (<span style="color:#19177c">windmove-find-other-window</span> <span style="color:#19177c">dir</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">and</span> <span style="color:#19177c">win</span> (<span style="color:#19177c">not</span> (<span style="color:#00f">window-minibuffer-p</span> <span style="color:#19177c">win</span>)))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">pcase</span> <span style="color:#19177c">dir</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">'width</span> <span style="color:#666">'</span>(<span style="color:#19177c">left</span> <span style="color:#19177c">right</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">'height</span> <span style="color:#666">'</span>(<span style="color:#19177c">up</span> <span style="color:#19177c">down</span>)))))
|
|
</span></span></code></pre></div><p>And a function to implement that:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-move-window</span> (<span style="color:#19177c">dir</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Move the current window in the direction DIR."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">other-window</span> (<span style="color:#19177c">windmove-find-other-window</span> <span style="color:#19177c">dir</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">other-direction</span> (<span style="color:#19177c">my/exwm-direction-exists-p</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">pcase</span> <span style="color:#19177c">dir</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">'up</span> <span style="color:#19177c">'width</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">'down</span> <span style="color:#19177c">'width</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">'left</span> <span style="color:#19177c">'height</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">'right</span> <span style="color:#19177c">'height</span>)))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">and</span> <span style="color:#19177c">other-window</span> (<span style="color:#19177c">not</span> (<span style="color:#00f">window-minibuffer-p</span> <span style="color:#19177c">other-window</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">window-swap-states</span> (<span style="color:#00f">selected-window</span>) <span style="color:#19177c">other-window</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">other-direction</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">evil-move-window</span> <span style="color:#19177c">dir</span>)))))
|
|
</span></span></code></pre></div><p>My preferred keybindings for this part are, of course, <code>s-<H|J|K|L></code>.</p>
|
|
<h4 id="resizing-windows">Resizing windows</h4>
|
|
<p>I find this odd that there are different commands to resize tiling and floating windows. So let’s define one command to perform both resizes depending on the context:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">my/exwm-resize-value</span> <span style="color:#666">5</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-resize-window</span> (<span style="color:#19177c">dir</span> <span style="color:#19177c">kind</span> <span style="color:#008000">&optional</span> <span style="color:#19177c">value</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Resize the current window in the direction DIR.
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">DIR is either 'height or 'width, KIND is either 'shrink or
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> 'grow. VALUE is </span><span style="color:#19177c">`my/exwm-resize-value'</span><span style="color:#ba2121"> by default.
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">If the window is an EXWM floating window, execute the
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">corresponding command from the exwm-layout group, execute the
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">command from the evil-window group."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">value</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">value</span> <span style="color:#19177c">my/exwm-resize-value</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let*</span> ((<span style="color:#19177c">is-exwm-floating</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">and</span> (<span style="color:#19177c">derived-mode-p</span> <span style="color:#19177c">'exwm-mode</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">exwm--floating-frame</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">func</span> (<span style="color:#008000">if</span> <span style="color:#19177c">is-exwm-floating</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">intern</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"exwm-layout-"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">pcase</span> <span style="color:#19177c">kind</span> (<span style="color:#19177c">'shrink</span> <span style="color:#ba2121">"shrink"</span>) (<span style="color:#19177c">'grow</span> <span style="color:#ba2121">"enlarge"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"-window"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">pcase</span> <span style="color:#19177c">dir</span> (<span style="color:#19177c">'height</span> <span style="color:#ba2121">""</span>) (<span style="color:#19177c">'width</span> <span style="color:#ba2121">"-horizontally"</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">intern</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"evil-window"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">pcase</span> <span style="color:#19177c">kind</span> (<span style="color:#19177c">'shrink</span> <span style="color:#ba2121">"-decrease-"</span>) (<span style="color:#19177c">'grow</span> <span style="color:#ba2121">"-increase-"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">symbol-name</span> <span style="color:#19177c">dir</span>))))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> <span style="color:#19177c">is-exwm-floating</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">value</span> (<span style="color:#00f">*</span> <span style="color:#666">5</span> <span style="color:#19177c">value</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">funcall</span> <span style="color:#19177c">func</span> <span style="color:#19177c">value</span>)))
|
|
</span></span></code></pre></div><p>This function will call <code>exwm-layout-<shrink|grow>[-horizontally]</code> for EXWM floating window and <code>evil-window-<decrease|increase>-<width|height></code> otherwise.</p>
|
|
<p>This function can be bound to the required keybindings directly, but I prefer a hydra to emulate the i3 submode:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">defhydra</span> <span style="color:#19177c">my/exwm-resize-hydra</span> (<span style="color:#008000">:color</span> <span style="color:#19177c">pink</span> <span style="color:#008000">:hint</span> <span style="color:#800">nil</span> <span style="color:#008000">:foreign-keys</span> <span style="color:#19177c">run</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">^Resize^
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">_l_: Increase width _h_: Decrease width _j_: Increase height _k_: Decrease height
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">_=_: Balance "</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"h"</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-resize-window</span> <span style="color:#19177c">'width</span> <span style="color:#19177c">'shrink</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"j"</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-resize-window</span> <span style="color:#19177c">'height</span> <span style="color:#19177c">'grow</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"k"</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-resize-window</span> <span style="color:#19177c">'height</span> <span style="color:#19177c">'shrink</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"l"</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-resize-window</span> <span style="color:#19177c">'width</span> <span style="color:#19177c">'grow</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"="</span> <span style="color:#19177c">balance-windows</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"q"</span> <span style="color:#800">nil</span> <span style="color:#ba2121">"quit"</span> <span style="color:#008000">:color</span> <span style="color:#19177c">blue</span>))
|
|
</span></span></code></pre></div><h4 id="improving-splitting-windows">Improving splitting windows</h4>
|
|
<p><code>M-x evil-window-[v]split</code> (bound to <code>C-w v</code> and <code>C-w s</code> by default) are the default evil command to do splits.</p>
|
|
<p>One EXWM-related issue though is that by default doing such a split “copies” the current buffer to the new window. But as EXWM buffer cannot be “copied” like that, some other buffer is displayed in the split, and generally, that’s not a buffer I want.</p>
|
|
<p>For instance, I prefer to have Chrome DevTools as a separate window. When I click “Inspect” on something, the DevTools window replaces my Ungoogled Chromium window. I press <code>C-w v</code>, and most often I have something like <code>*scratch*</code> buffer in the opened split instead of the previous Chromium window.</p>
|
|
<p>To implement better behavior, I define the following advice:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-fill-other-window</span> (<span style="color:#008000">&rest</span> <span style="color:#19177c">_</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Open the most recently used buffer in the next window."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">and</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">major-mode</span> <span style="color:#19177c">'exwm-mode</span>) (<span style="color:#19177c">not</span> (<span style="color:#00f">eq</span> (<span style="color:#00f">next-window</span>) (<span style="color:#00f">get-buffer-window</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">other-exwm-buffer</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span> <span style="color:#19177c">with</span> <span style="color:#00f">other-buffer</span> <span style="color:#00f">=</span> (<span style="color:#19177c">persp-other-buffer</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">for</span> <span style="color:#19177c">buf</span> <span style="color:#19177c">in</span> (<span style="color:#00f">sort</span> (<span style="color:#19177c">persp-current-buffers</span>) (<span style="color:#008000">lambda</span> (<span style="color:#19177c">a</span> <span style="color:#19177c">_</span>) (<span style="color:#00f">eq</span> <span style="color:#19177c">a</span> <span style="color:#00f">other-buffer</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">with</span> <span style="color:#00f">current-buffer</span> <span style="color:#00f">=</span> (<span style="color:#00f">current-buffer</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">when</span> (<span style="color:#008000">and</span> (<span style="color:#19177c">not</span> (<span style="color:#00f">eq</span> <span style="color:#00f">current-buffer</span> <span style="color:#19177c">buf</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">buffer-live-p</span> <span style="color:#19177c">buf</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#19177c">string-match-p</span> (<span style="color:#19177c">persp--make-ignore-buffer-rx</span>) (<span style="color:#00f">buffer-name</span> <span style="color:#19177c">buf</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#00f">get-buffer-window</span> <span style="color:#19177c">buf</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">return</span> <span style="color:#19177c">buf</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> <span style="color:#19177c">other-exwm-buffer</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-selected-window</span> (<span style="color:#00f">next-window</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">switch-to-buffer</span> <span style="color:#19177c">other-exwm-buffer</span>))))))
|
|
</span></span></code></pre></div><p>This is meant to be called after doing an either vertical or horizontal split, so it’s advised like that:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">advice-add</span> <span style="color:#19177c">'evil-window-split</span> <span style="color:#008000">:after</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/exwm-fill-other-window</span>)
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">advice-add</span> <span style="color:#19177c">'evil-window-vsplit</span> <span style="color:#008000">:after</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/exwm-fill-other-window</span>)
|
|
</span></span></code></pre></div><p>This works as follows. If the current buffer is an EXWM buffer and there are other windows open (that is, <code>(next-window)</code> is not the current window), the function tries to find another suitable buffer to be opened in the split. And that also takes the perspectives into account, so buffers are searched only within the current perspective, and the buffer returned by <code>persp-other-buffer</code> will be the top candidate.</p>
|
|
<h3 id="perspectives">Perspectives</h3>
|
|
<p><a href="https://github.com/nex3/perspective-el">perspective.el</a> is one package I like that provides workspaces for Emacs, called “perspectives”. Each perspective has a separate buffer list, window layout, and a few other things that make it easier to separate things within Emacs.</p>
|
|
<p>One feature I’d like to highlight is integration between perspective.el and <a href="https://github.com/Alexander-Miller/treemacs">treemacs</a>, where one perspective can have a separate treemacs tree. Although now tab-bar.el seems to be getting into shape to compete with perspective.el, as of the time of this writing, there’s no such integration, at least not out of the box.</p>
|
|
<p>perspective.el works with EXWM more or less as one would expect - each EXWM workspace has its own set of perspectives. That way it feels somewhat like having multiple Emacs frames in a tiling window manager, although, of course, much more integrated with Emacs.</p>
|
|
<p>However, there are still some issues. For instance, I was having strange behaviors with floating windows, EXWM buffers in perspectives, etc. So I’ve made a package called <a href="https://github.com/SqrtMinusOne/perspective-exwm.el">perspective-exwm.el</a> that does two things:</p>
|
|
<ul>
|
|
<li>Advices away the issues I had. Take a look at the package homepage for more detail on that.</li>
|
|
<li>Provides some additional functionality that makes use of both perspective.el and EXWM.</li>
|
|
</ul>
|
|
<p>References:</p>
|
|
<ul>
|
|
<li><a href="https://github.com/SqrtMinusOne/perspective-exwm.el">perspective-exwm.el repo</a></li>
|
|
</ul>
|
|
<!--listend-->
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">perspective-exwm</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">perspective-exwm-override-initial-name</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>((<span style="color:#666">0</span> <span style="color:#666">.</span> <span style="color:#ba2121">"misc"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">1</span> <span style="color:#666">.</span> <span style="color:#ba2121">"core"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">2</span> <span style="color:#666">.</span> <span style="color:#ba2121">"browser"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">3</span> <span style="color:#666">.</span> <span style="color:#ba2121">"comms"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">4</span> <span style="color:#666">.</span> <span style="color:#ba2121">"dev"</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">perspective-exwm-cycle-max-message-length</span> <span style="color:#666">180</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">general-define-key</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:keymaps</span> <span style="color:#19177c">'perspective-map</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"e"</span> <span style="color:#00f">#'</span><span style="color:#19177c">perspective-exwm-move-to-workspace</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"E"</span> <span style="color:#00f">#'</span><span style="color:#19177c">perspective-exwm-copy-to-workspace</span>))
|
|
</span></span></code></pre></div><p>By default, a new Emacs buffer opens in the current perspective in the current workspace, but sure enough, it’s possible to change that.</p>
|
|
<p>For EXWM windows, the <code>perspective-exwm</code> package provides a function called <code>perspective-exwm-assign-window</code>, which is intended to be used in <code>exwm-manage-finish-hook</code>, for instance:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-configure-window</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">exwm--floating-frame</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">pcase</span> <span style="color:#19177c">exwm-class-name</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">or</span> <span style="color:#ba2121">"Firefox"</span> <span style="color:#ba2121">"Nightly"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">perspective-exwm-assign-window</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:workspace-index</span> <span style="color:#666">2</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:persp-name</span> <span style="color:#ba2121">"browser"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"Nyxt"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">perspective-exwm-assign-window</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:workspace-index</span> <span style="color:#666">2</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:persp-name</span> <span style="color:#ba2121">"browser"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"Alacritty"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">perspective-exwm-assign-window</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:persp-name</span> <span style="color:#ba2121">"term"</span>))
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">or</span> <span style="color:#ba2121">"VK"</span> <span style="color:#ba2121">"Slack"</span> <span style="color:#ba2121">"discord"</span> <span style="color:#ba2121">"TelegramDesktop"</span> <span style="color:#ba2121">"Rocket.Chat"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">perspective-exwm-assign-window</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:workspace-index</span> <span style="color:#666">3</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:persp-name</span> <span style="color:#ba2121">"comms"</span>))
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">or</span> <span style="color:#ba2121">"Chromium-browser"</span> <span style="color:#ba2121">"jetbrains-datagrip"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">perspective-exwm-assign-window</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:workspace-index</span> <span style="color:#666">4</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:persp-name</span> <span style="color:#ba2121">"dev"</span>)))))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'exwm-manage-finish-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/exwm-configure-window</span>)
|
|
</span></span></code></pre></div><h3 id="workspaces-and-multi-monitor-setup">Workspaces and multi-monitor setup</h3>
|
|
<p>A section about improving management of EXWM workspaces.</p>
|
|
<p>Some features, common in other tiling WMs, are missing in EXWM out of the box, namely:</p>
|
|
<ul>
|
|
<li>a command to <a href="https://i3wm.org/docs/userguide.html#_focusing_moving_containers">switch to another monitor</a>;</li>
|
|
<li>a command to <a href="https://i3wm.org/docs/userguide.html#move_to_outputs">move the current workspace to another monitor</a>;</li>
|
|
<li>using the same commands to switch between windows and monitors.</li>
|
|
</ul>
|
|
<p>Here’s my take on implementing them.</p>
|
|
<h4 id="tracking-recently-used-workspaces">Tracking recently used workspaces</h4>
|
|
<p>First up though, we need to track the workspaces in the usage order. I’m not sure if there’s some built-in functionality in EXWM for that, but it seems simple enough to implement.</p>
|
|
<p>Here is a snippet of code that does it:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">my/exwm-last-workspaces</span> <span style="color:#666">'</span>(<span style="color:#666">1</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-store-last-workspace</span> ()
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Save the last workspace to </span><span style="color:#19177c">`my/exwm-last-workspaces'</span><span style="color:#ba2121">."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">my/exwm-last-workspaces</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-uniq</span> (<span style="color:#00f">cons</span> <span style="color:#19177c">exwm-workspace-current-index</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">my/exwm-last-workspaces</span>))))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'exwm-workspace-switch-hook</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#00f">#'</span><span style="color:#19177c">my/exwm-store-last-workspace</span>)
|
|
</span></span></code></pre></div><p>The variable <code>my/exwm-last-workspaces</code> stores the workspace indices; the first item is the index of the current workspace, the second item is the index of the previous workspace, and so on.</p>
|
|
<p>One note here is that workspaces may also disappear (e.g. after <code>M-x exwm-workspace-delete</code>), so we also need a function to clean the list:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-last-workspaces-clear</span> ()
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Clean </span><span style="color:#19177c">`my/exwm-last-workspaces'</span><span style="color:#ba2121"> from deleted workspaces."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">my/exwm-last-workspaces</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-filter</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">i</span>) (<span style="color:#00f">nth</span> <span style="color:#19177c">i</span> <span style="color:#19177c">exwm-workspace--list</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">my/exwm-last-workspaces</span>)))
|
|
</span></span></code></pre></div><h4 id="the-monitor-list">The monitor list</h4>
|
|
<p>The second piece of the puzzle is getting the monitor list in the right order.</p>
|
|
<p>While it is possible to retrieve the monitor list from <code>exwm-randr-workspace-monitor-plist</code>, this won’t scale well beyond two monitors, mainly because changing this variable may screw up the order.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-xrandr-monitor-list</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">split-string</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">string-trim</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">shell-command-to-string</span> <span style="color:#ba2121">"xrandr --listmonitors | grep '+' | awk {'print $4'}
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">"</span>))))
|
|
</span></span></code></pre></div><p>So the easiest way is to just define the variable like that:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">my/exwm-monitor-list</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">pcase</span> (<span style="color:#00f">system-name</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"indigo"</span> <span style="color:#666">'</span>(<span style="color:#800">nil</span> <span style="color:#ba2121">"DVI-D-0"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"violet"</span> (<span style="color:#19177c">my/exwm-xrandr-monitor-list</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">_</span> <span style="color:#666">'</span>(<span style="color:#800">nil</span>))))
|
|
</span></span></code></pre></div><p>A function to get the current monitor:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-get-current-monitor</span> ()
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Return the current monitor name or nil."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">or</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">plist-get</span> <span style="color:#19177c">exwm-randr-workspace-monitor-plist</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">cl-position</span> (<span style="color:#00f">selected-frame</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">exwm-workspace--list</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">car</span> <span style="color:#19177c">my/exwm-monitor-list</span>)))
|
|
</span></span></code></pre></div><p>And a function to cycle the monitor list in either direction:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-get-other-monitor</span> (<span style="color:#19177c">dir</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Cycle the monitor list in the direction DIR.
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">DIR is either 'left or 'right."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nth</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">%</span> (<span style="color:#00f">+</span> (<span style="color:#19177c">cl-position</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/exwm-get-current-monitor</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">my/exwm-monitor-list</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:test</span> <span style="color:#00f">#'string-equal</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">length</span> <span style="color:#19177c">my/exwm-monitor-list</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">pcase</span> <span style="color:#19177c">dir</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">'right</span> <span style="color:#666">1</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">'left</span> <span style="color:#666">-1</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">length</span> <span style="color:#19177c">my/exwm-monitor-list</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">my/exwm-monitor-list</span>))
|
|
</span></span></code></pre></div><h4 id="switch-to-another-monitor">Switch to another monitor</h4>
|
|
<p>With the functions from the previous two sections, we can implement switching to another monitor by switching to the most recently used workspace on that monitor.</p>
|
|
<p>One caveat here is that on the startup the <code>my/exwm-last-workspaces</code> variable won’t have any values from other monitor(s), so this list is concatenated with the list of available workspace indices.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-switch-to-other-monitor</span> (<span style="color:#008000">&optional</span> <span style="color:#19177c">dir</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Switch to another monitor."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/exwm-last-workspaces-clear</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">mouse-autoselect-window</span> <span style="color:#800">nil</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-workspace-switch</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">or</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span> <span style="color:#19177c">with</span> <span style="color:#19177c">other-monitor</span> <span style="color:#00f">=</span> (<span style="color:#19177c">my/exwm-get-other-monitor</span> (<span style="color:#008000">or</span> <span style="color:#19177c">dir</span> <span style="color:#19177c">'right</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">for</span> <span style="color:#19177c">i</span> <span style="color:#19177c">in</span> (<span style="color:#00f">append</span> <span style="color:#19177c">my/exwm-last-workspaces</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span> <span style="color:#19177c">for</span> <span style="color:#19177c">i</span> <span style="color:#19177c">from</span> <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">for</span> <span style="color:#19177c">_</span> <span style="color:#19177c">in</span> <span style="color:#19177c">exwm-workspace--list</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">collect</span> <span style="color:#19177c">i</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">if</span> (<span style="color:#008000">if</span> <span style="color:#19177c">other-monitor</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">string-equal</span> (<span style="color:#00f">plist-get</span> <span style="color:#19177c">exwm-randr-workspace-monitor-plist</span> <span style="color:#19177c">i</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">other-monitor</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#00f">plist-get</span> <span style="color:#19177c">exwm-randr-workspace-monitor-plist</span> <span style="color:#19177c">i</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">return</span> <span style="color:#19177c">i</span>)))))
|
|
</span></span></code></pre></div><p>I bind this function to <code>s-q</code>, as I’m used from i3.</p>
|
|
<h4 id="move-the-workspace-to-another-monitor">Move the workspace to another monitor</h4>
|
|
<p>Now, moving the workspace to another monitor.</p>
|
|
<p>This is actually quite easy to pull off - one just has to update <code>exwm-randr-workspace-monitor-plist</code> accordingly and run <code>exwm-randr-refresh</code>. I just add another check there because I don’t want some monitor to remain without workspaces at all.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-workspace-switch-monitor</span> ()
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Move the current workspace to another monitor."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">new-monitor</span> (<span style="color:#19177c">my/exwm-get-other-monitor</span> <span style="color:#19177c">'right</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">current-monitor</span> (<span style="color:#19177c">my/exwm-get-current-monitor</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">and</span> <span style="color:#19177c">current-monitor</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">>=</span> <span style="color:#666">1</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span> <span style="color:#19177c">for</span> (<span style="color:#19177c">key</span> <span style="color:#19177c">value</span>) <span style="color:#19177c">on</span> <span style="color:#19177c">exwm-randr-workspace-monitor-plist</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">by</span> <span style="color:#19177c">'cddr</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">if</span> (<span style="color:#00f">string-equal</span> <span style="color:#19177c">value</span> <span style="color:#19177c">current-monitor</span>) <span style="color:#19177c">sum</span> <span style="color:#666">1</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#d2413a;font-weight:bold">error</span> <span style="color:#ba2121">"Can't remove the last workspace on the monitor!"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-randr-workspace-monitor-plist</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">map-delete</span> <span style="color:#19177c">exwm-randr-workspace-monitor-plist</span> <span style="color:#19177c">exwm-workspace-current-index</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> <span style="color:#19177c">new-monitor</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-randr-workspace-monitor-plist</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">plist-put</span> <span style="color:#19177c">exwm-randr-workspace-monitor-plist</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">exwm-workspace-current-index</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">new-monitor</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-randr-refresh</span>))
|
|
</span></span></code></pre></div><p>In my configuration this is bound to <code>s-<tab></code>.</p>
|
|
<h4 id="windmove-between-monitors">Windmove between monitors</h4>
|
|
<p>And the final (for now) piece of the puzzle is using the same command to switch between windows and monitors. E.g. when the focus is on the right-most window on one monitor, I want the command to switch to the left-most window on the monitor to the right instead of saying “No window right from the selected window”, as <code>windmove-right</code> does.</p>
|
|
<p>So here is my implementation of that. It always does <code>windmove-do-select-window</code> for <code>'down</code> and <code>'up</code>. For <code>'right</code> and <code>'left</code> though, the function calls the previously defined function to switch to other monitor if <code>windmove-find-other-window</code> doesn’t return anything.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-windmove</span> (<span style="color:#19177c">dir</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Move to window or monitor in the direction DIR."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#008000">or</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">dir</span> <span style="color:#19177c">'down</span>) (<span style="color:#00f">eq</span> <span style="color:#19177c">dir</span> <span style="color:#19177c">'up</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">windmove-do-window-select</span> <span style="color:#19177c">dir</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">other-window</span> (<span style="color:#19177c">windmove-find-other-window</span> <span style="color:#19177c">dir</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">other-monitor</span> (<span style="color:#19177c">my/exwm-get-other-monitor</span> <span style="color:#19177c">dir</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">opposite-dir</span> (<span style="color:#008000">pcase</span> <span style="color:#19177c">dir</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">'left</span> <span style="color:#19177c">'right</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">'right</span> <span style="color:#19177c">'left</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> <span style="color:#19177c">other-window</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">windmove-do-window-select</span> <span style="color:#19177c">dir</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">mouse-autoselect-window</span> <span style="color:#800">nil</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/exwm-switch-to-other-monitor</span> <span style="color:#19177c">dir</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span> <span style="color:#008000">while</span> (<span style="color:#19177c">windmove-find-other-window</span> <span style="color:#19177c">opposite-dir</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">do</span> (<span style="color:#19177c">windmove-do-window-select</span> <span style="color:#19177c">opposite-dir</span>))))))
|
|
</span></span></code></pre></div><h4 id="update-the-monitor-list">Update the monitor list</h4>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-refresh-monitors</span> (<span style="color:#008000">&optional</span> <span style="color:#19177c">refresh</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span> (<span style="color:#00f">list</span> <span style="color:#800">t</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">my/exwm-monitor-list</span> (<span style="color:#19177c">my/exwm-xrandr-monitor-list</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span> <span style="color:#19177c">for</span> <span style="color:#19177c">i</span> <span style="color:#19177c">from</span> <span style="color:#666">0</span> <span style="color:#19177c">to</span> (<span style="color:#00f">1-</span> <span style="color:#19177c">exwm-workspace-number</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">for</span> <span style="color:#19177c">monitor</span> <span style="color:#00f">=</span> (<span style="color:#00f">plist-get</span> <span style="color:#19177c">exwm-randr-workspace-monitor-plist</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">i</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">if</span> (<span style="color:#19177c">not</span> (<span style="color:#00f">member</span> <span style="color:#19177c">monitor</span> <span style="color:#19177c">my/exwm-monitor-list</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">do</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setf</span> (<span style="color:#00f">plist-get</span> <span style="color:#19177c">exwm-randr-workspace-monitor-plist</span> <span style="color:#19177c">i</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">car</span> <span style="color:#19177c">my/exwm-monitor-list</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> <span style="color:#19177c">refresh</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-randr-refresh</span>)))
|
|
</span></span></code></pre></div><h3 id="completions">Completions</h3>
|
|
<p>Setting up some completion interfaces that fit particularly well to use with EXWM. While rofi also works, I want to use Emacs functionality wherever possible to have one completion interface everywhere.</p>
|
|
<h4 id="ivy-posframe">ivy-posframe</h4>
|
|
<p><a href="https://github.com/tumashu/ivy-posframe">ivy-posframe</a> is an extension to show ivy candidates in a posframe.</p>
|
|
<p>Take a look at <a href="https://github.com/ch11ng/exwm/issues/550">this issue</a> in the EXWM repo about setting it up.</p>
|
|
<p>Edit <span class="timestamp-wrapper"><span class="timestamp">[2022-04-09 Sat]</span></span>: This looks nice, but unfortunately too unstable. Disabling it.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">ivy-posframe</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:disabled</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">ivy-posframe-parameters</span> <span style="color:#666">'</span>((<span style="color:#19177c">left-fringe</span> <span style="color:#666">.</span> <span style="color:#666">10</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">right-fringe</span> <span style="color:#666">.</span> <span style="color:#666">10</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">parent-frame</span> <span style="color:#666">.</span> <span style="color:#800">nil</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">max-width</span> <span style="color:#666">.</span> <span style="color:#666">80</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">ivy-posframe-height-alist</span> <span style="color:#666">'</span>((<span style="color:#800">t</span> <span style="color:#666">.</span> <span style="color:#666">20</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">ivy-posframe-width</span> <span style="color:#666">180</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">ivy-posframe-min-height</span> <span style="color:#666">5</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">ivy-posframe-display-functions-alist</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>((<span style="color:#19177c">swiper</span> <span style="color:#666">.</span> <span style="color:#19177c">ivy-display-function-fallback</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">swiper-isearch</span> <span style="color:#666">.</span> <span style="color:#19177c">ivy-display-function-fallback</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#800">t</span> <span style="color:#666">.</span> <span style="color:#19177c">ivy-posframe-display</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">ivy-posframe-mode</span> <span style="color:#666">1</span>))
|
|
</span></span></code></pre></div><h5 id="disable-mouse-movement">Disable mouse movement</h5>
|
|
<p><strong>SOURCE</strong>: <a href="https://github.com/ch11ng/exwm/issues/550#issuecomment-744784838">https://github.com/ch11ng/exwm/issues/550#issuecomment-744784838</a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/advise-fn-suspend-follow-mouse</span> (<span style="color:#19177c">fn</span> <span style="color:#008000">&rest</span> <span style="color:#19177c">args</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">focus-follows-mouse</span> <span style="color:#800">nil</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">mouse-autoselect-window</span> <span style="color:#800">nil</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">pos</span> (<span style="color:#19177c">x-mouse-absolute-pixel-position</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unwind-protect</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">apply</span> <span style="color:#19177c">fn</span> <span style="color:#19177c">args</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">x-set-mouse-absolute-pixel-position</span> (<span style="color:#00f">car</span> <span style="color:#19177c">pos</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">cdr</span> <span style="color:#19177c">pos</span>)))))
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">with-eval-after-load</span> <span style="color:#19177c">'ivy-posframe</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">ivy-posframe--read</span> <span style="color:#008000">:around</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/advise-fn-suspend-follow-mouse</span>))
|
|
</span></span></code></pre></div><h5 id="disable-changing-focus">Disable changing focus</h5>
|
|
<p>Not sure about that. The cursor occasionally changes focus when I’m exiting posframe, and this doesn’t catch all the cases.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/setup-posframe</span> (<span style="color:#008000">&rest</span> <span style="color:#19177c">args</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapc</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">var</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">kill-local-variable</span> <span style="color:#19177c">var</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setf</span> (<span style="color:#00f">symbol-value</span> <span style="color:#19177c">var</span>) <span style="color:#800">nil</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(<span style="color:#19177c">exwm-workspace-warp-cursor</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">mouse-autoselect-window</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">focus-follows-mouse</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/restore-posframe</span> (<span style="color:#008000">&rest</span> <span style="color:#19177c">args</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">run-with-timer</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">0.25</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapc</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">var</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">kill-local-variable</span> <span style="color:#19177c">var</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setf</span> (<span style="color:#00f">symbol-value</span> <span style="color:#19177c">var</span>) <span style="color:#800">t</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(<span style="color:#19177c">exwm-workspace-warp-cursor</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">mouse-autoselect-window</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">focus-follows-mouse</span>)))))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">with-eval-after-load</span> <span style="color:#19177c">'ivy-posframe</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">posframe--create-posframe</span> <span style="color:#008000">:after</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/setup-posframe</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#00f">#'</span><span style="color:#19177c">ivy-posframe-cleanup</span> <span style="color:#008000">:after</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/restore-posframe</span>))
|
|
</span></span></code></pre></div><h4 id="linux-app">Linux app</h4>
|
|
<p>I switched to <code>app-launcher</code> from <code>counsel-linux-app</code> after migrating from Ivy.</p>
|
|
<p>By default, it also shows paths from <code>/gnu/store</code>, so there is a custom formatter function.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">app-launcher</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#666">'</span>(<span style="color:#19177c">app-launcher</span> <span style="color:#008000">:host</span> <span style="color:#19177c">github</span> <span style="color:#008000">:repo</span> <span style="color:#ba2121">"SebastienWae/app-launcher"</span>))
|
|
</span></span></code></pre></div><p>Also, by default it tries to launch stuff with <code>gtk-launch</code>, which is in the <code>gtk+</code> package.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>gtk+:bin</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4 id="password-store-completion">password-store-completion</h4>
|
|
<p><a href="https://github.com/SqrtMinusOne/password-store-completion">password-store-completion</a> is another package of mine, inspired by <a href="https://github.com/carnager/rofi-pass">rofi-pass</a>.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">password-store-completion</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> (<span style="color:#008000">:host</span> <span style="color:#19177c">github</span> <span style="color:#008000">:repo</span> <span style="color:#ba2121">"SqrtMinusOne/password-store-completion"</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:after</span> (<span style="color:#19177c">exwm</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-to-list</span> <span style="color:#19177c">'savehist-additional-variables</span> <span style="color:#19177c">'password-store-completion</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">require</span> <span style="color:#19177c">'password-store-embark</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">password-store-embark-mode</span>))
|
|
</span></span></code></pre></div><h4 id="emojis">emojis</h4>
|
|
<p><a href="https://github.com/iqbalansari/emacs-emojify">emojify</a> is an Emacs package that adds emoji display to Emacs. While its primary capacity is no longer necessary in Emacs 28, it a few functions to insert emojis are still handy.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">emojify</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>)
|
|
</span></span></code></pre></div><h3 id="keybindings">Keybindings</h3>
|
|
<h4 id="exwm-keybindings">EXWM keybindings</h4>
|
|
<p>Setting keybindings for EXWM. This actually has to be in the <code>:config</code> block of the <code>use-package</code> form, that is it has to be run after EXWM is loaded, so I use noweb to put this block in the correct place.</p>
|
|
<p>First, some prefixes for keybindings that are always passed to EXWM instead of the X application in <code>line-mode</code>:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-input-prefix-keys</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>(<span style="color:#ba2121">?\C</span><span style="color:#19177c">-x</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">?\C</span><span style="color:#19177c">-w</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">?\M</span><span style="color:#19177c">-x</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">?\M</span><span style="color:#19177c">-u</span>))
|
|
</span></span></code></pre></div><p>Also other local keybindings, that are also available only in <code>line-mode</code>:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defmacro</span> <span style="color:#19177c">my/app-command</span> (<span style="color:#19177c">command</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>(<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/run-in-background</span> <span style="color:#666">,</span><span style="color:#19177c">command</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">general-define-key</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:keymaps</span> <span style="color:#666">'</span>(<span style="color:#19177c">exwm-mode-map</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"C-q"</span> <span style="color:#00f">#'</span><span style="color:#19177c">exwm-input-send-next-key</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"<print>"</span> (<span style="color:#19177c">my/app-command</span> <span style="color:#ba2121">"flameshot gui"</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"<mode-line> s-<mouse-4>"</span> <span style="color:#00f">#'</span><span style="color:#19177c">perspective-exwm-cycle-all-buffers-backward</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"<mode-line> s-<mouse-5>"</span> <span style="color:#00f">#'</span><span style="color:#19177c">perspective-exwm-cycle-all-buffers-forward</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"M-x"</span> <span style="color:#00f">#'</span><span style="color:#19177c">execute-extended-command</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"M-SPC"</span> (<span style="color:#19177c">general-key</span> <span style="color:#ba2121">"SPC"</span>))
|
|
</span></span></code></pre></div><p>Simulation keys.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">setopt</span> <span style="color:#19177c">exwm-input-simulation-keys</span> <span style="color:#666">`</span>(
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; (,(kbd "M-w") . ,(kbd "C-w"))</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"M-c"</span>) <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"C-c"</span>))))
|
|
</span></span></code></pre></div><p>A quit function with a confirmation.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-quit</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">or</span> (<span style="color:#19177c">not</span> (<span style="color:#00f">eq</span> (<span style="color:#00f">selected-window</span>) (<span style="color:#00f">next-window</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">y-or-n-p</span> <span style="color:#ba2121">"This is the last window. Are you sure?"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">evil-quit</span>)))
|
|
</span></span></code></pre></div><p>And keybindings that are available in both <code>char-mode</code> and <code>line-mode</code>:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-input-global-keys</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>(
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Reset to line-mode</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-R"</span>) <span style="color:#666">.</span> <span style="color:#19177c">exwm-reset</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Switch windows</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-<left>"</span>) <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-windmove</span> <span style="color:#19177c">'left</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-<right>"</span>) <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-windmove</span> <span style="color:#19177c">'right</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-<up>"</span>) <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-windmove</span> <span style="color:#19177c">'up</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-<down>"</span>) <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-windmove</span> <span style="color:#19177c">'down</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-h"</span>)<span style="color:#666">.</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-windmove</span> <span style="color:#19177c">'left</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-l"</span>) <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-windmove</span> <span style="color:#19177c">'right</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-k"</span>) <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-windmove</span> <span style="color:#19177c">'up</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-j"</span>) <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-windmove</span> <span style="color:#19177c">'down</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Moving windows</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-H"</span>) <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-move-window</span> <span style="color:#19177c">'left</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-L"</span>) <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-move-window</span> <span style="color:#19177c">'right</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-K"</span>) <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-move-window</span> <span style="color:#19177c">'up</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-J"</span>) <span style="color:#666">.</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/exwm-move-window</span> <span style="color:#19177c">'down</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Fullscreen</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-f"</span>) <span style="color:#666">.</span> <span style="color:#19177c">exwm-layout-toggle-fullscreen</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-F"</span>) <span style="color:#666">.</span> <span style="color:#19177c">exwm-floating-toggle-floating</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Quit</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-Q"</span>) <span style="color:#666">.</span> <span style="color:#19177c">my/exwm-quit</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Split windows</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-s"</span>) <span style="color:#666">.</span> <span style="color:#19177c">evil-window-vsplit</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-v"</span>) <span style="color:#666">.</span> <span style="color:#19177c">evil-window-hsplit</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Switch perspectives</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-,"</span>) <span style="color:#666">.</span> <span style="color:#19177c">persp-prev</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-."</span>) <span style="color:#666">.</span> <span style="color:#19177c">persp-next</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Switch buffers</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-e"</span>) <span style="color:#666">.</span> <span style="color:#19177c">persp-switch-to-buffer*</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; (,(kbd "s-E") . my/persp-ivy-switch-buffer-other-window)</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Resize windows</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-r"</span>) <span style="color:#666">.</span> <span style="color:#19177c">my/exwm-resize-hydra/body</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Apps & stuff</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-p"</span>) <span style="color:#666">.</span> <span style="color:#19177c">app-launcher-run-app</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-P"</span>) <span style="color:#666">.</span> <span style="color:#19177c">async-shell-command</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-;"</span>) <span style="color:#666">.</span> <span style="color:#19177c">my/exwm-apps-hydra/body</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s--"</span>) <span style="color:#666">.</span> <span style="color:#19177c">password-store-completion</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-="</span>) <span style="color:#666">.</span> <span style="color:#19177c">emoji-insert</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-i"</span>) <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/app-command</span> <span style="color:#ba2121">"copyq menu"</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Basic controls</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"<XF86AudioRaiseVolume>"</span>) <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/app-command</span> <span style="color:#ba2121">"ponymix increase 5 --max-volume 150"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"<XF86AudioLowerVolume>"</span>) <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/app-command</span> <span style="color:#ba2121">"ponymix decrease 5 --max-volume 150"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"<XF86MonBrightnessUp>"</span>) <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/app-command</span> <span style="color:#ba2121">"light -A 5"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"<XF86MonBrightnessDown>"</span>) <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/app-command</span> <span style="color:#ba2121">"light -U 5"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"<XF86AudioMute>"</span>) <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/app-command</span> <span style="color:#ba2121">"ponymix toggle"</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"<XF86AudioPlay>"</span>) <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/app-command</span> <span style="color:#ba2121">"mpc toggle"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"<XF86AudioPause>"</span>) <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/app-command</span> <span style="color:#ba2121">"mpc pause"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"<print>"</span>) <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/app-command</span> <span style="color:#ba2121">"flameshot gui"</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Input method</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"M-\\"</span>) <span style="color:#666">.</span> <span style="color:#19177c">my/toggle-input-method</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Switch workspace</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-q"</span>) <span style="color:#666">.</span> <span style="color:#19177c">my/exwm-switch-to-other-monitor</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-w"</span>) <span style="color:#666">.</span> <span style="color:#19177c">exwm-workspace-switch</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-W"</span>) <span style="color:#666">.</span> <span style="color:#19177c">exwm-workspace-move-window</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-<tab>"</span>) <span style="color:#666">.</span> <span style="color:#19177c">my/exwm-workspace-switch-monitor</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Perspectives</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-{"</span>) <span style="color:#666">.</span> <span style="color:#19177c">perspective-exwm-cycle-all-buffers-backward</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-}"</span>) <span style="color:#666">.</span> <span style="color:#19177c">perspective-exwm-cycle-all-buffers-forward</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-["</span>) <span style="color:#666">.</span> <span style="color:#19177c">perspective-exwm-cycle-exwm-buffers-backward</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-]"</span>) <span style="color:#666">.</span> <span style="color:#19177c">perspective-exwm-cycle-exwm-buffers-forward</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-<mouse-4>"</span>) <span style="color:#666">.</span> <span style="color:#19177c">perspective-exwm-cycle-exwm-buffers-backward</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-<mouse-5>"</span>) <span style="color:#666">.</span> <span style="color:#19177c">perspective-exwm-cycle-exwm-buffers-forward</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-`"</span>) <span style="color:#666">.</span> <span style="color:#19177c">perspective-exwm-switch-perspective</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> <span style="color:#ba2121">"s-o"</span>) <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/app-command</span> <span style="color:#ba2121">"rofi -show window"</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; 's-N': Switch to certain workspace with Super (Win) plus a number key (0 - 9)</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">,@</span>(<span style="color:#00f">mapcar</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">i</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>(<span style="color:#666">,</span>(<span style="color:#19177c">kbd</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"s-%d"</span> <span style="color:#19177c">i</span>)) <span style="color:#666">.</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">or</span> (<span style="color:#00f"><</span> <span style="color:#666">,</span><span style="color:#19177c">i</span> (<span style="color:#19177c">exwm-workspace--count</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">y-or-n-p</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"Create workspace %d"</span> <span style="color:#666">,</span><span style="color:#19177c">i</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-workspace-switch-create</span> <span style="color:#666">,</span><span style="color:#19177c">i</span>) ))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">number-sequence</span> <span style="color:#666">0</span> <span style="color:#666">9</span>))))
|
|
</span></span></code></pre></div><p>A function to apply changes to <code>exwm-input-global-keys</code>.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-update-global-keys</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-input--global-keys</span> <span style="color:#800">nil</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">i</span> <span style="color:#19177c">exwm-input-global-keys</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-input--set-key</span> (<span style="color:#00f">car</span> <span style="color:#19177c">i</span>) (<span style="color:#00f">cdr</span> <span style="color:#19177c">i</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> <span style="color:#19177c">exwm--connection</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-input--update-global-prefix-keys</span>)))
|
|
</span></span></code></pre></div><h4 id="app-shortcuts">App shortcuts</h4>
|
|
<p>A <del>transient</del> hydra for shortcuts for the most frequent apps.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">defhydra</span> <span style="color:#19177c">my/exwm-apps-hydra</span> (<span style="color:#008000">:color</span> <span style="color:#19177c">blue</span> <span style="color:#008000">:hint</span> <span style="color:#800">nil</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">^Apps^
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">_t_: Terminal (Alacritty)
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">_b_: Browser (Firefox)
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">_s_: Rocket.Chat
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">_e_: Element
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">_d_: Discord
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"t"</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/run-in-background</span> <span style="color:#ba2121">"alacritty"</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"b"</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/run-in-background</span> <span style="color:#ba2121">"firefox"</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"s"</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/run-in-background</span> <span style="color:#ba2121">"flatpak run chat.rocket.RocketChat"</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"e"</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/run-in-background</span> <span style="color:#ba2121">"flatpak run im.riot.Riot"</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"d"</span> (<span style="color:#008000">lambda</span> () (<span style="color:#008000">interactive</span>) (<span style="color:#19177c">my/run-in-background</span> <span style="color:#ba2121">"flatpak run com.discordapp.Discord"</span>))))
|
|
</span></span></code></pre></div><h4 id="locking-up">Locking up</h4>
|
|
<p>Run i3lock.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-lock</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/run-in-background</span> <span style="color:#ba2121">"i3lock -f -i /home/pavel/Pictures/lock-wallpaper.png"</span>))
|
|
</span></span></code></pre></div><h3 id="fixes">Fixes</h3>
|
|
<h4 id="catch-and-report-all-errors-raised-when-invoking-command-hooks">Catch and report all errors raised when invoking command hooks</h4>
|
|
<ul>
|
|
<li><strong>CREDIT</strong>: Thanks David! <a href="https://github.com/daviwil/exwm/commit/7b1be884124711af0a02eac740bdb69446bc54cc">https://github.com/daviwil/exwm/commit/7b1be884124711af0a02eac740bdb69446bc54cc</a></li>
|
|
</ul>
|
|
<!--listend-->
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">exwm-input--fake-last-command</span> ()
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Fool some packages into thinking there is a change in the buffer."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">last-command</span> <span style="color:#00f">#'</span><span style="color:#19177c">exwm-input--noop</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">condition-case</span> <span style="color:#19177c">hook-error</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">progn</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">run-hooks</span> <span style="color:#19177c">'pre-command-hook</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">run-hooks</span> <span style="color:#19177c">'post-command-hook</span>))
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#d2413a;font-weight:bold">error</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm--log</span> <span style="color:#ba2121">"Error occurred while running command hooks: %s\n\nBacktrace:\n\n%s"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">hook-error</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-temp-buffer</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq-local</span> <span style="color:#19177c">standard-output</span> (<span style="color:#00f">current-buffer</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">backtrace</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">buffer-string</span>))))))
|
|
</span></span></code></pre></div><h4 id="improve-floating-windows-behavior">Improve floating windows behavior</h4>
|
|
<p>These 3 settings seem to cause particular trouble with floating windows. Setting them to <code>nil</code> improves the stability greatly.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/fix-exwm-floating-windows</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq-local</span> <span style="color:#19177c">exwm-workspace-warp-cursor</span> <span style="color:#800">nil</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq-local</span> <span style="color:#19177c">mouse-autoselect-window</span> <span style="color:#800">nil</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq-local</span> <span style="color:#19177c">focus-follows-mouse</span> <span style="color:#800">nil</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'exwm-floating-setup-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/fix-exwm-floating-windows</span>)
|
|
</span></span></code></pre></div><h4 id="fix-exwm-on-clientmessage">Fix exwm–on-ClientMessage</h4>
|
|
<p>It seems like this strange commit: <a href="https://github.com/ch11ng/exwm/commit/ce2191c444ae29edf669790a1002238b8fc90ac4">c90ac4</a> breaks focusing on an X frame when switching to a workspace, at least on Emacs <= 28. This reverts to the previous version.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">exwm--on-ClientMessage-old</span> (<span style="color:#19177c">raw-data</span> <span style="color:#19177c">_synthetic</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"Handle ClientMessage event."</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">obj</span> (<span style="color:#19177c">make-instance</span> <span style="color:#19177c">'xcb:ClientMessage</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">type</span> <span style="color:#19177c">id</span> <span style="color:#19177c">data</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:unmarshal</span> <span style="color:#19177c">obj</span> <span style="color:#19177c">raw-data</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">type</span> (<span style="color:#19177c">slot-value</span> <span style="color:#19177c">obj</span> <span style="color:#19177c">'type</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">id</span> (<span style="color:#19177c">slot-value</span> <span style="color:#19177c">obj</span> <span style="color:#19177c">'window</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">data</span> (<span style="color:#19177c">slot-value</span> (<span style="color:#19177c">slot-value</span> <span style="color:#19177c">obj</span> <span style="color:#19177c">'data</span>) <span style="color:#19177c">'data32</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm--log</span> <span style="color:#ba2121">"atom=%s(%s)"</span> (<span style="color:#00f">x-get-atom-name</span> <span style="color:#19177c">type</span> <span style="color:#19177c">exwm-workspace--current</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">type</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_NUMBER_OF_DESKTOPS.</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_NUMBER_OF_DESKTOPS</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">current</span> (<span style="color:#19177c">exwm-workspace--count</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">requested</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">0</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Only allow increasing/decreasing the workspace number by 1.</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f"><</span> <span style="color:#19177c">current</span> <span style="color:#19177c">requested</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">make-frame</span>))
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">and</span> (<span style="color:#00f">></span> <span style="color:#19177c">current</span> <span style="color:#19177c">requested</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">></span> <span style="color:#19177c">current</span> <span style="color:#666">1</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">frame</span> (<span style="color:#00f">car</span> (<span style="color:#19177c">last</span> <span style="color:#19177c">exwm-workspace--list</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-workspace--get-remove-frame-next-workspace</span> <span style="color:#19177c">frame</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">delete-frame</span> <span style="color:#19177c">frame</span>))))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_CURRENT_DESKTOP.</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_CURRENT_DESKTOP</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-workspace-switch</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">0</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_ACTIVE_WINDOW.</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_ACTIVE_WINDOW</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">iconic</span> <span style="color:#19177c">window</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">buffer-live-p</span> <span style="color:#19177c">buffer</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> <span style="color:#19177c">buffer</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">exwm--frame</span> <span style="color:#19177c">exwm-workspace--current</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> <span style="color:#19177c">exwm--floating-frame</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">select-frame</span> <span style="color:#19177c">exwm--floating-frame</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">iconic</span> (<span style="color:#19177c">exwm-layout--iconic-state-p</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> <span style="color:#19177c">iconic</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; State change: iconic => normal.</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">set-window-buffer</span> (<span style="color:#00f">frame-selected-window</span> <span style="color:#19177c">exwm--frame</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">current-buffer</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Focus transfer.</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">window</span> (<span style="color:#00f">get-buffer-window</span> <span style="color:#800">nil</span> <span style="color:#800">t</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">or</span> <span style="color:#19177c">iconic</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">window</span> (<span style="color:#00f">selected-window</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">select-window</span> <span style="color:#19177c">window</span>))))))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_CLOSE_WINDOW.</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_CLOSE_WINDOW</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">buffer-live-p</span> <span style="color:#19177c">buffer</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm--defer</span> <span style="color:#666">0</span> <span style="color:#00f">#'kill-buffer</span> <span style="color:#19177c">buffer</span>))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_WM_MOVERESIZE</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_WM_MOVERESIZE</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">direction</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">2</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#008000">and</span> <span style="color:#19177c">buffer</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#00f">buffer-local-value</span> <span style="color:#19177c">'exwm--floating-frame</span> <span style="color:#19177c">buffer</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span> ((<span style="color:#00f">=</span> <span style="color:#19177c">direction</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">xcb:ewmh:_NET_WM_MOVERESIZE_SIZE_KEYBOARD</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; FIXME</span>
|
|
</span></span><span style="display:flex;"><span> )
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">direction</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">xcb:ewmh:_NET_WM_MOVERESIZE_MOVE_KEYBOARD</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; FIXME</span>
|
|
</span></span><span style="display:flex;"><span> )
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">direction</span> <span style="color:#19177c">xcb:ewmh:_NET_WM_MOVERESIZE_CANCEL</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-floating--stop-moveresize</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; In case it's a workspace frame.</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#008000">and</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">buffer</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">catch</span> <span style="color:#19177c">'break</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">f</span> <span style="color:#19177c">exwm-workspace--list</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">or</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">id</span> (<span style="color:#00f">frame-parameter</span> <span style="color:#19177c">f</span> <span style="color:#19177c">'exwm-outer-id</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">eq</span> <span style="color:#19177c">id</span> (<span style="color:#00f">frame-parameter</span> <span style="color:#19177c">f</span> <span style="color:#19177c">'exwm-id</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">throw</span> <span style="color:#19177c">'break</span> <span style="color:#800">t</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#800">nil</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#800">t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; In case it's a floating frame,</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; move the corresponding X window instead.</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> <span style="color:#19177c">buffer</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">catch</span> <span style="color:#19177c">'break</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">pair</span> <span style="color:#19177c">exwm--id-buffer-alist</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> (<span style="color:#00f">cdr</span> <span style="color:#19177c">pair</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">and</span> <span style="color:#19177c">exwm--floating-frame</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">or</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">id</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">frame-parameter</span> <span style="color:#19177c">exwm--floating-frame</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'exwm-outer-id</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">eq</span> <span style="color:#19177c">id</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">frame-parameter</span> <span style="color:#19177c">exwm--floating-frame</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'exwm-id</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">id</span> <span style="color:#19177c">exwm--id</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">throw</span> <span style="color:#19177c">'break</span> <span style="color:#800">nil</span>))))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; Start to move it.</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-floating--start-moveresize</span> <span style="color:#19177c">id</span> <span style="color:#19177c">direction</span>))))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_REQUEST_FRAME_EXTENTS</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_REQUEST_FRAME_EXTENTS</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">top</span> <span style="color:#19177c">btm</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#008000">or</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">buffer</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#00f">buffer-local-value</span> <span style="color:#19177c">'exwm--floating-frame</span> <span style="color:#19177c">buffer</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">top</span> <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">btm</span> <span style="color:#666">0</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">top</span> (<span style="color:#00f">window-header-line-height</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">btm</span> (<span style="color:#00f">window-mode-line-height</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:+request</span> <span style="color:#19177c">exwm--connection</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">make-instance</span> <span style="color:#19177c">'xcb:ewmh:set-_NET_FRAME_EXTENTS</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:window</span> <span style="color:#19177c">id</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:left</span> <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:right</span> <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:top</span> <span style="color:#19177c">top</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:bottom</span> <span style="color:#19177c">btm</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:flush</span> <span style="color:#19177c">exwm--connection</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_WM_DESKTOP.</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_WM_DESKTOP</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">buffer-live-p</span> <span style="color:#19177c">buffer</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-workspace-move-window</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">0</span>) <span style="color:#19177c">id</span>))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_WM_STATE</span>
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">action</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">0</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">props</span> (<span style="color:#00f">list</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">1</span>) (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">2</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">props-new</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; only support _NET_WM_STATE_FULLSCREEN / _NET_WM_STATE_ADD for frames</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">and</span> (<span style="color:#19177c">not</span> <span style="color:#19177c">buffer</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">memq</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_FULLSCREEN</span> <span style="color:#19177c">props</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">=</span> <span style="color:#19177c">action</span> <span style="color:#19177c">xcb:ewmh:_NET_WM_STATE_ADD</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:+request</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">exwm--connection</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">make-instance</span> <span style="color:#19177c">'xcb:ewmh:set-_NET_WM_STATE</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:window</span> <span style="color:#19177c">id</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:data</span> (<span style="color:#00f">vector</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_FULLSCREEN</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:flush</span> <span style="color:#19177c">exwm--connection</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> <span style="color:#19177c">buffer</span> <span style="color:#408080;font-style:italic">;ensure it's managed</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> <span style="color:#19177c">buffer</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_WM_STATE_FULLSCREEN</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">or</span> (<span style="color:#00f">memq</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_FULLSCREEN</span> <span style="color:#19177c">props</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">memq</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_ABOVE</span> <span style="color:#19177c">props</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span> ((<span style="color:#00f">=</span> <span style="color:#19177c">action</span> <span style="color:#19177c">xcb:ewmh:_NET_WM_STATE_ADD</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">exwm-layout--fullscreen-p</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-layout-set-fullscreen</span> <span style="color:#19177c">id</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_FULLSCREEN</span> <span style="color:#19177c">props-new</span>))
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">action</span> <span style="color:#19177c">xcb:ewmh:_NET_WM_STATE_REMOVE</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#19177c">exwm-layout--fullscreen-p</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-layout-unset-fullscreen</span> <span style="color:#19177c">id</span>)))
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">action</span> <span style="color:#19177c">xcb:ewmh:_NET_WM_STATE_TOGGLE</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#19177c">exwm-layout--fullscreen-p</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-layout-unset-fullscreen</span> <span style="color:#19177c">id</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-layout-set-fullscreen</span> <span style="color:#19177c">id</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_FULLSCREEN</span> <span style="color:#19177c">props-new</span>)))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; _NET_WM_STATE_DEMANDS_ATTENTION</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; FIXME: check (may require other properties set)</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">memq</span> <span style="color:#19177c">xcb:Atom:_NET_WM_STATE_DEMANDS_ATTENTION</span> <span style="color:#19177c">props</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">=</span> <span style="color:#19177c">action</span> <span style="color:#19177c">xcb:ewmh:_NET_WM_STATE_ADD</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#00f">eq</span> <span style="color:#19177c">exwm--frame</span> <span style="color:#19177c">exwm-workspace--current</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">set-frame-parameter</span> <span style="color:#19177c">exwm--frame</span> <span style="color:#19177c">'exwm-urgency</span> <span style="color:#800">t</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-workspace--switch-history-outdated</span> <span style="color:#800">t</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; xcb:ewmh:_NET_WM_STATE_REMOVE?</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; xcb:ewmh:_NET_WM_STATE_TOGGLE?</span>
|
|
</span></span><span style="display:flex;"><span> )
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:+request</span> <span style="color:#19177c">exwm--connection</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">make-instance</span> <span style="color:#19177c">'xcb:ewmh:set-_NET_WM_STATE</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:window</span> <span style="color:#19177c">id</span> <span style="color:#008000">:data</span> (<span style="color:#00f">vconcat</span> <span style="color:#19177c">props-new</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">xcb:flush</span> <span style="color:#19177c">exwm--connection</span>)))))
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:WM_PROTOCOLS</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">type</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">0</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cond</span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:_NET_WM_PING</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-manage--ping-lock</span> <span style="color:#800">nil</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#800">t</span> (<span style="color:#19177c">exwm--log</span> <span style="color:#ba2121">"Unhandled WM_PROTOCOLS of type: %d"</span> <span style="color:#19177c">type</span>)))))
|
|
</span></span><span style="display:flex;"><span> ((<span style="color:#00f">=</span> <span style="color:#19177c">type</span> <span style="color:#19177c">xcb:Atom:WM_CHANGE_STATE</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">buffer</span> (<span style="color:#19177c">exwm--id->buffer</span> <span style="color:#19177c">id</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#008000">and</span> (<span style="color:#00f">buffer-live-p</span> <span style="color:#19177c">buffer</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">=</span> (<span style="color:#00f">elt</span> <span style="color:#19177c">data</span> <span style="color:#666">0</span>) <span style="color:#19177c">xcb:icccm:WM_STATE:IconicState</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> <span style="color:#19177c">buffer</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> <span style="color:#19177c">exwm--floating-frame</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">call-interactively</span> <span style="color:#00f">#'</span><span style="color:#19177c">exwm-floating-hide</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">bury-buffer</span>))))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#800">t</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm--log</span> <span style="color:#ba2121">"Unhandled: %s(%d)"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">x-get-atom-name</span> <span style="color:#19177c">type</span> <span style="color:#19177c">exwm-workspace--current</span>) <span style="color:#19177c">type</span>)))))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">with-eval-after-load</span> <span style="color:#19177c">'exwm</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">advice-add</span> <span style="color:#19177c">'exwm--on-ClientMessage</span> <span style="color:#008000">:override</span> <span style="color:#00f">#'</span><span style="color:#19177c">exwm--on-ClientMessage-old</span>))
|
|
</span></span></code></pre></div><h3 id="application-specific-settings">Application-specific settings</h3>
|
|
<p>Start Nyxt in <code>char-mode</code>.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-manage-configurations</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(((<span style="color:#00f">member</span> <span style="color:#19177c">exwm-class-name</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"Nyxt"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">char-mode</span> <span style="color:#800">t</span>)))
|
|
</span></span></code></pre></div><h3 id="exwm-config">EXWM config</h3>
|
|
<p>And the EXWM config itself.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-init</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-workspace-switch</span> <span style="color:#666">1</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/exwm-run-polybar</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/exwm-set-wallpaper</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/exwm-run-shepherd</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/run-in-background</span> <span style="color:#ba2121">"gpgconf --reload gpg-agent"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#19177c">my/is-arch</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/run-in-background</span> <span style="color:#ba2121">"set_layout"</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-update-class</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-workspace-rename-buffer</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"EXWM :: %s"</span> <span style="color:#19177c">exwm-class-name</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/exwm-set-alpha</span> (<span style="color:#19177c">alpha</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setf</span> (<span style="color:#19177c">alist-get</span> <span style="color:#19177c">'alpha</span> <span style="color:#19177c">default-frame-alist</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>(<span style="color:#666">,</span><span style="color:#19177c">alpha</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">alpha</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">cl-loop</span> <span style="color:#19177c">for</span> <span style="color:#19177c">frame</span> <span style="color:#19177c">being</span> <span style="color:#19177c">the</span> <span style="color:#19177c">frames</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">do</span> (<span style="color:#19177c">set-frame-parameter</span> <span style="color:#19177c">frame</span> <span style="color:#19177c">'alpha</span> <span style="color:#666">`</span>(<span style="color:#666">,</span><span style="color:#19177c">alpha</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">alpha</span>))))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">use-package</span> <span style="color:#19177c">exwm</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:straight</span> <span style="color:#800">t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:config</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-workspace-number</span> <span style="color:#666">5</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'exwm-init-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/exwm-init</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-hook</span> <span style="color:#19177c">'exwm-update-class-hook</span> <span style="color:#00f">#'</span><span style="color:#19177c">my/exwm-update-class</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">require</span> <span style="color:#19177c">'exwm-randr</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-randr-mode</span> <span style="color:#666">1</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">start-process-shell-command</span> <span style="color:#ba2121">"xrandr"</span> <span style="color:#800">nil</span> <span style="color:#ba2121">"~/bin/scripts/screen-layout"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#19177c">string=</span> (<span style="color:#00f">system-name</span>) <span style="color:#ba2121">"violet"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">my/exwm-another-monitor</span> <span style="color:#ba2121">"DP-1"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-randr-workspace-monitor-plist</span> <span style="color:#666">`</span>(<span style="color:#666">2</span> <span style="color:#666">,</span><span style="color:#19177c">my/exwm-another-monitor</span> <span style="color:#666">3</span> <span style="color:#666">,</span><span style="color:#19177c">my/exwm-another-monitor</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/exwm-refresh-monitors</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">exwm-workspace-warp-cursor</span> <span style="color:#800">t</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">mouse-autoselect-window</span> <span style="color:#800">t</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">focus-follows-mouse</span> <span style="color:#800">t</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<exwm-workspace-config>></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<exwm-keybindings>></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<exwm-mode-line-config>></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<exwm-fixes>></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#19177c">my/light-p</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/exwm-set-alpha</span> <span style="color:#666">100</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/exwm-set-alpha</span> <span style="color:#666">90</span>))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">perspective-exwm-mode</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exwm-enable</span>))
|
|
</span></span></code></pre></div><h2 id="i3wm">i3wm</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Guix dependency</th>
|
|
<th>Disabled</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>i3-gaps</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>i3lock</td>
|
|
<td>true</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><code>i3lock</code> is disabled because the global one has to be used.</p>
|
|
<p><a href="https://i3wm.org/">i3wm</a> is a manual tiling window manager, which is currently my window manager of choice. I’ve tried several alternatives, including <a href="https://xmonad.org/">xmonad</a> & <a href="https://github.com/ch11ng/exwm">EXWM</a>, <del>but i3 seems to fit my workflow best</del> and decided to switch to EXWM. This section is kept for a few cases when I need to be extra sure that my WM doesn’t fail.</p>
|
|
<p><a href="https://github.com/Airblader/i3">i3-gaps</a> is an i3 fork with a few features like window gaps. I like to enable inner gaps when there is at least one container in a workspace.</p>
|
|
<p>References:</p>
|
|
<ul>
|
|
<li><a href="https://i3wm.org/docs/">i3wm docs</a></li>
|
|
<li><a href="https://github.com/Airblader/i3/wiki">i3-gaps wiki</a></li>
|
|
</ul>
|
|
<h3 id="general-settings">General settings</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> $mod Mod4
|
|
</span></span><span style="display:flex;"><span>font pango:monospace <span style="color:#666">10</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Use Mouse+$mod to drag floating windows to their wanted position
|
|
</span></span><span style="display:flex;"><span>floating_modifier $mod
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Move cursor between monitors
|
|
</span></span><span style="display:flex;"><span>mouse_warping output
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Apply XFCE Settings
|
|
</span></span><span style="display:flex;"><span># exec xfsettingsd
|
|
</span></span><span style="display:flex;"><span># exec xiccd
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Set screen layout
|
|
</span></span><span style="display:flex;"><span>exec ~<span style="color:#b68">/bin/</span>scripts/screen-layout
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Most needed keybindigs
|
|
</span></span><span style="display:flex;"><span># reload the configuration file
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+c reload
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+r restart
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># exit i3 (logs you out of your X session)
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+e exec <span style="color:#ba2121">"i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'"</span>
|
|
</span></span></code></pre></div><h3 id="managing-windows">Managing windows</h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>rust-i3-switch-tabs</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Some keybindings for managing windows.</p>
|
|
<p><code>emacs-i3-integration</code> is a script to pass some command to Emacs to get a consistent set of keybindings in both i3 and Emacs. Check out <a href="/configs/emacs/#i3-integration">the section in Emacs.org</a> for details.</p>
|
|
<p>Kill focused windows</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bindsym $mod+Shift+q exec emacs-i3-integration kill
|
|
</span></span></code></pre></div><p>Change focus</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bindsym $mod+h exec emacs-i3-integration focus left
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+j exec emacs-i3-integration focus down
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+k exec emacs-i3-integration focus up
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+l exec emacs-i3-integration focus right
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Left exec emacs-i3-integration focus left
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Down exec emacs-i3-integration focus down
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Up exec emacs-i3-integration focus up
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Right exec emacs-i3-integration focus right
|
|
</span></span></code></pre></div><p>Move windows around</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bindsym $mod+Shift+h exec emacs-i3-integration move left
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+j exec emacs-i3-integration move down
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+k exec emacs-i3-integration move up
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+l exec emacs-i3-integration move right
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+Left exec emacs-i3-integration move left
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+Down exec emacs-i3-integration move down
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+Up exec emacs-i3-integration move up
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+Right exec emacs-i3-integration move right
|
|
</span></span></code></pre></div><p>Split windows</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bindsym $mod+s exec emacs-i3-integration split h
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+v exec emacs-i3-integration split v
|
|
</span></span></code></pre></div><p>Switch tabs</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bindsym $mod+period exec i3-switch-tabs right
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+comma exec i3-switch-tabs left
|
|
</span></span></code></pre></div><p>Enter fullscreen mode</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span># enter fullscreen mode for the focused container
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+f fullscreen toggle
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+c fullscreen toggle global
|
|
</span></span></code></pre></div><p>Changing layout</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bindsym $mod+w layout stacking
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+t layout tabbed
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+e exec emacs-i3-integration layout toggle split
|
|
</span></span></code></pre></div><p>Toggle tiling/floating, switch between tiled and floating windows</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bindsym $mod+Shift+f floating toggle
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+z focus mode_toggle
|
|
</span></span></code></pre></div><p>Switching outputs</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bindsym $mod+Tab move workspace to output right
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+q focus output right
|
|
</span></span></code></pre></div><p>Focus parent and child container</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bindsym $mod+a focus parent
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+A focus child
|
|
</span></span></code></pre></div><p>Toggle sticky</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bindsym $mod+Shift+i sticky toggle
|
|
</span></span></code></pre></div><p>Set windows as floating and sticky, move to the top right.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bindsym $mod+x floating enable; sticky enable; move position <span style="color:#666">1220</span> <span style="color:#666">0</span>; resize <span style="color:#008000;font-weight:bold">set</span> width <span style="color:#666">700</span> px
|
|
</span></span></code></pre></div><h3 id="workspaces">Workspaces</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> $w1 <span style="color:#ba2121">"1 🚀"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> $w2 <span style="color:#ba2121">"2 🌍"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> $w3 <span style="color:#ba2121">"3 💬"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> $w4 <span style="color:#ba2121">"4 🛠️️"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> $w7 <span style="color:#ba2121">"7 🛰️"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> $w8 <span style="color:#ba2121">"8 📝"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> $w9 <span style="color:#ba2121">"9 🎵"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> $w10 <span style="color:#ba2121">"10 📦"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+<span style="color:#666">1</span> workspace $w1
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+<span style="color:#666">2</span> workspace $w2
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+<span style="color:#666">3</span> workspace $w3
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+<span style="color:#666">4</span> workspace $w4
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+<span style="color:#666">5</span> workspace <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+<span style="color:#666">6</span> workspace <span style="color:#666">6</span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+<span style="color:#666">7</span> workspace $w7
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+<span style="color:#666">8</span> workspace $w8
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+<span style="color:#666">9</span> workspace $w9
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+<span style="color:#666">0</span> workspace $w10
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># move focused container to workspace
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+<span style="color:#666">1</span> move container to workspace $w1
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+<span style="color:#666">2</span> move container to workspace $w2
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+<span style="color:#666">3</span> move container to workspace $w3
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+<span style="color:#666">4</span> move container to workspace $w4
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+<span style="color:#666">5</span> move container to workspace <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+<span style="color:#666">6</span> move container to workspace <span style="color:#666">6</span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+<span style="color:#666">7</span> move container to workspace $w7
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+<span style="color:#666">8</span> move container to workspace $w8
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+<span style="color:#666">9</span> move container to workspace $w9
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+<span style="color:#666">0</span> move container to workspace $w10
|
|
</span></span></code></pre></div><h3 id="rules">Rules</h3>
|
|
<p>Rules to automatically assign applications to workspaces and do other stuff, like enable floating.</p>
|
|
<p>Most apps can be distinguished by a WM class (you can get one with <a href="https://www.x.org/releases/X11R7.5/doc/man/man1/xprop.1.html">xprop</a>), but in some cases it doesn’t work, e.g. for terminal applications. In that case rules can be based on a window title, for instance.</p>
|
|
<p>However, watch out for the following: rule such as <code>for_window [title="ncmpcpp.*"] move to workspace $w9</code> will move <strong>any</strong> window with a title starting with <code>ncmpcpp</code> to workspace <code>$w9</code>. For instance, it moves your browser when you google “ncmpcpp”.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"Emacs"</span>] $w1
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"qutebrowser"</span>] $w2
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"firefox"</span>] $w2
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"VK"</span>] $w3
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"Slack"</span>] $w3
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"discord"</span>] $w3
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"TelegramDesktop"</span>] $w3
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"Postman"</span>] $w4
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"Chromium-browse"</span>] $w4
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"chromium"</span>] $w4
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"google-chrome"</span>] $w4
|
|
</span></span><span style="display:flex;"><span>assign [title=<span style="color:#ba2121">"Vue Developer Tools"</span>] $w4
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"Google Play Music Desktop Player"</span>] $w9
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"jetbrains-datagrip"</span>] $w4
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"zoom"</span>] $w7
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"skype"</span>] $w7
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"Mailspring"</span>] $w8
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"Thunderbird"</span>] $w8
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"Joplin"</span>] $w8
|
|
</span></span><span style="display:flex;"><span>assign [class=<span style="color:#ba2121">"keepassxc"</span>] $w10
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>for_window [title=<span style="color:#ba2121">"VirtScreen"</span>] floating enable
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>for_window [title=<span style="color:#ba2121">"ncmpcpp.*"</span>] move to workspace $w9
|
|
</span></span><span style="display:flex;"><span>for_window [title=<span style="color:#ba2121">"newsboat.*"</span>] move to workspace $w9
|
|
</span></span><span style="display:flex;"><span>for_window [title=<span style="color:#ba2121">".*run_wego"</span>] move to workspace $w9
|
|
</span></span><span style="display:flex;"><span>for_window [class=<span style="color:#ba2121">"cinnamon-settings*"</span>] floating enable
|
|
</span></span><span style="display:flex;"><span>for_window [title=<span style="color:#ba2121">"Picture-in-Picture"</span>] sticky enable
|
|
</span></span><span style="display:flex;"><span>for_window [window_role=<span style="color:#ba2121">"GtkFileChooserDialog"</span>] resize <span style="color:#008000;font-weight:bold">set</span> width <span style="color:#666">1000</span> px height <span style="color:#666">800</span> px
|
|
</span></span><span style="display:flex;"><span>for_window [window_role=<span style="color:#ba2121">"GtkFileChooserDialog"</span>] move position center
|
|
</span></span></code></pre></div><h3 id="scratchpad">Scratchpad</h3>
|
|
<p>Scratch terminal, inspired by <a href="https://www.youtube.com/watch?v=q-l7DnDbiiU">this Luke Smith’s video</a>.</p>
|
|
<h4 id="launch-script">Launch script</h4>
|
|
<p>First of all, we have to distinguish a scratchpad terminal from a normal one. To do that, one can create st with a required classname.</p>
|
|
<p>Then, it would be cool not to duplicate scratchpads, so the following script first looks for a window with a created classname. If it exists, the script just toggles the scratchpad visibility. Otherwise, a new instance of a window is created.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">CLASSNAME</span><span style="color:#666">=</span><span style="color:#ba2121">"dropdown_tmux"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">COMMAND</span><span style="color:#666">=</span><span style="color:#ba2121">"alacritty --class </span><span style="color:#19177c">$CLASSNAME</span><span style="color:#ba2121"> -e tmux new-session -s </span><span style="color:#19177c">$CLASSNAME</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">pid</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>xdotool search --classname <span style="color:#ba2121">"dropdown_tmux"</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> ! -z <span style="color:#19177c">$pid</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> i3-msg scratchpad show
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> setsid -f <span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">COMMAND</span><span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><h4 id="i3-config">i3 config</h4>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span># Scratchpad
|
|
</span></span><span style="display:flex;"><span>for_window [instance=<span style="color:#ba2121">"dropdown_*"</span>] floating enable
|
|
</span></span><span style="display:flex;"><span>for_window [instance=<span style="color:#ba2121">"dropdown_*"</span>] move scratchpad
|
|
</span></span><span style="display:flex;"><span>for_window [instance=<span style="color:#ba2121">"dropdown_*"</span>] sticky enable
|
|
</span></span><span style="display:flex;"><span>for_window [instance=<span style="color:#ba2121">"dropdown_*"</span>] scratchpad show
|
|
</span></span><span style="display:flex;"><span>for_window [instance=<span style="color:#ba2121">"dropdown_*"</span>] move position center
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+u exec ~<span style="color:#b68">/bin/</span>scripts/dropdown
|
|
</span></span></code></pre></div><h3 id="gaps-and-borders">Gaps & borders</h3>
|
|
<p>The main reason to use i3-gaps</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span># Borders
|
|
</span></span><span style="display:flex;"><span># for_window [class=<span style="color:#ba2121">".*"</span>] border pixel <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span>default_border pixel <span style="color:#666">3</span>
|
|
</span></span><span style="display:flex;"><span>hide_edge_borders both
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Gaps
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> $default_inner <span style="color:#666">10</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> $default_outer <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>gaps inner $default_inner
|
|
</span></span><span style="display:flex;"><span>gaps outer $default_outer
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>smart_gaps on
|
|
</span></span></code></pre></div><h4 id="keybindings-1">Keybindings</h4>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>mode <span style="color:#ba2121">"inner gaps"</span> {
|
|
</span></span><span style="display:flex;"><span> bindsym plus gaps inner current plus <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span> bindsym minus gaps inner current minus <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+plus gaps inner all plus <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+minus gaps inner all minus <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span> bindsym <span style="color:#666">0</span> gaps inner current <span style="color:#008000;font-weight:bold">set</span> <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+<span style="color:#666">0</span> gaps inner all <span style="color:#008000;font-weight:bold">set</span> <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> bindsym r gaps inner current <span style="color:#008000;font-weight:bold">set</span> $default_inner
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+r gaps inner all <span style="color:#008000;font-weight:bold">set</span> $default_inner
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> bindsym Return mode <span style="color:#ba2121">"default"</span>
|
|
</span></span><span style="display:flex;"><span> bindsym Escape mode <span style="color:#ba2121">"default"</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>mode <span style="color:#ba2121">"outer gaps"</span> {
|
|
</span></span><span style="display:flex;"><span> bindsym plus gaps outer current plus <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span> bindsym minus gaps outer current minus <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+plus gaps outer all plus <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+minus gaps outer all minus <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span> bindsym <span style="color:#666">0</span> gaps outer current <span style="color:#008000;font-weight:bold">set</span> <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+<span style="color:#666">0</span> gaps outer all <span style="color:#008000;font-weight:bold">set</span> <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> bindsym r gaps outer current <span style="color:#008000;font-weight:bold">set</span> $default_outer
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+r gaps outer all <span style="color:#008000;font-weight:bold">set</span> $default_outer
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> bindsym Return mode <span style="color:#ba2121">"default"</span>
|
|
</span></span><span style="display:flex;"><span> bindsym Escape mode <span style="color:#ba2121">"default"</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+g mode <span style="color:#ba2121">"inner gaps"</span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+g mode <span style="color:#ba2121">"outer gaps"</span>
|
|
</span></span></code></pre></div><h3 id="move-and-resize-windows">Move & resize windows</h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>python-i3-balance-workspace</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>A more or less standard set of keybindings to move & resize floating windows. Just be careful to always make a way to return from these new modes, otherwise you’d end up in a rather precarious situation.</p>
|
|
<p><a href="https://github.com/atreyasha/i3-balance-workspace">i3-balance-workspace</a> is a small Python package to balance the i3 windows, but for the Emacs integration I also want this button to balance the Emacs windows, so here is a small script to do just that.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> <span style="color:#008000;font-weight:bold">$(</span>xdotool getactivewindow getwindowname<span style="color:#008000;font-weight:bold">)</span> <span style="color:#666">=</span>~ ^emacs<span style="color:#666">(</span>:.*<span style="color:#666">)</span>?@.* <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> emacsclient -e <span style="color:#ba2121">"(balance-windows)"</span> &
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span>i3_balance_workspace
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>mode <span style="color:#ba2121">"resize"</span> {
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> bindsym h exec emacs-i3-integration resize shrink width <span style="color:#666">10</span> px or <span style="color:#666">10</span> ppt
|
|
</span></span><span style="display:flex;"><span> bindsym j exec emacs-i3-integration resize grow height <span style="color:#666">10</span> px or <span style="color:#666">10</span> ppt
|
|
</span></span><span style="display:flex;"><span> bindsym k exec emacs-i3-integration resize shrink height <span style="color:#666">10</span> px or <span style="color:#666">10</span> ppt
|
|
</span></span><span style="display:flex;"><span> bindsym l exec emacs-i3-integration resize grow width <span style="color:#666">10</span> px or <span style="color:#666">10</span> ppt
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+h exec emacs-i3-integration resize shrink width <span style="color:#666">100</span> px or <span style="color:#666">100</span> ppt
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+j exec emacs-i3-integration resize grow height <span style="color:#666">100</span> px or <span style="color:#666">100</span> ppt
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+k exec emacs-i3-integration resize shrink height <span style="color:#666">100</span> px or <span style="color:#666">100</span> ppt
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+l exec emacs-i3-integration resize grow width <span style="color:#666">100</span> px or <span style="color:#666">100</span> ppt
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> # same bindings, but for the arrow keys
|
|
</span></span><span style="display:flex;"><span> bindsym Left exec emacs-i3-integration resize shrink width <span style="color:#666">10</span> px or <span style="color:#666">10</span> ppt
|
|
</span></span><span style="display:flex;"><span> bindsym Down exec emacs-i3-integration resize grow height <span style="color:#666">10</span> px or <span style="color:#666">10</span> ppt
|
|
</span></span><span style="display:flex;"><span> bindsym Up exec emacs-i3-integration resize shrink height <span style="color:#666">10</span> px or <span style="color:#666">10</span> ppt
|
|
</span></span><span style="display:flex;"><span> bindsym Right exec emacs-i3-integration resize grow width <span style="color:#666">10</span> px or <span style="color:#666">10</span> ppt
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+Left exec emacs-i3-integration resize shrink width <span style="color:#666">100</span> px or <span style="color:#666">100</span> ppt
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+Down exec emacs-i3-integration resize grow height <span style="color:#666">100</span> px or <span style="color:#666">100</span> ppt
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+Up exec emacs-i3-integration resize shrink height <span style="color:#666">100</span> px or <span style="color:#666">100</span> ppt
|
|
</span></span><span style="display:flex;"><span> bindsym Shift+Right exec emacs-i3-integration resize grow width <span style="color:#666">100</span> px or <span style="color:#666">100</span> ppt
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> bindsym equal exec i3-emacs-balance-windows
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> # back to normal: Enter or Escape
|
|
</span></span><span style="display:flex;"><span> bindsym Return mode <span style="color:#ba2121">"default"</span>
|
|
</span></span><span style="display:flex;"><span> bindsym Escape mode <span style="color:#ba2121">"default"</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+r mode <span style="color:#ba2121">"resize"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>mode <span style="color:#ba2121">"move"</span> {
|
|
</span></span><span style="display:flex;"><span> bindsym $mod+Tab focus right
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> bindsym Left move left
|
|
</span></span><span style="display:flex;"><span> bindsym Down move down
|
|
</span></span><span style="display:flex;"><span> bindsym Up move up
|
|
</span></span><span style="display:flex;"><span> bindsym Right move right
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> bindsym h move left
|
|
</span></span><span style="display:flex;"><span> bindsym j move down
|
|
</span></span><span style="display:flex;"><span> bindsym k move up
|
|
</span></span><span style="display:flex;"><span> bindsym l move right
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> # back to normal: Enter or Escape
|
|
</span></span><span style="display:flex;"><span> bindsym Return mode <span style="color:#ba2121">"default"</span>
|
|
</span></span><span style="display:flex;"><span> bindsym Escape mode <span style="color:#ba2121">"default"</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+m mode <span style="color:#ba2121">"move"</span> focus floating
|
|
</span></span></code></pre></div><h3 id="off--intergration-with-dmenu"><span class="org-todo done OFF">OFF</span> (OFF) Intergration with dmenu</h3>
|
|
<p><a href="https://tools.suckless.org/dmenu/">dmenu</a> is a dynamic menu program for X. I’ve opted out of using it in favour of rofi, but here is a relevant bit of config.</p>
|
|
<p>Scripts are located in the <code>bin/scripts</code> folder.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span># dmenu
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+d exec i3-dmenu-desktop --dmenu=<span style="color:#ba2121">"dmenu -l 10"</span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+apostrophe mode <span style="color:#ba2121">"dmenu"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>mode <span style="color:#ba2121">"dmenu"</span> {
|
|
</span></span><span style="display:flex;"><span> bindsym d exec i3-dmenu-desktop --dmenu=<span style="color:#ba2121">"dmenu -l 10"</span>; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym p exec dmenu_run -l <span style="color:#666">10</span>; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym m exec dmenu-man; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym b exec dmenu-buku; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym f exec dmenu-explore; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym t exec dmenu-tmuxp; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym Escape mode <span style="color:#ba2121">"default"</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+b exec --no-startup-id dmenu-buku
|
|
</span></span></code></pre></div><h3 id="integration-with-rofi">Integration with rofi</h3>
|
|
<p>Keybindings to launch <a href="https://github.com/davatorium/rofi">rofi</a>. For more detail, look the <a href="#rofi">Rofi</a> section.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bindsym $mod+p exec <span style="color:#ba2121">"rofi -modi 'drun,run' -show drun"</span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+b exec --no-startup-id rofi-buku-mine
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+minus exec rofi-pass
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+equal exec rofimoji
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+apostrophe mode <span style="color:#ba2121">"rofi"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>mode <span style="color:#ba2121">"rofi"</span> {
|
|
</span></span><span style="display:flex;"><span> bindsym d exec <span style="color:#ba2121">"rofi -modi 'drun,run' -show drun"</span>
|
|
</span></span><span style="display:flex;"><span> bindsym m exec rofi-man; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym b exec rofi-buku-mine; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym k exec rofi-pass; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym Escape mode <span style="color:#ba2121">"default"</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h3 id="launching-apps-and-misc-keybindings">Launching apps & misc keybindings</h3>
|
|
<p>I prefer to use a separate mode to launch most of my apps, with some exceptions.</p>
|
|
<h4 id="apps">Apps</h4>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span># Launch apps
|
|
</span></span><span style="display:flex;"><span># start a terminal at workspace <span style="color:#666">1</span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Return exec <span style="color:#ba2121">"i3-msg 'workspace 1 🚀; exec alacritty'"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+i exec <span style="color:#ba2121">"copyq menu"</span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+Shift+x exec <span style="color:#ba2121">"i3lock -f -i /home/pavel/Pictures/lock-wallpaper.png"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+semicolon mode <span style="color:#ba2121">"apps"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>mode <span style="color:#ba2121">"apps"</span> {
|
|
</span></span><span style="display:flex;"><span> bindsym Escape mode <span style="color:#ba2121">"default"</span>
|
|
</span></span><span style="display:flex;"><span> bindsym b exec firefox; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym v exec vk; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym s exec slack-wrapper; mode default;
|
|
</span></span><span style="display:flex;"><span> bindsym d exec <span style="color:#ba2121">"flatpak run com.discordapp.Discord"</span>; mode default;
|
|
</span></span><span style="display:flex;"><span> bindsym m exec <span style="color:#ba2121">"alacritty -e ncmpcpp"</span>; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym c exec <span style="color:#ba2121">"copyq toggle"</span>; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym k exec <span style="color:#ba2121">"keepassxc"</span>; mode default
|
|
</span></span><span style="display:flex;"><span> # bindsym e exec mailspring; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym a exec emacs; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym n exec <span style="color:#ba2121">"alacritty -e newsboat"</span>; mode default
|
|
</span></span><span style="display:flex;"><span> bindsym w exec <span style="color:#ba2121">"alacritty /home/pavel/bin/scripts/run_wego"</span>; mode default
|
|
</span></span><span style="display:flex;"><span> # bindsym a exec emacsclient -c; mode default
|
|
</span></span><span style="display:flex;"><span> # bindsym Shift+a exec emacs; mode default
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h4 id="media-controls-and-brightness">Media controls & brightness</h4>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span># Pulse Audio controls
|
|
</span></span><span style="display:flex;"><span>bindsym XF86AudioRaiseVolume exec --no-startup-id <span style="color:#ba2121">"ponymix increase 5 --max-volume 150"</span>
|
|
</span></span><span style="display:flex;"><span>bindsym XF86AudioLowerVolume exec --no-startup-id <span style="color:#ba2121">"ponymix decrease 5 --max-volume 150"</span>
|
|
</span></span><span style="display:flex;"><span>bindsym XF86AudioMute exec --no-startup-id <span style="color:#ba2121">"ponymix toggle"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>exec --no-startup-id xmodmap -e <span style="color:#ba2121">'keycode 135 = Super_R'</span> && xset -r <span style="color:#666">135</span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+F2 exec --no-startup-id <span style="color:#ba2121">"ponymix increase 5"</span>
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+F3 exec --no-startup-id <span style="color:#ba2121">"ponymix decrease 5"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Media player controls
|
|
</span></span><span style="display:flex;"><span>bindsym XF86AudioPlay exec mpc toggle
|
|
</span></span><span style="display:flex;"><span>bindsym XF86AudioPause exec mpc pause
|
|
</span></span><span style="display:flex;"><span>bindsym XF86AudioNext exec mpc next
|
|
</span></span><span style="display:flex;"><span>bindsym XF86AudioPrev exec mpc prev
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Screen brightness
|
|
</span></span><span style="display:flex;"><span>bindsym XF86MonBrightnessUp exec <span style="color:#008000">light</span> -A <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span>bindsym XF86MonBrightnessDown exec <span style="color:#008000">light</span> -U <span style="color:#666">5</span>
|
|
</span></span></code></pre></div><h4 id="screenshots">Screenshots</h4>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span># Screenshots
|
|
</span></span><span style="display:flex;"><span>bindsym --release Print exec <span style="color:#ba2121">"flameshot gui"</span>
|
|
</span></span><span style="display:flex;"><span>bindsym --release Shift+Print exec <span style="color:#ba2121">"xfce4-screenshooter"</span>
|
|
</span></span></code></pre></div><h3 id="colors-1">Colors</h3>
|
|
<p>Application of the XResources theme to the WM.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>exec xrdb -merge $HOME/.Xresources
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Colors
|
|
</span></span><span style="display:flex;"><span>set_from_resource $bg-color background
|
|
</span></span><span style="display:flex;"><span>set_from_resource $active-color color4
|
|
</span></span><span style="display:flex;"><span>set_from_resource $inactive-bg-color color8
|
|
</span></span><span style="display:flex;"><span>set_from_resource $text-color foreground
|
|
</span></span><span style="display:flex;"><span>set_from_resource $inactive-text-color color7
|
|
</span></span><span style="display:flex;"><span>set_from_resource $urgent-bg-color color1
|
|
</span></span><span style="display:flex;"><span>set_from_resource $urgent-text-color color0
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># window colors
|
|
</span></span><span style="display:flex;"><span># border background text indicator child border
|
|
</span></span><span style="display:flex;"><span>client.focused $active-color $bg-color $text-color $bg-color $active-color
|
|
</span></span><span style="display:flex;"><span>client.unfocused $bg-color $inactive-bg-color $inactive-text-color $bg-color $bg-color
|
|
</span></span><span style="display:flex;"><span>client.focused_inactive $active-color $inactive-bg-color $inactive-text-color $bg-color $bg-color
|
|
</span></span><span style="display:flex;"><span>client.urgent $urgent-bg-color $urgent-bg-color $urgent-text-color $bg-color $urgent-bg-color
|
|
</span></span></code></pre></div><h3 id="off--i3blocks"><span class="org-todo done OFF">OFF</span> (OFF) i3blocks</h3>
|
|
<p>I’ve opted out of i3bar & <a href="https://github.com/vivien/i3blocks">i3blocks</a> for <a href="https://github.com/polybar/polybar">polybar</a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>bar {
|
|
</span></span><span style="display:flex;"><span> status_command i3blocks -c ~<span style="color:#b68">/.config/</span>i3/i3blocks.conf
|
|
</span></span><span style="display:flex;"><span> i3bar_command i3bar
|
|
</span></span><span style="display:flex;"><span> font pango:monospace <span style="color:#666">12</span>
|
|
</span></span><span style="display:flex;"><span> output HDMI-A<span style="color:#666">-0</span>
|
|
</span></span><span style="display:flex;"><span> tray_output none
|
|
</span></span><span style="display:flex;"><span> colors {
|
|
</span></span><span style="display:flex;"><span> background $bg-color
|
|
</span></span><span style="display:flex;"><span> separator <span style="color:#666">#757575</span>
|
|
</span></span><span style="display:flex;"><span> # border background text
|
|
</span></span><span style="display:flex;"><span> focused_workspace $bg-color $bg-color $text-color
|
|
</span></span><span style="display:flex;"><span> inactive_workspace $inactive-bg-color $inactive-bg-color $inactive-text-color
|
|
</span></span><span style="display:flex;"><span> urgent_workspace $urgent-bg-color $urgent-bg-color $urgent-text-color
|
|
</span></span><span style="display:flex;"><span> }
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>bar {
|
|
</span></span><span style="display:flex;"><span> status_command i3blocks -c ~<span style="color:#b68">/.config/</span>i3/i3blocks.conf
|
|
</span></span><span style="display:flex;"><span> i3bar_command i3bar
|
|
</span></span><span style="display:flex;"><span> font pango:monospace <span style="color:#666">10</span>
|
|
</span></span><span style="display:flex;"><span> output DVI-D<span style="color:#666">-0</span>
|
|
</span></span><span style="display:flex;"><span> colors {
|
|
</span></span><span style="display:flex;"><span> background $bg-color
|
|
</span></span><span style="display:flex;"><span> separator <span style="color:#666">#757575</span>
|
|
</span></span><span style="display:flex;"><span> # border background text
|
|
</span></span><span style="display:flex;"><span> focused_workspace $bg-color $bg-color $text-color
|
|
</span></span><span style="display:flex;"><span> inactive_workspace $inactive-bg-color $inactive-bg-color $inactive-text-color
|
|
</span></span><span style="display:flex;"><span> urgent_workspace $urgent-bg-color $urgent-bg-color $urgent-text-color
|
|
</span></span><span style="display:flex;"><span> }
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h3 id="keyboard-layout">Keyboard Layout</h3>
|
|
<p>A script to set Russian-English keyboard layout:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>setxkbmap -layout us,ru
|
|
</span></span><span style="display:flex;"><span>setxkbmap -model pc105 -option <span style="color:#ba2121">'grp:win_space_toggle'</span> -option <span style="color:#ba2121">'grp:alt_shift_toggle'</span>
|
|
</span></span></code></pre></div><p>A script to toggle the layout</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> setxkbmap -query | grep -q us,ru; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> setxkbmap -layout us
|
|
</span></span><span style="display:flex;"><span> setxkbmap -option
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> setxkbmap -layout us,ru
|
|
</span></span><span style="display:flex;"><span> setxkbmap -model pc105 -option <span style="color:#ba2121">'grp:win_space_toggle'</span> -option <span style="color:#ba2121">'grp:alt_shift_toggle'</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><p>And the relevant i3 settings:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span># Layout
|
|
</span></span><span style="display:flex;"><span>exec_always --no-startup-id set_layout
|
|
</span></span><span style="display:flex;"><span>bindsym $mod+slash exec toggle_layout
|
|
</span></span></code></pre></div><h3 id="autostart">Autostart</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span># Polybar
|
|
</span></span><span style="display:flex;"><span>exec_always --no-startup-id <span style="color:#ba2121">"bash /home/pavel/bin/polybar.sh"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Wallpaper
|
|
</span></span><span style="display:flex;"><span>exec_always <span style="color:#ba2121">"feh --bg-fill ~/Pictures/wallpaper.jpg"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Picom
|
|
</span></span><span style="display:flex;"><span>exec picom
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Keynav
|
|
</span></span><span style="display:flex;"><span>exec keynav
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Applets
|
|
</span></span><span style="display:flex;"><span>exec --no-startup-id nm-applet
|
|
</span></span><span style="display:flex;"><span># exec --no-startup-id <span style="color:#b68">/usr/</span>bin/blueman-applet
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>exec shepherd
|
|
</span></span><span style="display:flex;"><span>exec dunst
|
|
</span></span><span style="display:flex;"><span>exec copyq
|
|
</span></span><span style="display:flex;"><span>exec <span style="color:#ba2121">"xmodmap ~/.Xmodmap"</span>
|
|
</span></span><span style="display:flex;"><span># exec <span style="color:#ba2121">"xrdb -merge ~/.Xresources"</span>
|
|
</span></span><span style="display:flex;"><span># exec <span style="color:#ba2121">"bash ~/bin/autostart.sh"</span>
|
|
</span></span></code></pre></div><h2 id="polybar">Polybar</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>desktop-polybar</td>
|
|
<td>polybar</td>
|
|
<td>statusbar</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><a href="https://github.com/polybar/polybar">Polybar</a> is a nice-looking, WM-agnostic statusbar program.</p>
|
|
<p>Don’t forget to install the Google Noto Color Emoji font. Guix package with all Noto fonts is way too large.</p>
|
|
<p>References:</p>
|
|
<ul>
|
|
<li><a href="https://github.com/polybar/polybar/wiki">polybar docs</a></li>
|
|
</ul>
|
|
<h3 id="general-settings-1">General settings</h3>
|
|
<p>This is the most <del>crazy</del> advanced piece of my literate configuration so far.</p>
|
|
<p>My polybar has:</p>
|
|
<ul>
|
|
<li>colors from the general color theme;</li>
|
|
<li>powerline-ish decorations between modules.</li>
|
|
</ul>
|
|
<h4 id="colors-2">Colors</h4>
|
|
<p><del>The “colors” part is straightforward enough</del>. Once upon the time it was so…</p>
|
|
<p>Polybar can use <code>Xresources</code>, but the problem with that is you’re supposed to use <code>colorX</code> as foreground, not as background. This usually works fine with dark themes from <code>doom-themes</code>, but not so much with high-contrast <code>modus-themes</code>.</p>
|
|
<p>So…</p>
|
|
<p><a id="code-snippet--get-polybar-colors"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#00f">mapconcat</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">elem</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"%s = %s"</span> (<span style="color:#00f">car</span> <span style="color:#19177c">elem</span>) (<span style="color:#00f">cdr</span> <span style="color:#19177c">elem</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">append</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nreverse</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">cl-reduce</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">acc</span> <span style="color:#19177c">name</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let*</span> ((<span style="color:#19177c">color</span> (<span style="color:#19177c">my/color-value</span> <span style="color:#19177c">name</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#00f">member</span> <span style="color:#19177c">name</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"black"</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">color</span> (<span style="color:#19177c">ct-iterate</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">color</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">c</span>) (<span style="color:#19177c">ct-edit-hsl-l-inc</span> <span style="color:#19177c">c</span> <span style="color:#666">2</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">c</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">ct-light-p</span> <span style="color:#19177c">c</span> <span style="color:#666">65</span>)))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> (<span style="color:#00f">cons</span> <span style="color:#19177c">name</span> <span style="color:#19177c">color</span>) <span style="color:#19177c">acc</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> (<span style="color:#00f">cons</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"light-%s"</span> <span style="color:#19177c">name</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">ct-edit-lab-l-inc</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">color</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">my/alpha-for-light</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">acc</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">push</span> (<span style="color:#00f">cons</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"dark-%s"</span> <span style="color:#19177c">name</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">ct-edit-lab-l-dec</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">color</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">my/alpha-for-light</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">acc</span>) )
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">acc</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(<span style="color:#ba2121">"black"</span> <span style="color:#ba2121">"red"</span> <span style="color:#ba2121">"green"</span> <span style="color:#ba2121">"yellow"</span> <span style="color:#ba2121">"blue"</span> <span style="color:#ba2121">"magenta"</span> <span style="color:#ba2121">"cyan"</span> <span style="color:#ba2121">"white"</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">:initial-value</span> <span style="color:#800">nil</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>((<span style="color:#ba2121">"background"</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#008000">or</span> (<span style="color:#19177c">my/color-value</span> <span style="color:#19177c">'bg-active</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/color-value</span> <span style="color:#19177c">'bg</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#ba2121">"foreground"</span> <span style="color:#666">.</span> <span style="color:#ba2121">"#000000"</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"\n"</span>)
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[colors]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029"><<get-polybar-colors()>></span>
|
|
</span></span></code></pre></div><h4 id="glyph-settings">Glyph settings</h4>
|
|
<p>As for the module decorations though, I find it ironic that with all this fancy rendering around I have to resort to Unicode glyphs.</p>
|
|
<p>Anyhow, the approach is to put a glyph between two blocks like this:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>block1 block2
|
|
</span></span></code></pre></div><p>And set the foreground and background colors like that:</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th></th>
|
|
<th>block1</th>
|
|
<th>glyph</th>
|
|
<th>block2</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>foreground</td>
|
|
<td>F1</td>
|
|
<td>B2</td>
|
|
<td>F2</td>
|
|
</tr>
|
|
<tr>
|
|
<td>background</td>
|
|
<td>B1</td>
|
|
<td>B1</td>
|
|
<td>B2</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>So, that’s a start. First, let’s define the glyph symbols in the polybar config:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[glyph]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">gleft</span> <span style="color:#666">=</span> <span style="color:#ba2121"></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">gright</span> <span style="color:#666">=</span> <span style="color:#ba2121"></span>
|
|
</span></span></code></pre></div><h4 id="defining-modules">Defining modules</h4>
|
|
<p>As we want to interweave polybar modules with these glyphs in the right order and with the right colors, it is reasonable to define a single source of truth:</p>
|
|
<p><a id="table--polybar-modules"></a></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Index</th>
|
|
<th>Module</th>
|
|
<th>Color</th>
|
|
<th>Glyph</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>1</td>
|
|
<td>pulseaudio</td>
|
|
<td>light-magenta</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>2</td>
|
|
<td>mpd</td>
|
|
<td>magenta</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>16</td>
|
|
<td>nvidia</td>
|
|
<td>light-cyan</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>3</td>
|
|
<td>cpu</td>
|
|
<td>cyan</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>15</td>
|
|
<td>temperature</td>
|
|
<td>cyan</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>9</td>
|
|
<td>battery</td>
|
|
<td>cyan</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>4</td>
|
|
<td>ram-memory</td>
|
|
<td>light-green</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>5</td>
|
|
<td>swap-memory</td>
|
|
<td>green</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>6</td>
|
|
<td>bandwidth</td>
|
|
<td>light-red</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>7</td>
|
|
<td>openvpn</td>
|
|
<td>light-red</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>8</td>
|
|
<td>xkeyboard</td>
|
|
<td>red</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>10</td>
|
|
<td>weather</td>
|
|
<td>light-yellow</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>12</td>
|
|
<td>sun</td>
|
|
<td>yellow</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>13</td>
|
|
<td>aw-afk</td>
|
|
<td>light-blue</td>
|
|
<td>+</td>
|
|
</tr>
|
|
<tr>
|
|
<td>14</td>
|
|
<td>date</td>
|
|
<td>blue</td>
|
|
<td>+</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Also excluding some modules from certain monitors, which for now is about excluding <code>battery</code> from the monitors of my desktop PC:</p>
|
|
<p><a id="table--polybar-modules-exclude"></a></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Monitor</th>
|
|
<th>Exclude</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>DVI-D-0</td>
|
|
<td>battery</td>
|
|
</tr>
|
|
<tr>
|
|
<td>HDMI-A-0</td>
|
|
<td>battery</td>
|
|
</tr>
|
|
<tr>
|
|
<td>HDMI-0</td>
|
|
<td>battery</td>
|
|
</tr>
|
|
<tr>
|
|
<td>DP-1</td>
|
|
<td>battery</td>
|
|
</tr>
|
|
<tr>
|
|
<td>eDP</td>
|
|
<td>nvidia</td>
|
|
</tr>
|
|
<tr>
|
|
<td>eDP-1</td>
|
|
<td>nvidia</td>
|
|
</tr>
|
|
<tr>
|
|
<td>DVI-D-0</td>
|
|
<td>nvidia</td>
|
|
</tr>
|
|
<tr>
|
|
<td>HDMI-A-0</td>
|
|
<td>nvidia</td>
|
|
</tr>
|
|
<tr>
|
|
<td>HDMI-1</td>
|
|
<td>nvidia</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Another thing we need to do is to set the color of modules in accordance with the <code>polybar_modules</code> table. The background can be determined from the <code>Color</code> column with the following code block:</p>
|
|
<p><a id="code-snippet--get-polybar-bg"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#00f">format</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"${colors.%s}"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nth</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">2</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-find</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">el</span>) (<span style="color:#00f">string-equal</span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">el</span>) <span style="color:#19177c">module</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">table</span>)))
|
|
</span></span></code></pre></div><p>That block is meant to be invoked in each module definition.</p>
|
|
<h4 id="generating-glyphs">Generating glyphs</h4>
|
|
<p>To generate the required set of glyphs, we need a glyph for every possible combination of adjacent colors that can occur in polybar.</p>
|
|
<p>Most of these combinations can be inferred from the <code>polybar_modules</code> table, the rest are defined in another table:</p>
|
|
<p><a id="table--polybar-extra-colors"></a></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Color 1</th>
|
|
<th>Color 2</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>background</td>
|
|
<td>white</td>
|
|
</tr>
|
|
<tr>
|
|
<td>background</td>
|
|
<td>light-magenta</td>
|
|
</tr>
|
|
<tr>
|
|
<td>blue</td>
|
|
<td>background</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><a id="code-snippet--polybar-generate-glyphs"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">let*</span> ((<span style="color:#19177c">monitors</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">thread-last</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">exclude-table</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-map</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">el</span>) (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">el</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-uniq</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">exclude-combinations</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-map</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">monitor</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-map</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">el</span>) (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">el</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-filter</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">el</span>) (<span style="color:#008000">and</span> (<span style="color:#00f">string-equal</span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">el</span>) <span style="color:#19177c">monitor</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">el</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">exclude-table</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>(<span style="color:#666">,@</span><span style="color:#19177c">monitors</span> <span style="color:#ba2121">""</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">module-glyph-combinations</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">thread-last</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">exclude-combinations</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-map</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">exclude</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">thread-last</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">table</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-filter</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#00f">elt</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#008000">or</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">member</span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#00f">elt</span>) <span style="color:#19177c">exclude</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">not</span> (<span style="color:#00f">string-equal</span> (<span style="color:#00f">nth</span> <span style="color:#666">3</span> <span style="color:#00f">elt</span>) <span style="color:#ba2121">"+"</span>)))))))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-uniq</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">color-changes</span> <span style="color:#800">nil</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">e</span> <span style="color:#19177c">extra</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-to-list</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'color-changes</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">e</span>) <span style="color:#ba2121">"--"</span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">e</span>))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dolist</span> (<span style="color:#19177c">comb</span> <span style="color:#19177c">module-glyph-combinations</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">dotimes</span> (<span style="color:#19177c">i</span> (<span style="color:#00f">1-</span> (<span style="color:#00f">length</span> <span style="color:#19177c">comb</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">add-to-list</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'color-changes</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> (<span style="color:#00f">nth</span> <span style="color:#666">2</span> (<span style="color:#00f">nth</span> <span style="color:#19177c">i</span> <span style="color:#19177c">comb</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"--"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nth</span> <span style="color:#666">2</span> (<span style="color:#00f">nth</span> (<span style="color:#00f">1+</span> <span style="color:#19177c">i</span>) <span style="color:#19177c">comb</span>))))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapconcat</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">el</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">colors</span> (<span style="color:#19177c">split-string</span> <span style="color:#19177c">el</span> <span style="color:#ba2121">"--"</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">[module/glyph-%s--%s]
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">type = custom/text
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">content-background = ${colors.%s}
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">content-foreground = ${colors.%s}
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">content = ${glyph.gright}
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">content-font = 5"</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">colors</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">colors</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">colors</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">colors</span>))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">color-changes</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"\n"</span>))
|
|
</span></span></code></pre></div><p>Here’s a rough outline of how the code works:</p>
|
|
<ul>
|
|
<li><code>monitors</code> is a list of unique monitors in <code>exclude-table</code></li>
|
|
<li><code>exclude-combilnations</code> is a list of lists of module names to be excluded for each monitor</li>
|
|
<li><code>module-glyphs-combinations</code> is a list of lists of actual modules for each monitor</li>
|
|
<li><code>color-changes</code> is a list of unique adjacent colors across modules in all monitors</li>
|
|
</ul>
|
|
<p>Finally, <code>color-changes</code> is used to generate glyph modules that look like this:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/glyph-light-cyan--cyan]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/text</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content-background</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.light-cyan}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.cyan}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content</span> <span style="color:#666">=</span> <span style="color:#ba2121">${glyph.gright}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content-font</span> <span style="color:#666">=</span> <span style="color:#ba2121">5</span>
|
|
</span></span></code></pre></div><p>As of now, 15 of such modules is generated.</p>
|
|
<p>Include this to the polybar config itself:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#7d9029"><<polybar-generate-glyphs()>></span>
|
|
</span></span></code></pre></div><h4 id="generating-set-of-modules">Generating set of modules</h4>
|
|
<p>To configure polybar itself, we need to generate a set of modules for each monitor.</p>
|
|
<p>The parameters here, excluding the two required tables, are:</p>
|
|
<ul>
|
|
<li><code>monitor</code> - the current monitor on which to filter out the blocks by the <code>polybar_modules_exclude</code> table,</li>
|
|
<li><code>first-color</code> - the first color of the first glyph,</li>
|
|
<li><code>last-color</code> - the second color of the last glyph.</li>
|
|
</ul>
|
|
<!--listend-->
|
|
<p><a id="code-snippet--polybar-generate-modules"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">let*</span> ((<span style="color:#19177c">exclude-modules</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">thread-last</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">exclude-table</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-filter</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">el</span>) (<span style="color:#00f">string-equal</span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">el</span>) <span style="color:#19177c">monitor</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-map</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">el</span>) (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">el</span>)))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">modules</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">thread-last</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">table</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">seq-filter</span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">el</span>) (<span style="color:#19177c">not</span> (<span style="color:#00f">member</span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">el</span>) <span style="color:#19177c">exclude-modules</span>))))))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">prev-color</span> <span style="color:#19177c">first-color</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">ret</span> <span style="color:#800">nil</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapconcat</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">el</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">apply</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#00f">#'concat</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">list</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">when</span> (<span style="color:#00f">string-equal</span> (<span style="color:#00f">nth</span> <span style="color:#666">3</span> <span style="color:#19177c">el</span>) <span style="color:#ba2121">"+"</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">ret</span> (<span style="color:#00f">format</span> <span style="color:#ba2121">"glyph-%s--%s "</span> <span style="color:#19177c">prev-color</span> (<span style="color:#00f">nth</span> <span style="color:#666">2</span> <span style="color:#19177c">el</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">setq</span> <span style="color:#19177c">prev-color</span> (<span style="color:#00f">nth</span> <span style="color:#666">2</span> <span style="color:#19177c">el</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">ret</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">el</span>))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">modules</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">" "</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">unless</span> (<span style="color:#19177c">string-empty-p</span> <span style="color:#19177c">last-color</span>) (<span style="color:#00f">format</span> <span style="color:#ba2121">" glyph-%s--%s "</span> <span style="color:#19177c">prev-color</span> <span style="color:#19177c">last-color</span>))))
|
|
</span></span></code></pre></div><p>The polybar config doesn’t support conditional statements, but it does support environment variables, so I pass the parameters from in the launch script.</p>
|
|
<h4 id="global-bar-config">Global bar config</h4>
|
|
<p>Global bar configuration.</p>
|
|
<p>Monitor config and base colors.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[bar/mybar]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">monitor</span> <span style="color:#666">=</span> <span style="color:#ba2121">${env:MONITOR:}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">width</span> <span style="color:#666">=</span> <span style="color:#ba2121">100%</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">height</span> <span style="color:#666">=</span> <span style="color:#ba2121">${env:HEIGHT:27}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">fixed-center</span> <span style="color:#666">=</span> <span style="color:#ba2121">false</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bottom</span> <span style="color:#666">=</span> <span style="color:#ba2121">${env:POLYBAR_BOTTOM:true}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">background</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.background}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.black}</span>
|
|
</span></span></code></pre></div><p>Some geometry settings. These are set this way to make glyphs look the way they should</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; line-size = 3</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">line-color</span> <span style="color:#666">=</span> <span style="color:#ba2121">#f00</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">padding</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">module-margin-left</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">module-margin-right</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">margin-bottom</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">margin-top</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; underline-size = 0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">border-size</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">offset-x</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">offset-y</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">radius</span> <span style="color:#666">=</span> <span style="color:#ba2121">0.0</span>
|
|
</span></span></code></pre></div><p>Fonts</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; font-0 = ${env:FONT0:pango:monospace:size=10;1}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; font-1 = ${env:FONT1:NotoEmoji:scale=10:antialias=false;0}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; font-2 = ${env:FONT2:fontawesome:pixelsize=10;1}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; font-3 = ${env:FONT3:JetBrains Mono Nerd Font:monospace:size=10;1}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">font-0</span> <span style="color:#666">=</span> <span style="color:#ba2121">pango:monospace:size=13;2</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">font-1</span> <span style="color:#666">=</span> <span style="color:#ba2121">NotoEmoji:scale=10:antialias=false;1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">font-2</span> <span style="color:#666">=</span> <span style="color:#ba2121">fontawesome:pixelsize=13;3</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">font-3</span> <span style="color:#666">=</span> <span style="color:#ba2121">JetBrains Mono Nerd Font:monospace:size=13;4</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">font-4</span> <span style="color:#666">=</span> <span style="color:#ba2121">JetBrains Mono Nerd Font:monospace:size=17;4</span>
|
|
</span></span></code></pre></div><p>Modules. Because I sometimes set up different blocks on different monitors, they are set via environment variables.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#7d9029">modules-left</span> <span style="color:#666">=</span> <span style="color:#ba2121">i3 c-g glyph-left-light-background--blue</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; modules-center = test</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">modules-right</span> <span style="color:#666">=</span> <span style="color:#ba2121">${env:RIGHT_BLOCKS}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">tray-position</span> <span style="color:#666">=</span> <span style="color:#ba2121">${env:TRAY:right}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">tray-padding</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">tray-maxsize</span> <span style="color:#666">=</span> <span style="color:#ba2121">16</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">tray-background</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.background}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">wm-restack</span> <span style="color:#666">=</span> <span style="color:#ba2121">i3</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; override-redirect = true</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">scroll-up</span> <span style="color:#666">=</span> <span style="color:#ba2121">i3wm-wsnext</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">scroll-down</span> <span style="color:#666">=</span> <span style="color:#ba2121">i3wm-wsprev</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; cursor-click = pointer</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; cursor-scroll = ns-resize</span>
|
|
</span></span></code></pre></div><p>Misc settings.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[settings]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">screenchange-reload</span> <span style="color:#666">=</span> <span style="color:#ba2121">true</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">compositing-background</span> <span style="color:#666">=</span> <span style="color:#ba2121">source</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">compositing-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">over</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">compositing-overline</span> <span style="color:#666">=</span> <span style="color:#ba2121">over</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">compositing-underline</span> <span style="color:#666">=</span> <span style="color:#ba2121">over</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">compositing-border</span> <span style="color:#666">=</span> <span style="color:#ba2121">over</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[global/wm]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">margin-top</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">margin-bottom</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span></code></pre></div><h4 id="launch-script-1">Launch script</h4>
|
|
<p>The script below allows me to:</p>
|
|
<ul>
|
|
<li>have different blocks on my two different-sized monitors and my laptop;</li>
|
|
<li>have different settings on my desktop PC and laptop;</li>
|
|
</ul>
|
|
<!--listend-->
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">hostname</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>hostname<span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Settings varying on the hostname</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$hostname</span><span style="color:#ba2121">"</span> <span style="color:#666">=</span> <span style="color:#ba2121">"azure"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">TRAY_MONITOR</span><span style="color:#666">=</span><span style="color:#ba2121">"eDP-1"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">elif</span> <span style="color:#666">[</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$hostname</span><span style="color:#ba2121">"</span> <span style="color:#666">=</span> <span style="color:#ba2121">"eminence"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> xrandr --query | grep <span style="color:#ba2121">" connected"</span> | cut -d<span style="color:#ba2121">" "</span> -f1 | grep -q <span style="color:#ba2121">"HDMI-A-0"</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">TRAY_MONITOR</span><span style="color:#666">=</span><span style="color:#ba2121">"HDMI-A-0"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">TRAY_MONITOR</span><span style="color:#666">=</span><span style="color:#ba2121">"eDP"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">elif</span> <span style="color:#666">[</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$hostname</span><span style="color:#ba2121">"</span> <span style="color:#666">=</span> <span style="color:#ba2121">"iris"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">TRAY_MONITOR</span><span style="color:#666">=</span><span style="color:#ba2121">"HDMI-1"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">TRAY_MONITOR</span><span style="color:#666">=</span><span style="color:#ba2121">"DP-1"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Setting varying on the monitor</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">declare</span> -A <span style="color:#19177c">FONT_SIZES</span><span style="color:#666">=(</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"eDP"</span><span style="color:#666">]=</span><span style="color:#ba2121">"13"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"eDP-1"</span><span style="color:#666">]=</span><span style="color:#ba2121">"13"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"DVI-D-0"</span><span style="color:#666">]=</span><span style="color:#ba2121">"13"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"HDMI-A-0"</span><span style="color:#666">]=</span><span style="color:#ba2121">"13"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"HDMI-1"</span><span style="color:#666">]=</span><span style="color:#ba2121">"13"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"HDMI-0"</span><span style="color:#666">]=</span><span style="color:#ba2121">"13"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"DP-1"</span><span style="color:#666">]=</span><span style="color:#ba2121">"13"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">declare</span> -A <span style="color:#19177c">EMOJI_SCALE</span><span style="color:#666">=(</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"eDP"</span><span style="color:#666">]=</span><span style="color:#ba2121">"9"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"eDP-1"</span><span style="color:#666">]=</span><span style="color:#ba2121">"9"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"DVI-D-0"</span><span style="color:#666">]=</span><span style="color:#ba2121">"10"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"HDMI-A-0"</span><span style="color:#666">]=</span><span style="color:#ba2121">"10"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"HDMI-1"</span><span style="color:#666">]=</span><span style="color:#ba2121">"10"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"HDMI-0"</span><span style="color:#666">]=</span><span style="color:#ba2121">"10"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"DP-1"</span><span style="color:#666">]=</span><span style="color:#ba2121">"10"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">declare</span> -A <span style="color:#19177c">BAR_HEIGHT</span><span style="color:#666">=(</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"eDP"</span><span style="color:#666">]=</span><span style="color:#ba2121">"29"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"eDP-1"</span><span style="color:#666">]=</span><span style="color:#ba2121">"29"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"DVI-D-0"</span><span style="color:#666">]=</span><span style="color:#ba2121">"29"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"HDMI-A-0"</span><span style="color:#666">]=</span><span style="color:#ba2121">"29"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"HDMI-1"</span><span style="color:#666">]=</span><span style="color:#ba2121">"29"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"HDMI-0"</span><span style="color:#666">]=</span><span style="color:#ba2121">"29"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"DP-1"</span><span style="color:#666">]=</span><span style="color:#ba2121">"29"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">declare</span> -A <span style="color:#19177c">BLOCKS</span><span style="color:#666">=(</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"eDP"</span><span style="color:#666">]=</span><span style="color:#ba2121">"<<polybar-generate-modules(monitor="</span>eDP<span style="color:#ba2121">")>>"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"eDP-1"</span><span style="color:#666">]=</span><span style="color:#ba2121">"<<polybar-generate-modules(monitor="</span>eDP-1<span style="color:#ba2121">")>>"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"DVI-D-0"</span><span style="color:#666">]=</span><span style="color:#ba2121">"<<polybar-generate-modules(monitor="</span>DVI-D-0<span style="color:#ba2121">")>>"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"HDMI-A-0"</span><span style="color:#666">]=</span><span style="color:#ba2121">"<<polybar-generate-modules(monitor="</span>HDMI-A-0<span style="color:#ba2121">")>>"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"HDMI-1"</span><span style="color:#666">]=</span><span style="color:#ba2121">"<<polybar-generate-modules(monitor="</span>HDMI-1<span style="color:#ba2121">")>>"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"HDMI-0"</span><span style="color:#666">]=</span><span style="color:#ba2121">"<<polybar-generate-modules(monitor="</span>HDMI-0<span style="color:#ba2121">")>>"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"DP-1"</span><span style="color:#666">]=</span><span style="color:#ba2121">"<<polybar-generate-modules(monitor="</span>DP-1<span style="color:#ba2121">")>>"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">)</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">declare</span> -A <span style="color:#19177c">TEMP_HWMON_PATHS</span><span style="color:#666">=(</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"eminence"</span><span style="color:#666">]=</span><span style="color:#ba2121">"/sys/devices/pci0000:00/0000:00:18.3/hwmon/hwmon2/temp1_input"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"indigo"</span><span style="color:#666">]=</span><span style="color:#ba2121">"/sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"violet"</span><span style="color:#666">]=</span><span style="color:#ba2121">"/sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">)</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Geolocation for some modules</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">export</span> <span style="color:#19177c">LOC</span><span style="color:#666">=</span><span style="color:#ba2121">"SPB"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># export IPSTACK_API_KEY=$(pass show My_Online/APIs/ipstack | head -n 1)</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>pkill polybar
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> m in <span style="color:#008000;font-weight:bold">$(</span>xrandr --query | grep <span style="color:#ba2121">" connected"</span> | cut -d<span style="color:#ba2121">" "</span> -f1<span style="color:#008000;font-weight:bold">)</span>; <span style="color:#008000;font-weight:bold">do</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">export</span> <span style="color:#19177c">MONITOR</span><span style="color:#666">=</span><span style="color:#19177c">$m</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$MONITOR</span><span style="color:#ba2121">"</span> <span style="color:#666">=</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$TRAY_MONITOR</span><span style="color:#ba2121">"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">export</span> <span style="color:#19177c">TRAY</span><span style="color:#666">=</span><span style="color:#ba2121">"right"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">export</span> <span style="color:#19177c">TRAY</span><span style="color:#666">=</span><span style="color:#ba2121">"none"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">SIZE</span><span style="color:#666">=</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">FONT_SIZES</span>[<span style="color:#19177c">$MONITOR</span>]<span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">SCALE</span><span style="color:#666">=</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">EMOJI_SCALE</span>[<span style="color:#19177c">$MONITOR</span>]<span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">TEMP</span><span style="color:#666">=</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">TEMP_HWMON_PATHS</span>[<span style="color:#008000;font-weight:bold">$(</span>hostname<span style="color:#008000;font-weight:bold">)</span>]<span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> -z <span style="color:#ba2121">"</span><span style="color:#19177c">$SCALE</span><span style="color:#ba2121">"</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">continue</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># export FONT0="pango:monospace:size=$SIZE;1"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># export FONT1="NotoEmoji:scale=$SCALE:antialias=false;1"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># export FONT2="fontawesome:pixelsize=$SIZE;1"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># export FONT3="JetBrains Mono Nerd Font:monospace:size=15;1"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">export</span> <span style="color:#19177c">HEIGHT</span><span style="color:#666">=</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">BAR_HEIGHT</span>[<span style="color:#19177c">$MONITOR</span>]<span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">export</span> <span style="color:#19177c">RIGHT_BLOCKS</span><span style="color:#666">=</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">BLOCKS</span>[<span style="color:#19177c">$MONITOR</span>]<span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">export</span> <span style="color:#19177c">TEMP_HWMON_PATH</span><span style="color:#666">=</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">TEMP</span><span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span> polybar mybar &
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">done</span>
|
|
</span></span></code></pre></div><h3 id="individual-modules">Individual modules</h3>
|
|
<p>Some of the custom modules below use Org mode noweb to evaluate colors, because it’s faster than querying <code>xrdb</code> at runtime. I wish I could reference polybar values there, but <a href="https://github.com/polybar/polybar/issues/615">it looks like this is impossible</a>.</p>
|
|
<p>If you want to copy something, you can go to the <a href="bin/polybar/">bin/polybar</a> folder.</p>
|
|
<h4 id="pulseaudio">pulseaudio</h4>
|
|
<p>PulseAudio status</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/pulseaudio]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">internal/pulseaudio</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">use-ui-max</span> <span style="color:#666">=</span> <span style="color:#ba2121">true</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bar-volume-width</span> <span style="color:#666">=</span> <span style="color:#ba2121">7</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; bar-volume-foreground-0 = ${colors.white}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; bar-volume-foreground-1 = ${colors.yellow}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; bar-volume-foreground-2 = ${colors.yellow}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; bar-volume-foreground-3 = ${colors.blue}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; bar-volume-foreground-4 = ${colors.blue}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; bar-volume-foreground-5 = ${colors.green}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; bar-volume-foreground-6 = ${colors.green}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bar-volume-gradient</span> <span style="color:#666">=</span> <span style="color:#ba2121">false</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bar-volume-indicator</span> <span style="color:#666">=</span> <span style="color:#ba2121">|</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bar-volume-indicator-font</span> <span style="color:#666">=</span> <span style="color:#ba2121">2</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bar-volume-fill</span> <span style="color:#666">=</span> <span style="color:#ba2121">─</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bar-volume-fill-font</span> <span style="color:#666">=</span> <span style="color:#ba2121">2</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bar-volume-empty</span> <span style="color:#666">=</span> <span style="color:#ba2121">─</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bar-volume-empty-font</span> <span style="color:#666">=</span> <span style="color:#ba2121">2</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; bar-volume-empty-foreground = ${colors.light-white}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-volume</span> <span style="color:#666">=</span> <span style="color:#ba2121">♪ <ramp-volume> <label-volume></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-volume</span> <span style="color:#666">=</span> <span style="color:#ba2121">%percentage%%</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-volume-0</span> <span style="color:#666">=</span> <span style="color:#ba2121">▁</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-volume-1</span> <span style="color:#666">=</span> <span style="color:#ba2121">▂</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-volume-2</span> <span style="color:#666">=</span> <span style="color:#ba2121">▃</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-volume-3</span> <span style="color:#666">=</span> <span style="color:#ba2121">▄</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-volume-4</span> <span style="color:#666">=</span> <span style="color:#ba2121">▅</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-volume-5</span> <span style="color:#666">=</span> <span style="color:#ba2121">▆</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-volume-6</span> <span style="color:#666">=</span> <span style="color:#ba2121">▇</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-volume-7</span> <span style="color:#666">=</span> <span style="color:#ba2121">█</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-muted</span> <span style="color:#666">=</span> <span style="color:#ba2121">♪ <label-muted></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-muted</span> <span style="color:#666">=</span> <span style="color:#ba2121">MUTE</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-volume-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="pulseaudio")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-muted-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="pulseaudio")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-volume-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-muted-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; format-volume-underline = ${colors.white}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; format-muted-underline = ${colors.light-black}</span>
|
|
</span></span></code></pre></div><h4 id="mpd">mpd</h4>
|
|
<p><a href="https://www.musicpd.org/">Music Player Daemon</a> status</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/mpd]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">internal/mpd</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-playing</span> <span style="color:#666">=</span> <span style="color:#ba2121"><toggle> <label-time> <label-song></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-paused</span> <span style="color:#666">=</span> <span style="color:#ba2121"><toggle> <label-time> <label-song></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-stopped</span> <span style="color:#666">=</span> <span style="color:#ba2121">" "</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-song</span> <span style="color:#666">=</span> <span style="color:#ba2121">[%album-artist%] %title%</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-time</span> <span style="color:#666">=</span> <span style="color:#ba2121">%elapsed%/%total%</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-song-maxlen</span> <span style="color:#666">=</span> <span style="color:#ba2121">30</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-song-ellipsis</span> <span style="color:#666">=</span> <span style="color:#ba2121">true</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; format-playing-underline = ${colors.yellow}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; format-paused-underline = ${colors.yellow}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; format-stopped-underline = ${colors.yellow}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-playing-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="mpd")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-paused-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="mpd")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-stopped-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="mpd")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-playing-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-paused-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-stopped-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-separator</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">separator-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.red}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">icon-pause</span> <span style="color:#666">=</span> <span style="color:#ba2121"></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">icon-play</span> <span style="color:#666">=</span> <span style="color:#ba2121"></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">icon-stop</span> <span style="color:#666">=</span> <span style="color:#ba2121"></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">icon-prev</span> <span style="color:#666">=</span> <span style="color:#ba2121">1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">icon-next</span> <span style="color:#666">=</span> <span style="color:#ba2121">2</span>
|
|
</span></span></code></pre></div><h4 id="cpu">cpu</h4>
|
|
<p>CPU usage</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/cpu]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">internal/cpu</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format</span> <span style="color:#666">=</span> <span style="color:#ba2121">" <label>"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label</span> <span style="color:#666">=</span> <span style="color:#ba2121">%percentage%%</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="cpu")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span></code></pre></div><h4 id="nvidia">nvidia</h4>
|
|
<p>Display NVIDIA usage with nvidia-smi</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>nvidia-smi --query-gpu<span style="color:#666">=</span>utilization.gpu,power.draw,temperature.gpu,memory.used --format<span style="color:#666">=</span>csv,noheader | sed -s <span style="color:#ba2121">'s/ %/%/;s/W, [0-9]\+/&°C/;s/,/ /g'</span>
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/nvidia]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/script</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">exec</span> <span style="color:#666">=</span> <span style="color:#ba2121">/home/pavel/bin/polybar/nvidia.sh</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">2</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format</span> <span style="color:#666">=</span> <span style="color:#ba2121"> <label></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; tail = true</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="nvidia")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span></code></pre></div><h4 id="ram-memory">ram-memory</h4>
|
|
<p>RAM usage</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/ram-memory]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">internal/memory</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">10</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-used-0</span> <span style="color:#666">=</span> <span style="color:#ba2121">▁</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-used-1</span> <span style="color:#666">=</span> <span style="color:#ba2121">▂</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-used-2</span> <span style="color:#666">=</span> <span style="color:#ba2121">▃</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-used-3</span> <span style="color:#666">=</span> <span style="color:#ba2121">▄</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-used-4</span> <span style="color:#666">=</span> <span style="color:#ba2121">▅</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-used-5</span> <span style="color:#666">=</span> <span style="color:#ba2121">▆</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-used-6</span> <span style="color:#666">=</span> <span style="color:#ba2121">▇</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-used-7</span> <span style="color:#666">=</span> <span style="color:#ba2121">█</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format</span> <span style="color:#666">=</span> <span style="color:#ba2121"> <label></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label</span><span style="color:#666">=</span><span style="color:#ba2121">%gb_used:.1f%</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; format-underline = ${colors.blue}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="ram-memory")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span></code></pre></div><h4 id="swap-memory">swap-memory</h4>
|
|
<p>Swap usage</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/swap-memory]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">internal/memory</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">10</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label</span><span style="color:#666">=</span><span style="color:#ba2121"> %gb_swap_used:.1f%</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="swap-memory")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span></code></pre></div><h4 id="network">network</h4>
|
|
<p>Upload/download speed</p>
|
|
<p>UPD <span class="timestamp-wrapper"><span class="timestamp"><2022-07-24 Sun></span></span>: Somehow it doesn’t work with my current internet setup.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/network]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">internal/network</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">1</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interface</span> <span style="color:#666">=</span> <span style="color:#ba2121">${env:WLAN_INTERFACE}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; format-connected = [<ramp-signal>] <label-connected></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-connected</span> <span style="color:#666">=</span> <span style="color:#ba2121">↓ %downspeed% ↑ %upspeed%</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-disconnected</span> <span style="color:#666">=</span> <span style="color:#ba2121">X</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; format-connected-underline = ${colors.green}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; format-disconnected-underline = ${colors.red}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-connected-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="network")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-disconnected-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="network")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-connected-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-disconnected-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-signal-0</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-signal-1</span> <span style="color:#666">=</span> <span style="color:#ba2121">1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-signal-2</span> <span style="color:#666">=</span> <span style="color:#ba2121">2</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-signal-3</span> <span style="color:#666">=</span> <span style="color:#ba2121">3</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-signal-4</span> <span style="color:#666">=</span> <span style="color:#ba2121">4</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-signal-5</span> <span style="color:#666">=</span> <span style="color:#ba2121">5</span>
|
|
</span></span></code></pre></div><h4 id="bandwidth">bandwidth</h4>
|
|
<p><a href="bin/polybar/bandwidth3.sh">My adaption</a> of an i3blocks script called “<a href="https://github.com/vivien/i3blocks-contrib/tree/master/bandwidth3">bandwidth3</a>”. I’ve only changed some defaults that are awkward to set with polybar.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/bandwidth]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/script</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">exec</span> <span style="color:#666">=</span> <span style="color:#ba2121">/home/pavel/bin/polybar/bandwidth3.sh</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">tail</span> <span style="color:#666">=</span> <span style="color:#ba2121">true</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="bandwidth")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Copyright (C) 2015 James Murphy</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Copyright (C) 2022 Pavel Korytov</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># Licensed under the terms of the GNU GPL v2 only.</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">iface</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">BLOCK_INSTANCE</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">iface</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">IFACE</span><span style="color:#008000;font-weight:bold">:-</span><span style="color:#19177c">$iface</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">dt</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">DT</span><span style="color:#008000;font-weight:bold">:-</span><span style="color:#19177c">1</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">unit</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">UNIT</span><span style="color:#008000;font-weight:bold">:-</span><span style="color:#19177c">KB</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">printf_command</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">PRINTF_COMMAND</span><span style="color:#008000;font-weight:bold">:-</span><span style="color:#ba2121">"printf \"↓ %-2.1f ↑ %2.1f [%s/s]\\n\", rx, wx, unit;"</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">function</span> default_interface <span style="color:#666">{</span>
|
|
</span></span><span style="display:flex;"><span> ip route | awk <span style="color:#ba2121">'/^default via/ {print $5; exit}'</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">function</span> check_proc_net_dev <span style="color:#666">{</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> ! -f <span style="color:#ba2121">"/proc/net/dev"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"/proc/net/dev not found"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">exit</span> <span style="color:#666">1</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">function</span> list_interfaces <span style="color:#666">{</span>
|
|
</span></span><span style="display:flex;"><span> check_proc_net_dev
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"Interfaces in /proc/net/dev:"</span>
|
|
</span></span><span style="display:flex;"><span> grep -o <span style="color:#ba2121">"^[^:]\\+:"</span> /proc/net/dev | tr -d <span style="color:#ba2121">" :"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">while</span> <span style="color:#008000">getopts</span> i:t:u:p:lh opt; <span style="color:#008000;font-weight:bold">do</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">case</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$opt</span><span style="color:#ba2121">"</span> in
|
|
</span></span><span style="display:flex;"><span> i<span style="color:#666">)</span> <span style="color:#19177c">iface</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$OPTARG</span><span style="color:#ba2121">"</span> ;;
|
|
</span></span><span style="display:flex;"><span> t<span style="color:#666">)</span> <span style="color:#19177c">dt</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$OPTARG</span><span style="color:#ba2121">"</span> ;;
|
|
</span></span><span style="display:flex;"><span> u<span style="color:#666">)</span> <span style="color:#19177c">unit</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$OPTARG</span><span style="color:#ba2121">"</span> ;;
|
|
</span></span><span style="display:flex;"><span> p<span style="color:#666">)</span> <span style="color:#19177c">printf_command</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$OPTARG</span><span style="color:#ba2121">"</span> ;;
|
|
</span></span><span style="display:flex;"><span> l<span style="color:#666">)</span> list_interfaces <span style="color:#666">&&</span> <span style="color:#008000">exit</span> <span style="color:#666">0</span> ;;
|
|
</span></span><span style="display:flex;"><span> h<span style="color:#666">)</span> <span style="color:#008000">printf</span> <span style="color:#b62;font-weight:bold">\
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#b62;font-weight:bold"></span><span style="color:#ba2121">"Usage: bandwidth3 [-i interface] [-t time] [-u unit] [-p printf_command] [-l] [-h]
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">Options:
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">-i\tNetwork interface to measure. Default determined using \`ip route\`.
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">-t\tTime interval in seconds between measurements. Default: 3
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">-u\tUnits to measure bytes in. Default: Mb
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">\tAllowed units: Kb, KB, Mb, MB, Gb, GB, Tb, TB
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">\tUnits may have optional it/its/yte/ytes on the end, e.g. Mbits, KByte
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">-p\tAwk command to be called after a measurement is made.
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">\tDefault: printf \"<span font='FontAwesome'> </span>%%-5.1f/%%5.1f %%s/s\\\\n\", rx, wx, unit;
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">\tExposed variables: rx, wx, tx, unit, iface
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">-l\tList available interfaces in /proc/net/dev
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">-h\tShow this help text
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">"</span> <span style="color:#666">&&</span> <span style="color:#008000">exit</span> 0;;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">esac</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">done</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>check_proc_net_dev
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">iface</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">iface</span><span style="color:#008000;font-weight:bold">:-$(</span>default_interface<span style="color:#008000;font-weight:bold">)</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">while</span> <span style="color:#666">[</span> -z <span style="color:#ba2121">"</span><span style="color:#19177c">$iface</span><span style="color:#ba2121">"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">do</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> No default interface
|
|
</span></span><span style="display:flex;"><span> sleep <span style="color:#ba2121">"</span><span style="color:#19177c">$dt</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">iface</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>default_interface<span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">done</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">case</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$unit</span><span style="color:#ba2121">"</span> in
|
|
</span></span><span style="display:flex;"><span> Kb|Kbit|Kbits<span style="color:#666">)</span> <span style="color:#19177c">bytes_per_unit</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$((</span><span style="color:#666">1024</span> <span style="color:#666">/</span> <span style="color:#666">8</span><span style="color:#008000;font-weight:bold">))</span>;;
|
|
</span></span><span style="display:flex;"><span> KB|KByte|KBytes<span style="color:#666">)</span> <span style="color:#19177c">bytes_per_unit</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$((</span><span style="color:#666">1024</span><span style="color:#008000;font-weight:bold">))</span>;;
|
|
</span></span><span style="display:flex;"><span> Mb|Mbit|Mbits<span style="color:#666">)</span> <span style="color:#19177c">bytes_per_unit</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$((</span><span style="color:#666">1024</span> <span style="color:#666">*</span> <span style="color:#666">1024</span> <span style="color:#666">/</span> <span style="color:#666">8</span><span style="color:#008000;font-weight:bold">))</span>;;
|
|
</span></span><span style="display:flex;"><span> MB|MByte|MBytes<span style="color:#666">)</span> <span style="color:#19177c">bytes_per_unit</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$((</span><span style="color:#666">1024</span> <span style="color:#666">*</span> <span style="color:#666">1024</span><span style="color:#008000;font-weight:bold">))</span>;;
|
|
</span></span><span style="display:flex;"><span> Gb|Gbit|Gbits<span style="color:#666">)</span> <span style="color:#19177c">bytes_per_unit</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$((</span><span style="color:#666">1024</span> <span style="color:#666">*</span> <span style="color:#666">1024</span> <span style="color:#666">*</span> <span style="color:#666">1024</span> <span style="color:#666">/</span> <span style="color:#666">8</span><span style="color:#008000;font-weight:bold">))</span>;;
|
|
</span></span><span style="display:flex;"><span> GB|GByte|GBytes<span style="color:#666">)</span> <span style="color:#19177c">bytes_per_unit</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$((</span><span style="color:#666">1024</span> <span style="color:#666">*</span> <span style="color:#666">1024</span> <span style="color:#666">*</span> <span style="color:#666">1024</span><span style="color:#008000;font-weight:bold">))</span>;;
|
|
</span></span><span style="display:flex;"><span> Tb|Tbit|Tbits<span style="color:#666">)</span> <span style="color:#19177c">bytes_per_unit</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$((</span><span style="color:#666">1024</span> <span style="color:#666">*</span> <span style="color:#666">1024</span> <span style="color:#666">*</span> <span style="color:#666">1024</span> <span style="color:#666">*</span> <span style="color:#666">1024</span> <span style="color:#666">/</span> <span style="color:#666">8</span><span style="color:#008000;font-weight:bold">))</span>;;
|
|
</span></span><span style="display:flex;"><span> TB|TByte|TBytes<span style="color:#666">)</span> <span style="color:#19177c">bytes_per_unit</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$((</span><span style="color:#666">1024</span> <span style="color:#666">*</span> <span style="color:#666">1024</span> <span style="color:#666">*</span> <span style="color:#666">1024</span> <span style="color:#666">*</span> <span style="color:#666">1024</span><span style="color:#008000;font-weight:bold">))</span>;;
|
|
</span></span><span style="display:flex;"><span> *<span style="color:#666">)</span> <span style="color:#008000">echo</span> Bad unit <span style="color:#ba2121">"</span><span style="color:#19177c">$unit</span><span style="color:#ba2121">"</span> <span style="color:#666">&&</span> <span style="color:#008000">exit</span> 1;;
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">esac</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">scalar</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$((</span>bytes_per_unit <span style="color:#666">*</span> dt<span style="color:#008000;font-weight:bold">))</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">init_line</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>cat /proc/net/dev | grep <span style="color:#ba2121">"^[ ]*</span><span style="color:#19177c">$iface</span><span style="color:#ba2121">:"</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -z <span style="color:#ba2121">"</span><span style="color:#19177c">$init_line</span><span style="color:#ba2121">"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> Interface not found in /proc/net/dev: <span style="color:#ba2121">"</span><span style="color:#19177c">$iface</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">exit</span> <span style="color:#666">1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">init_received</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>awk <span style="color:#ba2121">'{print $2}'</span> <span style="color:#666"><<<</span> <span style="color:#19177c">$init_line</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">init_sent</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>awk <span style="color:#ba2121">'{print $10}'</span> <span style="color:#666"><<<</span> <span style="color:#19177c">$init_line</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">(</span><span style="color:#008000;font-weight:bold">while</span> true; <span style="color:#008000;font-weight:bold">do</span> cat /proc/net/dev; sleep <span style="color:#ba2121">"</span><span style="color:#19177c">$dt</span><span style="color:#ba2121">"</span>; <span style="color:#008000;font-weight:bold">done</span><span style="color:#666">)</span> |<span style="color:#b62;font-weight:bold">\
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#b62;font-weight:bold"></span> stdbuf -oL grep <span style="color:#ba2121">"^[ ]*</span><span style="color:#19177c">$iface</span><span style="color:#ba2121">:"</span>|<span style="color:#b62;font-weight:bold">\
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#b62;font-weight:bold"></span> awk -v <span style="color:#19177c">scalar</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$scalar</span><span style="color:#ba2121">"</span> -v <span style="color:#19177c">unit</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$unit</span><span style="color:#ba2121">"</span> -v <span style="color:#19177c">iface</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#19177c">$iface</span><span style="color:#ba2121">"</span> <span style="color:#ba2121">'
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">BEGIN{old_received='</span><span style="color:#ba2121">"</span><span style="color:#19177c">$init_received</span><span style="color:#ba2121">"</span><span style="color:#ba2121">';old_sent='</span><span style="color:#ba2121">"</span><span style="color:#19177c">$init_sent</span><span style="color:#ba2121">"</span><span style="color:#ba2121">'}
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">{
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> received=$2
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> sent=$10
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> rx=(received-old_received)/scalar;
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> wx=(sent-old_sent)/scalar;
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> tx=rx+wr;
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> old_received=received;
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> old_sent=sent;
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> if(rx >= 0 && wx >= 0){
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> '</span><span style="color:#ba2121">"</span><span style="color:#19177c">$printf_command</span><span style="color:#ba2121">"</span><span style="color:#ba2121">';
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> fflush(stdout);
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> }
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">}
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121">'</span>
|
|
</span></span></code></pre></div><h4 id="ipstack-vpn">ipstack-vpn</h4>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>desktop-polybar</td>
|
|
<td>bind:utils</td>
|
|
<td>Provides dig</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-polybar</td>
|
|
<td>curl</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-polybar</td>
|
|
<td>jq</td>
|
|
<td>util to work with JSONs</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>A module to get a country of the current IP and openvpn status. Uses <a href="https://ipstack.com/">ipstack</a> API.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">ip</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>dig +short +timeout<span style="color:#666">=</span><span style="color:#666">1</span> myip.opendns.com @resolver1.opendns.com 2> /dev/null<span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># API_KEY="$(pass show My_Online/APIs/ipstack | head -n 1)"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">API_KEY</span><span style="color:#666">=</span><span style="color:#19177c">$IPSTACK_API_KEY</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> -z <span style="color:#19177c">$ip</span> <span style="color:#666">||</span> <span style="color:#19177c">$ip</span> <span style="color:#666">==</span> *<span style="color:#ba2121">"timed out"</span>* <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"%{u<<get-color(name="</span>red<span style="color:#ba2121">")>>}%{+u} ?? %{u-}"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">exit</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">ip_info</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>curl -s http://api.ipstack.com/<span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">ip</span><span style="color:#b68;font-weight:bold">}</span>?access_key<span style="color:#666">=</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">API_KEY</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># emoji=$(echo $ip_info | jq -r '.location.country_flag_emoji')</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">code</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span><span style="color:#008000">echo</span> <span style="color:#19177c">$ip_info</span> | jq -r <span style="color:#ba2121">'.country_code'</span> 2> /dev/null<span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">vpn</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>pgrep -a openvpn$ | head -n <span style="color:#666">1</span> | awk <span style="color:#ba2121">'{print $NF }'</span> | cut -d <span style="color:#ba2121">'.'</span> -f 1<span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> -z <span style="color:#19177c">$code</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">code</span><span style="color:#666">=</span><span style="color:#ba2121">"??"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -n <span style="color:#ba2121">"</span><span style="color:#19177c">$vpn</span><span style="color:#ba2121">"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"%{u<<get-color(name="</span>blue<span style="color:#ba2121">")>>}%{+u} </span><span style="color:#19177c">$code</span><span style="color:#ba2121"> %{u-}"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"%{u<<get-color(name="</span>red<span style="color:#ba2121">")>>}%{+u} </span><span style="color:#19177c">$code</span><span style="color:#ba2121"> %{u-}"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/ipstack-vpn]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/script</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">exec</span> <span style="color:#666">=</span> <span style="color:#ba2121">/home/pavel/bin/polybar/ipstack-vpn.sh</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">1200</span>
|
|
</span></span></code></pre></div><h4 id="openvpn">openvpn</h4>
|
|
<p>A module to check if openvpn is running.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">vpn</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>pgrep -a openvpn$ | head -n <span style="color:#666">1</span> | awk <span style="color:#ba2121">'{print $NF }'</span> | cut -d <span style="color:#ba2121">'.'</span> -f 1<span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -n <span style="color:#ba2121">"</span><span style="color:#19177c">$vpn</span><span style="color:#ba2121">"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">" "</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">" "</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/openvpn]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/script</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">exec</span> <span style="color:#666">=</span> <span style="color:#ba2121">/home/pavel/bin/polybar/openvpn.sh</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="openvpn")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">1200</span>
|
|
</span></span></code></pre></div><h4 id="xkeyboard">xkeyboard</h4>
|
|
<p>Current keyboard layout</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/xkeyboard]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">internal/xkeyboard</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format</span> <span style="color:#666">=</span> <span style="color:#ba2121"><label-layout></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; format-underline = ${colors.magenta}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="xkeyboard")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-layout</span> <span style="color:#666">=</span> <span style="color:#ba2121">%icon%</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">layout-icon-0</span> <span style="color:#666">=</span> <span style="color:#ba2121">ru;RU</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">layout-icon-1</span> <span style="color:#666">=</span> <span style="color:#ba2121">us;US</span>
|
|
</span></span></code></pre></div><h4 id="battery">battery</h4>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/battery]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">internal/battery</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">battery</span> <span style="color:#666">=</span> <span style="color:#ba2121">BAT0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">adapter</span> <span style="color:#666">=</span> <span style="color:#ba2121">ADP0</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">time-format</span> <span style="color:#666">=</span> <span style="color:#ba2121">%H:%M</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-discharging</span> <span style="color:#666">=</span> <span style="color:#ba2121"><ramp-capacity> <label-discharging></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-discharging-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="battery")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-charging-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="battery")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-full-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="battery")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-discharging</span> <span style="color:#666">=</span> <span style="color:#ba2121">%percentage%% %time%</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-charging</span> <span style="color:#666">=</span> <span style="color:#ba2121"> %percentage%% %time%</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-capacity-0</span> <span style="color:#666">=</span> <span style="color:#ba2121"></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-capacity-1</span> <span style="color:#666">=</span> <span style="color:#ba2121"></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-capacity-2</span> <span style="color:#666">=</span> <span style="color:#ba2121"></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-capacity-3</span> <span style="color:#666">=</span> <span style="color:#ba2121"></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">ramp-capacity-4</span> <span style="color:#666">=</span> <span style="color:#ba2121"></span>
|
|
</span></span></code></pre></div><h4 id="temperature">temperature</h4>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/temperature]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">internal/temperature</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">2</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">hwmon-path</span> <span style="color:#666">=</span> <span style="color:#ba2121">${env:TEMP_HWMON_PATH}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format</span> <span style="color:#666">=</span> <span style="color:#ba2121"><label></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="battery")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-warn</span> <span style="color:#666">=</span> <span style="color:#ba2121"> <label-warn></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-warn-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-warn-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="battery")>></span>
|
|
</span></span></code></pre></div><h4 id="weather">weather</h4>
|
|
<p>Gets current weather from <a href="http://wttr.in/">wttr.in</a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">bar_format</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">BAR_FORMAT</span><span style="color:#008000;font-weight:bold">:-</span><span style="color:#ba2121">"%t"</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">location</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">LOCATION</span><span style="color:#008000;font-weight:bold">:-</span><span style="color:#ba2121">"Saint-Petersburg"</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">format_1</span><span style="color:#666">=</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">FORMAT_1</span><span style="color:#008000;font-weight:bold">:-</span><span style="color:#ba2121">"qF"</span><span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">format_2</span><span style="color:#666">=</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">FORMAT_1</span><span style="color:#008000;font-weight:bold">:-</span><span style="color:#ba2121">"format=v2n"</span><span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">bar_weather</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>curl -s wttr.in/<span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">location</span><span style="color:#b68;font-weight:bold">}</span>?format<span style="color:#666">=</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">bar_format</span><span style="color:#b68;font-weight:bold">}</span> <span style="color:#666">||</span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"??"</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -z <span style="color:#ba2121">"</span><span style="color:#19177c">$bar_weather</span><span style="color:#ba2121">"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">exit</span> <span style="color:#666">1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">elif</span> <span style="color:#666">[[</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$bar_weather</span><span style="color:#ba2121">"</span> <span style="color:#666">==</span> *<span style="color:#ba2121">"Unknown"</span>* <span style="color:#666">||</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$bar_weather</span><span style="color:#ba2121">"</span> <span style="color:#666">==</span> *<span style="color:#ba2121">"Sorry"</span>* <span style="color:#666">||</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$bar_weather</span><span style="color:#ba2121">"</span> <span style="color:#666">==</span> *<span style="color:#ba2121">"Bad Gateway"</span>* <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"??"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">exit</span> <span style="color:#666">1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">bar_weather</span><span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/weather]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/script</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">exec</span> <span style="color:#666">=</span> <span style="color:#ba2121">/home/pavel/bin/polybar/weather.sh</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; format-underline = ${colors.red}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="weather")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">1200</span>
|
|
</span></span></code></pre></div><h4 id="sun">sun</h4>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>desktop-polybar</td>
|
|
<td>sunwait</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Prints out the time of sunrise/sunset. Uses <a href="https://github.com/risacher/sunwait">sunwait</a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000">declare</span> -A <span style="color:#19177c">LAT_DATA</span><span style="color:#666">=(</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"TMN"</span><span style="color:#666">]=</span><span style="color:#ba2121">"57.15N"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"SPB"</span><span style="color:#666">]=</span><span style="color:#ba2121">"59.9375N"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">declare</span> -A <span style="color:#19177c">LON_DATA</span><span style="color:#666">=(</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"TMN"</span><span style="color:#666">]=</span><span style="color:#ba2121">"65.533333E"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">[</span><span style="color:#ba2121">"SPB"</span><span style="color:#666">]=</span><span style="color:#ba2121">"30.308611E"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> -z <span style="color:#ba2121">"</span><span style="color:#19177c">$LOC</span><span style="color:#ba2121">"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"LOC?"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">exit</span> -1
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">LAT</span><span style="color:#666">=</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">LAT_DATA</span>[<span style="color:#19177c">$LOC</span>]<span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">LON</span><span style="color:#666">=</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">LON_DATA</span>[<span style="color:#19177c">$LOC</span>]<span style="color:#b68;font-weight:bold">}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">time</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>sunwait poll daylight rise <span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">LAT</span><span style="color:#b68;font-weight:bold">}</span> <span style="color:#19177c">$LON</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">time</span><span style="color:#b68;font-weight:bold">}</span> <span style="color:#666">==</span> <span style="color:#ba2121">'DAY'</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">sunset</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>sunwait list daylight <span style="color:#008000">set</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">LAT</span><span style="color:#b68;font-weight:bold">}</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">LON</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># echo "%{u<<get-color(name="yellow")>>}%{+u} $sunset %{u-}"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#19177c">$sunset</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">sunrise</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>sunwait list daylight rise <span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">LAT</span><span style="color:#b68;font-weight:bold">}</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">LON</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># echo "%{u<<get-color(name="red")>>}%{+u} $sunrise %{u-}"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#19177c">$sunrise</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/sun]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/script</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">exec</span> <span style="color:#666">=</span> <span style="color:#ba2121">/home/pavel/bin/polybar/sun.sh</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="sun")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">60</span>
|
|
</span></span></code></pre></div><h4 id="aw-afk">aw-afk</h4>
|
|
<p>Prints out a current uptime and non-AFK time from <a href="https://github.com/ActivityWatch">ActivityWatch</a> server</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>desktop-polybar</td>
|
|
<td>dateutils</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">afk_event</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>curl -s -X GET <span style="color:#ba2121">"http://localhost:5600/api/0/buckets/aw-watcher-afk_</span><span style="color:#008000;font-weight:bold">$(</span>hostname<span style="color:#008000;font-weight:bold">)</span><span style="color:#ba2121">/events?limit=1"</span> -H <span style="color:#ba2121">"accept: application/json"</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">status</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span><span style="color:#008000">echo</span> <span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">afk_event</span><span style="color:#b68;font-weight:bold">}</span> | jq -r <span style="color:#ba2121">'.[0].data.status'</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">afk_time</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span><span style="color:#008000">echo</span> <span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">afk_event</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span> | jq -r <span style="color:#ba2121">'.[0].duration'</span> | xargs -I ! date -u -d @! +<span style="color:#ba2121">"%H:%M"</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">uptime</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>uptime | awk <span style="color:#ba2121">'{ print substr($3, 0, length($3) - 1) }'</span> | xargs -I ! date -d ! +<span style="color:#ba2121">"%H:%M"</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">res</span><span style="color:#666">=</span><span style="color:#ba2121">"</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">afk_time</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121"> / </span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">uptime</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> <span style="color:#19177c">$status</span> <span style="color:#666">==</span> <span style="color:#ba2121">'afk'</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># echo "%{u<<get-color(name="red")>>}%{+u} [AFK] $res %{u-}"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"[AFK] </span><span style="color:#19177c">$res</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># echo "%{u<<get-color(name="blue")>>}%{+u} $res %{u-}"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$res</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/aw-afk]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/script</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">exec</span> <span style="color:#666">=</span> <span style="color:#ba2121">/home/pavel/bin/polybar/aw_afk.sh</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">60</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="aw-afk")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span></code></pre></div><h4 id="date">date</h4>
|
|
<p>Current date</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/date]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">internal/date</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">5</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">date</span> <span style="color:#666">=</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">date-alt</span> <span style="color:#666">=</span> <span style="color:#ba2121">"%Y-%m-%d"</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">time</span> <span style="color:#666">=</span> <span style="color:#ba2121">%H:%M</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">time-alt</span> <span style="color:#666">=</span> <span style="color:#ba2121">%H:%M:%S</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-background</span> <span style="color:#666">=</span> <span style="color:#ba2121"><<get-polybar-bg(module="date")>></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label</span> <span style="color:#666">=</span> <span style="color:#ba2121">"%date% %time%"</span>
|
|
</span></span></code></pre></div><h4 id="pomm">pomm</h4>
|
|
<p>Pomodoro module.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> ps -e | grep emacs >> /dev/null; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> emacsclient --eval <span style="color:#ba2121">"(if (boundp 'pomm-current-mode-line-string) pomm-current-mode-line-string \"\") "</span> | xargs <span style="color:#008000">echo</span> -e
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/pomm]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/script</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">exec</span> <span style="color:#666">=</span> <span style="color:#ba2121">/home/pavel/bin/polybar/pomm.sh</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-underline</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.light-green}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.foreground}</span>
|
|
</span></span></code></pre></div><h4 id="c-g">C-g</h4>
|
|
<p>Sometimes Emacs hangs, and something in EXWM prevents it from receiving the <code>C-g</code> keystroke.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">EMACS_FLAG</span><span style="color:#666">=</span><span style="color:#ba2121">"-l /home/pavel/.emacs.d/desktop.el"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">EXCLUDE_PATTERN</span><span style="color:#666">=</span><span style="color:#ba2121">"dbus-launch --exit-with-session emacs"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">EMACS_PIDS</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>pgrep -f <span style="color:#ba2121">"emacs.*</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#19177c">EMACS_FLAG</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#ba2121">"</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">SIGNAL_SENT</span><span style="color:#666">=</span><span style="color:#008000">false</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">for</span> PID in <span style="color:#19177c">$EMACS_PIDS</span>; d o
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">CMDLINE</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>ps -p <span style="color:#ba2121">"</span><span style="color:#19177c">$PID</span><span style="color:#ba2121">"</span> -o <span style="color:#19177c">args</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$CMDLINE</span><span style="color:#ba2121">"</span> <span style="color:#666">==</span> *<span style="color:#ba2121">"</span><span style="color:#19177c">$EXCLUDE_PATTERN</span><span style="color:#ba2121">"</span>* <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">continue</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">kill</span> -SIGUSR2 <span style="color:#ba2121">"</span><span style="color:#19177c">$PID</span><span style="color:#ba2121">"</span> 2>/dev/null
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> <span style="color:#19177c">$?</span> -eq <span style="color:#666">0</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"Sent SIGUSR2 to Emacs (PID: </span><span style="color:#19177c">$PID</span><span style="color:#ba2121">)"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">SIGNAL_SENT</span><span style="color:#666">=</span><span style="color:#008000">true</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">else</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"Failed to send SIGUSR2 to Emacs (PID: </span><span style="color:#19177c">$PID</span><span style="color:#ba2121">)"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">done</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$SIGNAL_SENT</span><span style="color:#ba2121">"</span> <span style="color:#666">=</span> <span style="color:#008000">false</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"Emacs process not found or already handled."</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">exit</span> <span style="color:#666">1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000">exit</span> <span style="color:#666">0</span>
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/c-g]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/text</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content</span> <span style="color:#666">=</span> <span style="color:#ba2121">" C-g"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">click-left</span> <span style="color:#666">=</span> <span style="color:#ba2121">bash ~/bin/polybar/c-g.sh</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content-background</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.blue}</span>
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/glyph-left-light-background--blue]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/text</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content-background</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.backround}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.blue}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content</span> <span style="color:#666">=</span> <span style="color:#ba2121">${glyph.gleft}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content-font</span> <span style="color:#666">=</span> <span style="color:#ba2121">5</span>
|
|
</span></span></code></pre></div><h4 id="sep">SEP</h4>
|
|
<p>A simple separator</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/SEP]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/text</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content</span> <span style="color:#666">=</span> <span style="color:#ba2121">"|"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.magenta}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content-padding</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">content-margin</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">100000</span>
|
|
</span></span></code></pre></div><h4 id="tsep">TSEP</h4>
|
|
<p>A separator, which appears only if monitor is set to have a tray in the launch script</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[</span> ! -z <span style="color:#ba2121">"</span><span style="color:#19177c">$TRAY</span><span style="color:#ba2121">"</span> <span style="color:#666">]</span> <span style="color:#666">&&</span> <span style="color:#666">[</span> <span style="color:#ba2121">"</span><span style="color:#19177c">$TRAY</span><span style="color:#ba2121">"</span> !<span style="color:#666">=</span> <span style="color:#ba2121">"none"</span> <span style="color:#666">]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000">echo</span> <span style="color:#ba2121">"| "</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/TSEP]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">custom/script</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">exec</span> <span style="color:#666">=</span> <span style="color:#ba2121">/home/pavel/bin/polybar/tray-sep.sh</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.magenta}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">interval</span> <span style="color:#666">=</span> <span style="color:#ba2121">100000</span>
|
|
</span></span></code></pre></div><h4 id="i3">i3</h4>
|
|
<p>Show i3wm workspaces</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[module/i3]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">type</span> <span style="color:#666">=</span> <span style="color:#ba2121">internal/i3</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">format</span> <span style="color:#666">=</span> <span style="color:#ba2121"><label-state> <label-mode></span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">index-sort</span> <span style="color:#666">=</span> <span style="color:#ba2121">true</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">wrapping-scroll</span> <span style="color:#666">=</span> <span style="color:#ba2121">false</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; Only show workspaces on the same output as the bar</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">pin-workspaces</span> <span style="color:#666">=</span> <span style="color:#ba2121">true</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-mode-padding</span> <span style="color:#666">=</span> <span style="color:#ba2121">1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-mode-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.white}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-mode-background</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.blue}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; focused = Active workspace on focused monitor</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-focused</span> <span style="color:#666">=</span> <span style="color:#ba2121">%</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-focused-background</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.blue}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-focused-underline</span><span style="color:#666">=</span> <span style="color:#ba2121">${colors.blue}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-focused-padding</span> <span style="color:#666">=</span> <span style="color:#ba2121">1</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; unfocused = Inactive workspace on any monitor</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-unfocused</span> <span style="color:#666">=</span> <span style="color:#ba2121">%</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-unfocused-padding</span> <span style="color:#666">=</span> <span style="color:#ba2121">1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-unfocused-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.white}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; visible = Active workspace on unfocused monitor</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-visible</span> <span style="color:#666">=</span> <span style="color:#ba2121">%</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; label-visible-background = ${self.label-focused-background}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-visible-underline</span> <span style="color:#666">=</span> <span style="color:#ba2121">${self.label-focused-underline}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-visible-padding</span> <span style="color:#666">=</span> <span style="color:#ba2121">${self.label-focused-padding}</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">; urgent = Workspace with urgency hint set</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-urgent</span> <span style="color:#666">=</span> <span style="color:#ba2121">%</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-urgent-background</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.red}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-urgent-foreground</span> <span style="color:#666">=</span> <span style="color:#ba2121">${colors.black}</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">label-urgent-padding</span> <span style="color:#666">=</span> <span style="color:#ba2121">1</span>
|
|
</span></span></code></pre></div><h2 id="rofi-1">Rofi</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>desktop-rofi</td>
|
|
<td>rofi</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><a href="https://github.com/davatorium/rofi">rofi</a> is another dynamic menu generator. It can act as dmenu replacement but offers a superset of dmenu’s features.</p>
|
|
<h3 id="theme">Theme</h3>
|
|
<p>A theme based on the current Emacs theme. Inspired by <a href="https://github.com/dracula/rofi">dracula theme</a>.</p>
|
|
<p><a id="code-snippet--get-rofi-colors"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#00f">apply</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#00f">#'concat</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">mapcar</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">elem</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">elem</span>) <span style="color:#ba2121">": "</span> (<span style="color:#19177c">my/color-value</span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">elem</span>)) <span style="color:#ba2121">";\n"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">table</span>))
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-css" data-lang="css"><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* Generated from [[file:../../Desktop.org::*Theme][Theme:1]] */</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">*</span> {
|
|
</span></span><span style="display:flex;"><span> <span style=""><<get-rofi-colors()>></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> foreground: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"fg"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"bg"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background-color</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"bg"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> separatorcolor: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">blue</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border-color</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"border"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> selected-normal-background: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> selected-normal-foreground: <span style="color:#666"><<</span><span style="color:#00f">get-fg-for-color</span>(name<span style="">=</span><span style="color:#ba2121">"blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> selected-active-background: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"light-blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> selected-active-foreground: <span style="color:#666"><<</span><span style="color:#00f">get-fg-for-color</span>(name<span style="">=</span><span style="color:#ba2121">"light-blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> selected-urgent-background: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"red"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> selected-urgent-foreground: <span style="color:#666"><<</span><span style="color:#00f">get-fg-for-color</span>(name<span style="">=</span><span style="color:#ba2121">"red"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> normal-foreground: <span style="color:#666">@</span>foreground;
|
|
</span></span><span style="display:flex;"><span> normal-background: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">background</span>;
|
|
</span></span><span style="display:flex;"><span> active-foreground: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">blue</span>;
|
|
</span></span><span style="display:flex;"><span> active-background: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">background</span>;
|
|
</span></span><span style="display:flex;"><span> urgent-foreground: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">red</span>;
|
|
</span></span><span style="display:flex;"><span> urgent-background: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">background</span>;
|
|
</span></span><span style="display:flex;"><span> alternate-normal-background: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"bg-alt"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> alternate-normal-foreground: <span style="color:#666">@</span>foreground;
|
|
</span></span><span style="display:flex;"><span> alternate-active-background: <span style="color:#666"><<</span><span style="color:#00f">get-fg-for-color</span>(name<span style="">=</span><span style="color:#ba2121">"light-blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> alternate-active-foreground: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"light-blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> alternate-urgent-background: <span style="color:#666"><<</span><span style="color:#00f">get-fg-for-color</span>(name<span style="">=</span><span style="color:#ba2121">"red"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> alternate-urgent-foreground: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"red"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> spacing: <span style="color:#666">2</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">window</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background-color</span>: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">background</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border</span>: <span style="color:#666">1</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding</span>: <span style="color:#666">5</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">mainbox</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border</span>: <span style="color:#666">0</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding</span>: <span style="color:#666">0</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">message</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border</span>: <span style="color:#666">1</span><span style="color:#b00040">px</span> dash <span style="color:#666">0</span><span style="color:#b00040">px</span> <span style="color:#666">0</span><span style="color:#b00040">px</span> ;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border-color</span>: <span style="color:#666">@</span>separatorcolor;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding</span>: <span style="color:#666">1</span><span style="color:#b00040">px</span> ;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">textbox</span> {
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span>foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">listview</span> {
|
|
</span></span><span style="display:flex;"><span> fixed-height: <span style="color:#666">0</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border</span>: <span style="color:#666">2</span><span style="color:#b00040">px</span> dash <span style="color:#666">0</span><span style="color:#b00040">px</span> <span style="color:#666">0</span><span style="color:#b00040">px</span> ;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border-color</span>: <span style="color:#666">@</span>separatorcolor;
|
|
</span></span><span style="display:flex;"><span> spacing: <span style="color:#666">2</span><span style="color:#b00040">px</span> ;
|
|
</span></span><span style="display:flex;"><span> scrollbar: true;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding</span>: <span style="color:#666">2</span><span style="color:#b00040">px</span> <span style="color:#666">0</span><span style="color:#b00040">px</span> <span style="color:#666">0</span><span style="color:#b00040">px</span> ;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">element</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border</span>: <span style="color:#666">0</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding</span>: <span style="color:#666">1</span><span style="color:#b00040">px</span> ;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">element</span> <span style="color:#008000;font-weight:bold">normal</span>.<span style="color:#00f;font-weight:bold">normal</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background-color</span>: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">normal</span><span style="color:#666">-</span><span style="color:#008000;font-weight:bold">background</span>;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">normal</span><span style="color:#666">-</span>foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">element</span> <span style="color:#008000;font-weight:bold">normal</span>.<span style="color:#00f;font-weight:bold">urgent</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background-color</span>: <span style="color:#666">@</span>urgent-background;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span>urgent-foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">element</span> <span style="color:#008000;font-weight:bold">normal</span>.<span style="color:#00f;font-weight:bold">active</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background-color</span>: <span style="color:#666">@</span>active-background;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span>active-foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">element</span> <span style="color:#008000;font-weight:bold">selected</span>.<span style="color:#00f;font-weight:bold">normal</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background-color</span>: <span style="color:#666">@</span>selected-normal-background;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span>selected-normal-foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">element</span> <span style="color:#008000;font-weight:bold">selected</span>.<span style="color:#00f;font-weight:bold">urgent</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background-color</span>: <span style="color:#666">@</span>selected-urgent-background;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span>selected-urgent-foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">element</span> <span style="color:#008000;font-weight:bold">selected</span>.<span style="color:#00f;font-weight:bold">active</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background-color</span>: <span style="color:#666">@</span>selected-active-background;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span>selected-active-foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">element</span> <span style="color:#008000;font-weight:bold">alternate</span>.<span style="color:#00f;font-weight:bold">normal</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background-color</span>: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">alternate</span><span style="color:#666">-</span><span style="color:#008000;font-weight:bold">normal</span><span style="color:#666">-</span><span style="color:#008000;font-weight:bold">background</span>;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">alternate</span><span style="color:#666">-</span><span style="color:#008000;font-weight:bold">normal</span><span style="color:#666">-</span>foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">element</span> <span style="color:#008000;font-weight:bold">alternate</span>.<span style="color:#00f;font-weight:bold">urgent</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background-color</span>: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">alternate</span><span style="color:#666">-</span>urgent-background;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">alternate</span><span style="color:#666">-</span>urgent-foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">element</span> <span style="color:#008000;font-weight:bold">alternate</span>.<span style="color:#00f;font-weight:bold">active</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background-color</span>: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">alternate</span><span style="color:#666">-</span>active-background;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">alternate</span><span style="color:#666">-</span>active-foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">scrollbar</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">width</span>: <span style="color:#666">4</span><span style="color:#b00040">px</span> ;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border</span>: <span style="color:#666">0</span>;
|
|
</span></span><span style="display:flex;"><span> handle-color: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">normal</span><span style="color:#666">-</span>foreground;
|
|
</span></span><span style="display:flex;"><span> handle-width: <span style="color:#666">8</span><span style="color:#b00040">px</span> ;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding</span>: <span style="color:#666">0</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">sidebar</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border</span>: <span style="color:#666">2</span><span style="color:#b00040">px</span> dash <span style="color:#666">0</span><span style="color:#b00040">px</span> <span style="color:#666">0</span><span style="color:#b00040">px</span> ;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border-color</span>: <span style="color:#666">@</span>separatorcolor;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">button</span> {
|
|
</span></span><span style="display:flex;"><span> spacing: <span style="color:#666">0</span>;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">normal</span><span style="color:#666">-</span>foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">button</span> <span style="color:#008000;font-weight:bold">selected</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background-color</span>: <span style="color:#666">@</span>selected-normal-background;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span>selected-normal-foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">inputbar</span> {
|
|
</span></span><span style="display:flex;"><span> spacing: <span style="color:#666">0</span><span style="color:#b00040">px</span>;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">normal</span><span style="color:#666">-</span>foreground;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding</span>: <span style="color:#666">1</span><span style="color:#b00040">px</span> ;
|
|
</span></span><span style="display:flex;"><span> children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">case-indicator</span> {
|
|
</span></span><span style="display:flex;"><span> spacing: <span style="color:#666">0</span>;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">normal</span><span style="color:#666">-</span>foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">entry</span> {
|
|
</span></span><span style="display:flex;"><span> spacing: <span style="color:#666">0</span>;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">normal</span><span style="color:#666">-</span>foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">prompt</span> {
|
|
</span></span><span style="display:flex;"><span> spacing: <span style="color:#666">0</span>;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#666">@</span><span style="color:#008000;font-weight:bold">normal</span><span style="color:#666">-</span>foreground;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">textbox-prompt-colon</span> {
|
|
</span></span><span style="display:flex;"><span> expand: false;
|
|
</span></span><span style="display:flex;"><span> str: <span style="color:#ba2121">":"</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">margin</span>: <span style="color:#666">0</span><span style="color:#b00040">px</span> <span style="color:#666">0.3000</span><span style="color:#b00040">em</span> <span style="color:#666">0.0000</span><span style="color:#b00040">em</span> <span style="color:#666">0.0000</span><span style="color:#b00040">em</span> ;
|
|
</span></span><span style="display:flex;"><span> text-color: <span style="color:#008000;font-weight:bold">inherit</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><h3 id="scripts">Scripts</h3>
|
|
<h4 id="man-pages">Man pages</h4>
|
|
<p>Inspired by <a href="https://www.youtube.com/watch?v=8E8sUNHdzG8">this Luke Smith’s video</a>.</p>
|
|
<p>A script to open a man page with zathura. There is no particular reason why one should look through man pages in pdf viewer rather than in console, but why not.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">SELECTED</span><span style="color:#666">=</span><span style="color:#008000;font-weight:bold">$(</span>man -k . | rofi -dmenu -l <span style="color:#666">20</span> | awk <span style="color:#ba2121">'{print $1}'</span><span style="color:#008000;font-weight:bold">)</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">if</span> <span style="color:#666">[[</span> ! -z <span style="color:#19177c">$SELECTED</span> <span style="color:#666">]]</span>; <span style="color:#008000;font-weight:bold">then</span>
|
|
</span></span><span style="display:flex;"><span> man -Tpdf <span style="color:#19177c">$SELECTED</span> | zathura -
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">fi</span>
|
|
</span></span></code></pre></div><h4 id="emojis-1">Emojis</h4>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>desktop-rofi</td>
|
|
<td>python-rofimoji</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h4 id="pass">pass</h4>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>desktop-rofi</td>
|
|
<td>rofi-pass</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-rofi</td>
|
|
<td>xset</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>A nice <a href="https://github.com/carnager/rofi-pass">pass frontend for Rofi</a>, which is even packaged for Guix.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span><span style="color:#19177c">USERNAME_field</span><span style="color:#666">=</span><span style="color:#ba2121">'username'</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">EDITOR</span><span style="color:#666">=</span>vim
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">default_autotype</span><span style="color:#666">=</span><span style="color:#ba2121">'username :tab pass'</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#19177c">clip</span><span style="color:#666">=</span>both
|
|
</span></span></code></pre></div><h2 id="flameshot">Flameshot</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>flameshot</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><a href="https://github.com/flameshot-org/flameshot">flameshot</a> is my program of choice to make screenshots.</p>
|
|
<p>As it overwrites its own config all the time, I do not keep the file in VC.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[General]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">disabledTrayIcon</span><span style="color:#666">=</span><span style="color:#ba2121">false</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">drawColor</span><span style="color:#666">=</span><span style="color:#ba2121">#ff0000</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">drawThickness</span><span style="color:#666">=</span><span style="color:#ba2121">3</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">savePath</span><span style="color:#666">=</span><span style="color:#ba2121">/home/pavel/Pictures</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">savePathFixed</span><span style="color:#666">=</span><span style="color:#ba2121">false</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">showStartupLaunchMessage</span><span style="color:#666">=</span><span style="color:#ba2121">false</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">uiColor</span><span style="color:#666">=</span><span style="color:#ba2121"><<get-color(name="blue")>></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">[Shortcuts]</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_ARROW</span><span style="color:#666">=</span><span style="color:#ba2121">A</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_CIRCLE</span><span style="color:#666">=</span><span style="color:#ba2121">C</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_CIRCLECOUNT</span><span style="color:#666">=</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_COMMIT_CURRENT_TOOL</span><span style="color:#666">=</span><span style="color:#ba2121">Ctrl+Return</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_COPY</span><span style="color:#666">=</span><span style="color:#ba2121">Ctrl+C</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_DRAWER</span><span style="color:#666">=</span><span style="color:#ba2121">D</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_EXIT</span><span style="color:#666">=</span><span style="color:#ba2121">Ctrl+Q</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_IMAGEUPLOADER</span><span style="color:#666">=</span><span style="color:#ba2121">Return</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_MARKER</span><span style="color:#666">=</span><span style="color:#ba2121">M</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_MOVESELECTION</span><span style="color:#666">=</span><span style="color:#ba2121">Ctrl+M</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_MOVE_DOWN</span><span style="color:#666">=</span><span style="color:#ba2121">Down</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_MOVE_LEFT</span><span style="color:#666">=</span><span style="color:#ba2121">Left</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_MOVE_RIGHT</span><span style="color:#666">=</span><span style="color:#ba2121">Right</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_MOVE_UP</span><span style="color:#666">=</span><span style="color:#ba2121">Up</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_OPEN_APP</span><span style="color:#666">=</span><span style="color:#ba2121">Ctrl+O</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_PENCIL</span><span style="color:#666">=</span><span style="color:#ba2121">P</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_PIN</span><span style="color:#666">=</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_PIXELATE</span><span style="color:#666">=</span><span style="color:#ba2121">B</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_RECTANGLE</span><span style="color:#666">=</span><span style="color:#ba2121">R</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_REDO</span><span style="color:#666">=</span><span style="color:#ba2121">Ctrl+Shift+Z</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_RESIZE_DOWN</span><span style="color:#666">=</span><span style="color:#ba2121">Shift+Down</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_RESIZE_LEFT</span><span style="color:#666">=</span><span style="color:#ba2121">Shift+Left</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_RESIZE_RIGHT</span><span style="color:#666">=</span><span style="color:#ba2121">Shift+Right</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_RESIZE_UP</span><span style="color:#666">=</span><span style="color:#ba2121">Shift+Up</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_SAVE</span><span style="color:#666">=</span><span style="color:#ba2121">Ctrl+S</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_SELECTION</span><span style="color:#666">=</span><span style="color:#ba2121">S</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_SELECTIONINDICATOR</span><span style="color:#666">=</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_SELECT_ALL</span><span style="color:#666">=</span><span style="color:#ba2121">Ctrl+A</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_TEXT</span><span style="color:#666">=</span><span style="color:#ba2121">T</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_TOGGLE_PANEL</span><span style="color:#666">=</span><span style="color:#ba2121">Space</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">TYPE_UNDO</span><span style="color:#666">=</span><span style="color:#ba2121">Ctrl+Z</span>
|
|
</span></span></code></pre></div><h2 id="dunst">dunst</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>dunst</td>
|
|
</tr>
|
|
<tr>
|
|
<td>libnotify</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><a href="https://github.com/dunst-project/dunst">dunst</a> is a lightweight notification daemon.</p>
|
|
<p>My customizations of the original config consist mostly of changing colors. Check out the default config or <code>man dunst</code> for the description of settings.</p>
|
|
<p>References:</p>
|
|
<ul>
|
|
<li><a href="https://dunst-project.org/documentation/">dunst documentation</a></li>
|
|
</ul>
|
|
<!--listend-->
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span>[global]
|
|
</span></span><span style="display:flex;"><span> monitor = <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span> follow = mouse
|
|
</span></span><span style="display:flex;"><span> geometry = <span style="color:#ba2121">"300x5-30+20"</span>
|
|
</span></span><span style="display:flex;"><span> indicate_hidden = yes
|
|
</span></span><span style="display:flex;"><span> shrink = no
|
|
</span></span><span style="display:flex;"><span> transparency = <span style="color:#666">15</span>
|
|
</span></span><span style="display:flex;"><span> notification_height = <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span> separator_height = <span style="color:#666">2</span>
|
|
</span></span><span style="display:flex;"><span> padding = <span style="color:#666">8</span>
|
|
</span></span><span style="display:flex;"><span> horizontal_padding = <span style="color:#666">8</span>
|
|
</span></span><span style="display:flex;"><span> frame_width = <span style="color:#666">1</span>
|
|
</span></span><span style="display:flex;"><span> frame_color = <<get-color(name=<span style="color:#ba2121">"border"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span> separator_color = frame
|
|
</span></span><span style="display:flex;"><span> sort = yes
|
|
</span></span><span style="display:flex;"><span> idle_threshold = <span style="color:#666">120</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> ### Text ###
|
|
</span></span><span style="display:flex;"><span> font = DejaVu Sans <span style="color:#666">9</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> line_height = <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span> markup = full
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> # The format of the message. Possible variables are:
|
|
</span></span><span style="display:flex;"><span> # %a appname
|
|
</span></span><span style="display:flex;"><span> # %s summary
|
|
</span></span><span style="display:flex;"><span> # %b body
|
|
</span></span><span style="display:flex;"><span> # %i iconname (including its path)
|
|
</span></span><span style="display:flex;"><span> # %I iconname (without its path)
|
|
</span></span><span style="display:flex;"><span> # %p progress value <span style="color:#008000;font-weight:bold">if</span> <span style="color:#008000;font-weight:bold">set</span> ([ <span style="color:#666">0</span>%] to [<span style="color:#666">100</span>%]) or nothing
|
|
</span></span><span style="display:flex;"><span> # %n progress value <span style="color:#008000;font-weight:bold">if</span> <span style="color:#008000;font-weight:bold">set</span> without any extra characters
|
|
</span></span><span style="display:flex;"><span> # %% Literal %
|
|
</span></span><span style="display:flex;"><span> # Markup is allowed
|
|
</span></span><span style="display:flex;"><span> format = <span style="color:#ba2121">"<b>%s</b>\n%b"</span>
|
|
</span></span><span style="display:flex;"><span> alignment = left
|
|
</span></span><span style="display:flex;"><span> show_age_threshold = <span style="color:#666">60</span>
|
|
</span></span><span style="display:flex;"><span> word_wrap = yes
|
|
</span></span><span style="display:flex;"><span> ellipsize = middle
|
|
</span></span><span style="display:flex;"><span> ignore_newline = no
|
|
</span></span><span style="display:flex;"><span> stack_duplicates = true
|
|
</span></span><span style="display:flex;"><span> hide_duplicate_count = false
|
|
</span></span><span style="display:flex;"><span> show_indicators = yes
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> ### Icons ###
|
|
</span></span><span style="display:flex;"><span> icon_position = left
|
|
</span></span><span style="display:flex;"><span> max_icon_size = <span style="color:#666">32</span>
|
|
</span></span><span style="display:flex;"><span> icon_path = <span style="color:#b68">/usr/</span>share<span style="color:#b68">/icons/</span>Mint-Y<span style="color:#b68">/status/</span><span style="color:#666">32</span><span style="color:#b68">/;/</span>usr<span style="color:#b68">/share/</span>icons<span style="color:#b68">/Mint-Y/</span>devices/<span style="color:#666">32</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> ### History ###
|
|
</span></span><span style="display:flex;"><span> sticky_history = yes
|
|
</span></span><span style="display:flex;"><span> history_length = <span style="color:#666">20</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> ### Misc/Advanced ###
|
|
</span></span><span style="display:flex;"><span> dmenu = <span style="color:#b68">/usr/</span>bin/dmenu -p dunst:
|
|
</span></span><span style="display:flex;"><span> browser = <span style="color:#b68">/home/</span>pavel<span style="color:#b68">/.guix-extra-profiles/</span>browsers<span style="color:#b68">/browsers/</span>bin/firefox
|
|
</span></span><span style="display:flex;"><span> always_run_script = true
|
|
</span></span><span style="display:flex;"><span> title = Dunst
|
|
</span></span><span style="display:flex;"><span> class = Dunst
|
|
</span></span><span style="display:flex;"><span> startup_notification = false
|
|
</span></span><span style="display:flex;"><span> verbosity = mesg
|
|
</span></span><span style="display:flex;"><span> corner_radius = <span style="color:#666">0</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> ### Legacy
|
|
</span></span><span style="display:flex;"><span> force_xinerama = false
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> ### mouse
|
|
</span></span><span style="display:flex;"><span> mouse_left_click = close_current
|
|
</span></span><span style="display:flex;"><span> mouse_middle_click = do_action
|
|
</span></span><span style="display:flex;"><span> mouse_right_click = close_all
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>[experimental]
|
|
</span></span><span style="display:flex;"><span> per_monitor_dpi = false
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>[shortcuts]
|
|
</span></span><span style="display:flex;"><span> close = ctrl+space
|
|
</span></span><span style="display:flex;"><span> close_all = ctrl+shift+space
|
|
</span></span><span style="display:flex;"><span> history = ctrl+grave
|
|
</span></span><span style="display:flex;"><span> context = ctrl+shift+period
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>[urgency_low]
|
|
</span></span><span style="display:flex;"><span> background = <<get-color(name=<span style="color:#ba2121">"bg-other"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span> frame_color = <<get-color(name=<span style="color:#ba2121">"border"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span> foreground = <<get-color(name=<span style="color:#ba2121">"fg"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span> timeout = <span style="color:#666">10</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>[urgency_normal]
|
|
</span></span><span style="display:flex;"><span> background = <<get-color(name=<span style="color:#ba2121">"bg"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span> frame_color = <<get-color(name=<span style="color:#ba2121">"border"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span> foreground = <<get-color(name=<span style="color:#ba2121">"fg"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span> timeout = <span style="color:#666">10</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>[urgency_critical]
|
|
</span></span><span style="display:flex;"><span> background = <<get-color(name=<span style="color:#ba2121">"red"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span> foreground = <<get-fg-for-color(name=<span style="color:#ba2121">"red"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span> frame_color = <<get-color(name=<span style="color:#ba2121">"red"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span> timeout = <span style="color:#666">0</span>
|
|
</span></span></code></pre></div><h2 id="firefox">Firefox</h2>
|
|
<p><a href="https://www.mozilla.org/en-US/firefox/new/">Firefox</a> is my web browser of choice.</p>
|
|
<h3 id="tridactyl">Tridactyl</h3>
|
|
<p><a href="https://github.com/tridactyl/tridactyl">Tridactyl</a> is a Firefox add-on that provides vim-like interface.</p>
|
|
<p>Run <code>:nativeinstall</code> at the first start.</p>
|
|
<h4 id="config">Config</h4>
|
|
<p>The native messenger allows to configure the addon with a config file.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cfg" data-lang="cfg"><span style="display:flex;"><span><span style="color:#7d9029">sanitize tridactyllocal tridactylsync</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bind gn tabnew</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bind gN tabclose</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bind O fillcmdline tabopen</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bind n findnext 1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bind N findnext -1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bind F hint -t</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">unbind <C-f></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">set smoothscroll false</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">set findcase sensitive</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">colorscheme emacs</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bind j scrollline 3</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bind k scrollline -3</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bind --mode</span><span style="color:#666">=</span><span style="color:#ba2121">normal <C-i> mode ignore</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">bind --mode</span><span style="color:#666">=</span><span style="color:#ba2121">ignore <C-i> mode normal</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">guiset_quiet gui full</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">guiset_quiet statuspanel left</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">guiset_quiet navbar none</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">guiset_quiet tabs always</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">set searchurls.g https://google.com/search?q</span><span style="color:#666">=</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">set newtab about:blank</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">command fixamo_quiet jsb tri.excmds.setpref("privacy.resistFingerprinting.block_mozAddonManager", "true").then(tri.excmds.setpref("extensions.webextensions.restrictedDomains", '""'))</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">command fixamo js tri.excmds.setpref("privacy.resistFingerprinting.block_mozAddonManager", "true").then(tri.excmds.setpref("extensions.webextensions.restrictedDomains", '""').then(tri.excmds.fillcmdline_tmp(3000, "Permissions added to user.js. Please restart Firefox to make them take affect.")))</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">fixamo_quiet</span>
|
|
</span></span></code></pre></div><h4 id="theme-1">Theme</h4>
|
|
<p>Then, the package has its separate theme.</p>
|
|
<p>I based it on <code>base16-dracula</code> by <a href="http://chriskempson.com">Chris Kempson</a>, but replaced the colors with my Emacs theme.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-css" data-lang="css"><span style="display:flex;"><span>:<span style="color:#a2f">root</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-fg</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"fg"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-bg</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"bg"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-url-fg</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"red"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-url-bg</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"bg"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-highlight-box-bg</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-highlight-box-fg</span>: <span style="color:#666"><<</span><span style="color:#00f">get-fg-for-color</span>(name<span style="">=</span><span style="color:#ba2121">"blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">/* Command line */</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-cmdl-bg</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"bg-alt"</span>)<span style="color:#666">>></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">--</span>tridactyl-cmdl-fg<span style="color:#666">:</span> <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"fg"</span>)<span style="color:#666">>></span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">/* Hint character tags */</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">--</span>tridactyl-hintspan-fg<span style="color:#666">:</span> <span style="color:#666"><<</span><span style="color:#00f">get-fg-for-color</span>(name<span style="">=</span><span style="color:#ba2121">"blue"</span>)<span style="color:#666">>></span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-hintspan-bg</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"blue"</span>)<span style="color:#666">>></span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">/* Element Highlights */</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-hint-active-fg</span>: <span style="color:#008000;font-weight:bold">none</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-hint-active-bg</span>: <span style="color:#008000;font-weight:bold">none</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-hint-active-outline</span>: <span style="color:#008000;font-weight:bold">none</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">/* --tridactyl-hint-activy-outline: var(--base08); */</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-hint-bg</span>: <span style="color:#008000;font-weight:bold">none</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--tridactyl-hint-outline</span>: <span style="color:#008000;font-weight:bold">none</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">/* --tridactyl-hint-outline: var(--base08); */</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* a { */</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* color: var(--base04); */</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* } */</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">command-line-holder</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">order</span>: <span style="color:#666">1</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border</span>: <span style="color:#666">2</span><span style="color:#b00040">px</span> <span style="color:#008000;font-weight:bold">solid</span> <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"bg"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">tridactyl-input</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding</span>: <span style="color:#666">1</span><span style="color:#b00040">rem</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">color</span>: <span style="color:#00f">var</span>(<span style="color:#666">--</span>tridactyl<span style="color:#666">-</span>fg);
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">width</span>: <span style="color:#666">90</span><span style="color:#b00040">%</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">font-size</span>: <span style="color:#666">1.2</span><span style="color:#b00040">rem</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">line-height</span>: <span style="color:#666">1.5</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background</span>: <span style="color:#00f">var</span>(<span style="color:#666">--</span>tridactyl<span style="color:#666">-</span>bg);
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding-left</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding</span>: <span style="color:#666">1</span><span style="color:#b00040">rem</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> <span style="color:#008000;font-weight:bold">table</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">font-size</span>: <span style="color:#666">0.8</span><span style="color:#b00040">rem</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">font-weight</span>: <span style="color:#666">200</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border-spacing</span>: <span style="color:#666">0</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">table-layout</span>: <span style="color:#008000;font-weight:bold">fixed</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding</span>: <span style="color:#666">1</span><span style="color:#b00040">rem</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding-top</span>: <span style="color:#666">1</span><span style="color:#b00040">rem</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding-bottom</span>: <span style="color:#666">1</span><span style="color:#b00040">rem</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> <span style="color:#666">></span> <span style="color:#008000;font-weight:bold">div</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">max-height</span>: <span style="color:#008000">calc</span>(<span style="color:#666">20</span> <span style="color:#666">*</span> <span style="color:#00f">var</span>(<span style="color:#666">--</span>option<span style="color:#666">-</span>height));
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">min-height</span>: <span style="color:#008000">calc</span>(<span style="color:#666">10</span> <span style="color:#666">*</span> <span style="color:#00f">var</span>(<span style="color:#666">--</span>option<span style="color:#666">-</span>height));
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* COMPLETIONS */</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">--option-height</span>: <span style="color:#666">1.4</span><span style="color:#b00040">em</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">color</span>: <span style="color:#00f">var</span>(<span style="color:#666">--</span>tridactyl<span style="color:#666">-</span>fg);
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background</span>: <span style="color:#00f">var</span>(<span style="color:#666">--</span>tridactyl<span style="color:#666">-</span>bg);
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">display</span>: <span style="color:#008000;font-weight:bold">inline-block</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">font-size</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">font-weight</span>: <span style="color:#666">200</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">overflow</span>: <span style="color:#008000;font-weight:bold">hidden</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">width</span>: <span style="color:#666">100</span><span style="color:#b00040">%</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border-top</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">order</span>: <span style="color:#666">2</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* Olie doesn't know how CSS inheritance works */</span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> .<span style="color:#00f;font-weight:bold">HistoryCompletionSource</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">max-height</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">min-height</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> .<span style="color:#00f;font-weight:bold">HistoryCompletionSource</span> <span style="color:#008000;font-weight:bold">table</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">width</span>: <span style="color:#666">100</span><span style="color:#b00040">%</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">font-size</span>: <span style="color:#666">11</span><span style="color:#b00040">pt</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border-spacing</span>: <span style="color:#666">0</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">table-layout</span>: <span style="color:#008000;font-weight:bold">fixed</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* redundancy 2: redundancy 2: more redundancy */</span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> .<span style="color:#00f;font-weight:bold">BmarkCompletionSource</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">max-height</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">min-height</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> <span style="color:#008000;font-weight:bold">table</span> <span style="color:#008000;font-weight:bold">tr</span> <span style="color:#008000;font-weight:bold">td</span>.<span style="color:#00f;font-weight:bold">prefix</span><span style="color:#666">,</span>#<span style="color:#00f;font-weight:bold">completions</span> <span style="color:#008000;font-weight:bold">table</span> <span style="color:#008000;font-weight:bold">tr</span> <span style="color:#008000;font-weight:bold">td</span>.<span style="color:#00f;font-weight:bold">privatewindow</span><span style="color:#666">,</span>#<span style="color:#00f;font-weight:bold">completions</span> <span style="color:#008000;font-weight:bold">table</span> <span style="color:#008000;font-weight:bold">tr</span> <span style="color:#008000;font-weight:bold">td</span>.<span style="color:#00f;font-weight:bold">container</span><span style="color:#666">,</span>#<span style="color:#00f;font-weight:bold">completions</span> <span style="color:#008000;font-weight:bold">table</span> <span style="color:#008000;font-weight:bold">tr</span> <span style="color:#008000;font-weight:bold">td</span>.<span style="color:#00f;font-weight:bold">icon</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">display</span>: <span style="color:#008000;font-weight:bold">none</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> .<span style="color:#00f;font-weight:bold">BufferCompletionSource</span> <span style="color:#008000;font-weight:bold">table</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">width</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">font-size</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border-spacing</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">table-layout</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> <span style="color:#008000;font-weight:bold">table</span> <span style="color:#008000;font-weight:bold">tr</span> .<span style="color:#00f;font-weight:bold">title</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">width</span>: <span style="color:#666">50</span><span style="color:#b00040">%</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> <span style="color:#008000;font-weight:bold">table</span> <span style="color:#008000;font-weight:bold">tr</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">white-space</span>: <span style="color:#008000;font-weight:bold">nowrap</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">overflow</span>: <span style="color:#008000;font-weight:bold">hidden</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">text-overflow</span>: <span style="color:#008000;font-weight:bold">ellipsis</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> .<span style="color:#00f;font-weight:bold">sectionHeader</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">font-weight</span>: <span style="color:#666">200</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border-bottom</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding</span>: <span style="color:#666">1</span><span style="color:#b00040">rem</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding-left</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding-bottom</span>: <span style="color:#666">0.2</span><span style="color:#b00040">rem</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">cmdline_iframe</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">position</span>: <span style="color:#008000;font-weight:bold">fixed</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">bottom</span>: <span style="color:#008000;font-weight:bold">unset</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">top</span>: <span style="color:#666">25</span><span style="color:#b00040">%</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">left</span>: <span style="color:#666">10</span><span style="color:#b00040">%</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">z-index</span>: <span style="color:#666">2147483647</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">width</span>: <span style="color:#666">80</span><span style="color:#b00040">%</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">box-shadow</span>: <span style="color:#008000">rgba</span>(<span style="color:#666">0</span>, <span style="color:#666">0</span>, <span style="color:#666">0</span>, <span style="color:#666">0.5</span>) <span style="color:#666">0</span><span style="color:#b00040">px</span> <span style="color:#666">0</span><span style="color:#b00040">px</span> <span style="color:#666">20</span><span style="color:#b00040">px</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>.<span style="color:#00f;font-weight:bold">TridactylStatusIndicator</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">position</span>: <span style="color:#008000;font-weight:bold">fixed</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">bottom</span>: <span style="color:#666">0</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background</span>: <span style="color:#00f">var</span>(<span style="color:#666">--</span>tridactyl<span style="color:#666">-</span>bg) <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border</span>: <span style="color:#008000;font-weight:bold">unset</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">border</span>: <span style="color:#666">1</span><span style="color:#b00040">px</span> <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"blue"</span>)<span style="color:#666">>></span> <span style="color:#008000;font-weight:bold">solid</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">font-size</span>: <span style="color:#666">12</span><span style="color:#b00040">pt</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">/*font-weight: 200 !important;*/</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">padding</span>: <span style="color:#666">0.8</span><span style="color:#b00040">ex</span> <span style="color:#bc7a00">!important</span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> .<span style="color:#00f;font-weight:bold">focused</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">color</span>: <span style="color:#666"><<</span><span style="color:#00f">get-fg-for-color</span>(name<span style="">=</span><span style="color:#ba2121">"blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>#<span style="color:#00f;font-weight:bold">completions</span> .<span style="color:#00f;font-weight:bold">focused</span> .<span style="color:#00f;font-weight:bold">url</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">background</span>: <span style="color:#666"><<</span><span style="color:#00f">get-color</span>(name<span style="">=</span><span style="color:#ba2121">"blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span> <span style="color:#008000;font-weight:bold">color</span>: <span style="color:#666"><<</span><span style="color:#00f">get-fg-for-color</span>(name<span style="">=</span><span style="color:#ba2121">"blue"</span>)<span style="color:#666">>></span>;
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* #Ocean-normal { */</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* border-color: green !important; */</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* } */</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* #Ocean-insert { */</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* border-color: yellow !important; */</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">/* } */</span>
|
|
</span></span></code></pre></div><h3 id="firefox-color">Firefox Color</h3>
|
|
<p><a href="https://color.firefox.com/">Firefox Color</a> is a system that allows for easy experimentation with Firefox themes.</p>
|
|
<p>It can serialize themes into URLs like <code>https://color.firefox.com/?theme=<theme></code>, so I thought it would be a piece of cake to generate one from my Emacs theme, right? Well…</p>
|
|
<p>As it turns out, Firefox uses npm package called <a href="https://github.com/masotime/json-url">json-url</a> to create <code><theme></code>, which this package does by the following sequence:</p>
|
|
<ul>
|
|
<li>msgpack v5</li>
|
|
<li>lzma</li>
|
|
<li>url-safe base64</li>
|
|
</ul>
|
|
<p>I tried to reproduce the above in Emacs, but in the end gave up and used the package in a simple node script:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-js" data-lang="js"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">const</span> JsonUrl <span style="color:#666">=</span> require(<span style="color:#ba2121">'json-url'</span>);
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">const</span> jsonCodec <span style="color:#666">=</span> JsonUrl(<span style="color:#ba2121">'lzma'</span>);
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">const</span> json <span style="color:#666">=</span> JSON.parse(process.argv[<span style="color:#666">2</span>]);
|
|
</span></span><span style="display:flex;"><span>jsonCodec.compress(json).then((r) => process.stdout.write(r));
|
|
</span></span></code></pre></div><p>Which I then can use to create the URL.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/firefox-encode-json</span> (<span style="color:#00f">string</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-output-to-string</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">with-current-buffer</span> <span style="color:#19177c">standard-output</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">call-process</span> <span style="color:#ba2121">"node"</span> <span style="color:#800">nil</span> <span style="color:#800">t</span> <span style="color:#800">nil</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">expand-file-name</span> <span style="color:#ba2121">"~/bin/firefox-theme/main.js"</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#00f">string</span>))))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/color-value-rgb</span> (<span style="color:#19177c">color</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">color</span> (<span style="color:#008000">if</span> (<span style="color:#00f">stringp</span> <span style="color:#19177c">color</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">color</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/color-value</span> <span style="color:#19177c">color</span>))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>((<span style="color:#19177c">r</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#00f">*</span> <span style="color:#666">2.55</span> (<span style="color:#19177c">ct-get-rgb-r</span> <span style="color:#19177c">color</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">g</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#00f">*</span> <span style="color:#666">2.55</span> (<span style="color:#19177c">ct-get-rgb-g</span> <span style="color:#19177c">color</span>)))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">b</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#00f">*</span> <span style="color:#666">2.55</span> (<span style="color:#19177c">ct-get-rgb-b</span> <span style="color:#19177c">color</span>))))))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/firefox-get-json</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">let</span> ((<span style="color:#19177c">toolbar-color</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/color-value-rgb</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">'modeline</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">text-color</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/color-value-rgb</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">if</span> (<span style="color:#19177c">my/light-p</span>) <span style="color:#19177c">'fg</span> <span style="color:#19177c">'yellow</span>))))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">`</span>((<span style="color:#19177c">colors</span> <span style="color:#666">.</span> ((<span style="color:#19177c">toolbar</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">toolbar-color</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">toolbar_text</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">text-color</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">frame</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/color-value-rgb</span> <span style="color:#19177c">'bg</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">tab_background_text</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/color-value-rgb</span> <span style="color:#19177c">'fg</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">toolbar_field</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/color-value-rgb</span> <span style="color:#19177c">'bg</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">toolbar_field_text</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/color-value-rgb</span> <span style="color:#19177c">'blue</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">tab_line</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">text-color</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">popup</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/color-value-rgb</span> <span style="color:#19177c">'bg-alt</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">popup_text</span> <span style="color:#666">.</span> <span style="color:#666">,</span>(<span style="color:#19177c">my/color-value-rgb</span> <span style="color:#19177c">'fg</span>))
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">tab_loading</span> <span style="color:#666">.</span> <span style="color:#666">,</span><span style="color:#19177c">text-color</span>))))))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/firefox-get-color-url</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">concat</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"https://color.firefox.com/?theme="</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/firefox-encode-json</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">json-encode</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">my/firefox-get-json</span>)))))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000">defun</span> <span style="color:#19177c">my/firefox-kill-color-url</span> ()
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">interactive</span>)
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#19177c">kill-new</span> (<span style="color:#19177c">my/firefox-get-color-url</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#19177c">my/firefox-get-color-url</span>)
|
|
</span></span></code></pre></div><h2 id="keynav">keynav</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>keynav</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Note</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>SYMLINK</td>
|
|
<td>./config/keynavrc -> .keynavrc</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><a href="https://github.com/jordansissel/keynav">keynav</a> is a program for controlling mouse with keyboard, mostly by screen bisection. This is a poor replacement for a proper keyboard-drived sofware, but…</p>
|
|
<p>References:</p>
|
|
<ul>
|
|
<li><a href="https://github.com/jordansissel/keynav/blob/master/keynav.pod">keynav documentation</a></li>
|
|
</ul>
|
|
<h3 id="config-1">Config</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span># clear all previous keybindings
|
|
</span></span><span style="display:flex;"><span>clear
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Start & stop
|
|
</span></span><span style="display:flex;"><span>ctrl+semicolon start
|
|
</span></span><span style="display:flex;"><span>Super_L+bracketright start
|
|
</span></span><span style="display:flex;"><span>Super_R+bracketright start
|
|
</span></span><span style="display:flex;"><span>Escape end
|
|
</span></span><span style="display:flex;"><span>ctrl+bracketleft end
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Macros
|
|
</span></span><span style="display:flex;"><span>q record ~/.keynav_macros
|
|
</span></span><span style="display:flex;"><span>shift+at playback
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Bisecting
|
|
</span></span><span style="display:flex;"><span>a history-back
|
|
</span></span><span style="display:flex;"><span>Left cut-left
|
|
</span></span><span style="display:flex;"><span>Right cut-right
|
|
</span></span><span style="display:flex;"><span>Down cut-down
|
|
</span></span><span style="display:flex;"><span>Up cut-up
|
|
</span></span><span style="display:flex;"><span>h cut-left
|
|
</span></span><span style="display:flex;"><span>j cut-down
|
|
</span></span><span style="display:flex;"><span>k cut-up
|
|
</span></span><span style="display:flex;"><span>l cut-right
|
|
</span></span><span style="display:flex;"><span>t windowzoom # Zoom to the current window
|
|
</span></span><span style="display:flex;"><span>c cursorzoom <span style="color:#666">300</span> <span style="color:#666">300</span> # Limit the bisection area by <span style="color:#666">300</span>x<span style="color:#666">300</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Move the bisecting area
|
|
</span></span><span style="display:flex;"><span>shift+h move-left
|
|
</span></span><span style="display:flex;"><span>shift+j move-down
|
|
</span></span><span style="display:flex;"><span>shift+k move-up
|
|
</span></span><span style="display:flex;"><span>shift+l move-right
|
|
</span></span><span style="display:flex;"><span>shift+Left move-left
|
|
</span></span><span style="display:flex;"><span>shift+Right move-right
|
|
</span></span><span style="display:flex;"><span>shift+Up move-up
|
|
</span></span><span style="display:flex;"><span>shift+Down move-down
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span># Actions
|
|
</span></span><span style="display:flex;"><span>space warp,click <span style="color:#666">3</span>,end # Right click
|
|
</span></span><span style="display:flex;"><span>Return warp,click <span style="color:#666">1</span>,end # Left click
|
|
</span></span><span style="display:flex;"><span>Shift+Return warp,doubleclick <span style="color:#666">1</span>,end # Double left click
|
|
</span></span><span style="display:flex;"><span>semicolon warp,end # Move the cursor and exit
|
|
</span></span><span style="display:flex;"><span>w warp # Just move the cursor
|
|
</span></span><span style="display:flex;"><span>e end # exit
|
|
</span></span><span style="display:flex;"><span>u warp,click <span style="color:#666">4</span> # scroll up
|
|
</span></span><span style="display:flex;"><span>d warp,click <span style="color:#666">5</span> # scroll down
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">1</span> click <span style="color:#666">1</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">2</span> click <span style="color:#666">2</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">3</span> click <span style="color:#666">3</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">4</span> click <span style="color:#666">4</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#666">5</span> click <span style="color:#666">5</span>
|
|
</span></span></code></pre></div><h3 id="using-with-picom">Using with picom</h3>
|
|
<p>I’ve noticed that the program does not play nice with picom’s fade effect. To fix that, add the following to you config:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#7d9029">fade-exclude</span> <span style="color:#666">=</span> <span style="color:#ba2121">[
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "class_i = 'keynav'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "class_g = 'keynav'",</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">]</span>
|
|
</span></span></code></pre></div><h2 id="picom">Picom</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>picom</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><a href="https://github.com/yshui/picom">picom</a> is a compositor for X11. It allows effects such as transparency, blurring, etc.</p>
|
|
<p>Check out the sample configuration to get an idea on what’s possible. I only have some basic settings in mine.</p>
|
|
<p>Also, there are some fancy forks of picom (e.g. <a href="https://github.com/ibhagwan/picom">ibhagwan/picom</a> adds rounded corners).</p>
|
|
<p>References:</p>
|
|
<ul>
|
|
<li><a href="https://github.com/yshui/picom/wiki">picom wiki</a></li>
|
|
<li><a href="https://wiki.archlinux.org/index.php/Picom">Picom on ArchWiki</a></li>
|
|
<li><a href="https://github.com/yshui/picom/blob/next/picom.sample.conf">Sample configuration</a></li>
|
|
</ul>
|
|
<h3 id="shadows">Shadows</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#7d9029">shadow</span> <span style="color:#666">=</span> <span style="color:#ba2121">true;</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">shadow-radius</span> <span style="color:#666">=</span> <span style="color:#ba2121">2;</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">shadow-offset-x</span> <span style="color:#666">=</span> <span style="color:#ba2121">-2;</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">shadow-offset-y</span> <span style="color:#666">=</span> <span style="color:#ba2121">-2;</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">shadow-exclude</span> <span style="color:#666">=</span> <span style="color:#ba2121">[
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "name = 'Notification'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "class_g = 'Conky'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "name ?= 'cpt_frame_window'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "class_g ?= 'Notify-osd'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "class_g = 'Cairo-clock'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "_GTK_FRAME_EXTENTS@:c"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">];</span>
|
|
</span></span></code></pre></div><h3 id="fading">Fading</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#7d9029">fading</span> <span style="color:#666">=</span> <span style="color:#ba2121">true</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">fade-in-step</span> <span style="color:#666">=</span> <span style="color:#ba2121">0.03;</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">fade-out-step</span> <span style="color:#666">=</span> <span style="color:#ba2121">0.03;</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">fade-delta</span> <span style="color:#666">=</span> <span style="color:#ba2121">10</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">fade-exclude</span> <span style="color:#666">=</span> <span style="color:#ba2121">[
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "class_i = 'keynav'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "class_g = 'keynav'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "class_i = 'emacs'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "class_g = 'emacs'",</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">]</span>
|
|
</span></span></code></pre></div><h3 id="opacity">Opacity</h3>
|
|
<p>I don’t use stuff like transparency for inactive windows.</p>
|
|
<p>The first 5 lines of <code>opacity-rule</code> make i3wm’s hidden windows 100% transparent, so I see the background behind the semi-transparent windows in i3wm’s stacked and tabbed layout. Here is <a href="https://unix.stackexchange.com/questions/281131/compton-i3-tabbed-stacked-transparency-background-image">StackExchange question</a> about that.</p>
|
|
<p>I also noticed that for some reason it doesn’t play well with Emacs’s built-in transparency, so the last line sets up Emacs transparency at 90%.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#7d9029">inactive-opacity</span> <span style="color:#666">=</span> <span style="color:#ba2121">1;</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">frame-opacity</span> <span style="color:#666">=</span> <span style="color:#ba2121">1.0;</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">inactive-opacity-override</span> <span style="color:#666">=</span> <span style="color:#ba2121">false;</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">focus-exclude</span> <span style="color:#666">=</span> <span style="color:#ba2121">[ "class_g = 'Cairo-clock'" ];</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">opacity-rule</span> <span style="color:#666">=</span> <span style="color:#ba2121">[
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "0:_NET_WM_STATE@[0]:32a = '_NET_WM_STATE_HIDDEN'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "0:_NET_WM_STATE@[1]:32a = '_NET_WM_STATE_HIDDEN'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "0:_NET_WM_STATE@[2]:32a = '_NET_WM_STATE_HIDDEN'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "0:_NET_WM_STATE@[3]:32a = '_NET_WM_STATE_HIDDEN'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "0:_NET_WM_STATE@[4]:32a = '_NET_WM_STATE_HIDDEN'",
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> "90:class_g = 'Emacs'"</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">];</span>
|
|
</span></span></code></pre></div><h3 id="general-settings-2">General settings</h3>
|
|
<p>Default general settings. Editing some of these may be neeeded in case of performance issues.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-ini" data-lang="ini"><span style="display:flex;"><span><span style="color:#7d9029">backend</span> <span style="color:#666">=</span> <span style="color:#ba2121">"xrender";</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">vsync</span> <span style="color:#666">=</span> <span style="color:#ba2121">true</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">mark-wmwin-focused</span> <span style="color:#666">=</span> <span style="color:#ba2121">true;</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">mark-ovredir-focused</span> <span style="color:#666">=</span> <span style="color:#ba2121">true;</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">detect-rounded-corners</span> <span style="color:#666">=</span> <span style="color:#ba2121">true;</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">detect-client-opacity</span> <span style="color:#666">=</span> <span style="color:#ba2121">true;</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">refresh-rate</span> <span style="color:#666">=</span> <span style="color:#ba2121">0</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">detect-transient</span> <span style="color:#666">=</span> <span style="color:#ba2121">true</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">detect-client-leader</span> <span style="color:#666">=</span> <span style="color:#ba2121">true</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">use-damage</span> <span style="color:#666">=</span> <span style="color:#ba2121">true</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">log-level</span> <span style="color:#666">=</span> <span style="color:#ba2121">"warn";</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">wintypes:</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">{</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#7d9029">tooltip</span> <span style="color:#666">=</span> <span style="color:#ba2121">{ fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> dock = { shadow = false; }
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> dnd = { shadow = false; }
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> popup_menu = { opacity = 1; }
|
|
</span></span></span><span style="display:flex;"><span><span style="color:#ba2121"> dropdown_menu = { opacity = 1; }</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#7d9029">};</span>
|
|
</span></span></code></pre></div><h2 id="zathura">Zathura</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>office</td>
|
|
<td>zathura</td>
|
|
</tr>
|
|
<tr>
|
|
<td>office</td>
|
|
<td>zathura-ps</td>
|
|
</tr>
|
|
<tr>
|
|
<td>office</td>
|
|
<td>zathura-pdf-mupdf</td>
|
|
</tr>
|
|
<tr>
|
|
<td>office</td>
|
|
<td>zathura-djvu</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><a href="https://pwmt.org/projects/zathura/">Zathura</a> is a pdf viewer with vim-like keybindings.</p>
|
|
<p><a id="code-snippet--zathura-recolor"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#008000">if</span> (<span style="color:#19177c">my/light-p</span>) <span style="color:#ba2121">"false"</span> <span style="color:#ba2121">"true"</span>)
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-vim" data-lang="vim"><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> abort-clear-search false
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> guioptions cs
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> selection-clipboard clipboard
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> recolor <<zathura-recolor()>>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">map</span> <C-r> <span style="color:#008000;font-weight:bold">set</span> recolor false
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">map</span> <C-R> <span style="color:#008000;font-weight:bold">set</span> recolor true
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> recolor-lightcolor <<get-color(name=<span style="color:#ba2121">"black"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> completion-bg <<get-color(name=<span style="color:#ba2121">"bg"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> completion-fg <<get-color(name=<span style="color:#ba2121">"fg"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> completion-group-bg <<get-color(name=<span style="color:#ba2121">"bg"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> completion-group-fg <<get-color(name=<span style="color:#ba2121">"fg"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> completion-<span style="color:#008000;font-weight:bold">highlight</span>-bg <<get-color(name=<span style="color:#ba2121">"magenta"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> completion-<span style="color:#008000;font-weight:bold">highlight</span>-fg <<get-fg-for-color(name=<span style="color:#ba2121">"magenta"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> inputbar-bg <<get-color(name=<span style="color:#ba2121">"light-black"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> inputbar-fg <<get-color(name=<span style="color:#ba2121">"white"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> statusbar-bg <<get-color(name=<span style="color:#ba2121">"light-black"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> statusbar-fg <<get-color(name=<span style="color:#ba2121">"white"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> notification-error-bg <<get-color(name=<span style="color:#ba2121">"red"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> notification-error-fg <<get-fg-for-color(name=<span style="color:#ba2121">"red"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> notification-warning-bg <<get-color(name=<span style="color:#ba2121">"yellow"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span><span style="display:flex;"><span><span style="color:#008000;font-weight:bold">set</span> notification-warning-fg <<get-fg-for-color(name=<span style="color:#ba2121">"yellow"</span>, quote=<span style="color:#666">1</span>)>>
|
|
</span></span></code></pre></div><h2 id="qutebrowser">qutebrowser</h2>
|
|
<p>Let’s try it again?</p>
|
|
<h3 id="various-settings">Various settings</h3>
|
|
<p>Load autoconfig:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>config<span style="color:#666">.</span>load_autoconfig()
|
|
</span></span></code></pre></div><p>Keybindings:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>config<span style="color:#666">.</span>unbind(<span style="color:#ba2121">'gt'</span>, mode<span style="color:#666">=</span><span style="color:#ba2121">'normal'</span>)
|
|
</span></span><span style="display:flex;"><span>config<span style="color:#666">.</span>bind(<span style="color:#ba2121">'gt'</span>, <span style="color:#ba2121">'tab-next'</span>)
|
|
</span></span><span style="display:flex;"><span>config<span style="color:#666">.</span>bind(<span style="color:#ba2121">'gT'</span>, <span style="color:#ba2121">'tab-prev'</span>)
|
|
</span></span><span style="display:flex;"><span>config<span style="color:#666">.</span>bind(<span style="color:#ba2121">'gN'</span>, <span style="color:#ba2121">'tab-close'</span>)
|
|
</span></span><span style="display:flex;"><span>config<span style="color:#666">.</span>bind(<span style="color:#ba2121">'gn'</span>, <span style="color:#ba2121">'tab-clone'</span>)
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>config<span style="color:#666">.</span>bind(<span style="color:#ba2121">'<Shift-Escape>'</span>, <span style="color:#ba2121">'fake-key <Escape>'</span>, mode<span style="color:#666">=</span><span style="color:#ba2121">'insert'</span>)
|
|
</span></span></code></pre></div><p>I don’t remember what this is doing, but it was in my config from 4 years ago:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>RUSSIAN <span style="color:#666">=</span> <span style="color:#ba2121">'йцукенгшщзхъфывапролджэячсмитьбю.'</span>
|
|
</span></span><span style="display:flex;"><span>ENGLISH <span style="color:#666">=</span> <span style="color:#ba2121">'qwertyuiop[]asdfghjkl;</span><span style="color:#b62;font-weight:bold">\'</span><span style="color:#ba2121">zxcvbnm,./'</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>bindings<span style="color:#666">.</span>key_mappings <span style="color:#666">=</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">**</span>{r: e <span style="color:#008000;font-weight:bold">for</span> r, e <span style="color:#a2f;font-weight:bold">in</span> <span style="color:#008000">zip</span>(RUSSIAN, ENGLISH)},
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">**</span>{r<span style="color:#666">.</span>upper(): e<span style="color:#666">.</span>upper() <span style="color:#008000;font-weight:bold">for</span> r, e <span style="color:#a2f;font-weight:bold">in</span> <span style="color:#008000">zip</span>(RUSSIAN, ENGLISH)}
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span></code></pre></div><p>Emacs as editor:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>c<span style="color:#666">.</span>editor<span style="color:#666">.</span>command <span style="color:#666">=</span> [
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'emacsclient'</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'--socket-name=/run/user/1000/emacs/server'</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'</span><span style="color:#b68;font-weight:bold">{file}</span><span style="color:#ba2121">'</span>,
|
|
</span></span><span style="display:flex;"><span>]
|
|
</span></span></code></pre></div><p>Various configs:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>c<span style="color:#666">.</span>scrolling<span style="color:#666">.</span>bar <span style="color:#666">=</span> <span style="color:#ba2121">'always'</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>url<span style="color:#666">.</span>searchengines <span style="color:#666">=</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"DEFAULT"</span>: <span style="color:#ba2121">"https://www.google.com/search?hl=en&q=</span><span style="color:#b68;font-weight:bold">{}</span><span style="color:#ba2121">"</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"g"</span>: <span style="color:#ba2121">"https://www.google.com/search?hl=en&q=</span><span style="color:#b68;font-weight:bold">{}</span><span style="color:#ba2121">"</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"p"</span>: <span style="color:#ba2121">"https://www.perplexity.ai/search?q=</span><span style="color:#b68;font-weight:bold">{}</span><span style="color:#ba2121">"</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>url<span style="color:#666">.</span>start_pages <span style="color:#666">=</span> [<span style="color:#ba2121">'https://licht.sqrtminusone.xyz'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>zoom<span style="color:#666">.</span>levels <span style="color:#666">=</span> [<span style="color:#ba2121">'25%'</span>, <span style="color:#ba2121">'33%'</span>, <span style="color:#ba2121">'50%'</span>, <span style="color:#ba2121">'67%'</span>, <span style="color:#ba2121">'75%'</span>, <span style="color:#ba2121">'90%'</span>, <span style="color:#ba2121">'100%'</span>, <span style="color:#ba2121">'110%'</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'125%'</span>, <span style="color:#ba2121">'133%'</span>, <span style="color:#ba2121">'150%'</span>, <span style="color:#ba2121">'175%'</span>, <span style="color:#ba2121">'200%'</span>, <span style="color:#ba2121">'250%'</span>, <span style="color:#ba2121">'300%'</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'400%'</span>, <span style="color:#ba2121">'500%'</span>]
|
|
</span></span></code></pre></div><h3 id="theme-2">Theme</h3>
|
|
<p>Taken from the dracula theme from <a href="https://github.com/dracula/qutebrowser/blob/master/draw.py">qutebrowser</a>.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>palette <span style="color:#666">=</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'background'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"bg"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'background': '#282a36',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'background-alt'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"bg-alt"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'background-alt': '#282a36',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'background-attention'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"light-red"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'background-attention': '#181920',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'border'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"border"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'border': '#282a36',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'current-line'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"grey"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'current-line': '#44475a',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'selection'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"grey"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'selection': '#44475a',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'foreground'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"fg"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'foreground': '#f8f8f2',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'foreground-alt'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"fg-alt"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'foreground-alt': '#e0e0e0',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'foreground-attention'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"fg"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'foreground-attention': '#ffffff',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'comment'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"blue"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'comment': '#6272a4',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'cyan'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"cyan"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'cyan': '#8be9fd',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'green'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"green"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'green': '#50fa7b',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'orange'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"dark-yellow"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'orange': '#ffb86c',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'pink'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"light-magenta"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'pink': '#ff79c6',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'purple'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"dark-magenta"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'purple': '#bd93f9',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'red'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"red"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'red': '#ff5555',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'yellow'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"yellow"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic"># 'yellow': '#f1fa8c',</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'modeline'</span>: <span style="color:#666"><<</span>get<span style="color:#666">-</span>color(name<span style="color:#666">=</span><span style="color:#ba2121">"modeline"</span>, quote<span style="color:#666">=</span><span style="color:#666">1</span>)<span style="color:#666">>></span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>spacing <span style="color:#666">=</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'vertical'</span>: <span style="color:#666">5</span>,
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'horizontal'</span>: <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>padding <span style="color:#666">=</span> {
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'top'</span>: spacing[<span style="color:#ba2121">'vertical'</span>],
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'right'</span>: spacing[<span style="color:#ba2121">'horizontal'</span>],
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'bottom'</span>: spacing[<span style="color:#ba2121">'vertical'</span>],
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">'left'</span>: spacing[<span style="color:#ba2121">'horizontal'</span>]
|
|
</span></span><span style="display:flex;"><span>}
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the completion widget category headers.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>category<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Bottom border color of the completion widget category headers.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>category<span style="color:#666">.</span>border<span style="color:#666">.</span>bottom <span style="color:#666">=</span> palette[<span style="color:#ba2121">'border'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Top border color of the completion widget category headers.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>category<span style="color:#666">.</span>border<span style="color:#666">.</span>top <span style="color:#666">=</span> palette[<span style="color:#ba2121">'border'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of completion widget category headers.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>category<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the completion widget for even rows.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>even<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the completion widget for odd rows.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>odd<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background-alt'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Text color of the completion widget.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the selected completion item.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>item<span style="color:#666">.</span>selected<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'selection'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Bottom border color of the selected completion item.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>item<span style="color:#666">.</span>selected<span style="color:#666">.</span>border<span style="color:#666">.</span>bottom <span style="color:#666">=</span> palette[<span style="color:#ba2121">'selection'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Top border color of the completion widget category headers.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>item<span style="color:#666">.</span>selected<span style="color:#666">.</span>border<span style="color:#666">.</span>top <span style="color:#666">=</span> palette[<span style="color:#ba2121">'selection'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the selected completion item.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>item<span style="color:#666">.</span>selected<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the matched text in the completion.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span><span style="color:#008000;font-weight:bold">match</span><span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'orange'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Color of the scrollbar in completion view</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>scrollbar<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Color of the scrollbar handle in completion view.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>completion<span style="color:#666">.</span>scrollbar<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color for the download bar.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>downloads<span style="color:#666">.</span>bar<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color for downloads with errors.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>downloads<span style="color:#666">.</span>error<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color for downloads with errors.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>downloads<span style="color:#666">.</span>error<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'red'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Color gradient stop for download backgrounds.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>downloads<span style="color:#666">.</span>stop<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Color gradient interpolation system for download backgrounds.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Type: ColorSystem</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Valid values:</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## - rgb: Interpolate in the RGB color system.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## - hsv: Interpolate in the HSV color system.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## - hsl: Interpolate in the HSL color system.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## - none: Don't show a gradient.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>downloads<span style="color:#666">.</span>system<span style="color:#666">.</span>bg <span style="color:#666">=</span> <span style="color:#ba2121">'none'</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color for hints. Note that you can use a `rgba(...)` value</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## for transparency.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>hints<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Font color for hints.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>hints<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'purple'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Hints</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>hints<span style="color:#666">.</span>border <span style="color:#666">=</span> <span style="color:#ba2121">'1px solid '</span> <span style="color:#666">+</span> palette[<span style="color:#ba2121">'border'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Font color for the matched part of hints.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>hints<span style="color:#666">.</span><span style="color:#008000;font-weight:bold">match</span><span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground-alt'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the keyhint widget.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>keyhint<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Text color for the keyhint widget.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>keyhint<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'purple'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Highlight color for keys to complete the current keychain.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>keyhint<span style="color:#666">.</span>suffix<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'selection'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of an error message.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>messages<span style="color:#666">.</span>error<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Border color of an error message.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>messages<span style="color:#666">.</span>error<span style="color:#666">.</span>border <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background-alt'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of an error message.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>messages<span style="color:#666">.</span>error<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'red'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of an info message.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>messages<span style="color:#666">.</span>info<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Border color of an info message.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>messages<span style="color:#666">.</span>info<span style="color:#666">.</span>border <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background-alt'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color an info message.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>messages<span style="color:#666">.</span>info<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'comment'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of a warning message.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>messages<span style="color:#666">.</span>warning<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Border color of a warning message.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>messages<span style="color:#666">.</span>warning<span style="color:#666">.</span>border <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background-alt'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color a warning message.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>messages<span style="color:#666">.</span>warning<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'red'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color for prompts.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>prompts<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># ## Border used around UI elements in prompts.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>prompts<span style="color:#666">.</span>border <span style="color:#666">=</span> <span style="color:#ba2121">'1px solid '</span> <span style="color:#666">+</span> palette[<span style="color:#ba2121">'background-alt'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color for prompts.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>prompts<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'cyan'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color for the selected item in filename prompts.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>prompts<span style="color:#666">.</span>selected<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'selection'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the statusbar in caret mode.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>caret<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the statusbar in caret mode.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>caret<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'orange'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the statusbar in caret mode with a selection.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>caret<span style="color:#666">.</span>selection<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the statusbar in caret mode with a selection.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>caret<span style="color:#666">.</span>selection<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'orange'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the statusbar in command mode.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>command<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the statusbar in command mode.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>command<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'purple'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the statusbar in private browsing + command mode.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>command<span style="color:#666">.</span>private<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the statusbar in private browsing + command mode.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>command<span style="color:#666">.</span>private<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground-alt'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the statusbar in insert mode.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>insert<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background-attention'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the statusbar in insert mode.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>insert<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground-attention'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the statusbar.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>normal<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'modeline'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the statusbar.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>normal<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the statusbar in passthrough mode.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>passthrough<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the statusbar in passthrough mode.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>passthrough<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'orange'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the statusbar in private browsing mode.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>private<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background-alt'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the statusbar in private browsing mode.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>private<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground-alt'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the progress bar.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>progress<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the URL in the statusbar on error.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>url<span style="color:#666">.</span>error<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'red'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Default foreground color of the URL in the statusbar.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>url<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the URL in the statusbar for hovered links.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>url<span style="color:#666">.</span>hover<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'cyan'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the URL in the statusbar on successful load</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>url<span style="color:#666">.</span>success<span style="color:#666">.</span>http<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the URL in the statusbar on successful load</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>url<span style="color:#666">.</span>success<span style="color:#666">.</span>https<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of the URL in the statusbar when there's a warning.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>url<span style="color:#666">.</span>warn<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'purple'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Status bar padding</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>statusbar<span style="color:#666">.</span>padding <span style="color:#666">=</span> padding
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of the tab bar.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Type: QtColor</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>bar<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of unselected even tabs.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Type: QtColor</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>even<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of unselected even tabs.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Type: QtColor</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>even<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Color for the tab indicator on errors.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Type: QtColor</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>indicator<span style="color:#666">.</span>error <span style="color:#666">=</span> palette[<span style="color:#ba2121">'red'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Color gradient start for the tab indicator.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Type: QtColor</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>indicator<span style="color:#666">.</span>start <span style="color:#666">=</span> palette[<span style="color:#ba2121">'orange'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Color gradient end for the tab indicator.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Type: QtColor</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>indicator<span style="color:#666">.</span>stop <span style="color:#666">=</span> palette[<span style="color:#ba2121">'green'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Color gradient interpolation system for the tab indicator.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Type: ColorSystem</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Valid values:</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## - rgb: Interpolate in the RGB color system.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## - hsv: Interpolate in the HSV color system.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## - hsl: Interpolate in the HSL color system.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## - none: Don't show a gradient.</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>indicator<span style="color:#666">.</span>system <span style="color:#666">=</span> <span style="color:#ba2121">'none'</span>
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Background color of unselected odd tabs.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Type: QtColor</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>odd<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'background'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Foreground color of unselected odd tabs.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Type: QtColor</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>odd<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># ## Background color of selected even tabs.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># ## Type: QtColor</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>selected<span style="color:#666">.</span>even<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'modeline'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># ## Foreground color of selected even tabs.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># ## Type: QtColor</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>selected<span style="color:#666">.</span>even<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># ## Background color of selected odd tabs.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># ## Type: QtColor</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>selected<span style="color:#666">.</span>odd<span style="color:#666">.</span>bg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'modeline'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># ## Foreground color of selected odd tabs.</span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic"># ## Type: QtColor</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>colors<span style="color:#666">.</span>tabs<span style="color:#666">.</span>selected<span style="color:#666">.</span>odd<span style="color:#666">.</span>fg <span style="color:#666">=</span> palette[<span style="color:#ba2121">'foreground'</span>]
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span><span style="color:#408080;font-style:italic">## Tab padding</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>tabs<span style="color:#666">.</span>padding <span style="color:#666">=</span> padding
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>tabs<span style="color:#666">.</span>indicator<span style="color:#666">.</span>width <span style="color:#666">=</span> <span style="color:#666">1</span>
|
|
</span></span><span style="display:flex;"><span>c<span style="color:#666">.</span>tabs<span style="color:#666">.</span>favicons<span style="color:#666">.</span>scale <span style="color:#666">=</span> <span style="color:#666">1</span>
|
|
</span></span></code></pre></div><h2 id="various-software">Various software</h2>
|
|
<p>This section generates manifests for various desktop software that I’m using.</p>
|
|
<h3 id="browsers">Browsers</h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>browsers</td>
|
|
<td>ungoogled-chromium</td>
|
|
</tr>
|
|
<tr>
|
|
<td>browsers</td>
|
|
<td>firefox</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="office-and-multimedia">Office & Multimedia</h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>office</td>
|
|
<td>libreoffice-fresh</td>
|
|
</tr>
|
|
<tr>
|
|
<td>office</td>
|
|
<td>gimp</td>
|
|
</tr>
|
|
<tr>
|
|
<td>office</td>
|
|
<td>krita</td>
|
|
</tr>
|
|
<tr>
|
|
<td>office</td>
|
|
<td>ffmpeg</td>
|
|
</tr>
|
|
<tr>
|
|
<td>office</td>
|
|
<td>kdenlive</td>
|
|
</tr>
|
|
<tr>
|
|
<td>office</td>
|
|
<td>inkscape</td>
|
|
</tr>
|
|
<tr>
|
|
<td>office</td>
|
|
<td>okular</td>
|
|
</tr>
|
|
<tr>
|
|
<td>office</td>
|
|
<td>obs</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="latex">LaTeX</h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>latex</td>
|
|
<td>texlive</td>
|
|
</tr>
|
|
<tr>
|
|
<td>latex</td>
|
|
<td>texlab-bin</td>
|
|
</tr>
|
|
<tr>
|
|
<td>latex</td>
|
|
<td>biber</td>
|
|
</tr>
|
|
<tr>
|
|
<td>latex</td>
|
|
<td>python-pygments</td>
|
|
</tr>
|
|
<tr>
|
|
<td>latex</td>
|
|
<td>font-microsoft-web-core-fonts</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="dev">Dev</h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
<th>Disabled</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>micromamba-bin</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>pandoc</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>docker-compose</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>postgresql</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>virt-manager</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>dnsmasq</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>git-filter-repo</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>node</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>openjdk:jdk</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>go</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>gopls</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>pkg-config</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>gcc-toolchain</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>lua</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>libfaketime</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>hugo-extended</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>make</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>sbcl</td>
|
|
<td>t</td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>git-lfs</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>mysql</td>
|
|
<td>t</td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>gource</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>php</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>python</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>python-virtualenv</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>leiningen</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>socat</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>wireshark</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>python-chess</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>dev</td>
|
|
<td>python-cairosvg</td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="manifests">Manifests</h3>
|
|
<p><a id="code-snippet--packages"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">my/format-guix-dependencies</span> <span style="color:#19177c">category</span>)
|
|
</span></span></code></pre></div><p>Dev</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">specifications->manifest</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<packages</span>(<span style="color:#ba2121">"dev"</span>)<span style="color:#19177c">>></span>))
|
|
</span></span></code></pre></div><p>Browsers</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">specifications->manifest</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<packages</span>(<span style="color:#ba2121">"browsers"</span>)<span style="color:#19177c">>></span>))
|
|
</span></span></code></pre></div><p>Music</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">specifications->manifest</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<packages</span>(<span style="color:#ba2121">"music"</span>)<span style="color:#19177c">>></span>))
|
|
</span></span></code></pre></div><p>Office</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">specifications->manifest</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<packages</span>(<span style="color:#ba2121">"office"</span>)<span style="color:#19177c">>></span>))
|
|
</span></span></code></pre></div><p>LaTeX</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">specifications->manifest</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<packages</span>(<span style="color:#ba2121">"latex"</span>)<span style="color:#19177c">>></span>))
|
|
</span></span></code></pre></div><p>Desktop Misc</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">specifications->manifest</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<packages</span>(<span style="color:#ba2121">"desktop-misc"</span>)<span style="color:#19177c">>></span>))
|
|
</span></span></code></pre></div><p>Desktop polybar</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">specifications->manifest</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<packages</span>(<span style="color:#ba2121">"desktop-polybar"</span>)<span style="color:#19177c">>></span>))
|
|
</span></span></code></pre></div><p>Desktop rofi</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">specifications->manifest</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<packages</span>(<span style="color:#ba2121">"desktop-rofi"</span>)<span style="color:#19177c">>></span>))
|
|
</span></span></code></pre></div><h3 id="flatpak">Flatpak</h3>
|
|
<p>A lot of proprietary desktop applications can be installed most easily with flatpak & flathub.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>flatpak</td>
|
|
</tr>
|
|
<tr>
|
|
<td>xdg-desktop-portal</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>After installation, add the following repositories:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
|
</span></span><span style="display:flex;"><span>flatpak remote-add --user --if-not-exists flathub-beta https://flathub.org/beta-repo/flathub-beta.flatpakrepo
|
|
</span></span></code></pre></div><p>Installation syntax is as follows:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>flatpak install --user <remote> <package>
|
|
</span></span></code></pre></div><p>Packages to install:</p>
|
|
<p><a id="table--flatpak-deps"></a></p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Flatpak dependency</th>
|
|
<th>Channel</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>com.github.wwmm.pulseeffects</td>
|
|
<td>flathub</td>
|
|
</tr>
|
|
<tr>
|
|
<td>com.discordapp.Discord</td>
|
|
<td>flathub</td>
|
|
</tr>
|
|
<tr>
|
|
<td>com.jetbrains.DataGrip</td>
|
|
<td>flathub</td>
|
|
</tr>
|
|
<tr>
|
|
<td>chat.rocket.RocketChat</td>
|
|
<td>flathub</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#00f">mapconcat</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#008000">lambda</span> (<span style="color:#19177c">c</span>) (<span style="color:#00f">concat</span> <span style="color:#ba2121">"flatpak install -y --user "</span> (<span style="color:#00f">nth</span> <span style="color:#666">1</span> <span style="color:#19177c">c</span>) <span style="color:#ba2121">" "</span> (<span style="color:#00f">nth</span> <span style="color:#666">0</span> <span style="color:#19177c">c</span>)))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">table</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"\n"</span>)
|
|
</span></span></code></pre></div><h3 id="nix">Nix</h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>TODO</td>
|
|
<td>Make nix manifest?</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>I probably should’ve used nix, as almost every program I packaged so far exists in the Nix repo.</p>
|
|
<p>But it’s easy enough to use Nix on Guix.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cfg" data-lang="cfg"><span style="display:flex;"><span><span style="color:#7d9029">https://nixos.org/channels/nixpkgs-unstable nixpkgs</span>
|
|
</span></span></code></pre></div><p>Don’t forget to run the following after the first installation:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>nix-channel --update
|
|
</span></span></code></pre></div><p>Installing packages:</p>
|
|
<pre tabindex="0"><code class="language-nil" data-lang="nil">nix-env -i slack
|
|
</code></pre><h2 id="services-1">Services</h2>
|
|
<p><a href="https://www.gnu.org/software/shepherd/manual/html_node/index.html">GNU Shepherd</a> is a service management system for GNU Guix.</p>
|
|
<p>I previously used supervisor, but shepherd also seems pretty capable.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>shepherd</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 id="music">Music</h3>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>music</td>
|
|
<td>mpd</td>
|
|
</tr>
|
|
<tr>
|
|
<td>music</td>
|
|
<td>ncmpcpp</td>
|
|
</tr>
|
|
<tr>
|
|
<td>music</td>
|
|
<td>picard</td>
|
|
</tr>
|
|
<tr>
|
|
<td>music</td>
|
|
<td>mpd-mpc</td>
|
|
</tr>
|
|
<tr>
|
|
<td>music</td>
|
|
<td>shntool</td>
|
|
</tr>
|
|
<tr>
|
|
<td>music</td>
|
|
<td>cuetools</td>
|
|
</tr>
|
|
<tr>
|
|
<td>music</td>
|
|
<td>flac</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Music player daemon</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">mpd</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">mpd</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"mpd"</span> <span style="color:#ba2121">"--no-daemon"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><p>MPD watcher</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">sqrt-data-agent-mpd</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">sqrt-data-agent-mpd</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"sqrt_data_agent_mpd"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:requires</span> <span style="color:#666">'</span>(<span style="color:#19177c">mpd</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">deterred-mpd</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">deterred-mpd</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(<span style="color:#ba2121">"python"</span> <span style="color:#ba2121">"/home/pavel/10-19 Code/13 Other Projects/13.02 sqrt-data/13.02.R Repos/13.02.R.05 deterred/watchers/deterred-mpd.py"</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#ba2121">"--db"</span> <span style="color:#ba2121">"/home/pavel/.deterred/database.db"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:requires</span> <span style="color:#666">'</span>(<span style="color:#19177c">mpd</span>)))
|
|
</span></span></code></pre></div><h3 id="gnu-mcron">GNU Mcron</h3>
|
|
<p><a href="https://www.gnu.org/software/mcron/">GNU Mcron</a> is a replacement for cron, written in Scheme.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">mcron</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">mcron</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"mcron"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><h3 id="activitywatch">ActivityWatch</h3>
|
|
<p><a href="https://activitywatch.net/">ActivityWatch</a> is a FOSS time tracker. It tracks screen and application usage and has integrations with browsers, Emacs, etc.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Guix dependency</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>activitywatch-bin</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>aw-server</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">aw-server</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">aw-server</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"aw-server"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><p><code>aw-watcher-afk</code> has some problems with statup, so there is a wrapper script</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>sleep <span style="color:#666">5</span>
|
|
</span></span><span style="display:flex;"><span>aw-watcher-afk
|
|
</span></span></code></pre></div><p>aw-watcher-afk</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">aw-watcher-afk</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">aw-watcher-afk</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:requires</span> <span style="color:#666">'</span>(<span style="color:#19177c">aw-server</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"/home/pavel/bin/scripts/aw-watcher-afk-wrapper"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><p>aw-watcher-window</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">aw-watcher-window</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">aw-watcher-window</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:requires</span> <span style="color:#666">'</span>(<span style="color:#19177c">aw-server</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"aw-watcher-window"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><h3 id="pulseeffects">PulseEffects</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">pulseeffects</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">pulseeffects</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"flatpak"</span> <span style="color:#ba2121">"run"</span> <span style="color:#ba2121">"com.github.wwmm.pulseeffects"</span> <span style="color:#ba2121">"--gapplication-service"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><h3 id="xsettingsd">xsettingsd</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">xsettingsd</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">xsettingsd</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"xsettingsd"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><h3 id="nm-applet">nm-applet</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">nm-applet</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">nm-applet</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"nm-applet"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><h3 id="discord-rich-presence">Discord rich presence</h3>
|
|
<p>References:</p>
|
|
<ul>
|
|
<li><a href="https://github.com/flathub/com.discordapp.Discord/wiki/Rich-Precense-(discord-rpc)">Rich Precense (discord rpc)</a></li>
|
|
</ul>
|
|
<!--listend-->
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">discord-rich-presence</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">discord-rich-presence</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:one-shot?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-system-constructor</span> <span style="color:#ba2121">"ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-0"</span>)))
|
|
</span></span></code></pre></div><h3 id="polkit-authentication-agent">Polkit Authentication agent</h3>
|
|
<p>Launch an authentication agent. Necessary for stuff like <code>pkexec</code>. I suspect I’m not doing that the intended way, but it seems to work.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">polkit-gnome</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">polkit-gnome</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"/home/pavel/.guix-extra-profiles/desktop-misc/desktop-misc/libexec/polkit-gnome-authentication-agent-1"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><h3 id="xmodmap">Xmodmap</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">xmodmap</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">xmodmap</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:one-shot?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-system-constructor</span> <span style="color:#ba2121">"xmodmap /home/pavel/.Xmodmap"</span>)))
|
|
</span></span></code></pre></div><h3 id="vpn">VPN</h3>
|
|
<p>Run my <a href="/configs/guix/#openvpn">OpenVPN setup</a>. Not lauching this automatially, as it requires an active connection.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">vpn</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">vpn</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"/home/pavel/bin/scripts/vpn-start"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><h3 id="davmail">Davmail</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">davmail</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">davmail</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"/home/pavel/bin/davmail"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><h3 id="vnstatd">vnstatd</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">vnstatd</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">vnstatd</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"vnstatd"</span> <span style="color:#ba2121">"-n"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><h3 id="opensnitch">opensnitch</h3>
|
|
<p><a href="https://github.com/evilsocket/opensnitch">opensnitch</a> is a linux firewall.</p>
|
|
<p>Install it via nix:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>nix-env -I opensnitchd opensnitch-ui
|
|
</span></span></code></pre></div><p><code>sudoers</code> has to be modified this to work.</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">opensnitchd</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">opensnitchd</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"sudo"</span> <span style="color:#ba2121">"opensnitchd"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span><span style="display:flex;"><span>
|
|
</span></span><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">opensnitch-ui</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">opensnitch-ui</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"sudo"</span> <span style="color:#ba2121">"opensnitch-ui"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><h3 id="ollama">ollama</h3>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000;font-weight:bold">define </span><span style="color:#19177c">ollama</span>
|
|
</span></span><span style="display:flex;"><span> (<span style="color:#00f">make</span> <span style="color:#19177c"><service></span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:provides</span> <span style="color:#666">'</span>(<span style="color:#19177c">ollama</span>)
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:respawn?</span> <span style="color:#800">#t</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:start</span> (<span style="color:#00f">make-forkexec-constructor</span> <span style="color:#666">'</span>(<span style="color:#ba2121">"ollama"</span> <span style="color:#ba2121">"serve"</span>))
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">#</span><span style="color:#19177c">:stop</span> (<span style="color:#00f">make-kill-destructor</span>)))
|
|
</span></span></code></pre></div><h3 id="shepherd-config">Shepherd config</h3>
|
|
<p>For some reason, running start on a one-shot service started to hang shepherd, not sure why… Turining these off for now.</p>
|
|
<p>Register services:</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">register-services</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">mpd</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">sqrt-data-agent-mpd</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">deterred-mpd</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">mcron</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">aw-server</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">aw-watcher-afk</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">aw-watcher-window</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">pulseeffects</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">xsettingsd</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; discord-rich-presence</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">polkit-gnome</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">vpn</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">davmail</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; xmodmap</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">nm-applet</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">vnstatd</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; opensnitchd</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; opensnitch-ui</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">ollama</span>)
|
|
</span></span></code></pre></div><p>Daemonize shepherd</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">action</span> <span style="color:#19177c">'shepherd</span> <span style="color:#19177c">'daemonize</span>)
|
|
</span></span></code></pre></div><p>Run services</p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#008000">for-each </span><span style="color:#19177c">start</span> <span style="color:#666">'</span>(<span style="color:#19177c">mpd</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">sqrt-data-agent-mpd</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">deterred-mpd</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">mcron</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">aw-server</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">aw-watcher-afk</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">aw-watcher-window</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">pulseeffects</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">xsettingsd</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; discord-rich-presence</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; polkit-gnome</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">davmail</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; ; xmodmap</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; nm-applet</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c">vnstatd</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; opensnitchd</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#408080;font-style:italic">;; opensnitch-ui</span>
|
|
</span></span><span style="display:flex;"><span> ))
|
|
</span></span></code></pre></div><h2 id="guix-settings">Guix settings</h2>
|
|
<p>Other desktop programs I use are listed below.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Category</th>
|
|
<th>Guix dependency</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>xprop</td>
|
|
<td>Tool to display properties of X windows</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>arandr</td>
|
|
<td>GUI to xrandr</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>light</td>
|
|
<td>Control screen brightness</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>ponymix</td>
|
|
<td>Control PulseAudio CLI</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>pavucontrol</td>
|
|
<td>Control PulseAudio GUI</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>network-manager-applet</td>
|
|
<td>Applet to manage network connections</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>xmodmap</td>
|
|
<td>Program to modify keybindings on X server</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>fontconfig</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>polkit-gnome</td>
|
|
<td>Polkit authentication agent</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>feh</td>
|
|
<td>Image viewer. Used to set background</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>geeqie</td>
|
|
<td>Image viewer</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>copyq</td>
|
|
<td>Clipboard manager</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>thunar</td>
|
|
<td>My preferred GUI file manager</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>xdg-utils</td>
|
|
<td>gives xdg-open and stuff</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>gnome-font-viewer</td>
|
|
<td>view fonts</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>qbittorrent</td>
|
|
<td>torrent client</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>anydesk</td>
|
|
<td>Remote desktop software</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>gnome-disk-utility</td>
|
|
<td>Manage disks</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>gparted</td>
|
|
<td>Manage partitions</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>xev</td>
|
|
<td>Test input</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>bluez</td>
|
|
<td>Provides bluetoothctl</td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>telegram-desktop</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>font-google-noto-emoji</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>remmina</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>android-file-transfer</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>desktop-misc</td>
|
|
<td>mcron</td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><a id="code-snippet--packages"></a></p>
|
|
<div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(<span style="color:#19177c">my/format-guix-dependencies</span>)
|
|
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" style=";-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-scheme" data-lang="scheme"><span style="display:flex;"><span>(<span style="color:#00f">specifications->manifest</span>
|
|
</span></span><span style="display:flex;"><span> <span style="color:#666">'</span>(
|
|
</span></span><span style="display:flex;"><span> <span style="color:#19177c"><<packages</span>()<span style="color:#19177c">>></span>))
|
|
</span></span></code></pre></div>
|
|
</div>
|
|
<div class="table-of-contents">
|
|
<div class="table-of-contents-text">
|
|
<b><a href="#">Table of Contents</a></b>
|
|
<nav id="TableOfContents">
|
|
<ul>
|
|
<li><a href="#some-remarks">Some remarks</a></li>
|
|
<li><a href="#global-customization">Global customization</a>
|
|
<ul>
|
|
<li><a href="#colors">Colors</a></li>
|
|
<li><a href="#xresources">Xresources</a>
|
|
<ul>
|
|
<li><a href="#colors-in-xresources">Colors in Xresources</a></li>
|
|
<li><a href="#fonts">Fonts</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#themes">Themes</a></li>
|
|
<li><a href="#mime">MIME</a></li>
|
|
<li><a href="#device-specific-settings">Device-specific settings</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#exwm">EXWM</a>
|
|
<ul>
|
|
<li><a href="#startup-and-ui">Startup & UI</a>
|
|
<ul>
|
|
<li><a href="#xsession">Xsession</a></li>
|
|
<li><a href="#startup-apps">Startup apps</a></li>
|
|
<li><a href="#pinentry">Pinentry</a></li>
|
|
<li><a href="#modeline">Modeline</a></li>
|
|
<li><a href="#misc">Misc</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#windows">Windows</a>
|
|
<ul>
|
|
<li><a href="#moving-windows">Moving windows</a></li>
|
|
<li><a href="#resizing-windows">Resizing windows</a></li>
|
|
<li><a href="#improving-splitting-windows">Improving splitting windows</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#perspectives">Perspectives</a></li>
|
|
<li><a href="#workspaces-and-multi-monitor-setup">Workspaces and multi-monitor setup</a>
|
|
<ul>
|
|
<li><a href="#tracking-recently-used-workspaces">Tracking recently used workspaces</a></li>
|
|
<li><a href="#the-monitor-list">The monitor list</a></li>
|
|
<li><a href="#switch-to-another-monitor">Switch to another monitor</a></li>
|
|
<li><a href="#move-the-workspace-to-another-monitor">Move the workspace to another monitor</a></li>
|
|
<li><a href="#windmove-between-monitors">Windmove between monitors</a></li>
|
|
<li><a href="#update-the-monitor-list">Update the monitor list</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#completions">Completions</a>
|
|
<ul>
|
|
<li><a href="#ivy-posframe">ivy-posframe</a></li>
|
|
<li><a href="#linux-app">Linux app</a></li>
|
|
<li><a href="#password-store-completion">password-store-completion</a></li>
|
|
<li><a href="#emojis">emojis</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#keybindings">Keybindings</a>
|
|
<ul>
|
|
<li><a href="#exwm-keybindings">EXWM keybindings</a></li>
|
|
<li><a href="#app-shortcuts">App shortcuts</a></li>
|
|
<li><a href="#locking-up">Locking up</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#fixes">Fixes</a>
|
|
<ul>
|
|
<li><a href="#catch-and-report-all-errors-raised-when-invoking-command-hooks">Catch and report all errors raised when invoking command hooks</a></li>
|
|
<li><a href="#improve-floating-windows-behavior">Improve floating windows behavior</a></li>
|
|
<li><a href="#fix-exwm-on-clientmessage">Fix exwm–on-ClientMessage</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#application-specific-settings">Application-specific settings</a></li>
|
|
<li><a href="#exwm-config">EXWM config</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#i3wm">i3wm</a>
|
|
<ul>
|
|
<li><a href="#general-settings">General settings</a></li>
|
|
<li><a href="#managing-windows">Managing windows</a></li>
|
|
<li><a href="#workspaces">Workspaces</a></li>
|
|
<li><a href="#rules">Rules</a></li>
|
|
<li><a href="#scratchpad">Scratchpad</a>
|
|
<ul>
|
|
<li><a href="#launch-script">Launch script</a></li>
|
|
<li><a href="#i3-config">i3 config</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#gaps-and-borders">Gaps & borders</a>
|
|
<ul>
|
|
<li><a href="#keybindings-1">Keybindings</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#move-and-resize-windows">Move & resize windows</a></li>
|
|
<li><a href="#off--intergration-with-dmenu"><span class="org-todo done OFF">OFF</span> (OFF) Intergration with dmenu</a></li>
|
|
<li><a href="#integration-with-rofi">Integration with rofi</a></li>
|
|
<li><a href="#launching-apps-and-misc-keybindings">Launching apps & misc keybindings</a>
|
|
<ul>
|
|
<li><a href="#apps">Apps</a></li>
|
|
<li><a href="#media-controls-and-brightness">Media controls & brightness</a></li>
|
|
<li><a href="#screenshots">Screenshots</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#colors-1">Colors</a></li>
|
|
<li><a href="#off--i3blocks"><span class="org-todo done OFF">OFF</span> (OFF) i3blocks</a></li>
|
|
<li><a href="#keyboard-layout">Keyboard Layout</a></li>
|
|
<li><a href="#autostart">Autostart</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#polybar">Polybar</a>
|
|
<ul>
|
|
<li><a href="#general-settings-1">General settings</a>
|
|
<ul>
|
|
<li><a href="#colors-2">Colors</a></li>
|
|
<li><a href="#glyph-settings">Glyph settings</a></li>
|
|
<li><a href="#defining-modules">Defining modules</a></li>
|
|
<li><a href="#generating-glyphs">Generating glyphs</a></li>
|
|
<li><a href="#generating-set-of-modules">Generating set of modules</a></li>
|
|
<li><a href="#global-bar-config">Global bar config</a></li>
|
|
<li><a href="#launch-script-1">Launch script</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#individual-modules">Individual modules</a>
|
|
<ul>
|
|
<li><a href="#pulseaudio">pulseaudio</a></li>
|
|
<li><a href="#mpd">mpd</a></li>
|
|
<li><a href="#cpu">cpu</a></li>
|
|
<li><a href="#nvidia">nvidia</a></li>
|
|
<li><a href="#ram-memory">ram-memory</a></li>
|
|
<li><a href="#swap-memory">swap-memory</a></li>
|
|
<li><a href="#network">network</a></li>
|
|
<li><a href="#bandwidth">bandwidth</a></li>
|
|
<li><a href="#ipstack-vpn">ipstack-vpn</a></li>
|
|
<li><a href="#openvpn">openvpn</a></li>
|
|
<li><a href="#xkeyboard">xkeyboard</a></li>
|
|
<li><a href="#battery">battery</a></li>
|
|
<li><a href="#temperature">temperature</a></li>
|
|
<li><a href="#weather">weather</a></li>
|
|
<li><a href="#sun">sun</a></li>
|
|
<li><a href="#aw-afk">aw-afk</a></li>
|
|
<li><a href="#date">date</a></li>
|
|
<li><a href="#pomm">pomm</a></li>
|
|
<li><a href="#c-g">C-g</a></li>
|
|
<li><a href="#sep">SEP</a></li>
|
|
<li><a href="#tsep">TSEP</a></li>
|
|
<li><a href="#i3">i3</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#rofi-1">Rofi</a>
|
|
<ul>
|
|
<li><a href="#theme">Theme</a></li>
|
|
<li><a href="#scripts">Scripts</a>
|
|
<ul>
|
|
<li><a href="#man-pages">Man pages</a></li>
|
|
<li><a href="#emojis-1">Emojis</a></li>
|
|
<li><a href="#pass">pass</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#flameshot">Flameshot</a></li>
|
|
<li><a href="#dunst">dunst</a></li>
|
|
<li><a href="#firefox">Firefox</a>
|
|
<ul>
|
|
<li><a href="#tridactyl">Tridactyl</a>
|
|
<ul>
|
|
<li><a href="#config">Config</a></li>
|
|
<li><a href="#theme-1">Theme</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#firefox-color">Firefox Color</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#keynav">keynav</a>
|
|
<ul>
|
|
<li><a href="#config-1">Config</a></li>
|
|
<li><a href="#using-with-picom">Using with picom</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#picom">Picom</a>
|
|
<ul>
|
|
<li><a href="#shadows">Shadows</a></li>
|
|
<li><a href="#fading">Fading</a></li>
|
|
<li><a href="#opacity">Opacity</a></li>
|
|
<li><a href="#general-settings-2">General settings</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#zathura">Zathura</a></li>
|
|
<li><a href="#qutebrowser">qutebrowser</a>
|
|
<ul>
|
|
<li><a href="#various-settings">Various settings</a></li>
|
|
<li><a href="#theme-2">Theme</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#various-software">Various software</a>
|
|
<ul>
|
|
<li><a href="#browsers">Browsers</a></li>
|
|
<li><a href="#office-and-multimedia">Office & Multimedia</a></li>
|
|
<li><a href="#latex">LaTeX</a></li>
|
|
<li><a href="#dev">Dev</a></li>
|
|
<li><a href="#manifests">Manifests</a></li>
|
|
<li><a href="#flatpak">Flatpak</a></li>
|
|
<li><a href="#nix">Nix</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#services-1">Services</a>
|
|
<ul>
|
|
<li><a href="#music">Music</a></li>
|
|
<li><a href="#gnu-mcron">GNU Mcron</a></li>
|
|
<li><a href="#activitywatch">ActivityWatch</a></li>
|
|
<li><a href="#pulseeffects">PulseEffects</a></li>
|
|
<li><a href="#xsettingsd">xsettingsd</a></li>
|
|
<li><a href="#nm-applet">nm-applet</a></li>
|
|
<li><a href="#discord-rich-presence">Discord rich presence</a></li>
|
|
<li><a href="#polkit-authentication-agent">Polkit Authentication agent</a></li>
|
|
<li><a href="#xmodmap">Xmodmap</a></li>
|
|
<li><a href="#vpn">VPN</a></li>
|
|
<li><a href="#davmail">Davmail</a></li>
|
|
<li><a href="#vnstatd">vnstatd</a></li>
|
|
<li><a href="#opensnitch">opensnitch</a></li>
|
|
<li><a href="#ollama">ollama</a></li>
|
|
<li><a href="#shepherd-config">Shepherd config</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#guix-settings">Guix settings</a></li>
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
<a id="unhide-all-button" class="hidden"><Expand></a>
|
|
<a id="hide-all-button" class="hidden"><Collapse></a>
|
|
</div>
|
|
</div>
|
|
|
|
</div><div id="footer" class="mb-5">
|
|
<hr>
|
|
<div class="container text-center">
|
|
|
|
</div>
|
|
|
|
<div class="container text-center">
|
|
|
|
|
|
<a href="https://creativecommons.org/licenses/by/4.0/legalcode" title="Licensed under CC-BY 4.0"><small>Licensed under CC-BY 4.0</small></a>
|
|
|
|
|
|
|
|
|
|
|
<a href="https://plausible.io/" title="Uses Plausible Analytics"><small>Uses Plausible Analytics</small></a>
|
|
|
|
|
|
<br>
|
|
|
|
<a href="https://sqrtminusone.xyz/" title="Pavel Korytov, 2024"><small>Pavel Korytov, 2024</small></a>
|
|
</div>
|
|
|
|
</div>
|
|
</body>
|
|
</html>
|