at 17.09-beta 3.4 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 defaultText = "pkgs.disnix"; 45 }; 46 47 }; 48 49 }; 50 51 ###### implementation 52 53 config = mkIf cfg.enable { 54 dysnomia.enable = true; 55 56 environment.systemPackages = [ pkgs.disnix ] ++ optional cfg.useWebServiceInterface pkgs.DisnixWebService; 57 58 services.dbus.enable = true; 59 services.dbus.packages = [ pkgs.disnix ]; 60 61 services.tomcat.enable = cfg.useWebServiceInterface; 62 services.tomcat.extraGroups = [ "disnix" ]; 63 services.tomcat.javaOpts = "${optionalString cfg.useWebServiceInterface "-Djava.library.path=${pkgs.libmatthew_java}/lib/jni"} "; 64 services.tomcat.sharedLibs = optional cfg.useWebServiceInterface "${pkgs.DisnixWebService}/share/java/DisnixConnection.jar" 65 ++ optional cfg.useWebServiceInterface "${pkgs.dbus_java}/share/java/dbus.jar"; 66 services.tomcat.webapps = optional cfg.useWebServiceInterface pkgs.DisnixWebService; 67 68 users.extraGroups = singleton 69 { name = "disnix"; 70 gid = config.ids.gids.disnix; 71 }; 72 73 systemd.services = { 74 disnix = { 75 description = "Disnix server"; 76 wants = [ "dysnomia.target" ]; 77 wantedBy = [ "multi-user.target" ]; 78 after = [ "dbus.service" ] 79 ++ optional config.services.httpd.enable "httpd.service" 80 ++ optional config.services.mysql.enable "mysql.service" 81 ++ optional config.services.postgresql.enable "postgresql.service" 82 ++ optional config.services.tomcat.enable "tomcat.service" 83 ++ optional config.services.svnserve.enable "svnserve.service" 84 ++ optional config.services.mongodb.enable "mongodb.service"; 85 86 restartIfChanged = false; 87 88 path = [ config.nix.package cfg.package config.dysnomia.package "/run/current-system/sw" ]; 89 90 environment = { 91 HOME = "/root"; 92 } 93 // (if config.environment.variables ? DYSNOMIA_CONTAINERS_PATH then { inherit (config.environment.variables) DYSNOMIA_CONTAINERS_PATH; } else {}) 94 // (if config.environment.variables ? DYSNOMIA_MODULES_PATH then { inherit (config.environment.variables) DYSNOMIA_MODULES_PATH; } else {}); 95 96 serviceConfig.ExecStart = "${cfg.package}/bin/disnix-service"; 97 }; 98 99 }; 100 }; 101}