首页 文章

如何在nix文件中创建全局变量(或函数)?

提问于
浏览
1

我想声明变量 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"

1 回答

  • 2

    我想声明变量dotfiles_dir,以便所有其他文件都可以查看和使用它 .

    对不起,但那是不可能的 . 在Nix中,没有全局变量这样的东西 . 如果存在,则会破坏它提供可重现构建的能力,因为Nix表达式可以访问未声明的输入 .

    /etc/nixos/configuration.nix 不是存储全局信息,它是一个函数 .

    但是......有一种方法可以在一个地方定义一个值,并在需要的地方使用它 . 像这样的东西:

    /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 
    ...
    

相关问题