From aa55de1820a5ae27ac32b9b0e33b18ae592b46fb Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Mon, 17 Aug 2026 22:27:54 +0200 Subject: modules/direnv: Implement pre-cached devshells That means, that the devshells are only build once and centrally updated. Ideally, they would be built upon system update, but I haven't figured out a way to run `nix print-dev-env` in a nix build sandbox yet (and hope, that it's not necessary anymore once, that functionality moves to nixpkgs' `mkShell`). --- modules/by-name/di/direnv/module.nix | 39 +++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 10 deletions(-) (limited to 'modules/by-name/di/direnv/module.nix') diff --git a/modules/by-name/di/direnv/module.nix b/modules/by-name/di/direnv/module.nix index 363f5cea..743375af 100644 --- a/modules/by-name/di/direnv/module.nix +++ b/modules/by-name/di/direnv/module.nix @@ -11,26 +11,45 @@ config, lib, pkgs, + sources, ... }: let cfg = config.soispha.programs.direnv; + + devshells = sources.loadFlake "devshells"; + + pre-cache = pkgs.runCommand "pre-cache.sh" {} '' + cat "${./pre-cache.sh}" > $out + + substituteInPlace $out \ + --replace-fail "%DEVSHELLS_REPO%" "${devshells}" + ''; in { options.soispha.programs.direnv = { enable = lib.mkEnableOption "direnv"; }; - config.home-manager.users.soispha.programs.direnv = lib.mkIf cfg.enable { - enable = true; - - nix-direnv = { + config.home-manager.users.soispha = lib.mkIf cfg.enable { + programs.direnv = { enable = true; - package = pkgs.nix-direnv.override {nix = config.nix.package;}; - }; - config = { - warn_timeout = 0; - # strict_env = true; - # disable_stdin = true; + package = pkgs.direnv-patched; + + nix-direnv = { + enable = true; + package = pkgs.nix-direnv.override {nix = config.nix.package;}; + }; + + config = { + warn_timeout = 0; + strict_env = true; + # disable_stdin = true; + }; + }; + xdg.configFile = { + "direnv/lib/hm-pre-cache.sh" = { + source = pre-cache; + }; }; }; } -- cgit v1.3.1