nixpkgs/modules/services/hardware/hal.nix

104 lines
2.1 KiB
Nix
Raw Normal View History

# HAL daemon.
{pkgs, config, ...}:
with pkgs.lib;
let
cfg = config.services.hal;
inherit (pkgs) hal;
fdi =
if cfg.extraFdi == [] then
"${hal}/share/hal/fdi"
else
pkgs.buildEnv {
name = "hal-fdi";
pathsToLink = [ "/preprobe" "/information" "/policy" ];
paths = [ "${hal}/share/hal/fdi" ] ++ cfg.extraFdi;
};
in
{
###### interface
options = {
services.hal = {
enable = mkOption {
default = true;
description = "
Whether to start the HAL daemon.
";
};
extraFdi = mkOption {
default = [];
example = [ "/nix/store/.../fdi" ];
description = "
Extend HAL daemon configuration with additionnal paths.
";
};
};
};
###### implementation
config = mkIf cfg.enable {
environment.systemPackages = [hal];
users.extraUsers = singleton
{ name = "haldaemon";
uid = config.ids.uids.haldaemon;
description = "HAL daemon user";
};
users.extraGroups = singleton
{ name = "haldaemon";
gid = config.ids.gids.haldaemon;
};
jobs = singleton
{ name = "hal";
description = "HAL daemon";
# !!! TODO: make sure that HAL starts after acpid,
# otherwise hald-addon-acpi will grab /proc/acpi/event.
startOn = if config.powerManagement.enable then "acpid" else "dbus";
stopOn = "shutdown";
# !!! HACK? These environment variables manipulated inside
# 'src'/hald/mmap_cache.c are used for testing the daemon
environment =
{ HAL_FDI_SOURCE_PREPROBE = "${fdi}/preprobe";
HAL_FDI_SOURCE_INFORMATION = "${fdi}/information";
HAL_FDI_SOURCE_POLICY = "${fdi}/policy";
};
preStart =
''
mkdir -m 0755 -p /var/cache/hald
rm -f /var/cache/hald/fdi-cache
'';
exec = "${hal}/sbin/hald --daemon=no";
};
services.udev.packages = [hal];
services.dbus.enable = true;
services.dbus.packages = [hal];
};
}