How to make a “Ultra-Geek” Linux Workstation
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.
- 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.
- Window manager — i3
- X11 configured for secondary selection with the Sun Type 6 Keyboard. Map the special keys with xkb and call out to xsel.
- Application launcher — dmenu
- Color management: Dell UltraSharp ICC color profile. Load it with xcalib. Adjust color tone at night with Redshift.
- Screen magnifier — vmg
- Screenshots — maim
- Screen lock — slock
- Terminal emulator: rxvt, or possibly urxvt for unicode
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
- Get quarterly xml data dump of questions and answers
- How to import XML into postgres: http://stackoverflow.com/a/33211885
- Map the “help” button on keyboard to search with highlighted text
- 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
- Scanning — Sane with XSane frontend
- PDF viewing and annotation — MuPDF
- Adding OCR text to PDF — PDF Sandwich
- 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: