~zethra/dotfiles

cea4d8ddd1a6de83994aedd95822041458e70dcc — Sashanoraa 1 year, 6 months ago a4c93d2
Add all fish config
35 files changed, 1031 insertions(+), 0 deletions(-)

A .config/fish/completions/fisher.fish
A .config/fish/completions/nix-channel.fish
A .config/fish/completions/nix-collect-garbage.fish
A .config/fish/completions/nix-copy-closure.fish
A .config/fish/completions/nix-env.fish
A .config/fish/completions/nix-hash.fish
A .config/fish/completions/nix-instantiate.fish
A .config/fish/completions/nix-prefetch-url.fish
A .config/fish/completions/nix.fish
A .config/fish/conf.d/autopair.fish
A .config/fish/conf.d/done.fish
A .config/fish/conf.d/puffer_fish_key_bindings.fish
A .config/fish/fish_plugins
A .config/fish/functions/1.fish
A .config/fish/functions/2.fish
A .config/fish/functions/3.fish
A .config/fish/functions/4.fish
A .config/fish/functions/_autopair_backspace.fish
A .config/fish/functions/_autopair_insert_left.fish
A .config/fish/functions/_autopair_insert_right.fish
A .config/fish/functions/_autopair_insert_same.fish
A .config/fish/functions/_autopair_tab.fish
A .config/fish/functions/_nix_complete_common_options.fish
A .config/fish/functions/_puffer_fish_expand_bang.fish
A .config/fish/functions/_puffer_fish_expand_dots.fish
A .config/fish/functions/_puffer_fish_expand_lastarg.fish
A .config/fish/functions/convert.fish
A .config/fish/functions/fisher.fish
A .config/fish/functions/gaa.fish
A .config/fish/functions/gau.fish
A .config/fish/functions/start-jellyfin.fish
A .config/fish/themes/TokyoNight Day.theme
A .config/fish/themes/TokyoNight Moon.theme
A .config/fish/themes/TokyoNight Night.theme
A .config/fish/themes/TokyoNight Storm.theme
A .config/fish/completions/fisher.fish => .config/fish/completions/fisher.fish +7 -0
@@ 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)"

A .config/fish/completions/nix-channel.fish => .config/fish/completions/nix-channel.fish +9 -0
@@ 0,0 1,9 @@
complete nix-channel --exclusive

complete nix-channel -n __fish_is_first_arg -a --add -d "Subscribe to a channel"
complete nix-channel -n __fish_is_first_arg -a --remove -d "Unsubscribe from a channel"
complete nix-channel -n __fish_is_first_arg -a --list -d "List subscribed channels"
complete nix-channel -n __fish_is_first_arg -a --update -d "Update and activate channels"
complete nix-channel -n __fish_is_first_arg -a --rollback -d "Revert the previous nix-channel --update"

complete nix-channel -n "__fish_seen_argument -l remove -l update" -a "(nix-channel --list | string split --fields 1 ' ')"

A .config/fish/completions/nix-collect-garbage.fish => .config/fish/completions/nix-collect-garbage.fish +6 -0
@@ 0,0 1,6 @@
complete nix-collect-garbage --exclusive

complete nix-collect-garbage -l delete-old -s d -d "Delete all old generations of all profiles"
complete nix-collect-garbage -l delete-older-than -d "Delete generations older than the given time"
complete nix-collect-garbage -l max-freed
complete nix-collect-garbage -l dry-run

A .config/fish/completions/nix-copy-closure.fish => .config/fish/completions/nix-copy-closure.fish +8 -0
@@ 0,0 1,8 @@
complete nix-copy-closure --exclusive

complete nix-copy-closure -l to -d "Copy the closure to the remote machine (default)"
complete nix-copy-closure -l from -d "Copy the closure from the remote machine"
complete nix-copy-closure -l gzip -d "Enable compression of the SSH connection"
complete nix-copy-closure -l include-outputs -d "Also copy outputs of store derivations included in the closure"
complete nix-copy-closure -l use-substitutes -s s -d "Download files from the binary cache if possible"
complete nix-copy-closure -s v

A .config/fish/completions/nix-env.fish => .config/fish/completions/nix-env.fish +70 -0
@@ 0,0 1,70 @@
complete nix-env --exclusive

# Common options
complete nix-env -l file -s f -d "Specify Nix expression used to obtain derivations"
complete nix-env -l profile -s p -d "Specify the profile to use"
complete nix-env -l dry-run
complete nix-env -l system-filter -d "Only show derivations matching the specified platform"

_nix_complete_common_options nix-env

# Operation --install
complete nix-env -n "__fish_not_contain_opt install upgrade uninstall set set-flag query switch-profile list-generations delete-generations switch-generation rollback -s i -s u -s e -s q -s S -s G" -a "--install -i" -d "Install package"
complete nix-env -n "__fish_seen_argument -l install -s i" -l prebuilt-only -s b -d "Fail if there is no pre-built binary available"
complete nix-env -n "__fish_seen_argument -l install -s i" -l from-expressions
complete nix-env -n "__fish_seen_argument -l install -s i" -l from-profile -d "Fetch store paths from another profile"
complete nix-env -n "__fish_seen_argument -l install -s i" -l preserve-installed -s P -d "Do not remove derivations with the same name"
complete nix-env -n "__fish_seen_argument -l install -s i" -l remove-all -s r -d "Remove all previously installed packages prior to installing"

# Operation --upgrade
complete nix-env -n "__fish_not_contain_opt install upgrade uninstall set set-flag query switch-profile list-generations delete-generations switch-generation rollback -s i -s u -s e -s q -s S -s G" -a "--upgrade -u" -d "Upgrade package"
complete nix-env -n "__fish_seen_argument -l upgrade -s u" -l prebuilt-only -s b -d "Fail if there is no pre-built binary available"
complete nix-env -n "__fish_seen_argument -l upgrade -s u" -l from-expressions
complete nix-env -n "__fish_seen_argument -l upgrade -s u" -l from-profile -d "Fetch store paths from another profile"
complete nix-env -n "__fish_seen_argument -l upgrade -s u" -l lt -d "Upgrade derivations with newer versions (default)"
complete nix-env -n "__fish_seen_argument -l upgrade -s u" -l leq -d "Upgrade derivations with the same or newer version"
complete nix-env -n "__fish_seen_argument -l upgrade -s u" -l eq -d "Upgrade derivations with equivalent versions"
complete nix-env -n "__fish_seen_argument -l upgrade -s u" -l always -d "Upgrade even if version number decreases"

# Operation --uninstall
complete nix-env -n "__fish_not_contain_opt install upgrade uninstall set set-flag query switch-profile list-generations delete-generations switch-generation rollback -s i -s u -s e -s q -s S -s G" -a "--uninstall -e" -d "Uninstall package"

# Operation --set
complete nix-env -n "__fish_not_contain_opt install upgrade uninstall set set-flag query switch-profile list-generations delete-generations switch-generation rollback -s i -s u -s e -s q -s S -s G" -a --set -d "Modify profile to only contain specified derivation"

# Operation --set-flag
complete nix-env -n "__fish_not_contain_opt install upgrade uninstall set set-flag query switch-profile list-generations delete-generations switch-generation rollback -s i -s u -s e -s q -s S -s G" -a --set-flag -d "Modify meta attribute of installed package"

# Operation --query
complete nix-env -n "__fish_not_contain_opt install upgrade uninstall set set-flag query switch-profile list-generations delete-generations switch-generation rollback -s i -s u -s e -s q -s S -s G" -a "--query -q" -d "List information about derivations"
complete nix-env -n "__fish_seen_argument -l query -s q" -l installed
complete nix-env -n "__fish_seen_argument -l query -s q" -l available -s a -d "Display all installable derivations"
complete nix-env -n "__fish_seen_argument -l query -s q" -l status -s s -d "Print status of derivation"
complete nix-env -n "__fish_seen_argument -l query -s q" -l attr-path -s P -d "Print attribute path of derivations"
complete nix-env -n "__fish_seen_argument -l query -s q" -l no-name -d "Suppress printing of name attribute"
complete nix-env -n "__fish_seen_argument -l query -s q" -l compare-versions -s c -d "Compare installed and available version"
complete nix-env -n "__fish_seen_argument -l query -s q" -l system -d "Print system attribute"
complete nix-env -n "__fish_seen_argument -l query -s q" -l drv-path -d "Print store derivation path"
complete nix-env -n "__fish_seen_argument -l query -s q" -l out-path -d "Print output path"
complete nix-env -n "__fish_seen_argument -l query -s q" -l description -d "Print description"
complete nix-env -n "__fish_seen_argument -l query -s q" -l meta -d "Print all meta attributes (only available with --xml)"
complete nix-env -n "__fish_seen_argument -l query -s q" -l xml -d "Print output as xml"
complete nix-env -n "__fish_seen_argument -l query -s q" -l json -d "Print output as json"
complete nix-env -n "__fish_seen_argument -l query -s q" -l prebuilt-only -s b -d "Fail if there is no pre-built binary available"

# Operation --switch-profile
complete nix-env -n "__fish_not_contain_opt install upgrade uninstall set set-flag query switch-profile list-generations delete-generations switch-generation rollback -s i -s u -s e -s q -s S -s G" -a "--switch-profile -S" -d "Set the current profile path"

# Operation --list-generations
complete nix-env -n "__fish_not_contain_opt install upgrade uninstall set set-flag query switch-profile list-generations delete-generations switch-generation rollback -s i -s u -s e -s q -s S -s G" -a --list-generations -d "Print a list of all generations in the active profile"

# Operation --delete-generations
complete nix-env -n "__fish_not_contain_opt install upgrade uninstall set set-flag query switch-profile list-generations delete-generations switch-generation rollback -s i -s u -s e -s q -s S -s G" -a --delete-generations -d "Delete specified generations"

# Operation --switch-generation
complete nix-env -n "__fish_not_contain_opt install upgrade uninstall set set-flag query switch-profile list-generations delete-generations switch-generation rollback -s i -s u -s e -s q -s S -s G" -a "--switch-generation -G" -d "Activate specified generation"

# Operation --rollback
complete nix-env -n "__fish_not_contain_opt install upgrade uninstall set set-flag query switch-profile list-generations delete-generations switch-generation rollback -s i -s u -s e -s q -s S -s G" -a --rollback -d "Switch to the previous generation of active profile"

complete nix-env -n "__fish_seen_argument -l delete-generations -l switch-generation -s G" -a "(nix-env --list-generations | string split --fields 2 ' ')"

A .config/fish/completions/nix-hash.fish => .config/fish/completions/nix-hash.fish +10 -0
@@ 0,0 1,10 @@
complete nix-hash --exclusive

complete nix-hash -l flat -d "Print hash of regular files rather than their NAR dump"
complete nix-hash -l base32 -d "Print hash in base 32 rather than hexadecimal"
complete nix-hash -l truncate -d "Truncate hashes to 160 bits"
complete nix-hash -l type -d "Hash algorithm to use"
complete nix-hash -l to-base16 -d "Convert a base 32 hash to hexadecimal"
complete nix-hash -l to-base32 -d "Convert a hexadecimal hash to base 32"

complete nix-hash -n "__fish_seen_argument -l type" -a "md5 sha1 sha256 sha512"

A .config/fish/completions/nix-instantiate.fish => .config/fish/completions/nix-instantiate.fish +11 -0
@@ 0,0 1,11 @@
complete nix-instantiate -l add-root
complete nix-instantiate -l indirect
complete nix-instantiate -l parse -d "Just parse the input files and print their abstract syntax trees"
complete nix-instantiate -l eval -d "Just parse and evaluate the input files, and print the resulting values"
complete nix-instantiate -l find-file -d "Look up the given files on Nix's search path"
complete nix-instantiate -l strict -d "Cause --eval to recursively evaluate list elements and attributes"
complete nix-instantiate -l json -d "Print output from --eval as JSON"
complete nix-instantiate -l xml -d "Print output from --eval as XML"
complete nix-instantiate -l read-write-mode -d "Perform evaluation in read/write mode"

_nix_complete_common_options nix-instantiate

A .config/fish/completions/nix-prefetch-url.fish => .config/fish/completions/nix-prefetch-url.fish +9 -0
@@ 0,0 1,9 @@
complete nix-prefetch-url --exclusive

complete nix-prefetch-url -l version
complete nix-prefetch-url -l type -d "Use the specified hash algorithm"
complete nix-prefetch-url -l print-path -d "Print the resulting store path"
complete nix-prefetch-url -l unpack -d "Unpack tarball/zip first"
complete nix-prefetch-url -l name -d "Override the resulting nix store filename"

complete nix-prefetch-url -n "__fish_seen_argument -l type" -a "md5 sha1 sha256 sha512"

A .config/fish/completions/nix.fish => .config/fish/completions/nix.fish +47 -0
@@ 0,0 1,47 @@
complete nix --exclusive

# Common options
complete nix -l debug -d "enable debug output"
complete nix -l help -d "show usage information"
complete nix -l help-config -d "show configuration options"
complete nix -l no-net -d "disable substituters and consider all previously downloaded files up-to-date"
complete nix -l option -d "set a Nix configuration option (overriding nix.conf)"
complete nix -l print-build-logs -s L -d "print full build logs on stderr"
complete nix -l quiet -d "decrease verbosity level"
complete nix -l verbose -s v -d "increase verbosity level"
complete nix -l version -d "show version information"

# Subcommands
# Generated from `nix` help text with:
# string replace --regex '([\w-]+)\s+(.+)' 'complete nix -n __fish_use_subcommand -a $1 -d "$2"'
complete nix -n __fish_use_subcommand -a add-to-store -d "add a path to the Nix store"
complete nix -n __fish_use_subcommand -a build -d "build a derivation or fetch a store path"
complete nix -n __fish_use_subcommand -a cat-nar -d "print the contents of a file inside a NAR file"
complete nix -n __fish_use_subcommand -a cat-store -d "print the contents of a store file on stdout"
complete nix -n __fish_use_subcommand -a copy -d "copy paths between Nix stores"
complete nix -n __fish_use_subcommand -a copy-sigs -d "copy path signatures from substituters (like binary caches)"
complete nix -n __fish_use_subcommand -a doctor -d "check your system for potential problems"
complete nix -n __fish_use_subcommand -a dump-path -d "dump a store path to stdout (in NAR format)"
complete nix -n __fish_use_subcommand -a edit -d "open the Nix expression of a Nix package in $EDITOR"
complete nix -n __fish_use_subcommand -a eval -d "evaluate a Nix expression"
complete nix -n __fish_use_subcommand -a hash-file -d "print cryptographic hash of a regular file"
complete nix -n __fish_use_subcommand -a hash-path -d "print cryptographic hash of the NAR serialisation of a path"
complete nix -n __fish_use_subcommand -a log -d "show the build log of the specified packages or paths, if available"
complete nix -n __fish_use_subcommand -a ls-nar -d "show information about the contents of a NAR file"
complete nix -n __fish_use_subcommand -a ls-store -d "show information about a store path"
complete nix -n __fish_use_subcommand -a optimise-store -d "replace identical files in the store by hard links"
complete nix -n __fish_use_subcommand -a path-info -d "query information about store paths"
complete nix -n __fish_use_subcommand -a ping-store -d "test whether a store can be opened"
complete nix -n __fish_use_subcommand -a repl -d "start an interactive environment for evaluating Nix expressions"
complete nix -n __fish_use_subcommand -a run -d "run a shell in which the specified packages are available"
complete nix -n __fish_use_subcommand -a search -d "query available packages"
complete nix -n __fish_use_subcommand -a show-config -d "show the Nix configuration"
complete nix -n __fish_use_subcommand -a show-derivation -d "show the contents of a store derivation"
complete nix -n __fish_use_subcommand -a sign-paths -d "sign the specified paths"
complete nix -n __fish_use_subcommand -a to-base16 -d "convert a hash to base-16 representation"
complete nix -n __fish_use_subcommand -a to-base32 -d "convert a hash to base-32 representation"
complete nix -n __fish_use_subcommand -a to-base64 -d "convert a hash to base-64 representation"
complete nix -n __fish_use_subcommand -a to-sri -d "convert a hash to SRI representation"
complete nix -n __fish_use_subcommand -a upgrade-nix -d "upgrade Nix to the latest stable version"
complete nix -n __fish_use_subcommand -a verify -d "verify the integrity of store paths"
complete nix -n __fish_use_subcommand -a why-depends -d "show why a package has another package in its closure"

A .config/fish/conf.d/autopair.fish => .config/fish/conf.d/autopair.fish +39 -0
@@ 0,0 1,39 @@
status is-interactive || exit

set --global autopair_left "(" "[" "{" '"' "'"
set --global autopair_right ")" "]" "}" '"' "'"
set --global autopair_pairs "()" "[]" "{}" '""' "''"

function _autopair_fish_key_bindings --on-variable fish_key_bindings
    set --query fish_key_bindings[1] || return

    test $fish_key_bindings = fish_default_key_bindings &&
        set --local mode default insert ||
        set --local mode insert default

    bind --mode $mode[-1] --erase \177 \b \t

    bind --mode $mode[1] \177 _autopair_backspace # macOS ⌫
    bind --mode $mode[1] \b _autopair_backspace
    bind --mode $mode[1] \t _autopair_tab

    printf "%s\n" $autopair_pairs | while read --local left right --delimiter ""
        bind --mode $mode[-1] --erase $left $right
        if test $left = $right
            bind --mode $mode[1] $left "_autopair_insert_same \\$left"
        else
            bind --mode $mode[1] $left "_autopair_insert_left \\$left \\$right"
            bind --mode $mode[1] $right "_autopair_insert_right \\$right"
        end
    end
end

_autopair_fish_key_bindings

function _autopair_uninstall --on-event autopair_uninstall
    string collect (
        bind --all | string replace --filter --regex -- "_autopair.*" --erase
        set --names | string replace --filter --regex -- "^autopair" "set --erase autopair"
    ) | source
    functions --erase (functions --all | string match "_autopair_*")
end

A .config/fish/conf.d/done.fish => .config/fish/conf.d/done.fish +300 -0
@@ 0,0 1,300 @@
# MIT License

# Copyright (c) 2016 Francisco Lourenço & Daniel Wehner

# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:

# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# 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.

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")

    if test $status -ne 0
        and command --search wslvar

        set -l powershell_exe (wslpath (wslvar windir)/System32/WindowsPowerShell/v1.0/powershell.exe)
    end

    if string length --quiet "$powershell_exe"
        and test -x "$powershell_exe"

        set cmd (string escape $argv)

        eval "$powershell_exe -Command $cmd"
    end
end

function __done_windows_notification -a title -a message
    if test "$__done_notify_sound" -eq 1
        set soundopt "<audio silent=\"false\" src=\"ms-winsoundevent:Notification.Default\" />"
    else
        set soundopt "<audio silent=\"true\" />"
    end

    __done_run_powershell_script "
[Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null
[Windows.UI.Notifications.ToastNotification, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null

\$toast_xml_source = @\"
    <toast>
        $soundopt
        <visual>
            <binding template=\"ToastText02\">
                <text id=\"1\">$title</text>
                <text id=\"2\">$message</text>
            </binding>
        </visual>
    </toast>
\"@

\$toast_xml = New-Object Windows.Data.Xml.Dom.XmlDocument
\$toast_xml.loadXml(\$toast_xml_source)

\$toast = New-Object Windows.UI.Notifications.ToastNotification \$toast_xml

[Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier(\"fish\").Show(\$toast)
"
end

function __done_get_focused_window_id
    if type -q lsappinfo
        lsappinfo info -only bundleID (lsappinfo front) | cut -d '"' -f4
    else if test -n "$SWAYSOCK"
        and type -q jq
        swaymsg --type get_tree | jq '.. | objects | select(.focused == true) | .id'
    else if begin
            test "$XDG_SESSION_DESKTOP" = gnome; and type -q gdbus
        end
        gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval 'global.display.focus_window.get_id()'
    else if type -q xprop
        and test -n "$DISPLAY"
        # Test that the X server at $DISPLAY is running
        and xprop -grammar >/dev/null 2>&1
        xprop -root 32x '\t$0' _NET_ACTIVE_WINDOW | cut -f 2
    else if uname -a | string match --quiet --ignore-case --regex microsoft
        __done_run_powershell_script '
Add-Type @"
    using System;
    using System.Runtime.InteropServices;
    public class WindowsCompat {
        [DllImport("user32.dll")]
        public static extern IntPtr GetForegroundWindow();
    }
"@
[WindowsCompat]::GetForegroundWindow()
'
    else if set -q __done_allow_nongraphical
        echo 12345 # dummy value
    end
end

function __done_is_tmux_window_active
    set -q fish_pid; or set -l fish_pid %self

    # find the outermost process within tmux
    # ppid != "tmux" -> pid = ppid
    # ppid == "tmux" -> break
    set tmux_fish_pid $fish_pid
    while set tmux_fish_ppid (ps -o ppid= -p $tmux_fish_pid | string trim)
        and ! string match -q "tmux*" (basename (ps -o command= -p $tmux_fish_ppid))
        set tmux_fish_pid $tmux_fish_ppid
    end

    # tmux session attached and window is active -> no notification
    # all other combinations -> send notification
    tmux list-panes -a -F "#{session_attached} #{window_active} #{pane_pid}" | string match -q "1 1 $tmux_fish_pid"
end

function __done_is_screen_window_active
    string match --quiet --regex "$STY\s+\(Attached" (screen -ls)
end

function __done_is_process_window_focused
    # Return false if the window is not focused

    if set -q __done_allow_nongraphical
        return 1
    end

    set __done_focused_window_id (__done_get_focused_window_id)
    if test "$__done_sway_ignore_visible" -eq 1
        and test -n "$SWAYSOCK"
        string match --quiet --regex "^true" (swaymsg -t get_tree | jq ".. | objects | select(.id == "$__done_initial_window_id") | .visible")
        return $status
    else if test "$__done_initial_window_id" != "$__done_focused_window_id"
        return 1
    end
    # If inside a tmux session, check if the tmux window is focused
    if type -q tmux
        and test -n "$TMUX"
        __done_is_tmux_window_active
        return $status
    end

    # If inside a screen session, check if the screen window is focused
    if type -q screen
        and test -n "$STY"
        __done_is_screen_window_active
        return $status
    end

    return 0
end

function __done_humanize_duration -a milliseconds
    set -l seconds (math --scale=0 "$milliseconds/1000" % 60)
    set -l minutes (math --scale=0 "$milliseconds/60000" % 60)
    set -l hours (math --scale=0 "$milliseconds/3600000")

    if test $hours -gt 0
        printf '%s' $hours'h '
    end
    if test $minutes -gt 0
        printf '%s' $minutes'm '
    end
    if test $seconds -gt 0
        printf '%s' $seconds's'
    end
end

# verify that the system has graphical capabilities before initializing
if test -z "$SSH_CLIENT" # not over ssh
    and count (__done_get_focused_window_id) >/dev/null # is able to get window id
    set __done_enabled
end

if set -q __done_allow_nongraphical
    and set -q __done_notification_command
    set __done_enabled
end

if set -q __done_enabled
    set -g __done_initial_window_id ''
    set -q __done_min_cmd_duration; or set -g __done_min_cmd_duration 5000
    set -q __done_exclude; or set -g __done_exclude 'git (?!push|pull|fetch)'
    set -q __done_notify_sound; or set -g __done_notify_sound 0
    set -q __done_sway_ignore_visible; or set -g __done_sway_ignore_visible 0

    function __done_started --on-event fish_preexec
        set __done_initial_window_id (__done_get_focused_window_id)
    end

    function __done_ended --on-event fish_prompt
        set -l exit_status $status

        # backwards compatibility for fish < v3.0
        set -q cmd_duration; or set -l cmd_duration $CMD_DURATION

        if test $cmd_duration
            and test $cmd_duration -gt $__done_min_cmd_duration # longer than notify_duration
            and not __done_is_process_window_focused # process pane or window not focused
            and not string match -qr $__done_exclude $history[1] # don't notify on git commands which might wait external editor

            # Store duration of last command
            set -l humanized_duration (__done_humanize_duration "$cmd_duration")

            set -l title "Done in $humanized_duration"
            set -l wd (string replace --regex "^$HOME" "~" (pwd))
            set -l message "$wd/ $history[1]"
            set -l sender $__done_initial_window_id

            if test $exit_status -ne 0
                set title "Failed ($exit_status) after $humanized_duration"
            end

            if set -q __done_notification_command
                eval $__done_notification_command
                if test "$__done_notify_sound" -eq 1
                    echo -e "\a" # bell sound
                end
            else if type -q terminal-notifier # https://github.com/julienXX/terminal-notifier
                if test "$__done_notify_sound" -eq 1
                    terminal-notifier -message "$message" -title "$title" -sender "$__done_initial_window_id" -sound default
                else
                    terminal-notifier -message "$message" -title "$title" -sender "$__done_initial_window_id"
                end

            else if type -q osascript # AppleScript
                osascript -e "display notification \"$message\" with title \"$title\""
                if test "$__done_notify_sound" -eq 1
                    echo -e "\a" # bell sound
                end

            else if type -q notify-send # Linux notify-send
                # set urgency to normal
                set -l urgency normal

                # use user-defined urgency if set
                if set -q __done_notification_urgency_level
                    set urgency "$__done_notification_urgency_level"
                end
                # override user-defined urgency level if non-zero exitstatus
                if test $exit_status -ne 0
                    set urgency critical
                    if set -q __done_notification_urgency_level_failure
                        set urgency "$__done_notification_urgency_level_failure"
                    end
                end

                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
                end

            else if type -q notify-desktop # Linux notify-desktop
                set -l urgency
                if test $exit_status -ne 0
                    set urgency "--urgency=critical"
                end
                notify-desktop $urgency --icon=utilities-terminal --app-name=fish "$title" "$message"
                if test "$__done_notify_sound" -eq 1
                    echo -e "\a" # bell sound
                end

            else if uname -a | string match --quiet --ignore-case --regex microsoft
                __done_windows_notification "$title" "$message"

            else # anything else
                echo -e "\a" # bell sound
            end

        end
    end
end

function __done_uninstall -e done_uninstall
    # Erase all __done_* functions
    functions -e __done_ended
    functions -e __done_started
    functions -e __done_get_focused_window_id
    functions -e __done_is_tmux_window_active
    functions -e __done_is_screen_window_active
    functions -e __done_is_process_window_focused
    functions -e __done_windows_notification
    functions -e __done_run_powershell_script
    functions -e __done_humanize_duration

    # Erase __done variables
    set -e __done_version
end

A .config/fish/conf.d/puffer_fish_key_bindings.fish => .config/fish/conf.d/puffer_fish_key_bindings.fish +25 -0
@@ 0,0 1,25 @@
status is-interactive || exit

function _puffer_fish_key_bindings --on-variable fish_key_bindings
    set -l modes
    if test "$fish_key_bindings" = fish_default_key_bindings
        set modes default insert
    else
        set modes insert default
    end

    bind --mode $modes[1] . _puffer_fish_expand_dots
    bind --mode $modes[1] ! _puffer_fish_expand_bang
    bind --mode $modes[1] '$' _puffer_fish_expand_lastarg
    bind --mode $modes[2] --erase . ! '$'
end

_puffer_fish_key_bindings

set -l uninstall_event puffer_fish_key_bindings_uninstall

function _$uninstall_event --on-event $uninstall_event
    bind -e .
    bind -e !
    bind -e '$'
end

A .config/fish/fish_plugins => .config/fish/fish_plugins +6 -0
@@ 0,0 1,6 @@
jorgebucaran/fisher
kidonng/nix-completions.fish
franciscolourenco/done
nickeb96/puffer-fish
jorgebucaran/autopair.fish
vitallium/tokyonight-fish

A .config/fish/functions/1.fish => .config/fish/functions/1.fish +4 -0
@@ 0,0 1,4 @@
function 1 --wraps=prevd --description 'alias 1=prevd'
  prevd $argv
        
end

A .config/fish/functions/2.fish => .config/fish/functions/2.fish +4 -0
@@ 0,0 1,4 @@
function 2 --description 'alias 2=prevd 2'
  prevd 2 $argv
        
end

A .config/fish/functions/3.fish => .config/fish/functions/3.fish +4 -0
@@ 0,0 1,4 @@
function 3 --description 'alias 3=prevd 3'
  prevd 3 $argv
        
end

A .config/fish/functions/4.fish => .config/fish/functions/4.fish +4 -0
@@ 0,0 1,4 @@
function 4 --description 'alias 4=prevd 4'
  prevd 4 $argv
        
end

A .config/fish/functions/_autopair_backspace.fish => .config/fish/functions/_autopair_backspace.fish +9 -0
@@ 0,0 1,9 @@
function _autopair_backspace
    set --local index (commandline --cursor)
    set --local buffer (commandline)

    test $index -ge 1 &&
        contains -- (string sub --start=$index --length=2 -- "$buffer") $autopair_pairs &&
        commandline --function delete-char
    commandline --function backward-delete-char
end

A .config/fish/functions/_autopair_insert_left.fish => .config/fish/functions/_autopair_insert_left.fish +13 -0
@@ 0,0 1,13 @@
function _autopair_insert_left --argument-names left right
    set --local buffer (commandline)
    set --local before (commandline --cut-at-cursor)

    commandline --insert -- $left

    switch "$buffer"
        case "$before"{," "\*,$autopair_right\*}
            set --local index (commandline --cursor)
            commandline --insert -- $right
            commandline --cursor $index
    end
end

A .config/fish/functions/_autopair_insert_right.fish => .config/fish/functions/_autopair_insert_right.fish +11 -0
@@ 0,0 1,11 @@
function _autopair_insert_right --argument-names key
    set --local buffer (commandline)
    set --local before (commandline --cut-at-cursor)

    switch "$buffer"
        case "$before$key"\*
            commandline --cursor (math (commandline --cursor) + 1)
        case \*
            commandline --insert -- $key
    end
end

A .config/fish/functions/_autopair_insert_same.fish => .config/fish/functions/_autopair_insert_same.fish +20 -0
@@ 0,0 1,20 @@
function _autopair_insert_same --argument-names key
    set --local buffer (commandline)
    set --local index (commandline --cursor)
    set --local next (string sub --start=(math $index + 1) --length=1 -- "$buffer")

    if test (math (count (string match --all --regex -- "$key" "$buffer")) % 2) = 0
        test $key = $next && commandline --cursor (math $index + 1) && return

        commandline --insert -- $key

        if test $index -lt 1 ||
                contains -- (string sub --start=$index --length=1 -- "$buffer") "" " " $autopair_left &&
                contains -- $next "" " " $autopair_right
            commandline --insert -- $key
            commandline --cursor (math $index + 1)
        end
    else
        commandline --insert -- $key
    end
end

A .config/fish/functions/_autopair_tab.fish => .config/fish/functions/_autopair_tab.fish +7 -0
@@ 0,0 1,7 @@
function _autopair_tab
    commandline --paging-mode && down-or-search && return

    string match --quiet --regex -- '\$[^\s]*"$' (commandline --current-token) &&
        commandline --function end-of-line --function backward-delete-char
    commandline --function complete
end

A .config/fish/functions/_nix_complete_common_options.fish => .config/fish/functions/_nix_complete_common_options.fish +23 -0
@@ 0,0 1,23 @@
function _nix_complete_common_options --argument-names cmd
    complete $cmd -l help
    complete $cmd -l version
    complete $cmd -l verbose -s v -d "Increase verbosity level"
    complete $cmd -l quiet
    complete $cmd -l no-build-output -s Q -d "Silence builder output"
    complete $cmd -l max-jobs -s j -d "Set the maximum number of build jobs"
    complete $cmd -l cores
    complete $cmd -l max-silent-time
    complete $cmd -l timeout
    complete $cmd -l keep-going -s k -d "Keep going in case of failed builds"
    complete $cmd -l keep-failed -s K -d "Keep temporary directory used by failed builds"
    complete $cmd -l fallback
    complete $cmd -l no-build-hook
    complete $cmd -l readonly-mode
    complete $cmd -l arg
    complete $cmd -l argstr
    complete $cmd -l attr -s A -d "Specify packages by attribute path instead of name"
    complete $cmd -l expr -s E -d "Interpret arguments as Nix expressions"
    complete $cmd -s I
    complete $cmd -l option
    complete $cmd -l repair
end

A .config/fish/functions/_puffer_fish_expand_bang.fish => .config/fish/functions/_puffer_fish_expand_bang.fish +10 -0
@@ 0,0 1,10 @@
function _puffer_fish_expand_bang
    switch (commandline -t)
      case '!'
        commandline -t $history[1]
        commandline -f repaint
      case '*'
        commandline -i '!'
    end
end


A .config/fish/functions/_puffer_fish_expand_dots.fish => .config/fish/functions/_puffer_fish_expand_dots.fish +9 -0
@@ 0,0 1,9 @@
function _puffer_fish_expand_dots -d 'expand ... to ../.. etc'
    set -l cmd (commandline --cut-at-cursor)
    set -l split (string split ' ' $cmd)
    switch $split[-1]
        case './*'; commandline --insert '.'
        case '*..'; commandline --insert '/..'
        case '*'; commandline --insert '.'
    end
end

A .config/fish/functions/_puffer_fish_expand_lastarg.fish => .config/fish/functions/_puffer_fish_expand_lastarg.fish +9 -0
@@ 0,0 1,9 @@
function _puffer_fish_expand_lastarg
    switch (commandline -t)
      case '!'
        commandline -t ""
        commandline -f history-token-search-backward
      case '*'
        commandline -i '$'
    end
end

A .config/fish/functions/convert.fish => .config/fish/functions/convert.fish +6 -0
@@ 0,0 1,6 @@
function convert
for f in *.mkv
ffmpeg -v quiet -stats -i $f -vcodec libx265 -crf 28 -threads 2 $(basename $f .mkv).mp4
mv "$f" "$f.done"
end
end

A .config/fish/functions/fisher.fish => .config/fish/functions/fisher.fish +240 -0
@@ 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.3
    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 or --version  Print version"
            echo "       -h or --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)

            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 curl --silent -L \$url | 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

                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]") (
                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

A .config/fish/functions/gaa.fish => .config/fish/functions/gaa.fish +4 -0
@@ 0,0 1,4 @@
function gaa --wraps='git add --all' --description 'alias gaa=git add --all'
  git add --all $argv
        
end

A .config/fish/functions/gau.fish => .config/fish/functions/gau.fish +4 -0
@@ 0,0 1,4 @@
function gau --wraps='git add -u' --description 'alias gau=git add -u'
  git add -u $argv
        
end

A .config/fish/functions/start-jellyfin.fish => .config/fish/functions/start-jellyfin.fish +11 -0
@@ 0,0 1,11 @@
function start-jellyfin --wraps=/usr/bin/docker\ run\ -d\ --restart\ unless-stopped\ --name\ jellyfin\ --net=host\ --group-add=\"986\"\ \\\n\ \ \ \ -v\ /srv/jellyfin/config:/config\ \\\n\ \ \ \ -v\ /srv/jellyfin/cache:/cache\ \\\n\ \ \ \ -v\ /p1/media:/media\ \\\n\ \ \ \ -v\ /srv/jellyfin/skip-intro-web/dist:/jellyfin/jellyfin-web:ro\ \\\n\ \ \ \ --device\ /dev/dri/renderD128:/dev/dri/renderD128\ \\\n\ \ \ \ --device\ /dev/dri/card0:/dev/dri/card0\ \\\n\ \ \ \ jellyfin/jellyfin:latest --description alias\ start-jellyfin=/usr/bin/docker\ run\ -d\ --restart\ unless-stopped\ --name\ jellyfin\ --net=host\ --group-add=\"986\"\ \\\n\ \ \ \ -v\ /srv/jellyfin/config:/config\ \\\n\ \ \ \ -v\ /srv/jellyfin/cache:/cache\ \\\n\ \ \ \ -v\ /p1/media:/media\ \\\n\ \ \ \ -v\ /srv/jellyfin/skip-intro-web/dist:/jellyfin/jellyfin-web:ro\ \\\n\ \ \ \ --device\ /dev/dri/renderD128:/dev/dri/renderD128\ \\\n\ \ \ \ --device\ /dev/dri/card0:/dev/dri/card0\ \\\n\ \ \ \ jellyfin/jellyfin:latest
  /usr/bin/docker run -d --restart unless-stopped --name jellyfin --net=host --group-add="986" \
    -v /srv/jellyfin/config:/config \
    -v /srv/jellyfin/cache:/cache \
    -v /p1/media:/media \
    -v /srv/jellyfin/skip-intro-web/dist:/jellyfin/jellyfin-web:ro \
    --device /dev/dri/renderD128:/dev/dri/renderD128 \
    --device /dev/dri/card0:/dev/dri/card0 \
    jellyfin/jellyfin:latest $argv
        
end

A .config/fish/themes/TokyoNight Day.theme => .config/fish/themes/TokyoNight Day.theme +23 -0
@@ 0,0 1,23 @@
# Upstream: https://github.com/folke/tokyonight.nvim/blob/main/extras/fish/tokyonight_day.fish
# Syntax Highlighting Colors
fish_color_normal 3760bf
fish_color_command 007197
fish_color_keyword 9854f1
fish_color_quote 8c6c3e
fish_color_redirection 3760bf
fish_color_end f52a65
fish_color_error f52a65
fish_color_param 7847bd
fish_color_comment 848cb5
fish_color_selection --background=99a7df
fish_color_search_match --background=99a7df
fish_color_operator 587539
fish_color_escape 9854f1
fish_color_autosuggestion 848cb5

# Completion Pager Colors
fish_pager_color_progress 848cb5
fish_pager_color_prefix 007197
fish_pager_color_completion 3760bf
fish_pager_color_description 848cb5
fish_pager_color_selected_background --background=99a7df

A .config/fish/themes/TokyoNight Moon.theme => .config/fish/themes/TokyoNight Moon.theme +23 -0
@@ 0,0 1,23 @@
# Upstream: https://github.com/folke/tokyonight.nvim/blob/main/extras/fish/tokyonight_moon.fish
# Syntax Highlighting Colors
fish_color_normal c8d3f5
fish_color_command 86e1fc
fish_color_keyword c099ff
fish_color_quote ffc777
fish_color_redirection c8d3f5
fish_color_end ff966c
fish_color_error ff757f
fish_color_param fca7ea
fish_color_comment 636da6
fish_color_selection --background=3654a7
fish_color_search_match --background=3654a7
fish_color_operator c3e88d
fish_color_escape c099ff
fish_color_autosuggestion 636da6

# Completion Pager Colors
fish_pager_color_progress 636da6
fish_pager_color_prefix 86e1fc
fish_pager_color_completion c8d3f5
fish_pager_color_description 636da6
fish_pager_color_selected_background --background=3654a7

A .config/fish/themes/TokyoNight Night.theme => .config/fish/themes/TokyoNight Night.theme +23 -0
@@ 0,0 1,23 @@
# Upstream: https://github.com/folke/tokyonight.nvim/blob/main/extras/fish/tokyonight_night.fish
# Syntax Highlighting Colors
fish_color_normal c0caf5
fish_color_command 7dcfff
fish_color_keyword bb9af7
fish_color_quote e0af68
fish_color_redirection c0caf5
fish_color_end ff9e64
fish_color_error f7768e
fish_color_param 9d7cd8
fish_color_comment 565f89
fish_color_selection --background=33467c
fish_color_search_match --background=33467c
fish_color_operator 9ece6a
fish_color_escape bb9af7
fish_color_autosuggestion 565f89

# Completion Pager Colors
fish_pager_color_progress 565f89
fish_pager_color_prefix 7dcfff
fish_pager_color_completion c0caf5
fish_pager_color_description 565f89
fish_pager_color_selected_background --background=33467c

A .config/fish/themes/TokyoNight Storm.theme => .config/fish/themes/TokyoNight Storm.theme +23 -0
@@ 0,0 1,23 @@
# Upstream: https://github.com/folke/tokyonight.nvim/blob/main/extras/fish/tokyonight_storm.fish
# Syntax Highlighting Colors
fish_color_normal c0caf5
fish_color_command 7dcfff
fish_color_keyword bb9af7
fish_color_quote e0af68
fish_color_redirection c0caf5
fish_color_end ff9e64
fish_color_error f7768e
fish_color_param 9d7cd8
fish_color_comment 565f89
fish_color_selection --background=364a82
fish_color_search_match --background=364a82
fish_color_operator 9ece6a
fish_color_escape bb9af7
fish_color_autosuggestion 565f89

# Completion Pager Colors
fish_pager_color_progress 565f89
fish_pager_color_prefix 7dcfff
fish_pager_color_completion c0caf5
fish_pager_color_description 565f89
fish_pager_color_selected_background --background=364a82