Skip to content

Instantly share code, notes, and snippets.

@davidbarral
Last active November 22, 2017 10:36
Show Gist options
  • Save davidbarral/91db3752c160a3845caa818d0aa821c6 to your computer and use it in GitHub Desktop.
Save davidbarral/91db3752c160a3845caa818d0aa821c6 to your computer and use it in GitHub Desktop.
Poor man npmenv solution for fish (Use multiple .npmrc profiles)
# Completions for npmenv.fish
function __fish_npmenv_needs_command
set cmd (commandline -opc)
if [ (count $cmd) -eq 1 -a $cmd[1] = 'npmenv' ]
return 0
end
return 1
end
function __fish_npmenv_using_command
set cmd (commandline -opc)
if [ (count $cmd) -gt 1 ]
if [ $argv[1] = $cmd[2] ]
return 0
end
end
return 1
end
function __fish_npmenv_commands
for c in global init version versions version-name show help
echo $c
end
end
function __fish_npmenv_global_completions
for v in (ls $HOME/.npmenv)
echo $v
end
end
complete -f -c npmenv -n '__fish_npmenv_needs_command' -a '(__fish_npmenv_commands)'
complete -f -c npmenv -n "__fish_npmenv_using_command global" -a "(__fish_npmenv_global_completions)"
complete -f -c npmenv -n "__fish_npmenv_using_command help" -a "(__fish_npmenv_commands)"
# shell function to manage multiple .npmrc ala XXXenv
function npmenv
set -l command "$argv[1]"
if test (count $argv) -gt 1
set subcommand "$argv[2]"
end
switch $command
case global
_npmenv_command_global $subcommand
case init
_npmenv_command_init
case version
_npmenv_command_version
case version-name
_npmenv_command_version_name
case versions
_npmenv_command_versions
case show
_npmenv_command_show
case help
_npmenv_help_command $subcommand
case "*"
echo "npmenv 1.0.0"
_npmenv_usage
end
end
function _npmenv_command_global
set -l v "$argv[1]"
if test ! $v = ""
_npmenv_create_version $v
_npmenv_link_version $v
end
echo (_npmenv_command_version)
end
function _npmenv_create_version
set -l v $argv[1]
if test ! -f $HOME/.npmenv/$v
echo "Creating $v version"
touch $HOME/.npmenv/$v
end
end
function _npmenv_link_version
set -l v $argv[1]
ln -nsf $HOME/.npmenv/$v $HOME/.npmrc
end
function _npmenv_command_init
if test -f $HOME/.npmrc
echo "Your previous .npmrc cofig has been renamed to .npmrc.old"
mv $HOME/.npmrc $HOME/.npmrc.old
end
if test ! -d $HOME/.npmenv
echo "Creating $HOME/.npmenv"
mkdir -p $HOME/.npmenv
end
_npmenv_create_version "default"
_npmenv_link_version "default"
echo (_npmenv_command_version)
end
function _npmenv_command_version
echo (_npmenv_command_version_name)" (set by "(_npmenv_current_version_file)")"
end
function _npmenv_command_version_name
echo (basename (_npmenv_current_version_file))
end
function _npmenv_command_versions
set -l versions (ls $HOME/.npmenv/)
set -l current (_npmenv_command_version_name)
for v in $versions
if test $v = $current
echo "* "(_npmenv_command_version)
else
echo " "$v
end
end
end
function _npmenv_command_show
echo (_npmenv_command_version)
echo "-----"
cat $HOME/.npmrc
echo
end
function _npmenv_help_command
set -l command "$argv[1]"
echo $command
switch $command
case global
echo "Usage: npmenv global <version>"
echo
echo "Sets the global .npmrc version. If <version> does not match"
echo "an existing version it will automatically created"
echo
case init
echo "Usage: npmenv init"
echo
echo "Setups the npmenv environment creating as needed the .npmenv"
echo "folder and the default version which will also be selected as"
echo "the current version"
echo
case version
echo "Usage: npmenv version"
echo
echo "Shows the currently selected .npmrc version and how it was"
echo "selected. To obtain only the version string use 'npmenv "
echo "version-name'"
echo
case version-name
echo "Usage: npmenv version-name"
echo
echo "Shows the current .npmrc version"
echo
case versions
echo "Usage: npmenv versions"
echo
echo "Lists all versions found i '\$HOME/.npmenv'"
echo
case show
echo "Usage: npmenv show"
echo
echo "Shows the current .npmrc version and its contents"
echo
case help
echo "Usage: npmenv help COMMAND"
echo
echo "Displays a command help"
echo
case "*"
_npmenv_usage
end
end
function _npmenv_usage
echo "Usage: npmenv <command> [<args>]"
echo
echo "Som usefule npmenv commands are":
echo " global Set the .npmrc to use"
echo " init Set ups the npmenv environment"
echo " version Show the current version in use"
echo " versions Show all the available versions"
echo " show Show the current version contents"
echo
echo "See `npmenv help <command> for information on a specific command"
echo
end
function _npmenv_current_version_file
echo (readlink $HOME/.npmrc)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment