function __fish_setup_on_tty_login --description "Set up environment on tty login"
    # We set it up in this order as what we setup first, will appear later in
    # the path.

    # See commit 7779044 for why this is required.
    if test -d /usr/lib/rustup/bin
        set -gxp PATH /usr/lib/rustup/bin
    end

    if test -d {$HOME}/.local/share/pnpm
        set -gx PNPM_HOME {$HOME}/.local/share/pnpm
        set -gxp PATH {$HOME}/.local/share/pnpm
    end

    for extra_path in ~/.{cabal,cargo,ghcup,go,local}/bin
        if test -d "$extra_path"
            set -gxp PATH "$extra_path"
        end
    end

    if test -d {$HOME}/.go
        set -gx GOBIN {$HOME}/.go/bin
        set -gx GOPATH {$HOME}/.go
    end

    if test -d /var/lib/flatpak
        # https://github.com/fish-shell/fish-shell/issues/7485#issuecomment-728984689
        # https://wiki.archlinux.org/title/Flatpak#Adding_Flatpak_.desktop_files_to_your_menu
        set -l xdg_data_home $XDG_DATA_HOME ~/.local/share
        set -gx --path XDG_DATA_DIRS $xdg_data_home[1]/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share

        for flatpakdir in ~/.local/share/flatpak/exports/bin /var/lib/flatpak/exports/bin
            if test -d $flatpakdir
                contains $flatpakdir $PATH; or set -a PATH $flatpakdir
            end
        end
    end

    # Temporary directory for GStreamer dot files
    mkdir -p /tmp/gst-dot

    # Needed for silencing some warnings from Sway. Will not work with systemd
    # environment.d.
    set -gx WLR_NO_HARDWARE_CURSORS 1

    # Needed for work
    set -gx ENV qa-tunnel

    # Password Store
    set -gx PASSWORD_STORE_ENABLE_EXTENSIONS true
    set -gx PASSWORD_STORE_GENERATED_LENGTH 16
    set -gx PASSWORD_STORE_CLIP_TIME 20

    # Ripgrep requires this environment variable for knowing the config file path
    set -gx RIPGREP_CONFIG_PATH {$HOME}/.config/ripgrep/ripgreprc

    # Required for all environment variables to be set correctly, especially
    # in tmux session service.
    dbus-update-activation-environment --systemd --all
end

# Instead of tty check, we would have liked to do this using status is-login
# check but for some reason that does not work?
set --local TTY1 (tty)
[ "$TTY1" = /dev/tty1 ] && __fish_setup_on_tty_login
