Describe the bug
Importing multiple times a given NixOS module exposed by a flake is not allowed. Nix complains about options being already declared.
Steps To Reproduce
- Define a flake that expose a NixOS module which declare at least one option:
flake.nix:
{
outputs = { self }: {
nixosModules.debug = { config, lib, ... }:
{
options = {
debug = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable debug.
'';
};
};
};
config = lib.mkIf config.debug.enable {
systemd.globalEnvironment = {
SYSTEMD_LOG_LEVEL = "debug";
};
};
};
};
}
- Define another flake that uses the previous flake:
flake.nix:
{
inputs.nixpkgs.url = github:NixOS/nixpkgs/nixos-22.05;
inputs.debug.url = path:/home/me/flakes/debug;
outputs = inputs@{ self, nixpkgs, ... }: {
nixosConfigurations.mymachine = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules =
[
(import ./configuration.nix)
];
specialArgs = { inherit inputs; };
};
};
}
configuration.nix:
{ config, pkgs, inputs, ... }:
{
imports =
[
./hardware-configuration.nix
inputs.debug.nixosModules.debug
inputs.debug.nixosModules.debug
];
# here goes the rest of the config
}
- Build the configuration and notice the error
$ nixos-rebuild switch --flake .#mymachine
building the system configuration...
error: The option `debug.enable' in `/nix/store/da9dyx30lsdgw2x2gnxkc88aq1d9fwik-source/flake.nix' is already declared in `/nix/store/da9dyx30lsdgw2x2gnxkc88aq1d9fwik-source/flake.nix'.
(use '--show-trace' to show detailed location information)
Expected behavior
It should be allowed to import multiple times a NixOS module that declare options. It already works today unless this module is exposed by a flake.
Importing multiple times into the same module is not very useful. What is useful is to import the same module (i.e.: D) into several modules (i.e.: B, C) which are themselves imported into one final module (i.e.: A):
- A import B
- A import C
- B import D
- C import D
nix-env --version output
nix-env (Nix) 2.11.0
Describe the bug
Importing multiple times a given NixOS module exposed by a flake is not allowed. Nix complains about options being already declared.
Steps To Reproduce
flake.nix:flake.nix:configuration.nix:Expected behavior
It should be allowed to import multiple times a NixOS module that declare options. It already works today unless this module is exposed by a flake.
Importing multiple times into the same module is not very useful. What is useful is to import the same module (i.e.:
D) into several modules (i.e.:B,C) which are themselves imported into one final module (i.e.:A):nix-env --versionoutputnix-env (Nix) 2.11.0