dotfiles.git

commit a1e6c327e82dac441a81364a1fa632953f240706

Author: Adam Evyčędo <git@apiote.xyz>

fisher update

 .config/fish/conf.d/done.fish | 8 ++
 .config/fish/fish_variables | 5 +
 .config/fish/functions/fisher.fish | 93 +++++++++++++++++++++----------


diff --git a/.config/fish/conf.d/done.fish b/.config/fish/conf.d/done.fish
index 2b8d71a06ade0f8a623eec8745490ce3c504818b..b1a989b1030870f2f02f55c2717c285b05935f62 100644
--- a/.config/fish/conf.d/done.fish
+++ b/.config/fish/conf.d/done.fish
@@ -20,7 +20,11 @@ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 # SOFTWARE.
 
-set -g __done_version 1.16.3
+if not status is-interactive
+    exit
+end
+
+set -g __done_version 1.16.5
 
 function __done_run_powershell_script
     set -l powershell_exe (command --search "powershell.exe")
@@ -252,7 +256,7 @@                         set urgency "$__done_notification_urgency_level_failure"
                     end
                 end
 
-                notify-send --urgency=$urgency --icon=utilities-terminal --app-name=fish "$title" "$message"
+                notify-send --hint=int:transient:1 --urgency=$urgency --icon=utilities-terminal --app-name=fish "$title" "$message"
 
                 if test "$__done_notify_sound" -eq 1
                     echo -e "\a" # bell sound




diff --git a/.config/fish/fish_variables b/.config/fish/fish_variables
index ed63e7accaacc549d7de0cbb105bebc899185e9e..c8cd2709d337aa6a6f48a95d9c69fccf068b6c22 100644
--- a/.config/fish/fish_variables
+++ b/.config/fish/fish_variables
@@ -3,9 +3,10 @@ # VERSION: 3.0
 SETUVAR __done_min_cmd_duration:5000
 SETUVAR __done_sway_ignore_visible:1
 SETUVAR __fish_initialized:3400
-SETUVAR _fisher_franciscolourenco_2F_done_files:/home/adam/\x2econfig/fish/conf\x2ed/done\x2efish
-SETUVAR _fisher_jorgebucaran_2F_fisher_files:/home/adam/\x2econfig/fish/functions/fisher\x2efish\x1e/home/adam/\x2econfig/fish/completions/fisher\x2efish
+SETUVAR _fisher_franciscolourenco_2F_done_files:\x7e/\x2econfig/fish/conf\x2ed/done\x2efish
+SETUVAR _fisher_jorgebucaran_2F_fisher_files:\x7e/\x2econfig/fish/functions/fisher\x2efish\x1e\x7e/\x2econfig/fish/completions/fisher\x2efish
 SETUVAR _fisher_plugins:franciscolourenco/done\x1ejorgebucaran/fisher
+SETUVAR _fisher_upgraded_to_4_4:\x1d
 SETUVAR fish_color_autosuggestion:8a8a8a
 SETUVAR fish_color_cancel:normal
 SETUVAR fish_color_command:green




diff --git a/.config/fish/functions/fisher.fish b/.config/fish/functions/fisher.fish
index a1fb6cfa9de2a80196ce1c8bb3d5c544264566b8..b1513d3bd1a9717a42c8dcdc3c281b5204f920ff 100644
--- a/.config/fish/functions/fisher.fish
+++ b/.config/fish/functions/fisher.fish
@@ -1,6 +1,6 @@
 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.3.0
+    set --local fisher_version 4.4.4
     set --local fish_plugins $__fish_config_dir/fish_plugins
 
     switch "$cmd"
@@ -13,8 +13,10 @@             echo "       fisher update    Update installed plugins"
             echo "       fisher update                Update all installed plugins"
             echo "       fisher list    [<regex>]     List installed plugins matching regex"
             echo "Options:"
-            echo "       -v or --version  Print version"
-            echo "       -h or --help     Print this help message"
+            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
@@ -27,17 +29,19 @@             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)
+
             if ! set --query argv[2]
                 if test "$cmd" != update
                     echo "fisher: Not enough arguments for command: \"$cmd\"" >&2 && return 1
-                else if test ! -e $fish_plugins
+                else if ! set --query file_plugins
                     echo "fisher: \"$fish_plugins\" file not found: \"$cmd\"" >&2 && return 1
                 end
-                set arg_plugins (string match --regex -- '^[^\s]+$' <$fish_plugins)
+                set arg_plugins $file_plugins
             end
 
             for plugin in $arg_plugins
-                test -e "$plugin" && set plugin (realpath $plugin)
+                set plugin (test -e "$plugin" && realpath $plugin || string lower -- $plugin)
                 contains -- "$plugin" $new_plugins || set --append new_plugins $plugin
             end
 
@@ -68,30 +72,39 @@
             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,functions}
+                command mkdir -p $source/{completions,conf.d,themes,functions}
 
-                fish --command "
+                $fish_path --command "
                     if test -e $plugin
                         command cp -Rf $plugin/* $source
                     else
                         set temp (command mktemp -d)
-                        set name (string split \@ $plugin) || set name[2] HEAD
-                        set url https://codeload.github.com/\$name[1]/tar.gz/\$name[2]
+                        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 curl --silent \$url | tar -xzC \$temp -f - 2>/dev/null
+                        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
 
@@ -121,31 +134,32 @@                     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
+                        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 $$plugin_files_var
+                    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 _fisher_plugins[$index]
                     set --erase $plugin_files_var
                 end
             end
 
             if set --query update_plugins[1] || set --query install_plugins[1]
-                command mkdir -p $fisher_path/{functions,conf.d,completions}
+                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,conf.d,completions}/*
+                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,conf.d,completions}/*
+                    set --local user_files $fisher_path/{functions,themes,conf.d,completions}/*
                     set --local conflict_files
 
                     for file in (string replace -- $source/ $fisher_path/ $files)
@@ -159,18 +173,19 @@                     end
                 end
 
                 for file in (string replace -- $source/ "" $files)
-                    command cp -Rf $source/$file $fisher_path/$file
+                    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)
+
+                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
+                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)
+                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
@@ -180,12 +195,25 @@             end
 
             command rm -rf $source_plugins
 
-            set --query _fisher_plugins[1] || set --erase _fisher_plugins
-            set --query _fisher_plugins &&
-                printf "%s\n" $_fisher_plugins >$fish_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
+
+                printf "%s\n" $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]") (
@@ -196,14 +224,17 @@             echo "fisher: Unknown command: \"$cmd\"" >&2 && return 1
     end
 end
 
-## Migrations ##
-function _fisher_fish_postexec --on-event fish_postexec
+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
-        set --query XDG_DATA_HOME || set --local XDG_DATA_HOME ~/.local/share
-        test -e $XDG_DATA_HOME/fisher && command rm -rf $XDG_DATA_HOME/fisher
-        functions --erase _fisher_list _fisher_plugin_parse
-        set --erase fisher_data
+    else
+        for var in (set --names | string match --entire --regex '^_fisher_.+_files$')
+            set $var (string replace -- ~ \~ $$var)
+        end
+        functions --erase _fisher_fish_postexec
     end
-    functions --erase _fisher_fish_postexec
 end