From 92febc12aae948a681c0f7eeeb5d8b0e7cf33813 Mon Sep 17 00:00:00 2001 From: Houzhong Xu Date: Sat, 20 Sep 2025 17:19:32 +0000 Subject: [PATCH] Add zsh configuration sync system - Add zshrc.template with full oh-my-zsh configuration - Add install-zsh-config.sh for complete installation - Add quick-install.sh for one-command installation - Add sync script for configuration updates - Include custom aliases and plugin configurations - Support for ansible, docker, terraform, kubernetes tools --- configuration/zsh/README.md | 146 ++++++++++ configuration/zsh/install-zsh-config.sh | 256 +++++++++++++++++ .../zsh/oh-my-zsh-custom/aliases.zsh | 242 ++++++++++++++++ .../zsh/oh-my-zsh-custom/example.zsh | 12 + .../plugins/example/example.plugin.zsh | 3 + .../plugins/zsh-autosuggestions | 1 + .../oh-my-zsh-custom/plugins/zsh-completions | 1 + .../plugins/zsh-syntax-highlighting | 1 + .../oh-my-zsh-custom/themes/example.zsh-theme | 6 + configuration/zsh/quick-install.sh | 56 ++++ configuration/zsh/zshrc.template | 260 ++++++++++++++++++ 11 files changed, 984 insertions(+) create mode 100644 configuration/zsh/README.md create mode 100755 configuration/zsh/install-zsh-config.sh create mode 100644 configuration/zsh/oh-my-zsh-custom/aliases.zsh create mode 100644 configuration/zsh/oh-my-zsh-custom/example.zsh create mode 100644 configuration/zsh/oh-my-zsh-custom/plugins/example/example.plugin.zsh create mode 160000 configuration/zsh/oh-my-zsh-custom/plugins/zsh-autosuggestions create mode 160000 configuration/zsh/oh-my-zsh-custom/plugins/zsh-completions create mode 160000 configuration/zsh/oh-my-zsh-custom/plugins/zsh-syntax-highlighting create mode 100644 configuration/zsh/oh-my-zsh-custom/themes/example.zsh-theme create mode 100755 configuration/zsh/quick-install.sh create mode 100644 configuration/zsh/zshrc.template diff --git a/configuration/zsh/README.md b/configuration/zsh/README.md new file mode 100644 index 0000000..b1316ed --- /dev/null +++ b/configuration/zsh/README.md @@ -0,0 +1,146 @@ +# ZSH 配置同步方案 + +这个目录包含了完整的 oh-my-zsh 配置,可以在多个 VPS 之间同步使用。 + +## 文件结构 + +``` +configuration/zsh/ +├── README.md # 本文件 +├── install-zsh-config.sh # 完整安装脚本 +├── quick-install.sh # 快速安装脚本 +├── zshrc.template # ZSH 配置文件模板 +└── oh-my-zsh-custom/ # 自定义 oh-my-zsh 配置 + ├── aliases.zsh # 自定义别名 + └── plugins/ # 自定义插件 +``` + +## 使用方法 + +### 方法一:快速安装(推荐) + +在新 VPS 上运行: + +```bash +# 一键安装 +curl -fsSL https://ben:8d7d70f324796be650b79415303c31f567bf459b@gitea.tailnet-68f9.ts.net/ben/mgmt/raw/branch/main/configuration/zsh/quick-install.sh | bash +``` + +### 方法二:手动安装 + +1. 克隆仓库: +```bash +git clone https://ben:8d7d70f324796be650b79415303c31f567bf459b@gitea.tailnet-68f9.ts.net/ben/mgmt.git /root/mgmt +``` + +2. 运行安装脚本: +```bash +cd /root/mgmt +chmod +x configuration/zsh/install-zsh-config.sh +./configuration/zsh/install-zsh-config.sh +``` + +## 配置同步 + +安装完成后,可以使用以下命令同步最新配置: + +```bash +# 同步配置 +sync-zsh-config +``` + +这个命令会: +1. 从 Gitea 拉取最新配置 +2. 备份当前配置 +3. 部署新配置 + +## 包含的功能 + +### 插件 +- **git** - Git 集成 +- **docker** - Docker 支持 +- **ansible** - Ansible 支持 +- **terraform** - OpenTofu/Terraform 支持 +- **kubectl** - Kubernetes 支持 +- **zsh-autosuggestions** - 命令自动建议 +- **zsh-syntax-highlighting** - 语法高亮 +- **zsh-completions** - 增强补全 + +### 别名 +- **项目管理**: `mgmt-status`, `mgmt-deploy`, `mgmt-cleanup` +- **Ansible**: `ansible-check`, `ansible-deploy`, `ansible-ping` +- **OpenTofu**: `tofu-init`, `tofu-plan`, `tofu-apply` +- **Docker**: `dps`, `dex`, `dlog`, `dclean` +- **Kubernetes**: `k`, `kgp`, `kgs`, `kaf` +- **Git**: `gs`, `ga`, `gc`, `gp`, `gl` +- **系统**: `ll`, `la`, `ports`, `myip` + +### 主题 +- **agnoster** - 功能丰富的主题,显示 Git 状态 + +## 更新配置 + +当您在主 VPS 上更新配置后: + +1. 提交更改: +```bash +cd /root/mgmt +git add configuration/zsh/ +git commit -m "Update zsh configuration" +git push origin main +``` + +2. 在其他 VPS 上同步: +```bash +sync-zsh-config +``` + +## 自定义配置 + +如果您需要在特定 VPS 上添加自定义配置: + +1. 编辑 `~/.zshrc` 文件 +2. 在文件末尾添加您的自定义配置 +3. 这些配置不会被同步脚本覆盖 + +## 故障排除 + +### 如果同步失败 +```bash +# 检查网络连接 +ping gitea.tailnet-68f9.ts.net + +# 手动拉取 +cd /root/mgmt +git pull origin main +``` + +### 如果别名不工作 +```bash +# 重新加载配置 +source ~/.zshrc + +# 检查别名 +alias | grep +``` + +### 如果插件不工作 +```bash +# 检查插件目录 +ls ~/.oh-my-zsh/plugins/ +ls ~/.oh-my-zsh/custom/plugins/ +``` + +## 安全说明 + +- 此配置包含访问 Gitea 的凭据 +- 请确保只在可信的 VPS 上使用 +- 建议定期更新访问令牌 + +## 支持 + +如有问题,请检查: +1. 网络连接是否正常 +2. Git 凭据是否正确 +3. 依赖包是否已安装 +4. 权限是否正确 diff --git a/configuration/zsh/install-zsh-config.sh b/configuration/zsh/install-zsh-config.sh new file mode 100755 index 0000000..4bbae95 --- /dev/null +++ b/configuration/zsh/install-zsh-config.sh @@ -0,0 +1,256 @@ +#!/bin/bash + +# ZSH 配置安装脚本 +# 用于在其他 VPS 上安装和同步 oh-my-zsh 配置 + +set -euo pipefail + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +# 日志函数 +log_info() { + echo -e "${BLUE}[INFO]${NC} $1" +} + +log_success() { + echo -e "${GREEN}[SUCCESS]${NC} $1" +} + +log_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# 检查是否为 root 用户 +check_root() { + if [[ $EUID -ne 0 ]]; then + log_error "此脚本需要 root 权限运行" + exit 1 + fi +} + +# 安装依赖 +install_dependencies() { + log_info "安装依赖包..." + + # 更新包列表 + apt update + + # 安装必要的包 + apt install -y \ + zsh \ + git \ + curl \ + wget \ + htop \ + tree \ + jq \ + tmux \ + fonts-powerline \ + fontconfig + + log_success "依赖包安装完成" +} + +# 安装 oh-my-zsh +install_oh_my_zsh() { + log_info "安装 oh-my-zsh..." + + if [[ -d "$HOME/.oh-my-zsh" ]]; then + log_warning "oh-my-zsh 已安装,跳过安装步骤" + return 0 + fi + + # 安装 oh-my-zsh + RUNZSH=no CHSH=no sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" + + log_success "oh-my-zsh 安装完成" +} + +# 安装自定义插件 +install_custom_plugins() { + log_info "安装自定义插件..." + + local custom_dir="$HOME/.oh-my-zsh/custom/plugins" + + # zsh-autosuggestions + if [[ ! -d "$custom_dir/zsh-autosuggestions" ]]; then + log_info "安装 zsh-autosuggestions..." + git clone https://github.com/zsh-users/zsh-autosuggestions "$custom_dir/zsh-autosuggestions" + fi + + # zsh-syntax-highlighting + if [[ ! -d "$custom_dir/zsh-syntax-highlighting" ]]; then + log_info "安装 zsh-syntax-highlighting..." + git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "$custom_dir/zsh-syntax-highlighting" + fi + + # zsh-completions + if [[ ! -d "$custom_dir/zsh-completions" ]]; then + log_info "安装 zsh-completions..." + git clone https://github.com/zsh-users/zsh-completions "$custom_dir/zsh-completions" + fi + + log_success "自定义插件安装完成" +} + +# 部署配置文件 +deploy_configs() { + log_info "部署配置文件..." + + local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + + # 备份现有配置 + if [[ -f "$HOME/.zshrc" ]]; then + log_info "备份现有 .zshrc..." + cp "$HOME/.zshrc" "$HOME/.zshrc.backup.$(date +%Y%m%d_%H%M%S)" + fi + + # 部署 .zshrc + if [[ -f "$script_dir/zshrc.template" ]]; then + log_info "部署 .zshrc 配置..." + cp "$script_dir/zshrc.template" "$HOME/.zshrc" + else + log_error "找不到 zshrc.template 文件" + exit 1 + fi + + # 部署自定义配置 + if [[ -d "$script_dir/oh-my-zsh-custom" ]]; then + log_info "部署自定义 oh-my-zsh 配置..." + # 只复制非 git 仓库的文件 + find "$script_dir/oh-my-zsh-custom" -type f -not -path "*/.git/*" -exec cp --parents {} "$HOME/.oh-my-zsh/custom/" \; + fi + + log_success "配置文件部署完成" +} + +# 设置默认 shell +set_default_shell() { + log_info "设置 zsh 为默认 shell..." + + # 检查 zsh 是否在 /etc/shells 中 + if ! grep -q "$(which zsh)" /etc/shells; then + log_info "添加 zsh 到 /etc/shells..." + echo "$(which zsh)" >> /etc/shells + fi + + # 设置默认 shell + chsh -s "$(which zsh)" + + log_success "默认 shell 设置为 zsh" +} + +# 创建同步脚本 +create_sync_script() { + log_info "创建同步脚本..." + + cat > /usr/local/bin/sync-zsh-config << 'EOF' +#!/bin/bash + +# ZSH 配置同步脚本 +# 从 Gitea 仓库拉取最新配置 + +set -euo pipefail + +MGMT_DIR="/root/mgmt" +ZSH_CONFIG_DIR="$MGMT_DIR/configuration/zsh" + +log_info() { + echo -e "\033[0;34m[INFO]\033[0m $1" +} + +log_success() { + echo -e "\033[0;32m[SUCCESS]\033[0m $1" +} + +log_error() { + echo -e "\033[0;31m[ERROR]\033[0m $1" +} + +# 检查 mgmt 目录是否存在 +if [[ ! -d "$MGMT_DIR" ]]; then + log_error "mgmt 目录不存在: $MGMT_DIR" + exit 1 +fi + +# 进入 mgmt 目录 +cd "$MGMT_DIR" + +# 拉取最新配置 +log_info "拉取最新配置..." +git pull origin main + +# 检查 zsh 配置目录 +if [[ ! -d "$ZSH_CONFIG_DIR" ]]; then + log_error "zsh 配置目录不存在: $ZSH_CONFIG_DIR" + exit 1 +fi + +# 备份当前配置 +if [[ -f "$HOME/.zshrc" ]]; then + log_info "备份当前配置..." + cp "$HOME/.zshrc" "$HOME/.zshrc.backup.$(date +%Y%m%d_%H%M%S)" +fi + +# 部署新配置 +log_info "部署新配置..." +cp "$ZSH_CONFIG_DIR/zshrc.template" "$HOME/.zshrc" + +if [[ -d "$ZSH_CONFIG_DIR/oh-my-zsh-custom" ]]; then + cp -r "$ZSH_CONFIG_DIR/oh-my-zsh-custom"/* "$HOME/.oh-my-zsh/custom/" +fi + +log_success "ZSH 配置同步完成!" +log_info "请运行 'source ~/.zshrc' 或重新登录以应用新配置" +EOF + + chmod +x /usr/local/bin/sync-zsh-config + + log_success "同步脚本创建完成: /usr/local/bin/sync-zsh-config" +} + +# 显示使用说明 +show_usage() { + log_success "ZSH 配置安装完成!" + echo "" + log_info "使用方法:" + echo " 1. 重新登录或运行: source ~/.zshrc" + echo " 2. 同步配置: sync-zsh-config" + echo " 3. 查看别名: alias" + echo "" + log_info "可用命令:" + echo " - mgmt-status, mgmt-deploy, mgmt-cleanup" + echo " - ansible-check, ansible-deploy, ansible-ping" + echo " - tofu-init, tofu-plan, tofu-apply" + echo " - dps, dex, dlog (Docker)" + echo " - k, kgp, kgs (Kubernetes)" + echo "" +} + +# 主函数 +main() { + log_info "开始安装 ZSH 配置..." + + check_root + install_dependencies + install_oh_my_zsh + install_custom_plugins + deploy_configs + set_default_shell + create_sync_script + show_usage + + log_success "安装完成!" +} + +# 运行主函数 +main "$@" diff --git a/configuration/zsh/oh-my-zsh-custom/aliases.zsh b/configuration/zsh/oh-my-zsh-custom/aliases.zsh new file mode 100644 index 0000000..a8a9c6a --- /dev/null +++ b/configuration/zsh/oh-my-zsh-custom/aliases.zsh @@ -0,0 +1,242 @@ +# ============================================================================= +# CUSTOM ALIASES FOR MANAGEMENT SYSTEM +# ============================================================================= + +# Project Management +alias mgmt='cd /root/mgmt' +alias mgmt-status='cd /root/mgmt && ./mgmt.sh status' +alias mgmt-deploy='cd /root/mgmt && ./mgmt.sh deploy' +alias mgmt-cleanup='cd /root/mgmt && ./mgmt.sh cleanup' +alias mgmt-swarm='cd /root/mgmt && ./mgmt.sh swarm' +alias mgmt-tofu='cd /root/mgmt && ./mgmt.sh tofu' + +# Ansible Management +alias ansible-check='cd /root/mgmt/configuration && ansible-playbook --syntax-check' +alias ansible-deploy='cd /root/mgmt/configuration && ansible-playbook -i inventories/production/inventory.ini' +alias ansible-ping='cd /root/mgmt/configuration && ansible -i inventories/production/inventory.ini all -m ping' +alias ansible-vault='cd /root/mgmt/configuration && ansible-vault' +alias ansible-galaxy='cd /root/mgmt/configuration && ansible-galaxy' + +# OpenTofu/Terraform Management +alias tofu-init='cd /root/mgmt/tofu/environments/dev && tofu init' +alias tofu-plan='cd /root/mgmt/tofu/environments/dev && tofu plan -var-file="terraform.tfvars"' +alias tofu-apply='cd /root/mgmt/tofu/environments/dev && tofu apply -var-file="terraform.tfvars"' +alias tofu-destroy='cd /root/mgmt/tofu/environments/dev && tofu destroy -var-file="terraform.tfvars"' +alias tofu-output='cd /root/mgmt/tofu/environments/dev && tofu output' +alias tofu-validate='cd /root/mgmt/tofu/environments/dev && tofu validate' +alias tofu-fmt='cd /root/mgmt/tofu/environments/dev && tofu fmt -recursive' + +# Docker Management +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' +alias dstart='docker start' +alias drm='docker rm' +alias drmi='docker rmi' +alias dclean='docker system prune -f' +alias dbuild='docker build' +alias drun='docker run' +alias dpull='docker pull' +alias dpush='docker push' + +# Docker Swarm Management +alias dswarm='docker swarm' +alias dstack='docker stack' +alias dservice='docker service' +alias dnode='docker node' +alias dnetwork='docker network' +alias dsecret='docker secret' +alias dconfig='docker config' +alias dstack-ls='docker stack ls' +alias dstack-rm='docker stack rm' +alias dstack-deploy='docker stack deploy' +alias dservice-ls='docker service ls' +alias dservice-ps='docker service ps' +alias dservice-logs='docker service logs' + +# Kubernetes Management +alias k='kubectl' +alias kgp='kubectl get pods' +alias kgs='kubectl get services' +alias kgd='kubectl get deployments' +alias kgn='kubectl get nodes' +alias kgi='kubectl get ingress' +alias kgc='kubectl get configmaps' +alias kgs='kubectl get secrets' +alias kdp='kubectl describe pod' +alias kds='kubectl describe service' +alias kdd='kubectl describe deployment' +alias kdn='kubectl describe node' +alias kdi='kubectl describe ingress' +alias kaf='kubectl apply -f' +alias kdf='kubectl delete -f' +alias kl='kubectl logs -f' +alias ke='kubectl edit' +alias kx='kubectl exec -it' +alias kctx='kubectl config current-context' +alias kuse='kubectl config use-context' + +# Git Management +alias gs='git status' +alias ga='git add' +alias gc='git commit' +alias gp='git push' +alias gl='git pull' +alias gd='git diff' +alias gb='git branch' +alias gco='git checkout' +alias gcom='git checkout main' +alias gcod='git checkout develop' +alias gst='git stash' +alias gstp='git stash pop' +alias gstl='git stash list' +alias gstc='git stash clear' +alias gcl='git clone' +alias gfe='git fetch' +alias gme='git merge' +alias gr='git rebase' +alias grc='git rebase --continue' +alias gra='git rebase --abort' +alias gres='git reset' +alias gresh='git reset --hard' +alias gress='git reset --soft' + +# System Management +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' +alias ..='cd ..' +alias ...='cd ../..' +alias ....='cd ../../..' +alias grep='grep --color=auto' +alias fgrep='fgrep --color=auto' +alias egrep='egrep --color=auto' +alias ports='netstat -tuln' +alias myip='curl -s https://httpbin.org/ip | jq -r .origin' +alias speedtest='curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python3' +alias psg='ps aux | grep' +alias top='htop' +alias cp='cp -i' +alias mv='mv -i' +alias rm='rm -i' +alias mkdir='mkdir -pv' + +# Network Management +alias ping='ping -c 4' +alias traceroute='traceroute -n' +alias nmap='nmap -sS -O' +alias ss='ss -tuln' + +# File Operations +alias find='find . -name' +alias locate='locate -i' +alias which='which -a' +alias whereis='whereis -b' + +# Text Processing +alias cat='cat -n' +alias less='less -R' +alias more='more -R' +alias head='head -n 20' +alias tail='tail -n 20' +alias wc='wc -l' + +# Archive Operations +alias tar='tar -v' +alias zip='zip -r' +alias unzip='unzip -l' +alias gzip='gzip -v' +alias gunzip='gunzip -v' + +# Process Management +alias jobs='jobs -l' +alias bg='bg %' +alias fg='fg %' +alias kill='kill -9' +alias pkill='pkill -f' + +# Environment +alias env='env | sort' +alias set='set | sort' +alias unset='unset' +alias export='export' +alias source='source' + +# History +alias h='history' +alias hg='history | grep' +alias hc='history -c' + +# Directory Navigation +alias cd..='cd ..' +alias cd...='cd ../..' +alias cd....='cd ../../..' +alias cd-='cd -' +alias cd~='cd ~' +alias cd/='cd /' + +# Quick Access +alias vim='vim' +alias nano='nano' +alias emacs='emacs' +alias code='code' +alias subl='subl' + +# Monitoring +alias df='df -h' +alias du='du -h' +alias free='free -h' +alias meminfo='cat /proc/meminfo' +alias cpuinfo='cat /proc/cpuinfo' +alias uptime='uptime -p' + +# Security +alias chmod='chmod -v' +alias chown='chown -v' +alias chgrp='chgrp -v' +alias passwd='passwd' +alias su='su -' +alias sudo='sudo -E' + +# Development +alias make='make -j$(nproc)' +alias cmake='cmake -DCMAKE_BUILD_TYPE=Release' +alias gcc='gcc -Wall -Wextra' +alias g++='g++ -Wall -Wextra' +alias python='python3' +alias pip='pip3' +alias node='node' +alias npm='npm' +alias yarn='yarn' + +# Logs +alias journal='journalctl -f' +alias syslog='tail -f /var/log/syslog' +alias auth='tail -f /var/log/auth.log' +alias kern='tail -f /var/log/kern.log' +alias mail='tail -f /var/log/mail.log' + +# Backup +alias backup='tar -czf backup-$(date +%Y%m%d-%H%M%S).tar.gz' +alias restore='tar -xzf' + +# Cleanup +alias clean='rm -rf ~/.cache/* ~/.tmp/* /tmp/*' +alias clean-docker='docker system prune -af --volumes' +alias clean-k8s='kubectl delete pods --field-selector=status.phase=Succeeded' +alias clean-ansible='rm -rf ~/.ansible/tmp/*' + +# Information +alias info='uname -a' +alias whoami='whoami' +alias id='id' +alias groups='groups' +alias users='users' +alias w='w' +alias who='who' +alias last='last -n 10' diff --git a/configuration/zsh/oh-my-zsh-custom/example.zsh b/configuration/zsh/oh-my-zsh-custom/example.zsh new file mode 100644 index 0000000..c194f49 --- /dev/null +++ b/configuration/zsh/oh-my-zsh-custom/example.zsh @@ -0,0 +1,12 @@ +# Put files in this folder to add your own custom functionality. +# See: https://github.com/ohmyzsh/ohmyzsh/wiki/Customization +# +# Files in the custom/ directory will be: +# - loaded automatically by the init script, in alphabetical order +# - loaded last, after all built-ins in the lib/ directory, to override them +# - ignored by git by default +# +# Example: add custom/shortcuts.zsh for shortcuts to your local projects +# +# brainstormr=~/Projects/development/planetargon/brainstormr +# cd $brainstormr diff --git a/configuration/zsh/oh-my-zsh-custom/plugins/example/example.plugin.zsh b/configuration/zsh/oh-my-zsh-custom/plugins/example/example.plugin.zsh new file mode 100644 index 0000000..83611fe --- /dev/null +++ b/configuration/zsh/oh-my-zsh-custom/plugins/example/example.plugin.zsh @@ -0,0 +1,3 @@ +# Add your own custom plugins in the custom/plugins directory. Plugins placed +# here will override ones with the same name in the main plugins directory. +# See: https://github.com/ohmyzsh/ohmyzsh/wiki/Customization#overriding-and-adding-plugins diff --git a/configuration/zsh/oh-my-zsh-custom/plugins/zsh-autosuggestions b/configuration/zsh/oh-my-zsh-custom/plugins/zsh-autosuggestions new file mode 160000 index 0000000..85919cd --- /dev/null +++ b/configuration/zsh/oh-my-zsh-custom/plugins/zsh-autosuggestions @@ -0,0 +1 @@ +Subproject commit 85919cd1ffa7d2d5412f6d3fe437ebdbeeec4fc5 diff --git a/configuration/zsh/oh-my-zsh-custom/plugins/zsh-completions b/configuration/zsh/oh-my-zsh-custom/plugins/zsh-completions new file mode 160000 index 0000000..d08cee0 --- /dev/null +++ b/configuration/zsh/oh-my-zsh-custom/plugins/zsh-completions @@ -0,0 +1 @@ +Subproject commit d08cee09cecdc2d95bf501183597411a7632be7c diff --git a/configuration/zsh/oh-my-zsh-custom/plugins/zsh-syntax-highlighting b/configuration/zsh/oh-my-zsh-custom/plugins/zsh-syntax-highlighting new file mode 160000 index 0000000..5eb677b --- /dev/null +++ b/configuration/zsh/oh-my-zsh-custom/plugins/zsh-syntax-highlighting @@ -0,0 +1 @@ +Subproject commit 5eb677bb0fa9a3e60f0eff031dc13926e093df92 diff --git a/configuration/zsh/oh-my-zsh-custom/themes/example.zsh-theme b/configuration/zsh/oh-my-zsh-custom/themes/example.zsh-theme new file mode 100644 index 0000000..5551207 --- /dev/null +++ b/configuration/zsh/oh-my-zsh-custom/themes/example.zsh-theme @@ -0,0 +1,6 @@ +# Put your custom themes in this folder. +# See: https://github.com/ohmyzsh/ohmyzsh/wiki/Customization#overriding-and-adding-themes +# +# Example: + +PROMPT="%{$fg[red]%}%n%{$reset_color%}@%{$fg[blue]%}%m %{$fg[yellow]%}%~ %{$reset_color%}%% " diff --git a/configuration/zsh/quick-install.sh b/configuration/zsh/quick-install.sh new file mode 100755 index 0000000..683a2ac --- /dev/null +++ b/configuration/zsh/quick-install.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +# 快速安装脚本 - 从 Gitea 仓库直接安装 ZSH 配置 +# 用法: curl -fsSL https://your-gitea.com/ben/mgmt/raw/branch/main/configuration/zsh/quick-install.sh | bash + +set -euo pipefail + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +log_info() { + echo -e "${BLUE}[INFO]${NC} $1" +} + +log_success() { + echo -e "${GREEN}[SUCCESS]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# Gitea 仓库信息 +GITEA_URL="https://ben:8d7d70f324796be650b79415303c31f567bf459b@gitea.tailnet-68f9.ts.net/ben/mgmt.git" +MGMT_DIR="/root/mgmt" + +log_info "开始快速安装 ZSH 配置..." + +# 检查 root 权限 +if [[ $EUID -ne 0 ]]; then + log_error "此脚本需要 root 权限运行" + exit 1 +fi + +# 克隆或更新仓库 +if [[ -d "$MGMT_DIR" ]]; then + log_info "更新现有仓库..." + cd "$MGMT_DIR" + git pull origin main +else + log_info "克隆仓库..." + git clone "$GITEA_URL" "$MGMT_DIR" + cd "$MGMT_DIR" +fi + +# 运行安装脚本 +log_info "运行 ZSH 配置安装脚本..." +chmod +x "$MGMT_DIR/configuration/zsh/install-zsh-config.sh" +"$MGMT_DIR/configuration/zsh/install-zsh-config.sh" + +log_success "快速安装完成!" +log_info "请重新登录或运行: source ~/.zshrc" diff --git a/configuration/zsh/zshrc.template b/configuration/zsh/zshrc.template new file mode 100644 index 0000000..2b3307a --- /dev/null +++ b/configuration/zsh/zshrc.template @@ -0,0 +1,260 @@ +# If you come from bash you might have to change your $PATH. +# export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH + +# Path to your Oh My Zsh installation. +export ZSH="$HOME/.oh-my-zsh" + +# Set name of the theme to load --- if set to "random", it will +# load a random theme each time Oh My Zsh is loaded, in which case, +# to know which specific one was loaded, run: echo $RANDOM_THEME +# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes +ZSH_THEME="agnoster" + +# Set list of themes to pick from when loading at random +# Setting this variable when ZSH_THEME=random will cause zsh to load +# a theme from this variable instead of looking in $ZSH/themes/ +# If set to an empty array, this variable will have no effect. +# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" + +# Uncomment the following line to use hyphen-insensitive completion. +# Case-sensitive completion must be off. _ and - will be interchangeable. +# HYPHEN_INSENSITIVE="true" + +# Uncomment one of the following lines to change the auto-update behavior +# zstyle ':omz:update' mode disabled # disable automatic updates +# zstyle ':omz:update' mode auto # update automatically without asking +zstyle ':omz:update' mode reminder # just remind me to update when it's time + +# Uncomment the following line to change how often to auto-update (in days). +# zstyle ':omz:update' frequency 13 + +# Uncomment the following line if pasting URLs and other text is messed up. +# DISABLE_MAGIC_FUNCTIONS="true" + +# Uncomment the following line to disable colors in ls. +# DISABLE_LS_COLORS="true" + +# Uncomment the following line to disable auto-setting terminal title. +# DISABLE_AUTO_TITLE="true" + +# Uncomment the following line to enable command auto-correction. +# ENABLE_CORRECTION="true" + +# Uncomment the following line to display red dots whilst waiting for completion. +# You can also set it to another string to have that shown instead of the default red dots. +# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f" +# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) +# COMPLETION_WAITING_DOTS="true" + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +# DISABLE_UNTRACKED_FILES_DIRTY="true" + +# Uncomment the following line if you want to change the command execution time +# stamp shown in the history command output. +# You can set one of the optional three formats: +# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" +# or set a custom format using the strftime function format specifications, +# see 'man strftime' for details. +# HIST_STAMPS="mm/dd/yyyy" + +# Would you like to use another custom folder than $ZSH/custom? +# ZSH_CUSTOM=/path/to/new-custom-folder + +# Which plugins would you like to load? +# Standard plugins can be found in $ZSH/plugins/ +# Custom plugins may be added to $ZSH_CUSTOM/plugins/ +# Example format: plugins=(rails git textmate ruby lighthouse) +# Add wisely, as too many plugins slow down shell startup. +plugins=( + git + docker + docker-compose + ansible + terraform + kubectl + helm + aws + gcloud + zsh-autosuggestions + zsh-syntax-highlighting + zsh-completions + colored-man-pages + command-not-found + extract + history-substring-search + sudo + systemd + tmux + vscode + web-search + z +) + +source $ZSH/oh-my-zsh.sh + +# User configuration + +# export MANPATH="/usr/local/man:$MANPATH" + +# You may need to manually set your language environment +# export LANG=en_US.UTF-8 + +# Preferred editor for local and remote sessions +if [[ -n $SSH_CONNECTION ]]; then + export EDITOR='vim' +else + export EDITOR='vim' +fi + +# Compilation flags +# export ARCHFLAGS="-arch $(uname -m)" + +# ============================================================================= +# CUSTOM CONFIGURATION FOR MANAGEMENT SYSTEM +# ============================================================================= + +# Load proxy configuration if exists +if [[ -f /root/mgmt/configuration/proxy.env ]]; then + source /root/mgmt/configuration/proxy.env +fi + +# Project management aliases +alias mgmt='cd /root/mgmt' +alias mgmt-status='cd /root/mgmt && ./mgmt.sh status' +alias mgmt-deploy='cd /root/mgmt && ./mgmt.sh deploy' +alias mgmt-cleanup='cd /root/mgmt && ./mgmt.sh cleanup' + +# Ansible aliases +alias ansible-check='cd /root/mgmt/configuration && ansible-playbook --syntax-check' +alias ansible-deploy='cd /root/mgmt/configuration && ansible-playbook -i inventories/production/inventory.ini' +alias ansible-ping='cd /root/mgmt/configuration && ansible -i inventories/production/inventory.ini all -m ping' + +# OpenTofu/Terraform aliases +alias tofu-init='cd /root/mgmt/tofu/environments/dev && tofu init' +alias tofu-plan='cd /root/mgmt/tofu/environments/dev && tofu plan -var-file="terraform.tfvars"' +alias tofu-apply='cd /root/mgmt/tofu/environments/dev && tofu apply -var-file="terraform.tfvars"' +alias tofu-destroy='cd /root/mgmt/tofu/environments/dev && tofu destroy -var-file="terraform.tfvars"' +alias tofu-output='cd /root/mgmt/tofu/environments/dev && tofu output' + +# Docker aliases +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' +alias dstart='docker start' +alias drm='docker rm' +alias drmi='docker rmi' +alias dclean='docker system prune -f' + +# Docker Swarm aliases +alias dswarm='docker swarm' +alias dstack='docker stack' +alias dservice='docker service' +alias dnode='docker node' +alias dnetwork='docker network' +alias dsecret='docker secret' +alias dconfig='docker config' + +# Kubernetes aliases +alias k='kubectl' +alias kgp='kubectl get pods' +alias kgs='kubectl get services' +alias kgd='kubectl get deployments' +alias kgn='kubectl get nodes' +alias kdp='kubectl describe pod' +alias kds='kubectl describe service' +alias kdd='kubectl describe deployment' +alias kaf='kubectl apply -f' +alias kdf='kubectl delete -f' +alias kl='kubectl logs -f' + +# Git aliases +alias gs='git status' +alias ga='git add' +alias gc='git commit' +alias gp='git push' +alias gl='git pull' +alias gd='git diff' +alias gb='git branch' +alias gco='git checkout' +alias gcom='git checkout main' +alias gcod='git checkout develop' +alias gst='git stash' +alias gstp='git stash pop' + +# System aliases +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' +alias ..='cd ..' +alias ...='cd ../..' +alias ....='cd ../../..' +alias grep='grep --color=auto' +alias fgrep='fgrep --color=auto' +alias egrep='egrep --color=auto' + +# Network aliases +alias ports='netstat -tuln' +alias myip='curl -s https://httpbin.org/ip | jq -r .origin' +alias speedtest='curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python3' + +# Process aliases +alias psg='ps aux | grep' +alias top='htop' + +# File operations +alias cp='cp -i' +alias mv='mv -i' +alias rm='rm -i' +alias mkdir='mkdir -pv' + +# History configuration +HISTSIZE=10000 +SAVEHIST=10000 +HISTFILE=~/.zsh_history +setopt HIST_VERIFY +setopt SHARE_HISTORY +setopt APPEND_HISTORY +setopt INC_APPEND_HISTORY +setopt HIST_IGNORE_DUPS +setopt HIST_IGNORE_ALL_DUPS +setopt HIST_REDUCE_BLANKS +setopt HIST_IGNORE_SPACE + +# Auto-completion configuration +autoload -U compinit && compinit +zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' +zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" +zstyle ':completion:*' menu select + +# Key bindings +bindkey '^[[A' history-substring-search-up +bindkey '^[[B' history-substring-search-down +bindkey '^[[1;5C' forward-word +bindkey '^[[1;5D' backward-word + +# Auto-suggestions configuration +ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8' +ZSH_AUTOSUGGEST_STRATEGY=(history completion) + +# Syntax highlighting configuration +ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor) + +# Welcome message +echo "🚀 Management System Shell Ready!" +echo "📁 Project: /root/mgmt" +echo "🔧 Available commands: mgmt-status, mgmt-deploy, mgmt-cleanup" +echo "🐳 Docker: d, dc, dps, dex, dlog" +echo "☸️ Kubernetes: k, kgp, kgs, kaf, kdf" +echo "🏗️ OpenTofu: tofu-init, tofu-plan, tofu-apply" +echo "⚙️ Ansible: ansible-check, ansible-deploy, ansible-ping" +echo "" \ No newline at end of file