Fish: Difference between revisions

DHCP (talk | contribs)
m update a link to use https; refine highlighted text for the gentoo wiki url
DHCP (talk | contribs)
Setting fish as default shell: Update suggested .bashrc to use simpler, more correct script to drop into FIsh. Discussion talk page: Talk:Fish#Suggested_bashrc_in_Fish#Setting_fish_as_default_shell_needs_revision. This script it adapted from ArchWiki (where I help to maintain it). I've also replaced mention of gentoo wiki with the Arch solution, but we didn't use the version from gentoo wiki anyway.
Line 135: Line 135:
=== Setting fish as default shell ===
=== Setting fish as default shell ===


Using fish as the the login shell can cause compatibility issues. For example, certain recovery environments such as systemd's emergency mode to be completely broken when fish was set as the login shell. This  limitation is noted on the [https://wiki.gentoo.org/wiki/Fish#Caveats Gentoo wiki]. There they present an alternative, keeping bash as the system shell but having it exec fish when run interactively.
Using fish as the the login shell can cause compatibility issues. For example, certain recovery environments such as systemd's emergency mode to be completely broken when fish was set as the login shell. ArchWiki presents an [https://wiki.archlinux.org/title/Fish#Modify_.bashrc_to_drop_into_fish alternative solution], keeping bash as the system shell but having it exec fish when run interactively.


{{Expansion}}
{{Expansion}}
Line 145: Line 145:
programs.bash = {
programs.bash = {
   interactiveShellInit = ''
   interactiveShellInit = ''
     if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
    # "check if parent process is not fish" && "make nested shells work properly"
    then
     if grep -qv fish /proc/$PPID/comm && [[ $SHLVL == [12] ]]; then
      shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
        # set $SHELL for better integration with programs like nix shell, tmux, etc.
      exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
        SHELL=${pkgs.fish}/bin/fish exec fish
     fi
     fi
   '';
   '';
Line 155: Line 155:
}}
}}


Note that if you use the copy button to the right of the above code block, there will be a unicode space before the <code>!=</code> on line 3 of the snippet that you will need to change to a non-unicode space before executing this in your shell.
For a more detailed explanation, please see the [https://wiki.archlinux.org/title/Fish#Modify_.bashrc_to_drop_into_fish aforementioned ArchWiki page].


'''Setting fish as default for Gnome Console'''
'''Setting fish as default for Gnome Console'''