From af982a9f646967e1117c1778ca8e30aa06b76c5b Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Mon, 29 Jul 2024 22:59:56 +0100 Subject: [PATCH] Add syncthing systemd dependencies Signed-off-by: Nikolaos Karaolidis --- .../configs/console/syncthing/default.nix | 55 +++++++++++++++---- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/hosts/common/user/configs/console/syncthing/default.nix b/hosts/common/user/configs/console/syncthing/default.nix index ee7867d..3144a00 100644 --- a/hosts/common/user/configs/console/syncthing/default.nix +++ b/hosts/common/user/configs/console/syncthing/default.nix @@ -1,7 +1,17 @@ { username ? throw "username argument is required", }: -{ config, ... }: +{ + config, + inputs, + lib, + pkgs, + ... +}: +let + userConfig = config.users.users.${username}; + hmConfig = config.home-manager.users.${username}; +in { networking.firewall = { allowedTCPPorts = [ 22000 ]; @@ -24,18 +34,41 @@ }; }; - home-manager.users.${username}.services.syncthing = { - enable = true; - key = config.sops.secrets."syncthing/key".path; - cert = config.sops.secrets."syncthing/cert".path; - extraOptions = [ "-no-default-folder" ]; + home-manager.users.${username} = { + services.syncthing = { + enable = true; + key = config.sops.secrets."syncthing/key".path; + cert = config.sops.secrets."syncthing/cert".path; + extraOptions = [ "-no-default-folder" ]; - settings = { - options.urAccepted = -1; - devices = { - amalthea.id = "2W7YT6Q-TO7CYMW-JH6QZXE-7Q6MDQQ-HPHKP4A-VI5HP7G-KLMGMST-MNRYHQG"; # Google Pixel 8 Pro - ganymede.id = "DXJPEJA-JNGF6I4-VIZYTX7-U345C5V-HIUTSFC-D36N2EM-Y3FAKJM-PRKYQAI"; # Samsung Galaxy Tab S7+ + settings = { + options.urAccepted = -1; + devices = { + amalthea.id = "2W7YT6Q-TO7CYMW-JH6QZXE-7Q6MDQQ-HPHKP4A-VI5HP7G-KLMGMST-MNRYHQG"; # Google Pixel 8 Pro + ganymede.id = "DXJPEJA-JNGF6I4-VIZYTX7-U345C5V-HIUTSFC-D36N2EM-Y3FAKJM-PRKYQAI"; # Samsung Galaxy Tab S7+ + }; }; }; + + systemd.user.services.syncthing.Unit.After = + let + inherit (pkgs.callPackage "${inputs.impermanence}/lib.nix" { }) mkServiceName parentsOf; + removeHomePrefix = + path: lib.strings.removePrefix "~/" (lib.strings.removePrefix "${userConfig.home}/" path); + syncthingFolders = builtins.map (folder: removeHomePrefix folder.path) ( + builtins.attrValues hmConfig.services.syncthing.settings.folders + ); + in + lib.lists.flatten ( + builtins.map ( + persistence: + builtins.map (folder: "${mkServiceName persistence.persistentStoragePath folder}.service") ( + builtins.filter (folder: builtins.elem folder persistence.directories) ( + lib.lists.unique (lib.lists.flatten (builtins.map parentsOf syncthingFolders)) + ) + ) + ) (builtins.attrValues hmConfig.home.persistence) + ) + ++ [ "sops-nix.service" ]; }; }