* Clean up the udev module.
svn path=/nixos/trunk/; revision=16653
This commit is contained in:
parent
2331a5140d
commit
b4f8f919ab
@ -1,71 +1,6 @@
|
|||||||
{pkgs, config, ...}:
|
{pkgs, config, ...}:
|
||||||
|
|
||||||
###### interface
|
with pkgs.lib;
|
||||||
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 <literal>safemode</literal>
|
|
||||||
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
|
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|
||||||
@ -73,7 +8,6 @@ let
|
|||||||
|
|
||||||
cfg = config.services.udev;
|
cfg = config.services.udev;
|
||||||
|
|
||||||
|
|
||||||
firmwareLoader = substituteAll {
|
firmwareLoader = substituteAll {
|
||||||
src = ./udev-firmware-loader.sh;
|
src = ./udev-firmware-loader.sh;
|
||||||
path = "${stdenv.coreutils}/bin";
|
path = "${stdenv.coreutils}/bin";
|
||||||
@ -82,6 +16,7 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
firmwareDirs = config.services.udev.addFirmware;
|
firmwareDirs = config.services.udev.addFirmware;
|
||||||
|
|
||||||
extraUdevPkgs = config.services.udev.addUdevPkgs
|
extraUdevPkgs = config.services.udev.addUdevPkgs
|
||||||
++ pkgs.lib.optional (cfg.extraRules != "")
|
++ pkgs.lib.optional (cfg.extraRules != "")
|
||||||
(pkgs.writeTextFile {
|
(pkgs.writeTextFile {
|
||||||
@ -166,21 +101,87 @@ in
|
|||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
require = [
|
###### interface
|
||||||
options
|
|
||||||
];
|
|
||||||
|
|
||||||
services = {
|
options = {
|
||||||
extraJobs = [{
|
|
||||||
name = "udev";
|
|
||||||
|
|
||||||
job = ''
|
boot.hardwareScan = mkOption {
|
||||||
start on startup
|
default = true;
|
||||||
stop on shutdown
|
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 <literal>safemode</literal>
|
||||||
|
parameter to the kernel command line.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
env UDEV_CONFIG_FILE=${conf}
|
services.udev = {
|
||||||
|
|
||||||
start script
|
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 <command>udev</command> rules.
|
||||||
|
All files found in
|
||||||
|
<filename><replaceable>pkg</replaceable>/udev/rules.d</filename>
|
||||||
|
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 <command>udev</command> rules. They'll be written
|
||||||
|
into file <filename>10-local.rules</filename>. 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
|
echo "" > /proc/sys/kernel/hotplug
|
||||||
|
|
||||||
# Get rid of possible old udev processes.
|
# Get rid of possible old udev processes.
|
||||||
@ -217,12 +218,12 @@ in
|
|||||||
done
|
done
|
||||||
|
|
||||||
initctl emit new-devices
|
initctl emit new-devices
|
||||||
end script
|
'';
|
||||||
|
|
||||||
respawn ${udev}/sbin/udevd
|
exec = "${udev}/sbin/udevd";
|
||||||
'';
|
|
||||||
|
};
|
||||||
|
|
||||||
passthru = {inherit udevRules;};
|
|
||||||
}];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user