diff --git a/home-manager/common.nix b/home-manager/common.nix index 1f7f021..9f71873 100644 --- a/home-manager/common.nix +++ b/home-manager/common.nix @@ -69,6 +69,10 @@ inputs: { enable = true; starship = true; zoxide = true; + direnv = true; + initExtra = '' + use readline-binding + ''; }; programs.firefox = { diff --git a/home-manager/modules/elvish.nix b/home-manager/modules/elvish.nix index 2726ec3..a8f242c 100644 --- a/home-manager/modules/elvish.nix +++ b/home-manager/modules/elvish.nix @@ -34,6 +34,14 @@ in { ''; }; + direnv = mkOption { + type = types.bool; + default = false; + description = '' + Enable direnv integration for elvish + ''; + }; + package = mkOption { type = types.package; default = pkgs.elvish; @@ -61,12 +69,15 @@ in { xdg.configFile."elvish/rc.elv".text = cfg.initExtra; programs.bash.enable = mkIf cfg.defaultFromBash true; - programs.bash.initExtra = mkIf cfg.defaultFromBash "exec elvish"; + programs.bash.initExtra = mkIf cfg.defaultFromBash '' + exec elvish + ''; + + programs.starship.enableBashIntegration = mkIf cfg.defaultFromBash false; programs.starship.enable = mkIf cfg.starship true; programs.zoxide.enable = mkIf cfg.zoxide true; - - programs.starship.enableBashIntegration = mkIf cfg.defaultFromBash false; + programs.direnv.enable = mkIf cfg.direnv true; programs.elvish.initExtra = mkMerge [ (mkIf cfg.starship '' @@ -77,6 +88,9 @@ in { (mkIf cfg.zoxide '' eval (${config.programs.zoxide.package}/bin/zoxide init elvish | slurp) '') + (mkIf cfg.direnv '' + eval (${pkgs.direnv}/bin/direnv hook elvish | ${pkgs.gnused}/bin/sed 's/except/catch/' | slurp) + '') ]; }; }