<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on CuriousCoding</title><link>https://curiouscoding.nl/tags/linux/</link><description>Recent content in Linux on CuriousCoding</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 09 Feb 2026 00:00:00 +0100</lastBuildDate><atom:link href="https://curiouscoding.nl/tags/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>DEFLATE, gzip, zlib, libz, et al.</title><link>https://curiouscoding.nl/posts/gzip/</link><pubDate>Mon, 09 Feb 2026 00:00:00 +0100</pubDate><guid>https://curiouscoding.nl/posts/gzip/</guid><description>&lt;h3 id="file-formats"&gt;&#10; &lt;span class="section-num"&gt;1&lt;/span&gt; File formats&#10; &lt;a class="heading-link" href="#file-formats"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;p&gt;This stuff is all insanely confusing. My summary:&lt;/p&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;DEFLATE&lt;/dt&gt;&#10;&lt;dd&gt;The &amp;lsquo;original&amp;rsquo; compression method. Works in 32kB blocks, and for&#10;each stores a small header with the compression mode and optional huffman&#10;encoded dictionary. It applies Lempel-Ziv'77 compression of replacing common texts&#10;by back-references. It uses a 32kiB context window for this, which may extend&#10;beyond the start of the block.&lt;/dd&gt;&#10;&lt;dt&gt;zlib&lt;/dt&gt;&#10;&lt;dd&gt;An implementation of DEFLATE. The file format wraps the raw deflate&#10;blocks in a header and footer.&lt;/dd&gt;&#10;&lt;dt&gt;gzip (GNU zip)&lt;/dt&gt;&#10;&lt;dd&gt;Another file format around DEFLATE, consisting of a small header containing&#10;eg the original file name, then a list of DEFLATE blocks, and lastly a CRC32 checksum.&lt;/dd&gt;&#10;&lt;dt&gt;blocked gzip (BGZF, blocked gzip format)&lt;/dt&gt;&#10;&lt;dd&gt;A file format developed for bioinformatics that is&#10;just multiple GZIP files concatenated. This allows faster compression and&#10;decompression by parallellizing over independent blocks, as well as random&#10;access via a small auxiliary index of block starts.&#10;This is backwards compatible with plain gzip.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;h3 id="implementations"&gt;&#10; &lt;span class="section-num"&gt;2&lt;/span&gt; Implementations&#10; &lt;a class="heading-link" href="#implementations"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&lt;code&gt;zlib&lt;/code&gt;&lt;/dt&gt;&#10;&lt;dd&gt;The original C library.&lt;/dd&gt;&#10;&lt;dt&gt;&lt;code&gt;zlib-ng&lt;/code&gt;&lt;/dt&gt;&#10;&lt;dd&gt;Modern C implementation of zlib using SIMD.&lt;/dd&gt;&#10;&lt;dt&gt;&lt;code&gt;libz-sys&lt;/code&gt; crate&lt;/dt&gt;&#10;&lt;dd&gt;Rust bindings to &lt;code&gt;zlib&lt;/code&gt; and &lt;code&gt;zlib-ng&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&lt;code&gt;zlib-rs&lt;/code&gt; crate&lt;/dt&gt;&#10;&lt;dd&gt;Pure Rust re-implementation.&lt;/dd&gt;&#10;&lt;dt&gt;&lt;code&gt;zlib-rs-sys&lt;/code&gt; crate&lt;/dt&gt;&#10;&lt;dd&gt;zlib-compatible C-API to &lt;code&gt;zlib-rs&lt;/code&gt;&lt;/dd&gt;&#10;&lt;dt&gt;&lt;code&gt;flate2&lt;/code&gt; crate&lt;/dt&gt;&#10;&lt;dd&gt;High level Rust crate with uniform bindings to multiple zlib implementations.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;h3 id="containers"&gt;&#10; &lt;span class="section-num"&gt;3&lt;/span&gt; Containers&#10; &lt;a class="heading-link" href="#containers"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h3&gt;&#10;&lt;figure class="inset large"&gt;&lt;img src="https://curiouscoding.nl/ox-hugo/gzip.svg"&#10;&#9;&#9;&#9;alt="Figure 1: Overview of the containers in a (blocked) GZIP file. Mim stores checkpoints at the start of DEFLATE blocks, which do not coincide with the start of GZIP blocks!"&gt;&lt;figcaption&gt;&#10;&#9;&#9;&#9;&lt;p&gt;&lt;span class="figure-number"&gt;Figure 1: &lt;/span&gt;Overview of the containers in a (blocked) GZIP file. Mim stores checkpoints at the start of DEFLATE blocks, which do &lt;em&gt;not&lt;/em&gt; coincide with the start of GZIP blocks!&lt;/p&gt;</description></item><item><title>Trying to understand DDR memory</title><link>https://curiouscoding.nl/posts/ddr/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0100</pubDate><guid>https://curiouscoding.nl/posts/ddr/</guid><description>&lt;div class="ox-hugo-toc toc has-section-numbers"&gt;&#10;&lt;div class="heading"&gt;Table of Contents&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;1&lt;/span&gt; &lt;a href="#questions" &gt;Questions&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;2&lt;/span&gt; &lt;a href="#a-load-of-articles-blogs-pages-to-read" &gt;A load of articles/blogs/pages to read&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;2.1&lt;/span&gt; &lt;a href="#wikipedia-articles" &gt;Wikipedia articles&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;2.2&lt;/span&gt; &lt;a href="#more-posts" &gt;More posts&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;2.3&lt;/span&gt; &lt;a href="#notes" &gt;Notes&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;2.4&lt;/span&gt; &lt;a href="#my-own-ram" &gt;My own RAM&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;2.5&lt;/span&gt; &lt;a href="#continued-notes" &gt;Continued notes&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;2.6&lt;/span&gt; &lt;a href="#address-mapping-notation" &gt;Address mapping notation&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;2.7&lt;/span&gt; &lt;a href="#intel-spec" &gt;Intel spec&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;2.8&lt;/span&gt; &lt;a href="#rank-interleaving" &gt;Rank interleaving&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;2.9&lt;/span&gt; &lt;a href="#nontemporal-reads-writes" &gt;Nontemporal reads/writes&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;3&lt;/span&gt; &lt;a href="#remap-using-performance-counters" &gt;reMap: using Performance counters&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;4&lt;/span&gt; &lt;a href="#sudoku" &gt;Sudoku&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;4.1&lt;/span&gt; &lt;a href="#step-1-dram-addressing-functions" &gt;Step 1: DRAM addressing functions&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;4.2&lt;/span&gt; &lt;a href="#step-2-row-column-bits" &gt;Step 2: row/column bits&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;4.3&lt;/span&gt; &lt;a href="#step-3-validation" &gt;Step 3: validation&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;4.4&lt;/span&gt; &lt;a href="#step-4-which-function-is-what" &gt;Step 4: which function is what?&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;4.5&lt;/span&gt; &lt;a href="#refreshes" &gt;Refreshes&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;4.6&lt;/span&gt; &lt;a href="#consecutive-accesses" &gt;Consecutive Accesses&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;5&lt;/span&gt; &lt;a href="#sudoku-now-with-only-1-dimm" &gt;Sudoku, now with only 1 DIMM&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;5.1&lt;/span&gt; &lt;a href="#setup" &gt;setup&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;5.2&lt;/span&gt; &lt;a href="#1-dot-reverse-functions" &gt;1. reverse functions&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;5.3&lt;/span&gt; &lt;a href="#2-dot-identify-bits" &gt;2. identify bits&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;5.4&lt;/span&gt; &lt;a href="#3-dot-validate-mapping" &gt;3. validate mapping&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;5.5&lt;/span&gt; &lt;a href="#4-dot-decompose-functions" &gt;4. decompose functions&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;6&lt;/span&gt; &lt;a href="#results" &gt;Final results&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;7&lt;/span&gt; &lt;a href="#decode-dimms" &gt;&lt;code&gt;decode-dimms&lt;/code&gt;&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;7.1&lt;/span&gt; &lt;a href="#bank-groups" &gt;Bank groups&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;7.2&lt;/span&gt; &lt;a href="#refresh" &gt;Refresh&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;7.3&lt;/span&gt; &lt;a href="#random-access-throughput" &gt;Random access throughput&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;8&lt;/span&gt; &lt;a href="#cpu-benchmarks" &gt;CPU benchmarks&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;8.1&lt;/span&gt; &lt;a href="#cpu-benchmarks" &gt;cpu-benchmarks&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;8.1.1&lt;/span&gt; &lt;a href="#random-access-throughput-1-dimm" &gt;random access throughput 1 DIMM&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;8.1.2&lt;/span&gt; &lt;a href="#random-access-throughput-2-dimm" &gt;random access throughput 2 DIMM&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;8.2&lt;/span&gt; &lt;a href="#memory-read-experiment" &gt;memory-read-experiment&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;8.2.1&lt;/span&gt; &lt;a href="#strided-reading-1-dimm" &gt;strided reading 1 DIMM&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;8.2.2&lt;/span&gt; &lt;a href="#strided-reading-2-dimm" &gt;strided reading 2 DIMM&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;9&lt;/span&gt; &lt;a href="#tinymembench" &gt;&lt;code&gt;tinymembench&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;10&lt;/span&gt; &lt;a href="#remaining-questions" &gt;Remaining questions&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;!--endtoc--&gt;&#10;&lt;p&gt;These are chronological (and thus, only lightly organized) notes on my attempt to&#10;understand how DDR4 and DDR5 RAM memory work.&lt;/p&gt;</description></item><item><title>Setting up traffic monitoring using GoAccess</title><link>https://curiouscoding.nl/posts/goaccess-setup/</link><pubDate>Sat, 04 Jan 2025 00:00:00 +0100</pubDate><guid>https://curiouscoding.nl/posts/goaccess-setup/</guid><description>&lt;div class="ox-hugo-toc toc has-section-numbers"&gt;&#10;&lt;div class="heading"&gt;Table of Contents&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;1&lt;/span&gt; &lt;a href="#nginx-setup" &gt;Nginx setup&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;2&lt;/span&gt; &lt;a href="#goaccess-configuration" &gt;GoAccess configuration&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;3&lt;/span&gt; &lt;a href="#systemd-setup" &gt;Systemd setup&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;4&lt;/span&gt; &lt;a href="#serving-the-static-file" &gt;Serving the static file&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;5&lt;/span&gt; &lt;a href="#serving-live-statistics" &gt;Serving live statistics&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;span class="section-num"&gt;6&lt;/span&gt; &lt;a href="#geoip-database" &gt;GeoIP database&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;!--endtoc--&gt;&#10;&lt;p&gt;GoAccess (&lt;a href="https://goaccess.io/" class="external-link" target="_blank" rel="noopener"&gt;goaccess.io&lt;/a&gt;, &lt;a href="https://github.com/allinurl/goaccess" class="external-link" target="_blank" rel="noopener"&gt;github&lt;/a&gt;) is a tool that analyses server logs and gives real-time&#10;statistics on network traffic.&#10;It took me some time to figure out exactly how to get the real-time websocket&#10;server working through Nginx, so I&amp;rsquo;m just sharing my configuration here.&lt;/p&gt;&#10;&lt;p&gt;Install via your package manager, e.g. &lt;code&gt;sudo pacman -S goaccess&lt;/code&gt; on Arch.&lt;/p&gt;</description></item><item><title>Detached fullscreen in Sway</title><link>https://curiouscoding.nl/posts/sway-fullscreen/</link><pubDate>Fri, 02 Jul 2021 00:00:00 +0200</pubDate><guid>https://curiouscoding.nl/posts/sway-fullscreen/</guid><description>&lt;p&gt;&lt;strong&gt;Backlinks&lt;/strong&gt;: &lt;a href="https://github.com/swaywm/sway/pull/4255" class="external-link" target="_blank" rel="noopener"&gt;PR for Sway&lt;/a&gt; |&#10;&lt;a href="https://aur.archlinux.org/packages/sway-inhibit-fullscreen-git/" class="external-link" target="_blank" rel="noopener"&gt;AUR&#10;package&lt;/a&gt; &lt;code&gt;sway-inhibit-fullscreen-git&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;Once upon a time, Chromium had a bug where using &lt;code&gt;$mod+f&lt;/code&gt; in i3 to&#10;fullscreen the Chromium window changed the window to occupy the entire&#10;screen, but didn&amp;rsquo;t actually make Chromium enter full screen mode.&#10;According to some, those&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; were&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; the&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt; good&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;&#10;days&lt;sup id="fnref:5"&gt;&lt;a href="#fn:5" class="footnote-ref" role="doc-noteref"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;, &lt;/sup&gt;&lt;sup id="fnref:6"&gt;&lt;a href="#fn:6" class="footnote-ref" role="doc-noteref"&gt;6&lt;/a&gt;&lt;/sup&gt;. Watching 4 YouTube streams in parallel was still&#10;possibly, back in those days:&lt;/p&gt;&#10;&lt;figure class="inset"&gt;&lt;img src="https://curiouscoding.nl/ox-hugo/fullscreen.png"&gt;&#10;&lt;/figure&gt;&#10;&#10;&lt;p&gt;Without patches, the best we can do nowadays&lt;sup id="fnref:7"&gt;&lt;a href="#fn:7" class="footnote-ref" role="doc-noteref"&gt;7&lt;/a&gt;&lt;/sup&gt; is the following&lt;/p&gt;</description></item><item><title>Open source contributions</title><link>https://curiouscoding.nl/posts/oss-contributions/</link><pubDate>Fri, 02 Jul 2021 00:00:00 +0200</pubDate><guid>https://curiouscoding.nl/posts/oss-contributions/</guid><description>&lt;div class="ox-hugo-toc toc"&gt;&#10;&lt;div class="heading"&gt;Table of Contents&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#my-aur-packages" &gt;My aur packages&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#some-issues-i-reported-fixed" &gt;Some issues I reported/fixed&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;!--endtoc--&gt;&#10;&lt;h2 id="my-aur-packages"&gt;&#10; My aur packages&#10; &lt;a class="heading-link" href="#my-aur-packages"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://aur.archlinux.org/packages/?K=rgrootkoerkamp&amp;amp;SeB=m" class="external-link" target="_blank" rel="noopener"&gt;List on aur.archlinux.org&lt;/a&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://aur.archlinux.org/packages/bapctools-git/" class="external-link" target="_blank" rel="noopener"&gt;bapctools-git&lt;/a&gt;:&#10;&lt;a href="https://github.com/RagnarGrootKoerkamp/BAPCtools" class="external-link" target="_blank" rel="noopener"&gt;BAPCtools&lt;/a&gt; is&#10;used for developing ICPC style programming contest problems.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://aur.archlinux.org/packages/feh-preload-next-image-git/" class="external-link" target="_blank" rel="noopener"&gt;feh-preload-next-image-git&lt;/a&gt;:&#10;&lt;a href="https://github.com/RagnarGrootKoerkamp/feh" class="external-link" target="_blank" rel="noopener"&gt;Branch&lt;/a&gt; of Feh that&#10;loads the next image to speed up browsing images in a remote&#10;directory.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://aur.archlinux.org/packages/i3-focus-last-git/" class="external-link" target="_blank" rel="noopener"&gt;i3-focus-last-git&lt;/a&gt;:&#10;&lt;a href="https://github.com/lbonn/i3-focus-last" class="external-link" target="_blank" rel="noopener"&gt;Window switcher&lt;/a&gt; for&#10;i3/sway.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://aur.archlinux.org/packages/python-pyexiftool-nocheck/" class="external-link" target="_blank" rel="noopener"&gt;python-pyexiftool-nocheck&lt;/a&gt;:&#10;the original&#10;&lt;a href="https://aur.archlinux.org/packages/python-pyexiftool/" class="external-link" target="_blank" rel="noopener"&gt;python-pyexiftool&lt;/a&gt;&#10;is outdated, orphaned, and still depends on python2.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://aur.archlinux.org/packages/sway-inhibit-fullscreen-git/" class="external-link" target="_blank" rel="noopener"&gt;sway-inhibit-fullscreen-git&lt;/a&gt;:&#10;Sway&#10;&lt;a href="https://github.com/RagnarGrootKoerkamp/sway/tree/fakefullscreen" class="external-link" target="_blank" rel="noopener"&gt;branch&lt;/a&gt;&#10;that adds the &lt;code&gt;inhibit_fullscreen toggle&lt;/code&gt; command. Bind this to&#10;e.g. &lt;code&gt;$mod+Shift+f&lt;/code&gt; to disconnect the Sway full screen status from the&#10;application full screen status. Used to e.g. watch YouTube videos in&#10;Chromium in full screen mode, but in a window that is only a quarter&#10;of the screen.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="some-issues-i-reported-fixed"&gt;&#10; Some issues I reported/fixed&#10; &lt;a class="heading-link" href="#some-issues-i-reported-fixed"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/philc/vimium/issues/3557" class="external-link" target="_blank" rel="noopener"&gt;vimium/issues/3557&lt;/a&gt;&#10;after searching and hitting Enter, vimium freezes and needs a mouse&#10;click to unfreeze. &lt;code&gt;n&lt;/code&gt; and &lt;code&gt;N&lt;/code&gt; do not work.&#10;&lt;ul&gt;&#10;&lt;li&gt;fix &lt;a href="https://github.com/philc/vimium/pull/3847" class="external-link" target="_blank" rel="noopener"&gt;here&lt;/a&gt;: add a&#10;missing &lt;code&gt;return&lt;/code&gt; statement after many hours of debugging&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/philc/vimium/issues/3844" class="external-link" target="_blank" rel="noopener"&gt;vimium/issues/3844&lt;/a&gt;&#10;Bug: Last characters dropped when using custom search engine&#10;&lt;ul&gt;&#10;&lt;li&gt;duplicate of&#10;&lt;a href="https://github.com/philc/vimium/issues/3567" class="external-link" target="_blank" rel="noopener"&gt;issues/3567&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;PR &lt;a href="https://github.com/philc/vimium/pull/3846" class="external-link" target="_blank" rel="noopener"&gt;pull/3846&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/swaywm/sway/pull/6286" class="external-link" target="_blank" rel="noopener"&gt;sway/pull/6286&lt;/a&gt; Add&#10;&lt;code&gt;anything&lt;/code&gt; option to Grimshot to allow selecting either a window,&#10;output, or manual area.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/emersion/mako/issues/358" class="external-link" target="_blank" rel="noopener"&gt;mako/issues/358&lt;/a&gt;&#10;Feature Request: Dismiss all notifications with given category&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/emersion/slurp/issues/87" class="external-link" target="_blank" rel="noopener"&gt;slurp/issues/87&lt;/a&gt;&#10;Moving the mouse to a different output does not always grey out&#10;rectangles&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/emersion/slurp/issues/86" class="external-link" target="_blank" rel="noopener"&gt;slurp/issues/86&lt;/a&gt;&#10;Clicking outside all rectangles should cancel&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/swaywm/sway/issues/6299" class="external-link" target="_blank" rel="noopener"&gt;sway/issues/6299&lt;/a&gt;&#10;Unexpected &lt;code&gt;next_on_output&lt;/code&gt; behaviour with&#10;&lt;code&gt;workspace_auto_back_and_forth&lt;/code&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;follow-up PRs: &lt;a href="https://github.com/swaywm/sway/pull/6332" class="external-link" target="_blank" rel="noopener"&gt;6332: cleanup&lt;/a&gt;, &lt;a href="https://github.com/swaywm/sway/pull/6334" class="external-link" target="_blank" rel="noopener"&gt;6334: more cleanup&lt;/a&gt;, &lt;a href="https://github.com/swaywm/sway/pull/6335" class="external-link" target="_blank" rel="noopener"&gt;6335: &lt;code&gt;.clang-format&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/signalapp/Signal-Desktop/issues/5307" class="external-link" target="_blank" rel="noopener"&gt;Signal-Desktop/issues/5307&lt;/a&gt; &lt;code&gt;ctrl-2&lt;/code&gt; broken under Wayland&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Powersearch with Vimium</title><link>https://curiouscoding.nl/posts/vimium/</link><pubDate>Fri, 02 Jul 2021 00:00:00 +0200</pubDate><guid>https://curiouscoding.nl/posts/vimium/</guid><description>&lt;p&gt;&lt;strong&gt;Related posts&lt;/strong&gt;: &lt;a href="../dark-mode" &gt;Dark mode with Vimium&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Vimium (&lt;a href="https://github.com/philc/vimium" class="external-link" target="_blank" rel="noopener"&gt;Github&lt;/a&gt;, &lt;a href="https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb" class="external-link" target="_blank" rel="noopener"&gt;Chromium extension&lt;/a&gt;) is not only a great way to navigate webpages; it&amp;rsquo;s also a&#10;great help to quickly search many webpages.&lt;/p&gt;&#10;&lt;p&gt;I am using it many times a day to search for just the documentation I&#10;need. Some of the search engines I have configured:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;span class="lnt"&gt;14&#10;&lt;/span&gt;&lt;span class="lnt"&gt;15&#10;&lt;/span&gt;&lt;span class="lnt"&gt;16&#10;&lt;/span&gt;&lt;span class="lnt"&gt;17&#10;&lt;/span&gt;&lt;span class="lnt"&gt;18&#10;&lt;/span&gt;&lt;span class="lnt"&gt;19&#10;&lt;/span&gt;&lt;span class="lnt"&gt;20&#10;&lt;/span&gt;&lt;span class="lnt"&gt;21&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Documentation&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;archwiki&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://wiki.archlinux.org/index.php?search=%s ArchWiki&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;aur&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://aur.archlinux.org/packages/?K=%s AUR&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;cpp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://en.cppreference.com/mwiki/index.php?search=%s CppReference&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;github&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://github.com/search?q=%s GitHub&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hoogle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://www.haskell.org/hoogle/?hoogle=%s Hoogle&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;oeis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://oeis.org/search?q=%s OEIS&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;python&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://docs.python.org/3.7/search.html?q=%s Python&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;wiki&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://en.wikipedia.org/w/index.php?title=Special:Search&amp;amp;search=%s Wikipedia&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Translation&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;nlen&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://translate.google.nl/#nl/en/%s Dutch -&amp;gt; English&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;ennl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://translate.google.nl/#en/nl/%s English -&amp;gt; Dutch&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;deen&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://translate.google.nl/#de/en/%s German -&amp;gt; English&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;ende&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://translate.google.nl/#en/de/%s English -&amp;gt; German&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Other&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;imdb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://www.imdb.com/find?q=%s IMDB&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# `pe 123` to jump straight to problem 123.&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;pe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://projecteuler.net/problem=%s Project Euler&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kattis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://open.kattis.com/search?q=%s Kattis&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;Any of these can now be activated by typing their shorthand in the&#10;omnibar (which is usually activated by pressing &lt;code&gt;o&lt;/code&gt; or &lt;code&gt;O&lt;/code&gt;). Vimium even&#10;has live preview support for Wikipedia and Google search, as well as&#10;some others.&lt;/p&gt;</description></item><item><title>Wayland utilities</title><link>https://curiouscoding.nl/posts/wayland/</link><pubDate>Fri, 02 Jul 2021 00:00:00 +0200</pubDate><guid>https://curiouscoding.nl/posts/wayland/</guid><description>&lt;p&gt;This post goes over some useful utilities I have been using on my&#10;Wayland system.&lt;/p&gt;&#10;&lt;h2 id="screen-brightness-light"&gt;&#10; Screen brightness: &lt;code&gt;light&lt;/code&gt;&#10; &lt;a class="heading-link" href="#screen-brightness-light"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/haikarainen/light" class="external-link" target="_blank" rel="noopener"&gt;Light&lt;/a&gt; is a nice tool to manage&#10;screen and keyboard brightness.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Install &lt;code&gt;light&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Add your user to the &lt;code&gt;video&lt;/code&gt; group: &lt;code&gt;usermod -aG video &amp;lt;user&amp;gt;&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;I really like the &lt;code&gt;light -T&lt;/code&gt; flag, which multiplies the current&#10;brightness by some value. This way you can have fine grained control&#10;both for very low and very high brightness values. To prevent yourself&#10;from decreasing the brightness all the way to &lt;code&gt;0&lt;/code&gt;, you can run&#10;e.g. &lt;code&gt;light -N 0.2&lt;/code&gt; to set a minimium screen brightness of &lt;code&gt;0.2&lt;/code&gt;. This&#10;value will be stored in your config directory under &lt;code&gt;~/.config/light/&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Browsing in the dark with Vimium and Dark Reader</title><link>https://curiouscoding.nl/posts/dark-mode/</link><pubDate>Thu, 01 Jul 2021 00:00:00 +0200</pubDate><guid>https://curiouscoding.nl/posts/dark-mode/</guid><description>&lt;div class="ox-hugo-toc toc"&gt;&#10;&lt;div class="heading"&gt;Table of Contents&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#chromium-theme" &gt;Chromium theme&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#dark-reader" &gt;Dark Reader&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#vimium" &gt;Vimium&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;!--endtoc--&gt;&#10;&lt;p&gt;Let&amp;rsquo;s quickly go over some settings you can change for a better dark&#10;mode experience in Chromium.&lt;/p&gt;&#10;&lt;h2 id="chromium-theme"&gt;&#10; Chromium theme&#10; &lt;a class="heading-link" href="#chromium-theme"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;First of all, you can make Chromium itself use a dark theme. This will&#10;ensure both a dark tab bar and nice dark settings pages. As explained&#10;&lt;a href="https://askubuntu.com/questions/1159741/enable-dark-mode-on-chromes-internal-pages" class="external-link" target="_blank" rel="noopener"&gt;here&lt;/a&gt;,&#10;you&amp;rsquo;ll need to change the following:&lt;/p&gt;</description></item><item><title>Window switching in Sway</title><link>https://curiouscoding.nl/posts/sway-window-switching/</link><pubDate>Thu, 01 Jul 2021 00:00:00 +0200</pubDate><guid>https://curiouscoding.nl/posts/sway-window-switching/</guid><description>&lt;p&gt;Sway has many commands for switching the active workspace and focused&#10;window. However, I find that most of my window switching comes down to a&#10;few simple commands that focus a specific application, or open it first&#10;when it has no open windows yet. E.g.:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;$mod+s&lt;/code&gt;: open and/or focus slack&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;$mod+i&lt;/code&gt;: open and/or focus signal&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;$mod+m&lt;/code&gt;: open and/or focus emacs&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;$mod+c&lt;/code&gt;: open and/or focus chromium&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;In addition to this, some apps like emacs have a separate &lt;code&gt;$mod+Shift+m&lt;/code&gt;&#10;command that always opens a new window/instance.&lt;/p&gt;</description></item><item><title>Clean your homedir with XDG Base Dir</title><link>https://curiouscoding.nl/posts/xdg-base-dir/</link><pubDate>Wed, 30 Jun 2021 00:00:00 +0200</pubDate><guid>https://curiouscoding.nl/posts/xdg-base-dir/</guid><description>&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;:&#10;&lt;a href="https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html" class="external-link" target="_blank" rel="noopener"&gt;XDG specification&lt;/a&gt; | &lt;a href="https://wiki.archlinux.org/title/XDG_Base_Directory" class="external-link" target="_blank" rel="noopener"&gt;ArchWiki&lt;/a&gt; | &lt;a href="https://www.reddit.com/r/linux/comments/971m0z/im_tired_of_folders_littering_my_home_directory/" class="external-link" target="_blank" rel="noopener"&gt;Reddit post&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;In case you are, like me, tired of applications polluting your homedir&#10;with config and data files, the XDB Base Directory Specification&#10;(&lt;a href="https://wiki.archlinux.org/title/XDG_Base_Directory" class="external-link" target="_blank" rel="noopener"&gt;ArchWiki&lt;/a&gt;) has&#10;your back.&lt;/p&gt;&#10;&lt;p&gt;You probably saw the &lt;code&gt;~/.config&lt;/code&gt; directory already, and in fact, many&#10;programs can be told to use this directory instead of polluting your&#10;homedir. The ArchWiki page has a list of many applications and which&#10;environment variables need to be set to change the location of their&#10;configuration.&lt;/p&gt;</description></item><item><title>Emacs Doom</title><link>https://curiouscoding.nl/posts/emacs/</link><pubDate>Wed, 30 Jun 2021 00:00:00 +0200</pubDate><guid>https://curiouscoding.nl/posts/emacs/</guid><description>&lt;div class="ox-hugo-toc toc"&gt;&#10;&lt;div class="heading"&gt;Table of Contents&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#configuration" &gt;Configuration&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#init.el" &gt;init.el&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#config.el" &gt;config.el&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#running-as-server-and-client" &gt;Running as server and client&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#wayland" &gt;Wayland&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#useful-commands" &gt;Useful commands&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#emacs-as-mail-client" &gt;Emacs as mail client&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;!--endtoc--&gt;&#10;&lt;p&gt;Install Doom Emacs as explained in the&#10;&lt;a href="https://github.com/hlissner/doom-emacs#install" class="external-link" target="_blank" rel="noopener"&gt;readme&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Alongside it, you&amp;rsquo;ll want to install &lt;code&gt;ripgrep&lt;/code&gt; and &lt;code&gt;fd&lt;/code&gt; for better&#10;search integration, and possibly &lt;code&gt;ttf-font-awesome&lt;/code&gt; for better icons.&lt;/p&gt;&#10;&lt;h2 id="configuration"&gt;&#10; Configuration&#10; &lt;a class="heading-link" href="#configuration"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;p&gt;Instead of the default &lt;code&gt;~/emacs.d/&lt;/code&gt; and &lt;code&gt;~/doom.d/&lt;/code&gt; config directories,&#10;you can also use &lt;code&gt;~/.config/emacs/&lt;/code&gt; and &lt;code&gt;~/.config/doom/&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Environment variables done once</title><link>https://curiouscoding.nl/posts/environment-variables/</link><pubDate>Wed, 30 Jun 2021 00:00:00 +0200</pubDate><guid>https://curiouscoding.nl/posts/environment-variables/</guid><description>&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;: &lt;a href="https://github.com/systemd/systemd/issues/7641" class="external-link" target="_blank" rel="noopener"&gt;GitHub issue&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;One problem I had with my Sway setup is that setting environment&#10;variables in my &lt;code&gt;config.fish&lt;/code&gt; (the Fish equivalent to &lt;code&gt;.bashrc&lt;/code&gt; or&#10;&lt;code&gt;.zshrc&lt;/code&gt;) is not always sufficient.&lt;/p&gt;&#10;&lt;p&gt;In particular, I need my environment variables to be available in at&#10;least the following places:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;my Fish shell,&lt;/li&gt;&#10;&lt;li&gt;applications launched from Sway (e.g. using keybindings),&lt;/li&gt;&#10;&lt;li&gt;applications launched as a systemd service (e.g. the Emacs server&#10;daemon).&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Setting variables in the shell profile has the problem that they are not&#10;picked up by systemd services. Another option seems to be&#10;&lt;code&gt;~/.pam_environment&lt;/code&gt;, but this&#10;&lt;a href="https://github.com/linux-pam/linux-pam/commit/ecd526743a27157c5210b0ce9867c43a2fa27784" class="external-link" target="_blank" rel="noopener"&gt;is deprecated&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>X1 Extreme Gen 3 - Migrating to Wayland</title><link>https://curiouscoding.nl/posts/x1e3/</link><pubDate>Sun, 16 May 2021 00:00:00 +0200</pubDate><guid>https://curiouscoding.nl/posts/x1e3/</guid><description>&lt;p&gt;I got a new laptop, so this felt like the right time to migrate to&#10;Wayland.&lt;/p&gt;&#10;&lt;h2 id="delta"&gt;&#10; Delta&#10; &lt;a class="heading-link" href="#delta"&gt;&#10; &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;&#10; &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;&#10; &lt;/a&gt;&#10;&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;what&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;before&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;after&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;&lt;strong&gt;hardware&lt;/strong&gt;&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;laptop&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Asus UX501V&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lenovo X1 Extreme Gen 3&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CPU&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;i7-6700HQ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;i7-10750H&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GPU&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GTX 960M&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;GTX 1650&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RAM&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;16GB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;64GB&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;&lt;strong&gt;OS&lt;/strong&gt;&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;bootloader&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Grub&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;EFISTUB&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;OS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Windows + Arch dualboot&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Windows + Arch dualboot&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;networking&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;netctl&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;systemd-networkd&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;dns/dhcp&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;dhcpcd&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;systemd-resolved&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;wifi&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;wpa_supplicant&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;iwd&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;&lt;strong&gt;Wayland&lt;/strong&gt;&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;display/login manager&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;-&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;-&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;display server&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;X&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Wayland&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;window manager&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;i3&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Sway&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;bar&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;i3blocks&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;waybar&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;backlight&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;xbacklight&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;light&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;night mode&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;redshift&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;gammastep&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;clipboard&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;-&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;wl-clipboard, clipman&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;program launcher&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;rofi&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;rofi [wayland]&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;password finder&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;rofi-pass&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;rofi-pass-git&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;key remapping&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;setxkbmap, xcape, xmodmap&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;interception-tools&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;terminal emulator&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;urxvt&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;foot&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;shell&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;zsh&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;fish&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;shell highlighting&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;zsh-syntax-highlight&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;-&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;environment variables&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;.zshrc&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;environment.d&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;text editor&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;vim&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;emacs doom&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;aur helper&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;packer&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;yay&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;directory usage&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;du&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;dust&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;password manager&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;pass&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;pass&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;search tool&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ag [silver searcher]&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ag + ripgrep + fd&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;file browser&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;terminal&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;terminal + ranger&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;calculator&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;qalc&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;qalc, rofi-calc&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;notification deamon&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;dunst&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;mako&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;image viewer&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;feh&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;feh + sxiv&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;music&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;-&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;spotifyd + spotify-tui + waybar custom/media&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;screenshot&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;teiler+scrot&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;grimshot (from sway) + custom upload wrapper&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;wallpaper&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;feh&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;sway&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;messenger&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;slack, signal-desktop&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;slack, signal-desktop [wayland]&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;system monitor&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;htop&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;htop&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;remote shell&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ssh&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ssh&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;browser&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;chromium&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;chromium&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;pdf viewer&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;zathura&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;zathura&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;vpn&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;-&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;openconnect&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;see also the i3 -&amp;gt; sway &lt;a href="https://github.com/swaywm/sway/wiki/i3-Migration-Guide" class="external-link" target="_blank" rel="noopener"&gt;migration guide&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>