From 7b73f840712de88093f6c056e3c658e114ca0b3c Mon Sep 17 00:00:00 2001 From: eyjhb Date: Thu, 9 Jul 2020 00:17:51 +0200 Subject: dropbox: add module Ability to control Dropbox daemon, if it should start and where to place the files. PR #1391 --- modules/services/dropbox.nix | 77 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 modules/services/dropbox.nix (limited to 'modules/services') diff --git a/modules/services/dropbox.nix b/modules/services/dropbox.nix new file mode 100644 index 00000000000..fa8a2fc52f5 --- /dev/null +++ b/modules/services/dropbox.nix @@ -0,0 +1,77 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.services.dropbox; + baseDir = ".dropbox-hm"; + dropboxCmd = "${pkgs.dropbox-cli}/bin/dropbox"; + homeBaseDir = "${config.home.homeDirectory}/${baseDir}"; + +in { + meta.maintainers = [ maintainers.eyjhb ]; + + options = { + services.dropbox = { + enable = mkEnableOption "Dropbox daemon"; + + path = mkOption { + type = types.path; + default = "${config.home.homeDirectory}/Dropbox"; + defaultText = + literalExample ''"''${config.home.homeDirectory}/Dropbox"''; + apply = toString; # Prevent copies to Nix store. + description = "Where to put the Dropbox directory."; + }; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ pkgs.dropbox-cli ]; + + systemd.user.services.dropbox = { + Unit = { Description = "dropbox"; }; + + Install = { WantedBy = [ "default.target" ]; }; + + Service = { + Environment = [ "HOME=${homeBaseDir}" ]; + + Type = "forking"; + PIDFile = "${homeBaseDir}/.dropbox/dropbox.pid"; + + Restart = "on-failure"; + PrivateTmp = true; + ProtectSystem = "full"; + Nice = 10; + + ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; + ExecStop = "${dropboxCmd} stop"; + ExecStart = toString (pkgs.writeShellScript "dropbox-start" '' + if [[ ! -f $HOME/.dropbox-dist/VERSION ]]; then + ${pkgs.coreutils}/bin/yes | ${dropboxCmd} update + fi + + ${dropboxCmd} start + ''); + }; + }; + + home.activation.dropbox = hm.dag.entryAfter [ "writeBoundary" ] '' + # ensure we have the dirs we need + $DRY_RUN_CMD ${pkgs.coreutils}/bin/mkdir $VERBOSE_ARG -p \ + ${homeBaseDir}/{.dropbox,.dropbox-dist,Dropbox} + + # symlink them as needed + if [[ ! -d ${config.home.homeDirectory}/.dropbox ]]; then + $DRY_RUN_CMD ${pkgs.coreutils}/bin/ln $VERBOSE_ARG -s \ + ${homeBaseDir}/.dropbox ${config.home.homeDirectory}/.dropbox + fi + if [[ ! -d ${escapeShellArg cfg.path} ]]; then + $DRY_RUN_CMD ${pkgs.coreutils}/bin/ln $VERBOSE_ARG -s \ + ${homeBaseDir}/Dropbox ${escapeShellArg cfg.path} + fi + ''; + }; +} -- cgit v1.2.3