Add --install option for nixos-option which is used to handle options of

the target system (when installing) and also to generate a template
configuration file for users.

svn path=/nixos/trunk/; revision=23923
This commit is contained in:
Nicolas Pierron 2010-09-25 22:29:50 +00:00
parent 58ce746eb0
commit 7ea957fd3d

View File

@ -2,15 +2,17 @@
# Allow the location of NixOS sources and the system configuration # Allow the location of NixOS sources and the system configuration
# file to be overridden. # file to be overridden.
: ${mountPoint=/mnt}
: ${NIXOS_PATH=/etc/nixos/nixos} : ${NIXOS_PATH=/etc/nixos/nixos}
: ${NIXOS=/etc/nixos/nixos}
: ${NIXPKGS=/etc/nixos/nixpkgs}
: ${NIXOS_CONFIG=/etc/nixos/configuration.nix} : ${NIXOS_CONFIG=/etc/nixos/configuration.nix}
: ${NIXPKGS=/etc/nixos/nixpkgs}
export NIXOS_PATH export NIXOS_PATH
usage () { usage () {
echo 1>&2 " echo 1>&2 "
Usage: $0 OPTION_NAME [-v] [-d] [-l] Usage: $0 [--install] [-v] [-d] [-l] OPTION_NAME
$0 [--install]
This program is used to explore NixOS options by looking at their values or This program is used to explore NixOS options by looking at their values or
by looking at their description. It is helpful for understanding the how by looking at their description. It is helpful for understanding the how
@ -18,6 +20,11 @@ your configuration is working.
Options: Options:
-i | --install Use the configuration on
${mountPoint:+$mountPoint/}$NIXOS_CONFIG instead of
the current system configuration. Generate a
template configuration if no option name is
specified.
-v | --value Display the current value, based on your -v | --value Display the current value, based on your
configuration. configuration.
-d | --default Display the default value, the example and the -d | --default Display the default value, the example and the
@ -26,8 +33,9 @@ Options:
is declared. is declared.
--help Show this message. --help Show this message.
Environment variables affecting nixos-option: Environment variables affecting $0:
\$mountPoint Path to the target file system.
\$NIXOS_PATH Path where the NixOS repository is located. \$NIXOS_PATH Path where the NixOS repository is located.
\$NIXOS_CONFIG Path to your configuration file. \$NIXOS_CONFIG Path to your configuration file.
\$NIXPKGS Path to Nix packages. \$NIXPKGS Path to Nix packages.
@ -44,6 +52,7 @@ Environment variables affecting nixos-option:
desc=false desc=false
defs=false defs=false
value=false value=false
install=false
verbose=false verbose=false
option="" option=""
@ -52,18 +61,39 @@ argfun=""
for arg; do for arg; do
if test -z "$argfun"; then if test -z "$argfun"; then
case $arg in case $arg in
-d|--description) desc=true;; -*)
-v|--value) value=true;; longarg=""
-l|--lookup) defs=true;; sarg="$arg"
--verbose) verbose=true;; while test "$sarg" != "-"; do
--help) usage;; case $sarg in
-*) usage;; --*) longarg=$arg;;
*) if test -z "$option"; then -d*) longarg="$longarg --description";;
option="$arg" -v*) longarg="$longarg --value";;
else -l*) longarg="$longarg --lookup";;
usage -i*) longarg="$longarg --install";;
fi;; -*) usage;;
esac
sarg="-${sarg#??}"
done
;;
*) longarg=$arg;;
esac esac
for larg in $longarg; do
case $larg in
--description) desc=true;;
--value) value=true;;
--lookup) defs=true;;
--install) install=true;;
--verbose) verbose=true;;
--help) usage;;
-*) usage;;
*) if test -z "$option"; then
option="$larg"
else
usage
fi;;
esac
done
else else
case $argfun in case $argfun in
set_*) set_*)
@ -75,6 +105,16 @@ for arg; do
fi fi
done done
# --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 if ! $defs && ! $desc; then
value=true value=true
fi fi
@ -111,7 +151,130 @@ findSources(){
nix-instantiate - --eval-only --strict nix-instantiate - --eval-only --strict
} }
if $install; then
if test -e "$mountPoint$NIXOS_PATH"; then
export NIXOS_PATH="$mountPoint$NIXOS_PATH"
fi
if test -e "$mountPoint$NIXPKGS"; then
export NIXPKGS="$mountPoint$NIXPKGS"
fi
export 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 "Scan your hardware to generate a hardware configuration file."
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
echo "Generate a template configuration that you should edit."
# Generate a template configuration file where the user has to
# fill the gaps.
echo > "$NIXOS_CONFIG" \
'# Edit this configuration file which defines what would be installed on the
# system. To Help while choosing option value, you can watch at the manual
# page of configuration.nix or at the last chapter of the manual available
# on the virtual console 8 (Alt+F8).
{config, pkgs, ...}:
{
require = [
# Include the configuration for part of your system which have been
# detected automatically. In addition, it includes the same
# configuration as the installation device that you used.
./hardware-configuration.nix
];
boot.initrd.kernelModules = [
# Specify all kernel modules that are necessary for mounting the root
# file system.
#
# "ext4" "ata_piix"
];
boot.loader.grub = {
# Use grub 2 as boot loader.
enable = true;
version = 2;
# Define on which hard drive you want to install Grub.
# device = "/dev/sda";
};
networking = {
# hostName = "nixos"; # Define your hostname.
interfaceMonitor.enable = true; # Watch for plugged cable.
enableWLAN = true; # Enables Wireless.
};
# Add file system entries for each partition that you want to see mounted
# at boot time. You can add filesystems which are not mounted at boot by
# adding the noauto option.
fileSystems = [
# Mount the root file system
#
# { mountPoint = "/";
# device = "/dev/sda2";
# }
# Copy & Paste & Uncomment & Modify to add any other file system.
#
# { mountPoint = "/data"; # where you want to mount the device
# device = "/dev/sdb"; # the device or the label of the device
# # label = "data";
# fsType = "ext3"; # the type of the partition.
# options = "data=journal";
# }
];
swapDevices = [
# List swap partitions that are mounted at boot time.
#
# { device = "/dev/sda1"; }
];
# Select internationalisation properties.
# i18n = {
# consoleFont = "lat9w-16";
# consoleKeyMap = "us";
# defaultLocale = "en_US.UTF-8";
# };
# List services that you want to enable:
# Add an OpenSSH daemon.
# services.openssh.enable = true;
# Add CUPS to print documents.
# services.printing.enable = true;
# Add XServer (default if you have used a graphical iso)
# service.xserver = {
# enable = true;
# layout = "us";
# xkbOptions = "eurosign:e";
# };
# Add the NixOS Manual on virtual console 8
services.nixosManual.showManual = true;
}
'
exit 0
fi;
if test "$(evalOpt "_type" 2> /dev/null)" = '"option"'; then if test "$(evalOpt "_type" 2> /dev/null)" = '"option"'; then
$value && evalCfg; $value && evalCfg;