nixpkgs/modules/services/hardware/hal.nix
Eelco Dolstra 7aecd0ca53 * hal: depend on both dbus and acpid (if enabled).
* dbus: don't signal Upstart, since that seems to make it forget about
  pending events or something.  In any case starting dbus after acpid
  was running wouldn't trigger hal to be started (but the other way
  around did work).

svn path=/nixos/branches/upstart-0.6/; revision=18251
2009-11-07 12:01:12 +00:00

116 lines
2.7 KiB
Nix

# HAL daemon.
{ config, pkgs, ... }:
with pkgs.lib;
let
cfg = config.services.hal;
inherit (pkgs) hal;
fdi = pkgs.buildEnv {
name = "hal-fdi";
pathsToLink = [ "/share/hal/fdi" ];
paths = cfg.packages;
};
in
{
###### interface
options = {
services.hal = {
enable = mkOption {
default = true;
description = ''
Whether to start the HAL daemon.
'';
};
packages = mkOption {
default = [];
description = ''
Packages containing additional HAL configuration data.
'';
};
};
};
###### implementation
config = mkIf cfg.enable {
# !!! move pmutils somewhere else
environment.systemPackages = [hal pkgs.pmutils];
services.hal.packages = [hal pkgs.hal_info];
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.hal =
{ description = "HAL daemon";
startOn = "started dbus" + optionalString config.powerManagement.enable " and started acpid";
environment =
{ # !!! HACK? These environment variables manipulated inside
# 'src'/hald/mmap_cache.c are used for testing the daemon.
HAL_FDI_SOURCE_PREPROBE = "${fdi}/share/hal/fdi/preprobe";
HAL_FDI_SOURCE_INFORMATION = "${fdi}/share/hal/fdi/information";
HAL_FDI_SOURCE_POLICY = "${fdi}/share/hal/fdi/policy";
# Stuff needed by the shell scripts run by HAL (in particular pm-utils).
HALD_RUNNER_PATH = concatStringsSep ":"
[ "${pkgs.coreutils}/bin"
"${pkgs.gnugrep}/bin"
"${pkgs.dbus.tools}/bin"
"${pkgs.procps}/bin"
"${pkgs.procps}/sbin"
"${config.system.sbin.modprobe}/sbin"
"${pkgs.module_init_tools}/bin"
"${pkgs.module_init_tools}/sbin"
"${pkgs.kbd}/bin"
];
};
preStart =
''
mkdir -m 0755 -p /var/cache/hald
mkdir -m 0755 -p /var/run/hald
rm -f /var/cache/hald/fdi-cache
'';
daemonType = "fork";
# The `PATH=' works around a bug in HAL: it concatenates
# its libexec directory to $PATH, but using a 512-byte
# buffer. So if $PATH is too long it fails.
script = "PATH= exec ${hal}/sbin/hald --use-syslog";
};
services.udev.packages = [hal];
services.dbus.enable = true;
services.dbus.packages = [hal];
};
}