forked from mirrors/nixpkgs
Merge "nixos-option --install" into nixos-generate-config
Having configuration.nix generation hidden underneath nixos-option never made sense, also given that there was another command to generate part of the configuration (nixos-hardware-scan). Now nixos-generate-config produces both configuration.nix and hardware-configuration.nix. The latter is overwritten while the former is not.
This commit is contained in:
parent
0f550596c9
commit
ac13bd2575
|
@ -18,17 +18,12 @@
|
|||
<cmdsynopsis>
|
||||
<command>nixos-option</command>
|
||||
<group choice="opt">
|
||||
<option>-i</option>
|
||||
<option>v</option>
|
||||
<option>d</option>
|
||||
<option>l</option>
|
||||
<option>-v</option>
|
||||
<option>-d</option>
|
||||
<option>-l</option>
|
||||
</group>
|
||||
<arg choice='plain'><replaceable>option.name</replaceable></arg>
|
||||
</cmdsynopsis>
|
||||
<cmdsynopsis>
|
||||
<command>nixos-option</command>
|
||||
<arg choice='plain'><option>--install</option></arg>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
|
||||
|
@ -40,16 +35,7 @@ of the option name given as argument. By default, it returns the value of
|
|||
the option.</para>
|
||||
|
||||
<para>When the option name is not an option, the command prints the list of
|
||||
attributes in contained in the attribute set. This could used to provide
|
||||
completion in some editors.</para>
|
||||
|
||||
<para>When the option <option>--install</option> (or <option>-i</option>) is
|
||||
used with no option name, this command generates a template configuration
|
||||
with a scan of the target system. It produces a template configuration
|
||||
in <filename>/etc/nixos/configuration.nix</filename>, and a scan of the
|
||||
machine in <filename>/etc/nixos/hardware-configuration.nix</filename>. The
|
||||
scan of the machine is produced
|
||||
by <command>nixos-hardware-scan</command>.</para>
|
||||
attributes contained in the attribute set.</para>
|
||||
|
||||
</refsection>
|
||||
|
||||
|
@ -59,15 +45,6 @@ by <command>nixos-hardware-scan</command>.</para>
|
|||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--install</option>, <option>-i</option></term>
|
||||
<listitem>
|
||||
<para>Use the installation configuration instead of current system
|
||||
configuration. Generate a template configuration if no option name is
|
||||
specified.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--value</option>, <option>-v</option></term>
|
||||
<listitem>
|
||||
|
@ -102,15 +79,6 @@ by <command>nixos-hardware-scan</command>.</para>
|
|||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry>
|
||||
<term><envar>mountPoint</envar></term>
|
||||
<listitem>
|
||||
<para>Location of the target file system. Defaults to
|
||||
<filename>/mnt</filename>. This environment variable is only used in
|
||||
combinaison with <option>--install</option> option.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><envar>NIXOS_CONFIG</envar></term>
|
||||
<listitem>
|
||||
|
|
|
@ -250,7 +250,7 @@ my $modulePackages = toNixExpr(removeDups @modulePackages);
|
|||
my $attrs = multiLineList(" ", removeDups @attrs);
|
||||
my $imports = multiLineList(" ", removeDups @imports);
|
||||
|
||||
my $fn = "$outDir/hardware.nix";
|
||||
my $fn = "$outDir/hardware-configuration.nix";
|
||||
print STDERR "writing $fn...\n";
|
||||
mkpath($outDir, 0, 0755);
|
||||
|
||||
|
@ -271,4 +271,100 @@ write_file($fn, <<EOF);
|
|||
$attrs}
|
||||
EOF
|
||||
|
||||
# Generate a basic configuration.nix, unless one already exists.
|
||||
$fn = "$outDir/configuration.nix";
|
||||
if (! -e $fn) {
|
||||
print STDERR "writing $fn...\n";
|
||||
|
||||
my $bootloaderConfig;
|
||||
if (-e "/sys/firmware/efi/efivars") {
|
||||
$bootLoaderConfig = <<EOF;
|
||||
# Use the gummiboot efi boot loader.
|
||||
boot.loader.grub.enable = false;
|
||||
boot.loader.gummiboot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
# !!! Remove me when nixos is on 3.10 or greater by default
|
||||
# EFI booting requires kernel >= 3.10
|
||||
boot.kernelPackages = pkgs.linuxPackages_3_10;
|
||||
EOF
|
||||
} else {
|
||||
$bootLoaderConfig = <<EOF;
|
||||
# Use the GRUB 2 boot loader.
|
||||
boot.loader.grub.enable = true;
|
||||
boot.loader.grub.version = 2;
|
||||
# Define on which hard drive you want to install Grub.
|
||||
# boot.loader.grub.device = "/dev/sda";
|
||||
EOF
|
||||
}
|
||||
|
||||
write_file($fn, <<EOF);
|
||||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ # Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
boot.initrd.kernelModules =
|
||||
[ # Specify all kernel modules that are necessary for mounting the root
|
||||
# filesystem.
|
||||
# "xfs" "ata_piix"
|
||||
# fbcon # Uncomment this when EFI booting to see the console before the root partition is mounted
|
||||
];
|
||||
|
||||
$bootLoaderConfig
|
||||
# networking.hostName = "nixos"; # Define your hostname.
|
||||
# networking.wireless.enable = true; # Enables wireless.
|
||||
|
||||
# Add filesystem entries for each partition that you want to see
|
||||
# mounted at boot time. This should include at least the root
|
||||
# filesystem.
|
||||
|
||||
# fileSystems."/".device = "/dev/disk/by-label/nixos";
|
||||
|
||||
# fileSystems."/data" = # where you want to mount the device
|
||||
# { device = "/dev/sdb"; # the device
|
||||
# fsType = "ext3"; # the type of the partition
|
||||
# options = "data=journal";
|
||||
# };
|
||||
|
||||
# List swap partitions activated at boot time.
|
||||
swapDevices =
|
||||
[ # { device = "/dev/disk/by-label/swap"; }
|
||||
];
|
||||
|
||||
# Select internationalisation properties.
|
||||
# i18n = {
|
||||
# consoleFont = "lat9w-16";
|
||||
# consoleKeyMap = "us";
|
||||
# defaultLocale = "en_US.UTF-8";
|
||||
# };
|
||||
|
||||
# List services that you want to enable:
|
||||
|
||||
# Enable the OpenSSH daemon.
|
||||
# services.openssh.enable = true;
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
# services.printing.enable = true;
|
||||
|
||||
# Enable the X11 windowing system.
|
||||
# services.xserver.enable = true;
|
||||
# services.xserver.layout = "us";
|
||||
# services.xserver.xkbOptions = "eurosign:e";
|
||||
|
||||
# Enable the KDE Desktop Environment.
|
||||
# services.xserver.displayManager.kdm.enable = true;
|
||||
# services.xserver.desktopManager.kde4.enable = true;
|
||||
}
|
||||
EOF
|
||||
} else {
|
||||
print STDERR "warning: not overwriting existing $fn\n";
|
||||
}
|
||||
|
||||
# workaround for a bug in substituteAll
|
||||
|
|
|
@ -1,14 +1,7 @@
|
|||
#! @shell@ -e
|
||||
|
||||
# Allow the location of NixOS sources and the system configuration
|
||||
# file to be overridden.
|
||||
|
||||
: ${mountPoint=/mnt}
|
||||
: ${NIXOS_CONFIG=/etc/nixos/configuration.nix}
|
||||
export NIXOS_CONFIG
|
||||
|
||||
usage () {
|
||||
exec man nixos-rebuild
|
||||
exec man nixos-option
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
@ -20,7 +13,6 @@ desc=false
|
|||
defs=false
|
||||
value=false
|
||||
xml=false
|
||||
install=false
|
||||
verbose=false
|
||||
|
||||
option=""
|
||||
|
@ -38,7 +30,6 @@ for arg; do
|
|||
-d*) longarg="$longarg --description";;
|
||||
-v*) longarg="$longarg --value";;
|
||||
-l*) longarg="$longarg --lookup";;
|
||||
-i*) longarg="$longarg --install";;
|
||||
-*) usage;;
|
||||
esac
|
||||
# remove the first letter option
|
||||
|
@ -53,7 +44,6 @@ for arg; do
|
|||
--value) value=true;;
|
||||
--lookup) defs=true;;
|
||||
--xml) xml=true;;
|
||||
--install) install=true;;
|
||||
--verbose) verbose=true;;
|
||||
--help) usage;;
|
||||
-*) usage;;
|
||||
|
@ -81,16 +71,6 @@ if $xml; then
|
|||
defs=true
|
||||
fi
|
||||
|
||||
# --install cannot be used with -d -v -l without option name.
|
||||
if $value || $desc || $defs && $install && test -z "$option"; then
|
||||
usage
|
||||
fi
|
||||
|
||||
generate=false
|
||||
if ! $defs && ! $desc && ! $value && $install && test -z "$option"; then
|
||||
generate=true
|
||||
fi
|
||||
|
||||
if ! $defs && ! $desc; then
|
||||
value=true
|
||||
fi
|
||||
|
@ -154,122 +134,6 @@ nixMap() {
|
|||
done
|
||||
}
|
||||
|
||||
if $install; then
|
||||
NIXOS_CONFIG="$mountPoint$NIXOS_CONFIG"
|
||||
fi
|
||||
|
||||
if $generate; then
|
||||
mkdir -p $(dirname "$NIXOS_CONFIG")
|
||||
|
||||
# Scan the hardware and add the result to /etc/nixos/hardware-scan.nix.
|
||||
hardware_config="${NIXOS_CONFIG%/configuration.nix}/hardware-configuration.nix"
|
||||
if test -e "$hardware_config"; then
|
||||
echo "A hardware configuration file exists, generation skipped."
|
||||
else
|
||||
echo "Generating a hardware configuration file in $hardware_config..."
|
||||
nixos-hardware-scan > "$hardware_config"
|
||||
fi
|
||||
|
||||
if test -e "$NIXOS_CONFIG"; then
|
||||
echo 1>&2 "error: Cannot generate a template configuration because a configuration file exists."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
nl="
|
||||
"
|
||||
if test -e /sys/firmware/efi/efivars; then
|
||||
l1=" # Use the gummiboot efi boot loader."
|
||||
l2=" boot.loader.grub.enable = false;"
|
||||
l3=" boot.loader.gummiboot.enable = true;"
|
||||
l4=" boot.loader.efi.canTouchEfiVariables = true;"
|
||||
# !!! Remove me when nixos is on 3.10 or greater by default
|
||||
l5=" # EFI booting requires kernel >= 3.10"
|
||||
l6=" boot.kernelPackages = pkgs.linuxPackages_3_10;"
|
||||
bootloader_config="$l1$nl$l2$nl$l3$nl$l4$nl$nl$l5$nl$l6"
|
||||
else
|
||||
l1=" # Use the Grub2 boot loader."
|
||||
l2=" boot.loader.grub.enable = true;"
|
||||
l3=" boot.loader.grub.version = 2;"
|
||||
l4=" # Define on which hard drive you want to install Grub."
|
||||
l5=' # boot.loader.grub.device = "/dev/sda";'
|
||||
bootloader_config="$l1$nl$l2$nl$l3$nl$nl$l4$nl$l5"
|
||||
fi
|
||||
|
||||
echo "Generating a basic configuration file in $NIXOS_CONFIG..."
|
||||
|
||||
# Generate a template configuration file where the user has to
|
||||
# fill the gaps.
|
||||
cat <<EOF > "$NIXOS_CONFIG"
|
||||
# Edit this configuration file to define what should be installed on
|
||||
# the system. Help is available in the configuration.nix(5) man page
|
||||
# or the NixOS manual available on virtual console 8 (Alt+F8).
|
||||
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ # Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
boot.initrd.kernelModules =
|
||||
[ # Specify all kernel modules that are necessary for mounting the root
|
||||
# filesystem.
|
||||
# "xfs" "ata_piix"
|
||||
# fbcon # Uncomment this when EFI booting to see the console before the root partition is mounted
|
||||
];
|
||||
|
||||
$bootloader_config
|
||||
|
||||
# networking.hostName = "nixos"; # Define your hostname.
|
||||
# networking.wireless.enable = true; # Enables Wireless.
|
||||
|
||||
# Add filesystem entries for each partition that you want to see
|
||||
# mounted at boot time. This should include at least the root
|
||||
# filesystem.
|
||||
|
||||
# fileSystems."/".device = "/dev/disk/by-label/nixos";
|
||||
|
||||
# fileSystems."/data" = # where you want to mount the device
|
||||
# { device = "/dev/sdb"; # the device
|
||||
# fsType = "ext3"; # the type of the partition
|
||||
# options = "data=journal";
|
||||
# };
|
||||
|
||||
# List swap partitions activated at boot time.
|
||||
swapDevices =
|
||||
[ # { device = "/dev/disk/by-label/swap"; }
|
||||
];
|
||||
|
||||
# Select internationalisation properties.
|
||||
# i18n = {
|
||||
# consoleFont = "lat9w-16";
|
||||
# consoleKeyMap = "us";
|
||||
# defaultLocale = "en_US.UTF-8";
|
||||
# };
|
||||
|
||||
# List services that you want to enable:
|
||||
|
||||
# Enable the OpenSSH daemon.
|
||||
# services.openssh.enable = true;
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
# services.printing.enable = true;
|
||||
|
||||
# Enable the X11 windowing system.
|
||||
# services.xserver.enable = true;
|
||||
# services.xserver.layout = "us";
|
||||
# services.xserver.xkbOptions = "eurosign:e";
|
||||
|
||||
# Enable the KDE Desktop Environment.
|
||||
# services.xserver.displayManager.kdm.enable = true;
|
||||
# services.xserver.desktopManager.kde4.enable = true;
|
||||
}
|
||||
EOF
|
||||
|
||||
exit 0
|
||||
fi;
|
||||
|
||||
# This duplicates the work made below, but it is useful for processing
|
||||
# the output of nixos-option with other tools such as nixos-gui.
|
||||
if $xml; then
|
||||
|
|
Loading…
Reference in a new issue