This Tool Replaced 7 CLIs
(and killed my opensource)
This issue is brought to you by:
Depot: Build faster. Waste less time.
Accelerate your Docker image builds and GitHub Actions workflows. Easily integrate with your existing CI provider and dev workflows to save hours of build time.
|
|
I’ve been in the terminal for 12 years.
I don’t get surprised often.
Then I found Television, and I was wrong about it before I even opened it.
The friction of endless pipes |||
There’s a problem nobody talks about (or maybe it’s only in my head): terminal tools are great individually, but the moment you need to pick something, you end up writing a pipeline.
Now, sure, unix philosophy and all that, but, folks, I just wanna work.
Otherwise, you find yourself memorizing flags and options.
You’re piping to grep, filtering with awk, fzf wraps it all (pof course).
If you want it to preview results too - well, I bet my life 1/100 people can do that right now off the top of their head.
It’s just noisy, and adds friction, after a while, the friction adds up and you end up simply not using the features at all.
Everyone reaches for FZF (and they’re not wrong)
FZF is genuinely one of the best CLI tools ever written.
You won’t find me saying one bad word about it.
Most people with a serious terminal setup have it wired into their shell.
You know what, I’d say probably 1/10 software devs on the planet have it even if they don’t use it directly.
FZF is the backbone for so many terminal tools - including, my own Tmux session manager.
Ctrl-R for history, Ctrl-T for files, pipe anything into it and get a fuzzy picker back. It works. It’s fast. It’s everywhere. And if you squint hard enough, you can make it do almost anything with enough shell glue.
The problem is exactly that: the glue.
You end up maintaining a collection of shell functions, aliases, and wrapper scripts just to get consistent behavior.
Let me rephrase - not a problem, friction.
If you’re building a script - sure, a couple of minutes going through docs isn’t much. But what about the little things?
A quick K8s context switch?
Find files?
Pick an AWS profile?
Find an S3 bucket?
Change your terminal session?
You probably thought of many tools doing these, and for those you didn’t, you have a command that returns a list in mind.
Those commands?
I bet there’s no fuzzy finder there, and if you pipe to FZF, there’s no preview in your quick one liner.
One remote for every channel
Television flips this.
Instead of a dozen tools, you get one TUI with channels.
The metaphor is literal: channels are just toml files that define a source, a preview, and actions.
That’s it.
Don’t have what you’re looking for?
Building your own fuzzy picked list with it’s own preview and custom actions has never been this easy.
Install it:
brew install television
Run it with no arguments and you get a file picker.
Hit Ctrl-R inside tv and you get a channel switcher.
But the real unlock is one command:
tv update-channels
Run that and suddenly you have channels for AWS, Docker, Kubernetes, GitHub, npm, tmux, cron, fonts, downloads, SSH hosts.
Things you previously had dedicated tools for.
All in the same interface, same keybindings, same preview pane.
List what you have:
tv list-channels
You can even pipe that list back into tv itself:
tv list-channels | tv
For logs, instead of grep-ing through files or tailing with awk:
tail -f /var/log/system.log | tv
That’s genuinely one of the nicer log reading experiences I’ve had.
Building your own channel (5 Minutes)
As one would expect - the config lives at ~/.config/television/ and channels go in ~/.config/television/cable/. (don't ask me why the cable dirname I literally make the same mistake trying to `cd channels` every single time).
A channel file looks roughly like this - source defines where the data comes from, preview defines what shows on the right, and actions define what happens when you pick something.
Enter to execute.
The one that replaced kubectx for me: a k8s contexts channel.
Pick a cluster, preview the important data, switch context. One tool gone.
For files, the default behavior is a bit odd (it echoes the filename back to shell). Fix it by editing the files channel, find the edit action, map it to enter, point it at your editor.
Now tv is your file opener.
What’s still missing
It’s not perfect.
Key bindings are a mess - almost everything is mapped to ctrl, there are F-keys nobody knows where to find, and there’s no leader key concept.
If you use tmux for example, half the ctrl combos are already taken.
The help menu took me longer to open than it should have.
Nushell compatibility is rough around the edges.
Some channels produce broken output in nu because they assume bash-style one-liners.
Fixable, but you’ll be doing that fixing yourself for now.
And if you want to add an execute action from the CLI without defining a full channel, you currently can’t.
That’s the one place where fzf still wins on raw hackability.
Worth it?
Yes.
Not because it replaces fzf - it doesn’t, not entirely.
But because it gives you a consistent home for all the little pickers you’ve been cobbling together for years.
One config, one interface, one remote.
Channels are just toml files.
Go build something :)
I hope this was valuable! Thank you for reading.
Feel free to reply directly with any question or feedback.
Have a great weekend!
Whenever you’re ready, here’s how I can help you:
|
|