From b4f8f919ab02af695b9ce84ad6c4c95b1c8e4afb Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 10 Aug 2009 18:41:57 +0000 Subject: [PATCH] * Clean up the udev module. svn path=/nixos/trunk/; revision=16653 --- modules/services/hardware/udev.nix | 169 +++++++++++++++-------------- 1 file changed, 85 insertions(+), 84 deletions(-) diff --git a/modules/services/hardware/udev.nix b/modules/services/hardware/udev.nix index 63c4c77e1b3..9b69b81b751 100644 --- a/modules/services/hardware/udev.nix +++ b/modules/services/hardware/udev.nix @@ -1,71 +1,6 @@ {pkgs, config, ...}: -###### interface -let - inherit (pkgs.lib) mkOption mkIf; - - options = { - - boot.hardwareScan = mkOption { - default = true; - description = " - Whether to try to load kernel modules for all detected hardware. - Usually this does a good job of providing you with the modules - you need, but sometimes it can crash the system or cause other - nasty effects. If the hardware scan is turned on, it can be - disabled at boot time by adding the safemode - parameter to the kernel command line. - "; - }; - - services = { - udev = { - - addFirmware = mkOption { - default = []; - example = ["/mnt/big-storage/firmware/"]; - description = " - To specify firmware that is not too spread to ensure - a package, or have an interactive process of extraction - and cannot be redistributed. - "; - merge = pkgs.lib.mergeListOption; - }; - - addUdevPkgs = mkOption { - default = []; - description = " - List of packages containing udev rules. All files found in $out/*/udev/rules.d/*.rules will be recognized - "; - merge = pkgs.lib.mergeListOption; - }; - - extraRules = mkOption { - default = ""; - example = '' - KERNEL=="eth*", ATTR{address}=="00:1D:60:B9:6D:4F", NAME="my_fast_network_card" - ''; - description = " - Add custom rules. They'll be written into file 10-local.rules. - Thus they are read before all other rules. - "; - }; - - sndMode = mkOption { - default = "0600"; - example = "0666"; - description = " - Permissions for /dev/snd/*, in case you have multiple - logged in users or if the devices belong to root for - some reason. - "; - }; - }; - }; - }; -in - -###### implementation +with pkgs.lib; let @@ -73,7 +8,6 @@ let cfg = config.services.udev; - firmwareLoader = substituteAll { src = ./udev-firmware-loader.sh; path = "${stdenv.coreutils}/bin"; @@ -82,6 +16,7 @@ let }; firmwareDirs = config.services.udev.addFirmware; + extraUdevPkgs = config.services.udev.addUdevPkgs ++ pkgs.lib.optional (cfg.extraRules != "") (pkgs.writeTextFile { @@ -166,21 +101,87 @@ in { - require = [ - options - ]; + ###### interface + + options = { - services = { - extraJobs = [{ - name = "udev"; - - job = '' - start on startup - stop on shutdown + boot.hardwareScan = mkOption { + default = true; + description = '' + Whether to try to load kernel modules for all detected hardware. + Usually this does a good job of providing you with the modules + you need, but sometimes it can crash the system or cause other + nasty effects. If the hardware scan is turned on, it can be + disabled at boot time by adding the safemode + parameter to the kernel command line. + ''; + }; + + services.udev = { - env UDEV_CONFIG_FILE=${conf} + addFirmware = mkOption { + default = []; + example = ["/mnt/big-storage/firmware/"]; + description = '' + To specify firmware that is not too spread to ensure + a package, or have an interactive process of extraction + and cannot be redistributed. + ''; + merge = pkgs.lib.mergeListOption; + }; - start script + addUdevPkgs = mkOption { + default = []; + description = '' + List of packages containing udev rules. + All files found in + pkg/udev/rules.d + will be included. + ''; + merge = pkgs.lib.mergeListOption; + }; + + extraRules = mkOption { + default = ""; + example = '' + KERNEL=="eth*", ATTR{address}=="00:1D:60:B9:6D:4F", NAME="my_fast_network_card" + ''; + description = '' + Additional udev rules. They'll be written + into file 10-local.rules. Thus they are + read before all other rules. + ''; + }; + + sndMode = mkOption { + default = "0600"; + example = "0666"; + description = '' + Permissions for sound devices, in case you have multiple + logged in users or if the devices belong to root for some + reason. + ''; + }; + + }; + + }; + + + ###### implementation + + config = { + + jobs = singleton + { name = "udev"; + + startOn = "startup"; + stopOn = "shutdown"; + + environment = { UDEV_CONFIG_FILE = conf; }; + + preStart = + '' echo "" > /proc/sys/kernel/hotplug # Get rid of possible old udev processes. @@ -217,12 +218,12 @@ in done initctl emit new-devices - end script + ''; - respawn ${udev}/sbin/udevd - ''; + exec = "${udev}/sbin/udevd"; + + }; - passthru = {inherit udevRules;}; - }]; }; + }