@ -12,22 +12,18 @@ let
src = ./udev-firmware-loader.sh ;
path = " ${ stdenv . coreutils } / b i n " ;
isExecutable = true ;
inherit firmwareDirs ;
firmwareDirs = cfg . addFirmware ;
} ;
firmwareDirs = config . services . udev . addFirmware ;
extraUdevPkgs = config . services . udev . addUdevPkgs
++ pkgs . lib . optional ( cfg . extraRules != " " )
( pkgs . writeTextFile {
name = " e x t r a - u d e v - r u l e s " ;
text = cfg . extraRules ;
destination = " / c u s t o m / u d e v / r u l e s . d / 1 0 - l o c a l . r u l e s " ;
} ) ;
extraUdevRules = pkgs . writeTextFile {
name = " e x t r a - u d e v - r u l e s " ;
text = cfg . extraRules ;
destination = " / e t c / u d e v / r u l e s . d / 1 0 - l o c a l . r u l e s " ;
} ;
modprobe = config . system . sbin . modprobe ;
nixRules = writeText " 9 0 - n i x . r u l e s " ''
nixosRules = ''
# Miscellaneous devices.
KERNEL == " s o n y p i " , MODE = " 0 6 6 6 "
@ -60,10 +56,14 @@ let
#src = cleanSource ./udev-rules;
buildCommand = ''
ensureDir $ out
ln - s $ { nixRules } $ out / $ { nixRules . name }
shopt - s nullglob
# Use all the default udev rules.
cp $ { udev } /* / u d e v / r u l e s . d / * . r u l e s $ o u t /
# 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
''
substituteInPlace $ out/80-drivers.rules \
@ -74,7 +74,9 @@ let
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 /* / u d e v / r u l e s . d / * ; d o
ln - s $ j $ out / $ ( basename $ j )
done
@ -122,23 +124,24 @@ in
addFirmware = mkOption {
default = [ ] ;
example = [ " / m n t / b i g - s t o r a g e / f i r m w a r e / " ] ;
merge = mergeListOption ;
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 ;
} ;
addUdevPkg s = mkOption {
package s = mkOption {
default = [ ] ;
merge = mergeListOption ;
description = ''
List of packages containing <command> udev < /command > rules .
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 .
'' ;
merge = pkgs . lib . mergeListOption ;
} ;
extraRules = mkOption {
@ -146,6 +149,7 @@ in
example = ''
KERNEL == " e t h * " , ATTR { address } == " 0 0 : 1 D : 6 0 : B 9 : 6 D : 4 F " , NAME = " m y _ f a s t _ n e t w o r k _ c a r d "
'' ;
merge = mergeStringOption ;
description = ''
Additional <command> udev < /command > rules . They'll be written
into file <filename> 1 0 - local . rules < /filename > . Thus they are
@ -172,6 +176,10 @@ in
config = {
services . udev . extraRules = nixosRules ;
services . udev . packages = [ extraUdevRules ] ;
jobs = singleton
{ name = " u d e v " ;