signalridge/dotfiles
signalridge/dotfiles has 46 GitHub stars and 3 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-14 16:36 UTC. Last push 2026-11-13.
实测星标增长
- 24小时
- 0
- 7天
- 正在收集历史
- 15天
- 正在收集历史
- 1个月
- 正在收集历史
各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。
关于
A modern, reproducible development environment for macOS and Linux using chezmoi + Nix
开发工具README.zh-CN.md
原文这个仓库是什么
这是用 chezmoi 管理的个人工作站配置。它是一套正在使用的配置,而不是通用的
入门模板。各层分工如下:
chezmoi:模板、目标文件合并与 bootstrap 脚本- Nix:跨平台用户 profile,macOS 上还有
nix-darwin - Homebrew 与 Mac App Store:macOS 应用
aqua管理固定版本的 CLI,mise管理运行时与其余工具- Claude Code、Codex CLI、Cursor Agent CLI 与 Antigravity CLI 的配置
- 私有网络层:EasyTier mesh、sing-box 客户端、JAIST VPN
本仓库包含个人默认值,其中有宽松的 AI 执行模式和私人机器专用的应用。 用到其他电脑之前,请先检查模板和数据。
支持范围与 Profile 行为
| 范围 | 行为 |
|---|---|
| 操作系统 | macOS 与 Linux。 |
| 全新 Nix bootstrap | 固定的安装器资源覆盖 aarch64-darwin、aarch64-linux 和 x86_64-linux;全新的 x86_64-darwin 安装会被拒绝。 |
work |
加入 work 包集合(Nix,macOS 上还有 Homebrew),并设置 private = false;工作机不安装中继/出口工具。 |
private |
由 not work 推导,选择 private 包集合。 |
headless |
跳过 GUI dotfiles 和 GUI 脚本 09、17、21。它不是包开关:macOS 上 nix-darwin/Homebrew 模块仍会渲染。 |
| Mac App Store | 仅当 installMasApps = true 时安装 MAS 条目。 |
快速开始
[!WARNING] 应用本仓库会修改 shell 文件、包管理器、AI 设置,以及(在 macOS 上)系统和应用 设置。请先检查模板和数据。
curl -fsSL https://raw.githubusercontent.com/signalridge/dotfiles/main/init.sh -o /tmp/init.sh
sh /tmp/init.sh
不要使用 curl … | sh:首次运行需要交互输入 profile 和身份信息,而当必需数据
缺失且 stdin 不是 TTY 时,模板会明确报错。要固定某个 ref,从该 ref 下载
init.sh 并传入 --ref <ref>;使用本地克隆时,在目标 checkout 中运行
./init.sh。init.sh 还支持 --repo 和 --depth(或
DOTFILES_REPO/DOTFILES_REF/DOTFILES_DEPTH)以及
DOTFILES_USE_ENCRYPTION=true|false;详情见 sh init.sh --help。bootstrap 只走
HTTPS。
直接调用 chezmoi 时预先选择 profile:
chezmoi init --apply \
--promptBool work=false \
--promptBool useEncryption=false \
signalridge
首次运行数据
所有提示项和推导值都在 .chezmoi.toml.tmpl 中。
| 数据 | 何时请求或使用 |
|---|---|
work |
必需;在 TTY 上提示。用于推导 private。 |
useEncryption |
必需,除非设置了 DOTFILES_USE_ENCRYPTION。控制密钥恢复、gopass 和 ~/.ssh/*。 |
hostname |
非工作机上提示;工作机使用系统主机名。 |
gitUsername、gitEmail |
缺失时提示;没有身份默认值。 |
headless |
在 TTY 上提示;否则使用已存数据或基于 OS 的回退值。 |
installMasApps |
macOS TTY 提示(Mac App Store 安装)。 |
timezone |
自动检测;否则提示,最终回退为 Etc/UTC。 |
keysRepository、gopassRepository |
仅在启用加密时提示。 |
easytierExit |
从不提示;在要充当 EasyTier 出口的 Linux 机器上手动设置。 |
easytierMember |
从不提示;在以固定 IP 加入 EasyTier、但不作为出口的 Linux 机器上手动设置。 |
Bootstrap 流程
chezmoi init 之后的一切都由 .chezmoiscripts/ 中的编号脚本驱动——执行顺序
就是编号:00 安装 Nix,01 恢复密钥,接着是 nix-darwin、profile、aqua、
gopass 和 mise,之后是 AI 集成、服务和网络栈。run_onchange_* 脚本在渲染内容
变化时重新运行;run_after_* 脚本每次 apply 都会运行,并自带守卫或执行周期。
按机器区分的条件写在脚本本身和 .chezmoiignore 中。
全新机器上,read-source-state.pre 钩子(.bootstrap/pre-source-state.sh)会在 chezmoi
读取源状态之前先完成 Nix 安装、密钥恢复和 gopass 克隆,因此 .chezmoiignore 和模板
第一次就能看到密码库,一次 apply 即可完成;机器就绪后该钩子不做任何事。
日常操作
~/Justfile 由 Justfile.tmpl 渲染;运行 just --list 查看 chezmoi、Nix、
nix-darwin 和 Git 相关 recipe。在源码目录中运行 pre-commit run --all-files
进行格式、语法和 secret 检查。
各项声明所在位置:
- Nix 包:
.chezmoidata/nix.yaml与nix-config/ - Homebrew 与 MAS:
.chezmoidata/homebrew.yaml - aqua CLI:
private_dot_config/aquaproj-aqua/(工作机跳过aqua-private.yaml) - mise 运行时与工具:
private_dot_config/mise/config.toml.tmpl - 固定的安装器与校验和:
.chezmoidata/versions.yaml - shell alias 与函数:
dot_custom/。其中wt-new/wt-go/wt-ls/wt-rm会为普通仓库在<repo>/.worktrees/下创建 Git worktree;不要在本 chezmoi source 中使用,因为仓库章程 (CLAUDE.md)禁止 worktree 和 branch switching。
网络栈
- EasyTier:每台 Mac 都以客户端身份加入私有 mesh;Linux 机器只有在其本地数据
设置了
easytierExit(作为出口)或easytierMember(固定 IP、不作出口)时才加入 (.chezmoidata/easytier.yaml,脚本23)。 - sing-box:每台机器都有客户端(Mac 上为 TUN,headless Linux 上为用户服务);
由
Egress选择器挑选出口(.chezmoidata/sing-box.yaml,脚本24)。 - JAIST VPN:补丁版 sing-box 中的 OpenConnect 端点,配合
openconnect-auto/openconnect-login(脚本25,仅非工作机)。 - bastion:手动部署的中继和 STUN 服务器;
bastion-import把它的 sing-box outbound 存入 gopass。
AI Harness
Claude Code、Codex CLI、Cursor Agent CLI 和 Antigravity CLI
都由 dot_* 和 private_dot_config/ 配置;Claude 和 Codex 共用由
.chezmoitemplates/agent-instructions.md 渲染的全局指令。Claude Code 和 Codex
使用原生 OAuth;启动模型在 .chezmoidata/claude.yaml 和
dot_codex/modify_private_config.toml.tmpl 中设置。MCP 服务器列表
位于 .chezmoidata/mcp.yaml。Herdr 负责 agent 状态层。
Skill 安装到 ~/.harnesses/skills/<category>/<skill>/,来源是固定版本的归档
(.chezmoiexternal.toml.tmpl)和 dot_harnesses/。默认不全局启用;在项目中运行
skill-activate,把选中的 skill 以符号链接放入 ./.claude/skills、
./.agents/skills(Codex、pi、Kimi、mare 通用)和 ./.cursor/skills
(--list、--active、--category <name>、--sync、--clear)。
AI 执行姿态
受管理的默认值刻意设得很宽松,复用前请务必检查:
- Claude:
bypassPermissions,配合 Bash deny 规则和 Git 改写 hook - Codex:
approval_policy = "never"与sandbox_mode = "danger-full-access" - Cursor:
approvalMode = "unrestricted" - Antigravity:
toolPermission = "always-proceed",无终端沙箱
Claude 的 hook 还会格式化改动的文件。Git 改写 hook
(dot_claude/hooks/executable_block-git-rewrites.sh)会阻止部分不可逆操作,并在
可恢复的高风险操作前询问;它并不阻止所有 Git 变更。
安全与 Secrets
- chezmoi 使用
age加密(.chezmoitemplates/shell/age_command_wrapper.sh), 身份为~/.ssh/main与~/.ssh/main.pub。 - API key 和服务凭据存放在 gopass;密钥文件由
keys-manage备份。gopass 的结构写在private_dot_config/gopass/config.tmpl中。 - GitHub 访问走 HTTPS +
ghcredential helper,不使用insteadOf改写。 - 漏洞报告与敏感区域:SECURITY.md。
文档
CI(.github/workflows/)运行 pre-commit、Nix flake 检查和安全扫描,每日调度器
会创建依赖更新 PR。
致谢
- chezmoi 与 nix-darwin:配置编排
- Nix、flakey-profile、 Homebrew、aqua 与 mise:包与工具管理
- Claude Code、Codex、 Cursor 与 Herdr: 受管理的 AI/agent 工具
- EasyTier 与 sing-box:网络层
.chezmoiexternal.toml.tmpl中列出的外部 skill 仓库;它们仍受各自上游许可证约束。- Dracula Theme:终端与 fzf 配色
许可证
本仓库没有根目录 LICENSE 文件。在将其视为可再分发之前,请先添加明确的许可证。