myservice
我在 myservice.nix
写了一个nixos服务,我把它包含在 /etc/nixos/configuration.nix
中:
imports [ /path/to/myservice.nix ];
后来我在 configuration.nix
里面使用它:
services.myservice.enable = true;
问题
在一个场景中我不能使用 nixos-rebuild switch
,但因为输入 nix
链接到 options system
使用 foo = mkOption { type = types.int; ...}
我被迫使用 options systems
,即使我只想使用nix为 nginx
计算配置文件 .
how to evaluate that nginx.conf only?
@aszlig给我写了这个命令:
nix-instantiate --eval --strict -E '(import <nixpkgs/nixos> { configuration = { imports = [ nixcloud-reverse-proxy/nixcloud-reverse-proxy.nix ]; services.nixcloud-reverse-proxy.enable = true; }; }).config.system.build.configsFromPath'
执行结果
nix-instantiate --eval --strict -E '(import <nixpkgs/nixos> { configuration = { imports = [ ./nixcloud-reverse-proxy.nix ]; services.nixcloud-reverse-proxy.enable = true; }; }).config.system.build.configsFromPath'
error: attribute ‘configsFromPath’ missing, at (string):1:1
(use ‘--show-trace’ to show detailed location information)
更新
nix-build '<nixpkgs/nixos>' -A config.systemd.services.nixcloud-reverse-proxy.runner -I nixos-config=./configuration.nix
...
/nix/store/lp2jbb1wahhlr7qkq81rmfvk84mjk1vk-nixcloud-reverse-proxy-runner
现在我可以使用它来grep conf文件:
cat /nix/store/lp2jbb1wahhlr7qkq81rmfvk84mjk1vk-nixcloud-reverse-proxy-runner | grep -o ' /nix/store/.*nginx-reverse-proxy.conf'
......一种解决方法,但不是很精确!我更喜欢目录中的配置文件 .
1 回答
我看到你的文件名是
nginx-reverse-proxy.conf
,所以它不是用花哨的NixOS模块系统构建的,而是用其他方式构建的 . 在这种情况下(您可以控制如何构建文件),您可以在全局中包含它:你随后参考哪个
您可能需要使用https://gist.github.com/danbst/a9fc068ff26e31d88de9709965daa2bd中描述的技巧解码该输出
这本身就是一种令人费解的方式
如果您的代理配置是一般
nginx.conf
脚本的一部分,那么您仍然可以使用它因为
nginx.conf
文件是nginx
模块专用的,所以我们不能直接引用它,但必须直接从使用站点提取它 .总的来说,NixOS缺乏一个良好的界面来反省其内部,但它仍然是可能的 .