summary refs log tree commit diff
path: root/nixos/modules/installer/tools/nixos-generate-config.pl
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2013-10-13 15:44:50 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2013-10-13 17:35:56 +0200
commitca3725bfc96ebc7c8c5580805998135039319265 (patch)
treea18ddc8f0dd0deaed2471288cf6b63d91dd84b3d /nixos/modules/installer/tools/nixos-generate-config.pl
parent3875dcdfeba0d120bf88ac42e3e863c5cf0223d4 (diff)
downloadnixpkgs-ca3725bfc96ebc7c8c5580805998135039319265.tar
nixpkgs-ca3725bfc96ebc7c8c5580805998135039319265.tar.gz
nixpkgs-ca3725bfc96ebc7c8c5580805998135039319265.tar.bz2
nixpkgs-ca3725bfc96ebc7c8c5580805998135039319265.tar.lz
nixpkgs-ca3725bfc96ebc7c8c5580805998135039319265.tar.xz
nixpkgs-ca3725bfc96ebc7c8c5580805998135039319265.tar.zst
nixpkgs-ca3725bfc96ebc7c8c5580805998135039319265.zip
nixos-generate-config: Add --root option
If this option is given, nixos-generate-config will write the
configuration to /etc/nixos under the given root, and only emit
fileSystems attributes for filesystems under the given root directory.

The typically use case is at installation time, where you can say:

  $ nixos-generate-config --root /mnt

which will create /mnt/etc/nixos/{configuration.nix,hardware-configuration.nix}.

Also add a --force flag to force overwriting configuration.nix.
Diffstat (limited to 'nixos/modules/installer/tools/nixos-generate-config.pl')
-rw-r--r--nixos/modules/installer/tools/nixos-generate-config.pl19
1 files changed, 18 insertions, 1 deletions
diff --git a/nixos/modules/installer/tools/nixos-generate-config.pl b/nixos/modules/installer/tools/nixos-generate-config.pl
index ff9bdcdbc00..3418b0122de 100644
--- a/nixos/modules/installer/tools/nixos-generate-config.pl
+++ b/nixos/modules/installer/tools/nixos-generate-config.pl
@@ -21,6 +21,8 @@ sub uniq {
 
 # Process the command line.
 my $outDir = "/etc/nixos";
+my $rootDir = ""; # = /
+my $force = 0;
 
 for (my $n = 0; $n < scalar @ARGV; $n++) {
     my $arg = $ARGV[$n];
@@ -32,6 +34,15 @@ for (my $n = 0; $n < scalar @ARGV; $n++) {
         $outDir = $ARGV[$n];
         die "$0: ‘--dir’ requires an argument\n" unless defined $outDir;
     }
+    elsif ($arg eq "--root") {
+        $n++;
+        $rootDir = $ARGV[$n];
+        die "$0: ‘--root’ requires an argument\n" unless defined $rootDir;
+        $rootDir =~ s/\/*$//; # remove trailing slashes
+    }
+    elsif ($arg eq "--force") {
+        $force = 1;
+    }
     else {
         die "$0: unrecognized argument ‘$arg’\n";
     }
@@ -232,6 +243,10 @@ foreach my $fs (read_file("/proc/self/mountinfo")) {
     next unless -d $mountPoint;
     my @mountOptions = split /,/, $fields[5];
 
+    next if !in($mountPoint, $rootDir);
+    $mountPoint = substr($mountPoint, length($rootDir)); # strip the root directory (e.g. /mnt)
+    $mountPoint = "/" if $mountPoint eq "";
+
     # Skip special filesystems.
     next if in($mountPoint, "/proc") || in($mountPoint, "/dev") || in($mountPoint, "/sys") || in($mountPoint, "/run");
 
@@ -317,6 +332,8 @@ my $initrdAvailableKernelModules = toNixExpr(uniq @initrdAvailableKernelModules)
 my $kernelModules = toNixExpr(uniq @kernelModules);
 my $modulePackages = toNixExpr(uniq @modulePackages);
 
+$outDir = "$rootDir$outDir";
+
 my $fn = "$outDir/hardware-configuration.nix";
 print STDERR "writing $fn...\n";
 mkpath($outDir, 0, 0755);
@@ -343,7 +360,7 @@ EOF
 
 # Generate a basic configuration.nix, unless one already exists.
 $fn = "$outDir/configuration.nix";
-if (! -e $fn) {
+if ($force || ! -e $fn) {
     print STDERR "writing $fn...\n";
 
     my $bootloaderConfig;