如何在 nix 文件中创建全局变量(或函数)?
How to make global variable (or function) in nix file?
我想声明变量 dotfiles_dir
以便所有其他文件都可以看到和使用它。
例如(不工作)
在 /etc/nixos/configuration.nix
中(这是根文件,对吧?)
dotfiles_dir="/home/bjorn/.config/dotfiles";
import "${dotfiles_dir}/nixos/root/default.nix"
并在 ~/.config/nixpkgs/home.nix
中使用它(使用 https://github.com/rycee/home-manager)
import "${dotfiles_dir}/nixos/home/default.nix"
I want to declare variable dotfiles_dir so all other files can see and use it.
抱歉,这是不可能的。在 Nix 中,没有全局变量这样的东西。如果有,它将破坏它提供可重现构建的能力,因为 Nix 表达式将可以访问未声明的输入。
/etc/nixos/configuration.nix
不是存储全局信息的地方,它在技术上是一个 NixOS 模块。但更重要的是,它是一个函数。
但是...有一种方法可以在一个地方定义一个值,然后在需要的地方使用它。像这样:
/etc/nixos/dotfiles-dir.nix
"/home/bjorn/.config/dotfiles"
~/.config/nixpkgs/home.nix
let
dotfiles_dir = import /etc/nixos/dotfiles-dir.nix;
dotfiles = import (builtins.toPath "${dotfiles_dir}/nixos/home/default.nix");
in
...
你还可以更花哨...
/etc/nixos/my-settings.nix
{ dotfiles_dir = "/home/bjorn/.config/dotfiles";
, some_other_value = "whatever";
}
~/.config/nixpkgs/home.nix
let
dotfiles_dir = (import /etc/nixos/my-settings.nix).dirfiles_dir;
dotfiles = import (builtins.toPath "${dotfiles_dir}/nixos/home/default.nix");
in
...
我想声明变量 dotfiles_dir
以便所有其他文件都可以看到和使用它。
例如(不工作)
在 /etc/nixos/configuration.nix
中(这是根文件,对吧?)
dotfiles_dir="/home/bjorn/.config/dotfiles";
import "${dotfiles_dir}/nixos/root/default.nix"
并在 ~/.config/nixpkgs/home.nix
中使用它(使用 https://github.com/rycee/home-manager)
import "${dotfiles_dir}/nixos/home/default.nix"
I want to declare variable dotfiles_dir so all other files can see and use it.
抱歉,这是不可能的。在 Nix 中,没有全局变量这样的东西。如果有,它将破坏它提供可重现构建的能力,因为 Nix 表达式将可以访问未声明的输入。
/etc/nixos/configuration.nix
不是存储全局信息的地方,它在技术上是一个 NixOS 模块。但更重要的是,它是一个函数。
但是...有一种方法可以在一个地方定义一个值,然后在需要的地方使用它。像这样:
/etc/nixos/dotfiles-dir.nix
"/home/bjorn/.config/dotfiles"
~/.config/nixpkgs/home.nix
let
dotfiles_dir = import /etc/nixos/dotfiles-dir.nix;
dotfiles = import (builtins.toPath "${dotfiles_dir}/nixos/home/default.nix");
in
...
你还可以更花哨...
/etc/nixos/my-settings.nix
{ dotfiles_dir = "/home/bjorn/.config/dotfiles";
, some_other_value = "whatever";
}
~/.config/nixpkgs/home.nix
let
dotfiles_dir = (import /etc/nixos/my-settings.nix).dirfiles_dir;
dotfiles = import (builtins.toPath "${dotfiles_dir}/nixos/home/default.nix");
in
...