diff --git a/modules/programs/fish.nix b/modules/programs/fish.nix index a3aafa658..0d0364b7e 100644 --- a/modules/programs/fish.nix +++ b/modules/programs/fish.nix @@ -288,32 +288,37 @@ in end '';}; }) cfg.functions; - } ( - let - wrappedPkgVersion = lib.getVersion pkgs.fish; - wrappedPkgName = lib.removeSuffix "-${wrappedPkgVersion}" pkgs.fish.name; - dependencies = concatMap (p: p.dependencies) cfg.plugins; - combinedPluginDrv = pkgs.buildEnv { - name = "${wrappedPkgName}-plugins-${wrappedPkgVersion}"; - paths = cfg.plugins; - postBuild = '' - touch $out/setup.fish - if [ -d $out/functions ]; then - echo "set fish_function_path \$fish_function_path[1] $out/functions \$fish_function_path[2..-1]" >> $out/setup.fish - fi + } - if [ -d $out/completions ]; then - echo "set fish_complete_path \$fish_complete_path[1] $out/completions \$fish_complete_path[2..-1]" >> $out/setup.fish - fi + # Plugins are all sources together in a conf.d file as this allows + # the original source to be undisturbed. + (mkIf (length cfg.plugins > 0) { + xdg.configFile."fish/conf.d/99plugins.fish".text = concatStrings + (map (plugin: '' + # Plugin ${plugin.name} + if test -d ${plugin.src}/functions + set fish_function_path $fish_function_path[1] ${plugin.src}/functions $fish_function_path[2..-1] + end - if [ -d $out/conf.d ]; then - echo "source $out/conf.d/*.fish" >> $out/setup.fish - fi - ''; - }; - in mkIf (length cfg.plugins > 0) { - xdg.configFile."fish/conf.d/99plugins.fish".source = "${combinedPluginDrv}/setup.fish"; - home.packages = dependencies; - })]); + if test -d ${plugin.src}/completions + set fish_complete_path $fish_function_path[1] ${plugin.src}/completions $fish_complete_path[2..-1] + end + + if test -d ${plugin.src}/conf.d + source ${plugin.src}/conf.d/*.fish + end + + if test -f ${plugin.src}/key_bindings.fish + source ${plugin.src}/key_bindings.fish + end + + if test -f ${plugin.src}/init.fish + source ${plugin.src}/init.fish + end + + '' + ) cfg.plugins); + }) + ]); }