129 lines
3.7 KiB
Nix
129 lines
3.7 KiB
Nix
{
|
|
lib,
|
|
pkgs,
|
|
config,
|
|
...
|
|
}:
|
|
|
|
let
|
|
cfg = config.services.fediwall;
|
|
pkg = cfg.package.override { conf = cfg.settings; };
|
|
format = pkgs.formats.json { };
|
|
in
|
|
{
|
|
options.services.fediwall = {
|
|
enable = lib.mkEnableOption "fediwall, a social media wall for the fediverse";
|
|
package = lib.mkPackageOption pkgs "fediwall" { };
|
|
hostName = lib.mkOption {
|
|
type = lib.types.str;
|
|
default = config.networking.fqdnOrHostName;
|
|
defaultText = lib.literalExpression "config.networking.fqdnOrHostName";
|
|
example = "fediwall.example.org";
|
|
description = "The hostname to serve fediwall on.";
|
|
};
|
|
settings = lib.mkOption {
|
|
default = { };
|
|
description = ''
|
|
Fediwall configuration. See
|
|
https://github.com/defnull/fediwall/blob/main/public/wall-config.json.example
|
|
for information on supported values.
|
|
'';
|
|
type = lib.types.submodule {
|
|
freeformType = format.type;
|
|
options = {
|
|
servers = lib.mkOption {
|
|
type = with lib.types; listOf str;
|
|
default = [ "mastodon.social" ];
|
|
description = "Servers to load posts from";
|
|
};
|
|
tags = lib.mkOption {
|
|
type = with lib.types; listOf str;
|
|
default = [ ];
|
|
example = lib.literalExpression "[ \"cats\" \"dogs\"]";
|
|
description = "Tags to follow";
|
|
};
|
|
loadPublic = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = false;
|
|
description = "Load public posts";
|
|
};
|
|
loadFederated = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = false;
|
|
description = "Load federated posts";
|
|
};
|
|
loadTrends = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = false;
|
|
description = "Load trending posts";
|
|
};
|
|
hideSensitive = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = true;
|
|
description = "Hide sensitive (potentially NSFW) posts";
|
|
};
|
|
hideBots = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = true;
|
|
description = "Hide posts from bot accounts";
|
|
};
|
|
hideReplies = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = true;
|
|
description = "Hide replies";
|
|
};
|
|
hideBoosts = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = false;
|
|
description = "Hide boosts";
|
|
};
|
|
showMedia = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = true;
|
|
description = "Show media in posts";
|
|
};
|
|
playVideos = lib.mkOption {
|
|
type = lib.types.bool;
|
|
default = true;
|
|
description = "Autoplay videos in posts";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
nginx = lib.mkOption {
|
|
type = lib.types.submodule (
|
|
lib.recursiveUpdate (import ../web-servers/nginx/vhost-options.nix { inherit config lib; }) { }
|
|
);
|
|
default = { };
|
|
example = lib.literalExpression ''
|
|
{
|
|
serverAliases = [
|
|
"fedi.''${config.networking.domain}"
|
|
];
|
|
# Enable TLS and use let's encrypt for ACME
|
|
forceSSL = true;
|
|
enableACME = true;
|
|
}
|
|
'';
|
|
description = "Allows customizing the nginx virtualHost settings";
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
services.nginx = {
|
|
enable = lib.mkDefault true;
|
|
virtualHosts."${cfg.hostName}" = lib.mkMerge [
|
|
cfg.nginx
|
|
{
|
|
root = lib.mkForce "${pkg}";
|
|
locations = {
|
|
"/" = {
|
|
index = "index.html";
|
|
};
|
|
};
|
|
}
|
|
];
|
|
};
|
|
};
|
|
}
|