1
0
mirror of http://code.capytal.cc/dot013/spacestation.git synced 2026-01-16 07:56:11 -03:00
Files
spacestation/modules/forgejo/default.nix

177 lines
4.9 KiB
Nix

{
config,
lib,
pkgs,
...
}: let
cfg = config.services.forgejo;
initList = l: (lib.strings.concatStringsSep "," l);
customThemes = with builtins;
with lib.attrsets;
if !(isNull cfg.customization.theme)
then
(
if (isAttrs cfg.customization.theme)
then (mapAttrsToList (n: v: n) cfg.customization.theme)
else ["custom"]
)
else [];
in {
imports = [
./users.nix
./customization.nix
];
options.services.forgejo = with lib;
with lib.types; {
settings = {
DEFAULT = {
APP_NAME = mkOption {
type = str;
default = "Forgejo: Beyond code. We forge.";
};
};
actions = {
ENABLED = mkOption {
type = bool;
default = cfg.actions.enable;
};
DEFAULT_ACTIONS_URL = mkOption {
type = str;
default = "https://localhost:${toString cfg.settings.server.HTTP_PORT}";
};
};
project = {
PROJECT_BOARD_BASIC_KANBAN_TYPE = mkOption {
type = listOf str;
default = ["To Do" "In Progress" "Done"];
apply = t: initList t;
};
PROJECT_BOARD_BUG_TRIAGE_TYPE = mkOption {
type = listOf str;
default = ["Needs Triage" "High Priority" "Low Priority" "Closed"];
apply = t: initList t;
};
};
repository = {
DEFAULT_REPO_UNITS = mkOption {
type = listOf str;
default = ["repo.code"];
apply = t: initList t;
};
DISABLED_REPO_UNITS = mkOption {
type = listOf str;
default = [];
apply = t:
initList (t
++ (
if !cfg.actions.enable
then ["repo.actions"]
else []
));
};
};
ui = {
DEFAULT_THEME = mkOption {
type = str;
default = with builtins;
if (!(isNull cfg.customization.theme))
then elemAt customThemes 0
else "forgejo-auto";
};
THEMES = mkOption {
type = listOf str;
default = [
"forgejo-auto"
"forgejo-light"
"forgejo-dark"
"gitea-auto"
"gitea-light"
"gitea-dark"
"forgejo-auto-deuteranopania-protanopia"
"forgejo-light-deuteranopania-protanopia"
"forgejo-dark-deuteranopania-protanopia"
"forgejo-auto-tritanopia"
"forgejo-light-tritanopia"
"forgejo-dark-tritanopia"
];
apply = t: let
list = t ++ customThemes;
in
initList list;
};
};
};
actions = {
enable = mkOption {
type = bool;
default = cfg.enable;
};
token = mkOption {
type = str;
};
url = mkOption {
type = str;
default = "http://localhost:${toString cfg.settings.server.HTTP_PORT}";
};
labels = mkOption {
type = listOf str;
default = [
/*
Remember to install git on these images so actions/checkout can work,
without it, the actions tries to use the /api/v3/repos/{user}/{repo}/tarball/{ref}
api endpoint, which Gitea/Forgejo doesn't has.
*/
"ubuntu-latest:docker://gitea/runner-images:ubuntu-latest-slim"
"ubuntu-latest-full:docker://gitea/runner-images:ubuntu-latest"
];
};
};
};
config = with lib;
mkIf cfg.enable {
networking.firewall.allowedTCPPorts = mkIf cfg.settings.actions.ENABLED [
cfg.settings.server.HTTP_PORT
];
networking.firewall.allowedUDPPorts = mkIf cfg.settings.actions.ENABLED [
cfg.settings.server.HTTP_PORT
];
users.users."${cfg.user}" = {
home = cfg.stateDir;
useDefaultShell = true;
group = cfg.group;
isSystemUser = true;
extraGroups = ["wheel" "networkmanager"];
};
users.groups."${cfg.group}" = {};
services.forgejo = {
user = mkDefault "git";
group = cfg.user;
};
virtualisation.docker.enable = mkIf cfg.actions.enable (mkDefault true);
virtualisation.oci-containers.backend = mkIf cfg.actions.enable (mkDefault "docker");
# services.gitea-actions-runner = mkIf cfg.actions.enable {
# package =
# if config.services.gitea.enable
# then pkgs.gitea-actions-runner
# else pkgs.forgejo-actions-runner;
# instances."forgejo${toString cfg.settings.server.HTTP_PORT}" = {
# enable = mkDefault true;
# token = mkDefault cfg.actions.token;
# name = mkDefault "${cfg.settings.DEFAULT.APP_NAME} - Actions";
# url = cfg.actions.url;
# labels = mkDefault cfg.actions.labels;
# settings = {
# runner = {
# insecure = true;
# };
# };
# };
# };
};
}