2 个版本

0.1.1 2023 年 2 月 5 日
0.1.0 2023 年 2 月 5 日

#903文件系统

LGPL-2.1

71KB
1.5K SLoC

runix

一个安全的接口,用于 nix CLI。

flox


安装

使用 cargo add 安装(Rust >= 1.64)

cargo add runix

或者,手动添加

runix = "{{current_version}}" # check the latest version before adding

到您的 Cargo.toml

使用方法

runix 需要现有的 nix 安装。

runix 是一个库,允许您使用类型接口来 运行 nix

runix 将命令结构转换为对 NixBackend 实现的调用。目前开发中的后端是 command_line::NixCommandLine 后端,该后端使用 tokio::process::Commandexec nix CLI。

虽然这是参考实现,但其他后端,如基于 FFI 的实现或用于测试的 Mocking 模块,也是可能的。

注意 runix 仍在积极开发中!

它的 API 还没有定下来,随着我们扩展 Nix CLI 和特质的覆盖范围,更多字段将被添加,并且如果必要,特质 可能会 发生变化。

我们非常感谢反馈和贡献。

示例

通过示例了解接口是最简单的方法。

再次提醒,您需要将 nix 添加到您的 PATH 以使用 runix,并且已启用 experimental-features='nix-command flakes'

// (1) initialize a backend
let cli = NixCommandLine::default();

// (2) define the command
Eval {
    source: SourceArgs {
        expr: Some(r#""Hello Rust""#.into()),
    },
    ..Default::default()
}
// (3) run the command
.run(&cli, &NixArgs::default())
.await

这是 runix 的等效操作

$ nix eval --expr '"Hello Rust"'

虽然比其 shell 对应版本更冗长,但与手动编写的相同调用相当

tokio::process::Command::new("nix")
    .args([
        "eval".to_string(),
        "--expr".into(),
        r#""Hello Rust""#.into(),
    ])
    .status()
    .await

然而,runix 的主要优点是它抽象了纯参数列表,并引导您正确调用 CLI。

感兴趣? 查看更多详细解释的 rustdoc

未来路线图

我们计划扩展命令行后端,增加更多命令和一组全面的标志。根据 Nix 抽象的状态,我们计划采用原生绑定来访问 Nix 命令和概念。

许可证

Runix 采用 LGPL-2.1 许可

依赖关系

~5–13MB
~161K SLoC