* services.udev.addUdevPkgs -> services.udev.packages.

* Simplified the udev rules generation: merged nixRules into
  services.udev.extraRules, and handle services.udev.extraRules using
  services.udev.packages.

svn path=/nixos/trunk/; revision=16655
This commit is contained in:
Eelco Dolstra 2009-08-10 19:05:20 +00:00
parent 0d35699507
commit b3c0061a91
4 changed files with 34 additions and 42 deletions

View File

@ -53,17 +53,9 @@ mkIf config.hardware.pcmcia.enable {
options options
]; ];
boot = { boot.kernelModules = [ "pcmcia" ];
kernelModules = [ "pcmcia" ];
};
services = { services.udev.packages = [ pcmciaUtils ];
udev = {
addUdevPkgs = [ pcmciaUtils ];
};
};
environment = { environment.systemPackages = [ pcmciaUtils ];
extraPackages = [ pcmciaUtils ];
};
} }

View File

@ -8,18 +8,10 @@ let
in in
{ {
boot = { boot.extraModulePackages = [wisGo7007Pkg];
extraModulePackages = wisGo7007Pkg;
};
environment = { environment.extraPackages = [wisGo7007Pkg];
extraPackages = wisGo7007Pkg;
};
services = { services.udev.addFirmware = [wisGo7007Firmware];
udev = { services.udev.packages = [wisGo7007Pkg];
addFirmware = wisGo7007Firmware;
addUdevPkgs = wisGo7007Pkg;
};
};
} }

View File

@ -94,7 +94,7 @@ in
exec = "${hal}/sbin/hald --daemon=no"; exec = "${hal}/sbin/hald --daemon=no";
}; };
services.udev.addUdevPkgs = [hal]; services.udev.packages = [hal];
services.dbus.enable = true; services.dbus.enable = true;
services.dbus.packages = [hal]; services.dbus.packages = [hal];

View File

@ -12,22 +12,18 @@ let
src = ./udev-firmware-loader.sh; src = ./udev-firmware-loader.sh;
path = "${stdenv.coreutils}/bin"; path = "${stdenv.coreutils}/bin";
isExecutable = true; isExecutable = true;
inherit firmwareDirs; firmwareDirs = cfg.addFirmware;
}; };
firmwareDirs = config.services.udev.addFirmware; extraUdevRules = pkgs.writeTextFile {
name = "extra-udev-rules";
extraUdevPkgs = config.services.udev.addUdevPkgs text = cfg.extraRules;
++ pkgs.lib.optional (cfg.extraRules != "") destination = "/etc/udev/rules.d/10-local.rules";
(pkgs.writeTextFile { };
name = "extra-udev-rules";
text = cfg.extraRules;
destination = "/custom/udev/rules.d/10-local.rules";
});
modprobe = config.system.sbin.modprobe; modprobe = config.system.sbin.modprobe;
nixRules = writeText "90-nix.rules" '' nixosRules = ''
# Miscellaneous devices. # Miscellaneous devices.
KERNEL=="sonypi", MODE="0666" KERNEL=="sonypi", MODE="0666"
@ -60,10 +56,14 @@ let
#src = cleanSource ./udev-rules; #src = cleanSource ./udev-rules;
buildCommand = '' buildCommand = ''
ensureDir $out ensureDir $out
ln -s ${nixRules} $out/${nixRules.name}
shopt -s nullglob shopt -s nullglob
# Use all the default udev rules.
cp ${udev}/*/udev/rules.d/*.rules $out/ cp ${udev}/*/udev/rules.d/*.rules $out/
# If auto-configuration is disabled, then remove
# udev's 80-drivers.rules file, which contains rules for
# automatically calling modprobe.
${if config.boot.hardwareScan then ${if config.boot.hardwareScan then
'' ''
substituteInPlace $out/80-drivers.rules \ substituteInPlace $out/80-drivers.rules \
@ -74,7 +74,9 @@ let
rm $out/80-drivers.rules rm $out/80-drivers.rules
'' ''
} }
for i in ${toString extraUdevPkgs}; do
# Add the udev rules from other packages.
for i in ${toString cfg.packages}; do
for j in $i/*/udev/rules.d/*; do for j in $i/*/udev/rules.d/*; do
ln -s $j $out/$(basename $j) ln -s $j $out/$(basename $j)
done done
@ -122,23 +124,24 @@ in
addFirmware = mkOption { addFirmware = mkOption {
default = []; default = [];
example = ["/mnt/big-storage/firmware/"]; example = ["/mnt/big-storage/firmware/"];
merge = mergeListOption;
description = '' description = ''
To specify firmware that is not too spread to ensure To specify firmware that is not too spread to ensure
a package, or have an interactive process of extraction a package, or have an interactive process of extraction
and cannot be redistributed. and cannot be redistributed.
''; '';
merge = pkgs.lib.mergeListOption;
}; };
addUdevPkgs = mkOption { packages = mkOption {
default = []; default = [];
merge = mergeListOption;
description = '' description = ''
List of packages containing <command>udev</command> rules. List of packages containing <command>udev</command> rules.
All files found in All files found in
<filename><replaceable>pkg</replaceable>/udev/rules.d</filename> <filename><replaceable>pkg</replaceable>/etc/udev/rules.d</filename> and
<filename><replaceable>pkg</replaceable>/lib/udev/rules.d</filename>
will be included. will be included.
''; '';
merge = pkgs.lib.mergeListOption;
}; };
extraRules = mkOption { extraRules = mkOption {
@ -146,6 +149,7 @@ in
example = '' example = ''
KERNEL=="eth*", ATTR{address}=="00:1D:60:B9:6D:4F", NAME="my_fast_network_card" KERNEL=="eth*", ATTR{address}=="00:1D:60:B9:6D:4F", NAME="my_fast_network_card"
''; '';
merge = mergeStringOption;
description = '' description = ''
Additional <command>udev</command> rules. They'll be written Additional <command>udev</command> rules. They'll be written
into file <filename>10-local.rules</filename>. Thus they are into file <filename>10-local.rules</filename>. Thus they are
@ -172,6 +176,10 @@ in
config = { config = {
services.udev.extraRules = nixosRules;
services.udev.packages = [extraUdevRules];
jobs = singleton jobs = singleton
{ name = "udev"; { name = "udev";