Associate Teaching Professor of Linguistics at UC San Diego
Director of UCSD's Computational Social Science Program
Some of my favorite useful Linux Apps
Living Document, started in July 2025
There are a surprising number of good Linux apps out there for a variety of tasks. This post is simply meant to highlight tools, generally flatpaks, which are particularly good, and solve real problems. I’ll skip some of the well-known apps (e.g. Firefox, LibreOffice, Gimp, Krita, Obsidian, OBS, Steam, Calibre), and focus on apps that don’t get as much love as they should. Also note that many of these, marked with (🍎), run on MacOS, too!
Thanks, by the way, to The Linux Experiment for pointing many of these out in videos over the years. Great channel, you should check his work out if you’re interested in hearing more about what’s happening in Linux.
‘AI’ slop disclosure: ‘AI’ wasn’t used to create this, although I did transcribe most of the text from speech using SpeechNote (below) and Whisper. This means it probably has a variety of errors which, amusingly, these days make it feel more human.
Flatpak Apps
These days, you should probably be installing applications using Flatpak when you can. It is simply a better approach for installing apps on Linux. It’s cross-platform. It’s more likely to be well updated. And it is very, very painless. It is simply better in my mind than AppImage or Snap, and is how I install pretty much everything that uses a user interface.
Game Emulation: RetroArch (🍎)
This is a great front-end for game emulation, and has enough guidance to let you play your legally purchased games, without a whole lot of difficulty.
PDF Manipulation: PDF Arranger
Although I generally use LibreOffice Draw for modifying the contents of PDFs, if you’re just looking to do page-wise modification of PDFs, this is a great tool. Most often, I use it to remove, add, rotate, or combine the pages of PDFs, but it’s also useful for if you have (e.g.) 5 images and you want to combine them to one PDF. Great little tool.
Audio Capture: Audacity or Tenacity (🍎)
As a linguist who does speech, audio capture is a big part of my life, and Audacity (or its enshittification-resistant fork, Tenacity) do the work well. Particularly in a Pipewire-focused world, it’s pretty solid, and works about the same as it did on MacOS.
Image Censorship: Obfuscate
This is a very simple tool, and all it really does is allow you to censor or obfuscate images. Of course, the best way to do this is not to send sensitive data at all, but there are moments in which you might want to provide customer service with a receipt without giving them your bank information. This is your periodic reminder that blurring is not a sufficient method for removing image data, and if you really, really care about removing data, it’s not a terrible idea to do it twice across a couple of apps. But this is a fine way to do the job quickly.
CD Ripping: Asunder
For those of us old enough to rip media, this is a program that’s useful for taking the CDs you already own and putting them into a format that you can take with you everywhere. It works, you have enough choices in terms of output format. There’s really no problem here.
DVD Ripping and Video Transcoding: Handbrake (🍎)
ffmpeg works great, of course, for batches, but sometimes you just need to convert something quickly, or you need to take media you paid for and turn it into a more convenient format. Well, Handbrake is just as good on Linux.
Sound File Format Conversion: SoundConverter
Sometimes you have a sound file in one format and need it in a different one, and this will do precisely that. It’s a little bit janky in the GUI, but you know what? It does the trick.
FTP: Filezilla (🍎)
I’ll be completely honest in that I don’t have a particularly strong feeling about Filezilla, but it does exactly what it says on the tin and is a fine FTP client for those moments where you need that. I do miss Transit from MacOS, which was, I think, a prettier and more polished experience, but this is absolutely fine.
File Renaming: KRename
This is another one of those things that can absolutely be done from the command line, but I do it seldom enough that it’s sometimes nice just to have a pretty GUI to make it happen. This allows you to rename files in intelligent ways, adding indices, replacing text with concatenated bits. It just works.
Writing ISO files: Fedora Media Writer or Raspberry Pi Imager
If you’re trying to put an existing disk image onto a USB stick, these are two very good choices. Fedora Media Writer works great for any kind of ISO file. It doesn’t need to just be Fedora images, you can choose any ISO file, although they make burning Fedora media easy. It’s a little bit less commercially suspect than Balena Etcher is, and without some of the privacy fouls. Raspberry Pi Imager is amazing for imaging Raspberry Pi’s and has all of the ssh, login, configuration, wifi options able to be set up ahead of time, so it’s much more plug-in-play than writing the ISOs using some other program.
Speech Recognition GUI: SpeechNote
Of course, you can use Whisper or any other speech recognition tool in Linux, and for a long time, I had a series of scripts, which fed whatever I just recorded quickly into Whisper to accomplish the same thing. But SpeechNote actually gives you a decent GUI, which allows you to use different models, and even recently gained support for AMD and Nvidia GPUs, which is a lovely thing. This is not as integrated into the operating system as speech-to-text is on MacOS, but in many ways it is more than sufficient, especially if you’re going to be spending some time dictating longer chunks of text. I’ve used it to generate all the descriptions here.
Video Editing: Kdenlive
I’ve tried a number of video editors for Linux, and I think I prefer Kdenlive to any of them. It is certainly not as powerful as Da Vinci Resolve or the proprietary options which aren’t even options on Linux. I definitely miss some of the simplicity of iMovie on macOS, but Kdenlive is good enough for pretty solid video editing. And I get the impression that my problem is primarily skill rather than software. I do wish that it had better support for various GPUs in the flat platform, but it’s still pretty good and allows me to do all the editing I need. Given that I don’t do professional quality editing.
Tweaking Flatpak Permissions: FlatSeal
In practice, there are very few times where I actually need to modify the permissions for a Flatpak. But there are definitely cases where it comes up, for instance, giving Steam access to a secondary drive to store the game library or changing what folders my browser has access to for direct drag and drop. When those things come up, although I could use the command line to do it, the chances of my remembering the commands to do so are basically zero, so FlatSeal is a great option.
Journal Article Organization: JabRef (🍎)
I’m going to be honest here: I think that Jabref is pretty janky. However, the alternative, Zotero, has wrecked my library, I think, at least five different times. And so it is one of those cases where you do not have to be good to be the best, you just need to be least worst, and Jabref is certainly that.
Organizing and Installing Games: Lutris
Lutris is meant to be a single hub for games across many eras and services on your PC. In practice, most of the gaming I do is through Steam, because they support the Linux community, and I want to support them. But there are a few games that have not historically been available through Steam that I will use Lutris to install, namely some of the Blizzard products. So, if I want to install Diablo 3, I basically have to do it through Lutris. To that end, it works really well, and it’s a nice piece of software.
Miscellaneous Dev Tasks: Dev Toolbox
This is a Swiss Army knife sort of program that does many, many things that often one needs to do when doing computery things in one place, rather than sending you to 50,000 different websites, each of which has an online tool to do these things. So if you want to shrink CSS, or generate unique identifiers, or make random hashes of things, or test regular expressions, this is one-stop shopping. It doesn’t do everything, but it does close enough to everything.
Non-Flatpak Apps
Terminal Emulator: kitty (🍎)
The thing I like most about Kitty is that it is fast, it is easy to get set up via text config files, which can be synced across machines, and it does all the things I need it to. I’m sure that there are other terminal emulators out there, which might be slightly better in some meaningful way, and I’d love to hear about them if you have strong feelings, but it has done everything I need. it configures via text, and, in that sense, life is good.
Code Editing: Neovim (🍎)
Fight me. That’s (mostly) a joke. I really don’t feel like the best text editor needs to be the subject of a holy war, unless your answer is VSCode, in which case you are very welcome to embrace, provided that you’re aware of the extend and extinguish coming soon. From my specific mind, though, Vim works just a little bit better than Emacs, and I already have configurations and a brain setup to use it. That said, a terminal-based text editor is never going to be as nice as a full IDE for many situations, and it tends to have some awkwardness with modern unicode in a few places.
Running Local Large Language Models: LMStudio (🍎)
This is a great piece of cross-platform software which helps you to download and run local LLMs (e.g. Llama, Gemma, and more). It makes the process quite easy, both for CPU-based and GPU-accelerated running, and although it’s currently only distributed as an AppImage (which is slightly annoying), it’s a spectacular little bit of software, and enables free interaction with known-version and uncensored LLMs. This may not sound useful, but open science demands open models, and as a computational linguist, it’s valuable to be able to explore models without guardrails and API-level system prompts, so you can better understand the true, unfiltered output of the models, and models will actually answer questions without fear of “I am unable to discuss Copyrighted content” or mistaken guardrail responses. It’s also easier to run experiments when they only cost a bit of electricity.
Music Library Tagging and Management: Beets (🍎)
This is a Python-based command line app whose sole purpose in life is to organize your music library meticulously. From my perspective, it’s wonderful in that you can make it create folder structure, rename files, and deal with special characters in a uniform way, and make sure that your music library is very organized according to tags. It also allows you to update tags using online lookup tools, and is reasonably accurate in doing so. You’ll want to make a backup of your library the first few times that you use it because it is a little bit overbearing at times and left to its own devices may make mistakes. But once you get the hang of it, it is a very nice tool for organizing your music. If you’d prefer a GUI, MusicBrainz Picard is a good choice too.
File Synchronization: SyncThing (🍎)
Syncthing is the glue that holds my computing life together. All that it does is very reliably and quickly sync files across multiple machines. It effectively allows you to create your own equivalent of cloud storage, except that you run the cloud. The only limitation of this relative to using Google Drive or iCloud or something similar is that it only syncs running machines and has no ‘server’, so it’s not going to sync if the two machines aren’t online at the same time. But if you run a Raspberry Pi with a hard drive attached, that’s good enough, and will ensure that even if you shut down your laptop before you start up your desktop, you can make sure that all your machines stay in sync. It works better than it has any right to and completely replaced Resilio Sync in my life.
One other really nice aspect to this is that you can use this on Android. And as a result, my music library syncs to my phone in real time. So that way, I never have to plug my phone into my computer to copy over files. Similarly, my phone camera folder syncs to my computers, and it’s just lovely, and I can drop a file into a folder on my phone and have it land on my computers. On iOS, Apple has restricted things too much for this to work very well, are apps that do some limited syncing.
Document Conversion: Pandoc (🍎)
I have written entire articles about the joys of Pandoc, but it’s software that turns documents into other formats of documents and in doing so allows you to create websites, slideshows, all sorts of things. It is a lovely piece of software and is a beautiful example of how simple tools can make powerful workflows.
Backup: Restic (🍎)
Restic is backup software that works beautifully in all of the ways that I want backup software to work, but has a learning curve that is very vertical for a very small amount of time. Some of the nice things that it does very easily and well are the automatic deduplication of backups across machines, so you can sync multiple machines to a single repository, know that no additional space is being taken up unless there are differences. It does schedules of backups, well, provided you use external scheduling tools. It allows easy restore, it allows you to mount a prior, backup online as file systems, you can go through and find the file you need. It basically does everything, and I’m very, very happy with it, having had no data loss, despite a number of situations in which my backups were, shall we say, required.
Backup Hosting: rsync.net (🍎)
If you’re looking for a cloud target for your restic backups, I highly recommend rsync.net. This is not a paid arrangement, they’ve just treated me very well, and cost a lot less per terabyte than most other options, with very, very good service, and strong efforts to resist enshittification. Their support model is basically “You’re a nerd, figure it out”, but any time you actually need their help, support is ridiculously fast, kind, and easy to work with.
System Configuration: Bash Scripts (or Ansible) (🍎)
For a long time, I used Ansible to configure my systems and make sure that multiple computers all had similar state in terms of the programs installed, symlinks created, and these kinds of things. This worked very well, but was always swatting a fly with a howitzer: it is absolutely effective, but perhaps requires a little bit more energy than truly needed for the task.
In practice, these days, I have migrated over to a set of four BASH scripts, which will install programs using my local package manager’s idempotent tag, which will install flatpaks automatically (–or-update for idempotence), which create symlinks if they don’t exist, and install Python packages. As a result, when I move on to a new system, if I run those four scripts, I will be roughly where I want to be in terms of programs installed.
These days, smart package managers are including features that allow you to run scripts idempotently, which means that if you run them and the state is already as described (the thing is installed which you’re asking to be installed), just move on happily. This means that if I run these scripts, it will make sure that everything in that script is installed, and if not, install it, which is nice because it means that I can run that script to synchronize state across different machines.
Music Playing: cmus (🍎)
This is a command line-based music player, which is incredibly fast, very easy, and works nicely with any folder structure, without maintaining any sort of weird databases or libraries or anything else. I do genuinely wish that it had slightly better support for generating playlists and things like that, although it can certainly read playlist files, but it does everything I need a music player. player to do quickly and easily in a way that I really can’t complain about.
Formatting/Modifying Disks: Gnome Disk Utility
Even though I am decidedly a KDE person in terms of desktop environment, this is simply a better tool for managing hard drives and filesystems and such. It’s pretty easy, it allows you to modify the partitions and partition tables, it supports most good formats, and it even allows you to modify your Fstab in a reasonable way. Again, everything that I do here could be done by a command line, but this just works better and doesn’t require me to keep those commands memorized.
File Management: Yazi or Dolphin
Yazi is a great terminal-based file manager, which is ridiculously fast, supports simple text-based configuration, has a very nice interface including good preview mechanics, and good, vim-like shortcuts for navigation. Dolphin is a great GUI file manager, which is occasionally still useful when you need something more complex.
Home Automation: HomeAssistant (🍎)
One should recommend Home Assistant only in the same way that one recommends any other recreational drug: knowing that the person will either find the whole concept completely uninteresting, or they will fall into a deep and expensive rabbit hole which will consume their life for months or years (and that short duration only happens if they’re lucky).
Home Assistant is a free and open-source platform which you can install on a Raspberry Pi that will collect data from a variety of connected sources (many of which you might already have via ‘smart’ devices in your home), and also allow you to manage things like lights, motion sensors, temperature sensors, air quality, fans, ‘smart’ outlets etc. from a single place. Combined with a Zigbee radio, I’m able to control all of the Phillips Hue lights throughout my house (without the proprietary base station), and also keep smart devices off of my Wi-Fi network and make them only able to communicate with your HomeAssistant instance, which closes a number of security holes. You can also set up things like shopping lists (accessible from your Smartphone), remote access, and more, such that your phone is the only tool you need to control your lived environment.
More interestingly, though, you can create automations, which turn lights on and off automatically in stairwells when motion is detected, which ensure that all lights are turned off in the house after a certain hour, which use light colorations to flag other events, automatically turn off entire outlets when nobody is home, and more. More esoteric, flashing an indicator light when somebody’s approaching the room you’re in is a tiny thing, but intensely valuable for managing the startle response from PTSD. It was also interesting and useful, when a fire threatened our home recently, to be able to monitor in real-time from a safe distance the particulate count and temperature throughout my house, which provided helpful real-time reassurance that my home was not (yet?) on fire. Or, on the less serious side, with the touch of a button on your phone, you can turn every light in the house red and immediately start playing the theme from the movie ‘Hunt for Red October’ loudly over all speakers in the house, which has very little practical purpose, although if there’s ever a break-in, it could probably help to traumatize them back a little bit.
Right now, the voice integration is sub-par, but even still, it can replace many tasks which things like Alexa and GoogleAssistant previously did at great privacy costs. But hardware is being developed (by Nabu Casa) which is quite nice and well-designed, like the HomeAssistant Yellow and Voice Assistant boxes, but you don’t need to give anybody money to use it.
I will warn you that if you go down this road, it will likely be very hard to stop, because you will realize the number of ways you can basically program your physical environment to optimize your life. This will be a fairly expensive process and involve replacing switches and light bulbs and adding sensors, and creating Raspberry-pi based touch panels to control everything, but your home will be much more amusing and fun, and in many cases, with smart outlets and lights and clever optimizations, can actually start saving you a fair amount of energy.
Ad Blocking: PiHole (🍎)
Why block one ad when you can block them all, for everybody on your network, particularly when advertisements are such an excellent vector for malware and other problems? If you control your network’s DNS and can set up a RaspberryPi, you can set up PiHole, which blocks nearly every ad, all the time, on all devices. It’s a bit of a pain to set up at first depending on your router, and if your Pi goes down, so too does your internet, but only when I leave my home do I remember how bad advertising has gotten online.