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): * Support for the KiTTY graphics protocol * Tiling * Linux support * Extended color * Support for embedded URLs.

I've been tending towards GhostTTY of late, largely, but not entirely for aesthetic reasons: * GhosTTY lets me remove the header bar * GhosTTY uses standard GTK widgets * GhosTTY fades out the non-selected tile, making it easier to spot. * GhosTTY handles drag & drop better than KiTTY; the latter pastes file:// URLs into the shell, while the former pastes standard paths.

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: * Aliasing wl-copy and wl-paste to pbcopy and pbpaste (I used to use a mac, sosumi). * Aliasing xdg-open &2>/dev/null to open. * Aliasing ls --color=auto --hyperlink=auto to ls (the latter parameter makes listed items clickable in GhosTTY)

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. * I have powerline installed as my default shell prompt.

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. * I aliased bat to cat, and have more/less retrained my muscle memory to reach for it instead of more/less.

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: * Overriding bash's normal ctrl-r reverse history search to be a bit more friendly. * Bound to ctrl-t in bash to search for file path completions.

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. * Bound to alt-c to find and jump to an arbitrary path in my home dir.

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). * Bound to alt-x to explore the current directory.

btop

Top, but hecka pretty. 'nuff said. * Aliased to top.

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. * Aliased to lgit

difftastic

This is a diff engine based on tree-sitter. Super useful for diffing source code, since it can ignore whitespace. * I have git configured to use this as a diff engine.

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.


This page last updated 2025-07-21 10:29:03 -0400