Arch Linux re-installation journal for my Z16 AMD ThinkPad

I took the opportunity presented by having to bring my Lenovo Z16 AMD Gen1 ThinkPad to Advice in Surat Thani for repair due to a faulty motherboard to document the re-installation process on my blog for friends and other GNOME / Arch users. In fact, I maintain a similar changelog for all of my/our Arch Linux computers and try to keep their configurations as consistent and reproducible as possible over time.

The setup described in this article is my secondary computer. My primary system, the custom Ryzen 9 3900X studio PC (see Gear), is nearly identical, though. The main difference is that it also has a large collection of audio plugins installed, which I have, so far, chosen to leave off my laptop this time. 🫣😜

Some parts of this guide will be redacted, some are somewhat incomplete (e.g. restored XY from backup) while others may appear in an order or fashion that might not always be easy to comprehend/follow. Be that as it may, I am happy to answer questions and am already looking forward to hearing what you think of my approach to configuring my system, and learning from you how I might do a better job at it in the future. 🤓️

PS: I made some of the scripts mentioned in this journal (and some more that I use regularly) available on my GitLab.

Installed base system

  • Installed Arch Linux with linux and linux-lts kernels, as well as plymouth
  • Set static hostname to <HOSTNAME>
  • Enabled SSH daemon in the GNOME Settings app
  • Added GNOME_SHELL_SLOWDOWN_FACTOR=0.3 to /etc/environment to make GNOME Shell animations more snappy:
sudo tee -a /etc/environment > /dev/null <<'EOF'
# Make GNOME Shell animations more snappy
GNOME_SHELL_SLOWDOWN_FACTOR=0.3
EOF
  • Extended /etc/hosts with
sudo tee -a /etc/hosts > /dev/null <<'EOF'
# Computers
<HOST_1_IP>     <HOSTNAME>
<HOST_2_IP>     <HOSTNAME>
<HOST_3_IP>     <HOSTNAME>
<HOST_4_IP>     <HOSTNAME>

# NAS
<NAS_IP>        <NAS_HOST>

# Raspberry Pi
<PI_1_IP>       <HOSTNAME>
<PI_2_IP>       <HOSTNAME>
EOF

Configured avahi/systemd-resolved

  • Ran sudo nano /etc/systemd/resolved.conf and changed:
MulticastDNS=no
LLMNR=no
  • Set unique static hostname by running sudo hostnamectl hostname <HOSTNAME>
  • Finished avahi/systemd-resolved configuration by running sudo systemctl restart systemd-resolved && sudo systemctl restart avahi-daemon
  • Verified avahi/systemd-resolved configuration by running sudo ss -ulpn 'sport = 5353' (only avahi-daemon owns 5353), resolvectl status | grep -i mdns (mDNS not in Current Scopes), and journalctl -u avahi-daemon -f (no host name conflicts)

Installed base packages

  • Installed pacman packages with sudo pacman -S adw-gtk-theme base-devel bind btop cava cmake cpupower dosfstools fastfetch ffmpegthumbnailer flatpak git gnome-firmware gnome-sound-recorder gst-libav gst-plugins-ugly gulp hunspell-de hyphen-de hyphen-en inxi iwd less libgda6 logrotate mediainfo mpc mpd nano-syntax-highlighting networkmanager-openvpn nmap nodejs noto-fonts-cjk npm nvm openvpn pacman-contrib patchelf php php-gd radeontop realtime-privileges rsync seahorse showmethekey speedtest-cli tree usbutils whois wireless_tools wol xcb-imdkit xcb-util-wm xorg-server xorg-xinit yarn zenity zip zsh
  • Installed yay with git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si && yay --version && cd../ && rm -rf yay, and installed yay packages with sudo yay -S blackbox-terminal linkchecker symfony-cli unimatrix-git
  • Installed Flatpak packages with flatpak install app.drey.KeyRack app.zen_browser.zen art.fatdawlf.Piccolo be.alexandervanhee.gradia ca.desrt.dconf-editor com.belmoussaoui.Decoder com.github.huluti.Curtail com.github.johnfactotum.Foliate com.github.tchx84.Flatseal com.jeffser.Alpaca com.mattjakeman.ExtensionManager com.obsproject.Studio com.rafaelmardojai.Blanket com.rafaelmardojai.SharePreview com.rafaelmardojai.WebfontKitGenerator com.valvesoftware.Steam com.vixalien.sticky de.haeckerfelix.Fragments de.haeckerfelix.Shortwave de.wwwtech.gitte dev.geopjr.Tuba hu.irl.cameractrls io.github.dimtpap.coppwr io.github.dp0sk.Crosspipe io.github.fabrialberio.pinapp io.github.flattool.Ignition io.github.flattool.Warehouse io.github.gaheldev.Millisecond io.github.htkhiem.Euphonica io.github.idevecore.Valuta io.github.jorchube.monitorets io.github.kolunmi.Bazaar io.github.mrvladus.List io.github.nate_xyz.Chromatic io.github.nozwock.Packet io.github.quodlibet.QuodLibet io.github.sitraorg.sitra io.github.sigmasd.stimulator io.github.sitraorg.sitra io.github.v81d.Wattage io.gitlab.adhami3310.Impression io.gitlab.elescoute.password io.gitlab.liferooter.TextPieces io.gitlab.news_flash.NewsFlash io.gitlab.theevilskeleton.Upscaler it.mijorus.gearlever me.dusansimic.DynamicWallpaper me.fouquet.Stencil net.codelogistics.webapps net.nokyan.Resources net.sonobus.SonoBus no.bragefuglseth.Keypunch org.ardour.Ardour org.audacityteam.Audacity org.blender.Blender org.darktable.Darktable org.filezillaproject.Filezilla org.gabmus.swatch org.gimp.GIMP org.gnome.Builder org.gnome.DejaDup org.gnome.Fractal org.gnome.Papers org.gnome.Podcasts org.gnome.Showtime org.gnome.World.PikaBackup org.gnome.design.Lorem org.gnome.gitlab.somas.Apostrophe org.gnome.meld org.gtk.Gtk3theme.adw-gtk3 org.gtk.Gtk3theme.adw-gtk3-dark org.inkscape.Inkscape org.libreoffice.LibreOffice org.mixxx.Mixxx org.mozilla.firefox org.mozilla.thunderbird org.nickvision.tagger org.nickvision.tubeconverter org.pipewire.Helvum org.pitivi.Pitivi org.signal.Signal org.soundconverter.SoundConverter page.codeberg.censor.Censor page.tesk.Refine re.sonny.OhMySVG
  • Ran flatpak config --set languages 'de;en' and flatpak config languages --set "en;de" so Flatpak apps get the right dictionaries
  • Made Flatpak theme aware with sudo flatpak override --filesystem=xdg-data/themes && gsettings set org.gnome.desktop.interface gtk-theme 'adw-gtk3' && gsettings set org.gnome.desktop.interface color-scheme 'default' && gsettings set org.gnome.desktop.interface gtk-theme 'adw-gtk3-dark' && gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
  • Installed Lightworks as the official Flatpak and authenticated it
  • Installed Bitwig Studio as the official Flatpak and authenticated it
  • Installed Studio Pro 8 as the official Flatpak and authenticated it

Configured personal files, dotfiles, and wallpaper

  • Cloned Git repository
  • Symlinked Dynamic Wallpapers from the Git repository to the user paths with
ln -s ~/Sites/<PERSONAL_GIT_REPOSITORY>/dynamic-wallpapers/circles-16-9-amadeus-paulussen.xml \
  ~/.local/share/gnome-background-properties/circles-16-9-amadeus-paulussen.xml

ln -s ~/Sites/<PERSONAL_GIT_REPOSITORY>/dynamic-wallpapers/circles-16-10-amadeus-paulussen.xml \
  ~/.local/share/gnome-background-properties/circles-16-10-amadeus-paulussen.xml
  • Symlinked nautilus scripts, Templates, fonts, and MPD playlists from <PERSONAL_GIT_REPOSITORY> to respective user paths with
ln -s ~/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/nautilus ~/.local/share/nautilus/scripts
ln -s ~/Sites/<PERSONAL_GIT_REPOSITORY>/templates ~/Templates
ln -s ~/Sites/<PERSONAL_GIT_REPOSITORY>/fonts ~/.fonts
ln -s ~/Sites/<PERSONAL_GIT_REPOSITORY>/avatar ~/Pictures/avatar
ln -s ~/Sites/<PERSONAL_GIT_REPOSITORY>/playlists ~/.local/share/mpd/playlists

Configured CLI

  • Installed oh-my-zsh with the official installation script sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
  • Added personal settings to ~/.zshrc with
cat >> ~/.zshrc <<'EOF'
# PATH & directories
export PATH="$PATH:~/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/"
export CDPATH="~/Sites/"

# Default applications
export EDITOR="nano"

# Aliases
alias gnome-builder="flatpak run org.gnome.Builder"

# Startup
logo-fastfetch.sh
EOF
  • Created custom nanorc configuration with
cat > ~/.nanorc <<'EOF'
include "/usr/share/nano/*.nanorc"
set tabsize 4
set softwrap
set tabstospaces
set whitespace "·→"
EOF
  • Configured Blackbox Terminal with
dconf load /com/raggesilver/BlackBox/ <<'EOF'
[/]
floating-controls=true
floating-controls-hover-area=uint32 20
font='Adwaita Mono 11'
headerbar-drag-area=false
remember-window-size=true
show-headerbar=false
terminal-padding=(uint32 10, uint32 10, uint32 10, uint32 10)
was-maximized=false
window-height=uint32 1128
window-width=uint32 930
EOF
  • Set Black Box terminal to launch upon login in the Ignition app
  • Enabled asterisks for password input with
sudo install -Dm440 /dev/stdin /etc/sudoers.d/pwfeedback <<'EOF'
Defaults pwfeedback
EOF

sudo visudo -c
  • Configured ufw with
sudo systemctl enable ufw.service
sudo ufw enable

sudo ufw logging off

# SSH for LAN only
sudo ufw allow from <LAN_SUBNET> to any port 22 proto tcp

# Network printer / IPP
sudo ufw allow from <LAN_SUBNET> to any port 631 proto tcp

# mDNS / Bonjour
sudo ufw allow in proto udp to 224.0.0.251 port 5353
sudo ufw allow out proto udp from any to 224.0.0.251 port 5353

sudo ufw reload

sudo chmod 600 /etc/ufw/*.rules

Configured SMB mount and automount setup

  • Created mount directories
sudo mkdir -p /mnt/smb/<NAS_NAME>/{amadeus,backup,shared} && sudo chown -R amadeus:amadeus /mnt/smb
  • Created ~/.smbcredentials
sudo tee ~/.smbcredentials > /dev/null <<'EOF'
username=*****
password=*****
EOF
  • Created the three .mount units
sudo tee /etc/systemd/system/mnt-smb-<NAS_NAME>-backup.mount > /dev/null <<'EOF'
[Unit]
Description=Mount SMB <NAS_NAME>/backup
After=network-online.target
Wants=network-online.target
[Mount]
What=//<NAS_NAME>.local/backup
Where=/mnt/smb/<NAS_NAME>/backup
Type=cifs
Options=credentials=~/.smbcredentials,vers=3.0,uid=amadeus,gid=amadeus,iocharset=utf8,actimeo=2,soft,nofail,noserverino,cache=none,_netdev
TimeoutSec=30
EOF
sudo tee /etc/systemd/system/mnt-smb-<NAS_NAME>-amadeus.mount > /dev/null <<'EOF'
[Unit]
Description=Mount SMB <NAS_NAME>/amadeus
After=network-online.target
Wants=network-online.target
[Mount]
What=//<NAS_NAME>.local/amadeus
Where=/mnt/smb/<NAS_NAME>/amadeus
Type=cifs
Options=credentials=~/.smbcredentials,vers=3.0,uid=amadeus,gid=amadeus,iocharset=utf8,actimeo=2,soft,nofail,noserverino,cache=none,_netdev
TimeoutSec=30
EOF
sudo tee /etc/systemd/system/mnt-smb-<NAS_NAME>-shared.mount > /dev/null <<'EOF'
[Unit]
Description=Mount SMB <NAS_NAME>/shared
After=network-online.target
Wants=network-online.target
[Mount]
What=//<NAS_NAME>.local/shared
Where=/mnt/smb/<NAS_NAME>/shared
Type=cifs
Options=credentials=~/.smbcredentials,vers=3.0,uid=amadeus,gid=amadeus,iocharset=utf8,actimeo=2,soft,nofail,noserverino,cache=none,_netdev
TimeoutSec=30
EOF
  • Cloned/pulled the <PERSONAL_GIT_REPOSITORY> repository, then symlinked the two repo-tracked scripts into /usr/local/bin
chmod 755 ~/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/mount-smb-<NAS_NAME>.sh
chmod 755 ~/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/umount-smb-<NAS_NAME>.sh
sudo ln -sf ~/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/mount-smb-<NAS_NAME>.sh /usr/local/bin/mount-smb-<NAS_NAME>.sh
sudo ln -sf ~/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/umount-smb-<NAS_NAME>.sh /usr/local/bin/umount-smb-<NAS_NAME>.sh
  • Installed reconcile-smb-<NAS_NAME>.sh
sudo install -m 755 -o root -g root ~/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/reconcile-smb-<NAS_NAME>.sh /usr/local/bin/
  • Added the reconcile service + timer
sudo tee /etc/systemd/system/reconcile-smb-<NAS_NAME>.service > /dev/null <<'EOF'
[Unit]
Description=Reconcile <NAS_NAME>.local SMB mounts with reachability
[Service]
Type=oneshot
ExecStart=/usr/local/bin/reconcile-smb-<NAS_NAME>.sh
EOF
sudo tee /etc/systemd/system/reconcile-smb-<NAS_NAME>.timer > /dev/null <<'EOF'
[Unit]
Description=Periodic <NAS_NAME>.local SMB reachability check
[Timer]
OnBootSec=15s
OnUnitActiveSec=20s
[Install]
WantedBy=timers.target
EOF
  • Added the NetworkManager dispatcher
sudo tee /etc/NetworkManager/dispatcher.d/50-smb-<NAS_NAME> > /dev/null <<'EOF'
#!/bin/bash
ACTION="$2"
case "$ACTION" in
  up|down|connectivity-change)
    /usr/local/bin/reconcile-smb-<NAS_NAME>.sh
    ;;
esac
EOF
sudo chmod 755 /etc/NetworkManager/dispatcher.d/50-smb-<NAS_NAME> && sudo chown root:root /etc/NetworkManager/dispatcher.d/50-smb-<NAS_NAME>
  • Reloaded the daemon and enabled the reconcile-smb-<NAS_NAME>.timer
sudo systemctl daemon-reload
sudo systemctl enable --now reconcile-smb-<NAS_NAME>.timer
  • Verified the setup
systemctl status reconcile-smb-<NAS_NAME>.timer
ls -l /usr/local/bin/{mount,umount,reconcile}-smb-<NAS_NAME>.sh
sudo /usr/local/bin/reconcile-smb-<NAS_NAME>.sh
mountpoint /mnt/smb/<NAS_NAME>/amadeus

Configured pro audio

  • Added my user to the realtime, and audio groups with sudo usermod -aG audio,realtime amadeus
  • Disabled SMT with echo forceoff | sudo tee /sys/devices/system/cpu/smt/control
  • Added threadirqs to reduce IRQ-induced audio latency jitter with sudo sed -i 's/$/ threadirqs/' /etc/kernel/cmdline and sudo mkinitcpio -P
  • Reloaded udev rules with
sudo udevadm control --reload-rules
sudo udevadm trigger
  • Set swappiness with
sudo tee /etc/sysctl.d/99-swappiness.conf >/dev/null <<'EOF'
vm.swappiness = 10
EOF
  • Reloaded system-wide kernel parameters with sudo sysctl --system

Setup accounts, credentials, and peripherals

  • Setup Bitwarden
  • Setup public key authentication with GitLab and Cyon
  • Setup Online Accounts in GNOME Settings
    • Calendars
    • Contacts
  • Added printer with sudo lpadmin -p HL-L2460DN -E -v ipp://<PRINTER_IP>/ipp/print -m everywhere and made it the default printer with lpoptions -d HL-L2460DN

Configured GNOME desktop and shell

  • Set GNOME Default Apps for web and email with xdg-mime default app.zen_browser.zen.desktop x-scheme-handler/http && xdg-mime default org.mozilla.thunderbird.desktop x-scheme-handler/mailto
  • Installed GNOME Shell extensions Copyous, Legacy (GTK3) Theme Scheme Auto Switcher, Luminus, No overview at start-up, and PaperWM
  • Configured GNOME Shell extension settings with
dconf load /org/gnome/shell/extensions/ <<'EOF'
[copyous]
clipboard-position-vertical='top'
database-backend='sqlite'
disable-hljs-dialog=false
history-length=100
show-indicator=false
wiggle-indicator=false
wmclass-exclusions=['com.biwarden.desktop']

[paperwm]
cycle-height-steps=[0.25, 0.33299999999999996, 0.5, 0.75]
cycle-width-steps=[0.25, 0.33299999999999996, 0.5, 0.75]
default-focus-mode=0
disable-topbar-styling=true
edge-preview-click-enable=false
edge-preview-enable=false
gesture-enabled=false
last-used-display-server='Wayland'
overview-min-windows-per-row=15
restore-attach-modal-dialogs='true'
restore-edge-tiling='true'
restore-keybinds='{"toggle-tiled-left":{"bind":"[\\"<Super>Left\\"]","schema_id":"org.gnome.mutter.keybindings"},"toggle-tiled-right":{"bind":"[\\"<Super>Right\\"]","schema_id":"org.gnome.mutter.keybindings"},"switch-to-workspace-last":{"bind":"[\\"<Super>End\\"]","schema_id":"org.gnome.desktop.wm.keybindings"},"unmaximize":{"bind":"[\\"<Super>Down\\",\\"<Alt>F5\\"]","schema_id":"org.gnome.desktop.wm.keybindings"},"switch-applications":{"bind":"[\\"<Super>Tab\\",\\"<Alt>Tab\\"]","schema_id":"org.gnome.desktop.wm.keybindings"},"maximize":{"bind":"[\\"<Super>Up\\"]","schema_id":"org.gnome.desktop.wm.keybindings"},"switch-applications-backward":{"bind":"[\\"<Shift><Super>Tab\\",\\"<Shift><Alt>Tab\\"]","schema_id":"org.gnome.desktop.wm.keybindings"},"focus-active-notification":{"bind":"[\\"<Super>n\\"]","schema_id":"org.gnome.shell.keybindings"}}'
restore-workspaces-only-on-primary='true'
selection-border-radius-bottom=20
selection-border-radius-top=20
show-focus-mode-icon=false
show-open-position-icon=false
show-window-position-bar=false
show-workspace-indicator=false
winprops=['{"wm_class":"de.haeckerfelix.Fragments","title":"","preferredWidth":"25%"}', '{"wm_class":"org.gabmus.swatch","title":"","preferredWidth":"25%"}', '{"wm_class":"org.gnome.design.Lorem","title":"","preferredWidth":"25%"}', '{"wm_class":"org.gnome.Decibels","title":"","preferredWidth":"25%"}', '{"wm_class":"org.gnome.Weather","title":"","preferredWidth":"25%"}', '{"wm_class":"app.drey.KeyRack","title":"","preferredWidth":"25%"}', '{"wm_class":"io.github.sigmasd.stimulator","title":"","preferredWidth":"25%"}', '{"wm_class":"be.alexandervanhee.gradia","title":"","preferredWidth":"50%"}', '{"wm_class":"com.bitwarden.desktop","title":"","preferredWidth":"50%"}', '{"wm_class":"com.github.johnfactotum.Foliate","title":"","preferredWidth":"50%"}', '{"wm_class":"com.github.tchx84.Flatseal","title":"","preferredWidth":"50%"}', '{"wm_class":"com.jeffser.Alpaca","title":"","preferredWidth":"50%"}', '{"wm_class":"com.jeffser.Pigment","title":"","preferredWidth":"50%"}', '{"wm_class":"com.rafaelmardojai.Blanket","title":"","preferredWidth":"50%"}', '{"wm_class":"de.haeckerfelix.Shortwave","title":"","preferredWidth":"50%"}', '{"wm_class":"dev.geopjr.Tuba","title":"","preferredWidth":"50%"}', '{"wm_class":"io.github.flattool.Warehouse","title":"","preferredWidth":"50%"}', '{"wm_class":"io.github.mrvladus.List","title":"","preferredWidth":"50%"}', '{"wm_class":"io.github.ronniedroid.concessio","title":"","preferredWidth":"50%"}', '{"wm_class":"io.github.tobagin.digger","title":"","preferredWidth":"50%"}', '{"wm_class":"io.gitlab.liferooter.TextPieces","title":"","preferredWidth":"50%"}', '{"wm_class":"net.nokyan.Resources","title":"","preferredWidth":"50%"}', '{"wm_class":"no.bragefuglseth.Keypunch","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.DejaDup","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.Fractal","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.Papers","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.Podcasts","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.World.PikaBackup","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.gitlab.somas.Apostrophe","title":"","preferredWidth":"50%"}', '{"wm_class":"org.nickvision.tubeconverter","title":"","preferredWidth":"50%"}', '{"wm_class":"org.signal.Signal","title":"","preferredWidth":"50%"}', '{"wm_class":"blackbox-terminal","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.Console","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.Contacts","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.Settings","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.font-viewer","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.Logs","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.SystemMonitor","title":"","preferredWidth":"50%"}', '{"wm_class":"org.gnome.TextEditor","title":"","preferredWidth":"50%"}', '{"wm_class":"nautilus","title":"","preferredWidth":"50%"}', '{"wm_class":"baobab","title":"","preferredWidth":"50%"}', '{"wm_class":"loupe","title":"","preferredWidth":"50%"}', '{"wm_class":"app.zen_browser.zen","title":"","preferredWidth":"75%"}', '{"wm_class":"io.github.dp0sk.Crosspipe","title":"","preferredWidth":"75%"}', '{"wm_class":"io.github.htkhiem.Euphonica","title":"","preferredWidth":"75%"}', '{"wm_class":"io.github.kolunmi.Bazaar","title":"","preferredWidth":"75%"}', '{"wm_class":"io.github.quodlibet.QuodLibet","title":"","preferredWidth":"75%"}', '{"wm_class":"io.gitlab.news_flash.NewsFlash","title":"","preferredWidth":"75%"}', '{"wm_class":"org.gimp.GIMP","title":"","preferredWidth":"75%"}', '{"wm_class":"org.gnome.Builder","title":"","preferredWidth":"75%"}', '{"wm_class":"org.gnome.Showtime","title":"","preferredWidth":"75%"}', '{"wm_class":"org.gnome.meld","title":"","preferredWidth":"75%"}', '{"wm_class":"org.inkscape.Inkscape","title":"","preferredWidth":"75%"}', '{"wm_class":"com.fender.studioapp8","title":"","preferredWidth":"100%"}', '{"wm_class":"com.lwks.Lightworks","title":"","preferredWidth":"75%"}', '{"wm_class":"libreoffice-startcenter","title":"","preferredWidth":"75%"}', '{"wm_class":"libreoffice-writer","title":"","preferredWidth":"75%"}', '{"wm_class":"libreoffice-calc","title":"","preferredWidth":"75%"}', '{"wm_class":"libreoffice-impress","title":"","preferredWidth":"75%"}', '{"wm_class":"libreoffice-draw","title":"","preferredWidth":"75%"}', '{"wm_class":"libreoffice-base","title":"","preferredWidth":"75%"}', '{"wm_class":"libreoffice-math","title":"","preferredWidth":"75%"}', '{"wm_class":"org.mixxx.mixxx","title":"","preferredWidth":"75%"}', '{"wm_class":"org.mozilla.firefox","title":"","preferredWidth":"75%"}', '{"wm_class":"org.pipewire.Helvum","title":"","preferredWidth":"75%"}', '{"wm_class":"epiphany","title":"","preferredWidth":"75%"}', '{"wm_class":"org.gnome.Calendar","title":"","preferredWidth":"75%"}', '{"wm_class":"org.gnome.Maps","title":"","preferredWidth":"75%"}', '{"wm_class":"org.gnome.Software","title":"","preferredWidth":"75%"}', '{"wm_class":"stamp","title":"","preferredWidth":"75%"}', '{"wm_class":"com.bitwig.BitwigStudio","title":"","preferredWidth":"100%"}', '{"wm_class":"art.fatdawlf.Piccolo","title":"","scratch_layer":true}', '{"wm_class":"com.belmoussaoui.Decoder","title":"","scratch_layer":true}', '{"wm_class":"com.github.huluti.Curtail","title":"","scratch_layer":true}', '{"wm_class":"com.mattjakeman.ExtensionManager","title":"","scratch_layer":true}', '{"wm_class":"com.vixalien.sticky","title":"","scratch_layer":true}', '{"wm_class":"io.github.fabrialberio.pinapp","title":"","scratch_layer":true}', '{"wm_class":"io.github.flattool.Ignition","title":"","scratch_layer":true}', '{"wm_class":"io.github.gaheldev.Millisecond","title":"","scratch_layer":true}', '{"wm_class":"io.github.idevecore.Valuta","title":"","scratch_layer":true}', '{"wm_class":"io.github.jorchube.monitorets","title":"","scratch_layer":true}', '{"wm_class":"io.github.nozwock.Packet","title":"","scratch_layer":true}', '{"wm_class":"io.gitlab.adhami3310.Impression","title":"","scratch_layer":true}', '{"wm_class":"io.gitlab.elescoute.password","title":"","scratch_layer":true}', '{"wm_class":"me.dusansimic.DynamicWallpaper","title":"","scratch_layer":true}', '{"wm_class":"org.soundconverter.SoundConverter","title":"","scratch_layer":true}', '{"wm_class":"page.tesk.Refine","title":"","scratch_layer":true}', '{"wm_class":"org.gnome.Calculator","title":"","scratch_layer":true}', '{"wm_class":"org.gnome.Characters","title":"","scratch_layer":true}', '{"wm_class":"org.gnome.Clocks","title":"","scratch_layer":true}', '{"wm_class":"org.gnome.DiskUtility","title":"","scratch_layer":true}', '{"wm_class":"org.gnome.tweaks","title":"","scratch_layer":true}', '{"wm_class":"showmethekey","title":"","scratch_layer":true}', '{"wm_class":"","title":"Mozilla Thunderbird","preferredWidth":"75%"}']

[paperwm/keybindings]
activate-window-under-cursor=@as []
barf-out=['']
barf-out-active=['<Shift><Super>i']
center=@as []
center-horizontally=['<Super>c']
center-vertically=['']
close-window=['<Super>q']
cycle-height=['<Super><Shift>r']
cycle-height-backwards=['<Super><Alt><Shift>r']
cycle-width=['<Super>r']
cycle-width-backwards=['<Super><Alt>r']
drift-left=['']
drift-right=['']
live-alt-tab=['<Super>Tab', '<Alt>Tab']
live-alt-tab-backward=['<Super><Shift>Tab', '<Alt><Shift>Tab']
live-alt-tab-scratch=['']
live-alt-tab-scratch-backward=['']
move-down=['<Super><Ctrl>Down']
move-down-workspace=@as []
move-left=['<Super><Ctrl>comma', '<Super><Shift>comma', '<Super><Ctrl>Left']
move-monitor-above=['']
move-monitor-below=['']
move-monitor-left=['']
move-monitor-right=['']
move-previous-workspace=['']
move-previous-workspace-backward=['']
move-right=['<Super><Ctrl>period', '<Super><Shift>period', '<Super><Ctrl>Right']
move-space-monitor-above=['']
move-space-monitor-below=['']
move-space-monitor-left=['']
move-space-monitor-right=['']
move-up=['<Super><Ctrl>Up']
move-up-workspace=@as []
new-window=['<Super>n']
open-window-position-down=@as []
open-window-position-end=@as []
open-window-position-left=@as []
open-window-position-right=@as []
open-window-position-start=@as []
open-window-position-up=@as []
paper-toggle-fullscreen=['<Super><shift>f']
previous-workspace=['']
previous-workspace-backward=['']
resize-h-dec=['']
resize-h-inc=@as []
resize-w-dec=['']
resize-w-inc=@as []
slurp-in=['<Super>i']
swap-monitor-above=['']
swap-monitor-below=['']
swap-monitor-left=['']
swap-monitor-right=['']
switch-down=['<Super>Down']
switch-down-loop=@as []
switch-down-or-else-workspace=@as []
switch-down-workspace=['']
switch-down-workspace-from-all-monitors=@as []
switch-eighth=@as []
switch-eleventh=@as []
switch-fifth=@as []
switch-first=['<Super>Home']
switch-focus-mode=['']
switch-fourth=@as []
switch-global-down=@as []
switch-global-left=@as []
switch-global-right=@as []
switch-global-up=@as []
switch-last=['<Super>End']
switch-left=['<Super>Left']
switch-left-loop=@as []
switch-monitor-above=['']
switch-monitor-below=['']
switch-monitor-left=@as []
switch-monitor-right=@as []
switch-next=['']
switch-next-loop=@as []
switch-ninth=@as []
switch-open-window-position=['']
switch-previous=['']
switch-previous-loop=@as []
switch-right=['<Super>Right']
switch-right-loop=@as []
switch-second=@as []
switch-seventh=@as []
switch-sixth=@as []
switch-tenth=@as []
switch-third=@as []
switch-up=['<Super>Up']
switch-up-loop=@as []
switch-up-or-else-workspace=@as []
switch-up-workspace=['']
switch-up-workspace-from-all-monitors=@as []
take-window=['<Super>t']
toggle-maximize-width=['<Super>f']
toggle-position-bar=@as []
toggle-scratch=['<Control><Super>Escape']
toggle-scratch-layer=['']
toggle-scratch-window=['']
toggle-top-and-position-bar=['']
toggle-top-bar=@as []

[paperwm/workspaces]
list=['f597c64e-ddcf-4446-a539-695fc1d39bba', 'abf50bb7-0b86-4139-9730-776ed9d71adc', '7776d108-e0b1-4f56-8ece-524bb03342bd', '9455a255-ccdc-431b-8fe5-04d52cb09ec9']

[paperwm/workspaces/7776d108-e0b1-4f56-8ece-524bb03342bd]
index=2

[paperwm/workspaces/9455a255-ccdc-431b-8fe5-04d52cb09ec9]
index=3

[paperwm/workspaces/abf50bb7-0b86-4139-9730-776ed9d71adc]
index=1

[paperwm/workspaces/f597c64e-ddcf-4446-a539-695fc1d39bba]
index=0
EOF
  • Manually added Copyous Pinned Items …, ฿, —, ç, Ş, ó
  • Setup three custom scripts to launch the web browser (app.zen_browser.zen) with Super+B, the terminal (blackbox-terminal) with Super+Enter, and the file browser (nautilus) with Super+E by first creating the scripts and then configuring the key bindings respectively with
sudo tee ~/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/gnome/open-browser.sh > /dev/null <<'EOF'
#!/bin/sh
exec flatpak run app.zen_browser.zen
EOF
sudo tee ~/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/gnome/open-terminal.sh > /dev/null <<'EOF'
#!/bin/sh
exec blackbox-terminal
EOF
sudo tee ~/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/gnome/open-files.sh > /dev/null <<'EOF'
#!/bin/sh
exec nautilus
EOF
#!/usr/bin/env bash
set -e

BASE="/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings"

# Register the custom keybindings
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings \
"[
'${BASE}/browser/',
'${BASE}/terminal/',
'${BASE}/files/'
]"

# app.zen_browser.zen
gsettings set \
org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${BASE}/browser/ \
name "Open Browser"

gsettings set \
org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${BASE}/browser/ \
command "$HOME/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/gnome/open-browser.sh"

gsettings set \
org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${BASE}/browser/ \
binding "<Super>b"

# blackbox-terminal
gsettings set \
org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${BASE}/terminal/ \
name "Open Terminal"

gsettings set \
org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${BASE}/terminal/ \
command "$HOME/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/gnome/open-terminal.sh"

gsettings set \
org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${BASE}/terminal/ \
binding "<Super>Return"

# nautilus
gsettings set \
org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${BASE}/files/ \
name "Open Files"

gsettings set \
org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${BASE}/files/ \
command "$HOME/Sites/<PERSONAL_GIT_REPOSITORY>/scripts/gnome/open-files.sh"

gsettings set \
org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:${BASE}/files/ \
binding "<Super>e"

echo "Done."
  • Set GNOME key bindings* with
dconf write /org/gnome/desktop/wm/keybindings/close "['<Super>w']"
dconf write /org/gnome/desktop/wm/keybindings/move-to-workspace-up "@as []"
dconf write /org/gnome/desktop/wm/keybindings/move-to-workspace-down "@as []"
dconf write /org/gnome/desktop/wm/keybindings/move-to-workspace-left "['<Shift><Super>Left']"
dconf write /org/gnome/desktop/wm/keybindings/move-to-workspace-right "['<Shift><Super>Right']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-1 "['<Super><Shift>1']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-2 "['<Super><Shift>2']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-3 "['<Super><Shift>3']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-4 "['<Super><Shift>4']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1 "['<Super>1']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-2 "['<Super>2']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-3 "['<Super>3']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4 "['<Super>4']"
  • Adjusted GNOME Settings app configuration with
dconf load /org/gnome/desktop/sound/ <<'EOF'
[/]
event-sounds=false
theme-name='__custom'
EOF
dconf load /org/gnome/desktop/peripherals/ <<'EOF'
[touchpad]
speed=0.47008547008547019
tap-and-drag=false
two-finger-scrolling-enabled=true
EOF
dconf load /org/gnome/desktop/input-sources/ <<'EOF'
[/]
mru-sources=[('xkb', 'us')]
sources=[('xkb', 'ch'), ('xkb', 'th')]
EOF
  • Changed GNOME's mag-factor with gsettings set org.gnome.desktop.a11y.magnifier mag-factor 1.7
  • Configured nautilus sidebar elements with
sudo tee ~/.config/gtk-3.0/bookmarks > /dev/null <<'EOF'
file://~/Desktop Desktop
file://~/Documents Documents
file://~/Downloads Downloads
file://~/Music Music
file://~/Pictures Pictures
file://~/Sites Sites
file://~/Templates Templates
file://~/Videos Videos
file:///mnt/smb/<NAS_NAME>/amadeus <NAS_NAME>
EOF
  • Symlinked custom .desktop launchers from <PERSONAL_GIT_REPOSITORY> Git repository with
mkdir -p ~/.local/share/applications

SRC_DIR=~/Sites/<PERSONAL_GIT_REPOSITORY>/custom-desktop-launchers
DEST_DIR=~/.local/share/applications

for f in "$SRC_DIR"/*.desktop; do
    dest="$DEST_DIR/$(basename "$f")"
    if [ -e "$dest" ] && [ ! -L "$dest" ]; then
        echo "Replacing existing file: $dest"
    fi
    ln -sf "$f" "$dest"
done

update-desktop-database "$DEST_DIR"
  • Configured GNOME dock favorites with dconf write /org/gnome/shell/favorite-apps "['org.gnome.Nautilus.desktop', 'org.signal.Signal.desktop', 'org.mozilla.thunderbird.desktop', 'app.zen_browser.zen.desktop', 'com.bitwarden.desktop.desktop', 'org.gnome.TextEditor.desktop', 'com.bitwig.BitwigStudio.desktop', 'Sononym.desktop', 'io.github.quodlibet.QuodLibet.desktop', 'com.raggesilver.BlackBox.desktop', 'org.gnome.Settings.desktop']"

Configured GNOME overview app grid

  • Created folders with
dconf load /org/gnome/desktop/app-folders/ << 'EOF'
[/]
folder-children=['System', 'Utilities', 'YaST', 'Pardus', 'e6e599c3-6109-466b-af08-f15ad2b78c9c', 'a44c1ab8-efb8-4ae4-895e-426fa4998315', 'c0cb5d93-ebb6-4df3-9771-7db80c4d0a23', '21afcf46-e26b-4386-95f8-3683dbc08137', 'c9914c5f-cbe7-410d-80da-5c8f2e972c09', '54440d6f-fb64-477a-bf62-17d7b025ba55', 'de3780cc-3d81-4683-9469-e7f7b055bed5', 'd23a8583-1412-4ff6-9583-15e107d937cf', 'fde98bb2-dae6-465d-8b77-2031a655e66c', '6a58a1c0-e3fd-4a85-bed8-f3e28e4ecdff', '4474c5fb-a7cd-43b1-8512-f104e28f2733', '6f0a9004-30a1-4d02-8acf-764ea4362a58', '4f79323f-b079-4e6b-9300-de2713913232', '9fc2a554-47cf-4702-a829-2e5b3cf65763', 'aabaf61f-ce50-4490-8ad0-626a1904139f', '8848f124-60d2-4115-8ee7-04940eb06d10']

[folders/21afcf46-e26b-4386-95f8-3683dbc08137]
apps=['com.lwks.Lightworks.desktop', 'org.pitivi.Pitivi.desktop', 'org.gnome.Showtime.desktop']
name='Video'
translate=false

[folders/4474c5fb-a7cd-43b1-8512-f104e28f2733]
apps=['org.gnome.DejaDup.desktop', 'org.gnome.World.PikaBackup.desktop']
name='Backup'
translate=false

[folders/4f79323f-b079-4e6b-9300-de2713913232]
apps=['org.gnome.Epiphany.desktop', 'org.mozilla.firefox.desktop']
name='Browser'
translate=false

[folders/54440d6f-fb64-477a-bf62-17d7b025ba55]
apps=['org.gnome.gitlab.somas.Apostrophe.desktop', 'io.github.mrvladus.List.desktop', 'de.haeckerfelix.Fragments.desktop', 'bvnc.desktop', 'bssh.desktop', 'avahi-discover.desktop', 'qv4l2.desktop', 'qvidcap.desktop', 'htop.desktop', 'org.gnome.Fractal.desktop', 'com.github.johnfactotum.Foliate.desktop', 'dev.bragefuglseth.Keypunch.desktop', 'com.ranfdev.DistroShelf.desktop', 'me.sanchezrodriguez.passes.desktop', 'nm-connection-editor.desktop', 'com.valvesoftware.Steam.desktop', 'net.codelogistics.webapps.desktop', 'io.github.kolunmi.Bazaar.desktop', 'org.mozilla.thunderbird_esr.desktop', 'me.fouquet.Stencil.desktop', 'page.codeberg.censor.Censor.desktop', 'org.nickvision.tubeconverter.desktop', 'no.bragefuglseth.Keypunch.desktop', 'io.github.flattool.Ignition.desktop']
name='Miscellaneous'
translate=false

[folders/6a58a1c0-e3fd-4a85-bed8-f3e28e4ecdff]
apps=['io.github.idevecore.Valuta.desktop', 'io.github.sigmasd.stimulator.desktop', 'io.gitlab.adhami3310.Impression.desktop', 'app.drey.KeyRack.desktop', 'io.github.nozwock.Packet.desktop', 'com.vixalien.sticky.desktop', 'cups.desktop', 'io.gitlab.elescoute.password.desktop', 'io.github.ronniedroid.concessio.desktop', 'com.belmoussaoui.Decoder.desktop', 'art.fatdawlf.Piccolo.desktop']
name='Helper'
translate=false

[folders/6f0a9004-30a1-4d02-8acf-764ea4362a58]
apps=['org.gnome.Builder.desktop', 'de.wwwtech.gitte.desktop', 'io.gitlab.liferooter.TextPieces.desktop', 'org.filezillaproject.Filezilla.desktop', 'org.gnome.meld.desktop', 'com.rafaelmardojai.WebfontKitGenerator.desktop', 're.sonny.OhMySVG.desktop', 'com.rafaelmardojai.SharePreview.desktop', 'cmake-gui.desktop']
name='Development'
translate=false

[folders/8848f124-60d2-4115-8ee7-04940eb06d10]
apps=['com.jeffser.Alpaca.desktop', 'io.github.qwersyk.Newelle.desktop', 'io.github.chidiwilliams.Buzz.desktop', 'net.codelogistics.webapps.webapp_b865d5e6_ae60_4271_a053_23116f79458f.desktop', 'net.codelogistics.webapps.webapp_84cb91fe_0d25_4670_84b4_8ad635cd60e7.desktop']
name='AI'
translate=false

[folders/9fc2a554-47cf-4702-a829-2e5b3cf65763]
apps=['com.obsproject.Studio.desktop', 'com.core447.StreamController.desktop', 'hu.irl.cameractrls.desktop']
name='Screen Recording'
translate=false

[folders/Pardus]
categories=['X-Pardus-Apps']
name='X-Pardus-Apps.directory'
translate=true

[folders/System]
apps=['org.gnome.SystemMonitor.desktop']
name='X-GNOME-Shell-System.directory'
translate=true

[folders/Utilities]
apps=['org.gnome.Connections.desktop', 'org.gnome.Evince.desktop', 'org.gnome.font-viewer.desktop', 'org.gnome.Loupe.desktop', 'org.gnome.Snapshot.desktop', 'org.gnome.SimpleScan.desktop', 'org.gnome.Papers.desktop']
name='GNOME #2'
translate=false

[folders/YaST]
categories=['X-SuSE-YaST']
name='suse-yast.directory'
translate=true

[folders/a44c1ab8-efb8-4ae4-895e-426fa4998315]
apps=['org.libreoffice.LibreOffice.writer.desktop', 'org.libreoffice.LibreOffice.calc.desktop', 'org.libreoffice.LibreOffice.draw.desktop', 'org.libreoffice.LibreOffice.impress.desktop', 'org.libreoffice.LibreOffice.math.desktop', 'org.libreoffice.LibreOffice.base.desktop', 'org.libreoffice.LibreOffice.desktop']
name='LibreOffice'
translate=false

[folders/aabaf61f-ce50-4490-8ad0-626a1904139f]
apps=['net.nokyan.Resources.desktop', 'io.github.jorchube.monitorets.desktop', 'de.capypara.FieldMonitor.desktop', 'org.gnome.baobab.desktop', 'org.gnome.DiskUtility.desktop', 'org.gnome.Logs.desktop', 'org.gnome.Boxes.desktop', 'btop.desktop', 'org.gnome.Console.desktop', 'io.github.v81d.Wattage.desktop']
name='Maintenance'
translate=false

[folders/c0cb5d93-ebb6-4df3-9771-7db80c4d0a23]
apps=['org.gnome.Calculator.desktop', 'org.gnome.Software.desktop', 'org.gnome.Firmware.desktop', 'nm-connection-editor.desktop', 'org.freedesktop.MalcontentControl.desktop', 'org.gnome.Yelp.desktop', 'org.gnome.seahorse.Application.desktop']
name='GNOME #3'
translate=false

[folders/c9914c5f-cbe7-410d-80da-5c8f2e972c09]
apps=['org.gnome.Contacts.desktop', 'org.gnome.Weather.desktop', 'org.gnome.clocks.desktop', 'org.gnome.Maps.desktop', 'yelp.desktop', 'org.gnome.Tour.desktop', 'org.gnome.Characters.desktop', 'org.gnome.Calendar.desktop']
name='GNOME #1'
translate=false

[folders/d23a8583-1412-4ff6-9583-15e107d937cf]
apps=['org.gnome.tweaks.desktop', 'page.tesk.Refine.desktop', 'com.mattjakeman.ExtensionManager.desktop', 'me.dusansimic.DynamicWallpaper.desktop', 'io.github.flattool.Warehouse.desktop', 'com.github.tchx84.Flatseal.desktop', 'io.github.fabrialberio.pinapp.desktop', 'org.gnome.Extensions.desktop', 'ca.desrt.dconf-editor.desktop', 'it.mijorus.gearlever.desktop']
name='Settings'
translate=false

[folders/de3780cc-3d81-4683-9469-e7f7b055bed5]
apps=['dev.geopjr.Tuba.desktop', 'io.gitlab.news_flash.NewsFlash.desktop']
name='Social Media'
translate=false

[folders/e6e599c3-6109-466b-af08-f15ad2b78c9c]
apps=['org.mixxx.Mixxx.desktop', 'io.github.dp0sk.Crosspipe.desktop', 'org.pipewire.Helvum.desktop', 'TouchOSC.desktop', 'org.audacityteam.Audacity.desktop', 'org.ardour.Ardour.desktop', 'org.gnome.Decibels.desktop', 'net.sonobus.SonoBus.desktop', 'org.soundconverter.SoundConverter.desktop', 'org.gnome.Podcasts.desktop', 'de.haeckerfelix.Shortwave.desktop', 'org.gnome.SoundRecorder.desktop', 'io.github.gaheldev.Millisecond.desktop', 'Wurly.desktop', 'MiniMeters.desktop', 'io.github.htkhiem.Euphonica.desktop', 'org.nickvision.tagger.desktop', 'com.rafaelmardojai.Blanket.desktop', 'io.github.dimtpap.coppwr.desktop', 'Integrate.desktop', 'SX1000.desktop', 'JUNE.desktop', 'JULY.desktop', 'kazrog-plugin-manager.desktop', 'com.fender.studioapp8.desktop', 'pipewire-controller.desktop', 'io.github.intechstudio.GridEditor.desktop', 'io.github.nate_xyz.Chromatic.desktop']
name='Audio'
translate=false

[folders/fde98bb2-dae6-465d-8b77-2031a655e66c]
apps=['org.inkscape.Inkscape.desktop', 'org.gimp.GIMP.desktop', 'org.blender.Blender.desktop', 'org.gabmus.swatch.desktop', 'be.alexandervanhee.gradia.desktop', 'com.github.huluti.Curtail.desktop', 'com.github.finefindus.eyedropper.desktop', 'com.jeffser.Pigment.desktop', 'org.gnome.design.Lorem.desktop', 'org.darktable.Darktable.desktop', 'io.gitlab.theevilskeleton.Upscaler.desktop']
name='Graphics'
EOF
  • Sorted folders with dconf write /org/gnome/shell/app-picker-layout "[{'e6e599c3-6109-466b-af08-f15ad2b78c9c': <{'position': <0>}>, 'fde98bb2-dae6-465d-8b77-2031a655e66c': <{'position': <1>}>, '21afcf46-e26b-4386-95f8-3683dbc08137': <{'position': <2>}>, '6f0a9004-30a1-4d02-8acf-764ea4362a58': <{'position': <3>}>, 'a44c1ab8-efb8-4ae4-895e-426fa4998315': <{'position': <4>}>, 'c9914c5f-cbe7-410d-80da-5c8f2e972c09': <{'position': <5>}>, 'Utilities': <{'position': <6>}>, 'c0cb5d93-ebb6-4df3-9771-7db80c4d0a23': <{'position': <7>}>, '54440d6f-fb64-477a-bf62-17d7b025ba55': <{'position': <8>}>, '9fc2a554-47cf-4702-a829-2e5b3cf65763': <{'position': <9>}>, 'de3780cc-3d81-4683-9469-e7f7b055bed5': <{'position': <10>}>, '4f79323f-b079-4e6b-9300-de2713913232': <{'position': <11>}>, '4474c5fb-a7cd-43b1-8512-f104e28f2733': <{'position': <12>}>, '6a58a1c0-e3fd-4a85-bed8-f3e28e4ecdff': <{'position': <13>}>, '8848f124-60d2-4115-8ee7-04940eb06d10': <{'position': <14>}>, 'aabaf61f-ce50-4490-8ad0-626a1904139f': <{'position': <15>}>, 'd23a8583-1412-4ff6-9583-15e107d937cf': <{'position': <16>}>}]"

Migrated data from NAS backup

  • rsynced ~/Music/Music and ~/Music/Audio\ Library from backup
  • rsynced ~/.config/btop, ~/.config/cava, ~/.config/copyous@boerdereinar.dev, and ~/.config/mpd from backup
  • rsynced ~/.quodlibet from backup
  • rsynced ~/.var/app/{app.zen_browser.zen, dev.geopjr.Tuba, io.github.htkhiem.Euphonica, io.github.mrvladus.List, io.gitlab.liferooter.TextPieces, io.gitlab.news_flash.NewsFlash, org.darktable.Darktable, org.gnome.Builder, org.gnome.gitlab.somas.Apostrophe, org.inkscape.Inkscape, org.libreoffice.LibreOffice, org.mixxx.Mixxx, org.mozilla.firefox, org.mozilla.thunderbird} from backup
  • rsynced ~/.BitwigStudio and ~/Bitwig\ Studio from backup

Configured applications

Configured MPD

  • Made a directory for the MPD configuration and pid_file with mkdir -p ~/.config/mpd/pid and added custom configuration with
sudo tee ~/.config/mpd/mpd.conf > /dev/null <<'EOF'
music_directory         "~/Music/Music"
db_file                 "~/.local/share/mpd/tag_cache"
state_file              "~/.local/share/mpd/state"
sticker_file            "~/.local/share/mpd/sticker.sql"
playlist_directory      "~/.local/share/mpd/playlists"
auto_update             "yes"
pid_file                "~/.config/mpd/pid"

bind_to_address     "127.0.0.1"
port                "6600"

audio_output {
    type        "pipewire"
    name        "PipeWire"
}
EOF
  • Made an MPD data directory with mkdir -p ~/.local/share/mpd, and started MPD with systemctl --user enable --now mpd

Configured miscellaneous other apps

  • Installed Llama3 (latest), Qwen3.5 (latest) and Mistral (latest) in Alpaca app
  • Downloaded and installed Sononym to /opt/sononym
  • Imported OBS scene collection from <NAS_HOST> backup
  • Configured Backups (Deja Dup ) app to use <NAS_HOST> (/mnt/smb/<NAS_NAME>/backup/<HOSTNAME>/) as destination, and excluded ~/.var/app/com.jeffser.Alpaca/data, Trash, and ~/Downloads
  • Setup Tuba with Love You More, Linux Audio Development and Amadeus Paulussen accounts

Configured VPN

  • Added a new OpenVPN configuration in GNOME's Settings app via file import from Bitwarden item <NAS_HOST> (amadeus) naming it room-of-love, adding credentials, <VPN_HOSTNAME>:<PORT>:udp4 as Gateway, and disabling IPv6 entirely
  • Setup Proton VPN WireGuard by downloading wg-proton.conf from https://account.protonvpn.com/downloads and running nmcli connection import type wireguard file wg-proton.conf and nmcli connection modify "wg-proton" connection.autoconnect no

Configured PHP for Grav development

  • Uncommented extension=gd in /etc/php/php.ini
2026-08-25