Files
dotfiles/fish/add-on.fish
FlintyLemming 44da080b9c add fish config
2025-12-19 21:00:51 +08:00

167 lines
4.9 KiB
Fish
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
fish_add_path ~/.flinty/bin
# 设置欢迎语
set -g fish_greeting ""
function fish_greeting
echo ""
# 1. 顶部欢迎与时间 (强制显示为 UTC-8)
set_color -o cyan
echo "  Welcome back, $USER"
# 在 TZ 变量中GMT+8 代表 UTC-8 (西八区)
set -l utc_minus_8 (env TZ="GMT+8" date "+%Y-%m-%d %H:%M:%S")
echo " Time (UTC-8): $utc_minus_8"
set_color normal
echo ""
# 2. 调用 Fetch 工具获取系统及硬件信息
if type -q fastfetch
# fastfetch 性能最好,支持高度自定义结构
fastfetch --structure OS:CPU:GPU:Memory:Disk --color cyan
else if type -q neofetch
# neofetch 备选,由于其默认输出较杂,通过参数精简
# 包含 OS, CPU, GPU, Memory, Disk
neofetch --disable underline title separator \
--os_arch off \
--cpu_temp off --gpu_type all --mem_unit mib \
--os --cpu --memory --disk --gpu
else
# 如果都没安装,则提示
set_color yellow
echo " ⚠️ System info tools (fastfetch/neofetch) are not installed."
set_color normal
end
echo " ----------------------------------------"
# 3. 包管理器逻辑 (优先检查 oma)
set -l pm_info ""
if type -q oma
set pm_info (set_color -o green)"oma"(set_color normal)
else
# 按照常见系统优先级检查
if type -q brew
set pm_info "Homebrew"
else if type -q apt
set pm_info "apt"
else if type -q pacman
set pm_info "pacman"
else if type -q dnf
set pm_info "dnf"
else
set pm_info "Default System PM"
end
end
echo " 󰏗 Package Manager: $pm_info"
echo ""
end
## 替换 ls 默认行为
function ls --description 'alias ls to eza if possible'
# 1. 优先使用系统安装的 eza (PATH 里的)
if type -q eza
eza -la --icons $argv
return
end
# 2. 如果系统没有,尝试根据架构寻找 ~/.flinty/bin 下的二进制文件
set -l arch (uname -m)
set -l target_bin ""
set -l bin_path "$HOME/.flinty/bin"
switch $arch
case x86_64
# 如果是 Alpine Linux通常需要用 musl 版本 (根据你提供的文件名)
if test -f /etc/alpine-release
set target_bin "eza_x86_64-unknown-linux-musl"
else
set target_bin "eza_x86_64-unknown-linux-gnu"
end
case aarch64 arm64
set target_bin "eza_aarch64-unknown-linux-gnu"
end
set -l custom_eza "$bin_path/$target_bin"
# 3. 检查文件是否存在且可执行
if test -n "$target_bin"; and test -x "$custom_eza"
$custom_eza -la --icons $argv
return
end
# 4. 既没有系统 eza 也没有本地二进制,回退到 command ls
command ls -la $argv
end
## 更新配置
function dotu
set -l current_dir (pwd)
cd $HOME/.flinty
if git pull
source ~/.config/fish/config.fish
echo "Config reloaded successfully!"
end
# 回到原位
cd $current_dir
end
## 修复光标消失
function restore_cursor --on-event fish_postexec
tput cnorm
end
# 自动化 Locale 修复逻辑 修复例如 nano 无法输入中文的问题
# 1. 如果 locale 命令执行报错
# 2. 或者 (LC_ALL 为空 并且 LANG 以 C 开头)
if not locale >/dev/null 2>&1
or begin
test -z "$LC_ALL"
and string match -qi "C*" "$LANG"
end
# 开始修复
if locale -a | string match -qi "C.utf8"
set -gx LANG C.UTF-8
set -gx LC_ALL C.UTF-8
else if locale -a | string match -qi "en_US.utf8"
set -gx LANG en_US.UTF-8
set -gx LC_ALL en_US.UTF-8
end
# 清理非法的 LC_CTYPE
set -e LC_CTYPE
end
## 让 sudo 能够识别自定义 bin 下的脚本
function sudo --description "Replacement for sudo that preserves custom PATH commands"
# 1. 如果没有任何参数,直接运行原始 sudo (通常显示帮助)
if not set -q argv[1]
command sudo
return
end
# 2. 如果第一个参数是以 "-" 开头的选项 (比如 -i, -s, -u, -E)
# 我们直接把所有参数原样传给真正的 sudo不做路径解析
if string match -q -- "-*" $argv[1]
command sudo $argv
return
end
# 3. 如果第一个参数是普通的命令名 (比如 zp, apt, vim)
# 使用 type -p 获取其完整路径。使用 -- 防止命令名本身带杠导致 type 报错
set -l command_path (type -p -- $argv[1] 2>/dev/null)
if test -n "$command_path"
# 找到了完整路径,调用真正的 sudo 运行该绝对路径
command sudo $command_path $argv[2..-1]
else
# 没找到路径(可能是内建命令或拼写错误),直接交给真正的 sudo 处理
command sudo $argv
end
end
abbr -a port 'sudo ss -tulnp | grep'
abbr -a process 'ps aux | grep'