Compare commits

...

9 Commits

3 changed files with 65 additions and 19 deletions

View File

@@ -8,6 +8,7 @@
- **ripgrep (rg)** - 替代 `grep`
- **btop** - 替代 `top`
- **tldr** - 替代 `man`
- **fzf** - 模糊搜索工具
## 其他工具
- **Fish Shell** - 现代化 shell

View File

@@ -14,8 +14,8 @@ if status is-interactive
test "$cat_cmd" = "batcat"; and abbr bat batcat
test "$find_cmd" = "fdfind"; and abbr fd fdfind
# 使用 --cmd=cd让 cd 也具备 zoxide 的跳转能力(交互式对应 cdi
type -q zoxide; and zoxide init --cmd=cd fish | source
# 使用 zoxide init 添加 cd 和 cdi 命令
type -q zoxide; and zoxide init --cmd cd fish | source
# 命令缩写配置
test -n "$ls_cmd"; and abbr ls $ls_cmd
@@ -35,6 +35,14 @@ if status is-interactive
type -q tmux; and abbr tmn 'tmux new'
type -q tmux; and abbr tma 'tmux attach'
type -q tmux; and abbr tml 'tmux list-sessions'
type -q docker; and abbr d docker
type -q docker-compose; and abbr dc 'docker-compose'
# systemd 常用缩写
type -q systemctl; and abbr sc systemctl
type -q systemctl; and abbr scu 'systemctl --user'
type -q journalctl; and abbr jc journalctl
type -q journalctl; and abbr jcu 'journalctl --user'
# ========= thefuck自动命令纠错 =========
type -q thefuck; and thefuck --alias | source

View File

@@ -6,29 +6,66 @@ set -euo pipefail
# - 不使用 chezmoi 的 .tmpl 模板语法;通过运行时检测 apt/pacman/dnf。
# - 脚本尽量保持幂等(包已安装会自动跳过)。
SUDO=""
if [ "$(id -u)" -ne 0 ]; then
if command -v sudo >/dev/null 2>&1; then
SUDO="sudo"
else
echo "需要 sudo 权限才能安装包(当前非 root且找不到 sudo。" >&2
# 包管理器配置
PACKAGE_LIST="zoxide exa bat fd fd-find ripgrep btop tldr fzf git vim tmux fish fastfetch thefuck"
declare -A UPDATE_COMMAND
declare -A INSTALL_COMMAND
UPDATE_COMMAND=(
[pacman]="pacman -Syu --noconfirm"
[apt]="apt update"
[dnf]="dnf makecache -y"
)
INSTALL_COMMAND=(
[pacman]="pacman -S --noconfirm"
[apt]="apt install -y"
[dnf]="dnf install -y"
)
# 输出函数
log() { echo -e "\033[34m$1\033[0m"; }
# 检查 sudo 权限(假设普通用户运行)
if ! command -v sudo >/dev/null 2>&1; then
log "❌ 需要sudo 权限才能安装包。"
exit 1
fi
SUDO="sudo"
# 安装单个包函数
install_package() {
local install_cmd="$1"
local package="$2"
if $SUDO $install_cmd "$package"; then
log "✨ 安装 $package: ✓ 成功"
else
log "⚠️ 安装 $package: ✗ 跳过"
fi
fi
}
# 安装包函数
install_packages() {
local package_manager="$1"
log "🔍 检测到 $package_manager,开始安装包..."
log "📦 更新包..."
$SUDO ${UPDATE_COMMAND[$package_manager]}
log "🚀 开始安装包..."
for package in $PACKAGE_LIST; do
install_package "${INSTALL_COMMAND[$package_manager]}" "$package"
done
log "$package_manager 包安装完成!"
}
# 主逻辑:检测包管理器并安装
if command -v pacman >/dev/null 2>&1; then
# Arch/Manjaro先同步并升级系统再安装所需包
$SUDO pacman -Syu --noconfirm
$SUDO pacman -S --noconfirm exa zoxide dust bat btop fd ripgrep fzf tldr git vim tmux
install_packages "pacman"
elif command -v apt >/dev/null 2>&1; then
# Debian/Ubuntu更新索引后再安装
$SUDO apt update -y || true
$SUDO apt install -y fzf zoxide ripgrep bat fd-find btop exa git vim tmux
install_packages "apt"
elif command -v dnf >/dev/null 2>&1; then
# Fedora更新元数据后再安装
$SUDO dnf makecache -y || true
$SUDO dnf install -y exa zoxide dust bat btop fd-find ripgrep fzf tldr git vim tmux
install_packages "dnf"
else
echo "未检测到 apt / pacman / dnf跳过安装。" >&2
log "未检测到 apt / pacman / dnf跳过安装。"
fi