nixos/corteza: init
This commit is contained in:
parent
5de2d661db
commit
c721b7dfe9
@ -579,6 +579,7 @@
|
||||
./services/development/athens.nix
|
||||
./services/development/blackfire.nix
|
||||
./services/development/bloop.nix
|
||||
./services/development/corteza.nix
|
||||
./services/development/distccd.nix
|
||||
./services/development/gemstash.nix
|
||||
./services/development/hoogle.nix
|
||||
|
113
nixos/modules/services/development/corteza.nix
Normal file
113
nixos/modules/services/development/corteza.nix
Normal file
@ -0,0 +1,113 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.services.corteza;
|
||||
in
|
||||
{
|
||||
options.services.corteza = {
|
||||
enable = lib.mkEnableOption "Corteza, a low-code platform";
|
||||
package = lib.mkPackageOption pkgs "corteza" { };
|
||||
|
||||
address = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "0.0.0.0";
|
||||
description = ''
|
||||
IP for the HTTP server.
|
||||
'';
|
||||
};
|
||||
port = lib.mkOption {
|
||||
type = lib.types.port;
|
||||
default = 80;
|
||||
description = ''
|
||||
Port for the HTTP server.
|
||||
'';
|
||||
};
|
||||
openFirewall = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
example = true;
|
||||
description = "Whether to open ports in the firewall.";
|
||||
};
|
||||
|
||||
user = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "corteza";
|
||||
description = "The user to run Corteza under.";
|
||||
};
|
||||
|
||||
group = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "corteza";
|
||||
description = "The group to run Corteza under.";
|
||||
};
|
||||
|
||||
settings = lib.mkOption {
|
||||
type = lib.types.submodule {
|
||||
freeformType = lib.types.attrsOf lib.types.str;
|
||||
options = {
|
||||
HTTP_WEBAPP_ENABLED = lib.mkEnableOption "webapps" // {
|
||||
default = true;
|
||||
apply = toString;
|
||||
};
|
||||
};
|
||||
};
|
||||
default = { };
|
||||
description = ''
|
||||
Configuration for Corteza, will be passed as environment variables.
|
||||
See <https://docs.cortezaproject.org/corteza-docs/2024.9/devops-guide/references/configuration/server.html>.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
assertions = [
|
||||
{
|
||||
assertion = !cfg.settings ? HTTP_ADDR;
|
||||
message = "Use `services.corteza.address` and `services.corteza.port` instead.";
|
||||
}
|
||||
];
|
||||
|
||||
warnings = lib.optional (!cfg.settings ? DB_DSN) ''
|
||||
A database connection string is not set.
|
||||
Corteza will create a temporary SQLite database in memory, but it will not persist data.
|
||||
For production use, set `services.corteza.settings.DB_DSN`.
|
||||
'';
|
||||
|
||||
networking.firewall.allowedTCPPorts = lib.mkIf cfg.openFirewall [ cfg.port ];
|
||||
|
||||
systemd.services.corteza = {
|
||||
description = "Corteza";
|
||||
documentation = [ "https://docs.cortezaproject.org/" ];
|
||||
after = [ "network-online.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = {
|
||||
HTTP_WEBAPP_BASE_DIR = "./webapp";
|
||||
HTTP_ADDR = "${cfg.address}:${toString cfg.port}";
|
||||
} // cfg.settings;
|
||||
path = [ pkgs.dart-sass ];
|
||||
serviceConfig = {
|
||||
WorkingDirectory = cfg.package;
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
ExecStart = "${lib.getExe cfg.package} serve-api";
|
||||
};
|
||||
};
|
||||
|
||||
users = {
|
||||
groups.${cfg.group} = { };
|
||||
users.${cfg.user} = {
|
||||
inherit (cfg) group;
|
||||
isSystemUser = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [
|
||||
prince213
|
||||
];
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user