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
+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])