How do you keep track of all apps you install and their configurations?


Earlier this year, I built a new PC and it's running Ubuntu. I've been installing various apps and configuring them since then. Now, I realize I don't have any way of knowing what I would want to reinstall, if I (for instance) lost this drive somehow.

How do you keep track of what you've installed/ your favorite apps?

Separately, how can I backup the configurations I'm using right now.

Thanks!

in reply to perishthethought

Git.

Keep all the config files of your tools in subdirectories of a git versioned directory and symlink them into their target location (e.g. with GNU stow). If installation of a tool is involved and you expect to have to revisit it, put the steps into an installation bash script and version it as well.

in reply to zacher_glachl

I take a similar approach starting with a bare work-tree at $HOME/.cfg and add config files I've changed. Then throw my --git-dir and --work-tree switches in an alias for git.

As for installed programs, a simple backup of my portage world file takes car of that. It gets backed up alongside all other /etc/portage/ stuff.

This entry was edited (2 years ago)

prostar doesn't like this.

Linux reshared this.

in reply to perishthethought

Apart from those little tools running in the background that get their own little "How to install and configure X" file, I don't keep a list. I just install things as I need them, copying back config files from a backup. It's less annoying and time consuming than one might expect and keeps the system slim by not installing what I never use anyway.
in reply to perishthethought

I make a list of all the ones I like. Then when I feel my system is getting too bloated, I wipe and reinstall while only installing the packages from my list.

It’s very “low tech,” but it’s always worked out well for me.

This entry was edited (2 years ago)

don't like this

in reply to perishthethought

Move all your heavily modified config files into a git repository and host it somewhere. Then symlink all your config files to where they should be with ln -s ~/.config/whatever ~/gitrepo/whatever. That's how you preserve your important configs.

You can easily get a list of your installed packages (which you can keep in your repository) with apt list --installed > packages.txt. You can then format that list to one you can install from with sed -e "s-/.*$--" <packages.txt (or something, i don't have apt, can't test it fully).

In fact, if someone here is more familiar with apt, please find a way to filter out packages that were not explicitly installed and reply to this comment with your solution.

demesisx doesn't like this.

in reply to perishthethought

github.com/koepnick/dotfiles cloned into ~/.config

I typically start with a restrictive .gitignore and add directories as needed.

A ton of stuff that I always forget like mpv, vifm, and whatnot always slipped through the cracks before. Now I can clone to practically anywhere and have everything just work.

demesisx doesn't like this.

in reply to perishthethought

in reply to perishthethought

Oh! I can participate!

Everything I have/configure is 100% in Ansible. I learned the hard way that rebuilding a workstation from scratch sucks if I only depend on my brain to remember things.

It takes some effort to keep it updated - if I'm trying out a new app, I have to remember to add it to my config.

The other thing that I've started doing is using Restic for file level backups. That's relatively easy to set up, it supports a multitude of backend storage, and works well with a cron job for braindead backups.

in reply to perishthethought

function pkglist -d "Gets list of installed packages"
  # Prevent descriptions in other languages
  set -l LANG C
  # Define pkglists location
  set -l dot $HOME/.config/dotfiles

  echo "(1/5) RPM-OSTREE status"
  rpm-ostree status > $dot/pkglist.rpm-ostree --booted

  echo "(2/5) Identify flatpaks"
  flatpak list --app --columns=application > $dot/pkglist.flatpak

  echo "(3/5) Identify pinned flatpak runtimes"
  flatpak pin > $dot/pkglist.flatpak.pinned

  echo "(4/5) Identify flatpak overrides"
  for i in (cat $dot/pkglist.flatpak)
      if test -s (flatpak override --show --user $i|psub)
      echo $i
      flatpak override --show --user $i
      echo
      end
  end > $dot/pkglist.flatpak.overrides

  echo "(5/5) Save KDE configuration"
  fedora konsave -s kde_configuration --force

  # to apply configuration
  # fedora konsave -a kde_configuration

  git -C $dot st
end

don't like this

in reply to perishthethought

If you use other package managers like flatpak, nix-env (for non-NixOS), npm (for global stuff), … you can just create a bash script to list all installed packages for each manager, and save to a file(s). I put them in a git repo to version control these lists, which are updated every now and then when I update stuff.
in reply to perishthethought

Install fresh copy of Linux OS on a new device. Install the apps I know I need like browser, code editor, etc.

Use device.

Realize "oh crap I forgot to install X!"

Install X

Repeat until all X have been installed.