atool is a wrapper around many tools to unify compression and extraction
from command-line.

cdrtools can process ISO files.

xz offers a good compression ratio together with great decompression
performance. Compression is quite demanding. bzip2 has little to offer
compared to xz. p7zip has the features of tar, xz and ccrypt in
one program.

bc and calc are simple arbitrary-precision calculators. bc is lighter
but calc has somewhat more features. Both can be used in limited
environments or in shell scripts. Emacs’ M-x calc is more complete and
more convenient for interactive use. Emacs also has M-x ielm.

PARI/GP is an extremely fast and advanced algebra system for number
theory. Great for prime numbers and such.

Octave will serve as a Unix-designed Matlab.

Camera capture: Guvcview, q4vl2

Clipboard tools: xsel

Using Emacs everywhere, xsel is barely useful. I only use it to yank the
filename of pictures from sxiv.

Contacts: Emacs (org-contacts)

I used to use Abook, a stand-alone curses contact manager. Contacts are
stored in plain text and as such they are versionable, but the automatic
numbering makes up for huge diffs. The curses interface is not very
powerful (limited search capabilities, limited edition).

Org-contacts is much more powerful than Abook: free form, arbitrary
fields, contacts can be fuzzy-searched or retrieved from anywhere within
Emacs.

Versioning your contacts is a great way to centralize them, instead of
spreading them across your mail agent contacts, CSV files, etc. Plain text
contacts also means it is easy to write a converter from a CSV file
(e.g. using Emacs Lisp or AWK).

Cryptocurrencies: electrum

Cryptography: ccrypt, encfs, GnuPG, pass, Pwgen

GnuPG is essential at many levels, from communication to data encryption.
Asymmetric encryption ensures that sensitive data stored on an untrusted
platform (i.e. online) cannot be compromised remotely by reversing a bad
password.

ccrypt is good at encrypting single files symmetrically, e.g. for users
without a PGP key.

encfs can encrypt folders and mount them as an encrypted file
system. Files can be browsed transparently without being ever written in
clear to the disk. It uses a fuse backend which makes it portable across
systems at the expense of speed.

pass is one of the few password managers that can be used to safely store
and synchronize passwords online. It uses asymmetric encryption (through
GnuPG). Git is used to synchronize the password store. I recommend using
Emacs’ helm-pass to fuzzy-search the passwords on input.

Prefer Texinfo over Man pages which are very limited. Most man readers
don’t support cross-references, fuzzy search or section browsing. Both Emacs’
M-x man and M-x woman support those features however. Texinfo manuals
automatically generate an index which is extremelly useful for browsing.

TeX-based processors offer the best typographic rendering while based on what
is possibly the worst programming language. Org-mode has good export support for
TeX / LaTeX.

Most of these programs can be used for previewing document formats in text
form.

E-mail clients: Emacs (mu4e, notmuch)

I used to use Mutt: it’s extremely hard to configure for a very limited
result. It does not support viewing e-mails and composing at the same time;
you can’t really copy text from the pager; multiple-account support is rather
tedious to configure.

mu4e is moderately easy to configure, extremely extensible with Emacs Lisp
and does not suffer from the limitations of Mutt. You can fuzzy-search
contacts, e-mails, preview HTML, display embedded pictures and much more.

I used to use ranger, but being curses-based, it can only be that
useful. The column display is nice though. It can preview all sorts of
file but graphics display is obviously limited. Emacs-based browsers are
much better at this. It can run an arbitrary command on any file selection
and it remembers the selection in every folder. It can run various powerful
commands conveniently, such as recursive hardlink creation or
batch-renaming.

Emacs’ Helm Find-Files makes for a revolutionary file browser: typing
anything will fuzzy-filter the current directory, or even subdirectories.
The filtered results can be browsed with special keys: you can select files
from different directories and apply arbitrary actions to them. It has a
binding to switch to Eshell from the currently-browsed folder. It’s
possible to batch-rename selected files from multiple folders using
Wdired.

File synchronization: hsync, rsync

Read the documentation carefully. rsync has a lot of useful options, like
--append-verify, --progress and --size-only.

hsync is useful to detect renamings and can be called before rsync to
speed up the process.

Finders: Emacs (Helm, Ivy)

I used to really like fzf and search programs like agrep (from the tre
package) or ag (The Silver Searcher). If you live in Emacs, those are
completely superseded by Helm or Ivy.

Emacs’ TRAMP allows you to work on remote files (move, delete, download) and
edit them transparently: first they are automatically downloaded, then all
edits are done locally within Emacs, and last the file is uploaded upon
saving.

youtube-viewer is similar to mps-youtube but its graphical interface can
display thumbnails which is very convenient to help the user find a video.
I find it less convenient than mps-youtube to build playlists though.

slock is as simple as it gets but does not support PAM sessions unlike
xlockmore.

vlock is for TTY sessions. It is part of the kbd project.

xss-lock auto-locks the screen on standby or when the laptop lid is closed.

Shell: DASH, dtach, Emacs (Eshell), fish, shellcheck

DASH is a light, fast and POSIX compliant shell. It is quite limited for
interactive use but ideal for testing the POSIX-ness of scripts.

dtach detaches the command passed as argument, allowing it to run in the
background even after the parent program has been killed. The backgrounded
program can be re-attached at any moment to another shell. dtach also
works with Eshell.

fish departs from the POSIX-derived shells. Bash suffers from the
design issues of the venerable Bourne shell (e.g. word-splitting). Zsh
has tried to unite all shell languages under one banner, thus becoming
complicated beyond reason to the point that the simplest configuration can
be an Odyssey on its own. Like rc, fish uses a clear syntax. It also has
a straightforward API, which makes it very straighforward to customize and
extend. Last but not least, its interactive features are efficient and to
the point.

The lack of POSIX-ness is no problem in practice:

Any POSIX shell script will be executed by the interpreter pointed by the
shebang.

Initialization files such as .profile can still be set up by sh at the
beginning of the session: use sh as your login shell and exec fish at
the end.

Farther down the road of non-POSIX shells, Eshell lies even further: it uses
Emacs Lisp as a language which is arguably much more powerful than fish.
See my article on Eshell for more good reasons why you should use it.

Eshell has a very powerful completion framework, pcomplete. As of 2017
the limited popularity of Eshell result in limited support for completion.
That being said, it is possible to configure Eshell so that it falls back on
the completion of fish, which then makes for a very extensive completion
support.

shellcheck is a static-analyzer for shell scripts.

Spreadsheet: Emacs (Org-mode)

This Emacs mode lets you write plain text tables (track them with git!)
and apply arbitrary functions to cells. These functions are either
pre-defined or self-written in Lisp (with ubiquitous support for M-x calc
and its arbitrary precision arithmetic). From there you can use every Elisp
feature, and if that would not be enough (e.g. too slow) you can call
external programs to perform the task, say, your favourite scripting
language. This makes the tables infinitely programmable.

Org-mode all the way. It can be used as TODO manager, calendar, for
document processing, documentation, literate programming, etc.

I briefly tried Taskwarrior, which file format is plain text but hard to
read. The editing is far less convenient than with a proper text editor.
This is where the power of using an editor as a user interface really
shines. Org-mode is not an Emacs exclusivity, some other editors support
it.

Emacs Lisp makes it very convenient to batch-edit text files using its
“buffer-editing” model (i.e. scripts can directly reflect interactive
editing). I find it often much more efficient to write than AWK scripts,
especially with its step-by-step debugging capability.

Touch-typing: GNU Typist

Torrent clients: Transmission

Transmission is full-featured and offers various UIs: GTK, Qt, curses,
and… Emacs! (transmission.el) Beside not supporting magnet links,
rtorrent has a poor UI for selecting files and folders manually, which
makes it very impractical for large torrents. The Emacs interface brings in
its load of usual advantages: extensibility, keyboard-driven, fuzzy-search,
macros, etc.

FFmpeg is the swiss-army knife of transcoding: aspect ratio, concat, crop,
mixdown, remux, metadata, etc. It is much more efficient to use FFmpeg from a
smart custom script than using a GUI.

mkvtoolnix can process mkv files in place, e.g. it can instantly change
metadata.

cdparanoia rips audio CDs.

dvdbackup decrypts VOB files.

Gaupol is a simple yet complete subtitle editor.

MediaInfo displays the media property of pictures, audio and video files
(codecs, container, etc.). It overlaps a lot with FFprobe (from FFmpeg),
but still manages to provide some details that FFprobe misses.

The rest is a set of tools for containers and codecs.

Translation: translate-shell, Emacs (google-translate)

Unit conversion: units

Vector graphics: Asymptote, Graphviz, Inkscape

Asymptote is a full-featured descriptive vector graphics renderer. It
features libraries for: plots, trees, 3D (with perspective!), and much more.
The language is much more convenient (C-style) and far less limited than its
competitors (TikZ, Metapost, PSTricks): it has double-precision arithmetic
support, control structures, data structures, support for custom structures,
etc. It also supersedes Gnuplot.

Graphviz is a smart graph drawing tool that will decide automatically of the
best arrangement for the vertices and edges.

Inkscape can export to LaTeX, which is useful for good and consistent
typography in your document.

Version control: git, Emacs (Magit)

I use the netrc credential system (from git contrib) to re-use the
credentials stored in my ~/.authinfo.gpg when calling git send-email.

Video: mpv, subdl

mpv is a fork of mplayer with fewer dependencies and some additions such
as an on-screen display, support for resuming and chapter markers. Both mpv
and mplayer allow for very fast video rendering, which can render 1080p
videos on lower-end machines where VLC would stutter.

subdl will often fetch the right subtitles for the desired language. When it
fails to pick the right one, it is still possible to select it manually.

While eww is text-based, it can render variable width/height fonts as well
as pictures.

Web tools: curl, Wget, youtube-dl

curl and Wget are overlapping but also very complementary.

youtube-dl, as the name does not imply, is not restricted to YouTube.

Window managers: Emacs (EXWM), Stumpwm

I’ve used Awesome (extensible in Lua) and i3 (relies on external scripts
for extensibility). In the end their extensibility was always too limited for
my needs. For instance it’s very hard (impossible?) to search a window by its
title and directly focus on it.

EXWM is a WM where all windows are Emacs buffers. Consequence: you can
fuzzy-select your windows, tile your selection, delete the complementary
selection, etc. EXWM is obviously extensible in Emacs Lisp.

Stumpwm is 100% extensible in Common Lisp. It’s possibly the most
featureful window manager. It’s less integrated to Emacs, which has its ups
and downs: a blocking Emacs won’t block everything, but it’s harder to link
Emacs content with external applications.