Skip to content

Instantly share code, notes, and snippets.

@plembo
Last active July 2, 2025 12:22
Show Gist options
  • Save plembo/bc6e40fd0166381310635491c6616f74 to your computer and use it in GitHub Desktop.
Save plembo/bc6e40fd0166381310635491c6616f74 to your computer and use it in GitHub Desktop.
List of useful software

List of useful software

This is the software I like to have on various platforms, and is a work in progress (and so may morph wildly over time according to my personal whims) that I've started mostly for my own use. Recently I used this list in rebuilding my personal workstation after an awful day. Documentation saves (as do backups)!

Linux desktop

My personal workstation and laptop are currently running Ubuntu Desktop 22.04 LTS, moderately tailored for my own use.

Installation Sources and Methods

I prefer the latest vendor official packages or binaries when I can can find them (except where it would be too disruptive: like when they overwrite critical dependencies), but distro packages still form the backbone of my software loadout. The traditional packaging systems (apt for .deb under Ubuntu, and dnf for .rpm under RedHat) can be frustrating to work with, but the systems that seek to replace them (flatpak and snap) are not a panacea by any means (both continue to have trouble with CLI integration). If I can't find the package or binary version I need, I may use an AppImage or official vendor Flatpak. Third-party PPAs and source installs are my last resort. I do not use snaps. NOTE: You can remove snapd, although doing so may impact the operation of Ubuntu Pro.

Accessibility

Spidery dark type on bright white backgrounds may be "Modern", but they're hard for me to read. Apparently, I'm not alone [31]. As a result, I use dark themes wherever possible. I (and apparently 5 million others) also use the Dark Reader (https://darkreader.org/) extension in Firefox (only available for desktop Chrome) to force a dark theme on web content when it doesn't make things worse.

Zeroconf

I have disabled Zeroconf on all my Linux desktop systems because I find its behavior annoying, and because the risks it presents for system security and privacy far outweigh its convenience for users.

A word on containers

For nearly all server software other than email (postfix) and web proxy (nginx), I try to use containers with Docker, rather than bare-metal services. Here are a few:

NOTE: I have also used Red Hat's podman as a rootless, mostly drop-in replacement, for Docker. See this for one way to do that.

System

  • Minimum install of the default Ubuntu Desktop (Gnome Shell).

Unattended upgrades

Disable if you don't need them. If already enabled, you can disable by doing a sudo dpkg-reconfigure unattended-upgrades.

Ubuntu packages

  • vim (the full package, not vim-tiny)
  • vim-gtk3 (gvim for Ubuntu desktop)
  • ufw (enable with at least ssh allowed)
  • rsync
  • build-essential
  • curl
  • wget
  • p7zip-full file compression
  • libfuse2
  • simple-scan
  • python3 [15]
  • meld
  • qemu-system-86 [20]
  • nginx (every developer desktop needs a real web server)
  • nginx-extras (trust me, you'll want this)
  • fonts-firacode [13]
  • ttf-mscorefonts-installer
  • fonts-roboto
  • ffmpeg
  • mpv
  • smartmontools
  • postfix [9]
  • easytag (mp3 tag editor)
  • graphicsmagick (replacement for imagemagick)
  • pandoc
  • adb (Android Debug Bridge)
  • iperf3 (test network speed)
  • smbclient
  • inxi (this will also install lm_sensors)
  • htop
  • flatpak
  • wireshark
  • git
  • nodejs [32]
  • lua4.5
  • golang
  • rustc
  • cargo
  • zbar-tools, zbarcam-gtk [33]
  • zint, zint-qt [34]
  • openjdk-21-jre-headless
  • gnome-shell-extension-appindicator
  • gnome-shell-extension-desktop-icons-ng
  • gnome-shell-extension-ubuntu-dock
  • gnome-shell-extension-prefs [27]
  • avrdude (flash AVR microcontrollers)

Gnome extensions (from extensions.gnome.org)

  • Lock Keys (vaina)
  • OpenWeather (jenslody)
  • Wallpaper Switcher (Rishu)

On laptops:

  • tlp [24]
  • wavemon (curses-based wifi network browser)

For NVIDIA GPUs:

For AMD GPUs:

  • xserver-xorg-video-amdgpu [19]

Applications

Vendor binaries

These don't use the native packaging system at all (apt, in the case of Ubuntu) and in some cases don't come with an uninstall function. Many also don't alert you when updates are available. Take care to document how you set them up on your system and check periodically for updates. Most often installed to /opt for use by everyone on the machine.

Vendor packages

Using native packaging, most of these can are reliable and can easily be uninstalled. If integrated with the package system they also get regular updates.

AppImages

AppImages "just work", mostly. They can coexist with packaged versions of the same software. But I've tried a number that were buggy in one way or another, and an upgrade may require updating the software's desktop launcher (because the image name changed). AppImageLauncher[4] can make the task of integrating with your desktop easier, when it (AppImageLauncher) works. See this article on how to manually create desktop launchers for AppImages.

Flatpaks (from flathub)

  • Gnome Podcasts (org.gnome.Podcasts) [22]
  • Foliate ebook reader (org.johnfactotum.Foliate)
  • Drawing (com.github.maoschanz.drawing)
  • GIMP (org.gimp.GIMP) [25]
  • Telegram (org.telegram.desktop)

Ubuntu PPA (Personal Package Archives)

  • OpenRGB (laptop keyboard lighting, add-apt-repository ppa:thopiekar/openrgb) [23]
  • variety (wallpaper changer, add-apt-repository ppa:variety/stable

Like snaps and flatpaks, most PPAs are community created. That's why I usually only install those created by the upstream project or vendor. They can be handy because they use the native (deb) packaging system, and are generally easy to uninstall if they fail.

Additional python modules (in a virtual environmement python -m venv .venv) [15]

  • pip (pip install --upgrade pip)
  • jupyter notebook
  • numpy
  • matplotlib
  • pandas
  • gmsh (view STL files)

Additional node modules

  • yarn (npm install yarn)

Web Browser plugins/extensions (all browsers)

I don't create these everywhere, only when I find them handier than a bookmark.

Android mobile

Not rooted for safety.

Applications

From the Google Play Store:

  • Firefox for Android [1]
  • Google Chrome for Android [28] (installed by default)
  • Weather (native app with widget)
  • File Manager Plus [2]
  • Proton Mail [17]
  • Proton VPN
  • Proton Calendar
  • Google Lens
  • Bitwarden
  • Acode code editor (paid version)
  • Scientific calculator plus 991 (Tools for Student) [7]
  • Discord messenger
  • Telegram
  • Zoom Workplace
  • Stellarium
  • XMind
  • Moon+Reader
  • mpv-android
  • AntennaPod
  • Mastodon
  • Joplin [36]
  • PDF Viewer lite (AVR-Apps)
  • Caffeine [35]
  • Syncthing-Fork [3]
  • LibreOffice Viewer [26]
  • DNS Changer (App Planex) [40]

From F-Droid (https://f-droid.org/):

  • Termux [38]
  • Aegis Authenticator [29]
  • Fossify Voice Recorder
  • Fossify Gallery

Web Browser plugins/extensions (Firefox)

Windows desktop

Yes, even I usually have at least one Windows virtual machine hanging around to do various things. These are the applications I like to have when working on Windows. Windows 10 and up come with Microsoft Edge as the default browser.

Web Browser plugins/extensions

Notable apps to remove:

  • OneDrive sync (stop sync first, then uninstall and cleanup files) [14]

[1] Firefox is installed by default on most Linux distributions (on Ubuntu as a snap: but I use the binary installer for Linux x86_64). Although the defaults are generally acceptable, there is still a bunch of stuff I disable or hide. The Android version has many fewer options, but at least still allows extensions. I do use Firefox sync for bookmarks (only). Check out BetterFox for a way to painlessly optimize security and privacy settings. My personal configuration checklist is here.

[2] After using many file managers on Android over the years, I settled on this one from AlphaInventor (https://www.alphainventor.com). Files by Google wasn't bad, but it didn't support SFTP on my local network, File Manager Plus does. It isn't open source, but is free with ads from the Play Store (I opted for the paid upgrade to support the developers). The artwork may seem a bit retro, but it grows on you mostly because the UI is really well designed.

[3] For the small number of files I actually need access to across devices, Syncthing works pretty well. Follow the documentation. Hint: I always grab the Syncthing Device IDs for each device and enter them manually in the Syncthing config on my primary device (e.g., my desktop machine). I then follow the prompts on each device to complete the sharing process. Syncthing lags a little during configuration, so give each node time to set up. For sync of photos on phones and tablets, I set up a separate sync folder (e.g. /storage/emulated/0/DCIM/Camera) that I then push to the Pictures folder on my desktop machine.

[4] AppImageLauncher (along with the non-default libfuse2 package) can help with the task of integrating AppImages with your desktop. Upgrades are still messy (the service failes to clean up old .desktop and icon files), and in some cases images refuse to integrate properly. The latest stable version of AppImageLauncher no longer works with fresh builds of Ubuntu 22.04 LTS, forcing me to use an alpha release, 3.0.0-alpha.

[6] On Windows I still use the standard installers from python.org because I haven't found anything else that's as stable and reliable (tried python-env but it didn't work as expected, so I ditched it). I recently returned to using my Linux distro's shipping packages as well. If I really needed to run multiple versions of python, I'd probably install pyenv to a developer account.

[7] Best scientific calculator app on Android. Emulates the Casio 991 Plus and Graphing Calculator 84 Plus. Also works as a phone :-)

[8] Although I mostly use vim for editing, vscode makes working with some projects easier. I have another gist describing my own setup preferences.

[9] Postfix is my go to when I need to send mail over the Internet or my local network, or receive mail from services like cron (in the last case the server would be configured as Local only). Hanif Jetha and Mark Drake, "How to Install and Configure Postfix on Ubuntu 20.04" is a good place to start, https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-on-ubuntu-20-04.

[10] As much of a privacy nightmare as Chrome is, it still have its uses: especially for testing and as a backup when sites or apps (unintentionally or intentionally) refuse to work correctly with Firefox.

[11] Configure mice and other input devices. From the libratbag project, https://github.com/libratbag. This is how I configure the Logitech G203 for my personal Linux workstation.

[12] This is the shipping repo package, not the PPA.

[13] My favorite font for code editing.

[14] Microsoft continues to insist on automatically installing and enabling OneDrive sync during user setup. I always stop and then uninstall it as soon as possible: but tread carefully if you have stuff on OneDrive you want to preserve.

[15] See Managing python (for most of us), for a standard python setup and how to maintain it. If you need the latest python version, then pyenv is your best option.

[16] Blender has seen some significant feature improvements since 3.0, resulting in my installing the latest vendor binaries rather than the convenient Ubuntu package. Currently installed to /opt/blender so everyone on the machine can use it. Main binary is linked to /usr/local/bin/blender, icons go to /usr/local/share/icons and .desktop file to /usr/local/share/applications.

[17] Proton Mail has clients for all the platforms. These clients are implemented as Electron apps, so they're not the most performant or full-featured. They do have the advantage of being browser-independent, which is a big plus if you have to change your default browser from time to time. Always remember to set it as the default Mail app.

[18] After many years of manually installing NVIDIA drivers on my Linux systems, I'm now using Canonical's packages for Ubuntu. There's still some configuration to do, but I've finally managed to restrict the contents of my /install/nvidia to the Windows versions only. On Ubuntu I login to "Ubuntu on Xorg" because NVIDIA's drivers still don't support Wayland as Wayland (which is OK by me, since Wayland remains incomplete even after a decade and a half of high profile development: hopefully it gets finished before the last human engineer is shown the door at Intel).

[19] The automatically installed open source amdgpu driver is fine for most, and is what I use.

[20] Tried VMware Player and Oracle VirtualBox for a while, but finally returned to KVM because it really has improved over time (e.g., support for 3D acceleration in Linux guests using VirGL). Packages to install on Ubuntu are: qemu-system-x86, libvirt-daemon-system, libvirt-clients, bridge-utils, virt-manager. The kernel modules previously loaded with qemu-kvm are not included with qemu-system-86. If you want to experiment with non-x86(64) architectures, load qemu-system.

[21] On my systems sudo ubuntu-drivers install defaults to the precompiled proprietary binaries (no dkms), which works for me. Software Updater shows my current driver (on the Additional Drivers tab) as "NVIDIA driver metapackage from nvidia-driver-535 (proprietary, tested)". For gpu compute workloads (e.g. python data science) you'll probably also need Ubuntu's nvidia-cuda-toolkit package.

[22] There used to be a multitude of dedicated podcast players, but Podcasts is one of the last standing. It has a spare but acceptable interface, but at least the OPML import works.

[23] I use OpenRGB on my ASUS F15 laptop to control its keyboard lighting. After trying (as recommended by the project) the Debian packages, flatpaks, AppImages and source install, I settled on Karl's PPA. Of course as a reverse-engineered effort I'm well aware (if not totally prepared) for OpenRGB to fail on the next change in my environment (whether that be a kernel update, firmware upload or simply the fact that it will be a Tuesday during a full moon).

[24] The Ubuntu package installs with the default config, which worked just fine on my old Thinkpad X250 and now on my Asus F15. Just enable with systemctl enable tlp.service and start with tlp start.

[25] I used the Ubuntu repo 2.10 version of GIMP for a long time, but finally switched to the 3.x AppImage. The latest AppImage didn't work out for me (starting with failing to deliver a desktop icon), so now I'm using the flatpak.

[26] Good enough.

[27] Both this and gnome-shell-extension-manager (from flathub) are capable utilities. The main difference is that the latter allows you to install extensions without having to go to the extensions.gnome.org site. I prefer the former as it ships with the distro.

[28] See Note 10. My preferred settings for Google Chrome on Android are here. I have run AdAway (installed from F-Droid) on Android to block annoying content, and experimental Chrome flags to force web pages to Dark Mode.

[29] Previously used Authy, but it appears to have degraded since its assimilation by Twilio. I was pleased to find open source Aegis, a simple, reliable and secure replacement.

[30] I use rclone on Linux to mount and unmount my OneDrive to a folder in my home directory. In the past I've used it to sync folders and files with S3 and other cloud storage.

[31] Raluca Budiu. "Dark Mode vs. Light Mode: Which Is Better?". Neilsen Norman Group. 2 February 2020, https://www.nngroup.com/articles/dark-mode/.

[32] Linux distro versions of node can be quite old (Ubuntu 22.04.04 currently ships 12.22.9). As a result, I usually recommend setting up nvm and installing the versions needed.

[33] QR-Code readers (webcam and image) for Linux (https://zbar.sourceforge.net/index.html).

[34] Zint QR-Code Studio (QR-Code creation) for Linux (https://sourceforge.net/projects/zint/)

[35] Caffeine allows you to prevent Android from putting your device to sleep while something important is happening on it: like a first-time data sync by Joplin.

[36] Joplin is a free, open source, notetaking app available on all platforms. I used the File system option and Syncthing for sync between devices. Because Joplin takes a long time to sync its data, I highly recommend using Caffeine to keep Android devices from going to sleep.

[37] There are a pile of PDF readers for Android in the Play store. Almost all of them are subscription based, require a sign-in, and chock full of obtrusive ads. This one is different. It doesn't have ads or require you sign-in. There is a $1.99 Activator app that upgrades it to Pro.

[38] Little used, but essential, Termux has been a mainstay of my Android experience for over a decade. It's basically tiny Linux-in-a-box. Always install from F-Droid (where you will receive an honest warning that it was built for earlier versions of Android if installing on Android 13 or newer).

[39] The Stellarium planetarium program is one of my favorites. On my latest fresh install of Ubuntu 22.04.5 LTS, I had to go to the latest weekly snapshot to get past a missing dependency error.

[40] Recent releases of Android famously substitute Google's public nameservers for anything else that might be set by DHCP or the user, including any local DNS. This is inconvenient for those of us who want to use self-hosted services on our secure, private home network. DNS Changer returns control to the user, setting up a VPN tunnel to allow queries against a trusted local server. I have tested many of the available options, and have found the app from App Planex both easy to use and ad-free.

Comments are disabled for this gist.