summaryrefslogtreecommitdiffstats
path: root/nixos/modules/services/networking/avahi-daemon.nix
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2013-10-10 13:28:20 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2013-10-10 13:28:20 +0200
commit5c1f8cbc70cd5e6867ef6a2a06d27a40daa07010 (patch)
treea6c0f605be6de3f372ae69905b331f9f75452da7 /nixos/modules/services/networking/avahi-daemon.nix
parent6070bc016bd2fd945b04347e25cfd3738622d2ac (diff)
Move all of NixOS to nixos/ in preparation of the repository merge
Diffstat (limited to 'nixos/modules/services/networking/avahi-daemon.nix')
-rw-r--r--nixos/modules/services/networking/avahi-daemon.nix144
1 files changed, 144 insertions, 0 deletions
diff --git a/nixos/modules/services/networking/avahi-daemon.nix b/nixos/modules/services/networking/avahi-daemon.nix
new file mode 100644
index 000000000000..3603d677837f
--- /dev/null
+++ b/nixos/modules/services/networking/avahi-daemon.nix
@@ -0,0 +1,144 @@
+# Avahi daemon.
+{ config, pkgs, ... }:
+
+with pkgs.lib;
+
+let
+
+ cfg = config.services.avahi;
+
+ inherit (pkgs) avahi;
+
+ avahiDaemonConf = with cfg; pkgs.writeText "avahi-daemon.conf" ''
+ [server]
+ ${# Users can set `networking.hostName' to the empty string, when getting
+ # a host name from DHCP. In that case, let Avahi take whatever the
+ # current host name is; setting `host-name' to the empty string in
+ # `avahi-daemon.conf' would be invalid.
+ if hostName != ""
+ then "host-name=${hostName}"
+ else ""}
+ browse-domains=${concatStringsSep ", " browseDomains}
+ use-ipv4=${if ipv4 then "yes" else "no"}
+ use-ipv6=${if ipv6 then "yes" else "no"}
+
+ [wide-area]
+ enable-wide-area=${if wideArea then "yes" else "no"}
+
+ [publish]
+ disable-publishing=${if publishing then "no" else "yes"}
+ '';
+
+in
+
+{
+
+ ###### interface
+
+ options = {
+
+ services.avahi = {
+
+ enable = mkOption {
+ default = false;
+ description = ''
+ Whether to run the Avahi daemon, which allows Avahi clients
+ to use Avahi's service discovery facilities and also allows
+ the local machine to advertise its presence and services
+ (through the mDNS responder implemented by `avahi-daemon').
+ '';
+ };
+
+ hostName = mkOption {
+ type = types.uniq types.string;
+ description = ''Host name advertised on the LAN.'';
+ };
+
+ browseDomains = mkOption {
+ default = [ "0pointer.de" "zeroconf.org" ];
+ description = ''
+ List of non-local DNS domains to be browsed.
+ '';
+ };
+
+ ipv4 = mkOption {
+ default = true;
+ description = ''Whether to use IPv4'';
+ };
+
+ ipv6 = mkOption {
+ default = false;
+ description = ''Whether to use IPv6'';
+ };
+
+ wideArea = mkOption {
+ default = true;
+ description = ''Whether to enable wide-area service discovery.'';
+ };
+
+ publishing = mkOption {
+ default = true;
+ description = ''Whether to allow publishing.'';
+ };
+
+ nssmdns = mkOption {
+ default = false;
+ description = ''
+ Whether to enable the mDNS NSS (Name Service Switch) plug-in.
+ Enabling it allows applications to resolve names in the `.local'
+ domain by transparently querying the Avahi daemon.
+ '';
+ };
+
+ };
+
+ };
+
+
+ ###### implementation
+
+ config = mkIf cfg.enable {
+
+ services.avahi.hostName = mkDefault config.networking.hostName;
+
+ users.extraUsers = singleton
+ { name = "avahi";
+ uid = config.ids.uids.avahi;
+ description = "`avahi-daemon' privilege separation user";
+ home = "/var/empty";
+ };
+
+ users.extraGroups = singleton
+ { name = "avahi";
+ gid = config.ids.gids.avahi;
+ };
+
+ system.nssModules = optional cfg.nssmdns pkgs.nssmdns;
+
+ environment.systemPackages = [ avahi ];
+
+ jobs.avahi_daemon =
+ { name = "avahi-daemon";
+
+ startOn = "ip-up";
+
+ script =
+ ''
+ export PATH="${avahi}/bin:${avahi}/sbin:$PATH"
+
+ # Make NSS modules visible so that `avahi_nss_support ()' can
+ # return a sensible value.
+ export LD_LIBRARY_PATH="${config.system.nssModules.path}"
+
+ mkdir -p /var/run/avahi-daemon
+
+ exec ${avahi}/sbin/avahi-daemon --syslog -f "${avahiDaemonConf}"
+ '';
+ };
+
+ services.dbus.enable = true;
+ services.dbus.packages = [avahi];
+
+ };
+
+}