Skip to content

Instantly share code, notes, and snippets.

@plembo
Last active April 30, 2025 13:08
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 vendor official binaries or package(s) when I can can them (except where it would be too disruptive: like where they overwrite critical dependencies), but distro packages still form the backbone of my software loadout. Otherwise, I may use an AppImage or vendor flatpak (if I don't intend to use a CLI). Third-party PPAs and source installs are my last resort. I do not use snaps. NOTE: You can removed 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. On the desktop I (and apparently 5 million others) also have the Dark Reader (https://darkreader.org/) extension to force a dark theme on web content when it doesn't make things worse. On Android I use the Vivaldi's dark mode page rendering. Vivaldi's status bar (usually running along the bottom of the browser window) has a slider that lets me quickly zoom the page in and out, which can be a huge help when dealing with ageist font sizing.

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.

Gnome extensions

Gnome on Ubuntu already ships with some of these:

  • Appindicator and KStatusNotifierItem Support
  • Dash to Dock
  • Gtk4 Desktop Icons NG (DING)
  • Lock Keys ([email protected])
  • OpenWeather

Turn off or remove all other extensions to avoid conflicts or performance issues (like slow logins). I manage these with Matthew Jakeman's Extension Manager.

Ubuntu packages

  • vim (the full package, not vim-tiny)
  • ufw (enable with at least ssh allowed)
  • rsync
  • build-essential
  • curl
  • wget
  • p7zip-full file compression
  • 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
  • gimp
  • git
  • nodejs [32]
  • lua4.5
  • golang
  • rustc
  • cargo
  • zbar-tools, zbarcam-gtk [33]
  • zint, zint-qt [34]
  • openjdk-21-jre-headless

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.

Ubuntu PPA (Personal Package Archives)

  • appimagelauncher (for desktop integration of AppImages, add-apt-repository ppa:appimagelauncher-team/stable) [4]
  • OpenRGB (laptop keyboard lighting, add-apt-repository ppa:thopiekar/openrgb) [23]

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)

AppImages

Flatpaks

  • Gnome Podcasts (org.gnome.Podcasts) [22]
  • Extension Manager (com.mattjakeman.ExtensionManager) [27]
  • Foliate ebook reader (org.johnfactotum.Foliate)
  • Drawing (com.github.maoschanz.drawing)

Web Browser plugins/extensions (all browsers)

Android mobile

Not rooted for safety.

Applications

From the Google Play Store:

  • Vivaldi browser [10]
  • Google Chrome for Android [28] (installed by default)
  • File Manager Plus [2]
  • Proton Mail [17]
  • Proton VPN
  • Google Calendar [25]
  • Google Lens
  • Bitwarden
  • Acode code editor (paid version)
  • Scientific calculator plus 991 (Tools for Student) [7]
  • Discord messenger
  • Zoom Workplace
  • OpenWeather
  • Stellarium
  • XMind
  • Moon+Reader
  • mpv-android
  • AntennaPod
  • Mastodon
  • Joplin [36]
  • PDF Viewer lite (AVR-Apps)
  • Caffeine [35]
  • Syncthing-Fork [3]
  • LibreOffice Viewer [26]

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

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

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). Not happy with the direction Mozilla is taking it, I only install for testing. My practice is to replace the preinstalled version on Linux with Mozilla's downloadable binary.

[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] The stable build of appimagelauncher is pretty reliable, although YMMV (mine has over time). I put my appimages in ~/Applications and make them executable. It often takes a while for it to notice a new appimage has been added, and sometimes requires double-clicking in Files before popping up the "integrate & run" prompt.

[5] The "Fresh" LibreOffice "Full" AppImage has the latest features and pretty much everything you'll need. It's also much less time consuming to install and maintain. It can co-exist with any version a distribution may have preinstalled.

[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] Theia is a full-featured IDE from the Eclipse Foundation that borrows from the open source parts of Microsoft's Visual Studio Code (vscode). Among Theia's features are its ability to use many vscode extensions. I have the AppImage for Linux installed. On the differences between Theia and vscode, see this post.

[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] Vivaldi is a secure and privacy-respecting alternative to Chrome, built on open source Chromium. While I still found myself consulting the online help frequently, starting with version 7.0 its settings and tools for customization seem much easier to work with. I landed on Vivaldi after putting a lot of effort into customizing Brave. Even with a checklist, Brave took at least a half hour to be reasonably secure, private, and useful (mostly by stripping out unwanted features). Vivaldi literally took just a few minutes the first time, without any kind of checklist. I still use Chrome in development and testing (and to create PWAs).

[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] Not available as a PWA (why, Google?), but as a mere "desktop shortcut". I create this, and the PWA for Google Messages, using Chrome.

[26] Good enough.

[27] Search and install Gnome Shell extensions from the app, which the stock gnome-shell-extension-prefs can't do. Eliminates the need to get Gnome's buggy browser integration working.

[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).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment