summaryrefslogtreecommitdiff
path: root/modules/home-manager/personal
diff options
context:
space:
mode:
Diffstat (limited to 'modules/home-manager/personal')
-rw-r--r--modules/home-manager/personal/programs/devenv.nix55
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" ];
+ };
+ };
};
}