syncthing: add Darwin support

This commit is contained in:
midchildan 2023-02-09 01:59:38 +09:00 committed by Robert Helgesson
parent 2f8d24b7f5
commit 885a504f80
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
10 changed files with 85 additions and 27 deletions

View file

@ -964,6 +964,14 @@ in
A new module is available: 'services.copyq'.
'';
}
{
time = "2023-03-25T11:03:24+00:00";
condition = hostPlatform.isDarwin;
message = ''
A new module is available: 'services.syncthing'.
'';
}
];
};
}

View file

@ -6,6 +6,15 @@ let
cfg = config.services.syncthing;
defaultSyncthingArgs = [
"${pkgs.syncthing}/bin/syncthing"
"-no-browser"
"-no-restart"
"-logflags=0"
];
syncthingArgs = defaultSyncthingArgs ++ cfg.extraOptions;
in {
meta.maintainers = [ maintainers.rycee ];
@ -57,11 +66,6 @@ in {
config = mkMerge [
(mkIf cfg.enable {
assertions = [
(lib.hm.assertions.assertPlatform "services.syncthing" pkgs
lib.platforms.linux)
];
home.packages = [ (getOutput "man" pkgs.syncthing) ];
systemd.user.services = {
@ -74,10 +78,7 @@ in {
};
Service = {
ExecStart =
"${pkgs.syncthing}/bin/syncthing -no-browser -no-restart -logflags=0"
+ optionalString (cfg.extraOptions != [ ])
(" " + escapeShellArgs cfg.extraOptions);
ExecStart = escapeShellArgs syncthingArgs;
Restart = "on-failure";
SuccessExitStatus = [ 3 4 ];
RestartForceExitStatus = [ 3 4 ];
@ -95,6 +96,18 @@ in {
Install = { WantedBy = [ "default.target" ]; };
};
};
launchd.agents.syncthing = {
enable = true;
config = {
ProgramArguments = syncthingArgs;
KeepAlive = {
Crashed = true;
SuccessfulExit = false;
};
ProcessType = "Background";
};
};
})
(mkIf (isAttrs cfg.tray && cfg.tray.enable) {

View file

@ -118,6 +118,7 @@ import nmt {
./modules/programs/sm64ex
./modules/programs/ssh
./modules/programs/starship
./modules/services/syncthing/common
./modules/programs/taskwarrior
./modules/programs/texlive
./modules/programs/tmate
@ -202,7 +203,7 @@ import nmt {
./modules/services/screen-locker
./modules/services/swayidle
./modules/services/sxhkd
./modules/services/syncthing
./modules/services/syncthing/linux
./modules/services/trayer
./modules/services/twmn
./modules/services/udiskie

View file

@ -0,0 +1 @@
{ syncthing-extra-options = ./extra-options.nix; }

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<dict>
<key>Crashed</key>
<true/>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>Label</key>
<string>org.nix-community.home.syncthing</string>
<key>ProcessType</key>
<string>Background</string>
<key>ProgramArguments</key>
<array>
<string>@syncthing@/bin/syncthing</string>
<string>-no-browser</string>
<string>-no-restart</string>
<string>-logflags=0</string>
<string>-foo</string>
<string>-bar "baz"</string>
</array>
</dict>
</plist>

View file

@ -0,0 +1,26 @@
{ lib, pkgs, ... }:
lib.mkMerge [
{
services.syncthing = {
enable = true;
extraOptions = [ "-foo" ''-bar "baz"'' ];
};
test.stubs.syncthing = { };
}
(lib.mkIf pkgs.stdenv.isLinux {
nmt.script = ''
assertFileExists home-files/.config/systemd/user/syncthing.service
assertFileContains home-files/.config/systemd/user/syncthing.service \
"ExecStart='@syncthing@/bin/syncthing' '-no-browser' '-no-restart' '-logflags=0' '-foo' '-bar \"baz\"'"
'';
})
(lib.mkIf pkgs.stdenv.isDarwin {
nmt.script = ''
serviceFile=LaunchAgents/org.nix-community.home.syncthing.plist
assertFileExists "$serviceFile"
assertFileContent "$serviceFile" ${./expected-agent.plist}
'';
})
]

View file

@ -1,16 +0,0 @@
{ config, ... }:
{
services.syncthing = {
enable = true;
extraOptions = [ "-foo" ''-bar "baz"'' ];
};
test.stubs.syncthing = { };
nmt.script = ''
assertFileExists home-files/.config/systemd/user/syncthing.service
assertFileContains home-files/.config/systemd/user/syncthing.service \
"ExecStart=@syncthing@/bin/syncthing -no-browser -no-restart -logflags=0 '-foo' '-bar \"baz\"'"
'';
}

View file

@ -1,5 +1,4 @@
{
syncthing-extra-options = ./extra-options.nix;
syncthing-tray = ./tray.nix;
syncthing-tray-as-bool-triggers-warning = ./tray-as-bool-triggers-warning.nix;
}