Home

Exporting Fish aliases for faster startup times

It turns out Fish aliases are quite slow, and often recommended against including in config.fish. The following works around that by lazy-loading them as functions while still allowing a single aliases file that can be shared among other POSIX shells:

source $HOME/.aliases

for alias in (grep -o "^alias \b\w+\b" $HOME/.aliases | cut -c 7-)
    funcsave $alias
end

This can be run as-needed, or automatically with a terminal setup using tmux as described in this post. For example, I have this in my config file:

if status is-login
    if test -f $HOME/.aliases
        source $HOME/.aliases

        # Export aliases for lazy-loading in child shells.
        for alias in (grep -o "^alias \b\w+\b" $HOME/.aliases | cut -c 7-)
            funcsave $alias
        end
    end

    if test -f $HOME/.functions.fish
        source $HOME/.functions.fish

        # Export functions for lazy-loading in child shells.
        for func in (grep -o "function \b\w+\b" $HOME/.aliases.fish | cut -c 10-)
            funcsave $func
        end
    end
end

My full fish config is available here.