Siduction KDE Guide
Philosophy: bleeding-edge (Debian Sid), rolling forward, modern CLI tooling, and strict safety protocols to keep a fast-moving system stable.
siduction tracks Debian unstable and ships its own repos (extra, fixes) alongside Debian’s. siduction recommends doing major upgrades in multi-user.target (text mode) rather than inside a running desktop session. (manual.siduction.org)
0 — The siduction Golden Rule (do this, avoid pain)
- Do not run
apt full-upgradeinside a running GUI session when large core updates are involved (desktop stack, kernel, graphics drivers). siduction warns that upgrades not done inmulti-user.targetcan cause problems when updating X/desktop components. (manual.siduction.org) - Use this workflow instead:
- In KDE: download-only:
apt update && apt full-upgrade -d - Then switch to text mode (
multi-user.target) to apply the upgrade. (manual.siduction.org)
- In KDE: download-only:
- Always read
apt-listbugs/apt-listchangesbefore you accept changes (especially when it says “grave” / “critical”).
1 — Essentials
1.1 — Certificates & keyrings
sudo apt update
sudo apt install -y ca-certificates debian-archive-keyring siduction-archive-keyring
1.2 — Repositories (deb822, siduction-style)
siduction uses deb822 .sources files in /etc/apt/sources.list.d/ by default (typically debian.sources, extra.sources, fixes.sources). (manual.siduction.org)
This section rewrites those files into a clean, predictable baseline.
1.2.1 — Backup existing sources (timestamped)
ts="$(date +%Y%m%d_%H%M%S)"
sudo mkdir -p "/etc/apt/sources.list.d/backup-$ts"
# Back up deb822 sources
sudo sh -c 'ls /etc/apt/sources.list.d/*.sources >/dev/null 2>&1 && cp -a /etc/apt/sources.list.d/*.sources "/etc/apt/sources.list.d/backup-'"$ts"'/" || true'
# Back up old-style lists if they exist
sudo test -f /etc/apt/sources.list && sudo cp -a /etc/apt/sources.list "/etc/apt/sources.list.d/backup-$ts/sources.list.bak" || true
sudo sh -c 'ls /etc/apt/sources.list.d/*.list >/dev/null 2>&1 && cp -a /etc/apt/sources.list.d/*.list "/etc/apt/sources.list.d/backup-'"$ts"'/" || true'
1.2.2 — Write Debian + siduction repos (no deb-src by default)
# Debian unstable
cat <<'EOF' | sudo tee /etc/apt/sources.list.d/debian.sources
Types: deb
URIs: https://deb.debian.org/debian/
Suites: unstable
Components: main contrib non-free non-free-firmware
Enabled: yes
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
EOF
# siduction extra
cat <<'EOF' | sudo tee /etc/apt/sources.list.d/extra.sources
Types: deb
URIs: https://packages.siduction.org/extra
Suites: unstable
Components: main
Enabled: yes
Signed-By: /usr/share/keyrings/siduction-archive-keyring.gpg
EOF
# siduction fixes
cat <<'EOF' | sudo tee /etc/apt/sources.list.d/fixes.sources
Types: deb
URIs: https://packages.siduction.org/fixes
Suites: unstable
Components: main contrib non-free
Enabled: yes
Signed-By: /usr/share/keyrings/siduction-archive-keyring.gpg
EOF
sudo apt update
Notes:
- siduction documents deb822, including
Signed-ByandEnabled, and usesunstablefor both Debian and siduction repos. (manual.siduction.org) - Optional cleanup (only if you see duplicate warnings): check
/etc/apt/sources.listand/etc/apt/sources.list.d/*.listfor old entries and disable/remove duplicates.
1.3 — APT safety helpers (mandatory for Sid)
sudo apt install -y apt-listbugs apt-listchanges
1.4 — First synchronization (download in KDE, apply in TTY)
Download-only (OK in KDE):
sudo apt update
sudo apt full-upgrade -d
siduction explicitly recommends the -d workflow: download packages while in X, then do the real upgrade later in multi-user.target. (manual.siduction.org)
Apply safely (recommended):
sudo systemctl isolate multi-user.target
# log in on the TTY
sudo apt update
sudo apt full-upgrade
sudo reboot
multi-user.target is siduction’s recommended “system update” target. (manual.siduction.org)
1.5 - Set default.target
If you only update one time a day, you can set the default boot option to console using multi-user.target as follows:
sudo systemctl set-default multi-user.target
When you want to switch back, you can type the following command:
sudo systemctl set-default graphical.target
2 — Installation & Configuration
2.1 — App installation (same choices; do the big install in multi-user.target)
Do not chain systemctl isolate ... && apt ... on one line—isolate will switch targets and terminate the GUI session.
Use this workflow:
-
From KDE, log out, then switch to a TTY (siduction commonly suggests
Ctrl+Alt+F3) and log in, or runsudo systemctl isolate multi-user.targetand then log in on the TTY. (manual.siduction.org) -
Run:
sudo apt update
sudo apt install -y \
7zip audacity bat blender btop build-essential chromium cmake composer curl \
debian-goodies debconf-utils dnsutils dxvk earlyoom exfatprogs eza fancontrol fastfetch \
fd-find ffmpeg ffmpegthumbs flatpak foliate fwupd fzf gdu gh gimp git gparted \
gping gufw gwenview handbrake hardinfo2 haruna httpie imagemagick inxi inkscape \
iproute2 jq kde-config-flatpak kde-config-sddm kde-standard kdenlive kdesvn \
kdevelop krename krita ksystemlog lazygit libreoffice lm-sensors lshw meld \
mesa-utils meson micro mpv musescore nala ninja-build nmap nodejs npm ntfs-3g \
obs-studio pandoc partitionmanager pavucontrol php pipx pkg-config \
plasma-discover-backend-flatpak powertop python3 python3-pip python3-venv \
qbittorrent qt6-image-formats-plugins ripgrep smartmontools svgpart \
telegram-desktop tig ufw vulkan-tools wayland-utils webp wget whois wine \
winetricks wl-clipboard xdg-desktop-portal xdg-desktop-portal-kde \
xfonts-terminus zsh zsh-autosuggestions zsh-syntax-highlighting
- When done, reboot (simple and safe after large installs):
sudo reboot
2.2 — Fonts
2.2.1 — System + MS core fonts
sudo apt install -y \
fonts-atkinson-hyperlegible fonts-cantarell fonts-dejavu fonts-fantasque-sans \
fonts-firacode fonts-font-awesome fonts-ibm-plex fonts-inconsolata \
fonts-inter-variable fonts-jetbrains-mono fonts-liberation \
fonts-liberation-sans-narrow fonts-montserrat fonts-noto fonts-noto-cjk \
fonts-noto-cjk-extra fonts-noto-color-emoji fonts-noto-extra fonts-noto-mono \
fonts-noto-ui-core fonts-noto-ui-extra fonts-open-sans fonts-opendyslexic \
fonts-opensymbol fonts-powerline fonts-recommended fonts-roboto fonts-sora \
fonts-source-code-pro fonts-symbola fonts-ubuntu fonts-unfonts-core fonts-unifont
echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true" | sudo debconf-set-selections
sudo apt install -y ttf-mscorefonts-installer
2.2.2 — Nerd Fonts (manual)
https://www.nerdfonts.com/font-downloads
2.3 — OOM protection + firewall (UFW)
sudo systemctl enable --now earlyoom
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Optional (only if you use SSH):
sudo ufw limit ssh
# KDE Connect:
sudo ufw allow 1714:1764/udp
sudo ufw allow 1714:1764/tcp
sudo ufw --force enable
sudo ufw status verbose
2.4 — Flatpak (Flathub)
sudo flatpak remote-add --if-not-exists --system flathub https://dl.flathub.org/repo/flathub.flatpakrepo
2.5 — siduction kernel meta-packages + firmware updates
siduction’s kernel meta-packages:
sudo apt update
sudo apt install -y linux-image-siduction-amd64 linux-headers-siduction-amd64
These are the documented meta packages, and keeping them installed means kernel updates are included during normal system updates. (manual.siduction.org)
Firmware (non-fatal if nothing is supported):
sudo fwupdmgr refresh || true
sudo fwupdmgr get-updates || true
sudo fwupdmgr update || true
3 — Microcode packages
3.1 - Install Linux Firmware Packages
sudo apt install -y firmware-linux-nonfree firmware-iwlwifi firmware-realtek
3.2 — For Intel CPUs
sudo apt install -y intel-microcode
3.3 — AMD CPUs
sudo apt install -y amd64-microcode firmware-amd-graphics
Note: You need to
sudo rebootafter running the above commands.
4 — Manual software installation
4.1 — Coding related
https://antigravity.google/download/linux
https://code.visualstudio.com/
https://docs.unity3d.com/hub/manual/InstallHub.html#install-hub-linux
https://gdevelop.io/download
https://learn.microsoft.com/en-us/dotnet/core/install/linux-debian
https://support.mozilla.org/en-US/kb/install-firefox-linux#w_install-firefox-deb-package-for-debian-based-distributions
https://www.jetbrains.com/toolbox-app/
4.2 — Others
https://gitfiend.com/
https://github.com/rustdesk/rustdesk/releases/
https://www.mql5.com/en/articles/625
5 — ZSH: Custom functions & aliases (~/.zshrc)
Append the following to ~/.zshrc:
# ~/.zshrc
# ============================================================================
# siduction Linux - Zsh Configuration
# ============================================================================
# Custom configuration for siduction Linux with safe update workflows,
# system diagnostics, and development utilities. All custom commands are
# prefixed with 'x' for easy identification and tab completion.
#
# IMPORTANT: siduction uses a rolling-release model with specific update
# requirements. This config implements safe update patterns per siduction
# documentation (GUI detection, multi-user.target isolation for upgrades).
#
# QUICK REFERENCE - ALL AVAILABLE COMMANDS
# ============================================================================
#
# SYSTEM UPDATES & MAINTENANCE
# xupdate - Safe system update (GUI-aware, download-only)
# xclean - Remove unused packages and clean apt cache
# xclean_zsh - Clear Zsh history file
# xmaid - Update + Clean
# xsupermaid - Update + Clean History + Clean Packages
# xuoff - Update + Clean + Poweroff
#
# SYSTEM DIAGNOSTICS & INFO
# xinfo - Display comprehensive system information
# xbaloo_reset - Reset KDE Baloo file indexer (purge + rebuild)
# xhr - Print horizontal rule separator
# xclear - Clear terminal (full reset)
#
# FILE & EDITOR OPERATIONS
# xedit_zsh - Edit this ~/.zshrc file
# xedit_hosts - Edit /etc/hosts with sudoedit
#
# DEVELOPMENT TOOLS
# xnpm_update - Update npm packages using npm-check-updates
# xserver - Start Python HTTP server on localhost:8080
# xenv - Create/activate Python venv in current directory
#
# FILE LISTING (requires eza)
# xls - List files with icons (eza)
# xll - List files detailed with icons (eza)
# xla - List all files including hidden (eza)
# xlt - Tree view, 2 levels deep (eza)
#
# COMPATIBILITY ALIASES
# fd - fdfind alias (if fd not installed)
# bat - batcat alias (if bat not installed)
#
# ============================================================================
# ============================================================================
# HELPER FUNCTIONS (INTERNAL)
# ============================================================================
# _xget_editor - Detect available editor with support for args
# Priority: $VISUAL > $EDITOR > kate > micro > nano > vi
# Returns editor command as array via Zsh's $reply variable
_xget_editor() {
emulate -L zsh
local user_ed="${VISUAL:-${EDITOR:-}}"
if [[ -n "$user_ed" ]]; then
reply=(${(z)user_ed})
return 0
fi
if (( $+commands[kate] )); then
reply=(kate)
elif (( $+commands[micro] )); then
reply=(micro)
elif (( $+commands[nano] )); then
reply=(nano)
elif (( $+commands[vi] )); then
reply=(vi)
else
return 1
fi
}
# xhr - Print horizontal rule separator
xhr() {
emulate -L zsh
print -r -- ${(l:60::─:)}
}
# ============================================================================
# SYSTEM UPDATE & MAINTENANCE FUNCTIONS
# ============================================================================
# siduction requires special care during system upgrades:
# - Full upgrades should be done from multi-user.target (no GUI)
# - Running dist-upgrade from GUI can cause issues
# - These functions implement safe patterns per siduction documentation
# ============================================================================
# xupdate - Safe system update with GUI detection
#
# BEHAVIOR:
# GUI Session → Download only (apt full-upgrade -d)
# TTY/Console → Full upgrade + Flatpak + Firmware
#
# If in GUI, provides instructions for safe upgrade via multi-user.target
xupdate() {
emulate -L zsh
setopt err_return pipe_fail
# Detect if GUI services are active (preferred over env vars)
local -i gui_active=0
if (( $+commands[systemctl] )); then
systemctl is-active --quiet display-manager.service && gui_active=1
systemctl is-active --quiet graphical.target && gui_active=1
else
[[ -n "${DISPLAY:-}" || -n "${WAYLAND_DISPLAY:-}" ]] && gui_active=1
fi
# Cache sudo credentials early
sudo -v || return 1
# GUI active => download only
if (( gui_active )); then
print -P "%F{yellow}$sep%f"
print -P "%F{yellow}GUI SERVICES DETECTED - DOWNLOAD ONLY%f"
print -P "%F{yellow}$sep%f"
print ""
sudo apt update || return $?
sudo apt full-upgrade -d || return $?
print ""
print -P "%F{yellow}$sep%f"
print "Downloads complete. To apply safely:"
print " sudo systemctl isolate multi-user.target"
print " # log in on TTY"
print " xupdate"
print -P "%F{yellow}$sep%f"
return 0
fi
# Console mode => full upgrade
print -P "%F{green}$sep%f"
print -P "%F{green}CONSOLE MODE - RUNNING FULL SYSTEM UPGRADE%f"
print -P "%F{green}$sep%f"
print ""
print "Updating package lists..."
sudo apt update || return $?
print "\nPerforming full system upgrade..."
sudo apt full-upgrade || return $?
# Reboot heuristic: running kernel vs newest vmlinuz in /boot
local running_kernel newest_kernel
running_kernel="$(uname -r)"
local -a vmlinuz
vmlinuz=(/boot/vmlinuz-*(N))
if (( ${#vmlinuz} )); then
newest_kernel="$(
print -rl -- ${vmlinuz:t} \
| sed 's/^vmlinuz-//' \
| command sort -V \
| tail -n 1
)"
else
newest_kernel=""
fi
local -i reboot_recommended=0
[[ -n "$newest_kernel" && "$newest_kernel" != "$running_kernel" ]] && reboot_recommended=1
# Optional Flatpak updates
if (( $+commands[flatpak] )) && [[ -n "$(flatpak remotes 2>/dev/null)" ]]; then
print "\nUpdating Flatpak packages..."
flatpak update -y || print -u2 "Warning: Flatpak update had issues (non-fatal)."
fi
print "\nCleaning apt cache..."
sudo apt clean || true
print ""
print "Optional: review orphaned packages:"
print " sudo apt autoremove --dry-run"
print " (then run without --dry-run if you agree)"
print ""
print -P "%F{green}$sep%f"
print -P "%F{green}UPDATE COMPLETE%f"
print -P "%F{green}$sep%f"
print ""
# Only prompt if we're on an interactive terminal
if [[ -t 0 ]]; then
if (( reboot_recommended )); then
print -P "%F{yellow}Reboot recommended: running kernel = ${running_kernel}, newest installed = ${newest_kernel}%f"
print -n "Reboot now? (y/N): "
if read -q; then
print "\nRebooting..."
sudo systemctl reboot
else
print "\nReboot skipped. Run: sudo systemctl reboot"
print "To start GUI without reboot: sudo systemctl isolate graphical.target"
fi
else
print -n "Start graphical environment now? (y/N): "
if read -q; then
print "\nSwitching to graphical.target..."
sudo systemctl isolate graphical.target
else
print "\nStaying in console mode."
print "To start GUI later: sudo systemctl isolate graphical.target"
fi
fi
fi
}
# xclean - Remove unused packages and clean apt cache
xclean() {
emulate -L zsh
print "Cleaning system..."
print "Removing unused packages..."
sudo apt autoremove --purge -y && print "✓ Autoremove complete." || print "✗ Autoremove failed." >&2
print "Cleaning apt cache..."
sudo apt autoclean && print "✓ Autoclean complete." || print "✗ Autoclean failed." >&2
print "System cleaning finished."
}
# xclean_zsh - Clear Zsh history file
xclean_zsh() {
emulate -L zsh
local hf="${HISTFILE:-$HOME/.zsh_history}"
print "Clearing Zsh history file ($hf)..."
: >| "$hf" || { print -u2 "xclean_zsh: failed to truncate $hf"; return 1; }
fc -R "$hf" || { print -u2 "xclean_zsh: failed to reload history from $hf"; return 1; }
print -u2 "Zsh history file truncated and re-read. Current session history cleared."
}
# xmaid - Update + Clean
xmaid() {
emulate -L zsh
xupdate && xclean
}
# xsupermaid - Update + Clean History + Clean Packages
xsupermaid() {
emulate -L zsh
xupdate && xclean_zsh && xclean
}
# xuoff - Update + Clean + Poweroff
xuoff() {
emulate -L zsh
xmaid && sudo poweroff
}
# ============================================================================
# SYSTEM DIAGNOSTICS & INFORMATION FUNCTIONS
# ============================================================================
# xinfo - Display comprehensive system information
# Shows: OS details, hardware, graphics stack, kernel, session type
xinfo() {
emulate -L zsh
xhr
print -P "%B═══ OS & Hardware ═══%b"
if (( $+commands[fastfetch] )); then
fastfetch
else
print "✗ fastfetch not found."
fi
xhr
print -P "%B═══ System Details ═══%b"
if (( $+commands[inxi] )); then
inxi -FGx
else
print "✗ inxi not found."
fi
xhr
print -P "%B═══ Graphics Stack ═══%b"
print "Kernel: $(uname -r)"
print "Session: ${XDG_SESSION_TYPE:-Unknown}"
# OpenGL info
if (( $+commands[glxinfo] )); then
print ""
print "OpenGL Information:"
glxinfo -B 2>/dev/null | grep -Ei "direct rendering|device|vendor|version|renderer" || true
fi
# Vulkan info
if (( $+commands[vulkaninfo] )); then
print ""
print "Vulkan Information:"
vulkaninfo --summary 2>/dev/null | grep -E "deviceName|driverInfo|apiVersion" || true
fi
xhr
}
# xbaloo_reset - Reset KDE Baloo file indexer
# Suspends/disables, purges index, then resumes/enables and checks
xbaloo_reset() {
emulate -L zsh
if (( $+commands[balooctl6] )); then
print "Resetting Baloo (KDE 6)..."
balooctl6 suspend
sleep 2
balooctl6 purge
balooctl6 resume
sleep 1
balooctl6 check
print "✓ Baloo reset complete (KDE 6)."
elif (( $+commands[balooctl] )); then
print "Resetting Baloo (KDE 5)..."
balooctl disable
sleep 2
balooctl purge
balooctl enable
sleep 1
balooctl check
print "✓ Baloo reset complete (KDE 5)."
else
print -u2 "✗ Baloo control command not found."
return 1
fi
}
# ============================================================================
# EDITOR FUNCTIONS
# ============================================================================
# xedit_zsh - Edit ~/.zshrc
xedit_zsh() {
emulate -L zsh
local -a ed
if ! _xget_editor; then
print -u2 "✗ No editor found."
return 1
fi
ed=("${reply[@]}")
"${ed[@]}" "$HOME/.zshrc"
}
# xedit_hosts - Edit /etc/hosts with sudoedit
xedit_hosts() {
emulate -L zsh
local -a ed
if ! _xget_editor; then
print -u2 "✗ No editor found."
return 1
fi
ed=("${reply[@]}")
SUDO_EDITOR="${(j: :)${(q)ed[@]}}" sudoedit /etc/hosts
}
# ============================================================================
# DEVELOPMENT FUNCTIONS
# ============================================================================
# xnpm_update - Update npm packages using npm-check-updates
# Requires package.json in current directory
xnpm_update() {
emulate -L zsh
setopt localoptions errexit nounset pipefail
if [[ ! -f package.json ]]; then
print -u2 "✗ No package.json found in $PWD"
return 1
fi
print "Checking for npm package updates..."
npx --yes npm-check-updates -u
print "Installing updated packages..."
npm install
print "Running npm audit..."
npm audit || print -u2 "⚠ npm audit reported issues."
print "✓ npm update complete."
}
# xenv - Create and/or activate Python virtual environment
# Creates 'venv' directory if it doesn't exist, then activates and updates pip
xenv() {
emulate -L zsh
if [[ ! -d venv ]]; then
print "Creating Python virtual environment..."
python3 -m venv venv || { print -u2 "✗ Failed to create venv"; return 1; }
fi
print "Activating virtual environment..."
source venv/bin/activate
print "Updating pip, setuptools, and wheel..."
python -m pip install -U pip setuptools wheel
print "✓ Virtual environment ready."
}
# ============================================================================
# ALIASES - UTILITIES
# ============================================================================
alias xclear='tput reset'
# ============================================================================
# ALIASES - FILE LISTING (requires eza)
# ============================================================================
if (( $+commands[eza] )); then
alias xls='eza --icons --group-directories-first'
alias xll='eza -lh --icons --group-directories-first'
alias xla='eza -a --icons --group-directories-first'
alias xlt='eza --tree --level=2 --icons'
fi
# ============================================================================
# ALIASES - DEBIAN PACKAGE NAME COMPATIBILITY
# ============================================================================
# Debian packages some tools with different names than upstream
(( $+commands[fdfind] )) && ! (( $+commands[fd] )) && alias fd='fdfind'
(( $+commands[batcat] )) && ! (( $+commands[bat] )) && alias bat='batcat'
# ============================================================================
# ALIASES - DEVELOPMENT
# ============================================================================
alias xserver='python3 -m http.server 8080 --bind 127.0.0.1'
# ============================================================================
# ZSH CONFIGURATION
# ============================================================================
# Setup cache directory for completion dumps
ZSH_CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh"
mkdir -p "$ZSH_CACHE"
# Initialize completion system
autoload -Uz compinit
compinit -d "$ZSH_CACHE/zcompdump-$ZSH_VERSION"
# History settings
HISTFILE="${ZDOTDIR:-$HOME}/.zsh_history"
HISTSIZE=10000
SAVEHIST=10000
# Shell options
setopt HIST_IGNORE_ALL_DUPS # Remove older duplicates from history
setopt SHARE_HISTORY # Share history between sessions
setopt CORRECT # Command spelling correction
setopt INTERACTIVE_COMMENTS # Allow comments in interactive shell
setopt PROMPT_SUBST # Enable parameter expansion in prompts
# ============================================================================
# PROMPT CONFIGURATION
# ============================================================================
# Pure Zsh prompt with VCS info (no external dependencies)
# Colors: Catppuccin Mocha theme
autoload -Uz colors vcs_info add-zsh-hook
colors
# Configure VCS info (git branch only for performance)
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:git:*' formats '(%b)'
zstyle ':vcs_info:git:*' actionformats '(%b|%a)'
add-zsh-hook precmd vcs_info
# Prompt format:
# user@host ~/path (git-branch)
# ❯
PROMPT='%F{#cba6f7}%n%f@%F{#fab387}%m%f %F{#89b4fa}%~%f %F{#a6e3a1}${vcs_info_msg_0_}%f
%F{#a6e3a1}❯%f '
# ============================================================================
# PLUGIN LOADING
# ============================================================================
# Load system-installed Zsh plugins (Debian package locations)
# zsh-autosuggestions: Fish-like suggestions based on history
[[ -f /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh ]] && \
source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
# zsh-syntax-highlighting: Fish-like syntax highlighting (must be loaded last)
[[ -f /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]] && \
source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# ============================================================================
# END OF CONFIGURATION
# ============================================================================
6 — Best-practice checklist (siduction reality)
- Before big upgrades, check siduction upgrade warnings/news. siduction explicitly recommends following upgrade warnings on the main page. (manual.siduction.org)
- Keep at least one older kernel installed for a few days after a kernel upgrade. (manual.siduction.org)
- Update cadence: every 1–2 weeks is a practical guideline; don’t let Sid rot for months. (manual.siduction.org)
- If you want to migrate old
.listentries to deb822 cleanly, siduction notesapt modernize-sources. (manual.siduction.org)