migrate: stow → chezmoi
- restructure repo to chezmoi conventions (dot_ prefix, private_dot_ssh/) - add nvim config (was untracked) - encrypt restic pass.txt with age - remove stow artifacts (.stow-local-ignore, stow package dirs) - update bootstrap.sh to use chezmoi apply - remove runtime files from tracking (micro buffers, zed backup)
This commit is contained in:
@@ -0,0 +1,206 @@
|
||||
# ════════════════════════════════════════════════════════════
|
||||
# Aliases
|
||||
# ════════════════════════════════════════════════════════════
|
||||
|
||||
# ═══ Навигация ═════════════════════════════════════════════
|
||||
alias ..='cd ..'
|
||||
alias ...='cd ../..'
|
||||
alias ....='cd ../../..'
|
||||
alias .....='cd ../../../..'
|
||||
|
||||
# Быстрый переход в часто используемые директории
|
||||
alias dl='cd ~/Downloads'
|
||||
alias dt='cd ~/Desktop'
|
||||
alias doc='cd ~/Documents'
|
||||
alias dev='cd ~/dev'
|
||||
|
||||
# zoxide - умная навигация (если установлен)
|
||||
if command -v zoxide &>/dev/null; then
|
||||
alias cd='z' # заменить cd на z
|
||||
alias cdi='zi' # интерактивный выбор через fzf
|
||||
alias cdq='zoxide query'
|
||||
alias cdr='zoxide remove'
|
||||
fi
|
||||
|
||||
# ═══ Списки файлов ═════════════════════════════════════════
|
||||
# Использовать eza если доступен, иначе ls с цветами
|
||||
if command -v eza &>/dev/null; then
|
||||
alias ls='eza --icons --group-directories-first'
|
||||
alias ll='eza -l --icons --group-directories-first --git'
|
||||
alias la='eza -la --icons --group-directories-first --git'
|
||||
alias lt='eza --tree --level=2 --icons'
|
||||
alias l='eza -lah --icons --group-directories-first --git'
|
||||
else
|
||||
alias ls='ls --color=auto --group-directories-first'
|
||||
alias ll='ls -lh --color=auto --group-directories-first'
|
||||
alias la='ls -lAh --color=auto --group-directories-first'
|
||||
alias l='ls -lah --color=auto --group-directories-first'
|
||||
fi
|
||||
|
||||
# ═══ Безопасность ══════════════════════════════════════════
|
||||
alias rm='rm -i'
|
||||
alias cp='cp -i'
|
||||
alias mv='mv -i'
|
||||
|
||||
# ═══ Системные команды ═════════════════════════════════════
|
||||
alias grep='grep --color=auto'
|
||||
alias fgrep='fgrep --color=auto'
|
||||
alias egrep='egrep --color=auto'
|
||||
|
||||
alias df='df -h'
|
||||
alias du='du -h'
|
||||
alias free='free -h'
|
||||
|
||||
# ═══ Сеть ══════════════════════════════════════════════════
|
||||
alias ping='ping -c 5'
|
||||
alias ports='netstat -tulanp'
|
||||
# myip определена как функция в functions.zsh (более полная версия)
|
||||
alias localip="ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v 127.0.0.1"
|
||||
|
||||
# Proxy
|
||||
# Включение прокси (HTTP, HTTPS и SOCKS5h для DNS через прокси)
|
||||
alias proxy-on='export http_proxy="http://127.0.0.1:7897" https_proxy="http://127.0.0.1:7897" ALL_PROXY="socks5://127.0.0.1:7897" all_proxy="socks5://127.0.0.1:7897" && echo " Proxy enabled (127.0.0.1:7897)"'
|
||||
|
||||
# Полное отключение всех переменных прокси
|
||||
alias proxy-off='unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY && echo " Proxy disabled"'
|
||||
alias proxy-status='env | grep -i proxy'
|
||||
|
||||
|
||||
# ═══ Git ═══════════════════════════════════════════════════
|
||||
alias g='git'
|
||||
alias gs='git status'
|
||||
alias gst='git --no-pager status' # без пейджера
|
||||
alias ga='git add'
|
||||
alias gaa='git add .'
|
||||
alias gc='git commit'
|
||||
alias gcm='git commit -m'
|
||||
alias gp='git push'
|
||||
alias gpl='git pull'
|
||||
alias gd='git diff'
|
||||
alias gco='git checkout'
|
||||
alias gb='git branch'
|
||||
alias gl='git log --oneline --graph --decorate'
|
||||
alias glog='git log --oneline --graph --decorate --all'
|
||||
|
||||
# ═══ Docker ════════════════════════════════════════════════
|
||||
if command -v docker &>/dev/null; then
|
||||
alias d='docker'
|
||||
alias dc='docker-compose'
|
||||
alias dps='docker ps'
|
||||
alias dpsa='docker ps -a'
|
||||
alias di='docker images'
|
||||
alias dex='docker exec -it'
|
||||
alias dlog='docker logs -f'
|
||||
alias dstop='docker stop $(docker ps -aq)'
|
||||
alias drm='docker rm $(docker ps -aq)'
|
||||
alias drmi='docker rmi $(docker images -q)'
|
||||
alias dclean='docker system prune -af --volumes'
|
||||
fi
|
||||
|
||||
# ═══ Kubectl ═══════════════════════════════════════════════
|
||||
if command -v kubectl &>/dev/null; then
|
||||
alias k='kubectl'
|
||||
alias kgp='kubectl get pods'
|
||||
alias kgs='kubectl get services'
|
||||
alias kgd='kubectl get deployments'
|
||||
alias kdp='kubectl describe pod'
|
||||
alias kds='kubectl describe service'
|
||||
alias kdd='kubectl describe deployment'
|
||||
alias kl='kubectl logs -f'
|
||||
alias kex='kubectl exec -it'
|
||||
fi
|
||||
|
||||
# ═══ Ruby (rbenv) ══════════════════════════════════════════
|
||||
if command -v rbenv &>/dev/null; then
|
||||
alias rb='ruby'
|
||||
alias be='bundle exec'
|
||||
alias bi='bundle install'
|
||||
alias bu='bundle update'
|
||||
fi
|
||||
|
||||
# ═══ Python ════════════════════════════════════════════════
|
||||
alias py='python3'
|
||||
alias pip='pip3'
|
||||
alias venv='python3 -m venv'
|
||||
|
||||
# ═══ Node.js ═══════════════════════════════════════════════
|
||||
alias ni='npm install'
|
||||
alias nid='npm install --save-dev'
|
||||
|
||||
alias nig='npm install -g'
|
||||
alias nr='npm run'
|
||||
alias ns='npm start'
|
||||
alias nt='npm test'
|
||||
|
||||
# ═══ Утилиты ═══════════════════════════════════════════════
|
||||
alias reload='source ~/.config/zsh/.zshrc'
|
||||
alias path='echo $PATH | tr ":" "\n"'
|
||||
alias h='history'
|
||||
alias c='clear'
|
||||
alias x='exit'
|
||||
alias rsend='sudo rsync -avhP --stats'
|
||||
alias wakemac='ssh vps "wakeonlan -i 192.168.1.255 FC:34:97:E1:08:E9"'
|
||||
|
||||
alias zshrc='${EDITOR} ~/.config/zsh/.zshrc'
|
||||
alias reload='source ~/.config/zsh/.zshrc'
|
||||
alias path='echo $PATH | tr ":" "\n"'
|
||||
|
||||
# Использовать bat вместо cat, если установлен
|
||||
if command -v bat &>/dev/null; then
|
||||
alias cat='bat'
|
||||
fi
|
||||
|
||||
alias h='history'
|
||||
alias c='clear'
|
||||
alias x='exit'
|
||||
alias rsend='sudo rsync -avhP --stats'
|
||||
alias wakemac='ssh vps "wakeonlan -i 192.168.1.255 FC:34:97:E1:08:E9"'
|
||||
|
||||
|
||||
|
||||
# Быстрое обновление системы (для разных дистрибутивов)
|
||||
if command -v apt &>/dev/null; then
|
||||
alias update='sudo apt update && sudo apt upgrade -y'
|
||||
elif command -v pacman &>/dev/null; then
|
||||
alias update='sudo pacman -Syu'
|
||||
elif command -v dnf &>/dev/null; then
|
||||
alias update='sudo dnf upgrade -y'
|
||||
elif command -v zypper &>/dev/null; then
|
||||
alias update='sudo zypper refresh && sudo zypper update -y'
|
||||
fi
|
||||
|
||||
# Универсальная установка пакетов (для разных дистрибутивов)
|
||||
if command -v apt &>/dev/null; then
|
||||
alias install='sudo apt install -y'
|
||||
elif command -v pacman &>/dev/null; then
|
||||
alias install='sudo pacman -S --noconfirm'
|
||||
elif command -v dnf &>/dev/null; then
|
||||
alias install='sudo dnf install -y'
|
||||
elif command -v zypper &>/dev/null; then
|
||||
alias install='sudo zypper install -y'
|
||||
fi
|
||||
|
||||
# ═══ Прочее ════════════════════════════════════════════════
|
||||
alias cheat='curl cheat.sh'
|
||||
alias timer='echo "Timer started. Stop with Ctrl-D." && date && time cat && date'
|
||||
alias lidon='sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target'
|
||||
alias lidoff='sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target'
|
||||
# alias gemini='NODE_NO_WARNINGS=1 npx @google/gemini-cli'
|
||||
alias sshvpn='sshuttle --dns -r fl-vps 0/0 -X ~/.dotfiles/configs/.exclude-ip.txt'
|
||||
|
||||
alias sshp-fg='ssh -D 127.0.0.1:1080 fl-vps -v sleep 9999'
|
||||
|
||||
alias gbackup='git add . && git commit -m "backup: $(date +"%Y-%m-%d %H:%M")" && git push && git remote get-url upstream &>/dev/null && git push upstream || true'
|
||||
|
||||
alias db_rev='rails db:drop && rails db:create && rails db:migrate && rails db:seed'
|
||||
|
||||
alias zed='zeditor'
|
||||
alias dotfiles='$VISUAL ~/dotfiles'
|
||||
alias ua-drop-caches='sudo paccache -rk3; paru -Sc --noconfirm'
|
||||
alias ua-update-all='export TMPFILE="$(mktemp)"; \
|
||||
sudo true; \
|
||||
rate-mirrors --save=$TMPFILE arch --max-delay=21600 \
|
||||
&& sudo mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist-backup \
|
||||
&& sudo mv $TMPFILE /etc/pacman.d/mirrorlist \
|
||||
&& paru -Syyu --noconfirm \
|
||||
&& ua-drop-caches'
|
||||
@@ -0,0 +1,94 @@
|
||||
# ════════════════════════════════════════════════════════════
|
||||
# Completion Settings
|
||||
# ════════════════════════════════════════════════════════════
|
||||
|
||||
# ═══ Инициализация ═════════════════════════════════════════
|
||||
autoload -Uz compinit
|
||||
|
||||
# Проверять новые автодополнения раз в день
|
||||
if [[ -n ${ZDOTDIR}/.zcompdump(#qN.mh+24) ]]; then
|
||||
compinit
|
||||
touch ${ZDOTDIR}/.zcompdump
|
||||
else
|
||||
compinit -C
|
||||
fi
|
||||
|
||||
# ═══ Кэш дополнений ════════════════════════════════════════
|
||||
zstyle ':completion:*' use-cache on
|
||||
zstyle ':completion:*' cache-path "${XDG_CACHE_HOME}/zsh/zcompcache"
|
||||
|
||||
# Создать директорию для кэша если не существует
|
||||
[[ ! -d "${XDG_CACHE_HOME}/zsh" ]] && mkdir -p "${XDG_CACHE_HOME}/zsh"
|
||||
|
||||
# ═══ Меню выбора ═══════════════════════════════════════════
|
||||
zstyle ':completion:*' menu select
|
||||
zstyle ':completion:*' group-name ''
|
||||
zstyle ':completion:*' verbose yes
|
||||
|
||||
# ═══ Форматирование ════════════════════════════════════════
|
||||
zstyle ':completion:*:descriptions' format '%F{blue}-- %d --%f'
|
||||
zstyle ':completion:*:messages' format '%F{purple}-- %d --%f'
|
||||
zstyle ':completion:*:warnings' format '%F{red}-- no matches found --%f'
|
||||
zstyle ':completion:*:corrections' format '%F{yellow}-- %d (errors: %e) --%f'
|
||||
|
||||
# ═══ Сопоставление ═════════════════════════════════════════
|
||||
zstyle ':completion:*' matcher-list \
|
||||
'm:{a-zA-Z}={A-Za-z}' \
|
||||
'r:|[._-]=* r:|=*' \
|
||||
'l:|=* r:|=*'
|
||||
|
||||
# ═══ Цвета ═════════════════════════════════════════════════
|
||||
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
|
||||
zstyle ':completion:*' list-colors ''
|
||||
|
||||
# ═══ Процессы ══════════════════════════════════════════════
|
||||
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;34=0=01'
|
||||
zstyle ':completion:*:*:*:*:processes' command "ps -u $USER -o pid,user,comm -w -w"
|
||||
|
||||
# Не предлагать уже использованные опции
|
||||
zstyle ':completion:*:*:kill:*' ignore-line yes
|
||||
|
||||
# ═══ Команды ═══════════════════════════════════════════════
|
||||
# Игнорировать внутренние функции (начинающиеся с _)
|
||||
zstyle ':completion:*:functions' ignored-patterns '_*'
|
||||
|
||||
# ═══ Директории ════════════════════════════════════════════
|
||||
zstyle ':completion:*' special-dirs true
|
||||
zstyle ':completion:*' list-dirs-first true
|
||||
|
||||
# Игнорировать родительскую директорию
|
||||
zstyle ':completion:*:cd:*' ignore-parents parent pwd
|
||||
|
||||
# ═══ Хосты ═════════════════════════════════════════════════
|
||||
zstyle ':completion:*:ssh:*' hosts off
|
||||
zstyle ':completion:*:scp:*' hosts off
|
||||
|
||||
# Читать хосты из ~/.ssh/config
|
||||
if [[ -f ~/.ssh/config ]]; then
|
||||
h=()
|
||||
if [[ -r ~/.ssh/config ]]; then
|
||||
h=(${${${(@M)${(f)"$(cat ~/.ssh/config)"}:#Host *}#Host }:#*[*?]*})
|
||||
fi
|
||||
zstyle ':completion:*:ssh:*' hosts $h
|
||||
zstyle ':completion:*:scp:*' hosts $h
|
||||
fi
|
||||
|
||||
# ═══ Man страницы ══════════════════════════════════════════
|
||||
zstyle ':completion:*:manuals' separate-sections true
|
||||
zstyle ':completion:*:manuals.(^1*)' insert-sections true
|
||||
|
||||
# ═══ Автодополнение для sudo ═══════════════════════════════
|
||||
zstyle ':completion:*:sudo:*' command-path \
|
||||
/usr/local/sbin \
|
||||
/usr/local/bin \
|
||||
/usr/sbin \
|
||||
/usr/bin \
|
||||
/sbin \
|
||||
/bin
|
||||
|
||||
# ═══ Массивы ═══════════════════════════════════════════════
|
||||
zstyle ':completion:*:*:-subscript-:*' tag-order indexes parameters
|
||||
|
||||
# ═══ Расширения ════════════════════════════════════════════
|
||||
zstyle ':completion:*' squeeze-slashes true
|
||||
zstyle ':completion:*' expand yes
|
||||
@@ -0,0 +1,96 @@
|
||||
# ════════════════════════════════════════════════════════════
|
||||
# Environment Variables
|
||||
# ════════════════════════════════════════════════════════════
|
||||
|
||||
# ═══ Основные пути ═════════════════════════════════════════
|
||||
export EDITOR="${EDITOR:-nano}"
|
||||
export VISUAL="${VISUAL:-zeditor}"
|
||||
export PAGER="less"
|
||||
export SUDO_EDITOR="zeditor --wait"
|
||||
|
||||
# ═══ XDG Base Directories ══════════════════════════════════
|
||||
export XDG_CONFIG_HOME="${HOME}/.config"
|
||||
export XDG_DATA_HOME="${HOME}/.local/share"
|
||||
export XDG_CACHE_HOME="${HOME}/.cache"
|
||||
export XDG_STATE_HOME="${HOME}/.local/state"
|
||||
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"
|
||||
|
||||
# ═══ История команд ════════════════════════════════════════
|
||||
export HISTFILE="${XDG_STATE_HOME}/zsh/history"
|
||||
export HISTSIZE=50000
|
||||
export SAVEHIST=50000
|
||||
|
||||
# Создать директорию для истории если не существует
|
||||
[[ ! -d "$(dirname $HISTFILE)" ]] && mkdir -p "$(dirname $HISTFILE)"
|
||||
|
||||
# Добавить Zed в PATH
|
||||
export PATH="${HOME}/.local/bin/zed:${PATH}"
|
||||
export PATH="${HOME}/.config/Code/User/globalStorage/ms-vscode-remote.remote-containers/cli-bin:${PATH}"
|
||||
|
||||
# ═══ Less ══════════════════════════════════════════════════
|
||||
export LESS='-R -M -i -j10'
|
||||
export LESSHISTFILE="${XDG_CACHE_HOME}/less/history"
|
||||
|
||||
# ═══ Ruby (rbenv) ══════════════════════════════════════════
|
||||
if [[ -d "${HOME}/.rbenv" ]]; then
|
||||
export PATH="${HOME}/.rbenv/bin:${PATH}"
|
||||
command -v rbenv &>/dev/null && eval "$(rbenv init - zsh)"
|
||||
fi
|
||||
|
||||
# ═══ asdf ══ ═════════════════════════════════════════════
|
||||
if [[ -f "$HOME/.asdf/asdf.sh" ]]; then
|
||||
. "$HOME/.asdf/asdf.sh"
|
||||
fi
|
||||
|
||||
# ═══ Node.js ═══════════════════════════════════════════════
|
||||
# Если используете nvm
|
||||
export NVM_DIR="${XDG_CONFIG_HOME}/nvm"
|
||||
[[ -s "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh" --no-use # Ленивая загрузка
|
||||
|
||||
# ═══ Python ════════════════════════════════════════════════
|
||||
# Отключить создание .pyc файлов
|
||||
export PYTHONDONTWRITEBYTECODE=1
|
||||
# export PYENV_ROOT="$HOME/.pyenv"
|
||||
# export PATH="$PYENV_ROOT/bin:$PATH"
|
||||
|
||||
# ═══ Go ════════════════════════════════════════════════════
|
||||
export GOPATH="${HOME}/go"
|
||||
export PATH="${GOPATH}/bin:${PATH}"
|
||||
|
||||
# ═══ Rust ══════════════════════════════════════════════════
|
||||
export CARGO_HOME="${HOME}/.cargo"
|
||||
export PATH="${CARGO_HOME}/bin:${PATH}"
|
||||
|
||||
# ═══ Локальные бинарники ═══════════════════════════════════
|
||||
export PATH="${HOME}/.local/bin:${PATH}"
|
||||
|
||||
# ═══ Цвета ═════════════════════════════════════════════════
|
||||
export CLICOLOR=1
|
||||
export LS_COLORS='di=34:ln=35:so=32:pi=33:ex=31:bd=34;46:cd=34;43:su=30;41:sg=30;46:tw=30;42:ow=30;43'
|
||||
|
||||
# ═══ FZF ═══════════════════════════════════════════════════
|
||||
export FZF_DEFAULT_OPTS="
|
||||
--height 40%
|
||||
--layout=reverse
|
||||
--border
|
||||
--inline-info
|
||||
--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8
|
||||
--color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc
|
||||
--color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8
|
||||
"
|
||||
|
||||
# Использовать fd вместо find если доступен
|
||||
if command -v fd &>/dev/null; then
|
||||
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
|
||||
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
|
||||
fi
|
||||
|
||||
if command -v zoxide &>/dev/null; then
|
||||
eval "$(zoxide init zsh)"
|
||||
fi
|
||||
|
||||
if command -v direnv >/dev/null 2>&1; then
|
||||
eval "$(direnv hook zsh)"
|
||||
fi
|
||||
|
||||
export SSH_AUTH_SOCK='/home/ada/.bitwarden-ssh-agent.sock'
|
||||
@@ -0,0 +1,287 @@
|
||||
# ════════════════════════════════════════════════════════════
|
||||
# Custom Functions
|
||||
# ════════════════════════════════════════════════════════════
|
||||
|
||||
# ═══ Навигация ═════════════════════════════════════════════
|
||||
|
||||
# mkcd - создать директорию и перейти в неё
|
||||
mkcd() {
|
||||
mkdir -p "$1" && cd "$1"
|
||||
}
|
||||
|
||||
# up - подняться на N уровней вверх
|
||||
up() {
|
||||
local d=""
|
||||
local limit="${1:-1}"
|
||||
for ((i=1; i<=limit; i++)); do
|
||||
d="../$d"
|
||||
done
|
||||
|
||||
if [[ -z "$d" ]]; then
|
||||
d=..
|
||||
fi
|
||||
|
||||
cd "$d" || return
|
||||
}
|
||||
|
||||
# ═══ Поиск ═════════════════════════════════════════════════
|
||||
|
||||
# ff - быстрый поиск файлов
|
||||
ff() {
|
||||
if command -v fd &>/dev/null; then
|
||||
fd "$@"
|
||||
else
|
||||
find . -iname "*$1*"
|
||||
fi
|
||||
}
|
||||
|
||||
# fh - поиск в истории команд с fzf
|
||||
fh() {
|
||||
if command -v fzf &>/dev/null; then
|
||||
print -z $(history -n 1 | fzf --tac --no-sort)
|
||||
else
|
||||
history | grep "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
# ═══ Файлы и директории ════════════════════════════════════
|
||||
|
||||
# extract - универсальная распаковка (если плагин не загружен)
|
||||
if ! command -v extract &>/dev/null; then
|
||||
extract() {
|
||||
if [[ -f $1 ]]; then
|
||||
case $1 in
|
||||
*.tar.bz2) tar xjf "$1" ;;
|
||||
*.tar.gz) tar xzf "$1" ;;
|
||||
*.tar.xz) tar xJf "$1" ;;
|
||||
*.bz2) bunzip2 "$1" ;;
|
||||
*.rar) unrar x "$1" ;;
|
||||
*.gz) gunzip "$1" ;;
|
||||
*.tar) tar xf "$1" ;;
|
||||
*.tbz2) tar xjf "$1" ;;
|
||||
*.tgz) tar xzf "$1" ;;
|
||||
*.zip) unzip "$1" ;;
|
||||
*.Z) uncompress "$1" ;;
|
||||
*.7z) 7z x "$1" ;;
|
||||
*) echo "'$1' cannot be extracted via extract()" ;;
|
||||
esac
|
||||
else
|
||||
echo "'$1' is not a valid file"
|
||||
fi
|
||||
}
|
||||
fi
|
||||
|
||||
# backup - создать резервную копию файла
|
||||
backup() {
|
||||
if [[ -f $1 ]]; then
|
||||
cp "$1"{,.backup-$(date +%Y%m%d-%H%M%S)}
|
||||
echo "Backup created: $1.backup-$(date +%Y%m%d-%H%M%S)"
|
||||
else
|
||||
echo "File not found: $1"
|
||||
fi
|
||||
}
|
||||
|
||||
# ═══ Размер файлов ═════════════════════════════════════════
|
||||
|
||||
# dirsize - показать размер директории
|
||||
dirsize() {
|
||||
du -sh "${1:-.}" 2>/dev/null || echo "Directory not found"
|
||||
}
|
||||
|
||||
# largest - показать N самых больших файлов в директории
|
||||
largest() {
|
||||
local num=${1:-10}
|
||||
du -ah "${2:-.}" | sort -rh | head -n "$num"
|
||||
}
|
||||
|
||||
# ═══ Процессы ══════════════════════════════════════════════
|
||||
|
||||
# psgrep - поиск процессов
|
||||
psgrep() {
|
||||
ps aux | grep -v grep | grep -i -e VSZ -e "$1"
|
||||
}
|
||||
|
||||
# kill процесс по имени
|
||||
killp() {
|
||||
local pid
|
||||
pid=$(ps aux | grep -v grep | grep "$1" | awk '{print $2}')
|
||||
if [[ -n $pid ]]; then
|
||||
echo "Killing process: $1 (PID: $pid)"
|
||||
kill -9 "$pid"
|
||||
else
|
||||
echo "Process not found: $1"
|
||||
fi
|
||||
}
|
||||
|
||||
# ═══ Сеть ══════════════════════════════════════════════════
|
||||
|
||||
# myip - показать все IP адреса
|
||||
myip() {
|
||||
echo "External IP: $(curl -s ifconfig.me)"
|
||||
echo "Local IPs:"
|
||||
ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v 127.0.0.1
|
||||
}
|
||||
|
||||
# ports - показать открытые порты
|
||||
openports() {
|
||||
sudo netstat -tulanp | grep LISTEN
|
||||
}
|
||||
|
||||
# ═══ Git ═══════════════════════════════════════════════════
|
||||
|
||||
# gitignore - скачать .gitignore для языка
|
||||
gitignore() {
|
||||
if [[ -z $1 ]]; then
|
||||
echo "Usage: gitignore <language>"
|
||||
return 1
|
||||
fi
|
||||
curl -sL "https://www.toptal.com/developers/gitignore/api/$1" -o .gitignore
|
||||
echo ".gitignore created for: $1"
|
||||
}
|
||||
|
||||
# gclone - клонировать репозиторий и перейти в него
|
||||
gclone() {
|
||||
if [[ -z $1 ]]; then
|
||||
echo "Usage: gclone <repository>"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local repo_name=$(basename "$1" .git)
|
||||
git clone "$1" && cd "$repo_name" || return
|
||||
}
|
||||
|
||||
# ═══ Разработка ════════════════════════════════════════════
|
||||
|
||||
# serve - быстрый HTTP сервер
|
||||
serve() {
|
||||
local port="${1:-8000}"
|
||||
if command -v python3 &>/dev/null; then
|
||||
echo "Starting server on http://localhost:$port"
|
||||
python3 -m http.server "$port"
|
||||
else
|
||||
echo "Python3 not found"
|
||||
fi
|
||||
}
|
||||
|
||||
# json - форматировать JSON
|
||||
json() {
|
||||
if [[ -f $1 ]]; then
|
||||
python3 -m json.tool "$1"
|
||||
else
|
||||
echo "$1" | python3 -m json.tool
|
||||
fi
|
||||
}
|
||||
|
||||
# ═══ Утилиты ═══════════════════════════════════════════════
|
||||
|
||||
# weather - погода для города
|
||||
weather() {
|
||||
local city="${1:-Moscow}"
|
||||
curl -s "wttr.in/$city?format=3"
|
||||
}
|
||||
|
||||
# Функция для монтирования облаков
|
||||
mount-clouds() {
|
||||
mkdir -p ~/YaDisk ~/GDrive
|
||||
echo "Монтирую диски..."
|
||||
|
||||
# Яндекс.Диск
|
||||
rclone mount yadisk: ~/YaDisk \
|
||||
--vfs-cache-mode writes \
|
||||
--vfs-cache-max-size 10G \
|
||||
--vfs-cache-max-age 2h \
|
||||
--allow-non-empty \
|
||||
--daemon
|
||||
|
||||
# Google Drive
|
||||
rclone mount gdrive: ~/GDrive \
|
||||
--vfs-cache-mode writes \
|
||||
--vfs-cache-max-size 10G \
|
||||
--vfs-cache-max-age 2h \
|
||||
--allow-non-empty \
|
||||
--daemon
|
||||
|
||||
echo "Готово! Проверяю монтирование:"
|
||||
ls ~/YaDisk >/dev/null 2>&1 && echo "✅ YaDisk смонтирован" || echo "⚠️ Ошибка монтирования YaDisk"
|
||||
ls ~/GDrive >/dev/null 2>&1 && echo "✅ GDrive смонтирован" || echo "⚠️ Ошибка монтирования GDrive"
|
||||
}
|
||||
# Функция для размонтирования
|
||||
unmount-clouds() {
|
||||
echo "Отключаю диски..."
|
||||
|
||||
fusermount -uz ~/YaDisk 2>/dev/null && echo "✅ YaDisk отключен" || echo "⚠️ YaDisk не был примонтирован"
|
||||
fusermount -uz ~/GDrive 2>/dev/null && echo "✅ GDrive отключен" || echo "⚠️ GDrive не был примонтирован"
|
||||
}
|
||||
|
||||
|
||||
SSH_PROXY_PID_FILE="/tmp/ssh_proxy.pid"
|
||||
# Адрес Privoxy, который слушает HTTP и перенаправляет в SOCKS5
|
||||
# 1. Запуск
|
||||
sshp-start() {
|
||||
if [ -f "$SSH_PROXY_PID_FILE" ] && kill -0 $(cat "$SSH_PROXY_PID_FILE") 2>/dev/null; then
|
||||
echo "Ошибка: Прокси уже запущен (PID: $(cat $SSH_PROXY_PID_FILE))"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Запуск SSH в фоновом режиме
|
||||
ssh -fN -D 127.0.0.1:1080 fl-vps
|
||||
|
||||
# Сохранение PID последнего запущенного процесса
|
||||
pgrep -f "ssh -fN -D 127.0.0.1:1080 fl-vps" > "$SSH_PROXY_PID_FILE"
|
||||
echo "SSH прокси (SOCKS5) запущен на 127.0.0.1:1080."
|
||||
}
|
||||
|
||||
# 2. Остановка
|
||||
sshp-stop() {
|
||||
if [ -f "$SSH_PROXY_PID_FILE" ]; then
|
||||
PID=$(cat "$SSH_PROXY_PID_FILE")
|
||||
if kill "$PID" 2>/dev/null; then
|
||||
rm -f "$SSH_PROXY_PID_FILE"
|
||||
echo "SSH прокси (PID $PID) остановлен."
|
||||
else
|
||||
echo "Процесс $PID не найден. Очистка PID-файла..."
|
||||
rm -f "$SSH_PROXY_PID_FILE"
|
||||
fi
|
||||
else
|
||||
echo "Ошибка: Прокси не запущен."
|
||||
fi
|
||||
}
|
||||
|
||||
# 3. Статус
|
||||
sshp-status() {
|
||||
if [ -f "$SSH_PROXY_PID_FILE" ] && kill -0 $(cat "$SSH_PROXY_PID_FILE") 2>/dev/null; then
|
||||
PID=$(cat "$SSH_PROXY_PID_FILE")
|
||||
echo "Статус: РАБОТАЕТ (PID: $PID)"
|
||||
# Проверка прослушивания порта
|
||||
lsof -i -nP | grep "$PID" | grep LISTEN
|
||||
else
|
||||
echo "Статус: ОСТАНОВЛЕН"
|
||||
fi
|
||||
}
|
||||
|
||||
sshp-restart() {
|
||||
sshp-stop
|
||||
sleep 1
|
||||
sshp-start
|
||||
}
|
||||
|
||||
|
||||
activate() {
|
||||
local venv_dir=""
|
||||
if [[ -d ".venv" ]]; then
|
||||
venv_dir=".venv"
|
||||
elif [[ -d "venv" ]]; then
|
||||
venv_dir="venv"
|
||||
else
|
||||
for venv_dir in **/.venv **/venv; do
|
||||
[[ -d "$venv_dir" ]] && break
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ -n "$venv_dir" && -f "$venv_dir/bin/activate" ]]; then
|
||||
source "$venv_dir/bin/activate"
|
||||
else
|
||||
echo "venv/.venv not found"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
# ════════════════════════════════════════════════════════════
|
||||
# Keybindings
|
||||
# ════════════════════════════════════════════════════════════
|
||||
|
||||
# ═══ Режим редактирования ══════════════════════════════════
|
||||
# Использовать emacs режим (можно переключить на vi)
|
||||
bindkey -e
|
||||
|
||||
# Для vi режима раскомментируйте:
|
||||
# bindkey -v
|
||||
|
||||
# ═══ Навигация по строке ═══════════════════════════════════
|
||||
bindkey '^A' beginning-of-line # Ctrl+A - начало строки
|
||||
bindkey '^E' end-of-line # Ctrl+E - конец строки
|
||||
bindkey '^[[H' beginning-of-line # Home - начало строки
|
||||
bindkey '^[[F' end-of-line # End - конец строки
|
||||
|
||||
# ═══ Редактирование ════════════════════════════════════════
|
||||
bindkey '^K' kill-line # Ctrl+K - удалить до конца
|
||||
bindkey '^U' backward-kill-line # Ctrl+U - удалить до начала
|
||||
bindkey '^W' backward-kill-word # Ctrl+W - удалить слово назад
|
||||
bindkey '^Y' yank # Ctrl+Y - вставить
|
||||
|
||||
# ═══ Навигация по словам ═══════════════════════════════════
|
||||
bindkey '^[[1;5C' forward-word # Ctrl+Right - вперёд на слово
|
||||
bindkey '^[[1;5D' backward-word # Ctrl+Left - назад на слово
|
||||
bindkey '^[^[[C' forward-word # Alt+Right - вперёд на слово
|
||||
bindkey '^[^[[D' backward-word # Alt+Left - назад на слово
|
||||
|
||||
# ═══ История команд ════════════════════════════════════════
|
||||
|
||||
bindkey '^P' up-history # Ctrl+P - просто вверх
|
||||
bindkey '^N' down-history # Ctrl+N - просто вниз
|
||||
|
||||
# Оставляем Alt+Стрелки для чего-то другого или удаляем,
|
||||
# если они дублируют функционал.
|
||||
|
||||
# ═══ Автодополнение ════════════════════════════════════════
|
||||
bindkey '^I' complete-word # Tab - автодополнение
|
||||
bindkey '^[[Z' reverse-menu-complete # Shift+Tab - назад по меню
|
||||
|
||||
# Принять автопредложение (если загружен autosuggestions)
|
||||
if (( $+widgets[autosuggest-accept] )); then
|
||||
bindkey '^F' autosuggest-accept # Ctrl+F - принять предложение
|
||||
bindkey '^[[C' forward-char # Right - вперёд на символ (не принимая)
|
||||
bindkey '^ ' autosuggest-accept # Ctrl+Space - принять предложение
|
||||
fi
|
||||
|
||||
# ═══ FZF ═══════════════════════════════════════════════════
|
||||
# FZF key-bindings загружаются в plugins.zsh
|
||||
# Здесь можно переопределить привязки если нужно
|
||||
if command -v fzf &>/dev/null; then
|
||||
# Привязки уже установлены в plugins.zsh через key-bindings.zsh
|
||||
# Можно добавить дополнительные кастомные привязки здесь
|
||||
:
|
||||
fi
|
||||
# ═══ Полезные команды ══════════════════════════════════════
|
||||
bindkey '^L' clear-screen # Ctrl+L - очистить экран
|
||||
bindkey '^X^E' edit-command-line # Ctrl+X Ctrl+E - редактировать в $EDITOR
|
||||
|
||||
# Загрузить edit-command-line если нужно
|
||||
autoload -Uz edit-command-line
|
||||
zle -N edit-command-line
|
||||
|
||||
# ═══ Дополнительные привязки ═══════════════════════════════
|
||||
bindkey '^D' delete-char-or-list # Ctrl+D - удалить символ или показать список
|
||||
bindkey '^H' backward-delete-char # Ctrl+H - удалить символ назад
|
||||
bindkey '^?' backward-delete-char # Backspace - удалить символ назад
|
||||
|
||||
# ═══ Копирование/вставка (xclip) ══════════════════════════
|
||||
if command -v xclip &>/dev/null; then
|
||||
# Скопировать текущую команду в буфер обмена
|
||||
function _copy_command_to_clipboard() {
|
||||
echo -n "$BUFFER" | xclip -selection clipboard
|
||||
zle -M "Copied to clipboard"
|
||||
}
|
||||
zle -N _copy_command_to_clipboard
|
||||
bindkey '^X^C' _copy_command_to_clipboard # Ctrl+X Ctrl+C
|
||||
fi
|
||||
@@ -0,0 +1,48 @@
|
||||
# ════════════════════════════════════════════════════════════
|
||||
# Shell Options
|
||||
# ════════════════════════════════════════════════════════════
|
||||
|
||||
# ═══ История ═══════════════════════════════════════════════
|
||||
setopt EXTENDED_HISTORY # Записывать timestamp в историю
|
||||
setopt HIST_EXPIRE_DUPS_FIRST # Удалять дубликаты в первую очередь
|
||||
setopt HIST_IGNORE_DUPS # Не записывать дубликаты подряд
|
||||
setopt HIST_IGNORE_ALL_DUPS # Удалить старую запись если новая - дубликат
|
||||
setopt HIST_FIND_NO_DUPS # Не показывать дубликаты при поиске
|
||||
setopt HIST_IGNORE_SPACE # Не записывать команды начинающиеся с пробела
|
||||
setopt HIST_SAVE_NO_DUPS # Не сохранять дубликаты
|
||||
setopt HIST_REDUCE_BLANKS # Убирать лишние пробелы
|
||||
setopt HIST_VERIFY # Показывать команду перед выполнением из истории
|
||||
setopt SHARE_HISTORY # Делиться историей между сессиями
|
||||
|
||||
# ═══ Навигация ═════════════════════════════════════════════
|
||||
setopt AUTO_CD # cd в директорию просто набрав её имя
|
||||
setopt AUTO_PUSHD # Автоматически делать pushd
|
||||
setopt PUSHD_IGNORE_DUPS # Не добавлять дубликаты в стек директорий
|
||||
setopt PUSHD_SILENT # Не печатать стек после pushd/popd
|
||||
setopt PUSHD_TO_HOME # pushd без аргументов = pushd $HOME
|
||||
|
||||
# ═══ Дополнение ════════════════════════════════════════════
|
||||
setopt ALWAYS_TO_END # Курсор в конец при автодополнении
|
||||
setopt AUTO_MENU # Показывать меню при повторном tab
|
||||
setopt AUTO_LIST # Автоматически показывать список вариантов
|
||||
setopt COMPLETE_IN_WORD # Дополнять внутри слова
|
||||
unsetopt MENU_COMPLETE # Не вставлять первый вариант автоматически
|
||||
|
||||
# ═══ Глобы и расширения ════════════════════════════════════
|
||||
setopt EXTENDED_GLOB # Расширенный синтаксис глобов
|
||||
setopt GLOB_DOTS # Включать скрытые файлы в глобы
|
||||
setopt NOMATCH # Ошибка если паттерн не совпал
|
||||
setopt NUMERIC_GLOB_SORT # Сортировать числовые имена файлов численно
|
||||
|
||||
# ═══ Работа с командами ════════════════════════════════════
|
||||
setopt CORRECT # Исправлять опечатки в командах
|
||||
setopt CORRECT_ALL # Исправлять опечатки в аргументах
|
||||
setopt INTERACTIVE_COMMENTS # Разрешить комментарии в интерактивном режиме
|
||||
setopt MULTIOS # Множественные перенаправления
|
||||
setopt LONG_LIST_JOBS # Подробный вывод jobs
|
||||
|
||||
# ═══ Другое ════════════════════════════════════════════════
|
||||
setopt NOTIFY # Сообщать о завершении фоновых задач немедленно
|
||||
setopt NO_BEEP # Отключить звуковые сигналы
|
||||
setopt NO_HUP # Не убивать фоновые задачи при выходе
|
||||
setopt PROMPT_SUBST # Разрешить подстановки в промпте
|
||||
@@ -0,0 +1,107 @@
|
||||
# ════════════════════════════════════════════════════════════
|
||||
# Plugins (via Zinit)
|
||||
# ════════════════════════════════════════════════════════════
|
||||
|
||||
# ═══ Powerlevel10k Theme ═══════════════════════════════════
|
||||
# Загружаем ПЕРВЫМ для instant prompt
|
||||
zinit ice depth=1
|
||||
zinit light romkatv/powerlevel10k
|
||||
|
||||
# ═══ Turbo Mode ════════════════════════════════════════════
|
||||
# Плагины загружаются асинхронно для ускорения старта
|
||||
|
||||
# ═══ FZF key-bindings ══════════════════════════════════════
|
||||
# Загружаем ПЕРВЫМ, чтобы виджеты были определены до syntax-highlighting
|
||||
if command -v fzf &>/dev/null; then
|
||||
# Попробовать разные пути установки fzf
|
||||
if [[ -f /usr/share/fzf/key-bindings.zsh ]]; then
|
||||
source /usr/share/fzf/key-bindings.zsh
|
||||
elif [[ -f /usr/share/doc/fzf/examples/key-bindings.zsh ]]; then
|
||||
source /usr/share/doc/fzf/examples/key-bindings.zsh
|
||||
elif [[ -f ~/.fzf.zsh ]]; then
|
||||
source ~/.fzf.zsh
|
||||
fi
|
||||
fi
|
||||
|
||||
# ═══ Автодополнение ════════════════════════════════════════
|
||||
# zsh-completions - дополнительные автодополнения
|
||||
zinit ice wait lucid blockf atpull'zinit creinstall -q .'
|
||||
zinit light zsh-users/zsh-completions
|
||||
|
||||
# ═══ Автопредложения ═══════════════════════════════════════
|
||||
# zsh-autosuggestions - предложения из истории
|
||||
zinit ice wait lucid atload'_zsh_autosuggest_start'
|
||||
zinit light zsh-users/zsh-autosuggestions
|
||||
|
||||
# Настройки autosuggestions
|
||||
export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=#585b70'
|
||||
export ZSH_AUTOSUGGEST_STRATEGY=(history completion)
|
||||
export ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=20
|
||||
|
||||
# ═══ История ═══════════════════════════════════════════════
|
||||
zinit ice wait"0" lucid atload'
|
||||
# Привязываем стрелки к плагину (теперь они не будут глючить)
|
||||
bindkey "$terminfo[kcuu1]" history-substring-search-up
|
||||
bindkey "$terminfo[kcud1]" history-substring-search-down
|
||||
|
||||
# Настройка цветов (по желанию)
|
||||
HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND="fg=magenta,bold"
|
||||
HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND="fg=red,bold"
|
||||
'
|
||||
zinit light zsh-users/zsh-history-substring-search
|
||||
|
||||
# ═══ FZF ═══════════════════════════════════════════════════
|
||||
# fzf - интерактивный поиск
|
||||
if command -v fzf &>/dev/null; then
|
||||
# fzf-tab - fzf для автодополнения
|
||||
zinit ice wait lucid
|
||||
zinit light Aloxaf/fzf-tab
|
||||
|
||||
# Настройки fzf-tab
|
||||
zstyle ':fzf-tab:*' fzf-command fzf
|
||||
zstyle ':fzf-tab:*' fzf-pad 4
|
||||
zstyle ':fzf-tab:complete:cd:*' fzf-preview 'eza -1 --color=always $realpath 2>/dev/null || ls -1 --color=always $realpath'
|
||||
zstyle ':fzf-tab:complete:*:*' fzf-preview 'less ${(Q)realpath} 2>/dev/null || eza -1 --color=always ${(Q)realpath} 2>/dev/null || ls -1 --color=always ${(Q)realpath}'
|
||||
fi
|
||||
|
||||
# ═══ Навигация ═════════════════════════════════════════════
|
||||
# zoxide - умный cd с историей
|
||||
if command -v zoxide &>/dev/null; then
|
||||
eval "$(zoxide init zsh)"
|
||||
fi
|
||||
|
||||
# ═══ Git ═══════════════════════════════════════════════════
|
||||
# Быстрые git алиасы и функции
|
||||
zinit ice wait lucid
|
||||
zinit snippet OMZ::plugins/git/git.plugin.zsh
|
||||
|
||||
# ═══ Дополнительные инструменты ════════════════════════════
|
||||
# sudo - нажать ESC дважды чтобы добавить sudo
|
||||
zinit ice wait lucid
|
||||
zinit snippet OMZ::plugins/sudo/sudo.plugin.zsh
|
||||
|
||||
# extract - универсальная распаковка архивов
|
||||
zinit ice wait lucid
|
||||
zinit snippet OMZ::plugins/extract/extract.plugin.zsh
|
||||
|
||||
# colored-man-pages - цветные man страницы
|
||||
zinit ice wait lucid
|
||||
zinit snippet OMZ::plugins/colored-man-pages/colored-man-pages.plugin.zsh
|
||||
|
||||
# docker - автодополнение для docker
|
||||
if command -v docker &>/dev/null; then
|
||||
zinit ice wait lucid as'completion'
|
||||
zinit snippet OMZP::docker
|
||||
fi
|
||||
|
||||
# kubectl - автодополнение для kubectl
|
||||
if command -v kubectl &>/dev/null; then
|
||||
zinit ice wait lucid as'completion'
|
||||
zinit snippet OMZ::plugins/kubectl/kubectl.plugin.zsh
|
||||
fi
|
||||
|
||||
# ═══ Подсветка синтаксиса (ПОСЛЕДНИЙ плагин) ═══════════════
|
||||
# zsh-syntax-highlighting - ОБЯЗАТЕЛЬНО загружать последним
|
||||
# Это гарантирует, что все виджеты уже определены
|
||||
zinit ice wait lucid atinit'zpcompinit; zpcdreplay'
|
||||
zinit light zsh-users/zsh-syntax-highlighting
|
||||
@@ -0,0 +1,24 @@
|
||||
# ════════════════════════════════════════════════════════════
|
||||
# Prompt Configuration (Powerlevel10k)
|
||||
# ════════════════════════════════════════════════════════════
|
||||
|
||||
# ═══ Powerlevel10k Instant Prompt ══════════════════════════
|
||||
# Должен быть в самом начале ~/.zshrc для мгновенного промпта
|
||||
# Перенесен сюда для модульности, но в идеале должен быть раньше
|
||||
|
||||
# Включить Powerlevel10k instant prompt. Должно быть близко к началу ~/.config/zsh/.zshrc.
|
||||
# Инициализация кода, который может требовать ввод консоли или печать, должна идти выше этого блока.
|
||||
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
||||
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
||||
fi
|
||||
|
||||
# ═══ Powerlevel10k Theme ═══════════════════════════════════
|
||||
# Загрузка через zinit (будет установлена автоматически)
|
||||
# Примечание: этот блок должен быть в plugins.zsh, но оставлен здесь для ясности
|
||||
# zinit ice depth=1
|
||||
# zinit light romkatv/powerlevel10k
|
||||
|
||||
# ═══ P10k Configuration ════════════════════════════════════
|
||||
# Загрузка конфигурации p10k
|
||||
# Для настройки запустите: p10k configure
|
||||
[[ -f ~/.config/zsh/.p10k.zsh ]] && source ~/.config/zsh/.p10k.zsh
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,61 @@
|
||||
# ════════════════════════════════════════════════════════════
|
||||
# Ada's Modular ZSH Configuration
|
||||
# ════════════════════════════════════════════════════════════
|
||||
|
||||
# ═══ Powerlevel10k Instant Prompt ══════════════════════════
|
||||
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
|
||||
# Initialization code that may require console input (password prompts, [y/n]
|
||||
# confirmations, etc.) must go above this block; everything else may go below.
|
||||
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
|
||||
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
|
||||
fi
|
||||
|
||||
# Путь к конфигурации zsh
|
||||
export ZDOTDIR="${ZDOTDIR:-${HOME}/.config/zsh}"
|
||||
ZSH_CONFIG_DIR="${ZDOTDIR}/config"
|
||||
|
||||
# ═══ Zinit (Plugin Manager) ════════════════════════════════
|
||||
# Автоматическая установка zinit при первом запуске
|
||||
ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git"
|
||||
if [[ ! -d "$ZINIT_HOME" ]]; then
|
||||
print -P "%F{blue}▓▒░ Установка zinit...%f"
|
||||
mkdir -p "$(dirname $ZINIT_HOME)"
|
||||
git clone https://github.com/zdharma-continuum/zinit.git "$ZINIT_HOME"
|
||||
fi
|
||||
|
||||
# Загрузка zinit
|
||||
source "${ZINIT_HOME}/zinit.zsh"
|
||||
|
||||
# ═══ Загрузка модулей ══════════════════════════════════════
|
||||
# Порядок загрузки важен!
|
||||
source "${ZSH_CONFIG_DIR}/env.zsh" # Переменные окружения
|
||||
source "${ZSH_CONFIG_DIR}/options.zsh" # Настройки оболочки
|
||||
source "${ZSH_CONFIG_DIR}/plugins.zsh" # Плагины через zinit
|
||||
source "${ZSH_CONFIG_DIR}/completion.zsh" # Автодополнение
|
||||
source "${ZSH_CONFIG_DIR}/aliases.zsh" # Алиасы
|
||||
source "${ZSH_CONFIG_DIR}/functions.zsh" # Пользовательские функции
|
||||
source "${ZSH_CONFIG_DIR}/keybindings.zsh" # Горячие клавиши
|
||||
source "${ZSH_CONFIG_DIR}/prompt.zsh" # Настройка промпта (starship)
|
||||
|
||||
|
||||
# ═══ Локальные настройки (опционально) ═════════════════════
|
||||
# Для машинно-специфичных настроек
|
||||
[[ -f "${ZSH_CONFIG_DIR}/local.zsh" ]] && source "${ZSH_CONFIG_DIR}/local.zsh"
|
||||
|
||||
# To customize prompt, run `p10k configure` or edit ~/.config/zsh/.p10k.zsh.
|
||||
[[ ! -f ~/.config/zsh/.p10k.zsh ]] || source ~/.config/zsh/.p10k.zsh
|
||||
|
||||
# To customize prompt, run `p10k configure` or edit /home/ada/.config/zsh/.p10k.zsh.
|
||||
[[ ! -f /home/ada/.config/zsh/.p10k.zsh ]] || source /home/ada/.config/zsh/.p10k.zsh
|
||||
|
||||
|
||||
|
||||
export NVM_DIR="$HOME/.config/nvm"
|
||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
|
||||
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
|
||||
|
||||
|
||||
# . "$HOME/.local/share/../bin/env"
|
||||
|
||||
# To customize prompt, run `p10k configure` or edit ~/.dotfiles/zsh/.config/zsh/.p10k.zsh.
|
||||
[[ ! -f ~/.dotfiles/zsh/.config/zsh/.p10k.zsh ]] || source ~/.dotfiles/zsh/.config/zsh/.p10k.zsh
|
||||
Reference in New Issue
Block a user