my linux nerd toolbox August 29, 2017

Geeks! Some of you asked for it, and I'm not –yet πŸ˜„β€“ web-famous enough to be on usesthis, so here's a blog about my setup! Hope you find useful bits πŸ™‚.

Without further ado: πŸ”₯ πŸŽ† πŸŽ‡ my linux nerd toolbox πŸŽ‡ πŸŽ† πŸ”₯ .

Hardware

As admirably summed up by Peter Welch, tech jobs rarely involve a "4700-hour week digging a tunnel under Mordor with a screwdriver", but damaging ourselves as little as possible doesn't seem like premature optimization. So,

  • TypeMatrix keyboards don't suck: narrow (thus bringing the mouse within closer reach), orthogonal, Enter + Backspace in the middle (thus accessible to both hands). Oh, and their blank (label-less) version helped forced me learn to touch-type, which you should totally do. Not sure about the orthogonal layout? Fine, but really, do yourself a service and buy a narrow/compact keyboard without numeric keypad, it makes for a more natural mouse position.
    • On the software side of keyboards, I roll with a custom xkb layout. No Dvorak for me, it's a vanilla US layout (for a. commonness and b. uncrazy brackets placement), spruced up with frequent-for-me characters behind the Alt dead key: local ones (French Γ’ Γ© Γͺ Γ΄ ΓΉ ), conveniences (β†’ ↔ ← β‰  β‰₯ Β© – β€”), and common emojis (πŸ‘ πŸ™‚ πŸ˜„ πŸ˜•). As to why a dead key making Alt+e into Γ© is any better than, say, a US International layout converting 'e to Γ©, it's because this 'e logic gets in my way when I need to type let animal = 'elk'. See that gist; it's a bit similar to that European layout.
  • A vertical Evoluent mouse that doesn't twist my wrist. Say that again? Friends don't let friends twist their wrist.
  • A big screen and beefed up font sizes in apps where I read a lot (email client, code editor, etc). I'm myopic, and can't help to occasionally bend my neck to get closer to the text. Getting a 27" screen at work accidentally solved a years-long shoulder/neck pain; I thought I had good ergonomics & posture, but it turns out I frequently unconsciously sat in terrible bent-forwards posture.
    • Also, no multi-monitor, it's a recipe for potentially long sessions with the head skewed towards a non-centered screen. I get along just fine on one fat monitor thanks to simple window/splits management and efficient window switching (read below about marathon).
  • Desk at a height that lets my forearms rest, monitors centered and just below my eyes (computer ergo 101).
  • Chair? At work, I thought I liked Aeron chairs, until I realized a simple sturdy & cushion-less chair supports my lower back even better. At home, a DIY standing desk. The sitting at work / standing at home yo-yo is πŸ‘.

OS

Code

  • A general-purpose language to get things done: Python 3 is carried by a respectful community, pleasant, and featureful thanks to exhaustive stdlib and package selection accessed through the pip package manager.
    • I'm enjoying modern nodejs / TypeScript too, and am dabbling in Rust because the tech & community & attitude are giant balls of light. Babbled with lΓΆve, Unity and Godot for gamedev attempts, and will babble again.
    • Before inflicting a shell script upon earth, I reach for ShellCheck's help through a plugin for my $EDITOR.
    • Regular expressions are cool. Play with them on regex101.
  • REPL: Python β†’ bpython/ptpython, node β†’ Quokka.
  • These days, for an almost-IDE-like experience but lighter and more bendable, I like VS Code, with a few common extensions.
  • When $EDITOR wants ctags, I reach for universal-ctags, "a maintained ctags implementation".
  • The vvvery full-featured DBeaver helps me SQL.
  • To build interwebs, my framework of choice isβ€”WHOA WAIT. This would be a worthless piece of information, as these things change faster than a request-response round-trip these days. I'll quietly pass by the flamewar, muttering that when I don't want to start a web project with (choices βœ• more choiceshey, other choices), my rules of thumb are to:
    • Pick popular-and-stable.js for good StackOverflow factor.
    • Roll with static when I can. This blog is built with obscure-but-oh-so-cute-and-hackable chisel. But ignore this and just pick the most popular static site generator for your favorite language.
    • Barf HTTP with vscode REST Client > Insomnia > httpie > cURL.

Short feedback loops everywhere

... or I go crazy. Things like automatically running tests/rebuilds on file changes (with entr or full-blown incrond), js Hot Reloading, or serving static HTML from the devd live-reloading http server.

Shell

The fish shell is smart, full-featured, friendly by default, and I spruce it up with fisherman plugins fisherman/fzf decors/fish-colored-man fisherman/anicode. That being said, out of the interactive shell I don't like the exoticism of fish as a scripting language; I keep preferring shebanged & shellchecked scripts, they're a stable and portable evil I know.

  • Git: a few human aliases to interact with the borg, tig for a nice interactive text interface, diff-so-fancy for human-friendly diffs, and git bisect makes me cry tears of joy each time it lets me isolate the occasional case of hey-here's-this-regression-compared-to-our-last-version-published-six-months-ago-can-you-fix-it-now.
  • sudo-globally-installing python/node command-line tools invariably ends up in divorce with your package manager, so I install those locally:
    • python: pip install --user foo
    • node: npm i -g foo with export npm_config_prefix="$HOME/.node_modules"
    • ... then expose local binaries with export PATH="$HOME/.local/bin:$HOME/.node_modules/bin:$PATH").
  • Vanilla grep/find/cat are good, but ripgrep/fd/bat are I CANNOT EVEN.
  • manpages are good but tldrpages are terser.
  • After too much profanity towards the vanilla vi in a ssh-ed server, I mount a pseudo-local folder using sshfs, grin, and enjoy my local toolshed.
  • rsync for backup/deploy chores. Pronounced Γ  la franΓ§aise: Γ¨re-cinq.
  • Shell used to happen in gnome-terminal + tmux, whose configuration and scrollback watness made me look a long time for a replacement. I wanted to love Tilix, but lack of scriptability and keyboard-friendliness made me look further, until I found the powerful and almost sane-by-default Kitty.
  • grc helps me colorize unhelpfully-white text.

Interwebs

Through Firefox, because Mozilla cares about the web & me more than The Goog. Nightly, to get features in my grubby hands 12 weeks earlier, at the cost of the occasional crash that I happily report to the fine folks at Mozilla.

Routers run OpenWrt and its awesome DNS-based ad/abuse domain blocking package, as baseline interjunk condom in vanilla browsers and mobile apps.

The tech interwebs I like are RSS through Feedly Pro (here's my diet), and HN. Then, to cut down on aimless FOMO addicto-HN-browsing, I enjoy the weekly/monthly newsletter format. For me it's hackernewsletter, Exponential View, Schneier, Frontend Focus, Pycoders Weekly, JS Weekly, but look at a selection and pick your poison. Real World Newsβ„’ reaches me through the radio, which is πŸ‘Œ while cooking or doing housework.

Desktop Environment

Is GNOME, for the simplicity and continued refinement, at the cost of designers occasionally sawing a UX branch I was sitting on.

  • Alt+Tab-ing, or clicking buttons on a bar, or using (gosh) an Activities menu are inefficient and distracting. I focus windows (usually full-screen or half-split) using my own little marathon which lets me bind keyboard shortcuts to focus/launch apps.
  • Shell's Super + {Left, Right} keyboard shortcuts makes for dead-simple window splits without going all the tiling-WM way.
  • Theme nits; Ctrl+Shift+I in any GTK3 app started with GTK_DEBUG=interactive to pop the inspector. Persist changes in ~/.config/gtk-3.0/gtk.css.
  • Nautilus scripts are nice to automate common file-contextual tasks.
  • Autokey for text expansion and simple X scripting.
  • A few UI changes with GNOME Tweak Tool, and a few GNOME extensions: AlternateTab, Mailnag, OpenWeather, Pixel Saver, TopIcon Plus.
  • Fonts? In my terminal & editor I like Ubuntu Mono, and for graphical I like Ubuntu Regular, whose thickness makes things super readable, or Droid Sans for horizontal compacity.
    • Hideous Arial, Verdana, Calibri and, gah, Courier New still used by many sites make my eyes bleed, so a fontconfig replace rule fixes that. Also, fontconfig emoji tweaks. Also, you want to set sexy default fonts in Firefox prefs.

Miscellaneous

  • Non-code creation:
  • Miscellaneousmiscellaneous :
    • Clementine is the only featureful-yet-suckless Linux media player I tolerate (hail foobar in Windows-land). MUBI sells an awesome movie selection for CHEAP per month, and I get subtitles for the occasional illegal flick in seconds from VLC's VLSub extension.
    • When I want to bundle/isolate a heavy or privacy-intrusive webapp, nativefier behaves like I want. That is, opens links in my $BROWSER.
    • I help mom with TeamViewer.
    • Wine runs the occasional Windows app. Steam gaming happens on a dedicated Windows box, where an nvidia GPU doesn't mean death-by-driver-induced-madness.
    • Calibre to manage ebooks.
    • gcalcli to quickly add to my Google Calendar from the terminal.
    • To prune a full hard drive, (graphical) qdirstat or (term) ncdu.

Phew! Got one more magic trick to suggest? Please do, via twitter/email.

Lastly, writing this waaaay-too-long collection brought back to mind Ryan Dahl's "I hate almost all software" rant. So, a reminder (which I address to myself too): stay curious about craft & tools, but then move on and do stuff with them πŸ™‚.


EDIT 2018-01-24 following discussion on r/Arch: added guetzli, dbeaver, fd, gcalcli, universal-ctags, qdirstat / ncdu.

EDIT 2018-04-14: moved from zsh to fish shell.

EDIT 2018-05-10: added Refined GitHub and grc. Added bat, discovered on Ask HN: What are your favorite terminal programs?

EDIT 2018-09-22: added offline Google Fonts.

EDIT 2018-09-25: replaced tmux + gnome-term with Kitty.

EDIT 2018-10-12: added fontconfig-based font replacement and fontconfig emoji tweaks.

EDIT 2018-11-02: replaced Shutter with my homebrew maim + zenity + inkscape screenshot script.

EDIT 2018-11-20: added arch-wiki-docs and arch-wiki-lite.

EDIT 2018-12-03: added yourduskquibbles/webannoyances list to the Firefox / uBlock section.

EDIT 2018-12-25: added a few Firefox addons: Pin Unpin Tab, Copy selection as Markdown, Redirector, Simple Tab Groups.

EDIT 2019-01-02: added OpenWrt & its adblock package.

EDIT 2019-01-08: added diff-so-fancy.

Comments and feedback welcome @ronjouch or by email.