Files

113 lines
3.1 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.bentopdf;
in
{
options.services.bentopdf = {
enable = lib.mkEnableOption "bentopdf Privacy First PDF Toolkit";
package = lib.mkPackageOption pkgs "bentopdf" {
extraDescription = ''
To use the "normal mode" variant of bentopdf, which includes all socials, marketing and explanatory texts, set this option to `pkgs.bentopdf.override { simpleMode = false; }`.
'';
};
domain = lib.mkOption {
description = "Domain to use for the virtual host.";
type = lib.types.str;
};
nginx = {
enable = lib.mkEnableOption "a virtualhost to serve bentopdf through nginx";
virtualHost = lib.mkOption {
type = lib.types.submodule (import ../web-servers/nginx/vhost-options.nix { inherit config lib; });
default = { };
example = lib.literalExpression ''
{
serverAliases = [ "bentopdf.''${config.networking.domain}" ];
}
'';
description = "Extra configuration for the nginx virtual host of bentopdf.";
};
};
caddy = {
enable = lib.mkEnableOption "a virtualhost to serve bentopdf through caddy";
virtualHost = lib.mkOption {
type = lib.types.submodule (
import ../web-servers/caddy/vhost-options.nix { cfg = config.services.caddy; }
);
default = { };
example = lib.literalExpression ''
{
serverAliases = [ "bentopdf.''${config.networking.domain}" ];
}
'';
description = "Extra configuration for the caddy virtual host of bentopdf.";
};
};
};
config = lib.mkIf cfg.enable {
services.nginx = lib.mkIf cfg.nginx.enable {
enable = lib.mkDefault true;
virtualHosts."${cfg.domain}" = lib.mkMerge [
(lib.mapAttrsRecursive (_: lib.mkDefault) cfg.nginx.virtualHost)
{
root = lib.mkForce "${cfg.package}";
locations."/" = {
index = "index.html";
extraConfig = ''
try_files $uri $uri/ /index.html;
'';
};
locations."~* \\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$".extraConfig = ''
expires 1y;
add_header Cache-Control "public, immutable";
'';
}
];
};
services.caddy = lib.mkIf cfg.caddy.enable {
enable = lib.mkDefault true;
virtualHosts."${cfg.domain}" = lib.mkMerge [
(lib.mapAttrsRecursive (_: lib.mkDefault) cfg.caddy.virtualHost)
{
hostName = lib.mkForce cfg.domain;
extraConfig = ''
root * ${cfg.package}
try_files {path} /index.html
file_server
@static {
path_regexp static \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$
}
handle @static {
header {
Cache-Control "public, immutable"
}
header Cache-Control max-age=31536000
}
'';
}
];
};
};
meta.maintainers = with lib.maintainers; [
charludo
stunkymonkey
];
}