diff --git a/Brewfile b/Brewfile index 5b5ff28..ac68cde 100644 --- a/Brewfile +++ b/Brewfile @@ -23,6 +23,7 @@ brew "rnr" brew "rustup" brew "sd" brew "television" +brew "uv" brew "vivid" brew "xh" brew "zoxide" diff --git a/dotbot-config.yaml b/dotbot-config.yaml index 0601d94..02ebe70 100644 --- a/dotbot-config.yaml +++ b/dotbot-config.yaml @@ -46,4 +46,5 @@ - shell: - fish -c 'fisher update' - bat cache --build - - tv update-channels + - tv update-channels --force + - for f in television/cable-overrides/*.toml; do ./television/merge-toml.py ~/.config/television/cable/"$(basename "$f")" "$f"; done diff --git a/television/cable-overrides/dirs.toml b/television/cable-overrides/dirs.toml new file mode 100644 index 0000000..aac5d69 --- /dev/null +++ b/television/cable-overrides/dirs.toml @@ -0,0 +1,7 @@ +# Override for tv dirs channel. +# +# Simon Olofsson +# + +[preview] +command = "eza --group-directories-first --all --icons=always --color=always --oneline '{}'" diff --git a/television/cable-overrides/files.toml b/television/cable-overrides/files.toml new file mode 100644 index 0000000..86567e2 --- /dev/null +++ b/television/cable-overrides/files.toml @@ -0,0 +1,14 @@ +# Override for tv files channel. +# +# Simon Olofsson +# + +[preview] +env = "__DELETE__" + +[keybindings] +ctrl-x = "actions:edit" +ctrl-b = "actions:goto_parent_dir" + +[actions.edit] +mode = "fork" diff --git a/television/cable-overrides/fish-history.toml b/television/cable-overrides/fish-history.toml new file mode 100644 index 0000000..49aea3b --- /dev/null +++ b/television/cable-overrides/fish-history.toml @@ -0,0 +1,9 @@ +# Override for tv fish-history channel. +# +# Simon Olofsson +# + +# Keep chronological order (newest first) when searching. +# TODO: Remove once tv releases with this as default. +[source] +sort_results = false diff --git a/television/cable-overrides/git-log.toml b/television/cable-overrides/git-log.toml new file mode 100644 index 0000000..c5b9816 --- /dev/null +++ b/television/cable-overrides/git-log.toml @@ -0,0 +1,12 @@ +# Override for tv git-log channel. +# +# Simon Olofsson +# + +# Keep chronological order (newest first) when searching. +# TODO: Remove once tv releases with this as default. +[source] +sort_results = false + +[preview] +command = "git show -p --stat --pretty=fuller '{strip_ansi|split: :1}' | delta --color-only" diff --git a/television/cable-overrides/text.toml b/television/cable-overrides/text.toml new file mode 100644 index 0000000..39d6a62 --- /dev/null +++ b/television/cable-overrides/text.toml @@ -0,0 +1,14 @@ +# Override for tv text channel. +# +# Simon Olofsson +# + +[preview] +env = "__DELETE__" + +[keybindings] +ctrl-x = "actions:edit" + +[actions.edit] +command = "vim '+{strip_ansi|split:\\::1}' '{strip_ansi|split:\\::0}'" +mode = "fork" diff --git a/television/merge-toml.py b/television/merge-toml.py new file mode 100755 index 0000000..24b8278 --- /dev/null +++ b/television/merge-toml.py @@ -0,0 +1,33 @@ +#!/usr/bin/env -S uv run +# /// script +# dependencies = ["tomli-w"] +# /// +# Merges override into base TOML file in-place. +# +# Usage: merge-toml.py base.toml override.toml + +import sys +import tomllib +import tomli_w +from pathlib import Path + + +def merge(base, override): + for k, v in override.items(): + if v == "__DELETE__": + base.pop(k, None) + elif k in base and isinstance(base[k], dict) and isinstance(v, dict) and v: + merge(base[k], v) + else: + base[k] = v + return base + + +if __name__ == "__main__": + base_path = Path(sys.argv[1]) + override_path = Path(sys.argv[2]) + + base = tomllib.loads(base_path.read_text()) + override = tomllib.loads(override_path.read_text()) + + base_path.write_text(tomli_w.dumps(merge(base, override)))