From 41c22205084d1a75e376318d7d66d88354a438e3 Mon Sep 17 00:00:00 2001 From: eyjhb Date: Thu, 9 Jul 2020 00:17:51 +0200 Subject: [PATCH 1/3] services.dropbox: init Ability to control Dropbox daemon, if it should start and where to place the files. --- .github/CODEOWNERS | 2 + modules/services/dropbox.nix | 74 +++++++++++++++++++ .../services/dropbox/basic-configuration.nix | 10 +++ tests/modules/services/dropbox/default.nix | 1 + 4 files changed, 87 insertions(+) create mode 100644 modules/services/dropbox.nix create mode 100644 tests/modules/services/dropbox/basic-configuration.nix create mode 100644 tests/modules/services/dropbox/default.nix diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1995584a962..4ae23d84cf1 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -110,6 +110,8 @@ /modules/services/clipmenu.nix @DamienCassou +/modules/services/dropbox.nix @eyJhb + /modules/services/dunst.nix @rycee /modules/services/emacs.nix @tadfisher diff --git a/modules/services/dropbox.nix b/modules/services/dropbox.nix new file mode 100644 index 00000000000..a0ed604fa07 --- /dev/null +++ b/modules/services/dropbox.nix @@ -0,0 +1,74 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.dropbox; + baseDir = ".dropbox-hm"; + dropboxCmd = '' + ${pkgs.coreutils}/bin/env -i HOME="$HOME" ${pkgs.dropbox-cli}/bin/dropbox''; +in { + meta.maintainers = [ maintainers.eyjhb ]; + + options = { + services.dropbox = { + enable = mkEnableOption "Dropbox daemon"; + + path = mkOption { + type = types.path; + default = "${config.home.homeDirectory}/Dropbox"; + defaultText = "\${config.home.homeDirectory}/Dropbox"; + description = "Where to put the Dropbox directory."; + }; + }; + }; + + config = mkIf cfg.enable (mkMerge [{ + home.packages = [ pkgs.dropbox-cli ]; + + systemd.user.services.dropbox = { + Unit = { Description = "Starting dropbox"; }; + + Install = { WantedBy = [ "default.target" ]; }; + + Service = { + Environment = [ "HOME=${config.home.homeDirectory}/${baseDir}" ]; + + Type = "forking"; + PIDFile = + "${config.home.homeDirectory}/${baseDir}/.dropbox/dropbox.pid"; + + Restart = "on-failure"; + PrivateTmp = true; + ProtectSystem = "full"; + Nice = 10; + + ExecReload = "${pkgs.coreutils.out}/bin/kill -HUP $MAINPID"; + ExecStop = "${dropboxCmd} stop"; + ExecStart = let + script = pkgs.writeScript "dropboxInit" '' + #!/bin/sh + if [ ! -f $HOME/.dropbox-dist/VERSION ]; then + ${pkgs.coreutils}/bin/yes | ${pkgs.coreutils}/bin/env -i HOME="$HOME" ${pkgs.dropbox-cli}/bin/dropbox update + fi + + ${dropboxCmd} start + ''; + in "${script}"; + }; + }; + + home.activation.dropbox = let dag = lib.hm.dag; + in dag.entryAfter [ "writeBoundary" ] '' + # ensure we have the dirs we need + $DRY_RUN_CMD ${pkgs.coreutils}/bin/mkdir -p ${config.home.homeDirectory}/${baseDir}/.dropbox + $DRY_RUN_CMD ${pkgs.coreutils}/bin/mkdir -p ${config.home.homeDirectory}/${baseDir}/.dropbox-dist + $DRY_RUN_CMD ${pkgs.coreutils}/bin/mkdir -p ${config.home.homeDirectory}/${baseDir}/Dropbox + + # symlink them as needed + if [ ! -d ${config.home.homeDirectory}/.dropbox ]; then $DRY_RUN_CMD ${pkgs.coreutils}/bin/ln -s ${config.home.homeDirectory}/${baseDir}/.dropbox ${config.home.homeDirectory}/.dropbox; fi + # if [ ! -d ${config.home.homeDirectory}/.dropbox-dist ]; then $DRY_RUN_CMD ${pkgs.coreutils}/bin/ln -s ${config.home.homeDirectory}/${baseDir}/.dropbox-dist ${config.home.homeDirectory}/.dropbox-dist; fi + if [ ! -d ${cfg.path} ]; then $DRY_RUN_CMD ${pkgs.coreutils}/bin/ln -s ${config.home.homeDirectory}/${baseDir}/Dropbox ${cfg.path}; fi + ''; + }]); +} diff --git a/tests/modules/services/dropbox/basic-configuration.nix b/tests/modules/services/dropbox/basic-configuration.nix new file mode 100644 index 00000000000..59d7c773a87 --- /dev/null +++ b/tests/modules/services/dropbox/basic-configuration.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: + +{ + config = { + services.dropbox = { + enable = true; + path = "${config.home.homeDirectory}/dropbox"; + }; + }; +} diff --git a/tests/modules/services/dropbox/default.nix b/tests/modules/services/dropbox/default.nix new file mode 100644 index 00000000000..ad519790355 --- /dev/null +++ b/tests/modules/services/dropbox/default.nix @@ -0,0 +1 @@ +{ dropbox-basic-configuration = ./basic-configuration.nix; } From 892c8f1c236d2ae6e193ee7e464d9f6da58e9e4e Mon Sep 17 00:00:00 2001 From: eyjhb Date: Tue, 21 Jul 2020 14:08:53 +0200 Subject: [PATCH 2/3] updated - will squash later --- modules/services/dropbox.nix | 35 ++++++++++--------- tests/default.nix | 1 + .../services/dropbox/basic-configuration.nix | 15 ++++++++ 3 files changed, 34 insertions(+), 17 deletions(-) diff --git a/modules/services/dropbox.nix b/modules/services/dropbox.nix index a0ed604fa07..00becb17496 100644 --- a/modules/services/dropbox.nix +++ b/modules/services/dropbox.nix @@ -7,6 +7,7 @@ let baseDir = ".dropbox-hm"; dropboxCmd = '' ${pkgs.coreutils}/bin/env -i HOME="$HOME" ${pkgs.dropbox-cli}/bin/dropbox''; + homeBaseDir = "${config.home.homeDirectory}/${baseDir}"; in { meta.maintainers = [ maintainers.eyjhb ]; @@ -23,7 +24,7 @@ in { }; }; - config = mkIf cfg.enable (mkMerge [{ + config = mkIf cfg.enable { home.packages = [ pkgs.dropbox-cli ]; systemd.user.services.dropbox = { @@ -32,11 +33,10 @@ in { Install = { WantedBy = [ "default.target" ]; }; Service = { - Environment = [ "HOME=${config.home.homeDirectory}/${baseDir}" ]; + Environment = [ "HOME=${homeBaseDir}" ]; Type = "forking"; - PIDFile = - "${config.home.homeDirectory}/${baseDir}/.dropbox/dropbox.pid"; + PIDFile = "${homeBaseDir}/.dropbox/dropbox.pid"; Restart = "on-failure"; PrivateTmp = true; @@ -46,10 +46,9 @@ in { ExecReload = "${pkgs.coreutils.out}/bin/kill -HUP $MAINPID"; ExecStop = "${dropboxCmd} stop"; ExecStart = let - script = pkgs.writeScript "dropboxInit" '' - #!/bin/sh - if [ ! -f $HOME/.dropbox-dist/VERSION ]; then - ${pkgs.coreutils}/bin/yes | ${pkgs.coreutils}/bin/env -i HOME="$HOME" ${pkgs.dropbox-cli}/bin/dropbox update + script = pkgs.writeShellScript "dropboxInit" '' + if [[ ! -f $HOME/.dropbox-dist/VERSION ]]; then + ${pkgs.coreutils}/bin/yes | ${dropboxCmd} update fi ${dropboxCmd} start @@ -58,17 +57,19 @@ in { }; }; - home.activation.dropbox = let dag = lib.hm.dag; - in dag.entryAfter [ "writeBoundary" ] '' + home.activation.dropbox = hm.dag.entryAfter [ "writeBoundary" ] '' # ensure we have the dirs we need - $DRY_RUN_CMD ${pkgs.coreutils}/bin/mkdir -p ${config.home.homeDirectory}/${baseDir}/.dropbox - $DRY_RUN_CMD ${pkgs.coreutils}/bin/mkdir -p ${config.home.homeDirectory}/${baseDir}/.dropbox-dist - $DRY_RUN_CMD ${pkgs.coreutils}/bin/mkdir -p ${config.home.homeDirectory}/${baseDir}/Dropbox + $DRY_RUN_CMD ${pkgs.coreutils}/bin/mkdir $VERBOSE_ARG -p ${homeBaseDir}{config.home.homeDirectory}/${baseDir}/{.dropbox,.dropbox-dist,Dropbox} # symlink them as needed - if [ ! -d ${config.home.homeDirectory}/.dropbox ]; then $DRY_RUN_CMD ${pkgs.coreutils}/bin/ln -s ${config.home.homeDirectory}/${baseDir}/.dropbox ${config.home.homeDirectory}/.dropbox; fi - # if [ ! -d ${config.home.homeDirectory}/.dropbox-dist ]; then $DRY_RUN_CMD ${pkgs.coreutils}/bin/ln -s ${config.home.homeDirectory}/${baseDir}/.dropbox-dist ${config.home.homeDirectory}/.dropbox-dist; fi - if [ ! -d ${cfg.path} ]; then $DRY_RUN_CMD ${pkgs.coreutils}/bin/ln -s ${config.home.homeDirectory}/${baseDir}/Dropbox ${cfg.path}; fi + 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 ''; - }]); + }; } diff --git a/tests/default.nix b/tests/default.nix index 4e9d05a3636..34d111c32ab 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -75,6 +75,7 @@ import nmt { ./modules/programs/abook ./modules/programs/autorandr ./modules/services/emacs + ./modules/services/dropbox ./modules/programs/firefox ./modules/programs/getmail ./modules/services/lieer diff --git a/tests/modules/services/dropbox/basic-configuration.nix b/tests/modules/services/dropbox/basic-configuration.nix index 59d7c773a87..96a17cd7384 100644 --- a/tests/modules/services/dropbox/basic-configuration.nix +++ b/tests/modules/services/dropbox/basic-configuration.nix @@ -6,5 +6,20 @@ enable = true; path = "${config.home.homeDirectory}/dropbox"; }; + + nixpkgs.overlays = [ + (self: super: { + dropbox-cli = pkgs.writeScriptBin "dummy-dropbox-cli" "" // { + outPath = "@dropbox-cli@"; + }; + }) + ]; + + nmt.script = '' + serviceFile=home-files/.config/systemd/user/dropbox.service + + assertFileExists $serviceFile + ''; + }; } From 6010a386b254f2063ce8098aae7838493c1e7a94 Mon Sep 17 00:00:00 2001 From: eyjhb Date: Thu, 9 Jul 2020 00:17:51 +0200 Subject: [PATCH 3/3] services.dropbox: init Ability to control Dropbox daemon, if it should start and where to place the files. --- modules/modules.nix | 1 + modules/services/dropbox.nix | 9 ++++----- tests/default.nix | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/modules/modules.nix b/modules/modules.nix index a7054f38179..1b9020bf0e9 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -126,6 +126,7 @@ let (loadModule ./services/cbatticon.nix { condition = hostPlatform.isLinux; }) (loadModule ./services/clipmenu.nix { condition = hostPlatform.isLinux; }) (loadModule ./services/compton.nix { }) + (loadModule ./services/dropbox.nix { condition = hostPlatform.isLinux; }) (loadModule ./services/dunst.nix { }) (loadModule ./services/dwm-status.nix { condition = hostPlatform.isLinux; }) (loadModule ./services/emacs.nix { condition = hostPlatform.isLinux; }) diff --git a/modules/services/dropbox.nix b/modules/services/dropbox.nix index 00becb17496..37c47368543 100644 --- a/modules/services/dropbox.nix +++ b/modules/services/dropbox.nix @@ -5,8 +5,7 @@ with lib; let cfg = config.services.dropbox; baseDir = ".dropbox-hm"; - dropboxCmd = '' - ${pkgs.coreutils}/bin/env -i HOME="$HOME" ${pkgs.dropbox-cli}/bin/dropbox''; + dropboxCmd = "${pkgs.dropbox-cli}/bin/dropbox"; homeBaseDir = "${config.home.homeDirectory}/${baseDir}"; in { meta.maintainers = [ maintainers.eyjhb ]; @@ -28,7 +27,7 @@ in { home.packages = [ pkgs.dropbox-cli ]; systemd.user.services.dropbox = { - Unit = { Description = "Starting dropbox"; }; + Unit = { Description = "dropbox"; }; Install = { WantedBy = [ "default.target" ]; }; @@ -43,7 +42,7 @@ in { ProtectSystem = "full"; Nice = 10; - ExecReload = "${pkgs.coreutils.out}/bin/kill -HUP $MAINPID"; + ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; ExecStop = "${dropboxCmd} stop"; ExecStart = let script = pkgs.writeShellScript "dropboxInit" '' @@ -59,7 +58,7 @@ in { 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}{config.home.homeDirectory}/${baseDir}/{.dropbox,.dropbox-dist,Dropbox} + $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 diff --git a/tests/default.nix b/tests/default.nix index 34d111c32ab..46c8bbb3584 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -74,6 +74,7 @@ import nmt { ./modules/misc/xsession ./modules/programs/abook ./modules/programs/autorandr + ./modules/services/dropbox ./modules/services/emacs ./modules/services/dropbox ./modules/programs/firefox