diff options
author | Kaiden Fey <kookie@spacekookie.de> | 2020-09-21 14:12:32 +0200 |
---|---|---|
committer | Katharina Fey <kookie@spacekookie.de> | 2020-09-21 14:12:32 +0200 |
commit | f80843dd45d7acd563d0a5b014cec3a2ea686fc2 (patch) | |
tree | 87189d873d6f932d85f9c1a480462b37d96cd6a5 /home-manager/modules/services/dropbox.nix | |
parent | e0800985dab8f8ebb4cebdfd7e361fd1fafdb2a7 (diff) | |
parent | 9b1b55ba0264a55add4b7b4e022bdc2832b531f6 (diff) |
Merge commit '9b1b55ba0264a55add4b7b4e022bdc2832b531f6'
Diffstat (limited to 'home-manager/modules/services/dropbox.nix')
-rw-r--r-- | home-manager/modules/services/dropbox.nix | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/home-manager/modules/services/dropbox.nix b/home-manager/modules/services/dropbox.nix new file mode 100644 index 00000000000..bcf3ba2b457 --- /dev/null +++ b/home-manager/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}" "DISPLAY=" ]; + + 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" '' + # 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 + + # get the dropbox bins if needed + if [[ ! -f $HOME/.dropbox-dist/VERSION ]]; then + ${pkgs.coreutils}/bin/yes | ${dropboxCmd} update + fi + + ${dropboxCmd} start + ''); + }; + }; + }; +} |