Fisher (plugin manager for fish) installed
This commit is contained in:
		
							parent
							
								
									b3bd3a4683
								
							
						
					
					
						commit
						142fd7eaa4
					
				
					 4 changed files with 252 additions and 2 deletions
				
			
		
							
								
								
									
										7
									
								
								.config/fish/completions/fisher.fish
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.config/fish/completions/fisher.fish
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| complete --command fisher --exclusive --long help --description "Print help" | ||||
| complete --command fisher --exclusive --long version --description "Print version" | ||||
| complete --command fisher --exclusive --condition __fish_use_subcommand --arguments install --description "Install plugins" | ||||
| complete --command fisher --exclusive --condition __fish_use_subcommand --arguments update --description "Update installed plugins" | ||||
| complete --command fisher --exclusive --condition __fish_use_subcommand --arguments remove --description "Remove installed plugins" | ||||
| complete --command fisher --exclusive --condition __fish_use_subcommand --arguments list --description "List installed plugins matching regex" | ||||
| complete --command fisher --exclusive --condition "__fish_seen_subcommand_from update remove" --arguments "(fisher list)" | ||||
|  | @ -1,4 +1,4 @@ | |||
| if status is-interactive | ||||
|     # Commands to run in interactive sessions can go here | ||||
|     zoxide init fish | source | ||||
|   # Commands to run in interactive sessions can go here | ||||
|   zoxide init fish | source | ||||
| end | ||||
|  |  | |||
|  | @ -1,6 +1,9 @@ | |||
| # This file contains fish universal variable definitions. | ||||
| # VERSION: 3.0 | ||||
| SETUVAR __fish_initialized:3400 | ||||
| SETUVAR _fisher_jorgebucaran_2F_fisher_files:\x7e/\x2econfig/fish/functions/fisher\x2efish\x1e\x7e/\x2econfig/fish/completions/fisher\x2efish | ||||
| SETUVAR _fisher_plugins:jorgebucaran/fisher | ||||
| SETUVAR _fisher_upgraded_to_4_4:\x1d | ||||
| SETUVAR fish_color_autosuggestion:brblack | ||||
| SETUVAR fish_color_cancel:\x2dr | ||||
| SETUVAR fish_color_command:blue | ||||
|  |  | |||
							
								
								
									
										240
									
								
								.config/fish/functions/fisher.fish
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										240
									
								
								.config/fish/functions/fisher.fish
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,240 @@ | |||
| function fisher --argument-names cmd --description "A plugin manager for Fish" | ||||
|     set --query fisher_path || set --local fisher_path $__fish_config_dir | ||||
|     set --local fisher_version 4.4.5 | ||||
|     set --local fish_plugins $__fish_config_dir/fish_plugins | ||||
| 
 | ||||
|     switch "$cmd" | ||||
|         case -v --version | ||||
|             echo "fisher, version $fisher_version" | ||||
|         case "" -h --help | ||||
|             echo "Usage: fisher install <plugins...>  Install plugins" | ||||
|             echo "       fisher remove  <plugins...>  Remove installed plugins" | ||||
|             echo "       fisher update  <plugins...>  Update installed plugins" | ||||
|             echo "       fisher update                Update all installed plugins" | ||||
|             echo "       fisher list    [<regex>]     List installed plugins matching regex" | ||||
|             echo "Options:" | ||||
|             echo "       -v, --version  Print version" | ||||
|             echo "       -h, --help     Print this help message" | ||||
|             echo "Variables:" | ||||
|             echo "       \$fisher_path  Plugin installation path. Default: $__fish_config_dir" | string replace --regex -- $HOME \~ | ||||
|         case ls list | ||||
|             string match --entire --regex -- "$argv[2]" $_fisher_plugins | ||||
|         case install update remove | ||||
|             isatty || read --local --null --array stdin && set --append argv $stdin | ||||
| 
 | ||||
|             set --local install_plugins | ||||
|             set --local update_plugins | ||||
|             set --local remove_plugins | ||||
|             set --local arg_plugins $argv[2..-1] | ||||
|             set --local old_plugins $_fisher_plugins | ||||
|             set --local new_plugins | ||||
| 
 | ||||
|             test -e $fish_plugins && set --local file_plugins (string match --regex -- '^[^\s]+$' <$fish_plugins | string replace -- \~ ~) | ||||
| 
 | ||||
|             if ! set --query argv[2] | ||||
|                 if test "$cmd" != update | ||||
|                     echo "fisher: Not enough arguments for command: \"$cmd\"" >&2 && return 1 | ||||
|                 else if ! set --query file_plugins | ||||
|                     echo "fisher: \"$fish_plugins\" file not found: \"$cmd\"" >&2 && return 1 | ||||
|                 end | ||||
|                 set arg_plugins $file_plugins | ||||
|             end | ||||
| 
 | ||||
|             for plugin in $arg_plugins | ||||
|                 set plugin (test -e "$plugin" && realpath $plugin || string lower -- $plugin) | ||||
|                 contains -- "$plugin" $new_plugins || set --append new_plugins $plugin | ||||
|             end | ||||
| 
 | ||||
|             if set --query argv[2] | ||||
|                 for plugin in $new_plugins | ||||
|                     if contains -- "$plugin" $old_plugins | ||||
|                         test "$cmd" = remove && | ||||
|                             set --append remove_plugins $plugin || | ||||
|                             set --append update_plugins $plugin | ||||
|                     else if test "$cmd" = install | ||||
|                         set --append install_plugins $plugin | ||||
|                     else | ||||
|                         echo "fisher: Plugin not installed: \"$plugin\"" >&2 && return 1 | ||||
|                     end | ||||
|                 end | ||||
|             else | ||||
|                 for plugin in $new_plugins | ||||
|                     contains -- "$plugin" $old_plugins && | ||||
|                         set --append update_plugins $plugin || | ||||
|                         set --append install_plugins $plugin | ||||
|                 end | ||||
| 
 | ||||
|                 for plugin in $old_plugins | ||||
|                     contains -- "$plugin" $new_plugins || set --append remove_plugins $plugin | ||||
|                 end | ||||
|             end | ||||
| 
 | ||||
|             set --local pid_list | ||||
|             set --local source_plugins | ||||
|             set --local fetch_plugins $update_plugins $install_plugins | ||||
|             set --local fish_path (status fish-path) | ||||
| 
 | ||||
|             echo (set_color --bold)fisher $cmd version $fisher_version(set_color normal) | ||||
| 
 | ||||
|             for plugin in $fetch_plugins | ||||
|                 set --local source (command mktemp -d) | ||||
|                 set --append source_plugins $source | ||||
| 
 | ||||
|                 command mkdir -p $source/{completions,conf.d,themes,functions} | ||||
| 
 | ||||
|                 $fish_path --command " | ||||
|                     if test -e $plugin | ||||
|                         command cp -Rf $plugin/* $source | ||||
|                     else | ||||
|                         set temp (command mktemp -d) | ||||
|                         set repo (string split -- \@ $plugin) || set repo[2] HEAD | ||||
| 
 | ||||
|                         if set path (string replace --regex -- '^(https://)?gitlab.com/' '' \$repo[1]) | ||||
|                             set name (string split -- / \$path)[-1] | ||||
|                             set url https://gitlab.com/\$path/-/archive/\$repo[2]/\$name-\$repo[2].tar.gz | ||||
|                         else | ||||
|                             set url https://api.github.com/repos/\$repo[1]/tarball/\$repo[2] | ||||
|                         end | ||||
| 
 | ||||
|                         echo Fetching (set_color --underline)\$url(set_color normal) | ||||
| 
 | ||||
|                         if command curl -q --silent -L \$url | command tar -xzC \$temp -f - 2>/dev/null | ||||
|                             command cp -Rf \$temp/*/* $source | ||||
|                         else | ||||
|                             echo fisher: Invalid plugin name or host unavailable: \\\"$plugin\\\" >&2 | ||||
|                             command rm -rf $source | ||||
|                         end | ||||
| 
 | ||||
|                         command rm -rf \$temp | ||||
|                     end | ||||
| 
 | ||||
|                     set files $source/* && string match --quiet --regex -- .+\.fish\\\$ \$files | ||||
|                 " & | ||||
| 
 | ||||
|                 set --append pid_list (jobs --last --pid) | ||||
|             end | ||||
| 
 | ||||
|             wait $pid_list 2>/dev/null | ||||
| 
 | ||||
|             for plugin in $fetch_plugins | ||||
|                 if set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] && test ! -e $source | ||||
|                     if set --local index (contains --index -- "$plugin" $install_plugins) | ||||
|                         set --erase install_plugins[$index] | ||||
|                     else | ||||
|                         set --erase update_plugins[(contains --index -- "$plugin" $update_plugins)] | ||||
|                     end | ||||
|                 end | ||||
|             end | ||||
| 
 | ||||
|             for plugin in $update_plugins $remove_plugins | ||||
|                 if set --local index (contains --index -- "$plugin" $_fisher_plugins) | ||||
|                     set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files | ||||
| 
 | ||||
|                     if contains -- "$plugin" $remove_plugins | ||||
|                         for name in (string replace --filter --regex -- '.+/conf\.d/([^/]+)\.fish$' '$1' $$plugin_files_var) | ||||
|                             emit {$name}_uninstall | ||||
|                         end | ||||
|                         printf "%s\n" Removing\ (set_color red --bold)$plugin(set_color normal) "         "$$plugin_files_var | string replace -- \~ ~ | ||||
|                         set --erase _fisher_plugins[$index] | ||||
|                     end | ||||
| 
 | ||||
|                     command rm -rf (string replace -- \~ ~ $$plugin_files_var) | ||||
| 
 | ||||
|                     functions --erase (string replace --filter --regex -- '.+/functions/([^/]+)\.fish$' '$1' $$plugin_files_var) | ||||
| 
 | ||||
|                     for name in (string replace --filter --regex -- '.+/completions/([^/]+)\.fish$' '$1' $$plugin_files_var) | ||||
|                         complete --erase --command $name | ||||
|                     end | ||||
| 
 | ||||
|                     set --erase $plugin_files_var | ||||
|                 end | ||||
|             end | ||||
| 
 | ||||
|             if set --query update_plugins[1] || set --query install_plugins[1] | ||||
|                 command mkdir -p $fisher_path/{functions,themes,conf.d,completions} | ||||
|             end | ||||
| 
 | ||||
|             for plugin in $update_plugins $install_plugins | ||||
|                 set --local source $source_plugins[(contains --index -- "$plugin" $fetch_plugins)] | ||||
|                 set --local files $source/{functions,themes,conf.d,completions}/* | ||||
| 
 | ||||
|                 if set --local index (contains --index -- $plugin $install_plugins) | ||||
|                     set --local user_files $fisher_path/{functions,themes,conf.d,completions}/* | ||||
|                     set --local conflict_files | ||||
| 
 | ||||
|                     for file in (string replace -- $source/ $fisher_path/ $files) | ||||
|                         contains -- $file $user_files && set --append conflict_files $file | ||||
|                     end | ||||
| 
 | ||||
|                     if set --query conflict_files[1] && set --erase install_plugins[$index] | ||||
|                         echo -s "fisher: Cannot install \"$plugin\": please remove or move conflicting files first:" \n"        "$conflict_files >&2 | ||||
|                         continue | ||||
|                     end | ||||
|                 end | ||||
| 
 | ||||
|                 for file in (string replace -- $source/ "" $files) | ||||
|                     command cp -RLf $source/$file $fisher_path/$file | ||||
|                 end | ||||
| 
 | ||||
|                 set --local plugin_files_var _fisher_(string escape --style=var -- $plugin)_files | ||||
| 
 | ||||
|                 set --query files[1] && set --universal $plugin_files_var (string replace -- $source $fisher_path $files | string replace -- ~ \~) | ||||
| 
 | ||||
|                 contains -- $plugin $_fisher_plugins || set --universal --append _fisher_plugins $plugin | ||||
|                 contains -- $plugin $install_plugins && set --local event install || set --local event update | ||||
| 
 | ||||
|                 printf "%s\n" Installing\ (set_color --bold)$plugin(set_color normal) "           "$$plugin_files_var | string replace -- \~ ~ | ||||
| 
 | ||||
|                 for file in (string match --regex -- '.+/[^/]+\.fish$' $$plugin_files_var | string replace -- \~ ~) | ||||
|                     source $file | ||||
|                     if set --local name (string replace --regex -- '.+conf\.d/([^/]+)\.fish$' '$1' $file) | ||||
|                         emit {$name}_$event | ||||
|                     end | ||||
|                 end | ||||
|             end | ||||
| 
 | ||||
|             command rm -rf $source_plugins | ||||
| 
 | ||||
|             if set --query _fisher_plugins[1] | ||||
|                 set --local commit_plugins | ||||
| 
 | ||||
|                 for plugin in $file_plugins | ||||
|                     contains -- (string lower -- $plugin) (string lower -- $_fisher_plugins) && set --append commit_plugins $plugin | ||||
|                 end | ||||
| 
 | ||||
|                 for plugin in $_fisher_plugins | ||||
|                     contains -- (string lower -- $plugin) (string lower -- $commit_plugins) || set --append commit_plugins $plugin | ||||
|                 end | ||||
| 
 | ||||
|                 string replace --regex -- $HOME \~ $commit_plugins >$fish_plugins | ||||
|             else | ||||
|                 set --erase _fisher_plugins | ||||
|                 command rm -f $fish_plugins | ||||
|             end | ||||
| 
 | ||||
|             set --local total (count $install_plugins) (count $update_plugins) (count $remove_plugins) | ||||
| 
 | ||||
|             test "$total" != "0 0 0" && echo (string join ", " ( | ||||
|                 test $total[1] = 0 || echo "Installed $total[1]") ( | ||||
|                 test $total[2] = 0 || echo "Updated $total[2]") ( | ||||
|                 test $total[3] = 0 || echo "Removed $total[3]") | ||||
|             ) plugin/s | ||||
|         case \* | ||||
|             echo "fisher: Unknown command: \"$cmd\"" >&2 && return 1 | ||||
|     end | ||||
| end | ||||
| 
 | ||||
| if ! set --query _fisher_upgraded_to_4_4 | ||||
|     set --universal _fisher_upgraded_to_4_4 | ||||
|     if functions --query _fisher_list | ||||
|         set --query XDG_DATA_HOME[1] || set --local XDG_DATA_HOME ~/.local/share | ||||
|         command rm -rf $XDG_DATA_HOME/fisher | ||||
|         functions --erase _fisher_{list,plugin_parse} | ||||
|         fisher update >/dev/null 2>/dev/null | ||||
|     else | ||||
|         for var in (set --names | string match --entire --regex '^_fisher_.+_files$') | ||||
|             set $var (string replace -- ~ \~ $$var) | ||||
|         end | ||||
|         functions --erase _fisher_fish_postexec | ||||
|     end | ||||
| end | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue