找出我在 nix 中使用的系统类型
find out what system type I am on in nix
我想以在 NixOs (linux) 和 MacOs (darwin) 上工作的方式编写我的 nixos-configuration 和 home-manager-configuration 文件。
虽然有些东西在两个系统上的配置方式相同(例如 git),但其他东西只对其中一个有意义(比如 wayland-windowmanagers 只是 linux 上的一个东西)。
Nix 语言功能 if-else-statements,所以现在我只需要一种方法来找出我使用的是哪种系统。
我追求的是这样的:
wayland.sway.enable = if (os == "MacOs") then false else true;
有没有办法找出我在 nix 中使用的系统?
在 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;
}
我(独立地)找到了与@robert-hensing 的答案类似的答案。所以这里是为了完整起见:
以下配置将在 MacOs 上安装“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
.
我想以在 NixOs (linux) 和 MacOs (darwin) 上工作的方式编写我的 nixos-configuration 和 home-manager-configuration 文件。
虽然有些东西在两个系统上的配置方式相同(例如 git),但其他东西只对其中一个有意义(比如 wayland-windowmanagers 只是 linux 上的一个东西)。
Nix 语言功能 if-else-statements,所以现在我只需要一种方法来找出我使用的是哪种系统。
我追求的是这样的:
wayland.sway.enable = if (os == "MacOs") then false else true;
有没有办法找出我在 nix 中使用的系统?
在 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;
}
我(独立地)找到了与@robert-hensing 的答案类似的答案。所以这里是为了完整起见:
以下配置将在 MacOs 上安装“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
.