Konfiguracja
Lokalizacja konfiguracji
repartee przechowuje swoją konfigurację w ~/.repartee/config.toml. Plik ten jest tworzony automatycznie przy pierwszym uruchomieniu z rozsądnymi wartościami domyślnymi.
Pełna struktura katalogu:
~/.repartee/
config.toml # main configuration
.env # credentials (passwords, SASL)
themes/ # custom themes
scripts/ # user scripts (Lua)
logs/messages.db # chat logs (SQLite)
dicts/ # Hunspell dictionaries (.dic/.aff)
sessions/ # Unix sockets for detached sessions
certs/ # TLS certificates for web frontend
web_sessions.bin # persistent web session tokens (HMAC-hashed, perm 0600)
web_thumbnails/ # cached image-preview thumbnails (web frontend)
Pełny przykład z adnotacjami
[general]
nick = "mynick"
username = "mynick"
realname = "repartee user"
theme = "default"
timestamp_format = "%H:%M:%S"
flood_protection = true
ctcp_version = "repartee"
# default_bind_ip = "192.0.2.10" # host-wide outgoing IP for servers without per-server bind_ip
[display]
nick_column_width = 8
nick_max_length = 8
nick_alignment = "right" # "left", "right", or "center"
nick_truncation = true
nick_colors = true # deterministic per-nick coloring (WeeChat-style)
nick_colors_in_nicklist = true # also color nicks in the sidebar nick list
nick_color_saturation = 0.65 # HSL saturation (0.0–1.0), truecolor only
nick_color_lightness = 0.65 # HSL lightness (0.0–1.0), tune per theme
show_timestamps = true
scrollback_lines = 2000
backlog_lines = 20 # history lines loaded when buffer opens (0 = off)
mentions_buffer = true # show Mentions buffer at top of sidebar
[sidepanel.left]
width = 20
visible = true
[sidepanel.right]
width = 18
visible = true
[statusbar]
enabled = true
border = true # pozioma linia oddzielająca nad paskiem statusu i polem wprowadzania
items = ["active_windows", "nick_info", "channel_info", "typing", "lag", "time"]
[servers.libera]
label = "Libera"
address = "irc.libera.chat"
port = 6697
tls = true
tls_verify = true
autoconnect = true
channels = ["#repartee", "#secret mykey"]
autosendcmd = "MSG NickServ identify pass; WAIT 2000; MODE $N +i"
# nick = "othernick" # nadpisanie nicka per serwer
# sasl_user = "mynick"
# sasl_pass = "hunter2"
# sasl_mechanism = "SCRAM-SHA-256" # automatyczny wybór gdy pominięte; lub PLAIN, EXTERNAL, SCRAM-SHA-1/256/512, ECDSA-NIST256P-CHALLENGE, OAUTHBEARER
# client_cert_path = "libera.pem" # łańcuch certyfikatów PEM + klucz prywatny dla TLS client auth / SASL EXTERNAL
# bouncer_network_id = "42" # bezpośrednie powiązanie z ID sieci bouncera Soju/Lurker
# bouncer_control = false # true = połączenie sterujące Soju (wykrywa i otwiera sieci bouncera)
# bind_ip = "192.168.1.100" # powiązanie z konkretnym lokalnym adresem IP (vhost)
# auto_reconnect = true
# reconnect_delay = 30
# reconnect_max_retries = 10
[image_preview]
enabled = true
inline = false # true = renderuj miniaturki bezpośrednich linków do obrazków pod wiadomościami w TUI
protocol = "auto" # "auto", "kitty", "iterm2", "sixel", "halfblocks"
max_width = 0 # 0 = auto
max_height = 0 # 0 = auto
cache_max_mb = 100
cache_max_days = 7
fetch_timeout = 30 # seconds
max_file_size = 10485760 # bytes (10 MB)
kitty_format = "rgba"
[logging]
enabled = true
encrypt = false
retention_days = 0 # 0 = keep forever
event_retention_hours = 72 # auto-prune join/part/quit/nick/kick/mode (0 = keep forever)
exclude_types = [] # e.g. ["join", "part", "quit"]
[aliases]
ns = "/msg NickServ $*"
cs = "/msg ChanServ $*"
wc = "/close"
j = "/join $0; /msg $0 hello everyone"
[keyboard]
key_timeout = 0 # ms przed zresetowaniem niekompletnej sekwencji klawiszy (0 = czekaj bez limitu)
[keyboard.bindings]
# meta-a = { action = "active_window" }
# meta-l = { action = "bare_display" }
# meta-p = { action = "seek_previous_highlight" }
# meta-n = { action = "seek_next_highlight" }
[scripts]
autoload = ["slap"]
# debug = true
[scripts.values.keepnick]
# Libera = "mynick" # trwałe wartości skryptów zapisywane przez api.config.set()
[dcc]
timeout = 300 # seconds before pending requests expire
own_ip = "" # override IP in DCC offers (empty = auto-detect)
port_range = "0" # "0" = OS-assigned, "1025 65535" = range
autoaccept_lowports = false # allow auto-accept from ports < 1024
# autochat_masks = ["*!*@trusted.host"] # hostmask patterns for auto-accept
max_connections = 10
[spellcheck]
enabled = true
languages = ["en_US"] # Hunspell language codes
dictionary_dir = "" # default: ~/.repartee/dicts
[shrink]
enabled = false # skracarka URL (opt-in, wymaga też SHRINK_API_KEY w .env)
api_url = "https://shr.al"
outgoing_enabled = true # skracaj długie URL-e w wiadomościach, które wysyłasz
incoming_enabled = true # skracaj długie URL-e w wiadomościach, które odbierasz (z podpowiedzią `[host]`)
min_url_length = 50 # skracaj tylko URL-e o długości >= tej wartości (>= 25)
outgoing_timeout_ms = 2000 # maks. czas oczekiwania na odpowiedź; po nim wysyłka oryginalnym URL-em
incoming_timeout_ms = 2000
cache_max_entries = 500 # LRU w pamięci dla ostatnio skróconych URL-i
[typing]
show = true # odbieraj i wyświetlaj wskaźniki pisania innych osób
send_channels = true # wysyłaj własne +typing podczas pisania na kanale
send_queries = true # wysyłaj własne +typing podczas pisania w prywatnym query
[translate]
enabled = false
backend = "none"
my_lang = "pl"
show_original_in = true
show_original_out = true
timeout_ms = 15000
max_in_flight = 4
max_queue = 200
[web]
enabled = false # enable embedded web frontend
bind_address = "127.0.0.1" # listen address (0.0.0.0 for LAN)
port = 8443 # HTTPS port
tls_cert = "" # custom cert (empty = auto self-signed)
tls_key = "" # custom key
timestamp_format = "%H:%M" # web UI timestamp format
line_height = 1.35 # CSS line-height for chat messages
theme = "nightfall" # web theme (nightfall, catppuccin-mocha, etc.)
session_days = 90 # cookie lifetime (sessions persist across browser restarts)
username = "repartee" # pre-filled in the login form (decorative — only the password is checked)
image_previews = false # opt-in inline image previews under chat messages
image_previews_max_per_msg = 4 # cap of preview thumbnails rendered per message
thumbnail_cache_mb = 200 # max size of ~/.repartee/web_thumbnails/ (LRU by mtime)
# cloudflare_tunnel_name = "" # future: Cloudflare tunnel name
[[ignores]]
mask = "*!*@spammer.host"
levels = ["ALL"]
Opis sekcji
[general]
Globalna tożsamość i zachowanie. Pola nick, username i realname są używane jako domyślne dla wszystkich serwerów, chyba że zostaną nadpisane per serwer. Ustaw theme na nazwę pliku motywu w ~/.repartee/themes/ (bez rozszerzenia .theme).
Adres źródłowy (hosty z wieloma IP): default_bind_ip ustawia wychodzący adres IP dla każdego serwera, który nie definiuje własnego bind_ip. Pełna kolejność wyboru źródłowego adresu IRC:
servers.<id>.bind_ip-- jawny wybór per serwer (również/server add ... -bind=<ip>//connect -bind=<ip>)repartee -h <ip>/--bind=<ip>-- nadpisanie z linii poleceń (w stylu irssi, tylko na czas działania -- nigdy nie zapisywane doconfig.toml)general.default_bind_ip-- domyślny adres dla całego hosta- Domyślny adres systemowy (tablica routingu jądra)
Ustaw interaktywnie poleceniem /set general.default_bind_ip <ip>; pusty ciąg czyści wartość.
[display]
Kontroluje sposób wyświetlania wiadomości. nick_column_width ustawia kolumnę o stałej szerokości dla nicków w widoku czatu. scrollback_lines to liczba wiadomości przechowywanych w pamięci na bufor. backlog_lines określa, ile historycznych wiadomości załadować z bazy logów przy pierwszym otwarciu kanału, query lub bufora DCC (0 aby wyłączyć).
Bufor wzmianek: mentions_buffer = true (domyślnie) wyświetla trwały bufor Wzmianek przypięty na górze paska bocznego. Agreguje wszystkie wzmianki z podświetleniami ze wszystkich sieci w przewijalnym widoku czatu. Backlog jest ograniczony do 7 dni lub 1000 wiadomości. Użyj /clear w buforze wzmianek, aby wyczyścić wszystkie zapisane wzmianki. Ustaw na false, aby ukryć bufor (wzmianki są nadal przechowywane w bazie danych i pojawią się ponownie po włączeniu).
Kolorowanie nicków: nick_colors = true włącza deterministyczne kolorowanie per nick (w stylu WeeChat). Każdy nick otrzymuje stały kolor oparty na hashu jego nazwy. Terminale truecolor używają koła barw HSL (~360 różnych kolorów); terminale 256-kolorowe korzystają z wyselekcjonowanej palety 68 kolorów; terminale 16-kolorowe używają 12 bezpiecznych kolorów ANSI. Możliwości terminala są wykrywane automatycznie (i ponownie wykrywane przy repartee a -- ponownym dołączeniu). Ustaw nick_colors_in_nicklist = false, aby lista nicków na pasku bocznym używała kolorów motywu, podczas gdy wiadomości na czacie pozostaną kolorowane. Dostosuj nick_color_saturation i nick_color_lightness (0.0-1.0) per motyw -- ciemne motywy dobrze działają z ~0.65, jasne motywy z ~0.40.
[sidepanel]
Lewy panel pokazuje listę buforów, prawy panel pokazuje listę nicków. Ustaw visible = false, aby ukryć panel. Szerokości podane są w kolumnach terminala.
[statusbar]
Konfiguruje elementy wyświetlane na pasku statusu. Dostępne elementy: active_windows, nick_info, channel_info, typing, lag, time. Element typing pokazuje, kto właśnie pisze wiadomość w aktywnym buforze -- zobacz sekcję [typing] poniżej.
border = true (domyślnie) rysuje poziomą linię oddzielającą nad paskiem statusu i polem wprowadzania. Ustaw /set statusbar.border false, aby ukryć tę linię zarówno w TUI, jak i w interfejsie webowym.
typing znajduje się na domyślnej liście elementów i jest jednorazowo dopisywany do konfiguracji zapisanych przez starsze wersje (wstawiany po channel_info, bez zmiany kolejności pozostałych elementów). Jeśli usuniesz go poleceniem /items remove typing, pozostanie usunięty.
[servers.*]
Każdy serwer otrzymuje unikalny identyfikator (klucz po servers.). Tablica channels zawiera listę kanałów do automatycznego dołączenia po połączeniu. Kanały z kluczami używają formatu "#channel key".
Pozostaw sasl_mechanism bez wartości, aby automatycznie wybrać najsilniejszy dostępny mechanizm: EXTERNAL, ECDSA-NIST256P-CHALLENGE, SCRAM-SHA-512, SCRAM-SHA-256, SCRAM-SHA-1, a na końcu PLAIN. Jawne ustawienie blokuje cichy downgrade.
SASL OAUTHBEARER: Dla bouncerów obsługujących OAuth (np. Soju skonfigurowanego z walidatorem OAuth2/OIDC bearer) ustaw jawnie sasl_mechanism = "OAUTHBEARER" i zapisz token bearer w <SERVER>_SASL_PASS w ~/.repartee/.env. OAUTHBEARER nigdy nie jest wybierany automatycznie przy pominiętym sasl_mechanism, ponieważ zwykłe hasło w .env nie jest poprawnym tokenem OAuth. Podczas korzystania z tokenów bearer wymagaj zweryfikowanego TLS (tls = true oraz tls_verify = true).
Certyfikat klienta TLS (EXTERNAL): Ustaw client_cert_path na pojedynczy plik PEM zawierający zarówno łańcuch certyfikatów klienta, jak i niezaszyfrowany klucz prywatny (PKCS#8, PKCS#1 RSA lub SEC1 EC). Ścieżki względne są rozwiązywane wewnątrz ~/.repartee/certs/. Dla kont Soju możesz także wygenerować i przypiąć dedykowany certyfikat klienta bezpośrednio z poziomu Repartee poleceniem /bcert create <name>.
Bindowanie sieci bouncera (Soju i Lurker): Ustaw bouncer_network_id (lub użyj /server add ... -bouncer-network=<id>), aby wysłać BOUNCER BIND <id> podczas negocjacji capability. Soju wymaga uwierzytelnienia SASL przed zbindowaniem sieci; Lurker akceptuje również sesje uwierzytelnione przez PASS. Po zbindowaniu lokalny autojoin z tablicy channels jest wyciszany, aby bouncer odtworzył własną listę dołączonych kanałów.
Połączenie sterujące bouncera (Soju): Ustaw bouncer_control = true (lub użyj /server add ... -bouncer-control), aby traktować wpis serwera jako połączenie sterujące Soju. Repartee negocjuje soju.im/bouncer-networks, wykrywa dostępne sieci i automatycznie otwiera oraz utrzymuje połączenia potomne dla każdej wykrytej sieci z ustawionym host. Sieciami możesz też zarządzać ręcznie przez /bouncer (list, refresh, connect, add, change, delete).
Istniejące konfiguracje bouncerów USER/PASS: Tradycyjne konfiguracje bouncerów wybierające sieć przez username (np. user/network@client) lub PASS (user/network:password) działają nadal bez włączania bouncer_control czy bouncer_network_id. Gdy serwer rozgłasza możliwości bouncera (soju.im/bouncer-networks lub BOUNCER), Repartee automatycznie odpytuje BOUNCER LISTNETWORKS podczas rejestracji, aby potwierdzić tożsamość zbindowanej sieci, wycisza lokalny autojoin channels i korzysta z historii przechowywanej po stronie serwera.
Historia i rozmowy bouncera: Na połączeniach bouncerowych rozgłaszających draft/chathistory Repartee wykrywa aktywne kanały i rozmowy prywatne przez CHATHISTORY TARGETS oraz pobiera ostatnią historię (display.backlog_lines) z bouncera. Wiadomości na połączeniach bouncerowych pozostają po stronie serwera i nie są duplikowane w lokalnej bazie SQLite (rozmowy DCC nadal korzystają z lokalnych logów). Otwarcie pustego bufora query automatycznie pobiera jego ostatni backlog z bouncera.
Izolacja tożsamości bouncera: Stan powiązany z bouncerem (cache historii, kontekst szyfrowania E2E, cache uchwytów peerów) jest kluczowany stabilnym zakresem łączącym ID serwera, endpoint, selektory logowania (username, sasl_user, sasl_mechanism) oraz ID sieci bouncera, dzięki czemu przełączanie kont lub sieci bouncera nigdy nie miesza stanów.
Ustaw bind_ip, aby powiązać z konkretnym lokalnym adresem IP podczas łączenia. Przydatne dla hostów z wieloma adresami IP (vhosty/bouncery). Obsługuje zarówno IPv4, jak i IPv6 -- rozwiązywanie DNS automatycznie filtruje dopasowanie do rodziny adresów. Można również ustawić per połączenie za pomocą /connect -bind=<ip> lub /server add -bind=<ip>.
[image_preview]
Steruje podglądem obrazków w terminalu (enabled = true domyślnie). Naciśnij Enter na wiadomości z adresem URL lub użyj skrótu podglądu, aby otworzyć okno z podglądem, albo ustaw inline = true (/set image_preview.inline true), aby renderować miniaturki bezpośrednich linków do obrazków (slot 48×8 komórek) bezpośrednio pod wiadomościami czatu w TUI.
Obsługiwane protokoły: "auto" (automatycznie wykrywa Kitty, iTerm2, Sixel lub przełącza na znaki halfblocks Unicode), "kitty", "iterm2", "sixel" oraz "halfblocks". Podgląd inline w terminalu pobiera do 4 obrazków równolegle przez potok HTTP chroniony przed SSRF, z pamięcią podręczną LRU na 32 zdekodowane obrazki (limit 8192×8192 px / 64 MiB zdekodowanej ramki).
[logging]
Logowanie czatu do SQLite. Gdy encrypt = true, wiadomości są szyfrowane za pomocą AES-256-GCM. retention_days = 0 przechowuje logi na zawsze. event_retention_hours kontroluje, jak długo wiadomości zdarzeń (join/part/quit/nick/kick/mode) są przechowywane przed automatycznym czyszczeniem -- domyślnie 72 godziny. Ustaw na 0, aby przechowywać wiadomości zdarzeń na zawsze. Czyszczenie zdarzeń odbywa się co godzinę w tle i jest niezależne od retention_days.
[aliases]
Własne skróty poleceń. Klucz to nazwa aliasu, wartość to szablon polecenia.
Szablony obsługują argumenty pozycyjne ($0-$9), argumenty zakresowe ($1-), wszystkie argumenty ($*), zmienne kontekstowe ($C kanał, $N nick, $S serwer, $T bufor) oraz łączenie poleceń za pomocą ;. Jeśli w szablonie nie pojawia się $, automatycznie dołączane jest $*. Rozwijanie odbywa się w jednym przebiegu, więc znaki $ i ; wewnątrz argumentów podanych przez użytkownika są traktowane dosłownie i nie dzielą komendy.
[aliases]
ns = "/msg NickServ $*"
cs = "/msg ChanServ $*"
wc = "/close"
j = "/join $0; /msg $0 hello everyone"
w = "/who $C"
Zarządzaj aliasami w czasie działania za pomocą /alias i /unalias.
[keyboard]
Własne skróty klawiszowe w stylu irssi oraz wieloklawiszowe sekwencje z prefiksem. Zarządzaj nimi interaktywnie poleceniem /bind (/bind -list, /bind <key> <action> [<data>], /bind -delete <key>, /bind -reset <key>) lub w sekcji Keyboard panelu /wizard. Skróty są współdzielone między TUI a frontendem webowym.
key_timeout (domyślnie 0 ms) określa, jak długo niekompletna sekwencja wieloklawiszowa czeka przed zresetowaniem (0 czeka bez limitu czasu). Domyślne edytowalne skróty nawigacji obejmują meta-a / meta-A (active_window -- skok do nieprzeczytanego bufora o najwyższym priorytecie), meta-0..meta-9 (change_window), meta-left / meta-right (previous_window / next_window) oraz meta-l (bare_display). Możesz też przypisać akcje seek_previous_highlight i seek_next_highlight, aby przeskakiwać między podświetlonymi wiadomościami (highlightami) w aktywnym oknie.
[scripts]
Tablica autoload zawiera nazwy skryptów do załadowania przy uruchomieniu. Skrypty znajdują się w ~/.repartee/scripts/ jako pliki .lua (a dołączone skrypty, takie jak keepnick.lua, są też wyszukiwane w katalogu instalacyjnym). Ustawienia skryptów zapisywane przez api.config.set(key, value) są utrwalane w sekcji [scripts.values.<nazwa_skryptu>] pomiędzy przeładowaniami skryptu i restartami klienta.
[dcc]
Ustawienia czatu DCC (Direct Client-to-Client). DCC CHAT ustanawia bezpośrednie połączenia TCP peer-to-peer, które omijają serwer IRC.
own_ip nadpisuje adres IP ogłaszany w ofertach DCC. Gdy pusty, Repartee automatycznie wykrywa go z lokalnego adresu gniazda IRC (jak getsockname w irssi). Ustaw na swój publiczny adres IP, jeśli jesteś za NAT.
port_range kontroluje port TCP dla listenerów DCC. "0" pozwala systemowi przypisać wolny port. Użyj "1025 65535" lub "5000-5100", aby ograniczyć do zakresu (przydatne dla reguł firewalla).
autochat_masks to lista wzorców masek nick!ident@host z wildcardami. Przychodzące oferty DCC CHAT pasujące do dowolnego wzorca są automatycznie akceptowane bez pytania.
[spellcheck]
Wbudowane sprawdzanie pisowni. Gdy enabled = true, błędnie napisane słowa są podkreślane na czerwono podczas pisania. Naciśnij Tab, aby przełączać sugestie, Spację, aby zaakceptować, Escape, aby cofnąć. languages to lista kodów języków Hunspell (np. en_US, pl_PL, de_DE) -- słowo jest uznawane za poprawne, jeśli dowolny aktywny słownik je akceptuje. Umieść pliki .dic/.aff w ~/.repartee/dicts/ (lub ustaw dictionary_dir na własną ścieżkę).
[shrink]
Opcjonalna integracja ze skracarką URL. Gdy enabled = true i SHRINK_API_KEY jest ustawiony w .env, repartee skraca długie URL-e przez skonfigurowane API (domyślnie shr.al).
- Wychodzące (
outgoing_enabled) -- URL-e w wiadomościach, które wysyłasz, są podmieniane przed wysłaniem na sieć, więc inni użytkownicy, log IRC i twój własny bufor widzą już skróconą formę. Skracanie jest pierwszym etapem pipeline'u wychodzącego, przed E2E iecho-message, z konfigurowalnym limitem czasu na wywołanie (outgoing_timeout_ms, domyślnie 2 s). - Przychodzące (
incoming_enabled) -- URL-e w wiadomościach, które odbierasz, są skracane przed wyświetleniem i zapisem. Po skróconym linku dopisywana jest mała podpowiedź[host], żeby docelowa domena była nadal widoczna. - Ręcznie --
/shrink <url>skraca pojedynczy URL na żądanie i wypisuje wynik jako lokalne zdarzenie w bieżącym buforze.
min_url_length (>= 25) ogranicza wyzwalanie, żeby krótkie URL-e były pomijane. cache_max_entries ogranicza LRU w pamięci -- powtórzony URL w tej samej sesji nie pójdzie do API dwa razy. SHRINK_API_KEY jest czytany wyłącznie z .env i nigdy nie trafia do config.toml. Zmiany api_url, outgoing_timeout_ms, incoming_timeout_ms lub cache_max_entries przez /set są zapamiętywane przy starcie workerów -- /set zwraca informację restart required dla tych kluczy.
[typing]
Wskaźniki pisania oparte na zatwierdzonym tagu klienta IRCv3 +typing. Wysyłanie i odbieranie są sterowane niezależnie, a wszystkie trzy klucze są wartościami logicznymi -- używaj /set typing.show false, a nie off.
| Klucz | Domyślna | Opis |
|---|---|---|
show | true | Odbieraj i wyświetlaj informację o pisaniu innych osób -- na pasku statusu w TUI i w interfejsie webowym. Steruje przyjmowaniem danych, a nie tylko ich wyświetlaniem -- ustawienie na false czyści też wszystkich aktualnie pokazywanych |
send_channels | true | Wysyłaj własne +typing, gdy piszesz na kanale |
send_queries | true | Wysyłaj własne +typing, gdy piszesz w prywatnym query |
Wysyłanie jest domyślnie włączone. Zaraz po instalacji osoby na twoich kanałach i w query widzą, kiedy piszesz wiadomość. Wyłącz to poleceniami /set typing.send_channels false i /set typing.send_queries false.
Wskaźniki pisania korzystają z TAGMSG i wymagają jedynie capability message-tags, więc działają na każdym serwerze, który ją obsługuje (a na tych, które jej nie obsługują lub blokują tag przez CLIENTTAGDENY, są po cichu pomijane). repartee wysyła wyłącznie zatwierdzony +typing, ale przy odbiorze nadal akceptuje starszy +draft/typing. Zaczęta treść /me liczy się jako pisanie; zaczęte /command -- nie. Dodaj typing do [statusbar] items, aby umieścić wskaźnik na pasku statusu -- domyślnie już tam jest.
[translate]
Steruje tłumaczeniem na żywo per bufor. Mapowaniami zarządzają /translate addin, addout, delin i delout; szczegóły zawiera strona Tłumaczenie na żywo.
[web]
Wbudowany frontend webowy. Gdy enabled = true i WEB_PASSWORD jest ustawiony w .env, aplikacja uruchamia serwer HTTPS obok interfejsu terminalowego. Oba współdzielą ten sam stan -- przeczytaj wiadomość w przeglądarce, a zostanie oznaczona jako przeczytana w terminalu i odwrotnie.
Ustaw bind_address = "0.0.0.0", aby umożliwić dostęp z sieci lokalnej. TLS jest zawsze włączony -- jeśli nie podano własnego certyfikatu/klucza, automatycznie generowany jest certyfikat samopodpisany w ~/.repartee/certs/.
Ustawienie theme kontroluje wygląd interfejsu webowego. Dostępne: nightfall (domyślny ciemny), catppuccin-mocha, tokyo-storm, gruvbox-light, catppuccin-latte.
Trwałe sesje: session_days (domyślnie 90) kontroluje czas życia ciasteczka logowania. Sesje są zapisywane do ~/.repartee/web_sessions.bin (uprawnienia 0600), a tokeny przechowywane są jako HMAC-SHA256(token, WEB_SESSION_SECRET) -- surowy token nigdy nie trafia na dysk. Sesja przeżywa restart przeglądarki, instalację PWA i zmianę sieci (powiązania z IP/User-Agent zostały usunięte). Rotacja WEB_SESSION_SECRET w .env unieważnia wszystkie istniejące sesje.
Login z polem użytkownika: username (domyślnie "repartee") jest podpowiadany w formularzu logowania, dzięki czemu 1Password, iCloud Keychain i Bitwarden rozpoznają formularz. Wartość jest jedynie dekoracyjna -- serwer weryfikuje tylko hasło.
Podglądy obrazków: image_previews = false domyślnie. Po włączeniu serwer wykrywa adresy URL w przychodzących wiadomościach, pobiera je przez istniejący moduł image_preview z zabezpieczeniem przed SSRF (cele prywatne, loopback, link-local i metadane chmury są blokowane na poziomie bezpośrednich URL-i, przekierowań i podążania za og:image), generuje miniatury 400x300 JPEG (q80) i cache'uje wynik w ~/.repartee/web_thumbnails/. Przeglądarka pobiera każdą miniaturę przez uwierzytelnione GET /api/preview?h=<hmac-hash>, więc dostępne są wyłącznie URL-e, które wcześniej wyłuskał sam serwer. Limit podglądów na wiadomość kontroluje image_previews_max_per_msg (domyślnie 4), a łączny rozmiar cache thumbnail_cache_mb (domyślnie 200, czyszczone LRU po mtime). Bezpośrednie URL-e z Imgura (i.imgur.com/abc.png) są ładowane po stronie klienta, ponieważ Imgur blokuje większość IP serwerów.
[[ignores]]
Wzorce ignorowania do filtrowania niechcianych wiadomości. Używa dopasowania z wildcardami (*!*@host). Poziomy: MSGS, PUBLIC, NOTICES, ACTIONS, JOINS, PARTS, QUITS, NICKS, KICKS, CTCPS, ALL.
Dane uwierzytelniające
Hasła i dane SASL nie powinny znajdować się w config.toml -- zamiast tego przechowuj je w ~/.repartee/.env.
# ~/.repartee/.env
LIBERA_SASL_USER=mynick
LIBERA_SASL_PASS=hunter2
LIBERA_PASSWORD=serverpassword
WEB_PASSWORD=mysecretpassword
SHRINK_API_KEY=your_shrink_api_key
OPENROUTER_API=your_openrouter_key
OLLAMA_API=your_ollama_key
GEMINI_API=your_gemini_key
GROQ_API_KEY=your_groq_key
# WEB_SESSION_SECRET=... # generowany automatycznie przy pierwszym uruchomieniu; rotacja wylogowuje wszystkich
Dane uwierzytelniające serwera używają identyfikatora serwera zapisanego wielkimi literami. WEB_PASSWORD jest wymagany dla frontendu webowego -- serwer nie uruchomi się bez niego. WEB_SESSION_SECRET jest generowany automatycznie przy pierwszym uruchomieniu i zapisywany do .env; to klucz HMAC używany do hashowania tokenów sesji na dysku, więc rotacja unieważnia wszystkie aktywne sesje.
Zmiany w czasie działania
/wizard-- otwórz interaktywny panel ustawień w TUI oraz w interfejsie webowym (10 sekcji: Networks & Connections, Appearance, Messages, Notifications, History & Privacy, Keyboard, Extensions, E2E Encryption, Translation oraz Advanced, z wyszukiwarkąCtrl+F, walidacją zmian, przywracaniem wartości domyślnych sekcji oraz kreatorami kanałów dla szyfrowania E2E i tłumaczeń). Użyj/wizard server [id], aby przejść bezpośrednio do dodawania lub edycji serwera./set section.field value-- zmień wartość konfiguracji w czasie działania. Zmiany są zapisywane natychmiast. Ujmij wartość w"..."lub'...', aby zachować wiodące/końcowe spacje, albo użyj""/'', aby wyczyścić listę lub opcjonalne nadpisanie serwera./bind-- przeglądaj lub modyfikuj skróty klawiszowe oraz sekwencje wieloklawiszowe w czasie działania./reload-- przeładuj motyw i konfigurację z dysku.