diff --git a/nix/modules/default/cs/admin-api.nix b/nix/modules/default/cs/admin-api.nix
index 531b50aa..dad45b68 100644
--- a/nix/modules/default/cs/admin-api.nix
+++ b/nix/modules/default/cs/admin-api.nix
@@ -13,7 +13,9 @@ let
jsonFormat = pkgs.formats.json { };
in
{
- imports = [ ];
+ imports = [
+ ./shared-config.nix
+ ];
options.services.spacebarchat-server.adminApi = lib.mkOption {
default = { };
description = "Configuration for admin api.";
@@ -22,7 +24,7 @@ in
enable = lib.mkEnableOption "Enable admin api.";
extraConfiguration = lib.mkOption {
type = jsonFormat.type;
- default = import ./default-appsettings-json.nix;
+ default = { };
description = "Extra appsettings.json configuration for the gateway offload daemon.";
};
};
@@ -35,7 +37,7 @@ in
in
{
assertions = [
- (import ./assert-has-connection-string.nix "Admin API" cfg.adminApi.extraConfiguration)
+ (import ./assert-has-connection-string.nix "Admin API" cfg)
];
services.spacebarchat-server.settings.admin = {
@@ -58,7 +60,7 @@ in
CONFIG_READONLY = 1;
ASPNETCORE_URLS = "http://0.0.0.0:${toString cfg.adminApiEndpoint.localPort}";
STORAGE_LOCATION = cfg.cdnPath;
- APPSETTINGS_PATH = jsonFormat.generate "appsettings.spacebar-adminapi.json" (lib.recursiveUpdate (import ./default-appsettings-json.nix) cfg.adminApi.extraConfiguration);
+ APPSETTINGS_PATH = jsonFormat.generate "appsettings.spacebar-adminapi.json" (lib.recursiveUpdate cfg.cs.defaultAppsettings cfg.adminApi.extraConfiguration);
}
);
serviceConfig = {
diff --git a/nix/modules/default/cs/assert-has-connection-string.nix b/nix/modules/default/cs/assert-has-connection-string.nix
index 4066c893..45b8237c 100644
--- a/nix/modules/default/cs/assert-has-connection-string.nix
+++ b/nix/modules/default/cs/assert-has-connection-string.nix
@@ -1,4 +1,8 @@
-name: extraConfig: {
+name: cfg:
+let
+ extraConfig = cfg.cs.defaultAppsettings;
+in
+{
assertion = extraConfig ? ConnectionStrings && extraConfig.ConnectionStrings ? Spacebar && extraConfig.ConnectionStrings.Spacebar != null;
message = ''
${name}: Setting a database connection string in extraConfiguration (`extraConfiguration.ConnectionStrings.Spacebar`) is required when using C# services.
diff --git a/nix/modules/default/cs/cdn-cs.nix b/nix/modules/default/cs/cdn-cs.nix
index 42432dab..91d95b16 100644
--- a/nix/modules/default/cs/cdn-cs.nix
+++ b/nix/modules/default/cs/cdn-cs.nix
@@ -13,7 +13,9 @@ let
jsonFormat = pkgs.formats.json { };
in
{
- imports = [ ];
+ imports = [
+ ./shared-config.nix
+ ];
options.services.spacebarchat-server.cdnCs = lib.mkOption {
default = { };
description = "Configuration for C# cdn.";
@@ -22,7 +24,7 @@ in
enable = lib.mkEnableOption "Enable experimental C# CDN.";
extraConfiguration = lib.mkOption {
type = jsonFormat.type;
- default = import ./default-appsettings-json.nix;
+ default = { };
description = "Extra appsettings.json configuration for the gateway offload daemon.";
};
};
@@ -35,7 +37,7 @@ in
in
{
assertions = [
- (import ./assert-has-connection-string.nix "Admin API" cfg.adminApi.extraConfiguration)
+ (import ./assert-has-connection-string.nix "C# CDN" cfg)
];
systemd.services.spacebar-cdn = makeServerTsService {
@@ -53,7 +55,7 @@ in
CONFIG_READONLY = 1;
ASPNETCORE_URLS = "http://0.0.0.0:${toString cfg.cdnEndpoint.localPort}";
STORAGE_LOCATION = cfg.cdnPath;
- APPSETTINGS_PATH = jsonFormat.generate "appsettings.spacebar-cdn.json" (lib.recursiveUpdate (import ./default-appsettings-json.nix) cfg.cdnCs.extraConfiguration);
+ APPSETTINGS_PATH = jsonFormat.generate "appsettings.spacebar-cdn.json" (lib.recursiveUpdate cfg.cs.defaultAppsettings cfg.cdnCs.extraConfiguration);
}
);
serviceConfig = {
diff --git a/nix/modules/default/cs/offload-cs.nix b/nix/modules/default/cs/offload-cs.nix
index 9186edcb..e1f1fd9b 100644
--- a/nix/modules/default/cs/offload-cs.nix
+++ b/nix/modules/default/cs/offload-cs.nix
@@ -14,7 +14,9 @@ let
jsonFormat = pkgs.formats.json { };
in
{
- imports = [ ];
+ imports = [
+ ./shared-config.nix
+ ];
options.services.spacebarchat-server.offload = lib.mkOption {
default = { };
description = "Configuration for C# offload daemon.";
@@ -28,7 +30,7 @@ in
};
extraConfiguration = lib.mkOption {
type = jsonFormat.type;
- default = import ./default-appsettings-json.nix;
+ default = { };
description = "Extra appsettings.json configuration for the offload daemon.";
};
gateway = lib.mkOption {
@@ -54,7 +56,7 @@ in
in
{
assertions = [
- (import ./assert-has-connection-string.nix "Gateway Offload" offloadCfg.extraConfiguration)
+ (import ./assert-has-connection-string.nix "Gateway Offload" cfg)
];
services.spacebarchat-server.settings.offload = {
@@ -83,9 +85,7 @@ in
CONFIG_READONLY = 1;
ASPNETCORE_URLS = "http://0.0.0.0:${toString offloadCfg.listenPort}";
STORAGE_LOCATION = cfg.cdnPath;
- APPSETTINGS_PATH = jsonFormat.generate "appsettings.spacebar-offload.json" (
- lib.recursiveUpdate (import ./default-appsettings-json.nix) offloadCfg.extraConfiguration
- );
+ APPSETTINGS_PATH = jsonFormat.generate "appsettings.spacebar-offload.json" (lib.recursiveUpdate cfg.cs.defaultAppsettings offloadCfg.extraConfiguration);
}
);
serviceConfig = {
diff --git a/nix/modules/default/cs/shared-config.nix b/nix/modules/default/cs/shared-config.nix
new file mode 100644
index 00000000..a5ca64f6
--- /dev/null
+++ b/nix/modules/default/cs/shared-config.nix
@@ -0,0 +1,31 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+
+let
+ secrets = import ../secrets.nix { inherit lib config; };
+ cfg = config.services.spacebarchat-server;
+ jsonFormat = pkgs.formats.json { };
+in
+{
+ options.services.spacebarchat-server.cs = lib.mkOption {
+ default = { };
+ description = "Configuration for C# cdn.";
+ type = lib.types.submodule {
+ options = {
+ defaultAppsettings = lib.mkOption {
+ type = jsonFormat.type;
+ default = import ./default-appsettings-json.nix;
+ description = "Extra appsettings.json configuration for all C#-based services.";
+ };
+ };
+ };
+ };
+
+ config = {
+ services.spacebarchat-server.cs.defaultAppsettings = import ./default-appsettings-json.nix;
+ };
+}
diff --git a/nix/modules/default/cs/uapi.nix b/nix/modules/default/cs/uapi.nix
index 00caa214..2df0535f 100644
--- a/nix/modules/default/cs/uapi.nix
+++ b/nix/modules/default/cs/uapi.nix
@@ -13,7 +13,9 @@ let
jsonFormat = pkgs.formats.json { };
in
{
- imports = [ ];
+ imports = [
+ ./shared-config.nix
+ ];
options.services.spacebarchat-server.uApi = lib.mkOption {
default = { };
description = "Configuration for C# API overlay.";
@@ -27,7 +29,7 @@ in
};
extraConfiguration = lib.mkOption {
type = jsonFormat.type;
- default = import ./default-appsettings-json.nix;
+ default = { };
description = "Extra appsettings.json configuration for the C# API overlay.";
};
};
@@ -40,7 +42,7 @@ in
in
{
assertions = [
- (import ./assert-has-connection-string.nix "uAPI" cfg.uApi.extraConfiguration)
+ (import ./assert-has-connection-string.nix "uAPI" cfg)
];
systemd.services.spacebar-uapi = makeServerTsService {
@@ -59,7 +61,7 @@ in
CONFIG_READONLY = 1;
ASPNETCORE_URLS = "http://0.0.0.0:${toString cfg.uApi.listenPort}";
STORAGE_LOCATION = cfg.cdnPath;
- APPSETTINGS_PATH = jsonFormat.generate "appsettings.spacebar-uapi.json" (lib.recursiveUpdate (import ./default-appsettings-json.nix) cfg.uApi.extraConfiguration);
+ APPSETTINGS_PATH = jsonFormat.generate "appsettings.spacebar-uapi.json" (lib.recursiveUpdate cfg.cs.defaultAppsettings cfg.uApi.extraConfiguration);
}
);
serviceConfig = {
|