diff --git a/modules/features/forgejo.nix b/modules/features/forgejo.nix index 498dd8c..03fd61f 100644 --- a/modules/features/forgejo.nix +++ b/modules/features/forgejo.nix @@ -3,6 +3,18 @@ let cfg = config.forgejo; needsPrivilegedPort = cfg.port < 1024; + wrappedForgejo = (inputs.self.wrappers.forgejo.forgejo.apply { + inherit pkgs; + serviceConfig = config.services.forgejo; + }).wrapper; + cleanForgejo = (inputs.self.wrappers.forgejo.clean.apply { + inherit pkgs; + serviceConfig = config.services.forgejo; + }).wrapper; + cleanPostgres = (inputs.self.wrappers.forgejo.clean-postgres.apply { + inherit pkgs; + serviceConfig = config.services.postgresql; + }).wrapper; in { options.forgejo = { @@ -154,17 +166,15 @@ client_id="$(<${config.sops.secrets."forgejo/pocket_id/client_id".path})" client_secret="$(<${config.sops.secrets."forgejo/pocket_id/client_secret".path})" provider_name="${cfg.pocketId.name}" - forgejo_bin="${lib.getExe config.services.forgejo.package}" - forgejo_config="${config.services.forgejo.customDir}/conf/app.ini" - forgejo_work_path="${config.services.forgejo.stateDir}" + forgejo_bin="${lib.getExe wrappedForgejo}" auth_id="$( - "$forgejo_bin" --config "$forgejo_config" --work-path "$forgejo_work_path" admin auth list \ + "$forgejo_bin" admin auth list \ | ${lib.getExe' pkgs.gawk "awk"} '$2 == "'"$provider_name"'" { print $1; exit }' )" if [ -n "$auth_id" ]; then - "$forgejo_bin" --config "$forgejo_config" --work-path "$forgejo_work_path" admin auth update-oauth \ + "$forgejo_bin" admin auth update-oauth \ --id "$auth_id" \ --name "$provider_name" \ --provider openidConnect \ @@ -175,7 +185,7 @@ --scopes profile \ --scopes email else - "$forgejo_bin" --config "$forgejo_config" --work-path "$forgejo_work_path" admin auth add-oauth \ + "$forgejo_bin" admin auth add-oauth \ --name "$provider_name" \ --provider openidConnect \ --key "$client_id" \ @@ -188,39 +198,71 @@ ''; }; - environment.systemPackages = - let - systemctl = lib.getExe' pkgs.systemd "systemctl"; - clean-forgejo = (pkgs.writeShellScriptBin "clean-forgejo" '' - set -euo pipefail - sudo ${systemctl} stop forgejo.service - ${lib.getExe' pkgs.coreutils "echo"} "Stopped Forgejo" - sudo ${lib.getExe' pkgs.coreutils "rm"} -rf ${config.services.forgejo.stateDir} - ${lib.getExe' pkgs.coreutils "echo"} "Removed ${config.services.forgejo.stateDir}" - ''); - clean-postgres = (pkgs.writeShellScriptBin "clean-postgres" '' - set -euo pipefail - sudo ${systemctl} stop postgresql.service - ${lib.getExe' pkgs.coreutils "echo"} "Stopped PostgreSQL" - sudo ${lib.getExe' pkgs.coreutils "rm"} -rf ${config.services.postgresql.dataDir} - ${lib.getExe' pkgs.coreutils "echo"} "Removed ${config.services.postgresql.dataDir}" - ''); - in [ - clean-forgejo - clean-postgres - (pkgs.writeShellScriptBin "clean-all" '' - set -euo pipefail - GREEN_CHECK="\e[32m✔\e[0m" - YELLOW_BANG="\e[33m!\e[0m" - ${lib.getExe' pkgs.coreutils "echo"} -n -e "$YELLOW_BANG Remove everything related to Forgejo and the PostgreSQL database behind it?" - read -p " (y/n) " -n 1 -r - if [[ $REPLY =~ ^[Yy]$ ]]; then - ${lib.getExe clean-forgejo} - ${lib.getExe clean-postgres} - ${lib.getExe' pkgs.coreutils "echo"} -e "$GREEN_CHECK Removed everything related to forgejo" - fi - '') + environment.systemPackages = [ + wrappedForgejo + cleanForgejo + cleanPostgres ]; }; }; + + flake.wrappers.forgejo = { + forgejo = inputs.wrappers.lib.wrapModule ({ config, lib, wlib, ... }: { + options = { + serviceConfig = lib.mkOption { type = lib.types.attrs; }; + }; + config = let + cfg = config.serviceConfig; + forgejo_config="${cfg.customDir}/conf/app.ini"; + forgejo_work_path="${cfg.stateDir}"; + in { + binName = "my-forgejo"; + package = cfg.package; + args = [ + "--config" forgejo_config + "--work-path" forgejo_work_path + ]; + }; + }); + clean = inputs.wrappers.lib.wrapModule ({ config, lib, wlib, ... }: { + options = { + serviceConfig = lib.mkOption { type = lib.types.attrs; }; + }; + config = let + cfg = config.serviceConfig; + pkgs = config.pkgs; + in { + binName = "forgejo-clean"; + package = pkgs.coreutils; + exePath = lib.getExe' pkgs.coreutils "rm"; + extraPackages = [ pkgs.systemd ]; + preHook = '' + sudo systemctl stop forgejo.service + echo "Stopped Forgejo" + ''; + args = [ "-rf" cfg.stateDir ]; + postHook = ''echo "Removed ${cfg.stateDir}"''; + }; + }); + clean-postgres = inputs.wrappers.lib.wrapModule ({ config, lib, wlib, ... }: { + options = { + serviceConfig = lib.mkOption { type = lib.types.attrs; }; + }; + config = let + cfg = config.serviceConfig; + pkgs = config.pkgs; + in { + binName = "postgres-clean"; + package = pkgs.coreutils; + exePath = lib.getExe' pkgs.coreutils "rm"; + extraPackages = [ pkgs.systemd ]; + preHook = '' + sudo systemctl stop postgresql.service + echo "Stopped Postgres" + ''; + args = [ "-rf" cfg.dataDir ]; + postHook = ''echo "Removed ${cfg.dataDir}"''; + }; + }); + }; } \ No newline at end of file diff --git a/modules/hosts/soteria/default.nix b/modules/hosts/soteria/default.nix index 1f024b4..fc389e3 100644 --- a/modules/hosts/soteria/default.nix +++ b/modules/hosts/soteria/default.nix @@ -119,13 +119,4 @@ in }) ]; }; - - # flake.homeConfigurations.soteria = withSystem "x86_64-linux" (ctx@{ config, inputs', ...}: - # inputs.home-manager.lib.homeManagerConfiguration { - # pkgs = inputs'.nixpkgs.legacyPackages; - # modules = [ - # inputs.self.modules.homeManager."${username}" - # inputs.self.modules.homeManager.soteria - # ]; - # }); } \ No newline at end of file