From c6c9304b95516ab2b5e2f62d6030b1653b8402f5 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 28 May 2009 16:03:48 +0000 Subject: [PATCH] * system/options.nix: gone :-) svn path=/nixos/branches/modular-nixos/; revision=15772 --- lib/eval-config.nix | 2 +- modules/system/upstart/upstart.nix | 8 +- modules/tasks/kbd.nix | 54 ++++--- modules/tasks/network-interfaces.nix | 232 +++++++++++++++++---------- system/options.nix | 84 ---------- 5 files changed, 183 insertions(+), 197 deletions(-) delete mode 100644 system/options.nix diff --git a/lib/eval-config.nix b/lib/eval-config.nix index e1cf7ac3cf6..6af1f2af81a 100644 --- a/lib/eval-config.nix +++ b/lib/eval-config.nix @@ -7,7 +7,7 @@ rec { configComponents = [ configuration - (import ../system/options.nix) + { require = import ../modules/module-list.nix; } ]; config = diff --git a/modules/system/upstart/upstart.nix b/modules/system/upstart/upstart.nix index 84237d74408..ca9b6e2ddf5 100644 --- a/modules/system/upstart/upstart.nix +++ b/modules/system/upstart/upstart.nix @@ -58,13 +58,7 @@ let optional = cond: service: pkgs.lib.optional cond (makeJob service); - requiredTTYs = config.requiredTTYs; - - jobs = map makeJob [] - - # User-defined events. - ++ (map makeJob (config.services.extraJobs)); - + jobs = map makeJob config.services.extraJobs; # Create an etc/event.d directory containing symlinks to the # specified list of Upstart job files. diff --git a/modules/tasks/kbd.nix b/modules/tasks/kbd.nix index 61dc93737af..42511a76156 100644 --- a/modules/tasks/kbd.nix +++ b/modules/tasks/kbd.nix @@ -1,7 +1,39 @@ {pkgs, config, ...}: let - inherit (pkgs.lib) mkOption; + +###### interface + + # most options are defined in i18n.nix + + options = { + + boot.extraTTYs = pkgs.lib.mkOption { + default = []; + example = [8 9]; + description = " + Tty (virtual console) devices, in addition to the consoles on + which mingetty and syslogd run, that must be initialised. + Only useful if you have some program that you want to run on + some fixed console. For example, the NixOS installation CD + opens the manual in a web browser on console 7, so it sets + to [7]. + "; + }; + + # dummy option so that requiredTTYs can be passed + requiredTTYs = pkgs.lib.mkOption { + default = []; + description = " + FIXME: find another place for this option. + FIXME: find a good description. + "; + }; + + }; + + +###### implementation # think about where to put this chunk of code! # required by other pieces as well @@ -16,26 +48,10 @@ let in -###### implementation - -# most options are defined in i18n.nix - { + require = [options]; - inherit requiredTTYs; # pass them to upstart-job/default.nix - - # dummy option so that requiredTTYs can be passed, see above (FIXME) - require = [ - { - requiredTTYs = mkOption { - default = []; - description = " - FIXME: find another place for this option. - FIXME: find a good description. - "; - }; - } - ]; + inherit requiredTTYs; # pass them to ./modules/tasks/tty-backgrounds.nix services = { extraJobs = [{ diff --git a/modules/tasks/network-interfaces.nix b/modules/tasks/network-interfaces.nix index 40803639331..4c57b48bd94 100644 --- a/modules/tasks/network-interfaces.nix +++ b/modules/tasks/network-interfaces.nix @@ -1,9 +1,70 @@ {pkgs, config, ...}: -###### implementation - let + inherit (pkgs.lib) mkOption; + + +###### interface + + options = { + + networking.hostName = mkOption { + default = "nixos"; + description = " + The name of the machine. Leave it empty if you want to obtain + it from a DHCP server (if using DHCP). + "; + }; + + networking.nativeIPv6 = mkOption { + default = false; + description = " + Whether to use IPv6 even though gw6c is not used. For example, + for Postfix. + "; + }; + + networking.defaultGateway = mkOption { + default = ""; + example = "131.211.84.1"; + description = " + The default gateway. It can be left empty if it is auto-detected through DHCP. + "; + }; + + networking.nameservers = mkOption { + default = []; + example = ["130.161.158.4" "130.161.33.17"]; + description = " + The list of nameservers. It can be left empty if it is auto-detected through DHCP. + "; + }; + + networking.domain = mkOption { + default = ""; + example = "home"; + description = " + The domain. It can be left empty if it is auto-detected through DHCP. + "; + }; + + networking.localCommands = mkOption { + default = ""; + example = "text=anything; echo You can put $text here."; + description = " + Shell commands to be executed at the end of the + network-interfaces Upstart job. Note that if + you are using DHCP to obtain the network configuration, + interfaces may not be fully configured yet. + "; + }; + + }; + + +###### implementation + inherit (pkgs) nettools wirelesstools bash writeText; cfg = config.networking; @@ -18,92 +79,91 @@ let in - { - services = { - extraJobs = [{ - name = "network-interfaces"; - - job = '' - start on udev - stop on shutdown - - start script - export PATH=${modprobe}/sbin:$PATH - modprobe af_packet || true - - for i in $(cd /sys/class/net && ls -d *); do - echo "Bringing up network device $i..." - ${nettools}/sbin/ifconfig $i up || true - done - - # Configure the manually specified interfaces. - names=(${toString names}) - ipAddresses=(${toString ipAddresses}) - subnetMasks=(${toString subnetMasks}) - essids=(${toString essids}) - wepKeys=(${toString wepKeys}) - - for ((n = 0; n < ''${#names[*]}; n++)); do - name=''${names[$n]} - ipAddress=''${ipAddresses[$n]} - subnetMask=''${subnetMasks[$n]} - essid=''${essids[$n]} - wepKey=''${wepKeys[$n]} - - # Set wireless networking stuff. - if test "$essid" != default; then - ${wirelesstools}/sbin/iwconfig "$name" essid "$essid" || true - fi - - if test "$wepKey" != nokey; then - ${wirelesstools}/sbin/iwconfig "$name" key "$(cat "$wepKey")" || true - fi - - # Set IP address / netmask. - if test "$ipAddress" != dhcp; then - echo "Configuring interface $name..." - extraFlags= - if test "$subnetMask" != default; then - extraFlags="$extraFlags netmask $subnetMask" - fi - ${nettools}/sbin/ifconfig "$name" "$ipAddress" $extraFlags || true - fi - - done - - # Set the nameservers. - if test -n "${toString cfg.nameservers}"; then - rm -f /etc/resolv.conf - if test -n "${cfg.domain}"; then - echo "domain ${cfg.domain}" >> /etc/resolv.conf - fi - for i in ${toString cfg.nameservers}; do - echo "nameserver $i" >> /etc/resolv.conf - done + require = [options]; + + services.extraJobs = [{ + name = "network-interfaces"; + + job = '' + start on udev + stop on shutdown + + start script + export PATH=${modprobe}/sbin:$PATH + modprobe af_packet || true + + for i in $(cd /sys/class/net && ls -d *); do + echo "Bringing up network device $i..." + ${nettools}/sbin/ifconfig $i up || true + done + + # Configure the manually specified interfaces. + names=(${toString names}) + ipAddresses=(${toString ipAddresses}) + subnetMasks=(${toString subnetMasks}) + essids=(${toString essids}) + wepKeys=(${toString wepKeys}) + + for ((n = 0; n < ''${#names[*]}; n++)); do + name=''${names[$n]} + ipAddress=''${ipAddresses[$n]} + subnetMask=''${subnetMasks[$n]} + essid=''${essids[$n]} + wepKey=''${wepKeys[$n]} + + # Set wireless networking stuff. + if test "$essid" != default; then + ${wirelesstools}/sbin/iwconfig "$name" essid "$essid" || true fi - - # Set the default gateway. - if test -n "${cfg.defaultGateway}"; then - ${nettools}/sbin/route add default gw "${cfg.defaultGateway}" || true + + if test "$wepKey" != nokey; then + ${wirelesstools}/sbin/iwconfig "$name" key "$(cat "$wepKey")" || true fi - - # Run any user-specified commands. - ${bash}/bin/sh ${writeText "local-net-cmds" cfg.localCommands} || true - - end script - - # Hack: Upstart doesn't yet support what we want: a service that - # doesn't have a running process associated with it. - respawn sleep 100000 - - stop script - for i in $(cd /sys/class/net && ls -d *); do - echo "Taking down network device $i..." - ${nettools}/sbin/ifconfig $i down || true + + # Set IP address / netmask. + if test "$ipAddress" != dhcp; then + echo "Configuring interface $name..." + extraFlags= + if test "$subnetMask" != default; then + extraFlags="$extraFlags netmask $subnetMask" + fi + ${nettools}/sbin/ifconfig "$name" "$ipAddress" $extraFlags || true + fi + + done + + # Set the nameservers. + if test -n "${toString cfg.nameservers}"; then + rm -f /etc/resolv.conf + if test -n "${cfg.domain}"; then + echo "domain ${cfg.domain}" >> /etc/resolv.conf + fi + for i in ${toString cfg.nameservers}; do + echo "nameserver $i" >> /etc/resolv.conf done - end script - ''; - }]; - }; + fi + + # Set the default gateway. + if test -n "${cfg.defaultGateway}"; then + ${nettools}/sbin/route add default gw "${cfg.defaultGateway}" || true + fi + + # Run any user-specified commands. + ${bash}/bin/sh ${writeText "local-net-cmds" cfg.localCommands} || true + + end script + + # Hack: Upstart doesn't yet support what we want: a service that + # doesn't have a running process associated with it. + respawn sleep 100000 + + stop script + for i in $(cd /sys/class/net && ls -d *); do + echo "Taking down network device $i..." + ${nettools}/sbin/ifconfig $i down || true + done + end script + ''; + }]; } diff --git a/system/options.nix b/system/options.nix deleted file mode 100644 index 8c725255487..00000000000 --- a/system/options.nix +++ /dev/null @@ -1,84 +0,0 @@ -{pkgs, config, ...}: - -let - inherit (pkgs.lib) mkOption mergeOneOption; -in - -{ - - boot = { - - extraTTYs = mkOption { - default = []; - example = [8 9]; - description = " - Tty (virtual console) devices, in addition to the consoles on - which mingetty and syslogd run, that must be initialised. - Only useful if you have some program that you want to run on - some fixed console. For example, the NixOS installation CD - opens the manual in a web browser on console 7, so it sets - to [7]. - "; - }; - - }; - - - networking = { - - hostName = mkOption { - default = "nixos"; - description = " - The name of the machine. Leave it empty if you want to obtain - it from a DHCP server (if using DHCP). - "; - }; - - nativeIPv6 = mkOption { - default = false; - description = " - Whether to use IPv6 even though gw6c is not used. For example, - for Postfix. - "; - }; - - defaultGateway = mkOption { - default = ""; - example = "131.211.84.1"; - description = " - The default gateway. It can be left empty if it is auto-detected through DHCP. - "; - }; - - nameservers = mkOption { - default = []; - example = ["130.161.158.4" "130.161.33.17"]; - description = " - The list of nameservers. It can be left empty if it is auto-detected through DHCP. - "; - }; - - domain = mkOption { - default = ""; - example = "home"; - description = " - The domain. It can be left empty if it is auto-detected through DHCP. - "; - }; - - localCommands = mkOption { - default = ""; - example = "text=anything; echo You can put $text here."; - description = " - Shell commands to be executed at the end of the - network-interfaces Upstart job. Note that if - you are using DHCP to obtain the network configuration, - interfaces may not be fully configured yet. - "; - }; - - }; - - - require = import ../modules/module-list.nix; -}