Ubuntu 全局终端美化指南(Oh My Zsh 与 Zim 框架、JetBrains Mono Nerd 字体、背景模糊透明及标题栏透明、ASCII 艺术与终端玩具)

本指南基于 Arch Linux 终端美化教程 改编,适用于 Ubuntu 系列系统(如 Ubuntu 22.04 或 24.04)。本指南提供两种 zsh 美化方案:使用 Oh My Zsh 框架(经典且功能丰富)和 Zim 框架(轻量快速),并包含配置 Powerlevel10k 主题、插件(zsh-autosuggestionszsh-syntax-highlightingautojumpzsh-zzsh-completions)、ttf-jetbrains-mono-nerd 字体、ASCII 艺术工具(figletlolcatfortunecmatrixfastfetch 等),以及终端背景模糊透明和标题栏透明的设置。所有配置将设置为全局可用,适用于所有用户(包括未来创建的用户)。本指南还提供了详细的故障排查步骤,解决 dircolors 错误、重复 compinit 警告、Zim 安装失败(如 /root/.zim already exists、本地运行 install.zsh 时的语法错误、网络连接问题导致的模块下载失败、/usr/local/share/zim already existszimfw: 没有那个文件或目录、新用户未自动获取 .p10k.zsh 文件、compinit 重复调用警告、completion was already initialized 警告、p10k: command not found 问题、/usr/local/share/zim/modules/powerlevel10k 不存在 问题、/etc/zsh/.zimrc/etc/zsh/zimrc 冲突问题、zsh-completions 的在线和离线安装方案,以及 figletlolcat 的安装问题。


准备工作

  • 系统要求:Ubuntu 22.04 或 24.04(GNOME 桌面环境)。
  • 权限:需要 root 或 sudo 权限以安装系统级软件和配置。
  • 工具:需要联网以安装软件包和下载插件(若网络不可用,可使用离线方法)。
  • 终端:默认使用 GNOME Terminal,但推荐 Kitty 以实现完整的模糊透明效果(包括标题栏)。
  • 注意Oh My ZshZim 不能同时使用,需选择一种框架,并在切换时卸载另一框架。

步骤 1:安装 Zsh 并设置为全局默认 Shell

zsh 是一个功能强大的 Shell,相较于 Ubuntu 默认的 bash 提供更多定制选项。

  1. 安装 Zsh

    sudo apt update
    sudo apt install zsh
    
  2. 验证安装

    zsh --version
    

    确保版本为 5.8 或更高。

  3. 设置为全局默认 Shell

    • 修改系统默认 Shell 为 zsh,适用于所有用户(包括未来创建的用户):
      sudo chsh -s $(which zsh)
      
    • 为所有现有用户设置默认 Shell:
      sudo usermod -s $(which zsh) $(whoami)
      
      对其他用户重复此命令,或通过脚本批量设置:
      for user in $(getent passwd | awk -F: '$7 ~ /bash/ {print $1}'); do
          sudo usermod -s $(which zsh) $user
      done
      
    • 为新用户设置默认 Shell,编辑 /etc/adduser.conf
      sudo vim /etc/adduser.conf
      
      找到 DSHELL 行,修改为:
      DSHELL=/bin/zsh
      
      保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
      系统需要注销才会生效

步骤 2:清理现有配置(避免冲突)

在安装 Oh My ZshZim 之前,清理可能导致冲突的现有配置,并防止 Zimcompinit 重复加载问题。

  1. 检查并修复 ~/.dir_colors 问题

    • 对于当前用户,检查 ~/.dir_colors
      ls -ld ~/.dir_colors
      
      如果是目录,删除:
      rm -rf ~/.dir_colors
      
    • 为所有用户清理(包括 root):
      sudo find / -type d -name ".dir_colors" -exec rm -rf {} + 2>/dev/null
      
    • 创建系统级的 dircolors 配置文件(可选,若需要自定义 ls 颜色):
      sudo dircolors -p > /etc/dircolors
      
  2. 清理 ~/.zcompdump 文件

    • 为当前用户清理:
      rm -f ~/.zcompdump*
      
    • 为所有用户清理(包括 root):
      sudo find / -type f -name ".zcompdump*" -delete 2>/dev/null
      
  3. 检查磁盘空间和权限

    • 确保有足够的磁盘空间:
      df -h
      
    • 确保 /etc/usr/local 有写入权限:
      sudo chmod 755 /etc /usr/local
      
  4. 备份并清理 /etc/zsh 下的所有配置文件

    • 备份现有的 /etc/zsh 配置文件:
      sudo cp -r /etc/zsh /etc/zsh.bak
      
    • 检查 /etc/zsh 下的文件是否有 compinit 调用,并清理可能导致冲突的配置:
      sudo grep -r "compinit" /etc/zsh
      
      如果发现 compinit 调用(例如在 /etc/zsh/zshrc/etc/zsh/zprofile 中),编辑对应文件并删除相关代码:
      sudo vim /etc/zsh/zshrc
      sudo vim /etc/zsh/zprofile
      
      删除任何包含 autoload -Uz compinitcompinit 的行,保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
    • 禁用 /etc/zsh/newuser.zshrc.recommendedcompinit 调用
      • 检查 /etc/zsh/newuser.zshrc.recommended 是否包含 compinit
        grep "compinit" /etc/zsh/newuser.zshrc.recommended
        
      • 如果存在,编辑文件并注释掉相关代码:
        sudo vim /etc/zsh/newuser.zshrc.recommended
        
        找到以下行:
        autoload -Uz compinit
        compinit
        
        注释掉:
        # autoload -Uz compinit
        # compinit
        
        保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
  5. 清理 /root 目录下的 Zim 配置文件

    • 解决 /root/.zim already exists 错误,并清理可能存在的 /root/.zimrc/root/.zshrc
      sudo rm -rf /root/.zim
      sudo rm -f /root/.zimrc /root/.zshrc
      
  6. 清理 /usr/local/share/zim 目录

    • 解决 /usr/local/share/zim already exists 错误,确保安装目录干净:
      sudo rm -rf /usr/local/share/zim
      
  7. 清理用户级的 Zim 配置和 Zsh 配置文件(避免冲突)

    • 删除所有用户目录下的 .zim.zimrc 和可能干扰的 Zsh 配置文件:
      sudo find /home -type d -name ".zim" -exec rm -rf {} + 2>/dev/null
      sudo find /home -type f -name ".zimrc" -exec rm -f {} + 2>/dev/null
      sudo find /home -type f -name ".zshrc" -exec rm -f {} + 2>/dev/null
      sudo find /home -type f -name ".zprofile" -exec rm -f {} + 2>/dev/null
      sudo find /home -type f -name ".zlogin" -exec rm -f {} + 2>/dev/null
      sudo find /home -type f -name ".zshenv" -exec rm -f {} + 2>/dev/null
      
    • 删除 /etc/zsh/.zimrc/etc/zsh/zimrc,确保后续安装使用正确的配置文件路径:
      sudo rm -f /etc/zsh/.zimrc /etc/zsh/zimrc
      
  8. 防止 Zim 的 compinit 重复加载(针对 completion was already initialized 警告)

    • 如果您计划使用 Zim 框架,需在安装 Zim 之前修改其补全模块的初始化脚本,防止重复调用 compinit
    • 下载 Zimcompletion 模块文件
      sudo mkdir -p /usr/local/share/zim/modules/completion
      sudo curl -fsSL https://raw.githubusercontent.com/zimfw/completion/master/init.zsh -o /usr/local/share/zim/modules/completion/init.zsh
      
    • 修改 $ZIM_HOME/modules/completion/init.zsh
      • 编辑文件:
        sudo vim /usr/local/share/zim/modules/completion/init.zsh
        
      • 找到以下行:
        print -u2 'warning: completion was already initialized before completion module. Will call compinit again. See https://github.com/zimfw/zimfw/wiki/Troubleshooting#completion-is-not-working'
        
        替换为:
        # 防止重复加载
        if [[ "${GLOBAL_COMPINIT_LOADED}" -ne 1 ]]; then
            print -u2 'warning: completion was already initialized before completion module. Will call compinit again. See https://github.com/zimfw/zimfw/wiki/Troubleshooting#completion-is-not-working#completion-is-not-working'
        fi
        
      • 找到以下行:
        # Load and initialize the completion system
        autoload -Uz compinit && compinit -C -d ${zdumpfile} || return 1
        
        替换为:
        # 防止重复加载
        if [[ "${GLOBAL_COMPINIT_LOADED}" -ne 1 ]]; then
            # Load and initialize the completion system
            autoload -Uz compinit && compinit -C -d ${zdumpfile} || return 1
            export GLOBAL_COMPINIT_LOADED=1
        fi
        
      • 保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
    • 说明
      • GLOBAL_COMPINIT_LOADED 变量用于标记 compinit 是否已被加载,避免重复调用。
      • 这一修改确保警告仅在第一次加载时打印(实际上只会加载一次,后续调用会被跳过)。
    • 验证文件修改
      grep "GLOBAL_COMPINIT_LOADED" /usr/local/share/zim/modules/completion/init.zsh
      
      确认修改已正确应用。

步骤 3:选择 Zsh 美化框架(全局配置)

以下提供两种 zsh 美化方案:Oh My Zsh(经典方案)和 Zim(轻量方案)。请根据需求选择一种框架,并按照对应步骤配置。

方案 1:使用 Oh My Zsh 美化 Zsh(全局)

3.1 安装 Oh My Zsh(系统级)

  1. 安装 Oh My Zsh 到系统目录

    • 默认情况下,Oh My Zsh 安装在用户目录(~/.oh-my-zsh)。为实现全局配置,我们将其安装到 /usr/local/share/oh-my-zsh
      sudo git clone https://github.com/ohmyzsh/ohmyzsh.git /usr/local/share/oh-my-zsh
      
  2. 创建全局 Zsh 配置文件

    • 编辑 /etc/zsh/zshrc
      sudo vim /etc/zsh/zshrc
      
      添加以下内容:
      # 防止重复加载 /etc/zsh/zshrc
      if [[ "${GLOBAL_ZSHRC_LOADED}" == "1" ]]; then
          return 0
      fi
      export GLOBAL_ZSHRC_LOADED=1
      
      # 跳过 Zsh 默认的全局 compinit 调用
      skip_global_compinit=1
      
      export ZSH="/usr/local/share/oh-my-zsh"
      ZSH_THEME="powerlevel10k/powerlevel10k"
      plugins=(git zsh-autosuggestions zsh-syntax-highlighting autojump)
      source $ZSH/oh-my-zsh.sh
      
      # 加载 Powerlevel10k 即时提示
      if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
        source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
      fi
      
      # 加载 Powerlevel10k 配置文件,优先使用用户自己的配置,否则使用系统默认配置
      if [[ -f ~/.p10k.zsh ]]; then
        source ~/.p10k.zsh
      elif [[ -f /etc/zsh/.p10k.zsh ]]; then
        source /etc/zsh/.p10k.zsh
      else
        echo "Powerlevel10k configuration not found. Please run 'p10k configure' to set up your prompt."
      fi
      
      # 防止重复显示欢迎消息
      if [[ -z "${WELCOME_MESSAGE_SHOWN}" ]]; then
          figlet "Welcome, $USER" | lolcat
          fortune | lolcat
          export WELCOME_MESSAGE_SHOWN=1
      fi
      
      保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
  3. 安装 Powerlevel10k 主题(系统级)

    sudo git clone --depth=1 https://github.com/romkatv/powerlevel10k.git /usr/local/share/oh-my-zsh/custom/themes/powerlevel10k
    
    • 如果网络问题导致下载失败,使用离线方法:
      sudo mkdir -p /usr/local/share/oh-my-zsh/custom/themes/powerlevel10k
      sudo wget https://github.com/romkatv/powerlevel10k/archive/refs/heads/master.tar.gz -O /tmp/powerlevel10k.tar.gz
      sudo tar -xzf /tmp/powerlevel10k.tar.gz -C /usr/local/share/oh-my-zsh/custom/themes/powerlevel10k --strip-components=1
      sudo rm /tmp/powerlevel10k.tar.gz
      
    • 验证安装
      ls -ld /usr/local/share/oh-my-zsh/custom/themes/powerlevel10k
      
      确认目录存在且包含 powerlevel10k.zsh-theme 文件:
      ls /usr/local/share/oh-my-zsh/custom/themes/powerlevel10k/powerlevel10k.zsh-theme
      

3.2 安装 Oh My Zsh 插件(系统级)

  1. 安装依赖

    sudo apt install git autojump
    
  2. 安装插件

    sudo git clone https://github.com/zsh-users/zsh-autosuggestions /usr/local/share/oh-my-zsh/custom/plugins/zsh-autosuggestions
    sudo git clone https://github.com/zsh-users/zsh-syntax-highlighting.git /usr/local/share/oh-my-zsh/custom/plugins/zsh-syntax-highlighting
    sudo git clone https://github.com/zsh-users/zsh-completions.git /usr/local/share/oh-my-zsh/custom/plugins/zsh-completions
    
    • 如果网络问题导致下载失败,使用离线方法:
      sudo mkdir -p /usr/local/share/oh-my-zsh/custom/plugins/zsh-completions
      sudo wget https://github.com/zsh-users/zsh-completions/archive/refs/heads/master.tar.gz -O /tmp/zsh-completions.tar.gz
      sudo tar -xzf /tmp/zsh-completions.tar.gz -C /usr/local/share/oh-my-zsh/custom/plugins/zsh-completions --strip-components=1
      sudo rm /tmp/zsh-completions.tar.gz
      
  3. 为新用户设置默认 ~/.zshrc

    • 创建 /etc/skel/.zshrc,新用户创建时会自动复制此文件:
      sudo vim /etc/skel/.zshrc
      
      添加:
      # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
      # Initialization code that may require console input (password prompts, [y/n]
      # confirmations, etc.) must go above this block; everything else may go below.
      if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
        source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
      fi
      
      # 加载全局配置
      source /etc/zsh/zshrc
      
      # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
      [[ ! -f $HOME/.p10k.zsh ]] || source $HOME/.p10k.zsh
      
      保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
  4. 为现有用户应用配置

    • /etc/skel/.zshrc 复制到现有用户目录:
      for user in $(getent passwd | awk -F: '$1 !~ /^(root|nobody|daemon|bin|sys|sync)/ {print $1}'); do
          sudo cp /etc/skel/.zshrc /home/$user/.zshrc
          sudo chown $user:$user /home/$user/.zshrc
      done
      
  5. 配置 Powerlevel10k(全局)

    • 下载一个预配置的 Powerlevel10k 配置文件(如 p10k-lean.zsh)作为系统默认配置,并放置在 /etc/zsh/.p10k.zsh
      sudo mkdir -p /etc/zsh
      sudo curl -fsSL https://raw.githubusercontent.com/romkatv/powerlevel10k/master/config/p10k-lean.zsh -o /etc/zsh/.p10k.zsh
      sudo chmod 644 /etc/zsh/.p10k.zsh
      
    • 检查 /etc/zsh/.p10k.zsh 是否成功下载:
      if [[ ! -s /etc/zsh/.p10k.zsh ]]; then
          echo "Failed to download Powerlevel10k configuration. Please check your network and try again."
          exit 1
      fi
      
    • .p10k.zsh 复制到 /etc/skel 以供新用户使用:
      sudo cp /etc/zsh/.p10k.zsh /etc/skel/.p10k.zsh
      sudo chmod 644 /etc/skel/.p10k.zsh
      
    • 为现有用户复制 .p10k.zsh
      for user in $(getent passwd | awk -F: '$1 !~ /^(root|nobody|daemon|bin|sys|sync)/ {print $1}'); do
          sudo cp /etc/zsh/.p10k.zsh /home/$user/.p10k.zsh
          sudo chown $user:$user /home/$user/.p10k.zsh
      done
      
    • 验证 Powerlevel10k 加载
      • 重新加载配置:
        source /etc/zsh/zshrc
        
      • 检查 p10k 命令是否可用:
        command -v p10k
        
        如果输出为空,说明 Powerlevel10k 未正确加载,参考“注意事项”中的 p10k: command not found 排查步骤。
    • 自定义提示符样式
      • 在确保 Powerlevel10k 已加载后,用户可以运行以下命令自定义提示符样式:
        p10k configure
        
      • 如果遇到 p10k: command not found 错误,请参考“注意事项”中的排查步骤。

方案 2:使用 Zim 美化 Zsh(全局)

3.1 安装 Zim(系统级)

  1. 清理现有 ~/.zim 目录(包括 root)

    • 确保 /root/.zim 和其他用户目录下的 .zim 都被清理(已在“步骤 2”中完成)。
  2. 检查网络连接

    • 确保可以访问 GitHub:
      ping -c 4 github.com
      
    • 如果无法访问 GitHub,可能需要配置代理:
      export http_proxy=http://your-proxy:port
      export https_proxy=$http_proxy
      git config --global http.proxy $http_proxy
      git config --global https.proxy $https_proxy
      
      替换 your-proxy:port 为您的代理地址(例如 http://127.0.0.1:7890)。
    • 或者,使用国内镜像(如果可用):
      git config --global url."https://github.com/".insteadOf "https://github.com/"
      
  3. 安装 Zim 到系统目录

    • 我们将 Zim 安装到 /usr/local/share/zim。以下提供两种方法:
      • 方法 1:在线安装(推荐)
        sudo env ZIM_HOME=/usr/local/share/zim ZDOTDIR=/etc/zsh zsh -c 'curl -fsSL https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh'
        
        说明:设置 ZDOTDIR=/etc/zsh 确保配置文件写入 /etc/zsh/.zimrc,而不是 /root
      • 方法 2:使用本地 install.zsh 脚本
        如果您已下载 install.zsh 到本地(例如 /home/yan/下载/install.zsh),可以运行:
        sudo env ZIM_HOME=/usr/local/share/zim ZDOTDIR=/etc/zsh zsh /home/yan/下载/install.zsh
        
  4. 检查并修复 zimfw.zsh 文件

    • 确保 /usr/local/share/zim/zimfw.zsh 文件存在:
      ls -l /usr/local/share/zim/zimfw.zsh
      
    • 如果文件不存在,可能是下载失败,手动下载:
      sudo mkdir -p /usr/local/share/zim
      sudo curl -fsSL https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh -o /usr/local/share/zim/zimfw.zsh
      
      或者使用 wget
      sudo mkdir -p /usr/local/share/zim
      sudo wget -O /usr/local/share/zim/zimfw.zsh https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh
      
    • 确保文件可执行:
      sudo chmod +x /usr/local/share/zim/zimfw.zsh
      
  5. 创建全局 Zim 配置文件(如果未自动生成)

    • 检查 /etc/zsh/.zimrc 是否存在,若不存在,手动创建:
      sudo vim /etc/zsh/.zimrc
      
      添加以下内容:
      zmodule romkatv/powerlevel10k --use degit
      zmodule zsh-users/zsh-autosuggestions
      zmodule zsh-users/zsh-syntax-highlighting
      zmodule zsh-users/zsh-history-substring-search
      zmodule zsh-users/zsh-completions --fpath src
      zmodule agkozak/zsh-z
      zmodule environment
      zmodule git
      zmodule input
      zmodule termtitle
      zmodule utility
      zmodule duration-info
      zmodule git-info
      zmodule asciiship
      zmodule completion
      
      保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
    • 注意Zim 默认使用 /etc/zsh/.zimrc 作为配置文件。如果存在 /etc/zsh/zimrc,请将其重命名为 /etc/zsh/.zimrc
      sudo mv /etc/zsh/zimrc /etc/zsh/.zimrc
      
  6. 安装 zsh-completions 模块(在线和离线方案)

    • 方案 1:在线安装(推荐)
      • 如果网络正常,zimfw install 会自动下载 zsh-completions
        sudo env ZIM_HOME=/usr/local/share/zim ZDOTDIR=/etc/zsh zsh /usr/local/share/zim/zimfw.zsh install
        
      • 观察输出,确认 zsh-completions 已安装:
        ) zsh-completions: Installed
        
    • 方案 2:离线安装
      • 如果网络不可用或下载失败,手动下载 zsh-completions
        sudo mkdir -p /usr/local/share/zim/modules/zsh-completions
        sudo wget https://github.com/zsh-users/zsh-completions/archive/refs/heads/master.tar.gz -O /tmp/zsh-completions.tar.gz
        sudo tar -xzf /tmp/zsh-completions.tar.gz -C /usr/local/share/zim/modules/zsh-completions --strip-components=1
        sudo rm /tmp/zsh-completions.tar.gz
        
      • 确保 /etc/zsh/.zimrczsh-completions 条目指向本地路径:
        sudo vim /etc/zsh/.zimrc
        
        找到以下行:
        zmodule zsh-users/zsh-completions --fpath src
        
        替换为:
        zmodule /usr/local/share/zim/modules/zsh-completions --fpath src
        
        保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
      • 重新运行安装命令:
        sudo env ZIM_HOME=/usr/local/share/zim ZDOTDIR=/etc/zsh zsh /usr/local/share/zim/zimfw.zsh install
        
  7. 安装其他 Zim 模块

    • 使用正确的 zimfw 调用方式:
      sudo env ZIM_HOME=/usr/local/share/zim ZDOTDIR=/etc/zsh zsh /usr/local/share/zim/zimfw.zsh install
      
    • 验证 Powerlevel10k 模块安装
      ls -ld /usr/local/share/zim/modules/powerlevel10k
      
      确认目录存在且包含 powerlevel10k.zsh-theme 文件:
      ls /usr/local/share/zim/modules/powerlevel10k/powerlevel10k.zsh-theme
      
    • 如果模块未安装(例如因网络问题)
      • 确认 /etc/zsh/.zimrc 包含所有必要的模块。
      • 手动安装缺失的模块(以 Powerlevel10k 为例):
        sudo mkdir -p /usr/local/share/zim/modules/powerlevel10k
        sudo git clone --depth=1 https://github.com/romkatv/powerlevel10k.git /usr/local/share/zim/modules/powerlevel10k
        
        如果网络问题导致 git clone 失败,使用压缩包方式:
        sudo mkdir -p /usr/local/share/zim/modules/powerlevel10k
        sudo wget https://github.com/romkatv/powerlevel10k/archive/refs/heads/master.tar.gz -O /tmp/powerlevel10k.tar.gz
        sudo tar -xzf /tmp/powerlevel10k.tar.gz -C /usr/local/share/zim/modules/powerlevel10k --strip-components=1
        sudo rm /tmp/powerlevel10k.tar.gz
        
      • 修改 /etc/zsh/.zimrc,使用本地模块:
        sudo vim /etc/zsh/.zimrc
        
        将:
        zmodule romkatv/powerlevel10k --use degit
        
        替换为:
        zmodule /usr/local/share/zim/modules/powerlevel10k
        
        保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
      • 重新运行安装命令:
        sudo env ZIM_HOME=/usr/local/share/zim ZDOTDIR=/etc/zsh zsh /usr/local/share/zim/zimfw.zsh install
        
      • 再次验证:
        ls -ld /usr/local/share/zim/modules/powerlevel10k
        
  8. 配置全局 Zsh 加载 Zim

    • 编辑 /etc/zsh/zshrc
      sudo vim /etc/zsh/zshrc
      
      添加以下内容:
      # 跳过 Zsh 默认的全局 compinit 调用
      skip_global_compinit=1
      
      # 优化历史记录
      HISTSIZE=10000
      SAVEHIST=10000
      setopt HIST_IGNORE_DUPS
      
      # 确保不会重复加载 Zim
      if [[ -z "${ZIM_LOADED}" ]]; then
          export ZIM_HOME=/usr/local/share/zim
          if [[ -e $ZIM_HOME/init.zsh ]]; then
              source $ZIM_HOME/init.zsh
          else
              echo "Zim initialization failed: $ZIM_HOME/init.zsh not found."
          fi
      fi
      export ZIM_LOADED=1
      
      # 防止重复加载 /etc/zsh/zshrc
      if [[ "${GLOBAL_ZSHRC_LOADED}" -eq 1 ]]; then
          return 0
      fi
      export GLOBAL_ZSHRC_LOADED=1
      
      # 别名
      alias zimfw='$ZIM_HOME/zimfw.zsh'
      alias ls='exa --icons'
      alias ll='exa -laF --icons'
      alias ff='fastfetch | lolcat'
      alias curlp="curl -x 127.0.0.1:7890"
      
      # 控制台打开时打印信息(防止重复显示)
      if [[ -z "${WELCOME_MESSAGE_SHOWN}" ]]; then
          if [[ "$USER" != "root" ]]; then
              ff
          fi
          echo "Hello $USER !" | figlet | lolcat
          fortune | lolcat
          export WELCOME_MESSAGE_SHOWN=1
      fi
      
      # 加载 Powerlevel10k 即时提示(在 Zim 加载之后)
      if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
          source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
      fi
      
      # 强制加载 Powerlevel10k 主题
      if [[ -d /usr/local/share/zim/modules/powerlevel10k ]]; then
          if [[ -f /usr/local/share/zim/modules/powerlevel10k/powerlevel10k.zsh-theme ]]; then
              source /usr/local/share/zim/modules/powerlevel10k/powerlevel10k.zsh-theme
          else
              echo "Powerlevel10k theme not found at /usr/local/share/zim/modules/powerlevel10k/powerlevel10k.zsh-theme."
          fi
      
          # 确保 p10k 命令可用(加载 p10k.zsh)
          if [[ -f /usr/local/share/zim/modules/powerlevel10k/p10k.zsh ]]; then
              source /usr/local/share/zim/modules/powerlevel10k/p10k.zsh
          else
              echo "p10k.zsh not found at /usr/local/share/zim/modules/powerlevel10k/p10k.zsh."
          fi
      else
          echo "Powerlevel10k module not installed at /usr/local/share/zim/modules/powerlevel10k. Please run 'zimfw install' to install it."
      fi
      
      # 加载 Powerlevel10k 配置文件,优先使用用户自己的配置,否则使用系统默认配置
      if [[ -f ~/.p10k.zsh ]]; then
          source ~/.p10k.zsh
      elif [[ -f /etc/zsh/.p10k.zsh ]]; then
          source /etc/zsh/.p10k.zsh
      else
          echo "Powerlevel10k configuration not found. Please run 'p10k configure' to set up your prompt."
      fi
      
      保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
  9. 为新用户设置默认 ~/.zshrc

    • 创建 /etc/skel/.zshrc,新用户创建时会自动复制此文件:
      sudo vim /etc/skel/.zshrc
      
      添加以下内容:
      # Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
      # Initialization code that may require console input (password prompts, [y/n]
      # confirmations, etc.) must go above this block; everything else may go below.
      if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
          source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
      fi
      
      # 加载全局配置
      source /etc/zsh/zshrc
      
      # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
      [[ ! -f $HOME/.p10k.zsh ]] || source $HOME/.p10k.zsh
      
      保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
  10. 为现有用户应用配置

    • /etc/skel/.zshrc 复制到现有用户目录:
      for user in $(getent passwd | awk -F: '$1 !~ /^(root|nobody|daemon|bin|sys|sync)/ {print $1}'); do
          sudo cp /etc/skel/.zshrc /home/$user/.zshrc
          sudo chown $user:$user /home/$user/.zshrc
      done
      
  11. 配置 Powerlevel10k(全局)

    • 如果 /etc/zsh/.p10k.zsh 尚未创建(例如选择了 Zim 方案),下载并设置:
      sudo mkdir -p /etc/zsh
      sudo curl -fsSL https://raw.githubusercontent.com/romkatv/powerlevel10k/master/config/p10k-lean.zsh -o /etc/zsh/.p10k.zsh
      sudo chmod 644 /etc/zsh/.p10k.zsh
      
    • 检查 /etc/zsh/.p10k.zsh 是否成功下载:
      if [[ ! -s /etc/zsh/.p10k.zsh ]]; then
          echo "Failed to download Powerlevel10k configuration. Please check your network and try again."
          exit 1
      fi
      
    • .p10k.zsh 复制到 /etc/skel 以供新用户使用:
      sudo cp /etc/zsh/.p10k.zsh /etc/skel/.p10k.zsh
      sudo chmod 644 /etc/skel/.p10k.zsh
      
    • 为现有用户复制 .p10k.zsh
      for user in $(getent passwd | awk -F: '$1 !~ /^(root|nobody|daemon|bin|sys|sync)/ {print $1}'); do
          sudo cp /etc/zsh/.p10k.zsh /home/$user/.p10k.zsh
          sudo chown $user:$user /home/$user/.p10k.zsh
      done
      
    • 验证 Powerlevel10k 加载
      • 重新加载配置:
        source /etc/zsh/zshrc
        
      • 检查 p10k 命令是否可用:
        command -v p10k
        
        如果输出为空,说明 Powerlevel10k 未正确加载,参考“注意事项”中的 p10k: command not found 排查步骤。
    • 自定义提示符样式
      • 在确保 Powerlevel10k 已加载后,用户可以运行以下命令自定义提示符样式:
        p10k configure
        
      • 如果遇到 p10k: command not found 错误,请参考“注意事项”中的排查步骤。

步骤 4:安装 JetBrains Mono Nerd 字体(全局)

此步骤将安装 JetBrains Mono Nerd 字体,并为 GNOME Terminal 和 Kitty 设置默认字体,确保所有用户都能使用。

  1. 下载 JetBrains Mono Nerd 字体到系统字体目录

    sudo mkdir -p /usr/share/fonts/truetype/jetbrains-mono-nerd
    cd /usr/share/fonts/truetype/jetbrains-mono-nerd
    sudo curl -fLo "JetBrainsMonoNerdFont-Regular.ttf" https://github.com/ryanoasis/nerd-fonts/raw/master/patched-fonts/JetBrainsMono/Ligatures/Regular/JetBrainsMonoNerdFont-Regular.ttf
    sudo curl -fLo "JetBrainsMonoNerdFont-Bold.ttf" https://github.com/ryanoasis/nerd-fonts/raw/master/patched-fonts/JetBrainsMono/Ligatures/Bold/JetBrainsMonoNerdFont-Bold.ttf
    
  2. 刷新字体缓存

    sudo fc-cache -fv
    
  3. 设置 GNOME Terminal 默认字体和配置文件(全局)

    • 创建默认配置文件
      • 确保配置文件 b1dcc9dd-5262-4d8d-a863-c897e6d979b9 存在,或者获取实际的配置文件 ID:
        gsettings get org.gnome.Terminal.ProfilesList list
        
        输出可能为 ['b1dcc9dd-5262-4d8d-a863-c897e6d979b9'] 或其他 ID。如果输出为空或不包含 b1dcc9dd-5262-4d8d-a863-c897e6d979b9,需要创建配置文件:
        dconf reset -f /org/gnome/terminal/
        gsettings get org.gnome.Terminal.ProfilesList list
        
        记下新的配置文件 ID(例如 new-profile-id),替换下面的 b1dcc9dd-5262-4d8d-a863-c897e6d979b9
    • 设置字体和禁用系统字体:
      sudo gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/ font 'JetBrainsMono Nerd Font 12'
      sudo gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/ use-system-font false
      
    • 设置默认配置文件(全局)
      • 使用 org.gnome.Terminal.ProfilesList 设置默认配置文件:
        sudo gsettings set org.gnome.Terminal.ProfilesList default 'b1dcc9dd-5262-4d8d-a863-c897e6d979b9'
        
      • 如果 gsettings 命令失败(例如权限问题),使用 DConf 配置文件设置:
        sudo mkdir -p /etc/dconf/db/local.d
        sudo vim /etc/dconf/db/local.d/00-terminal
        
        添加以下内容:
        [org/gnome/Terminal/ProfilesList]
        default='b1dcc9dd-5262-4d8d-a863-c897e6d979b9'
        
        [org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9]
        font='JetBrainsMono Nerd Font 12'
        use-system-font=false
        
        保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
      • 更新 DConf 数据库:
        sudo dconf update
        
    • 验证设置
      gsettings get org.gnome.Terminal.ProfilesList default
      
      输出应为 'b1dcc9dd-5262-4d8d-a863-c897e6d979b9'
  4. 设置 Kitty 默认字体(全局,若使用)

    • 创建全局 Kitty 配置文件:
      sudo mkdir -p /etc/xdg/kitty
      sudo vim /etc/xdg/kitty/kitty.conf
      
      添加:
      font_family JetBrainsMono Nerd Font
      font_size 12
      
      保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。

步骤 5:配置终端背景模糊透明(包括标题栏,全局)

方案 1:调整 GNOME Terminal 标题栏透明

方法 1:使用 User Themes 和自定义 CSS

  1. 安装 User Themes 扩展

    sudo apt install gnome-shell-extension-prefs
    
  2. 创建全局 GNOME Shell 主题

    sudo mkdir -p /usr/share/themes/CustomTheme/gnome-shell
    sudo vim /usr/share/themes/CustomTheme/gnome-shell/gnome-shell.css
    

    添加:

    .titlebar, .header-bar {
        background: rgba(0, 0, 0, 0.3) !important;
        border: none;
    }
    .titlebar, .header-bar {
        backdrop-filter: blur(10px);
    }
    

    保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。

  3. 为所有用户启用自定义主题

    • 安装 GNOME Tweaks:
      sudo apt install gnome-tweaks
      
    • 为所有用户设置 Shell 主题:
      sudo gsettings set org.gnome.shell.extensions.user-theme name 'CustomTheme'
      
    • 为新用户设置:
      sudo mkdir -p /etc/skel/.config/dconf
      sudo gsettings set org.gnome.shell.extensions.user-theme name 'CustomTheme'
      
  4. 设置 GNOME Terminal 透明(全局)

    sudo gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/ use-theme-transparency false
    sudo gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/ background-transparency-percent 20
    
    • 如果遇到权限问题,添加到 DConf 配置文件:
      sudo vim /etc/dconf/db/local.d/00-terminal
      
      追加:
      [org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9]
      use-theme-transparency=false
      background-transparency-percent=20
      
      保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
      • 更新 DConf 数据库:
        sudo dconf update
        

方法 2:移除标题栏(全局)

  1. 安装 Hide Top Bar 扩展

    sudo apt install gnome-shell-extension-hide-top-bar
    
  2. 启用并配置(全局)

    • 为所有用户启用扩展:
      sudo gnome-extensions enable hide-top-bar@gnome-shell-extensions.gcampax.github.com
      
    • 为新用户设置:
      sudo mkdir -p /etc/skel/.config/gnome-shell
      echo "hide-top-bar@gnome-shell-extensions.gcampax.github.com" | sudo tee -a /etc/skel/.config/gnome-shell/extensions
      

方案 2:使用 Kitty 终端实现完整的模糊透明(推荐)

  1. 安装 Kitty

    sudo apt install kitty
    
  2. 配置全局 Kitty 设置

    • 编辑 /etc/xdg/kitty/kitty.conf
      sudo vim /etc/xdg/kitty/kitty.conf
      
      添加:
      background_opacity 0.8
      dynamic_background_opacity yes
      background_blur 10
      hide_window_decorations yes
      shell zsh
      font_family JetBrainsMono Nerd Font
      font_size 12
      
      保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。

步骤 6:安装并配置 ASCII 艺术与终端玩具(全局,系统级别)

此步骤将在系统级别安装 ASCII 艺术工具和终端玩具(包括 figletlolcatfortunecmatrixfastfetch),并配置全局欢迎消息,确保所有用户(包括现有用户和新用户)都能使用,同时避免重复显示。以下提供在线和离线两种安装方案。

6.1 安装 figlet(系统级)

figlet 是一个生成 ASCII 艺术文本的工具,可以将文本转换为各种艺术字体样式。

在线安装(推荐)

  1. 使用 apt 安装 figlet

    sudo apt update
    sudo apt install figlet -y
    
    • apt update 更新软件包索引。
    • apt install figlet 安装 figlet 软件包,-y 自动确认安装。
  2. 验证安装

    which figlet
    
    • 输出应为 /usr/bin/figlet,表示 figlet 已安装在系统路径中。
    • 测试 figlet 是否正常工作:
      figlet "Hello"
      
      输出示例:
       _   _      _ _       
      | | | |    (_) |      
      | |_| | __ _ _| |      
      |  _  |/ _` | | |      
      | | | | (_| | | |      
      |_| |_|__,_|_|_|_|      
      

离线安装

如果网络不可用,可以从 Ubuntu 软件包仓库手动下载 figlet.deb 包并安装。

  1. 下载 figlet.deb

    • 访问 Ubuntu 软件包仓库(例如 http://archive.Ubuntu.com/ubuntu/pool/main/f/figlet/)。
    • 找到适用于您的 Ubuntu 版本的 figlet 包,例如 figlet_2.2.5-3_amd64.deb(适用于 Ubuntu 22.04)。
    • 在另一台有网络的机器上下载:
      wget http://archive.ubuntu.com/ubuntu/pool/main/f/figlet/figlet_2.2.5-3_amd64.deb -O /tmp/figlet.deb
      
    • 将下载的 .deb 文件传输到目标机器(例如通过 USB 驱动器)。
  2. 安装 .deb

    • 假设 .deb 文件已复制到 /tmp/figlet.deb
      sudo dpkg -i /tmp/figlet.deb
      
    • 如果提示缺少依赖,修复依赖:
      sudo apt install -f
      
  3. 验证安装

    which figlet
    
    • 输出应为 /usr/bin/figlet
    • 测试:
      figlet "Test"
      

6.2 安装 lolcat(系统级)

lolcat 是一个为终端输出添加彩色渐变效果的工具,常与 figlet 配合使用,使 ASCII 艺术更生动。

在线安装(推荐)

  1. 使用 aptgem 安装 lolcat

    • 在 Ubuntu 22.04 或 24.04 中,lolcat 默认不在官方仓库中,但可以通过 Ruby 的包管理器 gem 安装。
    • 首先安装 Ruby(lolcat 是一个 Ruby 脚本):
      sudo apt update
      sudo apt install ruby -y
      
    • 使用 gem 安装 lolcat
      sudo gem install lolcat
      
    • gem install 会将 lolcat 安装到系统路径(如 /usr/local/bin/lolcat)。
  2. 验证安装

    which lolcat
    
    • 输出应为 /usr/local/bin/lolcat(路径可能因系统而异)。
    • 测试 lolcat 是否正常工作:
      echo "Hello" | lolcat
      
      • 输出应为彩色的 "Hello" 文本。
    • figlet 结合测试:
      figlet "Hello" | lolcat
      
      • 输出将是彩色的 ASCII 艺术文本。

离线安装

如果网络不可用,可以手动下载 lolcat 的 Ruby Gem 包并安装。

  1. 准备 Ruby 环境

    • 确保 Ruby 已安装(离线安装 Ruby 需要下载 Ruby 的 .deb 包)。
    • 下载 Ruby 的 .deb 包(例如 ruby_3.0.2-7ubuntu2.7_amd64.deb):
      wget http://archive.Ubuntu.com/ubuntu/pool/main/r/ruby3.0/ruby_3.0.2-7Ubuntu2.7_amd64.deb -O /tmp/ruby.deb
      
    • 安装:
      sudo dpkg -i /tmp/ruby.deb
      sudo apt install -f
      
  2. 下载 lolcat 的 Gem 包

    • 在有网络的机器上下载 lolcat 的 Gem 包:
      gem fetch lolcat
      
      • 这将下载一个 .gem 文件,例如 lolcat-100.0.1.gem
    • .gem 文件传输到目标机器(例如 /tmp/lolcat-100.0.1.gem)。
  3. 离线安装 lolcat

    • 使用 gem 安装本地 Gem 包:
      sudo gem install --local /tmp/lolcat-100.0.1.gem
      
  4. 验证安装

    which lolcat
    
    • 输出应为 /usr/local/bin/lolcat
    • 测试:
      echo "Test" | lolcat
      

6.3 安装其他终端玩具(fortunecmatrixfastfetch

安装 fortune

fortune 是一个显示随机名言或趣味消息的工具,安装后所有用户都可以使用。

  1. 在线安装
    sudo apt install fortune -y
    
  2. 离线安装
    • 下载 fortune.deb 包:
      wget http://archive.ubuntu.com/ubuntu/pool/main/f/fortune-mod/fortune-mod_1.99.1-7build2_amd64.deb -O /tmp/fortune.deb
      
    • 安装:
      sudo dpkg -i /tmp/fortune.deb
      sudo apt install -f
      
  3. 验证安装
    which fortune
    
    • 输出应为 /usr/games/fortune
    • 测试:
      fortune
      

安装 cmatrix

cmatrix 提供类似《黑客帝国》的矩阵风格动画效果,安装后所有用户都可以运行。

  1. 在线安装
    sudo apt install cmatrix -y
    
  2. 离线安装
    • 下载 cmatrix.deb 包:
      wget http://archive.Ubuntu.com/ubuntu/pool/universe/c/cmatrix/cmatrix_2.0-2_amd64.deb -O /tmp/cmatrix.deb
      
    • 安装:
      sudo dpkg -i /tmp/cmatrix.deb
      sudo apt install -f
      
  3. 验证安装
    which cmatrix
    
    • 输出应为 /usr/bin/cmatrix
    • 测试:
      cmatrix
      

安装 fastfetch

fastfetch 是一个显示系统信息的工具,类似于 neofetch,但速度更快,安装后所有用户都可以运行。

  1. 在线安装
    • fastfetch 的 GitHub Releases 页面下载最新版本的 .deb 包:
      sudo apt install wget
      wget https://github.com/fastfetch-cli/fastfetch/releases/download/2.14.0/fastfetch-linux-amd64.deb -O /tmp/fastfetch.deb
      
    • 安装:
      sudo dpkg -i /tmp/fastfetch.deb
      sudo apt install -f
      
  2. 离线安装
    • 在有网络的机器上下载 fastfetch.deb 包(同上)。
    • .deb 文件传输到目标机器(例如 /tmp/fastfetch.deb)。
    • 安装:
      sudo dpkg -i /tmp/fastfetch.deb
      sudo apt install -f
      
  3. 验证安装
    which fastfetch
    
    • 输出应为 /usr/bin/fastfetch
    • 测试:
      fastfetch
      

6.4 确保全局可用性

  • figletlolcatfortunecmatrixfastfetch 的路径
    • figlet 通常安装在 /usr/bin/figlet
    • lolcat 通常安装在 /usr/local/bin/lolcat(通过 gem 安装)。
    • fortune 通常安装在 /usr/games/fortune
    • cmatrix 通常安装在 /usr/bin/cmatrix.
    • fastfetch 通常安装在 /usr/bin/fastfetch.
    • 确认 /usr/local/bin/usr/games 在系统 PATH 中:
      echo $PATH
      
      • 输出应包含 /usr/local/bin/usr/games
      • 如果缺失,编辑 /etc/zsh/zshrc,添加:
        export PATH=$PATH:/usr/local/bin:/usr/games
        
  • 权限
    • 确保工具对所有用户可执行:
      sudo chmod 755 /usr/bin/figlet
      sudo chmod 755 /usr/local/bin/lolcat
      sudo chmod 755 /usr/games/fortune
      sudo chmod 755 /usr/bin/cmatrix
      sudo chmod 755 /usr/bin/fastfetch
      
  • 测试全局可用性
    • 创建一个新用户并测试:
      sudo adduser testuser
      su - testuser
      figlet "Hello" | lolcat
      fortune
      cmatrix
      fastfetch | lolcat
      
    • 如果输出正常,说明工具已全局可用。

6.5 配置全局欢迎消息(系统级别)

  • 全局欢迎消息已在 /etc/zsh/zshrc 中配置(见“步骤 3.2.8”),内容如下:
    # 控制台打开时打印信息(防止重复显示)
    if [[ -z "${WELCOME_MESSAGE_SHOWN}" ]]; then
        if [[ "$USER" != "root" ]]; then
            ff
        fi
        echo "Hello $USER !" | figlet | lolcat
        fortune | lolcat
        export WELCOME_MESSAGE_SHOWN=1
    fi
    
    • WELCOME_MESSAGE_SHOWN 变量用于防止欢迎消息在同一会话中重复显示。
    • if [[ "$USER" != "root" ]]; then ff; fi 确保非 root 用户显示 fastfetch 系统信息。
    • echo "Hello $USER !" | figlet | lolcat 使用 figlet 生成欢迎消息,并通过 lolcat 添加彩色效果。
    • fortune | lolcat 添加随机名言或趣味消息,并使用 lolcat 添加彩色效果。
    • 注意:不建议将 cmatrix 添加到欢迎消息中,因为 cmatrix 是一个交互式动画,会阻塞终端。
  • 验证欢迎消息对所有用户生效
    • 现有用户:由于 /etc/skel/.zshrc 已配置为 source /etc/zsh/zshrc,现有用户在登录或打开新终端时会自动加载 /etc/zsh/zshrc,从而显示欢迎消息。
    • 新用户:新用户创建时会从 /etc/skel/.zshrc 复制配置,同样会加载 /etc/zsh/zshrc,因此也会看到欢迎消息。
    • 测试:
      source /etc/zsh/zshrc
      
      确认欢迎消息显示,且不会重复。

步骤 7:附加美化选项(全局)

  1. 安装 exa

    sudo apt install exa
    

    /etc/zsh/zshrc 中已添加以下别名:

    alias ls='exa --icons'
    alias ll='exa -laF --icons'
    
  2. 自定义配色(全局)

    • 为 GNOME Terminal 安装 Dracula 主题:
      sudo git clone https://github.com/dracula/gnome-terminal /usr/local/share/dracula-gnome-terminal
      cd /usr/local/share/dracula-gnome-terminal
      sudo ./install.sh
      
    • 为 Kitty 设置 Dracula 主题:
      sudo curl -fsSL https://raw.githubusercontent.com/dracula/kitty/master/dracula.conf -o /etc/xdg/kitty/dracula.conf
      
      编辑 /etc/xdg/kitty/kitty.conf
      sudo vim /etc/xdg/kitty/kitty.conf
      
      添加:
      include dracula.conf
      
      保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。
  3. 优化历史记录(全局)
    /etc/zsh/zshrc 中已添加:

    HISTSIZE=10000
    SAVEHIST=10000
    setopt HIST_IGNORE_DUPS
    

步骤 8:测试和微调

  1. 应用配置

    • 为当前用户测试:
      source /etc/zsh/zshrc
      
    • 新用户创建后会自动加载 /etc/zsh/zshrc
  2. 测试功能

    • 检查标题栏是否透明。
    • 验证背景模糊效果。
    • 确认 ASCII 艺术显示(figlet 欢迎消息是否显示,是否重复)。
    • 测试终端玩具(运行 fortune | lolcatcmatrixfastfetch | lolcat 是否正常)。
    • 测试插件(命令建议、语法高亮、jz 跳转)。
    • 检查提示符样式(Powerlevel10k)和字体(JetBrains Mono Nerd)。
    • 验证补全功能是否正常(例如输入 git 后按 Tab 是否显示补全选项)。
    • 确认 GNOME Terminal 使用了 JetBrainsMono Nerd Font 字体:
      gsettings get org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/ font
      
    • 如果使用 Zim,确认终端打开时不再打印 completion was already initialized 警告。
    • 确认 p10k configure 命令可用:
      p10k configure
      
      如果遇到 p10k: command not found 错误,参考“注意事项”中的排查步骤。
  3. 调整

    • 若标题栏透明不理想,切换到 Kitty。
    • 调整 Kitty 的 background_opacitybackground_blur.
    • 若欢迎消息未显示,检查 /etc/zsh/zshrc 是否被正确加载,或者工具是否安装成功。
    • 若字体未生效,检查 /etc/dconf/db/local.d/00-terminal 是否正确,或者重新运行 sudo dconf update.
  4. 测试新用户

    • 创建一个新 user 以验证 .p10k.zsh 和欢迎消息是否生效:
      sudo adduser testuser
      
    • 登录新用户,检查 ~/.p10k.zsh 是否存在:
      ls -l /home/testuser/.p10k.zsh
      
    • 打开终端,确认欢迎消息显示:
      zsh
      
    • 如果欢迎消息未显示,检查 /etc/skel/.zshrc 是否正确加载了 /etc/zsh/zshrc.
    • 确认新用户使用正确的字体:
      gsettings get org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/ font
      
    • 如果使用 Zim,确认新用户打开终端时不打印 completion was already initialized 警告。
    • 确认新用户可以运行 p10k configure
      p10k configure
      
      如果遇到 p10k: command not found 错误,参考“注意事项”中的排查步骤。

步骤 9:卸载 Oh My Zsh 或 Zim(全局)

卸载 Oh My Zsh(全局)

  1. 备份 /etc/zsh/zshrc

    sudo cp /etc/zsh/zshrc /etc/zsh/zshrc.bak
    
  2. 删除 Oh My Zsh 文件

    sudo rm -rf /usr/local/share/oh-my-zsh
    
  3. 清理 /etc/zsh/zshrc

    sudo vim /etc/zsh/zshrc
    

    删除 Oh My Zsh 相关配置:

    if [[ "${GLOBAL_ZSHRC_LOADED}" == "1" ]]; then
        return 0
    fi
    export GLOBAL_ZSHRC_LOADED=1
    skip_global_compinit=1
    export ZSH="/usr/local/share/oh-my-zsh"
    ZSH_THEME="powerlevel10k/powerlevel10k"
    plugins=(git zsh-autosuggestions zsh-syntax-highlighting autojump)
    source $ZSH/oh-my-zsh.sh
    

    同时删除 Powerlevel10k 相关配置:

    if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
      source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
    fi
    if [[ -f ~/.p10k.zsh ]]; then
      source ~/.p10k.zsh
    elif [[ -f /etc/zsh/.p10k.zsh ]]; then
      source /etc/zsh/.p10k.zsh
    else
      echo "Powerlevel10k configuration not found. Please run 'p10k configure' to set up your prompt."
    fi
    

    同时删除欢迎消息相关配置:

    if [[ -z "${WELCOME_MESSAGE_SHOWN}" ]]; then
        figlet "Welcome, $USER" | lolcat
        fortune | lolcat
        export WELCOME_MESSAGE_SHOWN=1
    fi
    

    保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。

  4. 清理用户目录

    sudo find /home -type f -name ".zshrc" -exec rm -f {} +
    sudo find /home -type f -name ".p10k.zsh" -exec rm -f {} +
    
  5. 清理系统级配置

    sudo rm -f /etc/zsh/.p10k.zsh /etc/skel/.p10k.zsh
    
  6. 卸载 ASCII 艺术和终端玩具工具(可选)

    sudo apt remove figlet lolcat fortune cmatrix fastfetch -y
    sudo apt autoremove -y
    
  7. 清理字体和 GNOME Terminal 设置

    sudo rm -rf /usr/share/fonts/truetype/jetbrains-mono-nerd
    sudo fc-cache -fv
    sudo rm -f /etc/dconf/db/local.d/00-terminal
    sudo dconf update
    

卸载 Zim(全局)

  1. 备份 /etc/zsh/zshrc/etc/zsh/.zimrc

    sudo cp /etc/zsh/zshrc /etc/zsh/zshrc.bak
    sudo cp /etc/zsh/.zimrc /etc/zsh/.zimrc.bak
    
  2. 删除 Zim 文件和配置

    sudo rm -rf /usr/local/share/zim
    sudo rm -f /etc/zsh/.zimrc
    
  3. 清理 /etc/zsh/zshrc

    sudo vim /etc/zsh/zshrc
    

    删除 Zim 相关配置:

    if [[ "${GLOBAL_ZSHRC_LOADED}" -eq 1 ]]; then
        return 0
    fi
    export GLOBAL_ZSHRC_LOADED=1
    skip_global_compinit=1
    if [[ -z "${ZIM_LOADED}" ]]; then
        export ZIM_HOME=/usr/local/share/zim
        if [[ -e $ZIM_HOME/init.zsh ]]; then
            source $ZIM_HOME/init.zsh
        else
            echo "Zim initialization failed: $ZIM_HOME/init.zsh not found."
        fi
        export ZIM_LOADED=1
    fi
    

    同时删除 Powerlevel10k 相关配置(与卸载 Oh My Zsh 时相同)。
    同时删除欢迎消息相关配置(与卸载 Oh My Zsh 时相同)。
    保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter)。

  4. 清理用户目录

    sudo find /home -type f -name ".zshrc" -exec rm -f {} +
    sudo find /home -type f -name ".p10k.zsh" -exec rm -f {} +
    sudo find /home -type d -name ".zim" -exec rm -rf {} + 2>/dev/null
    sudo find /home -type f -name ".zimrc" -exec rm -f {} + 2>/dev/null
    
  5. 清理系统级配置

    sudo rm -f /etc/zsh/.p10k.zsh /etc/skel/.p10k.zsh
    
  6. 卸载 ASCII 艺术和终端玩具工具(可选)

    sudo apt remove figlet lolcat fortune cmatrix fastfetch -y
    sudo apt autoremove -y
    
  7. 清理字体和 GNOME Terminal 设置

    sudo rm -rf /usr/share/fonts/truetype/jetbrains-mono-nerd
    sudo fc-cache -fv
    sudo rm -f /etc/dconf/db/local.d/00-terminal
    sudo dconf update
    

步骤 10:可选 - 桌面集成优化(全局)

  1. 安装 GNOME Tweaks

    sudo apt install gnome-tweaks
    
  2. 安装 Dash to Dock

    sudo apt install gnome-shell-extension-dashtodock
    

注意事项

  • 全局配置注意
    • 所有用户共享 /etc/zsh/zshrc 配置,个性化设置需在用户自己的 ~/.zshrc 中添加。
    • 新用户会自动从 /etc/skel 复制配置文件(包括 .zshrc.p10k.zsh)。
  • 故障排查
    • /usr/local/share/zim/modules/powerlevel10k 不存在
      • 确认 /etc/zsh/.zimrc 是否包含 Powerlevel10k 模块:
        grep "powerlevel10k" /etc/zsh/.zimrc
        
        输出应包含:
        zmodule romkatv/powerlevel10k --use degit
        
        如果缺失,编辑 /etc/zsh/.zimrc 添加该行:
        sudo vim /etc/zsh/.zimrc
        
        添加上述行,保存并退出(在 vim 中,按 Esc,输入 :wq 并按 Enter),然后重新运行:
        sudo env ZIM_HOME=/usr/local/share/zim ZDOTDIR=/etc/zsh zsh /usr/local/share/zim/zimfw.zsh install
        
      • 检查网络连接,确保可以访问 GitHub:
        ping -c 4 github.com
        
        如果网络不可用,配置代理或使用手动安装:
        sudo mkdir -p /usr/local/share/zim/modules/powerlevel10k
        sudo git clone --depth=1 https://github.com/romkatv/powerlevel10k.git /usr/local/share/zim/modules/powerlevel10k
        
        如果 git clone 失败,使用压缩包:
        sudo mkdir -p /usr/local/share/zim/modules/powerlevel10k
        sudo wget https://github.com/romkatv/powerlevel10k/archive/refs