nixos/fediwall: init
This commit is contained in:
		
							parent
							
								
									af56f66ea8
								
							
						
					
					
						commit
						ba7d1fec08
					
				@ -17,6 +17,8 @@
 | 
			
		||||
 | 
			
		||||
- [Pi-hole](https://pi-hole.net/), a DNS sinkhole for advertisements based on Dnsmasq. Available as [services.pihole-ftl](#opt-services.pihole-ftl.enable), and [services.pihole-web](#opt-services.pihole-web.enable) for the web GUI and API.
 | 
			
		||||
 | 
			
		||||
- [Fediwall](https://fediwall.social), a web application for live displaying toots from mastodon, inspired by mastowall. Available as [services.fediwall](#opt-services.fediwall.enable).
 | 
			
		||||
 | 
			
		||||
- [FileBrowser](https://filebrowser.org/), a web application for managing and sharing files. Available as [services.filebrowser](#opt-services.filebrowser.enable).
 | 
			
		||||
 | 
			
		||||
- Options under [networking.getaddrinfo](#opt-networking.getaddrinfo.enable) are now allowed to declaratively configure address selection and sorting behavior of `getaddrinfo` in dual-stack networks.
 | 
			
		||||
 | 
			
		||||
@ -1543,6 +1543,7 @@
 | 
			
		||||
  ./services/web-apps/eintopf.nix
 | 
			
		||||
  ./services/web-apps/engelsystem.nix
 | 
			
		||||
  ./services/web-apps/ethercalc.nix
 | 
			
		||||
  ./services/web-apps/fediwall.nix
 | 
			
		||||
  ./services/web-apps/fider.nix
 | 
			
		||||
  ./services/web-apps/filebrowser.nix
 | 
			
		||||
  ./services/web-apps/filesender.nix
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										128
									
								
								nixos/modules/services/web-apps/fediwall.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								nixos/modules/services/web-apps/fediwall.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,128 @@
 | 
			
		||||
{
 | 
			
		||||
  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";
 | 
			
		||||
            };
 | 
			
		||||
          };
 | 
			
		||||
        }
 | 
			
		||||
      ];
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user