summaryrefslogtreecommitdiffstats
path: root/modules/tv/nginx
diff options
context:
space:
mode:
Diffstat (limited to 'modules/tv/nginx')
-rw-r--r--modules/tv/nginx/config.nix49
-rw-r--r--modules/tv/nginx/default.nix11
-rw-r--r--modules/tv/nginx/options.nix21
3 files changed, 81 insertions, 0 deletions
diff --git a/modules/tv/nginx/config.nix b/modules/tv/nginx/config.nix
new file mode 100644
index 000000000..e5c3dd152
--- /dev/null
+++ b/modules/tv/nginx/config.nix
@@ -0,0 +1,49 @@
+{ cfg, config, lib, pkgs, ... }:
+
+let
+ inherit (lib) concatStrings replaceChars;
+
+ indent = replaceChars ["\n"] ["\n "];
+
+ to-location = { name, value }: ''
+ location ${name} {
+ ${indent value}
+ }
+ '';
+in
+
+{
+ services.nginx =
+ let
+ name = config.services.retiolum.name;
+ qname = "${name}.retiolum";
+ in
+ assert config.services.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;
+ }
+ }
+ '';
+ };
+}
diff --git a/modules/tv/nginx/default.nix b/modules/tv/nginx/default.nix
new file mode 100644
index 000000000..49133fbb3
--- /dev/null
+++ b/modules/tv/nginx/default.nix
@@ -0,0 +1,11 @@
+arg@{ config, pkgs, lib, ... }:
+
+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');
+}
diff --git a/modules/tv/nginx/options.nix b/modules/tv/nginx/options.nix
new file mode 100644
index 000000000..ddfb38049
--- /dev/null
+++ b/modules/tv/nginx/options.nix
@@ -0,0 +1,21 @@
+{ lib, ... }:
+
+let
+ inherit (lib) mkOption types;
+in
+
+{
+ enable = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Enable nginx.";
+ };
+
+ retiolum-locations = mkOption {
+ type = with types; listOf (attrsOf str);
+ default = [];
+ description = ''
+ TODO
+ '';
+ };
+}