# linux **Repository Path**: bleedingfight/linux ## Basic Information - **Project Name**: linux - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2018-07-04 - **Last Updated**: 2026-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # linux — 个人 dotfiles 个人跨平台(macOS + Linux)dotfiles 仓库。每类配置放在 `config//` 下, 由**两套安装引擎**接管: - **方式 A(传统)**:`install.sh` 命令式安装器 —— 命令式复制/包管理,历史主入口; - **方式 B(Nix 试点)**:Nix flake + home-manager —— 声明式管理,目前是试点。 两套引擎可以共存,但**同一配置项只能归一个引擎管**,共存规则见 [下方专门章节](#两套引擎共存规则重要)。 --- ## 方式 A:install.sh 传统安装器 ```bash ./install.sh # TUI 多选安装 ./install.sh -l # 列出当前平台可用项(软件未装的项默认隐藏) ./install.sh -l --include-missing ./install.sh -a # 全量安装 ./install.sh kitty rime -y # 指定项安装 ``` 每个配置项的元数据(`NAME` / `PLATFORMS` / `TYPE` / `SRC` / `DST` / `PKGS`) 声明在 `config//item.sh`,字段约定、跨平台差异处理原则(`linux/` 覆盖目录等)详见 [config/README.md](config/README.md)。 ## 方式 B:Nix home-manager 试点 用 flake 声明式管理软件包和静态配置文件:`nixpkgs-25.05` + `home-manager release-25.05`(nixpkgs 已 follows)。 ### 前置:安装 Nix - macOS 推荐用 Determinate 安装器: ```bash curl --proto '=https' --tlsv1.2 -sSf https://install.determinate.systems/nix | sh -s -- install ``` - Linux 上各发行版包管理器均可,或官方脚本: `curl -L https://nixos.org/nix/install | sh` ### host 列表 | host | system | 用户 | 主目录 | | ------------ | --------------- | --------- | -------------- | | `mbp` | aarch64-darwin | `liushuai`| `/Users/liushuai` | | `linux-x86` | x86_64-linux | `liushuai`| `/home/liushuai` | | `linux-arm` | aarch64-linux | `liushuai`| `/home/liushuai` | ### 日常用法 ```bash # 首次安装(Nix 未在 PATH 时用 nix run 拉起 home-manager) nix run home-manager/release-25.05 -- switch --flake .#mbp # 日常:改配置 -> 提交 -> switch git add -A && git commit -m "..." home-manager switch --flake .# # 升级软件包/flake 输入 nix flake update home-manager switch --flake .# ``` > **PATH 提示**:zsh/fish 不在 Nix 纳管范围内,`~/.nix-profile/bin` > (及 macOS 上 `/etc/profiles/per-user/...`)需要自己加进 PATH。 ### Nix 试点范围 | item | Nix 管什么 | 目标路径 | install.sh 还应勾选 | | ------------ | ----------------- | ------------------------------------- | ------------------- | | kitty | 包(Linux) + 配置 | `~/.config/kitty/` | **否** | | helix | 包 + 配置 | `~/.config/helix/` | **否** | | zellij | 包 + 配置 | `~/.config/zellij/` | **否** | | alacritty | 包 + 配置 | `~/.config/alacritty/` | **否** | | aria2_config | 包 + 配置 | `~/.config/aria2/aria2.conf` | **否** | | navi | 包 + 配置 | `~/.config/navi/` | **否** | | tmux-config | 包 + 仅主配置 | `~/.tmux.conf`(TPM 仍手动) | **否** | | vim-config | 包 + 仅主配置 | `~/.vimrc`、`~/.vim/autoload/plug.vim`| **否** | | screen_config| 包 + 仅配置 | `~/.screenrc` | **否** | | gdb | 包(Linux) + 仅配置| `~/.gdbinit` | **否** | ## 两套引擎共存规则(重要) > [!WARNING] > home-manager 管理的文件是指向 `/nix/store` 的**只读符号链接**。 > `install.sh` 的复制逻辑会解引用并**替换掉符号链接**,导致下次 > `home-manager switch` 时冲突失败。 - **规则一**:已纳入 Nix 试点范围的项目,**不要再在 install.sh 里勾选**。 - **规则二**:某目标先用 install.sh 装过的,首次 `home-manager switch` 前 **先删掉旧目标文件/目录**(或用 `home-manager switch` 报错提示处理后重试)。 - **Nix 不迁清单**(继续走 install.sh): - zsh(zinit 插件管理)、fish(oh-my-fish) - rime(submodule + brew cask) - nvim(外部独立仓库) - docker 等服务类 - 源码编译类(gcc/opencv/postgresql/redis/influxdb/ffmpeg 等 `install_software/` 脚本) ## 仓库结构 ```text . ├── install.sh # 方式 A:命令式安装引擎(TUI/列表/指定项) ├── flake.nix # 方式 B:Nix flake 入口,三个 host ├── modules/ # home-manager 模块 │ ├── default.nix # 入口:home 全局选项 │ ├── packages.nix # 软件包清单 │ └── files.nix # 配置文件 -> 目标路径映射(逐文件显式) ├── config/ # 配置项本体,每个子目录一个 item │ └── / │ ├── item.sh # 元数据(NAME/PLATFORMS/TYPE/SRC/DST/PKGS) │ └── ... # 配置文件;跨平台差异放 linux/ mac/ 等覆盖目录 ├── install_software/ # 源码编译类安装脚本(gcc/opencv/redis/...) ├── script/ # 杂项辅助脚本 └── docs/ # 文档 ``` - `item.sh` 字段约定、`linux/` 覆盖目录语义(主目录以 mac 为基准、 Linux 差异是显式增量)见 [config/README.md](config/README.md)。 - Nix 侧的跨平台差异只用一处:`config/kitty/font.conf`(mac)vs `config/kitty/linux/font.conf`(Linux),在 `modules/files.nix` 里按 `pkgs.stdenv.isDarwin` 选择。 ## FAQ **Q: kitty 的 `current-theme.conf` 为什么不纳管?** kitty 内置换主题功能(`kitten themes`)会直接改写这个文件。Nix 的符号链接 是只读的,纳管后换主题会失败;不纳管则该文件保持普通文件,可自由切换。 主题基线是仓库里的 `Catppuccin-Mocha.conf`。 **Q: vim 插件怎么装?** Nix 只部署 `~/.vimrc` 和 `~/.vim/autoload/plug.vim`,插件本体需要在启动 vim 后手动执行 `:PlugInstall`。 **Q: tmux 的 TPM 插件怎么装?** Nix 只部署 `~/.tmux.conf`。TPM 需手动克隆: `git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm`, 然后进入 tmux 按 `prefix + I` 安装插件。 **Q: `home.stateVersion` 是什么?** 标识首次部署时的 home-manager 大版本,决定兼容行为;**设置一次后不再改**, 升级 home-manager 也不要动它。 **Q: flake 报 `file not found`?** flake 的源码经过 git 过滤,未 `git add` 的文件对 flake 不可见。先 `git add <新文件>` 再重试(未提交也能用)。 ## 验证(不实际切换) Linux 上可先构建激活包,检查产物里的 home-files 再决定是否 activate: ```bash nix build .#homeConfigurations.linux-x86.activationPackage ls -R result/home-files/ # 检查 .config/kitty、.vimrc 等落点 ./result/activate # 确认无误后再执行 ``` CI(`.github/workflows/nix-check.yml`)在 macOS 与 Ubuntu 上对 flake 做 `nix build` 验证。