diff options
Diffstat (limited to 'nixos/modules/sites')
-rw-r--r-- | nixos/modules/sites/go.nix | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/nixos/modules/sites/go.nix b/nixos/modules/sites/go.nix new file mode 100644 index 0000000..7682469 --- /dev/null +++ b/nixos/modules/sites/go.nix @@ -0,0 +1,52 @@ +{ config, lib, pkgs, ... }: +with lib; + +let + cfg = config.eth.sites.go; + + mkLocation = virtualHost: module: url: { + name = "/${module}"; + value = { + extraConfig = '' + if ($args = "go-get=1") { + add_header Content-Type text/html; + return 200 '<meta name="go-import" content="${virtualHost}/${module} git ${url}">'; + } + return 302 ${url}; + ''; + }; + }; + +in { + options.eth.sites.go = { + enable = mkEnableOption "Whether to enable the Go site."; + + https = mkOption { + type = types.bool; + default = true; + description = "Whether to enable HTTPS."; + }; + + virtualHost = mkOption { + type = types.str; + default = "_"; + description = "Virtual Host to install the site under in Nginx."; + example = "go.eth.moe"; + }; + + modules = mkOption { + type = types.attrsOf types.str; + description = "A set of modules and their underlying git repos."; + example = { catbus = "https://git.eth.moe/go-catbus"; }; + }; + }; + + config = mkIf cfg.enable { + services.nginx.virtualHosts.${cfg.virtualHost} = { + forceSSL = cfg.https; + enableACME = cfg.https; + + locations = listToAttrs (mapAttrsToList (mkLocation cfg.virtualHost) cfg.modules); + }; + }; +} |