Files
2026-03-31 20:13:15 +08:00

172 lines
7.2 KiB
Fish

# ==============================================================================
# Function: apt (Smart Arch Package Manager Wrapper for Fish)
# Description: Maps common Debian 'apt' commands to an intelligent Arch backend.
# Features:
# - Fallback routing: paru > yay > pacman.
# - Automatic Sudo Handling: Prevents AUR helpers from running as root.
# - Anti-Partial-Upgrade: Merges update/upgrade into a safe -Syu operation.
# - Deep Clean Default: Merges remove/purge into -Rns for a pristine system.
# - UI Integration: Progressive enhancement with 'shorin' for interactive modes.
# - Safe orphan detection and i18n support.
# - Highly readable, colorized, and column-aligned help output.
# Usage: apt {update|upgrade|install [ui]|remove [ui]|search|show|autoremove|clean|help|-h} [pkg...]
# ==============================================================================
function apt -d "Smart wrapper routing apt commands to paru/yay/pacman"
# 1. 极简的 Locale 探测
set -l is_zh 0
if string match -q -r "^zh_" "$LC_ALL" "$LC_MESSAGES" "$LANG"
set is_zh 1
end
# 2. 探测 shorin UI 工具是否存在
set -l has_shorin 0
if command -q shorin
set has_shorin 1
end
set -l action "help"
set -l exit_code 0
if test (count $argv) -eq 0
set exit_code 1
else
set action $argv[1]
set -e argv[1]
end
# 3. 帮助信息拦截与本地化 (重构的高颜值排版)
switch $action
case help -h --help
set -l c_cmd (set_color cyan)
set -l c_hl (set_color yellow)
set -l c_rst (set_color normal)
if test $is_zh -eq 1
echo "Arch 包管理器包装器 (优先级: "$c_hl"paru > yay > pacman"$c_rst")"
echo "用法: "$c_hl"apt"$c_rst" <命令> [软件包...]"
echo ""
echo "命令:"
echo " "$c_cmd"update(upgrade)"$c_rst" 同步数据库并更新系统 (-Syu)"
echo " "$c_cmd"install "$c_rst" 安装软件包 (-S)"
if test $has_shorin -eq 1
echo " "$c_cmd"install ui "$c_rst" 打开交互式界面安装 (依赖: shorin-contrib-git)"
end
echo " "$c_cmd"remove "$c_rst" 彻底卸载软件包、依赖及配置文件 (-Rns)"
if test $has_shorin -eq 1
echo " "$c_cmd"remove ui "$c_rst" 打开交互式界面卸载 (依赖: shorin-contrib-git)"
end
echo " "$c_cmd"search "$c_rst" 搜索软件包 (-Ss)"
echo " "$c_cmd"show "$c_rst" 显示软件包详细信息 (-Si)"
echo " "$c_cmd"autoremove "$c_rst" 安全地清理系统中的孤立软件包"
echo " "$c_cmd"clean "$c_rst" 清理下载缓存 (-Sc)"
echo " "$c_cmd"help, -h "$c_rst" 显示此帮助信息"
else
echo "Smart Arch Package Wrapper (Routing: "$c_hl"paru > yay > pacman"$c_rst")"
echo "Usage: "$c_hl"apt"$c_rst" <command> [package...]"
echo ""
echo "Commands:"
echo " "$c_cmd"update(upgrade)"$c_rst" Sync databases and update system (Safe -Syu)"
echo " "$c_cmd"install "$c_rst" Install packages (-S)"
if test $has_shorin -eq 1
echo " "$c_cmd"install ui "$c_rst" Open interactive installation UI (shorin pac)"
end
echo " "$c_cmd"remove "$c_rst" Remove packages, unneeded dependencies, and configs (-Rns)"
if test $has_shorin -eq 1
echo " "$c_cmd"remove ui "$c_rst" Open interactive removal UI (shorin pacr)"
end
echo " "$c_cmd"search "$c_rst" Search for packages (-Ss)"
echo " "$c_cmd"show "$c_rst" Show package details (-Si)"
echo " "$c_cmd"autoremove "$c_rst" Remove orphaned packages safely"
echo " "$c_cmd"clean "$c_rst" Clean package cache (-Sc)"
echo " "$c_cmd"help, -h "$c_rst" Show this help message"
end
return $exit_code
end
# 4. 核心路由与提权逻辑
set -l pkg_mgr
set -l needs_sudo "no"
if command -q paru
set pkg_mgr "paru"
else if command -q yay
set pkg_mgr "yay"
else
set pkg_mgr "pacman"
set needs_sudo "yes"
end
set -l cmd
if test "$needs_sudo" = "yes"
set cmd sudo $pkg_mgr
else
set cmd $pkg_mgr
end
# 5. 预定义基础错误信息 (本地化)
set -l msg_err_pkg "Error: Specify packages."
set -l msg_err_search "Error: Specify search term."
set -l msg_err_show "Error: Specify package to show."
if test $is_zh -eq 1
set msg_err_pkg "错误:请指定要操作的软件包。"
set msg_err_search "错误:请指定搜索词。"
set msg_err_show "错误:请指定要查看的软件包。"
end
# 6. 动作映射 (Action Mapping)
switch $action
case update upgrade
$cmd -Syu
case install
if test (count $argv) -eq 0; echo $msg_err_pkg; return 1; end
# 拦截 'install ui',条件:且只输入了 ui 一个参数,且系统存在 shorin
if test "$argv[1]" = "ui" -a (count $argv) -eq 1 -a $has_shorin -eq 1
shorin pac
return 0
end
$cmd -S $argv
case remove
if test (count $argv) -eq 0; echo $msg_err_pkg; return 1; end
# 拦截 'remove ui'
if test "$argv[1]" = "ui" -a (count $argv) -eq 1 -a $has_shorin -eq 1
shorin pacr
return 0
end
$cmd -Rns $argv
case search
if test (count $argv) -eq 0; echo $msg_err_search; return 1; end
$pkg_mgr -Ss $argv
case show
if test (count $argv) -eq 0; echo $msg_err_show; return 1; end
$pkg_mgr -Si $argv
case autoremove
set -l orphans (pacman -Qtdq)
if test (count $orphans) -gt 0
if test $is_zh -eq 1
echo "找到 "(count $orphans)" 个孤立的软件包。正在通过 $pkg_mgr 卸载..."
else
echo "Found "(count $orphans)" orphaned package(s). Removing via $pkg_mgr..."
end
$cmd -Rns $orphans
else
if test $is_zh -eq 1
echo "系统很干净,没有需要清理的孤立软件包。"
else
echo "System is clean. No orphaned packages to remove."
end
end
case clean
$cmd -Sc
case '*'
if test $is_zh -eq 1
echo "错误:不支持的 apt 命令映射: $action"
echo "运行 'apt -h' 查看可用命令。"
else
echo "Error: Unsupported apt command mapped: $action"
echo "Run 'apt -h' for valid commands."
end
return 1
end
end