mirror of
https://github.com/sebaschi/dotfiles.git
synced 2026-06-30 18:40:36 +02:00
Compare commits
5 Commits
ab2439644a
...
clevo-sl
| Author | SHA1 | Date | |
|---|---|---|---|
| a81c6fccf1 | |||
| 31ff93e96c | |||
| 231217472f | |||
| 7986022558 | |||
| 638a6503f1 |
+46
-1
@@ -137,7 +137,8 @@ eval "$(starship init bash)"
|
||||
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
|
||||
|
||||
# Pagers
|
||||
#export PAGER="$(which moar)"
|
||||
export PAGER="less"
|
||||
export LESS="-FIRX"
|
||||
# export MANPAGER="$PAGER"
|
||||
|
||||
# Github CLI aliases
|
||||
@@ -159,3 +160,47 @@ source /home/seb/.config/broot/launcher/bash/br
|
||||
[ -f "/home/seb/.ghcup/env" ] && . "/home/seb/.ghcup/env" # ghcup-env
|
||||
|
||||
alias nodeman='ssh hwsec nodeman'
|
||||
|
||||
# >>> conda initialize >>>
|
||||
# !! Contents within this block are managed by 'conda init' !!
|
||||
__conda_setup="$('/home/seb/miniforge3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
|
||||
if [ $? -eq 0 ]; then
|
||||
eval "$__conda_setup"
|
||||
else
|
||||
if [ -f "/home/seb/miniforge3/etc/profile.d/conda.sh" ]; then
|
||||
. "/home/seb/miniforge3/etc/profile.d/conda.sh"
|
||||
else
|
||||
export PATH="/home/seb/miniforge3/bin:$PATH"
|
||||
fi
|
||||
fi
|
||||
unset __conda_setup
|
||||
# <<< conda initialize <<<
|
||||
|
||||
|
||||
# >>> mamba initialize >>>
|
||||
# !! Contents within this block are managed by 'mamba shell init' !!
|
||||
export MAMBA_EXE='/home/seb/miniforge3/bin/mamba';
|
||||
export MAMBA_ROOT_PREFIX='/home/seb/miniforge3';
|
||||
__mamba_setup="$("$MAMBA_EXE" shell hook --shell bash --root-prefix "$MAMBA_ROOT_PREFIX" 2> /dev/null)"
|
||||
if [ $? -eq 0 ]; then
|
||||
eval "$__mamba_setup"
|
||||
else
|
||||
alias mamba="$MAMBA_EXE" # Fallback on help from mamba activate
|
||||
fi
|
||||
unset __mamba_setup
|
||||
# <<< mamba initialize <<<
|
||||
|
||||
# >>> juliaup initialize >>>
|
||||
|
||||
# !! Contents within this block are managed by juliaup !!
|
||||
|
||||
case ":$PATH:" in
|
||||
*:/home/seb/.juliaup/bin:*)
|
||||
;;
|
||||
|
||||
*)
|
||||
export PATH=/home/seb/.juliaup/bin${PATH:+:${PATH}}
|
||||
;;
|
||||
esac
|
||||
|
||||
# <<< juliaup initialize <<<
|
||||
|
||||
@@ -1,2 +1,8 @@
|
||||
export PATH="$HOME/scripts:$PATH"
|
||||
export PATH="$HOME/.config/emacs/bin:$PATH"
|
||||
export PAGER="less"
|
||||
export LESS="-FIRX"
|
||||
|
||||
# Proton Pass cli settings
|
||||
export PROTON_PASS_KEY_PROVIDER=keyring
|
||||
export PROTON_PASS_LINUX_KEYRING=dbus
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; Place your private configuration here! Remember, you do not need to run 'doom
|
||||
;; sync' after modifying this file!
|
||||
|
||||
|
||||
;; Some functionality uses this to identify you, e.g. GPG configuration, email
|
||||
;; clients, file templates and snippets. It is optional.
|
||||
;; (setq user-full-name "John Doe"
|
||||
;; user-mail-address "john@doe.com")
|
||||
|
||||
;; Doom exposes five (optional) variables for controlling fonts in Doom:
|
||||
;;
|
||||
;; - `doom-font' -- the primary font to use
|
||||
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
|
||||
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
|
||||
;; presentations or streaming.
|
||||
;; - `doom-symbol-font' -- for symbols
|
||||
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
|
||||
;;
|
||||
;; See 'C-h v doom-font' for documentation and more examples of what they
|
||||
;; accept. For example:
|
||||
;;
|
||||
;;(setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light)
|
||||
;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13))
|
||||
;;
|
||||
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
|
||||
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
|
||||
;; refresh your font settings. If Emacs still can't find your font, it likely
|
||||
;; wasn't installed correctly. Font issues are rarely Doom issues!
|
||||
|
||||
;; There are two ways to load a theme. Both assume the theme is installed and
|
||||
;; available. You can either set `doom-theme' or manually load a theme with the
|
||||
;; `load-theme' function. This is the default:
|
||||
(setq doom-theme 'doom-one)
|
||||
|
||||
;; This determines the style of line numbers in effect. If set to `nil', line
|
||||
;; numbers are disabled. For relative line numbers, set this to `relative'.
|
||||
(setq display-line-numbers-type t)
|
||||
|
||||
;; If you use `org' and don't want your org files in the default location below,
|
||||
;; change `org-directory'. It must be set before org loads!
|
||||
(setq org-directory "~/org/")
|
||||
|
||||
|
||||
;; Whenever you reconfigure a package, make sure to wrap your config in an
|
||||
;; `with-eval-after-load' block, otherwise Doom's defaults may override your
|
||||
;; settings. E.g.
|
||||
;;
|
||||
;; (with-eval-after-load 'PACKAGE
|
||||
;; (setq x y))
|
||||
;;
|
||||
;; The exceptions to this rule:
|
||||
;;
|
||||
;; - Setting file/directory variables (like `org-directory')
|
||||
;; - Setting variables which explicitly tell you to set them before their
|
||||
;; package is loaded (see 'C-h v VARIABLE' to look them up).
|
||||
;; - Setting doom variables (which start with 'doom-' or '+').
|
||||
;;
|
||||
;; Here are some additional functions/macros that will help you configure Doom.
|
||||
;;
|
||||
;; - `load!' for loading external *.el files relative to this one
|
||||
;; - `add-load-path!' for adding directories to the `load-path', relative to
|
||||
;; this file. Emacs searches the `load-path' when you load packages with
|
||||
;; `require' or `use-package'.
|
||||
;; - `map!' for binding new keys
|
||||
;;
|
||||
;; To get information about any of these functions/macros, move the cursor over
|
||||
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
|
||||
;; This will open documentation for it, including demos of how they are used.
|
||||
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
|
||||
;; etc).
|
||||
;;
|
||||
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
|
||||
;; they are implemented.
|
||||
@@ -0,0 +1,198 @@
|
||||
;;;init.el -*- lexical-binding: t; -*-
|
||||
;;
|
||||
;; This file controls what Doom modules are enabled and what order they load
|
||||
;; in. Remember to run 'doom sync' after modifying it!
|
||||
;;
|
||||
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
|
||||
;; documentation. There you'll find a link to Doom's Module Index where all
|
||||
;; of our modules are listed, including what flags they support.
|
||||
;;
|
||||
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
|
||||
;; 'C-c c k' for non-vim users) to view its documentation. This works on
|
||||
;; flags as well (those symbols that start with a plus).
|
||||
;;
|
||||
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
|
||||
;; directory (for easy access to its source code).
|
||||
;;
|
||||
(doom! :input
|
||||
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
|
||||
;;chinese
|
||||
;;japanese
|
||||
;;layout ; auie,ctsrnm is the superior home row
|
||||
|
||||
:completion
|
||||
;;company ; the ultimate code completion backend
|
||||
(corfu +orderless) ; complete with cap(f), cape and a flying feather!
|
||||
;;helm ; the *other* search engine for love and life
|
||||
;;ido ; the other *other* search engine...
|
||||
;;ivy ; a search engine for love and life
|
||||
vertico ; the search engine of the future
|
||||
|
||||
:ui
|
||||
;;deft ; notational velocity for Emacs
|
||||
doom ; what makes DOOM look the way it does
|
||||
doom-dashboard ; a nifty splash screen for Emacs
|
||||
;;doom-quit ; DOOM quit-message prompts when you quit Emacs
|
||||
;;(emoji +unicode) ; 🙂
|
||||
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
|
||||
;;indent-guides ; highlighted indent columns
|
||||
;;ligatures ; ligatures and symbols to make your code pretty again
|
||||
;;minimap ; show a map of the code on the side
|
||||
modeline ; snazzy, Atom-inspired modeline, plus API
|
||||
;;nav-flash ; blink cursor line after big motions
|
||||
;;neotree ; a project drawer, like NERDTree for vim
|
||||
ophints ; highlight the region an operation acts on
|
||||
(popup +defaults) ; tame sudden yet inevitable temporary windows
|
||||
;;smooth-scroll ; So smooth you won't believe it's not butter
|
||||
;;tabs ; a tab bar for Emacs
|
||||
;;treemacs ; a project drawer, like neotree but cooler
|
||||
;;unicode ; extended unicode support for various languages
|
||||
(vc-gutter +pretty) ; vcs diff in the fringe
|
||||
;; vi-tilde-fringe ; fringe tildes to mark beyond EOB
|
||||
;;window-select ; visually switch windows
|
||||
workspaces ; tab emulation, persistence & separate workspaces
|
||||
;;zen ; distraction-free coding or writing
|
||||
|
||||
:editor
|
||||
(evil +everywhere); come to the dark side, we have cookies
|
||||
;; file-templates ; auto-snippets for empty files
|
||||
fold ; (nigh) universal code folding
|
||||
;;(format +onsave) ; automated prettiness
|
||||
;;god ; run Emacs commands without modifier keys
|
||||
;;lispy ; vim for lisp, for people who don't like vim
|
||||
;;multiple-cursors ; editing in many places at once
|
||||
;;objed ; text object editing for the innocent
|
||||
;;parinfer ; turn lisp into python, sort of
|
||||
;;rotate-text ; cycle region at point between text candidates
|
||||
snippets ; my elves. They type so I don't have to
|
||||
(whitespace +guess +trim) ; a butler for your whitespace
|
||||
;;word-wrap ; soft wrapping with language-aware indent
|
||||
|
||||
:emacs
|
||||
dired ; making dired pretty [functional]
|
||||
electric ; smarter, keyword-based electric-indent
|
||||
;;eww ; the internet is gross
|
||||
;;ibuffer ; interactive buffer management
|
||||
tramp ; remote files at your arthritic fingertips
|
||||
undo ; persistent, smarter undo for your inevitable mistakes
|
||||
vc ; version-control and Emacs, sitting in a tree
|
||||
|
||||
:term
|
||||
;;eshell ; the elisp shell that works everywhere
|
||||
;;shell ; simple shell REPL for Emacs
|
||||
;;term ; basic terminal emulator for Emacs
|
||||
;;vterm ; the best terminal emulation in Emacs
|
||||
|
||||
:checkers
|
||||
syntax ; tasing you for every semicolon you forget
|
||||
;;(spell +flyspell) ; tasing you for misspelling mispelling
|
||||
;;grammar ; tasing grammar mistake every you make
|
||||
|
||||
:tools
|
||||
;;ansible
|
||||
;;biblio ; Writes a PhD for you (citation needed)
|
||||
;;collab ; buffers with friends
|
||||
;;debugger ; FIXME stepping through code, to help you add bugs
|
||||
;;direnv
|
||||
;;docker
|
||||
;;editorconfig ; let someone else argue about tabs vs spaces
|
||||
;;ein ; tame Jupyter notebooks with emacs
|
||||
(eval +overlay) ; run code, run (also, repls)
|
||||
lookup ; navigate your code and its documentation
|
||||
;;llm ; when I said you needed friends, I didn't mean...
|
||||
(lsp +eglot) ; M-x vscode
|
||||
magit ; a git porcelain for Emacs
|
||||
;;make ; run make tasks from Emacs
|
||||
;;pass ; password manager for nerds
|
||||
;;pdf ; pdf enhancements
|
||||
;;terraform ; infrastructure as code
|
||||
;;tmux ; an API for interacting with tmux
|
||||
tree-sitter ; syntax and parsing, sitting in a tree...
|
||||
;;upload ; map local to remote projects via ssh/ftp
|
||||
|
||||
:os
|
||||
(:if (featurep :system 'macos) macos) ; improve compatibility with macOS
|
||||
;;tty ; improve the terminal Emacs experience
|
||||
|
||||
:lang
|
||||
;;ada ; In strong typing we (blindly) trust
|
||||
;;agda ; types of types of types of types...
|
||||
;;beancount ; mind the GAAP
|
||||
(cc +lsp) ; C > C++ == 1
|
||||
;;clojure ; java with a lisp
|
||||
;;common-lisp ; if you've seen one lisp, you've seen them all
|
||||
;;coq ; proofs-as-programs
|
||||
;;crystal ; ruby at the speed of c
|
||||
;;csharp ; unity, .NET, and mono shenanigans
|
||||
data ; config/data formats
|
||||
;;(dart +flutter) ; paint ui and not much else
|
||||
;;dhall
|
||||
;;elixir ; erlang done right
|
||||
;;elm ; care for a cup of TEA?
|
||||
emacs-lisp ; drown in parentheses
|
||||
;;erlang ; an elegant language for a more civilized age
|
||||
;;ess ; emacs speaks statistics
|
||||
;;factor
|
||||
;;faust ; dsp, but you get to keep your soul
|
||||
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
|
||||
;;fsharp ; ML stands for Microsoft's Language
|
||||
;;fstar ; (dependent) types and (monadic) effects and Z3
|
||||
;;gdscript ; the language you waited for
|
||||
(go +lsp) ; the hipster dialect
|
||||
;;(graphql +lsp) ; Give queries a REST
|
||||
;;(haskell +lsp) ; a language that's lazier than I am
|
||||
;;hy ; readability of scheme w/ speed of python
|
||||
;;idris ; a language you can depend on
|
||||
;;json ; At least it ain't XML
|
||||
;;janet ; Fun fact: Janet is me!
|
||||
(java +lsp) ; the poster child for carpal tunnel syndrome
|
||||
;;javascript ; all(hope(abandon(ye(who(enter(here))))))
|
||||
;;julia ; a better, faster MATLAB
|
||||
;;kotlin ; a better, slicker Java(Script)
|
||||
;;latex ; writing papers in Emacs has never been so fun
|
||||
;;lean ; for folks with too much to prove
|
||||
;;ledger ; be audit you can be
|
||||
;;lua ; one-based indices? one-based indices
|
||||
markdown ; writing docs for people to ignore
|
||||
;;nim ; python + lisp at the speed of c
|
||||
;;nix ; I hereby declare "nix geht mehr!"
|
||||
;;ocaml ; an objective camel
|
||||
org ; organize your plain life in plain text
|
||||
;;php ; perl's insecure younger brother
|
||||
;;plantuml ; diagrams for confusing people more
|
||||
;;graphviz ; diagrams for confusing yourself even more
|
||||
;;purescript ; javascript, but functional
|
||||
python ; beautiful is better than ugly
|
||||
;;qt ; the 'cutest' gui framework ever
|
||||
;;racket ; a DSL for DSLs
|
||||
;;raku ; the artist formerly known as perl6
|
||||
;;rest ; Emacs as a REST client
|
||||
;;rst ; ReST in peace
|
||||
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
|
||||
(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
|
||||
;;scala ; java, but good
|
||||
;;(scheme +guile) ; a fully conniving family of lisps
|
||||
sh ; she sells {ba,z,fi}sh shells on the C xor
|
||||
;;sml
|
||||
;;solidity ; do you need a blockchain? No.
|
||||
;;swift ; who asked for emoji variables?
|
||||
;;terra ; Earth and Moon in alignment for performance.
|
||||
;;web ; the tubes
|
||||
;;yaml ; JSON, but readable
|
||||
;;zig ; C, but simpler
|
||||
|
||||
:email
|
||||
;;(mu4e +org +gmail)
|
||||
;;notmuch
|
||||
;;(wanderlust +gmail)
|
||||
|
||||
:app
|
||||
;;calendar
|
||||
;;emms
|
||||
;;everywhere ; *leave* Emacs!? You must be joking
|
||||
;;irc ; how neckbeards socialize
|
||||
;;(rss +org) ; emacs as an RSS reader
|
||||
|
||||
:config
|
||||
;;literate
|
||||
(default +bindings +smartparens))
|
||||
@@ -0,0 +1,54 @@
|
||||
;; -*- no-byte-compile: t; -*-
|
||||
;;; $DOOMDIR/packages.el
|
||||
|
||||
;; To install a package:
|
||||
;;
|
||||
;; 1. Declare them here in a `package!' statement,
|
||||
;; 2. Run 'doom sync' in the shell,
|
||||
;; 3. Restart Emacs.
|
||||
;;
|
||||
;; Use 'C-h f package\!' to look up documentation for the `package!' macro.
|
||||
|
||||
|
||||
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
|
||||
;; (package! some-package)
|
||||
|
||||
;; To install a package directly from a remote git repo, you must specify a
|
||||
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
|
||||
;; https://github.com/radian-software/straight.el#the-recipe-format
|
||||
;; (package! another-package
|
||||
;; :recipe (:host github :repo "username/repo"))
|
||||
|
||||
;; If the package you are trying to install does not contain a PACKAGENAME.el
|
||||
;; file, or is located in a subdirectory of the repo, you'll need to specify
|
||||
;; `:files' in the `:recipe':
|
||||
;; (package! this-package
|
||||
;; :recipe (:host github :repo "username/repo"
|
||||
;; :files ("some-file.el" "src/lisp/*.el")))
|
||||
|
||||
;; If you'd like to disable a package included with Doom, you can do so here
|
||||
;; with the `:disable' property:
|
||||
;; (package! builtin-package :disable t)
|
||||
|
||||
;; You can override the recipe of a built in package without having to specify
|
||||
;; all the properties for `:recipe'. These will inherit the rest of its recipe
|
||||
;; from Doom or MELPA/ELPA/Emacsmirror:
|
||||
;; (package! builtin-package :recipe (:nonrecursive t))
|
||||
;; (package! builtin-package-2 :recipe (:repo "myfork/package"))
|
||||
|
||||
;; Specify a `:branch' to install a package from a particular branch or tag.
|
||||
;; This is required for some packages whose default branch isn't 'master' (which
|
||||
;; our package manager can't deal with; see radian-software/straight.el#279)
|
||||
;; (package! builtin-package :recipe (:branch "develop"))
|
||||
|
||||
;; Use `:pin' to specify a particular commit to install.
|
||||
;; (package! builtin-package :pin "1a2b3c4d5e")
|
||||
|
||||
|
||||
;; Doom's packages are pinned to a specific commit and updated from release to
|
||||
;; release. The `unpin!' macro allows you to unpin single packages...
|
||||
;; (unpin! pinned-package)
|
||||
;; ...or multiple packages
|
||||
;; (unpin! pinned-package another-pinned-package)
|
||||
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
|
||||
;; (unpin! t)
|
||||
@@ -3,3 +3,9 @@ theme = "yellowed"
|
||||
[editor.cursor-shape]
|
||||
insert = "bar"
|
||||
|
||||
[editor.soft-wrap]
|
||||
enable = true
|
||||
|
||||
[editor.lsp]
|
||||
auto-signature-help = false
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
[metadata]
|
||||
name = "alias"
|
||||
description = "A channel to select from shell aliases"
|
||||
|
||||
[source]
|
||||
# you may need to adjust the command depending on your shell
|
||||
command = "$SHELL -ic 'alias'"
|
||||
output = "{split:=:0}"
|
||||
|
||||
[preview]
|
||||
command = "$SHELL -ic 'alias' | grep -E '^(alias )?{split:=:0}='"
|
||||
|
||||
[ui.preview_panel]
|
||||
size = 30
|
||||
@@ -0,0 +1,10 @@
|
||||
# UNTESTED
|
||||
[metadata]
|
||||
name = "bash-history"
|
||||
description = "A channel to select from your bash history"
|
||||
requirements = ["bash"]
|
||||
|
||||
[source]
|
||||
command = "sed '1!G;h;$!d' ${HISTFILE:-${HOME}/.bash_history}"
|
||||
no_sort = true
|
||||
frecency = false
|
||||
@@ -0,0 +1,30 @@
|
||||
[metadata]
|
||||
name = "brew-packages"
|
||||
description = "List and manage Homebrew packages"
|
||||
requirements = ["brew"]
|
||||
|
||||
[source]
|
||||
command = [
|
||||
"brew list --formula",
|
||||
"brew list --cask",
|
||||
]
|
||||
|
||||
[preview]
|
||||
command = "brew info '{}'"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
|
||||
[keybindings]
|
||||
ctrl-u = "actions:upgrade"
|
||||
ctrl-d = "actions:uninstall"
|
||||
|
||||
[actions.upgrade]
|
||||
description = "Upgrade the selected package"
|
||||
command = "brew upgrade '{}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.uninstall]
|
||||
description = "Uninstall the selected package"
|
||||
command = "brew uninstall '{}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,22 @@
|
||||
[metadata]
|
||||
name = "cargo-commands"
|
||||
description = "List available cargo commands and extensions"
|
||||
requirements = ["cargo"]
|
||||
|
||||
[source]
|
||||
command = "cargo --list 2>/dev/null | tail -n +2 | awk '{print $1}'"
|
||||
|
||||
[preview]
|
||||
command = "cargo {} --help 2>/dev/null | head -50"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
preview_panel = { size = 60 }
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:run"
|
||||
|
||||
[actions.run]
|
||||
description = "Run the selected cargo command"
|
||||
command = "cargo '{}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,18 @@
|
||||
[metadata]
|
||||
name = "channels"
|
||||
description = "Select a television channel"
|
||||
requirements = ["tv", "bat"]
|
||||
|
||||
[source]
|
||||
command = ["tv list-channels"]
|
||||
|
||||
[preview]
|
||||
command = "bat -pn --color always ${XDG_CONFIG_HOME:-$HOME/.config}/television/cable/**/{}.toml"
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:channel-enter"
|
||||
|
||||
[actions.channel-enter]
|
||||
description = "Enter a television channel"
|
||||
command = "tv {}"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,13 @@
|
||||
[metadata]
|
||||
name = "dirs"
|
||||
description = "A channel to select from directories"
|
||||
requirements = ["fd"]
|
||||
|
||||
[source]
|
||||
command = ["fd -t d", "fd -t d --hidden"]
|
||||
|
||||
[preview]
|
||||
command = "ls -la --color=always '{}'"
|
||||
|
||||
[keybindings]
|
||||
shortcut = "f2"
|
||||
@@ -0,0 +1,42 @@
|
||||
[metadata]
|
||||
name = "distrobox-list"
|
||||
description = "A channel to select a container from distrobox"
|
||||
requirements = ["distrobox", "bat"]
|
||||
|
||||
[source]
|
||||
command = ["distrobox list | awk -F '|' '{ gsub(/ /, \"\", $2); print $2}' | tail --lines=+2"]
|
||||
|
||||
[preview]
|
||||
command = "(distrobox list | column -t -s '|' | awk -v selected_name={} 'NR==1 || $0 ~ selected_name') && echo && distrobox enter -d {} | bat --plain --color=always -lbash"
|
||||
|
||||
[keybindings]
|
||||
ctrl-e = "actions:distrobox-enter"
|
||||
ctrl-l = "actions:distrobox-list"
|
||||
ctrl-r = "actions:distrobox-rm"
|
||||
ctrl-s = "actions:distrobox-stop"
|
||||
ctrl-u = "actions:distrobox-upgrade"
|
||||
|
||||
[actions.distrobox-enter]
|
||||
description = "Enter a distrobox"
|
||||
command = "distrobox enter {}"
|
||||
mode = "execute"
|
||||
|
||||
[actions.distrobox-list]
|
||||
description = "List a distrobox"
|
||||
command = "distrobox list | column -t -s '|' | awk -v selected_name={} 'NR==1 || $0 ~ selected_name'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.distrobox-rm]
|
||||
description = "Remove a distrobox"
|
||||
command = "distrobox rm {}"
|
||||
mode = "execute"
|
||||
|
||||
[actions.distrobox-stop]
|
||||
description = "Stop a distrobox"
|
||||
command = "distrobox stop {}"
|
||||
mode = "execute"
|
||||
|
||||
[actions.distrobox-upgrade]
|
||||
description = "Upgrade a distrobox"
|
||||
command = "distrobox upgrade {}"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,56 @@
|
||||
[metadata]
|
||||
name = "docker-containers"
|
||||
description = "List and manage Docker containers"
|
||||
requirements = ["docker"]
|
||||
|
||||
[source]
|
||||
command = [
|
||||
"docker ps --format '{{.Names}}\\t{{.Image}}\\t{{.Status}}'",
|
||||
"docker ps -a --format '{{.Names}}\\t{{.Image}}\\t{{.Status}}'",
|
||||
]
|
||||
display = "{split:\\t:0} ({split:\\t:2})"
|
||||
output = "{split:\\t:0}"
|
||||
|
||||
[preview]
|
||||
command = "docker inspect '{split:\\t:0}' | jq -C '.[0] | {Name, State, Config: {Image: .Config.Image, Cmd: .Config.Cmd}, NetworkSettings: {IPAddress: .NetworkSettings.IPAddress}}'"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
|
||||
[keybindings]
|
||||
ctrl-s = "actions:start"
|
||||
f2 = "actions:stop"
|
||||
ctrl-r = "actions:restart"
|
||||
ctrl-l = "actions:logs"
|
||||
ctrl-e = "actions:exec"
|
||||
ctrl-d = "actions:remove"
|
||||
|
||||
[actions.start]
|
||||
description = "Start the selected container"
|
||||
command = "docker start '{split:\\t:0}'"
|
||||
mode = "fork"
|
||||
|
||||
[actions.stop]
|
||||
description = "Stop the selected container"
|
||||
command = "docker stop '{split:\\t:0}'"
|
||||
mode = "fork"
|
||||
|
||||
[actions.restart]
|
||||
description = "Restart the selected container"
|
||||
command = "docker restart '{split:\\t:0}'"
|
||||
mode = "fork"
|
||||
|
||||
[actions.logs]
|
||||
description = "Follow logs of the selected container"
|
||||
command = "docker logs -f '{split:\\t:0}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.exec]
|
||||
description = "Execute shell in the selected container"
|
||||
command = "docker exec -it '{split:\\t:0}' /bin/sh"
|
||||
mode = "execute"
|
||||
|
||||
[actions.remove]
|
||||
description = "Remove the selected container"
|
||||
command = "docker rm '{split:\\t:0}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,34 @@
|
||||
[metadata]
|
||||
name = "docker-images"
|
||||
description = "A channel to select from Docker images"
|
||||
requirements = ["docker", "jq"]
|
||||
|
||||
[source]
|
||||
command = "docker images --format '{{.Repository}}:{{.Tag}} {{.ID}}'"
|
||||
output = "{split: :-1}"
|
||||
|
||||
[preview]
|
||||
command = "docker image inspect '{split: :-1}' | jq -C"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
|
||||
[keybindings]
|
||||
ctrl-r = "actions:run"
|
||||
ctrl-d = "actions:remove"
|
||||
ctrl-s = "actions:shell"
|
||||
|
||||
[actions.run]
|
||||
description = "Run a container from the selected image"
|
||||
command = "docker run -it '{split: :-1}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.shell]
|
||||
description = "Run a shell in the selected image"
|
||||
command = "docker run -it '{split: :-1}' /bin/sh"
|
||||
mode = "execute"
|
||||
|
||||
[actions.remove]
|
||||
description = "Remove the selected image"
|
||||
command = "docker rmi '{split: :-1}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,18 @@
|
||||
[metadata]
|
||||
name = "dotfiles"
|
||||
description = "A channel to select from your user's dotfiles"
|
||||
requirements = ["fd", "bat"]
|
||||
|
||||
[source]
|
||||
command = "fd -t f . $HOME/.config"
|
||||
|
||||
[preview]
|
||||
command = "bat -n --color=always '{}'"
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:edit"
|
||||
|
||||
[actions.edit]
|
||||
description = "Edit the selected dotfile"
|
||||
command = "${EDITOR:-vim} '{}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,31 @@
|
||||
[metadata]
|
||||
name = "downloads"
|
||||
description = "Browse recent files in Downloads folder"
|
||||
requirements = ["fd", "bat"]
|
||||
|
||||
[source]
|
||||
command = "fd -t f . ~/Downloads --changed-within 30d 2>/dev/null | head -200"
|
||||
|
||||
[preview]
|
||||
command = "bat -n --color=always '{}' 2>/dev/null || file '{}'"
|
||||
env = { BAT_THEME = "ansi" }
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:open"
|
||||
ctrl-d = "actions:delete"
|
||||
ctrl-m = "actions:move"
|
||||
|
||||
[actions.open]
|
||||
description = "Open the selected file with default application"
|
||||
command = "xdg-open '{}' 2>/dev/null || open '{}'"
|
||||
mode = "fork"
|
||||
|
||||
[actions.delete]
|
||||
description = "Delete the selected file"
|
||||
command = "rm -i '{}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.move]
|
||||
description = "Move the selected file to current directory"
|
||||
command = "mv '{}' ."
|
||||
mode = "fork"
|
||||
@@ -0,0 +1,17 @@
|
||||
[metadata]
|
||||
name = "env"
|
||||
description = "A channel to select from environment variables"
|
||||
|
||||
[source]
|
||||
command = "printenv"
|
||||
output = "{split:=:1..}" # output the value
|
||||
|
||||
[preview]
|
||||
command = "echo '{split:=:1..}'"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
preview_panel = { size = 20, header = "{split:=:0}" }
|
||||
|
||||
[keybindings]
|
||||
shortcut = "f3"
|
||||
@@ -0,0 +1,27 @@
|
||||
[metadata]
|
||||
name = "files"
|
||||
description = "A channel to select files and directories"
|
||||
requirements = ["fd", "bat"]
|
||||
|
||||
[source]
|
||||
command = ["fd -t f", "fd -t f -H"]
|
||||
|
||||
[preview]
|
||||
command = "bat -n --color=always '{}'"
|
||||
env = { BAT_THEME = "ansi" }
|
||||
|
||||
[keybindings]
|
||||
shortcut = "f1"
|
||||
f12 = "actions:edit"
|
||||
ctrl-up = "actions:goto_parent_dir"
|
||||
|
||||
[actions.edit]
|
||||
description = "Opens the selected entries with the default editor (falls back to vim)"
|
||||
command = "${EDITOR:-vim} '{}'"
|
||||
# use `mode = "fork"` if you want to return to tv afterwards
|
||||
mode = "execute"
|
||||
|
||||
[actions.goto_parent_dir]
|
||||
description = "Re-opens tv in the parent directory"
|
||||
command = "tv files .."
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,32 @@
|
||||
[metadata]
|
||||
name = "gh-issues"
|
||||
description = "List GitHub issues for the current repo"
|
||||
requirements = ["gh", "jq"]
|
||||
|
||||
[source]
|
||||
command = '''gh issue list --state open --limit 100 --json number,title,createdAt,author,labels | jq -r 'sort_by(.createdAt) | reverse | .[] | " \u001b[32m#\(.number)\u001b[39m \(.title) \u001b[33m@\(.author.login)\u001b[39m" + (if (.labels | length) > 0 then " " + ([.labels[] | "\u001b[35m" + .name + "\u001b[39m"] | join(" ")) else "" end)'
|
||||
'''
|
||||
ansi = true
|
||||
output = "{strip_ansi|split:#:1|split: :0}"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
preview_panel = { header = '{strip_ansi|split:#:1|split: :0}' }
|
||||
|
||||
[preview]
|
||||
command = '''gh issue view '{strip_ansi|split:#:1|split: :0}' --json number,title,body,state,author,createdAt,updatedAt,labels,assignees | jq -r '
|
||||
" " + .title,
|
||||
" #" + (.number | tostring),
|
||||
"",
|
||||
" \u001b[36mStatus:\u001b[39m \u001b[32m" + .state + "\u001b[39m",
|
||||
" \u001b[36mAuthor:\u001b[39m \u001b[33m" + .author.login + "\u001b[39m",
|
||||
" \u001b[36mCreated:\u001b[39m " + (.createdAt | fromdateiso8601 | (now - .) | if . < 3600 then (./60|floor|tostring) + " minutes ago" elif . < 86400 then (./3600|floor|tostring) + " hours ago" else (./86400|floor|tostring) + " days ago" end),
|
||||
" \u001b[36mUpdated:\u001b[39m " + (.updatedAt | fromdateiso8601 | (now - .) | if . < 3600 then (./60|floor|tostring) + " minutes ago" elif . < 86400 then (./3600|floor|tostring) + " hours ago" else (./86400|floor|tostring) + " days ago" end),
|
||||
(if (.labels | length) > 0 then " \u001b[36mLabels:\u001b[39m " + ([.labels[] | "\u001b[35m" + .name + "\u001b[39m"] | join(" ")) else "" end),
|
||||
(if (.assignees | length) > 0 then " \u001b[36mAssignees:\u001b[39m " + ([.assignees[].login] | join(", ")) else "" end),
|
||||
"",
|
||||
" \u001b[90m────────────────────────────────────────────────────────────\u001b[39m",
|
||||
"",
|
||||
(.body // "")'
|
||||
'''
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
[metadata]
|
||||
name = "gh-prs"
|
||||
description = "List GitHub PRs for the current repo"
|
||||
requirements = ["gh", "jq"]
|
||||
|
||||
[source]
|
||||
command = '''gh pr list --state open --limit 100 --json number,title,createdAt,author,labels | jq -r 'sort_by(.createdAt) | reverse | .[] | " \u001b[32m#\(.number)\u001b[39m \(.title) \u001b[33m@\(.author.login)\u001b[39m" + (if (.labels | length) > 0 then " " + ([.labels[] | "\u001b[35m" + .name + "\u001b[39m"] | join(" ")) else "" end)'
|
||||
'''
|
||||
output = '{strip_ansi|split:#:1|split: :0}'
|
||||
ansi = true
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
|
||||
[preview]
|
||||
command = '''gh pr view '{strip_ansi|split:#:1|split: :0}' --json number,title,body,state,headRefName,baseRefName,author,createdAt,updatedAt,mergeable,changedFiles,additions,deletions,labels,assignees,reviewDecision,headRepository,headRepositoryOwner | jq -r '
|
||||
" " + .title,
|
||||
" #" + (.number | tostring),
|
||||
"",
|
||||
" \u001b[36mStatus:\u001b[39m \u001b[32m" + .state + "\u001b[39m " + .baseRefName + " ← " + .headRefName,
|
||||
" \u001b[36mRepo:\u001b[39m \u001b[34m" + (.headRepositoryOwner.login) + "/" + (.headRepository.name) + "\u001b[39m",
|
||||
" \u001b[36mAuthor:\u001b[39m \u001b[33m" + .author.login + "\u001b[39m",
|
||||
" \u001b[36mCreated:\u001b[39m " + (.createdAt | fromdateiso8601 | (now - .) | if . < 3600 then (./60|floor|tostring) + " minutes ago" elif . < 86400 then (./3600|floor|tostring) + " hours ago" else (./86400|floor|tostring) + " days ago" end),
|
||||
" \u001b[36mUpdated:\u001b[39m " + (.updatedAt | fromdateiso8601 | (now - .) | if . < 3600 then (./60|floor|tostring) + " minutes ago" elif . < 86400 then (./3600|floor|tostring) + " hours ago" else (./86400|floor|tostring) + " days ago" end),
|
||||
(if (.labels | length) > 0 then " \u001b[36mLabels:\u001b[39m " + ([.labels[] | "\u001b[35m" + .name + "\u001b[39m"] | join(" ")) else "" end),
|
||||
" \u001b[36mMerge Status:\u001b[39m " + (if .mergeable == "MERGEABLE" then "\u001b[32m✓ Clean\u001b[39m" elif .mergeable == "CONFLICTING" then "\u001b[31m✗ Dirty\u001b[39m" else "\u001b[33m? Unknown\u001b[39m" end),
|
||||
" \u001b[36mChanges:\u001b[39m " + (.changedFiles | tostring) + " files \u001b[32m+" + (.additions | tostring) + "\u001b[39m \u001b[31m-" + (.deletions | tostring) + "\u001b[39m",
|
||||
"",
|
||||
" \u001b[90m────────────────────────────────────────────────────────────\u001b[39m",
|
||||
"",
|
||||
(.body // "")'
|
||||
'''
|
||||
@@ -0,0 +1,37 @@
|
||||
[metadata]
|
||||
name = "git-branch"
|
||||
description = "A channel to select from git branches"
|
||||
requirements = ["git"]
|
||||
|
||||
[source]
|
||||
command = "git --no-pager branch --all --format=\"%(refname:short)\""
|
||||
output = "{split: :0}"
|
||||
|
||||
[preview]
|
||||
command = "git show -p --stat --pretty=fuller --color=always '{0}'"
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:checkout"
|
||||
ctrl-d = "actions:delete"
|
||||
ctrl-m = "actions:merge"
|
||||
ctrl-r = "actions:rebase"
|
||||
|
||||
[actions.checkout]
|
||||
description = "Checkout the selected branch"
|
||||
command = "git checkout '{0}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.delete]
|
||||
description = "Delete the selected branch"
|
||||
command = "git branch -d '{0}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.merge]
|
||||
description = "Merge the selected branch into current branch"
|
||||
command = "git merge '{0}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.rebase]
|
||||
description = "Rebase current branch onto the selected branch"
|
||||
command = "git rebase '{0}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,33 @@
|
||||
[metadata]
|
||||
name = "git-diff"
|
||||
description = "A channel to select files from git diff commands"
|
||||
requirements = ["git"]
|
||||
|
||||
[source]
|
||||
command = "git diff --name-only HEAD"
|
||||
|
||||
[preview]
|
||||
command = "git diff HEAD --color=always -- '{}'"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
|
||||
[keybindings]
|
||||
ctrl-s = "actions:stage"
|
||||
ctrl-r = "actions:restore"
|
||||
ctrl-e = "actions:edit"
|
||||
|
||||
[actions.stage]
|
||||
description = "Stage the selected file"
|
||||
command = "git add '{}'"
|
||||
mode = "fork"
|
||||
|
||||
[actions.restore]
|
||||
description = "Discard changes in the selected file"
|
||||
command = "git restore '{}'"
|
||||
mode = "fork"
|
||||
|
||||
[actions.edit]
|
||||
description = "Open the selected file in editor"
|
||||
command = "${EDITOR:-vim} '{}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,34 @@
|
||||
[metadata]
|
||||
name = "git-log"
|
||||
description = "A channel to select from git log entries"
|
||||
requirements = ["git"]
|
||||
|
||||
[source]
|
||||
command = "git log --graph --pretty=format:'%C(yellow)%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --color=always"
|
||||
output = "{strip_ansi|split: :1}"
|
||||
ansi = true
|
||||
no_sort = true
|
||||
frecency = false
|
||||
|
||||
[preview]
|
||||
command = "git show -p --stat --pretty=fuller --color=always '{strip_ansi|split: :1}' | head -n 1000"
|
||||
|
||||
[keybindings]
|
||||
ctrl-y = "actions:cherry-pick"
|
||||
ctrl-r = "actions:revert"
|
||||
ctrl-o = "actions:checkout"
|
||||
|
||||
[actions.cherry-pick]
|
||||
description = "Cherry-pick the selected commit"
|
||||
command = "git cherry-pick '{strip_ansi|split: :1}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.revert]
|
||||
description = "Revert the selected commit"
|
||||
command = "git revert '{strip_ansi|split: :1}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.checkout]
|
||||
description = "Checkout the selected commit"
|
||||
command = "git checkout '{strip_ansi|split: :1}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,28 @@
|
||||
[metadata]
|
||||
name = "git-reflog"
|
||||
description = "A channel to select from git reflog entries"
|
||||
requirements = ["git"]
|
||||
|
||||
[source]
|
||||
command = "git reflog --decorate --color=always"
|
||||
output = "{0|strip_ansi}"
|
||||
ansi = true
|
||||
no_sort = true
|
||||
frecency = false
|
||||
|
||||
[preview]
|
||||
command = "git show -p --stat --pretty=fuller --color=always '{0|strip_ansi}'"
|
||||
|
||||
[keybindings]
|
||||
ctrl-o = "actions:checkout"
|
||||
ctrl-r = "actions:reset"
|
||||
|
||||
[actions.checkout]
|
||||
description = "Checkout the selected reflog entry"
|
||||
command = "git checkout '{0|strip_ansi}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.reset]
|
||||
description = "Reset --hard to the selected reflog entry"
|
||||
command = "git reset --hard '{0|strip_ansi}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,30 @@
|
||||
[metadata]
|
||||
name = "git-repos"
|
||||
requirements = ["fd", "git"]
|
||||
description = """
|
||||
A channel to select from git repositories on your local machine.
|
||||
|
||||
This channel uses `fd` to find directories that contain a `.git` subdirectory, and then allows you to preview the git log of the selected repository.
|
||||
"""
|
||||
|
||||
[source]
|
||||
# this is a macos version of the command. While perfectly usable on linux, you may want to tweak it a bit.
|
||||
command = "fd -g .git -HL -t d -d 10 --prune ~ -E 'Library' -E 'Application Support' --exec dirname '{}'"
|
||||
display = "{split:/:-1}"
|
||||
|
||||
[preview]
|
||||
command = "cd '{}'; git log -n 200 --pretty=medium --all --graph --color"
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:cd"
|
||||
ctrl-e = "actions:edit"
|
||||
|
||||
[actions.cd]
|
||||
description = "Open a new shell in the selected repository"
|
||||
command = "cd '{}' && $SHELL"
|
||||
mode = "execute"
|
||||
|
||||
[actions.edit]
|
||||
description = "Open the repository in editor"
|
||||
command = "${EDITOR:-vim} '{}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,37 @@
|
||||
[metadata]
|
||||
name = "git-stash"
|
||||
description = "Browse and manage git stash entries"
|
||||
requirements = ["git"]
|
||||
|
||||
[source]
|
||||
command = "git stash list --color=always"
|
||||
ansi = true
|
||||
output = "{strip_ansi|split:\\::0}"
|
||||
no_sort = true
|
||||
frecency = false
|
||||
|
||||
[preview]
|
||||
command = "git stash show -p --color=always '{strip_ansi|split:\\::0}'"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:apply"
|
||||
ctrl-p = "actions:pop"
|
||||
ctrl-d = "actions:drop"
|
||||
|
||||
[actions.apply]
|
||||
description = "Apply the selected stash"
|
||||
command = "git stash apply '{strip_ansi|split:\\::0}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.pop]
|
||||
description = "Pop the selected stash (apply and remove)"
|
||||
command = "git stash pop '{strip_ansi|split:\\::0}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.drop]
|
||||
description = "Drop the selected stash"
|
||||
command = "git stash drop '{strip_ansi|split:\\::0}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,26 @@
|
||||
[metadata]
|
||||
name = "git-tags"
|
||||
description = "Browse and checkout git tags"
|
||||
requirements = ["git"]
|
||||
|
||||
[source]
|
||||
command = "git tag --sort=-creatordate"
|
||||
no_sort = true
|
||||
frecency = false
|
||||
|
||||
[preview]
|
||||
command = "git show --color=always '{}'"
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:checkout"
|
||||
ctrl-d = "actions:delete"
|
||||
|
||||
[actions.checkout]
|
||||
description = "Checkout the selected tag"
|
||||
command = "git checkout '{}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.delete]
|
||||
description = "Delete the selected tag"
|
||||
command = "git tag -d '{}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,24 @@
|
||||
[metadata]
|
||||
name = "git-worktrees"
|
||||
description = "List and switch between git worktrees"
|
||||
requirements = ["git"]
|
||||
|
||||
[source]
|
||||
command = "git worktree list --porcelain | grep '^worktree' | cut -d' ' -f2-"
|
||||
|
||||
[preview]
|
||||
command = "cd '{}' && git log --oneline -10 --color=always && echo && git status --short"
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:cd"
|
||||
ctrl-d = "actions:remove"
|
||||
|
||||
[actions.cd]
|
||||
description = "Change to the selected worktree"
|
||||
command = "cd '{}' && $SHELL"
|
||||
mode = "execute"
|
||||
|
||||
[actions.remove]
|
||||
description = "Remove the selected worktree"
|
||||
command = "git worktree remove '{}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,18 @@
|
||||
[metadata]
|
||||
name = "just-recipes"
|
||||
description = "A channel to select recipes from Justfiles"
|
||||
requirements = ["just"]
|
||||
|
||||
[source]
|
||||
command = ["just --summary | tr '[:blank:]' '\n'"]
|
||||
|
||||
[preview]
|
||||
command = "just -s {}"
|
||||
|
||||
[keybindings]
|
||||
f5 = "actions:execute-recipe"
|
||||
|
||||
[actions.execute-recipe]
|
||||
description = "Execute a justfile recipe"
|
||||
command = "just {}"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,27 @@
|
||||
[metadata]
|
||||
name = "k8s-contexts"
|
||||
description = "List and switch kubectl contexts"
|
||||
requirements = ["kubectl"]
|
||||
|
||||
[source]
|
||||
command = "kubectl config get-contexts -o name"
|
||||
|
||||
[preview]
|
||||
command = "kubectl config view --minify --context='{}' -o yaml"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:use"
|
||||
ctrl-d = "actions:delete"
|
||||
|
||||
[actions.use]
|
||||
description = "Switch to the selected context"
|
||||
command = "kubectl config use-context '{}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.delete]
|
||||
description = "Delete the selected context"
|
||||
command = "kubectl config delete-context '{}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,37 @@
|
||||
[metadata]
|
||||
name = "k8s-deployments"
|
||||
description = '''List and preview Deployments in a Kubernetes Cluster.
|
||||
|
||||
The first source lists only from the current namespace, while the second lists from all.
|
||||
|
||||
Keybindings
|
||||
|
||||
Press `ctrl-d` to delete the selected Deployment.
|
||||
'''
|
||||
requirements = ["kubectl"]
|
||||
|
||||
[source]
|
||||
command = [
|
||||
'''
|
||||
kubectl get deployments -o go-template --template '{{range .items}}{{.metadata.namespace}} {{.metadata.name}}{{"\n"}}{{end}}'
|
||||
''',
|
||||
'''
|
||||
kubectl get deployments -o go-template --template '{{range .items}}{{.metadata.namespace}} {{.metadata.name}}{{"\n"}}{{end}}' --all-namespaces
|
||||
''',
|
||||
]
|
||||
output = "{1}"
|
||||
|
||||
[preview]
|
||||
command = "kubectl describe -n {0} deployments/{1}"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
preview_panel = { size = 60 }
|
||||
|
||||
[keybindings]
|
||||
ctrl-d = "actions:delete"
|
||||
|
||||
[actions.delete]
|
||||
description = "Delete the selected Deployment"
|
||||
command = "kubectl delete -n {0} deployments/{1}"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,51 @@
|
||||
[metadata]
|
||||
name = "k8s-pods"
|
||||
description = '''List and preview Pods in a Kubernetes Cluster.
|
||||
|
||||
The first source lists only from the current namespace, while the second lists from all.
|
||||
|
||||
Keybindings
|
||||
|
||||
Press `ctrl-e` to execute shell inside the selected Pod.
|
||||
Press `ctrl-d` to delete the selected Pod.
|
||||
Press `ctrl-l` to print and follow the logs of the selected Pod.
|
||||
'''
|
||||
requirements = ["kubectl"]
|
||||
|
||||
[source]
|
||||
command = [
|
||||
'''
|
||||
kubectl get pods -o go-template --template '{{range .items}}{{.metadata.namespace}} {{.metadata.name}}{{"\n"}}{{end}}'
|
||||
''',
|
||||
'''
|
||||
kubectl get pods -o go-template --template '{{range .items}}{{.metadata.namespace}} {{.metadata.name}}{{"\n"}}{{end}}' --all-namespaces
|
||||
''',
|
||||
]
|
||||
output = "{1}"
|
||||
|
||||
[preview]
|
||||
command = "kubectl describe -n {0} pods/{1}"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
preview_panel = { size = 60 }
|
||||
|
||||
[keybindings]
|
||||
ctrl-d = "actions:delete"
|
||||
ctrl-e = "actions:exec"
|
||||
ctrl-l = "actions:logs"
|
||||
|
||||
[actions.exec]
|
||||
description = "Execute shell inside the selected Pod"
|
||||
command = "kubectl exec -i -t -n {0} pods/{1} -- /bin/sh"
|
||||
mode = "execute"
|
||||
|
||||
[actions.delete]
|
||||
description = "Delete the selected Pod"
|
||||
command = "kubectl delete -n {0} pods/{1}"
|
||||
mode = "execute"
|
||||
|
||||
[actions.logs]
|
||||
description = "Follow logs of the selected Pod"
|
||||
command = "kubectl logs -f -n {0} pods/{1}"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,37 @@
|
||||
[metadata]
|
||||
name = "k8s-services"
|
||||
description = '''List and preview Services in a Kubernetes Cluster.
|
||||
|
||||
The first source lists only from the current namespace, while the second lists from all.
|
||||
|
||||
keybindings
|
||||
|
||||
Press `ctrl-d` to delete the selected Service.
|
||||
'''
|
||||
requirements = ["kubectl"]
|
||||
|
||||
[source]
|
||||
command = [
|
||||
'''
|
||||
kubectl get services -o go-template --template '{{range .items}}{{.metadata.namespace}} {{.metadata.name}}{{"\n"}}{{end}}'
|
||||
''',
|
||||
'''
|
||||
kubectl get services -o go-template --template '{{range .items}}{{.metadata.namespace}} {{.metadata.name}}{{"\n"}}{{end}}' --all-namespaces
|
||||
''',
|
||||
]
|
||||
output = "{1}"
|
||||
|
||||
[preview]
|
||||
command = "kubectl describe -n {0} services/{1}"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
preview_panel = { size = 60 }
|
||||
|
||||
[keybindings]
|
||||
ctrl-d = "actions:delete"
|
||||
|
||||
[actions.delete]
|
||||
description = "Delete the selected Service"
|
||||
command = "kubectl delete -n {0} services/{1}"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,18 @@
|
||||
[metadata]
|
||||
name = "make-targets"
|
||||
description = "List and run Makefile targets"
|
||||
requirements = ["make", "awk"]
|
||||
|
||||
[source]
|
||||
command = "make -pRrq 2>/dev/null | awk -F: '/^[a-zA-Z0-9][^$#\\/\\t=]*:([^=]|$)/ {split($1,a,\" \"); print a[1]}' | sort -u | grep -v '^Makefile$'"
|
||||
|
||||
[preview]
|
||||
command = "awk '/^{}[[:space:]]*:/{found=1} found{print; if(/^[^\\t]/ && NR>1 && !/^{}[[:space:]]*:/) exit}' Makefile"
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:run"
|
||||
|
||||
[actions.run]
|
||||
description = "Run the selected make target"
|
||||
command = "make {}"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,25 @@
|
||||
[metadata]
|
||||
name = "man-pages"
|
||||
description = "Browse and preview system manual pages"
|
||||
requirements = ["apropos", "man", "col"]
|
||||
|
||||
[source]
|
||||
# List all man pages using apropos
|
||||
command = "apropos ."
|
||||
|
||||
[preview]
|
||||
# Show the man page for the selected entry
|
||||
command = "man '{0}' | col -bx"
|
||||
env = { "MANWIDTH" = "80" }
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:open"
|
||||
|
||||
[actions.open]
|
||||
description = "Open the selected man page in the system pager"
|
||||
command = "man '{0}'"
|
||||
mode = "execute"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
preview_panel = { header = "{0}" }
|
||||
@@ -0,0 +1,19 @@
|
||||
[metadata]
|
||||
name = "mounts"
|
||||
description = "List mounted filesystems"
|
||||
requirements = ["df", "awk"]
|
||||
|
||||
[source]
|
||||
command = "df -h --output=target,fstype,size,used,avail,pcent 2>/dev/null | tail -n +2"
|
||||
display = "{split: :0}"
|
||||
|
||||
[preview]
|
||||
command = "df -h '{}' && echo && ls -la '{}' 2>/dev/null | head -20"
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:cd"
|
||||
|
||||
[actions.cd]
|
||||
description = "Open a shell in the selected mount point"
|
||||
command = "cd '{}' && $SHELL"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,22 @@
|
||||
[metadata]
|
||||
name = "npm-scripts"
|
||||
description = "List and run npm scripts from package.json"
|
||||
requirements = ["jq"]
|
||||
|
||||
[source]
|
||||
command = "jq -r '.scripts | to_entries[] | \"\\(.key)\\t\\(.value)\"' package.json 2>/dev/null"
|
||||
display = "{split:\\t:0}"
|
||||
|
||||
[preview]
|
||||
command = "jq -r '.scripts[\"{split:\\t:0}\"]' package.json"
|
||||
|
||||
[ui.preview_panel]
|
||||
size = 30
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:run"
|
||||
|
||||
[actions.run]
|
||||
description = "Run the selected npm script"
|
||||
command = "npm run '{split:\\t:0}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,9 @@
|
||||
|
||||
[metadata]
|
||||
name = "nu-history"
|
||||
description = "A channel to select from your nu history"
|
||||
|
||||
[source]
|
||||
command = "nu -c 'open $nu.history-path | lines | uniq | reverse | to text'"
|
||||
no_sort = true
|
||||
frecency = false
|
||||
@@ -0,0 +1,10 @@
|
||||
[metadata]
|
||||
name = "path"
|
||||
description = "Investigate PATH contents"
|
||||
requirements = ["fd", "bat"]
|
||||
|
||||
[source]
|
||||
command = "printf '%s\n' \"$PATH\" | tr ':' '\n'"
|
||||
|
||||
[preview]
|
||||
command = "fd -tx -d1 . \"{}\" -X printf \"%s\n\" \"{/}\" | sort -f | bat -n --color=always"
|
||||
@@ -0,0 +1,24 @@
|
||||
[metadata]
|
||||
name = "pdf-files"
|
||||
description = "Browse PDF files"
|
||||
requirements = ["fd", "pdftotext"]
|
||||
|
||||
[source]
|
||||
command = [
|
||||
"fd -t f -e pdf .",
|
||||
"fd -t f -e pdf -H .",
|
||||
]
|
||||
|
||||
[preview]
|
||||
command = "pdftotext -l 2 -layout '{}' - 2>/dev/null | head -100 || file '{}'"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:open"
|
||||
|
||||
[actions.open]
|
||||
description = "Open the selected PDF with default viewer"
|
||||
command = "xdg-open '{}' 2>/dev/null || open '{}'"
|
||||
mode = "fork"
|
||||
@@ -0,0 +1,27 @@
|
||||
[metadata]
|
||||
name = "pip-packages"
|
||||
description = "List installed Python packages"
|
||||
requirements = ["pip"]
|
||||
|
||||
[source]
|
||||
command = "pip list --format=freeze 2>/dev/null | cut -d= -f1"
|
||||
|
||||
[preview]
|
||||
command = "pip show '{}'"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
|
||||
[keybindings]
|
||||
ctrl-u = "actions:upgrade"
|
||||
ctrl-d = "actions:uninstall"
|
||||
|
||||
[actions.upgrade]
|
||||
description = "Upgrade the selected package"
|
||||
command = "pip install --upgrade '{}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.uninstall]
|
||||
description = "Uninstall the selected package"
|
||||
command = "pip uninstall '{}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,14 @@
|
||||
[metadata]
|
||||
name = "ports"
|
||||
description = "List listening ports and associated processes"
|
||||
requirements = ["ss", "awk"]
|
||||
|
||||
[source]
|
||||
command = "ss -tlnp 2>/dev/null | tail -n +2 | awk '{gsub(/.*:/,\"\",$4); print $4, $1, $6}' | sed 's/users:((\"//; s/\".*//'"
|
||||
display = "{split: :0} ({split: :2})"
|
||||
|
||||
[preview]
|
||||
command = "ss -tlnp 2>/dev/null | grep ':{split: :0} ' | head -20"
|
||||
|
||||
[ui.preview_panel]
|
||||
size = 40
|
||||
@@ -0,0 +1,38 @@
|
||||
[metadata]
|
||||
name = "procs"
|
||||
description = "A channel to find and manage running processes"
|
||||
requirements = ["ps", "awk"]
|
||||
|
||||
[source]
|
||||
command = "ps -e -o pid=,ucomm= | awk '{print $1, $2}'"
|
||||
display = "{split: :1}"
|
||||
output = "{split: :0}"
|
||||
|
||||
[preview]
|
||||
command = "ps -p '{split: :0}' -o user,pid,ppid,state,%cpu,%mem,command | fold"
|
||||
|
||||
[keybindings]
|
||||
ctrl-k = "actions:kill"
|
||||
f2 = "actions:term"
|
||||
ctrl-s = "actions:stop"
|
||||
ctrl-c = "actions:cont"
|
||||
|
||||
[actions.kill]
|
||||
description = "Kill the selected process (SIGKILL)"
|
||||
command = "kill -9 {split: :0}"
|
||||
mode = "execute"
|
||||
|
||||
[actions.term]
|
||||
description = "Terminate the selected process (SIGTERM)"
|
||||
command = "kill -15 {split: :0}"
|
||||
mode = "execute"
|
||||
|
||||
[actions.stop]
|
||||
description = "Stop/pause the selected process (SIGSTOP)"
|
||||
command = "kill -STOP {split: :0}"
|
||||
mode = "fork"
|
||||
|
||||
[actions.cont]
|
||||
description = "Continue/resume the selected process (SIGCONT)"
|
||||
command = "kill -CONT {split: :0}"
|
||||
mode = "fork"
|
||||
@@ -0,0 +1,22 @@
|
||||
[metadata]
|
||||
name = "recent-files"
|
||||
description = "List recently modified files (via git or filesystem)"
|
||||
requirements = ["git", "bat"]
|
||||
|
||||
[source]
|
||||
command = [
|
||||
"git diff --name-only HEAD~10 HEAD 2>/dev/null || find . -type f -mtime -7 -not -path '*/.*' 2>/dev/null | head -100",
|
||||
"find . -type f -mmin -60 -not -path '*/.*' 2>/dev/null | head -100",
|
||||
]
|
||||
|
||||
[preview]
|
||||
command = "bat -n --color=always '{}'"
|
||||
env = { BAT_THEME = "ansi" }
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:edit"
|
||||
|
||||
[actions.edit]
|
||||
description = "Open the selected file in editor"
|
||||
command = "${EDITOR:-vim} '{}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,18 @@
|
||||
[metadata]
|
||||
name = "ssh-hosts"
|
||||
description = "A channel to select hosts from your SSH config"
|
||||
requirements = ["grep", "tr", "cut", "awk"]
|
||||
|
||||
[source]
|
||||
command = "grep -E '^Host(name)? ' $HOME/.ssh/config | tr -s ' ' | cut -d' ' -f2- | tr ' ' '\n' | grep -v '^$'"
|
||||
|
||||
[preview]
|
||||
command = "awk '/^Host / { found=0 } /^Host (.*[[:space:]])?'{}'([[:space:]].*)?$/ { found=1 } found' $HOME/.ssh/config"
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:connect"
|
||||
|
||||
[actions.connect]
|
||||
description = "SSH into the selected host"
|
||||
command = "ssh '{}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,49 @@
|
||||
[metadata]
|
||||
name = "systemd-units"
|
||||
description = "List and manage systemd services"
|
||||
requirements = ["systemctl"]
|
||||
|
||||
[source]
|
||||
command = [
|
||||
"systemctl list-units --type=service --no-pager --no-legend --plain",
|
||||
"systemctl list-units --type=service --all --no-pager --no-legend --plain",
|
||||
]
|
||||
display = "{split: :0}"
|
||||
|
||||
[preview]
|
||||
command = "systemctl status '{split: :0}' --no-pager"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
|
||||
[keybindings]
|
||||
ctrl-s = "actions:start"
|
||||
f2 = "actions:stop"
|
||||
ctrl-r = "actions:restart"
|
||||
ctrl-e = "actions:enable"
|
||||
ctrl-d = "actions:disable"
|
||||
|
||||
[actions.start]
|
||||
description = "Start the selected service"
|
||||
command = "sudo systemctl start '{split: :0}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.stop]
|
||||
description = "Stop the selected service"
|
||||
command = "sudo systemctl stop '{split: :0}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.restart]
|
||||
description = "Restart the selected service"
|
||||
command = "sudo systemctl restart '{split: :0}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.enable]
|
||||
description = "Enable the selected service"
|
||||
command = "sudo systemctl enable '{split: :0}'"
|
||||
mode = "execute"
|
||||
|
||||
[actions.disable]
|
||||
description = "Disable the selected service"
|
||||
command = "sudo systemctl disable '{split: :0}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,28 @@
|
||||
[metadata]
|
||||
name = "text"
|
||||
description = "A channel to find and select text from files"
|
||||
requirements = ["rg", "bat"]
|
||||
|
||||
[source]
|
||||
command = [
|
||||
"rg . --no-heading --line-number --colors 'match:fg:white' --colors 'path:fg:blue' --color=always",
|
||||
"rg . --no-heading --line-number --hidden --colors 'match:fg:white' --colors 'path:fg:blue' --color=always",
|
||||
]
|
||||
ansi = true
|
||||
output = "{strip_ansi|split:\\::..2}"
|
||||
|
||||
[preview]
|
||||
command = "bat -n --color=always '{strip_ansi|split:\\::0}'"
|
||||
env = { BAT_THEME = "ansi" }
|
||||
offset = '{strip_ansi|split:\::1}'
|
||||
|
||||
[ui]
|
||||
preview_panel = { header = '{strip_ansi|split:\::..2}' }
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:edit"
|
||||
|
||||
[actions.edit]
|
||||
description = "Open file in editor at line"
|
||||
command = "${EDITOR:-vim} '+{strip_ansi|split:\\::1}' '{strip_ansi|split:\\::0}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,21 @@
|
||||
[metadata]
|
||||
name = "tldr"
|
||||
description = "Browse and preview TLDR help pages for command-line tools"
|
||||
requirements = ["tldr"]
|
||||
|
||||
[source]
|
||||
command = "tldr --list"
|
||||
|
||||
[preview]
|
||||
command = "tldr '{0}' --color always"
|
||||
|
||||
[ui]
|
||||
layout = "portrait"
|
||||
|
||||
[keybindings]
|
||||
ctrl-e = "actions:open"
|
||||
|
||||
[actions.open]
|
||||
description = "Open the selected TLDR page"
|
||||
command = "tldr '{0}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,25 @@
|
||||
[metadata]
|
||||
name = "todo-comments"
|
||||
description = "Find TODO, FIXME, HACK, and XXX comments in codebase"
|
||||
requirements = ["rg", "bat"]
|
||||
|
||||
[source]
|
||||
command = "rg -n --color=always '(TODO|FIXME|HACK|XXX|BUG|WARN):?'"
|
||||
ansi = true
|
||||
output = "{strip_ansi|split:\\::..2}"
|
||||
|
||||
[preview]
|
||||
command = "bat -n --color=always --highlight-line '{strip_ansi|split:\\::1}' '{strip_ansi|split:\\::0}'"
|
||||
env = { BAT_THEME = "ansi" }
|
||||
offset = "{strip_ansi|split:\\::1}"
|
||||
|
||||
[ui]
|
||||
preview_panel = { header = "{strip_ansi|split:\\::..2}" }
|
||||
|
||||
[keybindings]
|
||||
enter = "actions:edit"
|
||||
|
||||
[actions.edit]
|
||||
description = "Open file in editor at the comment"
|
||||
command = "${EDITOR:-vim} '+{strip_ansi|split:\\::1}' '{strip_ansi|split:\\::0}'"
|
||||
mode = "execute"
|
||||
@@ -0,0 +1,43 @@
|
||||
[metadata]
|
||||
name = "unicode"
|
||||
description = '''Search and insert unicode characters
|
||||
|
||||
The UnicodeData.txt file is included by many packages.
|
||||
|
||||
In addition to:
|
||||
|
||||
Alpine Linux: unicode-character-database
|
||||
Arch: unicode-character-database
|
||||
Debian/Ubuntu: unicode-data
|
||||
Fedora / RHEL / CentOS unicode-ucd
|
||||
Gentoo: app-i18n/unicode-data
|
||||
NixOS: unicode/unicode-data
|
||||
openSUSE: unicode-ucd
|
||||
|
||||
UnicodData.txt may also aleady be provided by:
|
||||
|
||||
1) Many java packages
|
||||
2) Latex packages
|
||||
3) Still others
|
||||
|
||||
It may in some cases be necessary to alter UNICODE_FILE below.
|
||||
|
||||
'''
|
||||
requirements = ["awk", "perl"]
|
||||
|
||||
[source]
|
||||
command = '''
|
||||
UNICODE_FILE="/usr/share/unicode/ucd/UnicodeData.txt"
|
||||
awk -F';' '
|
||||
$2 !~ /^</ { print $1 "|" $2 }
|
||||
' "$UNICODE_FILE" \
|
||||
| perl -CS -F'\|' -lane '
|
||||
$code = $F[0];
|
||||
$desc = $F[1];
|
||||
$char = chr(hex($code));
|
||||
print "U+$code|$char|$desc" if $char =~ /\p{Print}/;
|
||||
'
|
||||
'''
|
||||
|
||||
display = "{split:|:0} {split:|:1} {split:|:2}"
|
||||
output = "{split:|:1}"
|
||||
@@ -0,0 +1,11 @@
|
||||
[metadata]
|
||||
name = "zsh-history"
|
||||
description = "A channel to select from your zsh history"
|
||||
requirements = ["zsh"]
|
||||
|
||||
[source]
|
||||
command = "sed '1!G;h;$!d' ${HISTFILE:-${HOME}/.zsh_history}"
|
||||
display = "{split:;:1..}"
|
||||
output = "{split:;:1..}"
|
||||
no_sort = true
|
||||
frecency = false
|
||||
@@ -0,0 +1,247 @@
|
||||
# CONFIGURATION FILE LOCATION ON YOUR SYSTEM:
|
||||
# -------------------------------------------
|
||||
# Defaults:
|
||||
# ---------
|
||||
# Linux: `$HOME/.config/television/config.toml`
|
||||
# macOS: `$HOME/.config/television/config.toml`
|
||||
# Windows: `%LocalAppData%\television\config.toml`
|
||||
#
|
||||
# XDG dirs:
|
||||
# ---------
|
||||
# You may use XDG_CONFIG_HOME if set on your system.
|
||||
# In that case, television will expect the configuration file to be in:
|
||||
# `$XDG_CONFIG_HOME/television/config.toml`
|
||||
#
|
||||
|
||||
# General settings
|
||||
# ----------------------------------------------------------------------------
|
||||
tick_rate = 50
|
||||
default_channel = "files"
|
||||
# History settings
|
||||
# ---------------
|
||||
# Maximum number of entries to keep in the global history (default: 100)
|
||||
# The history tracks search queries across all channels and sessions
|
||||
# Set to 0 to disable history functionality entirely
|
||||
history_size = 200
|
||||
# Whether to use global history (default: false)
|
||||
# When true: history navigation shows entries from all channels
|
||||
# When false: history navigation is scoped to the current channel
|
||||
global_history = false
|
||||
|
||||
[ui]
|
||||
# How much space to allocate for the UI (in percentage of the screen)
|
||||
# ┌─────────────────────────┐
|
||||
# │ Terminal screen │
|
||||
# │ ┌───────────────────┐ │
|
||||
# │ │ │ │
|
||||
# │ │ Television UI │ │
|
||||
# │ │ │ │
|
||||
# │ └───────────────────┘ │
|
||||
# │ │
|
||||
# └─────────────────────────┘
|
||||
ui_scale = 100
|
||||
# What orientation should tv be (landscape or portrait)
|
||||
orientation = "landscape"
|
||||
# The theme to use for the UI
|
||||
# A list of builtin themes can be found in the `themes` directory of the television
|
||||
# repository. You may also create your own theme by creating a new file in a `themes`
|
||||
# directory in your configuration directory (see the `config.toml` location above).
|
||||
theme = "default"
|
||||
|
||||
# Feature-specific configurations
|
||||
# Each feature can have its own configuration section
|
||||
[ui.input_bar]
|
||||
# Where to place the input bar in the UI (top or bottom)
|
||||
position = "top"
|
||||
# The input prompt string (defaults to ">" if not specified)
|
||||
prompt = ">"
|
||||
# header = "{}"
|
||||
# padding = {"left": 0, "right": 0, "top": 0, "bottom": 0}
|
||||
border_type = "rounded" # https://docs.rs/ratatui/latest/ratatui/widgets/block/enum.BorderType.html#variants
|
||||
|
||||
[ui.status_bar]
|
||||
# Status bar separators (bubble):
|
||||
#separator_open = ""
|
||||
#separator_close = ""
|
||||
# Status bar separators (box):
|
||||
separator_open = ""
|
||||
separator_close = ""
|
||||
hidden = false
|
||||
|
||||
[ui.results_panel]
|
||||
border_type = "rounded"
|
||||
# padding = {"left": 0, "right": 0, "top": 0, "bottom": 0}
|
||||
|
||||
[ui.preview_panel]
|
||||
# Preview panel size (percentage of screen width/height)
|
||||
size = 50
|
||||
#header = ""
|
||||
#footer = ""
|
||||
scrollbar = true
|
||||
border_type = "rounded"
|
||||
# padding = {"left": 0, "right": 0, "top": 0, "bottom": 0}
|
||||
hidden = false
|
||||
|
||||
[ui.help_panel]
|
||||
# Whether to split the help panel by categories
|
||||
show_categories = true
|
||||
hidden = true
|
||||
|
||||
[ui.remote_control]
|
||||
# Whether to show channel descriptions in remote control mode
|
||||
show_channel_descriptions = true
|
||||
# Whether to sort channels alphabetically
|
||||
sort_alphabetically = true
|
||||
# disabled = false
|
||||
|
||||
# Theme color overrides
|
||||
# ---------------------
|
||||
# You can override specific colors from the selected theme by adding them here.
|
||||
# This allows you to customize the appearance without creating a full theme file.
|
||||
# Colors can be specified as ANSI color names (e.g., "red", "bright-blue") or
|
||||
# as hex values (e.g., "#ff0000", "#1e1e2e").
|
||||
#
|
||||
# Example overrides:
|
||||
# [ui.theme_overrides]
|
||||
# background = "#000000"
|
||||
# text_fg = "#ffffff"
|
||||
# selection_bg = "#444444"
|
||||
# match_fg = "#ff0000"
|
||||
|
||||
# Keybindings and Events
|
||||
# ----------------------------------------------------------------------------
|
||||
#
|
||||
[keybindings]
|
||||
# Application control
|
||||
# ------------------
|
||||
esc = "quit"
|
||||
ctrl-c = "quit"
|
||||
|
||||
# Navigation and selection
|
||||
# -----------------------
|
||||
down = "select_next_entry"
|
||||
ctrl-n = "select_next_entry"
|
||||
ctrl-j = "select_next_entry"
|
||||
up = "select_prev_entry"
|
||||
ctrl-p = "select_prev_entry"
|
||||
ctrl-k = "select_prev_entry"
|
||||
|
||||
# History navigation
|
||||
# -----------------
|
||||
ctrl-up = "select_prev_history"
|
||||
ctrl-down = "select_next_history"
|
||||
|
||||
# Multi-selection
|
||||
# --------------
|
||||
tab = "toggle_selection_down"
|
||||
backtab = "toggle_selection_up"
|
||||
enter = "confirm_selection"
|
||||
|
||||
# Preview panel control
|
||||
# --------------------
|
||||
pagedown = "scroll_preview_half_page_down"
|
||||
pageup = "scroll_preview_half_page_up"
|
||||
ctrl-f = "cycle_previews"
|
||||
|
||||
# Data operations
|
||||
# --------------
|
||||
ctrl-y = "copy_entry_to_clipboard"
|
||||
ctrl-r = "reload_source"
|
||||
ctrl-s = "cycle_sources"
|
||||
|
||||
# UI Features
|
||||
# ----------
|
||||
ctrl-t = "toggle_remote_control"
|
||||
ctrl-x = "toggle_action_picker"
|
||||
ctrl-o = "toggle_preview"
|
||||
ctrl-h = "toggle_help"
|
||||
f12 = "toggle_status_bar"
|
||||
ctrl-l = "toggle_layout"
|
||||
|
||||
# Input field actions
|
||||
# ----------------------------------------
|
||||
backspace = "delete_prev_char"
|
||||
ctrl-w = "delete_prev_word"
|
||||
ctrl-u = "delete_line"
|
||||
delete = "delete_next_char"
|
||||
left = "go_to_prev_char"
|
||||
right = "go_to_next_char"
|
||||
home = "go_to_input_start"
|
||||
ctrl-a = "go_to_input_start"
|
||||
end = "go_to_input_end"
|
||||
ctrl-e = "go_to_input_end"
|
||||
|
||||
# Shell integration
|
||||
# ----------------------------------------------------------------------------
|
||||
#
|
||||
# The shell integration feature allows you to use television as a picker for
|
||||
# your shell commands (as well as your shell history with <CTRL-R>).
|
||||
# E.g. typing `git checkout <CTRL-T>` will open television with a list of
|
||||
# branches to choose from.
|
||||
|
||||
[shell_integration]
|
||||
# This specifies the default fallback channel if no other channel is matched.
|
||||
fallback_channel = "files"
|
||||
|
||||
[shell_integration.channel_triggers]
|
||||
# Add your channel triggers here. Each key is a channel that will be triggered
|
||||
# by the corresponding commands.
|
||||
# Example: say you want the following commands to trigger the following channels
|
||||
# when pressing <CTRL-T>:
|
||||
# `git checkout` should trigger the `git-branches` channel
|
||||
# `ls` should trigger the `dirs` channel
|
||||
# `cat` and `cp` should trigger the `files` channel
|
||||
#
|
||||
# You would add the following to your configuration file:
|
||||
# ```
|
||||
# [shell_integration.channel_triggers]
|
||||
# "git-branches" = ["git checkout"]
|
||||
# "dirs" = ["ls"]
|
||||
# "files" = ["cat", "cp"]
|
||||
# ```
|
||||
"alias" = ["alias", "unalias"]
|
||||
"env" = ["export", "unset"]
|
||||
"dirs" = ["cd", "ls", "rmdir", "z"]
|
||||
"files" = [
|
||||
"cat",
|
||||
"less",
|
||||
"head",
|
||||
"tail",
|
||||
"vim",
|
||||
"nano",
|
||||
"bat",
|
||||
"cp",
|
||||
"mv",
|
||||
"rm",
|
||||
"touch",
|
||||
"chmod",
|
||||
"chown",
|
||||
"ln",
|
||||
"tar",
|
||||
"zip",
|
||||
"unzip",
|
||||
"gzip",
|
||||
"gunzip",
|
||||
"xz",
|
||||
]
|
||||
"git-diff" = ["git add", "git restore"]
|
||||
"git-branch" = [
|
||||
"git checkout",
|
||||
"git branch",
|
||||
"git merge",
|
||||
"git rebase",
|
||||
"git pull",
|
||||
"git push",
|
||||
]
|
||||
"git-log" = ["git log", "git show"]
|
||||
"docker-images" = ["docker run"]
|
||||
"git-repos" = ["nvim", "code", "hx", "git clone"]
|
||||
|
||||
|
||||
[shell_integration.keybindings]
|
||||
# controls which key binding should trigger tv
|
||||
# for shell autocomplete
|
||||
"smart_autocomplete" = "ctrl-t"
|
||||
# controls which keybinding should trigger tv
|
||||
# for command history
|
||||
"command_history" = "ctrl-r"
|
||||
Reference in New Issue
Block a user