mirror of
https://github.com/tiyn/dotfiles.git
synced 2026-05-09 14:01:35 +02:00
Zsh/Nvim: python is now mapped to uv run python using Zsh widgets and the compiler script for Nvim
This commit is contained in:
@@ -2,16 +2,16 @@
|
||||
# HELPER FUNCTIONS #
|
||||
####################
|
||||
|
||||
precmd_vcs_info() { vcs_info }
|
||||
precmd_vcs_info() { vcs_info; }
|
||||
|
||||
precmd_functions+=( precmd_vcs_info )
|
||||
precmd_functions+=(precmd_vcs_info)
|
||||
|
||||
zle-line-init() {
|
||||
zle -K viins
|
||||
echo -ne "\e[5 q"
|
||||
zle -K viins
|
||||
echo -ne "\e[5 q"
|
||||
}
|
||||
|
||||
preexec() { echo -ne '\e[5 q' ;}
|
||||
preexec() { echo -ne '\e[5 q'; }
|
||||
|
||||
local copy_widgets=(
|
||||
vi-yank vi-yank-eol vi-delete vi-backward-kill-word vi-change-whole-line
|
||||
@@ -22,14 +22,14 @@ local paste_widgets=(
|
||||
)
|
||||
|
||||
function zle-keymap-select {
|
||||
if [[ ${KEYMAP} == vicmd ]] ||
|
||||
[[ $1 = 'block' ]]; then
|
||||
echo -ne '\e[1 q'
|
||||
elif [[ ${KEYMAP} == main ]] ||
|
||||
[[ ${KEYMAP} == viins ]] ||
|
||||
[[ ${KEYMAP} == '' ]]; then
|
||||
echo -ne '\e[5 q'
|
||||
fi
|
||||
if [[ ${KEYMAP} == vicmd ]] ||
|
||||
[[ $1 = 'block' ]]; then
|
||||
echo -ne '\e[1 q'
|
||||
elif [[ ${KEYMAP} == main ]] ||
|
||||
[[ ${KEYMAP} == viins ]] ||
|
||||
[[ ${KEYMAP} == '' ]]; then
|
||||
echo -ne '\e[5 q'
|
||||
fi
|
||||
}
|
||||
|
||||
function x11-clip-wrap-widgets() {
|
||||
@@ -59,23 +59,23 @@ function +vi-git-st() {
|
||||
local ahead behind remote
|
||||
local -a gitstatus
|
||||
remote=${$(git rev-parse --verify ${hook_com[branch]}@{upstream} \
|
||||
--symbolic-full-name 2>/dev/null)/refs\/remotes\/}
|
||||
if [[ -n ${remote} ]] ; then
|
||||
--symbolic-full-name 2>/dev/null)/refs\/remotes\//}
|
||||
if [[ -n ${remote} ]]; then
|
||||
# for git prior to 1.7
|
||||
# ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
|
||||
ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l)
|
||||
(( $ahead )) && gitstatus+=( " ${c3}+${ahead}${c2}" )
|
||||
(($ahead)) && gitstatus+=(" ${c3}+${ahead}${c2}")
|
||||
# for git prior to 1.7
|
||||
# behind=$(git rev-list HEAD..origin/${hook_com[branch]} | wc -l)
|
||||
behind=$(git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l)
|
||||
(( $behind )) && gitstatus+=( "${c4}-${behind}${c2}" )
|
||||
(($behind)) && gitstatus+=("${c4}-${behind}${c2}")
|
||||
hook_com[branch]="${hook_com[branch]} [${remote}${(j:/:)gitstatus}]"
|
||||
fi
|
||||
}
|
||||
|
||||
function +vi-git-stash() {
|
||||
local -a stashes
|
||||
if [[ -s ${hook_com[base]}/.git/refs/stash ]] ; then
|
||||
if [[ -s ${hook_com[base]}/.git/refs/stash ]]; then
|
||||
stashes=$(git stash list 2>/dev/null | wc -l)
|
||||
hook_com[misc]+=" (${stashes} stashed)"
|
||||
fi
|
||||
@@ -86,56 +86,99 @@ function +vi-git-stash() {
|
||||
##################
|
||||
|
||||
mkcd() {
|
||||
mkdir -p -- "$1" &&
|
||||
cd -- "$1"
|
||||
mkdir -p -- "$1" &&
|
||||
cd -- "$1"
|
||||
}
|
||||
|
||||
uv() {
|
||||
if [[ "$1" == "init" ]]; then
|
||||
shift
|
||||
if [[ "$1" == "init" ]]; then
|
||||
shift
|
||||
|
||||
if [[ "$1" == "--normal" ]]; then
|
||||
shift
|
||||
command uv init "$@"
|
||||
else
|
||||
command uv init --bare "$@" || return
|
||||
if [[ "$1" == "--normal" ]]; then
|
||||
shift
|
||||
command uv init "$@"
|
||||
else
|
||||
command uv init --bare "$@" || return
|
||||
|
||||
if [[ $# -eq 0 ]]; then
|
||||
command uv venv || return
|
||||
if [[ $# -eq 0 ]]; then
|
||||
command uv venv || return
|
||||
|
||||
if [[ -f ".venv/bin/activate" ]]; then
|
||||
source .venv/bin/activate
|
||||
if [[ -f ".venv/bin/activate" ]]; then
|
||||
source .venv/bin/activate
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
else
|
||||
command uv "$@"
|
||||
fi
|
||||
else
|
||||
command uv "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
_find_venv_upwards() {
|
||||
local dir="$PWD"
|
||||
find_uv_root() {
|
||||
local target="$1"
|
||||
local dir
|
||||
|
||||
while [[ "$dir" != "/" ]]; do
|
||||
if [[ -f "$dir/.venv/pyvenv.cfg" ]]; then
|
||||
echo "$dir/.venv"
|
||||
return
|
||||
if [[ -n "$target" && -e "$target" ]]; then
|
||||
dir="$(cd "$(dirname "$target")" && pwd)"
|
||||
else
|
||||
dir="$PWD"
|
||||
fi
|
||||
dir=$(dirname "$dir")
|
||||
done
|
||||
|
||||
while [[ "$dir" != "/" ]]; do
|
||||
if [[ -f "$dir/.python-version" ]] || [[ -f "$dir/pyproject.toml" ]]; then
|
||||
echo "$dir"
|
||||
return 0
|
||||
fi
|
||||
|
||||
dir="$(dirname "$dir")"
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
uvshim() {
|
||||
local cmd="$1"
|
||||
shift
|
||||
|
||||
local uv_root=""
|
||||
local first_arg="$1"
|
||||
|
||||
uv_root="$(find_uv_root "$first_arg")"
|
||||
|
||||
if [[ -n "$uv_root" ]]; then
|
||||
uv run --project "$uv_root" "$cmd" "$@"
|
||||
else
|
||||
command -- "$cmd" "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
python() { uvshim python "$@"; }
|
||||
python3() { uvshim python3 "$@"; }
|
||||
pip() { uvshim pip "$@"; }
|
||||
pytest() { uvshim pytest "$@"; }
|
||||
|
||||
_find_venv_upwards() {
|
||||
local dir="$PWD"
|
||||
|
||||
while [[ "$dir" != "/" ]]; do
|
||||
if [[ -f "$dir/.venv/pyvenv.cfg" ]]; then
|
||||
echo "$dir/.venv"
|
||||
return
|
||||
fi
|
||||
dir=$(dirname "$dir")
|
||||
done
|
||||
}
|
||||
|
||||
_auto_venv() {
|
||||
local venv_dir
|
||||
venv_dir=$(_find_venv_upwards)
|
||||
local venv_dir
|
||||
venv_dir=$(_find_venv_upwards)
|
||||
|
||||
if [[ -n "$VIRTUAL_ENV" && "$VIRTUAL_ENV" != "$venv_dir" ]]; then
|
||||
deactivate 2>/dev/null
|
||||
fi
|
||||
if [[ -n "$VIRTUAL_ENV" && "$VIRTUAL_ENV" != "$venv_dir" ]]; then
|
||||
deactivate 2>/dev/null
|
||||
fi
|
||||
|
||||
if [[ -n "$venv_dir" && "$VIRTUAL_ENV" != "$venv_dir" ]]; then
|
||||
source "$venv_dir/bin/activate"
|
||||
fi
|
||||
if [[ -n "$venv_dir" && "$VIRTUAL_ENV" != "$venv_dir" ]]; then
|
||||
source "$venv_dir/bin/activate"
|
||||
fi
|
||||
}
|
||||
|
||||
autoload -U add-zsh-hook
|
||||
@@ -144,89 +187,89 @@ _auto_venv
|
||||
|
||||
_accept_line() {
|
||||
|
||||
# automatically push to remote
|
||||
if [[ "$BUFFER" == "git push" ]]; then
|
||||
local branch
|
||||
branch=$(git symbolic-ref --short HEAD 2>/dev/null)
|
||||
# automatically push to remote
|
||||
if [[ "$BUFFER" == "git push" ]]; then
|
||||
local branch
|
||||
branch=$(git symbolic-ref --short HEAD 2>/dev/null)
|
||||
|
||||
if [[ -n "$branch" ]]; then
|
||||
git rev-parse --abbrev-ref --symbolic-full-name @{u} &>/dev/null
|
||||
if [[ $? -ne 0 ]]; then
|
||||
BUFFER="git push -u origin $branch"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# use keifu instead of git log --graph
|
||||
if [[ "$BUFFER" =~ ^([a-zA-Z0-9_-]+)[[:space:]]+([a-zA-Z0-9_-]+)(.*)$ ]]; then
|
||||
|
||||
local cmd=${match[1]}
|
||||
local subcmd=${match[2]}
|
||||
local rest=${match[3]}
|
||||
|
||||
# directly via git log --graph
|
||||
if [[ "$cmd" == "git" && "$subcmd" == "log" && "$rest" == *"--graph"* ]]; then
|
||||
BUFFER="keifu"
|
||||
zle accept-line
|
||||
return
|
||||
if [[ -n "$branch" ]]; then
|
||||
git rev-parse --abbrev-ref --symbolic-full-name @{u} &>/dev/null
|
||||
if [[ $? -ne 0 ]]; then
|
||||
BUFFER="git push -u origin $branch"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# check for git-alias
|
||||
if [[ "$cmd" == "git" ]]; then
|
||||
local alias_expansion
|
||||
alias_expansion=$(git config --get "alias.$subcmd" 2>/dev/null)
|
||||
# use keifu instead of git log --graph
|
||||
if [[ "$BUFFER" =~ ^([a-zA-Z0-9_-]+)[[:space:]]+([a-zA-Z0-9_-]+)(.*)$ ]]; then
|
||||
|
||||
if [[ -n "$alias_expansion" && "$alias_expansion" == log*--graph* ]]; then
|
||||
BUFFER="keifu"
|
||||
zle accept-line
|
||||
return
|
||||
fi
|
||||
fi
|
||||
local cmd=${match[1]}
|
||||
local subcmd=${match[2]}
|
||||
local rest=${match[3]}
|
||||
|
||||
# shell-alias
|
||||
if alias "$cmd" &>/dev/null; then
|
||||
local expansion=$(alias "$cmd")
|
||||
expansion=${expansion#*=}
|
||||
expansion=${expansion#\'}
|
||||
expansion=${expansion%\'}
|
||||
|
||||
if [[ "$expansion" =~ --git-dir=([^[:space:]]+) ]]; then
|
||||
local gitdir=${match[1]}
|
||||
|
||||
if [[ "$subcmd" == "log" && "$rest" == *"--graph"* ]]; then
|
||||
BUFFER="(cd $gitdir && keifu)"
|
||||
zle accept-line
|
||||
return
|
||||
# directly via git log --graph
|
||||
if [[ "$cmd" == "git" && "$subcmd" == "log" && "$rest" == *"--graph"* ]]; then
|
||||
BUFFER="keifu"
|
||||
zle accept-line
|
||||
return
|
||||
fi
|
||||
|
||||
# git-alias within shell-alias
|
||||
local alias_expansion
|
||||
alias_expansion=$(git --git-dir="$gitdir" config --get "alias.$subcmd" 2>/dev/null)
|
||||
# check for git-alias
|
||||
if [[ "$cmd" == "git" ]]; then
|
||||
local alias_expansion
|
||||
alias_expansion=$(git config --get "alias.$subcmd" 2>/dev/null)
|
||||
|
||||
if [[ -n "$alias_expansion" && "$alias_expansion" == log*--graph* ]]; then
|
||||
BUFFER="(cd $gitdir && keifu)"
|
||||
zle accept-line
|
||||
return
|
||||
if [[ -n "$alias_expansion" && "$alias_expansion" == log*--graph* ]]; then
|
||||
BUFFER="keifu"
|
||||
zle accept-line
|
||||
return
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# swap main and master Fix
|
||||
if [[ $BUFFER == git\ * ]]; then
|
||||
local has_main=0
|
||||
local has_master=0
|
||||
git rev-parse --verify main >/dev/null 2>&1 && has_main=1
|
||||
git rev-parse --verify master >/dev/null 2>&1 && has_master=1
|
||||
if [[ $has_main -eq 1 && $has_master -eq 0 ]]; then
|
||||
BUFFER=${BUFFER//" master"/" main"}
|
||||
fi
|
||||
if [[ $has_master -eq 1 && $has_main -eq 0 ]]; then
|
||||
BUFFER=${BUFFER//" main"/" master"}
|
||||
fi
|
||||
fi
|
||||
# shell-alias
|
||||
if alias "$cmd" &>/dev/null; then
|
||||
local expansion=$(alias "$cmd")
|
||||
expansion=${expansion#*=}
|
||||
expansion=${expansion#\'}
|
||||
expansion=${expansion%\'}
|
||||
|
||||
zle accept-line
|
||||
if [[ "$expansion" =~ --git-dir=([^[:space:]]+) ]]; then
|
||||
local gitdir=${match[1]}
|
||||
|
||||
if [[ "$subcmd" == "log" && "$rest" == *"--graph"* ]]; then
|
||||
BUFFER="(cd $gitdir && keifu)"
|
||||
zle accept-line
|
||||
return
|
||||
fi
|
||||
|
||||
# git-alias within shell-alias
|
||||
local alias_expansion
|
||||
alias_expansion=$(git --git-dir="$gitdir" config --get "alias.$subcmd" 2>/dev/null)
|
||||
|
||||
if [[ -n "$alias_expansion" && "$alias_expansion" == log*--graph* ]]; then
|
||||
BUFFER="(cd $gitdir && keifu)"
|
||||
zle accept-line
|
||||
return
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# swap main and master Fix
|
||||
if [[ $BUFFER == git\ * ]]; then
|
||||
local has_main=0
|
||||
local has_master=0
|
||||
git rev-parse --verify main >/dev/null 2>&1 && has_main=1
|
||||
git rev-parse --verify master >/dev/null 2>&1 && has_master=1
|
||||
if [[ $has_main -eq 1 && $has_master -eq 0 ]]; then
|
||||
BUFFER=${BUFFER//" master"/" main"}
|
||||
fi
|
||||
if [[ $has_master -eq 1 && $has_main -eq 0 ]]; then
|
||||
BUFFER=${BUFFER//" main"/" master"}
|
||||
fi
|
||||
fi
|
||||
|
||||
zle accept-line
|
||||
}
|
||||
|
||||
zle -N _accept_line
|
||||
@@ -275,7 +318,7 @@ setopt prompt_subst
|
||||
|
||||
# copy to x11 clipboard
|
||||
x11-clip-wrap-widgets copy $copy_widgets
|
||||
x11-clip-wrap-widgets paste $paste_widgets
|
||||
x11-clip-wrap-widgets paste $paste_widgets
|
||||
|
||||
# enable colors
|
||||
autoload -U colors && colors
|
||||
@@ -343,7 +386,7 @@ fi
|
||||
eval $(thefuck --alias)
|
||||
|
||||
# opam
|
||||
[[ ! -r "$HOME/.opam/opam-init/init.zsh" ]] || source "$HOME/.opam/opam-init/init.zsh" > /dev/null 2> /dev/null
|
||||
[[ ! -r "$HOME/.opam/opam-init/init.zsh" ]] || source "$HOME/.opam/opam-init/init.zsh" >/dev/null 2>/dev/null
|
||||
|
||||
##########################
|
||||
# COMMANDS BEFORE PROMPT #
|
||||
|
||||
Reference in New Issue
Block a user