aboutsummaryrefslogtreecommitdiff
path: root/articles/2025
diff options
context:
space:
mode:
Diffstat (limited to 'articles/2025')
-rwxr-xr-xarticles/2025/A-fledgling-bash-function-library.html33
-rwxr-xr-xarticles/2025/AC7260-wifi-card-on-Thinkpad-X220.html36
-rwxr-xr-xarticles/2025/Amazon-playing-silly-buggers.html39
-rwxr-xr-xarticles/2025/Anacron-on-Artix.html93
-rwxr-xr-xarticles/2025/Annoying-touchpad.html35
-rwxr-xr-xarticles/2025/Archwiki-on-my-laptop.html38
-rwxr-xr-xarticles/2025/Back-to-the-future.html37
-rwxr-xr-xarticles/2025/Bash-prompt-without-scripts.html37
-rwxr-xr-xarticles/2025/Betterfox.html28
-rwxr-xr-xarticles/2025/Blog-scripts.html44
-rwxr-xr-xarticles/2025/Bringing-back-the-fun.html34
-rwxr-xr-xarticles/2025/Browser-choices.html45
-rwxr-xr-xarticles/2025/Carbide-tools-for-wood-turning.html45
-rwxr-xr-xarticles/2025/Chaotic-Aur.html43
-rwxr-xr-xarticles/2025/Closing-laptop-lid-without-suspend.html44
-rwxr-xr-xarticles/2025/Cpu-scaling-governors-on-Thinkpax-X220.html31
-rwxr-xr-xarticles/2025/DNS4U-European-DNS-servers-go-live.html35
-rwxr-xr-xarticles/2025/DWM-Dunst-and-Thinkpad-audio-keys.html113
-rwxr-xr-xarticles/2025/DWM-circulate-through-tags.html196
-rwxr-xr-xarticles/2025/DWM-slstatus.html46
-rwxr-xr-xarticles/2025/Daft-poems.html34
-rwxr-xr-xarticles/2025/Debian-12-to-13-upgrade.html32
-rwxr-xr-xarticles/2025/Detrumpez-vous.html34
-rwxr-xr-xarticles/2025/Dmenu-updates.html46
-rwxr-xr-xarticles/2025/Dwmblocks.html38
-rwxr-xr-xarticles/2025/Enable-Arch-Extra-repository-in-Artix.html49
-rwxr-xr-xarticles/2025/Eza.html32
-rwxr-xr-xarticles/2025/Fixing-my-dad's-Stanley-8-CFW-lock-plane.html38
-rwxr-xr-xarticles/2025/Flowers-for-the-bees.html35
-rwxr-xr-xarticles/2025/France-rejects-backdoors.html26
-rwxr-xr-xarticles/2025/Ghostty.html35
-rwxr-xr-xarticles/2025/Git-repository.html32
-rwxr-xr-xarticles/2025/Gopher-it.html34
-rwxr-xr-xarticles/2025/Greycoders-list-of-Text-only-minimalist-web-sites.html26
-rwxr-xr-xarticles/2025/Hard-disk-fail.html28
-rwxr-xr-xarticles/2025/Headless-Arch-Install.html40
-rwxr-xr-xarticles/2025/Html-center-element.html42
-rwxr-xr-xarticles/2025/Install-the-Chawan-text-browser-on-Artix.html42
-rwxr-xr-xarticles/2025/Jazz-radio-recording-from-1976.html47
-rwxr-xr-xarticles/2025/Koreader-for-e-ink-devices.html32
-rwxr-xr-xarticles/2025/Ladybird-web-browser.html35
-rwxr-xr-xarticles/2025/Les-Oiseaux-des-Jardins.html32
-rwxr-xr-xarticles/2025/Linux-System-Performance-Tuning.html27
-rwxr-xr-xarticles/2025/Linux-power-consumption-control.html35
-rwxr-xr-xarticles/2025/Lynx,-Gopher,-and-video-files.html102
-rwxr-xr-xarticles/2025/Mailcow-Docker-too-many-requests.html38
-rwxr-xr-xarticles/2025/Mailcow-with-Nginx-reverse-proxy-(updated).html31
-rwxr-xr-xarticles/2025/Mailcow-with-Nginx-reverse-proxy.html207
-rwxr-xr-xarticles/2025/Menu-editor-for-XFCE4.html26
-rwxr-xr-xarticles/2025/Microphone-distortion-on-Thinkpad-X220.html38
-rwxr-xr-xarticles/2025/Modified-dwm-bar-battery-script.html80
-rwxr-xr-xarticles/2025/My-gopher-site.html35
-rwxr-xr-xarticles/2025/Naked-DWM.html101
-rwxr-xr-xarticles/2025/Neomutt-as-default-in-XFCE4.html47
-rwxr-xr-xarticles/2025/New-builds-of-dwm-and-st.html35
-rwxr-xr-xarticles/2025/Newsboat-and-gopher-RSS-feeds.html36
-rwxr-xr-xarticles/2025/Oddly-useful-Linux-tools.html50
-rwxr-xr-xarticles/2025/Pipewire.html62
-rwxr-xr-xarticles/2025/Power-notifications.html31
-rwxr-xr-xarticles/2025/Powerline-Bash.html27
-rwxr-xr-xarticles/2025/RSS-feeds-that-don't-suck-on-terminals.html83
-rwxr-xr-xarticles/2025/Reducing-web-font-size.html39
-rwxr-xr-xarticles/2025/Replace-sudo-with-doas-on-Artix.html92
-rwxr-xr-xarticles/2025/Rsync-backup-to-Synology-Diskstation.html46
-rwxr-xr-xarticles/2025/Screen-scaling-with-xrandr.html44
-rwxr-xr-xarticles/2025/Shellcheck-your-bash-scripts.html36
-rwxr-xr-xarticles/2025/Simplex-a-decentralised-private-messenger.html29
-rwxr-xr-xarticles/2025/Slim-fork-login-manager.html35
-rwxr-xr-xarticles/2025/Slstatus-date-with-alternative-locale.html59
-rwxr-xr-xarticles/2025/Starship-prompt.html34
-rwxr-xr-xarticles/2025/Stick-it-to-the-man.html36
-rwxr-xr-xarticles/2025/TLP-recalibration-error-on-Thinkpad-X220.html29
-rwxr-xr-xarticles/2025/Taking-the-leap-to-Artix.html45
-rwxr-xr-xarticles/2025/Terminal-Trove.html29
-rwxr-xr-xarticles/2025/The-Mote-in-God's-eye.html36
-rwxr-xr-xarticles/2025/The-last-thing-the-EU-needs-....html31
-rwxr-xr-xarticles/2025/The-universe-is-spinning.html55
-rwxr-xr-xarticles/2025/Thinkpad-T430-screen-upgrade.html33
-rwxr-xr-xarticles/2025/Thinkpad-X220-Fan-control.html30
-rwxr-xr-xarticles/2025/Thinkvantage-button-in-DWM.html41
-rwxr-xr-xarticles/2025/Thoughts-on-suckless.html46
-rwxr-xr-xarticles/2025/Thoughts-on-zsh.html40
-rwxr-xr-xarticles/2025/Toggle-screen-resolution-in-DWM.html35
-rwxr-xr-xarticles/2025/Touchpad-deactivation.html58
-rwxr-xr-xarticles/2025/Traditional-screenshot-of-my-X220.html28
-rwxr-xr-xarticles/2025/Try-different-versions-of-Linux-online.html33
-rwxr-xr-xarticles/2025/Updated-cgit-server.html35
-rwxr-xr-xarticles/2025/Upload-modified-blog-files-with-scp.html65
-rwxr-xr-xarticles/2025/Using-Goaccess-to-view-web-stats.html32
-rwxr-xr-xarticles/2025/VPS-management.html33
-rwxr-xr-xarticles/2025/What-to-do-with-an-unused-Kindle.html33
-rwxr-xr-xarticles/2025/Why-does-everything-feel-so-boring-now.html48
-rwxr-xr-xarticles/2025/Wifi-region.html33
-rwxr-xr-xarticles/2025/Window-manager-thoughts.html47
-rwxr-xr-xarticles/2025/Workshop-Air-Cleaner.html29
-rwxr-xr-xarticles/2025/X220-internal-Bluetooth-controller.html38
-rwxr-xr-xarticles/2025/Xlibre-on-my-X220.html34
-rwxr-xr-xarticles/2025/dwm-windowmanager-1.html46
-rwxr-xr-xarticles/2025/dwm-windowmanager-2.html64
-rwxr-xr-xarticles/2025/dwmblocks-with-emoji-icons.html50
100 files changed, 4538 insertions, 0 deletions
diff --git a/articles/2025/A-fledgling-bash-function-library.html b/articles/2025/A-fledgling-bash-function-library.html
new file mode 100755
index 0000000..d59d1d0
--- /dev/null
+++ b/articles/2025/A-fledgling-bash-function-library.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>A fledgling bash function library</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>A fledgling bash function library</h2>
+<h3>2025-05-16</h3>
+<h4>Messing with bash functions</h4>
+<p>I needed a function for writing colour text, so I thought why not start a library
+and learn some bash scripting? Anyway, it's up on my git repository.</p>
+<p><a href="https://git.wittamore.fr/bashlib/about/">Bashlib git repository</a></p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/AC7260-wifi-card-on-Thinkpad-X220.html b/articles/2025/AC7260-wifi-card-on-Thinkpad-X220.html
new file mode 100755
index 0000000..0d6475a
--- /dev/null
+++ b/articles/2025/AC7260-wifi-card-on-Thinkpad-X220.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>AC7260 wifi card on Thinkpad X220</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>AC7260 wifi/bluetooth card on Thinkpad X220</h2>
+<h3>2025-04-05</h3>
+<h4>Easy card replacement</h4>
+<img width="20%" src="/images/ac-7620-spot.png" alt="ac7260 card">
+<p>I had previously <a href="https://www.bios-mods.com/forum/showthread.php?pid=141098#pid141098">upgraded the bios</a>
+on this machine so I could whitelist future hardware.</p>
+<p>The new card was easy to install: remove the keyboard by unscrewing 2 screws under the RAM trapdoor</p>
+<p>Carefully remove the keyboard by sliding it towards the screen to uncover the lower tabs and unplug it,
+then remove the screws holding the palmrest and remove the palmrest carefully unplugging it.</p>
+<p>The wifi card socket is on the right next to the M2 ssd socket</p>
+<p>I removed pin 51 on the AC7620 with a dremel rather than using tape. Pin 51 is used to activate or deactivate certain card functions,
+including Bluetooth, and can be problematic on certain thinkpads. I did the same for my T430.</p>
+<p>See also <a href="/articles/2025/X220-internal-Bluetooth-controller.html">Deactivating the X220 internal Bluetooth controller</a></p>
+
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Amazon-playing-silly-buggers.html b/articles/2025/Amazon-playing-silly-buggers.html
new file mode 100755
index 0000000..a4ca86f
--- /dev/null
+++ b/articles/2025/Amazon-playing-silly-buggers.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Amazon playing silly buggers</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Amazon playing silly buggers</h2>
+<h3>2025-03-21</h3>
+<h4>I've dropped my Kindle for a Kobo</h4>
+<p><img src="/images/kobo-clara-colour.png"></p>
+<p>I downloaded all my purchased books, around 500, before Amazon terminated the possibility. Even though it says "purchase" on their site in reality they are now selling you a license, and only allowing books to be read on Kindles.<p>
+<p>Enough of this.</p>
+<p>Using Calibre I created a library that can be read on any ebook reader, and purchased a Kobo Clara colour.<p>
+<p>Now I'm as happy as a pig in muck. Oh and Amazon, I won't be buying books from you any more. There's more than enough alternative sources.</p>
+<p>** I love Glynn Stewarts science fiction stories, but most of his work is
+published on Amazon. The solution was simple, I subscribed to Glynn's Patreon account and
+receive advanced copies of his books that I can read on any reader.</p>
+<p><a href="https://www.patreon.com/glynnstewart">https://www.patreon.com/glynnstewart</a></p>
+<p>That said, I've read nearly all of Michael Connelly's books but some of
+his ebooks on Google or Kobo are country restricted. For example I' unable to purchase the
+full series of the Jack Macevoy series because I'm in France. WTF? All this
+does is tell me to get a book from another author. Get a clue guys!</p>
+
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Anacron-on-Artix.html b/articles/2025/Anacron-on-Artix.html
new file mode 100755
index 0000000..624a53a
--- /dev/null
+++ b/articles/2025/Anacron-on-Artix.html
@@ -0,0 +1,93 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Anacron on Artix</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Anacron on Artix</h2>
+<h3>2025-06-16</h3>
+<h4>On Arch Anacron is a systemd process</h4>
+<p>Anacron ensures cron scripts are run on machines that are frequently powered off</p>
+<p>On Artix it can be run via cron (cronie)</p>
+
+<h3>The /etc/crontab file</h3>
+
+<code># /etc/crontab: configuration file for cron
+# See cron(8) and crontab(5) for details.
+# m h dom mon dow user command
+
+SHELL=/bin/bash
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+MAILTO=root
+HOME=/
+
+# run-parts
+# (also runs the 0anacron script every hour)
+12 * * * * root run-parts /etc/cron.hourly
+22 10 * * * root run-parts /etc/cron.daily
+32 10 * * 0 root run-parts /etc/cron.weekly
+42 10 1 * * root run-parts /etc/cron.monthly
+</code>
+
+<h3>The /etc/cron.hourly/0anacron script</h3>
+
+<code>#!/bin/sh
+# Check whether 0anacron was run today already
+if test -r /var/spool/anacron/cron.daily; then
+day=`cat /var/spool/anacron/cron.daily`
+fi
+if [ `date +%Y%m%d` = "$day" ]; then
+exit 0;
+fi
+
+# Do not run jobs when on battery power
+if test -x /usr/bin/on_ac_power; then
+/usr/bin/on_ac_power >/dev/null 2>&1
+if test $? -eq 1; then
+exit 0
+fi
+fi
+/usr/sbin/anacron -s
+</code>
+
+<h3>The /etc/anacrontab file</h3>
+
+<code># /etc/anacrontab: configuration file for anacron
+
+# See anacron(8) and anacrontab(5) for details.
+
+SHELL=/bin/sh
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+MAILTO=root
+# the maximal random delay added to the base delay of the jobs
+RANDOM_DELAY=45
+# the jobs will be started during the following hours only
+START_HOURS_RANGE=3-22
+
+#period in days delay in minutes job-identifier command
+1 5 cron.daily nice run-parts /etc/cron.daily
+7 25 cron.weekly nice run-parts /etc/cron.weekly
+@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
+</code>
+
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Annoying-touchpad.html b/articles/2025/Annoying-touchpad.html
new file mode 100755
index 0000000..e4f784c
--- /dev/null
+++ b/articles/2025/Annoying-touchpad.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Annoying touchpad</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Annoying touchpad</h2>
+<h3>2025-04-28</h3>
+<h4>My palm keeps hitting the trackpad</h4>
+<p>So I deactivated it. Got a red touchpoint for that!</p>
+<pre>
+sudo pacman -S xf86-input-synaptics
+synclient TouchpadOff=1
+</pre>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Archwiki-on-my-laptop.html b/articles/2025/Archwiki-on-my-laptop.html
new file mode 100755
index 0000000..bb91166
--- /dev/null
+++ b/articles/2025/Archwiki-on-my-laptop.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Archwiki on my laptop</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Archwiki on my laptop</h2>
+<h3>2025-05-15</h3>
+<h4>Wikiman enables you to peruse wiki's on your computer</h4>
+<pre>
+pacman -S wikiman
+pacman -S arch-wiki-docs
+cp /etc/wikiman.conf ~/.config/wikiman/
+</pre>
+<p>edit ~/.config/wikiman/wikiman.config to your liking. I use the chawan browser instead of w3m for example.</p>
+<p><a href="https://github.com/filiparag/wikiman">git page for Wikiman</a></p>
+<p>Note: wikiman can be used in the TTY which can be a life saver if you have borked your installation.</p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Back-to-the-future.html b/articles/2025/Back-to-the-future.html
new file mode 100755
index 0000000..54908c1
--- /dev/null
+++ b/articles/2025/Back-to-the-future.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Back to the future</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Back to the future</h2>
+<h3>2025-04-25</h3>
+<h4>4 years afterwards</h4>
+<p>Back in <a href="https://wittamore.fr/articles/2021/Pyradio.html">2001</a> I was using Pyradio with Cava on Manjaro with i3</p>
+<p>Today I'm using the same apps on Arch Linux with DWM</p>
+<p>Not quite sure if I'm going backwards or forwards...</p>
+<img src="/images/blog/pyradio-again.png" alt="pyradio screenshot">
+<h3>Pyradio-m3u</h3>
+<p>Here's a handy app that fills pyradio with a few thousand stations</p>
+<p><a href="https://www.rahuljuliato.com/posts/pyradio-m3u">pyradio-m3u</a></p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Bash-prompt-without-scripts.html b/articles/2025/Bash-prompt-without-scripts.html
new file mode 100755
index 0000000..cf6c42c
--- /dev/null
+++ b/articles/2025/Bash-prompt-without-scripts.html
@@ -0,0 +1,37 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Bash prompt without scripts</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Bash prompt without scripts</h2>
+<h3>2025-05-06</h3>
+<h4>A pretty prompt in one line of my .bashrc</h4>
+<p>I tried several bash prompt scripts but returned to just having a single line in my .bashrc</p>
+<pre>
+export PS1='\[\e[30;102m\] \A \[\e[92;103m\]\[\e[30m\] \u@\h \[\e[93;107m\]\[\e[30m\] \w \[\e[0;97m\]\n\[\e[0m\]\$ '
+</pre>
+<p><a href="https://bash-prompt-generator.org/">This site is a great generator</a></p>
+<p>I used the base 16 colour palette so that it ends up displayed using the Pywal16 terminal palette.</p>
+<p><img src="/images/blog/bash-prompt-pywal.png"></p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Betterfox.html b/articles/2025/Betterfox.html
new file mode 100755
index 0000000..cf9985c
--- /dev/null
+++ b/articles/2025/Betterfox.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Betterfox</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Betterfox</h2>
+<h3>2025-03-22</h3>
+<h4>With all the hoohaa around Firefox wanting your data I started using Floorp instead.</h4>
+<p>But there is hope. Betterfox makes your Firefox safer and faster by modifying user.js</p>
+<p>There's a lot of super interesting information on the site too.</p>
+<p><a href="https://github.com/yokoffing/BetterFox">BetterFox</a></p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Blog-scripts.html b/articles/2025/Blog-scripts.html
new file mode 100755
index 0000000..9c418a8
--- /dev/null
+++ b/articles/2025/Blog-scripts.html
@@ -0,0 +1,44 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Blog scripts</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Blog scripts</h2>
+<h3>2025-05-13</h3>
+<h4>My simple blog scripts</h4>
+<p>I've added my blog scripts to the git server just in case someone
+needs a quick simple blog like this one.</p>
+<p>Blog articles are simply html, the site structure is on your computer
+and there are a couple of Bash scripts to manage it:</p>
+<ul>
+<li><b>blogthis</b> builds an articles header and footer, opens the editor</li>
+<li><b>blogsend</b> uses ssh to upload all recently added or modified files</li>
+<li><b>Blogrss</b> builds/updates the rss feed</li>
+<li><b>Blogsitemap</b> builds/updates the sitemap</li>
+</ul>
+<p>Note that these Bash scripts rely on your having set up ssh correctly to allow
+you to ssh to your web server without entering a password.</p>
+<p>The articles are listed by three php files that include a search form.</p>
+<p><a href="https://git.wittamore.fr/blog/about/">get the files here</a></p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Bringing-back-the-fun.html b/articles/2025/Bringing-back-the-fun.html
new file mode 100755
index 0000000..5cd95de
--- /dev/null
+++ b/articles/2025/Bringing-back-the-fun.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Bringing back the fun</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Bringing back the fun</h2>
+<h3>2025-04-23</h3>
+<h4>I installed xscreensaver and it's cool</h4>
+<p>Many years ago my window managers were FVWM and Windowmaker, and they were a great deal of fun.</p>
+<p>Installing DWM is a breath of fresh air, giving me a bit of nostalgia for the good old days.<p>
+<p>I'm trying to not fall into the trap of patching DWM to death and adding useless bling, just keeping it simple.</p>
+<p>However, today I installed xscreensaver and my screen lit up reminding me that like the indie web, older stuff can be fun.</p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Browser-choices.html b/articles/2025/Browser-choices.html
new file mode 100755
index 0000000..d8b483a
--- /dev/null
+++ b/articles/2025/Browser-choices.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Browser choices</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Browser choices</h2>
+<h3>2025-04-02</h3>
+<h4>Browser, browser, on the wall, who is the fairest of them all?</h4>
+<p>Here's my totally not objective shortlist to date</p>
+<ul>
+<li>Firefox - doing stupid things for money</li>
+<li>Floorp - so many options I wound up not using</li>
+<li><b>Chawan - works great with Ghostty, Neomutt & Newsboat</b></li>
+<li>W3M - best of the text browsers after Chawan</li>
+<li>Lynx - borks on ipv6</li>
+<li>Dillo - fast and simple, too simple?</li>
+<li><b>Librewolf - a lean secure Firefox</b></li>
+<li>Waterfox - yeah but Librefox is leaner</li>
+<li>Mullvad - nice and secure, I don't need a VPN though, yet</li>
+<li>Otter - nice but crashed</li>
+<li>Qutebrowser - yet another barrel of keystrokes to learn</li>
+<li>Nyx - yet another barrel of keystrokes to learn</li>
+<li>Chrome - google's squirmy tentacles, no thanks</li>
+<li>Chromium - I just use it for Jitsi</li>
+<li>Brave - crypto what?</li>
+<li>Vivaldi - ok but it didn't hook me</li>
+<li>Edge - vade retro satana</li>
+</ul>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Carbide-tools-for-wood-turning.html b/articles/2025/Carbide-tools-for-wood-turning.html
new file mode 100755
index 0000000..09ea597
--- /dev/null
+++ b/articles/2025/Carbide-tools-for-wood-turning.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Carbide tools for wood turning</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Carbide tools for wood turning</h2>
+<h3>2025-09-07</h3>
+<h4>Making my own tools</h4>
+<p><img src="/images/blog/carbide-tools.jpg" alt="image"></p>
+<p>I obtained some HRC61~63 steel rods and made my own carbide wood turning tools.</p>
+<p>As the rods are 12mm with a round profile instead of square, presentation of the carbide cutters at various angles, not just 90° is enabled.
+My thinking was that I needed some beefy handles to provide leverage and facilitate control..</p>
+<p>The handles are made of Ash, and came from the winter woodpile. A more noble end than being thrown in the woodburner.</p>
+<p>First impressions are good, specially the round cutter. It looks like these tools are shapers, and position themselves between
+the roughing gouge and finition.</p>
+<p>Note that you'll need a hss+cobalt drill bit to make a hole in the hardened steel shafts.</p>
+<p>Shafts: <a href="https://www.amazon.fr/-/en/Linear-Shaft-Horizontal-Precision-Bearing/dp/B0D2KZXJ2K">Linear bearing shafts, 12mm x 600mm</a></p>
+<p>Carbide inserts:<br><a href="https://www.amazon.fr/-/en/dp/B09NKT95TX">15mm round</a><br>
+<a href="https://www.amazon.fr/-/en/dp/B09K7JB21W?th=1">15mm square</a></p>
+<p>I might get some diamond shaped carbide cutters too, but I have some home made hss tools that do roughly the same job.</p>
+<p>See <a href="/articles/2024/Another-Oland-tool.html">here</a> and <a href="https://wittamore.fr/sticky/woodworking/oland-tools.html">here</a>
+for more of my home made lathe tools</p>
+<p>#woodturning #tools #homemade</p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Chaotic-Aur.html b/articles/2025/Chaotic-Aur.html
new file mode 100755
index 0000000..44e7ad1
--- /dev/null
+++ b/articles/2025/Chaotic-Aur.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Chaotic Aur</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Chaotic Aur</h2>
+<h3>2025-03-23</h3>
+<h4>Chaotic Aur is an automated building repo for AUR packages</h4>
+<p>Retrieve the primary key to enable the installation of our keyring and mirror list</p>
+<code>sudo pacman-key --recv-key 3056513887B78AEB --keyserver keyserver.ubuntu.com
+sudo pacman-key --lsign-key 3056513887B78AEB
+</code>
+<p>Install the chaotic-keyring and chaotic-mirrorlist packages</p>
+<code>sudo pacman -U 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-keyring.pkg.tar.zst'
+sudo pacman -U 'https://cdn-mirror.chaotic.cx/chaotic-aur/chaotic-mirrorlist.pkg.tar.zst'
+</code>
+<p>Append (adding at the end) the following to /etc/pacman.conf</p>
+<code>[chaotic-aur]
+Include = /etc/pacman.d/chaotic-mirrorlist
+</code>
+
+<p>Run a full system update along syncing the mirrorlist</p>
+<code>sudo pacman -Syu</code>
+
+<p>The repository is ready to use! 🚀</p>
+<code>sudo pacman -S firedragon</code>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Closing-laptop-lid-without-suspend.html b/articles/2025/Closing-laptop-lid-without-suspend.html
new file mode 100755
index 0000000..5890d25
--- /dev/null
+++ b/articles/2025/Closing-laptop-lid-without-suspend.html
@@ -0,0 +1,44 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Closing laptop lid without suspend</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Closing laptop lid without suspend</h2>
+<h3>2025-07-04</h3>
+<h4>Looking into using a laptop as a home server</h4>
+<p>Since I've got a fibre connection I've been musing about not paying for a VPS and using a home server instead.</p>
+<p>I have an unused laptop that could fit the bill maybe. The advantage of a laptop is that 1) I have one and 2) No need for
+a ups or screen.</p>
+<p>I'm not really sure that I'll build a home server like this, but I'm collecting info.</p>
+<p>One of the things I was wondering is how to stop a laptop from entering suspend when the lid is closed. I found a
+comment on unixstackexchange that explains how to do it on a non-systemd installation. (and a systemd one too but who cares about that?)</p>
+<p>Find the path of the lid switch:</p>
+<code>cat /proc/acpi/wakeup</code>
+<p>Find the line for the lid and enter the command to deactivate it, for example:</p>
+<code>echo 'PNP0C0D:00' | sudo tee /sys/bus/acpi/drivers/button/unbind</code>
+<p>If it works, you can add the above line to /etc/rc.local to make it permanent.</p>
+<p><a href="https://unix.stackexchange.com/questions/706471/linux-cli-disable-sleep-when-laptop-lid-closed">Original comment</a></p>
+<p>On systemd installations, edit /etc/systemd/logind.conf and uncomment the following line: HandleLidSwitch=ignore.</p>
+
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Cpu-scaling-governors-on-Thinkpax-X220.html b/articles/2025/Cpu-scaling-governors-on-Thinkpax-X220.html
new file mode 100755
index 0000000..72ce067
--- /dev/null
+++ b/articles/2025/Cpu-scaling-governors-on-Thinkpax-X220.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Cpu scaling governors on Thinkpax X220</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Cpu scaling governors on Thinkpad X220</h2>
+<h3>2025-03-26</h3>
+<h4>There are only two CPU scaling governors on my Thinkpad X220</h4>
+<p>Powersave, and Performance</p>
+<p>Attempting to use any other in tlpui will not give the desired results</p>
+<p>Check available govenors:</p>
+<code>cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors</code>
+<p>See also: <a href="http://wittamore.fr/articles/2025/Linux-power-consumption-control.html">Linux
+power consumption control</a></p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/DNS4U-European-DNS-servers-go-live.html b/articles/2025/DNS4U-European-DNS-servers-go-live.html
new file mode 100755
index 0000000..442985e
--- /dev/null
+++ b/articles/2025/DNS4U-European-DNS-servers-go-live.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>DNS4U European DNS servers go live</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>DNS4U European DNS servers go live</h2>
+<h3>2025-06-16</h3>
+<h4>The EU now has an alternative to Google and Cloudflare DNS</h4>
+<p><a href="https://www.joindns4.eu/learn/dns4eu-public-service-launched">JopinDNS launched</a></p>
+<p><a href="https://www.joindns4.eu/for-public">JoinDNS for public</a></p>
+<p>The offers are Unfiltered resolution, Protective resolution, Protective with Child Protection,
+Protective with Ad blocking, Protective with Child protection and Ad blocking</p>
+
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/DWM-Dunst-and-Thinkpad-audio-keys.html b/articles/2025/DWM-Dunst-and-Thinkpad-audio-keys.html
new file mode 100755
index 0000000..ee184b8
--- /dev/null
+++ b/articles/2025/DWM-Dunst-and-Thinkpad-audio-keys.html
@@ -0,0 +1,113 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>DWM Dunst and Thinkpad audio keys</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>DWM Dunst and Thinkpad audio keys</h2>
+<h3>2025-04-24</h3>
+<h4>How I got them working, microphone mute led included</h4>
+<p>DWM isn't a desktop environment, so there are a few things to add, like notifications and
+audio keys.</p>
+<p>I installed dunst and acpid. Dunst is managed by systemd, if you edit ~/.config/dunst/dunstrc
+restart dunst with <b>systemctl --user restart dunst.service</b></p>
+<p><a href="https://github.com/dunst-project/dunst">Dunst web page</a></p>
+<p><a href="https://wiki.archlinux.org/title/Acpid">Acpid Arch page</a></p>
+
+
+<h4>dwm/config.h</h4>
+<p>The audio keys are registered in <b>dwm/config.h</b>
+<pre>
+...
+{ 0, XF86XK_AudioMicMute, spawn, SHCMD("~/.local/bin/dwm-audio mictoggle") },
+{ 0, XF86XK_AudioMute, spawn, SHCMD("~/.local/bin/dwm-audio voltoggle") },
+{ 0, XF86XK_AudioLowerVolume, spawn, SHCMD("~/.local/bin/dwm-audio volquieter") },
+{ 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("~/.local/bin/dwm-audio vollouder") },
+...
+</pre>
+
+<h4>~/.local/bin/dwm-audio</h4>
+<p>The audio keys run a bash script which sets volume, speaker mute, and microphone mute.</p>
+<pre>
+#!/bin/bash
+# Manage Thinkpad Audio keys
+
+msgTag="Audio"
+
+# Microphone
+if [[ "$@" == "mictoggle" ]]; then
+ pamixer --default-source -t
+ micmute="$(pamixer --default-source --get-mute)"
+ if [[ "$micmute" == "true" ]]; then
+ # Mic muted notification
+ dunstify -t 1000 -a "Microphone" -u low -i audio-input-microphone \
+ -h string:x-dunst-stack-tag:$msgTag "Microphone muted"
+ else
+ # Mic unmuted notification
+ dunstify -t 1000 -a "Microphone" -u low -i audio-input-microphone \
+ -h string:x-dunst-stack-tag:$msgTag "Microphone unmuted"
+ fi
+ exit 0
+fi
+
+# Speakers
+if [[ "$@" == "voltoggle" ]]; then
+ pamixer --toggle-mute
+elif [[ "$@" == "vollouder" ]]; then
+ pamixer -i 10
+elif [[ "$@" == "volquieter" ]]; then
+ pamixer -d 10
+fi
+
+volume="$(pamixer --get-volume-human)"
+mute="$(pamixer --get-mute)"
+if [[ $volume == 0 || "$mute" == "true" ]]; then
+ # Sound muted notification
+ dunstify -t 1000 -a "changeVolume" -u low -i audio-speakers \
+ -h string:x-dunst-stack-tag:$msgTag "Volume muted"
+else
+ # Volume notification
+ dunstify -t 1000 -a "changeVolume" -u low -i audio-speakers \
+ -h string:x-dunst-stack-tag:$msgTag -h int:value:"$volume" "Volume: ${volume}"
+fi
+</pre>
+
+<h4>Microphone mute led</h4>
+<p>I'm running Arch Linux on a Thinkpad X220, so I need to make the mic/mute button's led
+lights up when muted. This can't be done with normal user permissions, so I installed acpid.
+On Arch linux all acpi events are passed to <b>/etc/acpi/handler.sh</b>, so I added another
+function to this file.
+</p>
+<pre>
+...
+button/micmute)
+ if [[ "$(cat /sys/devices/platform/thinkpad_acpi/leds/platform\:\:micmute/brightness)" == "1" ]]; then
+ echo "0" > /sys/devices/platform/thinkpad_acpi/leds/platform\:\:micmute/brightness
+ else
+ echo "1" > /sys/devices/platform/thinkpad_acpi/leds/platform\:\:micmute/brightness
+ fi
+;;
+...
+</pre>
+
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/DWM-circulate-through-tags.html b/articles/2025/DWM-circulate-through-tags.html
new file mode 100755
index 0000000..c80535f
--- /dev/null
+++ b/articles/2025/DWM-circulate-through-tags.html
@@ -0,0 +1,196 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>DWM circulate through tags</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>DWM circulate through tags</h2>
+<h3>2025-05-07</h3>
+<h4>Small modifications to DWM source code so far.</h4>
+<p><i>This is intended for my own records, I don't use git yet, perhaps I should look into it.</i></p>
+<p>I haven't added any patches to my dwm 6.5 source code, but I have modified dwm.c to enable circulating through tags,
+and edited config.h to play nicely with Pywal16 and my French keyboard.</p>
+<p>Super+Shift+Left/Right keys circulate through tags<br/>
+Super+left/Right keys circulate through windows in a tag.</p>
+<h4>dwm.c</h4>
+<p>I added this at line 235</p>
+<pre>
+static void view_adjacent(const Arg *arg);
+</pre>
+<p>I added this function at line 2067</p>
+<pre>
+void
+view(const Arg *arg)
+{
+ if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
+ return;
+ selmon->seltags ^= 1; /* toggle sel tagset */
+ if (arg->ui & TAGMASK)
+ selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
+ focus(NULL);
+ arrange(selmon);
+}
+</pre>
+<h4>config.h</h4>
+<p>Here is my modified config.h</p>
+<pre>
+/* See LICENSE file for copyright and license details. */
+#include <X11/XF86keysym.h>
+
+/* appearance */
+static const unsigned int borderpx = 1; /* border pixel of windows */
+static const unsigned int snap = 32; /* snap pixel */
+static const int showbar = 1; /* 0 means no bar */
+static const int topbar = 1; /* 0 means bottom bar */
+static const char *fonts[] = { "JetBrainsMono Nerd Font Mono:size=11" };
+static const char dmenufont[] = "JetBrainsMono Nerd Font Mono:size=11";
+
+/* Pywal16 */
+#include "/home/philip/.cache/wal/colors-wal-dwm.h"
+
+/* tagging */
+static const char *tags[] = { "Ⅰ" ,"Ⅱ", "Ⅲ", "Ⅳ"}; //, "5", "6", "7", "8", "9" };
+
+static const Rule rules[] = {
+ /* xprop(1):
+ * WM_CLASS(STRING) = instance, class
+ * WM_NAME(STRING) = title
+ */
+ /* class instance title tags mask isfloating monitor */
+ { "ghostty", NULL, NULL, 1 << 0, 0, -1 },
+ { "librewolf", NULL, NULL, 1 << 1, 0, -1 },
+ { "Chromium", NULL, NULL, 1 << 1, 0, -1 },
+ { "Gimp", NULL, NULL, 1 << 2, 1, -1 },
+ { "gThumb", NULL, NULL, 1 << 2, 1, -1 },
+ { "Galculator", NULL, NULL, 1 << 8, 1, -1 },
+};
+
+/* layout(s) */
+static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
+static const int nmaster = 1; /* number of clients in master area */
+static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */
+static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
+
+static const Layout layouts[] = {
+ /* symbol arrange function */
+ { "Ƭ", tile }, /* first entry is default */
+ { "Φ", NULL }, /* no layout function means floating behavior */
+ { "µ", monocle }, /* everything is maximised */
+};
+
+/* key definitions */
+/* modifiers are ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask and Mod5Mask */
+#define MODKEY Mod4Mask
+#define TAGKEYS(KEY,TAG) \
+ { MODKEY, KEY, view, {.ui = 1 << TAG} }, \
+ { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \
+ { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \
+ { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} },
+
+/* helper for spawning shell commands in the pre dwm-5.0 fashion */
+#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
+
+/* commands */
+static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
+static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", norm_bg, "-nf", norm_fg, "-sb", sel_bg, "-sf", sel_fg, NULL };
+static const char *termcmd[] = { "ghostty", NULL };
+static const char *wwwcmd[] = { "librewolf", NULL };
+static const char *brighter[] = { "brightnessctl", "set", "10%+", NULL };
+static const char *dimmer[] = { "brightnessctl", "set", "10%-", NULL };
+static const char *bluetooth[] = { "blueman-manager", NULL };
+static const char *scrotcmd[] = { "screenshot.sh", NULL};
+
+static const Key keys[] = {
+ /* modifier key function argument */
+ { 0, XF86XK_AudioMute, spawn, SHCMD("~/.local/bin/dwm-audio voltoggle") },
+ { 0, XF86XK_AudioLowerVolume, spawn, SHCMD("~/.local/bin/dwm-audio volquieter") },
+ { 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("~/.local/bin/dwm-audio vollouder") },
+ { 0, XF86XK_AudioMicMute, spawn, SHCMD("~/.local/bin/dwm-audio mictoggle") },
+ { 0, XF86XK_MonBrightnessDown, spawn, {.v = dimmer } },
+ { 0, XF86XK_MonBrightnessUp, spawn, {.v = brighter } },
+ { 0, XF86XK_Launch1, spawn, SHCMD("rofi -show power-menu -modi power-menu:rofi-power-menu") },
+ { 0, XK_Menu, spawn, SHCMD("rofi -show power-menu -modi power-menu:rofi-power-menu") },
+ { 0, XK_Print, spawn, {.v = scrotcmd } },
+ { MODKEY, XK_b, togglebar, {0} },
+ { MODKEY, XK_d, incnmaster, {.i = -1 } },
+ { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
+ { MODKEY, XK_h, setmfact, {.f = -0.05} },
+ { MODKEY, XK_i, incnmaster, {.i = +1 } },
+ { MODKEY, XK_l, setmfact, {.f = +0.05} },
+ { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
+ { MODKEY, XK_r, spawn, SHCMD("rofi -show run") },
+ { MODKEY, XK_p, spawn, {.v = dmenucmd } },
+ { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
+ { MODKEY, XK_w, spawn, {.v = wwwcmd } },
+ { MODKEY, XK_Return, spawn, {.v = termcmd } },
+ { MODKEY, XK_Right, focusstack, {.i = +1 } },
+ { MODKEY, XK_Left, focusstack, {.i = -1 } },
+ { MODKEY, XK_Tab, view, {0} },
+ { MODKEY, XK_space, setlayout, {0} },
+ { MODKEY, XK_agrave, view, {.ui = ~0 } },
+ { MODKEY, XK_comma, focusmon, {.i = -1 } },
+ { MODKEY, XK_semicolon, focusmon, {.i = +1 } },
+ { MODKEY|ShiftMask, XK_b, spawn, {.v = bluetooth } },
+ { MODKEY|ShiftMask, XK_c, killclient, {0} },
+ { MODKEY|ShiftMask, XK_Right, view_adjacent, {.i = +1 } },
+ { MODKEY|ShiftMask, XK_Left, view_adjacent, {.i = -1 } },
+ { MODKEY|ShiftMask, XK_Return, zoom, {0} },
+ { MODKEY|ShiftMask, XK_space, togglefloating, {0} },
+ { MODKEY|ShiftMask, XK_agrave, tag, {.ui = ~0 } },
+ { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },
+ { MODKEY|ShiftMask, XK_semicolon, tagmon, {.i = +1 } },
+ { MODKEY|ShiftMask, XK_q, quit, {0} },
+ { MODKEY|ShiftMask, XK_x, spawn, SHCMD("rofi -show power-menu -modi power-menu:rofi-power-menu") },
+ TAGKEYS( XK_ampersand, 0)
+ TAGKEYS( XK_eacute, 1)
+ TAGKEYS( XK_quotedbl, 2)
+ TAGKEYS( XK_apostrophe, 3)
+ TAGKEYS( XK_parenleft, 4)
+ TAGKEYS( XK_minus, 5)
+ TAGKEYS( XK_egrave, 6)
+ TAGKEYS( XK_underscore, 7)
+ TAGKEYS( XK_ccedilla, 8)
+ TAGKEYS( XK_agrave, 9)
+};
+
+/* button definitions */
+/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */
+static const Button buttons[] = {
+ /* click event mask button function argument */
+ { ClkLtSymbol, 0, Button1, setlayout, {0} },
+ { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} },
+ { ClkWinTitle, 0, Button2, zoom, {0} },
+ { ClkStatusText, 0, Button2, spawn, {.v = termcmd } },
+ { ClkClientWin, MODKEY, Button1, movemouse, {0} },
+ { ClkClientWin, MODKEY, Button2, togglefloating, {0} },
+ { ClkClientWin, MODKEY, Button3, resizemouse, {0} },
+ { ClkTagBar, 0, Button1, view, {0} },
+ { ClkTagBar, 0, Button3, toggleview, {0} },
+ { ClkTagBar, MODKEY, Button1, tag, {0} },
+ { ClkTagBar, MODKEY, Button3, toggletag, {0} },
+ { ClkTagBar, 0, Button4, view_adjacent, {.i = -1 } },
+ { ClkTagBar, 0, Button5, view_adjacent, {.i = +1 } },
+};
+
+</pre>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/DWM-slstatus.html b/articles/2025/DWM-slstatus.html
new file mode 100755
index 0000000..7ebef78
--- /dev/null
+++ b/articles/2025/DWM-slstatus.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>DWM slstatus</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>DWM slstatus</h2>
+<h3>2025-04-25</h3>
+<h4>KISS</h4>
+<p><img src="/images/blog/slstatus.png" alt="slstatus bar image"></p>
+<p><a href="https://tools.suckless.org/slstatus/">https://tools.suckless.org/slstatus/</a></p>
+<p>After fiddling with dwm-blocks and dwm-bar, I decided that the only thing I want to see
+in my status bar is battery info and date/time. The rest can be done with btop and alerts.</p>
+<p>So I cloned the slstatus source code from suckless.org and added the following in slstatus/config.h</p>
+<pre>
+static const struct arg args[] = {
+ /* function format argument */
+ { battery_remaining, "%s", "BAT0" },
+ { battery_state, " %s", "BAT0" },
+ { battery_perc, " %s%%", "BAT0" },
+ { datetime, " | %s", "%a %d-%m %T" },
+};
+</pre>
+<p>As I'm using the Jetbrains mono nerdfont in DWM I added some icons in slstatus/components/battery.c</p>
+<p><img src="/images/blog/battery.c.png" alt="battery code"></p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Daft-poems.html b/articles/2025/Daft-poems.html
new file mode 100755
index 0000000..a4b1e93
--- /dev/null
+++ b/articles/2025/Daft-poems.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Poems</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Poems</h2>
+<h3>2025-08-22</h3>
+<h4>Playing with words</h4>
+
+<p><a href="https://git.wittamore.fr/poetry/tree/">Some poems</a></p>
+
+<p>No pretention here, just learning. Let me know if I should keep my day job :-)</p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Debian-12-to-13-upgrade.html b/articles/2025/Debian-12-to-13-upgrade.html
new file mode 100755
index 0000000..3fddef5
--- /dev/null
+++ b/articles/2025/Debian-12-to-13-upgrade.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Debian 12 to 13 upgrade</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Debian 12 to 13 upgrade</h2>
+<h3>2025-08-27</h3>
+<h4>Server upgrade successful</h4>
+<p>I have upgraded my server to the latest Debian version, Trixie (13) without problem.</p>
+<p>Mailcow have posted some simple steps to follow <a href="https://mailcow.email/posts/2025/upgrade-deb12-to-deb13/">here</a></p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Detrumpez-vous.html b/articles/2025/Detrumpez-vous.html
new file mode 100755
index 0000000..f967557
--- /dev/null
+++ b/articles/2025/Detrumpez-vous.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Détrumpez-vous</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Detrumpify</h2>
+<h3>2025-05-03</h3>
+<h4>Technology against politics</h4>
+<p>An interesting addition for smartphone driven boycotts</p>
+<p><a href="https://detrumpez-vous.com/">Web site</a></p>
+<p>Détrumpez-vous is an app for iPhone and Android that signals products that are of American origin.</p>
+<p>I'm going to test this on my weekly shopping.</p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Dmenu-updates.html b/articles/2025/Dmenu-updates.html
new file mode 100755
index 0000000..4eba85d
--- /dev/null
+++ b/articles/2025/Dmenu-updates.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Dmenu updates</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Dmenu updates</h2>
+<h3>2025-06-16</h3>
+<h4>more patches added to dmenu</h4>
+<p>I've updated my dmenu fork, it now has the following patches:</p>
+
+<ul>
+ <li>xresources</li>
+ <li>center</li>
+ <li>border</li>
+ <li>xyz</li>
+ <li>fuzzymatch</li>
+ <li>fuzzyhighlight</li>
+ <li>mouse and motions support</li>
+</ul>
+
+<p>I've also tweaked the patches to work with xresources.</p>
+
+<p><a href="https://git.wittamore.fr/dmenu/about/?h=master">my dmenu git repository</a></p>
+
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Dwmblocks.html b/articles/2025/Dwmblocks.html
new file mode 100755
index 0000000..1c2d2d8
--- /dev/null
+++ b/articles/2025/Dwmblocks.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Dwmblocks</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Dwmblocks</h2>
+<h3>2025-06-02</h3>
+<h4>eating previous thoughts</h4>
+<p>I wanted to keep my status bar simple, and slstatus fitted the bill</p>
+<p>But I was missing an indication of the CPU temperature as I got tired of using conky
+as it was only visible on empty DWM tags, and I didn't want to try writing a program in C to do it.</p>
+<p>So a new status monitor was needed. I liked the idea of dwmblocks firing up bash scripts,
+but I tried the original and several forks without luck. I finally settled on
+dwmblocks-async, because it is more recent and ... it worked.</p>
+<p><a href="https://github.com/UtkarshVerma/dwmblocks-async">Dwmblocks-async</a></p>
+<p><a href="https://git.wittamore.fr/scripts/tree/pw-date">An example script</a></p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Enable-Arch-Extra-repository-in-Artix.html b/articles/2025/Enable-Arch-Extra-repository-in-Artix.html
new file mode 100755
index 0000000..44fc86e
--- /dev/null
+++ b/articles/2025/Enable-Arch-Extra-repository-in-Artix.html
@@ -0,0 +1,49 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Enable Arch Extra repository in Artix</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Enable Arch Extra repository in Artix</h2>
+<h3>2025-06-20</h3>
+<h4>Extending Artix package library</h4>
+<p>Artix Linux is mostly Arch Linux, minus systemd of course, and plus packages that
+replace it's absence.</p>
+<p>In order to access packages that may not be available via Artix, it's possible to add
+the Arch Linux Extra Mirror.</p>
+
+<code>pacman -S artix-archlinux-support
+wget https://archlinux.org/mirrorlist/all/ -O /etc/pacman.d/mirrorlist-arch
+</code>
+
+<p>Edit /etc/pacman.conf and activate the mirror.</p>
+
+<code>[extra]
+Include = /etc/pacman.d/mirrorlist-arch</code>
+
+<p>Populate the Arch Linux keyring and synchronize the repository</p>
+
+<code>pacman-key --populate archlinux
+pacman -Syu
+</code>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Eza.html b/articles/2025/Eza.html
new file mode 100755
index 0000000..8709fb3
--- /dev/null
+++ b/articles/2025/Eza.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Eza</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Eza</h2>
+<h3>2025-03-24</h3>
+<h4>Eza is a replacement for ls that uses symbols that are found in nerdfonts</h4>
+<p><img src="/images/blog/eza.png"></p>
+<p>I edited my .bashrc to alias ls to eza like so:</p>
+<code>alias ls="eza --icons=always"
+alias ll="eza --icons=always -l"
+alias la="eza --icons=always -la"
+</code>
+<p>Pretty</p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Fixing-my-dad's-Stanley-8-CFW-lock-plane.html b/articles/2025/Fixing-my-dad's-Stanley-8-CFW-lock-plane.html
new file mode 100755
index 0000000..4e5f9e6
--- /dev/null
+++ b/articles/2025/Fixing-my-dad's-Stanley-8-CFW-lock-plane.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Fixing my dad's Stanley 8 CFW lock plane</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Fixing my dad's Stanley 8 CFW lock plane</h2>
+<h3>2025-08-27</h3>
+<h4>Cast iron fixes</h4>
+<p>I inherited a small low angle block plane from my dad.</p>
+<p>Nice looking with brass buttons, but upon inspection the blade wasn't straight.
+I removed it and checked, it was square and just needed sharpening, but when I looked at the cast iron base,
+the seat of the blade at throat level was thicker on one side, making it impossible to align.</p>
+<p>The sides were also both slightly more that 90° which didn't help.</p>
+<p>The easiest solution was to remove the adjustable front throat and reform the blade seat with a file.</p>
+<p>It worked, and after flattening the foot of the plane and sides using sandpaper on a granit slab,
+ then sharpening the blade I now have a very nice block plane.</p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Flowers-for-the-bees.html b/articles/2025/Flowers-for-the-bees.html
new file mode 100755
index 0000000..daf0327
--- /dev/null
+++ b/articles/2025/Flowers-for-the-bees.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Flowers for the bees</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Flowers for the bees</h2>
+<h3>2025-04-12</h3>
+<h4>I sowed some flower seeds</h4>
+<p>I wouldn't mind having half the garden for wild flowers, although I'm not
+sure what the maintenance would be like, there's a lot of native flora that is
+a pain here in Brittany.</p>
+<p>Anyway I sowed a small patch to see what happens, a trial run. I'm sure the bees
+will appreciate.</p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/France-rejects-backdoors.html b/articles/2025/France-rejects-backdoors.html
new file mode 100755
index 0000000..36488fd
--- /dev/null
+++ b/articles/2025/France-rejects-backdoors.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>France rejects backdoors</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>France rejects backdoors</h2>
+<h3>2025-03-22</h3>
+<h4>It's always a warm fuzzy feeling when we do something smart</h4>
+<p><a href="https://www.eff.org/deeplinks/2025/03/win-encryption-france-rejects-backdoor-mandate">eff.org</a></p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Ghostty.html b/articles/2025/Ghostty.html
new file mode 100755
index 0000000..cf55cc9
--- /dev/null
+++ b/articles/2025/Ghostty.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Ghostty</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Ghostty</h2>
+<h3>2025-03-27</h3>
+<h4>I've been playing with Ghostty, a new terminal emulator that seems very promising</h4>
+<p><img width="50%" src="/images/blog/ghostty.gif"></p>
+<p>Here's <a href="https://newsboat.org/">Newsboat</a> opening an article with <a href="https://sr.ht/~bptato/chawan/">Chawan</a> inside <a href="https://ghostty.org/"">Ghostty</a>:</p>
+<p><img src="/images/blog/chawan-ghostty.png" alt="news article in chawan"></p>
+<h4>Tips</h4>
+<p>When I ssh into a vps I found some keys where not working in mc (midnight commander). The solution was to edit ~/.ssh/config and add:</p>
+<p><code>Host *
+ setenv Term=xterm-256color</code></p>
+<h4>Ressources</h4>
+<p><a href="https://ghostty.org/">Ghostty</a></p>
+<p><a href="https://github.com/fearlessgeekmedia/awesome-ghostty">Awasome Ghostty</a></p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Git-repository.html b/articles/2025/Git-repository.html
new file mode 100755
index 0000000..ccb829a
--- /dev/null
+++ b/articles/2025/Git-repository.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Git repository</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Git repository</h2>
+<h3>2025-05-07</h3>
+<h4>I've added a git repository</h4>
+<p>Nothing much there yet, but I've got cgit running...</p>
+<p><a href="https://git.wittamore.fr">https://git.wittamore.fr</a></p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Gopher-it.html b/articles/2025/Gopher-it.html
new file mode 100755
index 0000000..04ea5cb
--- /dev/null
+++ b/articles/2025/Gopher-it.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Gopher it</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Gopher it</h2>
+<h3>2025-09-14</h3>
+<h4>My Gopher hole</h4>
+<p>After all I've said against Gopher and Gemini, I've started my own Gopher hole.</p>
+<p>Just proves humans are fickle and you shouldn't listen to my rants and I'm an incorrigible fiddler.</p>
+<p>You'll need a gopher browser such as <a href="https://gmi.skyjake.fi/lagrange/">Lagrange (GUI)</a> or
+<a href="https://lynx.browser.org/">Lynx (TUI)</a> for this link: <a href="gopher://nagatha.fr">gopher://nagatha.fr</p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Greycoders-list-of-Text-only-minimalist-web-sites.html b/articles/2025/Greycoders-list-of-Text-only-minimalist-web-sites.html
new file mode 100755
index 0000000..70a68c7
--- /dev/null
+++ b/articles/2025/Greycoders-list-of-Text-only-minimalist-web-sites.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Greycoders list of Text only minimalist web sites</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Greycoders list of minimalist web sites 2025</h2>
+<h3>2025-04-03</h3>
+<h4>Avoiding web pages filled with ads, videos, and bandwidth-heavy content</h4>
+<p><a href="https://greycoder.com/a-list-of-text-only-new-sites/">https://greycoder.com</a></p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Hard-disk-fail.html b/articles/2025/Hard-disk-fail.html
new file mode 100755
index 0000000..7e341c2
--- /dev/null
+++ b/articles/2025/Hard-disk-fail.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Hard disk fai</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Hard disk fail</h2>
+<h3>2025-03-19</h3>
+<h4>The hard disk on my X220 failed</h4>
+<p>and my backup machine was in an unstable state for a while and I hadn't fixed it. Examination of my collection of USB keys found no linux installer, so I was stumped through lazyness.</p>
+<p>But at the bottom of a pencil holder I found another usb key with an old copy of Linux Mint which enabled me to download Arch and recover.</p>
+<p>Luckily all my inportant files were saved, and I use Bitwarden too, so with a new SSD I was quickly back up and running.</p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Headless-Arch-Install.html b/articles/2025/Headless-Arch-Install.html
new file mode 100755
index 0000000..8852691
--- /dev/null
+++ b/articles/2025/Headless-Arch-Install.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Headless Arch Install</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Headless Arch Install</h2>
+<h3>2025-03-21</h3>
+<h4>I have a micro pc I'd like to use as a web server</h4>
+<p>It doesn't have a screen so I'll need to do a headless installation</p>
+<p>I found some simple instructions here: <a href="https://tarneo.fr/posts/arch_headless/">https://tarneo.fr/posts/arch_headless/</a></p>
+<br>
+<code>sudo pacman -S archiso
+mkdir arch-headless && cd arch-headless
+cp -r /usr/share/archiso/configs/releng/ .
+mkdir releng/airootfs/root/.ssh/
+cp ~/.ssh/id_rsa.pub releng/airootfs/root/.ssh/authorized_keys
+sudo mkarchiso -v -o ./out ./releng
+</code>
+Insert a usb key, mine is in /dev/sdc, and create a bootable usb drive
+<code>dd if=./out/archlinux-2025.03.21-x86_64.iso of=/dev/sdc bs=4M; sync</code>
+<br>
+<p>Find the IP address of the machine, and ssh to it. You can then run
+archinstall for example.</p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Html-center-element.html b/articles/2025/Html-center-element.html
new file mode 100755
index 0000000..50cdf83
--- /dev/null
+++ b/articles/2025/Html-center-element.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Html center element</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Html center element</h2>
+<h3>2025-04-10</h3>
+<h4>Making things simpler still</h4>
+<p>The <b>center</b> element in html is depreciated, and validation of the page shows warnings.
+Instead the use of the css style <b>text-align:center</b> is precognised.</p>
+<p>But this is ignored in terminal text browsers, and I prefer some sort of consistency, so I've removed center elements and text-align css.
+The page itself is centered setting margins. Chawan gives the best rendering on the terminal, here I'm using Ghostty.</p>
+<h3>Librefox</h3>
+<p><img style="border: 1px solid gray" width="60%" src="/images/blog/librefox-wittamore-1.png" alt="image of blog in Librefox"></p>
+<h3>Chawan (terminal)</h3>
+<p><img style="border: 1px solid gray" width="60%" src="/images/blog/cha-wittamore-1.png" alt="image of blog in Chawan"></p>
+<h3>W3M (terminal)</h3>
+<p><img style="border: 1px solid gray" width="60%" src="/images/blog/w3m-wittamore-1.png" alt="image of blog in W3M"></p>
+<h3>Links (terminal)</h3>
+<p><img style="border: 1px solid gray" width="60%" src="/images/blog/links-wittamore-1.png" alt="image of blog in Links"></p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Install-the-Chawan-text-browser-on-Artix.html b/articles/2025/Install-the-Chawan-text-browser-on-Artix.html
new file mode 100755
index 0000000..0136bb9
--- /dev/null
+++ b/articles/2025/Install-the-Chawan-text-browser-on-Artix.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Install the Chawan text browser on Artix</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Install the Chawan text browser on Artix</h2>
+<h3>2025-06-15</h3>
+<h4>the Arch package doesn't compile, here's the solution</h4>
+<p>The package chawan-git in the AUR doesn't compile as the included NIM version is too old</p>
+<p>Here's how I installed it in <a href="https://artixlinux.org/">Artix Linux</a></p>
+<p>Install the NIM compiler from <a href="https://nim-lang.org/install.html"> https://nim-lang.org/install.html</a></p>
+<p>The default dependancies were already installed on my hard disk: (OpenSSL, libssh2, brotli)</p>
+<code>cd ~/src
+git clone https://git.sr.ht/~bptato/chawan && cd chawan
+make
+sudo make install
+cha -V</code>
+<p>And it's done. I use mostly use chawan as newsboat's browser, it's really good.</p>
+<p>Thanks to <a href="https://github.com/kachick/chawan?tab=readme-ov-file">Kachick</a></p>
+<p>Previous article: <a href="/articles/2025/Newsboat-browser:-rdrview-or-chawan.html">rdrview or chawan</a></p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Jazz-radio-recording-from-1976.html b/articles/2025/Jazz-radio-recording-from-1976.html
new file mode 100755
index 0000000..56f8517
--- /dev/null
+++ b/articles/2025/Jazz-radio-recording-from-1976.html
@@ -0,0 +1,47 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="stylesheet" href="/style.css" />
+ <title>Jazz radio recording from 1976</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+ </header>
+
+ <main>
+ <article>
+ <h2>Jazz radio recording from 1976</h2>
+ <h3>2025-05-24</h3>
+ <h4>KBCA Jazz Radio - Los Angeles<br />Recorded February 1976</h4>
+ <p>An enjoyable 3 hour radio time machine</p>
+ <div class="wrapper">
+ <iframe
+ src="https://www.youtube.com/embed/fwTDd852aPM?list=PLH8psnsc_qVuVZW5-qX4-PPZHZHzbvKx4"
+ title="KBCA Jazz Radio - Los Angeles - Recorded February 1976- Vintage 70&#39;s Jazz Radio"
+ frameborder="0"
+ allow="
+ accelerometer;
+ autoplay;
+ clipboard-write;
+ encrypted-media;
+ gyroscope;
+ picture-in-picture;
+ web-share;
+ "
+ referrerpolicy="strict-origin-when-cross-origin"
+ allowfullscreen
+ ></iframe>
+ </div>
+ </article>
+ </main>
+ <footer>
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+ </body>
+</html>
diff --git a/articles/2025/Koreader-for-e-ink-devices.html b/articles/2025/Koreader-for-e-ink-devices.html
new file mode 100755
index 0000000..107c886
--- /dev/null
+++ b/articles/2025/Koreader-for-e-ink-devices.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Koreader for e-ink devices</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Koreader for e-ink devices</h2>
+<h3>2025-03-24</h3>
+<h4>I installed Koreader on my Kobo Clara Colour last night</h4>
+<p>Like everything, there's a learning curve due to the multiplicity of options. The first thing I did was copy the Bookerly font to the Koreader fonts folder on the Kobo, as I find the default Noto fonts too ugly for reading.</p>
+<p>The second thing I did was remove the Koreader installation log file and
+logo which stuck out like a sore thumb in the file manager</p>
+<p>The third thing I have to do is read the user guide...</p>
+<p>Anyhow reading is a pleasure once I fixed the font, font size, and line spacing</p>
+<p><a href="http://koreader.rocks/">Koreader
+<p><a href="https://www.mobileread.com/forums/showthread.php?t=314220">One-Click Install Packages for KOReader & Plato</a></p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Ladybird-web-browser.html b/articles/2025/Ladybird-web-browser.html
new file mode 100755
index 0000000..0ce8563
--- /dev/null
+++ b/articles/2025/Ladybird-web-browser.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Ladybird web browser</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Ladybird web browser</h2>
+<h3>2025-06-26</h3>
+<h4>L'éspoir fait vivre</h4>
+<p>The Ladybird web browser is truly something different, and a hope for the future.</p>
+<p>It has no connection to Google, no rehash of older web engines, with no corporate influence looming over it.</p>
+<p>Written transparently, W3C standards compliant, it will be available for public beta in 2026, with release is planned for 2028</p>
+<p>There's an aphid eating light at the end of the tunnel.</p>
+<p><a href="https://ladybird.org/">https://ladybird.org/</a></p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Les-Oiseaux-des-Jardins.html b/articles/2025/Les-Oiseaux-des-Jardins.html
new file mode 100755
index 0000000..a705631
--- /dev/null
+++ b/articles/2025/Les-Oiseaux-des-Jardins.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Les Oiseaux des Jardins</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Les Oiseaux des Jardins</h2>
+<h3>2025-04-04</h3>
+<h4>Identify garden birds in Brittany</h4>
+<p>My bird feeder only has Blue Tits, Coal Tits, and sparrows - but you never know.</p>
+<p><img src="/images/blog/poster-oiseaux-des-jardins.png" alt="poster-les-oiseaux-des-jardins"></p>
+<p><a href="https://www.bretagne-vivante.org/decouverte-de-la-nature/comptage-oiseaux-des-jardins/">Bretagne Vivant - comptage des oiseaux</a></p>
+<p>Bretagne Vivante has been Brittany's leading association for the protection of nature and biodiversity since 1959.
+Recognized as a non-profit organization, it works on a daily basis to improve knowledge and preservation of the region's natural heritage.
+It also manages a network of protected sites and nature reserves throughout Brittany and Loire-Atlantique.
+Passing on and sharing its passions is also at the heart of Bretagne Vivante's missions.</p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Linux-System-Performance-Tuning.html b/articles/2025/Linux-System-Performance-Tuning.html
new file mode 100755
index 0000000..7dcd6a4
--- /dev/null
+++ b/articles/2025/Linux-System-Performance-Tuning.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Linux System Performance Tuning</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Linux System Performance Tuning</h2>
+<h3>2025-03-26</h3>
+<h4>Linux System Performance Tuning: Optimizing CPU, Memory, and Disk</h4>
+
+<p><a href="https://www.linuxjournal.com/content/linux-system-performance-tuning-optimizing-cpu-memory-and-disk">Linuxjournal</a></p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Linux-power-consumption-control.html b/articles/2025/Linux-power-consumption-control.html
new file mode 100755
index 0000000..31748e0
--- /dev/null
+++ b/articles/2025/Linux-power-consumption-control.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Linux power consumption control</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Linux power consumption control</h2>
+<h3>2025-03-23</h3>
+<h4>TLP is a feature-rich command line utility for Linux</h4>
+<p>saving laptop battery power without the need to delve deeper into technical details.</p>
+<p>TLP’s default settings are already optimized for battery life, so you may install it and just sit back and relax. Nevertheless, TLP is completely customizable to get even more power savings or meet your exact requirements.</p>
+<code>sudo pacman -S tlp tlpui cpupower</code>
+<code>sudo systemctl enable tlp.service</code>
+<p>I enabled the panel cpufreq plugin on my Thinkpad X220 and saw that AC/BAT power changes
+were handled correctly</p>
+<p><img src="/images/blog/xfce4-panel-cpu-fan.png"></p>
+<p><a href="https://linrunner.de/tlp/index.php">TLP Web site</a></p>
+<p><a href="https://wiki.archlinux.org/title/TLP">Arch Linux TLP page</a></p>
+
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Lynx,-Gopher,-and-video-files.html b/articles/2025/Lynx,-Gopher,-and-video-files.html
new file mode 100755
index 0000000..6288414
--- /dev/null
+++ b/articles/2025/Lynx,-Gopher,-and-video-files.html
@@ -0,0 +1,102 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Lynx, Gopher, and video files</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Lynx, Gopher, and video files</h2>
+<h3>2025-09-21</h3>
+<h4>Getting Lynx to open video files</h4>
+
+<p>I've been using Lynx as a Gopher browser on Artix Linux,
+and I like it a lot as it renders cleanly, has logical
+keybindings, and enables following html links.</p>
+<p>But...</p>
+<p>Trying to open video files with an external application
+wasn't working. Luckily on one test I saw an error
+concerning "mpeg_play".</p>
+
+<p>The only mention of this file is as a VIEWER entry in
+lynx.cfg. But changing it to something else has no effect
+at all.</p>
+
+<p>Somewhere in lynx, mpeg_play is hardcoded. 🤔. Checking the Lynx source code, I found it in HTInit.c</p>
+<p>Why short circuit the config file this way? Anyway, I wrote a bash script named mpeg_play:</p>
+
+<p>
+#!/usr/bin/env bash<br>
+/usr/bin/mpv --title="Mpv" >/dev/null 2>&1 $1
+</p>
+
+<p>chmod +x mpeg_play and put it in my PATH</p>
+
+<p>and it works!<br>
+Lynx can now play media files in Gopher holes.
+(Note the --title parameter is to get it to play nice with dwm).</p>
+
+<p>The question remains: why is this hard coded?</p>
+
+<p>As for mpeg_play, it appears in Linux mailcap
+entries in the 90's and seems to have been bundled
+in ximagetools.</p>
+
+<p>Mpeg_play appears to date back a long way as a UNIX application:</p>
+
+<p><a href="http://www.geom.uiuc.edu/software/mpeg_play">http://www.geom.uiuc.edu/software/mpeg_play</a></p>
+
+<h3>Update 2025-09-23</h3>
+
+<p>A little tweak made this script capable of opening playlists</h3>
+
+<p>----------</p>
+<p>
+#!/usr/bin/env bash<br>
+# necessary for Lynx browser video files<br>
+# chmod +x and place in your PATH<br>
+<br>
+# mpv can sometimes take a few seconds to open when streaming<br>
+# so I use notification that it's happening<br>
+<br>
+dunstify -t 2000 -a "Video" -u low -i "media-playback-start-symbolic"\<br>
+&nbsp;&nbsp;-h string:x-dunst-stack-tag:"Media" "MPV Launching" &<br>
+<br>
+# detect if playlist<br>
+# Lynx uses an anonymous file in /tmp, so we can only<br>
+# detect a file type by it's contents, not it's extension<br>
+<br>
+if [ "$(grep -c "EXT3MU" "$1")" -eq 1 ]; then<br>
+&nbsp;&nbsp;# this is a playlist<br>
+&nbsp;&nbsp;# I use dwm, the mpv options used here make it compatible<br>
+&nbsp;&nbsp;mpv --geometry=1068x600 --ontop --idle=yes --force-window=yes\<br>
+&nbsp;&nbsp;&nbsp;&nbsp;--playlist="$1" >/dev/null 2>&1 &<br>
+else<br>
+&nbsp;&nbsp;mpv --geometry=1068x600 --ontop --idle=yes --force-window=yes\<br>
+&nbsp;&nbsp;&nbsp;&nbsp;"$1" >/dev/null 2>&1 &<br>
+fi<br>
+<br>
+exit 0<br>
+</p>
+<p>----------</p>
+<p>The latest version can be found at <a href="https://git.wittamore.fr">git.wittamore.fr</a></p>
+
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Mailcow-Docker-too-many-requests.html b/articles/2025/Mailcow-Docker-too-many-requests.html
new file mode 100755
index 0000000..619879a
--- /dev/null
+++ b/articles/2025/Mailcow-Docker-too-many-requests.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Mailcow Docker too many requests</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Mailcow Docker too many requests</h2>
+<h3>2025-04-29</h3>
+<h4>Dcker changes</h4>
+<p>While updating Mailcow this morning Docker gave me a "too many requests" error.</p>
+<p>It seems that Docker now limits the IPv6’s subnet instead of the IPv6 address itself, which
+could mean your pull limit is shared.</p>
+<p>To fix this you can create a personal account at docker.com, this will allow 200 image pulls per 6 hours.
+My Mailcow installation does 7 pulls for an update.</p>
+<p><a href="https://hub.docker.com/signup">Docker account creation</a></p>
+<p>Once the account created, copy the personal access token, go back to your server and enter docker login -u (login)</p>
+<p>Mailcow will now update without error.</p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Mailcow-with-Nginx-reverse-proxy-(updated).html b/articles/2025/Mailcow-with-Nginx-reverse-proxy-(updated).html
new file mode 100755
index 0000000..efbdc99
--- /dev/null
+++ b/articles/2025/Mailcow-with-Nginx-reverse-proxy-(updated).html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Mailcow with Nginx reverse proxy (updated)</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Mailcow with Nginx reverse proxy (updated)</h2>
+<h3>2025-09-11</h3>
+<h4>Improved instructions with DANE and MTS-STA info</h4>
+<p>-> <a href="/articles/2025/Mailcow-with-Nginx-reverse-proxy.html">Link to the updated post</a></p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Mailcow-with-Nginx-reverse-proxy.html b/articles/2025/Mailcow-with-Nginx-reverse-proxy.html
new file mode 100755
index 0000000..657b214
--- /dev/null
+++ b/articles/2025/Mailcow-with-Nginx-reverse-proxy.html
@@ -0,0 +1,207 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Mailcow with Nginx reverse proxy</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Mailcow with Nginx reverse proxy (updated)</h2>
+<h3>2025-04-19</h3>
+<h4>Using other web services with Mailcow</h4>
+<p>This is roughly what I did to have an Nginx web server on the same machine as dockerized
+<a href="https://mailcow.email/">Mailcow</a></p>
+<p><b>Note:</b> mail.xxxxx.com is your mail server (MX), yourdomain.com is whatever domain you wish to use.</p>
+<ol>
+<li>Change the default http and https ports (for example 8480 and 8443)<br>
+and set <b>SKIP_LETS_ENCRYPT=y</b> in /opt/mailcow-dockerized/mailcow.conf</li>
+<li>Restart Mailcow by executing <br>
+<b>cd /opt/mailcow-dockerized;docker compose restart</b></li>
+<li>Make sure the DNS entry mail.xxxxx.com points to the server</li>
+<li><b>mkdir -p /var/www/html/letsencrypt/.well-known/acme-challenge</b></li>
+<li>Create /etc/nginx/letsencrypt_path. This can be re-used in your other domains.
+<pre># url for letsencrypt
+location ^~ /.well-known/acme-challenge/ {
+ allow all;
+ default_type "text/plain";
+ # Path can be used for cert-validation on all domains
+ root /var/www/html/letsencrypt;
+ break;
+}
+</pre>
+</li>
+<li>Stop the nginx server <b>systemctl stop nginx</b></li>
+<li>Run <b>certbot certonly -d mail.xxxxx.com</b> (select 2 standalone)</li>
+<li>Create /etc/nginx/sites-available/mail.xxxxx.com</li>
+<pre>server {
+ listen 443 ssl;
+ listen [::]:443 ssl;
+ http2 on;
+
+ server_name mail.xxxxx.com;
+
+ charset UTF-8;
+ access_log /var/log/nginx/access.mail.xxxxx.com;
+ error_log /var/log/nginx/error.mail.xxxxx.com;
+ include snippets/error_pages.conf;
+ ssl_certificate /etc/letsencrypt/live/mail.xxxxx.com/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/mail.xxxxx.com/privkey.pem;
+ include /etc/letsencrypt/options-ssl-nginx.conf;
+ ssl_dhparam /etc/letsencrypt/ssl-dhparams-2048.pem;
+
+ include /etc/nginx/letsencrypt_path;
+
+ location / {
+ proxy_pass http://127.0.0.1:8480;
+ proxy_buffering off;
+ include /etc/nginx/proxy_params;
+
+ }
+
+}
+
+server {
+
+ listen 80;
+ listen [::]:80;
+ server_name mail.xxxxx.com;
+ return 301 https://mail.xxxxx.com;
+}
+</pre>
+<li><b>ln -s /etc/nginx/sites-available/mail.xxxxx.com <br>/etc/nginx/sites-enabled/mail.xxxxx.com</b></li>
+<li>Test with <b>nginx -t</b>, if all is well run <b>sudo systemctl start nginx</b></li>
+<li>Pointing your browser to https://mail.xxxxx.com should show you the Mailcow login page.</li>
+</ol>
+<h3>Problem</h3>
+<p>The problem is that Mailcow can no longer use port 80 to update it's ssl certificates that
+are used by postfix and dovecot. Instead certbot puts them in /etc/letsencrypt/live.
+To fix this the following script runs from crontab daily.</p>
+<pre>#!/usr/bin/env bash
+
+# we are running behind an nginx proxy, where certbot is run by systemd,
+# so the mail.xxxxx.com certificates are updated, but not copied to the mailcow folder
+# in case the certificate isn't renewed automatically, run this:
+# sudo certbot -n certonly --webroot -w /var/www/html/letsencrypt -d mail.xxxxx.com
+
+t1="/etc/letsencrypt/live/mail.xxxxx.com/fullchain.pem"
+t2="/opt/mailcow-dockerized/data/assets/ssl/mail.xxxxx.com/cert.pem"
+
+# test if certificate has been updated
+differ=$(cmp -b $t1 $t2 | grep -c "differ")
+
+[[ "$differ" = "0" ]] && exit 0
+
+# these files are required in /data/assets/ssh/mail.xxxxx.com
+cp /etc/letsencrypt/live/mail.xxxxx.com/fullchain.pem /opt/mailcow-dockerized/data/assets/ssl/mail.xxxxx.com/cert.pem
+cp /etc/letsencrypt/live/mail.xxxxx.com/privkey.pem /opt/mailcow-dockerized/data/assets/ssl/mail.xxxxx.com/key.pem
+
+# these files are required in /data/assets/ssl/ (turns out sending failed otherwise)
+cp /etc/letsencrypt/live/mail.xxxxx.com/fullchain.pem /opt/mailcow-dockerized/data/assets/ssl/cert.pem
+cp /etc/letsencrypt/live/mail.xxxxx.com/privkey.pem /opt/mailcow-dockerized/data/assets/ssl/key.pem
+
+# update postfix & docker
+docker exec $(/usr/bin/docker ps -qaf name=postfix-mailcow) postfix reload
+docker exec $(/usr/bin/docker ps -qaf name=dovecot-mailcow) dovecot reload
+</pre>
+<p>Inspiration: <a href="https://felixmoessbauer.com/blog-reader/mailcow-reverse-proxy-letsencrypt.html">Felix Moesbauer</a></p>
+<p>Don't forget to check and correct if necessary your DANE and MTA-STS records if you use them</p>
+<h4>DANE</h4>
+<p>On your mail server:</p>
+<pre>apt install hash-slinger -y</pre>
+<p>Create a TLSA record:</p>
+<pre>tlsa --create --selector 1 -p 25 --certificate /etc/letsencrypt/live/mail.xxxxx.com/fullchain.pem mail.xxxxx.com
+</pre>
+<p>The last line or the result will be something like:</p>
+<pre>_25._tcp.mail.xxxxx.com. IN TLSA 3 1 1 443ac7c5c70fbfbc...</pre>
+<p>Enter this TLSA line in your mail server's DNS record.</p>
+<p>Do the same for the following ports:</p>
+<pre>_110._tcp.mail.xxxxx.com
+_143._tcp.mail.xxxxx.com
+_465._tcp.mail.xxxxx.com
+_587._tcp.mail.xxxxx.com
+_993._tcp.mail.xxxxx.com
+_995._tcp.mail.xxxxx.com
+</pre>
+<p>You can check your DANE records at <a href="https://www.huque.com/bin/danecheck-smtp">huque.com</a></p>
+<p><img src="/images/blog/dane-success.png" alt="dane success"></p>
+<h4>MTA-STS</h4>
+<p>This is a fallback to DANE, you can run both.</p>
+<p><b>Note:</b> https access to mta-sts.yourdomain.com is obligatory</p>
+<ol>
+<li>Create /var/www/html/mta-sts/.well-known/mta-sts.txt with the following content:<br>
+<pre>version: STSv1
+mode: enforce
+max_age: 172800
+mx: mail.xxxxx.com
+</pre>
+</li>
+<li>Create the DNS record _mta-sts.mail.xxxxx.com as TXT with "v=STSv1; id=<b>INSERT AN ID, EX. 202511101644</b>"</li>
+<li>Create the DNS record _mta-sts.yourdomain.com as CNAME pointing to _mta-sts.mail.xxxxx.com (your mail server)</li>
+<li>Create the DNS record mta-sts.yourdomain.com pointing to the ip of the web server</li>
+<li>You may need to wait for the DNS records to propagate</li>
+<li>Stop Nginx with <b>systemctl stop nginx</b></li>
+<li>Create a letsencrypt certificate with <b>certbot certonly -d mta-sts.yourdomain.com</b> (select 2 standalone)</li>
+<li>Create mta-sts.yourdomain.com in Nginx:</li>
+<li>/etc/sites-available/mta-sts.yourdomain.com<br>
+<pre>server {
+ listen 443 ssl;
+ listen [::]:443 ssl;
+ http2 on;
+
+ charset UTF-8;
+ access_log /var/log/nginx/access.mts-sta.yourdomain.com;
+ error_log /var/log/nginx/error.mts-sta.yourdomain.com;
+ include snippets/error_pages.conf;
+ ssl_certificate /etc/letsencrypt/live/mta-sts.yourdomain.com/fullchain.pem;
+ ssl_certificate_key /etc/letsencrypt/live/mta-sts.yourdomain.com/privkey.pem;
+ include /etc/letsencrypt/options-ssl-nginx.conf;
+ ssl_dhparam /etc/letsencrypt/ssl-dhparams-2048.pem;
+
+ include /etc/nginx/letsencrypt_path;
+
+ root /var/www/html/mta-sts;
+ index index.html index.htm;
+
+ server_name mta-sts.yourdomain.com;
+
+ location / {
+ try_files $uri $uri/ =404;
+ }
+}
+server {
+ listen 80;
+ listen [::]:80;
+ server_name mta-sts.yourdomain.com;
+ return 301 https://mta-sts.yourdomain.com;
+}
+</pre>
+</li>
+<li><b>ln -s /etc/nginx/sites-available/mta-sts.yourdomain.com <br>/etc/nginx/sites-enabled/mta-sts.yourdomain.com</b></li>
+<li>Test with nginx -t and if all goes well start nginx <b>systemctl start nginx</b></li>
+</ol>
+<p>You can check your domain's MTA-STS at <a href="https://mxtoolbox.com/mta-sts.aspx">mxtoolbox.com</a><p>
+<p>&nbsp;</p>
+<p>All this worked for me :-) I hope it does for you!</p>
+
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
+
+
+
diff --git a/articles/2025/Menu-editor-for-XFCE4.html b/articles/2025/Menu-editor-for-XFCE4.html
new file mode 100755
index 0000000..8f2bedb
--- /dev/null
+++ b/articles/2025/Menu-editor-for-XFCE4.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Menu editor for XFCE4</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Menu editor for XFCE4</h2>
+<h3>2025-03-23</h3>
+<h4>Alacarte is a gui menu editor for Gnome and XFCE</h4>
+<code>yay -S alacarte-xfce</code>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Microphone-distortion-on-Thinkpad-X220.html b/articles/2025/Microphone-distortion-on-Thinkpad-X220.html
new file mode 100755
index 0000000..8b40778
--- /dev/null
+++ b/articles/2025/Microphone-distortion-on-Thinkpad-X220.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Microphone distortion on Thinkpad X220</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Microphone distortion on Thinkpad X220</h2>
+<h3>2025-04-27</h3>
+<h4>Trying to fix a bad microphone</h4>
+<p>The X220 has a notoriously bad internal microphone. It can be somewhat improved by making the input mono with module-remap-source<p>
+<p><b>/etc/modules-load.d/microphone.conf</b></p>
+<pre>
+# make micro mono
+module-remap-source master=alsa_input.pci-0000_00_1b.0.analog-stereo channels=1 master_channel_map=front-left channel_map=mono
+</pre>
+<p>Replace master= with your device, and master_channel_map= with the device's channel</p>
+<p>It's a bit better, although an external usb microphone is the real solution.</p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Modified-dwm-bar-battery-script.html b/articles/2025/Modified-dwm-bar-battery-script.html
new file mode 100755
index 0000000..b837c73
--- /dev/null
+++ b/articles/2025/Modified-dwm-bar-battery-script.html
@@ -0,0 +1,80 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Modified dwm-bar battery script</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Modified dwm-bar battery script</h2>
+<h3>2025-04-23</h3>
+<h4>adding battery charging nerdfont icons</h4>
+<p>This is a modification of the default dwm-battery script</p>
+<p><img src="/images/blog/dwm_bar.png"></p>
+<pre>
+#!/bin/sh
+
+# A dwm_bar function to read the battery level and status
+# GNU GPLv3
+
+dwm_battery () {
+ # Change BAT1 to whatever your battery is identified as. Typically BAT0 or BAT1
+ CHARGE=$(cat /sys/class/power_supply/BAT0/capacity)
+ STATUS=$(cat /sys/class/power_supply/BAT0/status)
+
+ #printf "%s" "$SEP1"
+ printf " %s"
+ if [ "$IDENTIFIER" = "unicode" ]; then
+ if [ "$STATUS" = "Charging" ]; then
+ if [ "${CHARGE}" -lt 10 ]; then ICON="󱃍󱐋"
+ elif [ "${CHARGE}" -lt 20 ]; then ICON="󰁺󱐋"
+ elif [ "${CHARGE}" -lt 30 ]; then ICON="󰁻󱐋"
+ elif [ "${CHARGE}" -lt 40 ]; then ICON="󰁼󱐋"
+ elif [ "${CHARGE}" -lt 50 ]; then ICON="󰁽󱐋"
+ elif [ "${CHARGE}" -lt 60 ]; then ICON="󰁾󱐋"
+ elif [ "${CHARGE}" -lt 70 ]; then ICON="󰁿󱐋"
+ elif [ "${CHARGE}" -lt 80 ]; then ICON="󰂀󱐋"
+ elif [ "${CHARGE}" -lt 90 ]; then ICON="󰂂󱐋"
+ elif [ "${CHARGE}" -lt 100 ]; then ICON="󰁹󱐋"
+ fi
+ else
+ if [ "${CHARGE}" -lt 10 ]; then ICON="󱃍"
+ elif [ "${CHARGE}" -lt 20 ]; then ICON="󰁺"
+ elif [ "${CHARGE}" -lt 30 ]; then ICON="󰁻"
+ elif [ "${CHARGE}" -lt 40 ]; then ICON="󰁼"
+ elif [ "${CHARGE}" -lt 50 ]; then ICON="󰁽"
+ elif [ "${CHARGE}" -lt 60 ]; then ICON="󰁾"
+ elif [ "${CHARGE}" -lt 70 ]; then ICON="󰁿"
+ elif [ "${CHARGE}" -lt 80 ]; then ICON="󰂀"
+ elif [ "${CHARGE}" -lt 90 ]; then ICON="󰂂"
+ elif [ "${CHARGE}" -lt 100 ]; then ICON="󰁹"
+ fi
+ fi
+ printf "%s %s%% " "$ICON" "$CHARGE"
+ else
+ printf "BAT %s%% %s" "$CHARGE" "$STATUS"
+ fi
+ #printf "%s\n" "$SEP2"
+}
+
+dwm_battery
+</pre>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/My-gopher-site.html b/articles/2025/My-gopher-site.html
new file mode 100755
index 0000000..c372098
--- /dev/null
+++ b/articles/2025/My-gopher-site.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>My gopher site</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>My gopher site</h2>
+<h3>2025-09-26</h3>
+<h4>moving to saner tech</h4>
+<p><img src="/images/blog/mygophersite.png" alt="my gopher site pic"></p>
+<p>If you haven't noticed, I'm blogging (phlogging) on my gopher site now.</p>
+<p>If you have a termnal, install lynx and point it to <a href="gopher://wittamore.fr">gopher://wittamore.fr</a></p>
+<p>If you don't, point your web browser to <a href="https://gopherproxy.meulie.net/wittamore.fr/">gopherproxy</a>,
+the results are not as good but you'll get the gist.</p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Naked-DWM.html b/articles/2025/Naked-DWM.html
new file mode 100755
index 0000000..bb64c73
--- /dev/null
+++ b/articles/2025/Naked-DWM.html
@@ -0,0 +1,101 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Naked DWM</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Naked DWM</h2>
+<h3>2025-05-01</h3>
+<h4>Zero dwm patches...</h4>
+<p>Inspiration from <a href="https://youtu.be/O5VVdFWJcak">Bread on Penguins</a> and <a href="https://www.youtube.com/watch?v=g8_d2rnwQdo&t=1206s">BugsWriter</a></p>
+<p><img src="/images/blog/pywal16-screenshot.png"></p>
+<p>I've been messing with DWM patches but I went back to naked DWM.
+The only caveat is a couple of lines of code in <b>dwm/config.h</b> to integrate Pywal16,
+that allows me to have a colour theme that matches whatever wallpaper I'm using.</p>
+<p>It's possible to patch DWM with the Xresources patch but patches are version dependant and can be a pain.
+I prefer simple and maintainable.</p>
+<p>Install <a href="https://github.com/eylles/pywal16">pywal16</a></p>
+<pre>
+yay -S python-pywal16
+</pre>
+<h4>Modify dwm/config.h</h4>
+<p>In <b>dwm/config.h</b> I removed the default colour settings:</p>
+<pre>
+static const char col_gray1[] = "#222222";
+static const char col_gray2[] = "#444444";
+static const char col_gray3[] = "#bbbbbb";
+static const char col_gray4[] = "#eeeeee";
+static const char col_cyan[] = "#005577";
+static const char *colors[][3] = {
+ /* fg bg border */
+ [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
+ [SchemeSel] = { col_gray4, col_cyan, col_cyan },
+};
+</pre>
+<p>and replaced them with this line:</p>
+<pre>
+/* Pywal16 */
+#include "/home/philip/.cache/wal/colors-wal-dwm.h"
+</pre>
+<h4>xinitrc</h4>
+<p>In my .xinitrc I have <b>wal -Rq</b> which recalls the last wallpaper setting.</p>
+<h4>Chooser script</h4>
+<p>This script chooses the wallpaper then recompiles dwm and dmenu.</p>
+<pre>
+#!/usr/bin/env bash
+# Choose a wallpaper
+# requires nsxiv, pywal16
+# ~/.local/bin is in PATH
+
+FOLDER=~/Pictures/wallpaper
+# thumbnail display of images
+CHOICE=$(nsxiv -otb $FOLDER/*)
+
+wal -i $CHOICE
+
+# Post process
+
+# DWM
+cd ~/.local/src/dwm
+make clean ; make
+rm -f ~/.local/bin/dwm
+cp dwm ~/.local/bin
+
+# DWMMENU
+rm -f ~/.local/dmenu*
+cd ~/.local/src/dmenu
+make clean ; make
+cp {dmenu,dmenu_run,dmenu_path} ~/.local/bin
+</pre>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/articles/2025/Neomutt-as-default-in-XFCE4.html b/articles/2025/Neomutt-as-default-in-XFCE4.html
new file mode 100755
index 0000000..4c7259b
--- /dev/null
+++ b/articles/2025/Neomutt-as-default-in-XFCE4.html
@@ -0,0 +1,47 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Neomutt as default in XFCE4</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Neomutt as default in XFCE4</h2>
+<h3>2025-03-21</h3>
+<h4>I've always loved Mutt and now Neomutt on XFCE4</h4>
+<p>Note: I use RBW to access my <b>Bitwarden</b> password vault on the command line or in
+scripts, so I need to make sure it is unlocked before running Neomutt, hence
+the Exec line in the desktop entry.</p>
+<p><a href="https://github.com/doy/rbw">RBW</a> sudo pacman -S rbw</p>
+
+<h4>Create desktop entry</h4>
+
+<pre>~/.local/share/applications/neomutt.desktop</pre>
+
+<code>[Desktop Entry]
+Categories=Office;Network;Email;
+Comment=Simple text-based Mail User Agent
+Exec=xfce4-terminal -x bash -c '"rbw unblock" ; neomutt' %u
+Icon=neomutt
+Name=neomutt
+MimeType=x-scheme-handler/mailto;
+NoDisplay=false
+Terminal=false
+Type=Application
+</code>
+<h4>Add xdg mime type</h4>
+<pre>xdg-mime default neomutt.desktop x-scheme-handler/mailto</pre>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/New-builds-of-dwm-and-st.html b/articles/2025/New-builds-of-dwm-and-st.html
new file mode 100755
index 0000000..1601b4c
--- /dev/null
+++ b/articles/2025/New-builds-of-dwm-and-st.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>New builds of dwm and st</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>New builds of dwm, dmenu, and st</h2>
+<h3>2025-05-21</h3>
+<h4>new builds with patches</h4>
+<p>I've updated my builds of dwm, dmenu, and st, available on my <a href="https://git.wittamore.fr">git server</a></p>
+<p>Although I've compiled St, Kitty and Ghostty are my favorite terminal emulators. St has many patches, but not all of them work together. St is meant to be a bare bones -suckless- terminal emulator.</p>
+<p>The DWM build has the xrdb, rotatestack, adjacenttag, center, statuscmd and swallow patches.</p>
+<p>I was using slstatus with time and battery indications, but dwmblocks-async adds bit of flair.</p>
+<p>Dmenu has the xresources and center patches.</p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Newsboat-and-gopher-RSS-feeds.html b/articles/2025/Newsboat-and-gopher-RSS-feeds.html
new file mode 100755
index 0000000..ec1c48f
--- /dev/null
+++ b/articles/2025/Newsboat-and-gopher-RSS-feeds.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Newsboat and gopher RSS feeds</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Newsboat and gopher RSS feeds</h2>
+<h3>2025-09-24</h3>
+<h4>How to read gopher RSS feeds in newsboat</h4>
+<p>curl is able to access gopher files, and newsboat has an "exec" command
+that can be used run commands.</p>
+<p>So to read a gopher rss feed you can simply edit .newsboat/urls and add the following line:</p>
+<p>"exec:curl gopher://url"</p>
+<p>For example:</p>
+<p>"exec:curl gopher://lucio.albenga.es/0/lfa/en/phlog/rss.xml"</p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Oddly-useful-Linux-tools.html b/articles/2025/Oddly-useful-Linux-tools.html
new file mode 100755
index 0000000..719dd56
--- /dev/null
+++ b/articles/2025/Oddly-useful-Linux-tools.html
@@ -0,0 +1,50 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="stylesheet" href="/style.css" />
+ <title>Oddly useful Linux tools</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+ </header>
+
+ <main>
+ <article>
+ <h2>Oddly useful Linux tools</h2>
+ <h3>2025-05-08</h3>
+ <h4>Bread on Penguins with some interesting tools</h4>
+ <p>
+ Some really interesting videos, Bread on Penguins is taking up where
+ Luke Smith left off
+ </p>
+ <div class="wrapper">
+ <iframe
+ src="https://www.youtube.com/embed/32O0a6qCQaQ"
+ title="Oddly useful Linux tools you probably haven&#39;t seen before"
+ frameborder="0"
+ allow="
+ accelerometer;
+ autoplay;
+ clipboard-write;
+ encrypted-media;
+ gyroscope;
+ picture-in-picture;
+ web-share;
+ "
+ referrerpolicy="strict-origin-when-cross-origin"
+ allowfullscreen
+ ></iframe>
+ </div>
+ </article>
+ </main>
+ <footer>
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+ </body>
+</html>
diff --git a/articles/2025/Pipewire.html b/articles/2025/Pipewire.html
new file mode 100755
index 0000000..dd75885
--- /dev/null
+++ b/articles/2025/Pipewire.html
@@ -0,0 +1,62 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Pipewire</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Pipewire</h2>
+<h3>2025-04-28</h3>
+<h4>Fixing Thinkpad X220 microphone woes</h4>
+<p>So with my nice new DWM installation I waltz into a Jitsi meeting only to find that my microphone
+wasn't working even though it appeared to. Something was missing in pulseaudio after I removed XFCE4, or
+wasn't taken into account in DWM. Then I noticed that Librewolf was looking for Pipewire. What?</p>
+<p>Eventually I got it working, but the microphone was distorted and full of parasites.
+<a href="/articles/2025/Microphone-distortion-on-Thinkpad-X220.html">Adding a module remap</a> to
+turn the two laptop microphones into mono was a tad better but I decided go for the bleeding
+edge and install Pipewire instead of Pulseaudio.</p>
+<pre>
+sudo pacman -Rdd pulseaudio
+sudo pacman -S pipewire-{jack,alsa,pulse}
+systemctl --user enable --now pipewire pipewire-pulse pipewire-media-session
+</pre>
+<h4>Noise suppression</h4>
+<pre>
+git clone https://github.com/werman/noise-suppression-for-voice.git
+</pre>
+<p>Follow the instructions at <a href="https://github.com/werman/noise-suppression-for-voice">Noise suppression for Voice</a></p>
+<p>In order to change the default source:</p>
+<pre>
+pactl list sources short
+pactl set-default-source rnnoise_source
+systemctl --user restart pipewire.service
+</pre>
+<p>And that's the best I'll probably ever get out of the internal X220 microphones.</p>
+<p>Why not just use Alsa? Because I use a bluetooth headset and noise suppression.</p>
+<p>Why not just use an external microphone? I've ordered one :-)</p>
+
+<h3>Bluetooth Autoconnect</h3>
+<p>Just to add, Bluetooth Autoconnect was built for Pulseaudio but works fine with Pipewire.</p>
+<p>Bluetooth autoconnect will connect any client that is paired and trusted, in my case a headset.</p>
+<p>If you use Chaotic-Aur, pacman -S bluetooth-autoconnect will install it. Use yay -S bluetooth-autoconnect if not.</p>
+
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Power-notifications.html b/articles/2025/Power-notifications.html
new file mode 100755
index 0000000..af66de7
--- /dev/null
+++ b/articles/2025/Power-notifications.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Power notifications</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Power notifications</h2>
+<h3>2025-04-26</h3>
+<h4>Searching how to get a notification for power source changes or USB drives</h4>
+<p>I found the solution here: <a href="https://github.com/pliski/udev_desktop_notifications">udev desktop notifications</a></p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Powerline-Bash.html b/articles/2025/Powerline-Bash.html
new file mode 100755
index 0000000..9af5c90
--- /dev/null
+++ b/articles/2025/Powerline-Bash.html
@@ -0,0 +1,27 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Powerline Bash</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Powerline Bash</h2>
+<h3>2025-03-24</h3>
+<h4>Make your bash prompt look real pretty</h4>
+<p><img src="/images/blog/powerline_bash.png"></p>
+<p><a href="https://gitlab.com/bersace/powerline.bash">powerline.bash</a></p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/RSS-feeds-that-don't-suck-on-terminals.html b/articles/2025/RSS-feeds-that-don't-suck-on-terminals.html
new file mode 100755
index 0000000..d3757bf
--- /dev/null
+++ b/articles/2025/RSS-feeds-that-don't-suck-on-terminals.html
@@ -0,0 +1,83 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>RSS feeds that don't suck on terminals</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>RSS feeds that don't suck on terminals</h2>
+<h3>2025-04-05</h3>
+<h4>RSS news in the terminal</h4>
+<p>I'm building a list of RSS feeds that work in the terminal.
+There are a lot of feeds out there but not all of the linked articles display well.</p>
+<ul>
+<li>I'm using the Newsboat rss reader</li>
+<li>I'm using the <a href="/articles/2025/Ghostty.html">Ghostty terminal</a></li>
+<li>I'm using the <a href="https://sr.ht/~bptato/chawan/">Chawan browser</a></li>
+</ul>
+<p>Basically it's a question of whether the page linked in the RSS feed is displayed well in
+a text browser, which isn't always the case. I find the Chawan text browser gives the best
+web display in general and includes images, so I'm using it as a benchmark.</p>
+<p>It's always possible to use rdrview to pre-format the text before sending to cha,
+with <b>browser "rdrview -B cha %u"</b> in <b>.newsboat/config</b>, but this removes the images.</p>
+<p>This is an ongoing task so it will probably end up as a static page</p>
+<h3>The list so far:</h3>
+<code>
+---Linux---
+https://old.reddit.com/r/commandline/.rss
+https://old.reddit.com/r/Ghostty/.rss
+https://old.reddit.com/r/xfce/.rss
+https://old.reddit.com/r/neomutt/.rss
+https://old.reddit.com/.rss
+https://itsfoss.com/rss/
+https://archlinux.org/feeds/news
+https://www.linuxjournal.com/node/feed
+https://www.cyberciti.biz/feed/
+https://terminaltrove.com/blog.xml
+https://terminaltrove.com/new.xml
+https://terminaltrove.com/totw.xml
+
+---News-English---
+https://www.theatlantic.com/feed/all/
+
+---News-French---
+https://www.thelocal.fr/feeds/rss.php
+https://www.diplomatie.gouv.fr/spip.php?page=backend-fd
+https://mondediplo.com/backend
+https://frenchdailynews.com/feed
+https://www.euronews.com/rss
+https://tempsreel.nouvelobs.com/rss.xml
+https://www.lepoint.fr/rss.xml
+
+---Science---
+https://www.science.org/rss/news_current.xml
+http://rss.sciam.com/ScientificAmerican-Global
+https://www.lemonde.fr/sciences/rss_full.xml
+https://www.newscientist.com/feed/home/?cmpid=RSS%7CNSNS-Home
+http://feeds.feedburner.com/sciencealert-latestnews
+http://awesci.com/feed/
+https://blogs.esa.int/rocketscience/feed/
+
+---Tech---
+https://feeds.feedburner.com/TheHackersNews?format=xml
+
+---Divertissement---
+https://xkcd.com/rss.xml
+
+---Other---
+</code>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Reducing-web-font-size.html b/articles/2025/Reducing-web-font-size.html
new file mode 100755
index 0000000..e03b92f
--- /dev/null
+++ b/articles/2025/Reducing-web-font-size.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Reducing web font size</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Reducing web font size</h2>
+<h3>2025-04-06</h3>
+<h4>I stumbled on a marvellous post</h4>
+<p>I started using the Jetbrains font for this blog, but adding the font in the css file makes it
+pretty heavy, and I've been considering removing it. BUT...</p>
+<p>I stumbled on <a href="https://neilzone.co.uk/2024/05/faffing-with-fonts-to-reduce-my-web-page-size-by-two-thirds/">this post</a>
+and tried Neil's suggestion on the JetbrainsMono-Regular truetype font, and the font filesize was reduced from 274k to 66Kb</p>
+<code>pipx install fonttools
+pyftsubset JetbrainsMono-Regular.ttf --output-file=JetbrainsMono-Regular-reduced.ttf --unicodes=U+0020-007E</code>
+<p>So I decided to try it on the JetBrainsMono Regular Nerdfont, a whopping 2.4Mb, but the result was even better, 18Kb!</p>
+<code>.rw-r--r-- 66k philip 6 avril 23:04 JetBrainsMono-reduced.ttf
+.rw-r--r-- 18k philip 6 avril 23:20 JetBrainsMonoNerd-reduced.ttf
+</code>
+<p>Understanding why will take a bit of forensics, in the mean time this blog has become much lighter.</p>
+<h3>Update</h3>
+<p>I wound up just using the default monospace for the main text, and Ultra (reduced) for the title .</p>
+
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Replace-sudo-with-doas-on-Artix.html b/articles/2025/Replace-sudo-with-doas-on-Artix.html
new file mode 100755
index 0000000..d05bb5a
--- /dev/null
+++ b/articles/2025/Replace-sudo-with-doas-on-Artix.html
@@ -0,0 +1,92 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Replace sudo with doas on Artix</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Replace sudo with doas on Artix</h2>
+<h3>2025-06-18</h3>
+<h4>More efficient, less complicated</h4>
+<p>Sudo is quite bloated and not without security problems. It is intended to cover situations
+that normal Linux users will never encounter, and its configuration is messy.</p>
+<p>Doas is an application from OpenBSD that is simpler and cleaner.</p>
+<p>Here are the steps I took to install doas and replace sudo:</p>
+<code>sudo pacman -S opendoas</code>
+<p>Add my username to the group wheel:</p>
+<code>sudo usermod -aG wheel philip</code>
+<p>Create /etc/doas.conf and add:</p>
+<code>permit setenv {PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin} :wheel</code>
+<p>Modify the ownership and permissions:</p>
+<code>doas chown -c root:root /etc/doas.conf
+doas chmod -c 0400 /etc/doas.conf
+</code>
+<p>You should now be able to remove sudo:</p>
+<code>doas pacman -Rdd sudo</code>
+<p>Create a symlink to sudo</p>
+<code>ln -s $(which doas) /usr/bin/sudo</code>
+<p>So now it would be nice to have the equivalent of sudoedit.</p>
+<p>Create /root/scripts/doasedit (I use the micro editor):</p>
+<code>#!/usr/bin/env bash
+
+DOASDIR="/tmp/doas-$(date +%s)"
+mkdir $DOASDIR
+chmod 700 $DOASDIR
+DOASFILE="$DOASDIR/doas.conf"
+
+cp /etc/doas.conf $DOASFILE
+chmod 600 $DOASFILE
+
+micro $DOASFILE
+sync
+
+doas -C $DOASFILE && echo "valid config" && cp $DOASFILE /etc/doas.conf && chmod 400 /etc/doas.conf || echo "invalid config"
+sync
+
+rm -rf $DOASDIR
+</code>
+
+<p>Create /usr/local/bin/doasedit:</p>
+
+<code>#!/usr/bin/env bash
+if [ "$(id -u)" != 0 ]; then
+ doas /root/script/doasedit
+else
+ /root/script/doasedit
+fi
+</code>
+
+<p>Modify the permissions</p>
+<code>doas chmod 700 /root/script/doasedit
+doas chmod 755 /usr/local/bin/doasedit
+</code>
+
+<p>Test doasedit:</p>
+<code>doasedit</code>
+<p>add this line:</p>
+<code>permit nopass philip as root cmd pacman</code>
+<p>save and you should see:</p>
+<code>valid config</code>
+
+<p><a href="https://www.cjjackson.dev/posts/replacing-sudo-with-doas-on-arch-linux/">Source</a></p>
+
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Rsync-backup-to-Synology-Diskstation.html b/articles/2025/Rsync-backup-to-Synology-Diskstation.html
new file mode 100755
index 0000000..62f9c50
--- /dev/null
+++ b/articles/2025/Rsync-backup-to-Synology-Diskstation.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Rsync backup to Synology Diskstation</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Rsync backup to Synology Diskstation</h2>
+<h3>2025-03-25</h3>
+<h4>This could change but it works for me.</h4>
+<p>My Diskstation isn't always on, so I run this from the command line rather than cron.</p>
+<p>To avoid errors devices and links are skipped, permissions, times, group and owner are not written and files are compared by size only.</p>
+<p>Ssh is configured with ssh-copy-id for passwordless access and host:port details in .ssh/config</p>
+<h3>Note: I set the rsync options on the diskstation but had to chmod 755 my
+diskstation's home folder before passwordless ssh worked</h3>
+<code>#!/bin/sh
+
+ rsync -r --no-D --no-t --no-o --no-g --no-p \
+ --size-only \
+ --delete \
+ --update \
+ --exclude .cache/ \
+ --exclude Downloads/ \
+ --exclude tmp/ \
+ --exclude .local/share/Trash/ \
+ --exclude .wine \
+ --info=progress2 \
+ --stats \
+ /home/philip philip@dsm:backup-X220
+
+</code>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Screen-scaling-with-xrandr.html b/articles/2025/Screen-scaling-with-xrandr.html
new file mode 100755
index 0000000..9e42c67
--- /dev/null
+++ b/articles/2025/Screen-scaling-with-xrandr.html
@@ -0,0 +1,44 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Screen scaling with xrandr</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Screen scaling with xrandr</h2>
+<h3>2025-03-30</h3>
+<h4>Changing screen scaling on my X220</h4>
+<p>The Thinkpad X220 has a screen resolution of 1366x768 (16:9), which suits the size of the 13" screen,
+but sometimes you stumble on applications that have gui elements that are taller than the screen.</p>
+<p>In Linux, it's possible to change the screen scaling to emulate a larger screen with xrandr.
+It won't look as crisp as the real resolution, but might get you out of a bind.</p>
+<p>This command will emulate a 1920x1080 (16:9) screen:</p>
+<code>xrandr --output LVDS1 --panning 1920x1080 --scale 1.406x1.406</code>
+<p>or 1600x900:</p>
+<code>xrandr --output LVDS1 --panning 1600x900 --scale 1.171x1.172</code>
+<p>To return to the original scaling, type:</p>
+<code>xrandr --output LVDS1 --panning 1366x768 --scale 1x1</code>
+<p>On the other hand , if you have for example a 1920x1080 (16:9) screen but would like to
+scale down to 1600x900<br>(which might well be the case when I receive the new 1920x1080 IPS screen for my 14" T430)</p>
+<code>xrandr --output LVDS1 --panning 1600x900 --scale 0.8333x0.8333</code>
+<p>&nbsp;</p>
+<p>In XFCE4, you can also magnify the resolution in <br>
+<b>Settings->Appearance->Settings->Window Scaling</b><br></p>
+<p>you can also do this on the command line with</p>
+<code>xfconf-query -c xsettings -p /Gdk/WindowScalingFactor -s SCALE</code>
+<p>where SCALE is either 1 or 2</p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Shellcheck-your-bash-scripts.html b/articles/2025/Shellcheck-your-bash-scripts.html
new file mode 100755
index 0000000..36ff5c7
--- /dev/null
+++ b/articles/2025/Shellcheck-your-bash-scripts.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="stylesheet" href="/style.css" />
+ <title>Shellcheck your bash scripts</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+ <hr />
+ </header>
+
+ <main>
+<article>
+<h2>Shellcheck your bash scripts</h2>
+ <h3>2025-05-14</h3>
+ <h4>Shellcheck is a handy online and command line tool</h4>
+ <p>
+ I've started using this tool to clean up my scripts. Testing via the web
+ interface displays links to explanations of the errors or warnings found.
+ </p>
+ <p><a href="https://www.shellcheck.net/">https://www.shellcheck.net/</a></p>
+ <pre>yay -Ss shellcheck</pre>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+ <hr />
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Simplex-a-decentralised-private-messenger.html b/articles/2025/Simplex-a-decentralised-private-messenger.html
new file mode 100755
index 0000000..11f6efe
--- /dev/null
+++ b/articles/2025/Simplex-a-decentralised-private-messenger.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Simplex a decentralised private messenger</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Simplex a decentralised private messenger</h2>
+<h3>2025-04-04</h3>
+<h4>A messenger app without user IDs</h4>
+<p>Other apps have user IDs: Signal, Matrix, Session, Briar, Jami, Cwtch, etc.
+SimpleX does not, not even random numbers.This radically improves your privacy.</p>
+<p><a href="https://simplex.chat/">Simplex</a></p>
+<p><a href="https://rickcarlino.com/2024/simplex-chat-bots.html">Rick Carlino's blog</a></p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Slim-fork-login-manager.html b/articles/2025/Slim-fork-login-manager.html
new file mode 100755
index 0000000..1b55788
--- /dev/null
+++ b/articles/2025/Slim-fork-login-manager.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Slim-fork login manager</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Slim-fork login manager</h2>
+<h3>2025-04-26</h3>
+<h4>Slim has been ressurected</h4>
+<p>Slim is an lightweight login manager that has been ressurected, patched, and improved.</p>
+<p>Oh the power of open source software...</p>
+<p><a href="https://slim-fork.sourceforge.io/">Slim fork</a></p>
+<p><a href="https://github.com/adi1090x/slim_themes">Slim Themes</a></p>
+<p><img src="/images/blog/slim-theme.png" alt="slim greeny-dark theme screenshot"></p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Slstatus-date-with-alternative-locale.html b/articles/2025/Slstatus-date-with-alternative-locale.html
new file mode 100755
index 0000000..60d7b44
--- /dev/null
+++ b/articles/2025/Slstatus-date-with-alternative-locale.html
@@ -0,0 +1,59 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Slstatus date with alternative locale</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Slstatus date with alternative locale</h2>
+<h3>2025-04-26</h3>
+<h4>Modifying slstatus to display French date</h4>
+<p>My default locale is en-US, but I wanted to display weekdays in French in the slstatus bar.</p>
+<p>The solution is to add setlocale to the function in <br><b>slstatus/components/datetime.c</b></p>
+<p><img src="/images/blog/slstatus-french.png"></p>
+<pre>
+/* See LICENSE file for copyright and license details. */
+#include &lt;stdio.h&gt;
+#include &lt;time.h&gt;
+<b>#include &lt;locale.h&gt;</b>
+
+#include "../slstatus.h"
+#include "../util.h"
+
+
+const char *
+datetime(const char *fmt)
+{
+ <b>setlocale(LC_ALL,"fr_FR.utf8");</b>
+ time_t t;
+
+ t = time(NULL);
+
+ if (!strftime(buf, sizeof(buf), fmt, localtime(&t))) {
+ warn("strftime: Result string exceeds buffer size");
+ return NULL;
+ }
+
+ return buf;
+}
+</pre>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Starship-prompt.html b/articles/2025/Starship-prompt.html
new file mode 100755
index 0000000..5371de9
--- /dev/null
+++ b/articles/2025/Starship-prompt.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Starship prompt</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Starship prompt</h2>
+<h3>2025-04-26</h3>
+<h4>Making the terminal pretty with Starship</h4>
+<p>I got fed up with the powerline prompt and installed <a href="https://starship.rs/">starship</a>
+with the <a href="https://starship.rs/presets/gruvbox-rainbow">gruvbox-rainbow</a> preset.</p>
+<p><img src="/images/blog/starship-gruvbox-rainbow.png"></p>
+<p>And with that, I'm done for the day.</p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Stick-it-to-the-man.html b/articles/2025/Stick-it-to-the-man.html
new file mode 100755
index 0000000..2846439
--- /dev/null
+++ b/articles/2025/Stick-it-to-the-man.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Stick it to the man</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Artix: Stick it to the man</h2>
+<h3>2025-06-29</h3>
+<h4>Artix is the resistance: Xlibre</h4>
+<p><img width="25%" src="/images/blog/resistance.jpg" alt="resistance.jpg"></p>
+<p><a href="https://linux.slashdot.org/story/25/06/28/054245/x11-fork-xlibre-released-for-testing-on-systemd-free-artix-linux">Xlibre released for testing on Artix Linux</a></p>
+<p>Artix is becoming what Arch should have been. While corporations have been instrumental in Linux's progression over the years,
+allowing them to forge Linux into a new sort of Windows where applications are becoming totally phagocyted by a
+few pieces of software (Wayland, Systemd,...) requires solid resistance.</p>
+<p>Kudos to the people making this happen.</p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/TLP-recalibration-error-on-Thinkpad-X220.html b/articles/2025/TLP-recalibration-error-on-Thinkpad-X220.html
new file mode 100755
index 0000000..6ba27a4
--- /dev/null
+++ b/articles/2025/TLP-recalibration-error-on-Thinkpad-X220.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>TLP recalibration error on Thinkpad X220</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>TLP recalibration error on Thinkpad X220</h2>
+<h3>2025-04-08</h3>
+<h4>Error: cannot read charge level of battery BAT0</h4>
+<p>My attempt to recalibrate the battery on my X220 failed. Hunting for info I found <a href="https://github.com/linrunner/TLP/issues/793">this on github</a>
+<p>It's a TLP bug that was fixed a couple of weeks ago. The solution was to install the git versions of tlp.</p>
+<code>yay -S tlp-git tlp-rdw-git</code>
+<p>Now I can plug in my X220 to the mains and run tlp recalibrate BAT0 overnight.</p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Taking-the-leap-to-Artix.html b/articles/2025/Taking-the-leap-to-Artix.html
new file mode 100755
index 0000000..6daee3b
--- /dev/null
+++ b/articles/2025/Taking-the-leap-to-Artix.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Taking the leap to Artix</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Taking the leap to Artix</h2>
+<h3>2025-06-14</h3>
+<h4>systemd no more</h4>
+<p>Artix Linux is a distribution based on Arch, but without systemd.</p>
+<p>Seeing how systemd has become insidious within Linux it's no mean feat.</p>
+<p>After watching <a href="https://youtu.be/ZsCiqogu-bg">this video</a>,
+and having read a lot of systemd warnings by old timers,
+I decided to try Artix. I prefer a rolling release distribution, and I like Arch a lot,
+so Artix was the logical choice.</p>
+<p>After the first hour of floundering around I got it working.</p>
+<p>For some reasong the default network manager was limiting network access, for example the Artix site
+and my own site were ok, but reddit and duckduckgo were not allowed. I checked /etc/hosts but couldn't find
+the culprit. In the end I removed ConnMan and installed networkmanager and it worked straight away. In addition
+I can now use nmtui.</p>
+<p>There are still things to fix, for example the SLiM desktop manager no longer works, true it's ancient,
+so I'll have to find a replacement Until then I'm just typing startx after logging in.</p>
+<p>I have dwm running, bluetooth and pipewire too, so it's just a question of fiddling around.</p>
+
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Terminal-Trove.html b/articles/2025/Terminal-Trove.html
new file mode 100755
index 0000000..e07b7ea
--- /dev/null
+++ b/articles/2025/Terminal-Trove.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Terminal Trove</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Terminal Trove</h2>
+<h3>2025-04-02</h3>
+<h4>Terminal Trove curates and showcases all things in the terminal</h4>
+<p>such as command line interface tools (CLI), text mode interface tools (TUI), developer tools and more no matter what platform or medium.</p>
+<p>The site also has RSS feeds, and is present on mastodon and BlueSky among others</p>
+<p><a href="https://terminaltrove.com/">https://terminaltrove.com</a></p>
+<p>Nice site</p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/The-Mote-in-God's-eye.html b/articles/2025/The-Mote-in-God's-eye.html
new file mode 100755
index 0000000..d6c779c
--- /dev/null
+++ b/articles/2025/The-Mote-in-God's-eye.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>The Mote in God's eye</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>The Mote in God's eye</h2>
+<h3>2025-04-06</h3>
+<h4>Science fiction by Larry Niven and Jerry Pournelle</h4>
+<p>I'm re-reading this book on my Kobo. It's a book I first read back in the 70's.
+I probably bought it at Shakespeare & Co. a famous bookshop in the latin quarter of Paris, where
+I could go and spend a couple of hours reading a book in a big leather armchair,
+so it bears a touch of nostalgia for me.</p>
+<p>The premise is of an intelligent species (the Moties), locked in it's own solar system,
+victim of endless cycles of expansion and destruction due to it's fertility.
+Larry Niven thought big when he wrote novels like Ringworld, and here it's no exception.</p>
+<p>Some things seem a bit dated, for example the descendents of Russia, America or Scotland
+being important in the distant future, but all in all a good thought provoking read.
+To me it begs the question: what if our own species winds up becoming Moties?</p>
+<p>📘 <a href="https://www.kobo.com/us/en/ebook/the-mote-in-god-s-eye">Kobo ebook</a></p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/The-last-thing-the-EU-needs-....html b/articles/2025/The-last-thing-the-EU-needs-....html
new file mode 100755
index 0000000..05dd1d6
--- /dev/null
+++ b/articles/2025/The-last-thing-the-EU-needs-....html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>The last thing the EU needs ...</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>The last thing the EU needs ...</h2>
+<h3>2025-04-09</h3>
+<h4>Clickbait title for some serious points</h4>
+<p><a href="https://fossforce.com/2025/04/the-last-thing-the-eu-needs-is-its-own-linux-distro/">The Last Thing the EU Needs Is Its Own Linux Distro</a></p>
+<p>Having installed Linux in a couple of schools only to have the teachers showered in Microsoft freebies and propaganda,
+I fully support this guy because otherwise I know how this is going to end up.</p>
+<p>The roll over and beg attitude of authorities towards Microsoft lobbying is terrifying, and it has to change through top down
+directives that place independant European solutions first.</p>
+
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/The-universe-is-spinning.html b/articles/2025/The-universe-is-spinning.html
new file mode 100755
index 0000000..c537ffc
--- /dev/null
+++ b/articles/2025/The-universe-is-spinning.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="stylesheet" href="/style.css" />
+ <title>The universe is spinning</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+ </header>
+
+ <main>
+ <article>
+ <h2>The universe is spinning</h2>
+ <h3>2025-04-13</h3>
+ <h4>What goes around, comes around</h4>
+ <p>
+ One of my favorite Youtubers on the subject of our spinning universe
+ </p>
+ <p>No wonder I get vertigo.</p>
+ <div class="wrapper">
+ <iframe
+ src="https://www.youtube.com/embed/Gm5nvLJoXCI"
+ title="The Entire Universe Seems to Spin, New Data Reveal"
+ frameborder="0"
+ allow="
+ accelerometer;
+ autoplay;
+ clipboard-write;
+ encrypted-media;
+ gyroscope;
+ picture-in-picture;
+ web-share;
+ "
+ referrerpolicy="strict-origin-when-cross-origin"
+ allowfullscreen
+ ></iframe>
+ </div>
+ <p>
+ <a href="https://www.youtube.com/watch?v=Gm5nvLJoXCI"
+ >Sabine Hossenfelder</a
+ >
+ </p>
+ </article>
+ </main>
+ <footer>
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+ </body>
+</html>
diff --git a/articles/2025/Thinkpad-T430-screen-upgrade.html b/articles/2025/Thinkpad-T430-screen-upgrade.html
new file mode 100755
index 0000000..aa4fcdb
--- /dev/null
+++ b/articles/2025/Thinkpad-T430-screen-upgrade.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Thinkpad T430 screen upgrade</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Thinkpad T430 screen upgrade</h2>
+<h3>2025-03-21</h3>
+<h4>My T430's current screen is 1368x768, a bit crappy</h4>
+<p>So I've decided to upgrade it.</p>
+<p>I've purchased a B140HAN01.3 screen and an LCD controller board kit from Aliexpress</p>
+<p>I'll update this article when it arrives</p>
+<p><a href="https://www.aliexpress.com/item/32836668337.html">Controller board</a></p>
+<p><a href="https://www.aliexpress.com/item/1005004341552184.html">1920x1080 IPS screen</a></p>
+<h3>Oh poo.</h4>
+<p>The parts arrived, but when I installed them only the backlight works. I tried another LCD controller kit
+but there's no display. I hit a wall with the screen supplier who won't replace it. Lesson learned.</p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Thinkpad-X220-Fan-control.html b/articles/2025/Thinkpad-X220-Fan-control.html
new file mode 100755
index 0000000..2e8010d
--- /dev/null
+++ b/articles/2025/Thinkpad-X220-Fan-control.html
@@ -0,0 +1,30 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Thinkpad X220 Fan control</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Thinkpad X220 Fan control</h2>
+<h3>2025-03-21</h3>
+<h4>Blowing out the heat from my laptop</h4>
+<p>After installing thinkfan, <code>sudo pacman -S thinkfan</code>
+<p><code>journalctl -p 3 -xb</code> was showing an error concerning thinkfan, and I worked out that the thinkfan_acpi module wasn't being loaded on boot.</p>
+<p>Adding thinkpad_acpi to <code>/etc/modules-load.d/thinkpad.conf</code> didn't work</p>
+<p>What did work was editing <code>/etc/default/grub</code> and adding <code>thinkpad_acpi.fan_control=1</code> to <code>GRUB_CMDLINE_LINUX_DEFAULT</code></p>
+<p>Then </p><p><code>sudo grub-mkconfig -o /boot/grub/grub.cfg</code></p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Thinkvantage-button-in-DWM.html b/articles/2025/Thinkvantage-button-in-DWM.html
new file mode 100755
index 0000000..5721c8e
--- /dev/null
+++ b/articles/2025/Thinkvantage-button-in-DWM.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Thinkvantage button in DWM</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Thinkvantage button in DWM</h2>
+<h3>2025-04-27</h3>
+<h4>Putting the Thinkvantage button to use</h4>
+<p><img src="/images/blog/thinkvantage.png" alt="thinkvantage button"></p>
+<p>On my Thinkpad X220 there's a blue Thinkvantage button that only gets used when the machine boots to select different options.</p>
+<p>Using xev the button is referenced as XF86XK_Launch1, here I use it to run a rofi menu for logging out, shutting down, rebooting, etc.</p>
+<p><b>dwm/config.h</b></p>
+<pre>
+...
+{ 0, XF86XK_Launch1, spawn, SHCMD("rofi -show power-menu -modi power-menu:rofi-power-menu") },
+...
+</pre>
+<p>power-menu <a href="https://github.com/jluttine/rofi-power-menu">can be found here</a></p>
+<p><img src="/images/blog/powermenu.png"></p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Thoughts-on-suckless.html b/articles/2025/Thoughts-on-suckless.html
new file mode 100755
index 0000000..25d9cc8
--- /dev/null
+++ b/articles/2025/Thoughts-on-suckless.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Thoughts on suckless</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Thoughts on suckless</h2>
+<h3>2025-06-12</h3>
+<h4>Note: opinions can change</h4>
+<p>I've been playing with <a href="https://suckless.org/">suckless tools</a>: dwm, dmenu, st, surf</p>
+<p>Dwm and dmenu are fantastic, st and surf not so much.</p>
+<p>Both st and surf have patches that are incompatible, and
+often outdated. The user is expected to know how to correct the patch
+rejections, which is often possible, but knowledge of C is your best bet.</p>
+<p>Suckless software is intended to be somewhat elite. Their web site
+is frankly not suckless, perhaps intentionally? Some of the patches proposed
+address problems that have already been solved in the main program.</p>
+<p>Surf compiles but with GTK warnings about obsolete functions.</p>
+<p>St is a headbanger if you want kittygraphics, boxdraw, and ligatures for example.</p>
+<p>The educational aspect of suckless software is of course is invaluable,
+and if it's the objective, then that's fine. The problem arises when you want to
+build something that will fulfill your needs.</p>
+<p>Because of all this I use Kitty or Ghostty instead of st, and Librewolf
+instead of Surf. I just hope dwm doesn't fall into the same hole of wanting to
+be elite to the point of not fulfilling it's task, which would be a terrible shame.</p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Thoughts-on-zsh.html b/articles/2025/Thoughts-on-zsh.html
new file mode 100755
index 0000000..b0d1af6
--- /dev/null
+++ b/articles/2025/Thoughts-on-zsh.html
@@ -0,0 +1,40 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Thoughts on zsh</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Thoughts on zsh</h2>
+<h3>2025-06-22</h3>
+<h4>do I need it?</h4>
+<p>I kinda figured out that although youtubers attempt to make you feel a has-been if
+you don't use all the bells and whistles that come with zsh, that Bash does everything I need, and I can extend it if needed.</p>
+<p>Minimalism might be my aim, but it's not a do of die mantra, even so zsh appears rather flash and with esoteric possibilies that I will never use.</p>
+<p>I'm also keeping my bash scripts, there seems to be little point in making them reliant on some other shell.</p>
+<p>There are also a number of things that can improve your bash "experience" like Blesh - <a href="https://github.com/akinomyoga/ble.sh">Bash Line Editor</a></p>
+<p>So I'm sticking to Bash for now.</p>
+<p>Edit: after adding blesh I found that Midnight Commander (mc) took a few seconds to start, I fixed it with an alias:</p>
+<code>alias mc="mc --nosubshell"</code>
+<p>Re-Edit: sometimes typing in the termnal was non responsive, I got annoyed after a while and removed Blesh from .bashrc</p>
+<p>Turns out simple is best, who would have thought it?</p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Toggle-screen-resolution-in-DWM.html b/articles/2025/Toggle-screen-resolution-in-DWM.html
new file mode 100755
index 0000000..6928414
--- /dev/null
+++ b/articles/2025/Toggle-screen-resolution-in-DWM.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Toggle screen resolution in DWM</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Toggle screen resolution in DWM</h2>
+<h3>2025-06-28</h3>
+<h4>using X220 keys</h4>
+<p>Sometimes a badly written application will display a panel that is bigger than my X220's screen resolution, which is 1366x768.</p>
+<p>To quickly solve this I've affected the Scroll Lock key to a script that toggles scaling between 1366x768 and 1600x900</p>
+<p>The scaling adds some fuzziness but gets the job done.</p>
+<p><a href="https://git.wittamore.fr/dwm/about/">My DWM fork</a></p>
+<p><a href="https://git.wittamore.fr/scripts/tree/dwm-scale">DWM Scale script</a></p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Touchpad-deactivation.html b/articles/2025/Touchpad-deactivation.html
new file mode 100755
index 0000000..2f66a78
--- /dev/null
+++ b/articles/2025/Touchpad-deactivation.html
@@ -0,0 +1,58 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Touchpad deactivation</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Touchpad deactivation</h2>
+<h3>2025-06-09</h3>
+<h4>When you have big hands and a little keyboard</h4>
+<p>Until now I was using <b>synclient TouchpadOff=1</b> in my .xinitrc, but I was getting odd
+results when using the keyboard mouse buttons. It turns out oddly the lower left area of my touchpad was infrequently active
+and messing things up.</p>
+<p>Replacing synclient with <b>xinput set-prop 11 172 0</b> fixed it.</p>
+<p>I obtained the touchpad ID with <b>xinput list</b> and the command with <b>xinput -list-props 11</b></p>
+<pre>
+ $ xinput list
+ ⎡ Virtual core pointer id=2 [master pointer (3)]
+ ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
+ ⎜ ↳ Logitech Wireless Mouse id=9 [slave pointer (2)]
+ ⎜ ↳ TPPS/2 IBM TrackPoint id=12 [slave pointer (2)]
+ ⎣ Virtual core keyboard id=3 [master keyboard (2)]
+ ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
+ ↳ Power Button id=6 [slave keyboard (3)]
+ ↳ Video Bus id=7 [slave keyboard (3)]
+ ↳ Sleep Button id=8 [slave keyboard (3)]
+ ↳ AT Translated Set 2 keyboard id=10 [slave keyboard (3)]
+ ↳ ThinkPad Extra Buttons id=13 [slave keyboard (3)]
+ ↳ Logitech Wireless Mouse id=14 [slave keyboard (3)]
+ ∼ SynPS/2 Synaptics TouchPad id=11 [floating slave]
+
+$ xinput -list-props 11
+Device 'SynPS/2 Synaptics TouchPad':
+ Device Enabled (172): 1
+ ...
+
+$ xinput set-prop 11 172 0
+ </pre>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Traditional-screenshot-of-my-X220.html b/articles/2025/Traditional-screenshot-of-my-X220.html
new file mode 100755
index 0000000..19cb8af
--- /dev/null
+++ b/articles/2025/Traditional-screenshot-of-my-X220.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Traditional screenshot of my X220</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Traditional screenshot of my X220</h2>
+<h3>2025-04-08</h3>
+<h4>Thinkpad X22O running Arch Linux</h4>
+<img src="/images/blog/Screenshot_2025-04-08_14-20-40.png" alt="screenshot of X220">
+<p>It's traditional to show off one's Thinkpad screenshot basking in all it's Linuxian glory, so here we are.</p>
+<blockquote>My name is Ozymandias, King of Kings: Look on my works, ye Mighty, and despair!</blockquote>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Try-different-versions-of-Linux-online.html b/articles/2025/Try-different-versions-of-Linux-online.html
new file mode 100755
index 0000000..eb6e25d
--- /dev/null
+++ b/articles/2025/Try-different-versions-of-Linux-online.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Try different versions of Linux online</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Try different distributions of Linux online</h2>
+<h3>2025-07-14</h3>
+<h4>Distrosea</h4>
+<p>Here's a way of testing various distributions of Linux using your browser</p>
+<p>Artix Linux is included</p>
+<p><a href="https://distrosea.com">https://distrosea.com</a></p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Updated-cgit-server.html b/articles/2025/Updated-cgit-server.html
new file mode 100755
index 0000000..53ce0d7
--- /dev/null
+++ b/articles/2025/Updated-cgit-server.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Updated cgit server</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Updated cgit server</h2>
+<h3>2025-05-28</h3>
+<h4>dwm, dmenu, st repositories updated</h4>
+<p>I've updated my git server with patched versions of DWM, Dmenu and ST</p>
+<p>The cgit server is also fixed, I didn't realise that https cloning wasn't working.</p>
+<p>It works now, for example:</p>
+<pre>git clone https://git.wittamore.fr/dwm</pre>
+<p><a href="https://git.wittamore.fr">Link to my git server</a><p>
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Upload-modified-blog-files-with-scp.html b/articles/2025/Upload-modified-blog-files-with-scp.html
new file mode 100755
index 0000000..9b28eed
--- /dev/null
+++ b/articles/2025/Upload-modified-blog-files-with-scp.html
@@ -0,0 +1,65 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Upload modified blog files with scp</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Upload modified blog files with scp</h2>
+<h3>2025-03-29</h3>
+<h4>A simple bash script to update this blog using scp</h4>
+<h3>Note</h3>
+<p>I have my web server aliased in ~/.ssh/config as "web" <br>so the remote folder is web:/folder</p>
+<code>#!/bin/sh
+
+# blogsend : scp blog files to web server
+# usage : <b>blogsend</b> <i>hours</i> (if not set default is 1 hour)
+# example : <b>blogsend 72</b> sends files modified over the past 3 days
+
+# folders
+rf= <i>#add your remote ssh folder here</i>
+mf= <i>#add your local folder here</i>
+cd $mf
+
+# test if option is sent
+if [[ -z "$1" ]]; then
+ HOURS=1;
+else
+ # test if option is a number
+ if [[ "$1" =~ ^[0-9]+$ ]]; then
+ HOURS=$1;
+ else
+ HOURS=1;
+ fi
+fi
+
+MINUTES=$(($HOURS*60))
+
+echo "Sending files modified in the past $HOURS hour(s)..."
+
+files=$(find * -path .tmp -prune -o -mmin -$MINUTES -type f)
+for file in $files
+do
+ echo -ne "-> ";
+ scp -r "$file" "$rf/$file";
+done
+
+echo "Done."
+
+exit 0
+</code>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Using-Goaccess-to-view-web-stats.html b/articles/2025/Using-Goaccess-to-view-web-stats.html
new file mode 100755
index 0000000..8312fa5
--- /dev/null
+++ b/articles/2025/Using-Goaccess-to-view-web-stats.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Using Goaccess to view web stats</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Using Goaccess to view web stats</h2>
+<h3>2025-04-03</h3>
+<h4>Using Goaccess locally</h4>
+<p>I have goaccess installed on my laptop to view the web stats on a vps</p>
+<p>First install Goaccess on Arch Linux</p>
+<code>sudo pacman -S goaccess</code>
+<p>View the remote stats (adjust the path for your actual log location)</p>
+<code>ssh USER@SERVER 'zcat -f /var/log/nginx/access.log*' | goaccess -a --log-format=COMBINED</code>
+<p>I've added an alias in my .bashrc :</p>
+<code>alias stats="ssh USER@SERVER 'zcat -f /var/log/nginx/access.log*' | goaccess -a --log-format=COMBINED"</code>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/VPS-management.html b/articles/2025/VPS-management.html
new file mode 100755
index 0000000..77d77c6
--- /dev/null
+++ b/articles/2025/VPS-management.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>VPS management</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>VPS management</h2>
+<h3>2025-04-18</h3>
+<h4>Reducing things</h4>
+<p>I have 2 vps's that were underused, so I've put everything on to a single vps, which has the benefit of halving costs.</p>
+<p>My days of writing and hosting web sites for others are over, I just have to cater for myself now.</p>
+<p>Which is quite nice really...</p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/What-to-do-with-an-unused-Kindle.html b/articles/2025/What-to-do-with-an-unused-Kindle.html
new file mode 100755
index 0000000..de8bf3c
--- /dev/null
+++ b/articles/2025/What-to-do-with-an-unused-Kindle.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>What to do with an unused Kindle</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>What do you do with an unused Kindle</h2>
+<h3>2025-04-17</h3>
+<h4>Early in the morning...</h4>
+<p>My Kindle paperwhite is sleeping in a drawer since I bought a Kobo, but there's something I can do with it.</p>
+<p>Run Linux, use Koreader, play games ...
+<p><a href="https://youtu.be/Qtk7ERwlIAk">It's time to jailbreak your Kindle</a></p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Why-does-everything-feel-so-boring-now.html b/articles/2025/Why-does-everything-feel-so-boring-now.html
new file mode 100755
index 0000000..e0ef08b
--- /dev/null
+++ b/articles/2025/Why-does-everything-feel-so-boring-now.html
@@ -0,0 +1,48 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="stylesheet" href="/style.css" />
+ <title>Why does everything feel so boring now?</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+ </header>
+
+ <main>
+ <article>
+ <h2>Why does everything feel so boring now?</h2>
+ <h3>2025-06-07</h3>
+ <h4>Food for thought on blandness</h4>
+ <p>What happened to colour? Where did it go?</p>
+ <p>I wonder if we have reached peak blandness.</p>
+ <div class="wrapper">
+ <iframe
+ src="https://www.youtube.com/embed/TQSwDenTM88"
+ title="Why does everything feel so boring now?"
+ frameborder="0"
+ allow="
+ accelerometer;
+ autoplay;
+ clipboard-write;
+ encrypted-media;
+ gyroscope;
+ picture-in-picture;
+ web-share;
+ "
+ referrerpolicy="strict-origin-when-cross-origin"
+ allowfullscreen
+ ></iframe>
+ </div>
+ </article>
+ </main>
+ <footer>
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+ </body>
+</html>
diff --git a/articles/2025/Wifi-region.html b/articles/2025/Wifi-region.html
new file mode 100755
index 0000000..2a1957b
--- /dev/null
+++ b/articles/2025/Wifi-region.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Wifi region</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Wifi region</h2>
+<h3>2025-03-26</h3>
+<h4>If like me you reside in France, you may have wifi problems with the default frequency settings.</h4>
+<p>Verify the value:</p>
+<code>iw reg get</code>
+<p>If you don't see FR then it's not correctly set.</p>
+<code>sudo iw reg set FR</code>
+<p>will correct that. To make it persistant, edit /etc/default/crda and add</p>
+<code>REGDOMAIN=FR</code>
+<br>
+<a href="https://sebsauvage.net/wiki/doku.php?id=linux-vrac">Source</a></p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/Window-manager-thoughts.html b/articles/2025/Window-manager-thoughts.html
new file mode 100755
index 0000000..e8dfed3
--- /dev/null
+++ b/articles/2025/Window-manager-thoughts.html
@@ -0,0 +1,47 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Window manager thoughts</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Window manager thoughts</h2>
+<h3>2025-04-15</h3>
+<h4>Messing with i3, Openbox, and Xfce4</h4>
+<p>Listening to Youtube "influencers" I learned that I was a dummy because I don't use tiling window managers.</p>
+<p>I tried i3 in Manjaro before but just didn't connect with it. Perhaps it was me?
+Trying again I spent the past couple of days messing with the configuration files of i3, i3blocks, polybar, etc.
+again, just to see if maybe I missed out on something.</p>
+<p>Turns out I didn't.</p>
+<p>My Thinkpad X220 is my daily drive, it has a 13" screen, 1366x768, and a French keyboard.</p>
+<p>Splitting the screen is a daft idea on such a small laptop, it doesn't add any productivity improvement
+even when you cast aside the problems remembering was it Super+~ or was it Super+Shift+F2 ?,
+and the resulting digital gymnastics (although possibly good for my carpal tunnels, who knows?)</p>
+<p>It's understandable when you have a nice large desktop screen and a decently sized keyboard, but here no way.</p>
+<p>Anyway, a stacking windowmanager, Xfce4, appears to be the best bang for my buck teeth on this laptop.</p>
+<p>I have set the keystroke Super+right & left to flip through windows that I mostly have maximised
+(I'll eventually use devilspie to make this automatic),
+that are all simply stacked on top of each other in the same workspace.
+I use tabs in Ghostty to have for example Neomutt, btop, and a command line. In Librefox I have tabs too,
+and I'll probably have Libreoffice Calc or Writer open, Gimp, galculator too.</p>
+<p>Simple and effective, while keeping a bottom panel and application menu available.</p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Workshop-Air-Cleaner.html b/articles/2025/Workshop-Air-Cleaner.html
new file mode 100755
index 0000000..307a2c5
--- /dev/null
+++ b/articles/2025/Workshop-Air-Cleaner.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Workshop Air Cleaner</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>Workshop Air Cleaner</h2>
+<h3>2025-03-19</h3>
+<h4>Keeping the garage clean-ish</h4>
+<img src="/images/recordpower_AC400.jpg">
+<p>I've cancelled the plan to build a workshop. It's expensive, and increases my local taxes.</p>
+<p>So I'm adapting the shared garage. The first step is an air cleaner, I settled for the Record Power AC400</p>
+<p>I chained it to the rafters, and first results are good.</p>
+</article>
+</main>
+<footer>
+<p>&nbsp;</p><p>§</p></footer>
+</body></html>
diff --git a/articles/2025/X220-internal-Bluetooth-controller.html b/articles/2025/X220-internal-Bluetooth-controller.html
new file mode 100755
index 0000000..dd8f337
--- /dev/null
+++ b/articles/2025/X220-internal-Bluetooth-controller.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>X220 internal Bluetooth controller</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>X220 internal Bluetooth controller</h2>
+<h3>2025-05-27</h3>
+<h4>Deactivating the internal Bluetooth controller</h4>
+<p>The Thinkpad X220 has an internal Bluetooth controller, but
+<a href="/articles/2025/AC7260-wifi-card-on-Thinkpad-X220.html">I installed the AC7260 wifi/bluetooth card</a>.</p>
+<p>Unfortunately the default card remains the internal one, so autoconnect of my headset doesn't work.</p>
+<p>In order to block the internal device, I made a UDEV rule in /etc/udev/rules.d/91-bluetooth-hci.rules</p>
+<p>After obtaining the id with lsusb:</p>
+<pre>SUBSYSTEM=="usb", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="07dc", ATTR{authorized}="0"</pre>
+<p>Reboot, and the AC7260 Bluetooth card is now the default.</p>
+
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/Xlibre-on-my-X220.html b/articles/2025/Xlibre-on-my-X220.html
new file mode 100755
index 0000000..c3bc3d8
--- /dev/null
+++ b/articles/2025/Xlibre-on-my-X220.html
@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>Xlibre on my X220</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+ <main>
+<article>
+<h2>Xlibre on my X220</h2>
+<h3>2025-08-07</h3>
+<h4>Xlibre > Xorg</h4>
+<p>Not much to post about recently as I've been busy building myself a new shed to store my recuperated hardwood collection.</p>
+<p>However, I just installed Xlibre, a fork of Xorg. It's now available in the Artix Galaxy repo, and it went without a hitch.</p>
+<code>pacman -S xlibre</code>
+<p>Allow xlibre to replace all the xorg packages, then install the video driver package you need.</p>
+<code>pacman -S xlibre-xf86-video-intel</code>
+<p>For more info on Xlibre, check out the site <a href="https://x11libre.net/#about">https://x11libre.net</a></p>
+ </article>
+</main>
+<footer>
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/dwm-windowmanager-1.html b/articles/2025/dwm-windowmanager-1.html
new file mode 100755
index 0000000..5b19d06
--- /dev/null
+++ b/articles/2025/dwm-windowmanager-1.html
@@ -0,0 +1,46 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>test</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>DWM Window manager [1]</h2>
+<h3>2025-04-21</h3>
+<h4>Suckless window manager</h4>
+<p><a href="https://www.suckless.org" target="_blank">Suckless web site</a></p>
+<p>It struck me that using DWM with Monocle layout would be just what I've been looking for on my X220</p>
+<p>I cloned the st, dmenu, and dwm from suckless.org and followed the instructions to compile them.</p>
+<p>Right now I have Xfce4 installed, so to try out DWM I've added an entry to select it in lightdm</p>
+<p><b>sudo micro /usr/share/xsessions/dwm.desktop</b></p>
+<code>[Desktop Entry]
+Encoding=UTF-8
+Name=dwm
+Comment=Dynamic window manager
+Exec=dwm
+Icon=dwm
+Type=XSession
+</code>
+<p>In dwm's config.h I set the monocle layout as default and recompiled dwm.</p>
+<p>At first glance this looks much better than the i3 window manager, small, neat and fast.</p>
+<p>More to come...</p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/dwm-windowmanager-2.html b/articles/2025/dwm-windowmanager-2.html
new file mode 100755
index 0000000..27e5a63
--- /dev/null
+++ b/articles/2025/dwm-windowmanager-2.html
@@ -0,0 +1,64 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>DWM window manager [2]</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>DWM window manager [2]</h2>
+<h3>2025-04-23</h3>
+<h4>the simpler the better</h4>
+<p>Mucking around with DWM proves the old adge that less is more.
+So far I haven't needed to add any of the myriad of patches available for DWM, it works as it is for me.</p>
+<p>I've tried dwm-blocks but right now I'm using dwm-bar as I like the battery icon to update along with the charge.</p>
+<p>I have edited config.h though and changed the keybindings to work better with a French keyboard and launch a few apps.</p>
+<img src="/images/blog/dwm-btop.png" alt="dwm running btop">
+<p>Editing config.h is an ongoing job, but you can <a href=/txt/dwm-config.txt>see a snapshot here</a></p>
+<p>ST is the default terminal emulator for DWM but I rather like Ghostty even if it consumes a bit more
+memory. Adding <code>window-decoration = none</code> to <b>.config/ghostty/config</b> makes it look better in DWM.</p>
+<p>I also added <code>gtk-single-instance = true</code> to make ghostty's startup faster.</p>
+<p>Being able to swap between display layouts on the fly is cool. I mostly use monocle layout,
+but flipping to tiling or floating comes in handy.</p>
+<p>I removed the lightdm display manager and installed Slim. Here is my <b>.xinitrc</b></p>
+<pre>
+#!/bin/sh
+
+# Source global X session scripts.
+if [ -d /etc/X11/xinit/xinitrc.d ]; then
+ for f in /etc/X11/xinit/xinitrc.d/*; do
+ [ -x "$f" ] && . "$f"
+ done
+ unset f
+fi
+
+bluetooth off
+clipmenud &
+xscreensaver --no-splash &
+ghostty &
+feh --bg-scale --randomize ~/Pictures/wallpaper/* &
+~/.local/src/dwm-bar/dwm_bar.sh &
+# if dwm exits 0, restart -- this allows hot reloading of config.h
+while type dwm >/dev/null ; do dwm && continue || break ; done
+</pre>
+<p>And here is my DWM configuration file (it probably isn't the latest version) <br>
+<a href="/txt/dwm-config.txt">config.h</a></p>
+</article>
+</main>
+<footer>
+
+<p>&nbsp;</p>
+
+<p>§</p>
+ </footer>
+</body>
+</html>
diff --git a/articles/2025/dwmblocks-with-emoji-icons.html b/articles/2025/dwmblocks-with-emoji-icons.html
new file mode 100755
index 0000000..5817367
--- /dev/null
+++ b/articles/2025/dwmblocks-with-emoji-icons.html
@@ -0,0 +1,50 @@
+<!doctype html>
+<html lang="EN">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link rel="stylesheet" href="/style.css">
+ <title>dwmblocks with emoji icons</title>
+ </head>
+ <body>
+ <header>
+ <h1>Bloggings</h1>
+ <a href="/index.php">Back</a>
+
+ </header>
+
+<main>
+<article>
+<h2>dwmblocks with emoji icons</h2>
+<h3>2025-06-04</h3>
+<h4>fancy blocks for dwm</h4>
+<p>Just a pic of my simple dwmblocks status bar</p>
+<p><img src="/images/blog/dwmblocks-emoji.png"></p>
+<p>The calendar app is Orage, opened and closed by clicking on the date which launches <a href="https://git.wittamore.fr/scripts/tree/pw-date">a dwmblocks script</a></p>
+<h4>dwm/config.def.h</h4>
+<pre style="font-size:10px;white-space: pre;">
+static const Rule rules[] = {
+ /* xprop(1):
+ * WM_CLASS(STRING) = instance, class
+ * WM_NAME(STRING) = title
+ */
+ /* class instance title tags mask iscentered isfloating isterminal noswallow monitor */
+ { "Gimp", NULL, NULL, 0, 0, 1, 0, 0, -1 },
+ { "Firefox", NULL, NULL, 1 << 8, 0, 0, 0, -1, -1 },
+ { "Ghostty", NULL, NULL, 0, 0, 0, 1, 0, -1 },
+ { "Orage", NULL, NULL, 0, 0, 1, 0, 1, -1 },
+ { "Galculator", NULL, NULL, 0, 1, 1, 0, 1, -1 },
+ { NULL, NULL, "Event Tester", 0, 0, 0, 0, 1, -1 }, /* xev */
+};
+</pre>
+
+ </article>
+</main>
+<footer>
+
+ <p>&nbsp;</p>
+
+ <p>§</p>
+ </footer>
+</body>
+</html>