Search code examples
tmuxfish

tmux + fish shell; conf being sourced twice


When I start tmux, my ~/.config/fish/config.fish seems to be sourced again. This means any set PATH foo $PATH statements in my config get executed again, which leads to my PATH variable having duplicate entries in it. This isn't drastic, but it is annoying to ECHO path. when it is so long

How can I prevent this problem?

EDIT: the only fish related entires in my tmux file are

#fix vim set -g default-shell $SHELL set -g default-command "reattach-to-user-namespace -l ${SHELL}" set -g default-command 'reattach-to-user-namespace $SHELL --login'


Solution

  • The ~/.config/fish/config.fish config file is read by every new fish instance. There are several ways to achieve what you're asking. One option is to always set PATH from scratch. That is, don't modify the existing path by appending or prepending to it but instead set it to exactly what you want for a given machine. Something along the lines of

    set -gx PATH $HOME/bin /usr/local/bin /usr/bin/ /bin
    test -d /opt/X11/bin
    and set PATH $PATH /opt/X11/bin
    

    Another option is to add directories only if they aren't already in the path:

    contains /usr/local/bin $PATH
    or set PATH /usr/local/bin $PATH
    

    Or only do the modification if not inside a tmux session:

    if not set -q TMUX
        set PATH /argle/bargle $PATH
    end