我已在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; ...}
的{{1}}相关联,我被强制使用options systems
,即使我只想使用nix计算nginx
的配置文件。
如何仅评估nginx.conf?
@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'
......某种解决方法,但不是很精确!我更喜欢目录中的配置文件。
答案 0 :(得分:2)
我看到你的文件名是nginx-reverse-proxy.conf
,所以它不是用花哨的NixOS模块系统构建的,而是用其他方式构建的。在这种情况下(您可以控制构建文件的方式),您可以全局包含它:
environment.etc."myconfigs"."nginx-reverse-proxy.conf".text = ...content of that file;
然后用
引用$ nix-instantiate --eval -E '
with import <nixpkgs/nixos> {
configuration = { ... };
};
config.environment.etc."myconfigs"."nginx-reverse-proxy.conf".text
'
您可能需要使用https://gist.github.com/danbst/a9fc068ff26e31d88de9709965daa2bd
中描述的技巧解码该输出这本身就是一种令人费解的方式
$ cat $(nix-build -E '
with import <nixpkgs/nixos> {
configuration = { ... };
};
config.environment.etc."myconfigs"."nginx-reverse-proxy.conf".source
')
如果您的代理配置是常规nginx.conf
脚本的一部分,那么您仍然可以使用
$ cat $(cat $(nix-build -E '
with import <nixpkgs/nixos> {
configuration = ...;
};
config.system.build.units."nginx.service".unit
')/nginx.service \
| grep nginx.conf \
| sed -r 's/.* (.*nginx.conf).*/\1/g'
)
由于nginx.conf
文件是nginx
模块专用的,我们无法直接引用它,但必须直接从使用网站中提取它。
总的来说,NixOS缺乏一个良好的界面来反省其内部,但它仍然是可能的。