|
|
|
@ -4,22 +4,7 @@ with lib; |
|
|
|
|
|
|
|
|
|
let |
|
|
|
|
cfg = config.services.psd; |
|
|
|
|
|
|
|
|
|
configFile = '' |
|
|
|
|
${optionalString (cfg.users != [ ]) '' |
|
|
|
|
USERS="${concatStringsSep " " cfg.users}" |
|
|
|
|
''} |
|
|
|
|
|
|
|
|
|
${optionalString (cfg.browsers != [ ]) '' |
|
|
|
|
BROWSERS="${concatStringsSep " " cfg.browsers}" |
|
|
|
|
''} |
|
|
|
|
|
|
|
|
|
${optionalString (cfg.volatile != "") "VOLATILE=${cfg.volatile}"} |
|
|
|
|
${optionalString (cfg.daemonFile != "") "DAEMON_FILE=${cfg.daemonFile}"} |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
in { |
|
|
|
|
|
|
|
|
|
options.services.psd = with types; { |
|
|
|
|
enable = mkOption { |
|
|
|
|
type = bool; |
|
|
|
@ -28,32 +13,6 @@ in { |
|
|
|
|
Whether to enable the Profile Sync daemon. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
users = mkOption { |
|
|
|
|
type = listOf str; |
|
|
|
|
default = [ ]; |
|
|
|
|
example = [ "demo" ]; |
|
|
|
|
description = '' |
|
|
|
|
A list of users whose browser profiles should be sync'd to tmpfs. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
browsers = mkOption { |
|
|
|
|
type = listOf str; |
|
|
|
|
default = [ ]; |
|
|
|
|
example = [ "chromium" "firefox" ]; |
|
|
|
|
description = '' |
|
|
|
|
A list of browsers to sync. Available choices are: |
|
|
|
|
|
|
|
|
|
chromium chromium-dev conkeror.mozdev.org epiphany firefox |
|
|
|
|
firefox-trunk google-chrome google-chrome-beta google-chrome-unstable |
|
|
|
|
heftig-aurora icecat luakit midori opera opera-developer opera-beta |
|
|
|
|
qupzilla palemoon rekonq seamonkey |
|
|
|
|
|
|
|
|
|
An empty list will enable all browsers. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
resyncTimer = mkOption { |
|
|
|
|
type = str; |
|
|
|
|
default = "1h"; |
|
|
|
@ -66,80 +25,53 @@ in { |
|
|
|
|
omitted. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
volatile = mkOption { |
|
|
|
|
type = str; |
|
|
|
|
default = "/run/psd-profiles"; |
|
|
|
|
description = '' |
|
|
|
|
The directory where browser profiles should reside(this should be |
|
|
|
|
mounted as a tmpfs). Do not include a trailing backslash. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
daemonFile = mkOption { |
|
|
|
|
type = str; |
|
|
|
|
default = "/run/psd"; |
|
|
|
|
description = '' |
|
|
|
|
Where the pid and backup configuration files will be stored. |
|
|
|
|
''; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
config = mkIf cfg.enable { |
|
|
|
|
assertions = [ |
|
|
|
|
{ assertion = cfg.users != []; |
|
|
|
|
message = "services.psd.users must contain at least one user"; |
|
|
|
|
} |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
systemd = { |
|
|
|
|
services = { |
|
|
|
|
psd = { |
|
|
|
|
description = "Profile Sync daemon"; |
|
|
|
|
wants = [ "psd-resync.service" "local-fs.target" ]; |
|
|
|
|
wantedBy = [ "multi-user.target" ]; |
|
|
|
|
preStart = "mkdir -p ${cfg.volatile}"; |
|
|
|
|
|
|
|
|
|
path = with pkgs; [ glibc rsync gawk ]; |
|
|
|
|
|
|
|
|
|
unitConfig = { |
|
|
|
|
RequiresMountsFor = [ "/home/" ]; |
|
|
|
|
user = { |
|
|
|
|
services = { |
|
|
|
|
psd = { |
|
|
|
|
enable = true; |
|
|
|
|
description = "Profile Sync daemon"; |
|
|
|
|
wants = [ "psd-resync.service" "local-fs.target" ]; |
|
|
|
|
wantedBy = [ "default.target" ]; |
|
|
|
|
path = with pkgs; [ rsync kmod gawk nettools profile-sync-daemon ]; |
|
|
|
|
unitConfig = { |
|
|
|
|
RequiresMountsFor = [ "/home/" ]; |
|
|
|
|
}; |
|
|
|
|
serviceConfig = { |
|
|
|
|
Type = "oneshot"; |
|
|
|
|
RemainAfterExit = "yes"; |
|
|
|
|
ExecStart = "${pkgs.profile-sync-daemon}/bin/profile-sync-daemon sync"; |
|
|
|
|
ExecStop = "${pkgs.profile-sync-daemon}/bin/profile-sync-daemon unsync"; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
serviceConfig = { |
|
|
|
|
Type = "oneshot"; |
|
|
|
|
RemainAfterExit = "yes"; |
|
|
|
|
ExecStart = "${pkgs.profile-sync-daemon}/bin/profile-sync-daemon sync"; |
|
|
|
|
ExecStop = "${pkgs.profile-sync-daemon}/bin/profile-sync-daemon unsync"; |
|
|
|
|
psd-resync = { |
|
|
|
|
enable = true; |
|
|
|
|
description = "Timed profile resync"; |
|
|
|
|
after = [ "psd.service" ]; |
|
|
|
|
wants = [ "psd-resync.timer" ]; |
|
|
|
|
partOf = [ "psd.service" ]; |
|
|
|
|
wantedBy = [ "default.target" ]; |
|
|
|
|
path = with pkgs; [ rsync kmod gawk nettools profile-sync-daemon ]; |
|
|
|
|
serviceConfig = { |
|
|
|
|
Type = "oneshot"; |
|
|
|
|
ExecStart = "${pkgs.profile-sync-daemon}/bin/profile-sync-daemon resync"; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
psd-resync = { |
|
|
|
|
description = "Timed profile resync"; |
|
|
|
|
after = [ "psd.service" ]; |
|
|
|
|
wants = [ "psd-resync.timer" ]; |
|
|
|
|
partOf = [ "psd.service" ]; |
|
|
|
|
|
|
|
|
|
path = with pkgs; [ glibc rsync gawk ]; |
|
|
|
|
timers.psd-resync = { |
|
|
|
|
description = "Timer for profile sync daemon - ${cfg.resyncTimer}"; |
|
|
|
|
partOf = [ "psd-resync.service" "psd.service" ]; |
|
|
|
|
|
|
|
|
|
serviceConfig = { |
|
|
|
|
Type = "oneshot"; |
|
|
|
|
ExecStart = "${pkgs.profile-sync-daemon}/bin/profile-sync-daemon resync"; |
|
|
|
|
timerConfig = { |
|
|
|
|
OnUnitActiveSec = "${cfg.resyncTimer}"; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
timers.psd-resync = { |
|
|
|
|
description = "Timer for profile sync daemon - ${cfg.resyncTimer}"; |
|
|
|
|
partOf = [ "psd-resync.service" "psd.service" ]; |
|
|
|
|
|
|
|
|
|
timerConfig = { |
|
|
|
|
OnUnitActiveSec = "${cfg.resyncTimer}"; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
environment.etc."psd.conf".text = configFile; |
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|