diff options
Diffstat (limited to '3modules/tv/nginx.nix')
| -rw-r--r-- | 3modules/tv/nginx.nix | 83 | 
1 files changed, 83 insertions, 0 deletions
| diff --git a/3modules/tv/nginx.nix b/3modules/tv/nginx.nix new file mode 100644 index 000000000..d9d95be84 --- /dev/null +++ b/3modules/tv/nginx.nix @@ -0,0 +1,83 @@ +{ config, pkgs, lib, ... }: + +with builtins; +with lib; +let +  cfg = config.tv.nginx; + +  out = { +    options.tv.nginx = api; +    config = mkIf cfg.enable imp; +  }; + +  api = { +    enable = mkOption { +      type = types.bool; +      default = false; +      description = "Enable nginx."; +    }; + +    retiolum-locations = mkOption { +      type = with types; listOf (attrsOf str); +      default = []; +    }; +  }; + +  imp = { +    services.nginx = +      let +        name = config.tv.retiolum.name; +        qname = "${name}.retiolum"; +      in +      assert config.tv.retiolum.enable; +      { +        enable = true; +        httpConfig = '' +          include           ${pkgs.nginx}/conf/mime.types; +          default_type      application/octet-stream; +          sendfile          on; +          keepalive_timeout 65; +          gzip              on; +          server { +            listen 80 default_server; +            server_name _; +            location / { +              return 404; +            } +          } +          server { +            listen 80; +            server_name ${name} ${qname}; + +            ${indent (concatStrings (map to-location cfg.retiolum-locations))} + +            location / { +              return 404; +            } +          } +        ''; +      }; +  }; + +   +  indent = replaceChars ["\n"] ["\n  "]; + +  to-location = { name, value }: '' +    location ${name} { +      ${indent value} +    } +  ''; + +in +out + + +#let +#  cfg = config.tv.nginx; +#  arg' = arg // { inherit cfg; }; +#in +# +#{ +#  options.tv.nginx = import ./options.nix arg'; +#  config = lib.mkIf cfg.enable (import ./config.nix arg'); +#} | 
