diff --git a/system/options.nix b/system/options.nix index 029fba8157c1..3f0da62724a2 100644 --- a/system/options.nix +++ b/system/options.nix @@ -2914,4 +2914,7 @@ root ALL=(ALL) SETENV: ALL }; }; + require = [ + (import ../upstart-jobs/pcmcia.nix) + ]; } diff --git a/upstart-jobs/pcmcia.nix b/upstart-jobs/pcmcia.nix new file mode 100644 index 000000000000..38effdc8a299 --- /dev/null +++ b/upstart-jobs/pcmcia.nix @@ -0,0 +1,68 @@ +pkgs: config: + +###### interface +let + inherit (pkgs.lib) mkOption + mergeEnableOption mergeListOption; + + options = { + hardware = { + pcmcia = { + enable = mkOption { + default = false; + merge = mergeEnableOption; + description = '' + Enable this option to support PCMCIA card. + ''; + }; + + firmware = mkOption { + default = []; + merge = mergeListOption; + description = '' + List of firmware used to handle specific PCMCIA card. + ''; + }; + + config = mkOption { + default = null; + decription = '' + Path to the configuration file which map the memory, irq + and ports used by the PCMCIA hardware. + ''; + }; + }; + }; + }; +in + +###### implementation +let + ifEnable = arg: + if config.hardware.pcmcia.enable then arg + else if builtins.isList arg then [] + else if builtins.isAttrs arg then {} + else null; + + pcmciaUtils = pkgs.pcmciaUtils.meta.function { + inherit (config.hardware.pcmcia) firmware config; + }; +in + +{ + require = options; + + boot = { + kernelModules = ifEnable [ "pcmcia" ]; + }; + + services = { + udev = { + addUdevPkgs = ifEnable [ pcmciaUtils ]; + }; + }; + + environment = { + extraPackages = ifEnable [ pcmciaUtils ]; + }; +}