diff options
| -rw-r--r-- | modules/home-manager/personal/programs/devenv.nix | 55 | ||||
| -rw-r--r-- | pkgs/lib/home-manager/default.nix | 2 |
2 files changed, 56 insertions, 1 deletions
diff --git a/modules/home-manager/personal/programs/devenv.nix b/modules/home-manager/personal/programs/devenv.nix index dbe5aab..29494f9 100644 --- a/modules/home-manager/personal/programs/devenv.nix +++ b/modules/home-manager/personal/programs/devenv.nix @@ -7,6 +7,40 @@ let cfg = config.personal.programs.devenv; importedDevenv = pkgs ? devenv; + devenvUpdateScript = pkgs.callPackage ( + { + bash, + devenv, + direnv, + findutils, + git, + gnugrep, + }: + pkgs.writeShellApplication { + name = "devenv-update"; + + runtimeInputs = [ + bash + devenv + direnv + findutils + git + gnugrep + ]; + + text = '' + find . -name '.envrc' -execdir bash -c ' + if [[ $(direnv status | grep "Found RC allowed 0") ]] + then + echo Updating shell $(pwd)... + devenv update + devenv shell echo Shell $(pwd) updated! + echo + fi + ' \; + ''; + } + ) { devenv = pkgs.devenv; }; in { options.personal.programs.devenv.enable = lib.mkEnableOption "devenv"; @@ -19,5 +53,26 @@ in } ]; home.packages = lib.optional importedDevenv pkgs.devenv; + + systemd.user = pkgs.personal.lib.homeManager.serviceWithTimer "devenv-update" { + Unit = { + Description = "Update devenv shells"; + After = [ + "network-online.target" + ]; + }; + Service = { + Type = "oneshot"; + WorkingDirectory = "${config.home.homeDirectory}"; + ExecStart = "${devenvUpdateScript}/bin/devenv-update"; + }; + Timer = { + Persistent = true; + OnCalendar = "daily"; + }; + Install = { + WantedBy = [ "default.target" ]; + }; + }; }; } diff --git a/pkgs/lib/home-manager/default.nix b/pkgs/lib/home-manager/default.nix index e07e0b8..91149d6 100644 --- a/pkgs/lib/home-manager/default.nix +++ b/pkgs/lib/home-manager/default.nix @@ -11,7 +11,7 @@ ... }@config: { - services.${name} = { inherit (config) Unit Install Service; }; + services.${name} = { inherit (config) Unit Service; }; timers.${name} = { inherit (config) Unit Install; Timer = config.Timer // { |
