Debian Backup Script

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.

Caverns of Wintermoor

General Info

With my somewhat recent introduction to roguelike games, and needing to make a final project for EE551: Engineering Python at Stevens, I figured I'd try my hand at making a roguelike myself. Seeing as the class is teaching Python, I went with the best documented roguelike engine I could find, libtcod, which conveniently has amazing Python bindings. From the r/roguelikedev subreddit I found a very comprehensive tutorial detailing how to get off the ground and running with libtcod, which this project was largely based off of and expanded on.

The source code for this project can be found here: https://gitlab.com/dkrautha/python-roguelike

Current State

As of the latest update to this post, this project is inactive. I briefly tried porting what was here over to Rust, but I've yet to find the time or motivation to finish it, or improve this project further.

Screenshots

Title Screen

Title Screen

Combat

Combat

Random Maps

Random Maps

Message History

Message History

Finding Items

Finding Items

Descending

Descending

Character Info

Character Info