Initial import: chezmoi source for CachyOS + Umbriel + Noctalia
Imported from prdlk/dotfiles master (efdd827). Drops the niri, Hyprland/Omarchy, macOS, and Blume docs-site layers; docs/ is plain Markdown.
This commit is contained in:
commit
ee355bcfd5
152 files changed
+11564
No files matched your search
@@ -0,0 +1,8 @@
|
||||
# c: clear with no args, cd with one.
|
||||
c() {
|
||||
if [ -z "${1-}" ]; then
|
||||
clear
|
||||
else
|
||||
cd "$1"
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
# cd with zoxide fallback, else builtin cd.
|
||||
cd() {
|
||||
local rc target
|
||||
if [ $# -eq 0 ]; then
|
||||
builtin cd "$HOME"
|
||||
elif [ "$1" = - ]; then
|
||||
builtin cd -
|
||||
elif builtin cd "$1" 2>/dev/null; then
|
||||
: # exact path resolved, nothing else to do
|
||||
elif command -v zoxide >/dev/null 2>&1; then
|
||||
target=$(zoxide query -- "$1" 2>/dev/null)
|
||||
if [ -n "$target" ]; then
|
||||
builtin cd "$target"
|
||||
else
|
||||
builtin cd "$1" # let builtin cd surface the real error
|
||||
fi
|
||||
else
|
||||
builtin cd "$1"
|
||||
fi
|
||||
rc=$?
|
||||
command -v zoxide >/dev/null 2>&1 && zoxide add "$PWD" 2>/dev/null
|
||||
return $rc
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
# Re-run last command, copy output to clipboard.
|
||||
# History-offset handling: some line editors add the current command to
|
||||
# history before execution, some after — detect instead of assuming.
|
||||
clip-last() {
|
||||
local last copy
|
||||
last=$(fc -ln -1 -1 2>/dev/null)
|
||||
last=${last#"${last%%[![:space:]]*}"} # trim leading whitespace
|
||||
case $last in
|
||||
clip-last*)
|
||||
last=$(fc -ln -2 -2 2>/dev/null)
|
||||
last=${last#"${last%%[![:space:]]*}"}
|
||||
;;
|
||||
esac
|
||||
if [ -z "$last" ]; then
|
||||
echo "clip-last: no previous command in history" >&2
|
||||
return 1
|
||||
fi
|
||||
if command -v wl-copy >/dev/null 2>&1; then
|
||||
copy=wl-copy
|
||||
else
|
||||
echo "clip-last: no clipboard tool (wl-copy) found" >&2
|
||||
return 1
|
||||
fi
|
||||
eval "$last" | "$copy"
|
||||
command -v notify-send >/dev/null 2>&1 \
|
||||
&& notify-send -a shell "Clipboard" "Command output copied to clipboard"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
# ghq get + cd; clone/path logic lives in ~/.local/bin/ghg-clone.
|
||||
# (helper is not named ghg: an unrelated cargo binary owns that name)
|
||||
ghg() {
|
||||
local dir
|
||||
dir=$(ghg-clone "$@") || return
|
||||
cd "$dir" || return
|
||||
clear && onefetch
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
# Create a repo (prad.codes/github.com) + cd; logic lives in ~/.local/bin/ghn.
|
||||
ghn() {
|
||||
local dir
|
||||
dir=$(command ghn "$@") || return
|
||||
cd "$dir" || return
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
# Pick a ghq repo / Obsidian vault with tv (ghq-repos cable) + cd.
|
||||
gho() {
|
||||
local dir
|
||||
dir=$(tv ghq-repos --inline) || return
|
||||
[ -n "$dir" ] || return 1
|
||||
cd "$dir" || return
|
||||
clear
|
||||
if [ -d .git ]; then
|
||||
onefetch
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
# yazi wrapper: cd to the directory yazi was left in on exit.
|
||||
yy() {
|
||||
local tmp cwd
|
||||
tmp=$(mktemp -t "yazi-cwd.XXXXXX")
|
||||
command yazi "$@" --cwd-file="$tmp"
|
||||
cwd=$(cat -- "$tmp" 2>/dev/null)
|
||||
if [ -n "$cwd" ] && [ "$cwd" != "$PWD" ] && [ -d "$cwd" ]; then
|
||||
builtin cd -- "$cwd"
|
||||
fi
|
||||
rm -f -- "$tmp"
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
# ~/.config/bash/keybinds.bash — readline ports of the television keys in
|
||||
# fish_user_key_bindings.fish / zsh keybinds.zsh:
|
||||
# ctrl-o → gho (ghq-repos cable, cd) ctrl-e → tv git-files (nvim)
|
||||
# ctrl-p → pj (pj cable) down → pj on an empty prompt
|
||||
# ctrl-t → tv smart autocomplete (tv init bash ships no ctrl-t)
|
||||
# Keys owned by kitty.conf never reach the shell: ctrl-h/j/k/l (pass_keys.py).
|
||||
#
|
||||
# Every picker runs tv --inline: it opens on the line below the prompt and
|
||||
# leaves the cursor on that line when it exits. When nothing was printed
|
||||
# below, the binding steps back up (_kb_up) so readline redraws the prompt in
|
||||
# place after bind -x; output that must stay (a pj task) is left alone.
|
||||
|
||||
_kb_up() { printf '\033[A' >/dev/tty; }
|
||||
|
||||
# ctrl-e: enter opens nvim, which restores the cursor to tv's line.
|
||||
_kb_git_files() {
|
||||
tv git-files --inline </dev/tty
|
||||
_kb_up
|
||||
}
|
||||
bind -x '"\C-e": _kb_git_files'
|
||||
|
||||
# ctrl-p, and down on an empty prompt. pj reports through $PJ_STATE: `open`
|
||||
# = cancelled, `ran` = a task printed output, empty = no task sources.
|
||||
_kb_pj() {
|
||||
local state
|
||||
state=$(mktemp) || return
|
||||
PJ_STATE=$state pj "$@" </dev/tty
|
||||
[ "$(<"$state")" = open ] && _kb_up
|
||||
rm -f "$state"
|
||||
}
|
||||
bind -x '"\C-p": _kb_pj'
|
||||
|
||||
# ctrl-o: gho, split so the prompt is right. bind -x runs in the shell
|
||||
# process, so the cd persists — but readline keeps drawing the prompt it
|
||||
# started with. The macro runs \C-x1 (pick with tv, cd), then \C-x2 and \C-x3,
|
||||
# which _kb_gho rebinds: after a cd, \C-x2 accepts the stashed-empty line
|
||||
# (bash prints a fresh prompt for the new cwd; nothing reaches history) and
|
||||
# \C-x3 does gho's clear + onefetch, after which readline redraws that fresh
|
||||
# prompt below the output; when cancelled both just redraw. \C-x0 restores
|
||||
# the typed text.
|
||||
_kb_gho() {
|
||||
local dir
|
||||
_kb_line=$READLINE_LINE _kb_point=$READLINE_POINT
|
||||
dir=$(tv ghq-repos --inline </dev/tty)
|
||||
_kb_up
|
||||
if [ -n "$dir" ] && cd "$dir"; then
|
||||
READLINE_LINE='' READLINE_POINT=0
|
||||
bind '"\C-x2": accept-line'
|
||||
bind -x '"\C-x3": _kb_gho_show'
|
||||
else
|
||||
bind '"\C-x2": redraw-current-line'
|
||||
bind '"\C-x3": redraw-current-line'
|
||||
fi
|
||||
}
|
||||
_kb_gho_show() {
|
||||
clear
|
||||
if [ -d .git ]; then
|
||||
onefetch
|
||||
fi
|
||||
}
|
||||
_kb_restore() {
|
||||
READLINE_LINE=${_kb_line-} READLINE_POINT=${_kb_point-0}
|
||||
unset _kb_line _kb_point
|
||||
}
|
||||
bind -x '"\C-x1": _kb_gho'
|
||||
bind -x '"\C-x0": _kb_restore'
|
||||
bind '"\C-o": "\C-x1\C-x2\C-x3\C-x0"'
|
||||
|
||||
# down: the pj cable on an idle, empty prompt, otherwise history search
|
||||
# (fish's _pj_bind_down). bind -x can't call readline functions, so _kb_down
|
||||
# rebinds \C-x5, which the macro sends right after it.
|
||||
_kb_down() {
|
||||
if [ -n "$READLINE_LINE" ]; then
|
||||
bind '"\C-x5": history-search-forward'
|
||||
return
|
||||
fi
|
||||
PJ_QUIET=1 _kb_pj
|
||||
bind '"\C-x5": redraw-current-line'
|
||||
}
|
||||
bind -x '"\C-x4": _kb_down'
|
||||
bind '"\e[B": "\C-x4\C-x5"'
|
||||
bind '"\eOB": "\C-x4\C-x5"'
|
||||
|
||||
# ctrl-t: pick with the channel tv guesses from the text left of the cursor
|
||||
# (shell_integration.channel_triggers) and insert the picks there, quoted.
|
||||
_kb_tv_autocomplete() {
|
||||
local pre=${READLINE_LINE:0:READLINE_POINT} out item ins=''
|
||||
out=$(tv --autocomplete-prompt "$pre" --inline </dev/tty)
|
||||
_kb_up
|
||||
while IFS= read -r item; do
|
||||
[ -n "$item" ] && ins+="$(printf '%q' "$item") "
|
||||
done <<<"$out"
|
||||
READLINE_LINE=$pre$ins${READLINE_LINE:READLINE_POINT}
|
||||
READLINE_POINT=$((${#pre} + ${#ins}))
|
||||
}
|
||||
bind -x '"\C-t": _kb_tv_autocomplete'
|
||||
Reference in new issue
Block a user