at 16.09-beta 3.3 kB view raw
1# Disnix server 2{ config, lib, pkgs, ... }: 3 4with lib; 5 6let 7 8 cfg = config.services.disnix; 9 10 dysnomia = pkgs.dysnomia.override (origArgs: { 11 enableApacheWebApplication = config.services.httpd.enable; 12 enableAxis2WebService = config.services.tomcat.axis2.enable; 13 enableEjabberdDump = config.services.ejabberd.enable; 14 enableMySQLDatabase = config.services.mysql.enable; 15 enablePostgreSQLDatabase = config.services.postgresql.enable; 16 enableSubversionRepository = config.services.svnserve.enable; 17 enableTomcatWebApplication = config.services.tomcat.enable; 18 enableMongoDatabase = config.services.mongodb.enable; 19 }); 20in 21 22{ 23 24 ###### interface 25 26 options = { 27 28 services.disnix = { 29 30 enable = mkOption { 31 default = false; 32 description = "Whether to enable Disnix"; 33 }; 34 35 useWebServiceInterface = mkOption { 36 default = false; 37 description = "Whether to enable the DisnixWebService interface running on Apache Tomcat"; 38 }; 39 40 package = mkOption { 41 type = types.path; 42 description = "The Disnix package"; 43 default = pkgs.disnix; 44 }; 45 46 }; 47 48 }; 49 50 ###### implementation 51 52 config = mkIf cfg.enable { 53 dysnomia.enable = true; 54 55 environment.systemPackages = [ pkgs.disnix ] ++ optional cfg.useWebServiceInterface pkgs.DisnixWebService; 56 57 services.dbus.enable = true; 58 services.dbus.packages = [ pkgs.disnix ]; 59 60 services.tomcat.enable = cfg.useWebServiceInterface; 61 services.tomcat.extraGroups = [ "disnix" ]; 62 services.tomcat.javaOpts = "${optionalString cfg.useWebServiceInterface "-Djava.library.path=${pkgs.libmatthew_java}/lib/jni"} "; 63 services.tomcat.sharedLibs = optional cfg.useWebServiceInterface "${pkgs.DisnixWebService}/share/java/DisnixConnection.jar" 64 ++ optional cfg.useWebServiceInterface "${pkgs.dbus_java}/share/java/dbus.jar"; 65 services.tomcat.webapps = optional cfg.useWebServiceInterface pkgs.DisnixWebService; 66 67 users.extraGroups = singleton 68 { name = "disnix"; 69 gid = config.ids.gids.disnix; 70 }; 71 72 systemd.services = { 73 disnix = { 74 description = "Disnix server"; 75 wants = [ "dysnomia.target" ]; 76 wantedBy = [ "multi-user.target" ]; 77 after = [ "dbus.service" ] 78 ++ optional config.services.httpd.enable "httpd.service" 79 ++ optional config.services.mysql.enable "mysql.service" 80 ++ optional config.services.postgresql.enable "postgresql.service" 81 ++ optional config.services.tomcat.enable "tomcat.service" 82 ++ optional config.services.svnserve.enable "svnserve.service" 83 ++ optional config.services.mongodb.enable "mongodb.service"; 84 85 restartIfChanged = false; 86 87 path = [ config.nix.package cfg.package config.dysnomia.package "/run/current-system/sw" ]; 88 89 environment = { 90 HOME = "/root"; 91 } 92 // (if config.environment.variables ? DYSNOMIA_CONTAINERS_PATH then { inherit (config.environment.variables) DYSNOMIA_CONTAINERS_PATH; } else {}) 93 // (if config.environment.variables ? DYSNOMIA_MODULES_PATH then { inherit (config.environment.variables) DYSNOMIA_MODULES_PATH; } else {}); 94 95 serviceConfig.ExecStart = "${cfg.package}/bin/disnix-service"; 96 }; 97 98 }; 99 }; 100}