diff --git a/.config/zsh/.zprofile b/.config/zsh/.zprofile index 42f2280..1d6fc5d 100644 --- a/.config/zsh/.zprofile +++ b/.config/zsh/.zprofile @@ -1,4 +1 @@ -# Autostart X -if systemctl -q is-active graphical.target && [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then - xinit qtile -fi +source ${ZDOTDIR}/zprofile diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc index f8e42e3..c1012d1 100644 --- a/.config/zsh/.zshrc +++ b/.config/zsh/.zshrc @@ -1,216 +1 @@ -# 基础配置 -setopt no_beep # 不响铃 -setopt correct # 修正命令 -setopt interactive_comments # 交互模式支持注释 - -fpath=(${ZDOTDIR}/functions ${ZDOTDIR}/Completion $fpath) - -# 插件 <<<------------------------------ -command -v antibody &>/dev/null && source <(antibody init) && \ -antibody bundle <>>----------------------------------- -# zsh-autosuggestions <<<--------------- -# 建议策略: history, completion, match_prev_cmd -ZSH_AUTOSUGGEST_STRATEGY=(history completion) -# 开启异步模式 -ZSH_AUTOSUGGEST_USE_ASYNC=1 -# >>>----------------------------------- -# pkgfile: 命令找不到时提示安装包 -if [[ -f /usr/share/doc/pkgfile/command-not-found.zsh ]]; then - source /usr/share/doc/pkgfile/command-not-found.zsh -fi -# function: 模仿fish折叠路径 -autoload -Uz fish_collapsed_pwd -# >>>----------------------------------- - -# 历史记录 <<<-------------------------- -HISTSIZE=10000 -SAVEHIST=100000 -setopt share_history -# 去掉重复和空白 -setopt hist_ignore_dups hist_reduce_blanks hist_find_no_dups -# >>>----------------------------------- - -# 命令补全 <<<-------------------------- -autoload -Uz compinit -# 指定缓存文件所在目录必须先确保该目录存在 -if [[ ! -d ${XDG_CACHE_HOME}/zsh/ ]]; then - mkdir -p ${XDG_CACHE_HOME}/zsh/ -fi -compinit -d ${XDG_CACHE_HOME}/zsh/zcompdump-${ZSH_VERSION} - -# 补全失败时的提示 -zstyle ':completion:*:warnings' format $'\e[31m -- No Matches Found --\e[0m' -setopt complete_aliases # 补全别名 -setopt list_packed # 补全列表压缩列宽 -zstyle :compinstall filename ${XDG_CONFIG_HOME}/zsh/.zshrc -zstyle ':completion:*' menu select -# 模糊修正 -zstyle ':completion:*' matcher-list '' 'm:{-a-zA-Z}={_A-Za-z}' -# fzf -if [[ -f /usr/share/fzf/completion.zsh ]]; then - source /usr/share/fzf/completion.zsh -fi -export FZF_COMPLETION_TRIGGER='~~' -export FZF_DEFAULT_COMMAND='fd -uu -E .git -E .node_modules' -export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" - -compdef proxychains=command - -# 当前环境的配置 -_ZSH_HOSTRC_COMMAND=${XDG_CONFIG_HOME}/zsh/hostrc.d/funcs.zsh -if [[ -e $_ZSH_HOSTRC_COMMAND ]]; then - source $_ZSH_HOSTRC_COMMAND -fi -# >>>----------------------------------- - -# 按键绑定 <<<-------------------------- -# 默认Emacs -bindkey -e -# 用$EDITOR编辑命令 -autoload -Uz edit-command-line -zle -N edit-command-line -bindkey '^X^E' edit-command-line -# fzf -if [[ -f /usr/share/fzf/key-bindings.zsh ]]; then - source /usr/share/fzf/key-bindings.zsh -fi -# 默认 WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' -export WORDCHARS='*?_-.[]~=&;!#$%^(){}<>' -# >>>----------------------------------- - -# 提示符 <<<---------------------------- -setopt prompt_subst -autoload -Uz promptinit -promptinit -autoload -Uz colors -colors -setopt transient_rprompt # 右提示符只出现一次 - -_ZSH_HOSTRC_PROMPT=${XDG_CONFIG_HOME}/zsh/hostrc.d/colors.zsh -if [[ -e $_ZSH_HOSTRC_PROMPT ]]; then - source $_ZSH_HOSTRC_PROMPT -fi - -if [[ -n ${_SPEC_color_host} ]]; then - _color_host=${_SPEC_color_host} -else - _color_host=$'%{\e[38;2;199;146;234m%}' -fi -_color_invert=$'%{\e[7m%}' -_color_reset=$'%{\e[0m%}' -if [[ -z ${_SPEC_PROMPT_disable_icon} ]]; then - _icon_error="😈" - _icon_gitdir="  " -fi - -ZLE_RPROMPT_INDENT=-1 # 去掉右提示符右侧多余空白 -precmd() { - # 上一条命令的运行结果 - if [ $? -ne 0 ]; then - PROMPT_err="%{$bg[red]$fg[black]%} ${_icon_error:-E} %{$reset_color%}" - else - PROMPT_err="" - fi - - if command -v fish_collapsed_pwd &>/dev/null; then - _collapsed_pwd=$(fish_collapsed_pwd) - fi - PROMPT_host="${_color_host}${_color_invert} %n@%m ${_color_reset}" - # ssh标志 - if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then - PROMPT_ssh="%{$bg[yellow]$fg[black]%} ssh %{$reset_color%}" - else - PROMPT_ssh="" - fi - # tmux标志 - if [ -n "$TMUX" ]; then - PROMPT_tmux="%{$bg[green]$fg[black]%} tmux %{$reset_color%}" - else - PROMPT_tmux="" - fi - # python virtualenv标志 - if [ -n "$VIRTUAL_ENV" ]; then - PROMPT_pyvenv="%{$bg[cyan]$fg[white]%} pyvenv %{$reset_color%}" - else - PROMPT_pyvenv="" - fi - # nvm标志 - if [ -n "$NVM_BIN" ]; then - PROMPT_nvm="%{$bg[cyan]$fg[white]%} nvm %{$reset_color%}" - else - PROMPT_nvm="" - fi - if command -v __git_ps1 &>/dev/null; then - PROMPT_git=$(__git_ps1 " %s${_icon_gitdir:-)}") - fi - PROMPT_cwd=${_collapsed_pwd} - if [[ $UID == 0 || $EUID == 0 ]]; then - PROMPT_tail=" # " - else - PROMPT_tail=" $ " - fi - - PROMPT="${_color_host}▒${PROMPT_git} ${PROMPT_cwd}${PROMPT_tail}${_color_reset}" - RPROMPT="${PROMPT_err}${PROMPT_pyvenv}${PROMPT_nvm}${PROMPT_tmux}${PROMPT_ssh}${PROMPT_host}" - - # 设置终端标题 - print -n "\e]0;zsh ( ${_collapsed_pwd} )\a" -} -# git <<<------------------------------- -if [[ -f /usr/share/git/completion/git-prompt.sh ]]; then - source /usr/share/git/completion/git-prompt.sh -fi -GIT_PS1_SHOWDIRTYSTATE=1 -GIT_PS1_SHOWSTASHSTATE=1 -GIT_PS1_SHOWUNTRACKEDFILES=1 -GIT_PS1_STATESEPARATOR= -GIT_PS1_SHOWUPSTREAM="auto" -GIT_PS1_DESCRIBE_STYLE="default" -# >>>----------------------------------- -# >>>----------------------------------- - -# 命令别名 <<<----------------------------- -# sudo后面的命令可以是别名 -alias sudo='sudo ' -# 设置命令默认行为 -alias ls='ls --color=auto --time-style=iso --human-readable' -alias grep='grep --color=auto' -alias diff='diff --color=auto' -alias mv='mv -i' - -alias sl='ls' -alias l='ls -l' -alias la='ls -Al' -mcd() { mkdir -p $1 && cd $1 } - -alias x='xdg-open' -alias v='nvim -R -c "nnoremap q :exit"' && compdef v=nvim # 使用neovim作为pager -if [[ -e $VIMRUNTIME ]]; then - alias e='nvr' -else - alias e='nvim' && compdef e=nvim -fi -alias g='git' && compdef g=git -alias py='python' && compdef py=python -alias config='/usr/bin/git --git-dir=$HOME/.myconf/ --work-tree=$HOME' && compdef config=git -alias config.edit='GIT_DIR=$HOME/.myconf GIT_WORK_TREE=$HOME nvim' && compdef config.edit=nvim -alias ssh='TERM=xterm-256color ssh' -alias mountdisk="mount | grep -E '^(/dev/sd|/dev/nvme|/dev/mmcblk|gvfsd-fuse)' | awk '{print \$1 \"\t\" \$5 \"\t\" \$3 \"\n\t\t\" \$6}'" -# >>>----------------------------------- - -# vim: foldmethod=marker:foldmarker=<<<---,>>>--- +source ${ZDOTDIR}/zshrc diff --git a/.config/zsh/zprofile b/.config/zsh/zprofile new file mode 100644 index 0000000..42f2280 --- /dev/null +++ b/.config/zsh/zprofile @@ -0,0 +1,4 @@ +# Autostart X +if systemctl -q is-active graphical.target && [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then + xinit qtile +fi diff --git a/.config/zsh/zshrc b/.config/zsh/zshrc new file mode 100644 index 0000000..9b630ed --- /dev/null +++ b/.config/zsh/zshrc @@ -0,0 +1,212 @@ +# 基础配置 +setopt no_beep # 不响铃 +setopt correct # 修正命令 +setopt interactive_comments # 交互模式支持注释 + +fpath=(${ZDOTDIR}/functions ${ZDOTDIR}/Completion $fpath) + +# 插件 <<<------------------------------ +command -v antibody &>/dev/null && source <(antibody init) && \ +antibody bundle <>>----------------------------------- +# zsh-autosuggestions <<<--------------- +# 建议策略: history, completion, match_prev_cmd +ZSH_AUTOSUGGEST_STRATEGY=(history completion) +# 开启异步模式 +ZSH_AUTOSUGGEST_USE_ASYNC=1 +# >>>----------------------------------- +# pkgfile: 命令找不到时提示安装包 +if [[ -f /usr/share/doc/pkgfile/command-not-found.zsh ]]; then + source /usr/share/doc/pkgfile/command-not-found.zsh +fi +# function: 模仿fish折叠路径 +autoload -Uz fish_collapsed_pwd +# >>>----------------------------------- + +# 历史记录 <<<-------------------------- +HISTSIZE=10000 +SAVEHIST=100000 +setopt share_history +# 去掉重复和空白 +setopt hist_ignore_dups hist_reduce_blanks hist_find_no_dups +# >>>----------------------------------- + +# 命令补全 <<<-------------------------- +autoload -Uz compinit +# 指定缓存文件所在目录必须先确保该目录存在 +if [[ ! -d ${XDG_CACHE_HOME}/zsh/ ]]; then + mkdir -p ${XDG_CACHE_HOME}/zsh/ +fi +compinit -d ${XDG_CACHE_HOME}/zsh/zcompdump-${ZSH_VERSION} + +# 补全失败时的提示 +zstyle ':completion:*:warnings' format $'\e[31m -- No Matches Found --\e[0m' +setopt complete_aliases # 补全别名 +setopt list_packed # 补全列表压缩列宽 +zstyle :compinstall filename ${ZDOTDIR}/zshrc +zstyle ':completion:*' menu select +# 模糊修正 +zstyle ':completion:*' matcher-list '' 'm:{-a-zA-Z}={_A-Za-z}' +# fzf +if [[ -f /usr/share/fzf/completion.zsh ]]; then + source /usr/share/fzf/completion.zsh +fi +export FZF_COMPLETION_TRIGGER='~~' +export FZF_DEFAULT_COMMAND='fd -uu -E .git -E .node_modules' +export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" + +compdef proxychains=command + +# 当前环境的配置 +for i in ${ZDOTDIR}/hostrc.d/*.zsh; do +if [[ -f $i ]]; then + source $i +fi +done; unset i +# >>>----------------------------------- + +# 按键绑定 <<<-------------------------- +# 默认Emacs +bindkey -e +# 用$EDITOR编辑命令 +autoload -Uz edit-command-line +zle -N edit-command-line +bindkey '^X^E' edit-command-line +# fzf +if [[ -f /usr/share/fzf/key-bindings.zsh ]]; then + source /usr/share/fzf/key-bindings.zsh +fi +# 默认 WORDCHARS='*?_-.[]~=/&;!#$%^(){}<>' +export WORDCHARS='*?_-.[]~=&;!#$%^(){}<>' +# >>>----------------------------------- + +# 提示符 <<<---------------------------- +setopt prompt_subst +autoload -Uz promptinit +promptinit +autoload -Uz colors +colors +setopt transient_rprompt # 右提示符只出现一次 + +if [[ -n ${_SPEC_color_host} ]]; then + _color_host=${_SPEC_color_host} +else + _color_host=$'%{\e[38;2;199;146;234m%}' +fi +_color_invert=$'%{\e[7m%}' +_color_reset=$'%{\e[0m%}' +if [[ -z ${_SPEC_PROMPT_disable_icon} ]]; then + _icon_error="😈" + _icon_gitdir="  " +fi + +ZLE_RPROMPT_INDENT=-1 # 去掉右提示符右侧多余空白 +precmd() { + # 上一条命令的运行结果 + if [ $? -ne 0 ]; then + PROMPT_err="%{$bg[red]$fg[black]%} ${_icon_error:-E} %{$reset_color%}" + else + PROMPT_err="" + fi + + if command -v fish_collapsed_pwd &>/dev/null; then + _collapsed_pwd=$(fish_collapsed_pwd) + fi + PROMPT_host="${_color_host}${_color_invert} %n@%m ${_color_reset}" + # ssh标志 + if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then + PROMPT_ssh="%{$bg[yellow]$fg[black]%} ssh %{$reset_color%}" + else + PROMPT_ssh="" + fi + # tmux标志 + if [ -n "$TMUX" ]; then + PROMPT_tmux="%{$bg[green]$fg[black]%} tmux %{$reset_color%}" + else + PROMPT_tmux="" + fi + # python virtualenv标志 + if [ -n "$VIRTUAL_ENV" ]; then + PROMPT_pyvenv="%{$bg[cyan]$fg[white]%} pyvenv %{$reset_color%}" + else + PROMPT_pyvenv="" + fi + # nvm标志 + if [ -n "$NVM_BIN" ]; then + PROMPT_nvm="%{$bg[cyan]$fg[white]%} nvm %{$reset_color%}" + else + PROMPT_nvm="" + fi + if command -v __git_ps1 &>/dev/null; then + PROMPT_git=$(__git_ps1 " %s${_icon_gitdir:-)}") + fi + PROMPT_cwd=${_collapsed_pwd} + if [[ $UID == 0 || $EUID == 0 ]]; then + PROMPT_tail=" # " + else + PROMPT_tail=" $ " + fi + + PROMPT="${_color_host}▒${PROMPT_git} ${PROMPT_cwd}${PROMPT_tail}${_color_reset}" + RPROMPT="${PROMPT_err}${PROMPT_pyvenv}${PROMPT_nvm}${PROMPT_tmux}${PROMPT_ssh}${PROMPT_host}" + + # 设置终端标题 + print -n "\e]0;zsh ( ${_collapsed_pwd} )\a" +} +# git <<<------------------------------- +if [[ -f /usr/share/git/completion/git-prompt.sh ]]; then + source /usr/share/git/completion/git-prompt.sh +fi +GIT_PS1_SHOWDIRTYSTATE=1 +GIT_PS1_SHOWSTASHSTATE=1 +GIT_PS1_SHOWUNTRACKEDFILES=1 +GIT_PS1_STATESEPARATOR= +GIT_PS1_SHOWUPSTREAM="auto" +GIT_PS1_DESCRIBE_STYLE="default" +# >>>----------------------------------- +# >>>----------------------------------- + +# 命令别名 <<<----------------------------- +# sudo后面的命令可以是别名 +alias sudo='sudo ' +# 设置命令默认行为 +alias ls='ls --color=auto --time-style=iso --human-readable' +alias grep='grep --color=auto' +alias diff='diff --color=auto' +alias mv='mv -i' + +alias sl='ls' +alias l='ls -l' +alias la='ls -Al' +mcd() { mkdir -p $1 && cd $1 } + +alias x='xdg-open' +alias v='nvim -R -c "nnoremap q :exit"' && compdef v=nvim # 使用neovim作为pager +if [[ -e $VIMRUNTIME ]]; then + alias e='nvr' +else + alias e='nvim' && compdef e=nvim +fi +alias g='git' && compdef g=git +alias py='python' && compdef py=python +alias config='/usr/bin/git --git-dir=$HOME/.myconf/ --work-tree=$HOME' && compdef config=git +alias config.edit='GIT_DIR=$HOME/.myconf GIT_WORK_TREE=$HOME nvim' && compdef config.edit=nvim +alias ssh='TERM=xterm-256color ssh' +alias mountdisk="mount | grep -E '^(/dev/sd|/dev/nvme|/dev/mmcblk|gvfsd-fuse)' | awk '{print \$1 \"\t\" \$5 \"\t\" \$3 \"\n\t\t\" \$6}'" +# >>>----------------------------------- + +# vim: foldmethod=marker:foldmarker=<<<---,>>>---