Author's Note 02/13/22
This note is out of date, as I'm no longer using a Debian based distribution on
my laptop. However, for anybody using Debian/Ubuntu based distributions and
dealing with the pain of multiple package managers, hopefully this guide can
still be of use.
Preface
I've been using Pop!_OS for ages now, and I only ended up doing a clean
reinstall once because I wanted to try out the beta build of 21.04. Despite this
amazing track record, I still try and prepare like my installation is going to
instantaneously explode and any moment, and I'll have to reinstall everything
from scratch. Here's what I do to prepare.
Backing up manually installed apt packages
apt-mark showmanual > ~/Documents/new_machine/manual_installed
echo "Successfully backed up manually installed packages"
It's worth noting that often times this list will contain more than just the
packages you've manually installed, and usually will have packages installed by
default in the OS, but it won't include the massive list of dependencies.
Backing up programs installed with flatpak
flatpak list --columns=application > ~/Documents/new_machine/flatpaks
echo "Successfully backed up installed flatpaks"
Backing up dconf data
dconf dump / > ~/Documents/new_machine/xenon_backup
echo "Successfully backed up dconf configuration"
Backing up pipx packages
pipx list | grep package | awk '{print $2}' | grep -v pipx > ~/Documents/new_machine/pipx_backup
echo "Successfully backed up pipx programs"
This is one of the more interesting commands, here's how it works.
1. pipx list
venvs are in /home/david/.local/pipx/venvs
apps are exposed on your $PATH at /home/david/.local/bin
package gdtoolkit 3.2.7, Python 3.9.4
- gdformat
- gdlint
- gdparse
The only thing I want from this output is the name after the word package,
gdtoolkit
, so I need to cut out everything else besides that.
2. grep package
package gdtoolkit 3.2.7, Python 3.9.4
If you know what grep is, then this is pretty self-explanatory. If not, grep
searches either a file or whatever is given to it from stdin for the supplied
regex (in this case just a word) and sends to stdout the lines of text
containing the regex.
3. awk {print $2}
gdtoolkit
Awk is a bit of a magical tool that I don't fully understand, but what you see
here just gets the second word from the previous output, which in this case is
the name of the package.
Backup fisher plugins
fish -c 'fisher list' > ~/Documents/new_machine/fisher_backup
echo "Successfully backed up fisher plugins"
Full system backup
For backing up the state of the system (everything in the root directory besides
home folders more or less), I have a program called
timeshift making daily backups.
Home folder backup
For backing up my home folder I use
Deja Dup, and have it backup via SFTP to
the NAS on my home network.