【问题标题】:find out what system type I am on in nix找出我在 nix 中使用的系统类型
【发布时间】:2021-05-09 07:56:49
【问题描述】:

我想编写我的 nixos-configuration 和 home-manager-configuration 文件,使其在 NixOs (linux) 和 MacOs (darwin) 上都可以工作。

虽然有些东西在两个系统(例如 git)上的配置方式相同,但其他只在其中一个系统上有意义(比如 wayland-windowmanagers 只是 linux 上的一个东西)。

Nix 语言功能 if-else-statements,所以现在我需要的只是找出我使用的是哪种系统的方法。

我所追求的是这样的:

wayland.sway.enable = if (os == "MacOs") then false else true;

有没有办法找出我在 nix 中使用的系统?

【问题讨论】:

    标签: nix


    【解决方案1】:

    在 NixOS 模块中,您可以这样做:

    { config, lib, pkgs, ... }:
    {
      wayland.sway.enable = if pkgs.stdenv.isLinux then true else false;
    
      # or if you want to be more specific
      wayland.sway.enable = if pkgs.system == "x86_64-linux" then true else false;
    
      # or if you want to use the default otherwise
      # this works for any option type
      wayland.sway.enable = lib.mkIf pkgs.stdenv.isLinux true;
    }
    

    但是,我更喜欢将配置分解为模块,然后只将 imports 放在我需要的模块中。

    darwin-configuration.nix

    { ... }:
    {
      imports = [ ./common-configuration.nix ];
    
      launchd.something.something = "...";
    }
    

    对于 NixOS:

    configuration.nix

    { ... }:
    {
      imports = [ ./common-configuration.nix ];
    
      wayland.sway.enable = true;
    }
    

    【讨论】:

      【解决方案2】:

      我(独立地)找到了与@robert-hensing 类似的答案。所以这里是为了完整起见:

      以下配置将在 MacO 上安装“hello”,在其他系统上安装“tree”。

      { config, pkgs, ... }:
      
      let
        my_packages = if pkgs.system == "x86_64-darwin"
                      then [ pkgs.hello ]
                      else [ pkgs.tree ];
      in
      {
        environment.systemPackages = my_packages;
      }
      

      您可以通过运行 nix repl '<nixpkgs>' 找到您的 pkgs.system 字符串,然后输入 system

      【讨论】:

        猜你喜欢
        • 2016-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-17
        • 1970-01-01
        • 2016-05-07
        • 1970-01-01
        相关资源
        最近更新 更多