Skip to content

Create Nix expression for Pebble email client#7

Open
Tardis07 wants to merge 3 commits into
QingJ01:masterfrom
Tardis07:master
Open

Create Nix expression for Pebble email client#7
Tardis07 wants to merge 3 commits into
QingJ01:masterfrom
Tardis07:master

Conversation

@Tardis07
Copy link
Copy Markdown

Add default.nix for building the Pebble email client.

该文件添加Linux系统(NixOS)支持,已通过本地编译测试

Add default.nix for building the Pebble email client.
@QingJ01
Copy link
Copy Markdown
Owner

QingJ01 commented Apr 29, 2026

感谢提交这个 PR!Nix/NixOS 构建入口对 Linux 用户很有帮助,整体方向我认可。

不过现在这个 default.nix 还不能直接合并,主要问题是它把源码写死到了旧版本:

version = 0.0.1;
src = fetchFromGitHub {
  owner = QingJ01;
  repo = Pebble;
  rev = v${finalAttrs.version};
  ...
};

这个文件如果合进 Pebble 仓库根目录,nix-build 应该构建当前 checkout 的源码,而不是重新从 GitHub 拉 v0.0.1。当前项目版本已经是 0.0.2,而且 master 上还有后续修复,所以这里会导致构建结果和仓库内容不一致。

建议改成仓库内表达式的写法,例如使用本地源码:

src = lib.cleanSource ./.;

cargoDeps = rustPlatform.importCargoLock {
  lockFile = ./Cargo.lock;
};

然后重新生成 pnpmDeps.hash。如果你的目标是提交到 nixpkgs,而不是放在本仓库里,那可以继续用 fetchFromGitHub,但也需要更新到当前 release,并同步更新 hash。

另外我这边还没有在 Nix 环境里实际验证构建结果。你改完 source/version 这块后,麻烦贴一下本地执行的命令和结果,比如 nix-buildnix build 输出,这样我再继续 review。

@Tardis07
Copy link
Copy Markdown
Author

Tardis07 commented Apr 29, 2026

感谢您的认可与高速回复

  1. 根据您的第一个建议,我已经补充了passthru.updateScript方法和update.sh脚本来更新nix package文件,这是根据nixpkg先行标准实施的,Nixpkg的更新方式就是这样拉取脚本更新,无法嵌入到nix package文件里面。
  2. 关于第二点建议,这是不成立的,从文风上看您应该是直接使用了AIGC审计代码,对于nix来说finalAttrs.src就是从GitHub拉取下来的源码部分,和仓库内是一致的,您给出的代码这样修改之后反而无法执行。
  3. 关于第三点,验证结果如下:
image 由于GitHub仓库内release tag显示的版本仍然是v0.0.1,所以此次编译结果沿用缓存,update.sh没有变化。此外我建议使用AIGC的同时要结合人工审计,不要直接贴上来。

@QingJ01
Copy link
Copy Markdown
Owner

QingJ01 commented Apr 29, 2026

感谢说明,我理解你这里是按 nixpkgs package expression 的方式来写的:固定 release 源码,然后通过 passthru.updateScript 更新版本和 hash。这个方向本身没问题。

我这边主要还有一个疑问:这个 PR 是把 update.sh 放在 Pebble 仓库根目录,但脚本里用了:

REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"

如果脚本位于当前仓库根目录,../.. 会跳出 Pebble 仓库;后面又依赖 builtins.getFlake "${REPO_ROOT}",但 Pebble 仓库目前也没有 flake.nix。所以我担心这个 update script 是按 nixpkgs 目录结构写的,放在本仓库里可能无法直接使用。

另外现在 GitHub latest release 已经是 v0.0.2,当前 default.nix 仍然是 0.0.1,这块也需要同步一下。

麻烦你再看下这两点:

  1. update.sh 是否能在 Pebble 仓库根目录直接运行;如果不能,是否需要调整路径/flake 假设。
  2. default.nix 是否可以更新到当前 latest release v0.0.2

感谢。

@Tardis07
Copy link
Copy Markdown
Author

Tardis07 commented Apr 29, 2026

  1. update.sh 确实不应该放进来,我已经移除了。在nix pkgs的使用逻辑里面,GitHub作为上游仓库,配置文件里面的版本号永远无法跟随上游一起同步。
  2. 已经更新版本号,后续您每次要发布release之前也顺手修改一下版本号即可,其他内容无需特殊修改
  3. hash也同步修改了,在第一次编译的时候会自动计算,手动复制粘贴之后,第二次编译即可正常使用,这是NixOS的基础操作之一。
image

补充:对于nix packages的使用方法,您不需要加入CICD,他不是用于release的,更多的是让其他Linux用户参考的一个编译范本。如果需要打包Linux release的话,使用AppImage是更好的选择。我不选择AppImage是因为此前在使用CC-Switch(同为Tauri开发的工具)的时候遇到了白屏的问题,是通过这样的nix package file处理好的。

@QingJ01
Copy link
Copy Markdown
Owner

QingJ01 commented Apr 29, 2026

感谢更新,我看了最新 diff,目前还剩两个需要处理的问题:

  1. update.sh 已经移除了,但 default.nix 里还保留了 passthru.updateScript = ./update.sh;。这个会引用不存在的文件,需要删除这一行,或者补回一个在当前仓库结构下可直接运行的脚本。

  2. src.hashpnpmDeps.hash 现在还是 lib.fakeHash。我理解第一次构建用 fakeHash 获取真实 hash 是 Nix 的常见流程,但合进仓库的 default.nix 应该是用户可以直接构建的状态,所以这里需要替换成真实 hash。

这两点处理完后我再继续 review。谢谢。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants