Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nixos: Allow passing modules in programmatically #50501

Closed
wants to merge 1 commit into from

Conversation

Baughn
Copy link
Contributor

@Baughn Baughn commented Nov 17, 2018

Motivation for this change

As it says.

For instance, I have a piece of code that creates a large number of VMs, which differ only in their networking.hostName.

While wrapping 'configuration' does work, adding this parameter vastly simplifies said code, while minimizing coupling; it reduces to nixos { configuration = ./base-node.nix; modules = [{ networking.hostName = hostName; }]; }.

Things done
  • Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS)
  • Built on platform(s)
    • NixOS
    • macOS
    • other Linux distributions
  • Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
  • Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
  • Tested execution of all binary files (usually in ./result/bin/)
  • Determined the impact on package closure size (by running nix path-info -S before and after)
  • Fits CONTRIBUTING.md.

@Baughn Baughn requested a review from nbp as a code owner November 17, 2018 14:24
@infinisil
Copy link
Member

Old way:

import <nixpkgs/nixos> {
  configuration = {
    imports = [ ./base-node.nix ];
    networking.hostName = hostName;
  };
}

Your way:

import <nixpkgs/nixos> {
  configuration = ./base-node.nix;
  modules = [{ networking.hostName = hostName; }];
}

Which is the same as:

import <nixpkgs/nixos> {
  modules = [
    ./base-node.nix
    { networking.hostName = hostName; }
  ];
}

So we could get rid of the configuration argument entirely. But then we could just change this argument to accept a list of modules as well:

import <nixpkgs/nixos> {
  configuration = [
    ./base-node.nix
    { networking.hostName = hostName; }
  ];
}

But really, that's pretty much the same length as the old way, so this change doesn't seem justified.

@Baughn
Copy link
Contributor Author

Baughn commented Nov 17, 2018

That's supposed to work..?

I was certain the 'configuration' parameter had to be a path, but apparently not. Oh well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants