Tetrigo 终端俄罗斯方块 Nix Flake实战:nix run、overlay与参数覆盖的完整手册
【免费下载链接】tetrigoPlay Tetris in your terminal.项目地址: https://gitcode.com/gh_mirrors/te/tetrigo
Tetrigo 是一个用 Go 编写的终端俄罗斯方块,让你在任意终端里直接玩 Tetris(Play Tetris in your terminal)。项目自带的 flake.nix 提供了现成的 Nix 包与 overlay:一条nix run即可运行,也能集成进你自己的 Nix 配置,并通过参数覆盖完成定制。本文带你一次掌握 nix run、overlay 与 override 三类实战用法。
读懂 flake.nix:包结构与可覆盖参数一览
使用前先了解 flake 的组织方式,核心逻辑都在 flake.nix 的outputs里,分三层:
- 编译层:用
buildGoModule从项目源码编译出tetrigo二进制,并用vendorHash锁定依赖,保证构建可复现(模块名见 go.mod)。 - 包装层:
writeShellApplication生成的 shell 包装器,首次运行时自动创建~/.config/tetrigo目录、复制一份空的 SQLite 数据库tetrigo.db,然后以--config/--db参数启动游戏。 - 暴露层:
packages.default被pkgs.lib.makeOverridable包裹(flake.nix),从而支持对config与dbPath两个参数做覆盖——这是后文一切定制的基础。
nix run 一键运行 Tetrigo:最快安装步骤
只要系统装有 Nix,直接运行(运行结束后包即被清理,不留垃圾):
nix run github:Broderick-Westrope/tetrigo另外两个常用子命令,覆盖不同场景:
| 命令 | 适用场景 |
|---|---|
nix run github:Broderick-Westrope/tetrigo | 直接运行,用完即走 |
nix build github:Broderick-Westrope/tetrigo | 只构建,生成result符号链接,适合离线复用 |
nix shell github:Broderick-Westrope/tetrigo | 进入含tetrigo的临时 shell |
📦 想本地构建或调试 overlay 时,可先克隆仓库再运行本地 flake:
git clone https://gitcode.com/gh_mirrors/te/tetrigo cd tetrigo nix run .Overlay 集成:3 行代码把 Tetrigo 加入自己的 Nix 项目
如果你用 flake 或 NixOS 管理包,推荐通过 overlay 引入。在 flake.nix 中,overlay 的定义只有 3 行——把tetrigo注入pkgs即可。你自己的 flake 这样写:
{ inputs.tetrigo.url = "github:Broderick-Westrope/tetrigo"; outputs = { nixpkgs, tetrigo, ... }: { packages.x86_64-linux.default = let pkgs = import nixpkgs { system = "x86_64-linux"; overlays = [ tetrigo.overlays.default ]; }; in pkgs.tetrigo; }; }应用 overlay 后,pkgs.tetrigo就出现在你的集合里,可以像任何常规包一样被依赖、被覆盖。完整示例见 README.md。
参数覆盖实战:用 override 定制 config 与 dbPath
🔧 这是整个 flake 最灵活的部分。pkgs.tetrigo接受两个覆盖参数:
config:一个 Nix attribute set,字段与 example.config.toml 中的键一一对应;dbPath:一个.db文件路径,用于注入现成的数据库。
例如:把最高等级限制为 20,并顺手改一下按键:
pkgs.tetrigo.override { config = { max_level = 20; keys = { force_quit = [ "q" ]; exit = [ "esc" ]; }; }; dbPath = ./tetrigo.db; }覆盖的原理是:把传入的config与example.config.toml的默认值做//合并(后者优先),生成新的config.toml写进包内——见 flake.nix 中的mkCfg辅助函数。也就是说,配置文件随包一起冻结进 Nix store,不同覆盖值会生成不同的 store 路径,互不干扰、可回滚。
运行后配置与数据库的位置:XDG 目录与命令行标志
包装器的运行时行为(flake.nix)可以概括为三步:
- 设置
TETRIGO_HOME为~/.config/tetrigo并创建目录; - 若目录中没有
tetrigo.db,就从包里复制一份空数据库; - 执行
tetrigo --config=... --db=...启动游戏。
如果不走 flake 包装器,二进制默认会在 XDG 配置目录找config.toml、在 XDG 数据目录找tetrigo.db,同样支持--config与--db手动指定,逻辑见 cmd/tetrigo/main.go。
常见配置速查:键位、主题与依赖锁定
- 默认键位:
A/D左右移动、W硬降、S软降、Q/E旋转、Space/Enter提交、Escape暂停,完整列表见 example.config.toml,全部可通过override的config.keys修改。 - 换主题配色:修改
config中的[theme.colors]与[theme.characters],覆盖后重新nix build即可生效。 - 依赖锁定:flake 输入版本由 flake.lock 锁定,本地开发可用
nix flake update显式升级,保证团队构建一致。
掌握以上三步——nix run快速体验、overlay 集成进配置、override覆盖config与dbPath——你就能把 Tetrigo 这个终端俄罗斯方块完全纳入 Nix 生态管理了 🎮
【免费下载链接】tetrigoPlay Tetris in your terminal.项目地址: https://gitcode.com/gh_mirrors/te/tetrigo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考