diff options
| author | aristote <quentin.aristote@irif.fr> | 2025-07-29 18:09:28 +0200 |
|---|---|---|
| committer | aristote <quentin.aristote@irif.fr> | 2025-07-29 18:26:43 +0200 |
| commit | 07cb81a1d95e15e7c864dcfd912fc2a22d65d115 (patch) | |
| tree | bd51ab75c4e492d890ad88f59df791a58097c92a /modules/home-manager/personal/programs | |
| parent | fc019d789523ce5f89436b8dbc458cf3b79abf43 (diff) | |
home: devenv: update envs when nixos-upgrading
Diffstat (limited to 'modules/home-manager/personal/programs')
| -rw-r--r-- | modules/home-manager/personal/programs/devenv.nix | 55 |
1 files changed, 55 insertions, 0 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" ]; + }; + }; }; } |
