Tools, or how I do everything
This describes a lot of the tools I use in 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 pura-utils
scripts repo
For other stuff I might be using, see my github stars
- Shells
zsh
- for thefish
-like highlighting and auto completion. Manually configuring everything makes this much faster than the monstrousoh-my-zsh
- bash/
dash
- for shell scripting. Myzsh
setup is also much more dependent on external plugins, so I don’t use that on servers, I just stick to bash there. Mybootstrap
script sets up new bash servers for me nicely, see this post for more info
- Terminal
OS-stuff
- 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 myhaskell
installation forxmonad
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 suspendsrofi
for launching applications and switching windowsdunst
for notifications, pretty normal configurationautotiling
for automatic tilingredshift
to adjust color temperature
- Window Manager:
- Mac
- I use
skhd
as a hotkey daemon. My dotfiles are cross-platform, lots of scripts incross-platform
that handle switching on the OS to call out to platform-specific behavior (sending notifications, clipboard management, asking for user input)
- I use
- Android (using termux)
Browsers
firefox-developer-edition
, with extensions:vimium-ff
. Learning vimium has virtually killed the mouse for me. Especially thef
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 thenext episode
button onNetflix
)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 quickduckduckgo
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 fromnewsboat
usingmpvf
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 mycalcurse-load
hooks to add Google Calendar andtodo.txt
to calcurse automatically - File Manager: a heavily customized
ranger
. Seerifle.conf
(file handler) andscope.sh
(previewer) - Task Scheduler: bash script (
bgproc
) with an infinite loop which runs in the background instead ofcron
(uses myevry
tool to schedule tasks)
Media
mpv
to listen/watch media in general, integrated with my file manager (ranger)/playlist manager and just through a basiclist-music
/play-music
script from the terminal- Music:
beets
to organize/tag my music; config file- my
bash
terminal playlist manager usingfzf
/mpv
to store playlists for local music in local text files
- 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 usegifsicle
for manipulating gifs - Lots of small
ffmpeg
scripts to convert between video formats. - For trimming video, I use an encode_webm keybinding in mpv
- For basic image cropping, I use
Android Apps
- termux - terminal
- F-droid to download applications not on the play store
- Pano-Scobbler to scrobble to last.fm/listenbrainz
- gpslogger to save my location
- syncthing to sync music/data from my computer to my phone
- activity watch - app usage tracker
- keepass2android to use my password database on my phone (synced using syncthing)
- sms backup & restore to save my call logs/sms messages
CLI tools I use all the time
Mine:
- FileHosting: To host files publicly quickly, I just sync it up to my server and serve it with
nginx
, using myremsync
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
Others:
datamash
to perform basic statistics on text files/STDINdragon
, to be able to dragon and drop items from/to the terminal. Have mydragon-sink
script, which accepts andcp
/mv
’s files from applications, and bindings inranger
to drag files into my browser. Also usedraglastpic
very often, which lets me drag the latest screenshot to some applicationdust
; a fancy du cloneentr
for lots of small build scriptseza
aliased tols
fd
; a fancy find clonefzf
everywhere, to fuzzy match in shell pipelinesglow
to render markdown in the terminalhyperfine
to do benchmarkspandoc
to convert formats (lots of markdown -> html)pygmentize
to convert text to HTML -text2html
jq
to process json streamsoh-my-stars
(my fork) to search github stars offlinevipe
, to quickly edit my clipboard in a vim bufferyt-dlp
to download video/audio from tons of places.yt-dlp
is ayoutube-dl
fork which downloads faster and has more featuresyadm
to manage my dotfiles- my
cat
is aliased tobat
, 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 terminalcodepsell
to correct common misspellings in code fileschafa
to print gifs in terminaldex
to open.desktop
filesdunk
, for nicer git diffs in the terminalfiglet
to print large lettersgron
when I can’t be bothered to usejq
jpegtran
to compress JPEG filesldm
, to do basic drive mounting for external drives/USBslinkcheck
to check for broken links on websiteslorem
to create a bunch of lorem-ipsumncdu
to preview disk space interactivelyoptipng
to compress PNG filespastel
to generate/pick color schemes/hex codes from the terminalpup
to parse HTML on the command lineqr
(qrencode
), to create QR images from command lineqrc
to create QR codes in the terminalreadability
; cli tool for Mozilla’s readability library, for parsing contents out of HTMLscreenkey
when recording demonstrations to display keysshellcheck
to check shell scripts for syntax errorsspeedtest-cli
to test internet bandwidthsqleton
to visualize sqlite databasestermdown
to countdown in the terminaltoilet
is another implementation of figlet, gives fancy colors in the terminalup
- to interactively explore/pipe text data. Especially useful when doing data wrangling, like when using tools likejq
/grep
/cut
to extract some information from a data sourcemoby
as a thesaurusix
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 taskssimplescreenrecorder
to do simple screen recordings; I use this to make demonstration gifssqlitebrowser
to explore sqlite databases