Tricking Out My Console

Over the past few months, I've gotten onto a bit of a console kick. Consoles have gotten surprisingly capable since I last really mucked with my workflow, and more of my workflow now actually seems to be possible within the scope of a terminal emulator. As always, this is a moving target, but here is a snapshot, as of Summer '25, of my efforts to trick out my console.

The Terminal

A lot of the more advanced features of some of these apps require more advanced terminal emulators. There's a wide range out there, but the two I've played with the most are KiTTY and GhosTTY. Some relevant features of each (for me):

I've been tending towards GhostTTY of late, largely, but not entirely for aesthetic reasons:

In spite of the occasional glitch (KiTTY has been bulletproof in my experience) this is still enough that I tend to reach for it first.

Bash

At some point, I should probably switch my shell to something cleaner, but I haven't been pushed into it yet. I'm starting to push up against bash's rough edges, but for now it's sufficient, and omnipresent... meaning I can get consistent behavior everywhere. That said, there are a few hacks:

Powerline-Rust

Based on the python powerline-shell, powerline provides a pretty, informative output on your shell prompt, like output status, git metadata, and a subset of the path.

batcat

Bat is a drop-in replacement for cat and less/more. It displays files with syntax highlighting, formatting, line numbers, and e.g., color-coding for CSV columns. It auto-detects when it's connected to a tty, so it can fall back to classic cat behavior the rest of the time.

fzf

Fuzzy find is a useful set of tricks for finding items in lists based on an interactive partial substring match. This is a building block used by other services, and I expect that I'll revisit it to do stuff like e.g., building a console frontend to Pop! shell launcher services, but for now my main uses are:

Zoxide

Zoxide builds on fzf to provide interactive path search. Notably, it maintains a history of directory paths that you've visited, and will use that to filter its search.

broot

I recently started playing with broot; It fills a niche similar to zoxide, but provides a more interactive file exploration mode. Notably, it can do things like preview files (including image files using KiTTY graphics).

btop

Top, but hecka pretty. 'nuff said.

lazygit

My attitude towards git is that I know the 2-3 commands that I care about, and I use a gui for the rest. This terminal-based git gui actually seems like it might punt me entirely into a gui.

difftastic

This is a diff engine based on tree-sitter. Super useful for diffing source code, since it can ignore whitespace.

jq

In principle, this is a general purpose query engine for json data... but 90% of my use of it is for pretty-printing json.

Ripdrag

In spite of me moving a lot of my workflow into the console, there are times when I need to interact with graphical apps. GhosTTY already has a number of features that make this process more friendly, like the ability to click URLs and embedded urls. However, some times the only way to transfer context into an app is via dragging (e.g., adding an attachment in Thunderbird). For these situations, there's ripdrag. Running the command pops up a window with every file passed on the command line, allowing them to be dragged into other apps.

Helix

I'm still a bit on the fence, but Helix seems to be a solid LSP-based editor. It has an interface scheme based on VI, which is taking a little getting used to... but at least I don't have to deal with lisp.