diff --git a/.config/atuin/.github/README.md b/.config/atuin/.github/README.md
new file mode 100644
index 00000000..c4d7c3de
--- /dev/null
+++ b/.config/atuin/.github/README.md
@@ -0,0 +1,40 @@
+
+

+
+
+
+
+

+
+
+
+
+
+# :herb: About
+
+Atuin is such a cool tool. It lets you easily **sync** all your shell history across multiple devices. I was looking for something like this for a while, and I'm glad I found it.
+
+After the installation, you have to create a user with a password and save the key that will be given to you. Then you use that key and user on the other PC to sync their history together.
+
+# :gear: Config
+
+Atuin works at the start of a session with the shell you have.
+
+The base configuration found here can be used regardless of the shell you have `:)`
+
+I have Atuin configured to work with the fish shell, as it is the one I use on a daily basis. If you want to know how to change it, take a look at the **official [Atuin Configuration Guide](https://atuin.sh/docs/config/)**.
+
+Aside from that, I have configured Atuin to replace the up-arrow history of Fish with a fuzzy search included in Atuin itself.
+I also changed the frequency at which Atuin syncs its history with the server; it basically syncs every time you execute a command (**dont worry**, it will not slow down your shell).
+
+# :camera: Gallery
+
+
+
+
diff --git a/.config/atuin/.github/overview-1.png b/.config/atuin/.github/overview-1.png
new file mode 100644
index 00000000..a2952ba1
Binary files /dev/null and b/.config/atuin/.github/overview-1.png differ
diff --git a/.config/atuin/.github/overview-2.png b/.config/atuin/.github/overview-2.png
new file mode 100644
index 00000000..cdbb02a6
Binary files /dev/null and b/.config/atuin/.github/overview-2.png differ
diff --git a/.config/atuin/.github/title.png b/.config/atuin/.github/title.png
new file mode 100644
index 00000000..d9582b91
Binary files /dev/null and b/.config/atuin/.github/title.png differ
diff --git a/.config/atuin/config.toml b/.config/atuin/config.toml
new file mode 100644
index 00000000..1ff39ff3
--- /dev/null
+++ b/.config/atuin/config.toml
@@ -0,0 +1,104 @@
+## where to store your database, default is your system data directory
+## linux/mac: ~/.local/share/atuin/history.db
+## windows: %USERPROFILE%/.local/share/atuin/history.db
+# db_path = "~/.history.db"
+
+## where to store your encryption key, default is your system data directory
+## linux/mac: ~/.local/share/atuin/key
+## windows: %USERPROFILE%/.local/share/atuin/key
+# key_path = "~/.key"
+
+## where to store your auth session token, default is your system data directory
+## linux/mac: ~/.local/share/atuin/session
+## windows: %USERPROFILE%/.local/share/atuin/session
+# session_path = "~/.session"
+
+## date format used, either "us" or "uk"
+# dialect = "us"
+
+## enable or disable automatic sync
+auto_sync = true
+
+## enable or disable automatic update checks
+update_check = true
+
+## address of the sync server
+# sync_address = "https://api.atuin.sh"
+
+## how often to sync history. note that this is only triggered when a command
+## is ran, so sync intervals may well be longer
+## set it to 0 to sync after every command
+sync_frequency = "10m"
+
+## which search mode to use
+## possible values: prefix, fulltext, fuzzy, skim
+search_mode = "fuzzy"
+
+## which filter mode to use
+## possible values: global, host, session, directory
+# filter_mode = "global"
+
+## which filter mode to use when atuin is invoked from a shell up-key binding
+## the accepted values are identical to those of "filter_mode"
+## leave unspecified to use same mode set in "filter_mode"
+# filter_mode_shell_up_key_binding = "global"
+
+## which style to use
+## possible values: auto, full, compact
+style = "full"
+
+## the maximum number of lines the interface should take up
+## set it to 0 to always go full screen
+inline_height = 40
+
+## enable or disable showing a preview of the selected command
+## useful when the command is longer than the terminal width and is cut off
+# show_preview = false
+
+## what to do when the escape key is pressed when searching
+## possible values: return-original, return-query
+# exit_mode = "return-original"
+
+## possible values: emacs, subl
+# word_jump_mode = "emacs"
+
+## characters that count as a part of a word
+# word_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+
+## number of context lines to show when scrolling by pages
+# scroll_context_lines = 1
+
+## use ctrl instead of alt as the shortcut modifier key for numerical UI shortcuts
+## alt-0 .. alt-9
+# ctrl_n_shortcuts = false
+
+## prevent commands matching any of these regexes from being written to history.
+## Note that these regular expressions are unanchored, i.e. if they don't start
+## with ^ or end with $, they'll match anywhere in the command.
+## For details on the supported regular expression syntax, see
+## https://docs.rs/regex/latest/regex/#syntax
+# history_filter = [
+# "^secret-cmd",
+# "^innocuous-cmd .*--secret=.+"
+# ]
+
+## prevent commands run with cwd matching any of these regexes from being written
+## to history. Note that these regular expressions are unanchored, i.e. if they don't
+## start with ^ or end with $, they'll match anywhere in CWD.
+## For details on the supported regular expression syntax, see
+## https://docs.rs/regex/latest/regex/#syntax
+# cwd_filter = [
+# "^/very/secret/area"
+# ]
+
+enter_accept = true
+
+## vim-mode
+keymap_mode = "vim-insert"
+
+## faster sync
+[sync]
+records = true
+
+[theme]
+name = "catppuccin-macchiato-lavender"
diff --git a/.config/atuin/themes/catppuccin-macchiato-lavender.toml b/.config/atuin/themes/catppuccin-macchiato-lavender.toml
new file mode 100644
index 00000000..15039d2f
--- /dev/null
+++ b/.config/atuin/themes/catppuccin-macchiato-lavender.toml
@@ -0,0 +1,12 @@
+[theme]
+name = "catppuccin-macchiato-lavender"
+
+[colors]
+AlertInfo = "#a6da95"
+AlertWarn = "#f5a97f"
+AlertError = "#ed8796"
+Annotation = "#b7bdf8"
+Base = "#cad3f5"
+Guidance = "#939ab7"
+Important = "#ed8796"
+Title = "#b7bdf8"
diff --git a/.config/fish/.github/README.md b/.config/fish/.github/README.md
new file mode 100644
index 00000000..60e9135f
--- /dev/null
+++ b/.config/fish/.github/README.md
@@ -0,0 +1,22 @@
+
+

+
+
+
+
+

+
+
+
+
+
+
+
+> [!NOTE]
+> All the information about the Fish setup is on the documentation website: https://dotfiles-docs.vercel.app/app-confs/fish.html
diff --git a/.config/fish/.github/overview-1.png b/.config/fish/.github/overview-1.png
new file mode 100644
index 00000000..8ac16da4
Binary files /dev/null and b/.config/fish/.github/overview-1.png differ
diff --git a/.config/fish/.github/overview-2.png b/.config/fish/.github/overview-2.png
new file mode 100644
index 00000000..1fc3caf9
Binary files /dev/null and b/.config/fish/.github/overview-2.png differ
diff --git a/.config/fish/.github/title.png b/.config/fish/.github/title.png
new file mode 100644
index 00000000..caa3cc27
Binary files /dev/null and b/.config/fish/.github/title.png differ
diff --git a/.config/fish/abbreviations.fish b/.config/fish/abbreviations.fish
new file mode 100644
index 00000000..84dd315c
--- /dev/null
+++ b/.config/fish/abbreviations.fish
@@ -0,0 +1,2 @@
+abbr -a g git
+abbr -a d docker
diff --git a/.config/fish/completions/bun.fish b/.config/fish/completions/bun.fish
new file mode 100644
index 00000000..e262bb66
--- /dev/null
+++ b/.config/fish/completions/bun.fish
@@ -0,0 +1,186 @@
+# This is terribly complicated
+# It's because:
+# 1. bun run has to have dynamic completions
+# 2. there are global options
+# 3. bun {install add remove} gets special options
+# 4. I don't know how to write fish completions well
+# Contributions very welcome!!
+
+function __fish__get_bun_bins
+ string split ' ' (bun getcompletes b)
+end
+
+function __fish__get_bun_scripts
+ set -lx SHELL bash
+ set -lx MAX_DESCRIPTION_LEN 40
+ string trim (string split '\n' (string split '\t' (bun getcompletes z)))
+end
+
+function __fish__get_bun_packages
+ if test (commandline -ct) != ""
+ set -lx SHELL fish
+ string split ' ' (bun getcompletes a (commandline -ct))
+ end
+end
+
+function __history_completions
+ set -l tokens (commandline --current-process --tokenize)
+ history --prefix (commandline) | string replace -r \^$tokens[1]\\s\* "" | string replace -r \^$tokens[2]\\s\* "" | string split ' '
+end
+
+function __fish__get_bun_bun_js_files
+ string split ' ' (bun getcompletes j)
+end
+
+set -l bun_install_boolean_flags yarn production optional development no-save dry-run force no-cache silent verbose global
+set -l bun_install_boolean_flags_descriptions "Write a yarn.lock file (yarn v1)" "Don't install devDependencies" "Add dependency to optionalDependencies" "Add dependency to devDependencies" "Don't update package.json or save a lockfile" "Don't install anything" "Always request the latest versions from the registry & reinstall all dependencies" "Ignore manifest cache entirely" "Don't output anything" "Excessively verbose logging" "Use global folder"
+
+set -l bun_builtin_cmds_without_run dev create help bun upgrade discord install remove add init pm x
+set -l bun_builtin_cmds_accepting_flags create help bun upgrade discord run init link unlink pm x
+
+function __bun_complete_bins_scripts --inherit-variable bun_builtin_cmds_without_run -d "Emit bun completions for bins and scripts"
+ # Do nothing if we already have a builtin subcommand,
+ # or any subcommand other than "run".
+ if __fish_seen_subcommand_from $bun_builtin_cmds_without_run
+ or not __fish_use_subcommand && not __fish_seen_subcommand_from run
+ return
+ end
+ # Do we already have a bin or script subcommand?
+ set -l bins (__fish__get_bun_bins)
+ if __fish_seen_subcommand_from $bins
+ return
+ end
+ # Scripts have descriptions appended with a tab separator.
+ # Strip off descriptions for the purposes of subcommand testing.
+ set -l scripts (__fish__get_bun_scripts)
+ if __fish_seen_subcommand_from (string split \t -f 1 -- $scripts)
+ return
+ end
+ # Emit scripts.
+ for script in $scripts
+ echo $script
+ end
+ # Emit binaries and JS files (but only if we're doing `bun run`).
+ if __fish_seen_subcommand_from run
+ for bin in $bins
+ echo "$bin"\t"package bin"
+ end
+ for file in (__fish__get_bun_bun_js_files)
+ echo "$file"\t"Bun.js"
+ end
+ end
+end
+
+
+# Clear existing completions
+complete -e -c bun
+
+# Dynamically emit scripts and binaries
+complete -c bun -f -a "(__bun_complete_bins_scripts)"
+
+# Complete flags if we have no subcommand or a flag-friendly one.
+set -l flag_applies "__fish_use_subcommand; or __fish_seen_subcommand_from $bun_builtin_cmds_accepting_flags"
+complete -c bun \
+ -n $flag_applies --no-files -s 'u' -l 'origin' -r -d 'Server URL. Rewrites import paths'
+complete -c bun \
+ -n $flag_applies --no-files -s 'p' -l 'port' -r -d 'Port number to start server from'
+complete -c bun \
+ -n $flag_applies --no-files -s 'd' -l 'define' -r -d 'Substitute K:V while parsing, e.g. --define process.env.NODE_ENV:\"development\"'
+complete -c bun \
+ -n $flag_applies --no-files -s 'e' -l 'external' -r -d 'Exclude module from transpilation (can use * wildcards). ex: -e react'
+complete -c bun \
+ -n $flag_applies --no-files -l 'use' -r -d 'Use a framework (ex: next)'
+complete -c bun \
+ -n $flag_applies --no-files -l 'hot' -r -d 'Enable hot reloading in Bun\'s JavaScript runtime'
+
+# Complete dev and create as first subcommand.
+complete -c bun \
+ -n "__fish_use_subcommand" -a 'dev' -d 'Start dev server'
+complete -c bun \
+ -n "__fish_use_subcommand" -a 'create' -f -d 'Create a new project from a template'
+
+# Complete "next" and "react" if we've seen "create".
+complete -c bun \
+ -n "__fish_seen_subcommand_from create" -a 'next' -d 'new Next.js project'
+
+complete -c bun \
+ -n "__fish_seen_subcommand_from create" -a 'react' -d 'new React project'
+
+# Complete "upgrade" as first subcommand.
+complete -c bun \
+ -n "__fish_use_subcommand" -a 'upgrade' -d 'Upgrade bun to the latest version' -x
+# Complete "-h/--help" unconditionally.
+complete -c bun \
+ -s "h" -l "help" -d 'See all commands and flags' -x
+
+# Complete "-v/--version" if we have no subcommand.
+complete -c bun \
+ -n "not __fish_use_subcommand" -l "version" -s "v" -d 'Bun\'s version' -x
+
+# Complete additional subcommands.
+complete -c bun \
+ -n "__fish_use_subcommand" -a 'discord' -d 'Open bun\'s Discord server' -x
+
+
+complete -c bun \
+ -n "__fish_use_subcommand" -a 'bun' -d 'Generate a new bundle'
+
+
+complete -c bun \
+ -n "__fish_seen_subcommand_from bun" -F -d 'Bundle this'
+
+complete -c bun \
+ -n "__fish_seen_subcommand_from create; and __fish_seen_subcommand_from react next" -F -d "Create in directory"
+
+
+complete -c bun \
+ -n "__fish_use_subcommand" -a 'init' -F -d 'Start an empty Bun project'
+
+complete -c bun \
+ -n "__fish_use_subcommand" -a 'install' -f -d 'Install packages from package.json'
+
+complete -c bun \
+ -n "__fish_use_subcommand" -a 'add' -F -d 'Add a package to package.json'
+
+complete -c bun \
+ -n "__fish_use_subcommand" -a 'remove' -F -d 'Remove a package from package.json'
+
+
+for i in (seq (count $bun_install_boolean_flags))
+ complete -c bun \
+ -n "__fish_seen_subcommand_from install add remove" -l "$bun_install_boolean_flags[$i]" -d "$bun_install_boolean_flags_descriptions[$i]"
+end
+
+complete -c bun \
+ -n "__fish_seen_subcommand_from install add remove" -l 'cwd' -d 'Change working directory'
+
+complete -c bun \
+ -n "__fish_seen_subcommand_from install add remove" -l 'cache-dir' -d 'Choose a cache directory (default: $HOME/.bun/install/cache)'
+
+complete -c bun \
+ -n "__fish_seen_subcommand_from add" -d 'Popular' -a '(__fish__get_bun_packages)'
+
+complete -c bun \
+ -n "__fish_seen_subcommand_from add" -d 'History' -a '(__history_completions)'
+
+complete -c bun \
+ -n "__fish_seen_subcommand_from pm; and not __fish_seen_subcommand_from (__fish__get_bun_bins) (__fish__get_bun_scripts) cache;" -a 'bin ls cache hash hash-print hash-string' -f
+
+complete -c bun \
+ -n "__fish_seen_subcommand_from pm; and __fish_seen_subcommand_from cache; and not __fish_seen_subcommand_from (__fish__get_bun_bins) (__fish__get_bun_scripts);" -a 'rm' -f
+
+# Add built-in subcommands with descriptions.
+complete -c bun -n "__fish_use_subcommand" -a "create" -f -d "Create a new project from a template"
+complete -c bun -n "__fish_use_subcommand" -a "build bun" --require-parameter -F -d "Transpile and bundle one or more files"
+complete -c bun -n "__fish_use_subcommand" -a "upgrade" -d "Upgrade Bun"
+complete -c bun -n "__fish_use_subcommand" -a "run" -d "Run a script or package binary"
+complete -c bun -n "__fish_use_subcommand" -a "install" -d "Install dependencies from package.json" -f
+complete -c bun -n "__fish_use_subcommand" -a "remove" -d "Remove a dependency from package.json" -f
+complete -c bun -n "__fish_use_subcommand" -a "add" -d "Add a dependency to package.json" -f
+complete -c bun -n "__fish_use_subcommand" -a "init" -d "Initialize a Bun project in this directory" -f
+complete -c bun -n "__fish_use_subcommand" -a "link" -d "Register or link a local npm package" -f
+complete -c bun -n "__fish_use_subcommand" -a "unlink" -d "Unregister a local npm package" -f
+complete -c bun -n "__fish_use_subcommand" -a "pm" -d "Additional package management utilities" -f
+complete -c bun -n "__fish_use_subcommand" -a "x" -d "Execute a package binary, installing if needed" -f
+complete -c bun -n "__fish_use_subcommand" -a "outdated" -d "Display the latest versions of outdated dependencies" -f
+complete -c bun -n "__fish_use_subcommand" -a "publish" -d "Publish your package from local to npm" -f
diff --git a/.config/fish/completions/colorscript.fish b/.config/fish/completions/colorscript.fish
new file mode 100644
index 00000000..09ca4e0d
--- /dev/null
+++ b/.config/fish/completions/colorscript.fish
@@ -0,0 +1,78 @@
+# Completions for fish shell
+# This file should go in /usr/share/fish/vendor_completions.d
+# according to https://fishshell.com/docs/current/completions.html
+# function
+
+set dir_colorscripts /opt/shell-color-scripts/colorscripts
+set dir_blacklisted_colorscripts "$dir_colorscripts/blacklisted"
+
+# Lists all filenames in a given directory
+function list_filenames
+ set dir $argv[1]
+ if command -q find
+ # use find if available
+ set files (command find $dir -maxdepth 1 -type f)
+ else if command -q ls
+ # use ls if available
+ set files (command ls $dir)
+ else
+ # cannot provide coloscript name autocompletions for args of exec, blacklist, and unblacklist
+ return
+ end
+
+ for file in $files
+ echo (basename $file)
+ end
+end
+
+# List all colorscript names
+function cs_names
+ echo (list_filenames $dir_colorscripts | string collect)
+end
+
+# List all blacklisted colorscript names
+function blacklisted_cs_names
+ echo (list_filenames $dir_blacklisted_colorscripts | string collect)
+end
+
+# Description text
+set -l help_desc 'Print help'
+set -l list_desc 'List all installed color scripts'
+set -l random_desc 'Run a random color script'
+set -l exec_desc 'Run a specified color script by SCRIPT NAME or INDEX'
+set -l blacklist_desc 'Blacklist a color script by SCRIPT NAME or INDEX'
+set -l unblacklist_desc 'Unblacklist a color script by SCRIPT NAME or INDEX'
+set -l all_desc 'List the outputs of all colorscripts with their SCRIPT NAME'
+
+# List of all available commands and flag-style commands
+set -l commands -h --help help -l --list list -r --random random -e --exec exec \
+ -b --blacklist blacklist -u --unblacklist unblacklist -a --all all
+
+# turn off built-in file completions
+complete -c colorscript -f
+
+# Commands autocompletions
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -a help -d "$help_desc"
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -a list -d "$list_desc"
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -a random -d "$random_desc"
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -a exec -d "$exec_desc"
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -a blacklist -d "$blacklist_desc"
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -a unblacklist -d "$unblacklist_desc"
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -a all -d "$all_desc"
+
+# Flag-style commands autocompletions
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -s h -l help -d "$help_desc"
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -s l -l list -d "$list_desc"
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -s r -l random -d "$random_desc"
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -s e -l exec -d "$exec_desc"
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -s b -l blacklist -d "$blacklist_desc"
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -s u -l unblacklist -d "$unblacklist_desc"
+complete -c colorscript -n "not __fish_seen_subcommand_from $commands" -s a -l all -d "$all_desc"
+
+# Coloscript name autocompletions
+set -l commands_that_take_names -e --exec exec -b --blacklist blacklist
+complete -c colorscript -n "__fish_seen_subcommand_from $commands_that_take_names" -a '(cs_names)'
+
+# Blacklisted colorscript name autocompletions
+set -l commands_that_take_blacklisted_names -u --unblacklist unblacklist
+complete -c colorscript -n "__fish_seen_subcommand_from $commands_that_take_blacklisted_names" -a '(blacklisted_cs_names)'
diff --git a/.config/fish/completions/mise.fish b/.config/fish/completions/mise.fish
new file mode 100644
index 00000000..b799436c
--- /dev/null
+++ b/.config/fish/completions/mise.fish
@@ -0,0 +1,10 @@
+# if "usage" is not installed show an error
+if ! command -v usage &>/dev/null
+ echo >&2
+ echo "Error: usage CLI not found. This is required for completions to work in mise." >&2
+ echo "See https://usage.jdx.dev for more information." >&2
+ return 1
+end
+
+set _usage_spec_mise (mise usage | string collect)
+complete -xc mise -a '(usage complete-word -s "$_usage_spec_mise" -- (commandline -cop) (commandline -t))'
diff --git a/.config/fish/completions/poetry.fish b/.config/fish/completions/poetry.fish
new file mode 100644
index 00000000..2f57185b
--- /dev/null
+++ b/.config/fish/completions/poetry.fish
@@ -0,0 +1,257 @@
+function __fish_poetry_b950b2cda18a721a_complete_no_subcommand
+ for i in (commandline -opc)
+ if contains -- $i about add build cache check config debug env export help init install list lock new publish remove run search self shell show source update version
+ return 1
+ end
+ end
+ return 0
+end
+
+# global options
+complete -c poetry -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -l ansi -d 'Force ANSI output.'
+complete -c poetry -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -l directory -d 'The working directory for the Poetry command (defaults to the current working directory).'
+complete -c poetry -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -l help -d 'Display help for the given command. When no command is given display help for the list command.'
+complete -c poetry -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -l no-ansi -d 'Disable ANSI output.'
+complete -c poetry -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -l no-cache -d 'Disables Poetry source caches.'
+complete -c poetry -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -l no-interaction -d 'Do not ask any interactive question.'
+complete -c poetry -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -l no-plugins -d 'Disables plugins.'
+complete -c poetry -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -l quiet -d 'Do not output any message.'
+complete -c poetry -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -l verbose -d 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug.'
+complete -c poetry -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -l version -d 'Display this application version.'
+
+# commands
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a about -d 'Shows information about Poetry.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a add -d 'Adds a new dependency to pyproject.toml and installs it.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a build -d 'Builds a package, as a tarball and a wheel by default.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a cache
+complete -c poetry -f -n '__fish_seen_subcommand_from cache; and not __fish_seen_subcommand_from clear list' -a clear -d 'Clears a Poetry cache by name.'
+complete -c poetry -f -n '__fish_seen_subcommand_from cache; and not __fish_seen_subcommand_from clear list' -a list -d 'List Poetry\'s caches.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a check -d 'Validates the content of the pyproject.toml file and its consistency with the poetry.lock file.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a config -d 'Manages configuration settings.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a debug
+complete -c poetry -f -n '__fish_seen_subcommand_from debug; and not __fish_seen_subcommand_from info resolve' -a info -d 'Shows debug information.'
+complete -c poetry -f -n '__fish_seen_subcommand_from debug; and not __fish_seen_subcommand_from info resolve' -a resolve -d 'Debugs dependency resolution.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a env
+complete -c poetry -f -n '__fish_seen_subcommand_from env; and not __fish_seen_subcommand_from info list remove use' -a info -d 'Displays information about the current environment.'
+complete -c poetry -f -n '__fish_seen_subcommand_from env; and not __fish_seen_subcommand_from info list remove use' -a list -d 'Lists all virtualenvs associated with the current project.'
+complete -c poetry -f -n '__fish_seen_subcommand_from env; and not __fish_seen_subcommand_from info list remove use' -a remove -d 'Remove virtual environments associated with the project.'
+complete -c poetry -f -n '__fish_seen_subcommand_from env; and not __fish_seen_subcommand_from info list remove use' -a use -d 'Activates or creates a new virtualenv for the current project.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a export -d 'Exports the lock file to alternative formats.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a help -d 'Displays help for a command.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a init -d 'Creates a basic pyproject.toml file in the current directory.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a install -d 'Installs the project dependencies.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a list -d 'Lists commands.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a lock -d 'Locks the project dependencies.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a new -d 'Creates a new Python project at .'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a publish -d 'Publishes a package to a remote repository.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a remove -d 'Removes a package from the project dependencies.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a run -d 'Runs a command in the appropriate environment.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a search -d 'Searches for packages on remote repositories.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a self
+complete -c poetry -f -n '__fish_seen_subcommand_from self; and not __fish_seen_subcommand_from add install lock remove update show' -a add -d 'Add additional packages to Poetry\'s runtime environment.'
+complete -c poetry -f -n '__fish_seen_subcommand_from self; and not __fish_seen_subcommand_from add install lock remove update show' -a install -d 'Install locked packages (incl. addons) required by this Poetry installation.'
+complete -c poetry -f -n '__fish_seen_subcommand_from self; and not __fish_seen_subcommand_from add install lock remove update show' -a lock -d 'Lock the Poetry installation\'s system requirements.'
+complete -c poetry -f -n '__fish_seen_subcommand_from self; and not __fish_seen_subcommand_from add install lock remove update show' -a remove -d 'Remove additional packages from Poetry\'s runtime environment.'
+complete -c poetry -f -n '__fish_seen_subcommand_from self; and not __fish_seen_subcommand_from add install lock remove update show' -a show -d 'Show packages from Poetry\'s runtime environment.'
+complete -c poetry -f -n '__fish_seen_subcommand_from self; and not __fish_seen_subcommand_from add install lock remove update show' -a plugins -d 'Shows information about the currently installed plugins.'
+complete -c poetry -f -n '__fish_seen_subcommand_from self; and not __fish_seen_subcommand_from add install lock remove update show' -a update -d 'Updates Poetry to the latest version.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a shell -d 'Spawns a shell within the virtual environment.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a show -d 'Shows information about packages.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a source
+complete -c poetry -f -n '__fish_seen_subcommand_from source; and not __fish_seen_subcommand_from add remove show' -a add -d 'Add source configuration for project.'
+complete -c poetry -f -n '__fish_seen_subcommand_from source; and not __fish_seen_subcommand_from add remove show' -a remove -d 'Remove source configured for the project.'
+complete -c poetry -f -n '__fish_seen_subcommand_from source; and not __fish_seen_subcommand_from add remove show' -a show -d 'Show information about sources configured for the project.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a update -d 'Update the dependencies as according to the pyproject.toml file.'
+complete -c poetry -f -n '__fish_poetry_b950b2cda18a721a_complete_no_subcommand' -a version -d 'Shows the version of the project or bumps it when a valid bump rule is provided.'
+
+# command options
+
+# about
+
+# add
+complete -c poetry -n '__fish_seen_subcommand_from add' -l allow-prereleases -d 'Accept prereleases.'
+complete -c poetry -n '__fish_seen_subcommand_from add' -l dev -d 'Add as a development dependency. (Deprecated) Use --group=dev instead.'
+complete -c poetry -n '__fish_seen_subcommand_from add' -l dry-run -d 'Output the operations but do not execute anything (implicitly enables --verbose).'
+complete -c poetry -n '__fish_seen_subcommand_from add' -l editable -d 'Add vcs/path dependencies as editable.'
+complete -c poetry -n '__fish_seen_subcommand_from add' -l extras -d 'Extras to activate for the dependency.'
+complete -c poetry -n '__fish_seen_subcommand_from add' -l group -d 'The group to add the dependency to.'
+complete -c poetry -n '__fish_seen_subcommand_from add' -l lock -d 'Do not perform operations (only update the lockfile).'
+complete -c poetry -n '__fish_seen_subcommand_from add' -l optional -d 'Add as an optional dependency.'
+complete -c poetry -n '__fish_seen_subcommand_from add' -l platform -d 'Platforms for which the dependency must be installed.'
+complete -c poetry -n '__fish_seen_subcommand_from add' -l python -d 'Python version for which the dependency must be installed.'
+complete -c poetry -n '__fish_seen_subcommand_from add' -l source -d 'Name of the source to use to install the package.'
+
+# build
+complete -c poetry -n '__fish_seen_subcommand_from build' -l format -d 'Limit the format to either sdist or wheel.'
+complete -c poetry -n '__fish_seen_subcommand_from build' -l output -d 'Set output directory for build artifacts. Default is `dist`.'
+
+# cache clear
+complete -c poetry -n '__fish_seen_subcommand_from cache; and __fish_seen_subcommand_from clear' -l all -d 'Clear all entries in the cache.'
+
+# cache list
+
+# check
+complete -c poetry -n '__fish_seen_subcommand_from check' -l lock -d 'Checks that poetry.lock exists for the current version of pyproject.toml.'
+
+# config
+complete -c poetry -n '__fish_seen_subcommand_from config' -l list -d 'List configuration settings.'
+complete -c poetry -n '__fish_seen_subcommand_from config' -l local -d 'Set/Get from the project\'s local configuration.'
+complete -c poetry -n '__fish_seen_subcommand_from config' -l unset -d 'Unset configuration setting.'
+
+# debug info
+
+# debug resolve
+complete -c poetry -n '__fish_seen_subcommand_from debug; and __fish_seen_subcommand_from resolve' -l extras -d 'Extras to activate for the dependency.'
+complete -c poetry -n '__fish_seen_subcommand_from debug; and __fish_seen_subcommand_from resolve' -l install -d 'Show what would be installed for the current system.'
+complete -c poetry -n '__fish_seen_subcommand_from debug; and __fish_seen_subcommand_from resolve' -l python -d 'Python version(s) to use for resolution.'
+complete -c poetry -n '__fish_seen_subcommand_from debug; and __fish_seen_subcommand_from resolve' -l tree -d 'Display the dependency tree.'
+
+# env info
+complete -c poetry -n '__fish_seen_subcommand_from env; and __fish_seen_subcommand_from info' -l executable -d 'Only display the environment\'s python executable path.'
+complete -c poetry -n '__fish_seen_subcommand_from env; and __fish_seen_subcommand_from info' -l path -d 'Only display the environment\'s path.'
+
+# env list
+complete -c poetry -n '__fish_seen_subcommand_from env; and __fish_seen_subcommand_from list' -l full-path -d 'Output the full paths of the virtualenvs.'
+
+# env remove
+complete -c poetry -n '__fish_seen_subcommand_from env; and __fish_seen_subcommand_from remove' -l all -d 'Remove all managed virtual environments associated with the project.'
+
+# env use
+
+# export
+complete -c poetry -n '__fish_seen_subcommand_from export' -l all-extras -d 'Include all sets of extra dependencies.'
+complete -c poetry -n '__fish_seen_subcommand_from export' -l dev -d 'Include development dependencies. (Deprecated)'
+complete -c poetry -n '__fish_seen_subcommand_from export' -l extras -d 'Extra sets of dependencies to include.'
+complete -c poetry -n '__fish_seen_subcommand_from export' -l format -d 'Format to export to. Currently, only constraints.txt and requirements.txt are supported.'
+complete -c poetry -n '__fish_seen_subcommand_from export' -l only -d 'The only dependency groups to include.'
+complete -c poetry -n '__fish_seen_subcommand_from export' -l output -d 'The name of the output file.'
+complete -c poetry -n '__fish_seen_subcommand_from export' -l with -d 'The optional dependency groups to include.'
+complete -c poetry -n '__fish_seen_subcommand_from export' -l with-credentials -d 'Include credentials for extra indices.'
+complete -c poetry -n '__fish_seen_subcommand_from export' -l without -d 'The dependency groups to ignore.'
+complete -c poetry -n '__fish_seen_subcommand_from export' -l without-hashes -d 'Exclude hashes from the exported file.'
+complete -c poetry -n '__fish_seen_subcommand_from export' -l without-urls -d 'Exclude source repository urls from the exported file.'
+
+# help
+
+# init
+complete -c poetry -n '__fish_seen_subcommand_from init' -l author -d 'Author name of the package.'
+complete -c poetry -n '__fish_seen_subcommand_from init' -l dependency -d 'Package to require, with an optional version constraint, e.g. requests:^2.10.0 or requests=2.11.1.'
+complete -c poetry -n '__fish_seen_subcommand_from init' -l description -d 'Description of the package.'
+complete -c poetry -n '__fish_seen_subcommand_from init' -l dev-dependency -d 'Package to require for development, with an optional version constraint, e.g. requests:^2.10.0 or requests=2.11.1.'
+complete -c poetry -n '__fish_seen_subcommand_from init' -l license -d 'License of the package.'
+complete -c poetry -n '__fish_seen_subcommand_from init' -l name -d 'Name of the package.'
+complete -c poetry -n '__fish_seen_subcommand_from init' -l python -d 'Compatible Python versions.'
+
+# install
+complete -c poetry -n '__fish_seen_subcommand_from install' -l all-extras -d 'Install all extra dependencies.'
+complete -c poetry -n '__fish_seen_subcommand_from install' -l compile -d 'Compile Python source files to bytecode. (This option has no effect if modern-installation is disabled because the old installer always compiles.)'
+complete -c poetry -n '__fish_seen_subcommand_from install' -l dry-run -d 'Output the operations but do not execute anything (implicitly enables --verbose).'
+complete -c poetry -n '__fish_seen_subcommand_from install' -l extras -d 'Extra sets of dependencies to install.'
+complete -c poetry -n '__fish_seen_subcommand_from install' -l no-dev -d 'Do not install the development dependencies. (Deprecated)'
+complete -c poetry -n '__fish_seen_subcommand_from install' -l no-directory -d 'Do not install any directory path dependencies; useful to install dependencies without source code, e.g. for caching of Docker layers)'
+complete -c poetry -n '__fish_seen_subcommand_from install' -l no-root -d 'Do not install the root package (the current project).'
+complete -c poetry -n '__fish_seen_subcommand_from install' -l only -d 'The only dependency groups to include.'
+complete -c poetry -n '__fish_seen_subcommand_from install' -l only-root -d 'Exclude all dependencies.'
+complete -c poetry -n '__fish_seen_subcommand_from install' -l remove-untracked -d 'Removes packages not present in the lock file. (Deprecated)'
+complete -c poetry -n '__fish_seen_subcommand_from install' -l sync -d 'Synchronize the environment with the locked packages and the specified groups.'
+complete -c poetry -n '__fish_seen_subcommand_from install' -l with -d 'The optional dependency groups to include.'
+complete -c poetry -n '__fish_seen_subcommand_from install' -l without -d 'The dependency groups to ignore.'
+
+# list
+
+# lock
+complete -c poetry -n '__fish_seen_subcommand_from lock' -l check -d 'Check that the poetry.lock file corresponds to the current version of pyproject.toml. (Deprecated) Use poetry check --lock instead.'
+complete -c poetry -n '__fish_seen_subcommand_from lock' -l no-update -d 'Do not update locked versions, only refresh lock file.'
+
+# new
+complete -c poetry -n '__fish_seen_subcommand_from new' -l name -d 'Set the resulting package name.'
+complete -c poetry -n '__fish_seen_subcommand_from new' -l readme -d 'Specify the readme file format. Default is md.'
+complete -c poetry -n '__fish_seen_subcommand_from new' -l src -d 'Use the src layout for the project.'
+
+# publish
+complete -c poetry -n '__fish_seen_subcommand_from publish' -l build -d 'Build the package before publishing.'
+complete -c poetry -n '__fish_seen_subcommand_from publish' -l cert -d 'Certificate authority to access the repository.'
+complete -c poetry -n '__fish_seen_subcommand_from publish' -l client-cert -d 'Client certificate to access the repository.'
+complete -c poetry -n '__fish_seen_subcommand_from publish' -l dist-dir -d 'Dist directory where built artifact are stored. Default is `dist`.'
+complete -c poetry -n '__fish_seen_subcommand_from publish' -l dry-run -d 'Perform all actions except upload the package.'
+complete -c poetry -n '__fish_seen_subcommand_from publish' -l password -d 'The password to access the repository.'
+complete -c poetry -n '__fish_seen_subcommand_from publish' -l repository -d 'The repository to publish the package to.'
+complete -c poetry -n '__fish_seen_subcommand_from publish' -l skip-existing -d 'Ignore errors from files already existing in the repository.'
+complete -c poetry -n '__fish_seen_subcommand_from publish' -l username -d 'The username to access the repository.'
+
+# remove
+complete -c poetry -n '__fish_seen_subcommand_from remove' -l dev -d 'Remove a package from the development dependencies. (Deprecated) Use --group=dev instead.'
+complete -c poetry -n '__fish_seen_subcommand_from remove' -l dry-run -d 'Output the operations but do not execute anything (implicitly enables --verbose).'
+complete -c poetry -n '__fish_seen_subcommand_from remove' -l group -d 'The group to remove the dependency from.'
+complete -c poetry -n '__fish_seen_subcommand_from remove' -l lock -d 'Do not perform operations (only update the lockfile).'
+
+# run
+
+# search
+
+# self add
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from add' -l allow-prereleases -d 'Accept prereleases.'
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from add' -l dry-run -d 'Output the operations but do not execute anything (implicitly enables --verbose).'
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from add' -l editable -d 'Add vcs/path dependencies as editable.'
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from add' -l extras -d 'Extras to activate for the dependency.'
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from add' -l source -d 'Name of the source to use to install the package.'
+
+# self install
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from install' -l dry-run -d 'Output the operations but do not execute anything (implicitly enables --verbose).'
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from install' -l sync -d 'Synchronize the environment with the locked packages and the specified groups.'
+
+# self lock
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from lock' -l check -d 'Check that the poetry.lock file corresponds to the current version of pyproject.toml. (Deprecated) Use poetry check --lock instead.'
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from lock' -l no-update -d 'Do not update locked versions, only refresh lock file.'
+
+# self remove
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from remove' -l dry-run -d 'Output the operations but do not execute anything (implicitly enables --verbose).'
+
+# self show
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from show' -l addons -d 'List only add-on packages installed.'
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from show' -l latest -d 'Show the latest version.'
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from show' -l outdated -d 'Show the latest version but only for packages that are outdated.'
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from show' -l tree -d 'List the dependencies as a tree.'
+
+# self show plugins
+
+# self update
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from update' -l dry-run -d 'Output the operations but do not execute anything (implicitly enables --verbose).'
+complete -c poetry -n '__fish_seen_subcommand_from self; and __fish_seen_subcommand_from update' -l preview -d 'Allow the installation of pre-release versions.'
+
+# shell
+
+# show
+complete -c poetry -n '__fish_seen_subcommand_from show' -l all -d 'Show all packages (even those not compatible with current system).'
+complete -c poetry -n '__fish_seen_subcommand_from show' -l latest -d 'Show the latest version.'
+complete -c poetry -n '__fish_seen_subcommand_from show' -l no-dev -d 'Do not list the development dependencies. (Deprecated)'
+complete -c poetry -n '__fish_seen_subcommand_from show' -l only -d 'The only dependency groups to include.'
+complete -c poetry -n '__fish_seen_subcommand_from show' -l outdated -d 'Show the latest version but only for packages that are outdated.'
+complete -c poetry -n '__fish_seen_subcommand_from show' -l top-level -d 'Show only top-level dependencies.'
+complete -c poetry -n '__fish_seen_subcommand_from show' -l tree -d 'List the dependencies as a tree.'
+complete -c poetry -n '__fish_seen_subcommand_from show' -l why -d 'When showing the full list, or a --tree for a single package, display whether they are a direct dependency or required by other packages'
+complete -c poetry -n '__fish_seen_subcommand_from show' -l with -d 'The optional dependency groups to include.'
+complete -c poetry -n '__fish_seen_subcommand_from show' -l without -d 'The dependency groups to ignore.'
+
+# source add
+complete -c poetry -n '__fish_seen_subcommand_from source; and __fish_seen_subcommand_from add' -l default -d 'Set this source as the default (disable PyPI). A default source will also be the fallback source if you add other sources. (Deprecated, use --priority)'
+complete -c poetry -n '__fish_seen_subcommand_from source; and __fish_seen_subcommand_from add' -l priority -d 'Set the priority of this source. One of: default, primary, secondary, supplemental, explicit. Defaults to primary.'
+complete -c poetry -n '__fish_seen_subcommand_from source; and __fish_seen_subcommand_from add' -l secondary -d 'Set this source as secondary. (Deprecated, use --priority)'
+
+# source remove
+
+# source show
+
+# update
+complete -c poetry -n '__fish_seen_subcommand_from update' -l dry-run -d 'Output the operations but do not execute anything (implicitly enables --verbose).'
+complete -c poetry -n '__fish_seen_subcommand_from update' -l lock -d 'Do not perform operations (only update the lockfile).'
+complete -c poetry -n '__fish_seen_subcommand_from update' -l no-dev -d 'Do not update the development dependencies. (Deprecated)'
+complete -c poetry -n '__fish_seen_subcommand_from update' -l only -d 'The only dependency groups to include.'
+complete -c poetry -n '__fish_seen_subcommand_from update' -l sync -d 'Synchronize the environment with the locked packages and the specified groups.'
+complete -c poetry -n '__fish_seen_subcommand_from update' -l with -d 'The optional dependency groups to include.'
+complete -c poetry -n '__fish_seen_subcommand_from update' -l without -d 'The dependency groups to ignore.'
+
+# version
+complete -c poetry -n '__fish_seen_subcommand_from version' -l dry-run -d 'Do not update pyproject.toml file'
+complete -c poetry -n '__fish_seen_subcommand_from version' -l next-phase -d 'Increment the phase of the current version'
+complete -c poetry -n '__fish_seen_subcommand_from version' -l short -d 'Output the version number only'
diff --git a/.config/fish/conf.d/atuin.fish b/.config/fish/conf.d/atuin.fish
new file mode 100644
index 00000000..77be97a7
--- /dev/null
+++ b/.config/fish/conf.d/atuin.fish
@@ -0,0 +1,19 @@
+set -x ATUIN_NOBIND true
+
+if status is-interactive
+ if type -q atuin
+ atuin init fish | source
+ end
+end
+
+bind \cr _atuin_search
+bind up _atuin_bind_up
+bind \eOA _atuin_bind_up
+bind \e\[A _atuin_bind_up
+
+if bind -M insert >/dev/null 2>&1
+ bind -M insert \cr _atuin_search
+ bind -M insert up _atuin_bind_up
+ bind -M insert \eOA _atuin_bind_up
+ bind -M insert \e\[A _atuin_bind_up
+end
diff --git a/.config/fish/conf.d/gnupg.fish b/.config/fish/conf.d/gnupg.fish
new file mode 100644
index 00000000..9b3ffb3d
--- /dev/null
+++ b/.config/fish/conf.d/gnupg.fish
@@ -0,0 +1,6 @@
+set -e SSH_AGENT_PID
+if test -z $gnupg_SSH_AUTH_SOCK_BY; or test $gnupg_SSH_AUTH_SOCK_BY -ne $fish_pid
+ set -gx SSH_AUTH_SOCK (gpgconf --list-dirs agent-ssh-socket)
+end
+set -gx GPG_TTY (tty)
+gpg-connect-agent updatestartuptty /bye >/dev/null
diff --git a/.config/fish/conf.d/homebrew.fish b/.config/fish/conf.d/homebrew.fish
new file mode 100644
index 00000000..47ce4c59
--- /dev/null
+++ b/.config/fish/conf.d/homebrew.fish
@@ -0,0 +1,3 @@
+if test -x /home/linuxbrew/.linuxbrew/bin/brew
+ eval (/home/linuxbrew/.linuxbrew/bin/brew shellenv)
+end
diff --git a/.config/fish/conf.d/mise.fish b/.config/fish/conf.d/mise.fish
new file mode 100644
index 00000000..756a765f
--- /dev/null
+++ b/.config/fish/conf.d/mise.fish
@@ -0,0 +1,3 @@
+if type -q mise
+ mise activate fish | source
+end
diff --git a/.config/fish/conf.d/starship.fish b/.config/fish/conf.d/starship.fish
new file mode 100644
index 00000000..77e9da4a
--- /dev/null
+++ b/.config/fish/conf.d/starship.fish
@@ -0,0 +1,3 @@
+if type -q starship
+ starship init fish | source
+end
diff --git a/.config/fish/conf.d/zoxide.fish b/.config/fish/conf.d/zoxide.fish
new file mode 100644
index 00000000..8258939f
--- /dev/null
+++ b/.config/fish/conf.d/zoxide.fish
@@ -0,0 +1,3 @@
+if type -q zoxide
+ zoxide init fish | source
+end
diff --git a/.config/fish/config.fish b/.config/fish/config.fish
new file mode 100644
index 00000000..2865428b
--- /dev/null
+++ b/.config/fish/config.fish
@@ -0,0 +1,2 @@
+source ~/.config/fish/user_variables.fish
+source ~/.config/fish/abbreviations.fish
diff --git a/.config/fish/fish_plugins b/.config/fish/fish_plugins
new file mode 100644
index 00000000..72b60fc7
--- /dev/null
+++ b/.config/fish/fish_plugins
@@ -0,0 +1,7 @@
+catppuccin/fish
+franciscolourenco/done
+matt-ftw/fzf.fish
+gazorby/fish-abbreviation-tips
+oh-my-fish/plugin-sudope
+nickeb96/puffer-fish
+jorgebucaran/autopair.fish
diff --git a/.config/fish/fish_variables b/.config/fish/fish_variables
new file mode 100644
index 00000000..b90e5c7e
--- /dev/null
+++ b/.config/fish/fish_variables
@@ -0,0 +1,71 @@
+# This file contains fish universal variable definitions.
+# VERSION: 3.0
+SETUVAR --export ABBR_TIPS_PROMPT:\x5cn\U0001f4a1\x20\x5ce\x5b1m\x7b\x7b\x20\x2eabbr\x20\x7d\x7d\x5ce\x5b0m\x20\x3d\x3e\x20\x7b\x7b\x20\x2ecmd\x20\x7d\x7d
+SETUVAR --export ABBR_TIPS_REGEXES:\x28\x5e\x28\x5cw\x2b\x5cs\x2b\x29\x2b\x28\x2d\x7b1\x2c2\x7d\x29\x5cw\x2b\x29\x28\x5cs\x5cS\x2b\x29\x1e\x28\x5e\x28\x5cs\x3f\x28\x5cw\x2d\x3f\x29\x2b\x29\x7b3\x7d\x29\x2e\x2a\x1e\x28\x5e\x28\x5cs\x3f\x28\x5cw\x2d\x3f\x29\x2b\x29\x7b2\x7d\x29\x2e\x2a\x1e\x28\x5e\x28\x5cs\x3f\x28\x5cw\x2d\x3f\x29\x2b\x29\x7b1\x7d\x29\x2e\x2a
+SETUVAR --export CARAPACE_BRIDGES:zsh\x2cfish\x2cbash\x2cinshellisense\x2c
+SETUVAR --export EDITOR:nvim
+SETUVAR --export --path GOPATH:/home/matt/\x2elocal/share/go
+SETUVAR --export SSH_AUTH_SOCK:/run/user/1000/gnupg/S\x2egpg\x2dagent\x2essh
+SETUVAR TO_DIR:/home/matt/\x2etofish
+SETUVAR --export VISUAL:nvim
+SETUVAR --export XDG_BIN_HOME:/home/matt/\x2elocal/bin
+SETUVAR --export XDG_CACHE_HOME:/home/matt/\x2ecache
+SETUVAR --export XDG_CONFIG_HOME:/home/matt/\x2econfig
+SETUVAR --export XDG_DATA_HOME:/home/matt/\x2elocal/share
+SETUVAR --export XDG_SCRIPT_HOME:/home/matt/\x2elocal/script
+SETUVAR --export __ABBR_TIPS_KEYS:g\x1ed\x1ea__bruh\x1ea__c\x1ea__cat\x1ea__catp\x1ea__cl\x1ea__clock\x1ea__codeinfo\x1ea__cv\x1ea__disks\x1ea__dots\x1ea__dsize\x1ea__ex\x1ea__f\x1ea__fetch\x1ea__gfetch\x1ea__gpt\x1ea__gr\x1ea__i\x1ea__info\x1ea__ip\x1ea__l\x1ea__ld\x1ea__ldh\x1ea__lg\x1ea__lh\x1ea__lm\x1ea__ls\x1ea__lsh\x1ea__lt\x1ea__lth\x1ea__lzd\x1ea__matrix\x1ea__mkdir\x1ea__op\x1ea__pages\x1ea__proc\x1ea__pse\x1ea__q\x1ea__r\x1ea__s\x1ea__sc\x1ea__svn\x1ea__t\x1ea__ta\x1ea__test\x2dnet\x1ea__tr\x1ea__u\x1ea__up\x1ea__upall\x1ea__v\x1ea__vcl\x1ea__vv\x1ea__vvl\x1ea__vvn\x1ea__wget\x1ea__yarn\x1ea__z\x1ea__zi
+SETUVAR --export __ABBR_TIPS_VALUES:git\x1edocker\x1egenact\x20\x2ds\x204\x1ez\x1ebat\x1ebat\x20\x2d\x2dpaging\x3dalways\x1eclear\x1etty\x2dclock\x20\x2dsbc\x1escc\x20\x2e/\x1ez\x20\x26\x26\x20v\x1eduf\x1eyadm\x20enter\x20lazygit\x1edua\x20i\x1esudo\x20chmod\x20\x2bx\x1efzf\x1efastfetch\x1eonefetch\x1etgpt\x20\x2di\x1ecd\x20\x22\x24\x28git\x20rev\x2dparse\x20\x2d\x2dshow\x2dtoplevel\x29\x22\x1eyay\x20\x2dS\x20\x1etldr\x1eip\x20\x2dc\x20a\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1elazydocker\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2dD\x20\x2d\x2dgit\x1elazygit\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1el\x3deza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dicons\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2da\x20\x2d\x2dicons\x20\x2d\x2dtree\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1eeza\x20\x2d\x2dlong\x20\x2d\x2dheader\x20\x2d\x2dicons\x20\x2d\x2dtree\x20\x2d\x2dgit\x20\x2d\x2dgroup\x2ddirectories\x2dfirst\x1elazydocker\x1eunimatrix\x20\x2ds\x2095\x1emkdir\x20\x2dp\x1ecd\x20\x7e/Documents/Obsidian/obsidianVault\x1enavi\x1esysz\x1epacseek\x1eexit\x1emise\x20run\x1esudo\x1er\x3dsource\x20\x24XDG_CONFIG_HOME/fish/config\x2efish\x1esvn\x20\x2d\x2dconfig\x2ddir\x20\x5c\x5c\x5c\x5c\x22\x24XDG_CONFIG_HOME\x5c\x5c\x5c\x5c\x22/subversion\x1etmux\x1etmux\x20attach\x20\x2dt\x1ecommand\x20up\x1etrash\x1eyay\x20\x2dR\x20\x1eyay\x20\x2dSyu\x1etopgrade\x1envim\x1envim\x20\x2d\x2dclean\x1ebob\x1ebob\x20use\x20latest\x1ebob\x20use\x20nightly\x1ewget\x20\x2d\x2dhsts\x2dfile\x3d\x22\x24XDG_DATA_HOME/wget\x2dhsts\x22\x1eyarn\x20\x2d\x2duse\x2dyarnrc\x20\x22\x24XDG_CONFIG_HOME/yarn/config\x22\x1e__zoxide_z\x1e__zoxide_zi
+SETUVAR __fish_initialized:3800
+SETUVAR _fish_abbr_d:docker
+SETUVAR _fish_abbr_g:git
+SETUVAR _fisher_catppuccin_2F_fish_files:\x7e/\x2econfig/fish/themes/Catppuccin\x20Frappe\x2etheme\x1e\x7e/\x2econfig/fish/themes/Catppuccin\x20Latte\x2etheme\x1e\x7e/\x2econfig/fish/themes/Catppuccin\x20Macchiato\x2etheme\x1e\x7e/\x2econfig/fish/themes/Catppuccin\x20Mocha\x2etheme
+SETUVAR _fisher_franciscolourenco_2F_done_files:\x7e/\x2econfig/fish/conf\x2ed/done\x2efish
+SETUVAR _fisher_gazorby_2F_fish_2D_abbreviation_2D_tips_files:\x7e/\x2econfig/fish/functions/__abbr_tips_bind_newline\x2efish\x1e\x7e/\x2econfig/fish/functions/__abbr_tips_bind_space\x2efish\x1e\x7e/\x2econfig/fish/functions/__abbr_tips_clean\x2efish\x1e\x7e/\x2econfig/fish/functions/__abbr_tips_init\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/abbr_tips\x2efish
+SETUVAR _fisher_jorgebucaran_2F_autopair_2E_fish_files:\x7e/\x2econfig/fish/functions/_autopair_backspace\x2efish\x1e\x7e/\x2econfig/fish/functions/_autopair_insert_left\x2efish\x1e\x7e/\x2econfig/fish/functions/_autopair_insert_right\x2efish\x1e\x7e/\x2econfig/fish/functions/_autopair_insert_same\x2efish\x1e\x7e/\x2econfig/fish/functions/_autopair_tab\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/autopair\x2efish
+SETUVAR _fisher_matt_2D_ftw_2F_fzf_2E_fish_files:\x7e/\x2econfig/fish/functions/_fzf_configure_bindings_help\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_extract_var_info\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_preview_changed_file\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_preview_file\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_report_diff_type\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_report_file_type\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_completions\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_directory\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_git_log\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_git_status\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_history\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_processes\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_search_variables\x2efish\x1e\x7e/\x2econfig/fish/functions/_fzf_wrapper\x2efish\x1e\x7e/\x2econfig/fish/functions/fzf_configure_bindings\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/fzf\x2efish\x1e\x7e/\x2econfig/fish/completions/fzf_configure_bindings\x2efish
+SETUVAR _fisher_nickeb96_2F_puffer_2D_fish_files:\x7e/\x2econfig/fish/functions/_puffer_fish_expand_bang\x2efish\x1e\x7e/\x2econfig/fish/functions/_puffer_fish_expand_dots\x2efish\x1e\x7e/\x2econfig/fish/functions/_puffer_fish_expand_lastarg\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/puffer_fish_key_bindings\x2efish
+SETUVAR _fisher_oh_2D_my_2D_fish_2F_plugin_2D_sudope_files:\x7e/\x2econfig/fish/functions/sudope\x2efish\x1e\x7e/\x2econfig/fish/conf\x2ed/plugin\x2dsudope\x2efish
+SETUVAR _fisher_plugins:catppuccin/fish\x1efranciscolourenco/done\x1egazorby/fish\x2dabbreviation\x2dtips\x1eoh\x2dmy\x2dfish/plugin\x2dsudope\x1enickeb96/puffer\x2dfish\x1ejorgebucaran/autopair\x2efish\x1ematt\x2dftw/fzf\x2efish
+SETUVAR _fisher_upgraded_to_4_4:\x1d
+SETUVAR fish_color_autosuggestion:6e738d
+SETUVAR fish_color_cancel:ed8796
+SETUVAR fish_color_command:8aadf4
+SETUVAR fish_color_comment:8087a2
+SETUVAR fish_color_cwd:eed49f
+SETUVAR fish_color_cwd_root:red
+SETUVAR fish_color_end:f5a97f
+SETUVAR fish_color_error:ed8796
+SETUVAR fish_color_escape:ee99a0
+SETUVAR fish_color_gray:6e738d
+SETUVAR fish_color_history_current:\x2d\x2dbold
+SETUVAR fish_color_host:8aadf4
+SETUVAR fish_color_host_remote:a6da95
+SETUVAR fish_color_keyword:ed8796
+SETUVAR fish_color_normal:cad3f5
+SETUVAR fish_color_operator:f5bde6
+SETUVAR fish_color_option:a6da95
+SETUVAR fish_color_param:f0c6c6
+SETUVAR fish_color_quote:a6da95
+SETUVAR fish_color_redirection:f5bde6
+SETUVAR fish_color_search_match:\x2d\x2dbackground\x3d363a4f
+SETUVAR fish_color_selection:\x2d\x2dbackground\x3d363a4f
+SETUVAR fish_color_status:ed8796
+SETUVAR fish_color_user:8bd5ca
+SETUVAR fish_color_valid_path:\x2d\x2dunderline
+SETUVAR fish_greeting:
+SETUVAR fish_key_bindings:fish_default_key_bindings
+SETUVAR fish_pager_color_background:\x1d
+SETUVAR fish_pager_color_completion:cad3f5
+SETUVAR fish_pager_color_description:6e738d
+SETUVAR fish_pager_color_prefix:f5bde6
+SETUVAR fish_pager_color_progress:6e738d
+SETUVAR fish_pager_color_secondary_background:\x1d
+SETUVAR fish_pager_color_secondary_completion:\x1d
+SETUVAR fish_pager_color_secondary_description:\x1d
+SETUVAR fish_pager_color_secondary_prefix:\x1d
+SETUVAR fish_pager_color_selected_background:\x1d
+SETUVAR fish_pager_color_selected_completion:\x1d
+SETUVAR fish_pager_color_selected_description:\x1d
+SETUVAR fish_pager_color_selected_prefix:\x1d
+SETUVAR fish_user_paths:/home/matt/\x2elocal/share/pnpm\x1e/home/matt/\x2elocal/share/nvim/mason/bin\x1e/home/matt/\x2eyarn/bin\x1e/home/matt/\x2elocal/share/npm/bin\x1e/home/matt/\x2elocal/share/bob/nvim\x2dbin\x1e/home/matt/\x2elocal/share/bun/bin\x1e/usr/lib/go/bin\x1e/usr/lib/rustup/bin\x1e/sbin\x1e/bin\x1e/usr/sbin\x1e/usr/bin\x1e/usr/local/sbin\x1e/usr/local/bin\x1e/home/matt/\x2elocal/share/cargo/bin\x1e/home/matt/\x2elocal/share/go/bin\x1e/home/matt/\x2elocal/bin/color\x2dscripts\x1e/home/matt/\x2elocal/bin
+SETUVAR fish_user_paths:/home/kappa/bin\x1e/home/kappa/\x2elocal/share/nvim/mason/bin\x1e/home/kappa/\x2elocal/share/go/bin\x1e/home/kappa/\x2elocal/bin/color\x2dscripts\x1e/home/kappa/\x2elocal/bin\x1e/home/matt/\x2elocal/share/pnpm\x1e/home/matt/\x2elocal/share/nvim/mason/bin\x1e/home/matt/\x2eyarn/bin\x1e/home/matt/\x2elocal/share/npm/bin\x1e/home/matt/\x2elocal/share/bob/nvim\x2dbin\x1e/home/matt/\x2elocal/share/bun/bin\x1e/usr/lib/go/bin\x1e/usr/lib/rustup/bin\x1e/sbin\x1e/bin\x1e/usr/sbin\x1e/usr/bin\x1e/usr/local/sbin\x1e/usr/local/bin\x1e/home/matt/\x2elocal/share/cargo/bin\x1e/home/matt/\x2elocal/share/go/bin\x1e/home/matt/\x2elocal/bin/color\x2dscripts\x1e/home/matt/\x2elocal/bin
diff --git a/.config/fish/functions/backup.fish b/.config/fish/functions/backup.fish
new file mode 100644
index 00000000..57de44dd
--- /dev/null
+++ b/.config/fish/functions/backup.fish
@@ -0,0 +1,3 @@
+function backup --argument filename
+ cp $filename $filename.bak
+end
diff --git a/.config/fish/functions/bin.fish b/.config/fish/functions/bin.fish
new file mode 100644
index 00000000..33aa63e0
--- /dev/null
+++ b/.config/fish/functions/bin.fish
@@ -0,0 +1,3 @@
+function bin --argument file
+ ln -sr (realpath $file) /usr/local/bin/
+end
diff --git a/.config/fish/functions/bruh.fish b/.config/fish/functions/bruh.fish
new file mode 100644
index 00000000..cb1cdc8e
--- /dev/null
+++ b/.config/fish/functions/bruh.fish
@@ -0,0 +1,3 @@
+function bruh --wraps='genact -s 4' --description 'alias bruh=genact -s 4'
+ genact -s 4 $argv
+end
diff --git a/.config/fish/functions/c.fish b/.config/fish/functions/c.fish
new file mode 100644
index 00000000..1cea3406
--- /dev/null
+++ b/.config/fish/functions/c.fish
@@ -0,0 +1,3 @@
+function c --wraps=clear --wraps=z --description 'alias c=z'
+ z $argv
+end
diff --git a/.config/fish/functions/cat.fish b/.config/fish/functions/cat.fish
new file mode 100644
index 00000000..c53e1010
--- /dev/null
+++ b/.config/fish/functions/cat.fish
@@ -0,0 +1,7 @@
+function cat --wraps=bat --description 'alias cat=bat'
+ if type -f bat &>/dev/null; and [ -t 1 ]
+ bat $argv
+ else
+ command cat $argv
+ end
+end
diff --git a/.config/fish/functions/catp.fish b/.config/fish/functions/catp.fish
new file mode 100644
index 00000000..96b2207d
--- /dev/null
+++ b/.config/fish/functions/catp.fish
@@ -0,0 +1,7 @@
+function catp --wraps='bat --paging=always' --description 'alias catp=bat --paging=always'
+ if type -f bat &>/dev/null
+ bat --paging=always $argv
+ else
+ cat --paging=always $argv
+ end
+end
diff --git a/.config/fish/functions/cl.fish b/.config/fish/functions/cl.fish
new file mode 100644
index 00000000..89dd15db
--- /dev/null
+++ b/.config/fish/functions/cl.fish
@@ -0,0 +1,3 @@
+function cl --wraps=clear --wraps='clear' --description 'alias cl=clear'
+ clear
+end
diff --git a/.config/fish/functions/clean-unzip.fish b/.config/fish/functions/clean-unzip.fish
new file mode 100644
index 00000000..aa600b8d
--- /dev/null
+++ b/.config/fish/functions/clean-unzip.fish
@@ -0,0 +1,15 @@
+function clean-unzip --argument zipfile
+ if not test (echo $zipfile | string sub --start=-4) = .zip
+ echo (status function): argument must be a zipfile
+ return 1
+ end
+
+ if is-clean-zip $zipfile
+ unzip $zipfile
+ else
+ set folder_name (echo $zipfile | trim-right '.zip')
+ set target (basename $folder_name)
+ mkdir $target || return 1
+ unzip $zipfile -d $target
+ end
+end
diff --git a/.config/fish/functions/clean.fish b/.config/fish/functions/clean.fish
new file mode 100644
index 00000000..a790a1f9
--- /dev/null
+++ b/.config/fish/functions/clean.fish
@@ -0,0 +1,8 @@
+function clean
+ sudo paccache -rk1
+ sudo paccache -ruk0
+ deleteOrphans
+ cargo cache -a
+ pnpm store prune
+ sudo docker system prune -a
+end
diff --git a/.config/fish/functions/clock.fish b/.config/fish/functions/clock.fish
new file mode 100644
index 00000000..acbdeb53
--- /dev/null
+++ b/.config/fish/functions/clock.fish
@@ -0,0 +1,3 @@
+function clock --wraps='tty-clock -sbc' --description 'alias clock=tty-clock -sbc'
+ tty-clock -sbc $argv
+end
diff --git a/.config/fish/functions/clone-cd.fish b/.config/fish/functions/clone-cd.fish
new file mode 100644
index 00000000..a949dd2c
--- /dev/null
+++ b/.config/fish/functions/clone-cd.fish
@@ -0,0 +1,11 @@
+function clone-cd --argument url _destination
+ set destination (default $_destination (repo-from-url $url))
+
+ if file-exists $destination
+ echo 'Already cloned. Attempting pull...'
+ cd $destination && git pull
+ return
+ end
+
+ git clone --depth=1 $url $destination && cd $destination
+end
diff --git a/.config/fish/functions/codeinfo.fish b/.config/fish/functions/codeinfo.fish
new file mode 100644
index 00000000..0d449966
--- /dev/null
+++ b/.config/fish/functions/codeinfo.fish
@@ -0,0 +1,7 @@
+function codeinfo --wraps='scc ./' --description 'alias codeinfo=scc ./'
+ if type -f scc &>/dev/null
+ scc ./ $argv
+ else
+ missing_package scc
+ end
+end
diff --git a/.config/fish/functions/copy.fish b/.config/fish/functions/copy.fish
new file mode 100644
index 00000000..9a614783
--- /dev/null
+++ b/.config/fish/functions/copy.fish
@@ -0,0 +1,11 @@
+function copy
+ set count (count $argv | tr -d \n)
+ if test "$count" = 2; and test -d "$argv[1]"
+ set from (echo $argv[1] | trim-right /)
+ set to (echo $argv[2])
+ mkdir -p (basename $to)
+ command cp -i -r $from $to
+ else
+ command cp -i $argv
+ end
+end
diff --git a/.config/fish/functions/cv.fish b/.config/fish/functions/cv.fish
new file mode 100644
index 00000000..a243e33b
--- /dev/null
+++ b/.config/fish/functions/cv.fish
@@ -0,0 +1,3 @@
+function cv --wraps=clear --wraps='z && v' --description 'alias cv=z && v'
+ z $argv && v
+end
diff --git a/.config/fish/functions/disks.fish b/.config/fish/functions/disks.fish
new file mode 100644
index 00000000..7f2e8987
--- /dev/null
+++ b/.config/fish/functions/disks.fish
@@ -0,0 +1,7 @@
+function disks --wraps=duf --description 'alias disks=duf'
+ if type -f duf &>/dev/null
+ duf $argv
+ else
+ missing_package duf
+ end
+end
diff --git a/.config/fish/functions/dots.fish b/.config/fish/functions/dots.fish
new file mode 100644
index 00000000..1e1e0812
--- /dev/null
+++ b/.config/fish/functions/dots.fish
@@ -0,0 +1,3 @@
+function dots --description 'alias dots=yadm enter lazygit'
+ fish -c 'cd $HOME; yadm enter lazygit'
+end
diff --git a/.config/fish/functions/dsize.fish b/.config/fish/functions/dsize.fish
new file mode 100644
index 00000000..7ebdffa2
--- /dev/null
+++ b/.config/fish/functions/dsize.fish
@@ -0,0 +1,7 @@
+function dsize --wraps='dua i' --description 'alias dsize=dua i'
+ if type -f dua &>/dev/null
+ dua i $argv
+ else
+ missing_package dua-cli
+ end
+end
diff --git a/.config/fish/functions/ex.fish b/.config/fish/functions/ex.fish
new file mode 100644
index 00000000..1e81d0ff
--- /dev/null
+++ b/.config/fish/functions/ex.fish
@@ -0,0 +1,3 @@
+function ex --wraps='sudo chmod +x' --description 'alias ex=sudo chmod +x'
+ sudo chmod +x $argv
+end
diff --git a/.config/fish/functions/f.fish b/.config/fish/functions/f.fish
new file mode 100644
index 00000000..e07bc819
--- /dev/null
+++ b/.config/fish/functions/f.fish
@@ -0,0 +1,7 @@
+function f --wraps=fzf --description 'alias f=fzf'
+ if type -f fzf &>/dev/null
+ fzf $argv
+ else
+ missing_package fzf
+ end
+end
diff --git a/.config/fish/functions/fetch.fish b/.config/fish/functions/fetch.fish
new file mode 100644
index 00000000..ce670dd2
--- /dev/null
+++ b/.config/fish/functions/fetch.fish
@@ -0,0 +1,7 @@
+function fetch --wraps=fastfetch --description 'alias fetch=fastfetch'
+ if type -f fastfetch &>/dev/null
+ fastfetch $argv
+ else
+ missing_package fastfetch
+ end
+end
diff --git a/.config/fish/functions/fish_greeting.fish b/.config/fish/functions/fish_greeting.fish
new file mode 100644
index 00000000..594cd5b0
--- /dev/null
+++ b/.config/fish/functions/fish_greeting.fish
@@ -0,0 +1,5 @@
+function fish_greeting
+ # if type -q colorscript
+ # colorscript random
+ # end
+end
diff --git a/.config/fish/functions/fish_user_key_bindings.fish b/.config/fish/functions/fish_user_key_bindings.fish
new file mode 100644
index 00000000..22ca93e5
--- /dev/null
+++ b/.config/fish/functions/fish_user_key_bindings.fish
@@ -0,0 +1,16 @@
+function fish_user_key_bindings
+ set -xg fish_key_bindings fish_vi_key_bindings
+ fish_default_key_bindings -M insert
+ fish_vi_key_bindings --no-erase insert
+ bind -M visual -m default y 'fish_clipboard_copy; commandline -f end-selection repaint-mode'
+ bind yy fish_clipboard_copy
+ bind p fish_clipboard_paste
+ for dir in ~/.config/fish/functions
+ if test -f "$dir/fzf_configure_bindings.fish"
+ fzf_configure_bindings --directory=\e\cf --history=\ch --variables=\e\cv
+ break
+ end
+ end
+
+ bind -M insert \e\z zi
+end
diff --git a/.config/fish/functions/gfetch.fish b/.config/fish/functions/gfetch.fish
new file mode 100644
index 00000000..32494c1a
--- /dev/null
+++ b/.config/fish/functions/gfetch.fish
@@ -0,0 +1,7 @@
+function gfetch --wraps=onefetch --description 'alias gfetch=onefetch'
+ if type -f onefetch &>/dev/null
+ onefetch $argv
+ else
+ missing_package onefetch
+ end
+end
diff --git a/.config/fish/functions/gpt.fish b/.config/fish/functions/gpt.fish
new file mode 100644
index 00000000..06abcff1
--- /dev/null
+++ b/.config/fish/functions/gpt.fish
@@ -0,0 +1,7 @@
+function gpt --wraps='tgpt -i' --description 'alias gpt=tgpt -i'
+ if type -f tgpt &>/dev/null
+ tgpt $argv
+ else
+ missing_package tgpt
+ end
+end
diff --git a/.config/fish/functions/gr.fish b/.config/fish/functions/gr.fish
new file mode 100644
index 00000000..aee5e241
--- /dev/null
+++ b/.config/fish/functions/gr.fish
@@ -0,0 +1,3 @@
+function gr --wraps='cd "$(git rev-parse --show-toplevel)"' --description 'alias gr=cd "$(git rev-parse --show-toplevel)"'
+ cd "$(git rev-parse --show-toplevel)" $argv
+end
diff --git a/.config/fish/functions/i.fish b/.config/fish/functions/i.fish
new file mode 100644
index 00000000..11b8050b
--- /dev/null
+++ b/.config/fish/functions/i.fish
@@ -0,0 +1,7 @@
+function i --wraps='yay -S ' --description 'alias i=yay -S '
+ if type -f yay &>/dev/null
+ yay -Sy $argv
+ else
+ pacman -Sy $argv
+ end
+end
diff --git a/.config/fish/functions/info.fish b/.config/fish/functions/info.fish
new file mode 100644
index 00000000..93acd924
--- /dev/null
+++ b/.config/fish/functions/info.fish
@@ -0,0 +1,7 @@
+function info --wraps=tldr --description 'alias info=tldr'
+ if type -f tldr &>/dev/null
+ tldr $argv
+ else
+ missing_package tldr
+ end
+end
diff --git a/.config/fish/functions/ip.fish b/.config/fish/functions/ip.fish
new file mode 100644
index 00000000..ba096ddf
--- /dev/null
+++ b/.config/fish/functions/ip.fish
@@ -0,0 +1,3 @@
+function ip --description 'alias ip=ip -c a'
+ command ip -c a $argv
+end
diff --git a/.config/fish/functions/l.fish b/.config/fish/functions/l.fish
new file mode 100644
index 00000000..5f2e3280
--- /dev/null
+++ b/.config/fish/functions/l.fish
@@ -0,0 +1,7 @@
+function l --wraps='eza --long --header -a --icons --git --group-directories-first' --description 'alias l=eza --long --header -a --icons --git --group-directories-first'
+ if type -f eza &>/dev/null
+ eza --long --header -a --icons --git --group-directories-first --hyperlink $argv
+ else
+ missing_package eza
+ end
+end
diff --git a/.config/fish/functions/ld.fish b/.config/fish/functions/ld.fish
new file mode 100644
index 00000000..15899fb4
--- /dev/null
+++ b/.config/fish/functions/ld.fish
@@ -0,0 +1,7 @@
+function ld --wraps=lazydocker --description 'alias ld=lazydocker'
+ if type -f lazydocker &>/dev/null
+ lazydocker $argv
+ else
+ missing_package lazydocker
+ end
+end
diff --git a/.config/fish/functions/ldh.fish b/.config/fish/functions/ldh.fish
new file mode 100644
index 00000000..988ca9aa
--- /dev/null
+++ b/.config/fish/functions/ldh.fish
@@ -0,0 +1,7 @@
+function ldh --wraps='eza --long --header --icons -D --git' --description 'alias ldh=eza --long --header --icons -D --git'
+ if type -f eza &>/dev/null
+ eza --long --header --icons -D --git --hyperlink $argv
+ else
+ missing_package eza
+ end
+end
diff --git a/.config/fish/functions/lg.fish b/.config/fish/functions/lg.fish
new file mode 100644
index 00000000..1fed057a
--- /dev/null
+++ b/.config/fish/functions/lg.fish
@@ -0,0 +1,7 @@
+function lg --wraps=lazygit --description 'alias lg=lazygit'
+ if type -f lazygit &>/dev/null
+ lazygit $argv
+ else
+ missing_package lazygit
+ end
+end
diff --git a/.config/fish/functions/lh.fish b/.config/fish/functions/lh.fish
new file mode 100644
index 00000000..6f9522c0
--- /dev/null
+++ b/.config/fish/functions/lh.fish
@@ -0,0 +1,7 @@
+function lh --wraps='eza --long --header --icons --git --group-directories-first' --description 'alias lh=eza --long --header --icons --git --group-directories-first'
+ if type -f eza &>/dev/null
+ eza --long --header --icons --git --group-directories-first --hyperlink $argv
+ else
+ missing_package eza
+ end
+end
diff --git a/.config/fish/functions/lm.fish b/.config/fish/functions/lm.fish
new file mode 100644
index 00000000..47a6861e
--- /dev/null
+++ b/.config/fish/functions/lm.fish
@@ -0,0 +1,7 @@
+function lm --wraps='eza --long --header -a --icons --git --group-directories-first' --description 'alias l=eza --long --header -a --icons --git --group-directories-first'
+ if type -f eza &>/dev/null
+ eza --long --header -a --icons --git --hyperlink -s modified $argv
+ else
+ missing_package eza
+ end
+end
diff --git a/.config/fish/functions/ls.fish b/.config/fish/functions/ls.fish
new file mode 100644
index 00000000..d99c7853
--- /dev/null
+++ b/.config/fish/functions/ls.fish
@@ -0,0 +1,7 @@
+function ls --wraps='eza -a --icons --group-directories-first' --description 'alias ls=eza -a --icons --group-directories-first'
+ if type -f eza &>/dev/null
+ eza -a --icons --group-directories-first --hyperlink $argv
+ else
+ missing_package eza
+ end
+end
diff --git a/.config/fish/functions/lsh.fish b/.config/fish/functions/lsh.fish
new file mode 100644
index 00000000..aae12099
--- /dev/null
+++ b/.config/fish/functions/lsh.fish
@@ -0,0 +1,7 @@
+function lsh --wraps='eza --icons --git --group-directories-first' --description 'alias lsh=eza --icons --git --group-directories-first'
+ if type -f eza &>/dev/null
+ eza --icons --git --group-directories-first --hyperlink $argv
+ else
+ missing_package eza
+ end
+end
diff --git a/.config/fish/functions/lt.fish b/.config/fish/functions/lt.fish
new file mode 100644
index 00000000..be2de911
--- /dev/null
+++ b/.config/fish/functions/lt.fish
@@ -0,0 +1,7 @@
+function lt --wraps='eza --long --header -a --icons --tree --git --group-directories-first' --description 'alias lt=eza --long --header -a --icons --tree --git --group-directories-first'
+ if type -f eza &>/dev/null
+ eza --long --header -a --icons --tree --git --group-directories-first --hyperlink $argv
+ else
+ missing_package eza
+ end
+end
diff --git a/.config/fish/functions/lth.fish b/.config/fish/functions/lth.fish
new file mode 100644
index 00000000..6c076896
--- /dev/null
+++ b/.config/fish/functions/lth.fish
@@ -0,0 +1,7 @@
+function lth --wraps='eza --long --header --icons --tree --git --group-directories-first' --description 'alias lth=eza --long --header --icons --tree --git --group-directories-first'
+ if type -f eza &>/dev/null
+ eza --long --header --icons --tree --git --group-directories-first --hyperlink $argv
+ else
+ missing_package eza
+ end
+end
diff --git a/.config/fish/functions/lzd.fish b/.config/fish/functions/lzd.fish
new file mode 100644
index 00000000..e62ffb26
--- /dev/null
+++ b/.config/fish/functions/lzd.fish
@@ -0,0 +1,7 @@
+function lzd --wraps=lazydocker --description 'alias lzd=lazydocker'
+ if type -f lazydocker &>/dev/null
+ lazydocker $argv
+ else
+ missing_package lazygit
+ end
+end
diff --git a/.config/fish/functions/matrix.fish b/.config/fish/functions/matrix.fish
new file mode 100644
index 00000000..be488f12
--- /dev/null
+++ b/.config/fish/functions/matrix.fish
@@ -0,0 +1,3 @@
+function matrix --wraps='unimatrix -s 95' --description 'alias matrix=unimatrix -s 95'
+ unimatrix -s 95 $argv
+end
diff --git a/.config/fish/functions/missing_package.fish b/.config/fish/functions/missing_package.fish
new file mode 100644
index 00000000..0f21f202
--- /dev/null
+++ b/.config/fish/functions/missing_package.fish
@@ -0,0 +1,12 @@
+function missing_package
+ while true
+ read -l -P "$argv[1] not found. Do you want to install it? [y/N] " confirm
+
+ if test "$confirm" = y
+ i $argv
+ break
+ else
+ break
+ end
+ end
+end
diff --git a/.config/fish/functions/mkdir-cd.fish b/.config/fish/functions/mkdir-cd.fish
new file mode 100644
index 00000000..6bfae861
--- /dev/null
+++ b/.config/fish/functions/mkdir-cd.fish
@@ -0,0 +1,4 @@
+function mkdir-cd --argument dir
+ mkdir -p -- $dir
+ and cd -- $dir
+end
diff --git a/.config/fish/functions/mkdir.fish b/.config/fish/functions/mkdir.fish
new file mode 100644
index 00000000..dc317c5e
--- /dev/null
+++ b/.config/fish/functions/mkdir.fish
@@ -0,0 +1,3 @@
+function mkdir --description 'alias mkdir=mkdir -p'
+ command mkdir -p $argv
+end
diff --git a/.config/fish/functions/op.fish b/.config/fish/functions/op.fish
new file mode 100644
index 00000000..5f2988f8
--- /dev/null
+++ b/.config/fish/functions/op.fish
@@ -0,0 +1,3 @@
+function op --wraps='cd ~/Documents/Obsidian/obsidianVault' --description 'alias op=cd ~/Documents/Obsidian/obsidianVault'
+ tmuxp load -y notes-tasks
+end
diff --git a/.config/fish/functions/pages.fish b/.config/fish/functions/pages.fish
new file mode 100644
index 00000000..8d69720d
--- /dev/null
+++ b/.config/fish/functions/pages.fish
@@ -0,0 +1,7 @@
+function pages --wraps=navi --description 'alias pages=navi'
+ if type -f navi &>/dev/null
+ navi $argv
+ else
+ missing_package navi
+ end
+end
diff --git a/.config/fish/functions/proc.fish b/.config/fish/functions/proc.fish
new file mode 100644
index 00000000..dab02a6c
--- /dev/null
+++ b/.config/fish/functions/proc.fish
@@ -0,0 +1,7 @@
+function proc --wraps=sysz --description 'alias proc=sysz'
+ if type -f sysz &>/dev/null
+ sysz $argv
+ else
+ missing_package sysz
+ end
+end
diff --git a/.config/fish/functions/pse.fish b/.config/fish/functions/pse.fish
new file mode 100644
index 00000000..ae660f0a
--- /dev/null
+++ b/.config/fish/functions/pse.fish
@@ -0,0 +1,8 @@
+function pse --wraps=pacseek --description 'alias pse=pacseek'
+ if type -f pacseek &>/dev/null
+ pacseek $argv
+ else
+ missing_package pacseek
+ end
+
+end
diff --git a/.config/fish/functions/q.fish b/.config/fish/functions/q.fish
new file mode 100644
index 00000000..125c6374
--- /dev/null
+++ b/.config/fish/functions/q.fish
@@ -0,0 +1,3 @@
+function q --wraps=exit --description 'alias q=exit'
+ exit $argv
+end
diff --git a/.config/fish/functions/r.fish b/.config/fish/functions/r.fish
new file mode 100644
index 00000000..f924bd1e
--- /dev/null
+++ b/.config/fish/functions/r.fish
@@ -0,0 +1,8 @@
+function r --wraps='mise run' --description 'alias r=mise run'
+ if type -f mise &>/dev/null
+ mise run $argv
+ else
+ missing_package mise
+ end
+
+end
diff --git a/.config/fish/functions/restore.fish b/.config/fish/functions/restore.fish
new file mode 100644
index 00000000..aa923783
--- /dev/null
+++ b/.config/fish/functions/restore.fish
@@ -0,0 +1,3 @@
+function restore --argument file
+ mv $file (echo $file | sed s/.bak//)
+end
diff --git a/.config/fish/functions/rga-fzf.fish b/.config/fish/functions/rga-fzf.fish
new file mode 100644
index 00000000..6b33573a
--- /dev/null
+++ b/.config/fish/functions/rga-fzf.fish
@@ -0,0 +1,16 @@
+function rga-fzf
+ set RG_PREFIX 'rga --files-with-matches'
+ if test (count $argv) -gt 1
+ set RG_PREFIX "$RG_PREFIX $argv[1..-2]"
+ end
+ set -l file $file
+ set file (
+ FZF_DEFAULT_COMMAND="$RG_PREFIX '$argv[-1]'" \
+ fzf --sort \
+ --preview='test ! -z {} && \
+ rga --pretty --context 5 {q} {}' \
+ --phony -q "$argv[-1]" \
+ --bind "change:reload:$RG_PREFIX {q}" \
+ --preview-window='50%:wrap'
+ ) && echo "opening $file" && nvim "$file"
+end
diff --git a/.config/fish/functions/rules.fish b/.config/fish/functions/rules.fish
new file mode 100644
index 00000000..6d5f6ed9
--- /dev/null
+++ b/.config/fish/functions/rules.fish
@@ -0,0 +1,9 @@
+function rules
+ set currentDirectory (pwd)
+ set selectedRule (fd -I --hidden --type f . ~/.config/nvim/rules/ | fzf --preview "bat {}")
+
+ if test -n "$selectedRule"
+ cp $selectedRule $currentDirectory
+ echo "'$selectedRule' copied"
+ end
+end
diff --git a/.config/fish/functions/s.fish b/.config/fish/functions/s.fish
new file mode 100644
index 00000000..ca0eab0d
--- /dev/null
+++ b/.config/fish/functions/s.fish
@@ -0,0 +1,3 @@
+function s --wraps=sudo --description 'alias s=sudo'
+ sudo $argv
+end
diff --git a/.config/fish/functions/sc.fish b/.config/fish/functions/sc.fish
new file mode 100644
index 00000000..2b151c69
--- /dev/null
+++ b/.config/fish/functions/sc.fish
@@ -0,0 +1,3 @@
+function sc --wraps='source $XDG_CONFIG_HOME/fish/config.fish' --description 'alias r=source $XDG_CONFIG_HOME/fish/config.fish'
+ source $XDG_CONFIG_HOME/fish/config.fish $argv
+end
diff --git a/.config/fish/functions/svn.fish b/.config/fish/functions/svn.fish
new file mode 100644
index 00000000..28389dd8
--- /dev/null
+++ b/.config/fish/functions/svn.fish
@@ -0,0 +1,3 @@
+function svn --description alias\ svn=svn\ --config-dir\ \\\"\$XDG_CONFIG_HOME\\\"/subversion
+ command svn --config-dir \"$XDG_CONFIG_HOME\"/subversion $argv
+end
diff --git a/.config/fish/functions/t.fish b/.config/fish/functions/t.fish
new file mode 100644
index 00000000..8e4b21da
--- /dev/null
+++ b/.config/fish/functions/t.fish
@@ -0,0 +1,7 @@
+function t --wraps=tmux --description 'alias t=tmux'
+ if type -f tmux &>/dev/null
+ tmux new-session $argv
+ else
+ missing_package tmux
+ end
+end
diff --git a/.config/fish/functions/ta.fish b/.config/fish/functions/ta.fish
new file mode 100644
index 00000000..7545b889
--- /dev/null
+++ b/.config/fish/functions/ta.fish
@@ -0,0 +1,7 @@
+function ta --wraps='tmux attach -t' --description 'alias ta=tmux attach -t'
+ if type -f tmux &>/dev/null
+ tmux attach
+ else
+ missing_package tmux
+ end
+end
diff --git a/.config/fish/functions/test-net.fish b/.config/fish/functions/test-net.fish
new file mode 100644
index 00000000..b0cd6bec
--- /dev/null
+++ b/.config/fish/functions/test-net.fish
@@ -0,0 +1,3 @@
+function test-net --wraps='command up' --description 'alias test-net=command up'
+ command up $argv
+end
diff --git a/.config/fish/functions/tr.fish b/.config/fish/functions/tr.fish
new file mode 100644
index 00000000..8b1b299d
--- /dev/null
+++ b/.config/fish/functions/tr.fish
@@ -0,0 +1,3 @@
+function tr --wraps=trash --description 'alias tr=trash'
+ trash $argv
+end
diff --git a/.config/fish/functions/u.fish b/.config/fish/functions/u.fish
new file mode 100644
index 00000000..d6cc841d
--- /dev/null
+++ b/.config/fish/functions/u.fish
@@ -0,0 +1,7 @@
+function u --wraps='yay -R ' --description 'alias u=yay -R '
+ if type -f yay &>/dev/null
+ yay -R $argv
+ else
+ pacman -R $argv
+ end
+end
diff --git a/.config/fish/functions/up.fish b/.config/fish/functions/up.fish
new file mode 100644
index 00000000..bdf7f220
--- /dev/null
+++ b/.config/fish/functions/up.fish
@@ -0,0 +1,9 @@
+function up --wraps='yay -Syu' --description 'alias up=yay -Syu'
+ if type -f topgrade &>/dev/null
+ topgrade -k --only system
+ else if type -f yay &>/dev/null
+ yay -Syu $argv
+ else
+ pacman -Syu $argv
+ end
+end
diff --git a/.config/fish/functions/upall.fish b/.config/fish/functions/upall.fish
new file mode 100644
index 00000000..71abe955
--- /dev/null
+++ b/.config/fish/functions/upall.fish
@@ -0,0 +1,7 @@
+function upall --wraps=topgrade --description 'alias upall=topgrade'
+ if type -f topgrade &>/dev/null
+ topgrade -k --no-self-update $argv
+ else
+ missing_package topgrade
+ end
+end
diff --git a/.config/fish/functions/v.fish b/.config/fish/functions/v.fish
new file mode 100644
index 00000000..f1ee126e
--- /dev/null
+++ b/.config/fish/functions/v.fish
@@ -0,0 +1,7 @@
+function v --wraps=nvim --description 'alias v=nvim'
+ if type -f nvim &>/dev/null
+ nvim $argv
+ else
+ missing_package nvim
+ end
+end
diff --git a/.config/fish/functions/vc.fish b/.config/fish/functions/vc.fish
new file mode 100644
index 00000000..980f1585
--- /dev/null
+++ b/.config/fish/functions/vc.fish
@@ -0,0 +1,10 @@
+function vc
+ set config (fd --max-depth 1 --glob 'nvim-*' ~/.config | fzf --prompt="Neovim Configs > " --height=~50% --layout=reverse --exit-0)
+
+ if test -z "$config"
+ return
+ end
+
+ set -x NVIM_APPNAME (basename $config)
+ nvim $argv
+end
diff --git a/.config/fish/functions/vcl.fish b/.config/fish/functions/vcl.fish
new file mode 100644
index 00000000..8fe0d753
--- /dev/null
+++ b/.config/fish/functions/vcl.fish
@@ -0,0 +1,7 @@
+function vcl --wraps='nvim --clean' --description 'alias vcl=nvim --clean'
+ if type -f nvim &>/dev/null
+ nvim --clean $argv
+ else
+ missing_package nvim
+ end
+end
diff --git a/.config/fish/functions/vv.fish b/.config/fish/functions/vv.fish
new file mode 100644
index 00000000..2384d254
--- /dev/null
+++ b/.config/fish/functions/vv.fish
@@ -0,0 +1,3 @@
+function vv --wraps=bob --description 'alias vv=bob'
+ bob $argv
+end
diff --git a/.config/fish/functions/vvl.fish b/.config/fish/functions/vvl.fish
new file mode 100644
index 00000000..2d0f1a5f
--- /dev/null
+++ b/.config/fish/functions/vvl.fish
@@ -0,0 +1,3 @@
+function vvl --wraps='bob use latest' --description 'alias vvl=bob use latest'
+ bob use latest $argv
+end
diff --git a/.config/fish/functions/vvn.fish b/.config/fish/functions/vvn.fish
new file mode 100644
index 00000000..a0c8dd37
--- /dev/null
+++ b/.config/fish/functions/vvn.fish
@@ -0,0 +1,3 @@
+function vvn --wraps='bob use nightly' --description 'alias vvn=bob use nightly'
+ bob use nightly $argv
+end
diff --git a/.config/fish/functions/wget.fish b/.config/fish/functions/wget.fish
new file mode 100644
index 00000000..9fbf57af
--- /dev/null
+++ b/.config/fish/functions/wget.fish
@@ -0,0 +1,3 @@
+function wget --description 'alias wget=wget --hsts-file="$XDG_DATA_HOME/wget-hsts"'
+ command wget --hsts-file="$XDG_DATA_HOME/wget-hsts" $argv
+end
diff --git a/.config/fish/functions/y.fish b/.config/fish/functions/y.fish
new file mode 100644
index 00000000..6b263044
--- /dev/null
+++ b/.config/fish/functions/y.fish
@@ -0,0 +1,8 @@
+function y
+ set tmp (mktemp -t "yazi-cwd.XXXXXX")
+ yazi $argv --cwd-file="$tmp"
+ if set cwd (command cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
+ builtin cd -- "$cwd"
+ end
+ rm -f -- "$tmp"
+end
diff --git a/.config/fish/functions/yarn.fish b/.config/fish/functions/yarn.fish
new file mode 100644
index 00000000..bef4607e
--- /dev/null
+++ b/.config/fish/functions/yarn.fish
@@ -0,0 +1,3 @@
+function yarn --description 'alias yarn=yarn --use-yarnrc "$XDG_CONFIG_HOME/yarn/config"'
+ command yarn --use-yarnrc "$XDG_CONFIG_HOME/yarn/config" $argv
+end
diff --git a/.config/fish/user_variables.fish b/.config/fish/user_variables.fish
new file mode 100644
index 00000000..938a2e7a
--- /dev/null
+++ b/.config/fish/user_variables.fish
@@ -0,0 +1,93 @@
+# XDG Directories
+set -xg XDG_CONFIG_HOME $HOME/.config
+set -xg XDG_CACHE_HOME $HOME/.cache
+set -xg XDG_DATA_HOME $HOME/.local/share
+set -xg XDG_STATE_HOME $HOME/.local/state
+set -xg XDG_BIN_HOME $HOME/.local/bin
+set -xg XDG_SCRIPT_HOME $HOME/.local/script
+
+# Respect XDG Specification
+set -xg CONAN_USER_HOME $XDG_CONFIG_HOME
+set -xg GOPATH $XDG_DATA_HOME/go
+set -xg GOMODCACHE $XDG_CACHE_HOME/go/mod
+set -xg RUSTUP_HOME $XDG_DATA_HOME/rustup
+set -xg CARGO_HOME $XDG_DATA_HOME/cargo
+set -xg LEIN_HOME $XDG_DATA_HOME/lein
+set -xg NUGET_PACKAGES $XDG_CACHE_HOME/NuGetPackages
+set -xg ANDROID_USER_HOME $XDG_DATA_HOME/android
+set -xg NODE_REPL_HISTORY $XDG_DATA_HOME/node_repl_history
+set -xg DOCKER_CONFIG $XDG_CONFIG_HOME/docker
+set -xg SQLITE_HISTORY $XDG_DATA_HOME/sqlite_history
+set -xg GRADLE_USER_HOME $XDG_DATA_HOME/gradle
+set -xg RIPGREP_CONFIG_PATH $HOME/.config/rg/.ripgreprc
+set -xg STARSHIP_CONFIG $HOME/.config/starship/starship.toml
+set -xg ANSIBLE_HOME $XDG_CONFIG_HOME/ansible
+set -xg FFMPEG_DATADIR $XDG_CONFIG_HOME/ffmpeg
+set -xg MYSQL_HISTFILE $XDG_DATA_HOME/mysql_history
+set -xg OMNISHARPHOME $XDG_CONFIG_HOME/omnisharp
+set -xg PYENV_ROOT $XDG_DATA_HOME/pyenv
+set -xg WORKON_HOME $XDG_DATA_HOME/virtualenvs
+set -xg XINITRC $XDG_CONFIG_HOME/X11/xinitrcexport
+set -xg XSERVERRC $XDG_CONFIG_HOME/X11/xserverrc
+set -xg HISTFILE $XDG_STATE_HOME/bash/history
+set -xg ZSH $XDG_DATA_HOME/oh-my-zsh
+set -xg WINEPREFIX $XDG_DATA_HOME/wine
+set -xg NPM_CONFIG_USERCONFIG $XDG_CONFIG_HOME/npm/npmrc
+set -xg GTK2_RC_FILES $XDG_CONFIG_HOME/gtk-2.0/gtkrc
+set -xg W3M_DIR $XDG_DATA_HOME/w3m
+set -xg DOTNET_CLI_HOME $XDG_DATA_HOME/dotnet
+set -xg PNPM_HOME $XDG_DATA_HOME/pnpm
+
+# Path
+fish_add_path $XDG_BIN_HOME
+fish_add_path $XDG_BIN_HOME/color-scripts/
+fish_add_path $GOPATH/bin
+fish_add_path $CARGO_HOME/bin
+fish_add_path $XDG_SCRIPT_HOME
+fish_add_path /usr/local/bin
+fish_add_path /usr/local/sbin
+fish_add_path /usr/bin
+fish_add_path /usr/sbin
+fish_add_path /bin
+fish_add_path /sbin
+fish_add_path /usr/lib/rustup/bin
+fish_add_path /usr/lib/go/bin
+fish_add_path $HOME/.dotnet/tools
+fish_add_path $XDG_DATA_HOME/bob/nvim-bin
+fish_add_path $XDG_DATA_HOME/npm/bin
+fish_add_path $XDG_DATA_HOME/nvim/mason/bin
+fish_add_path $HOME/.yarn/bin
+fish_add_path $HOME/bin
+fish_add_path $XDG_DATA_HOME/pnpm
+
+eval "$(rbenv init -)"
+
+# Editor
+set -xg EDITOR vim
+set -xg VISUAL $EDITOR
+set -xg SUDO_EDITOR $EDITOR
+
+# GPG/LANG
+set -xg GPG_TTY (tty)
+
+# FZF
+set -xg FZF_DEFAULT_COMMAND fd
+set -xg FZF_DEFAULT_OPTS "--height=90% --layout=reverse --info=inline --border rounded --margin=1 --padding=1 \
+--color=bg+:#363A4F,bg:#24273A,spinner:#F4DBD6,hl:#ED8796 \
+--color=fg:#CAD3F5,header:#ED8796,info:#B7BDF8,pointer:#F4DBD6 \
+--color=marker:#B7BDF8,fg+:#CAD3F5,prompt:#B7BDF8,hl+:#ED8796 \
+--color=selected-bg:#494D64 \
+--color=border:#6E738D,label:#CAD3F5 \
+--bind 'ctrl-u:preview-half-page-up'
+--bind 'ctrl-d:preview-half-page-down'
+--bind 'ctrl-y:execute-silent(printf {} | cut -f 2- | wl-copy --trim-newline)'"
+set -xg fzf_preview_dir_cmd eza --long --header --icons --all --color=always --group-directories-first --hyperlink
+set -xg fzf_fd_opts --hidden --color=always
+set -xg _ZO_FZF_OPTS $FZF_DEFAULT_OPTS '--preview "{$fzf_preview_dir_cmd} {2}"'
+
+# Other
+if type -q vivid
+ set -xg LS_COLORS (vivid generate catppuccin-macchiato)
+end
+set -xg STARSHIP_LOG error
+set -xg ATAC_KEY_BINDINGS $XDG_CONFIG_HOME/atac/vim_key_bindings.toml