假设我使用nix-env的--query操作搜索要安装的软件包:
$ nix-env -qa 'aspell.*en'
aspell-dict-en-7.1-0
Run Code Online (Sandbox Code Playgroud)
我在/etc/nixos/configuration.nixNixOS 的主配置文件中写了这个包名:
environment.systemPackages = with pkgs; [
aspell-dict-en
];
Run Code Online (Sandbox Code Playgroud)
然而,如果我运行sudo nixos-rebuild switch, NixOS 命令来更新配置并安装declaratively指定的所有系统范围的软件包,它会因错误而中止:
error: undefined variable ‘aspell-dict-en’ at /etc/nixos/configuration.nix:44:5
Run Code Online (Sandbox Code Playgroud)
我知道对于很多包,虽然不是全部,nix-env返回的名称和应该在environment.systemPackages配置选项中指定的名称是不同的,但我不明白其中的逻辑。如何安装通过 找到的软件包nix-env?
我在NixOS上使用Nix 包管理器。假设我想安装一个提供文件的包。我如何找到提供此文件的包,类似于其他 GNU/Linux 发行版?libgtk-x11-2.0.so.0
目前我必须谷歌该文件并找出它可能属于哪个包并在 Nix 存储库中找到相应的包,但我想要一个更惯用的方法。
假设我有一个非常简单的NixOS 配置文件:
{ config, pkgs, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
];
# SOME STUFF
environment.systemPackages = with pkgs; [ emacs gitFull ];
# SOME STUFF
}
Run Code Online (Sandbox Code Playgroud)
我知道 NixOS 实现了一个模块系统,一个模块就是一个.nix文件。每个.nix文件都应该包含任何有效的Nix 表达式(例如一个函数或一个集合)。这意味着 NixOS 配置文件/etc/nixos/configuration.nix本身就是一个模块,包含一个 Nix 表达式。
我也知道要使另一个模块中的 Nix 表达式对我正在使用的模块可见,我可以使用内置import函数。
我想将系统包的声明(包含emacs和的列表gitFull)拆分为 file packages.nix。如何将 NixOS 配置文件拆分为单独的模块?
我找到的创建 Nix 包本地存储库的所有说明都涉及创建主nixpkgs存储库的本地克隆并添加到其中。
有没有一种方法可以创建一个只包含我的本地附加包的小型存储库?
如何编写一个简单的推导来打包 nix 程序以及如何创建 PR 将其包含在 nixpkgs 中?
(我写这篇文章是因为我找不到简单的解释)
有没有办法强制从 /nix/store/..
我正在测试我的包的表达式,并希望确保它能够正确重建。
问题是如果我构建我的包一次,下次我再次构建它时它将使用缓存。
我使用这个命令来测试我的包
nix-shell -I nixpkgs=</path/to/repo> -p <package_name>
Run Code Online (Sandbox Code Playgroud)
我不想使用,nix-collect-garbage因为它也删除了很多buildInputs。
寻找类似的东西 nix-cg <package_name>
到目前为止,我一直在通过nix-env -i安装包来试用 Nix 包管理器。现在,我想用 a 来管理它~/configuration.nix,就像这里的例子一样,这样我就可以在我的点文件中对其进行版本控制。有没有办法从我当前的环境中生成这个配置?
我能找到的有关用户或系统级配置的所有信息都特定于 NixOS,并假设我已运行nixos-generate-config以创建该文件。nixpkgs 不提供此工具,这让我认为它仅用于创建 NixOS 安装,而不用于创建一般配置文件。
另外,为什么 Nix 包管理器在安装时不创建这个文件?如果没有这个文件,Nix(不是 NixOS)用户如何配置他们安装的软件,比如 Vim 插件?
我怎样才能找出哪个nixpgs -package 提供了给定的文件/命令,但系统上可能没有安装?
其他包管理器提供此功能,如下所示:
nix有类似的功能吗?
上下文:我试图弄清楚哪个包提供了grep,然后才意识到它是由gnugrep包提供的(谁会想到?)。我正在寻找一种系统的方法来回答此类问题,以避免下次再玩猜谜游戏。
我尝试过的事情:
nix-env -qa仅搜索包名称我在nixos-16.03频道上有一个 NixOS 盒子。我希望机器保持在最稳定的状态,所以我想避免切换到nixos-unstable频道。
但是,我需要安装比该频道中可用的包更新版本(nodejs-6_x在本例中)。在手册中,有一个部分描述了“一键安装”,起初看起来正是我所需要的。但是,http://hydra.nixos.org上的 Hydra 服务器似乎没有提供该部分中描述.nixpkg的nix-install-package工具使用的任何文件。
wiki 还记录了一个可以自定义包的过程(该页面称为Modifying Packages),我认为它可以用于我的目的,尽管我似乎是在与该工具作斗争而不是使用它。
我也在 IRC 中问过这个问题(感谢M-Ralith耐心回答我无知的问题!),但我不太明白如何应用它。建议是“在您的 nixpkgs 配置中覆盖 src 和版本”,这听起来像是我可以.nixpkgs/configuration.nix在我订阅的频道 ( nixos-16.03) 中编写一个 nix 表达式并覆盖包的这些属性。当我询问通道中不存在的包时,建议是“指定整个包而不是仅覆盖 src 和版本”,我认为这意味着我需要复制包的整个 nix 表达式我对......感兴趣。nix-env
对于存在于另一个频道中的软件包,我想安装但留在我当前的频道中,有没有更好的方法?几乎感觉我应该能够做类似的事情nix-build <url> | nix-env -i。理想的做法是安装这个,但没有配置可能会阻止它在以后升级,如果我当前的频道要赶上。
我想添加与awscli命令完成相关的功能。
在我的特殊情况下,我需要从 获取脚本/nix/store/hvx7xqvjz7r08nsb9kssh1d9s302v3sp-awscli-1.16.106/share/zsh/site-functions/aws_zsh_completer.sh。
如何获取/nix/store/hvx7xqvjz7r08nsb9kssh1d9s302v3sp-awscli-1.16.106包 ( awscli) 的存储路径 ( )?因为我不认为硬编码这个参考是理想的。