Unverified Commit cdf83e0f authored by Jörg Thalheim's avatar Jörg Thalheim Committed by GitHub
Browse files

nixos-generate-config: add --flake option (#383033)

parents 0add0231 1606ea91
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -398,6 +398,9 @@ Use the following commands:
    [](#ch-options). A minimal example is shown in
    [Example: NixOS Configuration](#ex-config).

    This command accepts an optional `--flake` option, to also generate a
    `flake.nix` file, if you want to set up a flake-based configuration.

    The command `nixos-generate-config` can generate an initial
    configuration file for you:

@@ -490,6 +493,14 @@ Use the following commands:
    from the NixOS binary cache), you can re-run `nixos-install` after
    fixing your `configuration.nix`.

    If you opted for a flake-based configuration, you will need to pass the
    `--flake` here as well and specify the name of the configuration as used in
    the `flake.nix` file. For the default generated flake, this is `nixos`.

    ```ShellSession
    # nixos-install --flake 'path/to/flake.nix#nixos'
    ```

    As the last step, `nixos-install` will ask you to set the password
    for the `root` user, e.g.

+2 −0
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@

- `nixos-rebuild-ng`, a full rewrite of `nixos-rebuild` in Python, is available for testing. You can enable it by setting [system.rebuild.enableNg](options.html#opt-system.rebuild.enableNg) in your configuration (this will replace the old `nixos-rebuild`), or by adding `nixos-rebuild-ng` to your `environment.systemPackages` (in this case, it will live side-by-side with `nixos-rebuild` as `nixos-rebuild-ng`). It is expected that the next major version of NixOS (25.11) will enable `system.rebuild.enableNg` by default.

- The `nixos-generate-config` command now supports a optional `--flake` option, which will generate a flake.nix file alongside the `configuration.nix` and `hardware-configuration.nix`, providing an easy instroduction into flake-based system configurations.

- A `nixos-rebuild build-image` sub-command has been added.
  It allows users to build platform-specific (disk) images from their NixOS configurations. `nixos-rebuild build-image` works similar to the popular [nix-community/nixos-generators](https://github.com/nix-community/nixos-generators) project. See new [section on image building in the nixpkgs manual](https://nixos.org/manual/nixpkgs/unstable/#sec-image-nixos-rebuild-build-image). It is also available for `nixos-rebuild-ng`.

+9 −1
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
.Op Fl -force
.Op Fl -root Ar root
.Op Fl -dir Ar dir
.Op Fl -flake
.
.
.
@@ -68,7 +69,14 @@ instead of
.It Fl -force
Overwrite
.Pa /etc/nixos/configuration.nix
if it already exists.
(and
.Pa /etc/nixos/flake.nix
if --flake is passed) if already present.
.
.It Fl -flake
Also generate
.Pa /etc/nixos/flake.nix Ns
\&.
.
.It Fl -no-filesystems
Omit everything concerning file systems and swap devices from the hardware configuration.
+17 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ my $outDir = "/etc/nixos";
my $rootDir = ""; # = /
my $force = 0;
my $noFilesystems = 0;
my $flake = 0;
my $showHardwareConfig = 0;

for (my $n = 0; $n < scalar @ARGV; $n++) {
@@ -64,6 +65,9 @@ for (my $n = 0; $n < scalar @ARGV; $n++) {
    elsif ($arg eq "--show-hardware-config") {
        $showHardwareConfig = 1;
    }
    elsif ($arg eq "--flake") {
        $flake = 1;
    }
    else {
        die "$0: unrecognized argument ‘$arg\n";
    }
@@ -661,6 +665,19 @@ if ($showHardwareConfig) {
    mkpath($outDir, 0, 0755);
    write_file($fn, $hwConfig);

    $fn = "$outDir/flake.nix";
    if ($flake) {
        if ($force || ! -e $fn) {
            print STDERR "writing $fn...\n";
            mkpath($outDir, 0, 0755);
            write_file($fn, <<EOF);
            @flake@
EOF
        } else {
            print STDERR "warning: not overwriting existing $fn\n";
        }
    }

    # Generate a basic configuration.nix, unless one already exists.
    $fn = "$outDir/configuration.nix";
    if ($force || ! -e $fn) {
+39 −3
Original line number Diff line number Diff line
# This module generates nixos-install, nixos-rebuild,
# nixos-generate-config, etc.

{ config, lib, pkgs, ... }:
{ config, lib, pkgs, options, ... }:

let
  makeProg = args: pkgs.replaceVarsWith (args // {
@@ -23,7 +23,7 @@ let
      hostPlatformSystem = pkgs.stdenv.hostPlatform.system;
      detectvirt = "${config.systemd.package}/bin/systemd-detect-virt";
      btrfs = "${pkgs.btrfs-progs}/bin/btrfs";
      inherit (config.system.nixos-generate-config) configuration desktopConfiguration;
      inherit (config.system.nixos-generate-config) configuration desktopConfiguration flake;
      xserverEnabled = config.services.xserver.enable;
    };
    manPage = ./manpages/nixos-generate-config.8;
@@ -55,6 +55,24 @@ let
    withReexec = true;
  };

  defaultFlakeTemplate = ''
    {
      inputs = {
        # This is pointing to an unstable release.
        # If you prefer a stable release instead, you can this to the latest number shown here: https://nixos.org/download
        # i.e. nixos-24.11
        # Use `nix flake update` to update the flake to the latest revision of the chosen release channel.
        nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
      };
      outputs = inputs\@{ self, nixpkgs, ... }: {
        # NOTE: '${options.networking.hostName.default}' is the default hostname
        nixosConfigurations.${options.networking.hostName.default} = nixpkgs.lib.nixosSystem {
          modules = [ ./configuration.nix ];
        };
      };
    }
  '';

  defaultConfigTemplate = ''
    # Edit this configuration file to define what should be installed on
    # your system. Help is available in the configuration.nix(5) man page, on
@@ -176,6 +194,24 @@ let
in
{
  options.system.nixos-generate-config = {

    flake = lib.mkOption {
      internal = true;
      type = lib.types.str;
      default = defaultFlakeTemplate;
      description = ''
        The NixOS module that `nixos-generate-config`
        saves to `/etc/nixos/flake.nix` if --flake is set.

        This is an internal option. No backward compatibility is guaranteed.
        Use at your own risk!

        Note that this string gets spliced into a Perl script. The perl
        variable `$bootLoaderConfig` can be used to
        splice in the boot loader configuration.
      '';
    };

    configuration = lib.mkOption {
      internal = true;
      type = lib.types.str;
Loading