<?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;
 &lt;span class="section-num"&gt;1&lt;/span&gt; File formats
 &lt;a class="heading-link" href="#file-formats"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;This stuff is all insanely confusing. My summary:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;DEFLATE&lt;/dt&gt;
&lt;dd&gt;The &amp;lsquo;original&amp;rsquo; compression method. Works in 32kB blocks, and for
each stores a small header with the compression mode and optional huffman
encoded dictionary. It applies Lempel-Ziv'77 compression of replacing common texts
by back-references. It uses a 32kiB context window for this, which may extend
beyond the start of the block.&lt;/dd&gt;
&lt;dt&gt;zlib&lt;/dt&gt;
&lt;dd&gt;An implementation of DEFLATE. The file format wraps the raw deflate
blocks in a header and footer.&lt;/dd&gt;
&lt;dt&gt;gzip (GNU zip)&lt;/dt&gt;
&lt;dd&gt;Another file format around DEFLATE, consisting of a small header containing
eg the original file name, then a list of DEFLATE blocks, and lastly a CRC32 checksum.&lt;/dd&gt;
&lt;dt&gt;blocked gzip (BGZF, blocked gzip format)&lt;/dt&gt;
&lt;dd&gt;A file format developed for bioinformatics that is
just multiple GZIP files concatenated. This allows faster compression and
decompression by parallellizing over independent blocks, as well as random
access via a small auxiliary index of block starts.
This is backwards compatible with plain gzip.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id="implementations"&gt;
 &lt;span class="section-num"&gt;2&lt;/span&gt; Implementations
 &lt;a class="heading-link" href="#implementations"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;code&gt;zlib&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;The original C library.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;zlib-ng&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;Modern C implementation of zlib using SIMD.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;libz-sys&lt;/code&gt; crate&lt;/dt&gt;
&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;
&lt;dt&gt;&lt;code&gt;zlib-rs&lt;/code&gt; crate&lt;/dt&gt;
&lt;dd&gt;Pure Rust re-implementation.&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;zlib-rs-sys&lt;/code&gt; crate&lt;/dt&gt;
&lt;dd&gt;zlib-compatible C-API to &lt;code&gt;zlib-rs&lt;/code&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;flate2&lt;/code&gt; crate&lt;/dt&gt;
&lt;dd&gt;High level Rust crate with uniform bindings to multiple zlib implementations.&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 id="containers"&gt;
 &lt;span class="section-num"&gt;3&lt;/span&gt; Containers
 &lt;a class="heading-link" href="#containers"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h3&gt;
&lt;figure class="inset large"&gt;&lt;img src="https://curiouscoding.nl/ox-hugo/gzip.svg"
 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;
 &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;
&lt;div class="heading"&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&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;
&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;
&lt;ul&gt;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&lt;/ul&gt;
&lt;/li&gt;
&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;
&lt;li&gt;&lt;span class="section-num"&gt;4&lt;/span&gt; &lt;a href="#sudoku" &gt;Sudoku&lt;/a&gt;
&lt;ul&gt;
&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;
&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;
&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;
&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;
&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;
&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;
&lt;/ul&gt;
&lt;/li&gt;
&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;
&lt;ul&gt;
&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;
&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;
&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;
&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;
&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;
&lt;/ul&gt;
&lt;/li&gt;
&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;
&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;
&lt;ul&gt;
&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;
&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;
&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;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span class="section-num"&gt;8&lt;/span&gt; &lt;a href="#cpu-benchmarks" &gt;CPU benchmarks&lt;/a&gt;
&lt;ul&gt;
&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;
&lt;ul&gt;
&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;
&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;
&lt;/ul&gt;
&lt;/li&gt;
&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;
&lt;ul&gt;
&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;
&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;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&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;
&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;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;p&gt;These are chronological (and thus, only lightly organized) notes on my attempt to
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;
&lt;div class="heading"&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&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;
&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;
&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;
&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;
&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;
&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;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&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
statistics on network traffic.
It took me some time to figure out exactly how to get the real-time websocket
server working through Nginx, so I&amp;rsquo;m just sharing my configuration here.&lt;/p&gt;
&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; |
&lt;a href="https://aur.archlinux.org/packages/sway-inhibit-fullscreen-git/" class="external-link" target="_blank" rel="noopener"&gt;AUR
package&lt;/a&gt; &lt;code&gt;sway-inhibit-fullscreen-git&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Once upon a time, Chromium had a bug where using &lt;code&gt;$mod+f&lt;/code&gt; in i3 to
fullscreen the Chromium window changed the window to occupy the entire
screen, but didn&amp;rsquo;t actually make Chromium enter full screen mode.
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;
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
possibly, back in those days:&lt;/p&gt;
&lt;figure class="inset"&gt;&lt;img src="https://curiouscoding.nl/ox-hugo/fullscreen.png"&gt;
&lt;/figure&gt;

&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;
&lt;div class="heading"&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#my-aur-packages" &gt;My aur packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#some-issues-i-reported-fixed" &gt;Some issues I reported/fixed&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;h2 id="my-aur-packages"&gt;
 My aur packages
 &lt;a class="heading-link" href="#my-aur-packages"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&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;
&lt;ul&gt;
&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;:
&lt;a href="https://github.com/RagnarGrootKoerkamp/BAPCtools" class="external-link" target="_blank" rel="noopener"&gt;BAPCtools&lt;/a&gt; is
used for developing ICPC style programming contest problems.&lt;/li&gt;
&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;:
&lt;a href="https://github.com/RagnarGrootKoerkamp/feh" class="external-link" target="_blank" rel="noopener"&gt;Branch&lt;/a&gt; of Feh that
loads the next image to speed up browsing images in a remote
directory.&lt;/li&gt;
&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;:
&lt;a href="https://github.com/lbonn/i3-focus-last" class="external-link" target="_blank" rel="noopener"&gt;Window switcher&lt;/a&gt; for
i3/sway.&lt;/li&gt;
&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;:
the original
&lt;a href="https://aur.archlinux.org/packages/python-pyexiftool/" class="external-link" target="_blank" rel="noopener"&gt;python-pyexiftool&lt;/a&gt;
is outdated, orphaned, and still depends on python2.&lt;/li&gt;
&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;:
Sway
&lt;a href="https://github.com/RagnarGrootKoerkamp/sway/tree/fakefullscreen" class="external-link" target="_blank" rel="noopener"&gt;branch&lt;/a&gt;
that adds the &lt;code&gt;inhibit_fullscreen toggle&lt;/code&gt; command. Bind this to
e.g. &lt;code&gt;$mod+Shift+f&lt;/code&gt; to disconnect the Sway full screen status from the
application full screen status. Used to e.g. watch YouTube videos in
Chromium in full screen mode, but in a window that is only a quarter
of the screen.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="some-issues-i-reported-fixed"&gt;
 Some issues I reported/fixed
 &lt;a class="heading-link" href="#some-issues-i-reported-fixed"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&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;
after searching and hitting Enter, vimium freezes and needs a mouse
click to unfreeze. &lt;code&gt;n&lt;/code&gt; and &lt;code&gt;N&lt;/code&gt; do not work.
&lt;ul&gt;
&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
missing &lt;code&gt;return&lt;/code&gt; statement after many hours of debugging&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&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;
Bug: Last characters dropped when using custom search engine
&lt;ul&gt;
&lt;li&gt;duplicate of
&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;
&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;
&lt;/ul&gt;
&lt;/li&gt;
&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
&lt;code&gt;anything&lt;/code&gt; option to Grimshot to allow selecting either a window,
output, or manual area.&lt;/li&gt;
&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;
Feature Request: Dismiss all notifications with given category&lt;/li&gt;
&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;
Moving the mouse to a different output does not always grey out
rectangles&lt;/li&gt;
&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;
Clicking outside all rectangles should cancel&lt;/li&gt;
&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;
Unexpected &lt;code&gt;next_on_output&lt;/code&gt; behaviour with
&lt;code&gt;workspace_auto_back_and_forth&lt;/code&gt;
&lt;ul&gt;
&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;
&lt;/ul&gt;
&lt;/li&gt;
&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;
&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;
&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
great help to quickly search many webpages.&lt;/p&gt;
&lt;p&gt;I am using it many times a day to search for just the documentation I
need. Some of the search engines I have configured:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&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;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&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;
&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;
&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;
&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;
&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;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&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;
&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;
&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;
&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;
&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;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Any of these can now be activated by typing their shorthand in the
omnibar (which is usually activated by pressing &lt;code&gt;o&lt;/code&gt; or &lt;code&gt;O&lt;/code&gt;). Vimium even
has live preview support for Wikipedia and Google search, as well as
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
Wayland system.&lt;/p&gt;
&lt;h2 id="screen-brightness-light"&gt;
 Screen brightness: &lt;code&gt;light&lt;/code&gt;
 &lt;a class="heading-link" href="#screen-brightness-light"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&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
screen and keyboard brightness.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install &lt;code&gt;light&lt;/code&gt;&lt;/li&gt;
&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;
&lt;/ul&gt;
&lt;p&gt;I really like the &lt;code&gt;light -T&lt;/code&gt; flag, which multiplies the current
brightness by some value. This way you can have fine grained control
both for very low and very high brightness values. To prevent yourself
from decreasing the brightness all the way to &lt;code&gt;0&lt;/code&gt;, you can run
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
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;
&lt;div class="heading"&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#chromium-theme" &gt;Chromium theme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#dark-reader" &gt;Dark Reader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#vimium" &gt;Vimium&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;p&gt;Let&amp;rsquo;s quickly go over some settings you can change for a better dark
mode experience in Chromium.&lt;/p&gt;
&lt;h2 id="chromium-theme"&gt;
 Chromium theme
 &lt;a class="heading-link" href="#chromium-theme"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;First of all, you can make Chromium itself use a dark theme. This will
ensure both a dark tab bar and nice dark settings pages. As explained
&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;,
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
window. However, I find that most of my window switching comes down to a
few simple commands that focus a specific application, or open it first
when it has no open windows yet. E.g.:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$mod+s&lt;/code&gt;: open and/or focus slack&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$mod+i&lt;/code&gt;: open and/or focus signal&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$mod+m&lt;/code&gt;: open and/or focus emacs&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$mod+c&lt;/code&gt;: open and/or focus chromium&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition to this, some apps like emacs have a separate &lt;code&gt;$mod+Shift+m&lt;/code&gt;
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;:
&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;
&lt;p&gt;In case you are, like me, tired of applications polluting your homedir
with config and data files, the XDB Base Directory Specification
(&lt;a href="https://wiki.archlinux.org/title/XDG_Base_Directory" class="external-link" target="_blank" rel="noopener"&gt;ArchWiki&lt;/a&gt;) has
your back.&lt;/p&gt;
&lt;p&gt;You probably saw the &lt;code&gt;~/.config&lt;/code&gt; directory already, and in fact, many
programs can be told to use this directory instead of polluting your
homedir. The ArchWiki page has a list of many applications and which
environment variables need to be set to change the location of their
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;
&lt;div class="heading"&gt;Table of Contents&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#configuration" &gt;Configuration&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#init.el" &gt;init.el&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#config.el" &gt;config.el&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#running-as-server-and-client" &gt;Running as server and client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#wayland" &gt;Wayland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#useful-commands" &gt;Useful commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#emacs-as-mail-client" &gt;Emacs as mail client&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;!--endtoc--&gt;
&lt;p&gt;Install Doom Emacs as explained in the
&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;
&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
search integration, and possibly &lt;code&gt;ttf-font-awesome&lt;/code&gt; for better icons.&lt;/p&gt;
&lt;h2 id="configuration"&gt;
 Configuration
 &lt;a class="heading-link" href="#configuration"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&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,
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;
&lt;p&gt;One problem I had with my Sway setup is that setting environment
variables in my &lt;code&gt;config.fish&lt;/code&gt; (the Fish equivalent to &lt;code&gt;.bashrc&lt;/code&gt; or
&lt;code&gt;.zshrc&lt;/code&gt;) is not always sufficient.&lt;/p&gt;
&lt;p&gt;In particular, I need my environment variables to be available in at
least the following places:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;my Fish shell,&lt;/li&gt;
&lt;li&gt;applications launched from Sway (e.g. using keybindings),&lt;/li&gt;
&lt;li&gt;applications launched as a systemd service (e.g. the Emacs server
daemon).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Setting variables in the shell profile has the problem that they are not
picked up by systemd services. Another option seems to be
&lt;code&gt;~/.pam_environment&lt;/code&gt;, but this
&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
Wayland.&lt;/p&gt;
&lt;h2 id="delta"&gt;
 Delta
 &lt;a class="heading-link" href="#delta"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;what&lt;/th&gt;
 &lt;th&gt;before&lt;/th&gt;
 &lt;th&gt;after&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;&lt;strong&gt;hardware&lt;/strong&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;laptop&lt;/td&gt;
 &lt;td&gt;Asus UX501V&lt;/td&gt;
 &lt;td&gt;Lenovo X1 Extreme Gen 3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CPU&lt;/td&gt;
 &lt;td&gt;i7-6700HQ&lt;/td&gt;
 &lt;td&gt;i7-10750H&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;GPU&lt;/td&gt;
 &lt;td&gt;GTX 960M&lt;/td&gt;
 &lt;td&gt;GTX 1650&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;RAM&lt;/td&gt;
 &lt;td&gt;16GB&lt;/td&gt;
 &lt;td&gt;64GB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;&lt;strong&gt;OS&lt;/strong&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;bootloader&lt;/td&gt;
 &lt;td&gt;Grub&lt;/td&gt;
 &lt;td&gt;EFISTUB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;OS&lt;/td&gt;
 &lt;td&gt;Windows + Arch dualboot&lt;/td&gt;
 &lt;td&gt;Windows + Arch dualboot&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;networking&lt;/td&gt;
 &lt;td&gt;netctl&lt;/td&gt;
 &lt;td&gt;systemd-networkd&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;dns/dhcp&lt;/td&gt;
 &lt;td&gt;dhcpcd&lt;/td&gt;
 &lt;td&gt;systemd-resolved&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;wifi&lt;/td&gt;
 &lt;td&gt;wpa_supplicant&lt;/td&gt;
 &lt;td&gt;iwd&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;&lt;strong&gt;Wayland&lt;/strong&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;display/login manager&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;display server&lt;/td&gt;
 &lt;td&gt;X&lt;/td&gt;
 &lt;td&gt;Wayland&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;window manager&lt;/td&gt;
 &lt;td&gt;i3&lt;/td&gt;
 &lt;td&gt;Sway&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;bar&lt;/td&gt;
 &lt;td&gt;i3blocks&lt;/td&gt;
 &lt;td&gt;waybar&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;backlight&lt;/td&gt;
 &lt;td&gt;xbacklight&lt;/td&gt;
 &lt;td&gt;light&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;night mode&lt;/td&gt;
 &lt;td&gt;redshift&lt;/td&gt;
 &lt;td&gt;gammastep&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;clipboard&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;wl-clipboard, clipman&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;program launcher&lt;/td&gt;
 &lt;td&gt;rofi&lt;/td&gt;
 &lt;td&gt;rofi [wayland]&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;password finder&lt;/td&gt;
 &lt;td&gt;rofi-pass&lt;/td&gt;
 &lt;td&gt;rofi-pass-git&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;key remapping&lt;/td&gt;
 &lt;td&gt;setxkbmap, xcape, xmodmap&lt;/td&gt;
 &lt;td&gt;interception-tools&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;terminal emulator&lt;/td&gt;
 &lt;td&gt;urxvt&lt;/td&gt;
 &lt;td&gt;foot&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;shell&lt;/td&gt;
 &lt;td&gt;zsh&lt;/td&gt;
 &lt;td&gt;fish&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;shell highlighting&lt;/td&gt;
 &lt;td&gt;zsh-syntax-highlight&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;environment variables&lt;/td&gt;
 &lt;td&gt;.zshrc&lt;/td&gt;
 &lt;td&gt;environment.d&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;text editor&lt;/td&gt;
 &lt;td&gt;vim&lt;/td&gt;
 &lt;td&gt;emacs doom&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;aur helper&lt;/td&gt;
 &lt;td&gt;packer&lt;/td&gt;
 &lt;td&gt;yay&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;directory usage&lt;/td&gt;
 &lt;td&gt;du&lt;/td&gt;
 &lt;td&gt;dust&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;password manager&lt;/td&gt;
 &lt;td&gt;pass&lt;/td&gt;
 &lt;td&gt;pass&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;search tool&lt;/td&gt;
 &lt;td&gt;ag [silver searcher]&lt;/td&gt;
 &lt;td&gt;ag + ripgrep + fd&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;file browser&lt;/td&gt;
 &lt;td&gt;terminal&lt;/td&gt;
 &lt;td&gt;terminal + ranger&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;calculator&lt;/td&gt;
 &lt;td&gt;qalc&lt;/td&gt;
 &lt;td&gt;qalc, rofi-calc&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;notification deamon&lt;/td&gt;
 &lt;td&gt;dunst&lt;/td&gt;
 &lt;td&gt;mako&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;image viewer&lt;/td&gt;
 &lt;td&gt;feh&lt;/td&gt;
 &lt;td&gt;feh + sxiv&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;music&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;spotifyd + spotify-tui + waybar custom/media&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;screenshot&lt;/td&gt;
 &lt;td&gt;teiler+scrot&lt;/td&gt;
 &lt;td&gt;grimshot (from sway) + custom upload wrapper&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;wallpaper&lt;/td&gt;
 &lt;td&gt;feh&lt;/td&gt;
 &lt;td&gt;sway&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;messenger&lt;/td&gt;
 &lt;td&gt;slack, signal-desktop&lt;/td&gt;
 &lt;td&gt;slack, signal-desktop [wayland]&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;system monitor&lt;/td&gt;
 &lt;td&gt;htop&lt;/td&gt;
 &lt;td&gt;htop&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;remote shell&lt;/td&gt;
 &lt;td&gt;ssh&lt;/td&gt;
 &lt;td&gt;ssh&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;browser&lt;/td&gt;
 &lt;td&gt;chromium&lt;/td&gt;
 &lt;td&gt;chromium&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;pdf viewer&lt;/td&gt;
 &lt;td&gt;zathura&lt;/td&gt;
 &lt;td&gt;zathura&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;vpn&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;openconnect&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&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>