diff --git a/.config/git/config b/.config/git/config index aea81d6..b58bf7f 100644 --- a/.config/git/config +++ b/.config/git/config @@ -25,3 +25,5 @@ rebase = true [credential] helper = cache +[url "https://github.com"] + insteadOf = git://github.com diff --git a/.config/npm/npmrc b/.config/npm/npmrc deleted file mode 100644 index b340cfc..0000000 --- a/.config/npm/npmrc +++ /dev/null @@ -1,5 +0,0 @@ -prefix=${XDG_DATA_HOME}/npm -cache=${XDG_CACHE_HOME}/npm -tmp=${XDG_RUNTIME_DIR}/npm -init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js -registry=https://registry.npm.taobao.org/ diff --git a/.config/zsh/.gitignore b/.config/zsh/.gitignore new file mode 100644 index 0000000..7006e11 --- /dev/null +++ b/.config/zsh/.gitignore @@ -0,0 +1 @@ +/hostrc.d/env.zsh diff --git a/.config/zsh/.zprofile b/.config/zsh/.zprofile new file mode 100644 index 0000000..1d6fc5d --- /dev/null +++ b/.config/zsh/.zprofile @@ -0,0 +1 @@ +source ${ZDOTDIR}/zprofile diff --git a/.config/zsh/.zshrc b/.config/zsh/.zshrc index 8ae73e2..c1012d1 100644 --- a/.config/zsh/.zshrc +++ b/.config/zsh/.zshrc @@ -1,189 +1 @@ -# zle基础配置 -setopt no_beep # 不响铃 -setopt correct # 修正命令 -setopt interactive_comments # 交互模式支持注释 - -# 与当前主机相关的配置 -if [[ -d ${XDG_CONFIG_HOME}/zsh/hostrc.d ]]; then - for f in ${XDG_CONFIG_HOME}/zsh/hostrc.d/?*.zsh; do - source $f - done; unset f -fi - -# 插件 <<<------------------------------ -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折叠路径 -if [[ -f ${ZDOTDIR}/functions/fish_collapsed_pwd.zsh ]]; then - source ${ZDOTDIR}/functions/fish_collapsed_pwd.zsh -fi -# >>>----------------------------------- - -# 历史记录 <<<-------------------------- -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} -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='rg --files --no-ignore --hidden' -export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" -# >>>----------------------------------- - -# 按键绑定 <<<-------------------------- -# 默认Emacs -bindkey -e -# fzf -if [[ -f /usr/share/fzf/key-bindings.zsh ]]; then - source /usr/share/fzf/key-bindings.zsh -fi -# >>>----------------------------------- - -# 提示符 <<<---------------------------- -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[black]%} pyvenv %{$reset_color%}" - else - PROMPT_pyvenv="" - 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_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 v='nvim -R -c "nnoremap q :exit"' && compdef v=nvim # 使用neovim作为pager -alias e='nvim' && compdef e=nvim -alias es='nvim -S' && compdef es=nvim -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 ssh='TERM=xterm-256color ssh' -# >>>----------------------------------- - -# vim: foldmethod=marker:foldmarker=<<<---,>>>--- +source ${ZDOTDIR}/zshrc diff --git a/.config/zsh/functions/fish_collapsed_pwd.zsh b/.config/zsh/functions/fish_collapsed_pwd similarity index 95% rename from .config/zsh/functions/fish_collapsed_pwd.zsh rename to .config/zsh/functions/fish_collapsed_pwd index 411cec4..8b38cff 100644 --- a/.config/zsh/functions/fish_collapsed_pwd.zsh +++ b/.config/zsh/functions/fish_collapsed_pwd @@ -1,7 +1,5 @@ -#! /usr/bin/env zsh - # https://zhuanlan.zhihu.com/p/51008087 -function _fish_collapsed_pwd() { +() { local pwd="$1" # fix end slash local home="${HOME%/}" @@ -42,3 +40,5 @@ function _fish_collapsed_pwd() { local IFS="/" echo "${elements[*]}" } + +# vim:set filetype=zsh: diff --git a/.config/zsh/hostrc.d/.gitignore b/.config/zsh/hostrc.d/.gitignore deleted file mode 100644 index 5709d6b..0000000 --- a/.config/zsh/hostrc.d/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/individual.zsh diff --git a/.config/zsh/hostrc.d/arch.zsh b/.config/zsh/hostrc.d/funcs.zsh similarity index 100% rename from .config/zsh/hostrc.d/arch.zsh rename to .config/zsh/hostrc.d/funcs.zsh diff --git a/.config/zsh/tools/install.sh b/.config/zsh/tools/install.sh new file mode 100755 index 0000000..eb67d61 --- /dev/null +++ b/.config/zsh/tools/install.sh @@ -0,0 +1,12 @@ +#!/bin/zsh -e + +zinit_bin_dir=${XDG_DATA_HOME:-~/.data}/zinit/bin + +if [[ -e $zinit_bin_dir ]]; then + echo Clean up old zinit bin dir. + rm -rf $zinit_bin_dir +fi + +echo Installing zinit... +git clone --depth 1 --single-branch \ + https://github.com/zdharma/zinit.git $zinit_bin_dir diff --git a/.config/zsh/tools/update.sh b/.config/zsh/tools/update.sh new file mode 100755 index 0000000..1d5c8a4 --- /dev/null +++ b/.config/zsh/tools/update.sh @@ -0,0 +1,11 @@ +#!/bin/zsh -ie + +if command -v zinit &>/dev/null; then + echo Updating plugins... + zinit update --all --parallel +else + echo zinit is missing >&2 +fi + +echo +echo Done. diff --git a/.config/zsh/zshrc b/.config/zsh/zshrc new file mode 100644 index 0000000..0145319 --- /dev/null +++ b/.config/zsh/zshrc @@ -0,0 +1,220 @@ +# 基础配置 +setopt no_beep # 不响铃 +setopt correct # 修正命令 +setopt interactive_comments # 交互模式支持注释 + +fpath=(${ZDOTDIR}/functions ${ZDOTDIR}/Completion $fpath) + +# 插件 <<<------------------------------ +declare -A ZINIT +ZINIT[HOME_DIR]=${XDG_DATA_HOME}/zinit +ZINIT[BIN_DIR]=${ZINIT[HOME_DIR]}/bin +source ${ZINIT[BIN_DIR]}/zinit.zsh + +zinit light zdharma/fast-syntax-highlighting # 语法高亮 +zinit ice lucid wait atload='_zsh_autosuggest_start' +zinit light zsh-users/zsh-autosuggestions # 提示建议 +zinit ice lucid wait +zinit light 'hlissner/zsh-autopair' # 自动闭合符号 +zinit light zsh-users/zsh-completions # 更多命令补全 +zinit light skywind3000/z.lua # 快速跳转目录 + +# z.lua <<<----------------------------- +# 数据文件路径 +export _ZL_DATA=${XDG_DATA_HOME}/zsh/zlua +# 仅在当前路径$PWD改变时才更新数据库 +export _ZL_ADD_ONCE=1 +# 在跳转后显示目标路径名称 +export _ZL_ECHO=1 +# 增强匹配模式 +export _ZL_MATCH_MODE=1 +# >>>----------------------------------- +# 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=${_icon_error:-E} + else + PROMPT_err="" + fi + + if command -v fish_collapsed_pwd &>/dev/null; then + _collapsed_pwd=$(fish_collapsed_pwd) + fi + if ! (($DISABLE_RPROMPT_host)); then + PROMPT_host="${_color_host}${_color_invert} %n@%m ${_color_reset}" + fi + # 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_sign}${PROMPT_err}${PROMPT_git} ${PROMPT_cwd}${PROMPT_tail}${_color_reset}" + RPROMPT="${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=<<<---,>>>---