Skip to content
dots
Esc
↑↓navigate↵open⌘Jpreview
On this page

television

tv config symlinked from the repo, a transparent cyberdream theme, and the custom cables behind gho, pj, and ctrl-e in fish, zsh, and bash.

television (tv) is a fuzzy picker built on “cables”: TOML files that define a source command, a preview, and actions. Every shell picker in the repo runs on a tv cable, with the same keys in fish, zsh, and bash.

Source television/config.toml, television/cable/*.toml, television/themes/cyberdream-transparent.toml
Link dot_config/symlink_television.tmpl → ~/.config/television is a symlink to {{ .chezmoi.sourceDir }}/television
Target ~/.config/television/
Ignore .chezmoiignore.tmpl lists television, so it is not copied to ~/television
Install Not listed in .chezmoidata/packages.yaml; install separately

The whole directory is a symlink into the source tree, so edits apply without chezmoi apply. cable/ holds tv’s stock cables plus the repo’s own and overridden ones.

config.toml

The UI is minimal: no borders, a hidden status bar, and padding in place of frames.

Key Value
default_channel files
ui.theme cyberdream-transparent
ui.input_bar position top, prompt ❯, border_type = "none", padding left 1, right 1, bottom 1
ui.status_bar.hidden true (f12 toggles it)
ui.results_panel border_type = "none", padding left 1, right 1
ui.preview_panel size = 50, scrollbar = false, border_type = "none", padding left 2, right 1
ui.help_panel.hidden true

tv 0.15 has no config key for inline mode (--inline and --height are CLI-only), so every call site passes --inline: gho (tv ghq-repos --inline), pj (tv pj --inline …), ctrl-e (tv git-files --inline), and bash ctrl-t (tv --autocomplete-prompt … --inline). Actions that re-exec tv pass it too: files (tv files .. --inline), dirs (tv dirs .. --inline), and channels (tv {} --inline). tv --inline opens on the line below the prompt and leaves the cursor there on exit; the shell key bindings move the prompt back (fish, bash and zsh).

A channel that sets its own [ui.preview_panel] replaces the whole table with tv’s defaults (rounded border, scrollbar). The stock cables that override it (alias, cargo-commands, crontab, env, fonts, gh-issues, journal, man-pages, npm-scripts, opencode-sessions, ports, tea-issues, tea-prs, text, todo-comments) therefore repeat border_type = "none", scrollbar = false, and padding left 2, right 1.

Global keys added on top of the defaults:

Key Action
ctrl-e actions:edit: the channel’s edit action
ctrl-h actions:goto_parent_dir; the help panel loses ctrl-h
end go_to_input_end (unchanged)

Theme

themes/cyberdream-transparent.toml is a separate file because tv 0.15’s builtin cyberdream shadows a user theme of the same name and paints an opaque #16181a background. This theme omits background, so kitty’s translucent background shows through (tv 0.15 rejects background = 'none').

Key Color
border_fg #3c4048
text_fg, input_text_fg, result_value_fg #ffffff
dimmed_text_fg #7b8496
result_name_fg #5ea1ff
result_line_number_fg #f1ff5e
match_fg #5ef1ff
selection_fg / selection_bg #5eff6c on #3c4048
preview_title_fg #ffaecf
result_count_fg #ffbd5e
channel_mode_bg #5ef1ff on #16181a
remote_control_mode_bg #5eff6c on #16181a
action_picker_mode_bg #bd5eff on #16181a

Sorting

Every custom cable pipes its source through mtime-sort, which orders lines newest-first by the mtime of the path in the line’s last tab-separated field (--repo stats <path>/.git/index first). tv then ranks match quality and frecency on top of that order. All custom cables set shell = "bash", because $SHELL is fish.

Custom cables

Cable File Opened by
ghq-repos cable/ghq-repos.toml ctrl-o (gho)
git-files cable/git-files.toml ctrl-e
pj cable/pj.toml ctrl-p, down on an empty prompt (pj)
files cable/files.toml tv, ctrl-t autocomplete

The keys are bound in fish (fish_user_key_bindings.fish), zsh (keybinds.zsh), and bash (keybinds.bash). See fish and bash and zsh.

ghq-repos

Entries are name<TAB>path: tv shows and matches the name and prints the path. ctrl-s cycles between the two sources.

Source Entries Sort
Repos ghq list under ghq root, plus the chezmoi source (~/.local/share/chezmoi) listed as github.com/prdlk/dotfiles mtime-sort --repo
Vaults Every directory under ~/Documents/Obsidian (depth 3) that contains .obsidian, named relative to that directory mtime-sort

Preview. onefetch --no-art for git directories, otherwise eza --tree --level 2 (falling back to ls -la).

Key Action
enter Print the path. The gho function cds into it, clears, and runs onefetch in git repos
ctrl-e edit: cd <path> && nvim . on /dev/tty
ctrl-b browse: cd <path> && gop in fork mode, so tv stays open (gop)

Needs: ghq, fd, onefetch, mtime-sort.

git-files

Source Entries
Tracked git ls-files of the whole repo (from the toplevel), or fd -t f outside a repo
All fd -t f -H -E .git

Both are sorted with mtime-sort. The preview is bat -n with BAT_THEME=ansi. enter runs edit: nvim {} on /dev/tty.

Needs: git, fd, bat, mtime-sort.

pj

Source pj --list; tv shows the display column. The preview runs pj --preview in the global 50% panel, and enter runs pj --run. Running pj scans the project and opens this cable with its own records. See pj.

Needs: pj, mtime-sort.

files

Overrides tv’s stock files cable. Sources Default (fd -t f) and Hidden (fd -t f -H), both piped through mtime-sort. The edit action opens the selection in nvim on /dev/tty, so it also works from ctrl-t, where the shell captures tv’s stdout.

Needs: fd, bat, mtime-sort.

Was this page helpful?