feat(fish): 添加 fish 模块与交互配置

This commit is contained in:
2026-04-09 15:50:34 +08:00
parent 99f9608282
commit 193cbdb11b
4 changed files with 148 additions and 2 deletions
+89
View File
@@ -0,0 +1,89 @@
fish_add_path "$HOME/go/bin" "$HOME/.bun/bin"
set -gx EDITOR nvim
set -gx VISUAL nvim
set -gx PAGER less
set -gx MANPAGER "sh -c 'col -bx | bat -l man -p'"
set -g fish_greeting
function __prepend_sudo
set -l buffer (commandline)
if test -z "$buffer"
commandline -f up-line
set buffer (commandline)
end
if test -n "$buffer"
if not string match -qr '^sudo\b' -- "$buffer"
commandline -r "sudo $buffer"
end
commandline -f end-of-line repaint
end
end
bind \e\e __prepend_sudo
bind \c@ accept-autosuggestion
set -gx FZF_DEFAULT_OPTS '--height=50% --layout=reverse --border --preview-window=right:60%'
set -gx FZF_DEFAULT_COMMAND 'fd --type f --hidden --follow --exclude .git'
set -gx FZF_CTRL_T_COMMAND "$FZF_DEFAULT_COMMAND"
set -gx FZF_ALT_C_COMMAND 'fd --type d --hidden --follow --exclude .git'
alias ..='cd ..'
alias ...='cd ../..'
function ls
command eza --icons --group-directories-first --git $argv
end
function l
command eza -la --icons --group-directories-first --git $argv
end
function ll
command eza -l --icons --group-directories-first --git $argv
end
function la
command eza -lA --icons --group-directories-first --git $argv
end
function lt
command eza --tree --level=2 --icons --group-directories-first --git $argv
end
alias cat='bat --paging=never'
alias rm='gomi'
alias lg='lazygit'
alias vi='nvim'
alias x='ouch decompress'
if set -q WSL_DISTRO_NAME
alias pbcopy='clip.exe'
alias pbpaste='powershell.exe -noprofile -c Get-Clipboard'
function keep_current_path --on-event fish_prompt
printf '\e]9;9;%s\e\\' (wslpath -w "$PWD")
end
end
if status is-interactive
zoxide init fish --cmd cd | source
mise activate fish | source
set -g direnv_fish_mode eval_after_arrow
direnv hook fish | source
fzf --fish | source
set -gx ATUIN_NOBIND true
atuin init fish | source
bind \cr _atuin_search
starship init fish | source
end
if test -f ~/.config/fish/config.local.fish
source ~/.config/fish/config.local.fish
end
+12
View File
@@ -0,0 +1,12 @@
function yy
set -l tmp (mktemp -t yazi-cwd.XXXXXX)
command yazi $argv --cwd-file="$tmp"
if set -l cwd (command cat -- "$tmp")
if test -n "$cwd" -a "$cwd" != "$PWD"
builtin cd -- "$cwd"
end
end
command rm -f -- "$tmp"
end
+45
View File
@@ -0,0 +1,45 @@
import subprocess
import decman
from decman import File, Module
from decman.plugins.pacman import packages as pacman_packages
class FishModule(Module):
def __init__(self, user: str):
super().__init__("fish")
self.user = user
def files(self) -> dict[str, File]:
return {
f"/home/{self.user}/.config/fish/config.fish": File(
source_file="./home/.config/fish/config.fish",
owner=self.user,
),
f"/home/{self.user}/.config/fish/functions/yy.fish": File(
source_file="./home/.config/fish/functions/yy.fish",
owner=self.user,
),
}
@pacman_packages
def pacman_packages(self) -> set[str]:
return {
"fish",
"fzf",
}
def after_update(self, store: object) -> None:
result = subprocess.run(
["getent", "passwd", self.user],
capture_output=True,
text=True,
check=False,
)
if result.returncode != 0:
decman.error(f"无法读取用户 {self.user} 的 passwd 信息")
return
# passwd 格式: name:x:uid:gid:gecos:home:shell
shell = result.stdout.strip().split(":")[-1]
if shell != "/usr/bin/fish":
decman.prg(["chsh", "-s", "/usr/bin/fish", self.user])
+2 -2
View File
@@ -6,7 +6,7 @@ import modules.base
import modules.dev import modules.dev
import modules.docker import modules.docker
import modules.locale import modules.locale
import modules.zsh import modules.fish
USERNAME = os.environ.get("SUDO_USER") USERNAME = os.environ.get("SUDO_USER")
if not USERNAME: if not USERNAME:
@@ -17,5 +17,5 @@ decman.modules += [
modules.dev.DevModule(USERNAME), modules.dev.DevModule(USERNAME),
modules.docker.DockerModule(USERNAME), modules.docker.DockerModule(USERNAME),
modules.locale.LocaleModule(), modules.locale.LocaleModule(),
modules.zsh.ZshModule(USERNAME), modules.fish.FishModule(USERNAME),
] ]