{ config, pkgs, ... }: let inherit (config.networking) fqdn; acmeEnabled = config.acme.enable; themeName = "tuxcord"; giteaPublic = pkgs.linkFarm "gitea-public" [ { name = "assets/css/theme-${themeName}.css"; path = ../../assets/gitea/theme.css; } { name = "assets/img"; path = makeGiteaImages { big = ../../assets/branding/logo.svg; small = ../../assets/branding/logo-head.svg; rasterWidth = 1024; }; } { name = "assets/images/full-logo.svg"; path = ../../assets/branding/logo.svg; } ]; giteaTemplates = ../../assets/gitea/templates; makeGiteaImages = { big, small, rasterWidth, }: pkgs.stdenv.mkDerivation rec { name = "gitea-images"; srcs = [ big small ]; unpackPhase = "true"; buildInputs = with pkgs; [ inkscape ]; # https://docs.gitea.com/administration/customizing-gitea#changing-the-logo buildPhase = '' mkdir -p $out cp "${big}" $out/logo.svg inkscape -w ${toString rasterWidth} ${big} -o $out/logo.png cp "${small}" $out/favicon.svg inkscape -w ${toString rasterWidth} ${small} -o $out/favicon.png ''; }; in { services.gitea = { enable = true; appName = "TuxCord Gitea"; database.type = "mysql"; lfs.enable = true; settings = { server = { DOMAIN = fqdn; ROOT_URL = "${if acmeEnabled then "https" else "http"}://${fqdn}/"; HTTP_PORT = 3000; }; service = { DISABLE_REGISTRATION = true; REQUIRE_SIGNIN_VIEW = false; }; repository = { ENABLE_PUSH_CREATE_USER = true; ENABLE_PUSH_CREATE_ORG = true; DEFAULT_BRANCH = "main"; }; ui = { DEFAULT_THEME = themeName; }; # TODO: once we have email setup this would be nice mailer.ENABLED = true; }; }; systemd.services.gitea-branding = { enable = true; wantedBy = [ "gitea.service" ]; before = [ "gitea.service" ]; serviceConfig = { Type = "oneshot"; ExecStart = pkgs.writeShellScript "gitea-branding.oneshot" '' ${pkgs.rsync}/bin/rsync -rl --chown gitea:gitea --delete ${giteaPublic}/ ${config.services.gitea.customDir}/public ${pkgs.rsync}/bin/rsync -rl --chown gitea:gitea --delete ${giteaTemplates}/ ${config.services.gitea.customDir}/templates ''; }; }; environment.persistence."/persist".directories = [ { directory = config.services.gitea.stateDir; group = "gitea"; user = "gitea"; } ]; }