mirror of
https://github.com/kogakure/dotfiles.git
synced 2026-02-03 20:25:30 +00:00
191 lines
4.8 KiB
Bash
191 lines
4.8 KiB
Bash
CASE_SENSITIVE="true" # Case-sensitive completion
|
||
DISABLE_AUTO_TITLE="true" # Disable auto-setting terminal title
|
||
COMPLETION_WAITING_DOTS="true"
|
||
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=7,bg=bold,underline"
|
||
|
||
# Bindkey
|
||
bindkey -v
|
||
bindkey -M viins '^r' fzf-history-widget # (r)everse history search
|
||
bindkey -M viins '^f' fzf-file-widget # (f)ile / (t)
|
||
bindkey -M viins '^z' fzf-cd-widget # (z) jump
|
||
|
||
# TMUX
|
||
if [ -n "$TMUX" ]; then
|
||
eval "$(tmux show-environment -s NVIM_LISTEN_ADDRESS 2>/dev/null)"
|
||
else
|
||
export NVIM_LISTEN_ADDRESS=/tmp/nvimsocket
|
||
fi
|
||
|
||
# Set ZSH_CACHE_DIR and ensure it exists
|
||
export ZSH_CACHE_DIR="$HOME/.cache/zsh"
|
||
mkdir -p "$ZSH_CACHE_DIR/completions"
|
||
|
||
# Ensure gh completions are sourced if gh is installed
|
||
if command -v gh &>/dev/null; then
|
||
eval "$(gh completion -s zsh)"
|
||
fi
|
||
|
||
# Atuin
|
||
if command -v atuin &>/dev/null; then
|
||
eval "$(atuin init zsh)"
|
||
fi
|
||
|
||
# Search and preview GitHub pull requests
|
||
function ghpr() {
|
||
GH_FORCE_TTY=100% gh pr list | fzf --ansi --preview 'GH_FORCE_TTY=100% gh pr view {1}' --preview-window down --header-lines 3 | awk '{print $1}' | xargs gh pr checkout
|
||
}
|
||
|
||
# Delete all node_modules folders in a folder and subfolders
|
||
function deleteNodeModules() {
|
||
find . -name "node_modules" -type d -exec rm -rf '{}' +
|
||
}
|
||
|
||
function homebrewBackup() {
|
||
cd ~/.dotfiles/
|
||
brew bundle dump --describe -f
|
||
}
|
||
|
||
function homebrewRestore() {
|
||
brew bundle --file ~/.dotfiles/Brewfile
|
||
}
|
||
|
||
# Server
|
||
server() {
|
||
browser-sync start --server --files "**"
|
||
}
|
||
|
||
# Determine size of a file or total size of a directory
|
||
fs() {
|
||
if du -b /dev/null >/dev/null 2>&1; then
|
||
local arg=-sbh
|
||
else
|
||
local arg=-sh
|
||
fi
|
||
if [[ -n "$@" ]]; then
|
||
du $arg -- "$@"
|
||
else
|
||
du $arg .[^.]* *
|
||
fi
|
||
}
|
||
|
||
# Modified version where you can press
|
||
# - CTRL-O to open with `open` command,
|
||
# - CTRL-E or Enter key to open with the $EDITOR
|
||
fo() {
|
||
IFS=$'\n' out=("$(fzf-tmux --query="$1" --exit-0 --expect=ctrl-o,ctrl-e)")
|
||
key=$(head -1 <<<"$out")
|
||
file=$(head -2 <<<"$out" | tail -1)
|
||
if [ -n "$file" ]; then
|
||
[ "$key" = ctrl-o ] && open "$file" || ${EDITOR:-vim} "$file"
|
||
fi
|
||
}
|
||
|
||
# fcd - cd into directory
|
||
fcd() {
|
||
cd $(find * -type d | fzf --preview 'tree -C {} | head -50')
|
||
}
|
||
|
||
# fhcd – Jump to home directory and search for directories
|
||
fhcd() {
|
||
cd $HOME
|
||
cd $(find * -type d | fzf --preview 'tree -C {} | head -50')
|
||
}
|
||
|
||
# fdr - cd to selected parent directory
|
||
fdr() {
|
||
local declare dirs=()
|
||
get_parent_dirs() {
|
||
if [[ -d "${1}" ]]; then dirs+=("$1"); else return; fi
|
||
if [[ "${1}" == '/' ]]; then
|
||
for _dir in "${dirs[@]}"; do echo $_dir; done
|
||
else
|
||
get_parent_dirs $(dirname "$1")
|
||
fi
|
||
}
|
||
|
||
local DIR=$(get_parent_dirs $(realpath "${1:-$(pwd)}") | fzf-tmux --tac)
|
||
cd "$DIR"
|
||
}
|
||
|
||
# Find in files with ripgrep and fzf and open on that line
|
||
# -> Works together with Vim Plugin bogado/file-line
|
||
frg() {
|
||
file=$(rg . --line-number | fzf | cut -d: -f1 -f2)
|
||
if [ "$file" != "" ]; then
|
||
nvim $file
|
||
fi
|
||
}
|
||
|
||
# fkill - kill process
|
||
fkill() {
|
||
pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}')
|
||
|
||
if [ "x$pid" != "x" ]; then
|
||
kill -${1:-9} $pid
|
||
fi
|
||
}
|
||
|
||
# fco - checkout git branch/tag
|
||
fco() {
|
||
local tags branches target
|
||
tags=$(
|
||
git tag | awk '{print "\x1b[31;1mtag\x1b[m\t" $1}'
|
||
) || return
|
||
branches=$(
|
||
git branch --all | grep -v HEAD |
|
||
sed "s/.* //" | sed "s#remotes/[^/]*/##" |
|
||
sort -u | awk '{print "\x1b[34;1mbranch\x1b[m\t" $1}'
|
||
) || return
|
||
target=$(
|
||
(
|
||
echo "$tags"
|
||
echo "$branches"
|
||
) |
|
||
fzf-tmux -- --no-hscroll --ansi +m -d "\t" -n 2
|
||
) || return
|
||
git checkout $(echo "$target" | awk '{print $2}')
|
||
}
|
||
|
||
# fcoc - checkout git commit
|
||
fcoc() {
|
||
local commits commit
|
||
commits=$(git log --pretty=oneline --abbrev-commit --reverse) &&
|
||
commit=$(echo "$commits" | fzf --tac +s +m -e) &&
|
||
git checkout $(echo "$commit" | sed "s/ .*//")
|
||
}
|
||
|
||
# fshow - git commit browser
|
||
fshow() {
|
||
git log --graph --color=always \
|
||
--format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" |
|
||
fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort \
|
||
--bind "ctrl-m:execute:
|
||
(grep -o '[a-f0-9]\{7\}' | head -1 |
|
||
xargs -I % sh -c 'git show --color=always % | less -R') << 'FZF-EOF'
|
||
{}
|
||
FZF-EOF"
|
||
}
|
||
|
||
# Search z history with fzf
|
||
fz() {
|
||
[ $# -gt 0 ] && _z "$*" && return
|
||
cd "$(_z -l 2>&1 | fzf --height 40% --nth 2.. --reverse --inline-info +s --tac --query "${*##-* }" | sed 's/^[0-9,.]* *//')"
|
||
}
|
||
|
||
# Browse Brave history
|
||
fbh() {
|
||
local cols sep
|
||
cols=$((COLUMNS / 3))
|
||
sep='{{::}}'
|
||
|
||
# Copy History DB to circumvent the lock
|
||
# See http://stackoverflow.com/questions/8936878 for the file path
|
||
cp -f ~/Library/Application\ Support/BraveSoftware/Brave-Browser/Default/History /tmp/h
|
||
|
||
sqlite3 -separator $sep /tmp/h \
|
||
"select substr(title, 1, $cols), url
|
||
from urls order by last_visit_time desc" |
|
||
awk -F $sep '{printf "%-'$cols's \x1b[36m%s\n", $1, $2}' |
|
||
fzf --ansi --multi | sed 's#.*\(https*://\)#\1#' | xargs open
|
||
}
|