#packages #nixos #install #nix #tool #configuration #parse

bin+lib npkg

一些用于在NixOS上管理和安装软件包的函数

3个版本

0.1.2 2022年6月25日
0.1.1 2022年5月20日
0.1.0 2022年5月12日

14#nixos

MIT 许可证

53KB
1.5K SLoC

Npkg

Built with Nix License: MIT

Npkg 是一个小的工具,允许您在一个地方配置所有您的NixOS软件包。

Npkg 使用 rust 编写,并使用 nix-editorrnix-parser 解析和编辑配置文件。

警告

此工具仍然是新的/实验性的,并且由于它直接修改关键文件,例如 /etc/nixos/configuration.nix,请确保您有备份,以防它损坏或删除此类文件。我已经为了虚无牺牲了一些我的文件,不要让这种情况发生在你身上!

NixOS 安装

git clone https://github.com/vlinkz/npkg
nix-env -f npkg -i npkg

然后修改 ~/npkg/config.json 以匹配您的配置。

与Nix Flakes一起使用

nix run github:vlinkz/npkg -- --help

声明性系统安装

configuration.nix 的头部

{ config, pkgs, lib, ... }:

let
  npkg = (import (pkgs.fetchFromGitHub {
    owner = "vlinkz";
    repo = "npkg";
    rev = "0.1.2";
    sha256 = "0000000000000000000000000000000000000000000000000000";
  })).default;
in 
{
  imports =
# rest of configuration

软件包

environment.systemPackages =
with pkgs; [
  npkg
  # rest of your packages
];

参数

USAGE:
    npkg [OPTIONS] [PACKAGES]...

ARGS:
    <PACKAGES>...    Packages

OPTIONS:
    -d, --dry-run            Do not build any packages, only edit configuration file
    -E, --env                Use nix environment 'nix-env'
    -h, --help               Print help information
    -H, --home               Use home-manager 'home.nix'
    -i, --install            Install a package
    -l, --list               List installed packages
    -o, --output <OUTPUT>    Output modified configuration file to a specified location
    -r, --remove             Remove a package
    -s, --search             Search for a package
    -S, --system             Use system 'configuration.nix'
    -u, --update             Update packages
    -V, --version            Print version information

用例

安装软件包

要安装软件包,您可以运行

npkg -i <PACKAGE>

默认情况下,这将使用 nix-env 并在您当前环境中安装软件包。您可以通过使用 -S-H-E 标志来选择使用特定的可用安装程序。

  • npkg -iS hello
    

    将安装 hello 软件包作为系统软件包,通过修改您的 /etc/nixos/configuration.nix 文件,然后调用 nixos-rebuild switch

  • npkg -iH hello
    

    如果已安装,将使用 home-manager 安装 hello 软件包。它将修改 ~/.config/nixpkgs/home.nix,然后调用 home-manager switch

  • npkg -iE hello
    

    hello 软件包安装到当前 nix 环境,通过调用 nix-env -iA nixos.hello

删除软件包

与安装软件包非常相似

npkg -r <PACKAGE>

相同的 -S-H-E 标志适用。

更新软件包

更新所有软件包

npkg -u

要指定仅一种类型,可以使用相同的 -S-H-E 标志。

列出已安装的软件包

npkg -l

这将列出在 /etc/nixos/configuration.nix~/.config/nixpkgs/home.nix 以及通过 nix-env 安装的软件包。

您可以通过使用 -S-H-E 标志来指定这些选项之一。

搜索软件包

npkg -s <QUERY>

这将打印与查询匹配的软件包列表。例如

$ npkg -s hello greeting

* hello (2.12) (nix env)
  A program that produces a familiar, friendly greeting

这意味着软件包 hello 版本 2.12 目前已通过 nix-env 安装。

配置

配置文件默认存储在 ~/.config/npkg/config.json 中,包含

{
  "systemconfig": "/etc/nixos/configuration.nix",
  "homeconfig": "/home/$HOME/.config/nixpkgs/home.nix",
  "flake": null
}

这些值可以被编辑以指向其他位置。这对于基于 nix flake 的系统 或任何配置文件不在预期位置的系统非常有用。

但为什么?

我想用 nix-editor 作为其他工具的后端来编写一些作为概念的代码。但到目前为止,我几乎每天都在使用它!

未来计划

  • 检查其他位置安装的软件包。

    例如,如果使用 home-manager 安装 hello,并且它已经通过 nix-env 安装,提供一个选项来切换它。

  • 在删除软件包时,自动检测安装位置而不是默认使用 nix-env

  • 其他任何进入我脑海的想法

依赖项

~17–26MB
~553K SLoC