at 18.03-beta 3.6 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 enableMultiUser = mkOption { 36 type = types.bool; 37 default = true; 38 description = "Whether to support multi-user mode by enabling the Disnix D-Bus service"; 39 }; 40 41 useWebServiceInterface = mkOption { 42 default = false; 43 description = "Whether to enable the DisnixWebService interface running on Apache Tomcat"; 44 }; 45 46 package = mkOption { 47 type = types.path; 48 description = "The Disnix package"; 49 default = pkgs.disnix; 50 defaultText = "pkgs.disnix"; 51 }; 52 53 }; 54 55 }; 56 57 ###### implementation 58 59 config = mkIf cfg.enable { 60 dysnomia.enable = true; 61 62 environment.systemPackages = [ pkgs.disnix ] ++ optional cfg.useWebServiceInterface pkgs.DisnixWebService; 63 64 services.dbus.enable = true; 65 services.dbus.packages = [ pkgs.disnix ]; 66 67 services.tomcat.enable = cfg.useWebServiceInterface; 68 services.tomcat.extraGroups = [ "disnix" ]; 69 services.tomcat.javaOpts = "${optionalString cfg.useWebServiceInterface "-Djava.library.path=${pkgs.libmatthew_java}/lib/jni"} "; 70 services.tomcat.sharedLibs = optional cfg.useWebServiceInterface "${pkgs.DisnixWebService}/share/java/DisnixConnection.jar" 71 ++ optional cfg.useWebServiceInterface "${pkgs.dbus_java}/share/java/dbus.jar"; 72 services.tomcat.webapps = optional cfg.useWebServiceInterface pkgs.DisnixWebService; 73 74 users.extraGroups = singleton 75 { name = "disnix"; 76 gid = config.ids.gids.disnix; 77 }; 78 79 systemd.services = { 80 disnix = mkIf cfg.enableMultiUser { 81 description = "Disnix server"; 82 wants = [ "dysnomia.target" ]; 83 wantedBy = [ "multi-user.target" ]; 84 after = [ "dbus.service" ] 85 ++ optional config.services.httpd.enable "httpd.service" 86 ++ optional config.services.mysql.enable "mysql.service" 87 ++ optional config.services.postgresql.enable "postgresql.service" 88 ++ optional config.services.tomcat.enable "tomcat.service" 89 ++ optional config.services.svnserve.enable "svnserve.service" 90 ++ optional config.services.mongodb.enable "mongodb.service"; 91 92 restartIfChanged = false; 93 94 path = [ config.nix.package cfg.package config.dysnomia.package "/run/current-system/sw" ]; 95 96 environment = { 97 HOME = "/root"; 98 } 99 // (if config.environment.variables ? DYSNOMIA_CONTAINERS_PATH then { inherit (config.environment.variables) DYSNOMIA_CONTAINERS_PATH; } else {}) 100 // (if config.environment.variables ? DYSNOMIA_MODULES_PATH then { inherit (config.environment.variables) DYSNOMIA_MODULES_PATH; } else {}); 101 102 serviceConfig.ExecStart = "${cfg.package}/bin/disnix-service"; 103 }; 104 105 }; 106 }; 107}