Skip to content

Instantly share code, notes, and snippets.

@dpeachpeach
Forked from idleberg/fish_shell.md
Last active September 12, 2022 15:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dpeachpeach/07444779df15cadc87ef88d8b381c4c8 to your computer and use it in GitHub Desktop.
Save dpeachpeach/07444779df15cadc87ef88d8b381c4c8 to your computer and use it in GitHub Desktop.
Instructions on how to install Fish shell on Mac OS X, including Oh My Fish!. Also includes several useful functions.

Installation

  1. Install fish via Brew
  2. Optionally install Oh My Fish!
  3. Add fish to known shells
  4. Set default shell to fish
brew install fish  
curl -L https://get.oh-my.fish | fish

fish will have a different path upon installation based on whether your Mac uses x86 or ARM architecture.

x86 architecture

sudo bash -c 'echo /usr/local/bin/fish >> /etc/shells'
chsh -s /usr/local/bin/fish

M1 architecture

sudo bash -c 'echo /opt/homebrew/bin/fish >> /etc/shells'
chsh -s /opt/homebrew/bin/fish

Functions

Add any the following functions to ~/.config/fish/config.fish

sudo bang bang

Repeat previous command with administrator rights

function sudo
    if test "$argv" = !!
        eval command sudo $history[1]
    else
        command sudo $argv
    end
end

cd..

Shortcut to browse parent directory

function ..
    cd ..
end

And how often did you ever type cd.. instead of cd ..? Let's extend our previous function:

function cd..
    cd ..
end

dropbox

Quickly access your DropBox folder

function db
	set user $HOME
    cd "$HOME/Dropbox"
end

docs

Quickly access your documents folder

function docs    
	switch (uname -s)
    case Darwin Linux FreeBSD NetBSD DragonFly
		set documents $HOME/Documents
	case '*'
		set cygwin (eval uname -o)  
    		if test $cygwin = "Cygwin"
    			set documents (eval cygpath -O)
    		end    
    		return
    	end    
    	cd $documents
    end
end

os

Return platform name

function os
    switch (uname -s)
    case Darwin Linux FreeBSD NetBSD DragonFly
        eval command uname -s
    case "*"
        switch (uname -s)
        case Cygwin
            eval command uname -s
        case "*"
            eval echo "undefined"
        end
    end
end

git tag

Simplify the creation and deletion of Git tags

function tag
	if test $argv[1] = "-d"
		# delete tag if provided
		if test $argv[2]
			eval command git tag -d $argv[2]
			command git push origin :refs/tags/$argv[2]
		end
	else
		# create new tag and push
    	eval command git tag -a $argv[1] -m $argv[1]
    	command git push --tags
    end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment