updated haven.nix

This commit is contained in:
2026-03-25 11:36:55 -05:00
parent 2bc4791d97
commit d73ebcaa68
3 changed files with 112 additions and 127 deletions

View File

@@ -51,6 +51,7 @@ sovran_systemsOS.features.mempool = lib.mkForce true;
```nix ```nix
sovran_systemsOS.features.haven = lib.mkForce true; sovran_systemsOS.features.haven = lib.mkForce true;
sovran_systemsOS.nostr_npub = "pasteyournpubhere";
``` ```
5. The code for Element Calling is as follows: 5. The code for Element Calling is as follows:

View File

@@ -23,5 +23,11 @@
bitcoin-core = lib.mkEnableOption "Bitcoin Core"; bitcoin-core = lib.mkEnableOption "Bitcoin Core";
rdp = lib.mkEnableOption "Gnome Remote Desktop"; rdp = lib.mkEnableOption "Gnome Remote Desktop";
}; };
nostr_npub = lib.mkOption {
type = lib.types.str;
default = "";
description = "Nostr public key (npub1...) for Haven relay";
};
}; };
} }

View File

@@ -1,150 +1,128 @@
{config, pkgs, lib, ...}: { config, pkgs, lib, ... }:
let let
personalization = import ./personalization.nix;
personalization = import ./personalization.nix; npub = config.sovran_systemsOS.nostr_npub;
in in
lib.mkIf config.sovran_systemsOS.features.haven { lib.mkIf (config.sovran_systemsOS.features.haven && npub != "") {
services.haven = { services.haven = {
enable = true; enable = true;
settings = { settings = {
OWNER_NPUB=""; OWNER_NPUB = npub;
RELAY_URL="*name*"; RELAY_URL = personalization.haven_url;
RELAY_PORT=3355; RELAY_PORT = 3355;
RELAY_BIND_ADDRESS="0.0.0.0"; # Can be set to a specific IP4 or IP6 address ("" for all interfaces) RELAY_BIND_ADDRESS = "0.0.0.0";
DB_ENGINE="badger"; # badger, lmdb (lmdb works best with an nvme, otherwise you might have stability issues) DB_ENGINE = "badger";
LMDB_MAPSIZE=3000000000; # 0 for default (currently ~273GB), or set to a different size in bytes, e.g. 10737418240 for 10GB LMDB_MAPSIZE = 3000000000;
BLOSSOM_PATH="blossom/"; BLOSSOM_PATH = "blossom/";
## Private Relay Settings PRIVATE_RELAY_NAME = "${personalization.haven_url} private relay";
PRIVATE_RELAY_NAME="*name* private relay"; PRIVATE_RELAY_NPUB = npub;
PRIVATE_RELAY_NPUB=""; PRIVATE_RELAY_DESCRIPTION = "The Relay From Sovran Systems";
PRIVATE_RELAY_DESCRIPTION="The Relay From Sovran Systems";
#PRIVATE_RELAY_ICON="https://i.nostr.build/6G6wW.gif"
## Private Relay Rate Limiters CHAT_RELAY_NAME = "${personalization.haven_url} chat relay";
PRIVATE_RELAY_EVENT_IP_LIMITER_TOKENS_PER_INTERVAL=50; CHAT_RELAY_NPUB = npub;
PRIVATE_RELAY_EVENT_IP_LIMITER_INTERVAL=1; CHAT_RELAY_DESCRIPTION = "a relay for private chats";
PRIVATE_RELAY_EVENT_IP_LIMITER_MAX_TOKENS=100;
PRIVATE_RELAY_ALLOW_EMPTY_FILTERS=true;
PRIVATE_RELAY_ALLOW_COMPLEX_FILTERS=true;
PRIVATE_RELAY_CONNECTION_RATE_LIMITER_TOKENS_PER_INTERVAL=3;
PRIVATE_RELAY_CONNECTION_RATE_LIMITER_INTERVAL=5;
PRIVATE_RELAY_CONNECTION_RATE_LIMITER_MAX_TOKENS=9;
## Chat Relay Settings OUTBOX_RELAY_NAME = "${personalization.haven_url} outbox relay";
CHAT_RELAY_NAME="*name* chat relay"; OUTBOX_RELAY_NPUB = npub;
CHAT_RELAY_NPUB=""; OUTBOX_RELAY_DESCRIPTION = "a relay and Blossom server for public messages and media";
CHAT_RELAY_DESCRIPTION="a relay for private chats";
#CHAT_RELAY_ICON="https://i.nostr.build/6G6wW.gif"
CHAT_RELAY_WOT_DEPTH=3;
CHAT_RELAY_WOT_REFRESH_INTERVAL_HOURS=24;
CHAT_RELAY_MINIMUM_FOLLOWERS=3;
## Chat Relay Rate Limiters INBOX_RELAY_NAME = "${personalization.haven_url} inbox relay";
CHAT_RELAY_EVENT_IP_LIMITER_TOKENS_PER_INTERVAL=50; INBOX_RELAY_NPUB = npub;
CHAT_RELAY_EVENT_IP_LIMITER_INTERVAL=1; INBOX_RELAY_DESCRIPTION = "send your interactions with my notes here";
CHAT_RELAY_EVENT_IP_LIMITER_MAX_TOKENS=100;
CHAT_RELAY_ALLOW_EMPTY_FILTERS=false;
CHAT_RELAY_ALLOW_COMPLEX_FILTERS=false;
CHAT_RELAY_CONNECTION_RATE_LIMITER_TOKENS_PER_INTERVAL=3;
CHAT_RELAY_CONNECTION_RATE_LIMITER_INTERVAL=3;
CHAT_RELAY_CONNECTION_RATE_LIMITER_MAX_TOKENS=9;
## Outbox Relay Settings INBOX_PULL_INTERVAL_SECONDS = 600;
OUTBOX_RELAY_NAME="*name* outbox relay";
OUTBOX_RELAY_NPUB="";
OUTBOX_RELAY_DESCRIPTION="a relay and Blossom server for public messages and media";
#OUTBOX_RELAY_ICON="https://i.nostr.build/6G6wW.gif"
## Outbox Relay Rate Limiters # ... all your rate limiter and WOT settings unchanged ...
OUTBOX_RELAY_EVENT_IP_LIMITER_TOKENS_PER_INTERVAL=100; PRIVATE_RELAY_EVENT_IP_LIMITER_TOKENS_PER_INTERVAL = 50;
OUTBOX_RELAY_EVENT_IP_LIMITER_INTERVAL=600; PRIVATE_RELAY_EVENT_IP_LIMITER_INTERVAL = 1;
OUTBOX_RELAY_EVENT_IP_LIMITER_MAX_TOKENS=1000; PRIVATE_RELAY_EVENT_IP_LIMITER_MAX_TOKENS = 100;
OUTBOX_RELAY_ALLOW_EMPTY_FILTERS=true; PRIVATE_RELAY_ALLOW_EMPTY_FILTERS = true;
OUTBOX_RELAY_ALLOW_COMPLEX_FILTERS=true; PRIVATE_RELAY_ALLOW_COMPLEX_FILTERS = true;
OUTBOX_RELAY_CONNECTION_RATE_LIMITER_TOKENS_PER_INTERVAL=30; PRIVATE_RELAY_CONNECTION_RATE_LIMITER_TOKENS_PER_INTERVAL = 3;
OUTBOX_RELAY_CONNECTION_RATE_LIMITER_INTERVAL=10; PRIVATE_RELAY_CONNECTION_RATE_LIMITER_INTERVAL = 5;
OUTBOX_RELAY_CONNECTION_RATE_LIMITER_MAX_TOKENS=90; PRIVATE_RELAY_CONNECTION_RATE_LIMITER_MAX_TOKENS = 9;
## Inbox Relay Settings CHAT_RELAY_WOT_DEPTH = 3;
INBOX_RELAY_NAME="*name* inbox relay"; CHAT_RELAY_WOT_REFRESH_INTERVAL_HOURS = 24;
INBOX_RELAY_NPUB=""; CHAT_RELAY_MINIMUM_FOLLOWERS = 3;
INBOX_RELAY_DESCRIPTION="send your interactions with my notes here"; CHAT_RELAY_EVENT_IP_LIMITER_TOKENS_PER_INTERVAL = 50;
#INBOX_RELAY_ICON="https://i.nostr.build/6G6wW.gif" CHAT_RELAY_EVENT_IP_LIMITER_INTERVAL = 1;
INBOX_PULL_INTERVAL_SECONDS=600; CHAT_RELAY_EVENT_IP_LIMITER_MAX_TOKENS = 100;
CHAT_RELAY_ALLOW_EMPTY_FILTERS = false;
CHAT_RELAY_ALLOW_COMPLEX_FILTERS = false;
CHAT_RELAY_CONNECTION_RATE_LIMITER_TOKENS_PER_INTERVAL = 3;
CHAT_RELAY_CONNECTION_RATE_LIMITER_INTERVAL = 3;
CHAT_RELAY_CONNECTION_RATE_LIMITER_MAX_TOKENS = 9;
## Inbox Relay Rate Limiters OUTBOX_RELAY_EVENT_IP_LIMITER_TOKENS_PER_INTERVAL = 100;
INBOX_RELAY_EVENT_IP_LIMITER_TOKENS_PER_INTERVAL=10; OUTBOX_RELAY_EVENT_IP_LIMITER_INTERVAL = 600;
INBOX_RELAY_EVENT_IP_LIMITER_INTERVAL=1; OUTBOX_RELAY_EVENT_IP_LIMITER_MAX_TOKENS = 1000;
INBOX_RELAY_EVENT_IP_LIMITER_MAX_TOKENS=20; OUTBOX_RELAY_ALLOW_EMPTY_FILTERS = true;
INBOX_RELAY_ALLOW_EMPTY_FILTERS=false; OUTBOX_RELAY_ALLOW_COMPLEX_FILTERS = true;
INBOX_RELAY_ALLOW_COMPLEX_FILTERS=false; OUTBOX_RELAY_CONNECTION_RATE_LIMITER_TOKENS_PER_INTERVAL = 30;
INBOX_RELAY_CONNECTION_RATE_LIMITER_TOKENS_PER_INTERVAL=3; OUTBOX_RELAY_CONNECTION_RATE_LIMITER_INTERVAL = 10;
INBOX_RELAY_CONNECTION_RATE_LIMITER_INTERVAL=1; OUTBOX_RELAY_CONNECTION_RATE_LIMITER_MAX_TOKENS = 90;
INBOX_RELAY_CONNECTION_RATE_LIMITER_MAX_TOKENS=9;
## WOT Settings INBOX_RELAY_EVENT_IP_LIMITER_TOKENS_PER_INTERVAL = 10;
WOT_FETCH_TIMEOUT_SECONDS=60; INBOX_RELAY_EVENT_IP_LIMITER_INTERVAL = 1;
INBOX_RELAY_EVENT_IP_LIMITER_MAX_TOKENS = 20;
WHITELISTED_NPUBS_FILE="/var/lib/haven/whitelisted_npubs.json"; INBOX_RELAY_ALLOW_EMPTY_FILTERS = false;
INBOX_RELAY_ALLOW_COMPLEX_FILTERS = false;
BLACKLISTED_NPUBS_FILE=""; INBOX_RELAY_CONNECTION_RATE_LIMITER_TOKENS_PER_INTERVAL = 3;
INBOX_RELAY_CONNECTION_RATE_LIMITER_INTERVAL = 1;
INBOX_RELAY_CONNECTION_RATE_LIMITER_MAX_TOKENS = 9;
WOT_FETCH_TIMEOUT_SECONDS = 60;
WHITELISTED_NPUBS_FILE = "/var/lib/haven/whitelisted_npubs.json";
BLACKLISTED_NPUBS_FILE = "";
HAVEN_LOG_LEVEL = "INFO";
};
## LOGGING blastrRelays = [
HAVEN_LOG_LEVEL="INFO"; # DEBUG, INFO, WARNING or ERROR "nos.lol"
}; "relay.nostr.band"
"relay.snort.social"
blastrRelays = [ "nostr.mom"
"nos.lol" "relay.primal.net"
"relay.nostr.band" "no.str.cr"
"relay.snort.social" "nostr21.com"
"nostr.mom" "nostrue.com"
"relay.primal.net" "wot.nostr.party"
"no.str.cr" "wot.sovbit.host"
"nostr21.com" "wot.girino.org"
"nostrue.com" "relay.lexingtonbitcoin.org"
"wot.nostr.party" "zap.watch"
"wot.sovbit.host" "satsage.xyz"
"wot.girino.org" "wons.calva.dev"
"relay.lexingtonbitcoin.org" ];
"zap.watch" };
"satsage.xyz"
"wons.calva.dev"
];
};
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
"d /var/lib/haven 0750 haven haven -" "d /var/lib/haven 0750 haven haven -"
"f /var/lib/haven/whitelisted_npubs.json 0770 haven haven -" "f /var/lib/haven/whitelisted_npubs.json 0770 haven haven -"
]; ];
services.caddy = { services.caddy.virtualHosts = {
virtualHosts = { "${personalization.haven_url}" = {
"${personalization.haven_url}" = { extraConfig = ''
extraConfig = '' reverse_proxy localhost:3355 {
reverse_proxy localhost:3355 { header_up Host {host}
header_up Host {host} header_up X-Real-IP {remote_host}
header_up X-Real-IP {remote_host} header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-For {remote_host} header_up X-Forwarded-Proto {scheme}
header_up X-Forwarded-Proto {scheme} transport http {
transport http { versions 1.1
versions 1.1 }
} }
} request_body {
request_body { max_size 100MB
max_size 100MB }
} '';
''; };
}; };
}; }
};
}