Installing Debian 13 Trixie
2026-05-15 19:19
Had this one on the todo list for a while. Finally got around to it. This is essentially a revamped post of my 2024 Setting up Debian and GNOME DE notes. Since then I've dropped some software like zellij, added a few more, moved from GNOME to Xfce, and changed some preparation processes to make life a little easier during the upgrade. I know that I could have just followed these steps and done an upgrade, and it seems Debian is pretty good at doing this successfully, but I like to do a clean install as it gives me a chance to clean out the junk, find new workflows and force some documenting for future me (thus this post).
Preparation
Ensure all dotfiles, config files and systemd service files are stowed in my ~/.dotfiles directory, and that directory has been pushed to the Forgejo repository on the Raspberry Pi.
PARA folders are backed up using BorgBackup onto the TrueNAS Supermicro server BorgWarehouse respository.
Prepare a USB stick with the new OS
Reboot with stick in tapping F12 on my Dell laptop, load via USB, and run through the installation steps.
Once in
Add user to sudo group
su
sudo usermod -aG sudo [username]
groups [username] # check user has been added
exit
Enable firewall
sudo apt install ufw
sudo ufw enable
sudo ufw logging off
sudo ufw status verbose
Install available packages through apt
sudo apt install borgbackup btop buku feh galculator gimp git imagemagick jhead newsboat peek pipx qbittorrent ripgrep rsync stow syncthing tmux tmuxp tree vlc xsane xsel
Clone dotfiles stow repository and spit out all the symlinks
In ~/ git clone... repo.
cd dotfiles
stow xyz
Extract PARA folders from TrueNAS
borg list ssh://borgwarehouse/./3281bb14 ## "borgwarehouse" is defined in my .ssh/config file which was restored via stow in the previous step.
cd /
borg extract --list ssh://borgwarehouse/./3281bb14::zkbro-2026-05-10T12:02:04 ## or whatever the latest backup is.
Additional software installations
Install yazi
curl -sS https://debian.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/trusted.gpg.d/debian.griffo.io.gpg
echo "deb https://debian.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/debian.griffo.io.list
sudo apt update
sudo apt install yazi
Install Surfshark VPN client
curl -f https://downloads.surfshark.com/linux/debian-install.sh --output surfshark-install.sh #gets the installation script
cat surfshark-install.sh #show script’s content
sh surfshark-install.sh #installs surfshark
Install tailscale
curl -fsSL https://tailscale.com/install.sh | sh
Install neocities-cli
neocities-cli is installed via ruby, so first install ruby-full and a bunch of other crap:
sudo apt install ruby-full build-essential ruby-dev libssl-dev zlib1g-dev
Now install neocities-cli:
sudo gem install neocities
Install async-neocities
This is to make it quicker to upload my website to Neocities. First, install latest version of Node.js (see https://tecadmin.net/install-latest-nodejs-npm-on-debian/):
sudo apt-get install curl software-properties-common
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash -
sudo apt-get install -y nodejs
Then to install async-neocities:
npm install async-neocities
Install Librewolf
sudo apt update && sudo apt install extrepo -y
sudo extrepo enable librewolf
sudo apt update && sudo apt install librewolf -y
Uninstall Firefox
sudo apt remove --purge firefox-esr
rm -rf ~/.mozilla/
Install software from binaries
- stew binary package manager. Once installed, try and install the following binaries through
stew: - helix
- lagrange
- lazygit
- marksman
- rucola
- soulseek - use the Latest Linux 64-bit AppImage link in stew.
- zola
Install duckdb
curl https://install.duckdb.org | sh
Software-specific Customisation
Librewolf
Configure syncthing
Just get the thing started. Config file symlinked out of ~/dotfiles has it already set up as before. My Android didn't even blink.
systemctl enable syncthing@zkbro.service
systemctl start syncthing@zkbro.service
Install/inject python libraries into pipx environments
Not 100% I am using pipx correctly, but I have been injecting all the packages under pylsp once installed.
pipx install python-lsp-server
pipx inject python-lsp-server [package-name]
Kinda fucked this up, but most of it is under python-lsp-server:
zkbro@laptop:/etc/apt/sources.list.d$ pipx list --include-injected
venvs are in /home/zkbro/.local/share/pipx/venvs
apps are exposed on your $PATH at /home/zkbro/.local/bin
manual pages are exposed at /home/zkbro/.local/share/man
package pandas 3.0.3, installed using Python 3.13.5
- f2py
- numpy-config
package python-lsp-server 1.14.0, installed using Python 3.13.5
- pylsp
Injected Packages:
- bs4 0.0.2
- datetime 6.0
- duckdb 1.5.2
- feedgen 1.0.0
- feedparser 6.0.12
- fitdecode 0.11.0
- fitparse 1.2.0
- folium 0.20.0
- geopy 2.4.1
- gpxplotter 0.2.12
- gpxpy 1.6.2
- python-lsp-black 2.0.0
- python-lsp-ruff 2.3.1
- pyudev 0.24.4
- reportlab 4.5.1
package wheel 0.47.0, installed using Python 3.13.5
- wheel
Download fit2gpx.py and paste into /home/zkbro/.local/share/pipx/venvs/python-lsp-server/lib/python3.13/site-packages/. For whatever reason I can't inject this package.
Configure git
See Setting up Git (The Odin Project) for a good how-to.
git config --global user.name "Your Name"
git config --global user.email "yourname@example.com"
git config --global init.defaultBranch main
git config --global pull.rebase false
And confirm:
git config --get user.name
git config --get user.email
Additional packages needed for Garmin mounting in Xfce
sudo apt install gvfs-backends gvfs-fuse libmtp-runtime mtp-tools
Desktop Environment Customisation
Appearance
All I did here was move the top bar to the bottom and removed the bottom shortcuts panel.
Set keyboard shortcuts
In Keyboard --> Application Shortcuts set xfce4-appfinder to Super+L and thunar to ALT+E
In Window Manager --> Keyboard set Maximize Window to Super+KP 5
Well, that was 175 lines shorter than my last post, so I must have made things easier. I haven't noticed anything different except codeblock syntax highlighting breaking in zola (config file change in a newer version), and that the newsboat v2.36-1.1 RSS TUI is available in apt which is compatible with FreshRSS, unlike v2.21-1.5 in Bookworm. Was really looking forward to reading RSS in my terminal. Hoorah.
During the process I also tried a couple of tiling window managers - i3 and ratpoison (cool name), because I've got some kind of addiction to trying these things, but also because I don't really use desktops so why not just use something that manages my windows? And they are supposedly lighter weight than even Xfce, so if we can free up some RAM why not? Anyway it felt a bit too much... I'm still learning helix and tmux shortcuts, so to throw that on top I'll probably tie my fingers in a knot. I also believe that multi-tasking is a myth, so just have everything fullscreen - no tiling, and I agree with points made in Xah Lee's post Why tiling window manager sucks, but I know I'll enjoy learning the thing. So maybe one day. For now though, Trixie and Xfce is running smoothly so happy days.