From c5be794640a6d66f5d1f0ddeee9c2bd3d381ce69 Mon Sep 17 00:00:00 2001 From: gwbeip Date: Wed, 21 Jan 2026 22:50:39 +0800 Subject: [PATCH] reconstruct dir --- zsh/functions/brew.sh | 24 ++++ zsh/functions/check.sh | 106 +++++++++++----- zsh/functions/install.sh | 173 +++++++++++---------------- zsh/settings/command_history.sh | 20 ++++ zsh/settings/language_evnironment.sh | 3 + zsh/settings/useful_exports.sh | 21 ++++ zsh/zshrc | 109 +++++++---------- 7 files changed, 263 insertions(+), 193 deletions(-) create mode 100644 zsh/functions/brew.sh create mode 100644 zsh/settings/command_history.sh create mode 100644 zsh/settings/language_evnironment.sh create mode 100644 zsh/settings/useful_exports.sh diff --git a/zsh/functions/brew.sh b/zsh/functions/brew.sh new file mode 100644 index 0000000..fafe3ba --- /dev/null +++ b/zsh/functions/brew.sh @@ -0,0 +1,24 @@ +# Homebrew Tsinghua mirror for macOS +if [[ $OS != "Darwin" ]]; then + return +fi + +function brewthu() { + if [[ $HOMEBREW_BOTTLE_DOMAIN = "" ]]; then + export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api" + export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles" + export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git" + export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git" + export HOMEBREW_PIP_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple" + # Bottles + export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles" + else + unset HOMEBREW_API_DOMAIN + unset HOMEBREW_BOTTLE_DOMAIN + unset HOMEBREW_BREW_GIT_REMOTE + unset HOMEBREW_CORE_GIT_REMOTE + unset HOMEBREW_PIP_INDEX_URL + # Bottles + unset HOMEBREW_BOTTLE_DOMAIN + fi +} diff --git a/zsh/functions/check.sh b/zsh/functions/check.sh index a5407e1..5bf70aa 100644 --- a/zsh/functions/check.sh +++ b/zsh/functions/check.sh @@ -1,36 +1,86 @@ #!/bin/bash -# check for git -if ! command -v git >/dev/null 2>&1; then - echo "Git is not installed." -fi +function check_zsh_polyjuice() { + # check for zsh-autosuggestions + if [[ ! -f $ZSH_PLUGINS_PATH/zsh-autosuggestions/zsh-autosuggestions.zsh ]]; then + echo "zsh-autosuggestions is not installed." + fi -# check for python -if ! command -v python >/dev/null 2>&1; then - echo "Python is not installed." -fi + # check for zsh-syntax-highlighting + if [[ ! -f $ZSH_PLUGINS_PATH/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]]; then + echo "zsh-syntax-highlighting is not installed." + fi -# check for rust -if ! command -v cargo >/dev/null 2>&1; then - echo "Rust is not installed." -fi + # check for zsh-autocomplete + if [[ ! -f $ZSH_PLUGINS_PATH/zsh-autocomplete/zsh-autocomplete.plugin.zsh ]]; then + echo "zsh-autocomplete is not installed." + fi -# check for verilator -if ! command -v verilator >/dev/null 2>&1; then - echo "Verilator is not installed." -fi + # check for fzf-tab + if [[ ! -f $ZSH_PLUGINS_PATH/fzf-tab/fzf-tab.zsh ]]; then + echo "fzf-tab is not installed." + fi -# check for iverilog -if ! command -v iverilog >/dev/null 2>&1; then - echo "iverilog is not installed." -fi + # check for oh-my-zsh + if [[ ! -d $ZSH_PLUGINS_PATH/ohmyzsh ]]; then + echo "oh-my-zsh is not installed." + fi -# check for OpenJDK -if ! command -v javac >/dev/null 2>&1; then - echo "OpenJDK is not installed." -fi + # check for zoxide + if (( ! $+commands[zoxide] )); then + echo "zoxide is not installed." + fi -# check for sbt -if ! command -v sbt >/dev/null 2>&1; then - echo "sbt is not installed." -fi + # check for fzf + if (( ! $+commands[fzf] )); then + echo "fzf is not installed." + fi + + # check for starship + if (( ! $+commands[starship] )); then + echo "starship is not installed." + fi + + # check for python + if (( ! $+commands[python3] )); then + echo "python3 is not installed." + fi +} + +function check_tools() { + # check for git + if ! command -v git >/dev/null 2>&1; then + echo "Git is not installed." + fi + + # check for python + if ! command -v python >/dev/null 2>&1; then + echo "Python is not installed." + fi + + # check for rust + if ! command -v cargo >/dev/null 2>&1; then + echo "Rust is not installed." + fi + + # check for verilator + if ! command -v verilator >/dev/null 2>&1; then + echo "Verilator is not installed." + fi + + # check for iverilog + if ! command -v iverilog >/dev/null 2>&1; then + echo "iverilog is not installed." + fi + + # check for OpenJDK + if ! command -v javac >/dev/null 2>&1; then + echo "OpenJDK is not installed." + fi + + # check for sbt + if ! command -v sbt >/dev/null 2>&1; then + echo "sbt is not installed." + fi + +} diff --git a/zsh/functions/install.sh b/zsh/functions/install.sh index 1d5fde4..869cc1a 100644 --- a/zsh/functions/install.sh +++ b/zsh/functions/install.sh @@ -1,118 +1,91 @@ -#! /bin/bash - -echo "$SHELL" | grep -q zsh -if [ $? -ne 0 ]; then - echo "Please run this script in zsh shell." - exit 1 -fi - -# git, fzf, zoxide are required -if ! command -v git >/dev/null 2>&1; then - echo "Git is not installed." - exit 1 -fi - -if ! command -v fzf >/dev/null 2>&1; then - echo "FZF is not installed." - exit 1 -fi - -if ! command -v zoxide >/dev/null 2>&1; then - echo "Zoxide is not installed." - exit 1 -fi - -if ! command -v python >/dev/null 2>&1; then - if ! command -v python3 >/dev/null 2>&1; then - echo "Python is not installed." - exit 1 +function install_plugins() { + if ! command -v git >/dev/null 2>&1; then + echo "Git is not installed." + return fi -fi -if ! command -v starship >/dev/null 2>&1; then - echo "Starship is not installed." - exit 1 -fi + if [ ! -n "${ZSH_PLUGINS_PATH}" ]; then + echo "ZSH_PLUGINS_PATH is not set. Please set it and try again." + return + fi -ZSH_POLYJUICE_PATH="$HOME/.TerminalPolyjuice" -PLUGINS_PATH="$ZSH_POLYJUICE_PATH/zsh/plugins" - -# git clone zsh-autosuggestions -if [ ! -d "$PLUGINS_PATH"/zsh-autosuggestions ]; then - echo "Zsh Autosuggestions is not downloaded. Downloading..." - # git clone https://github.com/zsh-users/zsh-autosuggestions.git "$PLUGINS_PATH"/zsh-autosuggestions - git clone https://gitee.com/mirrors/zsh-autosuggestions.git "$PLUGINS_PATH"/zsh-autosuggestions -else - cd "$PLUGINS_PATH"/zsh-autosuggestions || exit 1 - if [ ! -d .git ]; then - echo "Zsh Autosuggestions is not a git repository. Please remove $PLUGINS_PATH/zsh-autosuggestions and try again." - exit 1 + # git clone zsh-autosuggestions + if [ ! -d "$ZSH_PLUGINS_PATH"/zsh-autosuggestions ]; then + echo "Zsh Autosuggestions is not downloaded. Downloading..." + # git clone https://github.com/zsh-users/zsh-autosuggestions.git "$ZSH_PLUGINS_PATH"/zsh-autosuggestions + git clone https://gitee.com/mirrors/zsh-autosuggestions.git "$ZSH_PLUGINS_PATH"/zsh-autosuggestions else - echo "Zsh Autosuggestions is already exist. Updating..." - git pull + cd "$ZSH_PLUGINS_PATH"/zsh-autosuggestions || return + if [ ! -d .git ]; then + echo "Zsh Autosuggestions is not a git repository. Please remove $ZSH_PLUGINS_PATH/zsh-autosuggestions and try again." + return + else + echo "Zsh Autosuggestions is already exist. Updating..." + git pull + fi fi -fi -# git clone zsh-syntax-highlighting -if [ ! -d "$PLUGINS_PATH"/zsh-syntax-highlighting ]; then - echo "Zsh Syntax Highlighting is not downloaded. Downloading..." - # git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "$PLUGINS_PATH"/zsh-syntax-highlighting - git clone https://gitee.com/mirrors/zsh-syntax-highlighting.git "$PLUGINS_PATH"/zsh-syntax-highlighting -else - cd "$PLUGINS_PATH"/zsh-syntax-highlighting || exit 1 - if [ ! -d .git ]; then - echo "Zsh Syntax Highlighting is not a git repository. Please remove $PLUGINS_PATH/zsh-syntax-highlighting and try again." - exit 1 + # git clone zsh-syntax-highlighting + if [ ! -d "$ZSH_PLUGINS_PATH"/zsh-syntax-highlighting ]; then + echo "Zsh Syntax Highlighting is not downloaded. Downloading..." + # git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "$ZSH_PLUGINS_PATH"/zsh-syntax-highlighting + git clone https://gitee.com/mirrors/zsh-syntax-highlighting.git "$ZSH_PLUGINS_PATH"/zsh-syntax-highlighting else - echo "Zsh Syntax Highlighting is already exist. Updating..." - git pull + cd "$ZSH_PLUGINS_PATH"/zsh-syntax-highlighting || return + if [ ! -d .git ]; then + echo "Zsh Syntax Highlighting is not a git repository. Please remove $ZSH_PLUGINS_PATH/zsh-syntax-highlighting and try again." + return + else + echo "Zsh Syntax Highlighting is already exist. Updating..." + git pull + fi fi -fi -# git clone zsh-autocomplete -if [ ! -d "$PLUGINS_PATH"/zsh-autocomplete ]; then - echo "Zsh Autocomplete is not downloaded. Downloading..." - # git clone https://github.com/marlonrichert/zsh-autocomplete.git "$PLUGINS_PATH"/zsh-autocomplete - git clone https://gitee.com/mirrors/zsh-autocomplete.git "$PLUGINS_PATH"/zsh-autocomplete + # git clone zsh-autocomplete + if [ ! -d "$ZSH_PLUGINS_PATH"/zsh-autocomplete ]; then + echo "Zsh Autocomplete is not downloaded. Downloading..." + # git clone https://github.com/marlonrichert/zsh-autocomplete.git "$ZSH_PLUGINS_PATH"/zsh-autocomplete + git clone https://gitee.com/mirrors/zsh-autocomplete.git "$ZSH_PLUGINS_PATH"/zsh-autocomplete -else - cd "$PLUGINS_PATH"/zsh-autocomplete || exit 1 - if [ ! -d .git ]; then - echo "Zsh Autocomplete is not a git repository. Please remove $PLUGINS_PATH/zsh-autocomplete and try again." - exit 1 else - echo "Zsh Autocomplete is already exist. Updating..." - git pull + cd "$ZSH_PLUGINS_PATH"/zsh-autocomplete || return + if [ ! -d .git ]; then + echo "Zsh Autocomplete is not a git repository. Please remove $ZSH_PLUGINS_PATH/zsh-autocomplete and try again." + return + else + echo "Zsh Autocomplete is already exist. Updating..." + git pull + fi fi -fi -# git clone powerlevel10k -if [ ! -d "$PLUGINS_PATH"/fzf-tab ]; then - echo "fzf-tab is not downloaded. Downloading..." - git clone https://github.com/Aloxaf/fzf-tab.git "$PLUGINS_PATH"/fzf-tab -else - cd "$PLUGINS_PATH"/fzf-tab || exit 1 - if [ ! -d .git ]; then - echo "fzf-tab is not a git repository. Please remove $PLUGINS_PATH/fzf-tab and try again." - exit 1 + # git clone powerlevel10k + if [ ! -d "$ZSH_PLUGINS_PATH"/fzf-tab ]; then + echo "fzf-tab is not downloaded. Downloading..." + git clone https://github.com/Aloxaf/fzf-tab.git "$ZSH_PLUGINS_PATH"/fzf-tab else - echo "fzf-tab is already exist. Updating..." - git pull + cd "$ZSH_PLUGINS_PATH"/fzf-tab || return + if [ ! -d .git ]; then + echo "fzf-tab is not a git repository. Please remove $ZSH_PLUGINS_PATH/fzf-tab and try again." + return + else + echo "fzf-tab is already exist. Updating..." + git pull + fi fi -fi -# git clone oh-my-zsh -if [ ! -d "$PLUGINS_PATH"/ohmyzsh ]; then - echo "Oh My Zsh is not downloaded. Downloading..." - # git clone https://github.com/ohmyzsh/ohmyzsh.git "$PATH_OHMYZSH" - git clone https://gitee.com/mirrors/ohmyzsh.git "$PLUGINS_PATH"/ohmyzsh -else - cd "$PLUGINS_PATH"/ohmyzsh || exit 2 - if [ ! -d .git ]; then - echo "Oh My Zsh is not a git repository. Please remove $PLUGINS_PATH/ohmyzsh and try again." - exit 1 + # git clone oh-my-zsh + if [ ! -d "$ZSH_PLUGINS_PATH"/ohmyzsh ]; then + echo "Oh My Zsh is not downloaded. Downloading..." + # git clone https://github.com/ohmyzsh/ohmyzsh.git "$PATH_OHMYZSH" + git clone https://gitee.com/mirrors/ohmyzsh.git "$ZSH_PLUGINS_PATH"/ohmyzsh else - echo "Oh My Zsh is already exist. Updating..." - git pull + cd "$ZSH_PLUGINS_PATH"/ohmyzsh || return + if [ ! -d .git ]; then + echo "Oh My Zsh is not a git repository. Please remove $ZSH_PLUGINS_PATH/ohmyzsh and try again." + return + else + echo "Oh My Zsh is already exist. Updating..." + git pull + fi fi -fi +} diff --git a/zsh/settings/command_history.sh b/zsh/settings/command_history.sh new file mode 100644 index 0000000..d450bfe --- /dev/null +++ b/zsh/settings/command_history.sh @@ -0,0 +1,20 @@ +# Command History related settings +HISTFILE=$HOME/.zsh_history +HISTSIZE=50000 +SAVEHIST=10000 +setopt extended_history # record timestamp of command in HISTFILE +setopt hist_expire_dups_first # delete duplicates first when HISTFILE size exceeds HISTSIZE +setopt hist_ignore_dups # ignore duplicated commands history list +setopt hist_ignore_space # ignore commands that start with space +setopt hist_verify # show command with history expansion to user before running it +setopt share_history # share command history data +# setopt append_history # 退出时追加到历史文件 +# setopt inc_append_history # 命令执行后立即写入历史文件 +# setopt share_history # 在多个终端间共享历史 +# setopt hist_ignore_dups # 忽略重复的命令 +# setopt hist_reduce_blanks # 合并连续的空命令 +# setopt hist_verify # 通过 fc 编辑历史命令后再执行 +# setopt extended_history # 记录时间戳 +# setopt hist_expire_dups_first # 先删除重复的命令再根据大小删除 +# setopt hist_find_no_dups # 搜索历史时忽略重复项 +# setopt hist_save_no_dups # 保存历史时忽略重复项 diff --git a/zsh/settings/language_evnironment.sh b/zsh/settings/language_evnironment.sh new file mode 100644 index 0000000..302d044 --- /dev/null +++ b/zsh/settings/language_evnironment.sh @@ -0,0 +1,3 @@ +# Language Environment +export LANG=en_US.UTF-8 +export LC_ALL=C.UTF-8 diff --git a/zsh/settings/useful_exports.sh b/zsh/settings/useful_exports.sh new file mode 100644 index 0000000..f1321ba --- /dev/null +++ b/zsh/settings/useful_exports.sh @@ -0,0 +1,21 @@ +# Preferred editor for local and remote sessions +if [[ -n $SSH_CONNECTION ]]; then + if (( $+commands[helix] )); then + export EDITOR='helix' + elif (( $+commands[nvim] )); then + export EDITOR='nvim' + else + export EDITOR='vim' + fi +else + if (( $+commands[helix] )); then + export EDITOR='helix' + elif (( $+commands[nvim] )); then + export EDITOR='nvim' + else + export EDITOR='vim' + fi +fi + +# operating system +export OS=$(uname -s) diff --git a/zsh/zshrc b/zsh/zshrc index 4caf67d..415db69 100644 --- a/zsh/zshrc +++ b/zsh/zshrc @@ -1,76 +1,55 @@ -# Path to zsh-polyjuice installation -export ZSH_POLYJUICE_PATH="$HOME/.TerminalPolyjuice" -export ZSH_PLUGIN_PATH="$ZSH_POLYJUICE_PATH/zsh/plugins" -export ZSH_ALIAS_PATH="$ZSH_POLYJUICE_PATH/zsh/alias" +#!/bin/zsh -# Command History related settings -HISTFILE=$HOME/.zsh_history -HISTSIZE=10000 -SAVEHIST=10000 -setopt append_history # 退出时追加到历史文件 -setopt inc_append_history # 命令执行后立即写入历史文件 -setopt share_history # 在多个终端间共享历史 -setopt hist_ignore_dups # 忽略重复的命令 -setopt hist_reduce_blanks # 合并连续的空命令 -# setopt hist_verify # 通过 fc 编辑历史命令后再执行 -# setopt extended_history # 记录时间戳 -# setopt hist_expire_dups_first # 先删除重复的命令再根据大小删除 -# setopt hist_find_no_dups # 搜索历史时忽略重复项 -# setopt hist_save_no_dups # 保存历史时忽略重复项 +# path -> settings -> alias -> functions -> plugins -> prompt -# Load Aliases -source $ZSH_ALIAS_PATH/alias.sh +if [ -n "${ZSH_VERSION}" ]; then + _source="${(%):-%x}" + _path=$(dirname "$(realpath "$_source")") + unset _source +else + echo "Unsupported shell" + exit 1 +fi + +# Set basic path to zsh-polyjuice installation +export ZSH_POLYJUICE_PATH="$_path" +unset _path +export ZSH_PLUGINS_PATH="$ZSH_POLYJUICE_PATH/plugins" +export ZSH_ALIAS_PATH="$ZSH_POLYJUICE_PATH/alias" +export ZSH_SETTINGS_PATH="$ZSH_POLYJUICE_PATH/settings" +export ZSH_FUNCTIONS_PATH="$ZSH_POLYJUICE_PATH/functions" +export STARSHIP_CONFIG_FILE="$ZSH_POLYJUICE_PATH/../starship/starship.toml" + +# Load basic settings `zsh/settings` +for _file in "$ZSH_SETTINGS_PATH"/*.sh; do + source "$_file" +done +unset _file + +# Load Aliases `zsh/alias` +for _file in "$ZSH_ALIAS_PATH"/*.sh; do + source "$_file" +done +unset _file + +# Load self-defined functions +for _file in "$ZSH_FUNCTIONS_PATH"/*.sh; do + source "$_file" +done +unset _file # Load Plugins -source $ZSH_PLUGIN_PATH/zsh-autosuggestions/zsh-autosuggestions.zsh +source $ZSH_PLUGINS_PATH/zsh-autosuggestions/zsh-autosuggestions.zsh ZSH_AUTOSUGGEST_STRATEGY=(history completion) ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=20 bindkey '^[l' autosuggest-accept # alt-L to accept autosuggestion -source $ZSH_PLUGIN_PATH/zsh-autocomplete/zsh-autocomplete.plugin.zsh -source $ZSH_PLUGIN_PATH/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh -source $ZSH_PLUGIN_PATH/fzf-tab/fzf-tab.plugin.zsh +source $ZSH_PLUGINS_PATH/zsh-autocomplete/zsh-autocomplete.plugin.zsh +source $ZSH_PLUGINS_PATH/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +source $ZSH_PLUGINS_PATH/fzf-tab/fzf-tab.plugin.zsh +source $ZSH_PLUGINS_PATH/ohmyzsh/plugins/fzf/fzf.plugin.zsh +source $ZSH_PLUGINS_PATH/ohmyzsh/plugins/zoxide/zoxide.plugin.zsh +source $ZSH_PLUGINS_PATH/ohmyzsh/plugins/python/python.plugin.zsh -source $ZSH_PLUGIN_PATH/ohmyzsh/plugins/fzf/fzf.plugin.zsh -source $ZSH_PLUGIN_PATH/ohmyzsh/plugins/python/python.plugin.zsh - -# zoxide -if (( $+commands[zoxide] )); then - eval "$(zoxide init --cmd ${ZOXIDE_CMD_OVERRIDE:-z} zsh)" -else - echo '[zoxide] not found, please install it from https://github.com/ajeetdsouza/zoxide' -fi - -# You may need to manually set your language environment -export LANG=en_US.UTF-8 -export LC_ALL=C.UTF-8 - -# Preferred editor for local and remote sessions -# if [[ -n $SSH_CONNECTION ]]; then -# export EDITOR='vim' -# else -# export EDITOR='nvim' -# fi - -# Homebrew Tsinghua mirror for macOS -function brewthu() { - if [[ $HOMEBREW_BOTTLE_DOMAIN = "" ]]; then - export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api" - export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles" - export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git" - export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git" - export HOMEBREW_PIP_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple" - # Bottles - export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles" - else - unset HOMEBREW_API_DOMAIN - unset HOMEBREW_BOTTLE_DOMAIN - unset HOMEBREW_BREW_GIT_REMOTE - unset HOMEBREW_CORE_GIT_REMOTE - unset HOMEBREW_PIP_INDEX_URL - # Bottles - unset HOMEBREW_BOTTLE_DOMAIN - fi -} function cdi() { cd $(find . -type d | fzf)