Skip to content

explore: fzf vs television — two fuzzy finder options#21

Open
alycda wants to merge 2 commits into
mainfrom
claude/explore-fzf-television-y2dXV
Open

explore: fzf vs television — two fuzzy finder options#21
alycda wants to merge 2 commits into
mainfrom
claude/explore-fzf-television-y2dXV

Conversation

@alycda

@alycda alycda commented Apr 17, 2026

Copy link
Copy Markdown
Owner

What's here

Two opt-in modules, neither wired into any profile yet. Import whichever (or both) you want to try.


Option A — fzf (home-manager/modules/tools/fzf.nix)

The battle-tested pick. Written in Go, been around since 2013. Home Manager has first-class support via programs.fzf.

What you get automatically once imported:

Keybind Action
Ctrl+R fuzzy shell history search
Ctrl+T fuzzy file picker (inserts path at cursor)
Alt+C fuzzy cd

The module is pre-configured to:

  • Use ripgrep as the file source (respects .gitignore, surfaces hidden files) — already in core packages
  • Preview files with bat (syntax highlighting, line numbers) — already in core packages
  • 50% height reverse-layout with rounded border

To activate: add to any profile's imports:

../modules/tools/fzf.nix

Option B — television (home-manager/modules/tools/television.nix)

The modern pick. Written in Rust, released 2024. Channel-based: instead of one stream of results, you pick a typed source.

Channels you get out of the box:

tv files          # file picker with preview
tv text           # ripgrep full-text search
tv git-log        # commit browser
tv git-refs       # branch/tag picker
tv git-diff       # staged/unstaged diffs
tv shell-history  # history (this module binds it to Ctrl+R)
tv env            # environment variables
tv alias          # shell aliases

The module adds a Ctrl+R binding that uses tv shell-history — remove that block if you're also using fzf.

To activate: add to any profile's imports:

../modules/tools/television.nix

Tradeoffs

fzf television
Maturity Very mature (2013) New (2024)
Shell integration Automatic (Ctrl+R/T, Alt+C) Manual / explicit tv [channel]
Mental model Single fuzzy stream Typed channels
Use in scripts Excellent (fzf as a pipe) Not designed for it
Preview UX Configurable Rich built-in per channel
nixpkgs support programs.fzf (full HM module) pkgs.television (package only)

My read: fzf is the safer default — it drops into existing shell habits immediately and pairs perfectly with bat+rg already in core. Television is worth trying if the channel model appeals; tv git-log and tv text are genuinely nicer than the fzf equivalents.

The two aren't mutually exclusive — you can run both and let fzf own Ctrl+T/Alt+C while television handles explicit channel browsing.

claude added 2 commits April 17, 2026 21:52
Neither is imported yet — this PR shows both side-by-side so we can
decide which (or both) to adopt. See PR description for tradeoffs.

- home-manager/modules/tools/fzf.nix: mature Go-based fuzzy finder;
  home-manager's programs.fzf wires Ctrl+R/T/Alt+C into zsh
  automatically; bat+rg preview uses packages already in core
- home-manager/modules/tools/television.nix: newer Rust-based finder
  with typed channels (files, text, git-log, shell-history, env…);
  invoked explicitly as `tv [channel]` rather than hijacking keybinds
statix flags { ... }: with no named bindings as an empty_pattern
anti-pattern. Since fzf.nix uses no module args, a plain attrset
module is cleaner and passes the lint.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants