You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

各场景下Nix允许非自由包的配置方法咨询:含Flakes与Home Manager

非自由包(Unfree Packages)启用配置方法

1. NixOS 系统级配置

直接在/etc/nixos/configuration.nix里添加配置:

  • 全局允许所有非自由包:
nixpkgs.config.allowUnfree = true;
  • 仅允许指定非自由包:
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem pkg.name [ "package-name-1" "package-name-2" ];

改完执行sudo nixos-rebuild switch生效。

2. 独立Nix环境(如macOS非NixOS系统)

全局生效

编辑用户配置文件~/.config/nix/nix.conf,添加:

allow-unfree = true

未开启Flakes的话,还要加上experimental-features = nix-command flakes。

单个包临时/局部生效

在shell.nix或default.nix里指定:

{ pkgs ? import <nixpkgs> { config.allowUnfreePredicate = pkg: pkg.name == "your-target-package"; } }:
pkgs.your-target-package

3. Nix with Flakes

全局所有Flakes共用配置

和独立Nix操作一致,修改~/.config/nix/nix.conf:

experimental-features = nix-command flakes
allow-unfree = true

单个Flake内独立配置(推荐,避免全局污染)

在flake.nix的nixpkgs导入阶段指定配置:

inputs = {
  nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};

outputs = { self, nixpkgs }:
let
  system = "x86_64-darwin"; # 对应你的macOS架构,也可写aarch64-darwin
  pkgs = import nixpkgs {
    inherit system;
    config = {
      allowUnfree = true; # 全局开启
      # 仅指定包:allowUnfreePredicate = pkg: builtins.elem pkg.name [ "zoom" "slack" ];
    };
  };
in {
  darwinConfigurations."your-mac-hostname" = nixpkgs.lib.nixosSystem {
    inherit system;
    modules = [ ./configuration.nix ]; # 你的MyNixOS生成配置文件
  };
}

改完执行nix flake update && darwin-rebuild switch --flake .#your-mac-hostname。

4. Nix with Flakes + Home Manager

方式1:Flake集成Home Manager时配置

两种方式任选其一:

  • 方法A:在flake里全局设置
outputs = { self, nixpkgs, home-manager }:
let
  system = "x86_64-darwin";
  pkgs = import nixpkgs {
    inherit system;
    config = { allowUnfree = true; };
  };
in {
  homeConfigurations."your-user@your-host" = home-manager.lib.homeManagerConfiguration {
    inherit pkgs;
    modules = [ ./home.nix ];
  };
}
  • 方法B:在home.nix里设置
{ config, pkgs, ... }:
{
  nixpkgs.config.allowUnfree = true;
  # 仅指定包:nixpkgs.config.allowUnfreePredicate = pkg: pkg.name == "slack";

  home.packages = [ pkgs.slack ]; # 安装目标非自由包
}

方式2:用户级Home Manager配置

直接编辑~/.config/home-manager/home.nix,添加上述nixpkgs.config配置,执行home-manager switch --flake .生效。


排查allowUnfreePredicate无效问题

  1. 确认包名准确:部分包的name不带版本号,比如Zoom的包名是zoom-us,可通过nix search nixpkgs zoom查看正确名称。
  2. 确认配置层级正确:用Flake时,要把配置加在导入nixpkgs的config参数中;用Home Manager时,配置要放在nixpkgs.config节点下。

内容的提问来源于stack exchange,提问作者Neil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 08:30:19