# heather — Syncthing (sync + relay) как NixOS-сервис. # # Заменяет syncthing@michaotic + strelaysrv с iscg-dev. # # - services.syncthing: sync daemon. dataDir = /srv/syncthing (синкается на # устройства poppy/телефон). configDir = /var/lib/syncthing (state syncthing). # - relayOptions.enable: strelaysrv, public relay на :22067 (relay) / :22070 # (status). Для устройств за NAT. # # GUI: 127.0.0.1:8384 (только localhost), Caddy проксирует на sync.iscg.dev # с basicauth сверху (см. caddy.nix). Пароль GUI включить отдельно (syncthing # сам требует при прослушивании не-localhost, но на localhost опционален — # Caddy даёт внешний слой auth). # # /srv/syncthing/herbarium/ — silverbullet space (bind mount в контейнер, # см. arion-compose.nix). syncthing sync'ает весь /srv/syncthing включая # herbarium на устройства. { config, pkgs, lib, ... }: { services.syncthing = { enable = true; user = "mikl"; group = "users"; # Что синкается (файлы). /srv — FHS для service data. dataDir = "/srv/syncthing"; # State syncthing (config, certs, index). Не синкается. configDir = "/var/lib/syncthing"; # Открывает firewall порты 22000 (sync). firewall выключен на heather # (полагаемся на YC SG), но флаг для консистентности. openDefaultPorts = true; # GUI только на localhost — Caddy проксирует снаружи. guiAddress = "127.0.0.1:8384"; # НЕ override devices/folders из nix — конфигурим через GUI/API. # overrideDevices/overrideFolders = false (default) = nix не трогает то, # что добавлено через GUI. Иначе nix бы их стирал при rebuild. overrideDevices = false; overrideFolders = false; }; # strelaysrv: public relay для syncthing-устройств за NAT. # Порты 22067 (relay) и 22070 (status). # NixOS-модуля syncthing не управляет strelaysrv — поднимаем вручную через # systemd, пакет syncthing-relay (strelaysrv binary). systemd.services.syncthing-relay = { description = "Syncthing Relay Server (strelaysrv)"; after = [ "network.target" ]; wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStart = "${pkgs.syncthing-relay}/bin/strelaysrv"; Restart = "on-failure"; User = "mikl"; Group = "users"; # strelaysrv пишет ключи/статус в CWD — рабочая директория. WorkingDirectory = "/var/lib/syncthing-relay"; StateDirectory = "syncthing-relay"; }; }; # /srv/syncthing создаём, права mikl:users (syncthing работает от mikl). systemd.tmpfiles.rules = [ "d /srv/syncthing 0755 mikl users -" ]; }