“Avoid interpreted languages, web-based desktop apps, and JavaScript garbage”

Yesterday i read a really inspiring article written by Joe Nelson, concerning the making of a extremely-geek Linux workstation, with a minimalist and reactive user interface.

Truly interesting, imho, are the ‘Design Goals’ (with my highlights in bold):

  • User actions should complete instantaneously. While I understand if compiling code and rendering videos takes time, opening programs and moving windows should have no observable delay. The system should use minimalist tools.
  • Corollary: cache data offline when possible. Everything from OpenStreetMaps to StackExchange can be stored locally. No reason to repeatedly hit the internet to query them. This also improves privacy because the initial download is indiscriminate and doesn’t reveal personal queries or patterns of computer activity.
  • No idling program should use a perceptible amount of CPU. Why does CalendarAgent on my Macbook sometimes use 150% CPU for fifteen minutes? Who knows. Why are background ChromeHelpers chugging along at upper-single-digit CPU? I didn’t realize that holding a rendered DOM could be so challenging.
  • Avoid interpreted languages, web-based desktop apps, and JavaScript garbage. There, I said it. Take your Electron apps with you to /dev/null!
  • Delegate to quality hardware components. Why use a janky ncurses Linux audio mixer when you can use…an actual audio mixer?
  • Hardware privacy. No cameras or microphones that I can’t physically disconnect. Also real hardware protection for cryptographic keys.
  • Software privacy. Commercial software and operating systems have gotten so terrible about this. I even catch Mac command line tools trying to call Google Analytics. Sorry homebrew, your cute emojis don’t make up for the surveillance.

The selected distro is a Debian stable with i3 as Windows Manager, and a really interesting list of installed softwares:



System tools and utilities

  • Shell: dash
  • VPN: OpenVPN with PrivateInternetAccess config files
  • RFC downloader/reader. Caches locally.
  • Web browser: when possible NetSurf, when necessary Firefox.
  • Pipe text to clipboard: xclip
  • Todo manager: tudu
  • Map and driving directions: Navit with downloadable OpenStreetMap data
  • Desktop notifications — Dunst, be sure to use >= v1.1.0 for a memory leak fix
  • Calendar — calcurse includes support for CalDAV and triggering notification commands
  • Weather forecast — weather retrieves METARs (Meteorological Aerodrome Reports) directly from NOAA
  • File manager — ViFM
  • REST client — Resty + jq
  • Backup and tape rotation — Bacula


  • MUA — NeoMutt includes scriptable new-mail hook, and notmuch indexer
    - Use the maildir storage format
  • MTA — msmtp supports storing password using GnuPG
  • MRA — mbsync syncs the local mailbox with remote imap
  • urlview creates a menu from urls in a text file to open them
  • abook to store and retrieve addresses
  • Calendar integration: mutt + calcurse


  • Password management — passwordstore
  • OpenSSH key management — gpg-agent
  • Editing encrypted files — vim script


  • video: Jitsi
  • audio: Mumble
  • instant messenger: psi
  • irc client: irssi (console) or hexchat (x11)
    - desktop notification via irssi-libnotify
    - hexchat uses libnotify by default I think
  • SMS: dterm through GSM modem
    - Use AT commands like AT+CMGS to send a text
    - Hook up to an RS232 GSM modem like the SIMCOM SIM900

Offline Stackoverflow queries

Video editing

  • kdenlive No need to run KDE window manager, for the KDE part you should only need kdelibs, kdelibs-devel, qt and qt-devel packages.
    Store editing artifacts on ram drive for super speed

System monitoring


Audio player



  • Browsing — feh
  • Editing, raster — GIMP
  • Editing, vector — Inkscape


  • Tech prose editing: Vim + goyo
  • Spreadsheets: sc-im
  • Preview Word files: docx2txt + vim .docx autocmd
  • Word processing: Ted
  • Spell checker: aspell
  • Presentations: Beamer for LaTeX

For more technical information, hardware specifications and setup instruction, take a look to the original (fantastic) post of Joe Nelson: