{ config, pkgs, lib, ... }: let inherit (lib) getAttrs removePrefix; nixfiles = config.home.homeDirectory + "/projects/alin.ovh/nixfiles"; direct_symlink = path: config.lib.file.mkOutOfStoreSymlink "${nixfiles}/${removePrefix "/" path}"; toPluginModule = getAttrs [ "name" "src" ]; in { home.shell.enableFishIntegration = true; programs.fish = { enable = true; plugins = map toPluginModule ( with pkgs.fishPlugins; [ done fzf-fish fifc autopair colored-man-pages fishbang sponge ] ++ [ pkgs.personal.fishPlugins.ghq pkgs.personal.fishPlugins.hydro ] ); shellAliases = { hist-freq-lines = lib.mkForce "history | sort | uniq -c | sort -gr | head -n100 | less"; hist-freq-commands = lib.mkForce "history | cut -d' ' -f 1 | sort | uniq -c | sort -gr | head -n100 | less"; fadd = "funced --save"; fed = "funced --save"; }; shellAbbrs = { gcm = { setCursor = true; expansion = "git commit -m '%'"; }; }; }; xdg.configFile."fish/home-manager/completions" = { recursive = true; source = direct_symlink "/user/settings/fish/completions"; }; xdg.configFile."fish/home-manager/functions" = { recursive = true; source = direct_symlink "/user/settings/fish/functions"; }; xdg.configFile."fish/per-term" = { recursive = true; source = direct_symlink "/user/settings/fish/per-term"; }; xdg.configFile."fish/conf.d" = { recursive = true; source = "${nixfiles}/user/settings/fish/conf.d"; }; programs.nix-your-shell = { enable = true; nix-output-monitor.enable = true; enableFishIntegration = true; }; programs.fish.shellInit = '' set fish_function_path $fish_function_path[1] ${config.xdg.configHome}/fish/home-manager/functions $fish_function_path[2..-1] set --prepend fish_complete_path ${config.xdg.configHome}/fish/home-manager/complete ''; home.activation.sponge-configure = '' run ${lib.getExe config.programs.fish.package} -c ' set --universal sponge_delay 60 ' ''; }