### # Loader for Oh My Fish! packages # Loads all packages stored in ~/.config/fish/pkgs/ # # Inspired by https://github.com/jorgebucaran/fisher ### set -q pkgs_path; or set -g pkgs_path ~/.config/fish/pkgs # also search for functions/completions/binaries/manpages within packages set fish_function_path $fish_function_path[1] $pkgs_path/.functions $pkgs_path/*/functions $fish_function_path[2..-1] set fish_complete_path $fish_complete_path[1] $pkgs_path/*/completions $fish_complete_path[2..-1] set -x PATH $pkgs_path/*/bin $PATH set -x MANPATH $pkgs_path/*/man $MANPATH # load package key bindings when needed if functions -q fish_user_key_bindings functions -c fish_user_key_bindings fish_user_key_bindings_copy end function fish_user_key_bindings for file in $pkgs_path/*/key_bindings.fish builtin source $file 2>&1 > /dev/null end if functions -q fish_user_key_bindings_copy fish_user_key_bindings_copy end end # load custom config from packages for file in $pkgs_path/*/conf.d/*.fish $pkgs_path/*/init.fish builtin source $file 2> /dev/null end # ensure that the prompt is loaded (doesn't autoload for some reason) if test -f $pkgs_path/.functions/fish_prompt.fish builtin source $pkgs_path/.functions/fish_prompt.fish 2> /dev/null end # collect all functions on the top-level of packages into $pkgs_path/.functions # (run by Ansible after packages have been updated) function _pkgs_collect_functions # clear the functions directory as we rebuild it from scratch if test -d $pkgs_path/.functions command rm -rf $pkgs_path/.functions end command mkdir -p $pkgs_path/.functions # consider all fish files in the top-level of each package for src in $pkgs_path/*/*.fish set -l package (command basename (command dirname $src)) set -l filename (command basename $src) # we don't care about uninstall.fish; # init.fish and key_bindings.fish are dynamically handled on runtime above if not contains $filename {init,key_bindings,uninstall}.fish # create a relative symlink command ln -sf ../$package/$filename $pkgs_path/.functions/$filename end end end