From bbb192ffd5621dfaca41aff3346c753e1cb4f35b Mon Sep 17 00:00:00 2001 From: imbytecat Date: Fri, 3 Apr 2026 13:46:26 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=8E=B0=E4=BB=A3=E5=8C=96=E7=BB=88?= =?UTF-8?q?=E7=AB=AF=E4=BD=93=E9=AA=8C=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增包:starship, atuin, direnv, xh, yq, sd, zellij - 重写 .zshrc:Starship 提示符、Atuin 历史搜索、fzf 键绑定、 增强别名(eza --icons, ll, la, lt)、shell 选项、WSL 剪贴板 - 新增 starship.toml 配置 - 优化 git config:SSL 限定到内网地址、pull.rebase、 push.autoSetupRemote、rerere、delta line-numbers --- home/.config/git/config | 11 +++++- home/.config/starship.toml | 41 ++++++++++++++++++++++ home/.zshrc | 72 ++++++++++++++++++++++++++------------ modules/base.py | 10 ++++++ modules/dev.py | 1 + 5 files changed, 111 insertions(+), 24 deletions(-) create mode 100644 home/.config/starship.toml diff --git a/home/.config/git/config b/home/.config/git/config index 28f44b3..cdab6f4 100644 --- a/home/.config/git/config +++ b/home/.config/git/config @@ -1,4 +1,4 @@ -[http] +[http "https://202.127.0.42:32443"] sslVerify = false [core] pager = delta @@ -7,7 +7,16 @@ [delta] navigate = true side-by-side = true + line-numbers = true [credential] helper = store [merge] conflictstyle = zdiff3 +[pull] + rebase = true +[push] + autoSetupRemote = true +[init] + defaultBranch = main +[rerere] + enabled = true diff --git a/home/.config/starship.toml b/home/.config/starship.toml new file mode 100644 index 0000000..48c1a5e --- /dev/null +++ b/home/.config/starship.toml @@ -0,0 +1,41 @@ +format = """ +$username\ +$hostname\ +$directory\ +$git_branch\ +$git_status\ +$nodejs\ +$python\ +$go\ +$rust\ +$cmd_duration\ +$line_break\ +$character""" + +[character] +success_symbol = "[❯](bold green)" +error_symbol = "[❯](bold red)" + +[directory] +truncation_length = 3 +truncation_symbol = "…/" + +[git_branch] +symbol = " " + +[git_status] +format = '([\[$all_status$ahead_behind\]]($style) )' + +[cmd_duration] +min_time = 2000 +format = "[$duration]($style) " + +[nodejs] +format = "[$symbol($version)]($style) " +detect_extensions = [] + +[python] +format = "[$symbol($version)]($style) " + +[go] +format = "[$symbol($version)]($style) " diff --git a/home/.zshrc b/home/.zshrc index 5d4fb73..af20412 100644 --- a/home/.zshrc +++ b/home/.zshrc @@ -1,37 +1,63 @@ -# PATH -export PATH="$HOME/go/bin:$PATH" -export PATH="$HOME/.bun/bin:$PATH" +# ── PATH ── +export PATH="$HOME/go/bin:$HOME/.bun/bin:$PATH" -# Oh My Zsh +# ── Shell 选项 ── +setopt AUTO_CD # 输目录名直接 cd +setopt INTERACTIVE_COMMENTS # 允许交互式 # 注释 +setopt NO_BEEP # 关蜂鸣 + +# ── Oh My Zsh ── ZSH=/usr/share/oh-my-zsh/ -ZSH_THEME="ys" -plugins=(git) +ZSH_THEME="" # Starship 接管提示符 +plugins=( + git # git 别名(gst, gco, gp...) + sudo # 双击 ESC 自动加 sudo + extract # x file.tar.gz 一键解压任何格式 + direnv # direnv hook +) ZSH_CACHE_DIR=$HOME/.cache/oh-my-zsh -if [[ ! -d $ZSH_CACHE_DIR ]]; then - mkdir $ZSH_CACHE_DIR -fi +[[ ! -d $ZSH_CACHE_DIR ]] && mkdir -p $ZSH_CACHE_DIR source $ZSH/oh-my-zsh.sh + +# ── 外部插件 ── source /usr/share/zsh/plugins/fzf-tab-git/fzf-tab.plugin.zsh source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh -source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh # 必须最后 -# mise -if command -v mise &> /dev/null; then - eval "$(mise activate zsh)" -fi +# ── 工具初始化(顺序重要)── +eval "$(starship init zsh)" +eval "$(zoxide init zsh)" +eval "$(mise activate zsh)" +eval "$(fzf --zsh)" # Ctrl+T 搜文件, Alt+C 搜目录 +eval "$(atuin init zsh)" # 必须在 fzf 之后,接管 Ctrl+R -# zoxide -if command -v zoxide &> /dev/null; then - eval "$(zoxide init zsh)" -fi - -# Aliases +# ── 别名 ── +# 导航 alias cd="z" alias cdi="zi" -alias ls="eza" -alias tree="eza --tree" +alias ..="cd .." +alias ...="cd ../.." + +# 文件列表 +alias ls="eza --icons --group-directories-first" +alias ll="eza -la --icons --git --group-directories-first" +alias la="eza -a --icons --group-directories-first" +alias lt="eza --tree --level=2 --icons" + +# 工具 alias cat="bat --paging=never" alias rm="trash-put" +alias lg="lazygit" +alias vi="nvim" -# Local +# 网络 +alias http="xh" + +# ── WSL 剪贴板 ── +if [[ -n "$WSL_DISTRO_NAME" ]]; then + alias pbcopy="clip.exe" + alias pbpaste="powershell.exe -noprofile -c Get-Clipboard" +fi + +# ── Local ── [[ -f ~/.zshrc.local ]] && source ~/.zshrc.local diff --git a/modules/base.py b/modules/base.py index f12df4b..59a296f 100644 --- a/modules/base.py +++ b/modules/base.py @@ -21,16 +21,22 @@ class BaseModule(Module): source_file="./home/.config/git/config", owner=self.user, ), + f"/home/{self.user}/.config/starship.toml": File( + source_file="./home/.config/starship.toml", + owner=self.user, + ), } @pacman_packages def pacman_packages(self) -> set[str]: return { + "atuin", "base-devel", "base", "bat", "btop", "curl", + "direnv", "duf", "dust", "eza", @@ -42,12 +48,16 @@ class BaseModule(Module): "micro", "procs", "ripgrep", + "sd", + "starship", "sudo", "tealdeer", "trash-cli", "vim", "wget", + "xh", "yazi", + "yq", "zoxide", } diff --git a/modules/dev.py b/modules/dev.py index 0e2055d..8485827 100644 --- a/modules/dev.py +++ b/modules/dev.py @@ -40,6 +40,7 @@ class DevModule(Module): "tmux", "uv", "yaml-language-server", + "zellij", } def after_update(self, store):