summary refs log tree commit diff
path: root/upstart-jobs/udev.nix
diff options
context:
space:
mode:
authorMarc Weber <marco-oweber@gmx.de>2009-03-06 12:26:48 +0000
committerMarc Weber <marco-oweber@gmx.de>2009-03-06 12:26:48 +0000
commite0240ddf3dfce71132f9d479d98dc39e88532a54 (patch)
treed57d4c11ec22ef1ea2b383244e4f560763c65311 /upstart-jobs/udev.nix
parentd0733953e1f61f0d59beaf459ad3773413d7b767 (diff)
downloadnixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.tar
nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.tar.gz
nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.tar.bz2
nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.tar.lz
nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.tar.xz
nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.tar.zst
nixpkgs-e0240ddf3dfce71132f9d479d98dc39e88532a54.zip
Convert "udev"
svn path=/nixos/branches/fix-style/; revision=14385
Diffstat (limited to 'upstart-jobs/udev.nix')
-rw-r--r--upstart-jobs/udev.nix163
1 files changed, 110 insertions, 53 deletions
diff --git a/upstart-jobs/udev.nix b/upstart-jobs/udev.nix
index 4662adde222..4765f29176e 100644
--- a/upstart-jobs/udev.nix
+++ b/upstart-jobs/udev.nix
@@ -1,18 +1,66 @@
-{ stdenv, writeText, substituteAll, cleanSource, udev, procps, firmwareDirs, modprobe
-, extraUdevPkgs ? []
-, config
-}:
+{pkgs, config, ...}:
 
+###### interface
 let
+  inherit (pkgs.lib) mkOption mkIf;
+
+  options = {
+    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.
+          ";
+          merge = pkgs.lib.mergeListOption;
+        };
+        
+        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
+
+let
+
+  inherit (pkgs) substituteAll stdenv writeText udev procps;
 
   cfg = config.services.udev;
 
+
   firmwareLoader = substituteAll {
     src = ./udev-firmware-loader.sh;
     path = "${stdenv.coreutils}/bin";
     isExecutable = true;
     inherit firmwareDirs;
   };
+
+  firmwareDirs = config.services.udev.addFirmware;
+  extraUdevPkgs = config.services.udev.addUdevPkgs;
+
+  modprobe = config.system.sbin.modprobe;
     
   nixRules = writeText "90-nix.rules" ''
   
@@ -86,55 +134,64 @@ let
 in
 
 {
-  name = "udev";
-  
-  job = ''
-    start on startup
-    stop on shutdown
-
-    env UDEV_CONFIG_FILE=${conf}
 
-    start script
-        echo "" > /proc/sys/kernel/hotplug
+  require = [
+    options
+  ];
 
-        # Get rid of possible old udev processes.
-        ${procps}/bin/pkill -u root "^udevd$" || true
-
-        # Do the loading of additional stage 2 kernel modules.
-        # Maybe this isn't the best place...
-        for i in ${toString config.boot.kernelModules}; do
-            echo "Loading kernel module $i..."
-            ${modprobe}/sbin/modprobe $i || true
-        done
-
-        # Start udev.
-        ${udev}/sbin/udevd --daemon
-
-        # Let udev create device nodes for all modules that have already
-        # been loaded into the kernel (or for which support is built into
-        # the kernel).
-        if ! test -e ${devicesCreated}; then
-            ${udev}/sbin/udevadm trigger
-            ${udev}/sbin/udevadm settle # wait for udev to finish
-            touch ${devicesCreated}
-        fi
-
-        # Kill udev, let Upstart restart and monitor it.  (This is nasty,
-        # but we have to run `udevadm trigger' first.  Maybe we can use
-        # Upstart's `binary' keyword, but it isn't implemented yet.)
-        if ! ${procps}/bin/pkill -u root "^udevd$"; then
-            echo "couldn't stop udevd"
-        fi
-
-        while ${procps}/bin/pgrep -u root "^udevd$"; do
-            sleep 1
-        done
-
-        initctl emit new-devices
-    end script
-
-    respawn ${udev}/sbin/udevd
-  '';
-
-  passthru = {inherit udevRules;};
+  services = {
+    extraJobs = [{
+      name = "udev";
+      
+      job = ''
+        start on startup
+        stop on shutdown
+
+        env UDEV_CONFIG_FILE=${conf}
+
+        start script
+            echo "" > /proc/sys/kernel/hotplug
+
+            # Get rid of possible old udev processes.
+            ${procps}/bin/pkill -u root "^udevd$" || true
+
+            # Do the loading of additional stage 2 kernel modules.
+            # Maybe this isn't the best place...
+            for i in ${toString config.boot.kernelModules}; do
+                echo "Loading kernel module $i..."
+                ${modprobe}/sbin/modprobe $i || true
+            done
+
+            # Start udev.
+            ${udev}/sbin/udevd --daemon
+
+            # Let udev create device nodes for all modules that have already
+            # been loaded into the kernel (or for which support is built into
+            # the kernel).
+            if ! test -e ${devicesCreated}; then
+                ${udev}/sbin/udevadm trigger
+                ${udev}/sbin/udevadm settle # wait for udev to finish
+                touch ${devicesCreated}
+            fi
+
+            # Kill udev, let Upstart restart and monitor it.  (This is nasty,
+            # but we have to run `udevadm trigger' first.  Maybe we can use
+            # Upstart's `binary' keyword, but it isn't implemented yet.)
+            if ! ${procps}/bin/pkill -u root "^udevd$"; then
+                echo "couldn't stop udevd"
+            fi
+
+            while ${procps}/bin/pgrep -u root "^udevd$"; do
+                sleep 1
+            done
+
+            initctl emit new-devices
+        end script
+
+        respawn ${udev}/sbin/udevd
+      '';
+
+      passthru = {inherit udevRules;};
+    }];
+  };
 }