Tools, or how I do everything

This is an extension of my dotfiles

This is an ever evolving list of tools and scripts I use and recommend, or combinations of tools I use to optimize my workflow.

Most of these are command line based, I wrap a lot of them in scripts here and in my seanb-utils scripts repo

For more, see my github stars

  • Shells
    • zsh - for the fish-like highlighting and auto completion. Manually configuring everything makes this much faster than the monstrous oh-my-zsh
    • bash/dash - for shell scripting. My zsh setup is also much more dependent on external plugins, so I don’t use that on servers, I just stick to bash there. My bootstrap script sets up new bash servers for me nicely, see this post for more info
  • Terminal
    • wezterm, which I’ve customized some:
      • a special cat alias which lets me cat images and directories, while in the terminal


  • Arch
    • Window Manager: i3-gaps - not amazing but covers all my usecases and have everything configured nicely. qtile had some graphical issues for bad GUI apps, and I don’t feel like messing up my haskell installation for xmonad
    • i3lock for screen lock; daemon process caches pixelated version of screen to speed up start time. Corresponding service file to lock my screen whenever my laptop suspends
    • rofi for launching applications and switching windows
    • dunst for notifications, pretty normal configuration
    • autotiling for automatic tiling
    • redshift to adjust color temperature
  • Mac
    • I use skhd as a hotkey daemon. My dotfiles are cross-platform, lots of scripts in cross-platform that handle switching on the OS to call out to platform-specific behavior (sending notifications, clipboard management, asking for user input)
  • Android (using termux)


  • firefox-developer-edition, with extensions:
    • vimium-ff. Learning vimium has virtually killed the mouse for me. Especially the f binding, which highlights all clickable items and lets me click something with a keybind. I now sit feet away from my laptop with mechanical keyboard in hand, reaching over only for horrible sites which don’t comply to the HTML standard (looking at you, clicking the next episode button on Netflix)
    • RES, to make reddit manageable, though I don’t go to reddit much these days
    • Violentmonkey so I can add bits of JS to sites I want to fix
    • Refined Github for general Github improvements
    • Stylus, so I can dark mode common websites
    • Sponsorblock to skip ads in youtube videos
    • Dark Reader, so I can dark mode every website I visit. Does have considerable overhead, so I prefer finding CSS through stylus for websites I visit often
    • uBlock Origin to block ads
  • I use lynx to do quick duckduckgo searches without leaving the terminal/display some HTML nicely in the terminal (e.g. in rread)

General Workflow/Tools

  • Editor: nvim using nvim-cmp for completion, configured here, mostly in lua
  • Email neomutt for email, using mutt-wizard as a configuration layer to set it up
  • RSS: newsboat for youtube/news/blogs. I have a script to grab a youtube users RSS feed, since youtube doesn’t list that publicly. linkhandler lets me open youtube videos from newsboat using mpvf instead of visiting youtube in the browser
  • Backups:
    • SyncThing to Sync important directories across all my computers, and to my NAS
    • restic to a local drive, to have separate, offline, snapshots, using a small script to help manage all of that
  • Todo list: todotxt for todos, with a rofi interface as GUI, and TUI for adding todos. The TUI I wrote forces lets me enter a deadline using plain english and converts it to a datetime, so is nice for quick reminders. todotxt-more has some great addons as well
  • Calendar: calcurse as a calendar, with my calcurse-load hooks to add Google Calendar and todo.txt to calcurse automatically
  • File Manager: a heavily customized ranger . See rifle.conf (file handler) and (previewer)
  • Task Scheduler: bash script (bgproc) with an infinite loop which runs in the background instead of cron (uses my evry tool to schedule tasks)


  • mpv to listen/watch media in general, integrated with my file manager (ranger)/playlist manager and just through a basic list-music/play-music script from the terminal
  • Music:
  • Images/Video:
    • For basic image cropping, I use pinta (should probably learn gimp but Ive never had the need).
    • For general image manipulation tasks I create lots of small imagemagick scripts to do random resizes/converts. I have a larger script to convert videos to gifs, and use gifsicle for manipulating gifs
    • Lots of small ffmpeg scripts to convert between video formats.
    • For trimming video, I use an encode_webm

Android Apps

CLI tools I use all the time


  • FileHosting: To host files publicly quickly, I just sync it up to my server and serve it with nginx, using my remsync script. croc is nice, but that assumes the other person has terminal literacy
  • password generator
  • url shortener with this script to create new public URLs


  • datamash to perform basic statistics on text files/STDIN
  • dragon, to be able to dragon and drop items from/to the terminal. Have my dragon-sink script, which accepts and cp/mv’s files from applications, and bindings in ranger to drag files into my browser. Also use draglastpic very often, which lets me drag the latest screenshot to some application
  • dust; a fancy du clone
  • entr for lots of small build scripts
  • eza aliased to ls
  • fd; a fancy find clone
  • fzf everywhere, to fuzzy match in shell pipelines
  • glow to render markdown in the terminal
  • hyperfine to do benchmarks
  • pandoc to convert formats (lots of markdown -> html)
  • pygmentize to convert text to HTML - text2html
  • jq to process json streams
  • oh-my-stars (my fork) to search github stars offline
  • vipe, to quickly edit my clipboard in a vim buffer
  • yt-dlp to download video/audio from tons of places. yt-dlp is a youtube-dl fork which downloads faster and has more features
  • yadm to manage my dotfiles
  • my cat is aliased to bat, a fancy cat clone which highlights text based on extension/mimetype

Other CLI Tools I use less often

  • boxes to print fancy boxes in the terminal
  • codepsell to correct common misspellings in code
  • chafa to print gifs in terminal
  • dex to open .desktop files
  • dunk, for nicer git diffs in the terminal
  • figlet to print large letters
  • gron when I can’t be bothered to use jq
  • jpegtran to compress JPEG files
  • ldm, to do basic drive mounting for external drives/USBs
  • linkcheck to check for broken links on websites
  • lorem to create a bunch of lorem-ipsum
  • ncdu to preview disk space interactively
  • optipng to compress PNG files
  • pastel to generate/pick color schemes/hex codes from the terminal
  • pup to parse HTML on the command line
  • qr (qrencode), to create QR images from command line
  • qrc to create QR codes in the terminal
  • readability; cli tool for Mozilla’s readability library, for parsing contents out of HTML
  • screenkey when recording demonstrations to display keys
  • shellcheck to check shell scripts for syntax errors
  • speedtest-cli to test internet bandwidth
  • sqleton to visualize sqlite databases
  • termdown to countdown in the terminal
  • toilet is another implementation of figlet, gives fancy colors in the terminal
  • up - to interactively explore/pipe text data. Especially useful when doing data wrangling, like when using tools like jq/grep/cut to extract some information from a data source
  • moby as a thesaurus
  • ix to create pastebin links from the command line

Other GUI Applications I use less often

  • nsxiv as an image viewer for more complicated/macro-like tasks
  • simplescreenrecorder to do simple screen recordings; I use this to make demonstration gifs
  • sqlitebrowser to explore sqlite databases