{ lib, pkgs, config, ... }: with lib; { options = { filebrowser = { enable = mkEnableOption "enables filebrowser"; port = lib.mkOption { type = lib.types.int; default = 8887; description = "The port filebrowser listens on."; }; host = mkOption { type = types.str; defaultText = literalExpression "127.0.0.1"; description = "The hostname that filebrowser binds to"; }; domain = mkOption { type = types.str; defaultText = literalExpression "files.wastring.com"; description = "The hostname that filebrowser binds to"; }; }; }; config = mkMerge [ (mkIf config.filebrowser.enable { services.filebrowser = { enable = true; settings = { address = config.filebrowser.host; port = config.filebrowser.port; }; }; services.nginx.virtualHosts.${config.filebrowser.domain} = { forceSSL = true; enableACME = true; locations."/" = { proxyPass = "http://${toString config.filebrowser.host}:${toString config.filebrowser.port}"; proxyWebsockets = true; }; }; }) ]; }