summaryrefslogtreecommitdiff
path: root/fedora
diff options
context:
space:
mode:
Diffstat (limited to 'fedora')
-rw-r--r--fedora/.config/bash/autocomplete.bash4
-rw-r--r--fedora/.config/bash/bash_profile112
-rw-r--r--fedora/.config/bash/bashrc13
-rw-r--r--fedora/.config/bash/completions/bat.bash249
-rw-r--r--fedora/.config/bash/completions/rg.bash783
-rw-r--r--fedora/.config/bash/completions/ya.bash647
-rw-r--r--fedora/.config/bash/completions/yazi.bash66
-rw-r--r--fedora/.config/bash/completions/zoxide.bash243
-rw-r--r--fedora/.config/bash/keymaps.bash238
-rw-r--r--fedora/.config/bash/packages.bash2
-rw-r--r--fedora/.config/bash/scripts.bash354
-rw-r--r--fedora/.config/shell/aliasrc1122
-rw-r--r--fedora/.config/shell/bm-dirs1
-rw-r--r--fedora/.config/shell/bm-files4
-rw-r--r--fedora/.config/shell/git-aliasrc415
-rw-r--r--fedora/.config/shell/inputrc31
-rw-r--r--fedora/.config/shell/profile126
-rw-r--r--fedora/.config/shell/scripts.bash54
-rw-r--r--fedora/.config/tmux/tmux.conf91
-rw-r--r--fedora/.config/vim/init.vim405
-rw-r--r--fedora/.config/vim/vimrc7
-rwxr-xr-xfedora/.config/yazi/flavors/ayu-dark.yazi/LICENSE21
-rwxr-xr-xfedora/.config/yazi/flavors/ayu-dark.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/ayu-dark.yazi/README.md32
-rwxr-xr-xfedora/.config/yazi/flavors/ayu-dark.yazi/flavor.toml137
-rw-r--r--fedora/.config/yazi/flavors/ayu-dark.yazi/preview.pngbin0 -> 316943 bytes
-rwxr-xr-xfedora/.config/yazi/flavors/ayu-dark.yazi/tmtheme.xml1025
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-frappe.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-frappe.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-frappe.yazi/README.md36
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-frappe.yazi/flavor.toml189
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-frappe.yazi/preview.pngbin0 -> 587309 bytes
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-frappe.yazi/tmtheme.xml2112
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-latte.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-latte.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-latte.yazi/README.md36
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-latte.yazi/flavor.toml189
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-latte.yazi/preview.pngbin0 -> 734865 bytes
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-latte.yazi/tmtheme.xml2112
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/README.md36
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/flavor.toml189
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/preview.pngbin0 -> 690459 bytes
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/tmtheme.xml2112
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-mocha.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-mocha.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-mocha.yazi/README.md36
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-mocha.yazi/flavor.toml189
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-mocha.yazi/preview.pngbin0 -> 675868 bytes
-rw-r--r--fedora/.config/yazi/flavors/catppuccin-mocha.yazi/tmtheme.xml2112
-rw-r--r--fedora/.config/yazi/flavors/dracula.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/dracula.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/dracula.yazi/README.md36
-rw-r--r--fedora/.config/yazi/flavors/dracula.yazi/flavor.toml189
-rw-r--r--fedora/.config/yazi/flavors/dracula.yazi/preview.pngbin0 -> 855046 bytes
-rw-r--r--fedora/.config/yazi/flavors/dracula.yazi/tmtheme.xml940
-rw-r--r--fedora/.config/yazi/flavors/everforest-medium.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/everforest-medium.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/everforest-medium.yazi/README.md45
-rw-r--r--fedora/.config/yazi/flavors/everforest-medium.yazi/flavor.toml229
-rw-r--r--fedora/.config/yazi/flavors/everforest-medium.yazi/preview.pngbin0 -> 78490 bytes
-rw-r--r--fedora/.config/yazi/flavors/everforest-medium.yazi/tmtheme.xml3186
-rw-r--r--fedora/.config/yazi/flavors/gruvbox-dark.yazi/LICENSE22
-rw-r--r--fedora/.config/yazi/flavors/gruvbox-dark.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/gruvbox-dark.yazi/README.md32
-rw-r--r--fedora/.config/yazi/flavors/gruvbox-dark.yazi/flavor.toml176
-rw-r--r--fedora/.config/yazi/flavors/gruvbox-dark.yazi/preview.pngbin0 -> 7036575 bytes
-rw-r--r--fedora/.config/yazi/flavors/gruvbox-dark.yazi/tmtheme.xml1509
-rw-r--r--fedora/.config/yazi/flavors/kanagawa-dragon.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/kanagawa-dragon.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/kanagawa-dragon.yazi/README.md32
-rw-r--r--fedora/.config/yazi/flavors/kanagawa-dragon.yazi/flavor.toml137
-rw-r--r--fedora/.config/yazi/flavors/kanagawa-dragon.yazi/preview.pngbin0 -> 1212654 bytes
-rw-r--r--fedora/.config/yazi/flavors/kanagawa-dragon.yazi/tmtheme.xml448
-rw-r--r--fedora/.config/yazi/flavors/kanagawa-lotus.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/kanagawa-lotus.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/kanagawa-lotus.yazi/README.md41
-rw-r--r--fedora/.config/yazi/flavors/kanagawa-lotus.yazi/flavor.toml130
-rw-r--r--fedora/.config/yazi/flavors/kanagawa-lotus.yazi/preview.pngbin0 -> 264566 bytes
-rw-r--r--fedora/.config/yazi/flavors/kanagawa-lotus.yazi/tmtheme.xml448
-rw-r--r--fedora/.config/yazi/flavors/kanagawa.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/kanagawa.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/kanagawa.yazi/README.md36
-rw-r--r--fedora/.config/yazi/flavors/kanagawa.yazi/flavor.toml140
-rw-r--r--fedora/.config/yazi/flavors/kanagawa.yazi/preview.pngbin0 -> 166757 bytes
-rw-r--r--fedora/.config/yazi/flavors/kanagawa.yazi/tmtheme.xml448
-rw-r--r--fedora/.config/yazi/flavors/rose-pine-dawn.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/rose-pine-dawn.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/rose-pine-dawn.yazi/README.md36
-rw-r--r--fedora/.config/yazi/flavors/rose-pine-dawn.yazi/flavor.toml230
-rw-r--r--fedora/.config/yazi/flavors/rose-pine-dawn.yazi/preview.pngbin0 -> 496676 bytes
-rw-r--r--fedora/.config/yazi/flavors/rose-pine-dawn.yazi/tmtheme.xml316
-rw-r--r--fedora/.config/yazi/flavors/rose-pine-moon.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/rose-pine-moon.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/rose-pine-moon.yazi/README.md36
-rw-r--r--fedora/.config/yazi/flavors/rose-pine-moon.yazi/flavor.toml230
-rw-r--r--fedora/.config/yazi/flavors/rose-pine-moon.yazi/preview.pngbin0 -> 1008743 bytes
-rw-r--r--fedora/.config/yazi/flavors/rose-pine-moon.yazi/tmtheme.xml316
-rw-r--r--fedora/.config/yazi/flavors/rose-pine.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/rose-pine.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/rose-pine.yazi/README.md36
-rw-r--r--fedora/.config/yazi/flavors/rose-pine.yazi/flavor.toml230
-rw-r--r--fedora/.config/yazi/flavors/rose-pine.yazi/preview.pngbin0 -> 983910 bytes
-rw-r--r--fedora/.config/yazi/flavors/rose-pine.yazi/tmtheme.xml316
-rw-r--r--fedora/.config/yazi/flavors/scripts/README.md36
-rw-r--r--fedora/.config/yazi/flavors/scripts/generate.js169
-rw-r--r--fedora/.config/yazi/flavors/scripts/template.toml189
-rw-r--r--fedora/.config/yazi/flavors/tokyo-night.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/tokyo-night.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/tokyo-night.yazi/README.md47
-rw-r--r--fedora/.config/yazi/flavors/tokyo-night.yazi/flavor.toml190
-rw-r--r--fedora/.config/yazi/flavors/tokyo-night.yazi/preview.pngbin0 -> 729541 bytes
-rw-r--r--fedora/.config/yazi/flavors/tokyo-night.yazi/tmtheme.xml1329
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-modern.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-modern.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-modern.yazi/README.md50
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-modern.yazi/flavor.toml186
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/1.pngbin0 -> 465582 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/2.pngbin0 -> 591609 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/3.pngbin0 -> 646085 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/4.pngbin0 -> 590651 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/preview.pngbin0 -> 474310 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-modern.yazi/preview.pngbin0 -> 474310 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-modern.yazi/tmtheme.xml250
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-plus.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-plus.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-plus.yazi/README.md50
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-plus.yazi/flavor.toml186
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/1.pngbin0 -> 465477 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/2.pngbin0 -> 591518 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/3.pngbin0 -> 646158 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/4.pngbin0 -> 589782 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/preview.pngbin0 -> 474215 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-plus.yazi/preview.pngbin0 -> 474215 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-dark-plus.yazi/tmtheme.xml250
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-modern.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-modern.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-modern.yazi/README.md50
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-modern.yazi/flavor.toml186
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/1.pngbin0 -> 451099 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/2.pngbin0 -> 595482 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/3.pngbin0 -> 643205 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/4.pngbin0 -> 568228 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/preview.pngbin0 -> 457221 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-modern.yazi/preview.pngbin0 -> 457221 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-modern.yazi/tmtheme.xml250
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-plus.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-plus.yazi/LICENSE-tmtheme21
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-plus.yazi/README.md50
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-plus.yazi/flavor.toml186
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/1.pngbin0 -> 444447 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/2.pngbin0 -> 581698 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/3.pngbin0 -> 630738 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/4.pngbin0 -> 566333 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/preview.pngbin0 -> 447989 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-plus.yazi/preview.pngbin0 -> 447989 bytes
-rw-r--r--fedora/.config/yazi/flavors/vscode-light-plus.yazi/tmtheme.xml250
-rw-r--r--fedora/.config/yazi/init.lua72
-rw-r--r--fedora/.config/yazi/keymap-default.toml490
-rw-r--r--fedora/.config/yazi/plugins/chmod.yazi/README.md28
-rw-r--r--fedora/.config/yazi/plugins/chmod.yazi/main.lua42
-rw-r--r--fedora/.config/yazi/plugins/compress.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/plugins/compress.yazi/README.md173
-rw-r--r--fedora/.config/yazi/plugins/compress.yazi/main.lua496
-rw-r--r--fedora/.config/yazi/plugins/diff.yazi/README.md28
-rw-r--r--fedora/.config/yazi/plugins/diff.yazi/main.lua41
-rw-r--r--fedora/.config/yazi/plugins/folder-rules.yazi/main.lua12
-rw-r--r--fedora/.config/yazi/plugins/full-border.yazi/README.md32
-rw-r--r--fedora/.config/yazi/plugins/full-border.yazi/main.lua43
-rw-r--r--fedora/.config/yazi/plugins/git.yazi/README.md78
-rw-r--r--fedora/.config/yazi/plugins/git.yazi/main.lua261
-rw-r--r--fedora/.config/yazi/plugins/git.yazi/types.lua12
-rw-r--r--fedora/.config/yazi/plugins/jump-to-char.yazi/README.md28
-rw-r--r--fedora/.config/yazi/plugins/jump-to-char.yazi/main.lua32
-rw-r--r--fedora/.config/yazi/plugins/lsar.yazi/README.md43
-rw-r--r--fedora/.config/yazi/plugins/lsar.yazi/main.lua43
-rw-r--r--fedora/.config/yazi/plugins/mactag.yazi/README.md79
-rw-r--r--fedora/.config/yazi/plugins/mactag.yazi/main.lua105
-rw-r--r--fedora/.config/yazi/plugins/mime-ext.yazi/README.md56
-rw-r--r--fedora/.config/yazi/plugins/mime-ext.yazi/main.lua1126
-rw-r--r--fedora/.config/yazi/plugins/mount.yazi/README.md48
-rw-r--r--fedora/.config/yazi/plugins/mount.yazi/main.lua304
-rw-r--r--fedora/.config/yazi/plugins/office.yazi/LICENSE21
-rw-r--r--fedora/.config/yazi/plugins/office.yazi/README.md76
-rw-r--r--fedora/.config/yazi/plugins/office.yazi/main.lua121
-rw-r--r--fedora/.config/yazi/plugins/parent-arrow.yazi/main.lua24
-rw-r--r--fedora/.config/yazi/plugins/piper.yazi/README.md90
-rw-r--r--fedora/.config/yazi/plugins/piper.yazi/main.lua70
-rw-r--r--fedora/.config/yazi/plugins/smart-enter.yazi/README.md40
-rw-r--r--fedora/.config/yazi/plugins/smart-enter.yazi/main.lua11
-rw-r--r--fedora/.config/yazi/plugins/smart-filter.yazi/README.md28
-rw-r--r--fedora/.config/yazi/plugins/smart-filter.yazi/main.lua51
-rw-r--r--fedora/.config/yazi/plugins/smart-paste.yazi/README.md26
-rw-r--r--fedora/.config/yazi/plugins/smart-paste.yazi/main.lua14
-rw-r--r--fedora/.config/yazi/plugins/sudo-demo.yazi/README.md25
-rw-r--r--fedora/.config/yazi/plugins/sudo-demo.yazi/main.lua45
-rw-r--r--fedora/.config/yazi/plugins/toggle-pane.yazi/README.md78
-rw-r--r--fedora/.config/yazi/plugins/toggle-pane.yazi/main.lua45
-rw-r--r--fedora/.config/yazi/plugins/zoom.yazi/README.md56
-rw-r--r--fedora/.config/yazi/plugins/zoom.yazi/main.lua119
-rw-r--r--fedora/.config/yazi/theme.toml278
-rw-r--r--fedora/.config/yazi/yazi.toml278
-rw-r--r--fedora/.config/zsh/.zshrc141
-rw-r--r--fedora/.config/zsh/autocomplete.zsh70
-rw-r--r--fedora/.config/zsh/git.zsh7
-rw-r--r--fedora/.config/zsh/keymaps.zsh342
-rw-r--r--fedora/.config/zsh/p10k.zsh1721
-rw-r--r--fedora/.config/zsh/packages.zsh23
-rw-r--r--fedora/.config/zsh/plugins.zsh105
-rw-r--r--fedora/.config/zsh/scripts.zsh880
-rwxr-xr-xfedora/.local/bin/batbin0 -> 6910848 bytes
-rwxr-xr-xfedora/.local/bin/bmshortcuts (renamed from fedora/.local/bin/shortcuts)22
-rwxr-xr-xfedora/.local/bin/bookmarks211
-rwxr-xr-xfedora/.local/bin/chafabin0 -> 7175232 bytes
-rwxr-xr-xfedora/.local/bin/ezabin0 -> 2491296 bytes
-rwxr-xr-xfedora/.local/bin/fzfbin0 -> 4411544 bytes
-rwxr-xr-xfedora/.local/bin/fzf-preview.sh86
-rwxr-xr-xfedora/.local/bin/fzf-tmux257
-rwxr-xr-xfedora/.local/bin/fzffiles99
-rwxr-xr-xfedora/.local/bin/fzffns74
-rwxr-xr-xfedora/.local/bin/fzfpass88
-rwxr-xr-xfedora/.local/bin/imgcat274
-rwxr-xr-xfedora/.local/bin/lastfiles (renamed from fedora/.local/bin/lastnvim)27
-rwxr-xr-xfedora/.local/bin/openfiles12
-rwxr-xr-xfedora/.local/bin/restartvim (renamed from fedora/.local/bin/restartnvim)8
-rwxr-xr-xfedora/.local/bin/rgbin0 -> 5445512 bytes
-rwxr-xr-xfedora/.local/bin/rgabin0 -> 6772816 bytes
-rwxr-xr-xfedora/.local/bin/rga-fzfbin0 -> 2425600 bytes
-rwxr-xr-xfedora/.local/bin/rga-fzf-openbin0 -> 2429728 bytes
-rwxr-xr-xfedora/.local/bin/rga-preprocbin0 -> 8071664 bytes
-rwxr-xr-xfedora/.local/bin/seshbin0 -> 8851145 bytes
-rwxr-xr-xfedora/.local/bin/sessionizer36
-rwxr-xr-xfedora/.local/bin/tmuxopen42
-rwxr-xr-xfedora/.local/bin/yabin0 -> 3306160 bytes
-rwxr-xr-xfedora/.local/bin/yazibin0 -> 17066736 bytes
-rwxr-xr-xfedora/.local/bin/zoxidebin0 -> 1253856 bytes
-rw-r--r--fedora/Dockerfile2
238 files changed, 38051 insertions, 1825 deletions
diff --git a/fedora/.config/bash/autocomplete.bash b/fedora/.config/bash/autocomplete.bash
index 0aeeedd..3ee6183 100644
--- a/fedora/.config/bash/autocomplete.bash
+++ b/fedora/.config/bash/autocomplete.bash
@@ -147,7 +147,7 @@ expand_alias_and_accept_line() {
# Bind Space to our function so pressing space triggers alias-expansion behavior.
# Use bind -x to call expand_alias_space (it will both expand and insert space when appropriate).
# WARNING: this overrides normal space key behavior; our function handles insertion.
-bind -x '" "':expand_alias_space
+# bind -x '" "':expand_alias_space
# optional: bind Ctrl-Space to the same (a bypass key like zsh had)
# Many terminals send "\C-@" for ctrl-space; try both common sequences:
@@ -169,7 +169,7 @@ _bash_accept_line() {
# (This is a conservative behavior to avoid interfering unexpectedly.)
return 0
}
-bind -x '"\C-m":_bash_accept_line'
+#bind -x '"\C-m":_bash_accept_line'
# ---------- helper: background starter ----------
background() {
diff --git a/fedora/.config/bash/bash_profile b/fedora/.config/bash/bash_profile
index 068e3f5..d74e372 100644
--- a/fedora/.config/bash/bash_profile
+++ b/fedora/.config/bash/bash_profile
@@ -1,34 +1,106 @@
-#!/bin/sh
+#!/bin/bash
umask 022
-#######################################################
-# EXPORTS
-#######################################################
+###################################################
+### --- DEFAULT PROGRAMS --- ###
+###################################################
+if command -v nvim >/dev/null 2>&1; then
+ export EDITOR="nvim"
+elif command -v vim >/dev/null 2>&1; then
+ export EDITOR="vim"
+else
+ export EDITOR="vi"
+fi
+# export FILE_MANAGER="lf $(lf -version)"
+export KEYTIMEOUT=10
+export SUDO_EDITOR=$EDITOR
+export TERM="xterm-256color"
+export VISUAL=$EDITOR
+export TERM="xterm-256color"
+###################################################
+### --- XDG ENV PATHES --- ###
+###################################################
+### --- XDG DEFAULT --- ###
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_STATE_HOME="$HOME/.local/state"
+
+### --- XDG CUSTOMS --- ###
+export XDG_DOTFILES_DIR="$HOME/.dotfiles"
+export XDG_SCRIPTS_HOME="$HOME/.local/bin"
+export XDG_SOURCES_HOME="$HOME/.local/src"
+export XDG_DESKTOP_DIR="$HOME/Desktop"
+export XDG_DOCUMENTS_DIR="$HOME/Documents"
+export XDG_DOWNLOAD_DIR="$HOME/Downloads"
+export XDG_MUSIC_DIR="$HOME/Music"
+export XDG_PICTURES_DIR="$HOME/Pictures"
+export XDG_PUBLICSHARE_DIR="$HOME/Public"
+export XDG_TEMPLATES_DIR="$HOME/Templates"
+export XDG_VIDEOS_DIR="$HOME/Videos"
+
+#######################################################
+# EXPORTS
+#######################################################
+
export CLICOLOR=1
-export EDITOR="vim"
export HISTFILE="${XDG_DATA_HOME:-${HOME}/.local/share}/history/sh_history"
export INPUTRC="${XDG_CONFIG_HOME:-${HOME}/.config}/shell/inputrc"
-export LESS="R"
-export LESS_TERMCAP_mb="$(printf '%b' '')"
-export LESS_TERMCAP_md="$(printf '%b' '')"
-export LESS_TERMCAP_me="$(printf '%b' '')"
-export LESS_TERMCAP_so="$(printf '%b' '')"
-export LESS_TERMCAP_se="$(printf '%b' '')"
-export LESS_TERMCAP_us="$(printf '%b' '')"
-export LESS_TERMCAP_ue="$(printf '%b' '')"
-export LESSOPEN="| /usr/bin/highlight -O ansi %s 2>/dev/null"
+
+### --- MANPAGER --- ###
+([ -x "$(command -v batcat)" ] || [ -x "$(command -v batman)" ]) && {
+ export MANPAGER="sh -c 'col -bx | bat -l man -p'"
+ export MANROFFOPT="-c"
+} || {
+ export MANPAGER='less -s'
+ export LESS="R"
+ export LESS_TERMCAP_mb="$(printf '%b' '')"
+ export LESS_TERMCAP_md="$(printf '%b' '')"
+ export LESS_TERMCAP_me="$(printf '%b' '')"
+ export LESS_TERMCAP_so="$(printf '%b' '')"
+ export LESS_TERMCAP_se="$(printf '%b' '')"
+ export LESS_TERMCAP_us="$(printf '%b' '')"
+ export LESS_TERMCAP_ue="$(printf '%b' '')"
+ export LESSOPEN="| lesspipe.sh %s"
+}
+
export LS_COLORS="no=00:fi=00:di=00;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:*.xml=00;31:"
export LS_OPTIONS="--color=auto"
-export TERM="xterm-256color"
-export GVIMINIT='let $MYGVIMRC="$XDG_CONFIG_HOME/vim/gvimrc" | source $MYGVIMRC'
-export VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | source $MYVIMRC'
-export VISUAL=$EDITOR
+
+### --- PASSWORD STORE --- ###
+export PASSWORD_STORE_DIR="$XDG_DATA_HOME/.password-store"
+export PASSWORD_STORE_CLIP_TIME=180 # Specifies the number of seconds to wait before restoring the clipboard, by default 45 seconds.
+# export PASSWORD_STORE_GENERATED_LENGTH=18 # by default 25.
+# export PASSWORD_STORE_CHARACTER_SET='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{};:,.<>?'
+# export PASSWORD_STORE_CHARACTER_SET_NO_SYMBOLS='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+[]{};:,.<>?'
+export PASSWORD_STORE_ENABLE_EXTENSIONS="true"
+# export PASSWORD_STORE_EXTENSIONS_DIR="$PASSWORD_STORE_DIR/.extensions"
+# export BASH_COMPLETION_USER_DIR=$XDG_DATA_HOME/bash-completion/completions
+
+### --- TMUX --- ###
+export TMUX_TMPDIR="$XDG_RUNTIME_DIR"
+
+### --- VIM --- ###
+# export GVIMINIT='let $MYGVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/gvimrc" : "$XDG_CONFIG_HOME/nvim/init.lua" | so $MYGVIMRC'
+# export VIMINIT='let $MYVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/vimrc" : "$XDG_CONFIG_HOME/nvim/init.lua" | so $MYVIMRC'
+
+### --- ZSH --- ###
+export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
+export ZPLUGINDIR="$XDG_SCRIPTS_HOME/zsh"
+
+###################################################
+### --- ENV PATH --- ###
+###################################################
+# Add all directories in each subdirectory to $PATH
+[ -d ~/.local/bin ] && export PATH="$(find ~/.local/bin -path '*/.git*' -prune -o \( -type f -o -type l \) -perm -u=x -exec dirname {} \; | sort -u | paste -sd ':' -):$PATH"
+[ -d ~/.local/share/.password-store ] && export PATH="$(find ~/.local/share/.password-store -type d -name '.extensions' | paste -sd ':' -):$PATH"
+export PATH="$ASDF_DATA_DIR/shims:$PATH"
+command -v asdf >/dev/null 2>&1 && export PATH="$(find -L ~/.local/share/asdf/installs -name bin -type d -print 2>/dev/null | sort -u | paste -s -d ':' -):$PATH"
+command -v npm >/dev/null 2>&1 && export PATH="$(find -L ~/.local/share/npm -name bin -type d -print 2>/dev/null | sort -u | paste -s -d ':' -):$PATH"
+
+unsetopt PROMPT_SP 2>/dev/null
#######################################################
# Source global/local definitions
@@ -38,3 +110,7 @@ export VISUAL=$EDITOR
[ -f /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
[ -f /etc/bash/bashrc ] && . /etc/bash/bashrc
[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/bash/bashrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/bash/bashrc"
+for file in "${XDG_CONFIG_HOME:-${HOME}/.config}/bash/completions"/*.bash; do
+ [ -f "$file" ] && . "$file"
+done
+[ ! -f "$XDG_CONFIG_HOME/shell/shortcutrc" ] && setsid -f bmshortcuts >/dev/null 2>&1
diff --git a/fedora/.config/bash/bashrc b/fedora/.config/bash/bashrc
index 2c60286..ec1cc46 100644
--- a/fedora/.config/bash/bashrc
+++ b/fedora/.config/bash/bashrc
@@ -32,7 +32,6 @@ bind "set show-all-if-ambiguous on"
#######################################################
# Set command prompt
#######################################################
-alias cpu="grep 'cpu ' /proc/stat | awk '{usage=(\$2+\$4)*100/(\$2+\$4+\$5)} END {print usage}' | awk '{printf(\"%.1f\n\", \$1)}'"
function __setprompt {
local LAST_COMMAND=$? # Must come first!
@@ -164,6 +163,18 @@ bind '"\C-g":"lfcd\n"'
eval "$(dircolors)"
+[ -f "$HOME/.config/bash/git.bash" ] && . "$HOME/.config/bash/git.bash"
+[ -f "$HOME/.config/bash/p10k.bash" ] && . "$HOME/.config/bash/p10k.bash"
+[ -f "$HOME/.config/bash/autocomplete.bash" ] && . "$HOME/.config/bash/autocomplete.bash"
+[ -f "$HOME/.config/bash/scripts.bash" ] && . "$HOME/.config/bash/scripts.bash"
+[ -f "$HOME/.config/bash/keymaps.bash" ] && . "$HOME/.config/bash/keymaps.bash"
+[ -f "$HOME/.config/bash/plugins.bash" ] && . "$HOME/.config/bash/plugins.bash"
+[ -f "$HOME/.config/bash/packages.bash" ] && . "$HOME/.config/bash/packages.bash"
+[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/aliasrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/aliasrc"
+[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/git-aliasrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/git-aliasrc"
+[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutrc"
+[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutenvrc" ] && . "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutenvrc"
+[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/zshnameddirrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/zshnameddirrc"
[ -f "${XDG_SCRIPTS_HOME:-${HOME}/.local/bin}/bash-preexec" ] && . "${XDG_SCRIPTS_HOME:-${HOME}/.local/bin}/bash-preexec"
[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/rootshortcutrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/rootshortcutrc"
[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/rootzshnameddirrc" ] && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/rootzshnameddirrc"
diff --git a/fedora/.config/bash/completions/bat.bash b/fedora/.config/bash/completions/bat.bash
new file mode 100644
index 0000000..fa0f712
--- /dev/null
+++ b/fedora/.config/bash/completions/bat.bash
@@ -0,0 +1,249 @@
+# shellcheck disable=SC2207
+
+# Requires https://github.com/scop/bash-completion
+
+# Macs have bash3 for which the bash-completion package doesn't include
+# _init_completion. This is a minimal version of that function.
+__bat_init_completion()
+{
+ COMPREPLY=()
+ _get_comp_words_by_ref "$@" cur prev words cword
+}
+
+__bat_escape_completions()
+{
+ # Do not escape if completing a quoted value.
+ [[ $cur == [\"\']* ]] && return 0
+ if ((
+ BASH_VERSINFO[0] > 5 || \
+ BASH_VERSINFO[0] == 5 && BASH_VERSINFO[1] >= 3
+ )); then
+ # bash >= 5.3 has "compopt -o fullquote", which exactly does
+ # what this function tries to do.
+ compopt -o fullquote
+ elif ((
+ BASH_VERSINFO[0] > 4 || \
+ BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] > 0
+ )); then
+ # printf -v to an array index is available in bash >= 4.1.
+ # Use it if available, as -o filenames is semantically
+ # incorrect if we are not actually completing filenames, and it
+ # has side effects (e.g. adds trailing slash to candidates
+ # matching present dirs).
+ local i
+ for i in ${!COMPREPLY[*]}; do
+ printf -v "COMPREPLY[i]" %q "${COMPREPLY[i]}"
+ done
+
+ # We can use "compopt -o noquote" available in bash >= 4.3 to
+ # prevent further quoting by the shell, which would be
+ # unexpectedly applied when a quoted result matches a filename.
+ if ((
+ BASH_VERSINFO[0] > 4 || \
+ BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] >= 3
+ )); then
+ compopt -o noquote
+ fi
+ else
+ compopt -o filenames
+ fi
+}
+
+_bat() {
+ local cur prev words split=false
+ if declare -F _init_completion >/dev/null 2>&1; then
+ _init_completion -s || return 0
+ else
+ __bat_init_completion -n "=" || return 0
+ _split_longopt && split=true
+ fi
+
+ if [[ ${words[1]-} == cache ]]; then
+ case $prev in
+ --source | --target)
+ _filedir -d
+ return 0
+ ;;
+ esac
+ COMPREPLY=($(compgen -W "
+ --build
+ --clear
+ --source
+ --target
+ --blank
+ --help
+ " -- "$cur"))
+ return 0
+ fi
+
+ case $prev in
+ -l | --language)
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W "$(
+ "$1" --list-languages | while IFS=: read -r lang _; do
+ printf "%s\n" "$lang"
+ done
+ )" -- "$cur"))
+ __bat_escape_completions
+ return 0
+ ;;
+ -H | --highlight-line | \
+ --diff-context | \
+ --tabs | \
+ --terminal-width | \
+ -m | --map-syntax | \
+ --ignored-suffix | \
+ --list-themes | \
+ --squeeze-limit | \
+ --line-range | \
+ -L | --list-languages | \
+ --lessopen | \
+ --no-paging | \
+ --diagnostic | \
+ --acknowledgements | \
+ -h | --help | \
+ -V | --version | \
+ --cache-dir | \
+ --config-dir | \
+ --config-file | \
+ --generate-config-file)
+ # argument required but no completion available, or option
+ # causes an exit
+ return 0
+ ;;
+ --file-name)
+ _filedir
+ return 0
+ ;;
+ --wrap)
+ COMPREPLY=($(compgen -W "auto never character" -- "$cur"))
+ return 0
+ ;;
+ --binary)
+ COMPREPLY=($(compgen -W "no-printing as-text" -- "$cur"))
+ return 0
+ ;;
+ --nonprintable-notation)
+ COMPREPLY=($(compgen -W "unicode caret" -- "$cur"))
+ return 0
+ ;;
+ --strip-ansi)
+ COMPREPLY=($(compgen -W "auto never always" -- "$cur"))
+ return 0
+ ;;
+ --completion)
+ COMPREPLY=($(compgen -W "bash fish zsh ps1" -- "$cur"))
+ return 0
+ ;;
+ --color | --decorations | --paging)
+ COMPREPLY=($(compgen -W "auto never always" -- "$cur"))
+ return 0
+ ;;
+ --italic-text)
+ COMPREPLY=($(compgen -W "always never" -- "$cur"))
+ return 0
+ ;;
+ --pager)
+ COMPREPLY=($(compgen -c -- "$cur"))
+ return 0
+ ;;
+ --theme)
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W "auto${IFS}auto:always${IFS}auto:system${IFS}dark${IFS}light${IFS}$("$1" --list-themes)" -- "$cur"))
+ __bat_escape_completions
+ return 0
+ ;;
+ --theme-dark | \
+ --theme-light)
+ local IFS=$'\n'
+ COMPREPLY=($(compgen -W "$("$1" --list-themes)" -- "$cur"))
+ __bat_escape_completions
+ return 0
+ ;;
+ --style)
+ # shellcheck disable=SC2034
+ local -a styles=(
+ default
+ full
+ auto
+ plain
+ changes
+ header
+ header-filename
+ header-filesize
+ grid
+ rule
+ numbers
+ snip
+ )
+ # shellcheck disable=SC2016
+ if declare -F _comp_delimited >/dev/null 2>&1; then
+ # bash-completion > 2.11
+ _comp_delimited , -W '"${styles[@]}"'
+ else
+ COMPREPLY=($(compgen -W '${styles[@]}' -- "$cur"))
+ fi
+ return 0
+ esac
+
+ $split && return 0
+
+ if [[ $cur == -* ]]; then
+ # --unbuffered excluded intentionally (no-op)
+ COMPREPLY=($(compgen -W "
+ --show-all
+ --nonprintable-notation
+ --binary
+ --plain
+ --language
+ --highlight-line
+ --file-name
+ --diff
+ --diff-context
+ --tabs
+ --wrap
+ --chop-long-lines
+ --terminal-width
+ --number
+ --color
+ --italic-text
+ --decorations
+ --force-colorization
+ --paging
+ --no-paging
+ --pager
+ --map-syntax
+ --ignored-suffix
+ --theme
+ --theme-dark
+ --theme-light
+ --list-themes
+ --squeeze-blank
+ --squeeze-limit
+ --strip-ansi
+ --style
+ --line-range
+ --list-languages
+ --lessopen
+ --completion
+ --diagnostic
+ --acknowledgements
+ --set-terminal-title
+ --help
+ --version
+ --cache-dir
+ --config-dir
+ --config-file
+ --generate-config-file
+ --no-config
+ --no-custom-assets
+ --no-lessopen
+ " -- "$cur"))
+ return 0
+ fi
+
+ _filedir
+
+ ## Completion of the 'cache' command itself is removed for better UX
+ ## See https://github.com/sharkdp/bat/issues/2085#issuecomment-1271646802
+} && complete -F _bat bat
diff --git a/fedora/.config/bash/completions/rg.bash b/fedora/.config/bash/completions/rg.bash
new file mode 100644
index 0000000..12d1039
--- /dev/null
+++ b/fedora/.config/bash/completions/rg.bash
@@ -0,0 +1,783 @@
+_rg() {
+ local i cur prev opts cmds
+ COMPREPLY=()
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
+ cmd=""
+ opts=""
+
+ for i in ${COMP_WORDS[@]}; do
+ case "${i}" in
+ rg)
+ cmd="rg"
+ ;;
+ *)
+ ;;
+ esac
+ done
+
+ case "${cmd}" in
+ rg)
+ opts="--regexp -e --file -f --after-context -A --before-context -B --binary --no-binary --block-buffered --no-block-buffered --byte-offset -b --no-byte-offset --case-sensitive -s --color --colors --column --no-column --context -C --context-separator --no-context-separator --count -c --count-matches --crlf --no-crlf --debug --dfa-size-limit --encoding -E --no-encoding --engine --field-context-separator --field-match-separator --files --files-with-matches -l --files-without-match --fixed-strings -F --no-fixed-strings --follow -L --no-follow --generate --glob -g --glob-case-insensitive --no-glob-case-insensitive --heading --no-heading --help -h --hidden -. --no-hidden --hostname-bin --hyperlink-format --iglob --ignore-case -i --ignore-file --ignore-file-case-insensitive --no-ignore-file-case-insensitive --include-zero --no-include-zero --invert-match -v --no-invert-match --json --no-json --line-buffered --no-line-buffered --line-number -n --no-line-number -N --line-regexp -x --max-columns -M --max-columns-preview --no-max-columns-preview --max-count -m --max-depth -d --max-filesize --mmap --no-mmap --multiline -U --no-multiline --multiline-dotall --no-multiline-dotall --no-config --no-ignore --ignore --no-ignore-dot --ignore-dot --no-ignore-exclude --ignore-exclude --no-ignore-files --ignore-files --no-ignore-global --ignore-global --no-ignore-messages --ignore-messages --no-ignore-parent --ignore-parent --no-ignore-vcs --ignore-vcs --no-messages --messages --no-require-git --require-git --no-unicode --unicode --null -0 --null-data --one-file-system --no-one-file-system --only-matching -o --path-separator --passthru --pcre2 -P --no-pcre2 --pcre2-version --pre --no-pre --pre-glob --pretty -p --quiet -q --regex-size-limit --replace -r --search-zip -z --no-search-zip --smart-case -S --sort --sortr --stats --no-stats --stop-on-nonmatch --text -a --no-text --threads -j --trace --trim --no-trim --type -t --type-not -T --type-add --type-clear --type-list --unrestricted -u --version -V --vimgrep --with-filename -H --no-filename -I --word-regexp -w --auto-hybrid-regex --no-auto-hybrid-regex --no-pcre2-unicode --pcre2-unicode --sort-files --no-sort-files <PATTERN> <PATH>..."
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
+ COMPREPLY=($(compgen -W "${opts}" -- "${cur}"))
+ return 0
+ fi
+ case "${prev}" in
+
+ --regexp)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -e)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --file)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -f)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --after-context)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -A)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --before-context)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -B)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --binary)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-binary)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --block-buffered)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-block-buffered)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --byte-offset)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -b)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-byte-offset)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --case-sensitive)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -s)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --color)
+ COMPREPLY=($(compgen -W "never auto always ansi" -- "${cur}"))
+ return 0
+ ;;
+ --colors)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --column)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-column)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --context)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -C)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --context-separator)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-context-separator)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --count)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -c)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --count-matches)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --crlf)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-crlf)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --debug)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --dfa-size-limit)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --encoding)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -E)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-encoding)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --engine)
+ COMPREPLY=($(compgen -W "default pcre2 auto" -- "${cur}"))
+ return 0
+ ;;
+ --field-context-separator)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --field-match-separator)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --files)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --files-with-matches)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -l)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --files-without-match)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --fixed-strings)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -F)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-fixed-strings)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --follow)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -L)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-follow)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --generate)
+ COMPREPLY=($(compgen -W "man complete-bash complete-zsh complete-fish complete-powershell" -- "${cur}"))
+ return 0
+ ;;
+ --glob)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -g)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --glob-case-insensitive)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-glob-case-insensitive)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --heading)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-heading)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --help)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -h)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --hidden)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -.)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-hidden)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --hostname-bin)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --hyperlink-format)
+ COMPREPLY=($(compgen -W "default none cursor file grep+ kitty macvim textmate vscode vscode-insiders vscodium" -- "${cur}"))
+ return 0
+ ;;
+ --iglob)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --ignore-case)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -i)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --ignore-file)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --ignore-file-case-insensitive)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-ignore-file-case-insensitive)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --include-zero)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-include-zero)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --invert-match)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -v)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-invert-match)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --json)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-json)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --line-buffered)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-line-buffered)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --line-number)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -n)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-line-number)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -N)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --line-regexp)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -x)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --max-columns)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -M)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --max-columns-preview)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-max-columns-preview)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --max-count)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -m)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --max-depth)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -d)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --max-filesize)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --mmap)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-mmap)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --multiline)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -U)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-multiline)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --multiline-dotall)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-multiline-dotall)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-config)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-ignore)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --ignore)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-ignore-dot)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --ignore-dot)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-ignore-exclude)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --ignore-exclude)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-ignore-files)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --ignore-files)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-ignore-global)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --ignore-global)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-ignore-messages)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --ignore-messages)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-ignore-parent)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --ignore-parent)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-ignore-vcs)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --ignore-vcs)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-messages)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --messages)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-require-git)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --require-git)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-unicode)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --unicode)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --null)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -0)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --null-data)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --one-file-system)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-one-file-system)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --only-matching)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -o)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --path-separator)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --passthru)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --pcre2)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -P)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-pcre2)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --pcre2-version)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --pre)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-pre)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --pre-glob)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --pretty)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -p)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --quiet)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -q)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --regex-size-limit)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --replace)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -r)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --search-zip)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -z)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-search-zip)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --smart-case)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -S)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --sort)
+ COMPREPLY=($(compgen -W "none path modified accessed created" -- "${cur}"))
+ return 0
+ ;;
+ --sortr)
+ COMPREPLY=($(compgen -W "none path modified accessed created" -- "${cur}"))
+ return 0
+ ;;
+ --stats)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-stats)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --stop-on-nonmatch)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --text)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -a)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-text)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --threads)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -j)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --trace)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --trim)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-trim)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --type)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -t)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --type-not)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -T)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --type-add)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --type-clear)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --type-list)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --unrestricted)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -u)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --version)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -V)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --vimgrep)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --with-filename)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -H)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-filename)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -I)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --word-regexp)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -w)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --auto-hybrid-regex)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-auto-hybrid-regex)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-pcre2-unicode)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --pcre2-unicode)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --sort-files)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --no-sort-files)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ esac
+ COMPREPLY=($(compgen -W "${opts}" -- "${cur}"))
+ return 0
+ ;;
+ esac
+}
+
+complete -F _rg -o bashdefault -o default rg
diff --git a/fedora/.config/bash/completions/ya.bash b/fedora/.config/bash/completions/ya.bash
new file mode 100644
index 0000000..b24e3e5
--- /dev/null
+++ b/fedora/.config/bash/completions/ya.bash
@@ -0,0 +1,647 @@
+_ya() {
+ local i cur prev opts cmd
+ COMPREPLY=()
+ if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then
+ cur="$2"
+ else
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ fi
+ prev="$3"
+ cmd=""
+ opts=""
+
+ for i in "${COMP_WORDS[@]:0:COMP_CWORD}"
+ do
+ case "${cmd},${i}" in
+ ",$1")
+ cmd="ya"
+ ;;
+ ya,emit)
+ cmd="ya__emit"
+ ;;
+ ya,emit-to)
+ cmd="ya__emit__to"
+ ;;
+ ya,help)
+ cmd="ya__help"
+ ;;
+ ya,pack)
+ cmd="ya__pack"
+ ;;
+ ya,pkg)
+ cmd="ya__pkg"
+ ;;
+ ya,pub)
+ cmd="ya__pub"
+ ;;
+ ya,pub-to)
+ cmd="ya__pub__to"
+ ;;
+ ya,sub)
+ cmd="ya__sub"
+ ;;
+ ya__help,emit)
+ cmd="ya__help__emit"
+ ;;
+ ya__help,emit-to)
+ cmd="ya__help__emit__to"
+ ;;
+ ya__help,help)
+ cmd="ya__help__help"
+ ;;
+ ya__help,pack)
+ cmd="ya__help__pack"
+ ;;
+ ya__help,pkg)
+ cmd="ya__help__pkg"
+ ;;
+ ya__help,pub)
+ cmd="ya__help__pub"
+ ;;
+ ya__help,pub-to)
+ cmd="ya__help__pub__to"
+ ;;
+ ya__help,sub)
+ cmd="ya__help__sub"
+ ;;
+ ya__help__pkg,add)
+ cmd="ya__help__pkg__add"
+ ;;
+ ya__help__pkg,delete)
+ cmd="ya__help__pkg__delete"
+ ;;
+ ya__help__pkg,install)
+ cmd="ya__help__pkg__install"
+ ;;
+ ya__help__pkg,list)
+ cmd="ya__help__pkg__list"
+ ;;
+ ya__help__pkg,upgrade)
+ cmd="ya__help__pkg__upgrade"
+ ;;
+ ya__pkg,add)
+ cmd="ya__pkg__add"
+ ;;
+ ya__pkg,delete)
+ cmd="ya__pkg__delete"
+ ;;
+ ya__pkg,help)
+ cmd="ya__pkg__help"
+ ;;
+ ya__pkg,install)
+ cmd="ya__pkg__install"
+ ;;
+ ya__pkg,list)
+ cmd="ya__pkg__list"
+ ;;
+ ya__pkg,upgrade)
+ cmd="ya__pkg__upgrade"
+ ;;
+ ya__pkg__help,add)
+ cmd="ya__pkg__help__add"
+ ;;
+ ya__pkg__help,delete)
+ cmd="ya__pkg__help__delete"
+ ;;
+ ya__pkg__help,help)
+ cmd="ya__pkg__help__help"
+ ;;
+ ya__pkg__help,install)
+ cmd="ya__pkg__help__install"
+ ;;
+ ya__pkg__help,list)
+ cmd="ya__pkg__help__list"
+ ;;
+ ya__pkg__help,upgrade)
+ cmd="ya__pkg__help__upgrade"
+ ;;
+ *)
+ ;;
+ esac
+ done
+
+ case "${cmd}" in
+ ya)
+ opts="-V -h --version --help emit emit-to pkg pack pub pub-to sub help"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__emit)
+ opts="-h --help <NAME> [ARGS]..."
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__emit__to)
+ opts="-h --help <RECEIVER> <NAME> [ARGS]..."
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help)
+ opts="emit emit-to pkg pack pub pub-to sub help"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__emit)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__emit__to)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__help)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__pack)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__pkg)
+ opts="add delete install list upgrade"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__pkg__add)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__pkg__delete)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__pkg__install)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__pkg__list)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__pkg__upgrade)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__pub)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__pub__to)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__help__sub)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pack)
+ opts="-a -d -i -l -u -h --add --delete --install --list --upgrade --help"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ --add)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -a)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --delete)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -d)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg)
+ opts="-h --help add delete install list upgrade help"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg__add)
+ opts="-h --help [IDS]..."
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg__delete)
+ opts="-h --help [IDS]..."
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg__help)
+ opts="add delete install list upgrade help"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg__help__add)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg__help__delete)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg__help__help)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg__help__install)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg__help__list)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg__help__upgrade)
+ opts=""
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg__install)
+ opts="-h --help"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg__list)
+ opts="-h --help"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pkg__upgrade)
+ opts="-h --help"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pub)
+ opts="-h --str --json --list --help <KIND>"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ --str)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --json)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --list)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__pub__to)
+ opts="-h --str --json --list --help <RECEIVER> <KIND>"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ --str)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --json)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --list)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ ya__sub)
+ opts="-h --help <KINDS>"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ esac
+}
+
+if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then
+ complete -F _ya -o nosort -o bashdefault -o default ya
+else
+ complete -F _ya -o bashdefault -o default ya
+fi
diff --git a/fedora/.config/bash/completions/yazi.bash b/fedora/.config/bash/completions/yazi.bash
new file mode 100644
index 0000000..ae2d3a1
--- /dev/null
+++ b/fedora/.config/bash/completions/yazi.bash
@@ -0,0 +1,66 @@
+_yazi() {
+ local i cur prev opts cmd
+ COMPREPLY=()
+ if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then
+ cur="$2"
+ else
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ fi
+ prev="$3"
+ cmd=""
+ opts=""
+
+ for i in "${COMP_WORDS[@]:0:COMP_CWORD}"
+ do
+ case "${cmd},${i}" in
+ ",$1")
+ cmd="yazi"
+ ;;
+ *)
+ ;;
+ esac
+ done
+
+ case "${cmd}" in
+ yazi)
+ opts="-V -h --cwd-file --chooser-file --clear-cache --client-id --local-events --remote-events --debug --version --help [ENTRIES]..."
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ --cwd-file)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --chooser-file)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --client-id)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --local-events)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --remote-events)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ esac
+}
+
+if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then
+ complete -F _yazi -o nosort -o bashdefault -o default yazi
+else
+ complete -F _yazi -o bashdefault -o default yazi
+fi
diff --git a/fedora/.config/bash/completions/zoxide.bash b/fedora/.config/bash/completions/zoxide.bash
new file mode 100644
index 0000000..1c2ed84
--- /dev/null
+++ b/fedora/.config/bash/completions/zoxide.bash
@@ -0,0 +1,243 @@
+_zoxide() {
+ local i cur prev opts cmd
+ COMPREPLY=()
+ if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then
+ cur="$2"
+ else
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ fi
+ prev="$3"
+ cmd=""
+ opts=""
+
+ for i in "${COMP_WORDS[@]:0:COMP_CWORD}"
+ do
+ case "${cmd},${i}" in
+ ",$1")
+ cmd="zoxide"
+ ;;
+ zoxide,add)
+ cmd="zoxide__add"
+ ;;
+ zoxide,edit)
+ cmd="zoxide__edit"
+ ;;
+ zoxide,import)
+ cmd="zoxide__import"
+ ;;
+ zoxide,init)
+ cmd="zoxide__init"
+ ;;
+ zoxide,query)
+ cmd="zoxide__query"
+ ;;
+ zoxide,remove)
+ cmd="zoxide__remove"
+ ;;
+ zoxide__edit,decrement)
+ cmd="zoxide__edit__decrement"
+ ;;
+ zoxide__edit,delete)
+ cmd="zoxide__edit__delete"
+ ;;
+ zoxide__edit,increment)
+ cmd="zoxide__edit__increment"
+ ;;
+ zoxide__edit,reload)
+ cmd="zoxide__edit__reload"
+ ;;
+ *)
+ ;;
+ esac
+ done
+
+ case "${cmd}" in
+ zoxide)
+ opts="-h -V --help --version add edit import init query remove"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ zoxide__add)
+ opts="-s -h -V --score --help --version <PATHS>..."
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ --score)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ -s)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ zoxide__edit)
+ opts="-h -V --help --version decrement delete increment reload"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ zoxide__edit__decrement)
+ opts="-h -V --help --version <PATH>"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ zoxide__edit__delete)
+ opts="-h -V --help --version <PATH>"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ zoxide__edit__increment)
+ opts="-h -V --help --version <PATH>"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ zoxide__edit__reload)
+ opts="-h -V --help --version"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ zoxide__import)
+ opts="-h -V --from --merge --help --version <PATH>"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ --from)
+ COMPREPLY=($(compgen -W "autojump z" -- "${cur}"))
+ return 0
+ ;;
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ zoxide__init)
+ opts="-h -V --no-cmd --cmd --hook --help --version bash elvish fish nushell posix powershell tcsh xonsh zsh"
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ --cmd)
+ COMPREPLY=($(compgen -f "${cur}"))
+ return 0
+ ;;
+ --hook)
+ COMPREPLY=($(compgen -W "none prompt pwd" -- "${cur}"))
+ return 0
+ ;;
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ zoxide__query)
+ opts="-a -i -l -s -h -V --all --interactive --list --score --exclude --help --version [KEYWORDS]..."
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ --exclude)
+ COMPREPLY=()
+ if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then
+ compopt -o plusdirs
+ fi
+ return 0
+ ;;
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ zoxide__remove)
+ opts="-h -V --help --version [PATHS]..."
+ if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ fi
+ case "${prev}" in
+ *)
+ COMPREPLY=()
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
+ return 0
+ ;;
+ esac
+}
+
+if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then
+ complete -F _zoxide -o nosort -o bashdefault -o default zoxide
+else
+ complete -F _zoxide -o bashdefault -o default zoxide
+fi
diff --git a/fedora/.config/bash/keymaps.bash b/fedora/.config/bash/keymaps.bash
index cf355ad..15bd7e2 100644
--- a/fedora/.config/bash/keymaps.bash
+++ b/fedora/.config/bash/keymaps.bash
@@ -11,101 +11,131 @@ PROMPT_COMMAND='echo -ne "\e[5 q"'
# ---------- helper: pre_cmd ----------
pre_cmd() {
- local txt="$1"
- if [[ -z "${READLINE_LINE+set}" ]]; then
- printf '%s ' "$txt"
- return
- fi
- local left=${READLINE_LINE:0:READLINE_POINT}
- local right=${READLINE_LINE:READLINE_POINT}
- READLINE_LINE="${left}${txt} ${right}"
- READLINE_POINT=$(( READLINE_POINT + ${#txt} + 1 ))
+ local last_cmd
+ last_cmd=$(history 1 | sed 's/^[ ]*[0-9]*[ ]*//')
+
+ if [[ $last_cmd != sudo* ]]; then
+ READLINE_LINE="sudo $last_cmd"
+ READLINE_POINT=${#READLINE_LINE}
+ fi
}
# ---------- Clipboard detection ----------
_detect_clipboard_setup() {
- if command -v pbcopy >/dev/null 2>&1 && command -v pbpaste >/dev/null 2>&1; then
- clipcopy() { cat "${1:-/dev/stdin}" | pbcopy; }
- clippaste() { pbaste; }
- return 0
- fi
- if command -v wl-copy >/dev/null 2>&1 && command -v wl-paste >/dev/null 2>&1; then
- clipcopy() { cat "${1:-/dev/stdin}" | wl-copy; }
- clippaste() { wl-paste --no-newline; }
- return 0
- fi
- if command -v xclip >/dev/null 2>&1; then
- clipcopy() { cat "${1:-/dev/stdin}" | xclip -selection clipboard; }
- clippaste() { xclip -selection clipboard -out; }
- return 0
- fi
- if command -v xsel >/dev/null 2>&1; then
- clipcopy() { cat "${1:-/dev/stdin}" | xsel --clipboard --input; }
- clippaste() { xsel --clipboard --output; }
- return 0
- fi
- if command -v clip.exe >/dev/null 2>&1; then
- clipcopy() { cat "${1:-/dev/stdin}" | clip.exe; }
- clippaste() { powershell.exe -noprofile -command Get-Clipboard 2>/dev/null; }
- return 0
- fi
- if command -v tmux >/dev/null 2>&1 && [ -n "${TMUX:-}" ]; then
- clipcopy() { tmux load-buffer -; }
- clippaste() { tmux save-buffer -; }
- return 0
- fi
- return 1
+ if command -v pbcopy >/dev/null 2>&1 && command -v pbpaste >/dev/null 2>&1; then
+ clipcopy() { cat "${1:-/dev/stdin}" | pbcopy; }
+ clippaste() { pbaste; }
+ return 0
+ fi
+ if command -v wl-copy >/dev/null 2>&1 && command -v wl-paste >/dev/null 2>&1; then
+ clipcopy() { cat "${1:-/dev/stdin}" | wl-copy; }
+ clippaste() { wl-paste --no-newline; }
+ return 0
+ fi
+ if command -v xclip >/dev/null 2>&1; then
+ clipcopy() { cat "${1:-/dev/stdin}" | xclip -selection clipboard; }
+ clippaste() { xclip -selection clipboard -out; }
+ return 0
+ fi
+ if command -v xsel >/dev/null 2>&1; then
+ clipcopy() { cat "${1:-/dev/stdin}" | xsel --clipboard --input; }
+ clippaste() { xsel --clipboard --output; }
+ return 0
+ fi
+ if command -v clip.exe >/dev/null 2>&1; then
+ clipcopy() { cat "${1:-/dev/stdin}" | clip.exe; }
+ clippaste() { powershell.exe -noprofile -command Get-Clipboard 2>/dev/null; }
+ return 0
+ fi
+ if command -v tmux >/dev/null 2>&1 && [ -n "${TMUX:-}" ]; then
+ clipcopy() { tmux load-buffer -; }
+ clippaste() { tmux save-buffer -; }
+ return 0
+ fi
+ return 1
}
_detect_clipboard_setup || true
paste_clipboard_to_readline() {
- if ! command -v clippaste >/dev/null 2>&1; then
- _detect_clipboard_setup || { printf 'No clipboard helper found\n' >&2; return 1; }
- fi
- local clip
- clip=$(clippaste 2>/dev/null) || return 1
- clip="${clip%$'\n'}"
- if [[ -z "${READLINE_LINE+set}" ]]; then
- printf '%s' "$clip"
- return
- fi
- local left=${READLINE_LINE:0:READLINE_POINT}
- local right=${READLINE_LINE:READLINE_POINT}
- READLINE_LINE="${left}${clip}${right}"
- READLINE_POINT=$(( READLINE_POINT + ${#clip} ))
+ if ! command -v clippaste >/dev/null 2>&1; then
+ _detect_clipboard_setup || {
+ printf 'No clipboard helper found\n' >&2
+ return 1
+ }
+ fi
+ local clip
+ clip=$(clippaste 2>/dev/null) || return 1
+ clip="${clip%$'\n'}"
+ if [[ -z "${READLINE_LINE+set}" ]]; then
+ printf '%s' "$clip"
+ return
+ fi
+ local left=${READLINE_LINE:0:READLINE_POINT}
+ local right=${READLINE_LINE:READLINE_POINT}
+ READLINE_LINE="${left}${clip}${right}"
+ READLINE_POINT=$((READLINE_POINT + ${#clip}))
}
copy_readline_to_clipboard() {
- if [[ -z "${READLINE_LINE+set}" ]]; then
- printf 'No current line to copy\n' >&2
- return 1
- fi
- if ! command -v clipcopy >/dev/null 2>&1; then
- _detect_clipboard_setup || { printf 'No clipboard helper found\n' >&2; return 1; }
- fi
- printf '%s' "${READLINE_LINE}" | clipcopy
+ if [[ -z "${READLINE_LINE+set}" ]]; then
+ printf 'No current line to copy\n' >&2
+ return 1
+ fi
+ if ! command -v clipcopy >/dev/null 2>&1; then
+ _detect_clipboard_setup || {
+ printf 'No clipboard helper found\n' >&2
+ return 1
+ }
+ fi
+ printf '%s' "${READLINE_LINE}" | clipcopy
}
# ---------- basic utilities ----------
-clear_tree_2() { clear; tree -L 2 2>/dev/null || true; }
-clear_tree_3() { clear; tree -L 3 2>/dev/null || true; }
+clear_tree_2() {
+ clear
+ tree -L 2 2>/dev/null || true
+}
+clear_tree_3() {
+ clear
+ tree -L 3 2>/dev/null || true
+}
insert_current_date() {
- local txt="$(date -I)"
- if [[ -z "${READLINE_LINE+set}" ]]; then printf '%s' "$txt"; return; fi
- local left=${READLINE_LINE:0:READLINE_POINT}; local right=${READLINE_LINE:READLINE_POINT}
- READLINE_LINE="${left}${txt}${right}"; READLINE_POINT=$(( READLINE_POINT + ${#txt} ))
+ local txt="$(date -I)"
+ if [[ -z "${READLINE_LINE+set}" ]]; then
+ printf '%s' "$txt"
+ return
+ fi
+ local left=${READLINE_LINE:0:READLINE_POINT}
+ local right=${READLINE_LINE:READLINE_POINT}
+ READLINE_LINE="${left}${txt}${right}"
+ READLINE_POINT=$((READLINE_POINT + ${#txt}))
}
insert_unix_timestamp() {
- local txt="$(date +%s)"
- if [[ -z "${READLINE_LINE+set}" ]]; then printf '%s' "$txt"; return; fi
- local left=${READLINE_LINE:0:READLINE_POINT}; local right=${READLINE_LINE:READLINE_POINT}
- READLINE_LINE="${left}${txt}${right}"; READLINE_POINT=$(( READLINE_POINT + ${#txt} ))
+ local txt="$(date +%s)"
+ if [[ -z "${READLINE_LINE+set}" ]]; then
+ printf '%s' "$txt"
+ return
+ fi
+ local left=${READLINE_LINE:0:READLINE_POINT}
+ local right=${READLINE_LINE:READLINE_POINT}
+ READLINE_LINE="${left}${txt}${right}"
+ READLINE_POINT=$((READLINE_POINT + ${#txt}))
+}
+git_status_clear() {
+ clear
+ git status 2>/dev/null || git status --short 2>/dev/null || true
+}
+tmux_left_pane() {
+ tmux select-pane -L 2>/dev/null || true
+ tmux resize-pane -Z 2>/dev/null || true
}
-git_status_clear() { clear; git status 2>/dev/null || git status --short 2>/dev/null || true; }
-tmux_left_pane() { tmux select-pane -L 2>/dev/null || true; tmux resize-pane -Z 2>/dev/null || true; }
vi_append_clip_selection() { paste_clipboard_to_readline; }
copybuffer() { copy_readline_to_clipboard; }
-background_start() { local cmd="$1"; shift || return 0; for arg in "$@"; do "$cmd" "$arg" &>/dev/null & done; }
+background_start() {
+ local cmd="$1"
+ shift || return 0
+ for arg in "$@"; do "$cmd" "$arg" &>/dev/null & done
+}
# ---------- pre_cmd widgets ----------
man_command_line() { pre_cmd "man"; }
@@ -114,15 +144,14 @@ sudo_command_line() { pre_cmd "sudo"; }
# ---------- wrappers (u-prefix REMOVED) ----------
bc() { command -v bc >/dev/null 2>&1 && /usr/bin/env bc "$@" || printf 'bc: not found\n' >&2; }
cdi() { command -v cdi >/dev/null 2>&1 && cdi "$@" || printf 'cdi: not found\n' >&2; }
-lastvim() { command -v lastnvim >/dev/null 2>&1 && lastvim "$@" || printf 'lastvim: not found\n' >&2; }
+lastfiles() { command -v lastfiles >/dev/null 2>&1 && lastfiles "$@" || printf 'lastfiles: not found\n' >&2; }
htop() { command -v htop >/dev/null 2>&1 && htop "$@" || printf 'htop: not found\n' >&2; }
sessionizer() { command -v sessionizer >/dev/null 2>&1 && sessionizer "$@" || printf 'sessionizer: not found\n' >&2; }
upd() { command -v upd >/dev/null 2>&1 && upd "$@" || printf 'upd: not found\n' >&2; }
-cht() { command -v cht >/dev/null 2>&1 && cht "$@" || printf 'cht: not found\n' >&2; } # from '^ucht' -> 'cht'
+cht() { command -v cht >/dev/null 2>&1 && cht "$@" || printf 'cht: not found\n' >&2; } # from '^ucht' -> 'cht'
ali() { command -v ali >/dev/null 2>&1 && ali "$@" || printf 'ali: not found\n' >&2; }
fD() { command -v fD >/dev/null 2>&1 && fD "$@" || printf 'fD: not found\n' >&2; }
-rgafiles() { command -v rgafiles >/dev/null 2>&1 && rgafiles "$@" || printf 'rgafiles: not found\n' >&2; }
-lastvim_l() { command -v lastnvim >/dev/null 2>&1 && lastvim -l || printf 'lastvim: not found\n' >&2; }
+lastfiles_l() { command -v lastfiles >/dev/null 2>&1 && lastfiles -l || printf 'lastfiles: not found\n' >&2; }
# ---------- Readline key bindings (bind -x) ----------
# basic movement
@@ -133,68 +162,57 @@ bind '"\C-e": end-of-line'
bind -x '"\C-x\C-e":clear_tree_2'
bind -x '"\C-x\C-w":clear_tree_3'
bind -x '"\C-x\C-s":git_status_clear'
-bind -x '"\C-x\C-x\C-t":insert_current_date' # ^X^X^T (alternate: C-x C-t)
+bind -x '"\C-x\C-x\C-t":insert_current_date' # ^X^X^T (alternate: C-x C-t)
bind -x '"\C-x\C-t":insert_current_date'
bind -x '"\C-x\C-x\C-u":insert_unix_timestamp' # ^X^X^U
bind -x '"\C-x\C-u":insert_unix_timestamp'
# clipboard binds
-bind -x '"\C-x\C-p":paste_clipboard_to_readline' # ^X^P
-bind -x '"\C-x\C-y":copy_readline_to_clipboard' # ^X^Y
+bind -x '"\C-x\C-p":paste_clipboard_to_readline' # ^X^P
+bind -x '"\C-x\C-y":copy_readline_to_clipboard' # ^X^Y
# edit in editor
edit_command_line() {
- local tmp content
- tmp=$(mktemp /tmp/bash-edit.XXXXXX) || return
- printf '%s' "${READLINE_LINE:-}" > "$tmp"
- "${EDITOR:-vim}" "$tmp"
- content=$(<"$tmp")
- READLINE_LINE="$content"
- READLINE_POINT=${#content}
- rm -f "$tmp"
+ local tmp content
+ tmp=$(mktemp /tmp/bash-edit.XXXXXX) || return
+ printf '%s' "${READLINE_LINE:-}" >"$tmp"
+ "${EDITOR:-vim}" "$tmp"
+ content=$(<"$tmp")
+ READLINE_LINE="$content"
+ READLINE_POINT=${#content}
+ rm -f "$tmp"
}
-bind -x '"\C-x\C-v":edit_command_line' # ^X^V
+bind -x '"\C-x\C-v":edit_command_line' # ^X^V
# man & sudo insertion
-bind -x '"\C-x\C-m":man_command_line' # ^X^M
+bind -x '"\C-x\C-m":man_command_line' # ^X^M
stty -ixon 2>/dev/null || true
-bind -x '"\C-s":sudo_command_line' # ^S (stty -ixon to avoid flow control)
+bind -x '"\C-s":sudo_command_line' # ^S (stty -ixon to avoid flow control)
# tmux left pane (bind ESC + backslash)
-bind -x $'\e\\':tmux_left_pane
+#bind -x '\e\\':tmux_left_pane
# ---------- mappings of the original bindkey -s lines (u removed) ----------
-bind -x '"\C-b":__bc' # will call function __bc below
+bind -x '"\C-b":__bc' # will call function __bc below
__bc() { bc -lq "$@"; }
bind -x '"\C-d":cdi'
bind -x '"\C-f":fzffiles'
-bind -x '"\C-g":lf'
-bind -x '"\C-n":lastnvim'
+bind -x '"\C-n":lastfiles'
bind -x '"\C-o":tmo'
bind -x '"\C-p":fzfpass'
bind -x '"\C-q":htop'
bind -x '"\C-t":sessionizer'
-bind -x '"\C-y":lfcd'
-bind -x '"\C-z":upd'
+bind -x '"\C-z":pd'
# ^_ (Ctrl-_) mapped to cht (from '^ucht' -> 'cht')
bind -x $'"\C-_":cht'
# ^X^... sequences (Ctrl-X then key)
bind -x '"\C-x\C-a":ali'
-bind -x '"\C-x\C-b":gitopenbranch'
bind -x '"\C-x\C-d":fD'
bind -x '"\C-x\C-f":gitfiles'
bind -x '"\C-x\C-g":rgafiles'
bind -x '"\C-x\C-l":gloac'
-bind -x '"\C-x\C-n":lastnvim_l'
+bind -x '"\C-x\C-n":lastfiles_l'
bind -x '"\C-x\C-q":fpkill'
-bind -x '"\C-x\C-r":fgst'
-bind -x '"\C-x\C-t":gitstagedfiles'
-bind -x '"\C-x\C-u":gitupdate'
-bind -x '"\C-x\C-_":fzffns' # ^X^_
-bind -x '"\C-x\C-x\C-b":rbackup'
-bind -x '"\C-x\C-x\C-p":pcyr'
-bind -x '"\C-x\C-x\C-r":rbackup' # rbackup -r not directly supported via bind -x args; call rbackup then ask user for flags if needed
-bind -x '"\C-x\C-x\C-s":sshadd'
-bind -x '"\C-x\C-x\C-y":yay_remaps'
+bind -x '"\C-x\C-_":fzffns' # ^X^_
diff --git a/fedora/.config/bash/packages.bash b/fedora/.config/bash/packages.bash
index f45925a..27d396e 100644
--- a/fedora/.config/bash/packages.bash
+++ b/fedora/.config/bash/packages.bash
@@ -2,7 +2,7 @@
# --- Packages (bash version) ---
declare -A packages=(
- [zoxide]="--cmd cd --hook prompt"
+ # [zoxide]="--cmd cd --hook prompt"
)
eval_packages() {
diff --git a/fedora/.config/bash/scripts.bash b/fedora/.config/bash/scripts.bash
index fa0abbc..400265d 100644
--- a/fedora/.config/bash/scripts.bash
+++ b/fedora/.config/bash/scripts.bash
@@ -1,97 +1,64 @@
#!/bin/bash
-# Use the best version of pico installed
-edit() {
- if [ "$(type -t jpico)" = "file" ]; then
- # Use JOE text editor http://joe-editor.sourceforge.net/
- jpico -nonotice -linums -nobackups "$@"
- elif [ "$(type -t nano)" = "file" ]; then
- nano -c "$@"
- elif [ "$(type -t pico)" = "file" ]; then
- pico "$@"
+###########################################################################################
+###########################################################################################
+### --- APACHE --- ###
+# View Apache logs
+apachelog() {
+ if [ -f /etc/httpd/conf/httpd.conf ]; then
+ cd /var/log/httpd && ls -xAh && multitail --no-repeat -c -s 2 /var/log/httpd/*_log
else
- vim "$@"
+ cd /var/log/apache2 && ls -xAh && multitail --no-repeat -c -s 2 /var/log/apache2/*.log
fi
}
-sedit() {
- if [ "$(type -t jpico)" = "file" ]; then
- # Use JOE text editor http://joe-editor.sourceforge.net/
- sudo jpico -nonotice -linums -nobackups "$@"
- elif [ "$(type -t nano)" = "file" ]; then
- sudo nano -c "$@"
- elif [ "$(type -t pico)" = "file" ]; then
- sudo pico "$@"
+# Edit the Apache configuration
+apacheconfig() {
+ if [ -f /etc/httpd/conf/httpd.conf ]; then
+ sedit /etc/httpd/conf/httpd.conf
+ elif [ -f /etc/apache2/apache2.conf ]; then
+ sedit /etc/apache2/apache2.conf
else
- sudo vim "$@"
+ echo "Error: Apache config file could not be found."
+ echo "Searching for possible locations:"
+ sudo updatedb && locate httpd.conf && locate apache2.conf
fi
}
-# Extracts any archive(s) (if unp isn't installed)
-extract() {
- for archive in $*; do
- if [ -f $archive ]; then
- case $archive in
- *.tar.bz2) tar xvjf $archive ;;
- *.tar.gz) tar xvzf $archive ;;
- *.bz2) bunzip2 $archive ;;
- *.rar) rar x $archive ;;
- *.gz) gunzip $archive ;;
- *.tar) tar xvf $archive ;;
- *.tbz2) tar xvjf $archive ;;
- *.tgz) tar xvzf $archive ;;
- *.zip) unzip $archive ;;
- *.Z) uncompress $archive ;;
- *.7z) 7z x $archive ;;
- *) echo "don't know how to extract '$archive'..." ;;
- esac
- else
- echo "'$archive' is not a valid file!"
- fi
- done
-}
-
-# Searches for text in all files in the current folder
-ftext() {
- # -i case-insensitive
- # -I ignore binary files
- # -H causes filename to be printed
- # -r recursive search
- # -n causes line number to be printed
- # optional: -F treat search term as a literal, not a regular expression
- # optional: -l only print filenames and not the matching lines ex. grep -irl "$1" *
- grep -iIHrn --color=always "$1" . | less -r
-}
-
-# Copy file with a progress bar
-cpf() {
- set -e
- strace -q -ewrite cp -- "${1}" "${2}" 2>&1 |
- awk '{
- count += $NF
- if (count % 10 == 0) {
- percent = count / total_size * 100
- printf "%3d%% [", percent
- for (i=0;i<=percent;i++)
- printf "="
- printf ">"
- for (i=percent;i<100;i++)
- printf " "
- printf "]\r"
- }
- }
- END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
-}
+###########################################################################################
+###########################################################################################
+### --- BASH --- ###
+# Automatically install the needed support files for this .bashrc file
+install_bashrc_support() {
+ local dtype
+ dtype=$(distribution)
-# Copy and go to the directory
-cpg() {
- if [ -d "$2" ]; then
- cp $1 $2 && cd $2
+ if [ $dtype == "redhat" ]; then
+ sudo yum install multitail tree joe
+ elif [ $dtype == "suse" ]; then
+ sudo zypper install multitail
+ sudo zypper install tree
+ sudo zypper install joe
+ elif [ $dtype == "debian" ]; then
+ sudo apt-get install multitail tree joe
+ elif [ $dtype == "gentoo" ]; then
+ sudo emerge multitail
+ sudo emerge tree
+ sudo emerge joe
+ elif [ $dtype == "mandriva" ]; then
+ sudo urpmi multitail
+ sudo urpmi tree
+ sudo urpmi joe
+ elif [ $dtype == "slackware" ]; then
+ echo "No install support for Slackware"
else
- cp $1 $2
+ echo "Unknown distribution"
fi
}
+###########################################################################################
+###########################################################################################
+### --- CD --- ###
# Move and go to the directory
mvg() {
if [ -d "$2" ]; then
@@ -106,7 +73,7 @@ mc() {
mkdir -p $1 && cd $1
}
-# Goes up a specified number of directories (i.e. up 4)
+# Go up a specified number of directories (i.e. up 4)
up() {
local d=""
limit=$1
@@ -134,6 +101,79 @@ pwdtail() {
pwd | awk -F/ '{nlast = NF -1;print $nlast"/"$NF}'
}
+###########################################################################################
+###########################################################################################
+### --- COMMAND OUTPUT --- ###
+alias ilco=insert_last_command_output
+insert_last_command_output() {
+ local last_cmd
+ last_cmd=$(history | tail -n 2 | head -n 1 | sed 's/^[ ]*[0-9]\+[ ]*//')
+ eval "$last_cmd"
+}
+
+###########################################################################################
+###########################################################################################
+### --- COPY --- ###
+# Copy file with a progress bar
+cpf() {
+ set -e
+ strace -q -ewrite cp -- "${1}" "${2}" 2>&1 |
+ awk '{
+ count += $NF
+ if (count % 10 == 0) {
+ percent = count / total_size * 100
+ printf "%3d%% [", percent
+ for (i=0;i<=percent;i++)
+ printf "="
+ printf ">"
+ for (i=percent;i<100;i++)
+ printf " "
+ printf "]\r"
+ }
+ }
+ END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
+}
+
+# Copy and go to the directory
+cpg() {
+ if [ -d "$2" ]; then
+ cp $1 $2 && cd $2
+ else
+ cp $1 $2
+ fi
+}
+
+###########################################################################################
+###########################################################################################
+### --- CREATE --- ###
+alias mc=mkcd
+mkcd() { mkdir -p "$1" && cd "$1" || return; }
+
+mkdt() {
+ mkdir -p "${1:+$1/}$(date +%F)"
+}
+
+###########################################################################################
+###########################################################################################
+### --- CURSOR --- ###
+# vi-mode cursor change
+function update_cursor {
+ if [[ $READLINE_LINE == * ]]; then
+ if [[ $READLINE_POINT -eq 0 ]]; then
+ echo -ne '\e[6 q' # insert mode
+ else
+ echo -ne '\e[2 q' # command mode
+ fi
+ fi
+}
+
+# vi-command, vi-insert 모드 hook 등록
+bind -m vi-insert '":": "\C-o update_cursor"'
+bind -m vi-command '":": "\C-o update_cursor"'
+
+###########################################################################################
+###########################################################################################
+### --- DISTRIBUTION --- ###
# Show the current distribution
distribution() {
local dtype
@@ -206,34 +246,64 @@ ver() {
fi
}
-# Automatically install the needed support files for this .bashrc file
-install_bashrc_support() {
- local dtype
- dtype=$(distribution)
+###########################################################################################
+###########################################################################################
+### --- EDIT --- ###
+edit() {
+ if [ "$(type -t jpico)" = "file" ]; then
+ # Use JOE text editor http://joe-editor.sourceforge.net/
+ jpico -nonotice -linums -nobackups "$@"
+ elif [ "$(type -t nano)" = "file" ]; then
+ nano -c "$@"
+ elif [ "$(type -t pico)" = "file" ]; then
+ pico "$@"
+ else
+ vim "$@"
+ fi
+}
- if [ $dtype == "redhat" ]; then
- sudo yum install multitail tree joe
- elif [ $dtype == "suse" ]; then
- sudo zypper install multitail
- sudo zypper install tree
- sudo zypper install joe
- elif [ $dtype == "debian" ]; then
- sudo apt-get install multitail tree joe
- elif [ $dtype == "gentoo" ]; then
- sudo emerge multitail
- sudo emerge tree
- sudo emerge joe
- elif [ $dtype == "mandriva" ]; then
- sudo urpmi multitail
- sudo urpmi tree
- sudo urpmi joe
- elif [ $dtype == "slackware" ]; then
- echo "No install support for Slackware"
+sedit() {
+ if [ "$(type -t jpico)" = "file" ]; then
+ # Use JOE text editor http://joe-editor.sourceforge.net/
+ sudo jpico -nonotice -linums -nobackups "$@"
+ elif [ "$(type -t nano)" = "file" ]; then
+ sudo nano -c "$@"
+ elif [ "$(type -t pico)" = "file" ]; then
+ sudo pico "$@"
else
- echo "Unknown distribution"
+ sudo vim "$@"
fi
}
+###########################################################################################
+###########################################################################################
+### --- EXTRACT --- ###
+extract() {
+ for archive in $*; do
+ if [ -f $archive ]; then
+ case $archive in
+ *.tar.bz2) tar xvjf $archive ;;
+ *.tar.gz) tar xvzf $archive ;;
+ *.bz2) bunzip2 $archive ;;
+ *.rar) rar x $archive ;;
+ *.gz) gunzip $archive ;;
+ *.tar) tar xvf $archive ;;
+ *.tbz2) tar xvjf $archive ;;
+ *.tgz) tar xvzf $archive ;;
+ *.zip) unzip $archive ;;
+ *.Z) uncompress $archive ;;
+ *.7z) 7z x $archive ;;
+ *) echo "don't know how to extract '$archive'..." ;;
+ esac
+ else
+ echo "'$archive' is not a valid file!"
+ fi
+ done
+}
+
+###########################################################################################
+###########################################################################################
+### --- NETWORK --- ###
# Show current network information
netinfo() {
echo "--------------- Network Information ---------------"
@@ -262,28 +332,18 @@ function whatsmyip() {
wget http://smart-ip.net/myip -O - -q
}
-# View Apache logs
-apachelog() {
- if [ -f /etc/httpd/conf/httpd.conf ]; then
- cd /var/log/httpd && ls -xAh && multitail --no-repeat -c -s 2 /var/log/httpd/*_log
- else
- cd /var/log/apache2 && ls -xAh && multitail --no-repeat -c -s 2 /var/log/apache2/*.log
- fi
-}
+###########################################################################################
+###########################################################################################
+### --- PASS --- ###
+pass_otp() { pass otp uri -q "$1"; }
+pass_otp_insert() { pass otp insert "$1"; }
-# Edit the Apache configuration
-apacheconfig() {
- if [ -f /etc/httpd/conf/httpd.conf ]; then
- sedit /etc/httpd/conf/httpd.conf
- elif [ -f /etc/apache2/apache2.conf ]; then
- sedit /etc/apache2/apache2.conf
- else
- echo "Error: Apache config file could not be found."
- echo "Searching for possible locations:"
- sudo updatedb && locate httpd.conf && locate apache2.conf
- fi
-}
+alias cpqr=pass_qr
+pass_qr() { qrencode -o "$1.png" -t png -Sv 40 <"$1.pgp"; }
+###########################################################################################
+###########################################################################################
+### --- PHP --- ###
# Edit the PHP configuration file
phpconfig() {
if [ -f /etc/php.ini ]; then
@@ -303,6 +363,23 @@ phpconfig() {
fi
}
+###########################################################################################
+###########################################################################################
+### --- SEARCH --- ###
+ftext() {
+ # -i case-insensitive
+ # -I ignore binary files
+ # -H causes filename to be printed
+ # -r recursive search
+ # -n causes line number to be printed
+ # optional: -F treat search term as a literal, not a regular expression
+ # optional: -l only print filenames and not the matching lines ex. grep -irl "$1" *
+ grep -iIHrn --color=always "$1" . | less -r
+}
+
+###########################################################################################
+###########################################################################################
+### --- SQL --- ###
# Edit the MySQL configuration file
mysqlconfig() {
if [ -f /etc/my.cnf ]; then
@@ -324,16 +401,33 @@ mysqlconfig() {
fi
}
-# For some reason, rot13 pops up everywhere
-rot13() {
- if [ $# -eq 0 ]; then
- tr '[a-m][n-z][A-M][N-Z]' '[n-z][a-m][N-Z][A-M]'
- else
- echo $* | tr '[a-m][n-z][A-M][N-Z]' '[n-z][a-m][N-Z][A-M]'
+###########################################################################################
+###########################################################################################
+### --- STOW --- ###
+alias dstw=dotfiles_stw
+dotfiles_stw() {
+ "${XDG_DOTFILES_DIR:-${HOME}/.dotfiles}/$(whereami)/.local/bin/stw"
+}
+
+###########################################################################################
+###########################################################################################
+### --- SUDO --- ###
+pre_cmd() {
+ local prepend_command="$1"
+ local buffer="${READLINE_LINE:-}"
+
+ if [ -z "$buffer" ]; then
+ buffer=$(history | tail -n 2 | head -n 1 | sed 's/^[ ]*[0-9]\+[ ]*//')
fi
+
+ READLINE_LINE="$prepend_command $buffer"
+ READLINE_POINT=${#READLINE_LINE}
}
+bind -x '"\es":pre_cmd sudo'
-# Trim leading and trailing spaces (for scripts)
+###########################################################################################
+###########################################################################################
+### --- TRIM --- ###
trim() {
local var=$@
var='${var#"${var%%[![:space:]]*}"}' # remove leading whitespace characters
diff --git a/fedora/.config/shell/aliasrc b/fedora/.config/shell/aliasrc
index 6b35701..689699d 100644
--- a/fedora/.config/shell/aliasrc
+++ b/fedora/.config/shell/aliasrc
@@ -2,385 +2,743 @@
# balias - blank aliases (completed without space)
# ialias - ignored aliases (not completed)
-# sudo not required for some system commands
-for command in blkid lsblk mount umount dnf poweroff reboot shutdown su updatedb; do
- alias $command="sudo $command"
-done
-unset command
-
-case "$(readlink -f /sbin/init)" in
-*systemd*)
- # journal
- alias -g jctl='journalctl -xe'
- alias -g jctlou='sudo journalctl -b -n 200 -f'
- alias -g rpi='systemctl --user restart wireplumber pipewire pipewire-pulse pipewire-jack'
- alias -g sctl='systemctl'
- alias -g sctlss='systemctl status'
- alias -g sctle='systemctl enable'
- alias -g sctld='systemctl disable'
- alias -g sctlr='systemctl restart'
- alias -g sctls='systemctl start'
- alias -g sctlt='systemctl stop'
- alias -g sctldr='systemctl daemon-reload'
- alias -g tctl='timedatectl'
- ;;
-esac
-
-# Go back
-alias ...='../..'
-alias ....='../../..'
-alias .....='../../../..'
-
-# bash
-alias sbp="source ~/.config/bash/bash_profile"
-alias sbs="source ~/.config/bash/bashrc"
-
-# cd
-alias cf='cd "$(dirname "$(readlink -f health.lua)")"'
-alias pd='cd -'
-
-# chmod
-alias che='find . -type f -exec chmod +x {};'
-alias chfd='find . -type d -exec chmod 755 {}; -o -type f -exec chmod 644 {};'
-alias cx='chmod a+x'
-alias 000='chmod -R 000'
-alias 600='chmod -R 600'
-alias 644='chmod -R 644'
-alias 666='chmod -R 666'
-alias 755='chmod -R 755'
-alias 777='chmod -R 777'
-
-# copy
-alias CC='$(fc -l -n -1) | xclip -selection clipboard'
-ialias cp='cp -iv'
-alias pwdc='pwd | xclip -selection clipboard'
-
-# count
-alias countfiles="for t in files links directories; do echo \`find . -type \${t:0:1} | wc -l\` \$t; done 2> /dev/null"
-
-# curl
-ialias curl='curl --silent --show-error'
-balias clh='curl localhost:'
-balias clh8='curl localhost:8080'
-balias clh9='curl localhost:9080'
-balias c100='curl 192.168.99.100:'
-
-# date
-alias da="date '+%Y-%m-%d %A %T %Z'"
-
-# delete
-alias _fd='find . -type f -name "._*" -print0 | xargs -0 rm -f'
-alias _fp='find . -type f -name "._*" -print'
-
-# diff
-ialias diff='diff --color'
-
-# disk
-alias diskspace="du -S | sort -n -r |more"
-alias folders="du -h --max-depth=1"
-alias folderssort="find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn"
-alias tree="tree -CAhF --dirsfirst"
-alias treed="tree -CAFd"
-alias mountedinfo="df -hT"
-
-# docker
-alias dk='docker'
-alias dkp='docker ps'
-alias dkpa='docker ps -a'
-alias dkpaq='docker ps -a -q'
-alias dkb='docker build -t'
-alias dkbnc='docker build --no-cache -t'
-alias dkr='docker run --rm'
-alias dkrti='docker run --rm -ti'
-alias dkrd='docker run -d'
-alias dkrp8='docker run --rm -p 8080:8080'
-alias dkrp9='docker run --rm -p 9080:9080'
-alias dks='docker start'
-alias dkt='docker stop'
-alias dktt='docker stop $(docker ps -q)'
-alias dkk='docker kill'
-alias dkkk='docker kill $(docker ps -q)'
-alias dkrm='docker rm'
-alias dkri='docker rmi'
-alias dke='docker exec -ti'
-alias dkl='docker logs -f'
-alias dki='docker images'
-alias dkpu='docker pull'
-alias dkph='docker push'
-alias dkin='docker inspect'
-alias dkn='docker network'
-alias dkc='docker-compose'
-alias dkcu='docker-compose up'
-alias dkclean='docker ps -q -a -f status=exited | xargs -r docker rm && docker images -q -f dangling=true | xargs -r docker rmi'
-
-# find
-balias fdn='find . -name "'
-alias f="find . | grep "
-
-# grep
-ialias -g grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'
-alias grepi='grep -i'
-alias grepr='grep -r'
-alias grepri='grep -ri'
-alias grepw='grep -R -i --include="*"'
-alias grepb='grep -R -i --include="*" --exclude-dir="zsh"'
-alias -g Gg='| grep'
-alias -g Gi='| grep -i'
-alias -g GH='| grep HTTP'
-
-# hash
-alias h='hash -rf'
-
-# hexdump
-alias hx='hexdump -C'
-
-# history
-alias h="history | grep "
-
-# ip
-ialias ip='ip -color=auto'
-alias whatsmyip='curl -s ifconfig.me | xargs'
-alias ipview="netstat -anpl | grep :80 | awk '{print $5}' | cut -d':' -f1 | sort | uniq -c | sort -n | sed -e 's/^ *//' -e 's/ *$//'"
-
-# killall
-alias ka='killall'
-alias k9='kill -9'
-alias k15='kill -15'
-
-# logs
-alias logs="sudo find /var/log -type f -exec file {} \; | grep 'text' | cut -d' ' -f1 | sed -e's/:$//g' | grep -v '[0-9]$' | xargs tail -f"
-
-# ls: eza or built-in
-[ -x "$(command -v eza)" ] && {
- ialias l='eza --icons --group-directories-first'
- ialias la='eza --icons -aa --group-directories-first'
- ialias lh='eza --icons -aa --group-directories-first'
- ialias ll='eza -gl --icons --group-directories-first'
- ialias lla='eza -glaa --icons --group-directories-first'
- ialias lm='eza -glA --group-directories-first | more'
- ialias lr='eza --icons -R --group-directories-first'
- ialias ls='eza --icons -A --group-directories-first'
- ialias lsb='eza --icons -b --group-directories-first'
- ialias lsby='eza --icons -B --group-directories-first'
- ialias lld='eza --icons -Dl --group-directories-first'
- ialias llda='eza --icons -aaDl --group-directories-first'
- ialias llf='eza --icons -fl'
- ialias llfa='eza --icons -aafl'
- ialias llsa='eza --icons -l -s=accessed'
- ialias llsaa='eza --icons -aal -s=accessed'
- ialias llsc='eza --icons -l -s=created'
- ialias llsca='eza --icons -aal -s=created'
- ialias llse='eza --icons -l -s=extension'
- ialias llsea='eza --icons -aal -s=extension'
- ialias llsm='eza --icons -l -s=modified'
- ialias llsma='eza --icons -aal -s=modified'
- ialias llsn='eza --icons -l -s=name'
- ialias llsna='eza --icons -aal -s=name'
- ialias llss='eza --icons -l -s=size'
- ialias llssa='eza --icons -aal -s=size'
- ialias llst='eza --icons -l -s=type'
- ialias llsta='eza --icons -aal -s=type'
- ialias lt='eza --icons -T -L'
- ialias ltd='eza --icons -TD -L'
- ialias ltdr='eza --icons -TDr -L'
- ialias ltr='eza --icons -Tr -L'
-} || {
- ialias l='/usr/bin/ls -h --color=always --group-directories-first'
- ialias la='/usr/bin/ls -alh --color=always --group-directories-first'
- ialias ll='/usr/bin/ls -lh --color=always --group-directories-first'
- ialias lla='/usr/bin/ls -aFls --color=always --group-directories-first'
- ialias llf='/usr/bin/ls -Fls --color=always --group-directories-first'
- ialias lm='/usr/bin/ls -alh --color=always --group-directories-first | more'
- ialias lr='/usr/bin/ls -hlR --color=always --group-directories-first'
- ialias lra='/usr/bin/ls -ahlR --color=always --group-directories-first'
- ialias ls='/usr/bin/ls -AFh --color=always --group-directories-first'
- ialias llsa='/usr/bin/ls -hlru --color=always --group-directories-first'
- ialias llsc='/usr/bin/ls -hclr --color=always --group-directories-first'
- ialias lld='/usr/bin/ls -l --color=always | grep "^d"'
- ialias llda='/usr/bin/ls -la --color=always | grep "^d"'
- ialias llse='/usr/bin/ls -BhlX --color=always --group-directories-first'
- ialias llsf='/usr/bin/ls -l --color=always | grep -v "^d"'
- ialias llsfa='/usr/bin/ls -la --color=always | grep -v "^d"'
- ialias llsm='/usr/bin/ls -hlr --time=ctime --color=always --group-directories-first'
- ialias llsn='/usr/bin/ls -alp --color=always --group-directories-first'
- ialias llss='/usr/bin/ls -hlrS --color=always --group-directories-first'
- ialias llst='/usr/bin/ls -hlrt --color=always --group-directories-first'
- ialias lw='/usr/bin/ls -Ahx --color=always --group-directories-first'
-}
-
-# mime
-alias mimereset="update-desktop-database ${XDG_DATA_HOME:-${HOME}/.local/share}/applications"
-
-# mkdir
-ialias mkdir='mkdir -pv'
-
-# modified commands
-alias grep="/usr/bin/grep $GREP_OPTIONS"
-alias cp="cp -i"
-alias freshclam="sudo freshclam"
-alias less="less -R"
-alias mkdir="mkdir -p"
-alias multitail="multitail --no-repeat -c"
-alias mv="mv -i"
-alias ping="ping -c 10"
-alias ps="ps auxf"
-alias rm="rm -iv"
-alias svi="sudo vi"
-alias v="vim"
-alias vi="vim"
-alias vis="vim '+set si'"
-
-# move
-ialias mv='mv -iv'
-
-# nginx
-alias ngx="cd /etc/nginx"
-
-# nvim
-alias v='$EDITOR'
-alias v.='$EDITOR .'
-alias ve='$EDITOR -c enew'
-alias nv.='nvim .'
-alias nve='nvim -c enew'
-alias nts='NVIM_APPNAME=TheSiahxyz nvim'
-alias nav='NVIM_APPNAME=AstroNvim nvim'
-alias nlu='NVIM_APPNAME=LunarVim nvim'
-alias nlv='NVIM_APPNAME=LazyVim nvim'
-alias nnc='NVIM_APPNAME=NvChad nvim'
-alias snv='sudo nvim'
-alias vll='lastnvim -l'
-alias vln='$EDITOR -c '\''execute "edit " . v:oldfiles[0] | normal ''0'\'
-
-# ports
-alias openports="netstat -nape --inet"
-
-# ps
-ialias ps='ps auxf'
-alias psj='ps aux | grep "[j]ava"'
-balias psg='ps auxf | grep'
-alias topcpu='/bin/ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10'
-
-# python
-alias py='python3'
-
-# realpath
-alias rp='realpath'
-
-# remove
-ialias rm='rm -vI'
-
-# rsync
-alias rsc='rsync -vrazPlu'
-alias rscd='rsync -vrazPlu --delete'
-alias rscr='rsync -vrazPlu --remove-source-files'
-
-# rules
-alias rrr='sudo udevadm control --reload-rules'
-
-# scp
-ialias scp='scp -r'
-
-# sha1
-alias sha1='openssl sha1'
-
-# shell
-alias tobash="sudo chsh $USER -s /bin/bash && 'Now log out.'"
-alias tozsh="sudo chsh $USER -s /bin/zsh && 'Now log out.'"
-alias tofish="sudo chsh $USER -s /bin/fish && 'Now log out.'"
-
-# shellcheck
-alias shck='shellcheck --color=always'
-
-# shortcut
-alias ref='shortcuts >/dev/null; source ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutrc; source ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutenvrc; source ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/zshnameddirrc'
-
-# sudo
-alias su='sudo su -l root'
-alias sm='setopt no_nomatch && rm -rf *.rej *.orig >/dev/null 2>&1'
-alias smi='setopt no_nomatch && rm -rf *.rej *.orig >/dev/null 2>&1 && unsetopt no_nomatch; sudo make clean install; rm -f config.h'
-
-# suffix
-alias -s {pdf,PDF}='background mupdf'
-alias -s {jpg,JPG,png,PNG}='background gpicview'
-alias -s {ods,ODS,odt,ODT,odp,ODP,doc,DOC,docx,DOCX,xls,XLS,xlsx,XLSX,xlsm,XLSM,ppt,PPT,pptx,PPTX,csv,CSV}='background libreoffice'
-alias -s {html,HTML}='background chromium'
-alias -s {mp4,MP4,mov,MOV,mkv,MKV}='background vlc'
-alias -s {zip,ZIP,war,WAR}="unzip -l"
-alias -s {jar,JAR}="java -jar"
-alias -s gz="tar -tf"
-alias -s {tgz,TGZ}="tar -tf"
-
-# tar
-alias txf='tar -xf'
-alias ttf='tar -tf'
-alias mktar="tar -cvf"
-alias mkbz2="tar -cvjf"
-alias mkgz="tar -cvzf"
-alias untar="tar -xvf"
-alias unbz2="tar -xvjf"
-alias ungz="tar -xvzf"
-
-# tmux
-alias sts='tmux source $XDG_CONFIG_HOME/tmux/tmux.conf'
-alias ta='tmux a'
-alias tmc='tmuxcreate'
-alias tmka='tmux kill-session -a'
-alias tmls='tmux ls'
-alias tmo='tmuxopen'
-alias tmpk='command pkill tmux'
-alias tm.='tmux new -s "$(basename $PWD)"'
-
-# tor
-alias torh="cat /var/lib/tor/hidden_service/hostname"
-
-# trash
-alias trd='trash-rm'
-alias tre='trash-empty'
-alias trl='trash-list'
-alias trp='trash-put'
-alias trr='trash-restore'
-
-# tree
-ialias tree='tree -a -I ".svn|.git|.hg|.idea"'
-alias tree2='tree -L 2'
-alias tree3='tree -L 3'
-
-# unix
-alias -g md='mkdir -p'
-alias -g wh='which'
-alias -g wt='while true; do'
-alias -g s1='sleep 1'
-alias -g s2='sleep 2'
-alias -g s01='sleep 0.1'
-alias -g s05='sleep 0.5'
-alias -g A1="| awk '{print \$1}'"
-alias -g L='| less'
-alias -g H='| head'
-alias -g H2='| head -n 20'
-alias -g X='| xargs -I@'
-alias -g C='| xclip -selection clipboard'
-alias -g Fj='| jq .'
-alias -g Fy='| yq .'
-alias -g Fx='| xmllint --format -'
-alias -g V='| nvim -'
-
-# unzip
-alias uz='unzip'
-alias uzl='unzip -l'
-
-# vim
-alias vi='vim'
-alias vi.='vim .'
-
-# watch
-alias w1='watch -n 1'
-
-# wget
-ialias wget --hsts-file="${XDG_CACHE_HOME:-${HOME}/.cache}/wget-hsts"
-
-# xprog
-alias progn='xprop | awk '\''/^WM_CLASS/{sub(/.* = /, "instance:"); sub(/, /, "\nclass:"); print} /^WM_NAME/{sub(/.* = /, "title:"); print}'\'''
-
-# zsh
-alias sps="source ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/profile"
-alias szs="source ${XDG_CONFIG_HOME:-${HOME}/.config}/zsh/.zshrc"
+if [ -n "$BASH_VERSION" ]; then
+ # ------------------------------
+ # BASH-compatible aliases & functions
+ # ------------------------------
+
+ # helper: safe alias creation
+ _a() { alias "$1"="$2"; }
+
+ # sudo not required for some system commands
+ for command in blkid lsblk mount umount dnf poweroff reboot shutdown su updatedb; do
+ alias "$command"="sudo $command"
+ done
+
+ # systemd checks (keep as in original)
+ case "$(readlink -f /sbin/init)" in
+ *systemd*)
+ # journal-like commands as functions (replaces zsh global aliases)
+ jctl() { journalctl -xe "$@"; }
+ jctlou() { sudo journalctl -b -n 200 -f "$@"; }
+ rpi() { systemctl --user restart wireplumber pipewire pipewire-pulse pipewire-jack "$@"; }
+
+ # systemctl helpers
+ sctl() { systemctl "$@"; } # general wrapper
+ sctlss() { systemctl status "$@"; }
+ sctle() { systemctl enable "$@"; }
+ sctld() { systemctl disable "$@"; }
+ sctlr() { systemctl restart "$@"; }
+ sctls() { systemctl start "$@"; }
+ sctlt() { systemctl stop "$@"; }
+ sctldr() { systemctl daemon-reload "$@"; }
+
+ tctl() { timedatectl "$@"; }
+ ;;
+ esac
+
+ # navigation
+ alias ...='../..'
+ alias ....='../../..'
+ alias .....='../../../..'
+
+ # bash profile helpers
+ alias sbp="source ~/.config/bash/bash_profile"
+ alias sbs="source ~/.config/bash/bashrc"
+
+ # cd helpers
+ cf() { cd "$(dirname "$(readlink -f health.lua)")" || return; }
+ alias pd='cd -'
+
+ # chmod helpers (keep behavior)
+ alias che='find . -type f -exec chmod +x {} \;'
+ # chfd: set directories 755, files 644 (safe implementation)
+ chfd() { find . -type d -exec chmod 755 {} \; -o -type f -exec chmod 644 {} \;; }
+ alias cx='chmod a+x'
+ alias 000='chmod -R 000'
+ alias 600='chmod -R 600'
+ alias 644='chmod -R 644'
+ alias 666='chmod -R 666'
+ alias 755='chmod -R 755'
+ alias 777='chmod -R 777'
+
+ # copy / clipboard
+ # last command copy (approx): copy last history entry to clipboard
+ CC() { eval "$(fc -ln -1)" | xclip -selection clipboard; }
+ alias cp='cp -iv'
+ alias pwdc='pwd | xclip -selection clipboard'
+
+ # count files/links/dirs
+ alias countfiles='for t in files links directories; do echo "$(find . -type ${t:0:1} | wc -l) $t"; done 2>/dev/null'
+
+ # cpu usage
+ cpu() { awk '/^cpu /{usage=($2+$4)*100/($2+$4+$5)} END{printf "%.1f\n",usage}' /proc/stat; }
+
+ # curl
+ alias curl='curl --silent --show-error'
+ alias clh='curl localhost:'
+ alias clh8='curl localhost:8080'
+ alias clh9='curl localhost:9080'
+ alias c100='curl 192.168.99.100:'
+
+ # date
+ alias da="date '+%Y-%m-%d %A %T %Z'"
+
+ # delete helpers
+ alias _fd='find . -type f -name "._*" -print0 | xargs -0 rm -f'
+ alias _fp='find . -type f -name "._*" -print'
+
+ # diff
+ alias diff='diff --color'
+
+ # disk
+ alias diskspace="du -S | sort -n -r | more"
+ alias folders="du -h --max-depth=1"
+ alias folderssort="find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn"
+ alias tree="tree -CAhF --dirsfirst"
+ alias treed="tree -CAFd"
+ alias mountedinfo="df -hT"
+
+ # docker
+ alias dk='docker'
+ alias dkp='docker ps'
+ alias dkpa='docker ps -a'
+ alias dkpaq='docker ps -a -q'
+ alias dkb='docker build -t'
+ alias dkbnc='docker build --no-cache -t'
+ alias dkr='docker run --rm'
+ alias dkrti='docker run --rm -ti'
+ alias dkrd='docker run -d'
+ alias dkrp8='docker run --rm -p 8080:8080'
+ alias dkrp9='docker run --rm -p 9080:9080'
+ alias dks='docker start'
+ alias dkt='docker stop'
+ alias dktt='docker stop $(docker ps -q)'
+ alias dkk='docker kill'
+ alias dkkk='docker kill $(docker ps -q)'
+ alias dkrm='docker rm'
+ alias dkri='docker rmi'
+ alias dke='docker exec -ti'
+ alias dkl='docker logs -f'
+ alias dki='docker images'
+ alias dkpu='docker pull'
+ alias dkph='docker push'
+ alias dkin='docker inspect'
+ alias dkn='docker network'
+ alias dkc='docker-compose'
+ alias dkcu='docker-compose up'
+ alias dkclean='docker ps -q -a -f status=exited | xargs -r docker rm && docker images -q -f dangling=true | xargs -r docker rmi'
+
+ # find
+ alias fdn='find . -name "'
+ f() { find . | grep "$*"; }
+
+ # grep: replace zsh global and colored exclude
+ alias grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'
+ alias grepi='grep -i'
+ alias grepr='grep -r'
+ alias grepri='grep -ri'
+ alias grepw='grep -R -i --include="*"'
+ alias grepb='grep -R -i --include="*" --exclude-dir="zsh"'
+ # global-like helpers implemented as functions that read stdin:
+ Gg() { grep "$@"; } # usage: somecommand | Gg pattern
+ Gi() { grep -i "$@"; }
+ GH() { grep -i "HTTP" "$@"; }
+
+ # hash
+ alias h='hash -r'
+
+ # hexdump
+ alias hx='hexdump -C'
+
+ # history
+ Hgrep() { history | grep "$*"; } # note: alias h was used earlier; avoid conflict
+
+ # ip
+ alias ip='ip -color=auto'
+ alias whatsmyip='curl -s ifconfig.me | xargs'
+ ipview() { netstat -anpl | grep :80 | awk '{print $5}' | cut -d':' -f1 | sort | uniq -c | sort -n | sed -e 's/^ *//' -e 's/ *$//'; }
+
+ # killall
+ alias ka='killall'
+ alias k9='kill -9'
+ alias k15='kill -15'
+
+ # logs
+ logs() { sudo find /var/log -type f -exec file {} \; | grep 'text' | cut -d' ' -f1 | sed -e 's/:$//g' | grep -v '[0-9]$' | xargs tail -f; }
+
+ # ls: use eza if available else fallback to ls
+ if command -v eza >/dev/null 2>&1; then
+ alias l='eza --icons --group-directories-first'
+ alias la='eza --icons -aa --group-directories-first'
+ alias lh='eza --icons -aa --group-directories-first'
+ alias ll='eza -gl --icons --group-directories-first'
+ alias lla='eza -glaa --icons --group-directories-first'
+ alias lm='eza -glA --group-directories-first | more'
+ alias lr='eza --icons -R --group-directories-first'
+ alias ls='eza --icons -A --group-directories-first'
+ else
+ alias l='/usr/bin/ls -h --color=always --group-directories-first'
+ alias la='/usr/bin/ls -alh --color=always --group-directories-first'
+ alias ll='/usr/bin/ls -lh --color=always --group-directories-first'
+ alias lla='/usr/bin/ls -aFls --color=always --group-directories-first'
+ alias llf='/usr/bin/ls -Fls --color=always --group-directories-first'
+ alias lm='/usr/bin/ls -alh --color=always --group-directories-first | more'
+ alias lr='/usr/bin/ls -hlR --color=always --group-directories-first'
+ alias ls='/usr/bin/ls -AFh --color=always --group-directories-first'
+ fi
+
+ # mime
+ alias mimereset='update-desktop-database ${XDG_DATA_HOME:-${HOME}/.local/share}/applications'
+
+ # mkdir
+ alias mkdir='mkdir -pv'
+ function mkdir() { command mkdir -pv "$@"; }
+
+ # modified commands (keep cautious variants)
+ alias grep="/usr/bin/grep $GREP_OPTIONS"
+ alias freshclam="sudo freshclam"
+ alias less="less -R"
+ alias multitail="multitail --no-repeat -c"
+ alias mv="mv -i"
+ alias ping="ping -c 10"
+ alias ps="ps auxf"
+ alias rm="rm -iv"
+
+ # move
+ alias mv='mv -iv'
+
+ # nginx
+ alias ngx="cd /etc/nginx"
+
+ # vim helpers
+ alias v="$EDITOR"
+ alias 'v.'="$EDITOR ."
+ alias ve="$EDITOR -c enew"
+ vis() { $EDITOR '+set si' "$@"; }
+ vll() { lastfiles -l "$@"; }
+ vln() { $EDITOR -c "execute 'edit ' . v:oldfiles[0] | normal '0'" "$@"; }
+
+ # ports
+ alias openports="netstat -nape --inet"
+
+ # ps
+ alias ps='ps auxf'
+ alias psj='ps aux | grep "[j]ava"'
+ psg() { ps auxf | grep "$*"; }
+ alias topcpu='/bin/ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10'
+
+ # python
+ alias py='python3'
+
+ # realpath
+ alias rp='realpath'
+
+ # remove
+ alias rm='rm -vI'
+
+ # rsync
+ alias rsc='rsync -vrazPlu'
+ alias rscd='rsync -vrazPlu --delete'
+ alias rscr='rsync -vrazPlu --remove-source-files'
+
+ # rules
+ alias rrr='sudo udevadm control --reload-rules'
+
+ # scp
+ alias scp='scp -r'
+
+ # sha1
+ alias sha1='openssl sha1'
+
+ # shell switching helpers (need sudo)
+ alias tobash="sudo chsh $USER -s /bin/bash && echo 'Now log out.'"
+ alias tozsh="sudo chsh $USER -s /bin/zsh && echo 'Now log out.'"
+ alias tofish="sudo chsh $USER -s /bin/fish && echo 'Now log out.'"
+
+ # shellcheck
+ alias shck='shellcheck --color=always'
+
+ # ref/shortcut loader (keep as in original)
+ ref() { bmshortcuts >/dev/null; source ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutrc; source ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutenvrc; source ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/zshnameddirrc; }
+
+ # sudo helpers
+ alias su='sudo su -l root'
+ sm() { rm -rf -- *.rej *.orig >/dev/null 2>&1 || true; }
+ smi() { rm -rf -- *.rej *.orig >/dev/null 2>&1; sudo make clean install; rm -f config.h; }
+
+ # -------- suffix alias replacement: provide 'open' function ----------
+ # zsh's "alias -s ext='cmd'" doesn't exist in bash.
+ # Use `open` (or 'of') to open files by extension:
+ openf() {
+ for f in "$@"; do
+ case "${f##*.}" in
+ pdf|PDF) mupdf "$f" & ;;
+ jpg|JPG|png|PNG) gpicview "$f" & ;;
+ ods|ODS|odt|ODT|odp|ODP|doc|DOC|docx|DOCX|xls|XLS|xlsx|XLSX|xlsm|XLSM|ppt|PPT|pptx|PPTX|csv|CSV)
+ libreoffice "$f" & ;;
+ html|HTML) chromium "$f" & ;;
+ mp4|MP4|mov|MOV|mkv|MKV) vlc "$f" & ;;
+ zip|ZIP|war|WAR) unzip -l "$f" ;;
+ jar|JAR) java -jar "$f" ;;
+ gz) tar -tf "$f" ;;
+ tgz|TGZ) tar -tf "$f" ;;
+ *) ${EDITOR:-vi} "$f" ;;
+ esac
+ done
+ }
+ alias of='openf'
+ alias open='openf'
+
+ # tarring helpers
+ alias txf='tar -xf'
+ alias ttf='tar -tf'
+ alias mktar="tar -cvf"
+ alias mkbz2="tar -cvjf"
+ alias mkgz="tar -cvzf"
+ alias untar="tar -xvf"
+ alias unbz2="tar -xvjf"
+ alias ungz="tar -xvzf"
+
+ # tmux
+ alias sts='tmux source $XDG_CONFIG_HOME/tmux/tmux.conf'
+ alias ta='tmux a'
+ alias tmc='tmuxcreate'
+ alias tmka='tmux kill-session -a'
+ alias tmls='tmux ls'
+ alias tmo='tmuxopen'
+ alias tmpk='command pkill tmux'
+ tm_new() { tmux new -s "$(basename "$PWD")"; }
+ alias tm.='tm_new'
+
+ # trash
+ alias trd='trash-rm'
+ alias tre='trash-empty'
+ alias trl='trash-list'
+ alias trp='trash-put'
+ alias trr='trash-restore'
+
+ # tree
+ alias tree='tree -a -I ".svn|.git|.hg|.idea"'
+ alias tree2='tree -L 2'
+ alias tree3='tree -L 3'
+
+ # small unix helpers (converted global aliases -> functions)
+ md() { mkdir -p "$@"; }
+ wh() { which "$@"; }
+ wt() { while true; do "$@"; done } # usage differs from zsh's global alias
+ s1() { sleep 1; }
+ s2() { sleep 2; }
+ s01() { sleep 0.1; }
+ s05() { sleep 0.5; }
+ A1() { awk '{print $1}' "$@"; }
+ L() { less "$@"; }
+ H() { head "$@"; }
+ H2() { head -n 20 "$@"; }
+ X() { xargs -I@ "$@"; } # limited replacement
+ C() { xclip -selection clipboard "$@"; }
+ Fj() { jq . "$@"; }
+ Fy() { yq . "$@"; }
+ Fx() { xmllint --format "$@"; }
+ V() { vim - "$@"; }
+
+ # unzip
+ alias uz='unzip'
+ alias uzl='unzip -l'
+
+ # vim
+ alias vi='vim'
+ alias 'vi.'='vim .'
+
+ # watch
+ alias w1='watch -n 1'
+
+ # wget
+ # keep hsts path variable
+ alias wget="wget --hsts-file='${XDG_CACHE_HOME:-${HOME}/.cache}/wget-hsts'"
+
+ # xprop helper
+ progn() { xprop | awk '/^WM_CLASS/{sub(/.* = /, "instance:"); sub(/, /, "\nclass:"); print} /^WM_NAME/{sub(/.* = /, "title:"); print}'; }
+
+ # zsh sourcing helpers (just source config)
+ sps() { source ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/profile; }
+ szs() { source ${XDG_CONFIG_HOME:-${HOME}/.config}/zsh/.zshrc; }
+else
+ # ------------------------------
+ # ZSH-compatible aliases & functions
+ # ------------------------------
+ # sudo not required for some system commands
+ for command in blkid lsblk mount umount dnf poweroff reboot shutdown su updatedb; do
+ alias $command="sudo $command"
+ done
+ unset command
+
+ case "$(readlink -f /sbin/init)" in
+ *systemd*)
+ # journal
+ alias -g jctl='journalctl -xe'
+ alias -g jctlou='sudo journalctl -b -n 200 -f'
+ alias -g rpi='systemctl --user restart wireplumber pipewire pipewire-pulse pipewire-jack'
+ alias -g sctl='systemctl'
+ alias -g sctlss='systemctl status'
+ alias -g sctle='systemctl enable'
+ alias -g sctld='systemctl disable'
+ alias -g sctlr='systemctl restart'
+ alias -g sctls='systemctl start'
+ alias -g sctlt='systemctl stop'
+ alias -g sctldr='systemctl daemon-reload'
+ alias -g tctl='timedatectl'
+ ;;
+ esac
+
+ # Go back
+ alias ...='../..'
+ alias ....='../../..'
+ alias .....='../../../..'
+
+ # bash
+ alias sbp="source ~/.config/bash/bash_profile"
+ alias sbs="source ~/.config/bash/bashrc"
+
+ # cd
+ alias cf='cd "$(dirname "$(readlink -f health.lua)")"'
+ alias pd='cd -'
+
+ # chmod
+ alias che='find . -type f -exec chmod +x {};'
+ alias chfd='find . -type d -exec chmod 755 {}; -o -type f -exec chmod 644 {};'
+ alias cx='chmod a+x'
+ alias 000='chmod -R 000'
+ alias 600='chmod -R 600'
+ alias 644='chmod -R 644'
+ alias 666='chmod -R 666'
+ alias 755='chmod -R 755'
+ alias 777='chmod -R 777'
+
+ # copy
+ alias CC='$(fc -l -n -1) | xclip -selection clipboard'
+ ialias cp='cp -iv'
+ alias pwdc='pwd | xclip -selection clipboard'
+
+ # count
+ alias countfiles="for t in files links directories; do echo \`find . -type \${t:0:1} | wc -l\` \$t; done 2> /dev/null"
+
+ # cpu
+ alias cpu="grep 'cpu ' /proc/stat | awk '{usage=(\$2+\$4)*100/(\$2+\$4+\$5)} END {print usage}' | awk '{printf(\"%.1f\n\", \$1)}'"
+
+ # curl
+ ialias curl='curl --silent --show-error'
+ balias clh='curl localhost:'
+ balias clh8='curl localhost:8080'
+ balias clh9='curl localhost:9080'
+ balias c100='curl 192.168.99.100:'
+
+ # date
+ alias da="date '+%Y-%m-%d %A %T %Z'"
+
+ # delete
+ alias _fd='find . -type f -name "._*" -print0 | xargs -0 rm -f'
+ alias _fp='find . -type f -name "._*" -print'
+
+ # diff
+ ialias diff='diff --color'
+
+ # disk
+ alias diskspace="du -S | sort -n -r |more"
+ alias folders="du -h --max-depth=1"
+ alias folderssort="find . -maxdepth 1 -type d -print0 | xargs -0 du -sk | sort -rn"
+ alias tree="tree -CAhF --dirsfirst"
+ alias treed="tree -CAFd"
+ alias mountedinfo="df -hT"
+
+ # docker
+ alias dk='docker'
+ alias dkp='docker ps'
+ alias dkpa='docker ps -a'
+ alias dkpaq='docker ps -a -q'
+ alias dkb='docker build -t'
+ alias dkbnc='docker build --no-cache -t'
+ alias dkr='docker run --rm'
+ alias dkrti='docker run --rm -ti'
+ alias dkrd='docker run -d'
+ alias dkrp8='docker run --rm -p 8080:8080'
+ alias dkrp9='docker run --rm -p 9080:9080'
+ alias dks='docker start'
+ alias dkt='docker stop'
+ alias dktt='docker stop $(docker ps -q)'
+ alias dkk='docker kill'
+ alias dkkk='docker kill $(docker ps -q)'
+ alias dkrm='docker rm'
+ alias dkri='docker rmi'
+ alias dke='docker exec -ti'
+ alias dkl='docker logs -f'
+ alias dki='docker images'
+ alias dkpu='docker pull'
+ alias dkph='docker push'
+ alias dkin='docker inspect'
+ alias dkn='docker network'
+ alias dkc='docker-compose'
+ alias dkcu='docker-compose up'
+ alias dkclean='docker ps -q -a -f status=exited | xargs -r docker rm && docker images -q -f dangling=true | xargs -r docker rmi'
+
+ # find
+ balias fdn='find . -name "'
+ alias f="find . | grep "
+
+ # grep
+ ialias -g grep='grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}'
+ alias grepi='grep -i'
+ alias grepr='grep -r'
+ alias grepri='grep -ri'
+ alias grepw='grep -R -i --include="*"'
+ alias grepb='grep -R -i --include="*" --exclude-dir="zsh"'
+ alias -g Gg='| grep'
+ alias -g Gi='| grep -i'
+ alias -g GH='| grep HTTP'
+
+ # hash
+ alias h='hash -rf'
+
+ # hexdump
+ alias hx='hexdump -C'
+
+ # history
+ alias h="history | grep "
+
+ # ip
+ ialias ip='ip -color=auto'
+ alias whatsmyip='curl -s ifconfig.me | xargs'
+ alias ipview="netstat -anpl | grep :80 | awk '{print $5}' | cut -d':' -f1 | sort | uniq -c | sort -n | sed -e 's/^ *//' -e 's/ *$//'"
+
+ # killall
+ alias ka='killall'
+ alias k9='kill -9'
+ alias k15='kill -15'
+
+ # logs
+ alias logs="sudo find /var/log -type f -exec file {} \; | grep 'text' | cut -d' ' -f1 | sed -e's/:$//g' | grep -v '[0-9]$' | xargs tail -f"
+
+ # ls: eza or built-in
+ [ -x "$(command -v eza)" ] && {
+ ialias l='eza --icons --group-directories-first'
+ ialias la='eza --icons -aa --group-directories-first'
+ ialias lh='eza --icons -aa --group-directories-first'
+ ialias ll='eza -gl --icons --group-directories-first'
+ ialias lla='eza -glaa --icons --group-directories-first'
+ ialias lm='eza -glA --group-directories-first | more'
+ ialias lr='eza --icons -R --group-directories-first'
+ ialias ls='eza --icons -A --group-directories-first'
+ ialias lsb='eza --icons -b --group-directories-first'
+ ialias lsby='eza --icons -B --group-directories-first'
+ ialias lld='eza --icons -Dl --group-directories-first'
+ ialias llda='eza --icons -aaDl --group-directories-first'
+ ialias llf='eza --icons -fl'
+ ialias llfa='eza --icons -aafl'
+ ialias llsa='eza --icons -l -s=accessed'
+ ialias llsaa='eza --icons -aal -s=accessed'
+ ialias llsc='eza --icons -l -s=created'
+ ialias llsca='eza --icons -aal -s=created'
+ ialias llse='eza --icons -l -s=extension'
+ ialias llsea='eza --icons -aal -s=extension'
+ ialias llsm='eza --icons -l -s=modified'
+ ialias llsma='eza --icons -aal -s=modified'
+ ialias llsn='eza --icons -l -s=name'
+ ialias llsna='eza --icons -aal -s=name'
+ ialias llss='eza --icons -l -s=size'
+ ialias llssa='eza --icons -aal -s=size'
+ ialias llst='eza --icons -l -s=type'
+ ialias llsta='eza --icons -aal -s=type'
+ ialias lt='eza --icons -T -L'
+ ialias ltd='eza --icons -TD -L'
+ ialias ltdr='eza --icons -TDr -L'
+ ialias ltr='eza --icons -Tr -L'
+ } || {
+ ialias l='/usr/bin/ls -h --color=always --group-directories-first'
+ ialias la='/usr/bin/ls -alh --color=always --group-directories-first'
+ ialias ll='/usr/bin/ls -lh --color=always --group-directories-first'
+ ialias lla='/usr/bin/ls -aFls --color=always --group-directories-first'
+ ialias llf='/usr/bin/ls -Fls --color=always --group-directories-first'
+ ialias lm='/usr/bin/ls -alh --color=always --group-directories-first | more'
+ ialias lr='/usr/bin/ls -hlR --color=always --group-directories-first'
+ ialias lra='/usr/bin/ls -ahlR --color=always --group-directories-first'
+ ialias ls='/usr/bin/ls -AFh --color=always --group-directories-first'
+ ialias llsa='/usr/bin/ls -hlru --color=always --group-directories-first'
+ ialias llsc='/usr/bin/ls -hclr --color=always --group-directories-first'
+ ialias lld='/usr/bin/ls -l --color=always | grep "^d"'
+ ialias llda='/usr/bin/ls -la --color=always | grep "^d"'
+ ialias llse='/usr/bin/ls -BhlX --color=always --group-directories-first'
+ ialias llsf='/usr/bin/ls -l --color=always | grep -v "^d"'
+ ialias llsfa='/usr/bin/ls -la --color=always | grep -v "^d"'
+ ialias llsm='/usr/bin/ls -hlr --time=ctime --color=always --group-directories-first'
+ ialias llsn='/usr/bin/ls -alp --color=always --group-directories-first'
+ ialias llss='/usr/bin/ls -hlrS --color=always --group-directories-first'
+ ialias llst='/usr/bin/ls -hlrt --color=always --group-directories-first'
+ ialias lw='/usr/bin/ls -Ahx --color=always --group-directories-first'
+ }
+
+ # mime
+ alias mimereset="update-desktop-database ${XDG_DATA_HOME:-${HOME}/.local/share}/applications"
+
+ # mkdir
+ ialias mkdir='mkdir -pv'
+
+ # modified commands
+ alias grep="/usr/bin/grep $GREP_OPTIONS"
+ alias cp="cp -i"
+ alias freshclam="sudo freshclam"
+ alias less="less -R"
+ alias mkdir="mkdir -p"
+ alias multitail="multitail --no-repeat -c"
+ alias mv="mv -i"
+ alias ping="ping -c 10"
+ alias ps="ps auxf"
+ alias rm="rm -iv"
+
+ # move
+ ialias mv='mv -iv'
+
+ # nginx
+ alias ngx="cd /etc/nginx"
+
+ # vim
+ alias v='$EDITOR'
+ alias v.='$EDITOR .'
+ alias ve='$EDITOR -c enew'
+ alias vis="$EDITOR '+set si'"
+ alias vll='lastfiles -l'
+ alias vln='$EDITOR -c '\''execute "edit " . v:oldfiles[0] | normal ''0'\'
+
+ # ports
+ alias openports="netstat -nape --inet"
+
+ # ps
+ ialias ps='ps auxf'
+ alias psj='ps aux | grep "[j]ava"'
+ balias psg='ps auxf | grep'
+ alias topcpu='/bin/ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10'
+
+ # python
+ alias py='python3'
+
+ # realpath
+ alias rp='realpath'
+
+ # remove
+ ialias rm='rm -vI'
+
+ # rsync
+ alias rsc='rsync -vrazPlu'
+ alias rscd='rsync -vrazPlu --delete'
+ alias rscr='rsync -vrazPlu --remove-source-files'
+
+ # rules
+ alias rrr='sudo udevadm control --reload-rules'
+
+ # scp
+ ialias scp='scp -r'
+
+ # sha1
+ alias sha1='openssl sha1'
+
+ # shell
+ alias tobash="sudo chsh $USER -s /bin/bash && 'Now log out.'"
+ alias tozsh="sudo chsh $USER -s /bin/zsh && 'Now log out.'"
+ alias tofish="sudo chsh $USER -s /bin/fish && 'Now log out.'"
+
+ # shellcheck
+ alias shck='shellcheck --color=always'
+
+ # shortcut
+ alias ref='bmshortcuts >/dev/null; source ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutrc; source ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutenvrc; source ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/zshnameddirrc'
+
+ # sudo
+ alias su='sudo su -l root'
+ alias sm='setopt no_nomatch && rm -rf *.rej *.orig >/dev/null 2>&1'
+ alias smi='setopt no_nomatch && rm -rf *.rej *.orig >/dev/null 2>&1 && unsetopt no_nomatch; sudo make clean install; rm -f config.h'
+
+ # suffix
+ alias -s {pdf,PDF}='background mupdf'
+ alias -s {jpg,JPG,png,PNG}='background gpicview'
+ alias -s {ods,ODS,odt,ODT,odp,ODP,doc,DOC,docx,DOCX,xls,XLS,xlsx,XLSX,xlsm,XLSM,ppt,PPT,pptx,PPTX,csv,CSV}='background libreoffice'
+ alias -s {html,HTML}='background chromium'
+ alias -s {mp4,MP4,mov,MOV,mkv,MKV}='background vlc'
+ alias -s {zip,ZIP,war,WAR}="unzip -l"
+ alias -s {jar,JAR}="java -jar"
+ alias -s gz="tar -tf"
+ alias -s {tgz,TGZ}="tar -tf"
+
+ # tar
+ alias txf='tar -xf'
+ alias ttf='tar -tf'
+ alias mktar="tar -cvf"
+ alias mkbz2="tar -cvjf"
+ alias mkgz="tar -cvzf"
+ alias untar="tar -xvf"
+ alias unbz2="tar -xvjf"
+ alias ungz="tar -xvzf"
+
+ # tmux
+ alias sts='tmux source $XDG_CONFIG_HOME/tmux/tmux.conf'
+ alias ta='tmux a'
+ alias tmc='tmuxcreate'
+ alias tmka='tmux kill-session -a'
+ alias tmls='tmux ls'
+ alias tmo='tmuxopen'
+ alias tmpk='command pkill tmux'
+ alias tm.='tmux new -s "$(basename $PWD)"'
+
+ # tor
+ alias torh="cat /var/lib/tor/hidden_service/hostname"
+
+ # trash
+ alias trd='trash-rm'
+ alias tre='trash-empty'
+ alias trl='trash-list'
+ alias trp='trash-put'
+ alias trr='trash-restore'
+
+ # tree
+ ialias tree='tree -a -I ".svn|.git|.hg|.idea"'
+ alias tree2='tree -L 2'
+ alias tree3='tree -L 3'
+
+ # unix
+ alias -g md='mkdir -p'
+ alias -g wh='which'
+ alias -g wt='while true; do'
+ alias -g s1='sleep 1'
+ alias -g s2='sleep 2'
+ alias -g s01='sleep 0.1'
+ alias -g s05='sleep 0.5'
+ alias -g A1="| awk '{print \$1}'"
+ alias -g L='| less'
+ alias -g H='| head'
+ alias -g H2='| head -n 20'
+ alias -g X='| xargs -I@'
+ alias -g C='| xclip -selection clipboard'
+ alias -g Fj='| jq .'
+ alias -g Fy='| yq .'
+ alias -g Fx='| xmllint --format -'
+ alias -g V='| vim -'
+
+ # unzip
+ alias uz='unzip'
+ alias uzl='unzip -l'
+
+ # vim
+ alias vi='vim'
+ alias vi.='vim .'
+
+ # watch
+ alias w1='watch -n 1'
+
+ # wget
+ ialias wget --hsts-file="${XDG_CACHE_HOME:-${HOME}/.cache}/wget-hsts"
+
+ # xprog
+ alias progn='xprop | awk '\''/^WM_CLASS/{sub(/.* = /, "instance:"); sub(/, /, "\nclass:"); print} /^WM_NAME/{sub(/.* = /, "title:"); print}'\'''
+
+ # zsh
+ alias sps="source ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/profile"
+ alias szs="source ${XDG_CONFIG_HOME:-${HOME}/.config}/zsh/.zshrc"
+fi
diff --git a/fedora/.config/shell/bm-dirs b/fedora/.config/shell/bm-dirs
index 2afa0b0..72558e9 100644
--- a/fedora/.config/shell/bm-dirs
+++ b/fedora/.config/shell/bm-dirs
@@ -6,7 +6,6 @@ cac ${XDG_CACHE_HOME:-${HOME}/.cache}
cbc ${XDG_CONFIG_HOME:-${HOME}/.config}/bash
cfg ${XDG_CONFIG_HOME:-${HOME}/.config}
cgc ${XDG_CONFIG_HOME:-${HOME}/.config}/git
-cnv ${XDG_CONFIG_HOME:-${HOME}/.config}/nvim
csh ${XDG_CONFIG_HOME:-${HOME}/.config}/shell
ctm ${XDG_CONFIG_HOME:-${HOME}/.config}/tmux
cts ${XDG_CONFIG_HOME:-${HOME}/.config}/TheSiahxyz
diff --git a/fedora/.config/shell/bm-files b/fedora/.config/shell/bm-files
index 0be00a6..a7ee21d 100644
--- a/fedora/.config/shell/bm-files
+++ b/fedora/.config/shell/bm-files
@@ -8,12 +8,12 @@ vga ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/git-aliasrc
vgc ${XDG_CONFIG_HOME:-${HOME}/.config}/git/config # Git config
vgi ${XDG_CONFIG_HOME:-${HOME}/.config}/git/ignore # Git ignore
Vsm /etc/samba/smb.conf # Samba config
+vsa ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/aliasrc # Aliases used by shell (and potentially other shells)
+vsp ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/profile # Shell profile used for system
vtm ${XDG_CONFIG_HOME:-${HOME}/.config}/tmux/tmux.conf # Tmux config
vvc ${XDG_CONFIG_HOME:-${HOME}/.config}/vim/vimrc # Vim config
vvi ${XDG_CONFIG_HOME:-${HOME}/.config}/vim/init.vim # Vim init
vvp ${XDG_CONFIG_HOME:-${HOME}/.config}/vim/plugins.vim # Vim plugins
-vza ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/aliasrc # Aliases used by zsh (and potentially other shells)
vzc ${ZDOTDIR:-${XDG_CONFIG_HOME:-${HOME}/.config}/zsh}/.zshrc # Zsh config
vzk ${ZDOTDIR:-${XDG_CONFIG_HOME:-${HOME}/.config}/zsh}/keymaps.zsh # Zsh keymaps
-vzp ${XDG_CONFIG_HOME:-${HOME}/.config}/shell/profile # Zsh profile used for system
vzs ${ZDOTDIR:-${XDG_CONFIG_HOME:-${HOME}/.config}/zsh}/scripts.zsh # Zsh scripts
diff --git a/fedora/.config/shell/git-aliasrc b/fedora/.config/shell/git-aliasrc
deleted file mode 100644
index f87a556..0000000
--- a/fedora/.config/shell/git-aliasrc
+++ /dev/null
@@ -1,415 +0,0 @@
-# Git version checking
-autoload -Uz is-at-least
-git_version="${${(As: :)$(git version 2>/dev/null)}[3]}"
-
-#
-# Functions Current
-# (sorted alphabetically by function name)
-# (order should follow README)
-#
-
-# The name of the current branch
-# Back-compatibility wrapper for when this function was defined here in
-# the plugin, before being pulled in to core lib/git.zsh as git_current_branch()
-# to fix the core -> git plugin dependency.
-current_branch() {
- git_current_branch
-}
-
-# Check for develop and similarly named branches
-git_develop_branch() {
- command git rev-parse --git-dir &>/dev/null || return
- local branch
- for branch in dev devel develop development; do
- if command git show-ref -q --verify refs/heads/$branch; then
- echo $branch
- return 0
- fi
- done
-
- echo develop
- return 1
-}
-
-# Check if main exists and use instead of master
-git_main_branch() {
- command git rev-parse --git-dir &>/dev/null || return
- local ref
- for ref in refs/{heads,remotes/{origin,upstream}}/{main,trunk,mainline,default,master}; do
- if command git show-ref -q --verify $ref; then
- echo ${ref:t}
- return 0
- fi
- done
-
- # If no main branch was found, fall back to master but return error
- echo master
- return 1
-}
-
-grename() {
- if [[ -z "$1" || -z "$2" ]]; then
- echo "Usage: $0 old_branch new_branch"
- return 1
- fi
-
- # Rename branch locally
- git branch -m "$1" "$2"
- # Rename branch in origin remote
- if git push origin :"$1"; then
- git push --set-upstream origin "$2"
- fi
-}
-
-#
-# Functions Work in Progress (WIP)
-# (sorted alphabetically by function name)
-# (order should follow README)
-#
-
-# Similar to `gunwip` but recursive "Unwips" all recent `--wip--` commits not just the last one
-gunwipall() {
- local _commit=$(git log --grep='--wip--' --invert-grep --max-count=1 --format=format:%H)
-
- # Check if a commit without "--wip--" was found and it's not the same as HEAD
- if [[ "$_commit" != "$(git rev-parse HEAD)" ]]; then
- git reset $_commit || return 1
- fi
-}
-
-# Warn if the current branch is a WIP
-work_in_progress() {
- command git -c log.showSignature=false log -n 1 2>/dev/null | grep -q -- "--wip--" && echo "WIP!!"
-}
-
-#
-# Aliases
-# (sorted alphabetically by command)
-# (order should follow README)
-# (in some cases force the alisas order to match README, like for example gke and gk)
-#
-
-alias grt='cd "$(git rev-parse --show-toplevel || echo .)"'
-
-ggpnp() {
- if [[ "$#" == 0 ]]; then
- ggl && ggp
- else
- ggl "${*}" && ggp "${*}"
- fi
-}
-compdef _git ggpnp=git-checkout
-
-alias ggpur='ggu'
-alias g='git'
-! pidof transmission-daemon >/dev/null && alias gaa='git add --all' || alias gaa='echo "Turn off transmission-daemon first!"'
-alias gapa='git add --patch'
-alias gau='git add --update'
-alias gav='git add --verbose'
-alias gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign --message "--wip-- [skip ci]"'
-alias gam='git am'
-alias gama='git am --abort'
-alias gamc='git am --continue'
-alias gamscp='git am --show-current-patch'
-alias gams='git am --skip'
-alias gap='git apply'
-alias gapt='git apply --3way'
-alias gbs='git bisect'
-alias gbsb='git bisect bad'
-alias gbsg='git bisect good'
-alias gbsn='git bisect new'
-alias gbso='git bisect old'
-alias gbsr='git bisect reset'
-alias gbss='git bisect start'
-alias gb='git branch'
-alias gba='git branch --all'
-alias gbD='git branch --delete --force'
-
-gbda() {
- git branch --no-color --merged | command grep -vE "^([+*]|\s*($(git_main_branch)|$(git_develop_branch))\s*$)" | command xargs git branch --delete 2>/dev/null
-}
-
-# Copied and modified from James Roeder (jmaroeder) under MIT License
-# https://github.com/jmaroeder/plugin-git/blob/216723ef4f9e8dde399661c39c80bdf73f4076c4/functions/gbda.fish
-gbds() {
- local default_branch=$(git_main_branch)
- (( ! $? )) || default_branch=$(git_develop_branch)
-
- git for-each-ref refs/heads/ "--format=%(refname:short)" | \
- while read branch; do
- local merge_base=$(git merge-base $default_branch $branch)
- if [[ $(git cherry $default_branch $(git commit-tree $(git rev-parse $branch\^{tree}) -p $merge_base -m _)) = -* ]]; then
- git branch -D $branch
- fi
- done
-}
-
-alias gbgd='LANG=C git branch --no-color -vv | grep ": gone\]" | awk '"'"'{print $1}'"'"' | xargs git branch -d'
-alias gbgD='LANG=C git branch --no-color -vv | grep ": gone\]" | awk '"'"'{print $1}'"'"' | xargs git branch -D'
-alias gbm='git branch --move'
-alias gbnm='git branch --no-merged'
-alias gbr='git branch --remote'
-alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
-alias gbg='LANG=C git branch -vv | grep ": gone\]"'
-alias gcor='git checkout --recurse-submodules'
-alias gcB='git checkout -B'
-alias gcd='git checkout $(git_develop_branch)'
-alias gcm='git checkout $(git_main_branch)'
-alias gcpa='git cherry-pick --abort'
-alias gcpc='git cherry-pick --continue'
-alias gcl='git clone --recurse-submodules'
-
-gccd() {
- setopt localoptions extendedglob
-
- # get repo URI from args based on valid formats: https://git-scm.com/docs/git-clone#URLS
- local repo='${${@[(r)(ssh://*|git://*|ftp(s)#://*|http(s)#://*|*@*)(.git/#)#]}:-$_}'
-
- # clone repository and exit if it fails
- command git clone --recurse-submodules "$@" || return
-
- # if last arg passed was a directory, that's where the repo was cloned
- # otherwise parse the repo URI and use the last part as the directory
- [[ -d "$_" ]] && cd '$_' || cd '${${repo:t}%.git/#}'
-}
-compdef _git gccd=git-clone
-
-alias gcam='git commit --all --message'
-alias gcas='git commit --all --signoff'
-alias gcasm='git commit --all --signoff --message'
-alias gcs='git commit --gpg-sign'
-alias gcss='git commit --gpg-sign --signoff'
-alias gcssm='git commit --gpg-sign --signoff --message'
-alias gcmsg='git commit --message'
-alias gcsm='git commit --signoff --message'
-alias gc='git commit --verbose'
-alias gca='git commit --verbose --all'
-alias gca!='git commit --verbose --all --amend'
-alias gcan!='git commit --verbose --all --no-edit --amend'
-alias gcans!='git commit --verbose --all --signoff --no-edit --amend'
-alias gc!='git commit --verbose --amend'
-alias gcn!='git commit --verbose --no-edit --amend'
-alias gdct='git describe --tags $(git rev-list --tags --max-count=1)'
-alias gdca='git diff --cached'
-alias gdcw='git diff --cached --word-diff'
-alias gds='git diff --staged'
-alias gdw='git diff --word-diff'
-
-gdv() { git diff -w "$@" | view - }
-compdef _git gdv=git-diff
-
-alias gdup='git diff @{upstream}'
-
-gdnolock() {
- git diff "$@" ":(exclude)package-lock.json" ":(exclude)*.lock"
-}
-compdef _git gdnolock=git-diff
-
-alias gdt='git diff-tree --no-commit-id --name-only -r'
-alias gf='git fetch'
-# --jobs=<n> was added in git 2.8
-is-at-least 2.8 "$git_version" \
- && alias gfa='git fetch --all --prune --jobs=10' \
- || alias gfa='git fetch --all --prune'
-alias gfo='git fetch origin'
-alias gg='git gui citool'
-alias gga='git gui citool --amend'
-alias ghh='git help'
-alias glgg='git log --graph'
-alias glggp='git log --graph --parents'
-alias glgga='git log --graph --decorate --all'
-alias glggpa='git log --graph --decorate --parents --all'
-alias glgm='git log --graph --max-count=10'
-alias glgpm='git log --graph --parents --max-count=10'
-alias gloac='git log --graph --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%ae>%Creset" --abbrev-commit --all'
-alias glods='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset" --date=short'
-alias glopds='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset" --parents --date=short'
-alias glod='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset"'
-alias glopd='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset" --parents'
-alias glola='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --all'
-alias glolpa='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --parents --all'
-alias glols='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --stat'
-alias glolps='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --parents --stat'
-alias glol='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset"'
-alias glolp='git log --graph --pretty="%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset" --parents'
-alias glog='git log --oneline --decorate --graph'
-alias glogp='git log --oneline --decorate --graph --parents'
-alias gloga='git log --oneline --decorate --graph --all'
-alias glogpa='git log --oneline --decorate --graph --parents --all'
-
-# Pretty log messages
-_git_log_prettily(){
- if ! [ -z $1 ]; then
- git log --pretty=$1
- fi
-}
-compdef _git _git_log_prettily=git-log
-
-alias glp='_git_log_prettily'
-alias glg='git log --stat'
-alias glgp='git log --stat --patch'
-alias gignored='git ls-files -v | grep "^[[:lower:]]"'
-alias gfg='git ls-files | grep'
-alias gm='git merge'
-alias gma='git merge --abort'
-alias gms="git merge --squash"
-alias gmom='git merge origin/$(git_main_branch)'
-alias gmum='git merge upstream/$(git_main_branch)'
-alias gmtl='git mergetool --no-prompt'
-alias gmtlvim='git mergetool --no-prompt --tool=vimdiff'
-
-alias gl='git pull'
-alias gprb='git pull --rebase'
-alias gprbv='git pull --rebase -v'
-alias gpra='git pull --rebase --autostash'
-alias gprav='git pull --rebase --autostash -v'
-
-ggu() {
- [[ "$#" != 1 ]] && local b="$(git_current_branch)"
- git pull --rebase origin "${b:=$1}"
-}
-compdef _git ggu=git-checkout
-
-alias gprom='git pull --rebase origin $(git_main_branch)'
-alias gpromi='git pull --rebase=interactive origin $(git_main_branch)'
-alias ggpull='git pull origin "$(git_current_branch)"'
-
-ggl() {
- if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
- git pull origin "${*}"
- else
- [[ "$#" == 0 ]] && local b="$(git_current_branch)"
- git pull origin "${b:=$1}"
- fi
-}
-compdef _git ggl=git-checkout
-
-alias gluc='git pull upstream $(git_current_branch)'
-alias glum='git pull upstream $(git_main_branch)'
-# alias gp='git push'
-alias gpd='git push --dry-run'
-
-ggf() {
- [[ "$#" != 1 ]] && local b="$(git_current_branch)"
- git push --force origin "${b:=$1}"
-}
-compdef _git ggf=git-checkout
-
-alias gpf!='git push --force'
-is-at-least 2.30 "$git_version" \
- && alias gpf='git push --force-with-lease --force-if-includes' \
- || alias gpf='git push --force-with-lease'
-
-ggfl() {
- [[ "$#" != 1 ]] && local b="$(git_current_branch)"
- git push --force-with-lease origin "${b:=$1}"
-}
-compdef _git ggfl=git-checkout
-
-alias gpsup='git push --set-upstream origin $(git_current_branch)'
-is-at-least 2.30 "$git_version" \
- && alias gpsupf='git push --set-upstream origin $(git_current_branch) --force-with-lease --force-if-includes' \
- || alias gpsupf='git push --set-upstream origin $(git_current_branch) --force-with-lease'
-alias gpvb='git push --verbose'
-alias gpoat='git push origin --all && git push origin --tags'
-alias gpod='git push origin --delete'
-alias ggpush='git push origin "$(git_current_branch)"'
-
-ggp() {
- if [[ "$#" != 0 ]] && [[ "$#" != 1 ]]; then
- git push origin "${*}"
- else
- [[ "$#" == 0 ]] && local b="$(git_current_branch)"
- git push origin "${b:=$1}"
- fi
-}
-compdef _git ggp=git-checkout
-
-alias gpu='git push upstream'
-alias grba='git rebase --abort'
-alias grbc='git rebase --continue'
-alias grbi='git rebase --interactive'
-alias grbo='git rebase --onto'
-alias grbs='git rebase --skip'
-alias grbd='git rebase $(git_develop_branch)'
-alias grbm='git rebase $(git_main_branch)'
-alias grbom='git rebase origin/$(git_main_branch)'
-alias gr='git remote'
-alias grv='git remote --verbose'
-alias gra='git remote add'
-alias grrm='git remote remove'
-alias grmv='git remote rename'
-alias grset='git remote set-url'
-alias grup='git remote update'
-alias gru='git reset --'
-alias grhh='git reset --hard'
-alias grhk='git reset --keep'
-alias grhs='git reset --soft'
-alias gpristine='git reset --hard && git clean --force -dfx'
-alias groh='git reset origin/$(git_current_branch) --hard'
-alias grs='git restore'
-alias grss='git restore --source'
-alias grst='git restore --staged'
-alias gunwip='git rev-list --max-count=1 --format="%s" HEAD | grep -q "\--wip--" && git reset HEAD~1'
-alias grev='git revert'
-alias grm='git rm'
-alias grmc='git rm --cached'
-alias gcount='git shortlog --summary --numbered'
-alias gsh='git show'
-alias gsps='git show --pretty=short --show-signature'
-alias gstall='git stash --all'
-alias gstaa='git stash apply'
-alias gstc='git stash clear'
-alias gstd='git stash drop'
-alias gstl='git stash list'
-alias gstp='git stash pop'
-# use the default stash push on git 2.13 and newer
-is-at-least 2.13 "$git_version" \
- && alias gsta='git stash push' \
- || alias gsta='git stash save'
-alias gsts='git stash show --patch'
-alias gst='git status'
-alias gsb='git status --short --branch'
-alias gsi='git submodule init'
-alias gsu='git submodule update'
-alias gsd='git svn dcommit'
-alias git-svn-dcommit-push='git svn dcommit && git push github $(git_main_branch):svntrunk'
-alias gsr='git svn rebase'
-alias gsw='git switch'
-alias gswc='git switch --create'
-alias gswd='git switch $(git_develop_branch)'
-alias gswm='git switch $(git_main_branch)'
-alias gtan='git tag --annotate'
-alias gtsn='git tag --sign'
-alias gtv='git tag | sort -V'
-alias gignore='git update-index --assume-unchanged'
-alias gunignore='git update-index --no-assume-unchanged'
-alias gwch='git whatchanged -p --abbrev-commit --pretty=medium'
-alias gwt='git worktree'
-alias gwta='git worktree add'
-alias gwtls='git worktree list'
-alias gwtmv='git worktree move'
-alias gwtrm='git worktree remove'
-alias gstu='gsta --include-untracked'
-alias gtl='gtl(){ git tag --sort=-v:refname -n --list "${1}*" }; noglob gtl'
-alias gk='\gitk --all --branches &!'
-alias gke='\gitk --all $(git log --walk-reflogs --pretty=%h) &!'
-
-unset git_version
-
-# Logic for adding warnings on deprecated aliases
-local old_alias new_alias
-for old_alias new_alias (
- # TODO(2023-10-19): remove deprecated `git pull --rebase` aliases
- gup gpr
- gupv gprv
- gupa gpra
- gupav gprav
- gupom gprom
- gupomi gpromi
-); do
- aliases[$old_alias]='
- print -Pu2 \"%F{yellow}[oh-my-zsh] '%F{red}${old_alias}%F{yellow}' is a deprecated alias, using '%F{green}${new_alias}%F{yellow}' instead.%f\"
- $new_alias'
-done
-unset old_alias new_alias
diff --git a/fedora/.config/shell/inputrc b/fedora/.config/shell/inputrc
deleted file mode 100644
index 81cdf85..0000000
--- a/fedora/.config/shell/inputrc
+++ /dev/null
@@ -1,31 +0,0 @@
-$include /etc/inputrc
-
-set completion-display-width 0
-set completion-query-items 1000
-
-# Prettyfi
-set colored-stats on
-set colored-completion-prefix on
-
-# ^C no longer shows on C-c keypress
-set echo-control-characters off
-
-# Map tab to cycle through all the possible completions.
-TAB: menu-complete
-
-# vi mode
-set editing-mode vi
-
-$if mode=vi
-set show-mode-in-prompt on
-set vi-ins-mode-string \1\e[6 q\2
-set vi-cmd-mode-string \1\e[2 q\2
-set keymap vi-command
-
-# these are for vi-command mode
-Control-l: clear-screen
-
-set keymap vi-insert
-# these are for vi-insert mode
-Control-l: clear-screen
-$endif
diff --git a/fedora/.config/shell/profile b/fedora/.config/shell/profile
index 677943a..a8603e8 100644
--- a/fedora/.config/shell/profile
+++ b/fedora/.config/shell/profile
@@ -7,22 +7,27 @@
### --- ENV PATH --- ###
###################################################
# Add all directories in each subdirectory to $PATH
-export PATH="$PATH:$(find ~/.local/bin -path '*/.git*' -prune -o \( -type f -o -type l \) -perm -u=x -exec dirname {} \; | sort -u | paste -sd ':' -)"
-export PATH="$PATH:$(find ~/.local/share/.password-store -type d -name '.extensions' | paste -sd ':' -)"
-command -v asdf >/dev/null 2>&1 && export PATH="$PATH:$(find -L ~/.local/share/asdf/installs -name bin -type d -print 2>/dev/null | sort -u | paste -s -d ':' -)"
-command -v npm >/dev/null 2>&1 && export PATH="$PATH:$(find -L ~/.local/share/npm -name bin -type d -print 2>/dev/null | sort -u | paste -s -d ':' -)"
+export PATH="$(find ~/.local/bin -path '*/.git*' -prune -o \( -type f -o -type l \) -perm -u=x -exec dirname {} \; | sort -u | paste -sd ':' -):$PATH"
+export PATH="$(find ~/.local/share/.password-store -type d -name '.extensions' | paste -sd ':' -):$PATH"
+command -v asdf >/dev/null 2>&1 && export PATH="$(find -L ~/.local/share/asdf/installs -name bin -type d -print 2>/dev/null | sort -u | paste -s -d ':' -):$PATH"
+command -v npm >/dev/null 2>&1 && export PATH="$(find -L ~/.local/share/npm -name bin -type d -print 2>/dev/null | sort -u | paste -s -d ':' -):$PATH"
unsetopt PROMPT_SP 2>/dev/null
###################################################
### --- DEFAULT PROGRAMS --- ###
###################################################
+export BROWSER=$(command -v librewolf || command -v firefox || command -v qutebrowser)
export EDITOR="nvim"
export EDITOR2="vim"
# export FILE_MANAGER="lf $(lf -version)"
+export FILE_MANAGER="yazi $(yazi --version)"
export KEYTIMEOUT=10
export SUDO_EDITOR=$EDITOR
+export SUDO_ASKPASS="$HOME/.local/bin/dmenupass"
export TERM="xterm-256color"
+export TERMINAL="st"
+export TERMINAL_PROG="st"
export VISUAL=$EDITOR
###################################################
@@ -68,6 +73,35 @@ export DICS="/usr/share/stardict/dic/"
### --- ELECTRUM --- ###
export ELECTRUMDIR="$XDG_DATA_HOME/electrum"
+### --- FCITX5 --- ###
+export GTK_IM_MODULE=fcitx
+export QT_IM_MODULE=fcitx
+export XMODIFIERS=@im=fcitx
+
+### --- FZF --- ###
+export FZF_ALT_C_COMMAND="fd --type d . --color=never --hidden"
+export FZF_ALT_C_OPTS="--preview 'tree -C {} | head -50'"
+export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
+export FZF_CTRL_T_OPTS="--preview 'bat --color=always --line-range :50 {}' --preview-window 'right:45%'"
+# export FZF_DEFAULT_OPTS="--no-height --color=bg+:#343d46,gutter:-1,pointer:#ff3c3c,info:#0dbc79,hl:#0dbc79,hl+:#23d18b"
+export FZF_DEFAULT_OPTS="--reverse --height 60% --color=bg+:#343d46,gutter:-1,pointer:#ff3c3c,info:#0dbc79,hl:#0dbc79,hl+:#23d18b"
+
+### --- FORGIT --- ###
+export FORGIT_CHECKOUT_BRANCH_BRANCH_GIT_OPTS='--sort=-committerdate'
+export FORGIT_COPY_CMD='xclip -selection clipboard'
+
+### --- GEM --- ###
+export GEMRC="$HOME/.config/gem/gemrc"
+export GEM_HOME="$XDG_DATA_HOME/gem"
+export GEM_PATH="$GEM_HOME"
+
+### --- GO --- ###
+export GOMODCACHE="$XDG_CACHE_HOME/go/mod"
+export GOPATH="$XDG_SCRIPTS_HOME/go"
+
+### --- GTK --- ###
+export GTK2_RC_FILES="$XDG_CONFIG_HOME/gtk-2.0/gtkrc-2.0":"$XDG_CONFIG_HOME/gtk-2.0/gtkrc-2.0.mine"
+
### --- HISTORY --- ###
export HISTFILE="$XDG_DATA_HOME/history/sh_history"
@@ -78,6 +112,18 @@ export INPUTRC="$XDG_CONFIG_HOME/shell/inputrc"
export AWT_TOOLKIT="MToolkit wmname LG3D" # May have to install wmname
export _JAVA_AWT_WM_NONREPARENTING=1 # Fix for Java applications in dwm
+### --- Jupyter --- ###
+export JUPYTER_CONFIG_DIR="$XDG_CONFIG_HOME/jupyter"
+export JUPYTER_PLATFORM_DIRS="1"
+
+### --- KODI --- ###
+export KODI_DATA="$XDG_DATA_HOME/kodi"
+
+### --- LYNX --- ###
+export LYNX_CFG="$HOME/.config/lynx/lynx.cfg"
+export LYNX_LSS="$HOME/.config/lynx/lynx.lss"
+export LYNX_CFG_PATH="$XDG_CONFIG_HOME/lynx"
+
### --- MANPAGER --- ###
([ -x "$(command -v batcat)" ] || [ -x "$(command -v batman)" ]) && {
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
@@ -95,12 +141,30 @@ export _JAVA_AWT_WM_NONREPARENTING=1 # Fix for Java applications in dwm
export LESSOPEN="| lesspipe.sh %s"
}
+### --- MBSYNC --- ###
+export MBSYNCRC="$XDG_CONFIG_HOME/mbsync/config"
+
+### --- MOZILLA --- ###
+export MOZ_USE_XINPUT2=1 # Mozilla smooth scrolling/touchpads.
+
+### --- MYSQL --- ###
+export MYSQL_HISTFILE="$XDG_DATA_HOME/history/mysql_history"
+
+### --- NODE.JS --- ###
+export NODE_REPL_HISTORY="$XDG_DATA_HOME/history/node_repl_history"
+
+### --- NOTMUCH --- ###
+export NOTMUCH_CONFIG="$XDG_CONFIG_HOME/notmuch/config"
+
### --- NPM --- ###
export NPM_CONFIG_USERCONFIG="~/.config/npm/.npmrc"
### --- NVM --- ###
export NVM_DIR="$XDG_CONFIG_HOME/nvm"
+### --- PAM GNUPG --- ###
+# export GNUPGHOME="$XDG_DATA_HOME/gnupg"
+
### --- PASSWORD STORE --- ###
export PASSWORD_STORE_DIR="$XDG_DATA_HOME/.password-store"
export PASSWORD_STORE_CLIP_TIME=180 # Specifies the number of seconds to wait before restoring the clipboard, by default 45 seconds.
@@ -111,22 +175,50 @@ export PASSWORD_STORE_ENABLE_EXTENSIONS="true"
# export PASSWORD_STORE_EXTENSIONS_DIR="$PASSWORD_STORE_DIR/.extensions"
# export BASH_COMPLETION_USER_DIR=$XDG_DATA_HOME/bash-completion/completions
+### --- PHP --- ###
+export PHP_HISTFILE="$XDG_STATE_HOME/history/php_history"
+
+### --- POSTGRESQL --- ###
+export PSQLRC="$XDG_CONFIG_HOME/pg/psqlrc"
+export PSQL_HISTORY="$XDG_STATE_HOME/history/psql_history"
+export PGPASSFILE="$XDG_CONFIG_HOME/pg/pgpass"
+export PGSERVICEFILE="$XDG_CONFIG_HOME/pg/pg_service.conf"
+
### --- POWERLEVEL10K --- ###
export POWERLEVEL9K_INSTALLATION_DIR="/usr/share/zsh-theme-powerlevel10k"
### --- PYTHON --- ###
-export PYTHONPYCACHEPREFIX=$XDG_CACHE_HOME/python
+export PYTHON_HISTORY="$XDG_DATA_HOME/history/python_history"
+export PYTHONPYCACHEPREFIX="$XDG_CACHE_HOME/python"
export PYTHONSTARTUP="$XDG_CONFIG_HOME/python/pythonrc"
+export PIPX_BIN_DIR="$XDG_SCRIPTS_HOME"
+export PIPX_MAN_DIR="$XDG_DATA_HOME/man"
+
+### --- QT --- ###
+export QT_QPA_PLATFORMTHEME="gtk2" # Have QT use gtk2 theme.
### --- RUST --- ###
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
+### --- SERVER --- ###
+export THESIAH="thesiah.xyz"
+export THESIAH_GIT="git@$THESIAH"
+export THESIAH_SERVER="root@$THESIAH"
+export THESIAH_VPN="${THESIAH%%.*}"
+export THESIAH_WWW="$HOME/Private/repos/THESIAH"
+
### --- SQLITE --- ###
export SQLITE_HISTORY="$XDG_DATA_HOME/history/sqlite_history"
+### --- STARSHIP --- ###
+export STARSHIP_CONFIG="$XDG_CONFIG_HOME/starship/starship.toml"
+
### --- TMUX --- ###
export TMUX_TMPDIR="$XDG_RUNTIME_DIR"
+### --- UNISON --- ###
+export UNISON="$XDG_DATA_HOME/unison"
+
### --- VIM --- ###
# export GVIMINIT='let $MYGVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/gvimrc" : "$XDG_CONFIG_HOME/nvim/init.lua" | so $MYGVIMRC'
# export VIMINIT='let $MYVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/vimrc" : "$XDG_CONFIG_HOME/nvim/init.lua" | so $MYVIMRC'
@@ -137,15 +229,35 @@ export WORKON_HOME="$XDG_DATA_HOME/venvs"
### --- VISUAL STUDIO CODE --- ###
export VSCODE_PORTABLE="$XDG_DATA_HOME/vscode"
+### --- WEBKIT --- ###
+export WEBKIT_DISABLE_COMPOSITING_MODE=1
+
+### --- WINE --- ###
+export WINEPREFIX="$XDG_DATA_HOME/wine"
+export WINEDLLOVERRIDES="winemenubuilder.exe=d"
+
### --- WGET --- ###
export WGETRC="$XDG_CONFIG_HOME/wget/wgetrc"
+### --- W3M --- ###
+export W3M_DIR="$XDG_STATE_HOME/w3m"
+
+### --- X11 --- ###
+export XINITRC="$XDG_CONFIG_HOME/x11/xinitrc"
+export XSERVERRC="$XDG_CONFIG_HOME/X11/xserverrc"
+
+### --- XAUTH --- ###
+export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority" # This line will break some DMs.
+
### --- ZSH --- ###
export ZDOTDIR="$XDG_CONFIG_HOME/zsh"
export ZPLUGINDIR="$XDG_SCRIPTS_HOME/zsh"
+### --- SDCV --- ###
+export STARDICT_DATA_DIR="$XDG_DATA_HOME/dic"
+export STARDICT_HISTFILE="$XDG_DATA_HOME/history/dic"
+export SDCV_PAGER='less --quit-if-one-screen -RX'
+
### --- SHORTCUTS --- ###
[ ! -f "$XDG_CONFIG_HOME/shell/shortcutrc" ] && setsid -f shortcuts >/dev/null 2>&1
-### --- LAPTOP KEYMAP --- ###
-sudo -n loadkeys "$XDG_DATA_HOME/thesiah/ttymaps.kmap" 2>/dev/null
diff --git a/fedora/.config/shell/scripts.bash b/fedora/.config/shell/scripts.bash
deleted file mode 100644
index f257809..0000000
--- a/fedora/.config/shell/scripts.bash
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/bash
-
-###########################################################################################
-###########################################################################################
-### --- COMMAND OUTPUT --- ###
-alias ilco=insert_last_command_output
-insert_last_command_output() {
- local last_cmd
- last_cmd=$(history | tail -n 2 | head -n 1 | sed 's/^[ ]*[0-9]\+[ ]*//')
- eval "$last_cmd"
-}
-
-###########################################################################################
-###########################################################################################
-### --- CREATE --- ###
-alias mc=mkcd
-mkcd() { mkdir -p "$1" && cd "$1" || return; }
-
-mkdt() {
- mkdir -p "${1:+$1/}$(date +%F)"
-}
-
-###########################################################################################
-###########################################################################################
-### --- PASS --- ###
-pass_otp() { pass otp uri -q "$1"; }
-pass_otp_insert() { pass otp insert "$1"; }
-
-alias cpqr=pass_qr
-pass_qr() { qrencode -o "$1.png" -t png -Sv 40 < "$1.pgp"; }
-
-###########################################################################################
-###########################################################################################
-### --- STOW --- ###
-alias dstw=dotfiles_stw
-dotfiles_stw() {
- "${XDG_DOTFILES_DIR:-${HOME}/.dotfiles}/$(whereami)/.local/bin/stw"
-}
-
-###########################################################################################
-###########################################################################################
-### --- SUDO --- ###
-pre_cmd() {
- local prepend_command="$1"
- local buffer="${READLINE_LINE:-}"
-
- if [ -z "$buffer" ]; then
- buffer=$(history | tail -n 2 | head -n 1 | sed 's/^[ ]*[0-9]\+[ ]*//')
- fi
-
- READLINE_LINE="$prepend_command $buffer"
- READLINE_POINT=${#READLINE_LINE}
-}
-bind -x '"\es":pre_cmd sudo'
diff --git a/fedora/.config/tmux/tmux.conf b/fedora/.config/tmux/tmux.conf
new file mode 100644
index 0000000..3b78628
--- /dev/null
+++ b/fedora/.config/tmux/tmux.conf
@@ -0,0 +1,91 @@
+### --- Settings --- ###
+# general
+set -as terminal-features 'xterm*:extkeys'
+set -g base-index 1
+set -g pane-base-index 1
+set -g default-shell /bin/bash
+set -g detach-on-destroy off
+set -s extended-keys on
+set -g focus-events on
+set -g history-limit 1000000
+set -g mouse on
+set -g renumber-windows on
+set -g set-clipboard on
+set -g xterm-keys on
+set -gq allow-passthrough on
+set -ga update-environment TERM
+set -ga update-environment TERM_PROGRAM
+set -sg escape-time 0
+setw -g mode-keys vi
+setw -g aggressive-resize on
+
+# activity
+set -g monitor-activity on
+set -g visual-activity off
+
+# color
+set -g default-terminal "xterm-256color"
+set -ga terminal-overrides ',xterm-256color:Tc'
+set -sa terminal-features ',xterm-256color:RGB'
+
+# status
+set -g status-interval 1
+set -g status-justify absolute-centre
+set -g status-left ""
+set -g status-left-length 10
+set -g status-position top
+set -g status-right ""
+set -g status-style "bg=default"
+
+
+### --- Key Bindings --- ###
+# clear
+bind 'l' "send-keys C-l; send-keys -R; clear-history"
+
+# copy-mode
+bind 'v' copy-mode
+
+# pane
+bind '%' split-window -h -c '#{pane_current_path}'
+bind '"' split-window -v -c '#{pane_current_path}'
+bind '|' split-window -h
+bind '-' split-window -v
+bind -r 'C-down' resize-pane -D 5
+bind -r 'C-up' resize-pane -U 5
+bind -r 'C-left' resize-pane -L 5
+bind -r 'C-right' resize-pane -R 5
+bind '@' choose-window 'join-pane -h -s "%%"'
+bind '#' choose-window 'join-pane -s "%%"'
+bind 'x' kill-pane
+bind 'a' kill-pane -a
+bind 'X' kill-window
+bind 'A' kill-window -a
+bind -n 'M-k' move-pane -h -t '.{up-of}'
+bind -n 'M-l' move-pane -t '.{right-of}'
+bind -n 'M-h' move-pane -t '.{left-of}'
+bind -n 'M-j' move-pane -h -t '.{down-of}'
+
+# prefix
+unbind 'C-b'
+set -g prefix 'C-Space'
+bind 'C-Space' send-prefix
+
+# reload
+unbind 'r'
+bind 'r' source-file "~/.config/tmux/tmux.conf"
+
+# session
+bind -r '(' switch-client -p \; refresh-client -S
+bind -r ')' switch-client -n \; refresh-client -S
+bind -nr 'M-<' switch-client -p \; refresh-client -S
+bind -nr 'M->' switch-client -n \; refresh-client -S
+bind "'" switch-client -t'{marked}'
+bind -r 'BSpace' switch-client -l
+
+# window
+bind -r '<' swap-window -d -t -1
+bind -r '>' swap-window -d -t +1
+bind -nr 'M-,' previous-window \; refresh-client -S
+bind -nr 'M-.' next-window \; refresh-client -S
+bind 'c' new-window -c "#{pane_current_path}"
+bind -nr 'M-BSpace' last-window
diff --git a/fedora/.config/vim/init.vim b/fedora/.config/vim/init.vim
index fbb9097..4104ba3 100644
--- a/fedora/.config/vim/init.vim
+++ b/fedora/.config/vim/init.vim
@@ -9,21 +9,10 @@ autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
" Nerd tree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
-" Runs a script that cleans out tex build files whenever I close out of a .tex file.
-autocmd VimLeave *.tex !texclear %
-
" Text files
-let g:vimwiki_ext2syntax = {'.Rmd': 'markdown', '.rmd': 'markdown','.md': 'markdown', '.markdown': 'markdown', '.mdown': 'markdown'}
-let g:vimwiki_list = [{'path': '~/.local/share/nvim/vimwiki', 'syntax': 'markdown', 'ext': '.md'}]
-autocmd BufRead,BufNewFile /tmp/calcurse*,~/.calcurse/notes/* set filetype=markdown
autocmd BufRead,BufNewFile *.ms,*.me,*.mom,*.man set filetype=groff
autocmd BufRead,BufNewFile *.tex set filetype=tex
-" Enable Goyo by default for mutt writing
-autocmd BufRead,BufNewFile /tmp/neomutt* :Goyo 80 | call feedkeys("jk")
-autocmd BufRead,BufNewFile /tmp/neomutt* map ZZ :Goyo!\|x!<CR>
-autocmd BufRead,BufNewFile /tmp/neomutt* map ZQ :Goyo!\|q!<CR>
-
" Automatically deletes all trailing whitespace and newlines at end of file on save. & reset cursor position
autocmd BufWritePre * let currPos = getpos(".")
autocmd BufWritePre * %s/\s\+$//e
@@ -33,18 +22,7 @@ autocmd BufWritePre *neomutt* %s/^--$/-- /e " dash-dash-space signature delimite
autocmd BufWritePre * cal cursor(currPos[1], currPos[2])
" When shortcut files are updated, renew bash and ranger configs with new material:
-autocmd BufWritePost bm-files,bm-dirs !shortcuts
-
-" Run xrdb whenever Xdefaults or Xresources are updated.
-autocmd BufRead,BufNewFile Xresources,Xdefaults,xresources,xdefaults set filetype=xdefaults
-autocmd BufWritePost Xresources,Xdefaults,xresources,xdefaults !xrdb %
-
-" Recompile dwmblocks on config edit.
-autocmd BufWritePost ${XDG_SOURCES_HOME:-$HOME/.local/src}/suckless/dwmblocks/config.h !cd ${XDG_SOURCES_HOME:-$HOME/.local/src}/suckless/dwmblocks/; sudo make install && { killall -q dwmblocks;setsid -f dwmblocks }
-
-" Which key description
-autocmd! User vim-which-key call which_key#register('<Space>', 'g:which_key_map')
-let g:which_key_map = {}
+autocmd BufWritePost bm-files,bm-dirs !bmshortcuts
" }}}
@@ -60,387 +38,10 @@ endif
" }}}
-" PLUGINS INIT ----------------------------------------------------------- {{{
-
-let config_path = empty($XDG_CONFIG_HOME) ? expand("$HOME/.config") : expand("$XDG_CONFIG_HOME")
-if filereadable(config_path . "/vim/plugins.vim")
- silent! call mkdir(config_path . "/vim/plugged", "p")
- execute "source " . config_path . "/vim/plugins.vim"
-endif
-
-" goyo
-let g:is_goyo_active = v:false
-function! GoyoEnter()
- if executable('tmux') && strlen($TMUX)
- silent !tmux set status off
- silent !tmux list-panes -F '\#F' | grep -q Z || tmux resize-pane -Z
- endif
-
- let g:default_colorscheme = exists('g:colors_name') ? g:colors_name : 'desert'
- set background=light
- set linebreak
- set wrap
- set textwidth=0
- set wrapmargin=0
-
- Goyo 80x85%
- colorscheme seoul256
- let g:is_goyo_active = v:true
-endfunction
-
-function! GoyoLeave()
- if executable('tmux') && strlen($TMUX)
- silent !tmux set status on
- silent !tmux list-panes -F '\#F' | grep -q Z && tmux resize-pane -Z
- endif
-
- Goyo!
- execute 'colorscheme ' . g:default_colorscheme
- let g:is_goyo_active = v:false
-endfunction
-
-function! ToggleGoyo()
- if g:is_goyo_active
- call GoyoLeave()
- else
- call GoyoEnter()
- endif
-endfunction
-
-" }}}
-
-
-" PLUGIN MAPPINGS & SETTINGS -------------------------------------------------------- {{{
-
-" Open quickfix/location list
-let g:which_key_map.o = {
- \ 'name' : '+Open' ,
- \ 'q' : 'Quickfix-list' ,
- \ 'l' : 'Location-list' ,
- \ }
-
-" Check health
-nnoremap <Leader>ch :CheckHealth<CR>
-let g:which_key_map.c = { 'name' : 'Check' }
-let g:which_key_map.c.h = 'Check-health'
-
-" Bookmarks
-let g:bookmark_no_default_key_mappings = 1
-let g:bookmark_save_per_working_dir = 1
-let g:bookmark_auto_save = 1
-nmap <Leader>mm <Plug>BookmarkToggle
-nmap <Leader>mi <Plug>BookmarkAnnotate
-nmap <Leader>ma <Plug>BookmarkShowAll
-nmap <Leader>m] <Plug>BookmarkNext
-nmap <Leader>m[ <Plug>BookmarkPrev
-nmap <Leader>mc <Plug>BookmarkClear
-nmap <Leader>mx <Plug>BookmarkClearAll
-nmap <Leader>mk <Plug>BookmarkMoveUp
-nmap <Leader>mj <Plug>BookmarkMoveDown
-nmap <Leader>mg <Plug>BookmarkMoveToLine
-
-" Fugitive
-nnoremap <Leader>gs :Git<CR>
-let g:which_key_map.g = { 'name' : 'Git/Goyo' }
-let g:which_key_map.g.s = 'Git'
-
-" Goyo plugin makes text more readable when writing prose:
-nnoremap <Leader>gy :call ToggleGoyo()<CR>
-let g:which_key_map.g.y = 'Toggle-goyo'
-
-" Nerd tree
-map <Leader>n :NERDTreeToggle<CR>
-let g:which_key_map.n = 'Toggle-nerd-tree'
-
-" Undotree
-nnoremap <Leader>u :UndotreeToggle<CR>
-let g:which_key_map.u = 'Toggle-undo-tree'
-
-" vimwiki
-map <Leader>vw :VimwikiIndex<CR>
-let g:which_key_map.v = { 'name' : '+Vim-wiki' }
-let g:which_key_map.v.w = 'Vim-wiki-index'
-
-" vim-plug
-nnoremap <Leader>pc :PlugClean<CR>
-nnoremap <Leader>pi :PlugInstall<CR>
-nnoremap <Leader>pu :PlugUpdate<CR>
-let g:which_key_map.p = { 'name' : '+Plug' }
-let g:which_key_map.p.c = 'Plug-clean'
-let g:which_key_map.p.i = 'Plug-install'
-let g:which_key_map.p.u = 'Plug-update'
-
-" whichkey
-nnoremap <silent> <Leader> :<C-U>WhichKey '<Space>'<CR>
-nnoremap <silent> <localleader> :<C-U>WhichKey '\'<CR>
-
-" lsp
-if executable('pylsp')
- " pip install python-lsp-server
- au User lsp_setup call lsp#register_server({
- \ 'name': 'pylsp',
- \ 'cmd': {server_info->['pylsp']},
- \ 'allowlist': ['python'],
- \ })
-endif
-
-function! s:on_lsp_buffer_enabled() abort
- setlocal omnifunc=lsp#complete
- setlocal signcolumn=yes
- if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
- nmap <buffer> gd <plug>(lsp-definition)
- nmap <buffer> gs <plug>(lsp-document-symbol-search)
- nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
- nmap <buffer> gr <plug>(lsp-references)
- nmap <buffer> gi <plug>(lsp-implementation)
- nmap <buffer> gt <plug>(lsp-type-definition)
- nmap <buffer> <Leader>lr <plug>(lsp-rename)
- nmap <buffer> [t <plug>(lsp-previous-diagnostic)
- nmap <buffer> ]t <plug>(lsp-next-diagnostic)
- nmap <buffer> K <plug>(lsp-hover)
- " nnoremap <buffer> <expr><C-D> lsp#scroll(+4)
- " nnoremap <buffer> <expr><C-U> lsp#scroll(-4)
-
- let g:lsp_format_sync_timeout = 1000
- autocmd! BufWritePre *.rs,*.go,*.py call execute('LspDocumentFormatSync')
-
- " refer to doc to add more commands
-endfunction
-
-let g:which_key_map.g = {
- \ 'name' : '+Goto' ,
- \ 'd' : 'Definition' ,
- \ 's' : 'Symbol' ,
- \ 'S' : 'Workspace-symbol' ,
- \ 'r' : 'References' ,
- \ 'i' : 'Implementation' ,
- \ 't' : 'Type-definition' ,
- \ }
-
-let g:which_key_map['['] = { 'name' : '+Previous' }
-let g:which_key_map[']'] = { 'name' : '+Next' }
-let g:which_key_map['[t'] = 'Diagnostic'
-let g:which_key_map[']t'] = 'Diagnostic'
-let g:which_key_map.K = 'Keyword'
-
-augroup lsp_install
- au!
- " call s:on_lsp_buffer_enabled only for languages that has the server registered.
- autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
-augroup END
-
-let g:lsp_fold_enabled = 0
-let g:lsp_log_verbose = 1
-let g:lsp_log_file = expand('~/.cache/vim/vim-lsp.log')
-let g:asyncomplete_log_file = expand('~/.cache/vim/asyncomplete.log')
-let g:lsp_settings_filetype_python = ['pyright-langserver', 'ruff', 'ruff-lsp']
-
-nnoremap <Leader>li :LspInstallServer<CR>
-
-" vim-airline
-if !exists('g:airline_symbols')
- let g:airline_symbols = {}
-endif
-let g:airline_symbols.colnr = ' C:'
-let g:airline_symbols.linenr = ' L:'
-let g:airline_symbols.maxlinenr = ' '
-let g:airline#extensions#whitespace#symbol = '!'
-
-" colorscheme
-if isdirectory(expand("${XDG_CONFIG_HOME:-$HOME/.config}/vim/plugged/catppuccin"))
- let g:airline_theme = 'catppuccin_mocha'
- colorscheme catppuccin_mocha
-endif
-
-" fzf
-let g:fzf_vim = {}
-let $FZF_DEFAULT_OPTS = "--layout=default --preview-window 'right:60%' --preview 'bat --style=numbers --line-range :300 {}'
- \ --bind ctrl-y:preview-up,
- \ ctrl-e:preview-down,
- \ ctrl-b:preview-page-up,
- \ ctrl-f:preview-page-down,
- \ ctrl-u:preview-half-page-up,
- \ ctrl-d:preview-half-page-down,
- \ shift-up:preview-top,
- \ shift-down:preview-bottom,
- \ alt-up:half-page-up,
- \ alt-down:half-page-down
- \ "
-
-" tmux
-if exists('$TMUX')
- let g:fzf_layout = { 'tmux': '90%,70%' }
- let g:tmux_navigator_no_wrap = 1
-else
- let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6, 'relative': v:true } }
-endif
-let g:fzf_vim.preview_window = ['right,50%,<70(up,40%)', 'ctrl-/']
-let g:fzf_vim.commits_log_options = '--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"'
-let g:fzf_vim.tags_command = 'ctags -R'
-
-function! s:build_quickfix_list(lines)
- call setqflist(map(copy(a:lines), '{ "filename": v:val, "lnum": 1 }'))
- copen
- cc
-endfunction
-
-let g:fzf_action = {
- \ 'ctrl-q' : function('s:build_quickfix_list'),
- \ 'ctrl-t' : 'tab split' ,
- \ 'ctrl-x' : 'split' ,
- \ 'ctrl-v' : 'vsplit' ,
- \ }
-
-nnoremap <Leader>cl :Colors<CR>
-nnoremap <Leader>fb :Files ~/.local/bin<CR>
-nnoremap <Leader>fc :Files ~/.config<CR>
-nnoremap <Leader>fd :Files ~/.dotfiles<CR>
-nnoremap <Leader>ff :Files .<CR>
-nnoremap <Leader>fF :Files ~<CR>
-nnoremap <Leader>fg :GFiles<CR>
-nnoremap <Leader>fG :GFiles?<CR>
-nnoremap <Leader>fs :Files ~/.local/src/suckless<CR>
-nnoremap <Leader>fv :Files ~/.config/vim<CR>
-nnoremap <Leader>sb :Buffers<CR>
-nnoremap <Leader>sc :Changes<CR>
-nnoremap <Leader>sC :Commands<CR>
-nnoremap <Leader>sg :Rg<CR>
-nnoremap <Leader>sG :RG<CR>
-nnoremap <Leader>shc :History:<CR>
-nnoremap <Leader>shh :History<CR>
-nnoremap <Leader>shp :Helptags<CR>
-nnoremap <Leader>shs :History/<CR>
-nnoremap <Leader>sj :Jumps<CR>
-nnoremap <Leader>sk :Maps<CR>
-nnoremap <Leader>sl :Locate<CR>
-nnoremap <Leader>sm :Marks<CR>
-nnoremap <Leader>sn :Snippets<CR>
-nnoremap <Leader>st :Filetypes<CR>
-nnoremap <Leader>gc :Commits<CR>
-nnoremap <Leader>gC :BCommits<CR>
-
-let g:which_key_map.c = 'Color-schemes'
-let g:which_key_map.f = {
- \ 'name' : '+Find' ,
- \ 'b' : 'Scripts' ,
- \ 'c' : 'Config' ,
- \ 'd' : 'Dotfiles' ,
- \ 'f' : 'Files' ,
- \ 'F' : 'Root-files' ,
- \ 'g' : 'Git-files' ,
- \ 'G' : 'Git-status' ,
- \ 's' : 'Suckless' ,
- \ 'v' : 'Vim-config' ,
- \ }
-
-let g:which_key_map.g = {
- \ 'name' : '+Git' ,
- \ 'c' : 'Commits' ,
- \ 'C' : 'Buffer-commits' ,
- \ }
-
-let g:which_key_map.s = {
- \ 'name' : '+Search' ,
- \ 'b' : 'Buffers' ,
- \ 'c' : 'Changes' ,
- \ 'C' : 'Commands' ,
- \ 'g' : 'Rip-grep' ,
- \ 'G' : 'Rip-Grep' ,
- \ 'h' : {
- \ 'name' : '+History' ,
- \ 'c' : 'Command-history' ,
- \ 'h' : 'History' ,
- \ 'p' : 'Help-tags' ,
- \ 's' : 'Search-history' ,
- \ },
- \ 'j' : 'Jumps' ,
- \ 'k' : 'Key-maps' ,
- \ 'l' : 'Locate' ,
- \ 'm' : 'Marks' ,
- \ 'n' : 'Snippets' ,
- \ 't' : 'File-types' ,
- \ }
-
-
-" snippets
-let g:SuperTabDefaultCompletionType = '<C-N>'
-let g:SuperTabCrMapping = 0
-let g:UltiSnipsExpandTrigger = '<C-E>'
-let g:UltiSnipsJumpForwardTrigger = '<tab>'
-let g:UltiSnipsJumpBackwardTrigger = '<s-tab>'
-let g:UltiSnipsEditSplit = 'vertical'
-let g:UltiSnipsAutoTrigger = 1
-let g:asyncomplete_auto_completeopt = 0
-let g:asyncomplete_auto_popup = 1
-
-set completeopt=menuone,noinsert,noselect,preview
-autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif
-
-if has('python3')
- call asyncomplete#register_source(asyncomplete#sources#ultisnips#get_source_options({
- \ 'name': 'ultisnips',
- \ 'allowlist': ['*'],
- \ 'completor': function('asyncomplete#sources#ultisnips#completor'),
- \ }))
-endif
-
-inoremap <expr> <Tab> pumvisible() ? "\<C-N>" : "\<Tab>"
-inoremap <expr> <S-Tab> pumvisible() ? "\<C-P>" : "\<S-Tab>"
-inoremap <expr> <CR> pumvisible() ? asyncomplete#close_popup() : "\<CR>"
-
-" whichkey
-set timeoutlen=500
-
-let g:which_key_map.a = 'Select-all-the-text'
-let g:which_key_map.b = { 'name' : '+Buffer' }
-let g:which_key_map.b.n = 'New/open-buffer'
-let g:which_key_map.c = { 'name' : '+Format' }
-let g:which_key_map.c.f = 'Format-buffer'
-let g:which_key_map.e = 'Explorer'
-let g:which_key_map.h = { 'name' : '+Hex' }
-let g:which_key_map.h.x = 'Toggle-hex/reverse-conversion'
-let g:which_key_map.l = { 'name' : '+Lex/Lsp' }
-let g:which_key_map.l.e = 'Open-lex'
-let g:which_key_map.l.i = 'Lsp-install-server'
-let g:which_key_map.l.r = 'Rename'
-let g:which_key_map.o = { 'name' : '+Open' }
-let g:which_key_map.o.g = 'Orthography'
-let g:which_key_map.Q = 'Force-quit-all'
-let g:which_key_map.r = { 'name' : '+Replace' }
-let g:which_key_map.r.w = 'Replace word'
-let g:which_key_map.s = { 'name' : '+Surround' }
-let g:which_key_map.s.o = 'Source-file'
-let g:which_key_map.s.w = 'Surround-word'
-let g:which_key_map.t = 'Go-to-tab'
-let g:which_key_map["'"] = 'Register'
-let g:which_key_map['w'] = {
- \ 'name' : '+windows' ,
- \ 'd' : ['<C-W>c' , 'Delete-window'] ,
- \ 'h' : ['<C-W>h' , 'Window-left'] ,
- \ 'H' : ['<C-W>5<' , 'Expand-window-left'] ,
- \ 'j' : ['<C-W>j' , 'Window-below'] ,
- \ 'J' : [':resize +5' , 'Expand-window-below'] ,
- \ 'k' : ['<C-W>k' , 'Window-up'] ,
- \ 'K' : [':resize -5' , 'Expand-window-up'] ,
- \ 'l' : ['<C-W>l' , 'Window-right'] ,
- \ 'L' : ['<C-W>5>' , 'Expand-window-right'] ,
- \ 's' : ['<C-W>s' , 'Split-window-below'] ,
- \ 'v' : ['<C-W>v' , 'Split-window-below'] ,
- \ 'w' : ['<C-W>w' , 'Other-window'] ,
- \ '2' : ['<C-W>v' , 'Layout-double-columns'] ,
- \ '-' : ['<C-W>s' , 'Split-window-below'] ,
- \ '|' : ['<C-W>v' , 'Split-window-right'] ,
- \ '=' : ['<C-W>=' , 'Balance-window'] ,
- \ '?' : ['Windows' , 'Fzf-window'] ,
- \ }
-
-" }}}
-
-
" SHORTCUTS ---------------------------------------------------------------- {{{
-if filereadable(expand("${XDG_CONFIG_HOME:-$HOME/.config}/nvim/shortcuts.vim"))
- silent! source ${XDG_CONFIG_HOME:-$HOME/.config}/nvim/shortcuts.vim
+if filereadable(expand("${XDG_CONFIG_HOME:-$HOME/.config}/vim/shortcuts.vim"))
+ silent! source ${XDG_CONFIG_HOME:-$HOME/.config}/vim/shortcuts.vim
endif
" }}}
diff --git a/fedora/.config/vim/vimrc b/fedora/.config/vim/vimrc
index 0535aec..a782a14 100644
--- a/fedora/.config/vim/vimrc
+++ b/fedora/.config/vim/vimrc
@@ -335,8 +335,8 @@ set nocursorcolumn
set shiftwidth=4
set tabstop=4
-" If the current file type is HTML, set indentation to 2 spaces.
-autocmd Filetype html setlocal tabstop=2 shiftwidth=2 expandtab
+" If the current file type is HTML, CSS, JS, JSX, TS, TSX set indentation to 2 spaces.
+autocmd Filetype html,css,js,jsx,ts,tsx setlocal tabstop=2 shiftwidth=2 expandtab
" Do not save backup files.
set nobackup
@@ -367,9 +367,6 @@ set title
set timeoutlen=300 " Time (in milliseconds) to wait for a mapping
set ttimeoutlen=10 " Time (in milliseconds) to wait for terminal key codes
-" Esc
-set noesckeys
-
" Set the commands to save in history default number is 20.
set history=1000
diff --git a/fedora/.config/yazi/flavors/ayu-dark.yazi/LICENSE b/fedora/.config/yazi/flavors/ayu-dark.yazi/LICENSE
new file mode 100755
index 0000000..894ccc9
--- /dev/null
+++ b/fedora/.config/yazi/flavors/ayu-dark.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Kamal Chandra Upreti
+
+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.
diff --git a/fedora/.config/yazi/flavors/ayu-dark.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/ayu-dark.yazi/LICENSE-tmtheme
new file mode 100755
index 0000000..97c6154
--- /dev/null
+++ b/fedora/.config/yazi/flavors/ayu-dark.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Ike Ku
+
+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.
diff --git a/fedora/.config/yazi/flavors/ayu-dark.yazi/README.md b/fedora/.config/yazi/flavors/ayu-dark.yazi/README.md
new file mode 100644
index 0000000..6384dcc
--- /dev/null
+++ b/fedora/.config/yazi/flavors/ayu-dark.yazi/README.md
@@ -0,0 +1,32 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Ayu Dark Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```bash
+ya pack -a kmlupreti/ayu-dark
+```
+
+## ⚙️ Usage
+
+Add the these lines to your `theme.toml` configuration file to use it:
+
+```toml
+[flavor]
+dark = "ayu-dark"
+```
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/ayu-dark.yazi/flavor.toml b/fedora/.config/yazi/flavors/ayu-dark.yazi/flavor.toml
new file mode 100755
index 0000000..7fafb1b
--- /dev/null
+++ b/fedora/.config/yazi/flavors/ayu-dark.yazi/flavor.toml
@@ -0,0 +1,137 @@
+[mgr]
+# current working dir
+cwd = { fg = "#5c6773" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# find
+find_keyword = { fg = "#1f6f88", bold = true, italic = true, underline = true }
+find_position = { fg = "#1f6f88", bold = true, italic = true }
+
+# Symlink
+symlink_target = { italic = true }
+
+# marker
+marker_copied = { fg = "#0a0e14", bg = "#7e9350" }
+marker_cut = { fg = "#0a0e14", bg = "#a85361" }
+marker_marked = { fg = "#0a0e14", bg = "#1f6f88" }
+marker_selected = { fg = "#0a0e14", bg = "#c2a05c" }
+
+# count
+count_copied = { fg = "#0a0e14", bg = "#7e9350" }
+count_cut = { fg = "#5c6773", bg = "#a85361" }
+count_selected = { fg = "#0a0e14", bg = "#c2a05c" }
+
+# border
+border_symbol = " "
+
+[tabs]
+active = { fg = "#0a0e14", bg = "#c2a05c", bold = true }
+inactive = { fg = "#c2a05c", bg = "#0a0e14" }
+sep_inner = { open = "", close = "" }
+sep_outer = { open = "", close = "" }
+
+[mode]
+normal_main = { fg = "#0a0e14", bg = "#c2a05c", bold = true }
+normal_alt = { fg = "#1f6f88", bg = "#2d3640", bold = true }
+
+select_main = { fg = "#0a0e14", bg = "#1f6f88", bold = true }
+select_alt = { fg = "#0a0e14", bg = "#1f6f88", bold = true }
+
+unset_main = { fg = "#0a0e14", bg = "#a85361", bold = true }
+unset_alt = { fg = "#0a0e14", bg = "#a85361", bold = true }
+
+[status]
+overall = {}
+sep_left = { open = "", close = "" }
+sep_right = { open = "", close = "" }
+
+# Progress
+progress_label = { fg = "#0a0e14", bold = true }
+progress_normal = { fg = "#c2a05c", bg = "#0a0e14" }
+progress_error = { fg = "#a85361", bg = "#0a0e14" }
+
+# permissions
+perm_type = { fg = "#c2c2c2" }
+perm_write = { fg = "#a85361" }
+perm_exec = { fg = "#7e9350" }
+perm_read = { fg = "#1f6f88" }
+perm_sep = { fg = "#5c6773" }
+
+[select]
+border = { fg = "#c2a05c" }
+active = { fg = "#a85361", bold = true }
+inactive = { fg = "#5c6773", bg = "#0a0e14" }
+
+[input]
+border = { fg = "#c2a05c" }
+value = { fg = "#5c6773" }
+
+[completion]
+border = { fg = "#c2a05c", bg = "#0a0e14" }
+
+[tasks]
+border = { fg = "#c2a05c" }
+title = { fg = "#5c6773" }
+hovered = { fg = "#7e9350", underline = true }
+
+[which]
+cols = 3
+mask = { bg = "#0a0e14" }
+cand = { fg = "#c2a05c" }
+rest = { fg = "#0a0e14" }
+desc = { fg = "#5c6773" }
+separator = " ⯈ "
+separator_style = { fg = "#5c6773" }
+
+[help]
+on = { fg = "#c2a05c" }
+run = { fg = "#7e9350" }
+footer = { fg = "#0a0e14", bg = "#5c6773" }
+
+[notify]
+title_info = { fg = "#7e9350" }
+title_warn = { fg = "#c2a05c" }
+title_error = { fg = "#a85361" }
+
+[filetype]
+rules = [
+ # directories
+ { name = "*/", fg = "#1f6f88" },
+
+ # executables
+ { name = "*", is = "exec", fg = "#7e9350" },
+
+ # images
+ { mime = "image/*", fg = "#c2a05c" },
+
+ # media
+ { mime = "{audio,video}/*", fg = "#7e9350" },
+
+ # archives
+ { mime = "application/{,g}zip", fg = "#a85361" },
+ { mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}", fg = "#a85361" },
+
+ # documents
+ { mime = "application/{pdf,doc,rtf,vnd.*}", fg = "#1f6f88" },
+
+ # scripts and code
+ { mime = "application/{x-shellscript,x-python,x-ruby,x-javascript}", fg = "#c2a05c" },
+ { mime = "text/x-{c,c++}", fg = "#1f6f88" },
+
+ # config files
+ { name = "*.json", fg = "#c2a05c" },
+ { name = "*.yml", fg = "#1f6f88" },
+ { name = "*.toml", fg = "#9464b6" },
+
+ # special files
+ { name = "*", is = "orphan", bg = "#0a0e14" },
+
+ # dummy files
+ { name = "*", is = "dummy", bg = "#0a0e14" },
+
+ # fallback
+ { name = "*/", fg = "#1f6f88" },
+]
diff --git a/fedora/.config/yazi/flavors/ayu-dark.yazi/preview.png b/fedora/.config/yazi/flavors/ayu-dark.yazi/preview.png
new file mode 100644
index 0000000..cdaeeff
--- /dev/null
+++ b/fedora/.config/yazi/flavors/ayu-dark.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/ayu-dark.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/ayu-dark.yazi/tmtheme.xml
new file mode 100755
index 0000000..a6d90da
--- /dev/null
+++ b/fedora/.config/yazi/flavors/ayu-dark.yazi/tmtheme.xml
@@ -0,0 +1,1025 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>author</key>
+ <string>Ike Ku</string>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>name</key>
+ <string>ayu</string>
+ <key>semanticClass</key>
+ <string>ayu.dark</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>accent</key>
+ <string>#F29718</string>
+ <key>activeGuide</key>
+ <string>#363F46</string>
+ <key>background</key>
+ <string>#0F1419</string>
+ <key>caret</key>
+ <string>#F29718</string>
+ <key>findHighlight</key>
+ <string>#F29718</string>
+ <key>findHighlightForeground</key>
+ <string>#0F1419</string>
+ <key>foreground</key>
+ <string>#BFBAB0</string>
+ <key>guide</key>
+ <string>#20272C</string>
+ <key>gutter</key>
+ <string>#0F1419</string>
+ <key>gutterForeground</key>
+ <string>#252D33</string>
+ <key>inactiveBackground</key>
+ <string>#0F1419</string>
+ <key>inactiveSelection</key>
+ <string>#131E27</string>
+ <key>invisibles</key>
+ <string>#252D33</string>
+ <key>lineHighlight</key>
+ <string>#0A0E12</string>
+ <key>popupCss</key>
+ <string>html, body {
+ background-color: #13181D;
+ color: #BFBAB0;
+}
+body {
+ padding: 1px 3px;
+}
+a {
+ color: rgba(57, 186, 230, .7);
+}
+</string>
+ <key>selection</key>
+ <string>#16242E</string>
+ <key>selectionBorder</key>
+ <string>#192B37</string>
+ <key>shadow</key>
+ <string>#00000010</string>
+ <key>stackGuide</key>
+ <string>#20272C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment, punctuation.definition.comment</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#5C6773</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#BFBAB0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string, constant.other.symbol</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#C2D94C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F29718</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions and Escape Characters</string>
+ <key>scope</key>
+ <string>string.regexp, constant.character.escape</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#95E6CB</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-in constant</string>
+ <key>scope</key>
+ <string>constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F29718</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-defined constant</string>
+ <key>scope</key>
+ <string>constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F29718</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Member Variable</string>
+ <key>scope</key>
+ <string>variable.member</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ec5f67</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword - keyword.operator, keyword.operator.word</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FF7733</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Operators</string>
+ <key>scope</key>
+ <string>keyword.operator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F29668</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.separator, punctuation.terminator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#BFBAB0CC</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.section</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#BFBAB0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Accessor</string>
+ <key>scope</key>
+ <string>punctuation.accessor</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F29668</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Annotation Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.annotation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#BFBAB0CC</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JavaScript Dollar</string>
+ <key>scope</key>
+ <string>variable.other.dollar.only.js, variable.other.object.dollar.only.js, variable.type.dollar.only.js, support.class.dollar.only.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E6B673</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FF7733</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FF7733</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function name</string>
+ <key>scope</key>
+ <string>entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FFB454</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Entity name</string>
+ <key>scope</key>
+ <string>entity.name - (entity.name.section | entity.name.tag | entity.name.label)</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#59C2FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>underline</string>
+ <key>foreground</key>
+ <string>#59C2FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function argument</string>
+ <key>scope</key>
+ <string>variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F29718</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Language variable</string>
+ <key>scope</key>
+ <string>variable.language</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag</string>
+ <key>scope</key>
+ <string>entity.name.tag, meta.tag.sgml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag start/end</string>
+ <key>scope</key>
+ <string>punctuation.definition.tag.end, punctuation.definition.tag.begin, punctuation.definition.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE690</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FFB454</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function call</string>
+ <key>scope</key>
+ <string>variable.function, variable.annotation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FFB454</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library function</string>
+ <key>scope</key>
+ <string>support.function, support.macro</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F07178</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library constant</string>
+ <key>scope</key>
+ <string>support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#F29668</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library class/type</string>
+ <key>scope</key>
+ <string>support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FF3333</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#FF7733</string>
+ <key>foreground</key>
+ <string>#FFFFFF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.header</string>
+ <key>scope</key>
+ <string>meta.diff, meta.diff.header</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c594c5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby class methods</string>
+ <key>scope</key>
+ <string>source.ruby variable.other.readwrite</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FFB454</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS tag names</string>
+ <key>scope</key>
+ <string>source.css entity.name.tag, source.sass entity.name.tag, source.scss entity.name.tag, source.less entity.name.tag, source.stylus entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#59C2FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS browser prefix</string>
+ <key>scope</key>
+ <string>source.css support.type, source.sass support.type, source.scss support.type, source.less support.type, source.stylus support.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#5C6773</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Properties</string>
+ <key>scope</key>
+ <string>support.type.property-name</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>normal</string>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Search Results Nums</string>
+ <key>scope</key>
+ <string>constant.numeric.line-number.find-in-files - match</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#5C6773</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Search Results Match Nums</string>
+ <key>scope</key>
+ <string>constant.numeric.line-number.match</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FF7733</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Search Results Lines</string>
+ <key>scope</key>
+ <string>entity.name.filename.find-in-files</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#C2D94C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>message.error</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FF3333</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 8</string>
+ <key>scope</key>
+ <string>source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 7</string>
+ <key>scope</key>
+ <string>source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 6</string>
+ <key>scope</key>
+ <string>source.json meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 5</string>
+ <key>scope</key>
+ <string>source.json meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 4</string>
+ <key>scope</key>
+ <string>source.json meta meta meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 3</string>
+ <key>scope</key>
+ <string>source.json meta meta meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 2</string>
+ <key>scope</key>
+ <string>source.json meta meta meta meta.structure.dictionary.json string.quoted.double.json - meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta meta meta.structure.dictionary.json punctuation.definition.string - meta meta meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 1</string>
+ <key>scope</key>
+ <string>source.json meta meta.structure.dictionary.json string.quoted.double.json - meta meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta meta.structure.dictionary.json punctuation.definition.string - meta meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 0</string>
+ <key>scope</key>
+ <string>source.json meta.structure.dictionary.json string.quoted.double.json - meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json punctuation.definition.string - meta.structure.dictionary.json meta.structure.dictionary.value.json punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Heading</string>
+ <key>scope</key>
+ <string>markup.heading</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#FF7733</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Links</string>
+ <key>scope</key>
+ <string>string.other.link, markup.underline.link</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic underline</string>
+ <key>foreground</key>
+ <string>#95E6CB</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup image</string>
+ <key>scope</key>
+ <string>punctuation.definition.image</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FFB454</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Italic</string>
+ <key>scope</key>
+ <string>markup.italic</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#F07178</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Bold</string>
+ <key>scope</key>
+ <string>markup.bold</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#F07178</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Bold/italic</string>
+ <key>scope</key>
+ <string>markup.italic markup.bold | markup.bold markup.italic</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Code</string>
+ <key>scope</key>
+ <string>markup.raw</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#BFBAB007</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Code Inline</string>
+ <key>scope</key>
+ <string>markup.raw.inline</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#BFBAB010</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Separator</string>
+ <key>scope</key>
+ <string>meta.separator</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#BFBAB010</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#5C6773</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Blockquote</string>
+ <key>scope</key>
+ <string>markup.quote</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#F29718</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup List Bullet</string>
+ <key>scope</key>
+ <string>markup.list.numbered.bullet, markup.list punctuation.definition.list_item</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#95E6CB</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Inserted</string>
+ <key>scope</key>
+ <string>markup.inserted</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#C2D94C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Changed</string>
+ <key>scope</key>
+ <string>markup.changed</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Deleted</string>
+ <key>scope</key>
+ <string>markup.deleted</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F07178</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Strike</string>
+ <key>scope</key>
+ <string>markup.strike</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E6B673</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Table</string>
+ <key>scope</key>
+ <string>markup.table</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#BFBAB010</string>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Raw Inline</string>
+ <key>scope</key>
+ <string>text.html.markdown markup.raw.inline</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F29668</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Line Break</string>
+ <key>scope</key>
+ <string>text.html.markdown meta.dummy.line-break</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#5C6773</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Raw Block Fenced</string>
+ <key>scope</key>
+ <string>markup.raw.block.fenced.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#BFBAB010</string>
+ <key>foreground</key>
+ <string>#BFBAB0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Fenced Bode Block</string>
+ <key>scope</key>
+ <string>punctuation.definition.fenced.markdown, variable.language.fenced.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#BFBAB010</string>
+ <key>foreground</key>
+ <string>#5C6773</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Fenced Language</string>
+ <key>scope</key>
+ <string>variable.language.fenced.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#5C6773</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter Added</string>
+ <key>scope</key>
+ <string>markup.inserted.git_gutter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#C2D94C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter Changed</string>
+ <key>scope</key>
+ <string>markup.changed.git_gutter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter Deleted</string>
+ <key>scope</key>
+ <string>markup.deleted.git_gutter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FF3333</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter Ignored</string>
+ <key>scope</key>
+ <string>markup.ignored.git_gutter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#20272C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter Untracked</string>
+ <key>scope</key>
+ <string>markup.untracked.git_gutter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#20272C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GutterColor</string>
+ <key>scope</key>
+ <string>gutter_color</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FFFFFF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>AceJump Label - Blue</string>
+ <key>scope</key>
+ <string>acejump.label.blue</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#39BAE6</string>
+ <key>foreground</key>
+ <string>#FFFFFF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>AceJump Label - Green</string>
+ <key>scope</key>
+ <string>acejump.label.green</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#C2D94C</string>
+ <key>foreground</key>
+ <string>#FFFFFF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>AceJump Label - Orange</string>
+ <key>scope</key>
+ <string>acejump.label.orange</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#FF7733</string>
+ <key>foreground</key>
+ <string>#FFFFFF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>AceJump Label - Purple</string>
+ <key>scope</key>
+ <string>acejump.label.purple</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#F07178</string>
+ <key>foreground</key>
+ <string>#FFFFFF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SublimeLinter Warning</string>
+ <key>scope</key>
+ <string>sublimelinter.mark.warning</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#39BAE6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SublimeLinter Gutter Mark</string>
+ <key>scope</key>
+ <string>sublimelinter.gutter-mark</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FFFFFF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SublimeLinter Error</string>
+ <key>scope</key>
+ <string>sublimelinter.mark.error</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FF3333</string>
+ </dict>
+ </dict>
+ </array>
+ <key>uuid</key>
+ <string>0e709986-46a0-40a0-b3bf-c8dfe525c455</string>
+</dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/LICENSE b/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/LICENSE
new file mode 100644
index 0000000..fb5b1d6
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 yazi-rs
+
+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.
diff --git a/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..006383b
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Catppuccin
+
+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.
diff --git a/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/README.md b/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/README.md
new file mode 100644
index 0000000..737a6aa
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/README.md
@@ -0,0 +1,36 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Catppuccin Frappe Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```sh
+ya pkg add yazi-rs/flavors:catppuccin-frappe
+```
+
+## ⚙️ Usage
+
+Set the content of your `theme.toml` to enable it as your _dark_ flavor:
+
+```toml
+[flavor]
+dark = "catppuccin-frappe"
+```
+
+Make sure your `theme.toml` doesn't contain anything other than `[flavor]`, unless you want to override certain styles of this flavor.
+
+See the [Yazi flavor documentation](https://yazi-rs.github.io/docs/flavors/overview) for more details.
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/flavor.toml b/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/flavor.toml
new file mode 100644
index 0000000..bb32478
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/flavor.toml
@@ -0,0 +1,189 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[mgr]
+cwd = { fg = "#81c8be" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "#e5c890", bold = true, italic = true, underline = true }
+find_position = { fg = "#f4b8e4", bg = "reset", bold = true, italic = true }
+
+# Marker
+marker_copied = { fg = "#a6d189", bg = "#a6d189" }
+marker_cut = { fg = "#e78284", bg = "#e78284" }
+marker_marked = { fg = "#81c8be", bg = "#81c8be" }
+marker_selected = { fg = "#e5c890", bg = "#e5c890" }
+
+# Count
+count_copied = { fg = "#303446", bg = "#a6d189" }
+count_cut = { fg = "#303446", bg = "#e78284" }
+count_selected = { fg = "#303446", bg = "#e5c890" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "#838ba7" }
+
+# : }}}
+
+
+# : Tabs {{{
+
+[tabs]
+active = { fg = "#303446", bg = "#8caaee", bold = true }
+inactive = { fg = "#8caaee", bg = "#414559" }
+
+# : }}}
+
+
+# : Mode {{{
+
+[mode]
+
+normal_main = { fg = "#303446", bg = "#8caaee", bold = true }
+normal_alt = { fg = "#8caaee", bg = "#414559" }
+
+# Select mode
+select_main = { fg = "#303446", bg = "#81c8be", bold = true }
+select_alt = { fg = "#81c8be", bg = "#414559" }
+
+# Unset mode
+unset_main = { fg = "#303446", bg = "#eebebe", bold = true }
+unset_alt = { fg = "#eebebe", bg = "#414559" }
+
+# : }}}
+
+
+# : Status bar {{{
+
+[status]
+# Permissions
+perm_sep = { fg = "#838ba7" }
+perm_type = { fg = "#8caaee" }
+perm_read = { fg = "#e5c890" }
+perm_write = { fg = "#e78284" }
+perm_exec = { fg = "#a6d189" }
+
+# Progress
+progress_label = { fg = "#ffffff", bold = true }
+progress_normal = { fg = "#8caaee", bg = "#51576d" }
+progress_error = { fg = "#8caaee", bg = "#e78284" }
+
+# : }}}
+
+
+# : Pick {{{
+
+[pick]
+border = { fg = "#8caaee" }
+active = { fg = "#f4b8e4", bold = true }
+inactive = {}
+
+# : }}}
+
+
+# : Input {{{
+
+[input]
+border = { fg = "#8caaee" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+# : }}}
+
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "#8caaee" }
+
+# : }}}
+
+
+# : Tasks {{{
+
+[tasks]
+border = { fg = "#8caaee" }
+title = {}
+hovered = { fg = "#f4b8e4", bold = true }
+
+# : }}}
+
+
+# : Which {{{
+
+[which]
+mask = { bg = "#414559" }
+cand = { fg = "#81c8be" }
+rest = { fg = "#949cbb" }
+desc = { fg = "#f4b8e4" }
+separator = "  "
+separator_style = { fg = "#626880" }
+
+# : }}}
+
+
+# : Help {{{
+
+[help]
+on = { fg = "#81c8be" }
+run = { fg = "#f4b8e4" }
+hovered = { reversed = true, bold = true }
+footer = { fg = "#414559", bg = "#c6d0f5" }
+
+# : }}}
+
+
+# : Spotter {{{
+
+[spot]
+border = { fg = "#8caaee" }
+title = { fg = "#8caaee" }
+tbl_col = { fg = "#81c8be" }
+tbl_cell = { fg = "#f4b8e4", bg = "#51576d" }
+
+# : }}}
+
+
+# : Notification {{{
+
+[notify]
+title_info = { fg = "#a6d189" }
+title_warn = { fg = "#e5c890" }
+title_error = { fg = "#e78284" }
+
+# : }}}
+
+
+# : File-specific styles {{{
+
+[filetype]
+
+rules = [
+ # Images
+ { mime = "image/*", fg = "#81c8be" },
+
+ # Media
+ { mime = "{audio,video}/*", fg = "#e5c890" },
+
+ # Archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#f4b8e4" },
+
+ # Documents
+ { mime = "application/{pdf,doc,rtf}", fg = "#a6d189" },
+
+ # Fallback
+ { url = "*", fg = "#c6d0f5" },
+ { url = "*/", fg = "#8caaee" },
+
+ # TODO: remove
+ { name = "*", fg = "#c6d0f5" },
+ { name = "*/", fg = "#8caaee" }
+]
+
+# : }}}
diff --git a/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/preview.png b/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/preview.png
new file mode 100644
index 0000000..03203c9
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/tmtheme.xml
new file mode 100644
index 0000000..6d0a97f
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-frappe.yazi/tmtheme.xml
@@ -0,0 +1,2112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>name</key>
+ <string>Catppuccin Frappé</string>
+ <key>semanticClass</key>
+ <string>theme.dark.catppuccin-frappé</string>
+ <key>uuid</key>
+ <string>e0ada983-8938-490c-86f0-97a1a0ec58e4</string>
+ <key>author</key>
+ <string>Catppuccin Org</string>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#303446</string>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ <key>caret</key>
+ <string>#f2d5cf</string>
+ <key>lineHighlight</key>
+ <string>#414559</string>
+ <key>misspelling</key>
+ <string>#e78284</string>
+ <key>accent</key>
+ <string>#ca9ee6</string>
+ <key>selection</key>
+ <string>#949cbb40</string>
+ <key>activeGuide</key>
+ <string>#51576d</string>
+ <key>findHighlight</key>
+ <string>#506373</string>
+ <key>gutterForeground</key>
+ <string>#838ba7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Basic text &amp; variable names (incl. leading punctuation)</string>
+ <key>scope</key>
+ <string>text, source, variable.other.readwrite, punctuation.definition.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Parentheses, Brackets, Braces</string>
+ <key>scope</key>
+ <string>punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#949cbb</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comments</string>
+ <key>scope</key>
+ <string>comment, punctuation.definition.comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#949cbb</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>string, punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6d189</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>constant.character.escape</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Booleans, constants, numbers</string>
+ <key>scope</key>
+ <string>constant.numeric, variable.other.constant, entity.name.constant, constant.language.boolean, constant.language.false, constant.language.true, keyword.other.unit.user-defined, keyword.other.unit.suffix.floating-point</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>keyword, keyword.operator.word, keyword.operator.new, variable.language.super, support.type.primitive, storage.type, storage.modifier, punctuation.definition.keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.tag.documentation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation</string>
+ <key>scope</key>
+ <string>keyword.operator, punctuation.accessor, punctuation.definition.generic, meta.function.closure punctuation.section.parameters, punctuation.definition.tag, punctuation.separator.key-value</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.function, meta.function-call.method, support.function, support.function.misc, variable.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Classes</string>
+ <key>scope</key>
+ <string>entity.name.class, entity.other.inherited-class, support.class, meta.function-call.constructor, entity.name.struct</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Enum</string>
+ <key>scope</key>
+ <string>entity.name.enum</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Enum member</string>
+ <key>scope</key>
+ <string>meta.enum variable.other.readwrite, variable.other.enummember</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object properties</string>
+ <key>scope</key>
+ <string>meta.property.object</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Types</string>
+ <key>scope</key>
+ <string>meta.type, meta.type-alias, support.type, entity.name.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Decorators</string>
+ <key>scope</key>
+ <string>meta.annotation variable.function, meta.annotation variable.annotation.function, meta.annotation punctuation.definition.annotation, meta.decorator, punctuation.decorator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>variable.parameter, meta.function.parameters</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea999c</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-ins</string>
+ <key>scope</key>
+ <string>constant.language, support.function.builtin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.other.attribute-name.documentation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Preprocessor directives</string>
+ <key>scope</key>
+ <string>keyword.control.directive, punctuation.definition.directive</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Type parameters</string>
+ <key>scope</key>
+ <string>punctuation.definition.typeparameters</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#99d1db</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Namespaces</string>
+ <key>scope</key>
+ <string>entity.name.namespace</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Property names (left hand assignments in json/yaml/css)</string>
+ <key>scope</key>
+ <string>support.type.property-name.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>This/Self keyword</string>
+ <key>scope</key>
+ <string>variable.language.this, variable.language.this punctuation.definition.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object properties</string>
+ <key>scope</key>
+ <string>variable.object.property</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String template interpolation</string>
+ <key>scope</key>
+ <string>string.template variable, string variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>`new` as bold</string>
+ <key>scope</key>
+ <string>keyword.operator.new</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ extern keyword</string>
+ <key>scope</key>
+ <string>storage.modifier.specifier.extern.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ scope resolution</string>
+ <key>scope</key>
+ <string>entity.name.scope-resolution.template.call.cpp, entity.name.scope-resolution.parameter.cpp, entity.name.scope-resolution.cpp, entity.name.scope-resolution.function.definition.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ doc keywords</string>
+ <key>scope</key>
+ <string>storage.type.class.doxygen</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ operators</string>
+ <key>scope</key>
+ <string>storage.modifier.reference.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# Interpolated Strings</string>
+ <key>scope</key>
+ <string>meta.interpolation.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# xml-style docs</string>
+ <key>scope</key>
+ <string>comment.block.documentation.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Classes, reflecting the className color in JSX</string>
+ <key>scope</key>
+ <string>source.css entity.other.attribute-name.class.css, entity.other.attribute-name.parent-selector.css punctuation.definition.entity.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Operators</string>
+ <key>scope</key>
+ <string>punctuation.separator.operator.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Pseudo classes</string>
+ <key>scope</key>
+ <string>source.css entity.other.attribute-name.pseudo-class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>source.css constant.other.unicode-range</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>source.css variable.parameter.url</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6d189</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS vendored property names</string>
+ <key>scope</key>
+ <string>support.type.vendored.property-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#99d1db</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Less/SCSS right-hand variables (@/$-prefixed)</string>
+ <key>scope</key>
+ <string>source.css meta.property-value variable, source.css meta.property-value variable.other.less, source.css meta.property-value variable.other.less punctuation.definition.variable.less, meta.definition.variable.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea999c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS variables (--prefixed)</string>
+ <key>scope</key>
+ <string>source.css meta.property-list variable, meta.property-list variable.other.less, meta.property-list variable.other.less punctuation.definition.variable.less</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Percentage values, styled the same as numbers</string>
+ <key>scope</key>
+ <string>keyword.other.unit.percentage.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Attribute selectors, styled the same as strings</string>
+ <key>scope</key>
+ <string>source.css meta.attribute-selector</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6d189</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON/YAML keys, other left-hand assignments</string>
+ <key>scope</key>
+ <string>keyword.other.definition.ini, punctuation.support.type.property-name.json, support.type.property-name.json, punctuation.support.type.property-name.toml, support.type.property-name.toml, entity.name.tag.yaml, punctuation.support.type.property-name.yaml, support.type.property-name.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON/YAML constants</string>
+ <key>scope</key>
+ <string>constant.language.json, constant.language.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML anchors</string>
+ <key>scope</key>
+ <string>entity.name.type.anchor.yaml, variable.other.alias.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TOML tables / ini groups</string>
+ <key>scope</key>
+ <string>support.type.property-name.table, entity.name.section.group-title.ini</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TOML dates</string>
+ <key>scope</key>
+ <string>constant.other.time.datetime.offset.toml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML anchor puctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.anchor.yaml, punctuation.definition.alias.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML triple dashes</string>
+ <key>scope</key>
+ <string>entity.other.document.begin.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Diff</string>
+ <key>scope</key>
+ <string>markup.changed.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff</string>
+ <key>scope</key>
+ <string>meta.diff.header.from-file, meta.diff.header.to-file, punctuation.definition.from-file.diff, punctuation.definition.to-file.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Inserted</string>
+ <key>scope</key>
+ <string>markup.inserted.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6d189</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Deleted</string>
+ <key>scope</key>
+ <string>markup.deleted.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>dotenv left-hand side assignments</string>
+ <key>scope</key>
+ <string>variable.other.env</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>dotenv reference to existing env variable</string>
+ <key>scope</key>
+ <string>string.quoted variable.other.env</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GDScript functions</string>
+ <key>scope</key>
+ <string>support.function.builtin.gdscript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GDScript constants</string>
+ <key>scope</key>
+ <string>constant.language.gdscript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment keywords</string>
+ <key>scope</key>
+ <string>comment meta.annotation.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea999c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>go:embed, go:build, etc.</string>
+ <key>scope</key>
+ <string>comment meta.annotation.parameters.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Go constants (nil, true, false)</string>
+ <key>scope</key>
+ <string>constant.language.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL variables</string>
+ <key>scope</key>
+ <string>variable.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL aliases</string>
+ <key>scope</key>
+ <string>string.unquoted.alias.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eebebe</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL enum members</string>
+ <key>scope</key>
+ <string>constant.character.enum.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL field in types</string>
+ <key>scope</key>
+ <string>meta.objectvalues.graphql constant.object.key.graphql string.unquoted.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eebebe</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML/XML DOCTYPE as keyword</string>
+ <key>scope</key>
+ <string>keyword.other.doctype, meta.tag.sgml.doctype punctuation.definition.tag, meta.tag.metadata.doctype entity.name.tag, meta.tag.metadata.doctype punctuation.definition.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML/XML-like &lt;tags/&gt;</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Special characters like &amp;amp;</string>
+ <key>scope</key>
+ <string>text.html constant.character.entity, text.html constant.character.entity punctuation, constant.character.entity.xml, constant.character.entity.xml punctuation, constant.character.entity.js.jsx, constant.charactger.entity.js.jsx punctuation, constant.character.entity.tsx, constant.character.entity.tsx punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML/XML tag attribute values</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Components</string>
+ <key>scope</key>
+ <string>support.class.component, support.class.component.jsx, support.class.component.tsx, support.class.component.vue</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Annotations</string>
+ <key>scope</key>
+ <string>punctuation.definition.annotation, storage.type.annotation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java enums</string>
+ <key>scope</key>
+ <string>constant.other.enum.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java imports</string>
+ <key>scope</key>
+ <string>storage.modifier.import.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Javadoc</string>
+ <key>scope</key>
+ <string>comment.block.javadoc.java keyword.other.documentation.javadoc.java</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Exported Variable</string>
+ <key>scope</key>
+ <string>meta.export variable.other.readwrite.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea999c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JS/TS constants &amp; properties</string>
+ <key>scope</key>
+ <string>variable.other.constant.js, variable.other.constant.ts, variable.other.property.js, variable.other.property.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSDoc; these are mainly params, so styled as such</string>
+ <key>scope</key>
+ <string>variable.other.jsdoc, comment.block.documentation variable.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea999c</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSDoc keywords</string>
+ <key>scope</key>
+ <string>storage.type.class.jsdoc</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>support.type.object.console.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Node constants as keywords (module, etc.)</string>
+ <key>scope</key>
+ <string>support.constant.node, support.type.object.module.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>implements as keyword</string>
+ <key>scope</key>
+ <string>storage.modifier.implements</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Builtin types</string>
+ <key>scope</key>
+ <string>constant.language.null.js, constant.language.null.ts, constant.language.undefined.js, constant.language.undefined.ts, support.type.builtin.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>variable.parameter.generic</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Arrow functions</string>
+ <key>scope</key>
+ <string>keyword.declaration.function.arrow.js, storage.type.function.arrow.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Decorator punctuations (decorators inherit from blue functions, instead of styleguide peach)</string>
+ <key>scope</key>
+ <string>punctuation.decorator.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Extra JS/TS keywords</string>
+ <key>scope</key>
+ <string>keyword.operator.expression.in.js, keyword.operator.expression.in.ts, keyword.operator.expression.infer.ts, keyword.operator.expression.instanceof.js, keyword.operator.expression.instanceof.ts, keyword.operator.expression.is, keyword.operator.expression.keyof.ts, keyword.operator.expression.of.js, keyword.operator.expression.of.ts, keyword.operator.expression.typeof.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia macros</string>
+ <key>scope</key>
+ <string>support.function.macro.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia language constants (true, false)</string>
+ <key>scope</key>
+ <string>constant.language.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia other constants (these seem to be arguments inside arrays)</string>
+ <key>scope</key>
+ <string>constant.other.symbol.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea999c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTeX preamble</string>
+ <key>scope</key>
+ <string>text.tex keyword.control.preamble</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTeX be functions</string>
+ <key>scope</key>
+ <string>text.tex support.function.be</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#99d1db</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTeX math</string>
+ <key>scope</key>
+ <string>constant.other.general.math.tex</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eebebe</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Liquid Builtin Objects &amp; User Defined Variables</string>
+ <key>scope</key>
+ <string>variable.language.liquid</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lua docstring keywords</string>
+ <key>scope</key>
+ <string>comment.line.double-dash.documentation.lua storage.type.annotation.lua</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lua docstring variables</string>
+ <key>scope</key>
+ <string>comment.line.double-dash.documentation.lua entity.name.variable.lua, comment.line.double-dash.documentation.lua variable.lua</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.1.markdown punctuation.definition.heading.markdown, heading.1.markdown, heading.1.quarto punctuation.definition.heading.quarto, heading.1.quarto, markup.heading.atx.1.mdx, markup.heading.atx.1.mdx punctuation.definition.heading.mdx, markup.heading.setext.1.markdown, markup.heading.heading-0.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.2.markdown punctuation.definition.heading.markdown, heading.2.markdown, heading.2.quarto punctuation.definition.heading.quarto, heading.2.quarto, markup.heading.atx.2.mdx, markup.heading.atx.2.mdx punctuation.definition.heading.mdx, markup.heading.setext.2.markdown, markup.heading.heading-1.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.3.markdown punctuation.definition.heading.markdown, heading.3.markdown, heading.3.quarto punctuation.definition.heading.quarto, heading.3.quarto, markup.heading.atx.3.mdx, markup.heading.atx.3.mdx punctuation.definition.heading.mdx, markup.heading.heading-2.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.4.markdown punctuation.definition.heading.markdown, heading.4.markdown, heading.4.quarto punctuation.definition.heading.quarto, heading.4.quarto, markup.heading.atx.4.mdx, markup.heading.atx.4.mdx punctuation.definition.heading.mdx, markup.heading.heading-3.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6d189</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.5.markdown punctuation.definition.heading.markdown, heading.5.markdown, heading.5.quarto punctuation.definition.heading.quarto, heading.5.quarto, markup.heading.atx.5.mdx, markup.heading.atx.5.mdx punctuation.definition.heading.mdx, markup.heading.heading-4.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#85c1dc</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.6.markdown punctuation.definition.heading.markdown, heading.6.markdown, heading.6.quarto punctuation.definition.heading.quarto, heading.6.quarto, markup.heading.atx.6.mdx, markup.heading.atx.6.mdx punctuation.definition.heading.mdx, markup.heading.heading-5.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#babbf1</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.bold</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.italic</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.strikethrough</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a5adce</string>
+ <key>fontStyle</key>
+ <string>strikethrough</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown auto links</string>
+ <key>scope</key>
+ <string>punctuation.definition.link, markup.underline.link</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown links</string>
+ <key>scope</key>
+ <string>text.html.markdown punctuation.definition.link.title, text.html.quarto punctuation.definition.link.title, string.other.link.title.markdown, string.other.link.title.quarto, markup.link, punctuation.definition.constant.markdown, punctuation.definition.constant.quarto, constant.other.reference.link.markdown, constant.other.reference.link.quarto, markup.substitution.attribute-reference</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#babbf1</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown code spans</string>
+ <key>scope</key>
+ <string>punctuation.definition.raw.markdown, punctuation.definition.raw.quarto, markup.inline.raw.string.markdown, markup.inline.raw.string.quarto, markup.raw.block.markdown, markup.raw.block.quarto</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6d189</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown triple backtick language identifier</string>
+ <key>scope</key>
+ <string>fenced_code.block.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#99d1db</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown triple backticks</string>
+ <key>scope</key>
+ <string>markup.fenced_code.block punctuation.definition, markup.raw support.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#949cbb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown quotes</string>
+ <key>scope</key>
+ <string>markup.quote, punctuation.definition.quote.begin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown separators</string>
+ <key>scope</key>
+ <string>meta.separator.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown list bullets</string>
+ <key>scope</key>
+ <string>punctuation.definition.list.begin.markdown, punctuation.definition.list.begin.quarto, markup.list.bullet</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Quarto headings</string>
+ <key>scope</key>
+ <string>markup.heading.quarto</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix attribute names</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.multipart.nix, entity.other.attribute-name.single.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix parameter names</string>
+ <key>scope</key>
+ <string>variable.parameter.name.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix interpolated parameter names</string>
+ <key>scope</key>
+ <string>meta.embedded variable.parameter.name.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#babbf1</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix paths</string>
+ <key>scope</key>
+ <string>string.unquoted.path.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP Attributes</string>
+ <key>scope</key>
+ <string>support.attribute.builtin, meta.attribute.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP Parameters (needed for the leading dollar sign)</string>
+ <key>scope</key>
+ <string>meta.function.parameters.php punctuation.definition.variable.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea999c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP Constants (null, __FILE__, etc.)</string>
+ <key>scope</key>
+ <string>constant.language.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP functions</string>
+ <key>scope</key>
+ <string>text.html.php support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#99d1db</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHPdoc keywords</string>
+ <key>scope</key>
+ <string>keyword.other.phpdoc.php</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python argument functions reset to text, otherwise they inherit blue from function-call</string>
+ <key>scope</key>
+ <string>support.variable.magic.python, meta.function-call.arguments.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python double underscore functions</string>
+ <key>scope</key>
+ <string>support.function.magic.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#99d1db</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python `self` keyword</string>
+ <key>scope</key>
+ <string>variable.parameter.function.language.special.self.python, variable.language.special.self.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python keyword flow/logical (for ... in)</string>
+ <key>scope</key>
+ <string>keyword.control.flow.python, keyword.operator.logical.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python storage type</string>
+ <key>scope</key>
+ <string>storage.type.function.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python function support</string>
+ <key>scope</key>
+ <string>support.token.decorator.python, meta.function.decorator.identifier.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#99d1db</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python function calls</string>
+ <key>scope</key>
+ <string>meta.function-call.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python function decorators</string>
+ <key>scope</key>
+ <string>entity.name.function.decorator.python, punctuation.definition.decorator.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python placeholder reset to normal string</string>
+ <key>scope</key>
+ <string>constant.character.format.placeholder.other.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python exception &amp; builtins such as exit()</string>
+ <key>scope</key>
+ <string>support.type.exception.python, support.function.builtin.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>entity.name.type</string>
+ <key>scope</key>
+ <string>support.type.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python constants (True/False)</string>
+ <key>scope</key>
+ <string>constant.language.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Arguments accessed later in the function body</string>
+ <key>scope</key>
+ <string>meta.indexed-name.python, meta.item-access.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea999c</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python f-strings/binary/unicode storage types</string>
+ <key>scope</key>
+ <string>storage.type.string.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6d189</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python type hints</string>
+ <key>scope</key>
+ <string>meta.function.parameters.python</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex string begin/end in JS/TS</string>
+ <key>scope</key>
+ <string>string.regexp punctuation.definition.string.begin, string.regexp punctuation.definition.string.end</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex anchors (^, $)</string>
+ <key>scope</key>
+ <string>keyword.control.anchor.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex regular string match</string>
+ <key>scope</key>
+ <string>string.regexp.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex group parenthesis &amp; backreference (\1, \2, \3, ...)</string>
+ <key>scope</key>
+ <string>punctuation.definition.group.regexp, keyword.other.back-reference.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6d189</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex character class []</string>
+ <key>scope</key>
+ <string>punctuation.definition.character-class.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex character classes (\d, \w, \s)</string>
+ <key>scope</key>
+ <string>constant.other.character-class.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex range</string>
+ <key>scope</key>
+ <string>constant.other.character-class.range.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f2d5cf</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex quantifier</string>
+ <key>scope</key>
+ <string>keyword.operator.quantifier.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex constant/numeric</string>
+ <key>scope</key>
+ <string>constant.character.numeric.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex lookaheads, negative lookaheads, lookbehinds, negative lookbehinds</string>
+ <key>scope</key>
+ <string>punctuation.definition.group.no-capture.regexp, meta.assertion.look-ahead.regexp, meta.assertion.negative-look-ahead.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust attribute</string>
+ <key>scope</key>
+ <string>meta.annotation.rust, meta.annotation.rust punctuation, meta.attribute.rust, punctuation.definition.attribute.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust attribute strings</string>
+ <key>scope</key>
+ <string>meta.attribute.rust string.quoted.double.rust, meta.attribute.rust string.quoted.single.char.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust keyword</string>
+ <key>scope</key>
+ <string>entity.name.function.macro.rules.rust, storage.type.module.rust, storage.modifier.rust, storage.type.struct.rust, storage.type.enum.rust, storage.type.trait.rust, storage.type.union.rust, storage.type.impl.rust, storage.type.rust, storage.type.function.rust, storage.type.type.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust u/i32, u/i64, etc.</string>
+ <key>scope</key>
+ <string>entity.name.type.numeric.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust generic</string>
+ <key>scope</key>
+ <string>meta.generic.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust impl</string>
+ <key>scope</key>
+ <string>entity.name.impl.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust module</string>
+ <key>scope</key>
+ <string>entity.name.module.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust trait</string>
+ <key>scope</key>
+ <string>entity.name.trait.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust struct</string>
+ <key>scope</key>
+ <string>storage.type.source.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust union</string>
+ <key>scope</key>
+ <string>entity.name.union.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust enum member</string>
+ <key>scope</key>
+ <string>meta.enum.rust storage.type.source.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust macro</string>
+ <key>scope</key>
+ <string>support.macro.rust, meta.macro.rust support.function.rust, entity.name.function.macro.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust lifetime</string>
+ <key>scope</key>
+ <string>storage.modifier.lifetime.rust, entity.name.type.lifetime</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust string formatting</string>
+ <key>scope</key>
+ <string>string.quoted.double.rust constant.other.placeholder.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust return type generic</string>
+ <key>scope</key>
+ <string>meta.function.return-type.rust meta.generic.rust storage.type.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust functions</string>
+ <key>scope</key>
+ <string>meta.function.call.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust angle brackets</string>
+ <key>scope</key>
+ <string>punctuation.brackets.angle.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#99d1db</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust constants</string>
+ <key>scope</key>
+ <string>constant.other.caps.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust function parameters</string>
+ <key>scope</key>
+ <string>meta.function.definition.rust variable.other.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea999c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust closure variables</string>
+ <key>scope</key>
+ <string>meta.function.call.rust variable.other.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust self</string>
+ <key>scope</key>
+ <string>variable.language.self.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust metavariable names</string>
+ <key>scope</key>
+ <string>variable.other.metavariable.name.rust, meta.macro.metavariable.rust keyword.operator.macro.dollar.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell shebang</string>
+ <key>scope</key>
+ <string>comment.line.shebang, comment.line.shebang punctuation.definition.comment, comment.line.shebang, punctuation.definition.comment.shebang.shell, meta.shebang.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell shebang command</string>
+ <key>scope</key>
+ <string>comment.line.shebang constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell interpolated command</string>
+ <key>scope</key>
+ <string>meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation, meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell interpolated command variable</string>
+ <key>scope</key>
+ <string>meta.string meta.interpolation.parameter.shell variable.other.readwrite</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>source.shell punctuation.section.interpolation, punctuation.definition.evaluation.backticks.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell EOF</string>
+ <key>scope</key>
+ <string>entity.name.tag.heredoc.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell quoted variable</string>
+ <key>scope</key>
+ <string>string.quoted.double.shell variable.other.normal.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6d0f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.typst</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Keys</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.key string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON key surrounding quotes</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.key punctuation.definition.string.begin, source.json meta.mapping.key punctuation.definition.string.end</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#949cbb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.synopsis.man, markup.heading.title.man, markup.heading.other.man, markup.heading.env.man</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ca9ee6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.commands.man</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8caaee</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.env.man</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4b8e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Man page options</string>
+ <key>scope</key>
+ <string>entity.name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#81c8be</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.1.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e78284</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.2.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ef9f76</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e5c890</string>
+ </dict>
+ </dict>
+ </array>
+ </dict>
+</plist> \ No newline at end of file
diff --git a/fedora/.config/yazi/flavors/catppuccin-latte.yazi/LICENSE b/fedora/.config/yazi/flavors/catppuccin-latte.yazi/LICENSE
new file mode 100644
index 0000000..fb5b1d6
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-latte.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 yazi-rs
+
+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.
diff --git a/fedora/.config/yazi/flavors/catppuccin-latte.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/catppuccin-latte.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..006383b
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-latte.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Catppuccin
+
+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.
diff --git a/fedora/.config/yazi/flavors/catppuccin-latte.yazi/README.md b/fedora/.config/yazi/flavors/catppuccin-latte.yazi/README.md
new file mode 100644
index 0000000..ea1c35e
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-latte.yazi/README.md
@@ -0,0 +1,36 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Catppuccin Latte Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```sh
+ya pkg add yazi-rs/flavors:catppuccin-latte
+```
+
+## ⚙️ Usage
+
+Set the content of your `theme.toml` to enable it as your _light_ flavor:
+
+```toml
+[flavor]
+light = "catppuccin-latte"
+```
+
+Make sure your `theme.toml` doesn't contain anything other than `[flavor]`, unless you want to override certain styles of this flavor.
+
+See the [Yazi flavor documentation](https://yazi-rs.github.io/docs/flavors/overview) for more details.
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/catppuccin-latte.yazi/flavor.toml b/fedora/.config/yazi/flavors/catppuccin-latte.yazi/flavor.toml
new file mode 100644
index 0000000..ba2bb78
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-latte.yazi/flavor.toml
@@ -0,0 +1,189 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[mgr]
+cwd = { fg = "#179299" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "#df8e1d", bold = true, italic = true, underline = true }
+find_position = { fg = "#ea76cb", bg = "reset", bold = true, italic = true }
+
+# Marker
+marker_copied = { fg = "#40a02b", bg = "#40a02b" }
+marker_cut = { fg = "#d20f39", bg = "#d20f39" }
+marker_marked = { fg = "#179299", bg = "#179299" }
+marker_selected = { fg = "#df8e1d", bg = "#df8e1d" }
+
+# Count
+count_copied = { fg = "#eff1f5", bg = "#40a02b" }
+count_cut = { fg = "#eff1f5", bg = "#d20f39" }
+count_selected = { fg = "#eff1f5", bg = "#df8e1d" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "#8c8fa1" }
+
+# : }}}
+
+
+# : Tabs {{{
+
+[tabs]
+active = { fg = "#eff1f5", bg = "#1e66f5", bold = true }
+inactive = { fg = "#1e66f5", bg = "#ccd0da" }
+
+# : }}}
+
+
+# : Mode {{{
+
+[mode]
+
+normal_main = { fg = "#eff1f5", bg = "#1e66f5", bold = true }
+normal_alt = { fg = "#1e66f5", bg = "#ccd0da" }
+
+# Select mode
+select_main = { fg = "#eff1f5", bg = "#179299", bold = true }
+select_alt = { fg = "#179299", bg = "#ccd0da" }
+
+# Unset mode
+unset_main = { fg = "#eff1f5", bg = "#dd7878", bold = true }
+unset_alt = { fg = "#dd7878", bg = "#ccd0da" }
+
+# : }}}
+
+
+# : Status bar {{{
+
+[status]
+# Permissions
+perm_sep = { fg = "#8c8fa1" }
+perm_type = { fg = "#1e66f5" }
+perm_read = { fg = "#df8e1d" }
+perm_write = { fg = "#d20f39" }
+perm_exec = { fg = "#40a02b" }
+
+# Progress
+progress_label = { fg = "#ffffff", bold = true }
+progress_normal = { fg = "#1e66f5", bg = "#bcc0cc" }
+progress_error = { fg = "#1e66f5", bg = "#d20f39" }
+
+# : }}}
+
+
+# : Pick {{{
+
+[pick]
+border = { fg = "#1e66f5" }
+active = { fg = "#ea76cb", bold = true }
+inactive = {}
+
+# : }}}
+
+
+# : Input {{{
+
+[input]
+border = { fg = "#1e66f5" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+# : }}}
+
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "#1e66f5" }
+
+# : }}}
+
+
+# : Tasks {{{
+
+[tasks]
+border = { fg = "#1e66f5" }
+title = {}
+hovered = { fg = "#ea76cb", bold = true }
+
+# : }}}
+
+
+# : Which {{{
+
+[which]
+mask = { bg = "#ccd0da" }
+cand = { fg = "#179299" }
+rest = { fg = "#7c7f93" }
+desc = { fg = "#ea76cb" }
+separator = "  "
+separator_style = { fg = "#acb0be" }
+
+# : }}}
+
+
+# : Help {{{
+
+[help]
+on = { fg = "#179299" }
+run = { fg = "#ea76cb" }
+hovered = { reversed = true, bold = true }
+footer = { fg = "#ccd0da", bg = "#4c4f69" }
+
+# : }}}
+
+
+# : Spotter {{{
+
+[spot]
+border = { fg = "#1e66f5" }
+title = { fg = "#1e66f5" }
+tbl_col = { fg = "#179299" }
+tbl_cell = { fg = "#ea76cb", bg = "#bcc0cc" }
+
+# : }}}
+
+
+# : Notification {{{
+
+[notify]
+title_info = { fg = "#40a02b" }
+title_warn = { fg = "#df8e1d" }
+title_error = { fg = "#d20f39" }
+
+# : }}}
+
+
+# : File-specific styles {{{
+
+[filetype]
+
+rules = [
+ # Images
+ { mime = "image/*", fg = "#179299" },
+
+ # Media
+ { mime = "{audio,video}/*", fg = "#df8e1d" },
+
+ # Archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#ea76cb" },
+
+ # Documents
+ { mime = "application/{pdf,doc,rtf}", fg = "#40a02b" },
+
+ # Fallback
+ { url = "*", fg = "#4c4f69" },
+ { url = "*/", fg = "#1e66f5" },
+
+ # TODO: remove
+ { name = "*", fg = "#4c4f69" },
+ { name = "*/", fg = "#1e66f5" }
+]
+
+# : }}}
diff --git a/fedora/.config/yazi/flavors/catppuccin-latte.yazi/preview.png b/fedora/.config/yazi/flavors/catppuccin-latte.yazi/preview.png
new file mode 100644
index 0000000..7712450
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-latte.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/catppuccin-latte.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/catppuccin-latte.yazi/tmtheme.xml
new file mode 100644
index 0000000..ddeb349
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-latte.yazi/tmtheme.xml
@@ -0,0 +1,2112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>name</key>
+ <string>Catppuccin Latte</string>
+ <key>semanticClass</key>
+ <string>theme.light.catppuccin-latte</string>
+ <key>uuid</key>
+ <string>96a262cd-4b2f-49f5-9125-8dd0077cbfe1</string>
+ <key>author</key>
+ <string>Catppuccin Org</string>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#eff1f5</string>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ <key>caret</key>
+ <string>#dc8a78</string>
+ <key>lineHighlight</key>
+ <string>#ccd0da</string>
+ <key>misspelling</key>
+ <string>#d20f39</string>
+ <key>accent</key>
+ <string>#8839ef</string>
+ <key>selection</key>
+ <string>#7c7f934d</string>
+ <key>activeGuide</key>
+ <string>#bcc0cc</string>
+ <key>findHighlight</key>
+ <string>#a9daf0</string>
+ <key>gutterForeground</key>
+ <string>#8c8fa1</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Basic text &amp; variable names (incl. leading punctuation)</string>
+ <key>scope</key>
+ <string>text, source, variable.other.readwrite, punctuation.definition.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Parentheses, Brackets, Braces</string>
+ <key>scope</key>
+ <string>punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7c7f93</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comments</string>
+ <key>scope</key>
+ <string>comment, punctuation.definition.comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7c7f93</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>string, punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#40a02b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>constant.character.escape</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Booleans, constants, numbers</string>
+ <key>scope</key>
+ <string>constant.numeric, variable.other.constant, entity.name.constant, constant.language.boolean, constant.language.false, constant.language.true, keyword.other.unit.user-defined, keyword.other.unit.suffix.floating-point</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>keyword, keyword.operator.word, keyword.operator.new, variable.language.super, support.type.primitive, storage.type, storage.modifier, punctuation.definition.keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.tag.documentation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation</string>
+ <key>scope</key>
+ <string>keyword.operator, punctuation.accessor, punctuation.definition.generic, meta.function.closure punctuation.section.parameters, punctuation.definition.tag, punctuation.separator.key-value</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.function, meta.function-call.method, support.function, support.function.misc, variable.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Classes</string>
+ <key>scope</key>
+ <string>entity.name.class, entity.other.inherited-class, support.class, meta.function-call.constructor, entity.name.struct</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Enum</string>
+ <key>scope</key>
+ <string>entity.name.enum</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Enum member</string>
+ <key>scope</key>
+ <string>meta.enum variable.other.readwrite, variable.other.enummember</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object properties</string>
+ <key>scope</key>
+ <string>meta.property.object</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Types</string>
+ <key>scope</key>
+ <string>meta.type, meta.type-alias, support.type, entity.name.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Decorators</string>
+ <key>scope</key>
+ <string>meta.annotation variable.function, meta.annotation variable.annotation.function, meta.annotation punctuation.definition.annotation, meta.decorator, punctuation.decorator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>variable.parameter, meta.function.parameters</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e64553</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-ins</string>
+ <key>scope</key>
+ <string>constant.language, support.function.builtin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.other.attribute-name.documentation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Preprocessor directives</string>
+ <key>scope</key>
+ <string>keyword.control.directive, punctuation.definition.directive</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Type parameters</string>
+ <key>scope</key>
+ <string>punctuation.definition.typeparameters</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#04a5e5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Namespaces</string>
+ <key>scope</key>
+ <string>entity.name.namespace</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Property names (left hand assignments in json/yaml/css)</string>
+ <key>scope</key>
+ <string>support.type.property-name.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>This/Self keyword</string>
+ <key>scope</key>
+ <string>variable.language.this, variable.language.this punctuation.definition.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object properties</string>
+ <key>scope</key>
+ <string>variable.object.property</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String template interpolation</string>
+ <key>scope</key>
+ <string>string.template variable, string variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>`new` as bold</string>
+ <key>scope</key>
+ <string>keyword.operator.new</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ extern keyword</string>
+ <key>scope</key>
+ <string>storage.modifier.specifier.extern.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ scope resolution</string>
+ <key>scope</key>
+ <string>entity.name.scope-resolution.template.call.cpp, entity.name.scope-resolution.parameter.cpp, entity.name.scope-resolution.cpp, entity.name.scope-resolution.function.definition.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ doc keywords</string>
+ <key>scope</key>
+ <string>storage.type.class.doxygen</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ operators</string>
+ <key>scope</key>
+ <string>storage.modifier.reference.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# Interpolated Strings</string>
+ <key>scope</key>
+ <string>meta.interpolation.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# xml-style docs</string>
+ <key>scope</key>
+ <string>comment.block.documentation.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Classes, reflecting the className color in JSX</string>
+ <key>scope</key>
+ <string>source.css entity.other.attribute-name.class.css, entity.other.attribute-name.parent-selector.css punctuation.definition.entity.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Operators</string>
+ <key>scope</key>
+ <string>punctuation.separator.operator.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Pseudo classes</string>
+ <key>scope</key>
+ <string>source.css entity.other.attribute-name.pseudo-class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>source.css constant.other.unicode-range</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>source.css variable.parameter.url</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#40a02b</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS vendored property names</string>
+ <key>scope</key>
+ <string>support.type.vendored.property-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#04a5e5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Less/SCSS right-hand variables (@/$-prefixed)</string>
+ <key>scope</key>
+ <string>source.css meta.property-value variable, source.css meta.property-value variable.other.less, source.css meta.property-value variable.other.less punctuation.definition.variable.less, meta.definition.variable.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e64553</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS variables (--prefixed)</string>
+ <key>scope</key>
+ <string>source.css meta.property-list variable, meta.property-list variable.other.less, meta.property-list variable.other.less punctuation.definition.variable.less</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Percentage values, styled the same as numbers</string>
+ <key>scope</key>
+ <string>keyword.other.unit.percentage.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Attribute selectors, styled the same as strings</string>
+ <key>scope</key>
+ <string>source.css meta.attribute-selector</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#40a02b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON/YAML keys, other left-hand assignments</string>
+ <key>scope</key>
+ <string>keyword.other.definition.ini, punctuation.support.type.property-name.json, support.type.property-name.json, punctuation.support.type.property-name.toml, support.type.property-name.toml, entity.name.tag.yaml, punctuation.support.type.property-name.yaml, support.type.property-name.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON/YAML constants</string>
+ <key>scope</key>
+ <string>constant.language.json, constant.language.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML anchors</string>
+ <key>scope</key>
+ <string>entity.name.type.anchor.yaml, variable.other.alias.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TOML tables / ini groups</string>
+ <key>scope</key>
+ <string>support.type.property-name.table, entity.name.section.group-title.ini</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TOML dates</string>
+ <key>scope</key>
+ <string>constant.other.time.datetime.offset.toml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML anchor puctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.anchor.yaml, punctuation.definition.alias.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML triple dashes</string>
+ <key>scope</key>
+ <string>entity.other.document.begin.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Diff</string>
+ <key>scope</key>
+ <string>markup.changed.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff</string>
+ <key>scope</key>
+ <string>meta.diff.header.from-file, meta.diff.header.to-file, punctuation.definition.from-file.diff, punctuation.definition.to-file.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Inserted</string>
+ <key>scope</key>
+ <string>markup.inserted.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#40a02b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Deleted</string>
+ <key>scope</key>
+ <string>markup.deleted.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>dotenv left-hand side assignments</string>
+ <key>scope</key>
+ <string>variable.other.env</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>dotenv reference to existing env variable</string>
+ <key>scope</key>
+ <string>string.quoted variable.other.env</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GDScript functions</string>
+ <key>scope</key>
+ <string>support.function.builtin.gdscript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GDScript constants</string>
+ <key>scope</key>
+ <string>constant.language.gdscript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment keywords</string>
+ <key>scope</key>
+ <string>comment meta.annotation.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e64553</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>go:embed, go:build, etc.</string>
+ <key>scope</key>
+ <string>comment meta.annotation.parameters.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Go constants (nil, true, false)</string>
+ <key>scope</key>
+ <string>constant.language.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL variables</string>
+ <key>scope</key>
+ <string>variable.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL aliases</string>
+ <key>scope</key>
+ <string>string.unquoted.alias.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dd7878</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL enum members</string>
+ <key>scope</key>
+ <string>constant.character.enum.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL field in types</string>
+ <key>scope</key>
+ <string>meta.objectvalues.graphql constant.object.key.graphql string.unquoted.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dd7878</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML/XML DOCTYPE as keyword</string>
+ <key>scope</key>
+ <string>keyword.other.doctype, meta.tag.sgml.doctype punctuation.definition.tag, meta.tag.metadata.doctype entity.name.tag, meta.tag.metadata.doctype punctuation.definition.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML/XML-like &lt;tags/&gt;</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Special characters like &amp;amp;</string>
+ <key>scope</key>
+ <string>text.html constant.character.entity, text.html constant.character.entity punctuation, constant.character.entity.xml, constant.character.entity.xml punctuation, constant.character.entity.js.jsx, constant.charactger.entity.js.jsx punctuation, constant.character.entity.tsx, constant.character.entity.tsx punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML/XML tag attribute values</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Components</string>
+ <key>scope</key>
+ <string>support.class.component, support.class.component.jsx, support.class.component.tsx, support.class.component.vue</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Annotations</string>
+ <key>scope</key>
+ <string>punctuation.definition.annotation, storage.type.annotation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java enums</string>
+ <key>scope</key>
+ <string>constant.other.enum.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java imports</string>
+ <key>scope</key>
+ <string>storage.modifier.import.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Javadoc</string>
+ <key>scope</key>
+ <string>comment.block.javadoc.java keyword.other.documentation.javadoc.java</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Exported Variable</string>
+ <key>scope</key>
+ <string>meta.export variable.other.readwrite.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e64553</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JS/TS constants &amp; properties</string>
+ <key>scope</key>
+ <string>variable.other.constant.js, variable.other.constant.ts, variable.other.property.js, variable.other.property.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSDoc; these are mainly params, so styled as such</string>
+ <key>scope</key>
+ <string>variable.other.jsdoc, comment.block.documentation variable.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e64553</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSDoc keywords</string>
+ <key>scope</key>
+ <string>storage.type.class.jsdoc</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>support.type.object.console.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Node constants as keywords (module, etc.)</string>
+ <key>scope</key>
+ <string>support.constant.node, support.type.object.module.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>implements as keyword</string>
+ <key>scope</key>
+ <string>storage.modifier.implements</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Builtin types</string>
+ <key>scope</key>
+ <string>constant.language.null.js, constant.language.null.ts, constant.language.undefined.js, constant.language.undefined.ts, support.type.builtin.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>variable.parameter.generic</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Arrow functions</string>
+ <key>scope</key>
+ <string>keyword.declaration.function.arrow.js, storage.type.function.arrow.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Decorator punctuations (decorators inherit from blue functions, instead of styleguide peach)</string>
+ <key>scope</key>
+ <string>punctuation.decorator.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Extra JS/TS keywords</string>
+ <key>scope</key>
+ <string>keyword.operator.expression.in.js, keyword.operator.expression.in.ts, keyword.operator.expression.infer.ts, keyword.operator.expression.instanceof.js, keyword.operator.expression.instanceof.ts, keyword.operator.expression.is, keyword.operator.expression.keyof.ts, keyword.operator.expression.of.js, keyword.operator.expression.of.ts, keyword.operator.expression.typeof.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia macros</string>
+ <key>scope</key>
+ <string>support.function.macro.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia language constants (true, false)</string>
+ <key>scope</key>
+ <string>constant.language.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia other constants (these seem to be arguments inside arrays)</string>
+ <key>scope</key>
+ <string>constant.other.symbol.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e64553</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTeX preamble</string>
+ <key>scope</key>
+ <string>text.tex keyword.control.preamble</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTeX be functions</string>
+ <key>scope</key>
+ <string>text.tex support.function.be</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#04a5e5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTeX math</string>
+ <key>scope</key>
+ <string>constant.other.general.math.tex</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dd7878</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Liquid Builtin Objects &amp; User Defined Variables</string>
+ <key>scope</key>
+ <string>variable.language.liquid</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lua docstring keywords</string>
+ <key>scope</key>
+ <string>comment.line.double-dash.documentation.lua storage.type.annotation.lua</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lua docstring variables</string>
+ <key>scope</key>
+ <string>comment.line.double-dash.documentation.lua entity.name.variable.lua, comment.line.double-dash.documentation.lua variable.lua</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.1.markdown punctuation.definition.heading.markdown, heading.1.markdown, heading.1.quarto punctuation.definition.heading.quarto, heading.1.quarto, markup.heading.atx.1.mdx, markup.heading.atx.1.mdx punctuation.definition.heading.mdx, markup.heading.setext.1.markdown, markup.heading.heading-0.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.2.markdown punctuation.definition.heading.markdown, heading.2.markdown, heading.2.quarto punctuation.definition.heading.quarto, heading.2.quarto, markup.heading.atx.2.mdx, markup.heading.atx.2.mdx punctuation.definition.heading.mdx, markup.heading.setext.2.markdown, markup.heading.heading-1.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.3.markdown punctuation.definition.heading.markdown, heading.3.markdown, heading.3.quarto punctuation.definition.heading.quarto, heading.3.quarto, markup.heading.atx.3.mdx, markup.heading.atx.3.mdx punctuation.definition.heading.mdx, markup.heading.heading-2.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.4.markdown punctuation.definition.heading.markdown, heading.4.markdown, heading.4.quarto punctuation.definition.heading.quarto, heading.4.quarto, markup.heading.atx.4.mdx, markup.heading.atx.4.mdx punctuation.definition.heading.mdx, markup.heading.heading-3.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#40a02b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.5.markdown punctuation.definition.heading.markdown, heading.5.markdown, heading.5.quarto punctuation.definition.heading.quarto, heading.5.quarto, markup.heading.atx.5.mdx, markup.heading.atx.5.mdx punctuation.definition.heading.mdx, markup.heading.heading-4.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#209fb5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.6.markdown punctuation.definition.heading.markdown, heading.6.markdown, heading.6.quarto punctuation.definition.heading.quarto, heading.6.quarto, markup.heading.atx.6.mdx, markup.heading.atx.6.mdx punctuation.definition.heading.mdx, markup.heading.heading-5.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7287fd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.bold</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.italic</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.strikethrough</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#6c6f85</string>
+ <key>fontStyle</key>
+ <string>strikethrough</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown auto links</string>
+ <key>scope</key>
+ <string>punctuation.definition.link, markup.underline.link</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown links</string>
+ <key>scope</key>
+ <string>text.html.markdown punctuation.definition.link.title, text.html.quarto punctuation.definition.link.title, string.other.link.title.markdown, string.other.link.title.quarto, markup.link, punctuation.definition.constant.markdown, punctuation.definition.constant.quarto, constant.other.reference.link.markdown, constant.other.reference.link.quarto, markup.substitution.attribute-reference</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7287fd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown code spans</string>
+ <key>scope</key>
+ <string>punctuation.definition.raw.markdown, punctuation.definition.raw.quarto, markup.inline.raw.string.markdown, markup.inline.raw.string.quarto, markup.raw.block.markdown, markup.raw.block.quarto</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#40a02b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown triple backtick language identifier</string>
+ <key>scope</key>
+ <string>fenced_code.block.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#04a5e5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown triple backticks</string>
+ <key>scope</key>
+ <string>markup.fenced_code.block punctuation.definition, markup.raw support.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7c7f93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown quotes</string>
+ <key>scope</key>
+ <string>markup.quote, punctuation.definition.quote.begin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown separators</string>
+ <key>scope</key>
+ <string>meta.separator.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown list bullets</string>
+ <key>scope</key>
+ <string>punctuation.definition.list.begin.markdown, punctuation.definition.list.begin.quarto, markup.list.bullet</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Quarto headings</string>
+ <key>scope</key>
+ <string>markup.heading.quarto</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix attribute names</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.multipart.nix, entity.other.attribute-name.single.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix parameter names</string>
+ <key>scope</key>
+ <string>variable.parameter.name.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix interpolated parameter names</string>
+ <key>scope</key>
+ <string>meta.embedded variable.parameter.name.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7287fd</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix paths</string>
+ <key>scope</key>
+ <string>string.unquoted.path.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP Attributes</string>
+ <key>scope</key>
+ <string>support.attribute.builtin, meta.attribute.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP Parameters (needed for the leading dollar sign)</string>
+ <key>scope</key>
+ <string>meta.function.parameters.php punctuation.definition.variable.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e64553</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP Constants (null, __FILE__, etc.)</string>
+ <key>scope</key>
+ <string>constant.language.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP functions</string>
+ <key>scope</key>
+ <string>text.html.php support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#04a5e5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHPdoc keywords</string>
+ <key>scope</key>
+ <string>keyword.other.phpdoc.php</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python argument functions reset to text, otherwise they inherit blue from function-call</string>
+ <key>scope</key>
+ <string>support.variable.magic.python, meta.function-call.arguments.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python double underscore functions</string>
+ <key>scope</key>
+ <string>support.function.magic.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#04a5e5</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python `self` keyword</string>
+ <key>scope</key>
+ <string>variable.parameter.function.language.special.self.python, variable.language.special.self.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python keyword flow/logical (for ... in)</string>
+ <key>scope</key>
+ <string>keyword.control.flow.python, keyword.operator.logical.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python storage type</string>
+ <key>scope</key>
+ <string>storage.type.function.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python function support</string>
+ <key>scope</key>
+ <string>support.token.decorator.python, meta.function.decorator.identifier.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#04a5e5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python function calls</string>
+ <key>scope</key>
+ <string>meta.function-call.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python function decorators</string>
+ <key>scope</key>
+ <string>entity.name.function.decorator.python, punctuation.definition.decorator.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python placeholder reset to normal string</string>
+ <key>scope</key>
+ <string>constant.character.format.placeholder.other.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python exception &amp; builtins such as exit()</string>
+ <key>scope</key>
+ <string>support.type.exception.python, support.function.builtin.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>entity.name.type</string>
+ <key>scope</key>
+ <string>support.type.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python constants (True/False)</string>
+ <key>scope</key>
+ <string>constant.language.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Arguments accessed later in the function body</string>
+ <key>scope</key>
+ <string>meta.indexed-name.python, meta.item-access.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e64553</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python f-strings/binary/unicode storage types</string>
+ <key>scope</key>
+ <string>storage.type.string.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#40a02b</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python type hints</string>
+ <key>scope</key>
+ <string>meta.function.parameters.python</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex string begin/end in JS/TS</string>
+ <key>scope</key>
+ <string>string.regexp punctuation.definition.string.begin, string.regexp punctuation.definition.string.end</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex anchors (^, $)</string>
+ <key>scope</key>
+ <string>keyword.control.anchor.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex regular string match</string>
+ <key>scope</key>
+ <string>string.regexp.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex group parenthesis &amp; backreference (\1, \2, \3, ...)</string>
+ <key>scope</key>
+ <string>punctuation.definition.group.regexp, keyword.other.back-reference.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#40a02b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex character class []</string>
+ <key>scope</key>
+ <string>punctuation.definition.character-class.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex character classes (\d, \w, \s)</string>
+ <key>scope</key>
+ <string>constant.other.character-class.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex range</string>
+ <key>scope</key>
+ <string>constant.other.character-class.range.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dc8a78</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex quantifier</string>
+ <key>scope</key>
+ <string>keyword.operator.quantifier.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex constant/numeric</string>
+ <key>scope</key>
+ <string>constant.character.numeric.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex lookaheads, negative lookaheads, lookbehinds, negative lookbehinds</string>
+ <key>scope</key>
+ <string>punctuation.definition.group.no-capture.regexp, meta.assertion.look-ahead.regexp, meta.assertion.negative-look-ahead.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust attribute</string>
+ <key>scope</key>
+ <string>meta.annotation.rust, meta.annotation.rust punctuation, meta.attribute.rust, punctuation.definition.attribute.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust attribute strings</string>
+ <key>scope</key>
+ <string>meta.attribute.rust string.quoted.double.rust, meta.attribute.rust string.quoted.single.char.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust keyword</string>
+ <key>scope</key>
+ <string>entity.name.function.macro.rules.rust, storage.type.module.rust, storage.modifier.rust, storage.type.struct.rust, storage.type.enum.rust, storage.type.trait.rust, storage.type.union.rust, storage.type.impl.rust, storage.type.rust, storage.type.function.rust, storage.type.type.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust u/i32, u/i64, etc.</string>
+ <key>scope</key>
+ <string>entity.name.type.numeric.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust generic</string>
+ <key>scope</key>
+ <string>meta.generic.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust impl</string>
+ <key>scope</key>
+ <string>entity.name.impl.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust module</string>
+ <key>scope</key>
+ <string>entity.name.module.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust trait</string>
+ <key>scope</key>
+ <string>entity.name.trait.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust struct</string>
+ <key>scope</key>
+ <string>storage.type.source.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust union</string>
+ <key>scope</key>
+ <string>entity.name.union.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust enum member</string>
+ <key>scope</key>
+ <string>meta.enum.rust storage.type.source.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust macro</string>
+ <key>scope</key>
+ <string>support.macro.rust, meta.macro.rust support.function.rust, entity.name.function.macro.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust lifetime</string>
+ <key>scope</key>
+ <string>storage.modifier.lifetime.rust, entity.name.type.lifetime</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust string formatting</string>
+ <key>scope</key>
+ <string>string.quoted.double.rust constant.other.placeholder.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust return type generic</string>
+ <key>scope</key>
+ <string>meta.function.return-type.rust meta.generic.rust storage.type.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust functions</string>
+ <key>scope</key>
+ <string>meta.function.call.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust angle brackets</string>
+ <key>scope</key>
+ <string>punctuation.brackets.angle.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#04a5e5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust constants</string>
+ <key>scope</key>
+ <string>constant.other.caps.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust function parameters</string>
+ <key>scope</key>
+ <string>meta.function.definition.rust variable.other.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e64553</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust closure variables</string>
+ <key>scope</key>
+ <string>meta.function.call.rust variable.other.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust self</string>
+ <key>scope</key>
+ <string>variable.language.self.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust metavariable names</string>
+ <key>scope</key>
+ <string>variable.other.metavariable.name.rust, meta.macro.metavariable.rust keyword.operator.macro.dollar.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell shebang</string>
+ <key>scope</key>
+ <string>comment.line.shebang, comment.line.shebang punctuation.definition.comment, comment.line.shebang, punctuation.definition.comment.shebang.shell, meta.shebang.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell shebang command</string>
+ <key>scope</key>
+ <string>comment.line.shebang constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell interpolated command</string>
+ <key>scope</key>
+ <string>meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation, meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell interpolated command variable</string>
+ <key>scope</key>
+ <string>meta.string meta.interpolation.parameter.shell variable.other.readwrite</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>source.shell punctuation.section.interpolation, punctuation.definition.evaluation.backticks.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell EOF</string>
+ <key>scope</key>
+ <string>entity.name.tag.heredoc.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell quoted variable</string>
+ <key>scope</key>
+ <string>string.quoted.double.shell variable.other.normal.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4c4f69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.typst</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Keys</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.key string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON key surrounding quotes</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.key punctuation.definition.string.begin, source.json meta.mapping.key punctuation.definition.string.end</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7c7f93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.synopsis.man, markup.heading.title.man, markup.heading.other.man, markup.heading.env.man</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8839ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.commands.man</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#1e66f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.env.man</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea76cb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Man page options</string>
+ <key>scope</key>
+ <string>entity.name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#179299</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.1.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d20f39</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.2.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe640b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#df8e1d</string>
+ </dict>
+ </dict>
+ </array>
+ </dict>
+</plist> \ No newline at end of file
diff --git a/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/LICENSE b/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/LICENSE
new file mode 100644
index 0000000..fb5b1d6
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 yazi-rs
+
+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.
diff --git a/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..006383b
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Catppuccin
+
+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.
diff --git a/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/README.md b/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/README.md
new file mode 100644
index 0000000..752908c
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/README.md
@@ -0,0 +1,36 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Catppuccin Macchiato Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```sh
+ya pkg add yazi-rs/flavors:catppuccin-macchiato
+```
+
+## ⚙️ Usage
+
+Set the content of your `theme.toml` to enable it as your _dark_ flavor:
+
+```toml
+[flavor]
+dark = "catppuccin-macchiato"
+```
+
+Make sure your `theme.toml` doesn't contain anything other than `[flavor]`, unless you want to override certain styles of this flavor.
+
+See the [Yazi flavor documentation](https://yazi-rs.github.io/docs/flavors/overview) for more details.
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/flavor.toml b/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/flavor.toml
new file mode 100644
index 0000000..9d3042f
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/flavor.toml
@@ -0,0 +1,189 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[mgr]
+cwd = { fg = "#8bd5ca" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "#eed49f", bold = true, italic = true, underline = true }
+find_position = { fg = "#f5bde6", bg = "reset", bold = true, italic = true }
+
+# Marker
+marker_copied = { fg = "#a6da95", bg = "#a6da95" }
+marker_cut = { fg = "#ed8796", bg = "#ed8796" }
+marker_marked = { fg = "#8bd5ca", bg = "#8bd5ca" }
+marker_selected = { fg = "#eed49f", bg = "#eed49f" }
+
+# Count
+count_copied = { fg = "#24273a", bg = "#a6da95" }
+count_cut = { fg = "#24273a", bg = "#ed8796" }
+count_selected = { fg = "#24273a", bg = "#eed49f" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "#8087a2" }
+
+# : }}}
+
+
+# : Tabs {{{
+
+[tabs]
+active = { fg = "#24273a", bg = "#8aadf4", bold = true }
+inactive = { fg = "#8aadf4", bg = "#363a4f" }
+
+# : }}}
+
+
+# : Mode {{{
+
+[mode]
+
+normal_main = { fg = "#24273a", bg = "#8aadf4", bold = true }
+normal_alt = { fg = "#8aadf4", bg = "#363a4f" }
+
+# Select mode
+select_main = { fg = "#24273a", bg = "#8bd5ca", bold = true }
+select_alt = { fg = "#8bd5ca", bg = "#363a4f" }
+
+# Unset mode
+unset_main = { fg = "#24273a", bg = "#f0c6c6", bold = true }
+unset_alt = { fg = "#f0c6c6", bg = "#363a4f" }
+
+# : }}}
+
+
+# : Status bar {{{
+
+[status]
+# Permissions
+perm_sep = { fg = "#8087a2" }
+perm_type = { fg = "#8aadf4" }
+perm_read = { fg = "#eed49f" }
+perm_write = { fg = "#ed8796" }
+perm_exec = { fg = "#a6da95" }
+
+# Progress
+progress_label = { fg = "#ffffff", bold = true }
+progress_normal = { fg = "#8aadf4", bg = "#494d64" }
+progress_error = { fg = "#8aadf4", bg = "#ed8796" }
+
+# : }}}
+
+
+# : Pick {{{
+
+[pick]
+border = { fg = "#8aadf4" }
+active = { fg = "#f5bde6", bold = true }
+inactive = {}
+
+# : }}}
+
+
+# : Input {{{
+
+[input]
+border = { fg = "#8aadf4" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+# : }}}
+
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "#8aadf4" }
+
+# : }}}
+
+
+# : Tasks {{{
+
+[tasks]
+border = { fg = "#8aadf4" }
+title = {}
+hovered = { fg = "#f5bde6", bold = true }
+
+# : }}}
+
+
+# : Which {{{
+
+[which]
+mask = { bg = "#363a4f" }
+cand = { fg = "#8bd5ca" }
+rest = { fg = "#939ab7" }
+desc = { fg = "#f5bde6" }
+separator = "  "
+separator_style = { fg = "#5b6078" }
+
+# : }}}
+
+
+# : Help {{{
+
+[help]
+on = { fg = "#8bd5ca" }
+run = { fg = "#f5bde6" }
+hovered = { reversed = true, bold = true }
+footer = { fg = "#363a4f", bg = "#cad3f5" }
+
+# : }}}
+
+
+# : Spotter {{{
+
+[spot]
+border = { fg = "#8aadf4" }
+title = { fg = "#8aadf4" }
+tbl_col = { fg = "#8bd5ca" }
+tbl_cell = { fg = "#f5bde6", bg = "#494d64" }
+
+# : }}}
+
+
+# : Notification {{{
+
+[notify]
+title_info = { fg = "#a6da95" }
+title_warn = { fg = "#eed49f" }
+title_error = { fg = "#ed8796" }
+
+# : }}}
+
+
+# : File-specific styles {{{
+
+[filetype]
+
+rules = [
+ # Images
+ { mime = "image/*", fg = "#8bd5ca" },
+
+ # Media
+ { mime = "{audio,video}/*", fg = "#eed49f" },
+
+ # Archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#f5bde6" },
+
+ # Documents
+ { mime = "application/{pdf,doc,rtf}", fg = "#a6da95" },
+
+ # Fallback
+ { url = "*", fg = "#cad3f5" },
+ { url = "*/", fg = "#8aadf4" },
+
+ # TODO: remove
+ { name = "*", fg = "#cad3f5" },
+ { name = "*/", fg = "#8aadf4" }
+]
+
+# : }}}
diff --git a/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/preview.png b/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/preview.png
new file mode 100644
index 0000000..a200463
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/tmtheme.xml
new file mode 100644
index 0000000..8f21312
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-macchiato.yazi/tmtheme.xml
@@ -0,0 +1,2112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>name</key>
+ <string>Catppuccin Macchiato</string>
+ <key>semanticClass</key>
+ <string>theme.dark.catppuccin-macchiato</string>
+ <key>uuid</key>
+ <string>02b2bdf3-9eb7-4396-bf04-f17f1468f99f</string>
+ <key>author</key>
+ <string>Catppuccin Org</string>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#24273a</string>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ <key>caret</key>
+ <string>#f4dbd6</string>
+ <key>lineHighlight</key>
+ <string>#363a4f</string>
+ <key>misspelling</key>
+ <string>#ed8796</string>
+ <key>accent</key>
+ <string>#c6a0f6</string>
+ <key>selection</key>
+ <string>#939ab740</string>
+ <key>activeGuide</key>
+ <string>#494d64</string>
+ <key>findHighlight</key>
+ <string>#455c6d</string>
+ <key>gutterForeground</key>
+ <string>#8087a2</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Basic text &amp; variable names (incl. leading punctuation)</string>
+ <key>scope</key>
+ <string>text, source, variable.other.readwrite, punctuation.definition.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Parentheses, Brackets, Braces</string>
+ <key>scope</key>
+ <string>punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#939ab7</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comments</string>
+ <key>scope</key>
+ <string>comment, punctuation.definition.comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#939ab7</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>string, punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6da95</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>constant.character.escape</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Booleans, constants, numbers</string>
+ <key>scope</key>
+ <string>constant.numeric, variable.other.constant, entity.name.constant, constant.language.boolean, constant.language.false, constant.language.true, keyword.other.unit.user-defined, keyword.other.unit.suffix.floating-point</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>keyword, keyword.operator.word, keyword.operator.new, variable.language.super, support.type.primitive, storage.type, storage.modifier, punctuation.definition.keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.tag.documentation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation</string>
+ <key>scope</key>
+ <string>keyword.operator, punctuation.accessor, punctuation.definition.generic, meta.function.closure punctuation.section.parameters, punctuation.definition.tag, punctuation.separator.key-value</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.function, meta.function-call.method, support.function, support.function.misc, variable.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Classes</string>
+ <key>scope</key>
+ <string>entity.name.class, entity.other.inherited-class, support.class, meta.function-call.constructor, entity.name.struct</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Enum</string>
+ <key>scope</key>
+ <string>entity.name.enum</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Enum member</string>
+ <key>scope</key>
+ <string>meta.enum variable.other.readwrite, variable.other.enummember</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object properties</string>
+ <key>scope</key>
+ <string>meta.property.object</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Types</string>
+ <key>scope</key>
+ <string>meta.type, meta.type-alias, support.type, entity.name.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Decorators</string>
+ <key>scope</key>
+ <string>meta.annotation variable.function, meta.annotation variable.annotation.function, meta.annotation punctuation.definition.annotation, meta.decorator, punctuation.decorator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>variable.parameter, meta.function.parameters</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ee99a0</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-ins</string>
+ <key>scope</key>
+ <string>constant.language, support.function.builtin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.other.attribute-name.documentation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Preprocessor directives</string>
+ <key>scope</key>
+ <string>keyword.control.directive, punctuation.definition.directive</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Type parameters</string>
+ <key>scope</key>
+ <string>punctuation.definition.typeparameters</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#91d7e3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Namespaces</string>
+ <key>scope</key>
+ <string>entity.name.namespace</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Property names (left hand assignments in json/yaml/css)</string>
+ <key>scope</key>
+ <string>support.type.property-name.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>This/Self keyword</string>
+ <key>scope</key>
+ <string>variable.language.this, variable.language.this punctuation.definition.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object properties</string>
+ <key>scope</key>
+ <string>variable.object.property</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String template interpolation</string>
+ <key>scope</key>
+ <string>string.template variable, string variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>`new` as bold</string>
+ <key>scope</key>
+ <string>keyword.operator.new</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ extern keyword</string>
+ <key>scope</key>
+ <string>storage.modifier.specifier.extern.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ scope resolution</string>
+ <key>scope</key>
+ <string>entity.name.scope-resolution.template.call.cpp, entity.name.scope-resolution.parameter.cpp, entity.name.scope-resolution.cpp, entity.name.scope-resolution.function.definition.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ doc keywords</string>
+ <key>scope</key>
+ <string>storage.type.class.doxygen</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ operators</string>
+ <key>scope</key>
+ <string>storage.modifier.reference.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# Interpolated Strings</string>
+ <key>scope</key>
+ <string>meta.interpolation.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# xml-style docs</string>
+ <key>scope</key>
+ <string>comment.block.documentation.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Classes, reflecting the className color in JSX</string>
+ <key>scope</key>
+ <string>source.css entity.other.attribute-name.class.css, entity.other.attribute-name.parent-selector.css punctuation.definition.entity.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Operators</string>
+ <key>scope</key>
+ <string>punctuation.separator.operator.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Pseudo classes</string>
+ <key>scope</key>
+ <string>source.css entity.other.attribute-name.pseudo-class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>source.css constant.other.unicode-range</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>source.css variable.parameter.url</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6da95</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS vendored property names</string>
+ <key>scope</key>
+ <string>support.type.vendored.property-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#91d7e3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Less/SCSS right-hand variables (@/$-prefixed)</string>
+ <key>scope</key>
+ <string>source.css meta.property-value variable, source.css meta.property-value variable.other.less, source.css meta.property-value variable.other.less punctuation.definition.variable.less, meta.definition.variable.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ee99a0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS variables (--prefixed)</string>
+ <key>scope</key>
+ <string>source.css meta.property-list variable, meta.property-list variable.other.less, meta.property-list variable.other.less punctuation.definition.variable.less</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Percentage values, styled the same as numbers</string>
+ <key>scope</key>
+ <string>keyword.other.unit.percentage.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Attribute selectors, styled the same as strings</string>
+ <key>scope</key>
+ <string>source.css meta.attribute-selector</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6da95</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON/YAML keys, other left-hand assignments</string>
+ <key>scope</key>
+ <string>keyword.other.definition.ini, punctuation.support.type.property-name.json, support.type.property-name.json, punctuation.support.type.property-name.toml, support.type.property-name.toml, entity.name.tag.yaml, punctuation.support.type.property-name.yaml, support.type.property-name.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON/YAML constants</string>
+ <key>scope</key>
+ <string>constant.language.json, constant.language.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML anchors</string>
+ <key>scope</key>
+ <string>entity.name.type.anchor.yaml, variable.other.alias.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TOML tables / ini groups</string>
+ <key>scope</key>
+ <string>support.type.property-name.table, entity.name.section.group-title.ini</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TOML dates</string>
+ <key>scope</key>
+ <string>constant.other.time.datetime.offset.toml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML anchor puctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.anchor.yaml, punctuation.definition.alias.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML triple dashes</string>
+ <key>scope</key>
+ <string>entity.other.document.begin.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Diff</string>
+ <key>scope</key>
+ <string>markup.changed.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff</string>
+ <key>scope</key>
+ <string>meta.diff.header.from-file, meta.diff.header.to-file, punctuation.definition.from-file.diff, punctuation.definition.to-file.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Inserted</string>
+ <key>scope</key>
+ <string>markup.inserted.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6da95</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Deleted</string>
+ <key>scope</key>
+ <string>markup.deleted.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>dotenv left-hand side assignments</string>
+ <key>scope</key>
+ <string>variable.other.env</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>dotenv reference to existing env variable</string>
+ <key>scope</key>
+ <string>string.quoted variable.other.env</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GDScript functions</string>
+ <key>scope</key>
+ <string>support.function.builtin.gdscript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GDScript constants</string>
+ <key>scope</key>
+ <string>constant.language.gdscript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment keywords</string>
+ <key>scope</key>
+ <string>comment meta.annotation.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ee99a0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>go:embed, go:build, etc.</string>
+ <key>scope</key>
+ <string>comment meta.annotation.parameters.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Go constants (nil, true, false)</string>
+ <key>scope</key>
+ <string>constant.language.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL variables</string>
+ <key>scope</key>
+ <string>variable.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL aliases</string>
+ <key>scope</key>
+ <string>string.unquoted.alias.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f0c6c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL enum members</string>
+ <key>scope</key>
+ <string>constant.character.enum.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL field in types</string>
+ <key>scope</key>
+ <string>meta.objectvalues.graphql constant.object.key.graphql string.unquoted.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f0c6c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML/XML DOCTYPE as keyword</string>
+ <key>scope</key>
+ <string>keyword.other.doctype, meta.tag.sgml.doctype punctuation.definition.tag, meta.tag.metadata.doctype entity.name.tag, meta.tag.metadata.doctype punctuation.definition.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML/XML-like &lt;tags/&gt;</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Special characters like &amp;amp;</string>
+ <key>scope</key>
+ <string>text.html constant.character.entity, text.html constant.character.entity punctuation, constant.character.entity.xml, constant.character.entity.xml punctuation, constant.character.entity.js.jsx, constant.charactger.entity.js.jsx punctuation, constant.character.entity.tsx, constant.character.entity.tsx punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML/XML tag attribute values</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Components</string>
+ <key>scope</key>
+ <string>support.class.component, support.class.component.jsx, support.class.component.tsx, support.class.component.vue</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Annotations</string>
+ <key>scope</key>
+ <string>punctuation.definition.annotation, storage.type.annotation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java enums</string>
+ <key>scope</key>
+ <string>constant.other.enum.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java imports</string>
+ <key>scope</key>
+ <string>storage.modifier.import.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Javadoc</string>
+ <key>scope</key>
+ <string>comment.block.javadoc.java keyword.other.documentation.javadoc.java</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Exported Variable</string>
+ <key>scope</key>
+ <string>meta.export variable.other.readwrite.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ee99a0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JS/TS constants &amp; properties</string>
+ <key>scope</key>
+ <string>variable.other.constant.js, variable.other.constant.ts, variable.other.property.js, variable.other.property.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSDoc; these are mainly params, so styled as such</string>
+ <key>scope</key>
+ <string>variable.other.jsdoc, comment.block.documentation variable.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ee99a0</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSDoc keywords</string>
+ <key>scope</key>
+ <string>storage.type.class.jsdoc</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>support.type.object.console.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Node constants as keywords (module, etc.)</string>
+ <key>scope</key>
+ <string>support.constant.node, support.type.object.module.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>implements as keyword</string>
+ <key>scope</key>
+ <string>storage.modifier.implements</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Builtin types</string>
+ <key>scope</key>
+ <string>constant.language.null.js, constant.language.null.ts, constant.language.undefined.js, constant.language.undefined.ts, support.type.builtin.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>variable.parameter.generic</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Arrow functions</string>
+ <key>scope</key>
+ <string>keyword.declaration.function.arrow.js, storage.type.function.arrow.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Decorator punctuations (decorators inherit from blue functions, instead of styleguide peach)</string>
+ <key>scope</key>
+ <string>punctuation.decorator.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Extra JS/TS keywords</string>
+ <key>scope</key>
+ <string>keyword.operator.expression.in.js, keyword.operator.expression.in.ts, keyword.operator.expression.infer.ts, keyword.operator.expression.instanceof.js, keyword.operator.expression.instanceof.ts, keyword.operator.expression.is, keyword.operator.expression.keyof.ts, keyword.operator.expression.of.js, keyword.operator.expression.of.ts, keyword.operator.expression.typeof.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia macros</string>
+ <key>scope</key>
+ <string>support.function.macro.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia language constants (true, false)</string>
+ <key>scope</key>
+ <string>constant.language.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia other constants (these seem to be arguments inside arrays)</string>
+ <key>scope</key>
+ <string>constant.other.symbol.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ee99a0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTeX preamble</string>
+ <key>scope</key>
+ <string>text.tex keyword.control.preamble</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTeX be functions</string>
+ <key>scope</key>
+ <string>text.tex support.function.be</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#91d7e3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTeX math</string>
+ <key>scope</key>
+ <string>constant.other.general.math.tex</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f0c6c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Liquid Builtin Objects &amp; User Defined Variables</string>
+ <key>scope</key>
+ <string>variable.language.liquid</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lua docstring keywords</string>
+ <key>scope</key>
+ <string>comment.line.double-dash.documentation.lua storage.type.annotation.lua</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lua docstring variables</string>
+ <key>scope</key>
+ <string>comment.line.double-dash.documentation.lua entity.name.variable.lua, comment.line.double-dash.documentation.lua variable.lua</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.1.markdown punctuation.definition.heading.markdown, heading.1.markdown, heading.1.quarto punctuation.definition.heading.quarto, heading.1.quarto, markup.heading.atx.1.mdx, markup.heading.atx.1.mdx punctuation.definition.heading.mdx, markup.heading.setext.1.markdown, markup.heading.heading-0.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.2.markdown punctuation.definition.heading.markdown, heading.2.markdown, heading.2.quarto punctuation.definition.heading.quarto, heading.2.quarto, markup.heading.atx.2.mdx, markup.heading.atx.2.mdx punctuation.definition.heading.mdx, markup.heading.setext.2.markdown, markup.heading.heading-1.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.3.markdown punctuation.definition.heading.markdown, heading.3.markdown, heading.3.quarto punctuation.definition.heading.quarto, heading.3.quarto, markup.heading.atx.3.mdx, markup.heading.atx.3.mdx punctuation.definition.heading.mdx, markup.heading.heading-2.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.4.markdown punctuation.definition.heading.markdown, heading.4.markdown, heading.4.quarto punctuation.definition.heading.quarto, heading.4.quarto, markup.heading.atx.4.mdx, markup.heading.atx.4.mdx punctuation.definition.heading.mdx, markup.heading.heading-3.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6da95</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.5.markdown punctuation.definition.heading.markdown, heading.5.markdown, heading.5.quarto punctuation.definition.heading.quarto, heading.5.quarto, markup.heading.atx.5.mdx, markup.heading.atx.5.mdx punctuation.definition.heading.mdx, markup.heading.heading-4.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7dc4e4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.6.markdown punctuation.definition.heading.markdown, heading.6.markdown, heading.6.quarto punctuation.definition.heading.quarto, heading.6.quarto, markup.heading.atx.6.mdx, markup.heading.atx.6.mdx punctuation.definition.heading.mdx, markup.heading.heading-5.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b7bdf8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.bold</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.italic</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.strikethrough</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a5adcb</string>
+ <key>fontStyle</key>
+ <string>strikethrough</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown auto links</string>
+ <key>scope</key>
+ <string>punctuation.definition.link, markup.underline.link</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown links</string>
+ <key>scope</key>
+ <string>text.html.markdown punctuation.definition.link.title, text.html.quarto punctuation.definition.link.title, string.other.link.title.markdown, string.other.link.title.quarto, markup.link, punctuation.definition.constant.markdown, punctuation.definition.constant.quarto, constant.other.reference.link.markdown, constant.other.reference.link.quarto, markup.substitution.attribute-reference</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b7bdf8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown code spans</string>
+ <key>scope</key>
+ <string>punctuation.definition.raw.markdown, punctuation.definition.raw.quarto, markup.inline.raw.string.markdown, markup.inline.raw.string.quarto, markup.raw.block.markdown, markup.raw.block.quarto</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6da95</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown triple backtick language identifier</string>
+ <key>scope</key>
+ <string>fenced_code.block.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#91d7e3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown triple backticks</string>
+ <key>scope</key>
+ <string>markup.fenced_code.block punctuation.definition, markup.raw support.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#939ab7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown quotes</string>
+ <key>scope</key>
+ <string>markup.quote, punctuation.definition.quote.begin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown separators</string>
+ <key>scope</key>
+ <string>meta.separator.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown list bullets</string>
+ <key>scope</key>
+ <string>punctuation.definition.list.begin.markdown, punctuation.definition.list.begin.quarto, markup.list.bullet</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Quarto headings</string>
+ <key>scope</key>
+ <string>markup.heading.quarto</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix attribute names</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.multipart.nix, entity.other.attribute-name.single.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix parameter names</string>
+ <key>scope</key>
+ <string>variable.parameter.name.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix interpolated parameter names</string>
+ <key>scope</key>
+ <string>meta.embedded variable.parameter.name.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b7bdf8</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix paths</string>
+ <key>scope</key>
+ <string>string.unquoted.path.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP Attributes</string>
+ <key>scope</key>
+ <string>support.attribute.builtin, meta.attribute.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP Parameters (needed for the leading dollar sign)</string>
+ <key>scope</key>
+ <string>meta.function.parameters.php punctuation.definition.variable.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ee99a0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP Constants (null, __FILE__, etc.)</string>
+ <key>scope</key>
+ <string>constant.language.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP functions</string>
+ <key>scope</key>
+ <string>text.html.php support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#91d7e3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHPdoc keywords</string>
+ <key>scope</key>
+ <string>keyword.other.phpdoc.php</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python argument functions reset to text, otherwise they inherit blue from function-call</string>
+ <key>scope</key>
+ <string>support.variable.magic.python, meta.function-call.arguments.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python double underscore functions</string>
+ <key>scope</key>
+ <string>support.function.magic.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#91d7e3</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python `self` keyword</string>
+ <key>scope</key>
+ <string>variable.parameter.function.language.special.self.python, variable.language.special.self.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python keyword flow/logical (for ... in)</string>
+ <key>scope</key>
+ <string>keyword.control.flow.python, keyword.operator.logical.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python storage type</string>
+ <key>scope</key>
+ <string>storage.type.function.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python function support</string>
+ <key>scope</key>
+ <string>support.token.decorator.python, meta.function.decorator.identifier.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#91d7e3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python function calls</string>
+ <key>scope</key>
+ <string>meta.function-call.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python function decorators</string>
+ <key>scope</key>
+ <string>entity.name.function.decorator.python, punctuation.definition.decorator.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python placeholder reset to normal string</string>
+ <key>scope</key>
+ <string>constant.character.format.placeholder.other.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python exception &amp; builtins such as exit()</string>
+ <key>scope</key>
+ <string>support.type.exception.python, support.function.builtin.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>entity.name.type</string>
+ <key>scope</key>
+ <string>support.type.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python constants (True/False)</string>
+ <key>scope</key>
+ <string>constant.language.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Arguments accessed later in the function body</string>
+ <key>scope</key>
+ <string>meta.indexed-name.python, meta.item-access.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ee99a0</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python f-strings/binary/unicode storage types</string>
+ <key>scope</key>
+ <string>storage.type.string.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6da95</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python type hints</string>
+ <key>scope</key>
+ <string>meta.function.parameters.python</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex string begin/end in JS/TS</string>
+ <key>scope</key>
+ <string>string.regexp punctuation.definition.string.begin, string.regexp punctuation.definition.string.end</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex anchors (^, $)</string>
+ <key>scope</key>
+ <string>keyword.control.anchor.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex regular string match</string>
+ <key>scope</key>
+ <string>string.regexp.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex group parenthesis &amp; backreference (\1, \2, \3, ...)</string>
+ <key>scope</key>
+ <string>punctuation.definition.group.regexp, keyword.other.back-reference.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6da95</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex character class []</string>
+ <key>scope</key>
+ <string>punctuation.definition.character-class.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex character classes (\d, \w, \s)</string>
+ <key>scope</key>
+ <string>constant.other.character-class.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex range</string>
+ <key>scope</key>
+ <string>constant.other.character-class.range.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f4dbd6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex quantifier</string>
+ <key>scope</key>
+ <string>keyword.operator.quantifier.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex constant/numeric</string>
+ <key>scope</key>
+ <string>constant.character.numeric.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex lookaheads, negative lookaheads, lookbehinds, negative lookbehinds</string>
+ <key>scope</key>
+ <string>punctuation.definition.group.no-capture.regexp, meta.assertion.look-ahead.regexp, meta.assertion.negative-look-ahead.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust attribute</string>
+ <key>scope</key>
+ <string>meta.annotation.rust, meta.annotation.rust punctuation, meta.attribute.rust, punctuation.definition.attribute.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust attribute strings</string>
+ <key>scope</key>
+ <string>meta.attribute.rust string.quoted.double.rust, meta.attribute.rust string.quoted.single.char.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust keyword</string>
+ <key>scope</key>
+ <string>entity.name.function.macro.rules.rust, storage.type.module.rust, storage.modifier.rust, storage.type.struct.rust, storage.type.enum.rust, storage.type.trait.rust, storage.type.union.rust, storage.type.impl.rust, storage.type.rust, storage.type.function.rust, storage.type.type.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust u/i32, u/i64, etc.</string>
+ <key>scope</key>
+ <string>entity.name.type.numeric.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust generic</string>
+ <key>scope</key>
+ <string>meta.generic.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust impl</string>
+ <key>scope</key>
+ <string>entity.name.impl.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust module</string>
+ <key>scope</key>
+ <string>entity.name.module.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust trait</string>
+ <key>scope</key>
+ <string>entity.name.trait.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust struct</string>
+ <key>scope</key>
+ <string>storage.type.source.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust union</string>
+ <key>scope</key>
+ <string>entity.name.union.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust enum member</string>
+ <key>scope</key>
+ <string>meta.enum.rust storage.type.source.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust macro</string>
+ <key>scope</key>
+ <string>support.macro.rust, meta.macro.rust support.function.rust, entity.name.function.macro.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust lifetime</string>
+ <key>scope</key>
+ <string>storage.modifier.lifetime.rust, entity.name.type.lifetime</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust string formatting</string>
+ <key>scope</key>
+ <string>string.quoted.double.rust constant.other.placeholder.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust return type generic</string>
+ <key>scope</key>
+ <string>meta.function.return-type.rust meta.generic.rust storage.type.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust functions</string>
+ <key>scope</key>
+ <string>meta.function.call.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust angle brackets</string>
+ <key>scope</key>
+ <string>punctuation.brackets.angle.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#91d7e3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust constants</string>
+ <key>scope</key>
+ <string>constant.other.caps.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust function parameters</string>
+ <key>scope</key>
+ <string>meta.function.definition.rust variable.other.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ee99a0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust closure variables</string>
+ <key>scope</key>
+ <string>meta.function.call.rust variable.other.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust self</string>
+ <key>scope</key>
+ <string>variable.language.self.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust metavariable names</string>
+ <key>scope</key>
+ <string>variable.other.metavariable.name.rust, meta.macro.metavariable.rust keyword.operator.macro.dollar.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell shebang</string>
+ <key>scope</key>
+ <string>comment.line.shebang, comment.line.shebang punctuation.definition.comment, comment.line.shebang, punctuation.definition.comment.shebang.shell, meta.shebang.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell shebang command</string>
+ <key>scope</key>
+ <string>comment.line.shebang constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell interpolated command</string>
+ <key>scope</key>
+ <string>meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation, meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell interpolated command variable</string>
+ <key>scope</key>
+ <string>meta.string meta.interpolation.parameter.shell variable.other.readwrite</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>source.shell punctuation.section.interpolation, punctuation.definition.evaluation.backticks.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell EOF</string>
+ <key>scope</key>
+ <string>entity.name.tag.heredoc.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell quoted variable</string>
+ <key>scope</key>
+ <string>string.quoted.double.shell variable.other.normal.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cad3f5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.typst</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Keys</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.key string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON key surrounding quotes</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.key punctuation.definition.string.begin, source.json meta.mapping.key punctuation.definition.string.end</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#939ab7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.synopsis.man, markup.heading.title.man, markup.heading.other.man, markup.heading.env.man</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c6a0f6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.commands.man</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8aadf4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.env.man</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5bde6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Man page options</string>
+ <key>scope</key>
+ <string>entity.name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8bd5ca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.1.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ed8796</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.2.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5a97f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eed49f</string>
+ </dict>
+ </dict>
+ </array>
+ </dict>
+</plist> \ No newline at end of file
diff --git a/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/LICENSE b/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/LICENSE
new file mode 100644
index 0000000..fb5b1d6
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 yazi-rs
+
+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.
diff --git a/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..006383b
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Catppuccin
+
+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.
diff --git a/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/README.md b/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/README.md
new file mode 100644
index 0000000..20840dc
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/README.md
@@ -0,0 +1,36 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Catppuccin Mocha Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```sh
+ya pkg add yazi-rs/flavors:catppuccin-mocha
+```
+
+## ⚙️ Usage
+
+Set the content of your `theme.toml` to enable it as your _dark_ flavor:
+
+```toml
+[flavor]
+dark = "catppuccin-mocha"
+```
+
+Make sure your `theme.toml` doesn't contain anything other than `[flavor]`, unless you want to override certain styles of this flavor.
+
+See the [Yazi flavor documentation](https://yazi-rs.github.io/docs/flavors/overview) for more details.
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/flavor.toml b/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/flavor.toml
new file mode 100644
index 0000000..39a3ef5
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/flavor.toml
@@ -0,0 +1,189 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[mgr]
+cwd = { fg = "#94e2d5" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "#f9e2af", bold = true, italic = true, underline = true }
+find_position = { fg = "#f5c2e7", bg = "reset", bold = true, italic = true }
+
+# Marker
+marker_copied = { fg = "#a6e3a1", bg = "#a6e3a1" }
+marker_cut = { fg = "#f38ba8", bg = "#f38ba8" }
+marker_marked = { fg = "#94e2d5", bg = "#94e2d5" }
+marker_selected = { fg = "#f9e2af", bg = "#f9e2af" }
+
+# Count
+count_copied = { fg = "#1e1e2e", bg = "#a6e3a1" }
+count_cut = { fg = "#1e1e2e", bg = "#f38ba8" }
+count_selected = { fg = "#1e1e2e", bg = "#f9e2af" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "#7f849c" }
+
+# : }}}
+
+
+# : Tabs {{{
+
+[tabs]
+active = { fg = "#1e1e2e", bg = "#89b4fa", bold = true }
+inactive = { fg = "#89b4fa", bg = "#313244" }
+
+# : }}}
+
+
+# : Mode {{{
+
+[mode]
+
+normal_main = { fg = "#1e1e2e", bg = "#89b4fa", bold = true }
+normal_alt = { fg = "#89b4fa", bg = "#313244" }
+
+# Select mode
+select_main = { fg = "#1e1e2e", bg = "#94e2d5", bold = true }
+select_alt = { fg = "#94e2d5", bg = "#313244" }
+
+# Unset mode
+unset_main = { fg = "#1e1e2e", bg = "#f2cdcd", bold = true }
+unset_alt = { fg = "#f2cdcd", bg = "#313244" }
+
+# : }}}
+
+
+# : Status bar {{{
+
+[status]
+# Permissions
+perm_sep = { fg = "#7f849c" }
+perm_type = { fg = "#89b4fa" }
+perm_read = { fg = "#f9e2af" }
+perm_write = { fg = "#f38ba8" }
+perm_exec = { fg = "#a6e3a1" }
+
+# Progress
+progress_label = { fg = "#ffffff", bold = true }
+progress_normal = { fg = "#89b4fa", bg = "#45475a" }
+progress_error = { fg = "#89b4fa", bg = "#f38ba8" }
+
+# : }}}
+
+
+# : Pick {{{
+
+[pick]
+border = { fg = "#89b4fa" }
+active = { fg = "#f5c2e7", bold = true }
+inactive = {}
+
+# : }}}
+
+
+# : Input {{{
+
+[input]
+border = { fg = "#89b4fa" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+# : }}}
+
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "#89b4fa" }
+
+# : }}}
+
+
+# : Tasks {{{
+
+[tasks]
+border = { fg = "#89b4fa" }
+title = {}
+hovered = { fg = "#f5c2e7", bold = true }
+
+# : }}}
+
+
+# : Which {{{
+
+[which]
+mask = { bg = "#313244" }
+cand = { fg = "#94e2d5" }
+rest = { fg = "#9399b2" }
+desc = { fg = "#f5c2e7" }
+separator = "  "
+separator_style = { fg = "#585b70" }
+
+# : }}}
+
+
+# : Help {{{
+
+[help]
+on = { fg = "#94e2d5" }
+run = { fg = "#f5c2e7" }
+hovered = { reversed = true, bold = true }
+footer = { fg = "#313244", bg = "#cdd6f4" }
+
+# : }}}
+
+
+# : Spotter {{{
+
+[spot]
+border = { fg = "#89b4fa" }
+title = { fg = "#89b4fa" }
+tbl_col = { fg = "#94e2d5" }
+tbl_cell = { fg = "#f5c2e7", bg = "#45475a" }
+
+# : }}}
+
+
+# : Notification {{{
+
+[notify]
+title_info = { fg = "#a6e3a1" }
+title_warn = { fg = "#f9e2af" }
+title_error = { fg = "#f38ba8" }
+
+# : }}}
+
+
+# : File-specific styles {{{
+
+[filetype]
+
+rules = [
+ # Images
+ { mime = "image/*", fg = "#94e2d5" },
+
+ # Media
+ { mime = "{audio,video}/*", fg = "#f9e2af" },
+
+ # Archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#f5c2e7" },
+
+ # Documents
+ { mime = "application/{pdf,doc,rtf}", fg = "#a6e3a1" },
+
+ # Fallback
+ { url = "*", fg = "#cdd6f4" },
+ { url = "*/", fg = "#89b4fa" },
+
+ # TODO: remove
+ { name = "*", fg = "#cdd6f4" },
+ { name = "*/", fg = "#89b4fa" }
+]
+
+# : }}}
diff --git a/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/preview.png b/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/preview.png
new file mode 100644
index 0000000..a684ec8
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/tmtheme.xml
new file mode 100644
index 0000000..c7781ce
--- /dev/null
+++ b/fedora/.config/yazi/flavors/catppuccin-mocha.yazi/tmtheme.xml
@@ -0,0 +1,2112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>name</key>
+ <string>Catppuccin Mocha</string>
+ <key>semanticClass</key>
+ <string>theme.dark.catppuccin-mocha</string>
+ <key>uuid</key>
+ <string>627ce890-fabb-4d39-9819-7be71f4bdca7</string>
+ <key>author</key>
+ <string>Catppuccin Org</string>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#1e1e2e</string>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ <key>caret</key>
+ <string>#f5e0dc</string>
+ <key>lineHighlight</key>
+ <string>#313244</string>
+ <key>misspelling</key>
+ <string>#f38ba8</string>
+ <key>accent</key>
+ <string>#cba6f7</string>
+ <key>selection</key>
+ <string>#9399b240</string>
+ <key>activeGuide</key>
+ <string>#45475a</string>
+ <key>findHighlight</key>
+ <string>#3e5767</string>
+ <key>gutterForeground</key>
+ <string>#7f849c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Basic text &amp; variable names (incl. leading punctuation)</string>
+ <key>scope</key>
+ <string>text, source, variable.other.readwrite, punctuation.definition.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Parentheses, Brackets, Braces</string>
+ <key>scope</key>
+ <string>punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9399b2</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comments</string>
+ <key>scope</key>
+ <string>comment, punctuation.definition.comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9399b2</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>string, punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6e3a1</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>constant.character.escape</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Booleans, constants, numbers</string>
+ <key>scope</key>
+ <string>constant.numeric, variable.other.constant, entity.name.constant, constant.language.boolean, constant.language.false, constant.language.true, keyword.other.unit.user-defined, keyword.other.unit.suffix.floating-point</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>keyword, keyword.operator.word, keyword.operator.new, variable.language.super, support.type.primitive, storage.type, storage.modifier, punctuation.definition.keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.tag.documentation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation</string>
+ <key>scope</key>
+ <string>keyword.operator, punctuation.accessor, punctuation.definition.generic, meta.function.closure punctuation.section.parameters, punctuation.definition.tag, punctuation.separator.key-value</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.function, meta.function-call.method, support.function, support.function.misc, variable.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Classes</string>
+ <key>scope</key>
+ <string>entity.name.class, entity.other.inherited-class, support.class, meta.function-call.constructor, entity.name.struct</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Enum</string>
+ <key>scope</key>
+ <string>entity.name.enum</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Enum member</string>
+ <key>scope</key>
+ <string>meta.enum variable.other.readwrite, variable.other.enummember</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object properties</string>
+ <key>scope</key>
+ <string>meta.property.object</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Types</string>
+ <key>scope</key>
+ <string>meta.type, meta.type-alias, support.type, entity.name.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Decorators</string>
+ <key>scope</key>
+ <string>meta.annotation variable.function, meta.annotation variable.annotation.function, meta.annotation punctuation.definition.annotation, meta.decorator, punctuation.decorator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>variable.parameter, meta.function.parameters</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eba0ac</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-ins</string>
+ <key>scope</key>
+ <string>constant.language, support.function.builtin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.other.attribute-name.documentation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Preprocessor directives</string>
+ <key>scope</key>
+ <string>keyword.control.directive, punctuation.definition.directive</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Type parameters</string>
+ <key>scope</key>
+ <string>punctuation.definition.typeparameters</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89dceb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Namespaces</string>
+ <key>scope</key>
+ <string>entity.name.namespace</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Property names (left hand assignments in json/yaml/css)</string>
+ <key>scope</key>
+ <string>support.type.property-name.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>This/Self keyword</string>
+ <key>scope</key>
+ <string>variable.language.this, variable.language.this punctuation.definition.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object properties</string>
+ <key>scope</key>
+ <string>variable.object.property</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String template interpolation</string>
+ <key>scope</key>
+ <string>string.template variable, string variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>`new` as bold</string>
+ <key>scope</key>
+ <string>keyword.operator.new</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ extern keyword</string>
+ <key>scope</key>
+ <string>storage.modifier.specifier.extern.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ scope resolution</string>
+ <key>scope</key>
+ <string>entity.name.scope-resolution.template.call.cpp, entity.name.scope-resolution.parameter.cpp, entity.name.scope-resolution.cpp, entity.name.scope-resolution.function.definition.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ doc keywords</string>
+ <key>scope</key>
+ <string>storage.type.class.doxygen</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ operators</string>
+ <key>scope</key>
+ <string>storage.modifier.reference.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# Interpolated Strings</string>
+ <key>scope</key>
+ <string>meta.interpolation.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# xml-style docs</string>
+ <key>scope</key>
+ <string>comment.block.documentation.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Classes, reflecting the className color in JSX</string>
+ <key>scope</key>
+ <string>source.css entity.other.attribute-name.class.css, entity.other.attribute-name.parent-selector.css punctuation.definition.entity.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Operators</string>
+ <key>scope</key>
+ <string>punctuation.separator.operator.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Pseudo classes</string>
+ <key>scope</key>
+ <string>source.css entity.other.attribute-name.pseudo-class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>source.css constant.other.unicode-range</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>source.css variable.parameter.url</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6e3a1</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS vendored property names</string>
+ <key>scope</key>
+ <string>support.type.vendored.property-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89dceb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Less/SCSS right-hand variables (@/$-prefixed)</string>
+ <key>scope</key>
+ <string>source.css meta.property-value variable, source.css meta.property-value variable.other.less, source.css meta.property-value variable.other.less punctuation.definition.variable.less, meta.definition.variable.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eba0ac</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS variables (--prefixed)</string>
+ <key>scope</key>
+ <string>source.css meta.property-list variable, meta.property-list variable.other.less, meta.property-list variable.other.less punctuation.definition.variable.less</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Percentage values, styled the same as numbers</string>
+ <key>scope</key>
+ <string>keyword.other.unit.percentage.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Attribute selectors, styled the same as strings</string>
+ <key>scope</key>
+ <string>source.css meta.attribute-selector</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6e3a1</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON/YAML keys, other left-hand assignments</string>
+ <key>scope</key>
+ <string>keyword.other.definition.ini, punctuation.support.type.property-name.json, support.type.property-name.json, punctuation.support.type.property-name.toml, support.type.property-name.toml, entity.name.tag.yaml, punctuation.support.type.property-name.yaml, support.type.property-name.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON/YAML constants</string>
+ <key>scope</key>
+ <string>constant.language.json, constant.language.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML anchors</string>
+ <key>scope</key>
+ <string>entity.name.type.anchor.yaml, variable.other.alias.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TOML tables / ini groups</string>
+ <key>scope</key>
+ <string>support.type.property-name.table, entity.name.section.group-title.ini</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TOML dates</string>
+ <key>scope</key>
+ <string>constant.other.time.datetime.offset.toml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML anchor puctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.anchor.yaml, punctuation.definition.alias.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML triple dashes</string>
+ <key>scope</key>
+ <string>entity.other.document.begin.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Diff</string>
+ <key>scope</key>
+ <string>markup.changed.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff</string>
+ <key>scope</key>
+ <string>meta.diff.header.from-file, meta.diff.header.to-file, punctuation.definition.from-file.diff, punctuation.definition.to-file.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Inserted</string>
+ <key>scope</key>
+ <string>markup.inserted.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6e3a1</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Deleted</string>
+ <key>scope</key>
+ <string>markup.deleted.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>dotenv left-hand side assignments</string>
+ <key>scope</key>
+ <string>variable.other.env</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>dotenv reference to existing env variable</string>
+ <key>scope</key>
+ <string>string.quoted variable.other.env</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GDScript functions</string>
+ <key>scope</key>
+ <string>support.function.builtin.gdscript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GDScript constants</string>
+ <key>scope</key>
+ <string>constant.language.gdscript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment keywords</string>
+ <key>scope</key>
+ <string>comment meta.annotation.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eba0ac</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>go:embed, go:build, etc.</string>
+ <key>scope</key>
+ <string>comment meta.annotation.parameters.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Go constants (nil, true, false)</string>
+ <key>scope</key>
+ <string>constant.language.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL variables</string>
+ <key>scope</key>
+ <string>variable.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL aliases</string>
+ <key>scope</key>
+ <string>string.unquoted.alias.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f2cdcd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL enum members</string>
+ <key>scope</key>
+ <string>constant.character.enum.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL field in types</string>
+ <key>scope</key>
+ <string>meta.objectvalues.graphql constant.object.key.graphql string.unquoted.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f2cdcd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML/XML DOCTYPE as keyword</string>
+ <key>scope</key>
+ <string>keyword.other.doctype, meta.tag.sgml.doctype punctuation.definition.tag, meta.tag.metadata.doctype entity.name.tag, meta.tag.metadata.doctype punctuation.definition.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML/XML-like &lt;tags/&gt;</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Special characters like &amp;amp;</string>
+ <key>scope</key>
+ <string>text.html constant.character.entity, text.html constant.character.entity punctuation, constant.character.entity.xml, constant.character.entity.xml punctuation, constant.character.entity.js.jsx, constant.charactger.entity.js.jsx punctuation, constant.character.entity.tsx, constant.character.entity.tsx punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML/XML tag attribute values</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Components</string>
+ <key>scope</key>
+ <string>support.class.component, support.class.component.jsx, support.class.component.tsx, support.class.component.vue</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Annotations</string>
+ <key>scope</key>
+ <string>punctuation.definition.annotation, storage.type.annotation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java enums</string>
+ <key>scope</key>
+ <string>constant.other.enum.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java imports</string>
+ <key>scope</key>
+ <string>storage.modifier.import.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Javadoc</string>
+ <key>scope</key>
+ <string>comment.block.javadoc.java keyword.other.documentation.javadoc.java</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Exported Variable</string>
+ <key>scope</key>
+ <string>meta.export variable.other.readwrite.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eba0ac</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JS/TS constants &amp; properties</string>
+ <key>scope</key>
+ <string>variable.other.constant.js, variable.other.constant.ts, variable.other.property.js, variable.other.property.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSDoc; these are mainly params, so styled as such</string>
+ <key>scope</key>
+ <string>variable.other.jsdoc, comment.block.documentation variable.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eba0ac</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSDoc keywords</string>
+ <key>scope</key>
+ <string>storage.type.class.jsdoc</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>support.type.object.console.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Node constants as keywords (module, etc.)</string>
+ <key>scope</key>
+ <string>support.constant.node, support.type.object.module.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>implements as keyword</string>
+ <key>scope</key>
+ <string>storage.modifier.implements</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Builtin types</string>
+ <key>scope</key>
+ <string>constant.language.null.js, constant.language.null.ts, constant.language.undefined.js, constant.language.undefined.ts, support.type.builtin.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>variable.parameter.generic</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Arrow functions</string>
+ <key>scope</key>
+ <string>keyword.declaration.function.arrow.js, storage.type.function.arrow.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Decorator punctuations (decorators inherit from blue functions, instead of styleguide peach)</string>
+ <key>scope</key>
+ <string>punctuation.decorator.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Extra JS/TS keywords</string>
+ <key>scope</key>
+ <string>keyword.operator.expression.in.js, keyword.operator.expression.in.ts, keyword.operator.expression.infer.ts, keyword.operator.expression.instanceof.js, keyword.operator.expression.instanceof.ts, keyword.operator.expression.is, keyword.operator.expression.keyof.ts, keyword.operator.expression.of.js, keyword.operator.expression.of.ts, keyword.operator.expression.typeof.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia macros</string>
+ <key>scope</key>
+ <string>support.function.macro.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia language constants (true, false)</string>
+ <key>scope</key>
+ <string>constant.language.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia other constants (these seem to be arguments inside arrays)</string>
+ <key>scope</key>
+ <string>constant.other.symbol.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eba0ac</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTeX preamble</string>
+ <key>scope</key>
+ <string>text.tex keyword.control.preamble</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTeX be functions</string>
+ <key>scope</key>
+ <string>text.tex support.function.be</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89dceb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTeX math</string>
+ <key>scope</key>
+ <string>constant.other.general.math.tex</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f2cdcd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Liquid Builtin Objects &amp; User Defined Variables</string>
+ <key>scope</key>
+ <string>variable.language.liquid</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lua docstring keywords</string>
+ <key>scope</key>
+ <string>comment.line.double-dash.documentation.lua storage.type.annotation.lua</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lua docstring variables</string>
+ <key>scope</key>
+ <string>comment.line.double-dash.documentation.lua entity.name.variable.lua, comment.line.double-dash.documentation.lua variable.lua</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.1.markdown punctuation.definition.heading.markdown, heading.1.markdown, heading.1.quarto punctuation.definition.heading.quarto, heading.1.quarto, markup.heading.atx.1.mdx, markup.heading.atx.1.mdx punctuation.definition.heading.mdx, markup.heading.setext.1.markdown, markup.heading.heading-0.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.2.markdown punctuation.definition.heading.markdown, heading.2.markdown, heading.2.quarto punctuation.definition.heading.quarto, heading.2.quarto, markup.heading.atx.2.mdx, markup.heading.atx.2.mdx punctuation.definition.heading.mdx, markup.heading.setext.2.markdown, markup.heading.heading-1.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.3.markdown punctuation.definition.heading.markdown, heading.3.markdown, heading.3.quarto punctuation.definition.heading.quarto, heading.3.quarto, markup.heading.atx.3.mdx, markup.heading.atx.3.mdx punctuation.definition.heading.mdx, markup.heading.heading-2.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.4.markdown punctuation.definition.heading.markdown, heading.4.markdown, heading.4.quarto punctuation.definition.heading.quarto, heading.4.quarto, markup.heading.atx.4.mdx, markup.heading.atx.4.mdx punctuation.definition.heading.mdx, markup.heading.heading-3.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6e3a1</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.5.markdown punctuation.definition.heading.markdown, heading.5.markdown, heading.5.quarto punctuation.definition.heading.quarto, heading.5.quarto, markup.heading.atx.5.mdx, markup.heading.atx.5.mdx punctuation.definition.heading.mdx, markup.heading.heading-4.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#74c7ec</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>heading.6.markdown punctuation.definition.heading.markdown, heading.6.markdown, heading.6.quarto punctuation.definition.heading.quarto, heading.6.quarto, markup.heading.atx.6.mdx, markup.heading.atx.6.mdx punctuation.definition.heading.mdx, markup.heading.heading-5.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b4befe</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.bold</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.italic</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.strikethrough</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6adc8</string>
+ <key>fontStyle</key>
+ <string>strikethrough</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown auto links</string>
+ <key>scope</key>
+ <string>punctuation.definition.link, markup.underline.link</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown links</string>
+ <key>scope</key>
+ <string>text.html.markdown punctuation.definition.link.title, text.html.quarto punctuation.definition.link.title, string.other.link.title.markdown, string.other.link.title.quarto, markup.link, punctuation.definition.constant.markdown, punctuation.definition.constant.quarto, constant.other.reference.link.markdown, constant.other.reference.link.quarto, markup.substitution.attribute-reference</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b4befe</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown code spans</string>
+ <key>scope</key>
+ <string>punctuation.definition.raw.markdown, punctuation.definition.raw.quarto, markup.inline.raw.string.markdown, markup.inline.raw.string.quarto, markup.raw.block.markdown, markup.raw.block.quarto</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6e3a1</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown triple backtick language identifier</string>
+ <key>scope</key>
+ <string>fenced_code.block.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89dceb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown triple backticks</string>
+ <key>scope</key>
+ <string>markup.fenced_code.block punctuation.definition, markup.raw support.asciidoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9399b2</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown quotes</string>
+ <key>scope</key>
+ <string>markup.quote, punctuation.definition.quote.begin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown separators</string>
+ <key>scope</key>
+ <string>meta.separator.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown list bullets</string>
+ <key>scope</key>
+ <string>punctuation.definition.list.begin.markdown, punctuation.definition.list.begin.quarto, markup.list.bullet</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Quarto headings</string>
+ <key>scope</key>
+ <string>markup.heading.quarto</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix attribute names</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.multipart.nix, entity.other.attribute-name.single.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix parameter names</string>
+ <key>scope</key>
+ <string>variable.parameter.name.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix interpolated parameter names</string>
+ <key>scope</key>
+ <string>meta.embedded variable.parameter.name.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b4befe</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Nix paths</string>
+ <key>scope</key>
+ <string>string.unquoted.path.nix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP Attributes</string>
+ <key>scope</key>
+ <string>support.attribute.builtin, meta.attribute.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP Parameters (needed for the leading dollar sign)</string>
+ <key>scope</key>
+ <string>meta.function.parameters.php punctuation.definition.variable.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eba0ac</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP Constants (null, __FILE__, etc.)</string>
+ <key>scope</key>
+ <string>constant.language.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP functions</string>
+ <key>scope</key>
+ <string>text.html.php support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89dceb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHPdoc keywords</string>
+ <key>scope</key>
+ <string>keyword.other.phpdoc.php</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python argument functions reset to text, otherwise they inherit blue from function-call</string>
+ <key>scope</key>
+ <string>support.variable.magic.python, meta.function-call.arguments.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python double underscore functions</string>
+ <key>scope</key>
+ <string>support.function.magic.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89dceb</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python `self` keyword</string>
+ <key>scope</key>
+ <string>variable.parameter.function.language.special.self.python, variable.language.special.self.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python keyword flow/logical (for ... in)</string>
+ <key>scope</key>
+ <string>keyword.control.flow.python, keyword.operator.logical.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python storage type</string>
+ <key>scope</key>
+ <string>storage.type.function.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python function support</string>
+ <key>scope</key>
+ <string>support.token.decorator.python, meta.function.decorator.identifier.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89dceb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python function calls</string>
+ <key>scope</key>
+ <string>meta.function-call.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python function decorators</string>
+ <key>scope</key>
+ <string>entity.name.function.decorator.python, punctuation.definition.decorator.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python placeholder reset to normal string</string>
+ <key>scope</key>
+ <string>constant.character.format.placeholder.other.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python exception &amp; builtins such as exit()</string>
+ <key>scope</key>
+ <string>support.type.exception.python, support.function.builtin.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>entity.name.type</string>
+ <key>scope</key>
+ <string>support.type.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>python constants (True/False)</string>
+ <key>scope</key>
+ <string>constant.language.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Arguments accessed later in the function body</string>
+ <key>scope</key>
+ <string>meta.indexed-name.python, meta.item-access.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eba0ac</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python f-strings/binary/unicode storage types</string>
+ <key>scope</key>
+ <string>storage.type.string.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6e3a1</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python type hints</string>
+ <key>scope</key>
+ <string>meta.function.parameters.python</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex string begin/end in JS/TS</string>
+ <key>scope</key>
+ <string>string.regexp punctuation.definition.string.begin, string.regexp punctuation.definition.string.end</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex anchors (^, $)</string>
+ <key>scope</key>
+ <string>keyword.control.anchor.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex regular string match</string>
+ <key>scope</key>
+ <string>string.regexp.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex group parenthesis &amp; backreference (\1, \2, \3, ...)</string>
+ <key>scope</key>
+ <string>punctuation.definition.group.regexp, keyword.other.back-reference.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6e3a1</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex character class []</string>
+ <key>scope</key>
+ <string>punctuation.definition.character-class.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex character classes (\d, \w, \s)</string>
+ <key>scope</key>
+ <string>constant.other.character-class.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex range</string>
+ <key>scope</key>
+ <string>constant.other.character-class.range.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5e0dc</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex quantifier</string>
+ <key>scope</key>
+ <string>keyword.operator.quantifier.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex constant/numeric</string>
+ <key>scope</key>
+ <string>constant.character.numeric.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regex lookaheads, negative lookaheads, lookbehinds, negative lookbehinds</string>
+ <key>scope</key>
+ <string>punctuation.definition.group.no-capture.regexp, meta.assertion.look-ahead.regexp, meta.assertion.negative-look-ahead.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust attribute</string>
+ <key>scope</key>
+ <string>meta.annotation.rust, meta.annotation.rust punctuation, meta.attribute.rust, punctuation.definition.attribute.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust attribute strings</string>
+ <key>scope</key>
+ <string>meta.attribute.rust string.quoted.double.rust, meta.attribute.rust string.quoted.single.char.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust keyword</string>
+ <key>scope</key>
+ <string>entity.name.function.macro.rules.rust, storage.type.module.rust, storage.modifier.rust, storage.type.struct.rust, storage.type.enum.rust, storage.type.trait.rust, storage.type.union.rust, storage.type.impl.rust, storage.type.rust, storage.type.function.rust, storage.type.type.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust u/i32, u/i64, etc.</string>
+ <key>scope</key>
+ <string>entity.name.type.numeric.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ <key>fontStyle</key>
+ <string/>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust generic</string>
+ <key>scope</key>
+ <string>meta.generic.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust impl</string>
+ <key>scope</key>
+ <string>entity.name.impl.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust module</string>
+ <key>scope</key>
+ <string>entity.name.module.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust trait</string>
+ <key>scope</key>
+ <string>entity.name.trait.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust struct</string>
+ <key>scope</key>
+ <string>storage.type.source.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust union</string>
+ <key>scope</key>
+ <string>entity.name.union.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust enum member</string>
+ <key>scope</key>
+ <string>meta.enum.rust storage.type.source.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust macro</string>
+ <key>scope</key>
+ <string>support.macro.rust, meta.macro.rust support.function.rust, entity.name.function.macro.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust lifetime</string>
+ <key>scope</key>
+ <string>storage.modifier.lifetime.rust, entity.name.type.lifetime</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust string formatting</string>
+ <key>scope</key>
+ <string>string.quoted.double.rust constant.other.placeholder.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust return type generic</string>
+ <key>scope</key>
+ <string>meta.function.return-type.rust meta.generic.rust storage.type.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust functions</string>
+ <key>scope</key>
+ <string>meta.function.call.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust angle brackets</string>
+ <key>scope</key>
+ <string>punctuation.brackets.angle.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89dceb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust constants</string>
+ <key>scope</key>
+ <string>constant.other.caps.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust function parameters</string>
+ <key>scope</key>
+ <string>meta.function.definition.rust variable.other.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#eba0ac</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust closure variables</string>
+ <key>scope</key>
+ <string>meta.function.call.rust variable.other.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust self</string>
+ <key>scope</key>
+ <string>variable.language.self.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust metavariable names</string>
+ <key>scope</key>
+ <string>variable.other.metavariable.name.rust, meta.macro.metavariable.rust keyword.operator.macro.dollar.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell shebang</string>
+ <key>scope</key>
+ <string>comment.line.shebang, comment.line.shebang punctuation.definition.comment, comment.line.shebang, punctuation.definition.comment.shebang.shell, meta.shebang.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell shebang command</string>
+ <key>scope</key>
+ <string>comment.line.shebang constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell interpolated command</string>
+ <key>scope</key>
+ <string>meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation, meta.function-call.arguments.shell punctuation.definition.variable.shell, meta.function-call.arguments.shell punctuation.section.interpolation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell interpolated command variable</string>
+ <key>scope</key>
+ <string>meta.string meta.interpolation.parameter.shell variable.other.readwrite</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>source.shell punctuation.section.interpolation, punctuation.definition.evaluation.backticks.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell EOF</string>
+ <key>scope</key>
+ <string>entity.name.tag.heredoc.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell quoted variable</string>
+ <key>scope</key>
+ <string>string.quoted.double.shell variable.other.normal.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cdd6f4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.typst</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Keys</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.key string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON key surrounding quotes</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.key punctuation.definition.string.begin, source.json meta.mapping.key punctuation.definition.string.end</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9399b2</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.synopsis.man, markup.heading.title.man, markup.heading.other.man, markup.heading.env.man</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cba6f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.commands.man</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89b4fa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.env.man</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f5c2e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Man page options</string>
+ <key>scope</key>
+ <string>entity.name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#94e2d5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.1.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f38ba8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.2.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fab387</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>markup.heading.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f9e2af</string>
+ </dict>
+ </dict>
+ </array>
+ </dict>
+</plist> \ No newline at end of file
diff --git a/fedora/.config/yazi/flavors/dracula.yazi/LICENSE b/fedora/.config/yazi/flavors/dracula.yazi/LICENSE
new file mode 100644
index 0000000..fb5b1d6
--- /dev/null
+++ b/fedora/.config/yazi/flavors/dracula.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 yazi-rs
+
+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.
diff --git a/fedora/.config/yazi/flavors/dracula.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/dracula.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..f9105d5
--- /dev/null
+++ b/fedora/.config/yazi/flavors/dracula.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-present Dracula Theme
+
+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.
diff --git a/fedora/.config/yazi/flavors/dracula.yazi/README.md b/fedora/.config/yazi/flavors/dracula.yazi/README.md
new file mode 100644
index 0000000..8429ef6
--- /dev/null
+++ b/fedora/.config/yazi/flavors/dracula.yazi/README.md
@@ -0,0 +1,36 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Dracula Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```sh
+ya pkg add yazi-rs/flavors:dracula
+```
+
+## ⚙️ Usage
+
+Set the content of your `theme.toml` to enable it as your _dark_ flavor:
+
+```toml
+[flavor]
+dark = "dracula"
+```
+
+Make sure your `theme.toml` doesn't contain anything other than `[flavor]`, unless you want to override certain styles of this flavor.
+
+See the [Yazi flavor documentation](https://yazi-rs.github.io/docs/flavors/overview) for more details.
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/dracula.yazi/flavor.toml b/fedora/.config/yazi/flavors/dracula.yazi/flavor.toml
new file mode 100644
index 0000000..3434eb9
--- /dev/null
+++ b/fedora/.config/yazi/flavors/dracula.yazi/flavor.toml
@@ -0,0 +1,189 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[mgr]
+cwd = { fg = "#8be9fd" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "#f1fa8c", bold = true, italic = true, underline = true }
+find_position = { fg = "#ff79c6", bg = "reset", bold = true, italic = true }
+
+# Marker
+marker_copied = { fg = "#50fa7b", bg = "#50fa7b" }
+marker_cut = { fg = "#ff5555", bg = "#ff5555" }
+marker_marked = { fg = "#8be9fd", bg = "#8be9fd" }
+marker_selected = { fg = "#f1fa8c", bg = "#f1fa8c" }
+
+# Count
+count_copied = { fg = "#282a36", bg = "#50fa7b" }
+count_cut = { fg = "#282a36", bg = "#ff5555" }
+count_selected = { fg = "#282a36", bg = "#f1fa8c" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "#7282b5" }
+
+# : }}}
+
+
+# : Tabs {{{
+
+[tabs]
+active = { fg = "#282a36", bg = "#bd93f9", bold = true }
+inactive = { fg = "#bd93f9", bg = "#44475a" }
+
+# : }}}
+
+
+# : Mode {{{
+
+[mode]
+
+normal_main = { fg = "#282a36", bg = "#bd93f9", bold = true }
+normal_alt = { fg = "#bd93f9", bg = "#44475a" }
+
+# Select mode
+select_main = { fg = "#282a36", bg = "#8be9fd", bold = true }
+select_alt = { fg = "#8be9fd", bg = "#44475a" }
+
+# Unset mode
+unset_main = { fg = "#282a36", bg = "#ffb86c", bold = true }
+unset_alt = { fg = "#ffb86c", bg = "#44475a" }
+
+# : }}}
+
+
+# : Status bar {{{
+
+[status]
+# Permissions
+perm_sep = { fg = "#7282b5" }
+perm_type = { fg = "#bd93f9" }
+perm_read = { fg = "#f1fa8c" }
+perm_write = { fg = "#ff5555" }
+perm_exec = { fg = "#50fa7b" }
+
+# Progress
+progress_label = { fg = "#ffffff", bold = true }
+progress_normal = { fg = "#bd93f9", bg = "#63667d" }
+progress_error = { fg = "#bd93f9", bg = "#ff5555" }
+
+# : }}}
+
+
+# : Pick {{{
+
+[pick]
+border = { fg = "#bd93f9" }
+active = { fg = "#ff79c6", bold = true }
+inactive = {}
+
+# : }}}
+
+
+# : Input {{{
+
+[input]
+border = { fg = "#bd93f9" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+# : }}}
+
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "#bd93f9" }
+
+# : }}}
+
+
+# : Tasks {{{
+
+[tasks]
+border = { fg = "#bd93f9" }
+title = {}
+hovered = { fg = "#ff79c6", bold = true }
+
+# : }}}
+
+
+# : Which {{{
+
+[which]
+mask = { bg = "#44475a" }
+cand = { fg = "#8be9fd" }
+rest = { fg = "#8998c9" }
+desc = { fg = "#ff79c6" }
+separator = "  "
+separator_style = { fg = "#83869c" }
+
+# : }}}
+
+
+# : Help {{{
+
+[help]
+on = { fg = "#8be9fd" }
+run = { fg = "#ff79c6" }
+hovered = { reversed = true, bold = true }
+footer = { fg = "#44475a", bg = "#f8f8f2" }
+
+# : }}}
+
+
+# : Spotter {{{
+
+[spot]
+border = { fg = "#bd93f9" }
+title = { fg = "#bd93f9" }
+tbl_col = { fg = "#8be9fd" }
+tbl_cell = { fg = "#ff79c6", bg = "#63667d" }
+
+# : }}}
+
+
+# : Notification {{{
+
+[notify]
+title_info = { fg = "#50fa7b" }
+title_warn = { fg = "#f1fa8c" }
+title_error = { fg = "#ff5555" }
+
+# : }}}
+
+
+# : File-specific styles {{{
+
+[filetype]
+
+rules = [
+ # Images
+ { mime = "image/*", fg = "#8be9fd" },
+
+ # Media
+ { mime = "{audio,video}/*", fg = "#f1fa8c" },
+
+ # Archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#ff79c6" },
+
+ # Documents
+ { mime = "application/{pdf,doc,rtf}", fg = "#50fa7b" },
+
+ # Fallback
+ { url = "*", fg = "#f8f8f2" },
+ { url = "*/", fg = "#bd93f9" },
+
+ # TODO: remove
+ { name = "*", fg = "#f8f8f2" },
+ { name = "*/", fg = "#bd93f9" }
+]
+
+# : }}}
diff --git a/fedora/.config/yazi/flavors/dracula.yazi/preview.png b/fedora/.config/yazi/flavors/dracula.yazi/preview.png
new file mode 100644
index 0000000..7d8adf3
--- /dev/null
+++ b/fedora/.config/yazi/flavors/dracula.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/dracula.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/dracula.yazi/tmtheme.xml
new file mode 100644
index 0000000..c3434ec
--- /dev/null
+++ b/fedora/.config/yazi/flavors/dracula.yazi/tmtheme.xml
@@ -0,0 +1,940 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- Dracula Theme v1.4.3
+#
+# https://github.com/dracula/sublime
+#
+# Copyright 2013-present, All rights reserved
+#
+# Code licensed under the MIT license
+#
+# @author Zeno Rocha <hi@zenorocha.com>
+-->
+
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>name</key>
+ <string>Dracula</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#282a36</string>
+ <key>caret</key>
+ <string>#f8f8f0</string>
+ <key>block_caret</key>
+ <string>#999a9e</string>
+ <key>foreground</key>
+ <string>#f8f8f2</string>
+ <key>invisibles</key>
+ <string>#3B3A32</string>
+ <key>lineHighlight</key>
+ <string>#44475a</string>
+ <key>selection</key>
+ <string>#44475a</string>
+ <key>findHighlight</key>
+ <string>#effb7b</string>
+ <key>findHighlightForeground</key>
+ <string>#000000</string>
+ <key>selectionBorder</key>
+ <string>#222218</string>
+ <key>activeGuide</key>
+ <string>#9D550FB0</string>
+ <key>bracketsForeground</key>
+ <string>#F8F8F2A5</string>
+ <key>bracketsOptions</key>
+ <string>underline</string>
+ <key>bracketContentsForeground</key>
+ <string>#F8F8F2A5</string>
+ <key>bracketContentsOptions</key>
+ <string>underline</string>
+ <key>tagsOptions</key>
+ <string>stippled_underline</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#6272a4</string>
+ <key>fontStyle</key>
+ <string></string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f1fa8c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bd93f9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-in constant</string>
+ <key>scope</key>
+ <string>constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bd93f9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-defined constant</string>
+ <key>scope</key>
+ <string>constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bd93f9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby's @variable</string>
+ <key>scope</key>
+ <string>variable.other.readwrite.instance</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#ffb86c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String interpolation</string>
+ <key>scope</key>
+ <string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#ff79c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby Regexp</string>
+ <key>scope</key>
+ <string>source.ruby string.regexp.classic.ruby,source.ruby string.regexp.mod-r.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#ff5555</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ff79c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#ff79c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#8be9fd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage Type Namespace</string>
+ <key>scope</key>
+ <string>storage.type.namespace</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#8be9fd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage Type Class</string>
+ <key>scope</key>
+ <string>storage.type.class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#ff79c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class name</string>
+ <key>scope</key>
+ <string>entity.name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>underline</string>
+ <key>foreground</key>
+ <string>#8be9fd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Meta Path</string>
+ <key>scope</key>
+ <string>meta.path</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>underline</string>
+ <key>foreground</key>
+ <string>#66d9ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic underline</string>
+ <key>foreground</key>
+ <string>#8be9fd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function name</string>
+ <key>scope</key>
+ <string>entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#50fa7b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function argument</string>
+ <key>scope</key>
+ <string>variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#ffb86c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag name</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#ff79c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#50fa7b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library function</string>
+ <key>scope</key>
+ <string>support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#8be9fd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library constant</string>
+ <key>scope</key>
+ <string>support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#6be5fd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library class&#x2f;type</string>
+ <key>scope</key>
+ <string>support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#66d9ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library variable</string>
+ <key>scope</key>
+ <string>support.other.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Support Other Namespace</string>
+ <key>scope</key>
+ <string>support.other.namespace</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#66d9ef</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#ff79c6</string>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#F8F8F0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#bd93f9</string>
+ <key>foreground</key>
+ <string>#F8F8F0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON String</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#CFCFC2</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.header</string>
+ <key>scope</key>
+ <string>meta.diff, meta.diff.header</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#6272a4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.deleted</string>
+ <key>scope</key>
+ <string>markup.deleted</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ff79c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.inserted</string>
+ <key>scope</key>
+ <string>markup.inserted</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#50fa7b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.changed</string>
+ <key>scope</key>
+ <string>markup.changed</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E6DB74</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>constant.numeric.line-number.find-in-files - match</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bd93f9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.filename</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E6DB74</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>message.error</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F83333</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.string.begin.json - meta.structure.dictionary.value.json, punctuation.definition.string.end.json - meta.structure.dictionary.value.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#EEEEEE</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Structure</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8be9fd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON String</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.value.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f1fa8c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON: 6 deep</string>
+ <key>scope</key>
+ <string>meta meta meta meta meta meta meta.structure.dictionary.value string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#50fa7b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON: 5 deep</string>
+ <key>scope</key>
+ <string>meta meta meta meta meta meta.structure.dictionary.value string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ffb86c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON: 4 deep</string>
+ <key>scope</key>
+ <string>meta meta meta meta meta.structure.dictionary.value string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ff79c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON: 3 deep</string>
+ <key>scope</key>
+ <string>meta meta meta meta.structure.dictionary.value string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bd93f9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON: 2 deep</string>
+ <key>scope</key>
+ <string>meta meta meta.structure.dictionary.value string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#50fa7b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON: 1 deep</string>
+ <key>scope</key>
+ <string>meta meta.structure.dictionary.value string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ffb86c</string>
+ </dict>
+ </dict>
+
+ <!-- Markdown Tweaks -->
+ <dict>
+ <key>name</key>
+ <string>Markup: strike</string>
+ <key>scope</key>
+ <string>markup.strike</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#FFB86C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup: bold</string>
+ <key>scope</key>
+ <string>markup.bold</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#FFB86C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup: italic</string>
+ <key>scope</key>
+ <string>markup.italic</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#FFB86C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown: heading</string>
+ <key>scope</key>
+ <string>markup.heading</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8BE9FD</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown: List Items Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.list_item.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FF79C6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown: Blockquote</string>
+ <key>scope</key>
+ <string>markup.quote</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#6272A4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown: Blockquote Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.blockquote.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>background</key>
+ <string>#6272A4</string>
+ <key>foreground</key>
+ <string>#6272A4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown: Separator</string>
+ <key>scope</key>
+ <string>meta.separator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#6272A4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup: raw inline</string>
+ <key>scope</key>
+ <string>text.html.markdown markup.raw.inline</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#50FA7B</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup: underline</string>
+ <key>scope</key>
+ <string>markup.underline</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>underline</string>
+ <key>foreground</key>
+ <string>#BD93F9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup: Raw block</string>
+ <key>scope</key>
+ <string>markup.raw.block</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#CFCFC2</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown: Raw Block fenced source</string>
+ <key>scope</key>
+ <string>markup.raw.block.fenced.markdown source</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F8F8F2</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown: Fenced Bode Block</string>
+ <key>scope</key>
+ <string>punctuation.definition.fenced.markdown, variable.language.fenced.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#6272A4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown: Fenced Language</string>
+ <key>scope</key>
+ <string>variable.language.fenced.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#6272A4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation Accessor</string>
+ <key>scope</key>
+ <string>punctuation.accessor</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FF79C6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Meta Function Return Type</string>
+ <key>scope</key>
+ <string>meta.function.return-type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FF79C6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation Section Block Begin</string>
+ <key>scope</key>
+ <string>punctuation.section.block.begin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ffffff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation Section Block End</string>
+ <key>scope</key>
+ <string>punctuation.section.block.end</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ffffff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation Section Embedded Begin</string>
+ <key>scope</key>
+ <string>punctuation.section.embedded.begin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ff79c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation Section Embedded End</string>
+ <key>scope</key>
+ <string>punctuation.section.embedded.end</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ff79c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation Separator Namespace</string>
+ <key>scope</key>
+ <string>punctuation.separator.namespace</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ff79c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable Function</string>
+ <key>scope</key>
+ <string>variable.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#50fa7b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable Other</string>
+ <key>scope</key>
+ <string>variable.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ffffff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable Language</string>
+ <key>scope</key>
+ <string>variable.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bd93f9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Entity Name Module Ruby</string>
+ <key>scope</key>
+ <string>entity.name.module.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8be9fd</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Entity Name Constant Ruby</string>
+ <key>scope</key>
+ <string>entity.name.constant.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bd93f9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Support Function Builtin Ruby</string>
+ <key>scope</key>
+ <string>support.function.builtin.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ffffff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage Type Namespace CS</string>
+ <key>scope</key>
+ <string>storage.type.namespace.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ff79c6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Entity Name Namespace CS</string>
+ <key>scope</key>
+ <string>entity.name.namespace.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8be9fd</string>
+ </dict>
+ </dict>
+ </array>
+ <key>uuid</key>
+ <string>83091B89-765E-4F0D-9275-0EC6CB084126</string>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>semanticClass</key>
+ <string>theme.dracula</string>
+ <key>author</key>
+ <string>Zeno Rocha</string>
+</dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/everforest-medium.yazi/LICENSE b/fedora/.config/yazi/flavors/everforest-medium.yazi/LICENSE
new file mode 100644
index 0000000..41d1e5e
--- /dev/null
+++ b/fedora/.config/yazi/flavors/everforest-medium.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Chromium Oxide
+
+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.
diff --git a/fedora/.config/yazi/flavors/everforest-medium.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/everforest-medium.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..8f1431d
--- /dev/null
+++ b/fedora/.config/yazi/flavors/everforest-medium.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Mitchell Hanberg
+
+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.
diff --git a/fedora/.config/yazi/flavors/everforest-medium.yazi/README.md b/fedora/.config/yazi/flavors/everforest-medium.yazi/README.md
new file mode 100644
index 0000000..95029b5
--- /dev/null
+++ b/fedora/.config/yazi/flavors/everforest-medium.yazi/README.md
@@ -0,0 +1,45 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Example Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```bash
+ya pkg add Chromium-3-Oxide/everforest-medium
+```
+
+Or:
+
+```bash
+ya pack -a Chromium-3-Oxide/everforest-medium
+```
+
+## ⚙️ Usage
+
+Add the these lines to your `theme.toml` configuration file to use it:
+
+```toml
+[flavor]
+dark = "everforest-medium"
+```
+
+For Yazi versions before 0.4:
+
+```toml
+[flavor]
+use = "everforest-medium"
+```
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/everforest-medium.yazi/flavor.toml b/fedora/.config/yazi/flavors/everforest-medium.yazi/flavor.toml
new file mode 100644
index 0000000..03f3bce
--- /dev/null
+++ b/fedora/.config/yazi/flavors/everforest-medium.yazi/flavor.toml
@@ -0,0 +1,229 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[mgr]
+cwd = { fg = "#7fbbb3" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "#dbbc7f", bold = true, italic = true, underline = true }
+find_position = { fg = "#d699b6", bg = "reset", bold = true, italic = true }
+
+# Symlink
+symlink_target = { italic = true }
+
+# Marker
+marker_copied = { fg = "#a7c080", bg = "#a7c080" }
+marker_cut = { fg = "#e67e80", bg = "#e67e80" }
+marker_marked = { fg = "#7fbbb3", bg = "#7fbbb3" }
+marker_selected = { fg = "#dbbc7f", bg = "#dbbc7f" }
+
+# Count
+count_copied = { fg = "#343f44", bg = "#a7c080" }
+count_cut = { fg = "#343f44", bg = "#e67e80" }
+count_selected = { fg = "#343f44", bg = "#dbbc7f" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "#4f585e" }
+
+# Highlighting
+syntect_theme = ""
+
+# : }}}
+
+
+# : Tabs {{{
+
+[tabs]
+active = { bg = "#7fbbb3", bold = true }
+inactive = { fg = "#7fbbb3", bg = "#4f585e" }
+
+# Separator
+sep_inner = { open = "", close = "" }
+sep_outer = { open = "", close = "" }
+
+# : }}}
+
+
+# : Mode {{{
+
+[mode]
+normal_main = { fg = "#3d484d", bg = "#a7c080", bold = true }
+normal_alt = { fg = "#7fbbb3", bg = "#4f585e", bold = true }
+
+# Select mode
+select_main = { fg = "#3d484d", bg = "#e67e80", bold = true }
+select_alt = { fg = "#7fbbb3", bg = "#4f585e", bold = true }
+
+# Unset mode
+unset_main = { fg = "#3d484d", bg = "#7fbbb3", bold = true }
+unset_alt = { fg = "#7fbbb3", bg = "#4f585e", bold = true }
+
+# : }}}
+
+
+# : Status bar {{{
+
+[status]
+overall = {}
+sep_left = { open = "", close = "" }
+sep_right = { open = "", close = "" }
+
+# Permissions
+permissions_s = { fg = "#2d353b" }
+permissions_t = { fg = "#a7c080" }
+permissions_r = { fg = "#dbbc7f" }
+permissions_w = { fg = "#e67e80" }
+permissions_x = { fg = "#7fbbb3" }
+
+# Progress
+progress_label = { bold = true }
+progress_normal = { fg = "#7fbbb3", bg = "#232a2e" }
+progress_error = { fg = "#e67e80", bg = "#232a2e" }
+
+# : }}}
+
+
+# : Which {{{
+
+[which]
+cols = 3
+mask = { bg = "#2d353b" }
+cand = { fg = "#7fbbb3" }
+rest = { fg = "#2d353b" }
+desc = { fg = "#d699b6" }
+separator = "  "
+separator_style = { fg = "#2d353b" }
+
+# : }}}
+
+
+# : Confirmation {{{
+
+[confirm]
+border = { fg = "#7fbbb3" }
+title = { fg = "#7fbbb3" }
+body = {}
+list = {}
+btn_yes = { reversed = true }
+btn_no = {}
+btn_labels = [ " [Y]es ", " (N)o " ]
+
+# : }}}
+
+
+# : Spotter {{{
+
+[spot]
+border = { fg = "#7fbbb3" }
+title = { fg = "#7fbbb3" }
+
+# Table
+tbl_col = { fg = "#7fbbb3" }
+tbl_cell = { fg = "#dbbc7f", reversed = true }
+
+# : }}}
+
+
+# : Notification {{{
+
+[notify]
+title_info = { fg = "#a7c080" }
+title_warn = { fg = "#dbbc7f" }
+title_error = { fg = "#e67e80" }
+
+# Icons
+icon_info = ""
+icon_warn = ""
+icon_error = ""
+
+# : }}}
+
+
+# : Picker {{{
+
+[pick]
+border = { fg = "#7fbbb3" }
+active = { fg = "#d699b6", bold = true }
+inactive = {}
+
+# : }}}
+
+
+# : Input {{{
+
+[input]
+border = { fg = "#7fbbb3" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+# : }}}
+
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "#7fbbb3" }
+active = { reversed = true }
+inactive = {}
+
+# Icons
+icon_file = ""
+icon_folder = ""
+icon_command = ""
+
+# : }}}
+
+
+# : Task manager {{{
+
+[tasks]
+border = { fg = "#7fbbb3" }
+title = {}
+hovered = { fg = "#d699b6", underline = true }
+
+# : }}}
+
+
+# : Help menu {{{
+
+[help]
+on = { fg = "#7fbbb3" }
+run = { fg = "#d699b6" }
+desc = {}
+hovered = { reversed = true, bold = true }
+footer = { fg = "#2d353b", bg = "#d3c6aa" }
+
+# : }}}
+
+
+# : File-specific styles {{{
+
+[filetype]
+
+rules = [
+ # Images
+ { mime = "image/*", fg = "#7fbbb3" },
+
+ # Media
+ { mime = "{audio,video}/*", fg = "#d699b6" },
+
+ # Archives
+ { mime = "application/*zip", fg = "#e67e80" },
+ { mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}", fg = "#e67e80" },
+
+ # Documents
+ { mime = "application/{pdf,doc,rtf,vnd.*}", fg = "#7fbbb3" },
+
+ # Fallback
+ { name = "*", fg = "#83c092" },
+ { name = "*/", fg = "#a7c080" }
+]
+
+# : }}}
diff --git a/fedora/.config/yazi/flavors/everforest-medium.yazi/preview.png b/fedora/.config/yazi/flavors/everforest-medium.yazi/preview.png
new file mode 100644
index 0000000..d3960cc
--- /dev/null
+++ b/fedora/.config/yazi/flavors/everforest-medium.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/everforest-medium.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/everforest-medium.yazi/tmtheme.xml
new file mode 100644
index 0000000..59f8266
--- /dev/null
+++ b/fedora/.config/yazi/flavors/everforest-medium.yazi/tmtheme.xml
@@ -0,0 +1,3186 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>name</key>
+ <string>Everforest Dark</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>accent</key>
+ <string>#a7c080</string>
+ <key>background</key>
+ <string>#2d353b</string>
+ <key>caret</key>
+ <string>#d3c6aa</string>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ <key>lineHighlight</key>
+ <string>#3d484d90</string>
+ <key>selection</key>
+ <string>#475258c0</string>
+ <key>activeGuide</key>
+ <string>#9aa79d20</string>
+ <key>findHighlight</key>
+ <string>#899c4040</string>
+ <key>misspelling</key>
+ <string>#da6362</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter deleted</string>
+ <key>scope</key>
+ <string>markup.deleted.git_gutter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80a0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter inserted</string>
+ <key>scope</key>
+ <string>markup.inserted.git_gutter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080a0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter changed</string>
+ <key>scope</key>
+ <string>markup.changed.git_gutter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3a0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter untracked</string>
+ <key>scope</key>
+ <string>markup.untracked.git_gutter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7fa0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter ignored</string>
+ <key>scope</key>
+ <string>markup.ignored.git_gutter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4f585e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter comment</string>
+ <key>scope</key>
+ <string>comment.line.annotation.git_gutter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment, string.comment, punctuation.definition.comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword, storage.type.function, storage.type.class, storage.type.enum, storage.type.interface, storage.type.property, keyword.operator.new, keyword.operator.expression, keyword.operator.new, keyword.operator.delete, storage.type.extends</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Debug</string>
+ <key>scope</key>
+ <string>keyword.other.debugger</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage, modifier, keyword.var, entity.name.tag, keyword.control.case, keyword.control.switch</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Operator</string>
+ <key>scope</key>
+ <string>keyword.operator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string, punctuation.definition.string.end, punctuation.definition.string.begin, punctuation.definition.string.template.begin, punctuation.definition.string.template.end</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String Escape</string>
+ <key>scope</key>
+ <string>constant.character.escape, punctuation.quasi.element, punctuation.definition.template-expression, punctuation.section.embedded, storage.type.format, constant.other.placeholder, constant.other.placeholder, variable.interpolation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function</string>
+ <key>scope</key>
+ <string>entity.name.function, support.function, meta.function, meta.function-call, meta.definition.method</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Preproc</string>
+ <key>scope</key>
+ <string>keyword.control.at-rule, keyword.control.import, keyword.control.export, storage.type.namespace, punctuation.decorator, keyword.control.directive, keyword.preprocessor, punctuation.definition.preprocessor, punctuation.definition.directive, keyword.other.import, keyword.other.package, entity.name.type.namespace, entity.name.scope-resolution, keyword.other.using, keyword.package, keyword.import, keyword.map</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Annotation</string>
+ <key>scope</key>
+ <string>storage.type.annotation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Label</string>
+ <key>scope</key>
+ <string>entity.name.label, constant.other.label</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Modules</string>
+ <key>scope</key>
+ <string>support.module, support.node, support.other.module, support.type.object.module, entity.name.type.module, entity.name.type.class.module, keyword.control.module</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Type</string>
+ <key>scope</key>
+ <string>storage.type, support.type, entity.name.type, keyword.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class</string>
+ <key>scope</key>
+ <string>entity.name.type.class, support.class, entity.name.class, entity.other.inherited-class, storage.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Boolean</string>
+ <key>scope</key>
+ <string>constant.language.boolean</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Macro</string>
+ <key>scope</key>
+ <string>entity.name.function.preprocessor</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Special identifier</string>
+ <key>scope</key>
+ <string>variable.language.this, variable.language.self, variable.language.super, keyword.other.this, variable.language.special, constant.language.null, constant.language.undefined, constant.language.nan</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Constant</string>
+ <key>scope</key>
+ <string>constant.language, support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Identifier</string>
+ <key>scope</key>
+ <string>variable, support.variable, meta.definition.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Property</string>
+ <key>scope</key>
+ <string>variable.object.property, support.variable.property, variable.other.property, variable.other.object.property, variable.other.enummember, variable.other.member, meta.object-literal.key</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Delimiter</string>
+ <key>scope</key>
+ <string>punctuation, meta.brace, meta.delimiter, meta.bracket</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown heading1</string>
+ <key>scope</key>
+ <string>heading.1.markdown, markup.heading.setext.1.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown heading2</string>
+ <key>scope</key>
+ <string>heading.2.markdown, markup.heading.setext.2.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown heading3</string>
+ <key>scope</key>
+ <string>heading.3.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown heading4</string>
+ <key>scope</key>
+ <string>heading.4.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown heading5</string>
+ <key>scope</key>
+ <string>heading.5.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown heading6</string>
+ <key>scope</key>
+ <string>heading.6.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown heading delimiter</string>
+ <key>scope</key>
+ <string>punctuation.definition.heading.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ <key>fontStyle</key>
+ <string>regular</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown link</string>
+ <key>scope</key>
+ <string>string.other.link.title.markdown, constant.other.reference.link.markdown, string.other.link.description.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ <key>fontStyle</key>
+ <string>regular</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown link text</string>
+ <key>scope</key>
+ <string>markup.underline.link.image.markdown, markup.underline.link.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ <key>fontStyle</key>
+ <string>underline</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown delimiter</string>
+ <key>scope</key>
+ <string>punctuation.definition.string.begin.markdown, punctuation.definition.string.end.markdown, punctuation.definition.italic.markdown, punctuation.definition.quote.begin.markdown, punctuation.definition.metadata.markdown, punctuation.separator.key-value.markdown, punctuation.definition.constant.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown bold delimiter</string>
+ <key>scope</key>
+ <string>punctuation.definition.bold.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ <key>fontStyle</key>
+ <string>regular</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown separator delimiter</string>
+ <key>scope</key>
+ <string>meta.separator.markdown, punctuation.definition.constant.begin.markdown, punctuation.definition.constant.end.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown italic</string>
+ <key>scope</key>
+ <string>markup.italic</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown bold</string>
+ <key>scope</key>
+ <string>markup.bold</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown bold italic</string>
+ <key>scope</key>
+ <string>markup.bold markup.italic, markup.italic markup.bold</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown code delimiter</string>
+ <key>scope</key>
+ <string>punctuation.definition.markdown, punctuation.definition.raw.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown code type</string>
+ <key>scope</key>
+ <string>fenced_code.block.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown code block</string>
+ <key>scope</key>
+ <string>markup.fenced_code.block.markdown, markup.inline.raw.string.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown list mark</string>
+ <key>scope</key>
+ <string>punctuation.definition.list.begin.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>reStructuredText heading</string>
+ <key>scope</key>
+ <string>punctuation.definition.heading.restructuredtext</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>reStructuredText delimiter</string>
+ <key>scope</key>
+ <string>punctuation.definition.field.restructuredtext, punctuation.separator.key-value.restructuredtext, punctuation.definition.directive.restructuredtext, punctuation.definition.constant.restructuredtext, punctuation.definition.italic.restructuredtext, punctuation.definition.table.restructuredtext</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>reStructuredText delimiter bold</string>
+ <key>scope</key>
+ <string>punctuation.definition.bold.restructuredtext</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ <key>fontStyle</key>
+ <string>regular</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>reStructuredText aqua</string>
+ <key>scope</key>
+ <string>entity.name.tag.restructuredtext, punctuation.definition.link.restructuredtext, punctuation.definition.raw.restructuredtext, punctuation.section.raw.restructuredtext</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>reStructuredText purple</string>
+ <key>scope</key>
+ <string>constant.other.footnote.link.restructuredtext</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>reStructuredText red</string>
+ <key>scope</key>
+ <string>support.directive.restructuredtext</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>reStructuredText green</string>
+ <key>scope</key>
+ <string>entity.name.directive.restructuredtext, markup.raw.restructuredtext, markup.raw.inner.restructuredtext, string.other.link.title.restructuredtext</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTex delimiter</string>
+ <key>scope</key>
+ <string>punctuation.definition.function.latex, punctuation.definition.function.tex, punctuation.definition.keyword.latex, constant.character.newline.tex, punctuation.definition.keyword.tex</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTex red</string>
+ <key>scope</key>
+ <string>support.function.be.latex</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTex orange</string>
+ <key>scope</key>
+ <string>support.function.section.latex, keyword.control.table.cell.latex, keyword.control.table.newline.latex</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTex yellow</string>
+ <key>scope</key>
+ <string>support.class.latex, variable.parameter.latex, variable.parameter.function.latex, variable.parameter.definition.label.latex, constant.other.reference.label.latex</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>LaTex purple</string>
+ <key>scope</key>
+ <string>keyword.control.preamble.latex</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Html grey</string>
+ <key>scope</key>
+ <string>punctuation.separator.namespace.xml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Html orange</string>
+ <key>scope</key>
+ <string>entity.name.tag.html, entity.name.tag.xml, entity.name.tag.localname.xml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Html yellow</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.html, entity.other.attribute-name.xml, entity.other.attribute-name.localname.xml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Html green</string>
+ <key>scope</key>
+ <string>string.quoted.double.html, string.quoted.single.html, punctuation.definition.string.begin.html, punctuation.definition.string.end.html, punctuation.separator.key-value.html, punctuation.definition.string.begin.xml, punctuation.definition.string.end.xml, string.quoted.double.xml, string.quoted.single.xml, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html, punctuation.definition.tag.xml, meta.tag.xml, meta.tag.preprocessor.xml, meta.tag.other.html, meta.tag.block.any.html, meta.tag.inline.any.html</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Html purple</string>
+ <key>scope</key>
+ <string>variable.language.documentroot.xml, meta.tag.sgml.doctype.xml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Proto yellow</string>
+ <key>scope</key>
+ <string>storage.type.proto</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Proto green</string>
+ <key>scope</key>
+ <string>string.quoted.double.proto.syntax, string.quoted.single.proto.syntax, string.quoted.double.proto, string.quoted.single.proto</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Proto aqua</string>
+ <key>scope</key>
+ <string>entity.name.class.proto, entity.name.class.message.proto</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS grey</string>
+ <key>scope</key>
+ <string>punctuation.definition.entity.css, punctuation.separator.key-value.css, punctuation.terminator.rule.css, punctuation.separator.list.comma.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS red</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.class.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS orange</string>
+ <key>scope</key>
+ <string>keyword.other.unit</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS yellow</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.pseudo-class.css, entity.other.attribute-name.pseudo-element.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS green</string>
+ <key>scope</key>
+ <string>string.quoted.single.css, string.quoted.double.css, support.constant.property-value.css, meta.property-value.css, punctuation.definition.string.begin.css, punctuation.definition.string.end.css, constant.numeric.css, support.constant.font-name.css, variable.parameter.keyframe-list.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS aqua</string>
+ <key>scope</key>
+ <string>support.type.property-name.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS blue</string>
+ <key>scope</key>
+ <string>support.type.vendored.property-name.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS purple</string>
+ <key>scope</key>
+ <string>entity.name.tag.css, entity.other.keyframe-offset.css, punctuation.definition.keyword.css, keyword.control.at-rule.keyframes.css, meta.selector.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SASS grey</string>
+ <key>scope</key>
+ <string>punctuation.definition.entity.scss, punctuation.separator.key-value.scss, punctuation.terminator.rule.scss, punctuation.separator.list.comma.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SASS orange</string>
+ <key>scope</key>
+ <string>keyword.control.at-rule.keyframes.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SASS yellow</string>
+ <key>scope</key>
+ <string>punctuation.definition.interpolation.begin.bracket.curly.scss, punctuation.definition.interpolation.end.bracket.curly.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SASS green</string>
+ <key>scope</key>
+ <string>punctuation.definition.string.begin.scss, punctuation.definition.string.end.scss, string.quoted.double.scss, string.quoted.single.scss, constant.character.css.sass, meta.property-value.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SASS purple</string>
+ <key>scope</key>
+ <string>keyword.control.at-rule.include.scss, keyword.control.at-rule.use.scss, keyword.control.at-rule.mixin.scss, keyword.control.at-rule.extend.scss, keyword.control.at-rule.import.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Stylus white</string>
+ <key>scope</key>
+ <string>meta.function.stylus</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Stylus yellow</string>
+ <key>scope</key>
+ <string>entity.name.function.stylus</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JavaScript white</string>
+ <key>scope</key>
+ <string>string.unquoted.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JavaScript grey</string>
+ <key>scope</key>
+ <string>punctuation.accessor.js, punctuation.separator.key-value.js, punctuation.separator.label.js, keyword.operator.accessor.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JavaScript red</string>
+ <key>scope</key>
+ <string>punctuation.definition.block.tag.jsdoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JavaScript orange</string>
+ <key>scope</key>
+ <string>storage.type.js, storage.type.function.arrow.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSX white</string>
+ <key>scope</key>
+ <string>JSXNested</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSX green</string>
+ <key>scope</key>
+ <string>punctuation.definition.tag.jsx, entity.other.attribute-name.jsx, punctuation.definition.tag.begin.js.jsx, punctuation.definition.tag.end.js.jsx, entity.other.attribute-name.js.jsx</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TypeScript white</string>
+ <key>scope</key>
+ <string>entity.name.type.module.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TypeScript grey</string>
+ <key>scope</key>
+ <string>keyword.operator.type.annotation.ts, punctuation.accessor.ts, punctuation.separator.key-value.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TypeScript green</string>
+ <key>scope</key>
+ <string>punctuation.definition.tag.directive.ts, entity.other.attribute-name.directive.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TypeScript aqua</string>
+ <key>scope</key>
+ <string>entity.name.type.ts, entity.name.type.interface.ts, entity.other.inherited-class.ts, entity.name.type.alias.ts, entity.name.type.class.ts, entity.name.type.enum.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TypeScript orange</string>
+ <key>scope</key>
+ <string>storage.type.ts, storage.type.function.arrow.ts, storage.type.type.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TypeScript blue</string>
+ <key>scope</key>
+ <string>entity.name.type.module.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TypeScript purple</string>
+ <key>scope</key>
+ <string>keyword.control.import.ts, keyword.control.export.ts, storage.type.namespace.ts</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TSX white</string>
+ <key>scope</key>
+ <string>entity.name.type.module.tsx</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TSX grey</string>
+ <key>scope</key>
+ <string>keyword.operator.type.annotation.tsx, punctuation.accessor.tsx, punctuation.separator.key-value.tsx</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TSX green</string>
+ <key>scope</key>
+ <string>punctuation.definition.tag.directive.tsx, entity.other.attribute-name.directive.tsx, punctuation.definition.tag.begin.tsx, punctuation.definition.tag.end.tsx, entity.other.attribute-name.tsx</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TSX aqua</string>
+ <key>scope</key>
+ <string>entity.name.type.tsx, entity.name.type.interface.tsx, entity.other.inherited-class.tsx, entity.name.type.alias.tsx, entity.name.type.class.tsx, entity.name.type.enum.tsx</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TSX blue</string>
+ <key>scope</key>
+ <string>entity.name.type.module.tsx</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TSX purple</string>
+ <key>scope</key>
+ <string>keyword.control.import.tsx, keyword.control.export.tsx, storage.type.namespace.tsx</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TSX orange</string>
+ <key>scope</key>
+ <string>storage.type.tsx, storage.type.function.arrow.tsx, storage.type.type.tsx, support.class.component.tsx</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CoffeeScript orange</string>
+ <key>scope</key>
+ <string>storage.type.function.coffee</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PureScript white</string>
+ <key>scope</key>
+ <string>meta.type-signature.purescript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PureScript orange</string>
+ <key>scope</key>
+ <string>keyword.other.double-colon.purescript, keyword.other.arrow.purescript, keyword.other.big-arrow.purescript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PureScript yellow</string>
+ <key>scope</key>
+ <string>entity.name.function.purescript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PureScript green</string>
+ <key>scope</key>
+ <string>string.quoted.single.purescript, string.quoted.double.purescript, punctuation.definition.string.begin.purescript, punctuation.definition.string.end.purescript, string.quoted.triple.purescript, entity.name.type.purescript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PureScript purple</string>
+ <key>scope</key>
+ <string>support.other.module.purescript</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Dart grey</string>
+ <key>scope</key>
+ <string>punctuation.dot.dart</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Dart orange</string>
+ <key>scope</key>
+ <string>storage.type.primitive.dart</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Dart yellow</string>
+ <key>scope</key>
+ <string>support.class.dart</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Dart green</string>
+ <key>scope</key>
+ <string>entity.name.function.dart, string.interpolated.single.dart, string.interpolated.double.dart</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Dart blue</string>
+ <key>scope</key>
+ <string>variable.language.dart</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Dart purple</string>
+ <key>scope</key>
+ <string>keyword.other.import.dart, storage.type.annotation.dart</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Pug red</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.class.pug</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Pug orange</string>
+ <key>scope</key>
+ <string>storage.type.function.pug</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Pug aqua</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.tag.pug</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Pug purple</string>
+ <key>scope</key>
+ <string>entity.name.tag.pug, storage.type.import.include.pug</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C white</string>
+ <key>scope</key>
+ <string>meta.function-call.c, storage.modifier.array.bracket.square.c, meta.function.definition.parameters.c</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C grey</string>
+ <key>scope</key>
+ <string>punctuation.separator.dot-access.c, constant.character.escape.line-continuation.c</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C red</string>
+ <key>scope</key>
+ <string>keyword.control.directive.include.c, punctuation.definition.directive.c, keyword.control.directive.pragma.c, keyword.control.directive.line.c, keyword.control.directive.define.c, keyword.control.directive.conditional.c, keyword.control.directive.diagnostic.error.c, keyword.control.directive.undef.c, keyword.control.directive.conditional.ifdef.c, keyword.control.directive.endif.c, keyword.control.directive.conditional.ifndef.c, keyword.control.directive.conditional.if.c, keyword.control.directive.else.c</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C orange</string>
+ <key>scope</key>
+ <string>punctuation.separator.pointer-access.c</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C aqua</string>
+ <key>scope</key>
+ <string>variable.other.member.c</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ white</string>
+ <key>scope</key>
+ <string>meta.function-call.cpp, storage.modifier.array.bracket.square.cpp, meta.function.definition.parameters.cpp, meta.body.function.definition.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ grey</string>
+ <key>scope</key>
+ <string>punctuation.separator.dot-access.cpp, constant.character.escape.line-continuation.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ red</string>
+ <key>scope</key>
+ <string>keyword.control.directive.include.cpp, punctuation.definition.directive.cpp, keyword.control.directive.pragma.cpp, keyword.control.directive.line.cpp, keyword.control.directive.define.cpp, keyword.control.directive.conditional.cpp, keyword.control.directive.diagnostic.error.cpp, keyword.control.directive.undef.cpp, keyword.control.directive.conditional.ifdef.cpp, keyword.control.directive.endif.cpp, keyword.control.directive.conditional.ifndef.cpp, keyword.control.directive.conditional.if.cpp, keyword.control.directive.else.cpp, storage.type.namespace.definition.cpp, keyword.other.using.directive.cpp, storage.type.struct.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ orange</string>
+ <key>scope</key>
+ <string>punctuation.separator.pointer-access.cpp, punctuation.section.angle-brackets.begin.template.call.cpp, punctuation.section.angle-brackets.end.template.call.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C++ aqua</string>
+ <key>scope</key>
+ <string>variable.other.member.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# red</string>
+ <key>scope</key>
+ <string>keyword.other.using.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# yellow</string>
+ <key>scope</key>
+ <string>keyword.type.cs, constant.character.escape.cs, punctuation.definition.interpolation.begin.cs, punctuation.definition.interpolation.end.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# green</string>
+ <key>scope</key>
+ <string>string.quoted.double.cs, string.quoted.single.cs, punctuation.definition.string.begin.cs, punctuation.definition.string.end.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# aqua</string>
+ <key>scope</key>
+ <string>variable.other.object.property.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C# purple</string>
+ <key>scope</key>
+ <string>entity.name.type.namespace.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>F# white</string>
+ <key>scope</key>
+ <string>keyword.symbol.fsharp, constant.language.unit.fsharp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>F# yellow</string>
+ <key>scope</key>
+ <string>keyword.format.specifier.fsharp, entity.name.type.fsharp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>F# green</string>
+ <key>scope</key>
+ <string>string.quoted.double.fsharp, string.quoted.single.fsharp, punctuation.definition.string.begin.fsharp, punctuation.definition.string.end.fsharp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>F# blue</string>
+ <key>scope</key>
+ <string>entity.name.section.fsharp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>F# purple</string>
+ <key>scope</key>
+ <string>support.function.attribute.fsharp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java grey</string>
+ <key>scope</key>
+ <string>punctuation.separator.java, punctuation.separator.period.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java red</string>
+ <key>scope</key>
+ <string>keyword.other.import.java, keyword.other.package.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java orange</string>
+ <key>scope</key>
+ <string>storage.type.function.arrow.java, keyword.control.ternary.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java aqua</string>
+ <key>scope</key>
+ <string>variable.other.property.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Java purple</string>
+ <key>scope</key>
+ <string>variable.language.wildcard.java, storage.modifier.import.java, storage.type.annotation.java, punctuation.definition.annotation.java, storage.modifier.package.java, entity.name.type.module.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Kotlin red</string>
+ <key>scope</key>
+ <string>keyword.other.import.kotlin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Kotlin orange</string>
+ <key>scope</key>
+ <string>storage.type.kotlin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Kotlin aqua</string>
+ <key>scope</key>
+ <string>constant.language.kotlin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Kotlin purple</string>
+ <key>scope</key>
+ <string>entity.name.package.kotlin, storage.type.annotation.kotlin</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Scala purple</string>
+ <key>scope</key>
+ <string>entity.name.package.scala</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Scala blue</string>
+ <key>scope</key>
+ <string>constant.language.scala</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Scala aqua</string>
+ <key>scope</key>
+ <string>entity.name.import.scala</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Scala green</string>
+ <key>scope</key>
+ <string>string.quoted.double.scala, string.quoted.single.scala, punctuation.definition.string.begin.scala, punctuation.definition.string.end.scala, string.quoted.double.interpolated.scala, string.quoted.single.interpolated.scala, string.quoted.triple.scala</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Scala yellow</string>
+ <key>scope</key>
+ <string>entity.name.class, entity.other.inherited-class.scala</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Scala orange</string>
+ <key>scope</key>
+ <string>keyword.declaration.stable.scala, keyword.other.arrow.scala</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Scala red</string>
+ <key>scope</key>
+ <string>keyword.other.import.scala</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Groovy white</string>
+ <key>scope</key>
+ <string>keyword.operator.navigation.groovy, meta.method.body.java, meta.definition.method.groovy, meta.definition.method.signature.java</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Scala grey</string>
+ <key>scope</key>
+ <string>punctuation.separator.groovy</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Scala red</string>
+ <key>scope</key>
+ <string>keyword.other.import.groovy, keyword.other.package.groovy, keyword.other.import.static.groovy</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Groovy orange</string>
+ <key>scope</key>
+ <string>storage.type.def.groovy</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Groovy green</string>
+ <key>scope</key>
+ <string>variable.other.interpolated.groovy, meta.method.groovy</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Groovy aqua</string>
+ <key>scope</key>
+ <string>storage.modifier.import.groovy, storage.modifier.package.groovy</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Groovy purple</string>
+ <key>scope</key>
+ <string>storage.type.annotation.groovy</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Go red</string>
+ <key>scope</key>
+ <string>keyword.type.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Go aqua</string>
+ <key>scope</key>
+ <string>entity.name.package.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Go purple</string>
+ <key>scope</key>
+ <string>keyword.import.go, keyword.package.go</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust white</string>
+ <key>scope</key>
+ <string>entity.name.type.mod.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust grey</string>
+ <key>scope</key>
+ <string>keyword.operator.path.rust, keyword.operator.member-access.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust orange</string>
+ <key>scope</key>
+ <string>storage.type.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust aqua</string>
+ <key>scope</key>
+ <string>support.constant.core.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Rust purple</string>
+ <key>scope</key>
+ <string>meta.attribute.rust, variable.language.rust, storage.type.module.rust</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Swift white</string>
+ <key>scope</key>
+ <string>meta.function-call.swift, support.function.any-method.swift</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Swift aqua</string>
+ <key>scope</key>
+ <string>support.variable.swift</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP white</string>
+ <key>scope</key>
+ <string>keyword.operator.class.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP orange</string>
+ <key>scope</key>
+ <string>storage.type.trait.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP aqua</string>
+ <key>scope</key>
+ <string>constant.language.php, support.other.namespace.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP blue</string>
+ <key>scope</key>
+ <string>storage.type.modifier.access.control.public.cpp, storage.type.modifier.access.control.private.cpp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP purple</string>
+ <key>scope</key>
+ <string>keyword.control.import.include.php, storage.type.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python white</string>
+ <key>scope</key>
+ <string>meta.function-call.arguments.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python grey</string>
+ <key>scope</key>
+ <string>punctuation.definition.decorator.python, punctuation.separator.period.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python aqua</string>
+ <key>scope</key>
+ <string>constant.language.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Python purple</string>
+ <key>scope</key>
+ <string>keyword.control.import.python, keyword.control.import.from.python</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lua aqua</string>
+ <key>scope</key>
+ <string>constant.language.lua</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lua blue</string>
+ <key>scope</key>
+ <string>entity.name.class.lua</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby white</string>
+ <key>scope</key>
+ <string>meta.function.method.with-arguments.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby grey</string>
+ <key>scope</key>
+ <string>punctuation.separator.method.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby orange</string>
+ <key>scope</key>
+ <string>keyword.control.pseudo-method.ruby, storage.type.variable.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby green</string>
+ <key>scope</key>
+ <string>keyword.other.special-method.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby purple</string>
+ <key>scope</key>
+ <string>keyword.control.module.ruby, punctuation.definition.constant.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby yellow</string>
+ <key>scope</key>
+ <string>string.regexp.character-class.ruby,string.regexp.interpolated.ruby,punctuation.definition.character-class.ruby,string.regexp.group.ruby, punctuation.section.regexp.ruby, punctuation.definition.group.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby blue</string>
+ <key>scope</key>
+ <string>variable.other.constant.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Haskell orange</string>
+ <key>scope</key>
+ <string>keyword.other.arrow.haskell, keyword.other.big-arrow.haskell, keyword.other.double-colon.haskell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Haskell yellow</string>
+ <key>scope</key>
+ <string>storage.type.haskell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Haskell green</string>
+ <key>scope</key>
+ <string>constant.other.haskell, string.quoted.double.haskell, string.quoted.single.haskell, punctuation.definition.string.begin.haskell, punctuation.definition.string.end.haskell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Haskell blue</string>
+ <key>scope</key>
+ <string>entity.name.function.haskell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Haskell aqua</string>
+ <key>scope</key>
+ <string>entity.name.namespace, meta.preprocessor.haskell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia red</string>
+ <key>scope</key>
+ <string>keyword.control.import.julia, keyword.control.export.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia orange</string>
+ <key>scope</key>
+ <string>keyword.storage.modifier.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia aqua</string>
+ <key>scope</key>
+ <string>constant.language.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Julia purple</string>
+ <key>scope</key>
+ <string>support.function.macro.julia</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Elm white</string>
+ <key>scope</key>
+ <string>keyword.other.period.elm</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Elm yellow</string>
+ <key>scope</key>
+ <string>storage.type.elm</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>R orange</string>
+ <key>scope</key>
+ <string>keyword.other.r</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>R green</string>
+ <key>scope</key>
+ <string>entity.name.function.r, variable.function.r</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>R aqua</string>
+ <key>scope</key>
+ <string>constant.language.r</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>R purple</string>
+ <key>scope</key>
+ <string>entity.namespace.r</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Erlang grey</string>
+ <key>scope</key>
+ <string>punctuation.separator.module-function.erlang, punctuation.section.directive.begin.erlang</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Erlang red</string>
+ <key>scope</key>
+ <string>keyword.control.directive.erlang, keyword.control.directive.define.erlang</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Erlang yellow</string>
+ <key>scope</key>
+ <string>entity.name.type.class.module.erlang</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Erlang green</string>
+ <key>scope</key>
+ <string>string.quoted.double.erlang, string.quoted.single.erlang, punctuation.definition.string.begin.erlang, punctuation.definition.string.end.erlang</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Erlang purple</string>
+ <key>scope</key>
+ <string>keyword.control.directive.export.erlang, keyword.control.directive.module.erlang, keyword.control.directive.import.erlang, keyword.control.directive.behaviour.erlang</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Elixir aqua</string>
+ <key>scope</key>
+ <string>variable.other.readwrite.module.elixir, punctuation.definition.variable.elixir</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Elixir blue</string>
+ <key>scope</key>
+ <string>constant.language.elixir</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Elixir purple</string>
+ <key>scope</key>
+ <string>keyword.control.module.elixir</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>OCaml white</string>
+ <key>scope</key>
+ <string>entity.name.type.value-signature.ocaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>OCaml orange</string>
+ <key>scope</key>
+ <string>keyword.other.ocaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>OCaml aqua</string>
+ <key>scope</key>
+ <string>constant.language.variant.ocaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Perl red</string>
+ <key>scope</key>
+ <string>storage.type.sub.perl, storage.type.declare.routine.perl</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lisp white</string>
+ <key>scope</key>
+ <string>meta.function.lisp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lisp red</string>
+ <key>scope</key>
+ <string>storage.type.function-type.lisp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lisp green</string>
+ <key>scope</key>
+ <string>keyword.constant.lisp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Lisp aqua</string>
+ <key>scope</key>
+ <string>entity.name.function.lisp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Clojure green</string>
+ <key>scope</key>
+ <string>constant.keyword.clojure, support.variable.clojure, meta.definition.variable.clojure</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Clojure purple</string>
+ <key>scope</key>
+ <string>entity.global.clojure</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Clojure blue</string>
+ <key>scope</key>
+ <string>entity.name.function.clojure</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell white</string>
+ <key>scope</key>
+ <string>meta.scope.if-block.shell, meta.scope.group.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell yellow</string>
+ <key>scope</key>
+ <string>support.function.builtin.shell, entity.name.function.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell green</string>
+ <key>scope</key>
+ <string>string.quoted.double.shell, string.quoted.single.shell, punctuation.definition.string.begin.shell, punctuation.definition.string.end.shell, string.unquoted.heredoc.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Shell purple</string>
+ <key>scope</key>
+ <string>keyword.control.heredoc-token.shell, variable.other.normal.shell, punctuation.definition.variable.shell, variable.other.special.shell, variable.other.positional.shell, variable.other.bracket.shell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Fish red</string>
+ <key>scope</key>
+ <string>support.function.builtin.fish</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Fish orange</string>
+ <key>scope</key>
+ <string>support.function.unix.fish</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Fish blue</string>
+ <key>scope</key>
+ <string>variable.other.normal.fish, punctuation.definition.variable.fish, variable.other.fixed.fish, variable.other.special.fish</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Fish green</string>
+ <key>scope</key>
+ <string>string.quoted.double.fish, punctuation.definition.string.end.fish, punctuation.definition.string.begin.fish, string.quoted.single.fish</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Fish purple</string>
+ <key>scope</key>
+ <string>constant.character.escape.single.fish</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PowerShell grey</string>
+ <key>scope</key>
+ <string>punctuation.definition.variable.powershell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PowerShell yellow</string>
+ <key>scope</key>
+ <string>entity.name.function.powershell, support.function.attribute.powershell, support.function.powershell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PowerShell green</string>
+ <key>scope</key>
+ <string>string.quoted.single.powershell, string.quoted.double.powershell, punctuation.definition.string.begin.powershell, punctuation.definition.string.end.powershell, string.quoted.double.heredoc.powershell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PowerShell aqua</string>
+ <key>scope</key>
+ <string>variable.other.member.powershell</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL white</string>
+ <key>scope</key>
+ <string>string.unquoted.alias.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3c6aa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL red</string>
+ <key>scope</key>
+ <string>keyword.type.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL purple</string>
+ <key>scope</key>
+ <string>entity.name.fragment.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Makefile orange</string>
+ <key>scope</key>
+ <string>entity.name.function.target.makefile</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Makefile yellow</string>
+ <key>scope</key>
+ <string>variable.other.makefile</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Makefile green</string>
+ <key>scope</key>
+ <string>meta.scope.prerequisites.makefile</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CMake green</string>
+ <key>scope</key>
+ <string>string.source.cmake</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CMake aqua</string>
+ <key>scope</key>
+ <string>entity.source.cmake</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CMake purple</string>
+ <key>scope</key>
+ <string>storage.source.cmake</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>VimL grey</string>
+ <key>scope</key>
+ <string>punctuation.definition.map.viml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>VimL orange</string>
+ <key>scope</key>
+ <string>storage.type.map.viml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>VimL green</string>
+ <key>scope</key>
+ <string>constant.character.map.viml, constant.character.map.key.viml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>VimL blue</string>
+ <key>scope</key>
+ <string>constant.character.map.special.viml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tmux green</string>
+ <key>scope</key>
+ <string>constant.language.tmux, constant.numeric.tmux</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Dockerfile orange</string>
+ <key>scope</key>
+ <string>entity.name.function.package-manager.dockerfile</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Dockerfile yellow</string>
+ <key>scope</key>
+ <string>keyword.operator.flag.dockerfile</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Dockerfile green</string>
+ <key>scope</key>
+ <string>string.quoted.double.dockerfile, string.quoted.single.dockerfile</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Dockerfile aqua</string>
+ <key>scope</key>
+ <string>constant.character.escape.dockerfile</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Dockerfile purple</string>
+ <key>scope</key>
+ <string>entity.name.type.base-image.dockerfile, entity.name.image.dockerfile</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff grey</string>
+ <key>scope</key>
+ <string>punctuation.definition.separator.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff red</string>
+ <key>scope</key>
+ <string>markup.deleted.diff, punctuation.definition.deleted.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff orange</string>
+ <key>scope</key>
+ <string>meta.diff.range.context, punctuation.definition.range.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff yellow</string>
+ <key>scope</key>
+ <string>meta.diff.header.from-file</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff green</string>
+ <key>scope</key>
+ <string>markup.inserted.diff, punctuation.definition.inserted.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff blue</string>
+ <key>scope</key>
+ <string>markup.changed.diff, punctuation.definition.changed.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff purple</string>
+ <key>scope</key>
+ <string>punctuation.definition.from-file.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Git red</string>
+ <key>scope</key>
+ <string>entity.name.section.group-title.ini, punctuation.definition.entity.ini</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e67e80</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Git orange</string>
+ <key>scope</key>
+ <string>punctuation.separator.key-value.ini</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Git green</string>
+ <key>scope</key>
+ <string>string.quoted.double.ini, string.quoted.single.ini, punctuation.definition.string.begin.ini, punctuation.definition.string.end.ini</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Git aqua</string>
+ <key>scope</key>
+ <string>keyword.other.definition.ini</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SQL yellow</string>
+ <key>scope</key>
+ <string>support.function.aggregate.sql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SQL green</string>
+ <key>scope</key>
+ <string>string.quoted.single.sql, punctuation.definition.string.end.sql, punctuation.definition.string.begin.sql, string.quoted.double.sql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL yellow</string>
+ <key>scope</key>
+ <string>support.type.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#dbbc7f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL blue</string>
+ <key>scope</key>
+ <string>variable.parameter.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GraphQL aqua</string>
+ <key>scope</key>
+ <string>constant.character.enum.graphql</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON grey</string>
+ <key>scope</key>
+ <string>punctuation.support.type.property-name.begin.json, punctuation.support.type.property-name.end.json, punctuation.separator.dictionary.key-value.json, punctuation.definition.string.begin.json, punctuation.definition.string.end.json, punctuation.separator.dictionary.pair.json, punctuation.separator.array.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON orange</string>
+ <key>scope</key>
+ <string>support.type.property-name.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON green</string>
+ <key>scope</key>
+ <string>string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML grey</string>
+ <key>scope</key>
+ <string>punctuation.separator.key-value.mapping.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML green</string>
+ <key>scope</key>
+ <string>string.unquoted.plain.out.yaml, string.quoted.single.yaml, string.quoted.double.yaml, punctuation.definition.string.begin.yaml, punctuation.definition.string.end.yaml, string.unquoted.plain.in.yaml, string.unquoted.block.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>YAML aqua</string>
+ <key>scope</key>
+ <string>punctuation.definition.anchor.yaml, punctuation.definition.block.sequence.item.yaml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83c092</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TOML orange</string>
+ <key>scope</key>
+ <string>keyword.key.toml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e69875</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TOML green</string>
+ <key>scope</key>
+ <string>string.quoted.single.basic.line.toml, string.quoted.single.literal.line.toml, punctuation.definition.keyValuePair.toml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a7c080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TOML blue</string>
+ <key>scope</key>
+ <string>constant.other.boolean.toml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7fbbb3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>TOML purple</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.table.toml, punctuation.definition.table.toml, entity.other.attribute-name.table.array.toml, punctuation.definition.table.array.toml</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d699b6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment, string.comment, punctuation.definition.comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#859289</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ </array>
+ <key>uuid</key>
+ <string>3f688e48-bd62-4cd7-9981-9b491786d8c6</string>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>semanticClass</key>
+ <string>theme.dark.everforest-dark</string>
+ <key>author</key>
+ <string/>
+ <key>comment</key>
+ <string/>
+ </dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/gruvbox-dark.yazi/LICENSE b/fedora/.config/yazi/flavors/gruvbox-dark.yazi/LICENSE
new file mode 100644
index 0000000..e6984c6
--- /dev/null
+++ b/fedora/.config/yazi/flavors/gruvbox-dark.yazi/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2024 Ben Yip
+
+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.
+
diff --git a/fedora/.config/yazi/flavors/gruvbox-dark.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/gruvbox-dark.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..c996915
--- /dev/null
+++ b/fedora/.config/yazi/flavors/gruvbox-dark.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Subhaditya Nath
+
+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.
diff --git a/fedora/.config/yazi/flavors/gruvbox-dark.yazi/README.md b/fedora/.config/yazi/flavors/gruvbox-dark.yazi/README.md
new file mode 100644
index 0000000..d6fb349
--- /dev/null
+++ b/fedora/.config/yazi/flavors/gruvbox-dark.yazi/README.md
@@ -0,0 +1,32 @@
+<div align="center">
+<img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Gruvbox Dark Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```bash
+ya pack -a bennyyip/gruvbox-dark
+```
+
+## ⚙️ Usage
+
+Add the these lines to your `theme.toml` configuration file to use it:
+
+```toml
+[flavor]
+dark = "gruvbox-dark"
+```
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/gruvbox-dark.yazi/flavor.toml b/fedora/.config/yazi/flavors/gruvbox-dark.yazi/flavor.toml
new file mode 100644
index 0000000..b2eb7cf
--- /dev/null
+++ b/fedora/.config/yazi/flavors/gruvbox-dark.yazi/flavor.toml
@@ -0,0 +1,176 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[manager]
+cwd = { fg = "#83a598" }
+
+# Hovered
+hovered = { reversed = true, bold = true }
+# hovered = { bg = "#3c3836", bold = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "#b8bb26", italic = true }
+find_position = { fg = "#fe8019", bg = "reset", italic = true }
+
+# Marker
+marker_copied = { fg = "#8ec07c", bg = "#8ec07c" }
+marker_cut = { fg = "#d3869b", bg = "#d3869b" }
+marker_marked = { fg = "#83a598", bg = "#83a598" }
+marker_selected = { fg = "#fbf1c7", bg = "#fbf1c7" }
+
+# Tab
+tab_active = { fg = "#282828", bg = "#a89984" }
+tab_inactive = { fg = "#a89984", bg = "#504945" }
+tab_width = 1
+
+# Count
+count_copied = { fg = "#282828", bg = "#8ec07c" }
+count_cut = { fg = "#282828", bg = "#d3869b" }
+count_selected = { fg = "#282828", bg = "#fbf1c7" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "#665c54" }
+
+# : }}}
+
+# : Mode {{{
+
+[mode]
+normal_main = { fg = "#282828", bg = "#a89984", bold = true }
+normal_alt = { fg = "#a89984", bg = "#504945" }
+select_main = { fg = "#282828", bg = "#fe8019", bold = true }
+select_alt = { fg = "#a89984", bg = "#504945" }
+unset_main = { fg = "#282828", bg = "#b8bb26", bold = true }
+unset_alt = { fg = "#a89984", bg = "#504945" }
+
+# : }}}
+
+# : Status {{{
+
+[status]
+sep_left = { open = "\ue0be", close = "\ue0b8" }
+sep_right = { open = "\ue0be", close = "\ue0b8" }
+overall = { }
+
+# Progress
+progress_label = { fg = "#ebdbb2", bold = true }
+progress_normal = { fg = "#504945", bg = "#3c3836" }
+progress_error = { fg = "#fb4934", bg = "#3c3836" }
+
+# Permissions
+perm_type = { fg = "#504945" }
+perm_read = { fg = "#b8bb26" }
+perm_write = { fg = "#fb4934" }
+perm_exec = { fg = "#b8bb26" }
+perm_sep = { fg = "#665c54" }
+
+# : }}}
+
+# : Select {{{
+
+[pick]
+border = { fg = "#458588" }
+active = { fg = "#d3869b", bold = true }
+inactive = {}
+
+# : }}}
+
+# : Input {{{
+
+[input]
+border = { fg = "#ebdbb2" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+# : }}}
+
+# : Tasks {{{
+
+[tasks]
+border = { fg = "#504945" }
+title = {}
+hovered = { underline = true }
+
+# : }}}
+
+# : Which {{{
+
+[which]
+mask = { bg = "#3c3836" }
+cand = { fg = "#83a598" }
+rest = { fg = "#928374" }
+desc = { fg = "#fe8019" }
+separator = "  "
+separator_style = { fg = "#504945" }
+
+# : }}}
+
+# : Help {{{
+
+[help]
+on = { fg = "#83a598" }
+run = { fg = "#d3869b" }
+hovered = { reversed = true, bold = true }
+footer = { fg = "#3c3836", bg = "#a89984" }
+
+# : }}}
+
+# : Notify {{{
+
+[notify]
+title_info = { fg = "#8ec07c" }
+title_warn = { fg = "#fbf1c7" }
+title_error = { fg = "#d3869b" }
+
+# : }}}
+
+# : File-specific styles {{{
+
+[filetype]
+rules = [
+ # Images
+ { mime = "image/*", fg = "#d3869b" },
+
+ # Media
+ { mime = "{audio,video}/*", fg = "#fabd2f" },
+
+ # Archives
+ { mime = "application/*zip", fg = "#fb4934" },
+ { mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}", fg = "#fb4934" },
+
+ # Documents
+ { mime = "application/{pdf,doc,rtf,vnd.*}", fg = "#689d6a" },
+
+ # Fallback
+ { name = "*", fg = "#ebdbb2" },
+ { name = "*/", fg = "#83a598" },
+]
+
+# : }}}
+
+# : Confirmation {{{
+
+[confirm]
+border = { fg = "#a89984" }
+title = { fg = "#83a598" }
+content = { fg = "#fbf1c7" }
+body = { fg = "red" }
+list = { fg = "#ebdbb2" }
+btn_yes = { reversed = true, fg = "#ebdbb2" }
+btn_no = {}
+btn_labels = [ " [Y]es ", " (N)o " ]
+
+# : }}}
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "#a89984" }
+active = { reversed = true, fg = "#83a598" }
+inactive = { fg = "#ebdbb2" }
+
+# : }}}
diff --git a/fedora/.config/yazi/flavors/gruvbox-dark.yazi/preview.png b/fedora/.config/yazi/flavors/gruvbox-dark.yazi/preview.png
new file mode 100644
index 0000000..d157dfe
--- /dev/null
+++ b/fedora/.config/yazi/flavors/gruvbox-dark.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/gruvbox-dark.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/gruvbox-dark.yazi/tmtheme.xml
new file mode 100644
index 0000000..59c1ecd
--- /dev/null
+++ b/fedora/.config/yazi/flavors/gruvbox-dark.yazi/tmtheme.xml
@@ -0,0 +1,1509 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>comment</key>
+ <string>Based on gruvbox for Vim (https://github.com/morhetz/gruvbox)</string>
+ <key>originalAuthor</key>
+ <string>Pavel Pertsev (https://github.com/morhetz)</string>
+ <key>author</key>
+ <string>Brian Reilly (https://github.com/Briles/gruvbox)</string>
+ <key>name</key>
+ <string>gruvbox (Dark) (Medium)</string>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#222222</string>
+ <key>caret</key>
+ <string>#a89984</string>
+ <key>foreground</key>
+ <string>#ebdbb280</string>
+ <key>invisibles</key>
+ <string>#ebdbb226</string>
+ <key>lineHighlight</key>
+ <string>#3c3836</string>
+ <key>selection</key>
+ <string>#3c3836</string>
+ <key>inactiveSelection</key>
+ <string>#3c3836</string>
+ <key>guide</key>
+ <string>#ebdbb226</string>
+ <key>activeGuide</key>
+ <string>#ebdbb280</string>
+ <key>stackGuide</key>
+ <string>#ebdbb240</string>
+ <key>bracketContentsOptions</key>
+ <string>underline</string>
+ <key>bracketContentsForeground</key>
+ <string>#bdae93</string>
+ <key>bracketsOptions</key>
+ <string>underline</string>
+ <key>bracketsForeground</key>
+ <string>#bdae93</string>
+ <key>gutterForeground</key>
+ <string>#928374</string>
+ <key>highlight</key>
+ <string>#fbf1c7</string>
+ <key>highlightForeground</key>
+ <string>#fbf1c7</string>
+ <key>findHighlight</key>
+ <string>#d79921</string>
+ <key>findHighlightForeground</key>
+ <string>#222222</string>
+ <key>tagsOptions</key>
+ <string>underline</string>
+ <key>selectionBorder</key>
+ <string>#3c3836</string>
+ <key>popupCss</key>
+ <string>
+ html {
+ background-color: #1b1b1b;
+ color: #fbf1c7;
+ padding: 12px;
+ }
+
+ a {
+ color: #8ec07c;
+ }
+
+ .error, .deleted {
+ color: #fb4934;
+ }
+
+ .success, .inserted, .name {
+ color: #b8bb26;
+ }
+
+ .warning, .modified {
+ color: #fabd2f;
+ }
+
+ .type {
+ color: #fabd2f;
+ font-style: italic;
+ }
+
+ .param {
+ color: #fbf1c7;
+ }
+
+ .current {
+ text-decoration: underline;
+ }
+ </string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Text and Source Base Colors</string>
+ <key>scope</key>
+ <string>meta.group, meta.method-call.source.cs, meta.method.attribute.source.cs, meta.method.body.java, meta.method.body.source.cs, meta.method.source.cs, none, source, text</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation</string>
+ <key>scope</key>
+ <string>entity.quasi.element meta.group.braces, keyword.operator keyword.operator.neon, keyword.operator operator.neon, keyword.operator.accessor, keyword.other.accessor, meta.attribute-selector keyword.operator.stylus, meta.brace, meta.delimiter, meta.group.braces, meta.punctuation.separator, meta.separator, punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comments</string>
+ <key>scope</key>
+ <string>comment, comment text, markup.strikethrough, punctuation.definition.comment, punctuation.whitespace.comment, string.comment, text.cancelled</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#928374</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keywords Inside Comments</string>
+ <key>scope</key>
+ <string>comment.keyword, comment.keyword.punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d5c4a1</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>DocBlockr &amp; Other Keywords Inside Comments</string>
+ <key>scope</key>
+ <string>comment.parameter, comment.punctuation, comment.string, comment.type, keyword.other.phpdoc.php, punctuation.definition.keyword.javadoc, source.groovy keyword.other.documentation, source.java keyword.other.documentation, storage.type.annotation.coffeescript, storage.type.class.jsdoc</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bdae93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Entity</string>
+ <key>scope</key>
+ <string>constant.language.name, entity.name.type, entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fabd2f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Template String Punctuation</string>
+ <key>scope</key>
+ <string>constant.other.placeholder, entity.name.tag.mustache, entity.tag.tagbraces, punctuation.definition.string.template, punctuation.definition.template-expression, punctuation.quasi, punctuation.section.embedded, string.interpolated, variable.other.interpolation.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8ec07c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keywords</string>
+ <key>scope</key>
+ <string>js.embedded.control.flow keyword.operator.js, keyword, keyword.control, keyword.operator.logical.python, meta.at-rule.media support.function.misc, meta.prolog.haml, meta.tag.sgml.doctype.html, storage.type.function.jade, storage.type.function.pug, storage.type.import.haxe, storage.type.import.include.jade, storage.type.import.include.pug, support.keyword.timing-direction, variable.documentroot</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fb4934</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS At-Rule Punctuation (@) &amp; At-Rule Vendor Prefixes</string>
+ <key>scope</key>
+ <string>keyword.control.at-rule support.type.property-vendor, punctuation.definition.keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cc241d</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Operators</string>
+ <key>scope</key>
+ <string>keyword.control.new, keyword.control.operator, keyword.operator, keyword.other.arrow, keyword.other.double-colon, punctuation.operator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8ec07c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Constants Punctuation</string>
+ <key>scope</key>
+ <string>constant.other.color punctuation.definition.constant, constant.other.symbol punctuation.definition.constant, constant.other.unit, keyword.other.unit, punctuation.section.flowtype, support.constant.unicode-range.prefix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b16286</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage, storage.type.annotation, storage.type.primitive</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fb4934</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>storage.modifier.import, storage.modifier.package, storage.type.import, variable.import, variable.package</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function Keyword</string>
+ <key>scope</key>
+ <string>entity.quasi.tag.name, meta.function storage.type.matlab, storage.type.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8ec07c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variables</string>
+ <key>scope</key>
+ <string>entity.name.val.declaration, entity.name.variable, meta.definition.variable, storage.type.variable, support.type.custom-property, support.type.variable-name, variable, variable.interpolation variable, variable.other.interpolation variable, variable.parameter.dosbatch, variable.parameter.output.function.matlab, variable.parameter.sass</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83a598</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable - Punctuation</string>
+ <key>scope</key>
+ <string>keyword.other.custom-property.prefix, punctuation.definition.custom-property, punctuation.definition.variable, support.constant.custom-property-name.prefix, variable.interpolation, variable.other.dollar punctuation.dollar, variable.other.object.dollar punctuation.dollar</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#458588</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function Declaration - Punctuation</string>
+ <key>scope</key>
+ <string>entity.name.function punctuation.dollar</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#98971a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object Properties</string>
+ <key>scope</key>
+ <string>meta.property.object</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object Literal Properties</string>
+ <key>scope</key>
+ <string>constant.other.object.key string, meta.object-literal.key</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Parameters</string>
+ <key>scope</key>
+ <string>meta.parameters, variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SASS Import URL</string>
+ <key>scope</key>
+ <string>variable.parameter.url</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b8bb26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Language Constants</string>
+ <key>scope</key>
+ <string>constant, constant.numeric, constant.other, constant.other.color, constant.other.symbol, support.constant, support.constant.color, support.constant.font-name, support.constant.media, support.constant.prototype, variable.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3869b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Language Constants Punctuation</string>
+ <key>scope</key>
+ <string>variable.language punctuation.definition.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b16286</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-Defined Constants</string>
+ <key>scope</key>
+ <string>entity.name.constant, variable.other.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fabd2f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Escaped Characters</string>
+ <key>scope</key>
+ <string>constant.character.escape, constant.character.escaped, constant.character.quoted, constant.other.character-class.escape</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fb4934</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalids and Illegals</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ <key>background</key>
+ <string>#fb4934</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inner Scopes of Invalids and Illegals</string>
+ <key>scope</key>
+ <string>invalid keyword.other.custom-property.prefix, invalid support.type.custom-property.name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Errors</string>
+ <key>scope</key>
+ <string>message.error</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fb4934</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Strings</string>
+ <key>scope</key>
+ <string>meta.object-literal.key string, string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b8bb26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Keys</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.key.json string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83a598</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions Text</string>
+ <key>scope</key>
+ <string>source.regexp, string.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b8bb26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions Start &amp; End Punctuation</string>
+ <key>scope</key>
+ <string>string.regexp punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bdae93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions Character Class Punctuation ([])</string>
+ <key>scope</key>
+ <string>keyword.control.set.regexp, punctuation.definition.character-class, string.regexp.character-class.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3869b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions Capturing Group</string>
+ <key>scope</key>
+ <string>string.regexp.group</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions Assertions</string>
+ <key>scope</key>
+ <string>constant.other.assertion.regexp, punctuation.definition.group.assertion.regexp, punctuation.definition.group.capture.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83a598</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions Character Class</string>
+ <key>scope</key>
+ <string>constant.other.character-class.escape.backslash.regexp, keyword.control.character-class.regexp, string.regexp.character-class constant.character.escape</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fabd2f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions Quantifiers &amp; Operators</string>
+ <key>scope</key>
+ <string>string.regexp.arbitrary-repetition, string.regexp.arbitrary-repetition punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8ec07c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Hyperlinks</string>
+ <key>scope</key>
+ <string>constant.other.reference.link, string.other.link</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8ec07c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Hyperlink Punctuation</string>
+ <key>scope</key>
+ <string>meta.image.inline punctuation.definition.string, meta.link.inline punctuation.definition.string, meta.link.reference punctuation.definition.constant, meta.link.reference.literal punctuation.definition.constant, meta.link.reference.literal punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#689d6a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Tag Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83a598</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Heading</string>
+ <key>scope</key>
+ <string>markup.heading</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b8bb26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Heading Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.heading, punctuation.definition.identity</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#98971a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Bold Text</string>
+ <key>scope</key>
+ <string>markup.bold</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe8019</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Bold Text Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.bold</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d65d0e</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Italic Text</string>
+ <key>scope</key>
+ <string>markup.italic</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fb4934</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Italic Text Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.italic</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cc241d</string>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Inline Code</string>
+ <key>scope</key>
+ <string>markup.raw.inline</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fabd2f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Inline Code Punctuation</string>
+ <key>scope</key>
+ <string>markup.raw.inline punctuation.definition.raw</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d79921</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Quoted</string>
+ <key>scope</key>
+ <string>markup.quote</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3869b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Quoted Punctuation</string>
+ <key>scope</key>
+ <string>markup.quote punctuation.definition.blockquote</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b16286</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown List</string>
+ <key>scope</key>
+ <string>markup.list</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83a598</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown List Punctuation</string>
+ <key>scope</key>
+ <string>markup.list punctuation.definition.list_item</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#458588</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Separators</string>
+ <key>scope</key>
+ <string>meta.separator.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#928374</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Support</string>
+ <key>scope</key>
+ <string>meta.function-call.constructor variable.type, support.class, support.type, variable.other.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fabd2f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Supporting Type - Dollar Punctuation</string>
+ <key>scope</key>
+ <string>support.class punctuation.dollar</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d79921</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function Calls</string>
+ <key>scope</key>
+ <string>entity.name.function.jade, entity.name.function.pug, keyword.other.special-method, meta.function-call variable.function, meta.function-call variable.other.dollar.only punctuation.dollar, support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8ec07c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Method Calls</string>
+ <key>scope</key>
+ <string>meta.function-call.method support.function, meta.function-call.method variable.function, meta.function-call.static variable.function, meta.method-call, meta.method-call support.function, meta.method-call variable.function, support.function.mutator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#689d6a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Special Variables</string>
+ <key>scope</key>
+ <string>support.module</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3869b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Entities</string>
+ <key>scope</key>
+ <string>entity.name.accessor, entity.name.function, entity.name.label, entity.name.section</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b8bb26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Modules</string>
+ <key>scope</key>
+ <string>entity.name.module</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe8019</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML &amp; CSS ID</string>
+ <key>scope</key>
+ <string>constant.id.tag, entity.name.tag.id, entity.other.attribute-name.id</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe8019</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML &amp; CSS ID Punctuation (#)</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.id punctuation.definition.entity</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d65d0e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML &amp; CSS Class</string>
+ <key>scope</key>
+ <string>entity.name.tag.class, entity.other.attribute-name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fabd2f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML &amp; CSS Class Punctuation (.)</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.class punctuation.definition.entity</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d79921</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Attribute Selector Attribute Name</string>
+ <key>scope</key>
+ <string>meta.attribute-selector entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d79921</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML &amp; XML Entity Punctuation</string>
+ <key>scope</key>
+ <string>constant.character.entity punctuation.definition.constant, constant.character.entity punctuation.definition.entity</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b16286</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.class, entity.name.type.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fabd2f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup Tag</string>
+ <key>scope</key>
+ <string>entity.name.function.neon, entity.name.namespace.wildcard, entity.name.tag, entity.tag, keyword.control.untitled, keyword.doctype.xml, keyword.operator support.other.neon, punctuation.definition.prolog.haml, source.less keyword.control.html.elements</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83a598</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML Attribute Names</string>
+ <key>scope</key>
+ <string>entity.name.attribute-name, entity.other.attribute-name, meta.section.attributes.haml constant.other.symbol.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fabd2f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Pseudo Elements/Classes &amp; Vendor Prefixes</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.placeholder punctuation.definition.entity, entity.other.attribute-name.pseudo-class, entity.other.attribute-name.pseudo-element, entity.other.attribute-name.tag.pseudo-class, entity.other.attribute-name.tag.pseudo-element, entity.other.pseudo-class, entity.other.pseudo-element, support.type.vendor-prefix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d79921</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Animations / Keyframes</string>
+ <key>scope</key>
+ <string>entity.function-name.stylus, entity.other.animation-keyframe.stylus, entity.other.animation-name, keyword.language.function.misc.stylus, meta.at-rule.keyframes entity.name.function, variable.other.animation-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8ec07c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Author-Defined Names</string>
+ <key>scope</key>
+ <string>entity.other.namespace-prefix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8ec07c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>meta.class.body, meta.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Image &amp; Hyperlink</string>
+ <key>scope</key>
+ <string>meta.image, meta.link</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3869b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown Image &amp; Hyperlink Punctuation</string>
+ <key>scope</key>
+ <string>meta.image punctuation.definition.metadata, meta.link punctuation.definition.metadata</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b16286</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>meta.require</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b8bb26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function Call Braces</string>
+ <key>scope</key>
+ <string>constant.name.attribute.tag.jade, constant.name.attribute.tag.pug, meta.brace.round, meta.function-call meta.group punctuation.definition.group, punctuation.definition.method-parameters, punctuation.definition.parameters</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bdae93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Property Names</string>
+ <key>scope</key>
+ <string>meta.property-name, support.type.property-name, support.type.shape.definition support.constant.property-value</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b8bb26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Property Name Vendor Prefixes</string>
+ <key>scope</key>
+ <string>meta.property-name support.type.vendor-prefix, support.type.property-name.media support.type.vendor-prefix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#98971a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Property Values</string>
+ <key>scope</key>
+ <string>constant.string.sass, meta.property-value, support.constant.property-value</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Property Value Vendor Prefixes</string>
+ <key>scope</key>
+ <string>meta.property-value support.type.vendor-prefix</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bdae93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Foreground Text</string>
+ <key>scope</key>
+ <string>source.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a89984</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Header Text From</string>
+ <key>scope</key>
+ <string>meta.diff.header.from-file</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83a598</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Header Text From Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.from-file</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#458588</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Header Text To</string>
+ <key>scope</key>
+ <string>meta.diff.header.to-file</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3869b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Header Text To Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.to-file</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b16286</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Additions &amp; Deletions Stats</string>
+ <key>scope</key>
+ <string>meta.diff.range, meta.toc-list.line-number</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fabd2f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Diff Additions &amp; Deletions Stats Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.range.diff</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d79921</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>FiF Line Number</string>
+ <key>scope</key>
+ <string>constant.numeric.line-number</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#928374</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>FiF Line Number Matched</string>
+ <key>scope</key>
+ <string>constant.numeric.line-number.match</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8ec07c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>FiF Filename</string>
+ <key>scope</key>
+ <string>entity.name.filename</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b8bb26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter &amp; Diff Deleted</string>
+ <key>scope</key>
+ <string>markup.deleted, punctuation.definition.deleted</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fb4934</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter &amp; Diff Inserted</string>
+ <key>scope</key>
+ <string>markup.inserted, punctuation.definition.inserted</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b8bb26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter &amp; Diff Changed</string>
+ <key>scope</key>
+ <string>markup.changed, punctuation.definition.changed</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fabd2f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter ignored</string>
+ <key>scope</key>
+ <string>markup.ignored</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#928374</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>GitGutter untracked</string>
+ <key>scope</key>
+ <string>markup.untracked</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#928374</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Bracket Tag</string>
+ <key>scope</key>
+ <string>brackethighlighter.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bdae93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Bracket Curly</string>
+ <key>scope</key>
+ <string>brackethighlighter.curly</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bdae93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Bracket Round</string>
+ <key>scope</key>
+ <string>brackethighlighter.round</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bdae93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Bracket Square</string>
+ <key>scope</key>
+ <string>brackethighlighter.square</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bdae93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Bracket Angle</string>
+ <key>scope</key>
+ <string>brackethighlighter.angle</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bdae93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Bracket Quote</string>
+ <key>scope</key>
+ <string>brackethighlighter.quote</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bdae93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Bracket Unmatched</string>
+ <key>scope</key>
+ <string>brackethighlighter.unmatched</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fb4934</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SublimeLinter Error</string>
+ <key>scope</key>
+ <string>sublimelinter.mark.error</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fb4934</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SublimeLinter Gutter Mark</string>
+ <key>scope</key>
+ <string>sublimelinter.gutter-mark</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#928374</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SublimeLinter Warning</string>
+ <key>scope</key>
+ <string>sublimelinter.mark.warning</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fabd2f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HexViewer Upper Byte Nibble</string>
+ <key>scope</key>
+ <string>raw.nibble.upper</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HexViewer Lower Byte Nibble</string>
+ <key>scope</key>
+ <string>raw.nibble.lower</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HexViewer Highlight</string>
+ <key>scope</key>
+ <string>hexviewer.highlight</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#222222</string>
+ <key>background</key>
+ <string>#fabd2f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HexViewer Edited Highlight</string>
+ <key>scope</key>
+ <string>hexviewer.highlight.edited</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#222222</string>
+ <key>background</key>
+ <string>#fe8019</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Raw New Line: Carriage Return</string>
+ <key>scope</key>
+ <string>glyph.carriage-return</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ebdbb226</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Raw New Line: New Line Glyph</string>
+ <key>scope</key>
+ <string>glyph.new-line</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ebdbb226</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Header</string>
+ <key>scope</key>
+ <string>keyword.control.header.todo</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b8bb26</string>
+ <key>background</key>
+ <string>#3a3a3a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Notes</string>
+ <key>scope</key>
+ <string>notes.todo</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bdae93</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Punctuation</string>
+ <key>scope</key>
+ <string>text.todo punctuation.definition.bold, text.todo punctuation.definition.italic</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7c6f64</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Task Pending</string>
+ <key>scope</key>
+ <string>meta.item.todo.pending</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fbf1c7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Task Pending Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.bullet.pending.todo</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#928374</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Task Completed Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.bullet.completed.todo</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8ec07c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Task Cancelled Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.bullet.cancelled.todo</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fb4934</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Tag Critical</string>
+ <key>scope</key>
+ <string>string.other.tag.todo.critical</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fb4934</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Tag High</string>
+ <key>scope</key>
+ <string>string.other.tag.todo.high</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fe8019</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Tag Low</string>
+ <key>scope</key>
+ <string>string.other.tag.todo.low</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83a598</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Tag Today</string>
+ <key>scope</key>
+ <string>string.other.tag.todo.today</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fabd2f</string>
+ <key>fontStyle</key>
+ <string>bold</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Tag</string>
+ <key>scope</key>
+ <string>meta.tag.todo</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d3869b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: URL</string>
+ <key>scope</key>
+ <string>punctuation.definition.url, todo.url</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#83a598</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PlainTasks: Separator</string>
+ <key>scope</key>
+ <string>meta.punctuation.archive.todo, meta.punctuation.separator.todo</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#928374</string>
+ </dict>
+ </dict>
+ </array>
+ </dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/LICENSE b/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/LICENSE
new file mode 100644
index 0000000..1b1dfdc
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Dmitry Nefedov
+
+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.
diff --git a/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..1b1dfdc
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Dmitry Nefedov
+
+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.
diff --git a/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/README.md b/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/README.md
new file mode 100644
index 0000000..eacd8a8
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/README.md
@@ -0,0 +1,32 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Kanagawa Dragon Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```bash
+ya pack -a marcosvnmelo/kanagawa-dragon
+```
+
+## ⚙️ Usage
+
+Add these lines to your `theme.toml` configuration file to use it:
+
+```toml
+[flavor]
+dark = "kanagawa-dragon"
+```
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/flavor.toml b/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/flavor.toml
new file mode 100644
index 0000000..e96acdc
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/flavor.toml
@@ -0,0 +1,137 @@
+## Color palette
+## Check https://github.com/rebelot/kanagawa.nvim for more details
+# sumiInk0 "#16161d" dark bg
+# sumiInk3 "#181616" bg
+# sumiInk4 "#0d0c0c"
+# sumiInk6 "#54546d"
+# fujiWhite "#c5c9c5" fg
+# oldWhite "#7fb4ca" dark fg
+# fujiGray "#a6a69c"
+# peachRed "#ff5d62"
+# autumnRed "#c4746e"
+# crystalBlue "#8ba4b0"
+# waveRed "#e46876"
+# carpYellow "#e6c384"
+# springGreen "#8a9a7b"
+# autumnGreen "#76946a"
+# oniViolet "#a292a3"
+# waveAqua1 "#6a9589"
+# surimiOrange "#e46876"
+# waveAqua2 "#7aa89f"
+
+[manager]
+marker_copied = { fg = "#8a9a7b", bg = "#8a9a7b" }
+marker_cut = { fg = "#e46876", bg = "#e46876" }
+marker_marked = { fg = "#a292a3", bg = "#a292a3" }
+marker_selected = { fg = "#e46876", bg = "#e46876" }
+
+cwd = { fg = "#e6c384" }
+hovered = { reversed = true }
+preview_hovered = { reversed = true }
+
+find_keyword = { fg = "#e46876", bg = "#181616" }
+find_position = {}
+
+tab_active = { reversed = true }
+tab_inactive = {}
+tab_width = 1
+
+count_copied = { fg = "#181616", bg = "#8a9a7b" }
+count_cut = { fg = "#181616", bg = "#e46876" }
+count_selected = { fg = "#181616", bg = "#e6c384" }
+
+border_symbol = "│"
+border_style = { fg = "#c5c9c5" }
+
+
+[mode]
+normal_main = { fg = "#181616", bg = "#8ba4b0" }
+normal_alt = { fg = "#8ba4b0", bg = "#0d0c0c" }
+select_main = { fg = "#181616", bg = "#a292a3" }
+select_alt = { fg = "#a292a3", bg = "#0d0c0c" }
+unset_main = { fg = "#181616", bg = "#e6c384" }
+unset_alt = { fg = "#e6c384", bg = "#0d0c0c" }
+
+
+[status]
+sep_left = { open = "", close = "" }
+sep_right = { open = "", close = "" }
+overall = { fg = "#7fb4ca", bg = "#16161d" }
+
+progress_label = { fg = "#8ba4b0", bg = "#0d0c0c", bold = true }
+progress_normal = { fg = "#0d0c0c", bg = "#181616" }
+progress_error = { fg = "#0d0c0c", bg = "#181616" }
+
+perm_type = { fg = "#8a9a7b" }
+perm_read = { fg = "#e6c384" }
+perm_write = { fg = "#ff5d62" }
+perm_exec = { fg = "#7aa89f" }
+perm_sep = { fg = "#a292a3" }
+
+
+[pick]
+border = { fg = "#8ea4a2" }
+active = { fg = "#a292a3", bold = true }
+inactive = {}
+
+[input]
+border = { fg = "#8ea4a2" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+[completion]
+border = { fg = "#8ea4a2" }
+active = { reversed = true }
+inactive = {}
+
+[tasks]
+border = { fg = "#8ea4a2" }
+title = {}
+hovered = { fg = "#a292a3" }
+
+[which]
+cols = 2
+separator = " - "
+separator_style = { fg = "#a6a69c" }
+mask = { bg = "#16161d" }
+rest = { fg = "#a6a69c" }
+cand = { fg = "#8ba4b0" }
+desc = { fg = "#54546d" }
+
+[help]
+on = { fg = "#7aa89f" }
+run = { fg = "#a292a3" }
+desc = {}
+hovered = { reversed = true, bold = true }
+footer = { fg = "#181616", bg = "#c5c9c5" }
+
+[notify]
+title_info = { fg = "#8a9a7b" }
+title_warn = { fg = "#e6c384" }
+title_error = { fg = "#ff5d62" }
+
+[filetype]
+rules = [
+ # images
+ { mime = "image/*", fg = "#e6c384" },
+
+ # media
+ { mime = "{audio,video}/*", fg = "#a292a3" },
+
+ # archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#e46876" },
+
+ # documents
+ { mime = "application/{pdf,doc,rtf,vnd.*}", fg = "#6a9589" },
+
+ # broken links
+ { name = "*", is = "orphan", fg = "#c4746e" },
+
+ # executables
+ { name = "*", is = "exec", fg = "#76946a" },
+
+ # fallback
+ { name = "*", fg = "#c5c9c5" },
+ { name = "*/", fg = "#8ba4b0" },
+]
diff --git a/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/preview.png b/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/preview.png
new file mode 100644
index 0000000..a6dfa80
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/tmtheme.xml
new file mode 100644
index 0000000..4a38718
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa-dragon.yazi/tmtheme.xml
@@ -0,0 +1,448 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>name</key>
+ <string>Kanagawa Dragon</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#1F1F28</string>
+ <key>caret</key>
+ <string>#C8C093</string>
+ <key>foreground</key>
+ <string>#c5c9c5</string>
+ <key>invisibles</key>
+ <string>#54546D</string>
+ <key>lineHighlight</key>
+ <string>#2D4F67</string>
+ <key>selection</key>
+ <string>#2D4F67</string>
+ <key>findHighlight</key>
+ <string>#2D4F67</string>
+ <key>selectionBorder</key>
+ <string>#222218</string>
+ <key>gutterForeground</key>
+ <string>#54546D</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a6a69c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#87a987</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#D27E99</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-in constant</string>
+ <key>scope</key>
+ <string>constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b6927b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-defined constant</string>
+ <key>scope</key>
+ <string>constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E6C384</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>#E6C384</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby's @variable</string>
+ <key>scope</key>
+ <string>variable.other.readwrite.instance</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#E6C384</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String interpolation</string>
+ <key>scope</key>
+ <string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#c4b28a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E46876</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#a292a3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a292a3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class name</string>
+ <key>scope</key>
+ <string>entity.name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7AA89F</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7AA89F</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function name</string>
+ <key>scope</key>
+ <string>entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#8ba4b0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function argument</string>
+ <key>scope</key>
+ <string>variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b8b4d0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag name</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#7FB4CA</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#E6C384</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library function</string>
+ <key>scope</key>
+ <string>support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#7FB4CA</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library constant</string>
+ <key>scope</key>
+ <string>support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#7FB4CA</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library class/type</string>
+ <key>scope</key>
+ <string>support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7AA89F</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library variable</string>
+ <key>scope</key>
+ <string>support.other.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b6927b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#b98d7b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#717C7C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON String</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a292a3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.header</string>
+ <key>scope</key>
+ <string>meta.diff, meta.diff.header</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8ba4b0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.deleted</string>
+ <key>scope</key>
+ <string>markup.deleted</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#43242B</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.inserted</string>
+ <key>scope</key>
+ <string>markup.inserted</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#2B3328</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.changed</string>
+ <key>scope</key>
+ <string>markup.changed</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#49443C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>constant.numeric.line-number.find-in-files - match</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#54546D</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.filename</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#C8C093</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>message.error</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E46876</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.string.begin.json - meta.structure.dictionary.value.json, punctuation.definition.string.end.json - meta.structure.dictionary.value.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9CABCA</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Structure</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a292a3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON String</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.value.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ffffff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Escape Characters</string>
+ <key>scope</key>
+ <string>constant.character.escape</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b98d7b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions</string>
+ <key>scope</key>
+ <string>string.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E6C384</string>
+ </dict>
+ </dict>
+ </array>
+ <key>uuid</key>
+ <string>592FC036-6BB7-4676-A2F5-2894D48C8E33</string>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>semanticClass</key>
+ <string>theme.dark.kanagawa-dragon</string>
+ </dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/LICENSE b/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/LICENSE
new file mode 100644
index 0000000..26e253b
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 Alexander Muratov
+
+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.
diff --git a/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..26e253b
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 Alexander Muratov
+
+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.
diff --git a/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/README.md b/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/README.md
new file mode 100644
index 0000000..e92033a
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/README.md
@@ -0,0 +1,41 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Kanagawa Lotus Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="800" />
+
+## 🎨 Installation
+
+```bash
+ya pack -a muratoffalex/kanagawa-lotus
+```
+
+## ⚙️ Usage
+
+To set it as your light flavor, change the content of your theme.toml to:
+
+```toml
+[flavor]
+light = "kanagawa-lotus"
+```
+
+Make sure your theme.toml doesn't contain anything other than [flavor], unless you want to override certain styles of this flavor.
+
+See the Yazi flavor documentation for more details.
+
+## 🔗 Related Flavors
+
+- [🌊 Kanagawa Wave](https://github.com/dangooddd/kanagawa.yazi)
+- [🐉 Kanagawa Dragon](https://github.com/marcosvnmelo/kanagawa-dragon.yazi)
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/flavor.toml b/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/flavor.toml
new file mode 100644
index 0000000..ad9b7bd
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/flavor.toml
@@ -0,0 +1,130 @@
+## Color palette
+## Check https://github.com/rebelot/kanagawa.nvim for more details
+# lotusWhite0 "#d5cea3" dark bg
+# lotusWhite3 "#f2ecbc" bg
+# lotusWhite4 "#e7dba0"
+# lotusViolet1 "#a09cac"
+# lotusInk1 "#545464" fg
+# lotusInk2 "#43436c" dark fg
+# lotusGray3 "#8a8980"
+# lotusRed2 "#d7474b"
+# lotusRed "#c84053"
+# lotusBlue4 "#4d699b"
+# lotusRed "#c84053"
+# lotusYellow "#77713f"
+# lotusGreen "#6f894e"
+# lotusGreen2 "#6e915f"
+# lotusViolet4 "#624c83"
+# lotusAqua "#597b75"
+# lotusOrange "#cc6d00"
+# lotusAqua2 "#5e857a"
+
+[mgr]
+marker_copied = { fg = "#6f894e", bg = "#6f894e" }
+marker_cut = { fg = "#c84053", bg = "#c84053" }
+marker_marked = { fg = "#624c83", bg = "#624c83" }
+marker_selected = { fg = "#cc6d00", bg = "#cc6d00" }
+cwd = { fg = "#77713f" }
+hovered = { reversed = true }
+preview_hovered = { reversed = true }
+find_keyword = { fg = "#cc6d00", bg = "#f2ecbc" }
+find_position = {}
+count_copied = { fg = "#f2ecbc", bg = "#6f894e" }
+count_cut = { fg = "#f2ecbc", bg = "#c84053" }
+count_selected = { fg = "#f2ecbc", bg = "#77713f" }
+border_symbol = "│"
+border_style = { fg = "#545464" }
+
+[tabs]
+active = { fg = "#f2ecbc", bg = "#4d699b" }
+inactive = { fg = "#43436c", bg = "#e7dba0" }
+sep_inner = { open = "", close = "" }
+sep_outer = { open = "", close = "" }
+
+[mode]
+normal_main = { fg = "#f2ecbc", bg = "#4d699b" }
+normal_alt = { fg = "#4d699b", bg = "#e7dba0" }
+select_main = { fg = "#f2ecbc", bg = "#624c83" }
+select_alt = { fg = "#624c83", bg = "#e7dba0" }
+unset_main = { fg = "#f2ecbc", bg = "#77713f" }
+unset_alt = { fg = "#77713f", bg = "#e7dba0" }
+
+[status]
+sep_left = { open = "", close = "" }
+sep_right = { open = "", close = "" }
+overall = { fg = "#43436c", bg = "#d5cea3" }
+progress_label = { fg = "#4d699b", bg = "#e7dba0", bold = true }
+progress_normal = { fg = "#e7dba0", bg = "#f2ecbc" }
+progress_error = { fg = "#e7dba0", bg = "#f2ecbc" }
+perm_type = { fg = "#6f894e" }
+perm_read = { fg = "#77713f" }
+perm_write = { fg = "#d7474b" }
+perm_exec = { fg = "#5e857a" }
+perm_sep = { fg = "#624c83" }
+
+[which]
+cols = 2
+separator = " - "
+separator_style = { fg = "#8a8980" }
+mask = { bg = "#d5cea3" }
+rest = { fg = "#8a8980" }
+cand = { fg = "#4d699b" }
+desc = { fg = "#a09cac" }
+
+[pick]
+border = { fg = "#5a7785" }
+active = { fg = "#624c83", bold = true }
+inactive = {}
+
+[input]
+border = { fg = "#5a7785" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+[cmp]
+border = { fg = "#5a7785" }
+active = { reversed = true }
+inactive = {}
+
+[tasks]
+border = { fg = "#5a7785" }
+title = {}
+hovered = { fg = "#624c83" }
+
+[help]
+on = { fg = "#5e857a" }
+run = { fg = "#624c83" }
+desc = {}
+hovered = { reversed = true, bold = true }
+footer = { fg = "#f2ecbc", bg = "#545464" }
+
+[notify]
+title_info = { fg = "#6f894e" }
+title_warn = { fg = "#77713f" }
+title_error = { fg = "#d7474b" }
+
+[filetype]
+rules = [
+ # images
+ { mime = "image/*", fg = "#77713f" },
+
+ # media
+ { mime = "{audio,video}/*", fg = "#624c83" },
+
+ # archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#c84053" },
+
+ # documents
+ { mime = "application/{pdf,doc,rtf,vnd.*}", fg = "#597b75" },
+
+ # broken links
+ { name = "*", is = "orphan", fg = "#d7474b" },
+
+ # executables
+ { name = "*", is = "exec", fg = "#6e915f" },
+
+ # fallback
+ { name = "*", fg = "#545464" },
+ { name = "*/", fg = "#4d699b" },
+]
diff --git a/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/preview.png b/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/preview.png
new file mode 100644
index 0000000..41c6392
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/tmtheme.xml
new file mode 100644
index 0000000..ee63cd5
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa-lotus.yazi/tmtheme.xml
@@ -0,0 +1,448 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>name</key>
+ <string>Kanagawa Lotus</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#f2ecbc</string>
+ <key>caret</key>
+ <string>#43436c</string>
+ <key>foreground</key>
+ <string>#545464</string>
+ <key>invisibles</key>
+ <string>#a09cac</string>
+ <key>lineHighlight</key>
+ <string>#b5cbd2</string>
+ <key>selection</key>
+ <string>#b5cbd2</string>
+ <key>findHighlight</key>
+ <string>#b5cbd2</string>
+ <key>selectionBorder</key>
+ <string>#e7dba0</string>
+ <key>gutterForeground</key>
+ <string>#a09cac</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8a8980</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#6f894e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b35b79</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-in constant</string>
+ <key>scope</key>
+ <string>constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cc6d00</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-defined constant</string>
+ <key>scope</key>
+ <string>constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#77713f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>#77713f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby's @variable</string>
+ <key>scope</key>
+ <string>variable.other.readwrite.instance</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#77713f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String interpolation</string>
+ <key>scope</key>
+ <string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#836f4a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c84053</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#624c83</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#624c83</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class name</string>
+ <key>scope</key>
+ <string>entity.name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#597b75</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#597b75</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function name</string>
+ <key>scope</key>
+ <string>entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#4d699b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function argument</string>
+ <key>scope</key>
+ <string>variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#5d57a3</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag name</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#5a7785</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#77713f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library function</string>
+ <key>scope</key>
+ <string>support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#5a7785</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library constant</string>
+ <key>scope</key>
+ <string>support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#5a7785</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library class/type</string>
+ <key>scope</key>
+ <string>support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#597b75</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library variable</string>
+ <key>scope</key>
+ <string>support.other.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#cc6d00</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#d7474b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#8a8980</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON String</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#624c83</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.header</string>
+ <key>scope</key>
+ <string>meta.diff, meta.diff.header</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4d699b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.deleted</string>
+ <key>scope</key>
+ <string>markup.deleted</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#d9a594</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.inserted</string>
+ <key>scope</key>
+ <string>markup.inserted</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#b7d0ae</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.changed</string>
+ <key>scope</key>
+ <string>markup.changed</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#d7e3d8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>constant.numeric.line-number.find-in-files - match</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#a09cac</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.filename</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#43436c</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>message.error</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e82424</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.string.begin.json - meta.structure.dictionary.value.json, punctuation.definition.string.end.json - meta.structure.dictionary.value.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9fb5c9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Structure</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#624c83</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON String</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.value.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#545464</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Escape Characters</string>
+ <key>scope</key>
+ <string>constant.character.escape</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#d7474b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions</string>
+ <key>scope</key>
+ <string>string.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#77713f</string>
+ </dict>
+ </dict>
+ </array>
+ <key>uuid</key>
+ <string>592FC036-6BB7-4676-A2F5-2894D48C8E33</string>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>semanticClass</key>
+ <string>theme.light.kanagawa_lotus</string>
+ </dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/kanagawa.yazi/LICENSE b/fedora/.config/yazi/flavors/kanagawa.yazi/LICENSE
new file mode 100644
index 0000000..1b1dfdc
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Dmitry Nefedov
+
+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.
diff --git a/fedora/.config/yazi/flavors/kanagawa.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/kanagawa.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..1b1dfdc
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Dmitry Nefedov
+
+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.
diff --git a/fedora/.config/yazi/flavors/kanagawa.yazi/README.md b/fedora/.config/yazi/flavors/kanagawa.yazi/README.md
new file mode 100644
index 0000000..d314236
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa.yazi/README.md
@@ -0,0 +1,36 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Kanagawa Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```bash
+ya pkg add dangooddd/kanagawa
+```
+
+## ⚙️ Usage
+
+> [!Note]
+> To achieve the look like in the screenshot you also need to install
+> [full-border](https://github.com/yazi-rs/plugins/tree/main/full-border.yazi) plugin!
+
+Add these lines to your `theme.toml` configuration file to use it:
+
+```toml
+[flavor]
+dark = "kanagawa"
+```
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/kanagawa.yazi/flavor.toml b/fedora/.config/yazi/flavors/kanagawa.yazi/flavor.toml
new file mode 100644
index 0000000..1abed17
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa.yazi/flavor.toml
@@ -0,0 +1,140 @@
+## Color palette
+## Check https://github.com/rebelot/kanagawa.nvim for more details
+# sumiInk0 "#16161d" dark bg
+# sumiInk3 "#1f1f28" bg
+# sumiInk4 "#2a2a37"
+# sumiInk6 "#54546d"
+# fujiWhite "#dcd7ba" fg
+# oldWhite "#c8c093" dark fg
+# fujiGray "#727169"
+# peachRed "#ff5d62"
+# autumnRed "#c34043"
+# crystalBlue "#7e9cd8"
+# waveRed "#e46876"
+# carpYellow "#e6c384"
+# springGreen "#98bb6c"
+# autumnGreen "#76946a"
+# oniViolet "#957fb8"
+# waveAqua1 "#6a9589"
+# surimiOrange "#ffa066"
+# waveAqua2 "#7aa89f"
+
+[mgr]
+marker_copied = { fg = "#98bb6c", bg = "#98bb6c" }
+marker_cut = { fg = "#e46876", bg = "#e46876" }
+marker_marked = { fg = "#957fb8", bg = "#957fb8" }
+marker_selected = { fg = "#ffa066", bg = "#ffa066" }
+
+cwd = { fg = "#e6c384" }
+hovered = { reversed = true }
+preview_hovered = { reversed = true }
+
+find_keyword = { fg = "#ffa066", bg = "#1f1f28" }
+find_position = {}
+
+count_copied = { fg = "#1f1f28", bg = "#98bb6c" }
+count_cut = { fg = "#1f1f28", bg = "#e46876" }
+count_selected = { fg = "#1f1f28", bg = "#ffa066" }
+
+border_symbol = "│"
+border_style = { fg = "#dcd7ba" }
+
+[tabs]
+active = { fg = "#1f1f28", bg = "#7e9cd8" }
+inactive = { fg = "#7e9cd8", bg = "#2a2a37" }
+
+sep_inner = { open = "", close = "" }
+sep_outer = { open = "", close = "" }
+
+
+[mode]
+normal_main = { fg = "#1f1f28", bg = "#7e9cd8" }
+normal_alt = { fg = "#7e9cd8", bg = "#2a2a37" }
+select_main = { fg = "#1f1f28", bg = "#957fb8" }
+select_alt = { fg = "#957fb8", bg = "#2a2a37" }
+unset_main = { fg = "#1f1f28", bg = "#e6c384" }
+unset_alt = { fg = "#e6c384", bg = "#2a2a37" }
+
+
+[status]
+sep_left = { open = "", close = "" }
+sep_right = { open = "", close = "" }
+overall = { fg = "#c8c093", bg = "#16161d" }
+
+progress_label = { fg = "#7e9cd8", bold = true }
+progress_normal = { fg = "#2a2a37", bg = "#1f1f28" }
+progress_error = { fg = "#2a2a37", bg = "#1f1f28" }
+
+perm_type = { fg = "#98bb6c" }
+perm_read = { fg = "#e6c384" }
+perm_write = { fg = "#ff5d62" }
+perm_exec = { fg = "#7aa89f" }
+perm_sep = { fg = "#957fb8" }
+
+
+[pick]
+border = { fg = "#7fb4ca" }
+active = { fg = "#957fb8", bold = true }
+inactive = {}
+
+[input]
+border = { fg = "#7fb4ca" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+[completion]
+border = { fg = "#7fb4ca" }
+active = { reversed = true }
+inactive = {}
+
+[tasks]
+border = { fg = "#7fb4ca" }
+title = {}
+hovered = { fg = "#957fb8" }
+
+[which]
+cols = 2
+separator = " - "
+separator_style = { fg = "#727169" }
+mask = { bg = "#16161d" }
+rest = { fg = "#727169" }
+cand = { fg = "#7e9cd8" }
+desc = { fg = "#54546d" }
+
+[help]
+on = { fg = "#7aa89f" }
+run = { fg = "#957fb8" }
+desc = {}
+hovered = { reversed = true, bold = true }
+footer = { fg = "#1f1f28", bg = "#dcd7ba" }
+
+[notify]
+title_info = { fg = "#98bb6c" }
+title_warn = { fg = "#e6c384" }
+title_error = { fg = "#ff5d62" }
+
+[filetype]
+rules = [
+ # images
+ { mime = "image/*", fg = "#e6c384" },
+
+ # media
+ { mime = "{audio,video}/*", fg = "#957fb8" },
+
+ # archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#e46876" },
+
+ # documents
+ { mime = "application/{pdf,doc,rtf,vnd.*}", fg = "#6a9589" },
+
+ # broken links
+ { name = "*", is = "orphan", fg = "#c34043" },
+
+ # executables
+ { name = "*", is = "exec", fg = "#76946a" },
+
+ # fallback
+ { name = "*", fg = "#dcd7ba" },
+ { name = "*/", fg = "#7e9cd8" },
+]
diff --git a/fedora/.config/yazi/flavors/kanagawa.yazi/preview.png b/fedora/.config/yazi/flavors/kanagawa.yazi/preview.png
new file mode 100644
index 0000000..87d0767
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/kanagawa.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/kanagawa.yazi/tmtheme.xml
new file mode 100644
index 0000000..737e459
--- /dev/null
+++ b/fedora/.config/yazi/flavors/kanagawa.yazi/tmtheme.xml
@@ -0,0 +1,448 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>name</key>
+ <string>Kanagawa</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#1F1F28</string>
+ <key>caret</key>
+ <string>#C8C093</string>
+ <key>foreground</key>
+ <string>#DCD7BA</string>
+ <key>invisibles</key>
+ <string>#54546D</string>
+ <key>lineHighlight</key>
+ <string>#2D4F67</string>
+ <key>selection</key>
+ <string>#2D4F67</string>
+ <key>findHighlight</key>
+ <string>#2D4F67</string>
+ <key>selectionBorder</key>
+ <string>#222218</string>
+ <key>gutterForeground</key>
+ <string>#54546D</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#727169</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#98BB6C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#D27E99</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-in constant</string>
+ <key>scope</key>
+ <string>constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FFA066</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-defined constant</string>
+ <key>scope</key>
+ <string>constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E6C384</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>#E6C384</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Ruby's @variable</string>
+ <key>scope</key>
+ <string>variable.other.readwrite.instance</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#E6C384</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String interpolation</string>
+ <key>scope</key>
+ <string>constant.character.escaped, constant.character.escape, string source, string source.ruby</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#C0A36E</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E46876</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#957FB8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#957FB8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class name</string>
+ <key>scope</key>
+ <string>entity.name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7AA89F</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7AA89F</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function name</string>
+ <key>scope</key>
+ <string>entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#7E9CD8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function argument</string>
+ <key>scope</key>
+ <string>variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b8b4d0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag name</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#7FB4CA</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#E6C384</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library function</string>
+ <key>scope</key>
+ <string>support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#7FB4CA</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library constant</string>
+ <key>scope</key>
+ <string>support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#7FB4CA</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library class/type</string>
+ <key>scope</key>
+ <string>support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7AA89F</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library variable</string>
+ <key>scope</key>
+ <string>support.other.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FFA066</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string/>
+ <key>foreground</key>
+ <string>#FF5D62</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#717C7C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON String</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#957FB8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.header</string>
+ <key>scope</key>
+ <string>meta.diff, meta.diff.header</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7E9CD8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.deleted</string>
+ <key>scope</key>
+ <string>markup.deleted</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#43242B</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.inserted</string>
+ <key>scope</key>
+ <string>markup.inserted</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#2B3328</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>diff.changed</string>
+ <key>scope</key>
+ <string>markup.changed</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#49443C</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>constant.numeric.line-number.find-in-files - match</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#54546D</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>entity.name.filename</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#C8C093</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>scope</key>
+ <string>message.error</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E82424</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.string.begin.json - meta.structure.dictionary.value.json, punctuation.definition.string.end.json - meta.structure.dictionary.value.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9CABCA</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Structure</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#957FB8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON String</string>
+ <key>scope</key>
+ <string>meta.structure.dictionary.value.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ffffff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Escape Characters</string>
+ <key>scope</key>
+ <string>constant.character.escape</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#FF5D62</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions</string>
+ <key>scope</key>
+ <string>string.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E6C384</string>
+ </dict>
+ </dict>
+ </array>
+ <key>uuid</key>
+ <string>592FC036-6BB7-4676-A2F5-2894D48C8E33</string>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>semanticClass</key>
+ <string>theme.dark.kanagawa</string>
+ </dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/LICENSE b/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/LICENSE
new file mode 100644
index 0000000..78e74c8
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 Mintass
+
+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.
diff --git a/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..ef13b56
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Rosé Pine
+
+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. \ No newline at end of file
diff --git a/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/README.md b/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/README.md
new file mode 100644
index 0000000..6163fb5
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/README.md
@@ -0,0 +1,36 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Rosé Pine Dawn Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```sh
+ya pkg add Mintass/rose-pine-dawn
+```
+
+## ⚙️ Usage
+
+To set it as your dark flavor, change the content of your `theme.toml` to:
+
+```toml
+[flavor]
+light = "rose-pine-dawn"
+```
+
+Make sure your `theme.toml` doesn't contain anything other than `[flavor]`, unless you want to override certain styles of this flavor.
+
+See the [Yazi flavor documentation](https://yazi-rs.github.io/docs/flavors/overview) for more details.
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/flavor.toml b/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/flavor.toml
new file mode 100644
index 0000000..cf64111
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/flavor.toml
@@ -0,0 +1,230 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[mgr]
+cwd = { fg = "#56949f" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "#ea9d34", bold = true, italic = true, underline = true }
+find_position = { fg = "#907aa9", bg = "reset", bold = true, italic = true }
+
+# Symlink
+symlink_target = { italic = true }
+
+# Marker
+marker_copied = { fg = "#286983", bg = "#286983" }
+marker_cut = { fg = "#b4637a", bg = "#b4637a" }
+marker_marked = { fg = "#d7827e", bg = "#d7827e" }
+marker_selected = { fg = "#ea9d34", bg = "#ea9d34" }
+
+# Count
+count_copied = { fg = "#575279", bg = "#286983" }
+count_cut = { fg = "#575279", bg = "#b4637a" }
+count_selected = { fg = "#faf4ed", bg = "#ea9d34" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "#cecacd" }
+
+# Highlighting
+syntect_theme = ""
+
+# : }}}
+
+
+# : Tabs {{{
+
+[tabs]
+active = { fg = "#575279", bg = "#286983", bold = true }
+inactive = { fg = "#286983", bg = "#575279" }
+
+# Separator
+sep_inner = { open = "", close = "" }
+sep_outer = { open = "", close = "" }
+
+# : }}}
+
+
+# : Mode {{{
+
+[mode]
+normal_main = { fg = "#faf4ed", bg = "#56949f", bold = true }
+normal_alt = { fg = "#faf4ed", bg = "#575279", bold = true }
+
+# Select mode
+select_main = { fg = "#faf4ed", bg = "#b4637a", bold = true }
+select_alt = { fg = "#faf4ed", bg = "#575279", bold = true }
+
+# Unset mode
+unset_main = { fg = "#faf4ed", bg = "#b4637a", bold = true }
+unset_alt = { fg = "#faf4ed", bg = "#575279", bold = true }
+
+# : }}}
+
+
+# : Status bar {{{
+
+[status]
+overall = { bg = "#faf4ed" }
+sep_left = { open = "", close = "" }
+sep_right = { open = "", close = "" }
+
+# Permissions
+perm_sep = { fg = "#9893a5" }
+perm_type = { fg = "#907aa9" }
+perm_read = { fg = "#ea9d34" }
+perm_write = { fg = "#b4637a" }
+perm_exec = { fg = "#56949f" }
+
+# Progress
+progress_label = { fg = "#575279", bold = true }
+progress_normal = { fg = "#286983", bg = "#f4ede8" }
+progress_error = { fg = "#b4637a", bg = "#f4ede8" }
+
+# : }}}
+
+
+# : Which {{{
+
+[which]
+cols = 3
+mask = { bg = "#fffaf3" }
+cand = { fg = "#56949f" }
+rest = { fg = "#9893a5" }
+desc = { fg = "#ea9d34" }
+separator = "  "
+separator_style = { fg = "#9893a5" }
+
+# : }}}
+
+
+# : Confirmation {{{
+
+[confirm]
+border = { fg = "#cecacd" }
+title = { fg = "#b4637a", bold = true }
+body = { fg = "#575279" }
+list = { fg = "#575279" }
+btn_yes = { fg = "#faf4ed", bg = "#286983", bold = true }
+btn_no = { fg = "#faf4ed", bg = "#575279", bold = true }
+btn_labels = [ " [y]es ", " (n)o " ]
+
+# : }}}
+
+
+# : Spotter {{{
+
+[spot]
+border = { fg = "#cecacd" }
+title = { fg = "#56949f", bold = true }
+
+# Table
+tbl_col = { fg = "#56949f" }
+tbl_cell = { fg = "#faf4ed", bg = "#ea9d34", bold = true }
+
+# : }}}
+
+
+# : Notification {{{
+
+[notify]
+title_info = { fg = "#286983" }
+title_warn = { fg = "#ea9d34" }
+title_error = { fg = "#b4637a" }
+
+
+# : }}}
+
+
+# : Picker {{{
+
+[pick]
+border = { fg = "#286983" }
+active = { fg = "#907aa9", bold = true }
+inactive = { fg = "#797593"}
+
+# : }}}
+
+
+# : Input {{{
+
+[input]
+border = { fg = "#286983" }
+title = { bold = true }
+value = { fg = "#575279"}
+selected = { reversed = true }
+
+# : }}}
+
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "#286983" }
+active = { bg = "#575279", fg = "#faf4ed", bold = true }
+inactive = { fg = "#797593" }
+
+
+# : }}}
+
+
+# : Task manager {{{
+
+[tasks]
+border = { fg = "#286983" }
+title = { bold = true}
+hovered = { fg = "#907aa9", bold = true, reversed = true }
+
+# : }}}
+
+
+# : Help menu {{{
+
+[help]
+on = { fg = "#56949f" }
+run = { fg = "#907aa9" }
+desc = { fg = "#ea9d34"}
+hovered = { reversed = true, bold = true }
+footer = { fg = "#faf4ed", bg = "#575279" }
+
+# : }}}
+
+
+# : File-specific styles {{{
+
+[filetype]
+rules = [
+ # Images
+ { mime = "image/*", fg = "#907aa9" },
+
+ # Media
+ { mime = "{audio,video}/*", fg = "#ea9d34" },
+
+ # Archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#b4637a" },
+
+ # Documents
+ { mime = "application/{pdf,doc,rtf}", fg = "#d7827e" },
+
+ # Empty files
+ # { mime = "inode/empty", fg = "#b4637a" },
+
+ # Special files
+ { name = "*", is = "orphan", fg = "#faf4ed", bg = "#b4637a" },
+ { name = "*", is = "exec" , fg = "#56949f" },
+
+ # Dummy files
+ { name = "*", is = "dummy", fg = "#faf4ed", bg = "#b4637a" },
+ { name = "*/", is = "dummy", fg = "#faf4ed", bg = "#b4637a" },
+
+ # Fallback
+ { name = "*", fg = "#575279" },
+ { name = "*/", fg = "#286983" }
+]
+
+# : }}} \ No newline at end of file
diff --git a/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/preview.png b/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/preview.png
new file mode 100644
index 0000000..e4ef7cb
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/tmtheme.xml
new file mode 100644
index 0000000..4610ea5
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine-dawn.yazi/tmtheme.xml
@@ -0,0 +1,316 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>name</key>
+ <string>Rosé Pine Dawn</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#faf4ed</string>
+ <key>caret</key>
+ <string>#cecacd</string>
+ <key>foreground</key>
+ <string>#575279</string>
+ <key>invisibles</key>
+ <string>#fffaf3</string>
+ <key>lineHighlight</key>
+ <string>#f4ede8</string>
+ <key>selection</key>
+ <string>#dfdad9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#797593</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string, punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea9d34</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea9d34</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-in constant</string>
+ <key>scope</key>
+ <string>constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#ea9d34</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-defined constant</string>
+ <key>scope</key>
+ <string>constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ea9d34</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#575279</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#286983</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#56949f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#56949f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class name</string>
+ <key>scope</key>
+ <string>entity.name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#286983</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic </string>
+ <key>foreground</key>
+ <string>#286983</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function name</string>
+ <key>scope</key>
+ <string>entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#d7827e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function argument</string>
+ <key>scope</key>
+ <string>variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#907aa9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag name</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#286983</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#907aa9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library function</string>
+ <key>scope</key>
+ <string>support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#d7827e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library constant</string>
+ <key>scope</key>
+ <string>support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#ea9d34</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library class&#x2f;type</string>
+ <key>scope</key>
+ <string>support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#56949f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library variable</string>
+ <key>scope</key>
+ <string>support.other.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#b4637a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#b4637a</string>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#575279</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#907aa9</string>
+ <key>foreground</key>
+ <string>#575279</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation, Operators</string>
+ <key>scope</key>
+ <string>punctuation, keyword.operator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#797593</string>
+ </dict>
+ </dict>
+ </array>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>semanticClass</key>
+ <string>theme.light.rosé-pine-dawn</string>
+ <key>author</key>
+ <string>arrrgi</string>
+ <key>comment</key>
+ <string>All natural pine, faux fur and a bit of soho vibes for the classy minimalist</string>
+ <key>uuid</key>
+ <string>BB4B4616-E742-41D5-BB5B-63D45FA614F</string>
+</dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/rose-pine-moon.yazi/LICENSE b/fedora/.config/yazi/flavors/rose-pine-moon.yazi/LICENSE
new file mode 100644
index 0000000..78e74c8
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine-moon.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 Mintass
+
+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.
diff --git a/fedora/.config/yazi/flavors/rose-pine-moon.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/rose-pine-moon.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..ef13b56
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine-moon.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Rosé Pine
+
+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. \ No newline at end of file
diff --git a/fedora/.config/yazi/flavors/rose-pine-moon.yazi/README.md b/fedora/.config/yazi/flavors/rose-pine-moon.yazi/README.md
new file mode 100644
index 0000000..b241c25
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine-moon.yazi/README.md
@@ -0,0 +1,36 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Rosé Pine Moon Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```sh
+ya pkg add Mintass/rose-pine-moon
+```
+
+## ⚙️ Usage
+
+To set it as your dark flavor, change the content of your `theme.toml` to:
+
+```toml
+[flavor]
+dark = "rose-pine-moon"
+```
+
+Make sure your `theme.toml` doesn't contain anything other than `[flavor]`, unless you want to override certain styles of this flavor.
+
+See the [Yazi flavor documentation](https://yazi-rs.github.io/docs/flavors/overview) for more details.
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/rose-pine-moon.yazi/flavor.toml b/fedora/.config/yazi/flavors/rose-pine-moon.yazi/flavor.toml
new file mode 100644
index 0000000..905ae6f
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine-moon.yazi/flavor.toml
@@ -0,0 +1,230 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[mgr]
+cwd = { fg = "#9ccfd8" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "#f6c177", bold = true, italic = true, underline = true }
+find_position = { fg = "#c4a7e7", bg = "reset", bold = true, italic = true }
+
+# Symlink
+symlink_target = { italic = true }
+
+# Marker
+marker_copied = { fg = "#3e8fb0", bg = "#3e8fb0" }
+marker_cut = { fg = "#eb6f92", bg = "#eb6f92" }
+marker_marked = { fg = "#ea9a97", bg = "#ea9a97" }
+marker_selected = { fg = "#f6c177", bg = "#f6c177" }
+
+# Count
+count_copied = { fg = "#e0def4", bg = "#3e8fb0" }
+count_cut = { fg = "#e0def4", bg = "#eb6f92" }
+count_selected = { fg = "#232136", bg = "#f6c177" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "#56526e" }
+
+# Highlighting
+syntect_theme = ""
+
+# : }}}
+
+
+# : Tabs {{{
+
+[tabs]
+active = { fg = "#e0def4", bg = "#3e8fb0", bold = true }
+inactive = { fg = "#3e8fb0", bg = "#e0def4" }
+
+# Separator
+sep_inner = { open = "", close = "" }
+sep_outer = { open = "", close = "" }
+
+# : }}}
+
+
+# : Mode {{{
+
+[mode]
+normal_main = { fg = "#232136", bg = "#9ccfd8", bold = true }
+normal_alt = { fg = "#232136", bg = "#e0def4", bold = true }
+
+# Select mode
+select_main = { fg = "#232136", bg = "#eb6f92", bold = true }
+select_alt = { fg = "#232136", bg = "#e0def4", bold = true }
+
+# Unset mode
+unset_main = { fg = "#232136", bg = "#eb6f92", bold = true }
+unset_alt = { fg = "#232136", bg = "#e0def4", bold = true }
+
+# : }}}
+
+
+# : Status bar {{{
+
+[status]
+overall = { bg = "#232136" }
+sep_left = { open = "", close = "" }
+sep_right = { open = "", close = "" }
+
+# Permissions
+perm_sep = { fg = "#6e6a86" }
+perm_type = { fg = "#c4a7e7" }
+perm_read = { fg = "#f6c177" }
+perm_write = { fg = "#eb6f92" }
+perm_exec = { fg = "#9ccfd8" }
+
+# Progress
+progress_label = { fg = "#e0def4", bold = true }
+progress_normal = { fg = "#3e8fb0", bg = "#2a283e" }
+progress_error = { fg = "#eb6f92", bg = "#2a283e" }
+
+# : }}}
+
+
+# : Which {{{
+
+[which]
+cols = 3
+mask = { bg = "#2a273f" }
+cand = { fg = "#9ccfd8" }
+rest = { fg = "#6e6a86" }
+desc = { fg = "#f6c177" }
+separator = "  "
+separator_style = { fg = "#6e6a86" }
+
+# : }}}
+
+
+# : Confirmation {{{
+
+[confirm]
+border = { fg = "#56526e" }
+title = { fg = "#eb6f92", bold = true }
+body = { fg = "#e0def4" }
+list = { fg = "#e0def4" }
+btn_yes = { fg = "#232136", bg = "#3e8fb0", bold = true }
+btn_no = { fg = "#232136", bg = "#e0def4", bold = true }
+btn_labels = [ " [y]es ", " (n)o " ]
+
+# : }}}
+
+
+# : Spotter {{{
+
+[spot]
+border = { fg = "#56526e" }
+title = { fg = "#9ccfd8", bold = true }
+
+# Table
+tbl_col = { fg = "#9ccfd8" }
+tbl_cell = { fg = "#232136", bg = "#f6c177", bold = true }
+
+# : }}}
+
+
+# : Notification {{{
+
+[notify]
+title_info = { fg = "#3e8fb0" }
+title_warn = { fg = "#f6c177" }
+title_error = { fg = "#eb6f92" }
+
+
+# : }}}
+
+
+# : Picker {{{
+
+[pick]
+border = { fg = "#3e8fb0" }
+active = { fg = "#c4a7e7", bold = true }
+inactive = { fg = "#908caa"}
+
+# : }}}
+
+
+# : Input {{{
+
+[input]
+border = { fg = "#3e8fb0" }
+title = { bold = true }
+value = { fg = "#e0def4"}
+selected = { reversed = true }
+
+# : }}}
+
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "#3e8fb0" }
+active = { bg = "#e0def4", fg = "#232136", bold = true }
+inactive = { fg = "#908caa" }
+
+
+# : }}}
+
+
+# : Task manager {{{
+
+[tasks]
+border = { fg = "#3e8fb0" }
+title = { bold = true}
+hovered = { fg = "#c4a7e7", bold = true, reversed = true }
+
+# : }}}
+
+
+# : Help menu {{{
+
+[help]
+on = { fg = "#9ccfd8" }
+run = { fg = "#c4a7e7" }
+desc = { fg = "#f6c177"}
+hovered = { reversed = true, bold = true }
+footer = { fg = "#232136", bg = "#e0def4" }
+
+# : }}}
+
+
+# : File-specific styles {{{
+
+[filetype]
+rules = [
+ # Images
+ { mime = "image/*", fg = "#c4a7e7" },
+
+ # Media
+ { mime = "{audio,video}/*", fg = "#f6c177" },
+
+ # Archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#eb6f92" },
+
+ # Documents
+ { mime = "application/{pdf,doc,rtf}", fg = "#ea9a97" },
+
+ # Empty files
+ # { mime = "inode/empty", fg = "#eb6f92" },
+
+ # Special files
+ { name = "*", is = "orphan", fg = "#232136", bg = "#eb6f92" },
+ { name = "*", is = "exec" , fg = "#9ccfd8" },
+
+ # Dummy files
+ { name = "*", is = "dummy", fg = "#232136", bg = "#eb6f92" },
+ { name = "*/", is = "dummy", fg = "#232136", bg = "#eb6f92" },
+
+ # Fallback
+ { name = "*", fg = "#e0def4" },
+ { name = "*/", fg = "#3e8fb0" }
+]
+
+# : }}} \ No newline at end of file
diff --git a/fedora/.config/yazi/flavors/rose-pine-moon.yazi/preview.png b/fedora/.config/yazi/flavors/rose-pine-moon.yazi/preview.png
new file mode 100644
index 0000000..9661964
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine-moon.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/rose-pine-moon.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/rose-pine-moon.yazi/tmtheme.xml
new file mode 100644
index 0000000..3e26d9c
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine-moon.yazi/tmtheme.xml
@@ -0,0 +1,316 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>name</key>
+ <string>Rosé Pine Moon</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#232136</string>
+ <key>caret</key>
+ <string>#56526e</string>
+ <key>foreground</key>
+ <string>#e0def4</string>
+ <key>invisibles</key>
+ <string>#2a273f</string>
+ <key>lineHighlight</key>
+ <string>#2a283e</string>
+ <key>selection</key>
+ <string>#6e6a86</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#908caa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string, punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f6c177</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f6c177</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-in constant</string>
+ <key>scope</key>
+ <string>constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#f6c177</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-defined constant</string>
+ <key>scope</key>
+ <string>constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f6c177</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#e0def4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#3e8fb0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#9ccfd8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#9ccfd8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class name</string>
+ <key>scope</key>
+ <string>entity.name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#3e8fb0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic </string>
+ <key>foreground</key>
+ <string>#3e8fb0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function name</string>
+ <key>scope</key>
+ <string>entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#ea9a97</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function argument</string>
+ <key>scope</key>
+ <string>variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#c4a7e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag name</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#3e8fb0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#c4a7e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library function</string>
+ <key>scope</key>
+ <string>support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#ea9a97</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library constant</string>
+ <key>scope</key>
+ <string>support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#f6c177</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library class&#x2f;type</string>
+ <key>scope</key>
+ <string>support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#9ccfd8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library variable</string>
+ <key>scope</key>
+ <string>support.other.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#eb6f92</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#eb6f92</string>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#e0def4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#c4a7e7</string>
+ <key>foreground</key>
+ <string>#e0def4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation, Operators</string>
+ <key>scope</key>
+ <string>punctuation, keyword.operator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#908caa</string>
+ </dict>
+ </dict>
+ </array>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>semanticClass</key>
+ <string>theme.dark.rosé-pine-moon</string>
+ <key>author</key>
+ <string>arrrgi</string>
+ <key>comment</key>
+ <string>All natural pine, faux fur and a bit of soho vibes for the classy minimalist</string>
+ <key>uuid</key>
+ <string>CC28B8FB-96BA-43EB-B71F-5AA3D3EBB0BB</string>
+</dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/rose-pine.yazi/LICENSE b/fedora/.config/yazi/flavors/rose-pine.yazi/LICENSE
new file mode 100644
index 0000000..78e74c8
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2025 Mintass
+
+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.
diff --git a/fedora/.config/yazi/flavors/rose-pine.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/rose-pine.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..ef13b56
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Rosé Pine
+
+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. \ No newline at end of file
diff --git a/fedora/.config/yazi/flavors/rose-pine.yazi/README.md b/fedora/.config/yazi/flavors/rose-pine.yazi/README.md
new file mode 100644
index 0000000..56bcae4
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine.yazi/README.md
@@ -0,0 +1,36 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Rosé Pine Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```sh
+ya pkg add Mintass/rose-pine
+```
+
+## ⚙️ Usage
+
+To set it as your dark flavor, change the content of your `theme.toml` to:
+
+```toml
+[flavor]
+dark = "rose-pine"
+```
+
+Make sure your `theme.toml` doesn't contain anything other than `[flavor]`, unless you want to override certain styles of this flavor.
+
+See the [Yazi flavor documentation](https://yazi-rs.github.io/docs/flavors/overview) for more details.
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/rose-pine.yazi/flavor.toml b/fedora/.config/yazi/flavors/rose-pine.yazi/flavor.toml
new file mode 100644
index 0000000..c77e447
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine.yazi/flavor.toml
@@ -0,0 +1,230 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[mgr]
+cwd = { fg = "#9ccfd8" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "#f6c177", bold = true, italic = true, underline = true }
+find_position = { fg = "#c4a7e7", bg = "reset", bold = true, italic = true }
+
+# Symlink
+symlink_target = { italic = true }
+
+# Marker
+marker_copied = { fg = "#31748f", bg = "#31748f" }
+marker_cut = { fg = "#eb6f92", bg = "#eb6f92" }
+marker_marked = { fg = "#ebbcba", bg = "#ebbcba" }
+marker_selected = { fg = "#f6c177", bg = "#f6c177" }
+
+# Count
+count_copied = { fg = "#e0def4", bg = "#31748f" }
+count_cut = { fg = "#e0def4", bg = "#eb6f92" }
+count_selected = { fg = "#191724", bg = "#f6c177" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "#524f67" }
+
+# Highlighting
+syntect_theme = ""
+
+# : }}}
+
+
+# : Tabs {{{
+
+[tabs]
+active = { fg = "#e0def4", bg = "#31748f", bold = true }
+inactive = { fg = "#31748f", bg = "#e0def4" }
+
+# Separator
+sep_inner = { open = "", close = "" }
+sep_outer = { open = "", close = "" }
+
+# : }}}
+
+
+# : Mode {{{
+
+[mode]
+normal_main = { fg = "#191724", bg = "#9ccfd8", bold = true }
+normal_alt = { fg = "#191724", bg = "#e0def4", bold = true }
+
+# Select mode
+select_main = { fg = "#191724", bg = "#eb6f92", bold = true }
+select_alt = { fg = "#191724", bg = "#e0def4", bold = true }
+
+# Unset mode
+unset_main = { fg = "#191724", bg = "#eb6f92", bold = true }
+unset_alt = { fg = "#191724", bg = "#e0def4", bold = true }
+
+# : }}}
+
+
+# : Status bar {{{
+
+[status]
+overall = { bg = "#191724" }
+sep_left = { open = "", close = "" }
+sep_right = { open = "", close = "" }
+
+# Permissions
+perm_sep = { fg = "#6e6a86" }
+perm_type = { fg = "#c4a7e7" }
+perm_read = { fg = "#f6c177" }
+perm_write = { fg = "#eb6f92" }
+perm_exec = { fg = "#9ccfd8" }
+
+# Progress
+progress_label = { fg = "#e0def4", bold = true }
+progress_normal = { fg = "#31748f", bg = "#21202e" }
+progress_error = { fg = "#eb6f92", bg = "#21202e" }
+
+# : }}}
+
+
+# : Which {{{
+
+[which]
+cols = 3
+mask = { bg = "#1f1d2e" }
+cand = { fg = "#9ccfd8" }
+rest = { fg = "#6e6a86" }
+desc = { fg = "#f6c177" }
+separator = "  "
+separator_style = { fg = "#6e6a86" }
+
+# : }}}
+
+
+# : Confirmation {{{
+
+[confirm]
+border = { fg = "#524f67" }
+title = { fg = "#eb6f92", bold = true }
+body = { fg = "#e0def4" }
+list = { fg = "#e0def4" }
+btn_yes = { fg = "#191724", bg = "#31748f", bold = true }
+btn_no = { fg = "#191724", bg = "#e0def4", bold = true }
+btn_labels = [ " [y]es ", " (n)o " ]
+
+# : }}}
+
+
+# : Spotter {{{
+
+[spot]
+border = { fg = "#524f67" }
+title = { fg = "#9ccfd8", bold = true }
+
+# Table
+tbl_col = { fg = "#9ccfd8" }
+tbl_cell = { fg = "#191724", bg = "#f6c177", bold = true }
+
+# : }}}
+
+
+# : Notification {{{
+
+[notify]
+title_info = { fg = "#31748f" }
+title_warn = { fg = "#f6c177" }
+title_error = { fg = "#eb6f92" }
+
+
+# : }}}
+
+
+# : Picker {{{
+
+[pick]
+border = { fg = "#31748f" }
+active = { fg = "#c4a7e7", bold = true }
+inactive = { fg = "#908caa"}
+
+# : }}}
+
+
+# : Input {{{
+
+[input]
+border = { fg = "#31748f" }
+title = { bold = true }
+value = { fg = "#e0def4"}
+selected = { reversed = true }
+
+# : }}}
+
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "#31748f" }
+active = { bg = "#e0def4", fg = "#191724", bold = true }
+inactive = { fg = "#908caa" }
+
+
+# : }}}
+
+
+# : Task manager {{{
+
+[tasks]
+border = { fg = "#31748f" }
+title = { bold = true}
+hovered = { fg = "#c4a7e7", bold = true, reversed = true }
+
+# : }}}
+
+
+# : Help menu {{{
+
+[help]
+on = { fg = "#9ccfd8" }
+run = { fg = "#c4a7e7" }
+desc = { fg = "#f6c177"}
+hovered = { reversed = true, bold = true }
+footer = { fg = "#191724", bg = "#e0def4" }
+
+# : }}}
+
+
+# : File-specific styles {{{
+
+[filetype]
+rules = [
+ # Images
+ { mime = "image/*", fg = "#c4a7e7" },
+
+ # Media
+ { mime = "{audio,video}/*", fg = "#f6c177" },
+
+ # Archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#eb6f92" },
+
+ # Documents
+ { mime = "application/{pdf,doc,rtf}", fg = "#ebbcba" },
+
+ # Empty files
+ # { mime = "inode/empty", fg = "#eb6f92" },
+
+ # Special files
+ { name = "*", is = "orphan", fg = "#191724", bg = "#eb6f92" },
+ { name = "*", is = "exec" , fg = "#9ccfd8" },
+
+ # Dummy files
+ { name = "*", is = "dummy", fg = "#191724", bg = "#eb6f92" },
+ { name = "*/", is = "dummy", fg = "#191724", bg = "#eb6f92" },
+
+ # Fallback
+ { name = "*", fg = "#e0def4" },
+ { name = "*/", fg = "#31748f" }
+]
+
+# : }}} \ No newline at end of file
diff --git a/fedora/.config/yazi/flavors/rose-pine.yazi/preview.png b/fedora/.config/yazi/flavors/rose-pine.yazi/preview.png
new file mode 100644
index 0000000..9150f54
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/rose-pine.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/rose-pine.yazi/tmtheme.xml
new file mode 100644
index 0000000..70ded3e
--- /dev/null
+++ b/fedora/.config/yazi/flavors/rose-pine.yazi/tmtheme.xml
@@ -0,0 +1,316 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>name</key>
+ <string>Rosé Pine</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#191724</string>
+ <key>caret</key>
+ <string>#524f67</string>
+ <key>foreground</key>
+ <string>#e0def4</string>
+ <key>invisibles</key>
+ <string>#1f1d2e</string>
+ <key>lineHighlight</key>
+ <string>#21202e</string>
+ <key>selection</key>
+ <string>#403d52</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#908caa</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string, punctuation.definition.string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f6c177</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f6c177</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-in constant</string>
+ <key>scope</key>
+ <string>constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#f6c177</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-defined constant</string>
+ <key>scope</key>
+ <string>constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f6c177</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#e0def4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#31748f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#9ccfd8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#9ccfd8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class name</string>
+ <key>scope</key>
+ <string>entity.name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#31748f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic </string>
+ <key>foreground</key>
+ <string>#31748f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function name</string>
+ <key>scope</key>
+ <string>entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#ebbcba</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function argument</string>
+ <key>scope</key>
+ <string>variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#c4a7e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag name</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#31748f</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#c4a7e7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library function</string>
+ <key>scope</key>
+ <string>support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#ebbcba</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library constant</string>
+ <key>scope</key>
+ <string>support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#f6c177</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library class&#x2f;type</string>
+ <key>scope</key>
+ <string>support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#9ccfd8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library variable</string>
+ <key>scope</key>
+ <string>support.other.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#eb6f92</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#eb6f92</string>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#e0def4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#c4a7e7</string>
+ <key>foreground</key>
+ <string>#e0def4</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Punctuation, Operators</string>
+ <key>scope</key>
+ <string>punctuation, keyword.operator</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#908caa</string>
+ </dict>
+ </dict>
+ </array>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>semanticClass</key>
+ <string>theme.dark.rosé-pine</string>
+ <key>author</key>
+ <string>arrrgi</string>
+ <key>comment</key>
+ <string>All natural pine, faux fur and a bit of soho vibes for the classy minimalist</string>
+ <key>uuid</key>
+ <string>14991673-80EB-41A2-BEFF-03216A233730</string>
+</dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/scripts/README.md b/fedora/.config/yazi/flavors/scripts/README.md
new file mode 100644
index 0000000..17a1ffe
--- /dev/null
+++ b/fedora/.config/yazi/flavors/scripts/README.md
@@ -0,0 +1,36 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ ${variant_cap} Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+```sh
+ya pkg add yazi-rs/flavors:${variant}
+```
+
+## ⚙️ Usage
+
+Set the content of your `theme.toml` to enable it as your _${mode}_ flavor:
+
+```toml
+[flavor]
+${mode} = "${variant}"
+```
+
+Make sure your `theme.toml` doesn't contain anything other than `[flavor]`, unless you want to override certain styles of this flavor.
+
+See the [Yazi flavor documentation](https://yazi-rs.github.io/docs/flavors/overview) for more details.
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/scripts/generate.js b/fedora/.config/yazi/flavors/scripts/generate.js
new file mode 100644
index 0000000..194de0f
--- /dev/null
+++ b/fedora/.config/yazi/flavors/scripts/generate.js
@@ -0,0 +1,169 @@
+import fs, { access, mkdir, readFile, writeFile } from "node:fs/promises"
+import { join } from "node:path"
+import { fileURLToPath } from "node:url"
+
+const __dirname = fileURLToPath(new URL(".", import.meta.url))
+
+const VARIANTS = {
+ "Dracula": {
+ text: "#f8f8f2",
+ background: "#282a36",
+
+ primary: "#bd93f9",
+ secondary: "#8be9fd",
+ tertiary: "#ffb86c",
+ accent: "#ff79c6",
+
+ surface: "#44475a",
+ surface1: "#63667d",
+ surface2: "#83869c",
+
+ onSurface: "#6272a4",
+ onSurface1: "#7282b5",
+ onSurface2: "#8998c9",
+
+ red: "#ff5555",
+ green: "#50fa7b",
+ blue: "#bd93f9",
+ yellow: "#f1fa8c",
+
+ _tmtheme: "https://raw.githubusercontent.com/dracula/sublime/refs/heads/master/Dracula.tmTheme",
+ _tmthemeLicense: "https://raw.githubusercontent.com/dracula/sublime/refs/heads/master/LICENSE",
+ },
+ "Catppuccin Macchiato": {
+ text: "#cad3f5",
+ background: "#24273a",
+
+ primary: "#8aadf4",
+ secondary: "#8bd5ca",
+ tertiary: "#f0c6c6",
+ accent: "#f5bde6",
+
+ surface: "#363a4f",
+ surface1: "#494d64",
+ surface2: "#5b6078",
+
+ onSurface: "#6e738d",
+ onSurface1: "#8087a2",
+ onSurface2: "#939ab7",
+
+ red: "#ed8796",
+ green: "#a6da95",
+ blue: "#8aadf4",
+ yellow: "#eed49f",
+
+ _tmtheme: "https://raw.githubusercontent.com/catppuccin/bat/refs/heads/main/themes/Catppuccin%20Macchiato.tmTheme",
+ _tmthemeLicense: "https://raw.githubusercontent.com/catppuccin/bat/refs/heads/main/LICENSE",
+ },
+ "Catppuccin Mocha": {
+ text: "#cdd6f4",
+ background: "#1e1e2e",
+
+ primary: "#89b4fa",
+ secondary: "#94e2d5",
+ tertiary: "#f2cdcd",
+ accent: "#f5c2e7",
+
+ surface: "#313244",
+ surface1: "#45475a",
+ surface2: "#585b70",
+
+ onSurface: "#6c7086",
+ onSurface1: "#7f849c",
+ onSurface2: "#9399b2",
+
+ red: "#f38ba8",
+ green: "#a6e3a1",
+ blue: "#89b4fa",
+ yellow: "#f9e2af",
+
+ _tmtheme: "https://raw.githubusercontent.com/catppuccin/bat/refs/heads/main/themes/Catppuccin%20Mocha.tmTheme",
+ _tmthemeLicense: "https://raw.githubusercontent.com/catppuccin/bat/refs/heads/main/LICENSE",
+ },
+ "Catppuccin Latte": {
+ text: "#4c4f69",
+ background: "#eff1f5",
+
+ primary: "#1e66f5",
+ secondary: "#179299",
+ tertiary: "#dd7878",
+ accent: "#ea76cb",
+
+ surface: "#ccd0da",
+ surface1: "#bcc0cc",
+ surface2: "#acb0be",
+
+ onSurface: "#9ca0b0",
+ onSurface1: "#8c8fa1",
+ onSurface2: "#7c7f93",
+
+ red: "#d20f39",
+ green: "#40a02b",
+ blue: "#1e66f5",
+ yellow: "#df8e1d",
+
+ _light: true,
+ _tmtheme: "https://raw.githubusercontent.com/catppuccin/bat/refs/heads/main/themes/Catppuccin%20Latte.tmTheme",
+ _tmthemeLicense: "https://raw.githubusercontent.com/catppuccin/bat/refs/heads/main/LICENSE",
+ },
+ "Catppuccin Frappe": {
+ text: "#c6d0f5",
+ background: "#303446",
+
+ primary: "#8caaee",
+ secondary: "#81c8be",
+ tertiary: "#eebebe",
+ accent: "#f4b8e4",
+
+ surface: "#414559",
+ surface1: "#51576d",
+ surface2: "#626880",
+
+ onSurface: "#737994",
+ onSurface1: "#838ba7",
+ onSurface2: "#949cbb",
+
+ red: "#e78284",
+ green: "#a6d189",
+ blue: "#8caaee",
+ yellow: "#e5c890",
+
+ _tmtheme: "https://raw.githubusercontent.com/catppuccin/bat/refs/heads/main/themes/Catppuccin%20Frappe.tmTheme",
+ _tmthemeLicense: "https://raw.githubusercontent.com/catppuccin/bat/refs/heads/main/LICENSE",
+ },
+}
+
+const template = await readFile(join(__dirname, "./template.toml"), "utf8")
+const readme = await readFile(join(__dirname, "./README.md"), "utf8")
+
+for (const [name, colors] of Object.entries(VARIANTS)) {
+ const lowerName = name.toLowerCase().replace(" ", "-")
+ const wd = join(__dirname, `../${lowerName}.yazi`)
+ try {
+ await access(wd)
+ } catch {
+ await mkdir(wd)
+ }
+
+ // flavor.toml
+ let s = template
+ for (const [name, color] of Object.entries(colors)) {
+ s = s.replaceAll(`\${${name}}`, color)
+ }
+ await writeFile(join(wd, "flavor.toml"), s.replaceAll("${variant}", lowerName))
+
+ // README.md
+ await writeFile(
+ join(wd, "README.md"),
+ readme
+ .replaceAll("${mode}", colors._light ? "light" : "dark")
+ .replaceAll("${variant}", lowerName)
+ .replaceAll("${variant_cap}", name),
+ )
+
+ // tmtheme.xml
+ await writeFile(join(wd, "tmtheme.xml"), await fetch(colors._tmtheme).then(r => r.text()))
+
+ // LICENSE-tmtheme
+ await writeFile(join(wd, "LICENSE-tmtheme"), await fetch(colors._tmthemeLicense).then(r => r.text()))
+}
diff --git a/fedora/.config/yazi/flavors/scripts/template.toml b/fedora/.config/yazi/flavors/scripts/template.toml
new file mode 100644
index 0000000..2eb31d2
--- /dev/null
+++ b/fedora/.config/yazi/flavors/scripts/template.toml
@@ -0,0 +1,189 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[mgr]
+cwd = { fg = "${secondary}" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "${yellow}", bold = true, italic = true, underline = true }
+find_position = { fg = "${accent}", bg = "reset", bold = true, italic = true }
+
+# Marker
+marker_copied = { fg = "${green}", bg = "${green}" }
+marker_cut = { fg = "${red}", bg = "${red}" }
+marker_marked = { fg = "${secondary}", bg = "${secondary}" }
+marker_selected = { fg = "${yellow}", bg = "${yellow}" }
+
+# Count
+count_copied = { fg = "${background}", bg = "${green}" }
+count_cut = { fg = "${background}", bg = "${red}" }
+count_selected = { fg = "${background}", bg = "${yellow}" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "${onSurface1}" }
+
+# : }}}
+
+
+# : Tabs {{{
+
+[tabs]
+active = { fg = "${background}", bg = "${primary}", bold = true }
+inactive = { fg = "${primary}", bg = "${surface}" }
+
+# : }}}
+
+
+# : Mode {{{
+
+[mode]
+
+normal_main = { fg = "${background}", bg = "${primary}", bold = true }
+normal_alt = { fg = "${primary}", bg = "${surface}" }
+
+# Select mode
+select_main = { fg = "${background}", bg = "${secondary}", bold = true }
+select_alt = { fg = "${secondary}", bg = "${surface}" }
+
+# Unset mode
+unset_main = { fg = "${background}", bg = "${tertiary}", bold = true }
+unset_alt = { fg = "${tertiary}", bg = "${surface}" }
+
+# : }}}
+
+
+# : Status bar {{{
+
+[status]
+# Permissions
+perm_sep = { fg = "${onSurface1}" }
+perm_type = { fg = "${blue}" }
+perm_read = { fg = "${yellow}" }
+perm_write = { fg = "${red}" }
+perm_exec = { fg = "${green}" }
+
+# Progress
+progress_label = { fg = "#ffffff", bold = true }
+progress_normal = { fg = "${primary}", bg = "${surface1}" }
+progress_error = { fg = "${primary}", bg = "${red}" }
+
+# : }}}
+
+
+# : Pick {{{
+
+[pick]
+border = { fg = "${primary}" }
+active = { fg = "${accent}", bold = true }
+inactive = {}
+
+# : }}}
+
+
+# : Input {{{
+
+[input]
+border = { fg = "${primary}" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+# : }}}
+
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "${primary}" }
+
+# : }}}
+
+
+# : Tasks {{{
+
+[tasks]
+border = { fg = "${primary}" }
+title = {}
+hovered = { fg = "${accent}", bold = true }
+
+# : }}}
+
+
+# : Which {{{
+
+[which]
+mask = { bg = "${surface}" }
+cand = { fg = "${secondary}" }
+rest = { fg = "${onSurface2}" }
+desc = { fg = "${accent}" }
+separator = "  "
+separator_style = { fg = "${surface2}" }
+
+# : }}}
+
+
+# : Help {{{
+
+[help]
+on = { fg = "${secondary}" }
+run = { fg = "${accent}" }
+hovered = { reversed = true, bold = true }
+footer = { fg = "${surface}", bg = "${text}" }
+
+# : }}}
+
+
+# : Spotter {{{
+
+[spot]
+border = { fg = "${primary}" }
+title = { fg = "${primary}" }
+tbl_col = { fg = "${secondary}" }
+tbl_cell = { fg = "${accent}", bg = "${surface1}" }
+
+# : }}}
+
+
+# : Notification {{{
+
+[notify]
+title_info = { fg = "${green}" }
+title_warn = { fg = "${yellow}" }
+title_error = { fg = "${red}" }
+
+# : }}}
+
+
+# : File-specific styles {{{
+
+[filetype]
+
+rules = [
+ # Images
+ { mime = "image/*", fg = "${secondary}" },
+
+ # Media
+ { mime = "{audio,video}/*", fg = "${yellow}" },
+
+ # Archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "${accent}" },
+
+ # Documents
+ { mime = "application/{pdf,doc,rtf}", fg = "${green}" },
+
+ # Fallback
+ { url = "*", fg = "${text}" },
+ { url = "*/", fg = "${primary}" },
+
+ # TODO: remove
+ { name = "*", fg = "${text}" },
+ { name = "*/", fg = "${primary}" }
+]
+
+# : }}}
diff --git a/fedora/.config/yazi/flavors/tokyo-night.yazi/LICENSE b/fedora/.config/yazi/flavors/tokyo-night.yazi/LICENSE
new file mode 100644
index 0000000..9a5124e
--- /dev/null
+++ b/fedora/.config/yazi/flavors/tokyo-night.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 - sxyazi
+
+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.
diff --git a/fedora/.config/yazi/flavors/tokyo-night.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/tokyo-night.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..44b4479
--- /dev/null
+++ b/fedora/.config/yazi/flavors/tokyo-night.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Himanshu
+
+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.
diff --git a/fedora/.config/yazi/flavors/tokyo-night.yazi/README.md b/fedora/.config/yazi/flavors/tokyo-night.yazi/README.md
new file mode 100644
index 0000000..70eb613
--- /dev/null
+++ b/fedora/.config/yazi/flavors/tokyo-night.yazi/README.md
@@ -0,0 +1,47 @@
+<div align="center">
+ <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+</div>
+
+<h3 align="center">
+ Tokyo Night Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+
+## 👀 Preview
+
+<img src="preview.png" width="600" />
+
+## 🎨 Installation
+
+### Using package manager
+
+```bash
+ya pkg add BennyOe/tokyo-night
+```
+
+### Manual install
+
+```bash
+# Linux/macOS
+git clone https://github.com/BennyOe/tokyo-night.yazi.git ~/.config/yazi/flavors/tokyo-night.yazi
+
+# Windows
+git clone https://github.com/BennyOe/tokyo-night.yazi.git %AppData%\yazi\config\flavors\tokyo-night.yazi
+```
+
+## ⚙️ Usage
+
+Add the these lines to your `theme.toml` configuration file to use it:
+
+
+```toml
+[flavor]
+use = "tokyo-night"
+# For Yazi 0.4 and above
+dark = "tokyo-night"
+```
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/tokyo-night.yazi/flavor.toml b/fedora/.config/yazi/flavors/tokyo-night.yazi/flavor.toml
new file mode 100644
index 0000000..418ee4c
--- /dev/null
+++ b/fedora/.config/yazi/flavors/tokyo-night.yazi/flavor.toml
@@ -0,0 +1,190 @@
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[mgr]
+cwd = { fg = "#7aa2f7" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "#f7768e", bold = true, italic = true, underline = true }
+find_position = { fg = "#bb9af7", bg = "reset", bold = true, italic = true }
+
+# Marker
+marker_copied = { fg = "#9ece6a", bg = "#9ece6a" }
+marker_cut = { fg = "#e0af68", bg = "#f7768e" }
+marker_marked = { fg = "#7aa2f7", bg = "#7dcfff" }
+marker_selected = { fg = "#e0af68", bg = "#e0af68" }
+
+# Count
+count_copied = { fg = "#1a1b26", bg = "#9ece6a" }
+count_cut = { fg = "#1a1b26", bg = "#e0af68" }
+count_selected = { fg = "#1a1b26", bg = "#7aa2f7" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "#414868" }
+
+# : }}}
+
+
+# : Tabs {{{
+
+[tabs]
+active = { fg = "#292e42", bg = "#7aa2f7", bold = true }
+inactive = { fg = "#7aa2f7", bg = "#292e42" }
+
+# : }}}
+
+
+# : Mode {{{
+
+[mode]
+
+normal_main = { fg = "#292e42", bg = "#7aa2f7", bold = true }
+normal_alt = { fg = "#7aa2f7", bg = "#292e42" }
+
+# Select mode
+select_main = { fg = "#292e42", bg = "#9ece6a", bold = true }
+select_alt = { fg = "#7aa2f7", bg = "#292e42" }
+
+# Unset mode
+unset_main = { fg = "#292e42", bg = "#bb9af7", bold = true }
+unset_alt = { fg = "#7aa2f7", bg = "#292e42" }
+
+# : }}}
+
+
+# : Status bar {{{
+
+[status]
+overall = { fg = "#7aa2f7" }
+sep_left = { open = "", close = "" }
+sep_right = { open = "", close = "" }
+
+
+# Progress
+progress_label = { fg = "#292e42", bold = true }
+progress_normal = { fg = "#7aa2f7", bg = "#292e42" }
+progress_error = { fg = "#f7768e", bg = "#292e42" }
+
+# Permissions
+perm_sep = { fg = "#7aa2f7" }
+perm_type = { fg = "#9ece6a" }
+perm_read = { fg = "#e0af68" }
+perm_write = { fg = "#f7768e" }
+perm_exec = { fg = "#bb9af7" }
+
+
+# : }}}
+
+# : Pick {{{
+
+[pick]
+border = { fg = "#7aa2f7" }
+active = { fg = "#bb9af7", bold = true }
+inactive = {}
+
+# : }}}
+
+
+# : Input {{{
+
+[input]
+border = { fg = "#7aa2f7" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+# : }}}
+
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "#7aa2f7" }
+
+# : }}}
+
+
+# : Tasks {{{
+
+[tasks]
+border = { fg = "#7aa2f7" }
+title = {}
+hovered = { fg = "#bb9af7", underline = true }
+
+# : }}}
+
+
+# : Which {{{
+
+[which]
+mask = { bg = "#414868" }
+cand = { fg = "#9ece6a" }
+rest = { fg = "#a9b1d6" }
+desc = { fg = "#bb9af7" }
+separator = "  "
+separator_style = { fg = "#626880" }
+
+# : }}}
+
+
+# : Help {{{
+
+[help]
+on = { fg = "#9ece6a" }
+run = { fg = "#bb9af7" }
+hovered = { reversed = true, bold = true }
+footer = { fg = "#1a1b26", bg = "#a9b1d6" }
+
+# : }}}
+
+
+# : Notify {{{
+
+[notify]
+title_info = { fg = "#9ece6a" }
+title_warn = { fg = "#f7768e" }
+title_error = { fg = "#e0af68" }
+
+# : }}}
+
+
+# : File-specific styles {{{
+
+[filetype]
+
+rules = [
+ # Images
+ { mime = "image/*", fg = "#e0af68" },
+
+ # Media
+ { mime = "video/*", fg = "#f7768e" },
+ { mime = "audio/*", fg = "#f7768e" },
+
+ # Archives
+ { mime = "application/zip", fg = "#bb9af7" },
+ { mime = "application/x-tar", fg = "#bb9af7" },
+ { mime = "application/x-bzip*", fg = "#bb9af7" },
+ { mime = "application/x-bzip2", fg = "#bb9af7" },
+ { mime = "application/x-7z-compressed", fg = "#bb9af7" },
+ { mime = "application/x-rar", fg = "#bb9af7" },
+ { mime = "application/x-xz", fg = "#bb9af7" },
+
+ # Documents
+ { mime = "application/doc", fg = "#9ece6a" },
+ { mime = "application/epub+zip", fg = "#9ece6a" },
+ { mime = "application/pdf", fg = "#9ece6a" },
+ { mime = "application/rtf", fg = "#9ece6a" },
+ { mime = "application/vnd.*", fg = "#9ece6a" },
+
+ # Fallback
+ { name = "*", fg = "#c6d0f5" },
+ { name = "*/", fg = "#7aa2f7" }
+]
+
+# : }}}
diff --git a/fedora/.config/yazi/flavors/tokyo-night.yazi/preview.png b/fedora/.config/yazi/flavors/tokyo-night.yazi/preview.png
new file mode 100644
index 0000000..75f2f4a
--- /dev/null
+++ b/fedora/.config/yazi/flavors/tokyo-night.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/tokyo-night.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/tokyo-night.yazi/tmtheme.xml
new file mode 100644
index 0000000..21d2163
--- /dev/null
+++ b/fedora/.config/yazi/flavors/tokyo-night.yazi/tmtheme.xml
@@ -0,0 +1,1329 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>author</key>
+ <string>Kristi Russell (http://github.com/enkia)</string>
+ <key>colorSpaceName</key>
+ <string>sRGB</string>
+ <key>name</key>
+ <string>Enki-Tokyo-Night</string>
+ <key>semanticClass</key>
+ <string>enki.theme.tokyo</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>activeGuide</key>
+ <string>#363b54</string>
+ <key>background</key>
+ <string>#1d1f29</string>
+ <key>caret</key>
+ <string>#DBC08A</string>
+ <key>findHighlight</key>
+ <string>#ffa300</string>
+ <key>findHighlightForeground</key>
+ <string>#000000</string>
+ <key>foreground</key>
+ <string>#AFBAD4ff</string>
+ <key>guide</key>
+ <string>#4f4f5e40</string>
+ <key>gutterForeground</key>
+ <string>#3b415caa</string>
+ <key>inactiveSelection</key>
+ <string>#282833</string>
+ <key>invisibles</key>
+ <string>#4f4f5e</string>
+ <key>lineHighlight</key>
+ <string>#00000030</string>
+ <key>phantomCss</key>
+ <string>&lt;![CDATA[ html { position: relative; } ]]&gt;</string>
+ <key>popupCss</key>
+ <string>&lt;![CDATA[ html { color: #B376B3; background-color: #2b2d3a; padding: 10px; } a { color: #6189BB; line-height: 1.2; text-decoration: none; } .error, .deleted { color: #50B4DC; } .success, .inserted { color: #9DBA72; } .warning, .modified { color: #ffa300; } ]]&gt;</string>
+ <key>selection</key>
+ <string>#9D599D40</string>
+ <key>selectionBorder</key>
+ <string>#9D599D</string>
+ <key>shadow</key>
+ <string>#00000010</string>
+ <key>stackGuide</key>
+ <string>#4f4f5e60</string>
+ <key>tagsOptions</key>
+ <string>underline</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Italics - Comments, Storage, Keyword Flow, Vue attributes, Decorators</string>
+ <key>scope</key>
+ <string>comment, meta.var.expr storage.type, keyword.control.flow, meta.directive.vue punctuation.separator.key-value.html, meta.directive.vue entity.other.attribute-name.html, tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js, storage.modifier</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment, comment.block.documentation, punctuation.definition.comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#444b6a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment Doc</string>
+ <key>scope</key>
+ <string>comment.block.documentation variable, comment.block.documentation storage, comment.block.documentation punctuation, comment.block.documentation keyword, comment.block.documentation support, comment.block.documentation markup, comment.block.documentation markup.inline.raw.string.markdown, keyword.other.phpdoc.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7982a9</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number, Boolean, Undefined, Null</string>
+ <key>scope</key>
+ <string>variable.other.constant, punctuation.definition.constant, constant.language, constant.numeric, support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ff9e64</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String, Symbols, Markup Heading</string>
+ <key>scope</key>
+ <string>string, constant.other.symbol, constant.other.key, markup.heading, meta.attribute-selector</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#9ece6a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Colors</string>
+ <key>scope</key>
+ <string>constant.other.color, constant.other.color.rgb-value.hex punctuation.definition.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9aa5ce</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid, invalid.illegal</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ff5370</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage Type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage - modifier, var, const, let</string>
+ <key>scope</key>
+ <string>meta.var.expr storage.type, storage.modifier</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9d7cd8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Interpolation</string>
+ <key>scope</key>
+ <string>punctuation.definition.template-expression, punctuation.section.embedded</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7dcfff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Spread</string>
+ <key>scope</key>
+ <string>keyword.operator.spread, keyword.operator.rest</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#f7768e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Operator, Misc</string>
+ <key>scope</key>
+ <string>keyword.operator, keyword.control.as, keyword.other, keyword.operator.bitwise.shift, punctuation, punctuation.definition.constant.markdown, punctuation.definition.string, punctuation.support.type.property-name, text.html.vue-html meta.tag, punctuation.definition.keyword, punctuation.terminator.rule, punctuation.definition.entity, punctuation.definition.tag, punctuation.separator.inheritance.php, punctuation.definition.tag.html, keyword.other.template, keyword.other.substitution, entity.name.operator, text.html.vue meta.tag.block.any.html, text.html.vue meta.tag.inline.any.html, text.html.vue meta.tag.other.html, text.html.twig meta.tag.inline.any.html, text.html.twig meta.tag.block.any.html, text.html.twig meta.tag.structure.any.html, text.html.twig meta.tag.any.html</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89ddff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Import, Export, From, Default</string>
+ <key>scope</key>
+ <string>keyword.control.import, keyword.control.export, keyword.control.from, keyword.control.default, meta.import keyword.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7dcfff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword, keyword.control, keyword.other.important</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword SQL</string>
+ <key>scope</key>
+ <string>keyword.other.DML</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7dcfff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword Operator Logical, Arrow, Ternary, Comparison</string>
+ <key>scope</key>
+ <string>keyword.operator.logical, storage.type.function, keyword.operator.bitwise, keyword.operator.ternary, keyword.operator.comparison, keyword.operator.relational, keyword.operator.or.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag</string>
+ <key>scope</key>
+ <string>entity.name.tag, entity.name.tag support.class.component, meta.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f7768e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.tag, punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ba3c97</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Blade</string>
+ <key>scope</key>
+ <string>keyword.blade, entity.name.function.blade</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7aa2f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>PHP - Embedded Tag</string>
+ <key>scope</key>
+ <string>punctuation.section.embedded.begin.php, punctuation.section.embedded.end.php</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0db9d7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Smarty - Twig tag - Blade</string>
+ <key>scope</key>
+ <string>punctuation.definition.variable.smarty, punctuation.section.embedded.begin.smarty, punctuation.section.embedded.end.smarty, meta.tag.template.value.twig, punctuation.section.tag.twig, meta.tag.expression.twig, punctuation.definition.tag.expression.twig, punctuation.definition.tag.output.twig, variable.parameter.smarty</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7DCFFF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Smarty - Twig variable - function</string>
+ <key>scope</key>
+ <string>variable.other.property.twig, support.function.twig, meta.function-call.twig, keyword.control.twig, keyword.control.smarty, keyword.operator.other.twig, keyword.operator.comparison.twig, support.function.functions.twig, support.function.functions.twig, keyword.operator.assignment.twig, support.function.filters.twig, support.function.built-in.smarty, keyword.operator.smarty, text.blade text.html.blade custom.compiler.blade.php punctuation.section.embedded.php entity.name.tag.block.any.html, text.blade text.html.blade custom.compiler.blade.php punctuation.section.embedded.php constant.other.inline-data.html, text.blade text.html.blade custom.compiler.blade.php support.function constant.other.inline-data.html</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0db9d7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Globals - PHP Constants etc</string>
+ <key>scope</key>
+ <string>constant.other.php, variable.other.global.safer, variable.other.global.safer punctuation.definition.variable, variable.other.global, variable.other.global punctuation.definition.variable, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e0af68</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variables</string>
+ <key>scope</key>
+ <string>variable, support.variable, string constant.other.placeholder</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c0caf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object Variable</string>
+ <key>scope</key>
+ <string>variable.other.object, support.module.node</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c0caf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object Key</string>
+ <key>scope</key>
+ <string>meta.object-literal.key, meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js, string.alias.graphql, string.unquoted.graphql, string.unquoted.alias.graphql, meta.field.declaration.ts variable.object.property</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#73daca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object Property</string>
+ <key>scope</key>
+ <string>variable.other.property, support.variable.property, support.variable.property.dom, meta.function-call variable.other.object.property, variable.language.prototype, meta.property.object, variable.other.member</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7dcfff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object Property</string>
+ <key>scope</key>
+ <string>variable.other.object.property</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c0caf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Object Literal Member lvl 3 (Vue Prop Validation)</string>
+ <key>scope</key>
+ <string>meta.objectliteral meta.object.member meta.objectliteral meta.object.member meta.objectliteral meta.object.member meta.object-literal.key</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#41a6b5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>C-related Block Level Variables</string>
+ <key>scope</key>
+ <string>source.cpp meta.block variable.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f7768e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Other Variable</string>
+ <key>scope</key>
+ <string>support.other.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f7768e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Methods</string>
+ <key>scope</key>
+ <string>meta.class-method.js entity.name.function.js, entity.name.method.js, variable.function.constructor, keyword.other.special-method, storage.type.cs</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7aa2f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function Definition</string>
+ <key>scope</key>
+ <string>entity.name.function, meta.function-call, meta.function-call entity.name.function, variable.function, meta.definition.method entity.name.function, meta.object-literal entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7aa2f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function Argument</string>
+ <key>scope</key>
+ <string>variable.parameter.function.language.special, variable.parameter, meta.function.parameters punctuation.definition.variable, meta.function.parameter variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e0af68</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Constant, Tag Attribute</string>
+ <key>scope</key>
+ <string>keyword.other.type.php, storage.type.php, constant.character, constant.escape, keyword.other.unit</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable Definition</string>
+ <key>scope</key>
+ <string>meta.definition.variable variable.other.constant, meta.definition.variable variable.other.readwrite, variable.other.declaration</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited Class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string></string>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class, Support, DOM, etc</string>
+ <key>scope</key>
+ <string>support.class, support.type, variable.other.readwrite.alias, support.orther.namespace.use.php, meta.use.php, support.other.namespace.php, support.type.sys-types, support.variable.dom, support.constant.math, support.type.object.module, support.constant.json, entity.name.namespace, meta.import.qualifier, entity.name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0db9d7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class Name</string>
+ <key>scope</key>
+ <string>entity.name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c0caf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Support Function</string>
+ <key>scope</key>
+ <string>support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0db9d7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Class and Support</string>
+ <key>scope</key>
+ <string>source.css support.type.property-name, source.sass support.type.property-name, source.scss support.type.property-name, source.less support.type.property-name, source.stylus support.type.property-name, source.postcss support.type.property-name, support.type.property-name.css, support.type.vendored.property-name, support.type.map.key</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7aa2f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Font</string>
+ <key>scope</key>
+ <string>support.constant.font-name, meta.definition.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9ece6a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Class</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.class, meta.at-rule.mixin.scss entity.name.function.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9ece6a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS ID</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.id</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#fc7b7b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Tag</string>
+ <key>scope</key>
+ <string>entity.name.tag.css, entity.name.tag.reference, entity.name.tag.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0db9d7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Tag Reference</string>
+ <key>scope</key>
+ <string>entity.name.tag.reference</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e0af68</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Property Separator</string>
+ <key>scope</key>
+ <string>meta.property-list punctuation.separator.key-value</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9abdf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Punctuation</string>
+ <key>scope</key>
+ <string>meta.property-list, punctuation.definition.entity.css</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e0af68</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SCSS @</string>
+ <key>scope</key>
+ <string>meta.at-rule.mixin keyword.control.at-rule.mixin, meta.at-rule.include entity.name.function.scss, meta.at-rule.include keyword.control.at-rule.include</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SCSS Mixins, Extends, Include Keyword</string>
+ <key>scope</key>
+ <string>keyword.control.at-rule.include punctuation.definition.keyword, keyword.control.at-rule.mixin punctuation.definition.keyword, meta.at-rule.include keyword.control.at-rule.include, keyword.control.at-rule.extend punctuation.definition.keyword, meta.at-rule.extend keyword.control.at-rule.extend, entity.other.attribute-name.placeholder.css punctuation.definition.entity.css, meta.at-rule.media keyword.control.at-rule.media, meta.at-rule.mixin keyword.control.at-rule.mixin, meta.at-rule.function keyword.control.at-rule.function, keyword.control punctuation.definition.keyword, meta.at-rule.import.scss entity.other.attribute-name.placeholder.scss punctuation.definition.entity.scss, meta.at-rule.import.scss keyword.control.at-rule.import.scss</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9d7cd8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>SCSS Include Mixin Argument</string>
+ <key>scope</key>
+ <string>meta.property-list meta.at-rule.include</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c0caf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS value</string>
+ <key>scope</key>
+ <string>support.constant.property-value</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ff9e64</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Sub-methods</string>
+ <key>scope</key>
+ <string>entity.name.module.js, variable.import.parameter.js, variable.other.class.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c0caf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Language methods</string>
+ <key>scope</key>
+ <string>variable.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f7768e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable punctuation</string>
+ <key>scope</key>
+ <string>variable.other punctuation.definition.variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c0caf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword this with Punctuation, ES7 Bind Operator</string>
+ <key>scope</key>
+ <string>source.js constant.other.object.key.js string.unquoted.label.js, variable.language.this punctuation.definition.variable, keyword.other.this</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f7768e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML Attributes</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name, text.html.basic entity.other.attribute-name.html, text.html.basic entity.other.attribute-name, text.blade entity.other.attribute-name.class, text.html.smarty entity.other.attribute-name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Vue Template attributes</string>
+ <key>scope</key>
+ <string>meta.directive.vue punctuation.separator.key-value.html, meta.directive.vue entity.other.attribute-name.html</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Vue Template attribute separator</string>
+ <key>scope</key>
+ <string>meta.directive.vue punctuation.separator.key-value.html</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89ddff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS IDs</string>
+ <key>scope</key>
+ <string>source.sass keyword.control</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7aa2f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS psuedo selectors</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name.pseudo-class, entity.other.attribute-name.pseudo-element, entity.other.attribute-name.placeholder, meta.property-list meta.property-value</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inserted</string>
+ <key>scope</key>
+ <string>markup.inserted</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#449dab</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Deleted</string>
+ <key>scope</key>
+ <string>markup.deleted</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#914c54</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Changed</string>
+ <key>scope</key>
+ <string>markup.changed</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#6183bb</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions</string>
+ <key>scope</key>
+ <string>string.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b4f9f8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions - Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.group</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f7768e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions - Character Class</string>
+ <key>scope</key>
+ <string>constant.other.character-class.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions - Character Class Set</string>
+ <key>scope</key>
+ <string>constant.other.character-class.set.regexp, punctuation.definition.character-class.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e0af68</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions - Quantifier</string>
+ <key>scope</key>
+ <string>keyword.operator.quantifier.regexp</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89ddff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Regular Expressions - Backslash</string>
+ <key>scope</key>
+ <string>constant.character.escape.backslash</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c0caf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Escape Characters</string>
+ <key>scope</key>
+ <string>constant.character.escape</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89ddff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Decorators</string>
+ <key>scope</key>
+ <string>tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7aa2f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>CSS Units</string>
+ <key>scope</key>
+ <string>keyword.other.unit</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f7768e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 0</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7aa2f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 1</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0db9d7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 2</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7dcfff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 3</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 4</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#e0af68</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 5</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0db9d7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 6</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#73daca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 7</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f7768e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - Level 8</string>
+ <key>scope</key>
+ <string>source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json punctuation.definition.string.end.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9ece6a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>JSON Key - value</string>
+ <key>scope</key>
+ <string>source.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9ece6a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Plain Punctuation</string>
+ <key>scope</key>
+ <string>punctuation.definition.list_item.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9abdf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Block Punctuation</string>
+ <key>scope</key>
+ <string>meta.block, meta.brace, punctuation.definition.block, punctuation.definition.use, punctuation.definition.group.shell, punctuation.definition.class, punctuation.definition.begin.bracket, punctuation.definition.end.bracket, punctuation.definition.parameters, punctuation.definition.arguments, punctuation.definition.dictionary, punctuation.definition.array, punctuation.section</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9abdf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Plain</string>
+ <key>scope</key>
+ <string>meta.jsx.children, meta.embedded.block</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c0caf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>HTML text</string>
+ <key>scope</key>
+ <string>text.html</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9aa5ce</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Markup Raw Inline</string>
+ <key>scope</key>
+ <string>text.html.markdown markup.inline.raw.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#bb9af7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Markup Raw Inline Punctuation</string>
+ <key>scope</key>
+ <string>text.html.markdown markup.inline.raw.markdown punctuation.definition.raw.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4E5579</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Heading 1</string>
+ <key>scope</key>
+ <string>heading.1.markdown entity.name, heading.1.markdown punctuation.definition.heading.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#89ddff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Heading 2</string>
+ <key>scope</key>
+ <string>heading.2.markdown entity.name, heading.2.markdown punctuation.definition.heading.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#61bdf2</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Heading 3</string>
+ <key>scope</key>
+ <string>heading.3.markdown entity.name, heading.3.markdown punctuation.definition.heading.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#7aa2f7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Heading 4</string>
+ <key>scope</key>
+ <string>heading.4.markdown entity.name, heading.4.markdown punctuation.definition.heading.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#6d91de</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Heading 5</string>
+ <key>scope</key>
+ <string>heading.5.markdown entity.name, heading.5.markdown punctuation.definition.heading.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#9aa5ce</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Heading 6</string>
+ <key>scope</key>
+ <string>heading.6.markdown entity.name, heading.6.markdown punctuation.definition.heading.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#747ca1</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup - Italic</string>
+ <key>scope</key>
+ <string>markup.italic, markup.italic punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ <key>foreground</key>
+ <string>#c0caf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup - Bold</string>
+ <key>scope</key>
+ <string>markup.bold, markup.bold punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#c0caf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup - Bold-Italic</string>
+ <key>scope</key>
+ <string>markup.bold markup.italic, markup.bold markup.italic punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold italic</string>
+ <key>foreground</key>
+ <string>#c0caf5</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup - Underline</string>
+ <key>scope</key>
+ <string>markup.underline, markup.underline punctuation</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>underline</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Blockquote</string>
+ <key>scope</key>
+ <string>markup.quote punctuation.definition.blockquote.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4e5579</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup - Quote</string>
+ <key>scope</key>
+ <string>markup.quote</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>italic</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Link</string>
+ <key>scope</key>
+ <string>string.other.link, markup.underline.link, constant.other.reference.link.markdown, string.other.link.description.title.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#73daca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Fenced Code Block</string>
+ <key>scope</key>
+ <string>markup.fenced_code.block.markdown, markup.inline.raw.string.markdown, variable.language.fenced.markdown</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#89ddff</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markdown - Separator</string>
+ <key>scope</key>
+ <string>meta.separator</string>
+ <key>settings</key>
+ <dict>
+ <key>fontStyle</key>
+ <string>bold</string>
+ <key>foreground</key>
+ <string>#444b6a</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Markup - Table</string>
+ <key>scope</key>
+ <string>markup.table</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#c0cefc</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Token - Info</string>
+ <key>scope</key>
+ <string>token.info-token</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0db9d7</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Token - Warn</string>
+ <key>scope</key>
+ <string>token.warn-token</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#ffdb69</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Token - Error</string>
+ <key>scope</key>
+ <string>token.error-token</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#db4b4b</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Token - Debug</string>
+ <key>scope</key>
+ <string>token.debug-token</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#b267e6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Apache Tag</string>
+ <key>scope</key>
+ <string>entity.tag.apacheconf</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#f7768e</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Preprocessor</string>
+ <key>scope</key>
+ <string>meta.preprocessor</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#73daca</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>ENV value</string>
+ <key>scope</key>
+ <string>source.env</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#7aa2f7</string>
+ </dict>
+ </dict>
+ </array>
+ <key>uuid</key>
+ <string>06f855e3-9fb7-4fb1-b790-aef06065f34e</string>
+</dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/LICENSE b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/LICENSE
new file mode 100644
index 0000000..5436de3
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Alexander Bays
+
+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.
diff --git a/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..5436de3
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Alexander Bays
+
+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.
diff --git a/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/README.md b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/README.md
new file mode 100644
index 0000000..92826d8
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/README.md
@@ -0,0 +1,50 @@
+<div align="center">
+<img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+<h3>
+ VSCode Dark Modern Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+<a>
+ This <a href="https://github.com/sxyazi/yazi">Yazi</a> flavor matches the <a href="https://code.visualstudio.com/">Visual Studio Code</a> default theme.
+</a>
+</div>
+
+## 👀 Preview
+
+<img src="./preview.png" width="600" />
+
+## 🎨 Installation
+
+### Yazi CLI
+
+```bash
+# v25.5.28+
+ya pkg add 956MB/vscode-dark-modern
+
+# pre v25.5.28 (deprecated)
+ya pack -a 956MB/vscode-dark-modern
+```
+
+### Manual
+
+```bash
+# Linux/macOS
+git clone https://github.com/956MB/vscode-dark-modern.yazi.git ~/.config/yazi/flavors/vscode-dark-modern.yazi
+
+# Windows
+git clone https://github.com/956MB/vscode-dark-modern.yazi.git %AppData%\yazi\config\flavors\vscode-dark-modern.yazi
+```
+
+## ⚙️ Usage
+
+Add the these lines to your `theme.toml` configuration file to use it:
+
+```toml
+[flavor]
+dark = "vscode-dark-modern"
+```
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/flavor.toml b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/flavor.toml
new file mode 100644
index 0000000..648f9bb
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/flavor.toml
@@ -0,0 +1,186 @@
+# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
+# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
+"$schema" = "https://yazi-rs.github.io/schemas/theme.json"
+
+# vscode-dark-modern
+# https://github.com/956MB/vscode.yazi/blob/main/themes/vscode-dark-modern/
+#
+# A theme inspired by Visual Studio Code's Dark Modern theme.
+
+[colors]
+background = "#1F1F1F"
+foreground = "#D4D4D4"
+selection = "#264F78"
+cursor = "#AEAFAD"
+black = "#000000"
+red = "#F44747"
+green = "#6A9955"
+yellow = "#D7BA7D"
+blue = "#569CD6"
+magenta = "#C586C0"
+cyan = "#4EC9B0"
+white = "#D4D4D4"
+bright_black = "#808080"
+bright_red = "#F44747"
+bright_green = "#6A9955"
+bright_yellow = "#DCDCAA"
+bright_blue = "#569CD6"
+bright_magenta = "#C586C0"
+bright_cyan = "#4EC9B0"
+bright_white = "#FFFFFF"
+
+[manager]
+cwd = { fg = "cyan" }
+# Hovered
+hovered = { fg = "#D4D4D4", bg = "#264F78" }
+preview_hovered = { underline = true }
+# Find
+find_keyword = { fg = "#DCDCAA", bold = true, italic = true, underline = true }
+find_position = { fg = "#C586C0", bg = "#1F1F1F", bold = true, italic = true }
+# Marker
+marker_copied = { fg = "#73C991", bg = "#73C991" }
+marker_cut = { fg = "#F44747", bg = "#F44747" }
+marker_marked = { fg = "#4EC9B0", bg = "#4EC9B0" }
+marker_selected = { fg = "#D7BA7D", bg = "#D7BA7D" }
+# Tab
+tab_active = { fg = "#D4D4D4", bg = "#1F1F1F" }
+tab_inactive = { fg = "#D4D4D4", bg = "#2D2D2D" }
+tab_width = 1
+# Count
+count_copied = { fg = "#1F1F1F", bg = "#73C991" }
+count_cut = { fg = "#1F1F1F", bg = "#F44747" }
+count_selected = { fg = "#1F1F1F", bg = "#D7BA7D" }
+# Border
+border_symbol = "│"
+border_style = { fg = "#444444" }
+# Highlighting
+syntect_theme = "./tmtheme.xml"
+# Cursor
+cursor_symbol = "█"
+cursor = { fg = "#1F1F1F", bg = "#AEAFAD" }
+# Executable
+exe_symbol = ""
+exe = { fg = "#4EC9B0", bg = "#1F1F1F" }
+# Regular
+file_symbol = ""
+file = { }
+# Directory
+folder_symbol = ""
+folder = { fg = "#569CD6", bg = "#1F1F1F" }
+# Hidden
+hidden_symbol = ""
+hidden = { fg = "#808080" }
+# Link
+link_symbol = ""
+link = { fg = "#4EC9B0", bg = "#1F1F1F" }
+# Link (broken)
+broken_symbol = ""
+broken = { fg = "#F44747", bg = "#3A1212" }
+# Selected
+selected = { fg = "#FFFFFF", bg = "#264F78" }
+
+[status]
+separator_open = ""
+separator_close = ""
+separator_style = { fg = "#444444", bg = "#444444" }
+# Mode
+mode_normal = { fg = "#1F1F1F", bg = "#569CD6", bold = true }
+mode_select = { fg = "#1F1F1F", bg = "#FFAF00", bold = true }
+mode_unset = { fg = "#1F1F1F", bg = "#F44747", bold = true }
+# Progress
+progress_label = { bold = true }
+progress_normal = { fg = "#569CD6", bg = "#1F1F1F" }
+progress_error = { fg = "#F44747", bg = "#1F1F1F" }
+# Permissions
+permissions_t = { fg = "#6A9955" }
+permissions_r = { fg = "#D7BA7D" }
+permissions_w = { fg = "#F44747" }
+permissions_x = { fg = "#4EC9B0" }
+permissions_s = { fg = "#808080" }
+
+[select]
+border = { fg = "#569CD6" }
+active = { fg = "#C586C0", bold = true }
+inactive = {}
+
+[input]
+border = { fg = "#569CD6" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+[completion]
+border = { fg = "#569CD6" }
+active = { bg = "#264F78" }
+inactive = {}
+# Icons
+icon_file = ""
+icon_folder = ""
+icon_command = ""
+
+[tasks]
+border = { fg = "#569CD6" }
+title = {}
+hovered = { underline = true }
+
+[which]
+mask = { bg = "#1F1F1F" }
+cand = { fg = "#4EC9B0" }
+rest = { fg = "#808080" }
+desc = { fg = "#C586C0" }
+separator = " "
+separator_style = { fg = "#808080" }
+
+[help]
+on = { fg = "#4EC9B0" }
+run = { fg = "#C586C0" }
+desc = { fg = "#D4D4D4" }
+hovered = { bg = "#264F78", bold = true }
+footer = { fg = "#D4D4D4", bg = "#252526" }
+
+[filetype]
+rules = [
+ # Images
+ { mime = "image/*", fg = "#D7BA7D" },
+ # Videos
+ { mime = "video/*", fg = "#C586C0" },
+ # Audio
+ { mime = "audio/*", fg = "#C586C0" },
+ # Archives
+ { mime = "application/zip", fg = "#F44747" },
+ { mime = "application/gzip", fg = "#F44747" },
+ { mime = "application/x-tar", fg = "#F44747" },
+ { mime = "application/x-bzip", fg = "#F44747" },
+ { mime = "application/x-bzip2", fg = "#F44747" },
+ { mime = "application/x-7z-compressed", fg = "#F44747" },
+ { mime = "application/x-rar", fg = "#F44747" },
+ # Documents
+ { mime = "application/pdf", fg = "#4EC9B0" },
+ { mime = "application/msword", fg = "#4EC9B0" },
+ { mime = "application/vnd.openxmlformats-officedocument.*", fg = "#4EC9B0" },
+ # Fallback
+ { name = "*", fg = "#D4D4D4" },
+ { name = "*/", fg = "#569CD6" },
+ # Executable
+ { name = "*", category = "executable", fg = "#4EC9B0", bg = "#1F1F1F" },
+ # Directories
+ { name = "*/", fg = "#569CD6", bg = "#1F1F1F" },
+ # Hidden files
+ { name = ".*", fg = "#808080" },
+ # Symlinks
+ { name = "*", category = "link", fg = "#4EC9B0", bg = "#1F1F1F" },
+ # Broken symlinks
+ { name = "*", category = "broken", fg = "#F44747", bg = "#3A1212" },
+]
+
+[icon]
+rules = [
+ { name = "Desktop", text = "" },
+ { name = "Documents", text = "" },
+ { name = "Downloads", text = "" },
+ { name = "Pictures", text = "" },
+ { name = "Music", text = "" },
+ { name = "Videos", text = "" },
+ { name = ".git", text = "" },
+ { name = ".config", text = "" },
+]
diff --git a/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/1.png b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/1.png
new file mode 100644
index 0000000..045985b
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/1.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/2.png b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/2.png
new file mode 100644
index 0000000..befbed9
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/2.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/3.png b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/3.png
new file mode 100644
index 0000000..a645c27
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/3.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/4.png b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/4.png
new file mode 100644
index 0000000..490dcec
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/4.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/preview.png b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/preview.png
new file mode 100644
index 0000000..2cc6a33
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/img/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/preview.png b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/preview.png
new file mode 100644
index 0000000..2cc6a33
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/tmtheme.xml
new file mode 100644
index 0000000..de79514
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-modern.yazi/tmtheme.xml
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>name</key>
+ <string>VSCode Dark Modern</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#1F1F1F</string>
+ <key>foreground</key>
+ <string>#D4D4D4</string>
+ <key>caret</key>
+ <string>#AEAFAD</string>
+ <key>invisibles</key>
+ <string>#6E7681</string>
+ <key>lineHighlight</key>
+ <string>#222222</string>
+ <key>selection</key>
+ <string>#264F78</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#6A9955</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#CE9178</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#B5CEA8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-in constant</string>
+ <key>scope</key>
+ <string>constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#569CD6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-defined constant</string>
+ <key>scope</key>
+ <string>constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4FC1FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9CDCFE</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#C586C0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#569CD6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#569CD6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class name</string>
+ <key>scope</key>
+ <string>entity.name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4EC9B0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4EC9B0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function name</string>
+ <key>scope</key>
+ <string>entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#DCDCAA</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function argument</string>
+ <key>scope</key>
+ <string>variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9CDCFE</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag name</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#569CD6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9CDCFE</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library function</string>
+ <key>scope</key>
+ <string>support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#DCDCAA</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library constant</string>
+ <key>scope</key>
+ <string>support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4FC1FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library class/type</string>
+ <key>scope</key>
+ <string>support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4EC9B0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F44747</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F44747</string>
+ </dict>
+ </dict>
+ </array>
+ <key>uuid</key>
+ <string>231D4441-F280-4D49-A647-E1FD7E84D1D8</string>
+</dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/LICENSE b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/LICENSE
new file mode 100644
index 0000000..5436de3
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Alexander Bays
+
+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.
diff --git a/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..5436de3
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Alexander Bays
+
+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.
diff --git a/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/README.md b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/README.md
new file mode 100644
index 0000000..fc5f857
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/README.md
@@ -0,0 +1,50 @@
+<div align="center">
+<img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+<h3>
+ VSCode Dark Plus Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+<a>
+ This <a href="https://github.com/sxyazi/yazi">Yazi</a> flavor matches the <a href="https://code.visualstudio.com/">Visual Studio Code</a> default theme.
+</a>
+</div>
+
+## 👀 Preview
+
+<img src="./preview.png" width="600" />
+
+## 🎨 Installation
+
+### Yazi CLI
+
+```bash
+# v25.5.28+
+ya pkg add 956MB/vscode-dark-plus
+
+# pre v25.5.28 (deprecated)
+ya pack -a 956MB/vscode-dark-plus
+```
+
+### Manual
+
+```bash
+# Linux/macOS
+git clone https://github.com/956MB/vscode-dark-plus.yazi.git ~/.config/yazi/flavors/vscode-dark-plus.yazi
+
+# Windows
+git clone https://github.com/956MB/vscode-dark-plus.yazi.git %AppData%\yazi\config\flavors\vscode-dark-plus.yazi
+```
+
+## ⚙️ Usage
+
+Add the these lines to your `theme.toml` configuration file to use it:
+
+```toml
+[flavor]
+dark = "vscode-dark-plus"
+```
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/flavor.toml b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/flavor.toml
new file mode 100644
index 0000000..d30419b
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/flavor.toml
@@ -0,0 +1,186 @@
+# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
+# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
+"$schema" = "https://yazi-rs.github.io/schemas/theme.json"
+
+# vscode-dark-plus (Dark+)
+# https://github.com/956MB/vscode.yazi/blob/main/themes/vscode-dark-plus/
+#
+# A theme inspired by Visual Studio Code's Dark+ Visual Studio theme.
+
+[colors]
+background = "#1E1E1E"
+foreground = "#D4D4D4"
+selection = "#3A3D41"
+cursor = "#D4D4D4"
+black = "#000000"
+red = "#CD3131"
+green = "#0DBC79"
+yellow = "#E5E510"
+blue = "#2472C8"
+magenta = "#BC3FBC"
+cyan = "#11A8CD"
+white = "#E5E5E5"
+bright_black = "#666666"
+bright_red = "#F14C4C"
+bright_green = "#23D18B"
+bright_yellow = "#F5F543"
+bright_blue = "#3B8EEA"
+bright_magenta = "#D670D6"
+bright_cyan = "#29B8DB"
+bright_white = "#E5E5E5"
+
+[manager]
+cwd = { fg = "cyan" }
+# Hovered
+hovered = { fg = "#D4D4D4", bg = "#3A3D41" }
+preview_hovered = { underline = true }
+# Find
+find_keyword = { fg = "#569CD6", bold = true, italic = true, underline = true }
+find_position = { fg = "#D4D4D4", bg = "#3A3D41", bold = true }
+# Marker
+marker_copied = { fg = "#73C991", bg = "#73C991" }
+marker_cut = { fg = "#F14C4C", bg = "#F14C4C" }
+marker_marked = { fg = "#569CD6", bg = "#569CD6" }
+marker_selected = { fg = "#264F78", bg = "#264F78" }
+# Tab
+tab_active = { fg = "#D4D4D4", bg = "#1E1E1E" }
+tab_inactive = { fg = "#D4D4D4", bg = "#2D2D2D" }
+tab_width = 1
+# Count
+count_copied = { fg = "#1E1E1E", bg = "#73C991" }
+count_cut = { fg = "#1E1E1E", bg = "#F14C4C" }
+count_selected = { fg = "#1E1E1E", bg = "#264F78" }
+# Border
+border_symbol = "│"
+border_style = { fg = "#404040" }
+# Highlighting
+syntect_theme = "./tmtheme.xml"
+# Cursor
+cursor_symbol = "█"
+cursor = { fg = "#1E1E1E", bg = "#D4D4D4" }
+# Executable
+exe_symbol = ""
+exe = { fg = "#0DBC79", bg = "#1E1E1E" }
+# Regular
+file_symbol = ""
+file = { }
+# Directory
+folder_symbol = ""
+folder = { fg = "#2472C8", bg = "#1E1E1E" }
+# Hidden
+hidden_symbol = ""
+hidden = { fg = "#666666" }
+# Link
+link_symbol = ""
+link = { fg = "#0DBC79", bg = "#1E1E1E" }
+# Link (broken)
+broken_symbol = ""
+broken = { fg = "#CD3131", bg = "#3A1212" }
+# Selected
+selected = { fg = "#FFFFFF", bg = "#3A3D41" }
+
+[status]
+separator_open = ""
+separator_close = ""
+separator_style = { fg = "#404040", bg = "#404040" }
+# Mode
+mode_normal = { fg = "#1E1E1E", bg = "#569CD6", bold = true }
+mode_select = { fg = "#1E1E1E", bg = "#FFAF00", bold = true }
+mode_unset = { fg = "#1E1E1E", bg = "#F44747", bold = true }
+# Progress
+progress_label = { bold = true }
+progress_normal = { fg = "#569CD6", bg = "#1E1E1E" }
+progress_error = { fg = "#F44747", bg = "#1E1E1E" }
+# Permissions
+permissions_t = { fg = "#6A9955" }
+permissions_r = { fg = "#CE9178" }
+permissions_w = { fg = "#F44747" }
+permissions_x = { fg = "#569CD6" }
+permissions_s = { fg = "#808080" }
+
+[select]
+border = { fg = "#569CD6" }
+active = { fg = "#CE9178", bold = true }
+inactive = {}
+
+[input]
+border = { fg = "#569CD6" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+[completion]
+border = { fg = "#569CD6" }
+active = { bg = "#094771" }
+inactive = {}
+# Icons
+icon_file = ""
+icon_folder = ""
+icon_command = ""
+
+[tasks]
+border = { fg = "#569CD6" }
+title = {}
+hovered = { underline = true }
+
+[which]
+mask = { bg = "#1E1E1E" }
+cand = { fg = "#569CD6" }
+rest = { fg = "#808080" }
+desc = { fg = "#CE9178" }
+separator = " "
+separator_style = { fg = "#808080" }
+
+[help]
+on = { fg = "#569CD6" }
+run = { fg = "#CE9178" }
+desc = { fg = "#D4D4D4" }
+hovered = { bg = "#3A3D41", bold = true }
+footer = { fg = "#D4D4D4", bg = "#252526" }
+
+[filetype]
+rules = [
+ # Images
+ { mime = "image/*", fg = "#CE9178" },
+ # Videos
+ { mime = "video/*", fg = "#CE9178" },
+ # Audio
+ { mime = "audio/*", fg = "#CE9178" },
+ # Archives
+ { mime = "application/zip", fg = "#F44747" },
+ { mime = "application/gzip", fg = "#F44747" },
+ { mime = "application/x-tar", fg = "#F44747" },
+ { mime = "application/x-bzip", fg = "#F44747" },
+ { mime = "application/x-bzip2", fg = "#F44747" },
+ { mime = "application/x-7z-compressed", fg = "#F44747" },
+ { mime = "application/x-rar", fg = "#F44747" },
+ # Documents
+ { mime = "application/pdf", fg = "#569CD6" },
+ { mime = "application/msword", fg = "#569CD6" },
+ { mime = "application/vnd.openxmlformats-officedocument.*", fg = "#569CD6" },
+ # Fallback
+ { name = "*", fg = "#D4D4D4" },
+ { name = "*/", fg = "#569CD6" },
+ # Executable
+ { name = "*", category = "executable", fg = "#0DBC79", bg = "#1E1E1E" },
+ # Directories
+ { name = "*/", fg = "#2472C8", bg = "#1E1E1E" },
+ # Hidden files
+ { name = ".*", fg = "#666666" },
+ # Symlinks
+ { name = "*", category = "link", fg = "#0DBC79", bg = "#1E1E1E" },
+ # Broken symlinks
+ { name = "*", category = "broken", fg = "#CD3131", bg = "#3A1212" },
+]
+
+[icon]
+rules = [
+ { name = "Desktop", text = "" },
+ { name = "Documents", text = "" },
+ { name = "Downloads", text = "" },
+ { name = "Pictures", text = "" },
+ { name = "Music", text = "" },
+ { name = "Videos", text = "" },
+ { name = ".git", text = "" },
+ { name = ".config", text = "" },
+]
diff --git a/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/1.png b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/1.png
new file mode 100644
index 0000000..c01a73d
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/1.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/2.png b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/2.png
new file mode 100644
index 0000000..ba6c83f
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/2.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/3.png b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/3.png
new file mode 100644
index 0000000..1eda310
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/3.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/4.png b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/4.png
new file mode 100644
index 0000000..2a49b37
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/4.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/preview.png b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/preview.png
new file mode 100644
index 0000000..305c43e
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/img/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/preview.png b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/preview.png
new file mode 100644
index 0000000..305c43e
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/tmtheme.xml
new file mode 100644
index 0000000..7728843
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-dark-plus.yazi/tmtheme.xml
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>name</key>
+ <string>VSCode Dark (Visual Studio)</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#1F1F1F</string>
+ <key>foreground</key>
+ <string>#D4D4D4</string>
+ <key>caret</key>
+ <string>#AEAFAD</string>
+ <key>invisibles</key>
+ <string>#6E7681</string>
+ <key>lineHighlight</key>
+ <string>#222222</string>
+ <key>selection</key>
+ <string>#264F78</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#6A9955</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#CE9178</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#B5CEA8</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-in constant</string>
+ <key>scope</key>
+ <string>constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#569CD6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-defined constant</string>
+ <key>scope</key>
+ <string>constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4FC1FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9CDCFE</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#C586C0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#569CD6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#569CD6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class name</string>
+ <key>scope</key>
+ <string>entity.name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4EC9B0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4EC9B0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function name</string>
+ <key>scope</key>
+ <string>entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#DCDCAA</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function argument</string>
+ <key>scope</key>
+ <string>variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9CDCFE</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag name</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#569CD6</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#9CDCFE</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library function</string>
+ <key>scope</key>
+ <string>support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#DCDCAA</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library constant</string>
+ <key>scope</key>
+ <string>support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4FC1FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library class/type</string>
+ <key>scope</key>
+ <string>support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#4EC9B0</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F44747</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#F44747</string>
+ </dict>
+ </dict>
+ </array>
+ <key>uuid</key>
+ <string>231D4441-F280-4D49-A647-E1FD7E84D1D8</string>
+</dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/vscode-light-modern.yazi/LICENSE b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/LICENSE
new file mode 100644
index 0000000..5436de3
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Alexander Bays
+
+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.
diff --git a/fedora/.config/yazi/flavors/vscode-light-modern.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..5436de3
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Alexander Bays
+
+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.
diff --git a/fedora/.config/yazi/flavors/vscode-light-modern.yazi/README.md b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/README.md
new file mode 100644
index 0000000..067aa25
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/README.md
@@ -0,0 +1,50 @@
+<div align="center">
+<img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+<h3>
+ VSCode Light Modern Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+<a>
+ This <a href="https://github.com/sxyazi/yazi">Yazi</a> flavor matches the <a href="https://code.visualstudio.com/">Visual Studio Code</a> default theme.
+</a>
+</div>
+
+## 👀 Preview
+
+<img src="./preview.png" width="600" />
+
+## 🎨 Installation
+
+### Yazi CLI
+
+```bash
+# v25.5.28+
+ya pkg add 956MB/vscode-light-modern
+
+# pre v25.5.28 (deprecated)
+ya pack -a 956MB/vscode-light-modern
+```
+
+### Manual
+
+```bash
+# Linux/macOS
+git clone https://github.com/956MB/vscode-light-modern.yazi.git ~/.config/yazi/flavors/vscode-light-modern.yazi
+
+# Windows
+git clone https://github.com/956MB/vscode-light-modern.yazi.git %AppData%\yazi\config\flavors\vscode-light-modern.yazi
+```
+
+## ⚙️ Usage
+
+Add the these lines to your `theme.toml` configuration file to use it:
+
+```toml
+[flavor]
+light = "vscode-light-modern"
+```
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/vscode-light-modern.yazi/flavor.toml b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/flavor.toml
new file mode 100644
index 0000000..21c8aa0
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/flavor.toml
@@ -0,0 +1,186 @@
+# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
+# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
+"$schema" = "https://yazi-rs.github.io/schemas/theme.json"
+
+# vscode-light-modern
+# https://github.com/956MB/vscode.yazi/blob/main/themes/vscode-light-modern/
+#
+# A theme inspired by Visual Studio Code's Light Modern theme.
+
+[colors]
+background = "#FFFFFF"
+foreground = "#3B3B3B"
+selection = "#ADD6FF"
+cursor = "#005FB8"
+black = "#000000"
+red = "#F85149"
+green = "#2EA043"
+yellow = "#D7BA7D"
+blue = "#005FB8"
+magenta = "#AF00DB"
+cyan = "#0598BC"
+white = "#FFFFFF"
+bright_black = "#6E7681"
+bright_red = "#F85149"
+bright_green = "#2EA043"
+bright_yellow = "#D7BA7D"
+bright_blue = "#005FB8"
+bright_magenta = "#AF00DB"
+bright_cyan = "#0598BC"
+bright_white = "#FFFFFF"
+
+[manager]
+cwd = { fg = "cyan" }
+# Hovered
+hovered = { fg = "#000000", bg = "#ADD6FF" }
+preview_hovered = { underline = true }
+# Find
+find_keyword = { fg = "#795E26", bold = true, italic = true, underline = true }
+find_position = { fg = "#AF00DB", bg = "#FFFFFF", bold = true, italic = true }
+# Marker
+marker_copied = { fg = "#2EA043", bg = "#2EA043" }
+marker_cut = { fg = "#F85149", bg = "#F85149" }
+marker_marked = { fg = "#0598BC", bg = "#0598BC" }
+marker_selected = { fg = "#D7BA7D", bg = "#D7BA7D" }
+# Tab
+tab_active = { fg = "#3B3B3B", bg = "#FFFFFF" }
+tab_inactive = { fg = "#3B3B3B", bg = "#F8F8F8" }
+tab_width = 1
+# Count
+count_copied = { fg = "#FFFFFF", bg = "#2EA043" }
+count_cut = { fg = "#FFFFFF", bg = "#F85149" }
+count_selected = { fg = "#FFFFFF", bg = "#D7BA7D" }
+# Border
+border_symbol = "│"
+border_style = { fg = "#E5E5E5" }
+# Highlighting
+syntect_theme = "./tmtheme.xml"
+# Cursor
+cursor_symbol = "█"
+cursor = { fg = "#FFFFFF", bg = "#005FB8" }
+# Executable
+exe_symbol = ""
+exe = { fg = "#2EA043", bg = "#FFFFFF" }
+# Regular
+file_symbol = ""
+file = { }
+# Directory
+folder_symbol = ""
+folder = { fg = "#005FB8", bg = "#FFFFFF" }
+# Hidden
+hidden_symbol = ""
+hidden = { fg = "#6E7681" }
+# Link
+link_symbol = ""
+link = { fg = "#0598BC", bg = "#FFFFFF" }
+# Link (broken)
+broken_symbol = ""
+broken = { fg = "#F85149", bg = "#FFF0F0" }
+# Selected
+selected = { fg = "#000000", bg = "#ADD6FF" }
+
+[status]
+separator_open = ""
+separator_close = ""
+separator_style = { fg = "#E5E5E5", bg = "#E5E5E5" }
+# Mode
+mode_normal = { fg = "#FFFFFF", bg = "#005FB8", bold = true }
+mode_select = { fg = "#FFFFFF", bg = "#FFAF00", bold = true }
+mode_unset = { fg = "#FFFFFF", bg = "#F85149", bold = true }
+# Progress
+progress_label = { bold = true }
+progress_normal = { fg = "#005FB8", bg = "#FFFFFF" }
+progress_error = { fg = "#F85149", bg = "#FFFFFF" }
+# Permissions
+permissions_t = { fg = "#2EA043" }
+permissions_r = { fg = "#D7BA7D" }
+permissions_w = { fg = "#F85149" }
+permissions_x = { fg = "#0598BC" }
+permissions_s = { fg = "#6E7681" }
+
+[select]
+border = { fg = "#005FB8" }
+active = { fg = "#AF00DB", bold = true }
+inactive = {}
+
+[input]
+border = { fg = "#005FB8" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+[completion]
+border = { fg = "#005FB8" }
+active = { bg = "#ADD6FF" }
+inactive = {}
+# Icons
+icon_file = ""
+icon_folder = ""
+icon_command = ""
+
+[tasks]
+border = { fg = "#005FB8" }
+title = {}
+hovered = { underline = true }
+
+[which]
+mask = { bg = "#FFFFFF" }
+cand = { fg = "#0598BC" }
+rest = { fg = "#6E7681" }
+desc = { fg = "#AF00DB" }
+separator = " "
+separator_style = { fg = "#6E7681" }
+
+[help]
+on = { fg = "#0598BC" }
+run = { fg = "#AF00DB" }
+desc = { fg = "#3B3B3B" }
+hovered = { bg = "#ADD6FF", bold = true }
+footer = { fg = "#3B3B3B", bg = "#F8F8F8" }
+
+[filetype]
+rules = [
+ # Images
+ { mime = "image/*", fg = "#D7BA7D" },
+ # Videos
+ { mime = "video/*", fg = "#AF00DB" },
+ # Audio
+ { mime = "audio/*", fg = "#AF00DB" },
+ # Archives
+ { mime = "application/zip", fg = "#F85149" },
+ { mime = "application/gzip", fg = "#F85149" },
+ { mime = "application/x-tar", fg = "#F85149" },
+ { mime = "application/x-bzip", fg = "#F85149" },
+ { mime = "application/x-bzip2", fg = "#F85149" },
+ { mime = "application/x-7z-compressed", fg = "#F85149" },
+ { mime = "application/x-rar", fg = "#F85149" },
+ # Documents
+ { mime = "application/pdf", fg = "#0598BC" },
+ { mime = "application/msword", fg = "#0598BC" },
+ { mime = "application/vnd.openxmlformats-officedocument.*", fg = "#0598BC" },
+ # Fallback
+ { name = "*", fg = "#3B3B3B" },
+ { name = "*/", fg = "#005FB8" },
+ # Executable
+ { name = "*", category = "executable", fg = "#2EA043", bg = "#FFFFFF" },
+ # Directories
+ { name = "*/", fg = "#005FB8", bg = "#FFFFFF" },
+ # Hidden files
+ { name = ".*", fg = "#6E7681" },
+ # Symlinks
+ { name = "*", category = "link", fg = "#0598BC", bg = "#FFFFFF" },
+ # Broken symlinks
+ { name = "*", category = "broken", fg = "#F85149", bg = "#FFF0F0" },
+]
+
+[icon]
+rules = [
+ { name = "Desktop", text = "" },
+ { name = "Documents", text = "" },
+ { name = "Downloads", text = "" },
+ { name = "Pictures", text = "" },
+ { name = "Music", text = "" },
+ { name = "Videos", text = "" },
+ { name = ".git", text = "" },
+ { name = ".config", text = "" },
+]
diff --git a/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/1.png b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/1.png
new file mode 100644
index 0000000..6343c68
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/1.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/2.png b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/2.png
new file mode 100644
index 0000000..9e726b9
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/2.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/3.png b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/3.png
new file mode 100644
index 0000000..5124fd4
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/3.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/4.png b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/4.png
new file mode 100644
index 0000000..6dc5d51
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/4.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/preview.png b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/preview.png
new file mode 100644
index 0000000..13b9122
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/img/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-light-modern.yazi/preview.png b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/preview.png
new file mode 100644
index 0000000..13b9122
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-light-modern.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/tmtheme.xml
new file mode 100644
index 0000000..5aa76f8
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-modern.yazi/tmtheme.xml
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>name</key>
+ <string>VSCode Light Modern</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#FFFFFF</string>
+ <key>foreground</key>
+ <string>#000000</string>
+ <key>caret</key>
+ <string>#000000</string>
+ <key>invisibles</key>
+ <string>#D3D3D3</string>
+ <key>lineHighlight</key>
+ <string>#E5EBF1</string>
+ <key>selection</key>
+ <string>#ADD6FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#008000</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#A31515</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#098658</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-in constant</string>
+ <key>scope</key>
+ <string>constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0000FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-defined constant</string>
+ <key>scope</key>
+ <string>constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0000FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#795E26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#AF00DB</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0000FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0000FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class name</string>
+ <key>scope</key>
+ <string>entity.name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#267F99</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#267F99</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function name</string>
+ <key>scope</key>
+ <string>entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#795E26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function argument</string>
+ <key>scope</key>
+ <string>variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#001080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag name</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#800000</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E50000</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library function</string>
+ <key>scope</key>
+ <string>support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#795E26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library constant</string>
+ <key>scope</key>
+ <string>support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0000FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library class/type</string>
+ <key>scope</key>
+ <string>support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#267F99</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#CD3131</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#CD3131</string>
+ </dict>
+ </dict>
+ </array>
+ <key>uuid</key>
+ <string>231D4441-F280-4D49-A647-E1FD7E84D1D8</string>
+ </dict>
+</plist>
diff --git a/fedora/.config/yazi/flavors/vscode-light-plus.yazi/LICENSE b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/LICENSE
new file mode 100644
index 0000000..5436de3
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Alexander Bays
+
+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.
diff --git a/fedora/.config/yazi/flavors/vscode-light-plus.yazi/LICENSE-tmtheme b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..5436de3
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/LICENSE-tmtheme
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Alexander Bays
+
+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.
diff --git a/fedora/.config/yazi/flavors/vscode-light-plus.yazi/README.md b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/README.md
new file mode 100644
index 0000000..e491da6
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/README.md
@@ -0,0 +1,50 @@
+<div align="center">
+<img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="Yazi logo" width="20%">
+<h3>
+ VSCode Light Plus Flavor for <a href="https://github.com/sxyazi/yazi">Yazi</a>
+</h3>
+<a>
+ This <a href="https://github.com/sxyazi/yazi">Yazi</a> flavor matches the <a href="https://code.visualstudio.com/">Visual Studio Code</a> default theme.
+</a>
+</div>
+
+## 👀 Preview
+
+<img src="./preview.png" width="600" />
+
+## 🎨 Installation
+
+### Yazi CLI
+
+```bash
+# v25.5.28+
+ya pkg add 956MB/vscode-light-plus
+
+# pre v25.5.28 (deprecated)
+ya pack -a 956MB/vscode-light-plus
+```
+
+### Manual
+
+```bash
+# Linux/macOS
+git clone https://github.com/956MB/vscode-light-plus.yazi.git ~/.config/yazi/flavors/vscode-light-plus.yazi
+
+# Windows
+git clone https://github.com/956MB/vscode-light-plus.yazi.git %AppData%\yazi\config\flavors\vscode-light-plus.yazi
+```
+
+## ⚙️ Usage
+
+Add the these lines to your `theme.toml` configuration file to use it:
+
+```toml
+[flavor]
+light = "vscode-light-plus"
+```
+
+## 📜 License
+
+The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed.
+
+Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details.
diff --git a/fedora/.config/yazi/flavors/vscode-light-plus.yazi/flavor.toml b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/flavor.toml
new file mode 100644
index 0000000..133c35d
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/flavor.toml
@@ -0,0 +1,186 @@
+# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
+# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
+"$schema" = "https://yazi-rs.github.io/schemas/theme.json"
+
+# vscode-light-plus (Light+)
+# https://github.com/956MB/vscode.yazi/blob/main/themes/vscode-light-plus/
+#
+# A theme inspired by Visual Studio Code's Light+ theme.
+
+[colors]
+background = "#FFFFFF"
+foreground = "#000000"
+selection = "#ADD6FF"
+cursor = "#000000"
+black = "#000000"
+red = "#CD3131"
+green = "#008000"
+yellow = "#949800"
+blue = "#0000FF"
+magenta = "#AF00DB"
+cyan = "#0598BC"
+white = "#FFFFFF"
+bright_black = "#767676"
+bright_red = "#CD3131"
+bright_green = "#008000"
+bright_yellow = "#949800"
+bright_blue = "#0000FF"
+bright_magenta = "#AF00DB"
+bright_cyan = "#0598BC"
+bright_white = "#FFFFFF"
+
+[manager]
+cwd = { fg = "cyan" }
+# Hovered
+hovered = { fg = "#000000", bg = "#ADD6FF" }
+preview_hovered = { underline = true }
+# Find
+find_keyword = { fg = "#795E26", bold = true, italic = true, underline = true }
+find_position = { fg = "#AF00DB", bg = "#FFFFFF", bold = true, italic = true }
+# Marker
+marker_copied = { fg = "#008000", bg = "#008000" }
+marker_cut = { fg = "#CD3131", bg = "#CD3131" }
+marker_marked = { fg = "#0598BC", bg = "#0598BC" }
+marker_selected = { fg = "#949800", bg = "#949800" }
+# Tab
+tab_active = { fg = "#000000", bg = "#FFFFFF" }
+tab_inactive = { fg = "#000000", bg = "#F3F3F3" }
+tab_width = 1
+# Count
+count_copied = { fg = "#FFFFFF", bg = "#008000" }
+count_cut = { fg = "#FFFFFF", bg = "#CD3131" }
+count_selected = { fg = "#FFFFFF", bg = "#949800" }
+# Border
+border_symbol = "│"
+border_style = { fg = "#D4D4D4" }
+# Highlighting
+syntect_theme = "./tmtheme.xml"
+# Cursor
+cursor_symbol = "█"
+cursor = { fg = "#FFFFFF", bg = "#000000" }
+# Executable
+exe_symbol = ""
+exe = { fg = "#008000", bg = "#FFFFFF" }
+# Regular
+file_symbol = ""
+file = { }
+# Directory
+folder_symbol = ""
+folder = { fg = "#0000FF", bg = "#FFFFFF" }
+# Hidden
+hidden_symbol = ""
+hidden = { fg = "#767676" }
+# Link
+link_symbol = ""
+link = { fg = "#0598BC", bg = "#FFFFFF" }
+# Link (broken)
+broken_symbol = ""
+broken = { fg = "#CD3131", bg = "#FFF0F0" }
+# Selected
+selected = { fg = "#000000", bg = "#ADD6FF" }
+
+[status]
+separator_open = ""
+separator_close = ""
+separator_style = { fg = "#D4D4D4", bg = "#D4D4D4" }
+# Mode
+mode_normal = { fg = "#FFFFFF", bg = "#0000FF", bold = true }
+mode_select = { fg = "#FFFFFF", bg = "#FFAF00", bold = true }
+mode_unset = { fg = "#FFFFFF", bg = "#CD3131", bold = true }
+# Progress
+progress_label = { bold = true }
+progress_normal = { fg = "#0000FF", bg = "#FFFFFF" }
+progress_error = { fg = "#CD3131", bg = "#FFFFFF" }
+# Permissions
+permissions_t = { fg = "#008000" }
+permissions_r = { fg = "#949800" }
+permissions_w = { fg = "#CD3131" }
+permissions_x = { fg = "#0598BC" }
+permissions_s = { fg = "#767676" }
+
+[select]
+border = { fg = "#0000FF" }
+active = { fg = "#AF00DB", bold = true }
+inactive = {}
+
+[input]
+border = { fg = "#0000FF" }
+title = {}
+value = {}
+selected = { reversed = true }
+
+[completion]
+border = { fg = "#0000FF" }
+active = { bg = "#ADD6FF" }
+inactive = {}
+# Icons
+icon_file = ""
+icon_folder = ""
+icon_command = ""
+
+[tasks]
+border = { fg = "#0000FF" }
+title = {}
+hovered = { underline = true }
+
+[which]
+mask = { bg = "#FFFFFF" }
+cand = { fg = "#0598BC" }
+rest = { fg = "#767676" }
+desc = { fg = "#AF00DB" }
+separator = " "
+separator_style = { fg = "#767676" }
+
+[help]
+on = { fg = "#0598BC" }
+run = { fg = "#AF00DB" }
+desc = { fg = "#000000" }
+hovered = { bg = "#ADD6FF", bold = true }
+footer = { fg = "#000000", bg = "#F3F3F3" }
+
+[filetype]
+rules = [
+ # Images
+ { mime = "image/*", fg = "#949800" },
+ # Videos
+ { mime = "video/*", fg = "#AF00DB" },
+ # Audio
+ { mime = "audio/*", fg = "#AF00DB" },
+ # Archives
+ { mime = "application/zip", fg = "#CD3131" },
+ { mime = "application/gzip", fg = "#CD3131" },
+ { mime = "application/x-tar", fg = "#CD3131" },
+ { mime = "application/x-bzip", fg = "#CD3131" },
+ { mime = "application/x-bzip2", fg = "#CD3131" },
+ { mime = "application/x-7z-compressed", fg = "#CD3131" },
+ { mime = "application/x-rar", fg = "#CD3131" },
+ # Documents
+ { mime = "application/pdf", fg = "#0598BC" },
+ { mime = "application/msword", fg = "#0598BC" },
+ { mime = "application/vnd.openxmlformats-officedocument.*", fg = "#0598BC" },
+ # Fallback
+ { name = "*", fg = "#000000" },
+ { name = "*/", fg = "#0000FF" },
+ # Executable
+ { name = "*", category = "executable", fg = "#008000", bg = "#FFFFFF" },
+ # Directories
+ { name = "*/", fg = "#0000FF", bg = "#FFFFFF" },
+ # Hidden files
+ { name = ".*", fg = "#767676" },
+ # Symlinks
+ { name = "*", category = "link", fg = "#0598BC", bg = "#FFFFFF" },
+ # Broken symlinks
+ { name = "*", category = "broken", fg = "#CD3131", bg = "#FFF0F0" },
+]
+
+[icon]
+rules = [
+ { name = "Desktop", text = "" },
+ { name = "Documents", text = "" },
+ { name = "Downloads", text = "" },
+ { name = "Pictures", text = "" },
+ { name = "Music", text = "" },
+ { name = "Videos", text = "" },
+ { name = ".git", text = "" },
+ { name = ".config", text = "" },
+]
diff --git a/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/1.png b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/1.png
new file mode 100644
index 0000000..c749e04
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/1.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/2.png b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/2.png
new file mode 100644
index 0000000..818ec57
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/2.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/3.png b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/3.png
new file mode 100644
index 0000000..b146126
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/3.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/4.png b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/4.png
new file mode 100644
index 0000000..5dde089
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/4.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/preview.png b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/preview.png
new file mode 100644
index 0000000..8000111
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/img/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-light-plus.yazi/preview.png b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/preview.png
new file mode 100644
index 0000000..8000111
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/preview.png
Binary files differ
diff --git a/fedora/.config/yazi/flavors/vscode-light-plus.yazi/tmtheme.xml b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/tmtheme.xml
new file mode 100644
index 0000000..8e2420d
--- /dev/null
+++ b/fedora/.config/yazi/flavors/vscode-light-plus.yazi/tmtheme.xml
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>name</key>
+ <string>VSCode Light+</string>
+ <key>settings</key>
+ <array>
+ <dict>
+ <key>settings</key>
+ <dict>
+ <key>background</key>
+ <string>#FFFFFF</string>
+ <key>foreground</key>
+ <string>#000000</string>
+ <key>caret</key>
+ <string>#000000</string>
+ <key>invisibles</key>
+ <string>#D3D3D3</string>
+ <key>lineHighlight</key>
+ <string>#E5EBF1</string>
+ <key>selection</key>
+ <string>#ADD6FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Comment</string>
+ <key>scope</key>
+ <string>comment</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#008000</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>String</string>
+ <key>scope</key>
+ <string>string</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#A31515</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Number</string>
+ <key>scope</key>
+ <string>constant.numeric</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#098658</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Built-in constant</string>
+ <key>scope</key>
+ <string>constant.language</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0000FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>User-defined constant</string>
+ <key>scope</key>
+ <string>constant.character, constant.other</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0000FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Variable</string>
+ <key>scope</key>
+ <string>variable</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#795E26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Keyword</string>
+ <key>scope</key>
+ <string>keyword</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#AF00DB</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage</string>
+ <key>scope</key>
+ <string>storage</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0000FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Storage type</string>
+ <key>scope</key>
+ <string>storage.type</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0000FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Class name</string>
+ <key>scope</key>
+ <string>entity.name.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#267F99</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Inherited class</string>
+ <key>scope</key>
+ <string>entity.other.inherited-class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#267F99</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function name</string>
+ <key>scope</key>
+ <string>entity.name.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#795E26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Function argument</string>
+ <key>scope</key>
+ <string>variable.parameter</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#001080</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag name</string>
+ <key>scope</key>
+ <string>entity.name.tag</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#800000</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Tag attribute</string>
+ <key>scope</key>
+ <string>entity.other.attribute-name</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#E50000</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library function</string>
+ <key>scope</key>
+ <string>support.function</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#795E26</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library constant</string>
+ <key>scope</key>
+ <string>support.constant</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#0000FF</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Library class/type</string>
+ <key>scope</key>
+ <string>support.type, support.class</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#267F99</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid</string>
+ <key>scope</key>
+ <string>invalid</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#CD3131</string>
+ </dict>
+ </dict>
+ <dict>
+ <key>name</key>
+ <string>Invalid deprecated</string>
+ <key>scope</key>
+ <string>invalid.deprecated</string>
+ <key>settings</key>
+ <dict>
+ <key>foreground</key>
+ <string>#CD3131</string>
+ </dict>
+ </dict>
+ </array>
+ <key>uuid</key>
+ <string>231D4441-F280-4D49-A647-E1FD7E84D1D8</string>
+ </dict>
+</plist>
diff --git a/fedora/.config/yazi/init.lua b/fedora/.config/yazi/init.lua
new file mode 100644
index 0000000..6c7ee4f
--- /dev/null
+++ b/fedora/.config/yazi/init.lua
@@ -0,0 +1,72 @@
+Status:children_add(function(self)
+ local h = self._current.hovered
+ if h and h.link_to then
+ return " -> " .. tostring(h.link_to)
+ else
+ return ""
+ end
+end, 3300, Status.LEFT)
+
+Status:children_add(function()
+ local h = cx.active.current.hovered
+ if not h or ya.target_family() ~= "unix" then
+ return ""
+ end
+
+ return ui.Line({
+ ui.Span(ya.user_name(h.cha.uid) or tostring(h.cha.uid)):fg("magenta"),
+ ":",
+ ui.Span(ya.group_name(h.cha.gid) or tostring(h.cha.gid)):fg("magenta"),
+ " ",
+ })
+end, 500, Status.RIGHT)
+
+Header:children_add(function()
+ if ya.target_family() ~= "unix" then
+ return ""
+ end
+ return ui.Span(ya.user_name() .. "@" .. ya.host_name() .. ":"):fg("blue")
+end, 500, Header.LEFT)
+
+if os.getenv("NVIM") then
+ require("toggle-pane"):entry("min-preview")
+end
+
+require("smart-enter"):setup({
+ open_multi = true,
+})
+
+require("full-border"):setup({
+ type = ui.Border.PLAIN, -- or ui.Border.ROUNDED
+})
+
+th.git = th.git or {}
+th.git.modified_sign = "M"
+th.git.deleted_sign = "D"
+th.git.added_sign = "A"
+th.git.untracked_sign = "?"
+th.git.ignored_sign = "X"
+th.git.updated_sign = "U"
+
+require("git"):setup()
+
+require("mactag"):setup({
+ keys = {
+ r = "Red",
+ o = "Orange",
+ y = "Yellow",
+ g = "Green",
+ b = "Blue",
+ p = "Purple",
+ },
+ colors = {
+ Red = "#ee7b70",
+ Orange = "#f5bd5c",
+ Yellow = "#fbe764",
+ Green = "#91fc87",
+ Blue = "#5fa3f8",
+ Purple = "#cb88f8",
+ },
+})
+
+require("folder-rules"):setup()
diff --git a/fedora/.config/yazi/keymap-default.toml b/fedora/.config/yazi/keymap-default.toml
new file mode 100644
index 0000000..6b7acad
--- /dev/null
+++ b/fedora/.config/yazi/keymap-default.toml
@@ -0,0 +1,490 @@
+# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
+# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
+"$schema" = "https://yazi-rs.github.io/schemas/keymap.json"
+
+[mgr]
+
+keymap = [
+ { on = "<Esc>", run = "escape", desc = "Exit visual mode, clear selection, or cancel search" },
+ { on = "<C-[>", run = "escape", desc = "Exit visual mode, clear selection, or cancel search" },
+ { on = "q", run = "quit", desc = "Quit the process" },
+ { on = "Q", run = "quit --no-cwd-file", desc = "Quit without outputting cwd-file" },
+ { on = "<C-c>", run = "close", desc = "Close the current tab, or quit if it's last" },
+ { on = "<C-z>", run = "suspend", desc = "Suspend the process" },
+
+ # Hopping
+ { on = "k", run = "arrow prev", desc = "Previous file" },
+ { on = "j", run = "arrow next", desc = "Next file" },
+
+ { on = "<Up>", run = "arrow prev", desc = "Previous file" },
+ { on = "<Down>", run = "arrow next", desc = "Next file" },
+
+ { on = "<C-u>", run = "arrow -50%", desc = "Move cursor up half page" },
+ { on = "<C-d>", run = "arrow 50%", desc = "Move cursor down half page" },
+ # { on = "<C-b>", run = "arrow -100%", desc = "Move cursor up one page" },
+ # { on = "<C-f>", run = "arrow 100%", desc = "Move cursor down one page" },
+
+ { on = "<S-PageUp>", run = "arrow -50%", desc = "Move cursor up half page" },
+ { on = "<S-PageDown>", run = "arrow 50%", desc = "Move cursor down half page" },
+ { on = "<PageUp>", run = "arrow -100%", desc = "Move cursor up one page" },
+ { on = "<PageDown>", run = "arrow 100%", desc = "Move cursor down one page" },
+
+ { on = [ "g", "g" ], run = "arrow top", desc = "Go to top" },
+ { on = "G", run = "arrow bot", desc = "Go to bottom" },
+
+ # Navigation
+ { on = "h", run = "leave", desc = "Back to the parent directory" },
+ { on = "l", run = "enter", desc = "Enter the child directory" },
+
+ { on = "<Left>", run = "leave", desc = "Back to the parent directory" },
+ { on = "<Right>", run = "enter", desc = "Enter the child directory" },
+
+ { on = "H", run = "back", desc = "Back to previous directory" },
+ { on = "L", run = "forward", desc = "Forward to next directory" },
+
+ # Toggle
+ { on = "<Space>", run = [ "toggle", "arrow next" ], desc = "Toggle the current selection state" },
+ { on = "<C-a>", run = "toggle_all --state=on", desc = "Select all files" },
+ { on = "<C-r>", run = "toggle_all", desc = "Invert selection of all files" },
+
+ # Visual mode
+ { on = "<C-v>", run = "visual_mode", desc = "Enter visual mode (selection mode)" },
+ { on = "V", run = "visual_mode --unset", desc = "Enter visual mode (unset mode)" },
+
+ # Seeking
+ { on = "<C-k>", run = "seek -5", desc = "Seek up 5 units in the preview" },
+ { on = "<C-j>", run = "seek 5", desc = "Seek down 5 units in the preview" },
+
+ # Spotting
+ { on = "<Tab>", run = "spot", desc = "Spot hovered file" },
+
+ # Operation
+ { on = "e", run = "open", desc = "Open selected files" },
+ { on = "E", run = "open --interactive", desc = "Open selected files interactively" },
+ { on = "o", run = "open", desc = "Open selected files" },
+ { on = "O", run = "open --interactive", desc = "Open selected files interactively" },
+ { on = "<Enter>", run = "open", desc = "Open selected files" },
+ { on = "<S-Enter>", run = "open --interactive", desc = "Open selected files interactively" },
+ { on = [ "y", "y" ],run = "yank", desc = "Yank selected files (copy)" },
+ { on = "x", run = "yank --cut", desc = "Yank selected files (cut)" },
+ { on = [ "p", "p" ],run = "paste", desc = "Paste yanked files" },
+ { on = [ "P", "P" ],run = "paste --force", desc = "Paste yanked files (overwrite if the destination exists)" },
+ { on = "-", run = "link", desc = "Symlink the absolute path of yanked files" },
+ { on = "_", run = "link --relative", desc = "Symlink the relative path of yanked files" },
+ { on = "<C-->", run = "hardlink", desc = "Hardlink yanked files" },
+ { on = "Y", run = "unyank", desc = "Cancel the yank status" },
+ { on = "X", run = "unyank", desc = "Cancel the yank status" },
+ { on = "d", run = "remove", desc = "Trash selected files" },
+ { on = "D", run = "remove --permanently", desc = "Permanently delete selected files" },
+ { on = ["M", "f"], run = "create", desc = "Create a file (ends with / for directories)" },
+ { on = ["M", "d"], run = "create --dir", desc = "Create directories" },
+ { on = ["M", "o"], run = "create --force", desc = "Create/overwrite a file" },
+ { on = "i", run = "rename --cursor=before_ext", desc = "Rename selected file(s) with cursor before extension" },
+ { on = "I", run = "rename --cursor=start", desc = "Rename selected file(s) with cursor at start" },
+ { on = "<C-w>", run = "rename --empty=ext", desc = "Rename selected file(s) extension only" },
+ { on = "a", run = "rename --empty=dot_ext", desc = "Rename selected file(s) dot extension only" },
+ { on = "A", run = "rename --cursor=end", desc = "Rename selected file(s) with cursor at end" },
+ { on = "r", run = "rename --cursor=start --empty=stem", desc = "Rename selected file(s) stem only" },
+ { on = "R", run = "rename --empty=all", desc = "Rename selected file(s) full name" },
+ { on = "B", run = [ "escape --select", "toggle_all", "rename", "escape --select --search" ], desc = "Bulk reanme files/folders in cwd" },
+ { on = ";", run = "shell --interactive", desc = "Run a shell command" },
+ { on = ":", run = "shell --block --interactive", desc = "Run a shell command (block until finishes)" },
+ { on = ".", run = "hidden toggle", desc = "Toggle the visibility of hidden files" },
+ { on = [ "s", "f" ],run = "search --via=fd", desc = "Search files by name via fd" },
+ { on = [ "S", "f" ],run = "search --via=rg", desc = "Search files by content via ripgrep" },
+ { on = "<C-s>", run = "escape --search", desc = "Cancel the ongoing search" },
+ { on = "z", run = "plugin fzf", desc = "Jump to a file/directory via fzf" },
+ { on = "Z", run = "plugin zoxide", desc = "Jump to a directory via zoxide" },
+
+ # Linemode
+ { on = [ "m", "s" ], run = "linemode size", desc = "Linemode: size" },
+ { on = [ "m", "p" ], run = "linemode permissions", desc = "Linemode: permissions" },
+ { on = [ "m", "b" ], run = "linemode btime", desc = "Linemode: btime" },
+ { on = [ "m", "m" ], run = "linemode mtime", desc = "Linemode: mtime" },
+ { on = [ "m", "o" ], run = "linemode owner", desc = "Linemode: owner" },
+ { on = [ "m", "n" ], run = "linemode none", desc = "Linemode: none" },
+
+ # Copy
+ { on = [ "y", "p" ], run = "copy path", desc = "Copy the file path" },
+ { on = [ "y", "d" ], run = "copy dirname", desc = "Copy the directory path" },
+ { on = [ "y", "f" ], run = "copy filename", desc = "Copy the filename" },
+ { on = [ "y", "n" ], run = "copy name_without_ext", desc = "Copy the filename without extension" },
+
+ # Filter
+ { on = "f", run = "filter --smart", desc = "Filter files" },
+
+ # Find
+ { on = "/", run = "find --smart", desc = "Find next file" },
+ { on = "?", run = "find --previous --smart", desc = "Find previous file" },
+ { on = "n", run = "find_arrow", desc = "Next found" },
+ { on = "N", run = "find_arrow --previous", desc = "Previous found" },
+
+ # Sorting
+ { on = [ ",", "m" ], run = [ "sort mtime --reverse=no", "linemode mtime" ], desc = "Sort by modified time" },
+ { on = [ ",", "M" ], run = [ "sort mtime --reverse", "linemode mtime" ], desc = "Sort by modified time (reverse)" },
+ { on = [ ",", "b" ], run = [ "sort btime --reverse=no", "linemode btime" ], desc = "Sort by birth time" },
+ { on = [ ",", "B" ], run = [ "sort btime --reverse", "linemode btime" ], desc = "Sort by birth time (reverse)" },
+ { on = [ ",", "e" ], run = "sort extension --reverse=no", desc = "Sort by extension" },
+ { on = [ ",", "E" ], run = "sort extension --reverse", desc = "Sort by extension (reverse)" },
+ { on = [ ",", "a" ], run = "sort alphabetical --reverse=no", desc = "Sort alphabetically" },
+ { on = [ ",", "A" ], run = "sort alphabetical --reverse", desc = "Sort alphabetically (reverse)" },
+ { on = [ ",", "n" ], run = "sort natural --reverse=no", desc = "Sort naturally" },
+ { on = [ ",", "N" ], run = "sort natural --reverse", desc = "Sort naturally (reverse)" },
+ { on = [ ",", "s" ], run = [ "sort size --reverse=no", "linemode size" ], desc = "Sort by size" },
+ { on = [ ",", "S" ], run = [ "sort size --reverse", "linemode size" ], desc = "Sort by size (reverse)" },
+ { on = [ ",", "r" ], run = "sort random --reverse=no", desc = "Sort randomly" },
+
+ # Goto
+ { on = [ "g", "h" ], run = "cd ~", desc = "Go home" },
+ # { on = [ "g", "c" ], run = "cd ~/.config", desc = "Go ~/.config" },
+ # { on = [ "g", "d" ], run = "cd ~/Downloads", desc = "Go ~/Downloads" },
+ { on = [ "g", "<Space>" ], run = "cd --interactive", desc = "Jump interactively" },
+ { on = [ "g", "l" ], run = "follow", desc = "Follow hovered symlink" },
+
+ # Tabs
+ { on = "<C-t>", run = "tab_create --current", desc = "Create a new tab with CWD" },
+
+ { on = "1", run = "tab_switch 0", desc = "Switch to first tab" },
+ { on = "2", run = "tab_switch 1", desc = "Switch to second tab" },
+ { on = "3", run = "tab_switch 2", desc = "Switch to third tab" },
+ { on = "4", run = "tab_switch 3", desc = "Switch to fourth tab" },
+ { on = "5", run = "tab_switch 4", desc = "Switch to fifth tab" },
+ { on = "6", run = "tab_switch 5", desc = "Switch to sixth tab" },
+ { on = "7", run = "tab_switch 6", desc = "Switch to seventh tab" },
+ { on = "8", run = "tab_switch 7", desc = "Switch to eighth tab" },
+ { on = "9", run = "tab_switch 8", desc = "Switch to ninth tab" },
+
+ { on = "[", run = "tab_switch -1 --relative", desc = "Switch to previous tab" },
+ { on = "]", run = "tab_switch 1 --relative", desc = "Switch to next tab" },
+
+ { on = "{", run = "tab_swap -1", desc = "Swap current tab with previous tab" },
+ { on = "}", run = "tab_swap 1", desc = "Swap current tab with next tab" },
+
+ # Tasks
+ { on = [ "t", "a" ], run = "tasks:show", desc = "Show task manager" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "<F1>", run = "help", desc = "Open help" },
+]
+
+# Plugins
+[[mgr.prepend_keymap]]
+on = "T"
+run = "plugin toggle-pane min-preview"
+desc = "Show or hide the preview pane"
+
+[[mgr.prepend_keymap]]
+on = "T"
+run = "plugin toggle-pane max-preview"
+desc = "Maximize or restore the preview pane"
+
+[[mgr.prepend_keymap]]
+on = "l"
+run = "plugin smart-enter"
+desc = "Enter the child directory, or open the file"
+
+[[mgr.prepend_keymap]]
+on = [ "c", "h", "m" ]
+run = "plugin chmod"
+desc = "Chmod on selected files"
+
+[[mgr.prepend_keymap]]
+on = "<C-d>"
+run = "plugin diff"
+desc = "Diff the selected with the hovered file"
+
+[[mgr.prepend_keymap]]
+on = "<C-f>"
+run = "plugin jump-to-char"
+desc = "Jump to char"
+
+[[mgr.prepend_keymap]]
+on = [ "b", "a" ]
+run = "plugin mactag add"
+desc = "Tag selected files"
+
+[[mgr.prepend_keymap]]
+on = [ "b", "r" ]
+run = "plugin mactag remove"
+desc = "Untag selected files"
+
+[[mgr.prepend_keymap]]
+on = [ "M", "t" ]
+run = "plugin mount"
+desc = "Mount"
+
+[[mgr.prepend_keymap]]
+on = "F"
+run = "plugin smart-filter"
+desc = "Smart filter"
+
+[[mgr.prepend_keymap]]
+on = [ "p", "P" ]
+run = "plugin smart-paste"
+desc = "Paste into the hovered directory or CWD"
+
+[[mgr.prepend_keymap]]
+on = [ "s", "d" ]
+run = "plugin sudo-demo"
+
+[[mgr.prepend_keymap]]
+on = "+"
+run = "plugin zoom 1"
+desc = "Zoom in hovered file"
+
+[[mgr.prepend_keymap]]
+on = "-"
+run = "plugin zoom -1"
+desc = "Zoom out hovered file"
+
+[[mgr.prepend_keymap]]
+on = "K"
+run = "plugin parent-arrow -1"
+
+[[mgr.prepend_keymap]]
+on = "J"
+run = "plugin parent-arrow 1"
+
+[[mgr.prepend_keymap]]
+on = "<C-p>"
+run = 'shell -- qlmanage -p "$@"'
+
+[[mgr.prepend_keymap]]
+on = "<C-m>"
+run = 'shell --block -- neomutt -a "$@"'
+
+[[mgr.prepend_keymap]]
+on = [ "c", "p", "a" ]
+run = "plugin compress"
+desc = "Archive selected files"
+
+[[mgr.prepend_keymap]]
+on = [ "c", "p", "p" ]
+run = "plugin compress -p"
+desc = "Archive selected files (password)"
+
+[[mgr.prepend_keymap]]
+on = [ "c", "p", "h" ]
+run = "plugin compress -ph"
+desc = "Archive selected files (password+header)"
+
+[[mgr.prepend_keymap]]
+on = [ "c", "p", "l" ]
+run = "plugin compress -l"
+desc = "Archive selected files (compression level)"
+
+[[mgr.prepend_keymap]]
+on = [ "c", "p", "u" ]
+run = "plugin compress -phl"
+desc = "Archive selected files (password+header+level)"
+
+[tasks]
+
+keymap = [
+ { on = "<Esc>", run = "close", desc = "Close task manager" },
+ { on = "<C-[>", run = "close", desc = "Close task manager" },
+ { on = "<C-c>", run = "close", desc = "Close task manager" },
+ { on = [ "t", "a" ], run = "close", desc = "Close task manager" },
+
+ { on = "k", run = "arrow prev", desc = "Previous task" },
+ { on = "j", run = "arrow next", desc = "Next task" },
+
+ { on = "<Up>", run = "arrow prev", desc = "Previous task" },
+ { on = "<Down>", run = "arrow next", desc = "Next task" },
+
+ { on = "<Enter>", run = "inspect", desc = "Inspect the task" },
+ { on = "x", run = "cancel", desc = "Cancel the task" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "<F1>", run = "help", desc = "Open help" },
+]
+
+[spot]
+
+keymap = [
+ { on = "<Esc>", run = "close", desc = "Close the spot" },
+ { on = "<C-[>", run = "close", desc = "Close the spot" },
+ { on = "<C-c>", run = "close", desc = "Close the spot" },
+ { on = "<Tab>", run = "close", desc = "Close the spot" },
+
+ { on = "k", run = "arrow prev", desc = "Previous line" },
+ { on = "j", run = "arrow next", desc = "Next line" },
+ { on = "h", run = "swipe prev", desc = "Swipe to previous file" },
+ { on = "l", run = "swipe next", desc = "Swipe to next file" },
+
+ { on = "<Up>", run = "arrow prev", desc = "Previous line" },
+ { on = "<Down>", run = "arrow next", desc = "Next line" },
+ { on = "<Left>", run = "swipe prev", desc = "Swipe to previous file" },
+ { on = "<Right>", run = "swipe next", desc = "Swipe to next file" },
+
+ # Copy
+ { on = [ "c", "c" ], run = "copy cell", desc = "Copy selected cell" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "<F1>", run = "help", desc = "Open help" },
+]
+
+[pick]
+
+keymap = [
+ { on = "<Esc>", run = "close", desc = "Cancel pick" },
+ { on = "<C-[>", run = "close", desc = "Cancel pick" },
+ { on = "<C-c>", run = "close", desc = "Cancel pick" },
+ { on = "<Enter>", run = "close --submit", desc = "Submit the pick" },
+
+ { on = "k", run = "arrow prev", desc = "Previous option" },
+ { on = "j", run = "arrow next", desc = "Next option" },
+
+ { on = "<Up>", run = "arrow prev", desc = "Previous option" },
+ { on = "<Down>", run = "arrow next", desc = "Next option" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "<F1>", run = "help", desc = "Open help" },
+]
+
+[input]
+
+keymap = [
+ { on = "<C-c>", run = "close", desc = "Cancel input" },
+ { on = "<Enter>", run = "close --submit", desc = "Submit input" },
+ { on = "<Esc>", run = "escape", desc = "Back to normal mode, or cancel input" },
+ { on = "<C-[>", run = "escape", desc = "Back to normal mode, or cancel input" },
+
+ # Mode
+ { on = "i", run = "insert", desc = "Enter insert mode" },
+ { on = "I", run = [ "move first-char", "insert" ], desc = "Move to the BOL, and enter insert mode" },
+ { on = "a", run = "insert --append", desc = "Enter append mode" },
+ { on = "A", run = [ "move eol", "insert --append" ], desc = "Move to the EOL, and enter append mode" },
+ { on = "v", run = "visual", desc = "Enter visual mode" },
+ { on = "r", run = "replace", desc = "Replace a single character" },
+
+ # Selection
+ { on = "V", run = [ "move bol", "visual", "move eol" ], desc = "Select from BOL to EOL" },
+ { on = "<C-A>", run = [ "move eol", "visual", "move bol" ], desc = "Select from EOL to BOL" },
+ { on = "<C-E>", run = [ "move bol", "visual", "move eol" ], desc = "Select from BOL to EOL" },
+
+ # Character-wise movement
+ { on = "h", run = "move -1", desc = "Move back a character" },
+ { on = "l", run = "move 1", desc = "Move forward a character" },
+ { on = "<Left>", run = "move -1", desc = "Move back a character" },
+ { on = "<Right>", run = "move 1", desc = "Move forward a character" },
+ { on = "<C-b>", run = "move -1", desc = "Move back a character" },
+ { on = "<C-f>", run = "move 1", desc = "Move forward a character" },
+
+ # Word-wise movement
+ { on = "b", run = "backward", desc = "Move back to the start of the current or previous word" },
+ { on = "B", run = "backward --far", desc = "Move back to the start of the current or previous WORD" },
+ { on = "w", run = "forward", desc = "Move forward to the start of the next word" },
+ { on = "W", run = "forward --far", desc = "Move forward to the start of the next WORD" },
+ { on = "e", run = "forward --end-of-word", desc = "Move forward to the end of the current or next word" },
+ { on = "E", run = "forward --far --end-of-word", desc = "Move forward to the end of the current or next WORD" },
+ { on = "<A-b>", run = "backward", desc = "Move back to the start of the current or previous word" },
+ { on = "<A-f>", run = "forward --end-of-word", desc = "Move forward to the end of the current or next word" },
+
+ # Line-wise movement
+ { on = "0", run = "move bol", desc = "Move to the BOL" },
+ { on = "$", run = "move eol", desc = "Move to the EOL" },
+ { on = "_", run = "move first-char", desc = "Move to the first non-whitespace character" },
+ { on = "^", run = "move first-char", desc = "Move to the first non-whitespace character" },
+ { on = "<C-a>", run = "move bol", desc = "Move to the BOL" },
+ { on = "<C-e>", run = "move eol", desc = "Move to the EOL" },
+ { on = "<Home>", run = "move bol", desc = "Move to the BOL" },
+ { on = "<End>", run = "move eol", desc = "Move to the EOL" },
+
+ # Delete
+ { on = "<Backspace>", run = "backspace", desc = "Delete the character before the cursor" },
+ { on = "<Delete>", run = "backspace --under", desc = "Delete the character under the cursor" },
+ { on = "<C-h>", run = "backspace", desc = "Delete the character before the cursor" },
+ { on = "<C-d>", run = "backspace --under", desc = "Delete the character under the cursor" },
+
+ # Kill
+ { on = "<C-u>", run = "kill bol", desc = "Kill backwards to the BOL" },
+ { on = "<C-k>", run = "kill eol", desc = "Kill forwards to the EOL" },
+ { on = "<C-w>", run = "kill backward", desc = "Kill backwards to the start of the current word" },
+ { on = "<A-d>", run = "kill forward", desc = "Kill forwards to the end of the current word" },
+
+ # Cut/Yank/Paste
+ { on = "d", run = "delete --cut", desc = "Cut selected characters" },
+ { on = "D", run = [ "delete --cut", "move eol" ], desc = "Cut until EOL" },
+ { on = "c", run = "delete --cut --insert", desc = "Cut selected characters, and enter insert mode" },
+ { on = "C", run = [ "delete --cut --insert", "move eol" ], desc = "Cut until EOL, and enter insert mode" },
+ { on = "s", run = [ "delete --cut --insert", "move 1" ], desc = "Cut current character, and enter insert mode" },
+ { on = "S", run = [ "move bol", "delete --cut --insert", "move eol" ], desc = "Cut from BOL until EOL, and enter insert mode" },
+ { on = "x", run = [ "delete --cut", "move 1 --in-operating" ], desc = "Cut current character" },
+ { on = "y", run = "yank", desc = "Copy selected characters" },
+ { on = "p", run = "paste", desc = "Paste copied characters after the cursor" },
+ { on = "P", run = "paste --before", desc = "Paste copied characters before the cursor" },
+
+ # Undo/Redo
+ { on = "u", run = "undo", desc = "Undo the last operation" },
+ { on = "<C-r>", run = "redo", desc = "Redo the last operation" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "<F1>", run = "help", desc = "Open help" },
+]
+
+[confirm]
+
+keymap = [
+ { on = "<Esc>", run = "close", desc = "Cancel the confirm" },
+ { on = "<C-[>", run = "close", desc = "Cancel the confirm" },
+ { on = "<C-c>", run = "close", desc = "Cancel the confirm" },
+ { on = "<Enter>", run = "close --submit", desc = "Submit the confirm" },
+
+ { on = "n", run = "close", desc = "Cancel the confirm" },
+ { on = "y", run = "close --submit", desc = "Submit the confirm" },
+
+ { on = "k", run = "arrow prev", desc = "Previous line" },
+ { on = "j", run = "arrow next", desc = "Next line" },
+
+ { on = "<Up>", run = "arrow prev", desc = "Previous line" },
+ { on = "<Down>", run = "arrow next", desc = "Next line" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "<F1>", run = "help", desc = "Open help" },
+]
+
+[cmp]
+
+keymap = [
+ { on = "<C-c>", run = "close", desc = "Cancel completion" },
+ { on = "<Tab>", run = "close --submit", desc = "Submit the completion" },
+ { on = "<Enter>", run = [ "close --submit", "input:close --submit" ], desc = "Complete and submit the input" },
+
+ { on = "<A-k>", run = "arrow prev", desc = "Previous item" },
+ { on = "<A-j>", run = "arrow next", desc = "Next item" },
+
+ { on = "<Up>", run = "arrow prev", desc = "Previous item" },
+ { on = "<Down>", run = "arrow next", desc = "Next item" },
+
+ { on = "<C-p>", run = "arrow prev", desc = "Previous item" },
+ { on = "<C-n>", run = "arrow next", desc = "Next item" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "<F1>", run = "help", desc = "Open help" },
+]
+
+[help]
+
+keymap = [
+ { on = "<Esc>", run = "escape", desc = "Clear the filter, or hide the help" },
+ { on = "<C-[>", run = "escape", desc = "Clear the filter, or hide the help" },
+ { on = "<C-c>", run = "close", desc = "Hide the help" },
+
+ # Navigation
+ { on = "k", run = "arrow prev", desc = "Previous line" },
+ { on = "j", run = "arrow next", desc = "Next line" },
+
+ { on = "<Up>", run = "arrow prev", desc = "Previous line" },
+ { on = "<Down>", run = "arrow next", desc = "Next line" },
+
+ # Filtering
+ { on = "f", run = "filter", desc = "Filter help items" },
+]
diff --git a/fedora/.config/yazi/plugins/chmod.yazi/README.md b/fedora/.config/yazi/plugins/chmod.yazi/README.md
new file mode 100644
index 0000000..b2ad136
--- /dev/null
+++ b/fedora/.config/yazi/plugins/chmod.yazi/README.md
@@ -0,0 +1,28 @@
+# chmod.yazi
+
+Execute `chmod` on the selected files to change their mode. This plugin is only available on Unix platforms since it relies on [`chmod(2)`](https://man7.org/linux/man-pages/man2/chmod.2.html).
+
+https://github.com/yazi-rs/plugins/assets/17523360/7aa3abc2-d057-498c-8473-a6282c59c464
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:chmod
+```
+
+## Usage
+
+Add this to your `~/.config/yazi/keymap.toml`:
+
+```toml
+[[mgr.prepend_keymap]]
+on = [ "c", "m" ]
+run = "plugin chmod"
+desc = "Chmod on selected files"
+```
+
+Make sure the <kbd>c</kbd> => <kbd>m</kbd> key is not used elsewhere.
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/chmod.yazi/main.lua b/fedora/.config/yazi/plugins/chmod.yazi/main.lua
new file mode 100644
index 0000000..a50a864
--- /dev/null
+++ b/fedora/.config/yazi/plugins/chmod.yazi/main.lua
@@ -0,0 +1,42 @@
+--- @since 25.5.31
+
+local selected_or_hovered = ya.sync(function()
+ local tab, paths = cx.active, {}
+ for _, u in pairs(tab.selected) do
+ paths[#paths + 1] = tostring(u)
+ end
+ if #paths == 0 and tab.current.hovered then
+ paths[1] = tostring(tab.current.hovered.url)
+ end
+ return paths
+end)
+
+return {
+ entry = function()
+ ya.emit("escape", { visual = true })
+
+ local urls = selected_or_hovered()
+ if #urls == 0 then
+ return ya.notify { title = "Chmod", content = "No file selected", level = "warn", timeout = 5 }
+ end
+
+ local value, event = ya.input {
+ title = "Chmod:",
+ pos = { "top-center", y = 3, w = 40 },
+ position = { "top-center", y = 3, w = 40 }, -- TODO: remove
+ }
+ if event ~= 1 then
+ return
+ end
+
+ local status, err = Command("chmod"):arg(value):arg(urls):spawn():wait()
+ if not status or not status.success then
+ ya.notify {
+ title = "Chmod",
+ content = string.format("Chmod on selected files failed, error: %s", status and status.code or err),
+ level = "error",
+ timeout = 5,
+ }
+ end
+ end,
+}
diff --git a/fedora/.config/yazi/plugins/compress.yazi/LICENSE b/fedora/.config/yazi/plugins/compress.yazi/LICENSE
new file mode 100644
index 0000000..7ce7a2f
--- /dev/null
+++ b/fedora/.config/yazi/plugins/compress.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Ciarán O'Brien
+
+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.
diff --git a/fedora/.config/yazi/plugins/compress.yazi/README.md b/fedora/.config/yazi/plugins/compress.yazi/README.md
new file mode 100644
index 0000000..ae1f329
--- /dev/null
+++ b/fedora/.config/yazi/plugins/compress.yazi/README.md
@@ -0,0 +1,173 @@
+<h1 align="center">🗜️ compress.yazi</h1>
+<p align="center">
+ <b>A blazing fast, flexible archive plugin for <a href="https://github.com/sxyazi/yazi">Yazi</a></b><br>
+ <i>Effortlessly compress your files and folders with style!</i>
+</p>
+
+---
+
+## 📖 Table of Contents
+
+- [Features](#-features)
+- [Supported File Types](#-supported-file-types)
+- [Installation](#%EF%B8%8F-installation)
+- [Keymap Example](#-keymap-example)
+- [Usage](#%EF%B8%8F-usage)
+- [Flags](#%EF%B8%8F-flags)
+- [Tips](#-tips)
+- [Credits](#-credits)
+
+---
+
+## 🚀 Features
+
+- 🗂️ **Multi-format support:** zip, 7z, rar, tar, tar.gz, tar.xz, tar.bz2, tar.zst, tar.lz4, tar.lha
+- 🌍 **Cross-platform:** Works on Unix & Windows
+- 🔒 **Password protection:** Secure your archives (zip/7z/rar)
+- 🛡️ **Header encryption:** Hide file lists (7z/rar)
+- ⚡ **Compression level:** Choose your balance of speed vs. size
+- 🛑 **Overwrite safety:** Never lose files by accident
+- 🎯 **Seamless Yazi integration:** Fast, native-like UX
+
+---
+
+## 📦 Supported File Types
+
+| Extension | Default Command | 7z Command | Bsdtar Command (Win10+ & Unix) |
+| ------------- | ----------------- | -------------- | ------------------------------ |
+| `.zip` | `zip -r` | `7z a -tzip` | `tar -caf` |
+| `.7z` | `7z a` | `7z a` | |
+| `.rar` | `rar a` | | |
+| `.tar` | `tar rpf` | | `tar rpf` |
+| `.tar.gz` | `tar rpf + gzip` | `7z a -tgzip` | `tar -czf` |
+| `.tar.xz` | `tar rpf + xz` | `7z a -txz` | `tar -cJf` |
+| `.tar.bz2` | `tar rpf + bzip2` | `7z a -tbzip2` | `tar -cjf` |
+| `.tar.zst` | `tar rpf + zstd` | | `tar --zstd -cf` |
+| `.tar.lz4` | `tar rpf + lz4` | | |
+| `.tar.lha` | `tar rpf + lha` | | |
+
+---
+
+## ⚡️ Installation
+
+```bash
+# Unix
+git clone https://github.com/KKV9/compress.yazi.git ~/.config/yazi/plugins/compress.yazi
+
+# Windows (CMD, not PowerShell!)
+git clone https://github.com/KKV9/compress.yazi.git %AppData%\yazi\config\plugins\compress.yazi
+
+# Or with yazi plugin manager
+ya pkg add KKV9/compress
+```
+
+---
+
+### 🔧 Extras (Windows)
+
+To enable additional compression formats and features on Windows, follow these steps:
+
+1. **Install [7-Zip](https://www.7-zip.org/):**
+ Add `C:\Program Files\7-Zip` to your `PATH`.
+ This enables support for `.7z` archives and password-protected `.zip` files.
+
+2. **Alternative: Install [Nanazip](https://github.com/M2Team/NanaZip):**
+ A modern alternative to 7-Zip with similar functionality and extra features.
+
+3. **Install [WinRAR](https://www.win-rar.com/download.html):**
+ Add `C:\Program Files\WinRAR` to your `PATH`.
+ This enables support for `.rar` archives.
+
+4. **Install Additional Tools:**
+ To use formats like `lha`, `lz4`, `gzip`, etc., install their respective tools and ensure they are added to your `PATH`.
+
+---
+
+## 🎹 Keymap Example
+
+Add this to your `keymap.toml`:
+
+
+```toml
+[[mgr.prepend_keymap]]
+on = [ "c", "a", "a" ]
+run = "plugin compress"
+desc = "Archive selected files"
+
+[[mgr.prepend_keymap]]
+on = [ "c", "a", "p" ]
+run = "plugin compress -p"
+desc = "Archive selected files (password)"
+
+[[mgr.prepend_keymap]]
+on = [ "c", "a", "h" ]
+run = "plugin compress -ph"
+desc = "Archive selected files (password+header)"
+
+[[mgr.prepend_keymap]]
+on = [ "c", "a", "l" ]
+run = "plugin compress -l"
+desc = "Archive selected files (compression level)"
+
+[[mgr.prepend_keymap]]
+on = [ "c", "a", "u" ]
+run = "plugin compress -phl"
+desc = "Archive selected files (password+header+level)"
+```
+
+---
+
+## 🛠️ Usage
+
+1. **Select files/folders** in Yazi.
+2. Press <kbd>c</kbd> <kbd>a</kbd> to open the archive dialog.
+3. Choose:
+ - <kbd>a</kbd> for a standard archive
+ - <kbd>p</kbd> for password protection (zip/7z/rar)
+ - <kbd>h</kbd> to encrypt header (7z/rar)
+ - <kbd>l</kbd> to set compression level (all compression algorithims)
+ - <kbd>u</kbd> for all options together
+4. **Type a name** for your archive (or leave blank for suggested name).
+5. **Enter password** and/or **compression level** if prompted.
+6. **Overwrite protect** if a file already exists, the new file will be given a suffix _#.
+7. Enjoy your shiny new archive!
+
+---
+
+## 🏳️‍🌈 Flags
+
+- Combine flags for more power!
+- when separating flags with spaces, make sure to single quote them (eg., `'-ph rar'`)
+- `-p` Password protect (zip/7z/rar)
+- `-h` Encrypt header (7z/rar)
+- `-l` Set compression level (all compression algorithims)
+- `<extention>` Specify a default extention (eg., `7z`, `tar.gz`)
+
+#### Combining multiple flags:
+```toml
+[[mgr.prepend_keymap]]
+on = [ "c", "a", "7" ]
+run = "plugin compress '-ph 7z'"
+desc = "Archive selected files to 7z (password+header)"
+[[mgr.prepend_keymap]]
+on = [ "c", "a", "r" ]
+run = "plugin compress '-p -l rar'"
+desc = "Archive selected files to rar (password+level)"
+```
+
+---
+
+## 💡 Tips
+
+- The file extension **must** match a supported type.
+- The required compression tool **must** be installed and in your `PATH` (7zip/rar etc.).
+- If no extention is provided, the default extention (zip) will be appended automatically.
+
+---
+
+## 📣 Credits
+
+Made with ❤️ for [Yazi](https://github.com/sxyazi/yazi) by [KKV9](https://github.com/KKV9).
+Contributions are welcome! Feel free to submit a pull request.
+
+---
diff --git a/fedora/.config/yazi/plugins/compress.yazi/main.lua b/fedora/.config/yazi/plugins/compress.yazi/main.lua
new file mode 100644
index 0000000..b695b3f
--- /dev/null
+++ b/fedora/.config/yazi/plugins/compress.yazi/main.lua
@@ -0,0 +1,496 @@
+-- Check for windows
+local is_windows = ya.target_family() == "windows"
+-- Define flags and strings
+local is_password, is_encrypted, is_level, cmd_password, cmd_level, default_extension = false, false, false, "", "", "zip"
+
+-- Function to check valid filename
+local function is_valid_filename(name)
+ -- Trim whitespace from both ends
+ name = name:match("^%s*(.-)%s*$")
+ if name == "" then
+ return false
+ end
+ if is_windows then
+ -- Windows forbidden chars and reserved names
+ if name:find('[<>:"/\\|%?%*]') then
+ return false
+ end
+ else
+ -- Unix forbidden chars
+ if name:find("/") or name:find("%z") then
+ return false
+ end
+ end
+ return true
+end
+
+-- Function to send notifications
+local function notify_error(message, urgency)
+ ya.notify(
+ {
+ title = "Archive",
+ content = message,
+ level = urgency,
+ timeout = 5
+ }
+ )
+end
+
+-- Function to check if command is available
+local function is_command_available(cmd)
+ local stat_cmd
+ if is_windows then
+ stat_cmd = string.format("where %s > nul 2>&1", cmd)
+ else
+ stat_cmd = string.format("command -v %s >/dev/null 2>&1", cmd)
+ end
+ local cmd_exists = os.execute(stat_cmd)
+ if cmd_exists then
+ return true
+ else
+ return false
+ end
+end
+
+-- Function to change command arrays --> string -- Use first command available or first command
+local function find_command_name(cmd_list)
+ for _, cmd in ipairs(cmd_list) do
+ if is_command_available(cmd) then
+ return cmd
+ end
+ end
+ return cmd_list[1] -- Return first command as fallback
+end
+
+-- Function to append filename to it's parent directory url
+local function combine_url(path, file)
+ path, file = Url(path), Url(file)
+ return tostring(path:join(file))
+end
+
+-- Function to make a table of selected or hovered files: path = filenames
+local selected_or_hovered =
+ ya.sync(
+ function()
+ local tab, paths, names, path_fnames = cx.active, {}, {}, {}
+ for _, u in pairs(tab.selected) do
+ paths[#paths + 1] = tostring(u.parent)
+ names[#names + 1] = tostring(u.name)
+ end
+ if #paths == 0 and tab.current.hovered then
+ paths[1] = tostring(tab.current.hovered.url.parent)
+ names[1] = tostring(tab.current.hovered.name)
+ end
+ for idx, name in ipairs(names) do
+ if not path_fnames[paths[idx]] then
+ path_fnames[paths[idx]] = {}
+ end
+ table.insert(path_fnames[paths[idx]], name)
+ end
+ return path_fnames, names, tostring(tab.current.cwd)
+ end
+)
+
+-- Table of archive commands
+local archive_commands = {
+ ["%.zip$"] = {
+ {command = "zip", args = {"-r"}, level_arg = "-", level_min = 0, level_max = 9, passwordable = true},
+ {
+ command = {"7z", "7zz", "7za"},
+ args = {"a", "-tzip"},
+ level_arg = "-mx=",
+ level_min = 0,
+ level_max = 9,
+ passwordable = true
+ },
+ {
+ command = {"tar", "bsdtar"},
+ args = {"-caf"},
+ level_arg = {"--option", "compression-level="},
+ level_min = 1,
+ level_max = 9
+ }
+ },
+ ["%.7z$"] = {
+ {
+ command = {"7z", "7zz", "7za"},
+ args = {"a"},
+ level_arg = "-mx=",
+ level_min = 0,
+ level_max = 9,
+ header_arg = "-mhe=on",
+ passwordable = true
+ }
+ },
+ ["%.rar$"] = {
+ {
+ command = "rar",
+ args = {"a"},
+ level_arg = "-m",
+ level_min = 0,
+ level_max = 5,
+ header_arg = "-hp",
+ passwordable = true
+ }
+ },
+ ["%.tar.gz$"] = {
+ {command = {"tar", "bsdtar"}, args = {"rpf"}, level_arg = "-", level_min = 1, level_max = 9, compress = "gzip"},
+ {
+ command = {"tar", "bsdtar"},
+ args = {"rpf"},
+ level_arg = "-mx=",
+ level_min = 1,
+ level_max = 9,
+ compress = "7z",
+ compress_args = {"a", "-tgzip"}
+ },
+ {
+ command = {"tar", "bsdtar"},
+ args = {"-czf"},
+ level_arg = {"--option", "gzip:compression-level="},
+ level_min = 1,
+ level_max = 9
+ }
+ },
+ ["%.tar.xz$"] = {
+ {command = {"tar", "bsdtar"}, args = {"rpf"}, level_arg = "-", level_min = 1, level_max = 9, compress = "xz"},
+ {
+ command = {"tar", "bsdtar"},
+ args = {"rpf"},
+ level_arg = "-mx=",
+ level_min = 1,
+ level_max = 9,
+ compress = "7z",
+ compress_args = {"a", "-txz"}
+ },
+ {
+ command = {"tar", "bsdtar"},
+ args = {"-cJf"},
+ level_arg = {"--option", "xz:compression-level="},
+ level_min = 1,
+ level_max = 9
+ }
+ },
+ ["%.tar.bz2$"] = {
+ {command = {"tar", "bsdtar"}, args = {"rpf"}, level_arg = "-", level_min = 1, level_max = 9, compress = "bzip2"},
+ {
+ command = {"tar", "bsdtar"},
+ args = {"rpf"},
+ level_arg = "-mx=",
+ level_min = 1,
+ level_max = 9,
+ compress = "7z",
+ compress_args = {"a", "-tbzip2"}
+ },
+ {
+ command = {"tar", "bsdtar"},
+ args = {"-cjf"},
+ level_arg = {"--option", "bzip2:compression-level="},
+ level_min = 1,
+ level_max = 9
+ }
+ },
+ ["%.tar.zst$"] = {
+ {
+ command = {"tar", "bsdtar"},
+ args = {"rpf"},
+ level_arg = "-",
+ level_min = 1,
+ level_max = 22,
+ compress = "zstd",
+ compress_args = {"--ultra"}
+ }
+ },
+ ["%.tar.lz4$"] = {
+ {
+ command = {"tar", "bsdtar"},
+ args = {"rpf"},
+ level_arg = "-",
+ level_min = 1,
+ level_max = 12,
+ compress = "lz4"
+ }
+ },
+ ["%.tar.lha$"] = {
+ {
+ command = {"tar", "bsdtar"},
+ args = {"rpf"},
+ level_arg = "-o",
+ level_min = 5,
+ level_max = 7,
+ compress = "lha",
+ compress_args = {"-a"}
+ }
+ },
+ ["%.tar$"] = {
+ {command = {"tar", "bsdtar"}, args = {"rpf"}}
+ }
+}
+
+return {
+ entry = function(_, job)
+ -- Parse flags and default extension
+ if job.args ~= nil then
+ for _, arg in ipairs(job.args) do
+ if arg:match("^%-(%w+)$") then
+ -- Handle combined flags (e.g., -phl)
+ for flag in arg:sub(2):gmatch(".") do
+ if flag == "p" then
+ is_password = true
+ elseif flag == "h" then
+ is_encrypted = true
+ elseif flag == "l" then
+ is_level = true
+ end
+ end
+ elseif arg:match("^%w[%w\\.]*$") then
+ -- Handle default extension (e.g., 7z, zip)
+ if archive_commands["%." .. arg .. "$"] then
+ default_extension = arg
+ else
+ notify_error(string.format("Unsupported extension: %s", arg), "warn")
+ end
+ else
+ notify_error(string.format("Unknown argument: %s", arg), "warn")
+ end
+ end
+ end
+
+ -- Exit visual mode
+ ya.emit("escape", {visual = true})
+ -- Define file table and output_dir (pwd)
+ local path_fnames, fnames, output_dir = selected_or_hovered()
+ -- Get archive filename
+ local output_name, event =
+ ya.input(
+ {
+ title = "Create archive:",
+ position = {"top-center", y = 3, w = 40}
+ }
+ )
+ if event ~= 1 then
+ return
+ end
+
+ -- Determine the default name for the archive
+ local default_name = #fnames == 1 and fnames[1] or Url(output_dir).name
+ output_name = output_name == "" and string.format("%s.%s", default_name, default_extension) or output_name
+
+ -- Add default extension if none is specified
+ if not output_name:match("%.%w+$") then
+ output_name = string.format("%s.%s", output_name, default_extension)
+ end
+
+ -- Validate the final archive filename
+ if not is_valid_filename(output_name) then
+ notify_error("Invalid archive filename", "error")
+ return
+ end
+
+ -- Match user input to archive command
+ local archive_cmd,
+ archive_args,
+ archive_compress,
+ archive_level_arg,
+ archive_level_min,
+ archive_level_max,
+ archive_header_arg,
+ archive_passwordable,
+ archive_compress_args
+ local matched_pattern = false
+ for pattern, cmd_list in pairs(archive_commands) do
+ if output_name:match(pattern) then
+ matched_pattern = true -- Mark that file extension is correct
+ for _, cmd in ipairs(cmd_list) do
+ -- Check if archive_cmd is available
+ local find_command = type(cmd.command) == "table" and find_command_name(cmd.command) or cmd.command
+ if is_command_available(find_command) then
+ -- Check if compress_cmd (if listed) is available
+ if cmd.compress == nil or is_command_available(cmd.compress) then
+ archive_cmd = find_command
+ archive_args = cmd.args
+ archive_compress = cmd.compress or ""
+ archive_level_arg = is_level and cmd.level_arg or ""
+ archive_level_min = cmd.level_min
+ archive_level_max = cmd.level_max
+ archive_header_arg = is_encrypted and cmd.header_arg or ""
+ archive_passwordable = cmd.passwordable or false
+ archive_compress_args = cmd.compress_args or {}
+ break
+ end
+ end
+ end
+ if archive_cmd then
+ break
+ end
+ end
+ end
+
+ -- Check if no archive command is available for the extension
+ if not matched_pattern then
+ notify_error("Unsupported file extension", "error")
+ return
+ end
+
+ -- Check if no suitable archive program was found
+ if not archive_cmd then
+ notify_error("Could not find a suitable archive program for the selected file extension", "error")
+ return
+ end
+
+ -- Check if archive command has multiple names
+ if type(archive_cmd) == "table" then
+ archive_cmd = find_command_name(archive_cmd)
+ end
+
+ -- Exit if archive command is not available
+ if not is_command_available(archive_cmd) then
+ notify_error(string.format("%s not available", archive_cmd), "error")
+ return
+ end
+
+ -- Exit if compress command is not available
+ if archive_compress ~= "" and not is_command_available(archive_compress) then
+ notify_error(string.format("%s compression not available", archive_compress), "error")
+ return
+ end
+
+ -- Add password arg if selected
+ if archive_passwordable and is_password then
+ local output_password, event =
+ ya.input(
+ {
+ title = "Enter password:",
+ obscure = true,
+ position = {"top-center", y = 3, w = 40}
+ }
+ )
+ if event ~= 1 then
+ return
+ end
+ if output_password ~= "" then
+ cmd_password = "-P" .. output_password
+ if archive_cmd == "rar" and is_encrypted then
+ cmd_password = archive_header_arg .. output_password -- Add archive arg for rar
+ end
+ table.insert(archive_args, cmd_password)
+ end
+ end
+
+ -- Add header arg if selected for 7z
+ if is_encrypted and archive_header_arg ~= "" and archive_cmd ~= "rar" then
+ table.insert(archive_args, archive_header_arg)
+ end
+
+ -- Add level arg if selected
+ if archive_level_arg ~= "" and is_level then
+ local output_level, event =
+ ya.input(
+ {
+ title = string.format("Enter compression level (%s - %s)", archive_level_min, archive_level_max),
+ position = {"top-center", y = 3, w = 40}
+ }
+ )
+ if event ~= 1 then
+ return
+ end
+ -- Validate user input for compression level
+ if
+ output_level ~= "" and tonumber(output_level) ~= nil and tonumber(output_level) >= archive_level_min and
+ tonumber(output_level) <= archive_level_max
+ then
+ cmd_level =
+ type(archive_level_arg) == "table" and archive_level_arg[#archive_level_arg] .. output_level or
+ archive_level_arg .. output_level
+ local target_args = archive_compress == "" and archive_args or archive_compress_args
+ if type(archive_level_arg) == "table" then
+ -- Insert each element of archive_level_arg (except last) into target_args at the correct position
+ for i = 1, #archive_level_arg - 1 do
+ table.insert(target_args, i, archive_level_arg[i])
+ end
+ table.insert(target_args, #archive_level_arg, cmd_level) -- Add level at the end
+ else
+ -- Insert the compression level argument at the start if not a table
+ table.insert(target_args, 1, cmd_level)
+ end
+ else
+ notify_error("Invalid level specified. Using defaults.", "warn")
+ end
+ end
+
+ -- Store the original output name for later use
+ local original_name = output_name
+
+ -- If compression is needed, adjust the output name to exclude extensions like ".tar"
+ if archive_compress ~= "" then
+ output_name = output_name:match("(.*%.tar)") or output_name
+ end
+
+ -- Create a temporary directory for intermediate files
+ local temp_dir_name = ".tmp_compress"
+ local temp_dir = combine_url(output_dir, temp_dir_name)
+ local temp_dir, _ = tostring(fs.unique_name(Url(temp_dir)))
+
+ -- Attempt to create the temporary directory
+ local temp_dir_status, temp_dir_err = fs.create("dir_all", Url(temp_dir))
+ if not temp_dir_status then
+ -- Notify the user if the temporary directory creation fails
+ notify_error(string.format("Failed to create temp directory, error code: %s", temp_dir_err), "error")
+ return
+ end
+
+ -- Define the temporary output file path within the temporary directory
+ local temp_output_url = combine_url(temp_dir, output_name)
+
+ -- Add files to the output archive
+ for filepath, filenames in pairs(path_fnames) do
+ -- Execute the archive command for each path and its respective files
+ local archive_status, archive_err =
+ Command(archive_cmd):arg(archive_args):arg(temp_output_url):arg(filenames):cwd(filepath):spawn():wait()
+ if not archive_status or not archive_status.success then
+ -- Notify the user if the archiving process fails and clean up the temporary directory
+ notify_error(string.format("Failed to create archive %s with '%s', error: %s", output_name, archive_cmd, archive_err), "error")
+ local cleanup_status, cleanup_err = fs.remove("dir_all", Url(temp_dir))
+ if not cleanup_status then
+ notify_error(string.format("Failed to clean up temporary directory %s, error: %s", temp_dir, cleanup_err), "error")
+ end
+ return
+ end
+ end
+
+ -- If compression is required, execute the compression command
+ if archive_compress ~= "" then
+ local compress_status, compress_err =
+ Command(archive_compress):arg(archive_compress_args):arg(temp_output_url):spawn():wait()
+ if not compress_status or not compress_status.success then
+ -- Notify the user if the compression process fails and clean up the temporary directory
+ notify_error(string.format("Failed to compress archive %s with '%s', error: %s", output_name, archive_compress, compress_err), "error")
+ local cleanup_status, cleanup_err = fs.remove("dir_all", Url(temp_dir))
+ if not cleanup_status then
+ notify_error(string.format("Failed to clean up temporary directory %s, error: %s", temp_dir, cleanup_err), "error")
+ end
+ return
+ end
+ end
+
+ -- Move the final file from the temporary directory to the output directory
+ local final_output_url, temp_url_processed = combine_url(output_dir, original_name), combine_url(temp_dir, original_name)
+ final_output_url, _ = tostring(fs.unique_name(Url(final_output_url)))
+ local move_status, move_err = os.rename(temp_url_processed, final_output_url)
+ if not move_status then
+ -- Notify the user if the move operation fails and clean up the temporary directory
+ notify_error(string.format("Failed to move %s to %s, error: %s", temp_url_processed, final_output_url, move_err), "error")
+ local cleanup_status, cleanup_err = fs.remove("dir_all", Url(temp_dir))
+ if not cleanup_status then
+ notify_error(string.format("Failed to clean up temporary directory %s, error: %s", temp_dir, cleanup_err), "error")
+ end
+ return
+ end
+
+ -- Cleanup the temporary directory after successful operation
+ local cleanup_status, cleanup_err = fs.remove("dir_all", Url(temp_dir))
+ if not cleanup_status then
+ notify_error(string.format("Failed to clean up temporary directory %s, error: %s", temp_dir, cleanup_err), "error")
+ end
+ end
+}
diff --git a/fedora/.config/yazi/plugins/diff.yazi/README.md b/fedora/.config/yazi/plugins/diff.yazi/README.md
new file mode 100644
index 0000000..1976541
--- /dev/null
+++ b/fedora/.config/yazi/plugins/diff.yazi/README.md
@@ -0,0 +1,28 @@
+# diff.yazi
+
+Diff the selected file with the hovered file, create a living patch, and copy it to the clipboard.
+
+https://github.com/yazi-rs/plugins/assets/17523360/eff5e949-386a-44ea-82f9-4cb4a2c37aad
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:diff
+```
+
+## Usage
+
+Add this to your `~/.config/yazi/keymap.toml`:
+
+```toml
+[[mgr.prepend_keymap]]
+on = "<C-d>"
+run = "plugin diff"
+desc = "Diff the selected with the hovered file"
+```
+
+Make sure the <kbd>C</kbd> + <kbd>d</kbd> key is not used elsewhere.
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/diff.yazi/main.lua b/fedora/.config/yazi/plugins/diff.yazi/main.lua
new file mode 100644
index 0000000..21dde6d
--- /dev/null
+++ b/fedora/.config/yazi/plugins/diff.yazi/main.lua
@@ -0,0 +1,41 @@
+--- @since 25.2.7
+
+local function info(content)
+ return ya.notify {
+ title = "Diff",
+ content = content,
+ timeout = 5,
+ }
+end
+
+local selected_url = ya.sync(function()
+ for _, u in pairs(cx.active.selected) do
+ return u
+ end
+end)
+
+local hovered_url = ya.sync(function()
+ local h = cx.active.current.hovered
+ return h and h.url
+end)
+
+return {
+ entry = function()
+ local a, b = selected_url(), hovered_url()
+ if not a then
+ return info("No file selected")
+ elseif not b then
+ return info("No file hovered")
+ end
+
+ local output, err = Command("diff"):arg("-Naur"):arg(tostring(a)):arg(tostring(b)):output()
+ if not output then
+ return info("Failed to run diff, error: " .. err)
+ elseif output.stdout == "" then
+ return info("No differences found")
+ end
+
+ ya.clipboard(output.stdout)
+ info("Diff copied to clipboard")
+ end,
+}
diff --git a/fedora/.config/yazi/plugins/folder-rules.yazi/main.lua b/fedora/.config/yazi/plugins/folder-rules.yazi/main.lua
new file mode 100644
index 0000000..556f610
--- /dev/null
+++ b/fedora/.config/yazi/plugins/folder-rules.yazi/main.lua
@@ -0,0 +1,12 @@
+local function setup()
+ ps.sub("cd", function()
+ local cwd = cx.active.current.cwd
+ if cwd:ends_with("Downloads") then
+ ya.emit("sort", { "mtime", reverse = true, dir_first = false })
+ else
+ ya.emit("sort", { "alphabetical", reverse = false, dir_first = true })
+ end
+ end)
+end
+
+return { setup = setup }
diff --git a/fedora/.config/yazi/plugins/full-border.yazi/README.md b/fedora/.config/yazi/plugins/full-border.yazi/README.md
new file mode 100644
index 0000000..269ca8e
--- /dev/null
+++ b/fedora/.config/yazi/plugins/full-border.yazi/README.md
@@ -0,0 +1,32 @@
+# full-border.yazi
+
+Add a full border to Yazi to make it look fancier.
+
+![full-border](https://github.com/yazi-rs/plugins/assets/17523360/ef81b560-2465-4d36-abf2-5d21dcb7b987)
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:full-border
+```
+
+## Usage
+
+Add this to your `init.lua` to enable the plugin:
+
+```lua
+require("full-border"):setup()
+```
+
+Or you can customize the border type:
+
+```lua
+require("full-border"):setup {
+ -- Available values: ui.Border.PLAIN, ui.Border.ROUNDED
+ type = ui.Border.ROUNDED,
+}
+```
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/full-border.yazi/main.lua b/fedora/.config/yazi/plugins/full-border.yazi/main.lua
new file mode 100644
index 0000000..a917e1e
--- /dev/null
+++ b/fedora/.config/yazi/plugins/full-border.yazi/main.lua
@@ -0,0 +1,43 @@
+--- @since 25.2.26
+
+local function setup(_, opts)
+ local type = opts and opts.type or ui.Border.ROUNDED
+ local old_build = Tab.build
+
+ Tab.build = function(self, ...)
+ local bar = function(c, x, y)
+ if x <= 0 or x == self._area.w - 1 or th.mgr.border_symbol ~= "│" then
+ return ui.Bar(ui.Edge.TOP)
+ end
+
+ return ui.Bar(ui.Edge.TOP)
+ :area(
+ ui.Rect { x = x, y = math.max(0, y), w = ya.clamp(0, self._area.w - x, 1), h = math.min(1, self._area.h) }
+ )
+ :symbol(c)
+ end
+
+ local c = self._chunks
+ self._chunks = {
+ c[1]:pad(ui.Pad.y(1)),
+ c[2]:pad(ui.Pad(1, c[3].w > 0 and 0 or 1, 1, c[1].w > 0 and 0 or 1)),
+ c[3]:pad(ui.Pad.y(1)),
+ }
+
+ local style = th.mgr.border_style
+ self._base = ya.list_merge(self._base or {}, {
+ ui.Border(ui.Edge.ALL):area(self._area):type(type):style(style),
+ ui.Bar(ui.Edge.RIGHT):area(self._chunks[1]):style(style),
+ ui.Bar(ui.Edge.LEFT):area(self._chunks[3]):style(style),
+
+ bar("┬", c[1].right - 1, c[1].y),
+ bar("┴", c[1].right - 1, c[1].bottom - 1),
+ bar("┬", c[2].right, c[2].y),
+ bar("┴", c[2].right, c[2].bottom - 1),
+ })
+
+ old_build(self, ...)
+ end
+end
+
+return { setup = setup }
diff --git a/fedora/.config/yazi/plugins/git.yazi/README.md b/fedora/.config/yazi/plugins/git.yazi/README.md
new file mode 100644
index 0000000..96a87a8
--- /dev/null
+++ b/fedora/.config/yazi/plugins/git.yazi/README.md
@@ -0,0 +1,78 @@
+# git.yazi
+
+Show the status of Git file changes as linemode in the file list.
+
+https://github.com/user-attachments/assets/34976be9-a871-4ffe-9d5a-c4cdd0bf4576
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:git
+```
+
+## Setup
+
+Add the following to your `~/.config/yazi/init.lua`:
+
+```lua
+require("git"):setup()
+```
+
+And register it as fetchers in your `~/.config/yazi/yazi.toml`:
+
+```toml
+[[plugin.prepend_fetchers]]
+id = "git"
+name = "*"
+run = "git"
+
+[[plugin.prepend_fetchers]]
+id = "git"
+name = "*/"
+run = "git"
+```
+
+## Advanced
+
+> [!NOTE]
+> The following configuration must be put before `require("git"):setup()`
+
+You can customize the [Style](https://yazi-rs.github.io/docs/plugins/layout#style) of the status sign with:
+
+- `th.git.modified`
+- `th.git.added`
+- `th.git.untracked`
+- `th.git.ignored`
+- `th.git.deleted`
+- `th.git.updated`
+
+For example:
+
+```lua
+-- ~/.config/yazi/init.lua
+th.git = th.git or {}
+th.git.modified = ui.Style():fg("blue")
+th.git.deleted = ui.Style():fg("red"):bold()
+```
+
+You can also customize the text of the status sign with:
+
+- `th.git.modified_sign`
+- `th.git.added_sign`
+- `th.git.untracked_sign`
+- `th.git.ignored_sign`
+- `th.git.deleted_sign`
+- `th.git.updated_sign`
+
+For example:
+
+```lua
+-- ~/.config/yazi/init.lua
+th.git = th.git or {}
+th.git.modified_sign = "M"
+th.git.deleted_sign = "D"
+```
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/git.yazi/main.lua b/fedora/.config/yazi/plugins/git.yazi/main.lua
new file mode 100644
index 0000000..e6b3a36
--- /dev/null
+++ b/fedora/.config/yazi/plugins/git.yazi/main.lua
@@ -0,0 +1,261 @@
+--- @since 25.5.31
+
+local WINDOWS = ya.target_family() == "windows"
+
+-- The code of supported git status,
+-- also used to determine which status to show for directories when they contain different statuses
+-- see `bubble_up`
+---@enum CODES
+local CODES = {
+ excluded = 100, -- ignored directory
+ ignored = 6, -- ignored file
+ untracked = 5,
+ modified = 4,
+ added = 3,
+ deleted = 2,
+ updated = 1,
+ unknown = 0,
+}
+
+local PATTERNS = {
+ { "!$", CODES.ignored },
+ { "?$", CODES.untracked },
+ { "[MT]", CODES.modified },
+ { "[AC]", CODES.added },
+ { "D", CODES.deleted },
+ { "U", CODES.updated },
+ { "[AD][AD]", CODES.updated },
+}
+
+---@param line string
+---@return CODES, string
+local function match(line)
+ local signs = line:sub(1, 2)
+ for _, p in ipairs(PATTERNS) do
+ local path, pattern, code = nil, p[1], p[2]
+ if signs:find(pattern) then
+ path = line:sub(4, 4) == '"' and line:sub(5, -2) or line:sub(4)
+ path = WINDOWS and path:gsub("/", "\\") or path
+ end
+ if not path then
+ elseif path:find("[/\\]$") then
+ -- Mark the ignored directory as `excluded`, so we can process it further within `propagate_down`
+ return code == CODES.ignored and CODES.excluded or code, path:sub(1, -2)
+ else
+ return code, path
+ end
+ ---@diagnostic disable-next-line: missing-return
+ end
+end
+
+---@param cwd Url
+---@return string?
+local function root(cwd)
+ local is_worktree = function(url)
+ local file, head = io.open(tostring(url)), nil
+ if file then
+ head = file:read(8)
+ file:close()
+ end
+ return head == "gitdir: "
+ end
+
+ repeat
+ local next = cwd:join(".git")
+ local cha = fs.cha(next)
+ if cha and (cha.is_dir or is_worktree(next)) then
+ return tostring(cwd)
+ end
+ cwd = cwd.parent
+ until not cwd
+end
+
+---@param changed Changes
+---@return Changes
+local function bubble_up(changed)
+ local new, empty = {}, Url("")
+ for path, code in pairs(changed) do
+ if code ~= CODES.ignored then
+ local url = Url(path).parent
+ while url and url ~= empty do
+ local s = tostring(url)
+ new[s] = (new[s] or CODES.unknown) > code and new[s] or code
+ url = url.parent
+ end
+ end
+ end
+ return new
+end
+
+---@param excluded string[]
+---@param cwd Url
+---@param repo Url
+---@return Changes
+local function propagate_down(excluded, cwd, repo)
+ local new, rel = {}, cwd:strip_prefix(repo)
+ for _, path in ipairs(excluded) do
+ if rel:starts_with(path) then
+ -- If `cwd` is a subdirectory of an excluded directory, also mark it as `excluded`
+ new[tostring(cwd)] = CODES.excluded
+ elseif cwd == repo:join(path).parent then
+ -- If `path` is a direct subdirectory of `cwd`, mark it as `ignored`
+ new[path] = CODES.ignored
+ else
+ -- Skipping, we only care about `cwd` itself and its direct subdirectories for maximum performance
+ end
+ end
+ return new
+end
+
+---@param cwd string
+---@param repo string
+---@param changed Changes
+local add = ya.sync(function(st, cwd, repo, changed)
+ ---@cast st State
+
+ st.dirs[cwd] = repo
+ st.repos[repo] = st.repos[repo] or {}
+ for path, code in pairs(changed) do
+ if code == CODES.unknown then
+ st.repos[repo][path] = nil
+ elseif code == CODES.excluded then
+ -- Mark the directory with a special value `excluded` so that it can be distinguished during UI rendering
+ st.dirs[path] = CODES.excluded
+ else
+ st.repos[repo][path] = code
+ end
+ end
+ -- TODO: remove this
+ if ui.render then
+ ui.render()
+ else
+ ya.render()
+ end
+end)
+
+---@param cwd string
+local remove = ya.sync(function(st, cwd)
+ ---@cast st State
+
+ local repo = st.dirs[cwd]
+ if not repo then
+ return
+ end
+
+ -- TODO: remove this
+ if ui.render then
+ ui.render()
+ else
+ ya.render()
+ end
+ st.dirs[cwd] = nil
+ if not st.repos[repo] then
+ return
+ end
+
+ for _, r in pairs(st.dirs) do
+ if r == repo then
+ return
+ end
+ end
+ st.repos[repo] = nil
+end)
+
+---@param st State
+---@param opts Options
+local function setup(st, opts)
+ st.dirs = {}
+ st.repos = {}
+
+ opts = opts or {}
+ opts.order = opts.order or 1500
+
+ local t = th.git or {}
+ local styles = {
+ [CODES.ignored] = t.ignored and ui.Style(t.ignored) or ui.Style():fg("darkgray"),
+ [CODES.untracked] = t.untracked and ui.Style(t.untracked) or ui.Style():fg("magenta"),
+ [CODES.modified] = t.modified and ui.Style(t.modified) or ui.Style():fg("yellow"),
+ [CODES.added] = t.added and ui.Style(t.added) or ui.Style():fg("green"),
+ [CODES.deleted] = t.deleted and ui.Style(t.deleted) or ui.Style():fg("red"),
+ [CODES.updated] = t.updated and ui.Style(t.updated) or ui.Style():fg("yellow"),
+ }
+ local signs = {
+ [CODES.ignored] = t.ignored_sign or "",
+ [CODES.untracked] = t.untracked_sign or "?",
+ [CODES.modified] = t.modified_sign or "",
+ [CODES.added] = t.added_sign or "",
+ [CODES.deleted] = t.deleted_sign or "",
+ [CODES.updated] = t.updated_sign or "",
+ }
+
+ Linemode:children_add(function(self)
+ local url = self._file.url
+ local repo = st.dirs[tostring(url.base)]
+ local code
+ if repo then
+ code = repo == CODES.excluded and CODES.ignored or st.repos[repo][tostring(url):sub(#repo + 2)]
+ end
+
+ if not code or signs[code] == "" then
+ return ""
+ elseif self._file.is_hovered then
+ return ui.Line { " ", signs[code] }
+ else
+ return ui.Line { " ", ui.Span(signs[code]):style(styles[code]) }
+ end
+ end, opts.order)
+end
+
+---@type UnstableFetcher
+local function fetch(_, job)
+ local cwd = job.files[1].url.base
+ local repo = root(cwd)
+ if not repo then
+ remove(tostring(cwd))
+ return true
+ end
+
+ local paths = {}
+ for _, file in ipairs(job.files) do
+ paths[#paths + 1] = tostring(file.url)
+ end
+
+ -- stylua: ignore
+ local output, err = Command("git")
+ :cwd(tostring(cwd))
+ :arg({ "--no-optional-locks", "-c", "core.quotePath=", "status", "--porcelain", "-unormal", "--no-renames", "--ignored=matching" })
+ :arg(paths)
+ :stdout(Command.PIPED)
+ :output()
+ if not output then
+ return true, Err("Cannot spawn `git` command, error: %s", err)
+ end
+
+ local changed, excluded = {}, {}
+ for line in output.stdout:gmatch("[^\r\n]+") do
+ local code, path = match(line)
+ if code == CODES.excluded then
+ excluded[#excluded + 1] = path
+ else
+ changed[path] = code
+ end
+ end
+
+ if job.files[1].cha.is_dir then
+ ya.dict_merge(changed, bubble_up(changed))
+ end
+ ya.dict_merge(changed, propagate_down(excluded, cwd, Url(repo)))
+
+ -- Reset the status of any files that don't appear in the output of `git status` to `unknown`,
+ -- so that cleaning up outdated statuses from `st.repos`
+ for _, path in ipairs(paths) do
+ local s = path:sub(#repo + 2)
+ changed[s] = changed[s] or CODES.unknown
+ end
+
+ add(tostring(cwd), repo, changed)
+
+ return false
+end
+
+return { setup = setup, fetch = fetch }
diff --git a/fedora/.config/yazi/plugins/git.yazi/types.lua b/fedora/.config/yazi/plugins/git.yazi/types.lua
new file mode 100644
index 0000000..9936849
--- /dev/null
+++ b/fedora/.config/yazi/plugins/git.yazi/types.lua
@@ -0,0 +1,12 @@
+---@class State
+---@field dirs table<string, string|CODES> Mapping between a directory and its corresponding repository
+---@field repos table<string, Changes> Mapping between a repository and the status of each of its files
+
+---@class Options
+---@field order number The order in which the status is displayed
+---@field renamed boolean Whether to include renamed files in the status (or treat them as modified)
+
+-- TODO: move this to `types.yazi` once it's get stable
+---@alias UnstableFetcher fun(self: unknown, job: { files: File[] }): boolean, Error?
+
+---@alias Changes table<string, CODES>
diff --git a/fedora/.config/yazi/plugins/jump-to-char.yazi/README.md b/fedora/.config/yazi/plugins/jump-to-char.yazi/README.md
new file mode 100644
index 0000000..d24f2e7
--- /dev/null
+++ b/fedora/.config/yazi/plugins/jump-to-char.yazi/README.md
@@ -0,0 +1,28 @@
+# jump-to-char.yazi
+
+Vim-like `f<char>`, jump to the next file whose name starts with `<char>`.
+
+https://github.com/yazi-rs/plugins/assets/17523360/aac9341c-b416-4e0c-aaba-889d48389869
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:jump-to-char
+```
+
+## Usage
+
+Add this to your `~/.config/yazi/keymap.toml`:
+
+```toml
+[[mgr.prepend_keymap]]
+on = "f"
+run = "plugin jump-to-char"
+desc = "Jump to char"
+```
+
+Make sure the <kbd>f</kbd> key is not used elsewhere.
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/jump-to-char.yazi/main.lua b/fedora/.config/yazi/plugins/jump-to-char.yazi/main.lua
new file mode 100644
index 0000000..8a434f1
--- /dev/null
+++ b/fedora/.config/yazi/plugins/jump-to-char.yazi/main.lua
@@ -0,0 +1,32 @@
+--- @since 25.5.31
+
+local AVAILABLE_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789."
+
+local changed = ya.sync(function(st, new)
+ local b = st.last ~= new
+ st.last = new
+ return b or not cx.active.finder
+end)
+
+local escape = function(s) return s == "." and "\\." or s end
+
+return {
+ entry = function()
+ local cands = {}
+ for i = 1, #AVAILABLE_CHARS do
+ cands[#cands + 1] = { on = AVAILABLE_CHARS:sub(i, i) }
+ end
+
+ local idx = ya.which { cands = cands, silent = true }
+ if not idx then
+ return
+ end
+
+ local kw = escape(cands[idx].on)
+ if changed(kw) then
+ ya.emit("find_do", { "^" .. kw })
+ else
+ ya.emit("find_arrow", {})
+ end
+ end,
+}
diff --git a/fedora/.config/yazi/plugins/lsar.yazi/README.md b/fedora/.config/yazi/plugins/lsar.yazi/README.md
new file mode 100644
index 0000000..e944442
--- /dev/null
+++ b/fedora/.config/yazi/plugins/lsar.yazi/README.md
@@ -0,0 +1,43 @@
+# lsar.yazi
+
+Previewing archive contents with `lsar`, which is something you might not want to use anyway.
+
+It was the default archive previewer before Yazi v0.3, and after then, it was replaced with a faster and more efficient `7zip` previewer.
+
+This plugin is here just in case you're still interested in the old behavior,
+but we strongly discourage using it unless you encounter some issues with `7zip` when previewing CJK characters - `lsar` usually does a better job recognizing these characters.
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:lsar
+```
+
+## Usage
+
+Add this to your `~/.config/yazi/yazi.toml`:
+
+```toml
+[[plugin.prepend_previewers]]
+mime = "application/{,g}zip"
+run = "lsar"
+
+[[plugin.prepend_previewers]]
+mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}"
+run = "lsar"
+```
+
+Make sure you have `unar` installed, and have `lsar` in your `$PATH`. You can install it with:
+
+```sh
+# Arch Linux
+sudo pacman -S unarchiver
+# macOS
+brew install unar
+# Windows
+scoop install unar
+```
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/lsar.yazi/main.lua b/fedora/.config/yazi/plugins/lsar.yazi/main.lua
new file mode 100644
index 0000000..69bc480
--- /dev/null
+++ b/fedora/.config/yazi/plugins/lsar.yazi/main.lua
@@ -0,0 +1,43 @@
+--- @since 25.5.31
+
+local M = {}
+
+function M:peek(job)
+ local child, err = Command("lsar"):arg(tostring(job.file.url)):stdout(Command.PIPED):spawn()
+ if not child then
+ return ya.err("spawn `lsar` command failed: " .. err)
+ end
+
+ -- Skip the first line which is the archive file itself
+ while true do
+ local _, event = child:read_line()
+ if event == 0 or event ~= 1 then
+ break
+ end
+ end
+
+ local limit = job.area.h
+ local i, lines = 0, {}
+ repeat
+ local next, event = child:read_line()
+ if event ~= 0 then
+ break
+ end
+
+ i = i + 1
+ if i > job.skip then
+ lines[#lines + 1] = next
+ end
+ until i >= job.skip + limit
+
+ child:start_kill()
+ if job.skip > 0 and i < job.skip + limit then
+ ya.emit("peek", { math.max(0, i - limit), only_if = job.file.url, upper_bound = true })
+ else
+ ya.preview_widget(job, ui.Text(lines):area(job.area))
+ end
+end
+
+function M:seek(job) require("code"):seek(job) end
+
+return M
diff --git a/fedora/.config/yazi/plugins/mactag.yazi/README.md b/fedora/.config/yazi/plugins/mactag.yazi/README.md
new file mode 100644
index 0000000..e5c060b
--- /dev/null
+++ b/fedora/.config/yazi/plugins/mactag.yazi/README.md
@@ -0,0 +1,79 @@
+# mactag.yazi
+
+Bring macOS's awesome tagging feature to Yazi! The plugin it's only available for macOS just like the name says.
+
+Authors: [@AnirudhG07](https://github.com/AnirudhG07), and [@sxyazi](https://github.com/sxyazi)
+
+https://github.com/user-attachments/assets/7f26dc6d-67a5-4a85-a99e-4671ece9ae56
+
+## Installation
+
+Install the plugin itself, and [jdberry/tag](https://github.com/jdberry/tag) used to tag files:
+
+```sh
+ya pkg add yazi-rs/plugins:mactag
+brew update && brew install tag
+```
+
+## Setup
+
+Add the following to your `~/.config/yazi/init.lua`:
+
+```lua
+require("mactag"):setup {
+ -- Keys used to add or remove tags
+ keys = {
+ r = "Red",
+ o = "Orange",
+ y = "Yellow",
+ g = "Green",
+ b = "Blue",
+ p = "Purple",
+ },
+ -- Colors used to display tags
+ colors = {
+ Red = "#ee7b70",
+ Orange = "#f5bd5c",
+ Yellow = "#fbe764",
+ Green = "#91fc87",
+ Blue = "#5fa3f8",
+ Purple = "#cb88f8",
+ },
+}
+```
+
+And register it as fetchers in your `~/.config/yazi/yazi.toml`:
+
+```toml
+[[plugin.prepend_fetchers]]
+id = "mactag"
+name = "*"
+run = "mactag"
+
+[[plugin.prepend_fetchers]]
+id = "mactag"
+name = "*/"
+run = "mactag"
+```
+
+## Usage
+
+Besides displaying tags attached to files, you can also add or remove tags within Yazi using this plugin.
+
+Add following keybindings to your `~/.config/yazi/keymap.toml` to enable it:
+
+```toml
+[[mgr.prepend_keymap]]
+on = [ "b", "a" ]
+run = "plugin mactag add"
+desc = "Tag selected files"
+
+[[mgr.prepend_keymap]]
+on = [ "b", "r" ]
+run = "plugin mactag remove"
+desc = "Untag selected files"
+```
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/mactag.yazi/main.lua b/fedora/.config/yazi/plugins/mactag.yazi/main.lua
new file mode 100644
index 0000000..309a46a
--- /dev/null
+++ b/fedora/.config/yazi/plugins/mactag.yazi/main.lua
@@ -0,0 +1,105 @@
+--- @since 25.5.31
+
+local update = ya.sync(function(st, tags)
+ for path, tag in pairs(tags) do
+ st.tags[path] = #tag > 0 and tag or nil
+ end
+ -- TODO: remove this
+ if ui.render then
+ ui.render()
+ else
+ ya.render()
+ end
+end)
+
+local selected_or_hovered = ya.sync(function()
+ local tab, urls = cx.active, {}
+ for _, u in pairs(tab.selected) do
+ urls[#urls + 1] = u
+ end
+ if #urls == 0 and tab.current.hovered then
+ urls[1] = tab.current.hovered.url
+ end
+ return urls
+end)
+
+local function setup(st, opts)
+ st.tags = {}
+ st.keys = opts.keys
+ st.colors = opts.colors
+
+ Linemode:children_add(function(self)
+ local url = tostring(self._file.url)
+ local spans = {}
+ for _, tag in ipairs(st.tags[url] or {}) do
+ if self._file.is_hovered then
+ spans[#spans + 1] = ui.Span(" ●"):bg(st.colors[tag] or "reset")
+ else
+ spans[#spans + 1] = ui.Span(" ●"):fg(st.colors[tag] or "reset")
+ end
+ end
+ return ui.Line(spans)
+ end, 500)
+end
+
+local function fetch(_, job)
+ local paths = {}
+ for _, file in ipairs(job.files) do
+ paths[#paths + 1] = tostring(file.url)
+ end
+
+ local output, err = Command("tag"):arg(paths):stdout(Command.PIPED):output()
+ if not output then
+ return true, Err("Cannot spawn `tag` command, error: %s", err)
+ end
+
+ local i, tags = 1, {}
+ for line in output.stdout:gmatch("[^\r\n]+") do
+ if i > #paths then
+ break
+ end
+ tags[paths[i]] = tags[paths[i]] or {}
+
+ local joint = line:match("\t(.+)$") or ""
+ for s in joint:gmatch("[^,]+") do
+ table.insert(tags[paths[i]], s)
+ end
+ i = i + 1
+ end
+
+ update(tags)
+ return true
+end
+
+local cands = ya.sync(function(st)
+ local t = {}
+ for k, v in pairs(st.keys) do
+ t[#t + 1] = { on = k, desc = v }
+ end
+ return t
+end)
+
+local function entry(self, job)
+ assert(job.args[1] == "add" or job.args[1] == "remove", "Invalid action")
+ ya.emit("escape", { visual = true })
+
+ local cands = cands()
+ local choice = ya.which { cands = cands }
+ if not choice then
+ return
+ end
+
+ local t = { job.args[1] == "remove" and "-r" or "-a", cands[choice].desc }
+ local files = {}
+ for _, url in ipairs(selected_or_hovered()) do
+ t[#t + 1] = tostring(url)
+ files[#files + 1] = { url = url }
+ end
+
+ local status = Command("tag"):arg(t):status()
+ if status.success then
+ fetch(self, { files = files })
+ end
+end
+
+return { setup = setup, fetch = fetch, entry = entry }
diff --git a/fedora/.config/yazi/plugins/mime-ext.yazi/README.md b/fedora/.config/yazi/plugins/mime-ext.yazi/README.md
new file mode 100644
index 0000000..3c2ee1f
--- /dev/null
+++ b/fedora/.config/yazi/plugins/mime-ext.yazi/README.md
@@ -0,0 +1,56 @@
+# mime-ext.yazi
+
+A mime-type provider based on a file extension database, replacing the [builtin `file(1)`](https://github.com/sxyazi/yazi/blob/main/yazi-plugin/preset/plugins/mime.lua) to speed up mime-type retrieval at the expense of accuracy.
+
+See https://yazi-rs.github.io/docs/tips#make-yazi-even-faster for more information.
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:mime-ext
+```
+
+## Usage
+
+Add this to your `~/.config/yazi/yazi.toml`:
+
+```toml
+[[plugin.prepend_fetchers]]
+id = "mime"
+name = "*"
+run = "mime-ext"
+prio = "high"
+```
+
+## Advanced
+
+You can also customize it in your `~/.config/yazi/init.lua` with:
+
+```lua
+require("mime-ext"):setup {
+ -- Expand the existing filename database (lowercase), for example:
+ with_files = {
+ makefile = "text/makefile",
+ -- ...
+ },
+
+ -- Expand the existing extension database (lowercase), for example:
+ with_exts = {
+ mk = "text/makefile",
+ -- ...
+ },
+
+ -- If the mime-type is not in both filename and extension databases,
+ -- then fallback to Yazi's preset `mime` plugin, which uses `file(1)`
+ fallback_file1 = false,
+}
+```
+
+## TODO
+
+- Add more file types (PRs welcome!).
+- Compress mime-type tables.
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/mime-ext.yazi/main.lua b/fedora/.config/yazi/plugins/mime-ext.yazi/main.lua
new file mode 100644
index 0000000..06c0005
--- /dev/null
+++ b/fedora/.config/yazi/plugins/mime-ext.yazi/main.lua
@@ -0,0 +1,1126 @@
+--- @since 25.5.31
+
+local FILES = {
+ [".envrc"] = "text/plain",
+ [".gitconfig"] = "text/plain",
+ [".gitignore"] = "text/plain",
+ [".luacheckrc"] = "text/lua",
+ [".npmrc"] = "text/plain",
+ [".styluaignore"] = "text/plain",
+ [".zshenv"] = "text/plain",
+ [".zshrc"] = "text/plain",
+ ["cargo.lock"] = "application/json",
+ ["flake.lock"] = "application/json",
+ license = "text/plain",
+}
+
+local EXTS = {
+ ["123"] = "application/lotus-1-2-3",
+ ["3dml"] = "text/in3d.3dml",
+ ["3ds"] = "image/3ds",
+ ["3g2"] = "video/3gpp2",
+ ["3gp"] = "video/3gpp",
+ ["7z"] = "application/7z-compressed",
+ ["for"] = "text/fortran",
+ ["in"] = "text/plain",
+ ["n-gage"] = "application/nokia.n-gage.symbian.install",
+ ["sfd-hdstx"] = "application/hydrostatix.sof-data",
+ aab = "application/authorware-bin",
+ aac = "audio/aac",
+ aam = "application/authorware-map",
+ aas = "application/authorware-seg",
+ abw = "application/abiword",
+ ac = "application/pkix-attr-cert",
+ acc = "application/americandynamics.acc",
+ ace = "application/ace-compressed",
+ acu = "application/acucobol",
+ acutc = "application/acucorp",
+ adp = "audio/adpcm",
+ aep = "application/audiograph",
+ afm = "application/font-type1",
+ afp = "application/ibm.modcap",
+ ahead = "application/ahead.space",
+ ai = "application/postscript",
+ aif = "audio/aiff",
+ aifc = "audio/aiff",
+ aiff = "audio/aiff",
+ air = "application/adobe.air-application-installer-package+zip",
+ ait = "application/dvb.ait",
+ ami = "application/amiga.ami",
+ apk = "application/android.package-archive",
+ appcache = "text/cache-manifest",
+ application = "application/ms-application",
+ apr = "application/lotus-approach",
+ arc = "application/freearc",
+ asc = "application/pgp-signature",
+ asf = "video/ms-asf",
+ asm = "text/asm",
+ aso = "application/accpac.simply.aso",
+ ass = "text/ass",
+ asx = "video/ms-asf",
+ atc = "application/acucorp",
+ atom = "application/atom+xml",
+ atomcat = "application/atomcat+xml",
+ atomsvc = "application/atomsvc+xml",
+ atx = "application/antix.game-component",
+ au = "audio/basic",
+ avi = "video/msvideo",
+ avif = "image/avif",
+ aw = "application/applixware",
+ azf = "application/airzip.filesecure.azf",
+ azs = "application/airzip.filesecure.azs",
+ azw = "application/amazon.ebook",
+ bash = "text/shellscript",
+ bat = "application/msdownload",
+ bcpio = "application/bcpio",
+ bdf = "application/font-bdf",
+ bdm = "application/syncml.dm+wbxml",
+ bean = "text/plain",
+ beancount = "text/plain",
+ bed = "application/realvnc.bed",
+ bh2 = "application/fujitsu.oasysprs",
+ bin = "application/octet-stream",
+ blb = "application/blorb",
+ blorb = "application/blorb",
+ bmi = "application/bmi",
+ bmp = "image/bmp",
+ book = "application/framemaker",
+ box = "application/previewsystems.box",
+ boz = "application/bzip2",
+ bpk = "application/octet-stream",
+ btif = "image/prs.btif",
+ bz = "application/bzip",
+ bz2 = "application/bzip2",
+ c = "text/c",
+ c11amc = "application/cluetrust.cartomobile-config",
+ c11amz = "application/cluetrust.cartomobile-config-pkg",
+ c4d = "application/clonk.c4group",
+ c4f = "application/clonk.c4group",
+ c4g = "application/clonk.c4group",
+ c4p = "application/clonk.c4group",
+ c4u = "application/clonk.c4group",
+ cab = "application/ms-cab-compressed",
+ caf = "audio/caf",
+ cap = "application/tcpdump.pcap",
+ car = "application/curl.car",
+ cat = "application/ms-pki.seccat",
+ cb7 = "application/cbr",
+ cba = "application/cbr",
+ cbr = "application/cbr",
+ cbt = "application/cbr",
+ cbz = "application/cbr",
+ cc = "text/c",
+ cct = "application/director",
+ ccxml = "application/ccxml+xml",
+ cdbcmsg = "application/contact.cmsg",
+ cdf = "application/netcdf",
+ cdkey = "application/mediastation.cdkey",
+ cdmia = "application/cdmi-capability",
+ cdmic = "application/cdmi-container",
+ cdmid = "application/cdmi-domain",
+ cdmio = "application/cdmi-object",
+ cdmiq = "application/cdmi-queue",
+ cdx = "chemical/cdx",
+ cdxml = "application/chemdraw+xml",
+ cdy = "application/cinderella",
+ cer = "application/pkix-cert",
+ cfg = "text/plain",
+ cfs = "application/cfs-compressed",
+ cgm = "image/cgm",
+ chat = "application/chat",
+ chm = "application/ms-htmlhelp",
+ chrt = "application/kde.kchart",
+ cif = "chemical/cif",
+ cii = "application/anser-web-certificate-issue-initiation",
+ cil = "application/ms-artgalry",
+ cla = "application/claymore",
+ class = "application/java-vm",
+ clkk = "application/crick.clicker.keyboard",
+ clkp = "application/crick.clicker.palette",
+ clkt = "application/crick.clicker.template",
+ clkw = "application/crick.clicker.wordbank",
+ clkx = "application/crick.clicker",
+ clp = "application/msclip",
+ cmc = "application/cosmocaller",
+ cmdf = "chemical/cmdf",
+ cml = "chemical/cml",
+ cmp = "application/yellowriver-custom-menu",
+ cmx = "image/cmx",
+ cod = "application/rim.cod",
+ com = "application/msdownload",
+ conf = "text/plain",
+ cpio = "application/cpio",
+ cpp = "text/c",
+ cpt = "application/mac-compactpro",
+ crd = "application/mscardfile",
+ crl = "application/pkix-crl",
+ crt = "application/x509-ca-cert",
+ cryptonote = "application/rig.cryptonote",
+ csh = "application/csh",
+ csml = "chemical/csml",
+ csp = "application/commonspace",
+ css = "text/css",
+ cst = "application/director",
+ csv = "text/csv",
+ cu = "application/cu-seeme",
+ curl = "text/curl",
+ cww = "application/prs.cww",
+ cxt = "application/director",
+ cxx = "text/c",
+ dae = "model/collada+xml",
+ daf = "application/mobius.daf",
+ dart = "application/dart",
+ dataless = "application/fdsn.seed",
+ davmount = "application/davmount+xml",
+ dbk = "application/docbook+xml",
+ dcr = "application/director",
+ dcurl = "text/curl.dcurl",
+ dd2 = "application/oma.dd2+xml",
+ ddd = "application/fujixerox.ddd",
+ deb = "application/debian-package",
+ def = "text/plain",
+ deploy = "application/octet-stream",
+ der = "application/x509-ca-cert",
+ dfac = "application/dreamfactory",
+ dgc = "application/dgc-compressed",
+ dic = "text/c",
+ dir = "application/director",
+ dis = "application/mobius.dis",
+ dist = "application/octet-stream",
+ distz = "application/octet-stream",
+ djv = "image/djvu",
+ djvu = "image/djvu",
+ dll = "application/msdownload",
+ dmg = "application/apple-diskimage",
+ dmp = "application/tcpdump.pcap",
+ dms = "application/octet-stream",
+ dna = "application/dna",
+ doc = "application/msword",
+ docm = "application/ms-word.document.macroenabled.12",
+ docx = "application/openxmlformats-officedocument.wordprocessingml.document",
+ dot = "application/msword",
+ dotm = "application/ms-word.template.macroenabled.12",
+ dotx = "application/openxmlformats-officedocument.wordprocessingml.template",
+ dp = "application/osgi.dp",
+ dpg = "application/dpgraph",
+ dra = "audio/dra",
+ dsc = "text/prs.lines.tag",
+ dssc = "application/dssc+der",
+ dtb = "application/dtbook+xml",
+ dtd = "application/xml-dtd",
+ dts = "audio/dts",
+ dtshd = "audio/dts.hd",
+ dump = "application/octet-stream",
+ dvb = "video/dvb.file",
+ dvi = "application/dvi",
+ dwf = "model/dwf",
+ dwg = "image/dwg",
+ dxf = "image/dxf",
+ dxp = "application/spotfire.dxp",
+ dxr = "application/director",
+ ebuild = "application/gentoo.ebuild",
+ ecelp4800 = "audio/nuera.ecelp4800",
+ ecelp7470 = "audio/nuera.ecelp7470",
+ ecelp9600 = "audio/nuera.ecelp9600",
+ eclass = "application/gentoo.eclass",
+ ecma = "application/ecmascript",
+ edm = "application/novadigm.edm",
+ edx = "application/novadigm.edx",
+ efif = "application/picsel",
+ ei6 = "application/pg.osasli",
+ elc = "application/octet-stream",
+ emf = "application/msmetafile",
+ eml = "message/rfc822",
+ emma = "application/emma+xml",
+ emz = "application/msmetafile",
+ env = "text/plain",
+ eol = "audio/digital-winds",
+ eot = "application/ms-fontobject",
+ eps = "application/postscript",
+ epub = "application/epub+zip",
+ es3 = "application/eszigno3+xml",
+ esa = "application/osgi.subsystem",
+ esf = "application/epson.esf",
+ et3 = "application/eszigno3+xml",
+ etx = "text/setext",
+ eva = "application/eva",
+ evy = "application/envoy",
+ exe = "application/msdownload",
+ exi = "application/exi",
+ ext = "application/novadigm.ext",
+ ez = "application/andrew-inset",
+ ez2 = "application/ezpix-album",
+ ez3 = "application/ezpix-package",
+ f = "text/fortran",
+ f4v = "video/f4v",
+ f77 = "text/fortran",
+ f90 = "text/fortran",
+ fbs = "image/fastbidsheet",
+ fcdt = "application/adobe.formscentral.fcdt",
+ fcs = "application/isac.fcs",
+ fdf = "application/fdf",
+ fe_launch = "application/denovo.fcselayout-link",
+ fg5 = "application/fujitsu.oasysgp",
+ fgd = "application/director",
+ fh = "image/freehand",
+ fh4 = "image/freehand",
+ fh5 = "image/freehand",
+ fh7 = "image/freehand",
+ fhc = "image/freehand",
+ fig = "application/xfig",
+ fish = "text/shellscript",
+ flac = "audio/flac",
+ fli = "video/fli",
+ flo = "application/micrografx.flo",
+ flv = "video/flv",
+ flw = "application/kde.kivio",
+ flx = "text/fmi.flexstor",
+ fly = "text/fly",
+ fm = "application/framemaker",
+ fnc = "application/frogans.fnc",
+ fpx = "image/fpx",
+ frame = "application/framemaker",
+ fsc = "application/fsc.weblaunch",
+ fst = "image/fst",
+ ftc = "application/fluxtime.clip",
+ fti = "application/anser-web-funds-transfer-initiation",
+ fvt = "video/fvt",
+ fxp = "application/adobe.fxp",
+ fxpl = "application/adobe.fxp",
+ fzs = "application/fuzzysheet",
+ g2w = "application/geoplan",
+ g3 = "image/g3fax",
+ g3w = "application/geospace",
+ gac = "application/groove-account",
+ gam = "application/tads",
+ gbr = "application/rpki-ghostbusters",
+ gca = "application/gca-compressed",
+ gdl = "model/gdl",
+ geo = "application/dynageo",
+ gex = "application/geometry-explorer",
+ ggb = "application/geogebra.file",
+ ggs = "application/geogebra.slides",
+ ggt = "application/geogebra.tool",
+ ghf = "application/groove-help",
+ gif = "image/gif",
+ gim = "application/groove-identity-message",
+ gml = "application/gml+xml",
+ gmx = "application/gmx",
+ gnumeric = "application/gnumeric",
+ go = "text/go",
+ gph = "application/flographit",
+ gpx = "application/gpx+xml",
+ gqf = "application/grafeq",
+ gqs = "application/grafeq",
+ gram = "application/srgs",
+ gramps = "application/gramps-xml",
+ gre = "application/geometry-explorer",
+ grv = "application/groove-injector",
+ grxml = "application/srgs+xml",
+ gsf = "application/font-ghostscript",
+ gtar = "application/gtar",
+ gtm = "application/groove-tool-message",
+ gtw = "model/gtw",
+ gv = "text/graphviz",
+ gxf = "application/gxf",
+ gxt = "application/geonext",
+ h = "text/c",
+ h261 = "video/h261",
+ h263 = "video/h263",
+ h264 = "video/h264",
+ hal = "application/hal+xml",
+ hbci = "application/hbci",
+ hcl = "text/hcl",
+ hdf = "application/hdf",
+ hh = "text/c",
+ hlp = "application/winhlp",
+ hpgl = "application/hp-hpgl",
+ hpid = "application/hp-hpid",
+ hpp = "text/c",
+ hps = "application/hp-hps",
+ hqx = "application/mac-binhex40",
+ htke = "application/kenameaapp",
+ htm = "text/html",
+ html = "text/html",
+ hvd = "application/yamaha.hv-dic",
+ hvp = "application/yamaha.hv-voice",
+ hvs = "application/yamaha.hv-script",
+ i2g = "application/intergeo",
+ icc = "application/iccprofile",
+ ice = "conference/cooltalk",
+ icm = "application/iccprofile",
+ ico = "image/icon",
+ ics = "text/calendar",
+ ief = "image/ief",
+ ifb = "text/calendar",
+ ifm = "application/shana.informed.formdata",
+ iges = "model/iges",
+ igl = "application/igloader",
+ igm = "application/insors.igm",
+ igs = "model/iges",
+ igx = "application/micrografx.igx",
+ iif = "application/shana.informed.interchange",
+ imp = "application/accpac.simply.imp",
+ ims = "application/ms-ims",
+ ini = "text/plain",
+ ink = "application/inkml+xml",
+ inkml = "application/inkml+xml",
+ install = "application/install-instructions",
+ iota = "application/astraea-software.iota",
+ ipfix = "application/ipfix",
+ ipk = "application/shana.informed.package",
+ irm = "application/ibm.rights-management",
+ irp = "application/irepository.package+xml",
+ iso = "application/iso9660-image",
+ itp = "application/shana.informed.formtemplate",
+ ivp = "application/immervision-ivp",
+ ivu = "application/immervision-ivu",
+ jad = "text/sun.j2me.app-descriptor",
+ jam = "application/jam",
+ jar = "application/java-archive",
+ java = "text/java-source",
+ jisp = "application/jisp",
+ jlt = "application/hp-jlyt",
+ jnlp = "application/java-jnlp-file",
+ joda = "application/joost.joda-archive",
+ jpe = "image/jpeg",
+ jpeg = "image/jpeg",
+ jpg = "image/jpeg",
+ jpgm = "video/jpm",
+ jpgv = "video/jpeg",
+ jpm = "video/jpm",
+ js = "text/javascript",
+ json = "application/json",
+ jsonc = "application/json",
+ jsonml = "application/jsonml+json",
+ jsx = "text/jsx",
+ jxl = "image/jxl",
+ kar = "audio/midi",
+ karbon = "application/kde.karbon",
+ kfo = "application/kde.kformula",
+ kia = "application/kidspiration",
+ kml = "application/google-earth.kml+xml",
+ kmz = "application/google-earth.kmz",
+ kne = "application/kinar",
+ knp = "application/kinar",
+ kon = "application/kde.kontour",
+ kpr = "application/kde.kpresenter",
+ kpt = "application/kde.kpresenter",
+ kpxx = "application/ds-keypoint",
+ ksp = "application/kde.kspread",
+ ktr = "application/kahootz",
+ ktx = "image/ktx",
+ ktz = "application/kahootz",
+ kwd = "application/kde.kword",
+ kwt = "application/kde.kword",
+ lasxml = "application/las.las+xml",
+ latex = "application/latex",
+ lbd = "application/llamagraphics.life-balance.desktop",
+ lbe = "application/llamagraphics.life-balance.exchange+xml",
+ les = "application/hhe.lesson-player",
+ lha = "application/lzh-compressed",
+ link66 = "application/route66.link66+xml",
+ list = "text/plain",
+ list3820 = "application/ibm.modcap",
+ listafp = "application/ibm.modcap",
+ lnk = "application/ms-shortcut",
+ log = "text/plain",
+ lostxml = "application/lost+xml",
+ lrf = "application/octet-stream",
+ lrm = "application/ms-lrm",
+ ltf = "application/frogans.ltf",
+ lua = "text/lua",
+ lvp = "audio/lucent.voice",
+ lwp = "application/lotus-wordpro",
+ lzh = "application/lzh-compressed",
+ m13 = "application/msmediaview",
+ m14 = "application/msmediaview",
+ m1v = "video/mpeg",
+ m21 = "application/mp21",
+ m2a = "audio/mpeg",
+ m2t = "video/mp2t",
+ m2ts = "video/mp2t",
+ m2v = "video/mpeg",
+ m3a = "audio/mpeg",
+ m3u = "audio/mpegurl",
+ m3u8 = "application/apple.mpegurl",
+ m4a = "audio/mp4",
+ m4u = "video/mpegurl",
+ m4v = "video/m4v",
+ ma = "application/mathematica",
+ mads = "application/mads+xml",
+ mag = "application/ecowin.chart",
+ maker = "application/framemaker",
+ man = "text/troff",
+ mar = "application/octet-stream",
+ mathml = "application/mathml+xml",
+ mb = "application/mathematica",
+ mbk = "application/mobius.mbk",
+ mbox = "application/mbox",
+ mc1 = "application/medcalcdata",
+ mcd = "application/mcd",
+ mcurl = "text/curl.mcurl",
+ md = "text/markdown",
+ mdb = "application/msaccess",
+ mdi = "image/ms-modi",
+ me = "text/troff",
+ mesh = "model/mesh",
+ meta4 = "application/metalink4+xml",
+ metalink = "application/metalink+xml",
+ mets = "application/mets+xml",
+ mfm = "application/mfmp",
+ mft = "application/rpki-manifest",
+ mgp = "application/osgeo.mapguide.package",
+ mgz = "application/proteus.magazine",
+ mid = "audio/midi",
+ midi = "audio/midi",
+ mie = "application/mie",
+ mif = "application/mif",
+ mime = "message/rfc822",
+ mj2 = "video/mj2",
+ mjp2 = "video/mj2",
+ mjs = "text/javascript",
+ mk3d = "video/matroska",
+ mka = "audio/matroska",
+ mks = "video/matroska",
+ mkv = "video/matroska",
+ mlp = "application/dolby.mlp",
+ mmd = "application/chipnuts.karaoke-mmd",
+ mmf = "application/smaf",
+ mmr = "image/fujixerox.edmics-mmr",
+ mng = "video/mng",
+ mny = "application/msmoney",
+ mobi = "application/mobipocket-ebook",
+ mods = "application/mods+xml",
+ mov = "video/quicktime",
+ movie = "video/sgi-movie",
+ mp2 = "audio/mpeg",
+ mp21 = "application/mp21",
+ mp2a = "audio/mpeg",
+ mp3 = "audio/mpeg",
+ mp4 = "video/mp4",
+ mp4a = "audio/mp4",
+ mp4s = "application/mp4",
+ mp4v = "video/mp4",
+ mpc = "application/mophun.certificate",
+ mpe = "video/mpeg",
+ mpeg = "video/mpeg",
+ mpg = "video/mpeg",
+ mpg4 = "video/mp4",
+ mpga = "audio/mpeg",
+ mpkg = "application/apple.installer+xml",
+ mpm = "application/blueice.multipass",
+ mpn = "application/mophun.application",
+ mpp = "application/ms-project",
+ mpt = "application/ms-project",
+ mpy = "application/ibm.minipay",
+ mqy = "application/mobius.mqy",
+ mrc = "application/marc",
+ mrcx = "application/marcxml+xml",
+ ms = "text/troff",
+ mscml = "application/mediaservercontrol+xml",
+ mseed = "application/fdsn.mseed",
+ mseq = "application/mseq",
+ msf = "application/epson.msf",
+ msh = "model/mesh",
+ msi = "application/msdownload",
+ msl = "application/mobius.msl",
+ msty = "application/muvee.style",
+ mts = "video/mp2t",
+ mus = "application/musician",
+ musicxml = "application/recordare.musicxml+xml",
+ mvb = "application/msmediaview",
+ mwf = "application/mfer",
+ mxf = "application/mxf",
+ mxl = "application/recordare.musicxml",
+ mxml = "application/xv+xml",
+ mxs = "application/triscape.mxs",
+ mxu = "video/mpegurl",
+ n3 = "text/n3",
+ nb = "application/mathematica",
+ nbp = "application/wolfram.player",
+ nc = "application/netcdf",
+ ncx = "application/dtbncx+xml",
+ nfo = "text/nfo",
+ ngdat = "application/nokia.n-gage.data",
+ nitf = "application/nitf",
+ nix = "text/nix",
+ nlu = "application/neurolanguage.nlu",
+ nml = "application/enliven",
+ nnd = "application/noblenet-directory",
+ nns = "application/noblenet-sealer",
+ nnw = "application/noblenet-web",
+ npx = "image/net-fpx",
+ nsc = "application/conference",
+ nsf = "application/lotus-notes",
+ ntf = "application/nitf",
+ nzb = "application/nzb",
+ oa2 = "application/fujitsu.oasys2",
+ oa3 = "application/fujitsu.oasys3",
+ oas = "application/fujitsu.oasys",
+ obd = "application/msbinder",
+ obj = "application/tgif",
+ oda = "application/oda",
+ odb = "application/oasis.opendocument.database",
+ odc = "application/oasis.opendocument.chart",
+ odf = "application/oasis.opendocument.formula",
+ odft = "application/oasis.opendocument.formula-template",
+ odg = "application/oasis.opendocument.graphics",
+ odi = "application/oasis.opendocument.image",
+ odm = "application/oasis.opendocument.text-master",
+ odp = "application/oasis.opendocument.presentation",
+ ods = "application/oasis.opendocument.spreadsheet",
+ odt = "application/oasis.opendocument.text",
+ oga = "audio/ogg",
+ ogg = "audio/ogg",
+ ogv = "video/ogg",
+ ogx = "application/ogg",
+ omdoc = "application/omdoc+xml",
+ onepkg = "application/onenote",
+ onetmp = "application/onenote",
+ onetoc = "application/onenote",
+ onetoc2 = "application/onenote",
+ opf = "application/oebps-package+xml",
+ opml = "text/opml",
+ oprc = "application/palm",
+ opus = "audio/ogg",
+ org = "application/lotus-organizer",
+ osf = "application/yamaha.openscoreformat",
+ osfpvg = "application/yamaha.openscoreformat.osfpvg+xml",
+ otc = "application/oasis.opendocument.chart-template",
+ otf = "font/otf",
+ otg = "application/oasis.opendocument.graphics-template",
+ oth = "application/oasis.opendocument.text-web",
+ oti = "application/oasis.opendocument.image-template",
+ otp = "application/oasis.opendocument.presentation-template",
+ ots = "application/oasis.opendocument.spreadsheet-template",
+ ott = "application/oasis.opendocument.text-template",
+ oxps = "application/oxps",
+ oxt = "application/openofficeorg.extension",
+ p = "text/pascal",
+ p10 = "application/pkcs10",
+ p12 = "application/pkcs12",
+ p7b = "application/pkcs7-certificates",
+ p7c = "application/pkcs7-mime",
+ p7m = "application/pkcs7-mime",
+ p7r = "application/pkcs7-certreqresp",
+ p7s = "application/pkcs7-signature",
+ p8 = "application/pkcs8",
+ pas = "text/pascal",
+ patch = "text/diff",
+ paw = "application/pawaafile",
+ pbd = "application/powerbuilder6",
+ pbm = "image/portable-bitmap",
+ pcap = "application/tcpdump.pcap",
+ pcf = "application/font-pcf",
+ pcl = "application/hp-pcl",
+ pclxl = "application/hp-pclxl",
+ pct = "image/pict",
+ pcurl = "application/curl.pcurl",
+ pcx = "image/pcx",
+ pdb = "application/palm",
+ pdf = "application/pdf",
+ pfa = "application/font-type1",
+ pfb = "application/font-type1",
+ pfm = "application/font-type1",
+ pfr = "application/font-tdpfr",
+ pfx = "application/pkcs12",
+ pgm = "image/portable-graymap",
+ pgn = "application/chess-pgn",
+ pgp = "application/pgp-encrypted",
+ php = "text/php",
+ pic = "image/pict",
+ pkg = "application/octet-stream",
+ pki = "application/pkixcmp",
+ pkipath = "application/pkix-pkipath",
+ plb = "application/3gpp.pic-bw-large",
+ plc = "application/mobius.plc",
+ plf = "application/pocketlearn",
+ pls = "application/pls+xml",
+ pml = "application/ctc-posml",
+ png = "image/png",
+ pnm = "image/portable-anymap",
+ portpkg = "application/macports.portpkg",
+ pot = "application/ms-powerpoint",
+ potm = "application/ms-powerpoint.template.macroenabled.12",
+ potx = "application/openxmlformats-officedocument.presentationml.template",
+ ppam = "application/ms-powerpoint.addin.macroenabled.12",
+ ppd = "application/cups-ppd",
+ ppm = "image/portable-pixmap",
+ pps = "application/ms-powerpoint",
+ ppsm = "application/ms-powerpoint.slideshow.macroenabled.12",
+ ppsx = "application/openxmlformats-officedocument.presentationml.slideshow",
+ ppt = "application/ms-powerpoint",
+ pptm = "application/ms-powerpoint.presentation.macroenabled.12",
+ pptx = "application/openxmlformats-officedocument.presentationml.presentation",
+ pqa = "application/palm",
+ prc = "application/mobipocket-ebook",
+ pre = "application/lotus-freelance",
+ prf = "application/pics-rules",
+ ps = "application/postscript",
+ psb = "application/3gpp.pic-bw-small",
+ psd = "image/adobe.photoshop",
+ psf = "application/font-linux-psf",
+ pskcxml = "application/pskc+xml",
+ ptid = "application/pvi.ptid1",
+ pub = "application/mspublisher",
+ pvb = "application/3gpp.pic-bw-var",
+ pwn = "application/3m.post-it-notes",
+ py = "text/python",
+ pya = "audio/ms-playready.media.pya",
+ pyv = "video/ms-playready.media.pyv",
+ qam = "application/epson.quickanime",
+ qbo = "application/intu.qbo",
+ qfx = "application/intu.qfx",
+ qml = "text/qml",
+ qps = "application/publishare-delta-tree",
+ qt = "video/quicktime",
+ qwd = "application/quark.quarkxpress",
+ qwt = "application/quark.quarkxpress",
+ qxb = "application/quark.quarkxpress",
+ qxd = "application/quark.quarkxpress",
+ qxl = "application/quark.quarkxpress",
+ qxt = "application/quark.quarkxpress",
+ r = "text/r",
+ ra = "audio/pn-realaudio",
+ ram = "audio/pn-realaudio",
+ rar = "application/rar",
+ ras = "image/cmu-raster",
+ rb = "text/ruby",
+ rcprofile = "application/ipunplugged.rcprofile",
+ rdf = "application/rdf+xml",
+ rdz = "application/data-vision.rdz",
+ rep = "application/businessobjects",
+ res = "application/dtbresource+xml",
+ rgb = "image/rgb",
+ rif = "application/reginfo+xml",
+ rip = "audio/rip",
+ ris = "application/research-info-systems",
+ rl = "application/resource-lists+xml",
+ rlc = "image/fujixerox.edmics-rlc",
+ rld = "application/resource-lists-diff+xml",
+ rm = "application/rn-realmedia",
+ rmi = "audio/midi",
+ rmp = "audio/pn-realaudio-plugin",
+ rms = "application/jcp.javame.midlet-rms",
+ rmvb = "application/rn-realmedia-vbr",
+ rnc = "application/relax-ng-compact-syntax",
+ roa = "application/rpki-roa",
+ roff = "text/troff",
+ rp9 = "application/cloanto.rp9",
+ rpm = "application/rpm",
+ rpss = "application/nokia.radio-presets",
+ rpst = "application/nokia.radio-preset",
+ rq = "application/sparql-query",
+ rs = "text/rust",
+ rsd = "application/rsd+xml",
+ rss = "application/rss+xml",
+ rtf = "application/rtf",
+ rtx = "text/richtext",
+ s = "text/asm",
+ s3m = "audio/s3m",
+ saf = "application/yamaha.smaf-audio",
+ sbml = "application/sbml+xml",
+ sc = "application/ibm.secure-container",
+ scd = "application/msschedule",
+ scm = "application/lotus-screencam",
+ scq = "application/scvp-cv-request",
+ scs = "application/scvp-cv-response",
+ scss = "text/scss",
+ scurl = "text/curl.scurl",
+ sda = "application/stardivision.draw",
+ sdc = "application/stardivision.calc",
+ sdd = "application/stardivision.impress",
+ sdkd = "application/solent.sdkm+xml",
+ sdkm = "application/solent.sdkm+xml",
+ sdp = "application/sdp",
+ sdw = "application/stardivision.writer",
+ see = "application/seemail",
+ seed = "application/fdsn.seed",
+ sema = "application/sema",
+ semd = "application/semd",
+ semf = "application/semf",
+ ser = "application/java-serialized-object",
+ setpay = "application/set-payment-initiation",
+ setreg = "application/set-registration-initiation",
+ sfs = "application/spotfire.sfs",
+ sfv = "text/sfv",
+ sgi = "image/sgi",
+ sgl = "application/stardivision.writer-global",
+ sgm = "text/sgml",
+ sgml = "text/sgml",
+ sh = "text/shellscript",
+ shar = "application/shar",
+ shf = "application/shf+xml",
+ sid = "image/mrsid-image",
+ sig = "application/pgp-signature",
+ sil = "audio/silk",
+ silo = "model/mesh",
+ sis = "application/symbian.install",
+ sisx = "application/symbian.install",
+ sit = "application/stuffit",
+ sitx = "application/stuffitx",
+ skd = "application/koan",
+ skm = "application/koan",
+ skp = "application/koan",
+ skt = "application/koan",
+ sldm = "application/ms-powerpoint.slide.macroenabled.12",
+ sldx = "application/openxmlformats-officedocument.presentationml.slide",
+ slt = "application/epson.salt",
+ sm = "application/stepmania.stepchart",
+ smf = "application/stardivision.math",
+ smi = "application/smil+xml",
+ smil = "application/smil+xml",
+ smv = "video/smv",
+ smzip = "application/stepmania.package",
+ snd = "audio/basic",
+ snf = "application/font-snf",
+ so = "application/octet-stream",
+ spc = "application/pkcs7-certificates",
+ spf = "application/yamaha.smaf-phrase",
+ spl = "application/futuresplash",
+ spot = "text/in3d.spot",
+ spp = "application/scvp-vp-response",
+ spq = "application/scvp-vp-request",
+ spx = "audio/ogg",
+ sql = "application/sql",
+ src = "application/wais-source",
+ srt = "application/subrip",
+ sru = "application/sru+xml",
+ srx = "application/sparql-results+xml",
+ ssdl = "application/ssdl+xml",
+ sse = "application/kodak-descriptor",
+ ssf = "application/epson.ssf",
+ ssml = "application/ssml+xml",
+ st = "application/sailingtracker.track",
+ stc = "application/sun.xml.calc.template",
+ std = "application/sun.xml.draw.template",
+ stf = "application/wt.stf",
+ sti = "application/sun.xml.impress.template",
+ stk = "application/hyperstudio",
+ stl = "application/ms-pki.stl",
+ str = "application/pg.format",
+ stw = "application/sun.xml.writer.template",
+ sub = "text/dvb.subtitle",
+ sus = "application/sus-calendar",
+ susp = "application/sus-calendar",
+ sv4cpio = "application/sv4cpio",
+ sv4crc = "application/sv4crc",
+ svc = "application/dvb.service",
+ svd = "application/svd",
+ svg = "image/svg+xml",
+ svgz = "image/svg+xml",
+ swa = "application/director",
+ swf = "application/shockwave-flash",
+ swi = "application/aristanetworks.swi",
+ sxc = "application/sun.xml.calc",
+ sxd = "application/sun.xml.draw",
+ sxg = "application/sun.xml.writer.global",
+ sxi = "application/sun.xml.impress",
+ sxm = "application/sun.xml.math",
+ sxw = "application/sun.xml.writer",
+ t = "text/troff",
+ t3 = "application/t3vm-image",
+ taglet = "application/mynfc",
+ tao = "application/tao.intent-module-archive",
+ tar = "application/tar",
+ tcap = "application/3gpp2.tcap",
+ tcl = "application/tcl",
+ teacher = "application/smart.teacher",
+ tei = "application/tei+xml",
+ teicorpus = "application/tei+xml",
+ tex = "application/tex",
+ texi = "application/texinfo",
+ texinfo = "application/texinfo",
+ text = "text/plain",
+ tf = "text/hcl",
+ tfi = "application/thraud+xml",
+ tfm = "application/tex-tfm",
+ tfrc = "text/hcl",
+ tfstate = "application/json",
+ tfvars = "text/hcl",
+ tga = "image/tga",
+ thmx = "application/ms-officetheme",
+ tif = "image/tiff",
+ tiff = "image/tiff",
+ tmo = "application/tmobile-livetv",
+ toml = "text/toml",
+ torrent = "application/bittorrent",
+ tpl = "application/groove-tool-template",
+ tpt = "application/trid.tpt",
+ tr = "text/troff",
+ tra = "application/trueapp",
+ trm = "application/msterminal",
+ ts = "text/typescript",
+ tsd = "application/timestamped-data",
+ tsv = "text/tab-separated-values",
+ tsx = "text/tsx",
+ ttc = "font/collection",
+ ttf = "font/ttf",
+ ttl = "text/turtle",
+ twd = "application/simtech-mindmapper",
+ twds = "application/simtech-mindmapper",
+ txd = "application/genomatix.tuxedo",
+ txf = "application/mobius.txf",
+ txt = "text/plain",
+ u32 = "application/authorware-bin",
+ udeb = "application/debian-package",
+ ufd = "application/ufdl",
+ ufdl = "application/ufdl",
+ ulx = "application/glulx",
+ umj = "application/umajin",
+ unityweb = "application/unity",
+ uoml = "application/uoml+xml",
+ uri = "text/uri-list",
+ uris = "text/uri-list",
+ urls = "text/uri-list",
+ ustar = "application/ustar",
+ utz = "application/uiq.theme",
+ uu = "text/uuencode",
+ uva = "audio/dece.audio",
+ uvd = "application/dece.data",
+ uvf = "application/dece.data",
+ uvg = "image/dece.graphic",
+ uvh = "video/dece.hd",
+ uvi = "image/dece.graphic",
+ uvm = "video/dece.mobile",
+ uvp = "video/dece.pd",
+ uvs = "video/dece.sd",
+ uvt = "application/dece.ttml+xml",
+ uvu = "video/uvvu.mp4",
+ uvv = "video/dece.video",
+ uvva = "audio/dece.audio",
+ uvvd = "application/dece.data",
+ uvvf = "application/dece.data",
+ uvvg = "image/dece.graphic",
+ uvvh = "video/dece.hd",
+ uvvi = "image/dece.graphic",
+ uvvm = "video/dece.mobile",
+ uvvp = "video/dece.pd",
+ uvvs = "video/dece.sd",
+ uvvt = "application/dece.ttml+xml",
+ uvvu = "video/uvvu.mp4",
+ uvvv = "video/dece.video",
+ uvvx = "application/dece.unspecified",
+ uvvz = "application/dece.zip",
+ uvx = "application/dece.unspecified",
+ uvz = "application/dece.zip",
+ vcard = "text/vcard",
+ vcd = "application/cdlink",
+ vcf = "text/vcard",
+ vcg = "application/groove-vcard",
+ vcs = "text/vcalendar",
+ vcx = "application/vcx",
+ vis = "application/visionary",
+ viv = "video/vivo",
+ vob = "video/ms-vob",
+ vor = "application/stardivision.writer",
+ vox = "application/authorware-bin",
+ vrml = "model/vrml",
+ vsd = "application/visio",
+ vsf = "application/vsf",
+ vss = "application/visio",
+ vst = "application/visio",
+ vsw = "application/visio",
+ vtu = "model/vtu",
+ vxml = "application/voicexml+xml",
+ w3d = "application/director",
+ wad = "application/doom",
+ wasm = "application/wasm",
+ wav = "audio/wav",
+ wax = "audio/ms-wax",
+ wbmp = "image/wap.wbmp",
+ wbs = "application/criticaltools.wbs+xml",
+ wbxml = "application/wap.wbxml",
+ wcm = "application/ms-works",
+ wdb = "application/ms-works",
+ wdp = "image/ms-photo",
+ weba = "audio/webm",
+ webm = "video/webm",
+ webp = "image/webp",
+ wg = "application/pmi.widget",
+ wgt = "application/widget",
+ wks = "application/ms-works",
+ wm = "video/ms-wm",
+ wma = "audio/ms-wma",
+ wmd = "application/ms-wmd",
+ wmf = "application/msmetafile",
+ wml = "text/wap.wml",
+ wmlc = "application/wap.wmlc",
+ wmls = "text/wap.wmlscript",
+ wmlsc = "application/wap.wmlscriptc",
+ wmv = "video/ms-wmv",
+ wmx = "video/ms-wmx",
+ wmz = "application/ms-wmz",
+ woff = "font/woff",
+ woff2 = "font/woff2",
+ wpd = "application/wordperfect",
+ wpl = "application/ms-wpl",
+ wps = "application/ms-works",
+ wqd = "application/wqd",
+ wri = "application/mswrite",
+ wrl = "model/vrml",
+ wsdl = "application/wsdl+xml",
+ wspolicy = "application/wspolicy+xml",
+ wtb = "application/webturbo",
+ wvx = "video/ms-wvx",
+ x32 = "application/authorware-bin",
+ x3d = "model/x3d+xml",
+ x3db = "model/x3d+binary",
+ x3dbz = "model/x3d+binary",
+ x3dv = "model/x3d+vrml",
+ x3dvz = "model/x3d+vrml",
+ x3dz = "model/x3d+xml",
+ xaml = "application/xaml+xml",
+ xap = "application/silverlight-app",
+ xar = "application/xara",
+ xbap = "application/ms-xbap",
+ xbd = "application/fujixerox.docuworks.binder",
+ xbm = "image/xbitmap",
+ xdf = "application/xcap-diff+xml",
+ xdm = "application/syncml.dm+xml",
+ xdp = "application/adobe.xdp+xml",
+ xdssc = "application/dssc+xml",
+ xdw = "application/fujixerox.docuworks",
+ xenc = "application/xenc+xml",
+ xer = "application/patch-ops-error+xml",
+ xfdf = "application/adobe.xfdf",
+ xfdl = "application/xfdl",
+ xht = "application/xhtml+xml",
+ xhtml = "application/xhtml+xml",
+ xhvml = "application/xv+xml",
+ xif = "image/xiff",
+ xla = "application/ms-excel",
+ xlam = "application/ms-excel.addin.macroenabled.12",
+ xlc = "application/ms-excel",
+ xlf = "application/xliff+xml",
+ xlm = "application/ms-excel",
+ xls = "application/ms-excel",
+ xlsb = "application/ms-excel.sheet.binary.macroenabled.12",
+ xlsm = "application/ms-excel.sheet.macroenabled.12",
+ xlsx = "application/openxmlformats-officedocument.spreadsheetml.sheet",
+ xlt = "application/ms-excel",
+ xltm = "application/ms-excel.template.macroenabled.12",
+ xltx = "application/openxmlformats-officedocument.spreadsheetml.template",
+ xlw = "application/ms-excel",
+ xm = "audio/xm",
+ xml = "application/xml",
+ xo = "application/olpc-sugar",
+ xop = "application/xop+xml",
+ xpak = "application/gentoo.xpak",
+ xpi = "application/xpinstall",
+ xpl = "application/xproc+xml",
+ xpm = "image/xpixmap",
+ xpr = "application/is-xpr",
+ xps = "application/ms-xpsdocument",
+ xpw = "application/intercon.formnet",
+ xpx = "application/intercon.formnet",
+ xsl = "application/xml",
+ xslt = "application/xslt+xml",
+ xsm = "application/syncml+xml",
+ xspf = "application/xspf+xml",
+ xul = "application/mozilla.xul+xml",
+ xvm = "application/xv+xml",
+ xvml = "application/xv+xml",
+ xwd = "image/xwindowdump",
+ xyz = "chemical/xyz",
+ xz = "application/xz",
+ yaml = "text/yaml",
+ yang = "application/yang",
+ yin = "application/yin+xml",
+ yml = "text/yaml",
+ z1 = "application/zmachine",
+ z2 = "application/zmachine",
+ z3 = "application/zmachine",
+ z4 = "application/zmachine",
+ z5 = "application/zmachine",
+ z6 = "application/zmachine",
+ z7 = "application/zmachine",
+ z8 = "application/zmachine",
+ zaz = "application/zzazz.deck+xml",
+ zip = "application/zip",
+ zir = "application/zul",
+ zirz = "application/zul",
+ zmm = "application/handheld-entertainment+xml",
+ zsh = "text/shellscript",
+}
+
+local options = ya.sync(
+ function(st)
+ return {
+ with_files = st.with_files,
+ with_exts = st.with_exts,
+ fallback_file1 = st.fallback_file1,
+ }
+ end
+)
+
+local M = {}
+
+function M:setup(opts)
+ opts = opts or {}
+
+ self.with_files = opts.with_files
+ self.with_exts = opts.with_exts
+ self.fallback_file1 = opts.fallback_file1
+end
+
+function M:fetch(job)
+ local opts = options()
+ local merged_files = ya.dict_merge(FILES, opts.with_files or {})
+ local merged_exts = ya.dict_merge(EXTS, opts.with_exts or {})
+
+ local updates, unknown, state = {}, {}, {}
+ for i, file in ipairs(job.files) do
+ if file.cha.is_dummy then
+ state[i] = false
+ goto continue
+ end
+
+ local mime
+ if file.cha.len == 0 then
+ mime = "inode/empty"
+ else
+ mime = merged_files[(file.url.name or ""):lower()]
+ mime = mime or merged_exts[(file.url.ext or ""):lower()]
+ end
+
+ if mime then
+ updates[tostring(file.url)], state[i] = mime, true
+ elseif opts.fallback_file1 then
+ unknown[#unknown + 1] = file
+ else
+ updates[tostring(file.url)], state[i] = "application/octet-stream", true
+ end
+ ::continue::
+ end
+
+ if next(updates) then
+ ya.emit("update_mimes", { updates = updates })
+ end
+
+ if #unknown > 0 then
+ return self.fallback_builtin(job, unknown, state)
+ end
+
+ return state
+end
+
+function M.fallback_builtin(job, unknown, state)
+ local indices = {}
+ for i, f in ipairs(job.files) do
+ indices[f:hash()] = i
+ end
+
+ local result = require("mime"):fetch(ya.dict_merge(job, { files = unknown }))
+ for i, f in ipairs(unknown) do
+ if type(result) == "table" then
+ state[indices[f:hash()]] = result[i]
+ else
+ state[indices[f:hash()]] = result
+ end
+ end
+ return state
+end
+
+return M
diff --git a/fedora/.config/yazi/plugins/mount.yazi/README.md b/fedora/.config/yazi/plugins/mount.yazi/README.md
new file mode 100644
index 0000000..b35881f
--- /dev/null
+++ b/fedora/.config/yazi/plugins/mount.yazi/README.md
@@ -0,0 +1,48 @@
+# mount.yazi
+
+A mount manager for Yazi, providing disk mount, unmount, and eject functionality.
+
+Supported platforms:
+
+- Linux with [`udisksctl`](https://github.com/storaged-project/udisks), `lsblk` and `eject` both provided by [`util-linux`](https://github.com/util-linux/util-linux)
+- macOS with `diskutil`, which is pre-installed
+
+https://github.com/user-attachments/assets/c6f780ab-458b-420f-85cf-2fc45fcfe3a2
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:mount
+```
+
+## Usage
+
+Add this to your `~/.config/yazi/keymap.toml`:
+
+```toml
+[[mgr.prepend_keymap]]
+on = "M"
+run = "plugin mount"
+```
+
+Available keybindings:
+
+| Key binding | Alternate key | Action |
+| ------------ | ------------- | --------------------- |
+| <kbd>q</kbd> | - | Quit the plugin |
+| <kbd>k</kbd> | <kbd>↑</kbd> | Move up |
+| <kbd>j</kbd> | <kbd>↓</kbd> | Move down |
+| <kbd>l</kbd> | <kbd>→</kbd> | Enter the mount point |
+| <kbd>m</kbd> | - | Mount the partition |
+| <kbd>u</kbd> | - | Unmount the partition |
+| <kbd>e</kbd> | - | Eject the disk |
+
+## TODO
+
+- Custom keybindings
+- Windows support (I don't use Windows myself, PRs welcome!)
+- Support mount, unmount, and eject the entire disk
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/mount.yazi/main.lua b/fedora/.config/yazi/plugins/mount.yazi/main.lua
new file mode 100644
index 0000000..31c2e28
--- /dev/null
+++ b/fedora/.config/yazi/plugins/mount.yazi/main.lua
@@ -0,0 +1,304 @@
+--- @since 25.5.31
+
+local toggle_ui = ya.sync(function(self)
+ if self.children then
+ Modal:children_remove(self.children)
+ self.children = nil
+ else
+ self.children = Modal:children_add(self, 10)
+ end
+ -- TODO: remove this
+ if ui.render then
+ ui.render()
+ else
+ ya.render()
+ end
+end)
+
+local subscribe = ya.sync(function(self)
+ ps.unsub("mount")
+ ps.sub("mount", function() ya.emit("plugin", { self._id, "refresh" }) end)
+end)
+
+local update_partitions = ya.sync(function(self, partitions)
+ self.partitions = partitions
+ self.cursor = math.max(0, math.min(self.cursor or 0, #self.partitions - 1))
+ -- TODO: remove this
+ if ui.render then
+ ui.render()
+ else
+ ya.render()
+ end
+end)
+
+local active_partition = ya.sync(function(self) return self.partitions[self.cursor + 1] end)
+
+local update_cursor = ya.sync(function(self, cursor)
+ if #self.partitions == 0 then
+ self.cursor = 0
+ else
+ self.cursor = ya.clamp(0, self.cursor + cursor, #self.partitions - 1)
+ end
+ -- TODO: remove this
+ if ui.render then
+ ui.render()
+ else
+ ya.render()
+ end
+end)
+
+local M = {
+ keys = {
+ { on = "q", run = "quit" },
+
+ { on = "k", run = "up" },
+ { on = "j", run = "down" },
+ { on = "l", run = { "enter", "quit" } },
+
+ { on = "<Up>", run = "up" },
+ { on = "<Down>", run = "down" },
+ { on = "<Right>", run = { "enter", "quit" } },
+
+ { on = "m", run = "mount" },
+ { on = "u", run = "unmount" },
+ { on = "e", run = "eject" },
+ },
+}
+
+function M:new(area)
+ self:layout(area)
+ return self
+end
+
+function M:layout(area)
+ local chunks = ui.Layout()
+ :constraints({
+ ui.Constraint.Percentage(10),
+ ui.Constraint.Percentage(80),
+ ui.Constraint.Percentage(10),
+ })
+ :split(area)
+
+ local chunks = ui.Layout()
+ :direction(ui.Layout.HORIZONTAL)
+ :constraints({
+ ui.Constraint.Percentage(10),
+ ui.Constraint.Percentage(80),
+ ui.Constraint.Percentage(10),
+ })
+ :split(chunks[2])
+
+ self._area = chunks[2]
+end
+
+function M:entry(job)
+ if job.args[1] == "refresh" then
+ return update_partitions(self.obtain())
+ end
+
+ toggle_ui()
+ update_partitions(self.obtain())
+ subscribe()
+
+ local tx1, rx1 = ya.chan("mpsc")
+ local tx2, rx2 = ya.chan("mpsc")
+ function producer()
+ while true do
+ local cand = self.keys[ya.which { cands = self.keys, silent = true }] or { run = {} }
+ for _, r in ipairs(type(cand.run) == "table" and cand.run or { cand.run }) do
+ tx1:send(r)
+ if r == "quit" then
+ toggle_ui()
+ return
+ end
+ end
+ end
+ end
+
+ function consumer1()
+ repeat
+ local run = rx1:recv()
+ if run == "quit" then
+ tx2:send(run)
+ break
+ elseif run == "up" then
+ update_cursor(-1)
+ elseif run == "down" then
+ update_cursor(1)
+ elseif run == "enter" then
+ local active = active_partition()
+ if active and active.dist then
+ ya.emit("cd", { active.dist })
+ end
+ else
+ tx2:send(run)
+ end
+ until not run
+ end
+
+ function consumer2()
+ repeat
+ local run = rx2:recv()
+ if run == "quit" then
+ break
+ elseif run == "mount" then
+ self.operate("mount")
+ elseif run == "unmount" then
+ self.operate("unmount")
+ elseif run == "eject" then
+ self.operate("eject")
+ end
+ until not run
+ end
+
+ ya.join(producer, consumer1, consumer2)
+end
+
+function M:reflow() return { self } end
+
+function M:redraw()
+ local rows = {}
+ for _, p in ipairs(self.partitions or {}) do
+ if not p.sub then
+ rows[#rows + 1] = ui.Row { p.main }
+ elseif p.sub == "" then
+ rows[#rows + 1] = ui.Row { p.main, p.label or "", p.dist or "", p.fstype or "" }
+ else
+ rows[#rows + 1] = ui.Row { " " .. p.sub, p.label or "", p.dist or "", p.fstype or "" }
+ end
+ end
+
+ return {
+ ui.Clear(self._area),
+ ui.Border(ui.Edge.ALL)
+ :area(self._area)
+ :type(ui.Border.ROUNDED)
+ :style(ui.Style():fg("blue"))
+ :title(ui.Line("Mount"):align(ui.Align.CENTER)),
+ ui.Table(rows)
+ :area(self._area:pad(ui.Pad(1, 2, 1, 2)))
+ :header(ui.Row({ "Src", "Label", "Dist", "FSType" }):style(ui.Style():bold()))
+ :row(self.cursor)
+ :row_style(ui.Style():fg("blue"):underline())
+ :widths {
+ ui.Constraint.Length(20),
+ ui.Constraint.Length(20),
+ ui.Constraint.Percentage(70),
+ ui.Constraint.Length(10),
+ },
+ }
+end
+
+function M.obtain()
+ local tbl = {}
+ local last
+ for _, p in ipairs(fs.partitions()) do
+ local main, sub = M.split(p.src)
+ if main and last ~= main then
+ if p.src == main then
+ last, p.main, p.sub, tbl[#tbl + 1] = p.src, p.src, "", p
+ else
+ last, tbl[#tbl + 1] = main, { src = main, main = main, sub = "" }
+ end
+ end
+ if sub then
+ if tbl[#tbl].sub == "" and tbl[#tbl].main == main then
+ tbl[#tbl].sub = nil
+ end
+ p.main, p.sub, tbl[#tbl + 1] = main, sub, p
+ end
+ end
+ table.sort(M.fillin(tbl), function(a, b)
+ if a.main == b.main then
+ return (a.sub or "") < (b.sub or "")
+ else
+ return a.main > b.main
+ end
+ end)
+ return tbl
+end
+
+function M.split(src)
+ local pats = {
+ { "^/dev/sd[a-z]", "%d+$" }, -- /dev/sda1
+ { "^/dev/nvme%d+n%d+", "p%d+$" }, -- /dev/nvme0n1p1
+ { "^/dev/mmcblk%d+", "p%d+$" }, -- /dev/mmcblk0p1
+ { "^/dev/disk%d+", ".+$" }, -- /dev/disk1s1
+ { "^/dev/sr%d+", ".+$" }, -- /dev/sr0
+ }
+ for _, p in ipairs(pats) do
+ local main = src:match(p[1])
+ if main then
+ return main, src:sub(#main + 1):match(p[2])
+ end
+ end
+end
+
+function M.fillin(tbl)
+ if ya.target_os() ~= "linux" then
+ return tbl
+ end
+
+ local sources, indices = {}, {}
+ for i, p in ipairs(tbl) do
+ if p.sub and not p.fstype then
+ sources[#sources + 1], indices[p.src] = p.src, i
+ end
+ end
+ if #sources == 0 then
+ return tbl
+ end
+
+ local output, err = Command("lsblk"):arg({ "-p", "-o", "name,fstype", "-J" }):arg(sources):output()
+ if err then
+ ya.dbg("Failed to fetch filesystem types for unmounted partitions: " .. err)
+ return tbl
+ end
+
+ local t = ya.json_decode(output and output.stdout or "")
+ for _, p in ipairs(t and t.blockdevices or {}) do
+ tbl[indices[p.name]].fstype = p.fstype
+ end
+ return tbl
+end
+
+function M.operate(type)
+ local active = active_partition()
+ if not active then
+ return
+ elseif not active.sub then
+ return -- TODO: mount/unmount main disk
+ end
+
+ local output, err
+ if ya.target_os() == "macos" then
+ output, err = Command("diskutil"):arg({ type, active.src }):output()
+ end
+ if ya.target_os() == "linux" then
+ if type == "eject" and active.src:match("^/dev/sr%d+") then
+ Command("udisksctl"):arg({ "unmount", "-b", active.src }):status()
+ output, err = Command("eject"):arg({ "--traytoggle", active.src }):output()
+ elseif type == "eject" then
+ Command("udisksctl"):arg({ "unmount", "-b", active.src }):status()
+ output, err = Command("udisksctl"):arg({ "power-off", "-b", active.src }):output()
+ else
+ output, err = Command("udisksctl"):arg({ type, "-b", active.src }):output()
+ end
+ end
+
+ if not output then
+ M.fail("Failed to %s `%s`: %s", type, active.src, err)
+ elseif not output.status.success then
+ M.fail("Failed to %s `%s`: %s", type, active.src, output.stderr)
+ end
+end
+
+function M.fail(...) ya.notify { title = "Mount", content = string.format(...), timeout = 10, level = "error" } end
+
+function M:click() end
+
+function M:scroll() end
+
+function M:touch() end
+
+return M
diff --git a/fedora/.config/yazi/plugins/office.yazi/LICENSE b/fedora/.config/yazi/plugins/office.yazi/LICENSE
new file mode 100644
index 0000000..fb5b1d6
--- /dev/null
+++ b/fedora/.config/yazi/plugins/office.yazi/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 yazi-rs
+
+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.
diff --git a/fedora/.config/yazi/plugins/office.yazi/README.md b/fedora/.config/yazi/plugins/office.yazi/README.md
new file mode 100644
index 0000000..c6fdf37
--- /dev/null
+++ b/fedora/.config/yazi/plugins/office.yazi/README.md
@@ -0,0 +1,76 @@
+<div align="center">
+
+# office.yazi
+### A plugin to preview office documents in <a href="https://github.com/sxyazi/yazi">Yazi <img src="https://github.com/sxyazi/yazi/blob/main/assets/logo.png?raw=true" alt="a duck" width="24px" height="24px"></a>
+
+<img src="https://github.com/macydnah/office.yazi/blob/assets/preview_test.gif" alt="preview test" width="88%">
+
+##
+
+</div>
+
+## Installation
+> [!TIP]
+> Installing this plugin with `ya` will conveniently clone the plugin from GitHub,
+> copy it to your plugins directory, and update the `package.toml` to lock its version [^1].
+>
+> To install it with `ya` run:
+> ```sh
+> ya pkg add macydnah/office
+> ```
+
+> Or if you prefer a manual approach:
+> ```sh
+> ## For linux and MacOS
+> git clone https://github.com/macydnah/office.yazi.git ~/.config/yazi/plugins/office.yazi
+>
+> ## For Windows
+> git clone https://github.com/macydnah/office.yazi.git %AppData%\yazi\config\plugins\office.yazi
+> ```
+
+## Usage
+In your `yazi.toml` add rules to preloaders[^2] and previewers[^3] to run `office` plugin with office documents.
+
+> [!NOTE]
+> Your config may be different depending if you're *appending*, *prepending* or *overriding* default rules.
+> If unsure, take a look at [Configuration](https://yazi-rs.github.io/docs/configuration/overview)[^4]
+> and [Configuration mixing](https://yazi-rs.github.io/docs/configuration/overview#mixing)[^5]
+
+For a general usecase, you may use the following rules
+```toml
+[plugin]
+
+prepend_preloaders = [
+ # Office Documents
+ { mime = "application/openxmlformats-officedocument.*", run = "office" },
+ { mime = "application/oasis.opendocument.*", run = "office" },
+ { mime = "application/ms-*", run = "office" },
+ { mime = "application/msword", run = "office" },
+ { name = "*.docx", run = "office" },
+]
+
+prepend_previewers = [
+ # Office Documents
+ { mime = "application/openxmlformats-officedocument.*", run = "office" },
+ { mime = "application/oasis.opendocument.*", run = "office" },
+ { mime = "application/ms-*", run = "office" },
+ { mime = "application/msword", run = "office" },
+ { name = "*.docx", run = "office" },
+]
+```
+
+## Dependencies
+> [!IMPORTANT]
+> Make sure that these commands are installed in your system and can be found in `PATH`:
+>
+> - `libreoffice`
+> - `pdftoppm`
+
+## License
+office.yazi is licensed under the terms of the [MIT License](LICENSE)
+
+[^1]: [The official package manager for Yazi](https://yazi-rs.github.io/docs/cli)
+[^2]: [Preloaders rules](https://yazi-rs.github.io/docs/configuration/yazi#plugin.preloaders)
+[^3]: [Previewers rules](https://yazi-rs.github.io/docs/configuration/yazi#plugin.previewers)
+[^4]: [Configuration](https://yazi-rs.github.io/docs/configuration/overview)
+[^5]: [Configuration mixing](https://yazi-rs.github.io/docs/configuration/overview#mixing)
diff --git a/fedora/.config/yazi/plugins/office.yazi/main.lua b/fedora/.config/yazi/plugins/office.yazi/main.lua
new file mode 100644
index 0000000..3ec7385
--- /dev/null
+++ b/fedora/.config/yazi/plugins/office.yazi/main.lua
@@ -0,0 +1,121 @@
+--- @since 25.2.7
+
+local M = {}
+
+function M:peek(job)
+ local start, cache = os.clock(), ya.file_cache(job)
+ if not cache then
+ return
+ end
+
+ local ok, err = self:preload(job)
+ if not ok or err then
+ return
+ end
+
+ ya.sleep(math.max(0, rt.preview.image_delay / 1000 + start - os.clock()))
+ ya.image_show(cache, job.area)
+ ya.preview_widgets(job, {})
+end
+
+function M:seek(job)
+ local h = cx.active.current.hovered
+ if h and h.url == job.file.url then
+ local step = ya.clamp(-1, job.units, 1)
+ ya.manager_emit("peek", { math.max(0, cx.active.preview.skip + step), only_if = job.file.url })
+ end
+end
+
+function M:doc2pdf(job)
+ local tmp = "/tmp/yazi-" .. ya.uid() .. "/" .. ya.hash("office.yazi") .. "/"
+
+ --[[ For Future Reference: Regarding `libreoffice` as preconverter
+ 1. It prints errors to stdout (always, doesn't matter if it succeeded or it failed)
+ 2. Always writes the converted files to the filesystem, so no "Mario|Bros|Piping|Magic" for the data stream (https://ask.libreoffice.org/t/using-convert-to-output-to-stdout/38753)
+ 3. The `pdf:draw_pdf_Export` filter needs literal double quotes when defining its options (https://help.libreoffice.org/latest/en-US/text/shared/guide/pdf_params.html?&DbPAR=SHARED&System=UNIX#generaltext/shared/guide/pdf_params.xhp)
+ 3.1 Regarding double quotes and Lua strings, see https://www.lua.org/manual/5.1/manual.html#2.1 --]]
+ local libreoffice = Command("libreoffice")
+ :arg({
+ "--headless",
+ "--convert-to",
+ "pdf:draw_pdf_Export:{"
+ .. '"PageRange":{'
+ .. '"type":"string",'
+ .. '"value":'
+ .. '"'
+ .. job.skip + 1
+ .. '"'
+ .. "}"
+ .. "}",
+ "--outdir",
+ tmp,
+ tostring(job.file.url),
+ })
+ :stdin(Command.NULL)
+ :stdout(Command.PIPED)
+ :stderr(Command.NULL)
+ :output()
+
+ if not libreoffice.status.success then
+ ya.err(
+ libreoffice.stdout:match("LibreOffice .+"):gsub("%\n.*", "")
+ .. " "
+ .. libreoffice.stdout:match("Error .+"):gsub("%\n.*", "")
+ )
+ return nil, Err("Failed to preconvert `%s` to a temporary PDF", job.file.name)
+ end
+
+ local tmp = tmp .. job.file.name:gsub("%.[^%.]+$", ".pdf")
+ local read_permission = io.open(tmp, "r")
+ if not read_permission then
+ return nil, Err("Failed to read `%s`: make sure file exists and have read access", tmp)
+ end
+ read_permission:close()
+
+ return tmp
+end
+
+function M:preload(job)
+ local cache = ya.file_cache(job)
+ if not cache or fs.cha(cache) then
+ return true
+ end
+
+ local tmp_pdf, err = self:doc2pdf(job)
+ if not tmp_pdf then
+ return true, Err(" " .. "%s", err)
+ end
+
+ local output, err = Command("pdftoppm")
+ :arg({
+ "-singlefile",
+ "-jpeg",
+ "-jpegopt",
+ "quality=" .. rt.preview.image_quality,
+ "-f",
+ 1,
+ tostring(tmp_pdf),
+ })
+ :stdout(Command.PIPED)
+ :stderr(Command.PIPED)
+ :output()
+
+ local rm_tmp_pdf, rm_err = fs.remove("file", Url(tmp_pdf))
+ if not rm_tmp_pdf then
+ return true, Err("Failed to remove %s, error: %s", tmp_pdf, rm_err)
+ end
+
+ if not output then
+ return true, Err("Failed to start `pdftoppm`, error: %s", err)
+ elseif not output.status.success then
+ local pages = tonumber(output.stderr:match("the last page %((%d+)%)")) or 0
+ if job.skip > 0 and pages > 0 then
+ ya.mgr_emit("peek", { math.max(0, pages - 1), only_if = job.file.url, upper_bound = true })
+ end
+ return true, Err("Failed to convert %s to image, stderr: %s", tmp_pdf, output.stderr)
+ end
+
+ return fs.write(cache, output.stdout)
+end
+
+return M
diff --git a/fedora/.config/yazi/plugins/parent-arrow.yazi/main.lua b/fedora/.config/yazi/plugins/parent-arrow.yazi/main.lua
new file mode 100644
index 0000000..a4fd880
--- /dev/null
+++ b/fedora/.config/yazi/plugins/parent-arrow.yazi/main.lua
@@ -0,0 +1,24 @@
+--- @sync entry
+local function entry(_, job)
+ local parent = cx.active.parent
+ if not parent then
+ return
+ end
+
+ local offset = tonumber(job.args[1])
+ if not offset then
+ return ya.err(job.args[1], "is not a number")
+ end
+
+ local start = parent.cursor + 1 + offset
+ local end_ = offset < 0 and 1 or #parent.files
+ local step = offset < 0 and -1 or 1
+ for i = start, end_, step do
+ local target = parent.files[i]
+ if target and target.cha.is_dir then
+ return ya.emit("cd", { target.url })
+ end
+ end
+end
+
+return { entry = entry }
diff --git a/fedora/.config/yazi/plugins/piper.yazi/README.md b/fedora/.config/yazi/plugins/piper.yazi/README.md
new file mode 100644
index 0000000..1cb238f
--- /dev/null
+++ b/fedora/.config/yazi/plugins/piper.yazi/README.md
@@ -0,0 +1,90 @@
+# piper.yazi
+
+Pipe any shell command as a previewer.
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:piper
+```
+
+## Usage
+
+Piper is a general-purpose previewer - you can pass any shell command to `piper` and it will use the command's output as the preview content.
+
+It accepts a string parameter, which is the shell command to be executed, for example:
+
+```toml
+# ~/.config/yazi/yazi.toml
+[[plugin.prepend_previewers]]
+name = "*"
+run = 'piper -- echo "$1"'
+```
+
+This will set `piper` as the previewer for all file types and use `$1` (file path) as the preview content.
+
+## Variables
+
+Available variables:
+
+- `$w`: the width of the preview area.
+- `$h`: the height of the preview area.
+- `$1`: the path to the file being previewed.
+
+## Examples
+
+Here are some configuration examples:
+
+### Preview tarballs with [`tar`](https://man7.org/linux/man-pages/man1/tar.1.html)
+
+```toml
+[[plugin.prepend_previewers]]
+name = "*.tar*"
+run = 'piper --format=url -- tar tf "$1"'
+```
+
+In this example, `--format=url` tells `piper` to parse the `tar` output as file URLs, so you'll be able to get a list of files with icons.
+
+### Preview CSV with [`bat`](https://github.com/sharkdp/bat)
+
+```toml
+[[plugin.prepend_previewers]]
+name = "*.csv"
+run = 'piper -- bat -p --color=always "$1"'
+```
+
+Note that certain distributions might use a different name for `bat`, like Debian and Ubuntu uses `batcat` instead, so please adjust accordingly.
+
+### Preview Markdown with [`glow`](https://github.com/charmbracelet/glow)
+
+```toml
+[[plugin.prepend_previewers]]
+name = "*.md"
+run = 'piper -- CLICOLOR_FORCE=1 glow -w=$w -s=dark "$1"'
+```
+
+Note that there's [a bug in Glow v2.0](https://github.com/charmbracelet/glow/issues/440#issuecomment-2307992634) that causes slight color differences between tty and non-tty environments.
+
+### Preview directory tree with [`eza`](https://github.com/eza-community/eza)
+
+```toml
+[[plugin.prepend_previewers]]
+name = "*/"
+run = 'piper -- eza -TL=3 --color=always --icons=always --group-directories-first --no-quotes "$1"'
+```
+
+### Use [`hexyl`](https://github.com/sharkdp/hexyl) as fallback previewer
+
+Yazi defaults to using [`file -bL "$1"`](https://github.com/sxyazi/yazi/blob/main/yazi-plugin/preset/plugins/file.lua) if there's no matched previewer.
+
+This example uses `hexyl` as a fallback previewer instead of `file`.
+
+```toml
+[[plugin.append_previewers]]
+name = "*"
+run = 'piper -- hexyl --border=none --terminal-width=$w "$1"'
+```
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/piper.yazi/main.lua b/fedora/.config/yazi/plugins/piper.yazi/main.lua
new file mode 100644
index 0000000..aef08eb
--- /dev/null
+++ b/fedora/.config/yazi/plugins/piper.yazi/main.lua
@@ -0,0 +1,70 @@
+--- @since 25.5.31
+
+local M = {}
+
+local function fail(job, s) ya.preview_widget(job, ui.Text.parse(s):area(job.area):wrap(ui.Wrap.YES)) end
+
+function M:peek(job)
+ local child, err = Command("sh")
+ :arg({ "-c", job.args[1], "sh", tostring(job.file.url) })
+ :env("w", job.area.w)
+ :env("h", job.area.h)
+ :stdout(Command.PIPED)
+ :stderr(Command.PIPED)
+ :spawn()
+
+ if not child then
+ return fail(job, "sh: " .. err)
+ end
+
+ local limit = job.area.h
+ local i, outs, errs = 0, {}, {}
+ repeat
+ local next, event = child:read_line()
+ if event == 1 then
+ errs[#errs + 1] = next
+ elseif event ~= 0 then
+ break
+ end
+
+ i = i + 1
+ if i > job.skip then
+ outs[#outs + 1] = next
+ end
+ until i >= job.skip + limit
+
+ child:start_kill()
+ if #errs > 0 then
+ fail(job, table.concat(errs, ""))
+ elseif job.skip > 0 and i < job.skip + limit then
+ ya.emit("peek", { math.max(0, i - limit), only_if = job.file.url, upper_bound = true })
+ else
+ ya.preview_widget(job, M.format(job, outs))
+ end
+end
+
+function M:seek(job) require("code"):seek(job) end
+
+function M.format(job, lines)
+ local format = job.args.format
+ if format ~= "url" then
+ local s = table.concat(lines, ""):gsub("\r", ""):gsub("\t", string.rep(" ", rt.preview.tab_size))
+ return ui.Text.parse(s):area(job.area)
+ end
+
+ for i = 1, #lines do
+ lines[i] = lines[i]:gsub("[\r\n]+$", "")
+
+ local icon = File({
+ url = Url(lines[i]),
+ cha = Cha { kind = lines[i]:sub(-1) == "/" and 1 or 0 },
+ }):icon()
+
+ if icon then
+ lines[i] = ui.Line { ui.Span(" " .. icon.text .. " "):style(icon.style), lines[i] }
+ end
+ end
+ return ui.Text(lines):area(job.area)
+end
+
+return M
diff --git a/fedora/.config/yazi/plugins/smart-enter.yazi/README.md b/fedora/.config/yazi/plugins/smart-enter.yazi/README.md
new file mode 100644
index 0000000..742f2e1
--- /dev/null
+++ b/fedora/.config/yazi/plugins/smart-enter.yazi/README.md
@@ -0,0 +1,40 @@
+# smart-enter.yazi
+
+[`Open`][open] files or [`enter`][enter] directories all in one key!
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:smart-enter
+```
+
+## Usage
+
+Bind your <kbd>l</kbd> key to the plugin, in your `~/.config/yazi/keymap.toml`:
+
+```toml
+[[mgr.prepend_keymap]]
+on = "l"
+run = "plugin smart-enter"
+desc = "Enter the child directory, or open the file"
+```
+
+## Advanced
+
+By default, `--hovered` is passed to the [`open`][open] command, make the behavior consistent with [`enter`][enter] avoiding accidental triggers,
+which means both will only target the currently hovered file.
+
+If you still want `open` to target multiple selected files, add this to your `~/.config/yazi/init.lua`:
+
+```lua
+require("smart-enter"):setup {
+ open_multi = true,
+}
+```
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
+
+[open]: https://yazi-rs.github.io/docs/configuration/keymap/#mgr.open
+[enter]: https://yazi-rs.github.io/docs/configuration/keymap/#mgr.enter
diff --git a/fedora/.config/yazi/plugins/smart-enter.yazi/main.lua b/fedora/.config/yazi/plugins/smart-enter.yazi/main.lua
new file mode 100644
index 0000000..e9e2ec6
--- /dev/null
+++ b/fedora/.config/yazi/plugins/smart-enter.yazi/main.lua
@@ -0,0 +1,11 @@
+--- @since 25.5.31
+--- @sync entry
+
+local function setup(self, opts) self.open_multi = opts.open_multi end
+
+local function entry(self)
+ local h = cx.active.current.hovered
+ ya.emit(h and h.cha.is_dir and "enter" or "open", { hovered = not self.open_multi })
+end
+
+return { entry = entry, setup = setup }
diff --git a/fedora/.config/yazi/plugins/smart-filter.yazi/README.md b/fedora/.config/yazi/plugins/smart-filter.yazi/README.md
new file mode 100644
index 0000000..97be2ac
--- /dev/null
+++ b/fedora/.config/yazi/plugins/smart-filter.yazi/README.md
@@ -0,0 +1,28 @@
+# smart-filter.yazi
+
+A Yazi plugin that makes filters smarter: continuous filtering, automatically enter unique directory, open file on submitting.
+
+https://github.com/yazi-rs/plugins/assets/17523360/72aaf117-1378-4f7e-93ba-d425a79deac5
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:smart-filter
+```
+
+## Usage
+
+Add this to your `~/.config/yazi/keymap.toml`:
+
+```toml
+[[mgr.prepend_keymap]]
+on = "F"
+run = "plugin smart-filter"
+desc = "Smart filter"
+```
+
+Make sure the <kbd>F</kbd> key is not used elsewhere.
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/smart-filter.yazi/main.lua b/fedora/.config/yazi/plugins/smart-filter.yazi/main.lua
new file mode 100644
index 0000000..146e265
--- /dev/null
+++ b/fedora/.config/yazi/plugins/smart-filter.yazi/main.lua
@@ -0,0 +1,51 @@
+--- @since 25.5.31
+
+local hovered = ya.sync(function()
+ local h = cx.active.current.hovered
+ if not h then
+ return {}
+ end
+
+ return {
+ url = h.url,
+ is_dir = h.cha.is_dir,
+ unique = #cx.active.current.files == 1,
+ }
+end)
+
+local function prompt()
+ return ya.input {
+ title = "Smart filter:",
+ pos = { "center", w = 50 },
+ position = { "center", w = 50 }, -- TODO: remove
+ realtime = true,
+ debounce = 0.1,
+ }
+end
+
+local function entry()
+ local input = prompt()
+
+ while true do
+ local value, event = input:recv()
+ if event ~= 1 and event ~= 3 then
+ ya.emit("escape", { filter = true })
+ break
+ end
+
+ ya.emit("filter_do", { value, smart = true })
+
+ local h = hovered()
+ if h.unique and h.is_dir then
+ ya.emit("escape", { filter = true })
+ ya.emit("enter", {})
+ input = prompt()
+ elseif event == 1 then
+ ya.emit("escape", { filter = true })
+ ya.emit(h.is_dir and "enter" or "open", { h.url })
+ break
+ end
+ end
+end
+
+return { entry = entry }
diff --git a/fedora/.config/yazi/plugins/smart-paste.yazi/README.md b/fedora/.config/yazi/plugins/smart-paste.yazi/README.md
new file mode 100644
index 0000000..b32f475
--- /dev/null
+++ b/fedora/.config/yazi/plugins/smart-paste.yazi/README.md
@@ -0,0 +1,26 @@
+# smart-paste.yazi
+
+Paste files into the hovered directory or to the CWD if hovering over a file.
+
+https://github.com/user-attachments/assets/b3f6348e-abbe-42fe-9a67-a96e68f11255
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:smart-paste
+```
+
+## Usage
+
+Add this to your `~/.config/yazi/keymap.toml`:
+
+```toml
+[[mgr.prepend_keymap]]
+on = "p"
+run = "plugin smart-paste"
+desc = "Paste into the hovered directory or CWD"
+```
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/smart-paste.yazi/main.lua b/fedora/.config/yazi/plugins/smart-paste.yazi/main.lua
new file mode 100644
index 0000000..0837a4b
--- /dev/null
+++ b/fedora/.config/yazi/plugins/smart-paste.yazi/main.lua
@@ -0,0 +1,14 @@
+--- @since 25.5.31
+--- @sync entry
+return {
+ entry = function()
+ local h = cx.active.current.hovered
+ if h and h.cha.is_dir then
+ ya.emit("enter", {})
+ ya.emit("paste", {})
+ ya.emit("leave", {})
+ else
+ ya.emit("paste", {})
+ end
+ end,
+}
diff --git a/fedora/.config/yazi/plugins/sudo-demo.yazi/README.md b/fedora/.config/yazi/plugins/sudo-demo.yazi/README.md
new file mode 100644
index 0000000..8068691
--- /dev/null
+++ b/fedora/.config/yazi/plugins/sudo-demo.yazi/README.md
@@ -0,0 +1,25 @@
+# sudo-demo.yazi
+
+Just an example showing how to use `sudo` in a Yazi plugin, and the plugin itself doesn't offer any features beyond logging a message.
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:sudo-demo
+```
+
+## Usage
+
+Add this to your `~/.config/yazi/keymap.toml`:
+
+```toml
+[[mgr.prepend_keymap]]
+on = "<C-t>"
+run = "plugin sudo-demo"
+```
+
+Press <kbd>Ctrl</kbd> + <kbd>t</kbd> to run the plugin, you should [see a message in the log](https://yazi-rs.github.io/docs/plugins/overview#logging).
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/sudo-demo.yazi/main.lua b/fedora/.config/yazi/plugins/sudo-demo.yazi/main.lua
new file mode 100644
index 0000000..599afe4
--- /dev/null
+++ b/fedora/.config/yazi/plugins/sudo-demo.yazi/main.lua
@@ -0,0 +1,45 @@
+--- @since 25.5.31
+
+--- Verify if `sudo` is already authenticated
+--- @return boolean
+local function sudo_already()
+ local status = Command("sudo"):arg({ "--validate", "--non-interactive" }):status()
+ assert(status, "Failed to run `sudo --validate --non-interactive`")
+ return status.success
+end
+
+--- Run a program with `sudo` privilege
+--- @param program string
+--- @param args table
+--- @return Output|nil output
+--- @return integer|nil err
+--- nil: no error
+--- 1: sudo failed
+local function run_with_sudo(program, args)
+ local cmd = Command("sudo"):arg(program):arg(args)
+ if sudo_already() then
+ return cmd:output()
+ end
+
+ local permit = ui.hide and ui.hide() or ya.hide() -- TODO: remove this
+ print(string.format("Sudo password required to run: `%s %s`", program, table.concat(args)))
+ local output = cmd:output()
+ permit:drop()
+
+ if output.status.success or sudo_already() then
+ return output
+ end
+ return nil, 1
+end
+
+return {
+ entry = function()
+ local output = run_with_sudo("ls", { "-l" })
+ if not output then
+ return ya.err("Failed to run `sudo ls -l`")
+ end
+
+ ya.err("stdout", output.stdout)
+ ya.err("status.code", output.status.code)
+ end,
+}
diff --git a/fedora/.config/yazi/plugins/toggle-pane.yazi/README.md b/fedora/.config/yazi/plugins/toggle-pane.yazi/README.md
new file mode 100644
index 0000000..3ef4095
--- /dev/null
+++ b/fedora/.config/yazi/plugins/toggle-pane.yazi/README.md
@@ -0,0 +1,78 @@
+# toggle-pane.yazi
+
+Toggle the show, hide, and maximize states for different panes: parent, current, and preview. It respects the user's [`ratio` settings](https://yazi-rs.github.io/docs/configuration/yazi#mgr.ratio)!
+
+Assume the user's `ratio` is $$[A, B, C]$$, that is, $$\text{parent}=A, \text{current}=B, \text{preview}=C$$:
+
+- `min-parent`: Toggles between $$0$$ and $$A$$ - the parent is either completely hidden or showed with width $$A$$.
+- `max-parent`: Toggles between $$A$$ and $$\infty$$ - the parent is either showed with width $$A$$ or fills the entire screen.
+- `min-current`: Toggles between $$0$$ and $$B$$ - the current is either completely hidden or showed with width $$B$$.
+- `max-current`: Toggles between $$B$$ and $$\infty$$ - the current is either showed with width $$B$$ or fills the entire screen.
+- `min-preview`: Toggles between $$0$$ and $$C$$ - the preview is either completely hidden or showed with width $$C$$.
+- `max-preview`: Toggles between $$C$$ and $$\infty$$ - the preview is either showed with width $$C$$ or fills the entire screen.
+- `reset`: Resets to the user's configured `ratio`.
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:toggle-pane
+```
+
+## Usage
+
+Hide/Show preview:
+
+```toml
+# keymap.toml
+[[mgr.prepend_keymap]]
+on = "T"
+run = "plugin toggle-pane min-preview"
+desc = "Show or hide the preview pane"
+```
+
+Maximize/Restore preview:
+
+```toml
+# keymap.toml
+[[mgr.prepend_keymap]]
+on = "T"
+run = "plugin toggle-pane max-preview"
+desc = "Maximize or restore the preview pane"
+```
+
+You can replace `preview` with `current` or `parent` to toggle the other panes.
+
+## Advanced
+
+In addition to triggering the plugin with a keypress, you can also trigger it in your `init.lua` file:
+
+```lua
+if os.getenv("NVIM") then
+ require("toggle-pane"):entry("min-preview")
+end
+```
+
+In the example above, when it detects that you're [using Yazi in nvim](https://yazi-rs.github.io/docs/resources#vim), the preview is hidden by default — you can always press `T` (or any key you've bound) to show it again.
+
+## Tips
+
+This plugin only maximizes the "available preview area", without actually changing the content size.
+
+This means that the appearance of your preview largely depends on the previewer you are using.
+However, most previewers tend to make the most of the available space, so this usually isn't an issue.
+
+For image previews, you may want to tune up the [`max_width`][max-width] and [`max_height`][max-height] options in your `yazi.toml`:
+
+```toml
+[preview]
+# Change them to your desired values
+max_width = 1000
+max_height = 1000
+```
+
+[max-width]: https://yazi-rs.github.io/docs/configuration/yazi/#preview.max_width
+[max-height]: https://yazi-rs.github.io/docs/configuration/yazi/#preview.max_height
+
+## License
+
+This plugin is MIT-licensed. For more information, check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/toggle-pane.yazi/main.lua b/fedora/.config/yazi/plugins/toggle-pane.yazi/main.lua
new file mode 100644
index 0000000..72bbf0e
--- /dev/null
+++ b/fedora/.config/yazi/plugins/toggle-pane.yazi/main.lua
@@ -0,0 +1,45 @@
+--- @since 25.5.31
+--- @sync entry
+
+local function entry(st, job)
+ local R = rt.mgr.ratio
+ job = type(job) == "string" and { args = { job } } or job
+
+ st.parent = st.parent or R.parent
+ st.current = st.current or R.current
+ st.preview = st.preview or R.preview
+
+ local act, to = string.match(job.args[1] or "", "(.-)-(.+)")
+ if act == "min" then
+ st[to] = st[to] == R[to] and 0 or R[to]
+ elseif act == "max" then
+ local max = st[to] == 65535 and R[to] or 65535
+ st.parent = st.parent == 65535 and R.parent or st.parent
+ st.current = st.current == 65535 and R.current or st.current
+ st.preview = st.preview == 65535 and R.preview or st.preview
+ st[to] = max
+ end
+
+ if not st.old then
+ st.old = Tab.layout
+ Tab.layout = function(self)
+ local all = st.parent + st.current + st.preview
+ self._chunks = ui.Layout()
+ :direction(ui.Layout.HORIZONTAL)
+ :constraints({
+ ui.Constraint.Ratio(st.parent, all),
+ ui.Constraint.Ratio(st.current, all),
+ ui.Constraint.Ratio(st.preview, all),
+ })
+ :split(self._area)
+ end
+ end
+
+ if not act then
+ Tab.layout, st.old = st.old, nil
+ st.parent, st.current, st.preview = nil, nil, nil
+ end
+ ya.emit("app:resize", {})
+end
+
+return { entry = entry }
diff --git a/fedora/.config/yazi/plugins/zoom.yazi/README.md b/fedora/.config/yazi/plugins/zoom.yazi/README.md
new file mode 100644
index 0000000..9be8025
--- /dev/null
+++ b/fedora/.config/yazi/plugins/zoom.yazi/README.md
@@ -0,0 +1,56 @@
+> [!NOTE]
+> The latest Yazi nightly build is required to use this plugin at the moment.
+
+# zoom.yazi
+
+Enlarge or shrink the preview image of a file, which is useful for magnifying small files for viewing.
+
+Supported formats:
+
+- Images - requires [ImageMagick](https://imagemagick.org/) (>= 7.1.1)
+
+Note that, the maximum size of enlarged images is limited by the [`max_width`][max_width] and [`max_height`][max_height] configuration options, so you may need to increase them as needed.
+
+https://github.com/user-attachments/assets/b28912b1-da63-43d3-a21f-b9e6767ed4a9
+
+[max_width]: https://yazi-rs.github.io/docs/configuration/yazi#preview.max_width
+[max_height]: https://yazi-rs.github.io/docs/configuration/yazi#preview.max_height
+
+## Installation
+
+```sh
+ya pkg add yazi-rs/plugins:zoom
+```
+
+## Usage
+
+```toml
+# keymap.toml
+[[mgr.prepend_keymap]]
+on = "+"
+run = "plugin zoom 1"
+desc = "Zoom in hovered file"
+
+[[mgr.prepend_keymap]]
+on = "-"
+run = "plugin zoom -1"
+desc = "Zoom out hovered file"
+```
+
+## Advanced
+
+If you want to apply a default zoom parameter to image previews, you can specify it while setting this plugin up as a custom previewer, for example:
+
+```toml
+[[plugin.prepend_previewers]]
+mime = "image/{jpeg,png,webp}"
+run = "zoom 5"
+```
+
+## TODO
+
+- [ ] Support more file types (e.g., videos, PDFs), PRs welcome!
+
+## License
+
+This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
diff --git a/fedora/.config/yazi/plugins/zoom.yazi/main.lua b/fedora/.config/yazi/plugins/zoom.yazi/main.lua
new file mode 100644
index 0000000..8aea0cd
--- /dev/null
+++ b/fedora/.config/yazi/plugins/zoom.yazi/main.lua
@@ -0,0 +1,119 @@
+--- @since 25.6.11
+
+local get = ya.sync(function(st, url) return st.last == url and st.level end)
+
+local save = ya.sync(function(st, url, new)
+ local h = cx.active.current.hovered
+ if h and h.url == url then
+ st.last, st.level = url, new
+ return true
+ end
+end)
+
+local lock = ya.sync(function(st, url, old, new)
+ if st.last == url and st.level == old then
+ st.level = new
+ return true
+ end
+end)
+
+local move = ya.sync(function(st)
+ local h = cx.active.current.hovered
+ if not h then
+ return
+ end
+
+ if st.last ~= h.url then
+ st.last, st.level = Url(h.url), 0
+ end
+
+ return { url = h.url, level = st.level }
+end)
+
+local function end_(job, err)
+ if not job.old_level then
+ ya.preview_widget(job, err and ui.Text(err):area(job.area):wrap(ui.Wrap.YES))
+ elseif err then
+ ya.notify { title = "Zoom", content = tostring(err), timeout = 5, level = "error" }
+ end
+end
+
+local function canvas(area)
+ local cw, ch = rt.term.cell_size()
+ if not cw then
+ return rt.preview.max_width, rt.preview.max_height
+ end
+
+ return math.min(rt.preview.max_width, math.floor(area.w * cw)),
+ math.min(rt.preview.max_height, math.floor(area.h * ch))
+end
+
+local function peek(_, job)
+ local url = job.file.url
+ local info, err = ya.image_info(url)
+ if not info then
+ return end_(job, Err("Failed to get image info: %s", err))
+ end
+
+ local level = ya.clamp(-10, job.new_level or get(Url(url)) or tonumber(job.args[1]) or 0, 10)
+ local sync = function()
+ if job.old_level then
+ return lock(url, job.old_level, level)
+ else
+ return save(url, level)
+ end
+ end
+
+ local max_w, max_h = canvas(job.area)
+ local min_w, min_h = math.min(max_w, info.w), math.min(max_h, info.h)
+ local new_w = min_w + math.floor(min_w * level * 0.1)
+ local new_h = min_h + math.floor(min_h * level * 0.1)
+ if new_w > max_w or new_h > max_h then
+ if job.old_level then
+ return sync() -- Image larger than available preview area after zooming
+ else
+ new_w, new_h = max_w, max_h -- Run as a previewer, render the image anyway
+ end
+ end
+
+ local tmp = os.tmpname()
+ -- stylua: ignore
+ local status, err = Command("magick"):arg {
+ tostring(url),
+ "-auto-orient", "-strip",
+ "-sample", string.format("%dx%d", new_w, new_h),
+ "-quality", rt.preview.image_quality,
+ string.format("JPG:%s", tmp),
+ }:status()
+
+ if not status then
+ end_(job, Err("Failed to run `magick` command: %s", err))
+ elseif not status.success then
+ end_(job, Err("`magick` command exited with error code %d", status.code))
+ elseif sync() then
+ ya.image_show(Url(tmp), job.area)
+ end
+ end_(job)
+end
+
+local function entry(self, job)
+ local st = move()
+ if not st then
+ return
+ end
+
+ local motion = tonumber(job.args[1]) or 0
+ local new = ya.clamp(-10, st.level + motion, 10)
+ if new ~= st.level then
+ peek(self, {
+ area = ui.area("preview"),
+ args = {},
+ file = { url = st.url }, -- FIXME: use `File` instead of a dummy file
+ skip = 0,
+ new_level = new,
+ old_level = st.level,
+ })
+ end
+end
+
+return { peek = peek, entry = entry }
diff --git a/fedora/.config/yazi/theme.toml b/fedora/.config/yazi/theme.toml
new file mode 100644
index 0000000..efcc789
--- /dev/null
+++ b/fedora/.config/yazi/theme.toml
@@ -0,0 +1,278 @@
+# If the user's terminal is in dark mode, Yazi will load `theme-dark.toml` on startup; otherwise, `theme-light.toml`.
+# You can override any parts of them that are not related to the dark/light mode in your own `theme.toml`.
+
+# If you want to dynamically override their content based on dark/light mode, you can specify two different flavors
+# for dark and light modes under `[flavor]`, and do so in those flavors instead.
+"$schema" = "https://yazi-rs.github.io/schemas/theme.json"
+
+# vim:fileencoding=utf-8:foldmethod=marker
+
+# : Manager {{{
+
+[mgr]
+cwd = { fg = "#9ccfd8" }
+
+# Hovered
+hovered = { reversed = true }
+preview_hovered = { underline = true }
+
+# Find
+find_keyword = { fg = "#f6c177", bold = true, italic = true, underline = true }
+find_position = { fg = "#c4a7e7", bg = "reset", bold = true, italic = true }
+
+# Symlink
+symlink_target = { italic = true }
+
+# Marker
+marker_copied = { fg = "#3e8fb0", bg = "#3e8fb0" }
+marker_cut = { fg = "#eb6f92", bg = "#eb6f92" }
+marker_marked = { fg = "#ea9a97", bg = "#ea9a97" }
+marker_selected = { fg = "#f6c177", bg = "#f6c177" }
+
+# Count
+count_copied = { fg = "#e0def4", bg = "#3e8fb0" }
+count_cut = { fg = "#f0def4", bg = "#eb6f92" }
+count_selected = { fg = "#232136", bg = "#f6c177" }
+
+# Border
+border_symbol = "│"
+border_style = { fg = "#56526e" }
+
+# Highlighting
+syntect_theme = ""
+
+# : }}}
+
+
+# : Tabs {{{
+
+[tabs]
+active = { fg = "#e0def4", bg = "#3e8fb0", bold = true }
+inactive = { fg = "#3e8fb0", bg = "#e0def4" }
+tab_width = 1
+
+# Separator
+sep_inner = { open = "", close = "" }
+sep_outer = { open = "", close = "" }
+
+# : }}}
+
+
+# : Mode {{{
+
+[mode]
+normal_main = { fg = "#232136", bg = "#9ccfd8", bold = true }
+normal_alt = { fg = "#232136", bg = "#e0def4", bold = true }
+
+# Select mode
+select_main = { fg = "#232136", bg = "#eb6f92", bold = true }
+select_alt = { fg = "#232136", bg = "#e0def4", bold = true }
+
+# Unset mode
+unset_main = { fg = "#232136", bg = "#eb6f92", bold = true }
+unset_alt = { fg = "#232136", bg = "#e0def4", bold = true }
+
+# : }}}
+
+
+# : Status bar {{{
+
+[status]
+overall = { }
+sep_left = { open = "", close = "" }
+sep_right = { open = "", close = "" }
+
+# Permissions
+perm_sep = { fg = "#6e6a86" }
+perm_type = { fg = "#c4a7e7" }
+perm_read = { fg = "#f6c177" }
+perm_write = { fg = "#eb6f92" }
+perm_exec = { fg = "#9ccfd8" }
+
+# Progress
+progress_label = { fg = "#e0def4", bold = true }
+progress_normal = { fg = "#3e8fb0", bg = "#2a283e" }
+progress_error = { fg = "#eb6f92", bg = "#2a283e" }
+
+# : }}}
+
+
+# : Which {{{
+
+[which]
+cols = 3
+mask = { bg = "#2a273f" }
+cand = { fg = "#9ccfd8" }
+rest = { fg = "#6e6a86" }
+desc = { fg = "#f6c177" }
+separator = "  "
+separator_style = { fg = "#6e6a86" }
+
+# : }}}
+
+
+# : Confirmation {{{
+
+[confirm]
+border = { fg = "#56526e" }
+title = { fg = "#eb6f92", bold = true }
+content = { fg = "#fbf1c7" }
+body = { fg = "#e0def4" }
+list = { fg = "#e0def4" }
+btn_yes = { fg = "#232136", bg = "#3e8fb0", bold = true }
+btn_no = { fg = "#232136", bg = "#e0def4", bold = true }
+btn_labels = [ " [y]es ", " (n)o " ]
+
+# : }}}
+
+
+# : Spotter {{{
+
+[spot]
+border = { fg = "#56526e" }
+title = { fg = "#9ccfd8", bold = true }
+
+# Table
+tbl_col = { fg = "#9ccfd8" }
+tbl_cell = { fg = "#232136", bg = "#f6c177", bold = true }
+
+# : }}}
+
+
+# : Notification {{{
+
+[notify]
+title_info = { fg = "#3e8fb0" }
+title_warn = { fg = "#f6c177" }
+title_error = { fg = "#eb6f92" }
+
+
+# : }}}
+
+
+# : Picker {{{
+
+[pick]
+border = { fg = "#3e8fb0" }
+active = { fg = "#c4a7e7", bold = true }
+inactive = { fg = "#908caa"}
+
+# : }}}
+
+
+# : Input {{{
+
+[input]
+border = { fg = "#3e8fb0" }
+title = { bold = true }
+value = { fg = "#e0def4"}
+selected = { reversed = true }
+
+# : }}}
+
+
+# : Completion {{{
+
+[cmp]
+border = { fg = "#3e8fb0" }
+active = { bg = "#e0def4", fg = "#232136", bold = true }
+inactive = { fg = "#908caa" }
+
+
+# : }}}
+
+
+# : Task manager {{{
+
+[tasks]
+border = { fg = "#3e8fb0" }
+title = { bold = true}
+hovered = { fg = "#c4a7e7", bold = true, reversed = true }
+
+# : }}}
+
+
+# : Help menu {{{
+
+[help]
+on = { fg = "#9ccfd8" }
+run = { fg = "#c4a7e7" }
+desc = { fg = "#f6c177"}
+hovered = { reversed = true, bold = true }
+footer = { fg = "#232136", bg = "#e0def4" }
+
+# : }}}
+
+
+# : File-specific styles {{{
+
+[filetype]
+rules = [
+ # Images
+ { mime = "image/*", fg = "#c4a7e7" },
+ { mime = "image/*", is = "link", fg = "#d8c9f0", italic = true },
+
+ # Media
+ { mime = "{audio,video}/*", fg = "#f6c177" },
+ { mime = "{audio,video}/*", is = "link", fg = "#ffd393", italic = true },
+
+ # Archives
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#eb6f92" },
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", is = "link", fg = "#f29aa6", italic = true },
+
+ # Documents
+ { mime = "application/{pdf,doc,rtf}", fg = "#ea9a97" },
+ { mime = "application/{pdf,doc,rtf}", is = "link", fg = "#f0b8b0", italic = true },
+
+ # Office-like (vnd.*)
+ { mime = "application/vnd.*", fg = "#689d6a" },
+ { mime = "application/vnd.*", is = "link", fg = "#7fcf96", italic = true },
+
+ # Special files
+ { name = "*", is = "orphan", fg = "#232136", bg = "#eb6f92" },
+ { name = "*", is = "exec", fg = "#9ccfd8" },
+
+ # Symlink fallback
+ # { name = "*", is = "link", fg = "#b5e6ee", italic = true },
+ # { name = "*/", is = "link", fg = "#6bd3ee", italic = true },
+
+ # Dummy files
+ { name = "*", is = "dummy", fg = "#232136", bg = "#eb6f92" },
+ { name = "*/", is = "dummy", fg = "#232136", bg = "#eb6f92" },
+
+ # Fallback
+ { name = "*", fg = "#e0def4" },
+ { name = "*/", fg = "#3e8fb0" }
+]
+
+# : }}}
+
+
+# : Flavor {{{
+
+# [flavor]
+# dark = "rose-pine-moon"
+# light = "catppuccin-mocha"
+
+# : }}}
+
+
+# ayu-dark
+# catppuccin-frappe
+# catppuccin-latte
+# catppuccin-macchiato
+# catppuccin-mocha
+# dracula
+# everforest-medium
+# gruvbox-dark
+# kanagawa-dragon
+# kanagawa-lotus
+# kanagawa
+# rose-pine-moon
+# rose-pine
+# scripts
+# tokyo-night
+# vscode-dark-modern
+# vscode-dark-plus
+# vscode-light-modern
+# vscode-light-plus
diff --git a/fedora/.config/yazi/yazi.toml b/fedora/.config/yazi/yazi.toml
new file mode 100644
index 0000000..17c7701
--- /dev/null
+++ b/fedora/.config/yazi/yazi.toml
@@ -0,0 +1,278 @@
+# A TOML linter such as https://taplo.tamasfe.dev/ can use this schema to validate your config.
+# If you encounter any issues, please make an issue at https://github.com/yazi-rs/schemas.
+"$schema" = "https://yazi-rs.github.io/schemas/yazi.json"
+
+[mgr]
+ratio = [ 1, 2, 4 ]
+sort_by = "alphabetical"
+sort_sensitive = false
+sort_reverse = false
+sort_dir_first = true
+sort_translit = false
+linemode = "none"
+show_hidden = true
+show_symlink = true
+scrolloff = 5
+mouse_events = [ "click", "scroll" ]
+title_format = "Yazi: {cwd}"
+
+[preview]
+wrap = "no"
+tab_size = 2
+max_width = 1200
+max_height = 1600
+cache_dir = ""
+image_delay = 30
+image_filter = "lanczos3"
+image_quality = 90
+ueberzug_scale = 1
+ueberzug_offset = [ 0, 0, 0, 0 ]
+
+[opener]
+edit = [
+ { run = '${EDITOR:-nvim} "$@"', desc = "$EDITOR", block = true, for = "unix" },
+ { run = 'code %*', orphan = true, desc = "code", for = "windows" },
+ { run = 'code -w %*', block = true, desc = "code (block)", for = "windows" },
+]
+open = [
+ { run = 'xdg-open "$1"', desc = "Open", for = "linux" },
+ { run = 'open "$@"', desc = "Open", for = "macos" },
+ { run = 'start "" "%1"', orphan = true, desc = "Open", for = "windows" },
+ { run = 'termux-open "$1"', desc = "Open", for = "android" },
+]
+reveal = [
+ { run = 'xdg-open "$(dirname "$1")"', desc = "Reveal", for = "linux" },
+ { run = 'open -R "$1"', desc = "Reveal", for = "macos" },
+ { run = 'explorer /select,"%1"', orphan = true, desc = "Reveal", for = "windows" },
+ { run = 'termux-open "$(dirname "$1")"', desc = "Reveal", for = "android" },
+ { run = '''clear; exiftool "$1"; echo "Press enter to exit"; read _''', block = true, desc = "Show EXIF", for = "unix" },
+]
+extract = [
+ { run = 'ya pub extract --list "$@"', desc = "Extract here", for = "unix" },
+ { run = 'ya pub extract --list %*', desc = "Extract here", for = "windows" },
+]
+play = [
+ { run = 'open -a IINA "$@"', orphan = true, for = "macos" },
+ { run = 'mpv --force-window "$@"', orphan = true, for = "unix" },
+ { run = 'mpv --force-window %*', orphan = true, for = "windows" },
+ { run = '''mediainfo "$1"; echo "Press enter to exit"; read _''', block = true, desc = "Show media info", for = "unix" },
+]
+
+[[opener.set-wallpaper]]
+run = '''
+ osascript -e 'on run {img}' -e 'tell application "System Events" to set picture of every desktop to img' -e 'end run' "$0"
+'''
+for = "macos"
+desc = "Set as wallpaper"
+
+[open]
+rules = [
+ # Folder
+ { name = "*/", use = [ "edit", "open", "reveal" ] },
+ # Text
+ { mime = "text/*", use = [ "edit", "reveal" ] },
+ # Image
+ { mime = "image/*", use = [ "open", "reveal" ] },
+ # Media
+ { mime = "{audio,video}/*", use = [ "play", "reveal" ] },
+ # Archive
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", use = [ "extract", "reveal" ] },
+ # JSON
+ { mime = "application/{json,ndjson}", use = [ "edit", "reveal" ] },
+ { mime = "*/javascript", use = [ "edit", "reveal" ] },
+ # Empty file
+ { mime = "inode/empty", use = [ "edit", "reveal" ] },
+ # Fallback
+ { name = "*", use = [ "edit", "open", "reveal" ] },
+]
+
+[[open.prepend_rules]]
+mime = "image/*"
+use = [ "set-wallpaper", "open" ]
+
+[tasks]
+micro_workers = 10
+macro_workers = 10
+bizarre_retry = 3
+image_alloc = 536870912 # 512MB
+image_bound = [ 20000, 20000 ]
+suppress_preload = false
+
+[plugin]
+fetchers = [
+ # Mimetype
+ { id = "mime", name = "*", run = "mime", prio = "high" },
+ { id = "git", name = "*", run = "git" },
+ { id = "git", name = "*/", run = "git" },
+ # { id = "mactag", name = "*", run = "mactag" },
+ # { id = "mactag", name = "*/", run = "mactag" },
+ { id = "mime", name = "*", run = "mime-ext", prio = "high" },
+]
+spotters = [
+ { name = "*/", run = "folder" },
+ # Code
+ { mime = "text/*", run = "code" },
+ { mime = "application/{mbox,javascript,wine-extension-ini}", run = "code" },
+ # Image
+ { mime = "image/{avif,hei?,jxl}", run = "magick" },
+ { mime = "image/svg+xml", run = "svg" },
+ { mime = "image/*", run = "image" },
+ # Video
+ { mime = "video/*", run = "video" },
+ # Fallback
+ { name = "*", run = "file" },
+]
+preloaders = [
+ # Image
+ { mime = "image/{avif,hei?,jxl}", run = "magick" },
+ { mime = "image/svg+xml", run = "svg" },
+ { mime = "image/*", run = "image" },
+ # Video
+ { mime = "video/*", run = "video" },
+ # PDF
+ { mime = "application/pdf", run = "pdf" },
+ # Font
+ { mime = "font/*", run = "font" },
+ { mime = "application/ms-opentype", run = "font" },
+]
+previewers = [
+ { name = "*/", run = "folder" },
+ # Code
+ { mime = "text/*", run = "code" },
+ { mime = "application/{mbox,javascript,wine-extension-ini}", run = "code" },
+ # JSON
+ { mime = "application/{json,ndjson}", run = "json" },
+ # Image
+ { mime = "image/{avif,hei?,jxl}", run = "magick" },
+ { mime = "image/svg+xml", run = "svg" },
+ { mime = "image/*", run = "image" },
+ # Video
+ { mime = "application/{octet-stream,vnd.rn-realmedia}", run = "video" },
+ { mime = "{audio,video}/*", run = "video" },
+ # PDF
+ { mime = "application/pdf", run = "pdf" },
+ # Archive
+ { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", run = "archive" },
+ { mime = "application/{debian*-package,redhat-package-manager,rpm,android.package-archive}", run = "archive" },
+ { name = "*.{AppImage,appimage}", run = "archive" },
+ # Virtual Disk / Disk Image
+ { mime = "application/{iso9660-image,qemu-disk,ms-wim,apple-diskimage}", run = "archive" },
+ { mime = "application/virtualbox-{vhd,vhdx}", run = "archive" },
+ { name = "*.{img,fat,ext,ext2,ext3,ext4,squashfs,ntfs,hfs,hfsx}", run = "archive" },
+ # Font
+ { mime = "font/*", run = "font" },
+ { mime = "application/ms-opentype", run = "font" },
+ # Empty file
+ { mime = "inode/empty", run = "empty" },
+ # Fallback
+ { name = "*", run = "file" },
+]
+prepend_preloaders = [
+ { mime = "application/openxmlformats-officedocument.*", run = "office" },
+ { mime = "application/oasis.opendocument.*", run = "office" },
+ { mime = "application/ms-*", run = "office" },
+ { mime = "application/msword", run = "office" },
+ { name = "*.docx", run = "office" },
+]
+prepend_previewers = [
+ { mime = "*/xml", run = 'piper -- bat -p --theme ansi --terminal-width "$w" -f "$1"' },
+ { mime = "application/*zip", run = 'piper -- atool --list -- "$1"' },
+ { mime = "application/epub+zip", run = 'piper -- pandoc "$1" -t plain' },
+ { mime = "application/json", run = 'piper -- bat -p --theme ansi --terminal-width "$w" -f "$1"' },
+ { mime = "application/ms-*", run = "office" },
+ { mime = "application/msword", run = "office" },
+ { mime = "application/oasis.opendocument.*", run = "office" },
+ # { mime = "application/octet-stream", run = 'piper -- mediainfo "$1"' },
+ { mime = "application/openxmlformats-officedocument.*", run = "office" },
+ { mime = "application/pgp-encrypted", run = 'piper -- gpg -d -- "$1"' },
+ { mime = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", run = 'piper -- pandoc "$1" -t plain' },
+ # { mime = "application/vnd.rn-realmedia", run = 'piper -- mediainfo "$1"' },
+ { mime = "application/x-mobipocket-ebook", run = 'piper -- pandoc "$1" -t plain' },
+ { mime = "application/x-ndjson", run = 'piper -- bat -p --theme ansi --terminal-width "$w" -f "$1"' },
+ { mime = "application/x-{tar,bzip*,7z-compressed,xz,rar}", run = "lsar" },
+ { mime = "application/{,g}zip", run = "lsar" },
+ { mime = "audio/*", run = 'piper -- mediainfo "$1"' },
+ # { mime = "image/{jpeg,png,webp}", run = "zoom 5" },
+ { mime = "text/*", run = 'piper -- bat -p --theme ansi --terminal-width "$w" -f "$1"' },
+ { mime = "text/html", run = 'piper -- lynx -width="$w" -display_charset=utf-8 -dump "$1"' },
+ { mime = "text/troff", run = 'piper -- man ./ "$1" | col -b' },
+ # { mime = "video/*", run = 'piper -- mediainfo "$1"' },
+ { name = "*.csv", run = 'piper -- bat -p --color=always "$1"' },
+ { name = "*.docx", run = "office" },
+ { name = "*.md", run = 'piper -- env CLICOLOR_FORCE=1 glow -w=$w -s=dark "$1"' },
+ { name = "*.{odt,ods,odp,odg,ott,ots,otp}", run = 'piper -- odt2txt "$1"' },
+ { name = "*.{tar,tar.gz,tar.bz2,tar.xz,zip,7z,rar,iso}", run = 'piper --format=url -- 7z l "$1"' },
+ { name = "*/", run = 'piper -- eza -TL=3 --color=always --icons=always --group-directories-first --no-quotes "$1"' },
+]
+
+[input]
+cursor_blink = false
+
+# cd
+cd_title = "Change directory:"
+cd_origin = "top-center"
+cd_offset = [ 0, 2, 50, 3 ]
+
+# create
+create_title = [ "Create:", "Create (dir):" ]
+create_origin = "top-center"
+create_offset = [ 0, 2, 50, 3 ]
+
+# rename
+rename_title = "Rename:"
+rename_origin = "hovered"
+rename_offset = [ 0, 1, 50, 3 ]
+
+# filter
+filter_title = "Filter:"
+filter_origin = "top-center"
+filter_offset = [ 0, 2, 50, 3 ]
+
+# find
+find_title = [ "Find next:", "Find previous:" ]
+find_origin = "top-center"
+find_offset = [ 0, 2, 50, 3 ]
+
+# search
+search_title = "Search via {n}:"
+search_origin = "top-center"
+search_offset = [ 0, 2, 50, 3 ]
+
+# shell
+shell_title = [ "Shell:", "Shell (block):" ]
+shell_origin = "top-center"
+shell_offset = [ 0, 2, 50, 3 ]
+
+[confirm]
+# trash
+trash_title = "Trash {n} selected file{s}?"
+trash_origin = "center"
+trash_offset = [ 0, 0, 70, 20 ]
+
+# delete
+delete_title = "Permanently delete {n} selected file{s}?"
+delete_origin = "center"
+delete_offset = [ 0, 0, 70, 20 ]
+
+# overwrite
+overwrite_title = "Overwrite file?"
+overwrite_content = "Will overwrite the following file:"
+overwrite_origin = "center"
+overwrite_offset = [ 0, 0, 50, 15 ]
+
+# quit
+quit_title = "Quit?"
+quit_content = "The following tasks are still running, are you sure you want to quit?"
+quit_origin = "center"
+quit_offset = [ 0, 0, 50, 15 ]
+
+[pick]
+open_title = "Open with:"
+open_origin = "hovered"
+open_offset = [ 0, 1, 50, 7 ]
+
+[which]
+sort_by = "none"
+sort_sensitive = false
+sort_reverse = false
+sort_translit = false
diff --git a/fedora/.config/zsh/.zshrc b/fedora/.config/zsh/.zshrc
new file mode 100644
index 0000000..12fa76a
--- /dev/null
+++ b/fedora/.config/zsh/.zshrc
@@ -0,0 +1,141 @@
+#!/bin/zsh
+
+### --- Prompt --- ###
+autoload -U colors && colors
+autoload -Uz add-zsh-hook vcs_info
+setopt prompt_subst
+add-zsh-hook precmd vcs_info
+PROMPT='%B%{$fg[red]%}[%{$fg[yellow]%}%n%{$fg[green]%}@%{$fg[blue]%}%M %{$fg[magenta]%}%~%{$fg[red]%}]%F{green}${vcs_info_msg_0_}%{$reset_color%}$%b '
+zstyle ':vcs_info:*' enable git
+zstyle ':vcs_info:*' check-for-changes true
+zstyle ':vcs_info:*' unstagedstr '*'
+zstyle ':vcs_info:*' stagedstr '+'
+zstyle ':vcs_info:git:*' formats "%{$fg[blue]%}(%{$fg[white]%}%b%{$fg[blue]%}:%r%{$fg[yellow]%}%u%m%{$fg[magenta]%}%c%{$fg[blue]%})"
+zstyle ':vcs_info:git:*' actionformats "%{$fg[blue]%}(%{$fg[white]%}%b%{$fg[blue]%}:%r%{$reset_color%}|%{$fg[red]%}%a%u%c%{$fg[blue]%})"
+zstyle ':vcs_info:git*+set-message:*' hooks git-untracked git-behind-upstream git-ahead-upstream git-diverged-upstream
++vi-git-untracked() {
+ if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == "true" ]] && \
+ git status --porcelain | grep -m 1 "^??" &>/dev/null
+ then
+ hook_com[misc]+="%{$fg[yellow]%}%%"
+ fi
+}
++vi-git-behind-upstream() {
+ if [[ $(git rev-list HEAD..$(git rev-parse --abbrev-ref @{upstream}) --count) -gt 0 ]]; then
+ hook_com[misc]+="%{$fg[red]%}<"
+ fi
+}
++vi-git-ahead-upstream() {
+ if [[ $(git rev-list $(git rev-parse --abbrev-ref @{upstream})..HEAD --count) -gt 0 ]]; then
+ hook_com[misc]+="%{$fg[green]%}>"
+ fi
+}
++vi-git-diverged-upstream() {
+ local ahead_count=$(git rev-list --count $(git rev-parse --abbrev-ref @{upstream})..HEAD 2>/dev/null)
+ local behind_count=$(git rev-list --count HEAD..$(git rev-parse --abbrev-ref @{upstream}) 2>/dev/null)
+ if [[ "$ahead_count" -gt 0 && "$behind_count" -gt 0 ]]; then
+ hook_com[misc]+="%{$fg[white]%}<>"
+ fi
+}
+
+
+### --- ZSH --- ###
+# GnuPG
+unset SSH_AGENT_PID
+if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
+ export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
+ gpgconf --launch gpg-agent
+fi
+export GPG_TTY="$(tty)"
+gpg-connect-agent updatestartuptty /bye >/dev/null
+
+# Options
+stty -ixon # Disable Ctrl+S and Ctrl+Q flow control
+setopt autocd
+setopt extendedglob
+setopt nomatch
+setopt menucomplete
+setopt interactive_comments
+unsetopt bad_pattern
+
+# History in cache directory
+HISTSIZE=10000000
+SAVEHIST=10000000
+HISTFILE="${XDG_DATA_HOME:-${HOME}/.local/share}/history/sh_history"
+setopt inc_append_history
+setopt appendhistory
+setopt share_history
+setopt hist_ignore_all_dups
+setopt hist_ignore_space # ignores all commands starting with a blank space! Usefull for passwords
+
+# Style
+ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS+=(vi-forward-char forward-char)
+ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=(${ZSH_AUTOSUGGEST_ACCEPT_WIDGETS:#(vi-forward-char|forward-char)})
+ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=60'
+zstyle :bracketed-paste-magic paste-init pasteinit
+zstyle :bracketed-paste-magic paste-finish pastefinish
+
+
+### --- Autoload compinit and run it --- ###
+autoload -Uz compinit # Autoload compinit
+_comp_options+=(globdots) # Include hidden files in completion
+compinit # Initialize completion system
+zmodload zsh/complist # Load completion list module
+zmodload -i zsh/parameter # Load last command output
+
+# _dotbare_completion_cmd
+zstyle ':completion:*' menu select # selectable menu
+zstyle ':completion:*' matcher-list 'm:{[:lower:][:upper:]-_}={[:upper:][:lower:]_-}' 'r:|=*' 'l:|=* r:|=*' # case insensitive completion
+zstyle ':completion:*' special-dirs true # Complete . and .. special directories
+zstyle ':completion:*' list-colors '' # colorize completion lists
+zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;34=0=01' # colorize kill list
+
+# fzf-tab
+zstyle ':completion:*:git-checkout:*' sort false # disable sort when completing `git checkout`
+zstyle ':completion:*:descriptions' format '[%d]' # set descriptions format to enable group support
+zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} # set list-colors to enable filename colorizing
+zstyle ':fzf-tab:complete:cd:*' fzf-preview 'exa -1 --color=always $realpath' # preview directory's content with exa when completing cd
+zstyle ':fzf-tab:*' switch-group ',' '.' # switch group using `,` and `.`
+
+
+### --- Load ZSH Configs, Aliases, Functions, and Shortcuts --- ###
+# NOTE: the sequence of sourcing files is strict. Be careful to change the sequence.
+[ -f "${ZDOTDIR:-${HOME}/.config/zsh}/git.zsh" ] && source "${ZDOTDIR:-${HOME}/.config/zsh}/git.zsh"
+[ -f "${ZDOTDIR:-${HOME}/.config/zsh}/p10k.zsh" ] && source "${ZDOTDIR:-${HOME}/.config/zsh}/p10k.zsh"
+[ -f "${ZDOTDIR:-${HOME}/.config/zsh}/autocomplete.zsh" ] && source "${ZDOTDIR:-${HOME}/.config/zsh}/autocomplete.zsh"
+[ -f "${ZDOTDIR:-${HOME}/.config/zsh}/scripts.zsh" ] && source "${ZDOTDIR:-${HOME}/.config/zsh}/scripts.zsh"
+[ -f "${ZDOTDIR:-${HOME}/.config/zsh}/keymaps.zsh" ] && source "${ZDOTDIR:-${HOME}/.config/zsh}/keymaps.zsh"
+[ -f "${ZDOTDIR:-${HOME}/.config/zsh}/plugins.zsh" ] && source "${ZDOTDIR:-${HOME}/.config/zsh}/plugins.zsh"
+[ -f "${ZDOTDIR:-${HOME}/.config/zsh}/packages.zsh" ] && source "${ZDOTDIR:-${HOME}/.config/zsh}/packages.zsh"
+[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/aliasrc" ] && source "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/aliasrc"
+[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/git-aliasrc" ] && source "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/git-aliasrc"
+[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutrc" ] && source "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutrc"
+[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/shortcutenvrc" ] && source "${XDG_CONFIG_HOME:-$HOME/.config}/shell/shortcutenvrc"
+[ -f "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/zshnameddirrc" ] && source "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/zshnameddirrc"
+
+
+### --- AVANTE --- ###
+export AVANTE_ANTHROPIC_API_KEY="$(pass show api/claude/nvim | head -n1)"
+export AVANTE_OPENAI_API_KEY="$(pass show api/chatGPT/nvim | head -n1)"
+# export AVANTE_AZURE_OPENAI_API_KEY="$(pass show api/azure/nvim | head -n1)"
+# export AVANTE_GEMINI_API_KEY="$(pass show api/gemini/nvim | head -n1)"
+# export AVANTE_CO_API_KEY="$(pass show api/cohere/nvim | head -n1)"
+# export AVANTE_AIHUBMIX_API_KEY="$(pass show api/aihubmix/nvim | head -n1)"
+# export AVANTE_MOONSHOT_API_KEY="$(pass show api/moonshot/nvim | head -n1)"
+
+
+### --- OPENAI --- ###
+export OPENAI_API_KEY="$(pass show api/chatGPT/nvim | head -n1)"
+
+
+## --- TMUX --- ###
+if command -v tmux >/dev/null 2>&1 && [ -z "$TMUX" ]; then
+ terminal_count=$(pgrep -u "$USER" -ax "${TERMINAL:-st}" | grep -Ev 'ncmpcpp|newsboat|pulsemixer|spterm|splf|spcalc|stig|vimwikitodo' | wc -l)
+ if [ "$terminal_count" -le 1 ]; then
+ if ! tmux has-session 2>/dev/null; then
+ exec tmux new-session -s code
+ else
+ exec tmux attach-session
+ fi
+ fi
+fi
diff --git a/fedora/.config/zsh/autocomplete.zsh b/fedora/.config/zsh/autocomplete.zsh
new file mode 100644
index 0000000..4763f71
--- /dev/null
+++ b/fedora/.config/zsh/autocomplete.zsh
@@ -0,0 +1,70 @@
+### --- Auto-completes aliases --- ###
+# alias - normal aliases (completed with trailing space)
+# balias - blank aliases (completed without space)
+# ialias - ignored aliases (not completed)
+
+
+# ignored aliases
+typeset -a ialiases
+ialiases=()
+
+ialias() {
+ alias $@
+ args="$@"
+ args=${args%%\=*}
+ ialiases+=(${args##* })
+}
+
+
+# blank aliases
+typeset -a baliases
+baliases=()
+
+balias() {
+ alias $@
+ args="$@"
+ args=${args%%\=*}
+ baliases+=(${args##* })
+}
+
+
+# functionality
+expand-alias-space() {
+ [[ $LBUFFER =~ "\<(${(j:|:)baliases})\$" ]] && insertBlank=$?
+ if [[ ! $LBUFFER =~ "\<(${(j:|:)ialiases})\$" ]]; then
+ zle _expand_alias
+ zle expand-word
+ fi
+ zle self-insert
+ if [[ "$insertBlank" -eq 0 ]]; then
+ zle backward-delete-char
+ fi
+}
+zle -N expand-alias-space
+
+
+# starts multiple args as programs in background
+background() {
+ for ((i=2;i<=$#;i++)); do
+ ${@[1]} ${@[$i]} &> /dev/null &
+ done
+}
+
+
+# A function for expanding any aliases before accepting the line as is and executing the entered command
+expand-alias-and-accept-line() {
+ expand-alias-space
+ # zle .backward-delete-char
+ zle .accept-line
+}
+# zle -N accept-line expand-alias-and-accept-line
+
+
+bindkey '^ ' expand-alias-space # ctrl-space to bypass completion
+bindkey ' ' magic-space
+bindkey -M isearch ' ' magic-space
+
+
+# file completion patterns
+zstyle ':completion:*:*:nvim:*' file-patterns '^*.(pdf|odt|ods|doc|docx|xls|xlsx|odp|ppt|pptx|mp4|mkv|aux):source-files' '*:all-files'
+zstyle ':completion:*:*:(build-workshop|build-document):*' file-patterns '*.mom'
diff --git a/fedora/.config/zsh/git.zsh b/fedora/.config/zsh/git.zsh
new file mode 100644
index 0000000..e5633bf
--- /dev/null
+++ b/fedora/.config/zsh/git.zsh
@@ -0,0 +1,7 @@
+#!/bin/zsh
+
+# Speed up git completion
+# http://talkings.org/post/5236392664/zsh-and-slow-git-completion
+__git_files () {
+ _wanted files expl 'local files' _files
+}
diff --git a/fedora/.config/zsh/keymaps.zsh b/fedora/.config/zsh/keymaps.zsh
new file mode 100644
index 0000000..81b3027
--- /dev/null
+++ b/fedora/.config/zsh/keymaps.zsh
@@ -0,0 +1,342 @@
+#!/bin/zsh
+
+### --- CUSTOM FUNCTIONS --- ###
+# man
+function man-command-line() { pre_cmd "man"; }
+
+# sudo
+function sudo-command-line() { pre_cmd "sudo"; }
+
+# clears the shell and displays the dir tree with level 2
+function clear-tree-2() {
+ clear
+ tree -L 2
+ zle reset-prompt
+}
+zle -N clear-tree-2
+
+# clears the shell and displays the dir tree with level 3
+function clear-tree-3() { clear && tree -L 3 && zle reset-prompt; }
+zle -N clear-tree-3
+
+# prints the current date in ISO 8601
+function print-current-date() { LBUFFER+=$(date -I); }
+zle -N print-current-date
+
+# prints the current Unix timestamp
+function print-unix-timestamp() { LBUFFER+=$(date +%s); }
+zle -N print-unix-timestamp
+
+# git status
+function git-status() { clear && git status && zle reset-prompt; }
+zle -N git-status
+
+# appends the clipboard contents to the buffer
+function vi-append-clip-selection() { char=${RBUFFER:0:1} && RBUFFER=${RBUFFER:1} && RBUFFER=$char$(clippaste)$RBUFFER; }
+
+# copy
+function detect-clipboard() {
+ emulate -L zsh
+
+ if [[ "${OSTYPE}" == darwin* ]] && (( ${+commands[pbcopy]} )) && (( ${+commands[pbpaste]} )); then
+ function clipcopy() { cat "${1:-/dev/stdin}" | pbcopy; }
+ function clippaste() { pbpaste; }
+ elif [[ "${OSTYPE}" == (cygwin|msys)* ]]; then
+ function clipcopy() { cat "${1:-/dev/stdin}" > /dev/clipboard; }
+ function clippaste() { cat /dev/clipboard; }
+ elif (( $+commands[clip.exe] )) && (( $+commands[powershell.exe] )); then
+ function clipcopy() { cat "${1:-/dev/stdin}" | clip.exe; }
+ function clippaste() { powershell.exe -noprofile -command Get-Clipboard; }
+ elif [ -n "${WAYLAND_DISPLAY:-}" ] && (( ${+commands[wl-copy]} )) && (( ${+commands[wl-paste]} )); then
+ function clipcopy() { cat "${1:-/dev/stdin}" | wl-copy &>/dev/null &|; }
+ function clippaste() { wl-paste --no-newline; }
+ elif [ -n "${DISPLAY:-}" ] && (( ${+commands[xsel]} )); then
+ function clipcopy() { cat "${1:-/dev/stdin}" | xsel --clipboard --input; }
+ function clippaste() { xsel --clipboard --output; }
+ elif [ -n "${DISPLAY:-}" ] && (( ${+commands[xclip]} )); then
+ function clipcopy() { cat "${1:-/dev/stdin}" | xclip -selection clipboard -in &>/dev/null &|; }
+ function clippaste() { xclip -out -selection clipboard; }
+ elif (( ${+commands[lemonade]} )); then
+ function clipcopy() { cat "${1:-/dev/stdin}" | lemonade copy; }
+ function clippaste() { lemonade paste; }
+ elif (( ${+commands[doitclient]} )); then
+ function clipcopy() { cat "${1:-/dev/stdin}" | doitclient wclip; }
+ function clippaste() { doitclient wclip -r; }
+ elif (( ${+commands[win32yank]} )); then
+ function clipcopy() { cat "${1:-/dev/stdin}" | win32yank -i; }
+ function clippaste() { win32yank -o; }
+ elif [[ $OSTYPE == linux-android* ]] && (( $+commands[termux-clipboard-set] )); then
+ function clipcopy() { cat "${1:-/dev/stdin}" | termux-clipboard-set; }
+ function clippaste() { termux-clipboard-get; }
+ elif [ -n "${TMUX:-}" ] && (( ${+commands[tmux]} )); then
+ function clipcopy() { tmux load-buffer "${1:--}"; }
+ function clippaste() { tmux save-buffer -; }
+ else
+ function _retry_clipboard_detection_or_fail() {
+ local clipcmd="${1}"; shift
+ if detect-clipboard; then
+ "${clipcmd}" "$@"
+ else
+ print "${clipcmd}: Platform $OSTYPE not supported or xclip/xsel not installed" >&2
+ return 1
+ fi
+ }
+ function clipcopy() { _retry_clipboard_detection_or_fail clipcopy "$@"; }
+ function clippaste() { _retry_clipboard_detection_or_fail clippaste "$@"; }
+ return 1
+ fi
+}
+
+function clipcopy clippaste {
+ unfunction clipcopy clippaste
+ detect-clipboard || true # let one retry
+ "$0" "$@"
+}
+
+function copybuffer () {
+ if builtin which clipcopy &>/dev/null; then
+ printf "%s" "$BUFFER" | clipcopy
+ fi
+}
+
+# Function to switch to the left tmux pane and maximize it
+function tmux_left_pane() {
+ export TMUX_PANE_DIRECTION="right"
+ if [[ $TMUX_PANE_DIRECTION == "right" ]]; then
+ tmux select-pane -L # Move to the left (opposite of right)
+ elif [[ $TMUX_PANE_DIRECTION == "bottom" ]]; then
+ tmux select-pane -U # Move to the top (opposite of bottom)
+ fi
+ tmux resize-pane -Z
+}
+
+
+### --- GLOBAL --- ###
+# emacs style
+bindkey '^a' beginning-of-line
+bindkey '^e' end-of-line
+
+# function key bindings
+bindkey '^X^E' clear-tree-2
+bindkey '^X^W' clear-tree-3
+bindkey '^X^S' git-status
+bindkey '^X^X^T' print-current-date
+bindkey '^X^X^U' print-unix-timestamp
+
+
+### --- VI-MODE --- ###
+if [[ -f "${ZPLUGINDIR:-${HOME}/.local/bin/zsh}/zsh-vi-mode/zsh-vi-mode.plugin.zsh" ]]; then
+ ### --- ZSH-VI-MODE--- ###
+ # config
+ ZVM_INIT_MODE=sourcing
+ ZVM_VI_ESCAPE_BINDKEY=jk
+ ZVM_VI_INSERT_ESCAPE_BINDKEY=$ZVM_VI_ESCAPE_BINDKEY
+ ZVM_VI_VISUAL_ESCAPE_BINDKEY=$ZVM_VI_ESCAPE_BINDKEY
+ ZVM_VI_OPPEND_ESCAPE_BINDKEY=$ZVM_VI_ESCAPE_BINDKEY
+ ZVM_INSERT_MODE_CURSOR=$ZVM_CURSOR_BLINKING_BEAM
+ ZVM_NORMAL_MODE_CURSOR=$ZVM_CURSOR_BLOCK
+ ZVM_OPPEND_MODE_CURSOR=$ZVM_CURSOR_UNDERLINE
+ ZVM_LAZY_KEYBINDINGS=false
+ # ZVM_VI_HIGHLIGHT_BACKGROUND=#458588
+
+
+ function zvm_bind_script() {
+ local keymap="$1"
+ local key="$2"
+ local script="$3"
+
+ # Dynamically define a widget to run the script
+ eval "function run_script_${keymap}_${key//\^/}() {
+ zle -I
+ $script
+ zle reset-prompt
+ }"
+
+ # Register the widget with zsh-vi-mode
+ zvm_define_widget "run_script_${keymap}_${key//\^/}"
+ zvm_bindkey "$keymap" "$key" "run_script_${keymap}_${key//\^/}"
+ }
+
+ function zvm_after_init() {
+ ### --- KEY BINDINGS --- ###
+ # programs & scripts
+ bindkey -s '^B' '^ubc -lq\n'
+ bindkey -s '^D' '^ucdi\n'
+ bindkey -s '^F' '^ufzffiles\n'
+ bindkey -s '^G' '^ulf\n'
+ # bindkey -s '^G' '^uyazi\n'
+ bindkey -s '^N' '^ulastfiles\n'
+ bindkey -s '^O' '^utmo\n'
+ bindkey -s '^P' '^ufzfpass\n'
+ bindkey -s '^Q' '^uhtop\n'
+ bindkey -s '^T' '^usessionizer\n'
+ bindkey -s '^Y' '^ulfcd\n'
+ # bindkey -s '^Y' '^uyazicd\n'
+ bindkey -s '^Z' '^upd\n'
+ # bindkey -s '^_' '^u\n'
+
+ # ctrl+x key bindings
+ zvm_bind_script viins '^X^A' 'ali'
+ zvm_bind_script viins '^X^B' 'gitopenbranch'
+ zvm_bind_script viins '^X^D' 'fD'
+ zvm_bind_script viins '^X^F' 'gitfiles'
+ zvm_bind_script viins '^X^G' 'rgafiles '
+ zvm_bind_script viins '^X^L' 'gloac'
+ zvm_bind_script viins '^X^N' 'lastfiles -l'
+ # zvm_bind_script viins '^X^O' '^u\n'
+ zvm_bind_script viins '^X^Q' 'fpkill'
+ zvm_bind_script viins '^X^R' 'fgst'
+ zvm_bind_script viins '^X^T' 'gitstagedfiles'
+ zvm_bind_script viins '^X^U' 'gitupdate'
+ # zvm_bind_script viins '^X^]' '^u\n'
+ zvm_bind_script viins '^X^_' 'fzffns'
+ zvm_bind_script viins '^X^X^B' 'rbackup'
+ zvm_bind_script viins '^X^X^P' 'pcyr'
+ zvm_bind_script viins '^X^X^R' 'rbackup -r'
+ zvm_bind_script viins '^X^X^S' 'sshadd'
+ zvm_bind_script viins '^X^X^Y' 'yay -Syu && remaps'
+
+ # widgets
+ zvm_define_widget sudo-command-line
+ zvm_bindkey vicmd '^S' sudo-command-line
+ zvm_bindkey viins '^S' sudo-command-line
+ zvm_define_widget insert_last_command_output
+ zvm_bindkey viins '^]' insert_last_command_output
+ zvm_define_widget tmux_left_pane
+ zvm_bindkey vicmd '^[\' tmux_left_pane
+ zvm_bindkey viins '^[\' tmux_left_pane
+ zvm_define_widget man-command-line
+ zvm_bindkey vicmd '^X^M' man-command-line
+ zvm_bindkey viins '^X^M' man-command-line
+ zvm_define_widget vi-append-clip-selection
+ zvm_bindkey viins "^X^P" vi-append-clip-selection
+ zvm_bindkey vicmd "^X^P" vi-append-clip-selection
+ zvm_define_widget copybuffer
+ zvm_bindkey viins "^X^Y" copybuffer
+ zvm_bindkey vicmd "^X^Y" copybuffer
+ }
+
+ # key bindings (lazy)
+ # function zvm_after_lazy_keybindings() {
+ #
+ # }
+
+ # Append a command directly
+ # Since the default initialization mode, this plugin will overwrite the previous key
+ # bindings, this causes the key bindings of other plugins (i.e. fzf, zsh-autocomplete, etc.) to fail.
+ # zvm_after_init_commands+=('[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh')
+ # function zvm_after_init() {
+ # [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
+ # }
+else
+ ### --- Built-in --- ###
+ # Cursor shape
+ bindkey -v # activate vim mode.
+ KEYTIMEOUT=5
+
+ # Change cursor shape for different vi modes.
+ function zle-keymap-select () {
+ case "$KEYMAP $1" in
+ vicmd*|*block) echo -ne '\e[1 q' ;; # block
+ viins*|main*|''|*beam) echo -ne '\e[5 q' ;; # beam
+ esac
+ }
+ zle -N zle-keymap-select
+
+ function zle-line-init() {
+ zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
+ echo -ne "\e[5 q"
+ }
+ zle -N zle-line-init
+ echo -ne '\e[5 q' # Use beam shape cursor on startup.
+ function preexec() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.
+
+
+ ### --- VI-MODE KEY BINDINGS --- ###
+ bindkey -M menuselect 'h' vi-backward-char
+ bindkey -M menuselect 'l' vi-forward-char
+ bindkey -M menuselect 'k' vi-up-line-or-history
+ bindkey -M menuselect 'j' vi-down-line-or-history
+ bindkey -v '^?' backward-delete-char
+ bindkey '^[[P' delete-char
+
+ # edit line in vim with ctrl-v in viins and ctrl-e in vicmd
+ autoload edit-command-line
+ zle -N edit-command-line
+ bindkey '^X^V' edit-command-line # ctrl-v
+ bindkey -M vicmd '^[[P' vi-delete-char # delete
+ bindkey -M vicmd '^e' edit-command-line # ctrl-e
+ bindkey -M visual '^[[P' vi-delete # delete
+ bindkey -M viins 'jk' vi-cmd-mode # normal mode
+
+ # last command output
+ zle -N insert_last_command_output
+ bindkey -M viins '^]' insert_last_command_output
+
+ # man
+ zle -N man-command-line
+ bindkey -M emacs '^X^M' man-command-line
+ bindkey -M vicmd '^X^M' man-command-line
+ bindkey -M viins '^X^M' man-command-line
+
+ # sudo
+ zle -N sudo-command-line
+ bindkey -M emacs '^S' sudo-command-line
+ bindkey -M vicmd '^S' sudo-command-line
+ bindkey -M viins '^S' sudo-command-line
+
+ # bind y/Y to yank until end of line/yank whole line
+ # bindkey -M vicmd y zsh-system-clipboard-vicmd-vi-yank-eol
+ # bindkey -M vicmd Y zsh-system-clipboard-vicmd-vi-yank-whole-line
+
+ # appends the clipboard contents to the buffer
+ zle -N vi-append-clip-selection
+ bindkey -M emacs "^X^P" vi-append-clip-selection
+ bindkey -M viins "^X^P" vi-append-clip-selection
+ bindkey -M vicmd "^X^P" vi-append-clip-selection
+
+ # copy buffer
+ zle -N copybuffer
+ bindkey -M emacs "^X^Y" copybuffer
+ bindkey -M viins "^X^Y" copybuffer
+ bindkey -M vicmd "^X^Y" copybuffer
+
+ # Register the function as a ZLE widget
+ zle -N tmux_left_pane
+ bindkey -M vicmd '^[\' tmux_left_pane
+ bindkey -M viins '^[\' tmux_left_pane
+
+ ### --- DEFAULT KEY BINDINGS --- ###
+ # programs & scripts
+ bindkey -s '^B' '^ubc -lq\n'
+ bindkey -s '^D' '^ucdi\n'
+ bindkey -s '^F' '^ufzffiles\n'
+ bindkey -s '^G' '^ulf\n'
+ bindkey -s '^N' '^ulastfiles\n'
+ bindkey -s '^O' '^utmo\n'
+ bindkey -s '^P' '^ufzfpass\n'
+ bindkey -s '^Q' '^uhtop\n'
+ bindkey -s '^T' '^usessionizer\n'
+ bindkey -s '^Y' '^ulfcd\n'
+ bindkey -s '^Z' '^upd\n'
+ bindkey -s '^_' '^ucht\n'
+ bindkey -s '^X^A' '^uali\n'
+ bindkey -s '^X^B' '^ugitopenbranch\n'
+ bindkey -s '^X^D' '^ufD\n'
+ bindkey -s '^X^F' '^ugitfiles\n'
+ bindkey -s '^X^G' '^urgafiles '
+ bindkey -s '^X^L' '^ugloac\n'
+ bindkey -s '^X^N' '^ulastfiles -l\n'
+ # bindkey -s '^X^O' '^u\n'
+ bindkey -s '^X^Q' '^ufpkill\n'
+ bindkey -s '^X^R' '^ufgst\n'
+ bindkey -s '^X^T' '^ugitstagedfiles\n'
+ bindkey -s '^X^U' '^ugitupdate\n'
+ # bindkey -s '^X^]' '^u\n'
+ bindkey -s '^X^_' '^ufzffns\n'
+ bindkey -s '^X^X^B' '^urbackup\n'
+ bindkey -s '^X^X^P' '^upcyr\n'
+ bindkey -s '^X^X^R' '^urbackup -r\n'
+ bindkey -s '^X^X^S' '^usshadd\n'
+ bindkey -s '^X^X^Y' '^uyay -Syu && remaps\n'
+fi
diff --git a/fedora/.config/zsh/p10k.zsh b/fedora/.config/zsh/p10k.zsh
new file mode 100644
index 0000000..604d76d
--- /dev/null
+++ b/fedora/.config/zsh/p10k.zsh
@@ -0,0 +1,1721 @@
+#!/bin/zsh
+
+# Generated by Powerlevel10k configuration wizard on 2024-03-06 at 08:21 CST.
+# Based on romkatv/powerlevel10k/config/p10k-lean.zsh, checksum 52020.
+# Wizard options: nerdfont-v3 + powerline, large icons, unicode, lean, 24h time,
+# 2 lines, disconnected, no frame, sparse, many icons, fluent, transient_prompt,
+# instant_prompt=verbose.
+# Type `p10k configure` to generate another config.
+#
+# Config for Powerlevel10k with lean prompt style. Type `p10k configure` to generate
+# your own config based on it.
+#
+# Tip: Looking for a nice color? Here's a one-liner to print colormap.
+#
+# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done
+
+# Temporarily change options.
+'builtin' 'local' '-a' 'p10k_config_opts'
+[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases')
+[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob')
+[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand')
+'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand'
+
+() {
+ emulate -L zsh -o extended_glob
+
+ # Unset all configuration options. This allows you to apply configuration changes without
+ # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`.
+ unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR'
+
+ # Zsh >= 5.1 is required.
+ [[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return
+
+ # The list of segments shown on the left. Fill it with the most important segments.
+ typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
+ # =========================[ Line #1 ]=========================
+ os_icon # os identifier
+ dir # current directory
+ vcs # git status
+ # =========================[ Line #2 ]=========================
+ newline # \n
+ prompt_char # prompt symbol
+ )
+
+ # The list of segments shown on the right. Fill it with less important segments.
+ # Right prompt on the last prompt line (where you are typing your commands) gets
+ # automatically hidden when the input line reaches it. Right prompt above the
+ # last prompt line gets hidden if it would overlap with left prompt.
+ typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
+ # =========================[ Line #1 ]=========================
+ status # exit code of the last command
+ command_execution_time # duration of the last command
+ background_jobs # presence of background jobs
+ direnv # direnv status (https://direnv.net/)
+ asdf # asdf version manager (https://github.com/asdf-vm/asdf)
+ virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html)
+ anaconda # conda environment (https://conda.io/)
+ pyenv # python environment (https://github.com/pyenv/pyenv)
+ goenv # go environment (https://github.com/syndbg/goenv)
+ nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv)
+ nvm # node.js version from nvm (https://github.com/nvm-sh/nvm)
+ nodeenv # node.js environment (https://github.com/ekalinin/nodeenv)
+ # node_version # node.js version
+ # go_version # go version (https://golang.org)
+ # rust_version # rustc version (https://www.rust-lang.org)
+ # dotnet_version # .NET version (https://dotnet.microsoft.com)
+ # php_version # php version (https://www.php.net/)
+ # laravel_version # laravel php framework version (https://laravel.com/)
+ # java_version # java version (https://www.java.com/)
+ # package # name@version from package.json (https://docs.npmjs.com/files/package.json)
+ rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv)
+ rvm # ruby version from rvm (https://rvm.io)
+ fvm # flutter version management (https://github.com/leoafarias/fvm)
+ luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv)
+ jenv # java version from jenv (https://github.com/jenv/jenv)
+ plenv # perl version from plenv (https://github.com/tokuhirom/plenv)
+ perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew)
+ phpenv # php version from phpenv (https://github.com/phpenv/phpenv)
+ scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv)
+ haskell_stack # haskell version from stack (https://haskellstack.org/)
+ kubecontext # current kubernetes context (https://kubernetes.io/)
+ terraform # terraform workspace (https://www.terraform.io)
+ # terraform_version # terraform version (https://www.terraform.io)
+ aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)
+ aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/)
+ azure # azure account name (https://docs.microsoft.com/en-us/cli/azure)
+ gcloud # google cloud cli account and project (https://cloud.google.com/)
+ google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production)
+ toolbox # toolbox name (https://github.com/containers/toolbox)
+ context # user@hostname
+ nordvpn # nordvpn connection status, linux only (https://nordvpn.com/)
+ ranger # ranger shell (https://github.com/ranger/ranger)
+ yazi # yazi shell (https://github.com/sxyazi/yazi)
+ nnn # nnn shell (https://github.com/jarun/nnn)
+ lf # lf shell (https://github.com/gokcehan/lf)
+ xplr # xplr shell (https://github.com/sayanarijit/xplr)
+ vim_shell # vim shell indicator (:sh)
+ midnight_commander # midnight commander shell (https://midnight-commander.org/)
+ nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html)
+ chezmoi_shell # chezmoi shell (https://www.chezmoi.io/)
+ # vpn_ip # virtual private network indicator
+ load # CPU load
+ # disk_usage # disk usage
+ ram # free RAM
+ # swap # used swap
+ todo # todo items (https://github.com/todotxt/todo.txt-cli)
+ timewarrior # timewarrior tracking status (https://timewarrior.net/)
+ taskwarrior # taskwarrior task count (https://taskwarrior.org/)
+ per_directory_history # Oh My Zsh per-directory-history local/global indicator
+ # cpu_arch # CPU architecture
+ time # current time
+ # =========================[ Line #2 ]=========================
+ newline
+ # ip # ip address and bandwidth usage for a specified network interface
+ # public_ip # public IP address
+ proxy # system-wide http/https/ftp proxy
+ battery # internal battery
+ # wifi # wifi speed
+ # example # example user-defined segment (see prompt_example function below)
+ )
+
+ # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you.
+ typeset -g POWERLEVEL9K_MODE=nerdfont-v3
+ # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid
+ # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added.
+ typeset -g POWERLEVEL9K_ICON_PADDING=moderate
+
+ # Basic style options that define the overall look of your prompt. You probably don't want to
+ # change them.
+ typeset -g POWERLEVEL9K_BACKGROUND= # transparent background
+ typeset -g POWERLEVEL9K_{LEFT,RIGHT}_{LEFT,RIGHT}_WHITESPACE= # no surrounding whitespace
+ typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SUBSEGMENT_SEPARATOR=' ' # separate segments with a space
+ typeset -g POWERLEVEL9K_{LEFT,RIGHT}_SEGMENT_SEPARATOR= # no end-of-line symbol
+
+ # When set to true, icons appear before content on both sides of the prompt. When set
+ # to false, icons go after content. If empty or not set, icons go before content in the left
+ # prompt and after content in the right prompt.
+ #
+ # You can also override it for a specific segment:
+ #
+ # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false
+ #
+ # Or for a specific segment in specific state:
+ #
+ # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false
+ typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=true
+
+ # Add an empty line before each prompt.
+ typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
+
+ # Connect left prompt lines with these symbols.
+ typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=
+ typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX=
+ typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX=
+ # Connect right prompt lines with these symbols.
+ typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX=
+ typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX=
+ typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX=
+
+ # The left end of left prompt.
+ typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL=
+ # The right end of right prompt.
+ typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL=
+
+ # Ruler, a.k.a. the horizontal line before each prompt. If you set it to true, you'll
+ # probably want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false above and
+ # POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' below.
+ typeset -g POWERLEVEL9K_SHOW_RULER=false
+ typeset -g POWERLEVEL9K_RULER_CHAR='─' # reasonable alternative: '·'
+ typeset -g POWERLEVEL9K_RULER_FOREGROUND=242
+
+ # Filler between left and right prompt on the first prompt line. You can set it to '·' or '─'
+ # to make it easier to see the alignment between left and right prompt and to separate prompt
+ # from command output. It serves the same purpose as ruler (see above) without increasing
+ # the number of prompt lines. You'll probably want to set POWERLEVEL9K_SHOW_RULER=false
+ # if using this. You might also like POWERLEVEL9K_PROMPT_ADD_NEWLINE=false for more compact
+ # prompt.
+ typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' '
+ if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then
+ # The color of the filler.
+ typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=242
+ # Add a space between the end of left prompt and the filler.
+ typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=' '
+ # Add a space between the filler and the start of right prompt.
+ typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL=' '
+ # Start filler from the edge of the screen if there are no left segments on the first line.
+ typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}'
+ # End filler on the edge of the screen if there are no right segments on the first line.
+ typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}'
+ fi
+
+ #################################[ os_icon: os identifier ]##################################
+ # OS identifier color.
+ typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐'
+
+ ################################[ prompt_char: prompt symbol ]################################
+ # Green prompt symbol if the last command succeeded.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76
+ # Red prompt symbol if the last command failed.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196
+ # Default prompt symbol.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯'
+ # Prompt symbol in command vi mode.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION=''
+ # Prompt symbol in visual vi mode.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V'
+ # Prompt symbol in overwrite vi mode.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶'
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true
+ # No line terminator if prompt_char is the last segment.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=''
+ # No line introducer if prompt_char is the first segment.
+ typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL=
+
+ ##################################[ dir: current directory ]##################################
+ # Default current directory color.
+ typeset -g POWERLEVEL9K_DIR_FOREGROUND=31
+ # If directory is too long, shorten some of its segments to the shortest possible unique
+ # prefix. The shortened directory can be tab-completed to the original.
+ typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique
+ # Replace removed segment suffixes with this symbol.
+ typeset -g POWERLEVEL9K_SHORTEN_DELIMITER=
+ # Color of the shortened directory segments.
+ typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103
+ # Color of the anchor directory segments. Anchor segments are never shortened. The first
+ # segment is always an anchor.
+ typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39
+ # Display anchor directory segments in bold.
+ typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true
+ # Don't shorten directories that contain any of these files. They are anchors.
+ local anchor_files=(
+ .bzr
+ .citc
+ .git
+ .hg
+ .node-version
+ .python-version
+ .go-version
+ .ruby-version
+ .lua-version
+ .java-version
+ .perl-version
+ .php-version
+ .tool-versions
+ .shorten_folder_marker
+ .svn
+ .terraform
+ CVS
+ Cargo.toml
+ composer.json
+ go.mod
+ package.json
+ stack.yaml
+ )
+ typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})"
+ # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains
+ # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is
+ # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first)
+ # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers
+ # and other directories don't.
+ #
+ # Optionally, "first" and "last" can be followed by ":<offset>" where <offset> is an integer.
+ # This moves the truncation point to the right (positive offset) or to the left (negative offset)
+ # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0"
+ # respectively.
+ typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false
+ # Don't shorten this many last directory segments. They are anchors.
+ typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1
+ # Shorten directory if it's longer than this even if there is space for it. The value can
+ # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty,
+ # directory will be shortened only when prompt doesn't fit or when other parameters demand it
+ # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below).
+ # If set to `0`, directory will always be shortened to its minimum length.
+ typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80
+ # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this
+ # many columns for typing commands.
+ typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40
+ # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least
+ # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands.
+ typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50
+ # If set to true, embed a hyperlink into the directory. Useful for quickly
+ # opening a directory in the file manager simply by clicking the link.
+ # Can also be handy when the directory is shortened, as it allows you to see
+ # the full directory that was used in previous commands.
+ typeset -g POWERLEVEL9K_DIR_HYPERLINK=false
+
+ # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON
+ # and POWERLEVEL9K_DIR_CLASSES below.
+ typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3
+
+ # The default icon shown next to non-writable and non-existent directories when
+ # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3.
+ # typeset -g POWERLEVEL9K_LOCK_ICON='⭐'
+
+ # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different
+ # directories. It must be an array with 3 * N elements. Each triplet consists of:
+ #
+ # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with
+ # extended_glob option enabled.
+ # 2. Directory class for the purpose of styling.
+ # 3. An empty string.
+ #
+ # Triplets are tried in order. The first triplet whose pattern matches $PWD wins.
+ #
+ # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories
+ # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively.
+ #
+ # For example, given these settings:
+ #
+ # typeset -g POWERLEVEL9K_DIR_CLASSES=(
+ # '~/work(|/*)' WORK ''
+ # '~(|/*)' HOME ''
+ # '*' DEFAULT '')
+ #
+ # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one
+ # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or
+ # WORK_NON_EXISTENT.
+ #
+ # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an
+ # option to define custom colors and icons for different directory classes.
+ #
+ # # Styling for WORK.
+ # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31
+ # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103
+ # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39
+ #
+ # # Styling for WORK_NOT_WRITABLE.
+ # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31
+ # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103
+ # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39
+ #
+ # # Styling for WORK_NON_EXISTENT.
+ # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31
+ # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103
+ # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39
+ #
+ # If a styling parameter isn't explicitly defined for some class, it falls back to the classless
+ # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls
+ # back to POWERLEVEL9K_DIR_FOREGROUND.
+ #
+ # typeset -g POWERLEVEL9K_DIR_CLASSES=()
+
+ # Custom prefix.
+ # typeset -g POWERLEVEL9K_DIR_PREFIX='%fin '
+
+ #####################################[ vcs: git status ]######################################
+ # Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon.
+ typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 '
+
+ # Untracked files icon. It's really a question mark, your font isn't broken.
+ # Change the value of this parameter to show a different icon.
+ typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?'
+
+ # Formatter for Git status.
+ #
+ # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42.
+ #
+ # You can edit the function to customize how Git status looks.
+ #
+ # VCS_STATUS_* parameters are set by gitstatus plugin. See reference:
+ # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh.
+ function my_git_formatter() {
+ emulate -L zsh
+
+ if [[ -n $P9K_CONTENT ]]; then
+ # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from
+ # gitstatus plugin). VCS_STATUS_* parameters are not available in this case.
+ typeset -g my_git_format=$P9K_CONTENT
+ return
+ fi
+
+ if (( $1 )); then
+ # Styling for up-to-date Git status.
+ local meta='%f' # default foreground
+ local clean='%76F' # green foreground
+ local modified='%178F' # yellow foreground
+ local untracked='%39F' # blue foreground
+ local conflicted='%196F' # red foreground
+ else
+ # Styling for incomplete and stale Git status.
+ local meta='%244F' # grey foreground
+ local clean='%244F' # grey foreground
+ local modified='%244F' # grey foreground
+ local untracked='%244F' # grey foreground
+ local conflicted='%244F' # grey foreground
+ fi
+
+ local res
+
+ if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then
+ local branch=${(V)VCS_STATUS_LOCAL_BRANCH}
+ # If local branch name is at most 32 characters long, show it in full.
+ # Otherwise show the first 12 … the last 12.
+ # Tip: To always show local branch name in full without truncation, delete the next line.
+ (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line
+ res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}"
+ fi
+
+ if [[ -n $VCS_STATUS_TAG
+ # Show tag only if not on a branch.
+ # Tip: To always show tag, delete the next line.
+ && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line
+ ]]; then
+ local tag=${(V)VCS_STATUS_TAG}
+ # If tag name is at most 32 characters long, show it in full.
+ # Otherwise show the first 12 … the last 12.
+ # Tip: To always show tag name in full without truncation, delete the next line.
+ (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line
+ res+="${meta}#${clean}${tag//\%/%%}"
+ fi
+
+ # Display the current Git commit if there is no branch and no tag.
+ # Tip: To always display the current Git commit, delete the next line.
+ [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line
+ res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}"
+
+ # Show tracking branch name if it differs from local branch.
+ if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then
+ res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}"
+ fi
+
+ # Display "wip" if the latest commit's summary contains "wip" or "WIP".
+ if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then
+ res+=" ${modified}wip"
+ fi
+
+ if (( VCS_STATUS_COMMITS_AHEAD || VCS_STATUS_COMMITS_BEHIND )); then
+ # ⇣42 if behind the remote.
+ (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}"
+ # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42.
+ (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" "
+ (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}"
+ elif [[ -n $VCS_STATUS_REMOTE_BRANCH ]]; then
+ # Tip: Uncomment the next line to display '=' if up to date with the remote.
+ # res+=" ${clean}="
+ fi
+
+ # ⇠42 if behind the push remote.
+ (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}"
+ (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" "
+ # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42.
+ (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}"
+ # *42 if have stashes.
+ (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}"
+ # 'merge' if the repo is in an unusual state.
+ [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}"
+ # ~42 if have merge conflicts.
+ (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}"
+ # +42 if have staged changes.
+ (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}"
+ # !42 if have unstaged changes.
+ (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}"
+ # ?42 if have untracked files. It's really a question mark, your font isn't broken.
+ # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon.
+ # Remove the next line if you don't want to see untracked files at all.
+ (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}"
+ # "─" if the number of unstaged files is unknown. This can happen due to
+ # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower
+ # than the number of files in the Git index, or due to bash.showDirtyState being set to false
+ # in the repository config. The number of staged and untracked files may also be unknown
+ # in this case.
+ (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─"
+
+ typeset -g my_git_format=$res
+ }
+ functions -M my_git_formatter 2>/dev/null
+
+ # Don't count the number of unstaged, untracked and conflicted files in Git repositories with
+ # more than this many files in the index. Negative value means infinity.
+ #
+ # If you are working in Git repositories with tens of millions of files and seeing performance
+ # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output
+ # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's
+ # config: `git config bash.showDirtyState false`.
+ typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1
+
+ # Don't show Git status in prompt for repositories whose workdir matches this pattern.
+ # For example, if set to '~', the Git repository at $HOME/.git will be ignored.
+ # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'.
+ typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~'
+
+ # Disable the default Git status formatting.
+ typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true
+ # Install our own Git status formatter.
+ typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}'
+ typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}'
+ # Enable counters for staged, unstaged, etc.
+ typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1
+
+ # Icon color.
+ typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76
+ typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # Custom prefix.
+ typeset -g POWERLEVEL9K_VCS_PREFIX='%fon '
+
+ # Show status of repositories of these types. You can add svn and/or hg if you are
+ # using them. If you do, your prompt may become slow even when your current directory
+ # isn't in an svn or hg repository.
+ typeset -g POWERLEVEL9K_VCS_BACKENDS=(git)
+
+ # These settings are used for repositories other than Git or when gitstatusd fails and
+ # Powerlevel10k has to fall back to using vcs_info.
+ typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76
+ typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76
+ typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178
+
+ ##########################[ status: exit code of the last command ]###########################
+ # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and
+ # style them independently from the regular OK and ERROR state.
+ typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true
+
+ # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as
+ # it will signify success by turning green.
+ typeset -g POWERLEVEL9K_STATUS_OK=false
+ typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70
+ typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔'
+
+ # Status when some part of a pipe command fails but the overall exit status is zero. It may look
+ # like this: 1|0.
+ typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true
+ typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70
+ typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔'
+
+ # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as
+ # it will signify error by turning red.
+ typeset -g POWERLEVEL9K_STATUS_ERROR=false
+ typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160
+ typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘'
+
+ # Status when the last command was terminated by a signal.
+ typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true
+ typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160
+ # Use terse signal names: "INT" instead of "SIGINT(2)".
+ typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false
+ typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘'
+
+ # Status when some part of a pipe command fails and the overall exit status is also non-zero.
+ # It may look like this: 1|0.
+ typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true
+ typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160
+ typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘'
+
+ ###################[ command_execution_time: duration of the last command ]###################
+ # Show duration of the last command if takes at least this many seconds.
+ typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3
+ # Show this many fractional digits. Zero means round to seconds.
+ typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
+ # Execution time color.
+ typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=101
+ # Duration format: 1d 2h 3m 4s.
+ typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # Custom prefix.
+ typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%ftook '
+
+ #######################[ background_jobs: presence of background jobs ]#######################
+ # Don't show the number of background jobs.
+ typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false
+ # Background jobs color.
+ typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=70
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #######################[ direnv: direnv status (https://direnv.net/) ]########################
+ # Direnv color.
+ typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]###############
+ # Default asdf color. Only used to display tools for which there is no color override (see below).
+ # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND.
+ typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66
+
+ # There are four parameters that can be used to hide asdf tools. Each parameter describes
+ # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at
+ # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to
+ # hide a tool, it gets shown.
+ #
+ # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and
+ # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands:
+ #
+ # asdf local python 3.8.1
+ # asdf global python 3.8.1
+ #
+ # After running both commands the current python version is 3.8.1 and its source is "local" as
+ # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false,
+ # it'll hide python version in this case because 3.8.1 is the same as the global version.
+ # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't
+ # contain "local".
+
+ # Hide tool versions that don't come from one of these sources.
+ #
+ # Available sources:
+ #
+ # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable"
+ # - local `asdf current` says "set by /some/not/home/directory/file"
+ # - global `asdf current` says "set by /home/username/file"
+ #
+ # Note: If this parameter is set to (shell local global), it won't hide tools.
+ # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES.
+ typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global)
+
+ # If set to false, hide tool versions that are the same as global.
+ #
+ # Note: The name of this parameter doesn't reflect its meaning at all.
+ # Note: If this parameter is set to true, it won't hide tools.
+ # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW.
+ typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false
+
+ # If set to false, hide tool versions that are equal to "system".
+ #
+ # Note: If this parameter is set to true, it won't hide tools.
+ # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM.
+ typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true
+
+ # If set to non-empty value, hide tools unless there is a file matching the specified file pattern
+ # in the current directory, or its parent directory, or its grandparent directory, and so on.
+ #
+ # Note: If this parameter is set to empty value, it won't hide tools.
+ # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments.
+ # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB.
+ #
+ # Example: Hide nodejs version when there is no package.json and no *.js files in the current
+ # directory, in `..`, in `../..` and so on.
+ #
+ # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json'
+ typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB=
+
+ # Ruby version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168
+ # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Python version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37
+ # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Go version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37
+ # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Node.js version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70
+ # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Rust version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37
+ # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # .NET Core version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134
+ # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_DOTNET_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Flutter version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38
+ # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Lua version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32
+ # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Java version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32
+ # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Perl version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67
+ # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Erlang version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125
+ # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Elixir version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129
+ # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Postgres version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31
+ # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # PHP version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99
+ # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Haskell version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172
+ # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ # Julia version from asdf.
+ typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70
+ # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar'
+
+ ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]###########
+ # NordVPN connection indicator color.
+ typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39
+ # Hide NordVPN connection indicator when not connected.
+ typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION=
+ typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION=
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]##################
+ # Ranger shell color.
+ typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ####################[ yazi: yazi shell (https://github.com/sxyazi/yazi) ]#####################
+ # Yazi shell color.
+ typeset -g POWERLEVEL9K_YAZI_FOREGROUND=178
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_YAZI_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]#######################
+ # Nnn shell color.
+ typeset -g POWERLEVEL9K_NNN_FOREGROUND=72
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ######################[ lf: lf shell (https://github.com/gokcehan/lf) ]#######################
+ # lf shell color.
+ typeset -g POWERLEVEL9K_LF_FOREGROUND=72
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]##################
+ # xplr shell color.
+ typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ###########################[ vim_shell: vim shell indicator (:sh) ]###########################
+ # Vim shell indicator color.
+ typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]######
+ # Midnight Commander shell color.
+ typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]##
+ # Nix shell color.
+ typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74
+
+ # Display the icon of nix_shell if PATH contains a subdirectory of /nix/store.
+ # typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false
+
+ # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line.
+ # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION=
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##################[ chezmoi_shell: chezmoi shell (https://www.chezmoi.io/) ]##################
+ # chezmoi shell color.
+ typeset -g POWERLEVEL9K_CHEZMOI_SHELL_FOREGROUND=33
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_CHEZMOI_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##################################[ disk_usage: disk usage ]##################################
+ # Colors for different levels of disk usage.
+ typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35
+ typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220
+ typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160
+ # Thresholds for different levels of disk usage (percentage points).
+ typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90
+ typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95
+ # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent.
+ typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ######################################[ ram: free RAM ]#######################################
+ # RAM color.
+ typeset -g POWERLEVEL9K_RAM_FOREGROUND=66
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #####################################[ swap: used swap ]######################################
+ # Swap color.
+ typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ######################################[ load: CPU load ]######################################
+ # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15.
+ typeset -g POWERLEVEL9K_LOAD_WHICH=5
+ # Load color when load is under 50%.
+ typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66
+ # Load color when load is between 50% and 70%.
+ typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178
+ # Load color when load is over 70%.
+ typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################
+ # Todo color.
+ typeset -g POWERLEVEL9K_TODO_FOREGROUND=110
+ # Hide todo when the total number of tasks is zero.
+ typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true
+ # Hide todo when the number of tasks after filtering is zero.
+ typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false
+
+ # Todo format. The following parameters are available within the expansion.
+ #
+ # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks.
+ # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering.
+ #
+ # These variables correspond to the last line of the output of `todo.sh -p ls`:
+ #
+ # TODO: 24 of 42 tasks shown
+ #
+ # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT.
+ #
+ # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT'
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############
+ # Timewarrior color.
+ typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110
+ # If the tracked task is longer than 24 characters, truncate and append "…".
+ # Tip: To always display tasks without truncation, delete the following parameter.
+ # Tip: To hide task names and display just the icon when time tracking is enabled, set the
+ # value of the following parameter to "".
+ typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}'
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]##############
+ # Taskwarrior color.
+ typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74
+
+ # Taskwarrior segment format. The following parameters are available within the expansion.
+ #
+ # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`.
+ # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`.
+ #
+ # Zero values are represented as empty parameters.
+ #
+ # The default format:
+ #
+ # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT'
+ #
+ # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT'
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ######[ per_directory_history: Oh My Zsh per-directory-history local/global indicator ]#######
+ # Color when using local/global history.
+ typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_FOREGROUND=135
+ typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_FOREGROUND=130
+
+ # Tip: Uncomment the next two lines to hide "local"/"global" text and leave just the icon.
+ # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_CONTENT_EXPANSION=''
+ # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_CONTENT_EXPANSION=''
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ################################[ cpu_arch: CPU architecture ]################################
+ # CPU architecture color.
+ typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=172
+
+ # Hide the segment when on a specific CPU architecture.
+ # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION=
+ # typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION=
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##################################[ context: user@hostname ]##################################
+ # Context color when running with privileges.
+ typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178
+ # Context color in SSH without privileges.
+ typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180
+ # Default context color (no privileges, no SSH).
+ typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180
+
+ # Context format when running with privileges: bold user@hostname.
+ typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m'
+ # Context format when in SSH without privileges: user@hostname.
+ typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m'
+ # Default context format (no privileges, no SSH): user@hostname.
+ typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m'
+
+ # Don't show context unless running with privileges or in SSH.
+ # Tip: Remove the next line to always show context.
+ typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # Custom prefix.
+ typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%fwith '
+
+ ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]###
+ # Python virtual environment color.
+ typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37
+ # Don't show Python version next to the virtual environment name.
+ typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
+ # If set to "false", won't show virtualenv if pyenv is already shown.
+ # If set to "if-different", won't show virtualenv if it's the same as pyenv.
+ typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false
+ # Separate environment name from Python version only with a space.
+ typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #####################[ anaconda: conda environment (https://conda.io/) ]######################
+ # Anaconda environment color.
+ typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37
+
+ # Anaconda segment format. The following parameters are available within the expansion.
+ #
+ # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment.
+ # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment.
+ # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below).
+ # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version).
+ #
+ # CONDA_PROMPT_MODIFIER can be configured with the following command:
+ #
+ # conda config --set env_prompt '({default_env}) '
+ #
+ # The last argument is a Python format string that can use the following variables:
+ #
+ # - prefix The same as CONDA_PREFIX.
+ # - default_env The same as CONDA_DEFAULT_ENV.
+ # - name The last segment of CONDA_PREFIX.
+ # - stacked_env Comma-separated list of names in the environment stack. The first element is
+ # always the same as default_env.
+ #
+ # Note: '({default_env}) ' is the default value of env_prompt.
+ #
+ # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER
+ # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former
+ # is empty.
+ typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}'
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################
+ # Pyenv color.
+ typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37
+ # Hide python version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global)
+ # If set to false, hide python version if it's the same as global:
+ # $(pyenv version-name) == $(pyenv global).
+ typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide python version if it's equal to "system".
+ typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true
+
+ # Pyenv segment format. The following parameters are available within the expansion.
+ #
+ # - P9K_CONTENT Current pyenv environment (pyenv version-name).
+ # - P9K_PYENV_PYTHON_VERSION Current python version (python --version).
+ #
+ # The default format has the following logic:
+ #
+ # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or
+ # starts with "$P9K_PYENV_PYTHON_VERSION/".
+ # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION".
+ typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}'
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################
+ # Goenv color.
+ typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37
+ # Hide go version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global)
+ # If set to false, hide go version if it's the same as global:
+ # $(goenv version-name) == $(goenv global).
+ typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide go version if it's equal to "system".
+ typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]##########
+ # Nodenv color.
+ typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70
+ # Hide node version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global)
+ # If set to false, hide node version if it's the same as global:
+ # $(nodenv version-name) == $(nodenv global).
+ typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide node version if it's equal to "system".
+ typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]###############
+ # Nvm color.
+ typeset -g POWERLEVEL9K_NVM_FOREGROUND=70
+ # If set to false, hide node version if it's the same as default:
+ # $(nvm version current) == $(nvm version default).
+ typeset -g POWERLEVEL9K_NVM_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide node version if it's equal to "system".
+ typeset -g POWERLEVEL9K_NVM_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############
+ # Nodeenv color.
+ typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70
+ # Don't show Node version next to the environment name.
+ typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false
+ # Separate environment name from Node version only with a space.
+ typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER=
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##############################[ node_version: node.js version ]###############################
+ # Node version color.
+ typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70
+ # Show node version only when in a directory tree containing package.json.
+ typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #######################[ go_version: go version (https://golang.org) ]########################
+ # Go version color.
+ typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37
+ # Show go version only when in a go project subdirectory.
+ typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #################[ rust_version: rustc version (https://www.rust-lang.org) ]##################
+ # Rust version color.
+ typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37
+ # Show rust version only when in a rust project subdirectory.
+ typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################
+ # .NET version color.
+ typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134
+ # Show .NET version only when in a .NET project subdirectory.
+ typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #####################[ php_version: php version (https://www.php.net/) ]######################
+ # PHP version color.
+ typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99
+ # Show PHP version only when in a PHP project subdirectory.
+ typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]###########
+ # Laravel version color.
+ typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ####################[ java_version: java version (https://www.java.com/) ]####################
+ # Java version color.
+ typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32
+ # Show java version only when in a java project subdirectory.
+ typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true
+ # Show brief version.
+ typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]####
+ # Package color.
+ typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117
+ # Package format. The following parameters are available within the expansion.
+ #
+ # - P9K_PACKAGE_NAME The value of `name` field in package.json.
+ # - P9K_PACKAGE_VERSION The value of `version` field in package.json.
+ #
+ # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}'
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]##############
+ # Rbenv color.
+ typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168
+ # Hide ruby version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global)
+ # If set to false, hide ruby version if it's the same as global:
+ # $(rbenv version-name) == $(rbenv global).
+ typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide ruby version if it's equal to "system".
+ typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #######################[ rvm: ruby version from rvm (https://rvm.io) ]########################
+ # Rvm color.
+ typeset -g POWERLEVEL9K_RVM_FOREGROUND=168
+ # Don't show @gemset at the end.
+ typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false
+ # Don't show ruby- at the front.
+ typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############
+ # Fvm color.
+ typeset -g POWERLEVEL9K_FVM_FOREGROUND=38
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]###########
+ # Lua color.
+ typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32
+ # Hide lua version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global)
+ # If set to false, hide lua version if it's the same as global:
+ # $(luaenv version-name) == $(luaenv global).
+ typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide lua version if it's equal to "system".
+ typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################
+ # Java color.
+ typeset -g POWERLEVEL9K_JENV_FOREGROUND=32
+ # Hide java version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global)
+ # If set to false, hide java version if it's the same as global:
+ # $(jenv version-name) == $(jenv global).
+ typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide java version if it's equal to "system".
+ typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############
+ # Perl color.
+ typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67
+ # Hide perl version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global)
+ # If set to false, hide perl version if it's the same as global:
+ # $(plenv version-name) == $(plenv global).
+ typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide perl version if it's equal to "system".
+ typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############
+ # Perlbrew color.
+ typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67
+ # Show perlbrew version only when in a perl project subdirectory.
+ typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true
+ # Don't show "perl-" at the front.
+ typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############
+ # PHP color.
+ typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99
+ # Hide php version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global)
+ # If set to false, hide php version if it's the same as global:
+ # $(phpenv version-name) == $(phpenv global).
+ typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide php version if it's equal to "system".
+ typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]#######
+ # Scala color.
+ typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160
+ # Hide scala version if it doesn't come from one of these sources.
+ typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global)
+ # If set to false, hide scala version if it's the same as global:
+ # $(scalaenv version-name) == $(scalaenv global).
+ typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false
+ # If set to false, hide scala version if it's equal to "system".
+ typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]###########
+ # Haskell color.
+ typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172
+ # Hide haskell version if it doesn't come from one of these sources.
+ #
+ # shell: version is set by STACK_YAML
+ # local: version is set by stack.yaml up the directory tree
+ # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml)
+ typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local)
+ # If set to false, hide haskell version if it's the same as in the implicit global project.
+ typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]#############
+ # Show kubecontext only when the command you are typing invokes one of these tools.
+ # Tip: Remove the next line to always show kubecontext.
+ typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor|cmctl|sparkctl'
+
+ # Kubernetes context classes for the purpose of using different colors, icons and expansions with
+ # different contexts.
+ #
+ # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element
+ # in each pair defines a pattern against which the current kubernetes context gets matched.
+ # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
+ # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters,
+ # you'll see this value in your prompt. The second element of each pair in
+ # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The
+ # first match wins.
+ #
+ # For example, given these settings:
+ #
+ # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
+ # '*prod*' PROD
+ # '*test*' TEST
+ # '*' DEFAULT)
+ #
+ # If your current kubernetes context is "deathray-testing/default", its class is TEST
+ # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'.
+ #
+ # You can define different colors, icons and content expansions for different classes:
+ #
+ # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28
+ # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
+ typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
+ # '*prod*' PROD # These values are examples that are unlikely
+ # '*test*' TEST # to match your needs. Customize them as needed.
+ '*' DEFAULT)
+ typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134
+ # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext
+ # segment. Parameter expansions are very flexible and fast, too. See reference:
+ # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion.
+ #
+ # Within the expansion the following parameters are always available:
+ #
+ # - P9K_CONTENT The content that would've been displayed if there was no content
+ # expansion defined.
+ # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the
+ # output of `kubectl config get-contexts`.
+ # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the
+ # output of `kubectl config get-contexts`.
+ # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE
+ # in the output of `kubectl config get-contexts`. If there is no
+ # namespace, the parameter is set to "default".
+ # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the
+ # output of `kubectl config get-contexts`.
+ #
+ # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS),
+ # the following extra parameters are available:
+ #
+ # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks".
+ # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID.
+ # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone.
+ # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster.
+ #
+ # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example,
+ # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01":
+ #
+ # - P9K_KUBECONTEXT_CLOUD_NAME=gke
+ # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account
+ # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a
+ # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01
+ #
+ # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01":
+ #
+ # - P9K_KUBECONTEXT_CLOUD_NAME=eks
+ # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012
+ # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1
+ # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01
+ typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION=
+ # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME.
+ POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}'
+ # Append the current context's namespace if it's not "default".
+ POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}'
+
+ # Custom prefix.
+ typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%fat '
+
+ ################[ terraform: terraform workspace (https://www.terraform.io) ]#################
+ # Don't show terraform workspace if it's literally "default".
+ typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false
+ # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element
+ # in each pair defines a pattern against which the current terraform workspace gets matched.
+ # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
+ # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters,
+ # you'll see this value in your prompt. The second element of each pair in
+ # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The
+ # first match wins.
+ #
+ # For example, given these settings:
+ #
+ # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=(
+ # '*prod*' PROD
+ # '*test*' TEST
+ # '*' OTHER)
+ #
+ # If your current terraform workspace is "project_test", its class is TEST because "project_test"
+ # doesn't match the pattern '*prod*' but does match '*test*'.
+ #
+ # You can define different colors, icons and content expansions for different classes:
+ #
+ # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28
+ # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
+ typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=(
+ # '*prod*' PROD # These values are examples that are unlikely
+ # '*test*' TEST # to match your needs. Customize them as needed.
+ '*' OTHER)
+ typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38
+ # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #############[ terraform_version: terraform version (https://www.terraform.io) ]##############
+ # Terraform version color.
+ typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]#
+ # Show aws only when the command you are typing invokes one of these tools.
+ # Tip: Remove the next line to always show aws.
+ typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|cdk|terraform|pulumi|terragrunt'
+
+ # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element
+ # in each pair defines a pattern against which the current AWS profile gets matched.
+ # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
+ # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters,
+ # you'll see this value in your prompt. The second element of each pair in
+ # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The
+ # first match wins.
+ #
+ # For example, given these settings:
+ #
+ # typeset -g POWERLEVEL9K_AWS_CLASSES=(
+ # '*prod*' PROD
+ # '*test*' TEST
+ # '*' DEFAULT)
+ #
+ # If your current AWS profile is "company_test", its class is TEST
+ # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'.
+ #
+ # You can define different colors, icons and content expansions for different classes:
+ #
+ # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28
+ # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
+ typeset -g POWERLEVEL9K_AWS_CLASSES=(
+ # '*prod*' PROD # These values are examples that are unlikely
+ # '*test*' TEST # to match your needs. Customize them as needed.
+ '*' DEFAULT)
+ typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208
+ # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ # AWS segment format. The following parameters are available within the expansion.
+ #
+ # - P9K_AWS_PROFILE The name of the current AWS profile.
+ # - P9K_AWS_REGION The region associated with the current AWS profile.
+ typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}'
+
+ #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]#
+ # AWS Elastic Beanstalk environment color.
+ typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]##########
+ # Show azure only when the command you are typing invokes one of these tools.
+ # Tip: Remove the next line to always show azure.
+ typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt'
+
+ # POWERLEVEL9K_AZURE_CLASSES is an array with even number of elements. The first element
+ # in each pair defines a pattern against which the current azure account name gets matched.
+ # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
+ # that gets matched. If you unset all POWERLEVEL9K_AZURE_*CONTENT_EXPANSION parameters,
+ # you'll see this value in your prompt. The second element of each pair in
+ # POWERLEVEL9K_AZURE_CLASSES defines the account class. Patterns are tried in order. The
+ # first match wins.
+ #
+ # For example, given these settings:
+ #
+ # typeset -g POWERLEVEL9K_AZURE_CLASSES=(
+ # '*prod*' PROD
+ # '*test*' TEST
+ # '*' OTHER)
+ #
+ # If your current azure account is "company_test", its class is TEST because "company_test"
+ # doesn't match the pattern '*prod*' but does match '*test*'.
+ #
+ # You can define different colors, icons and content expansions for different classes:
+ #
+ # typeset -g POWERLEVEL9K_AZURE_TEST_FOREGROUND=28
+ # typeset -g POWERLEVEL9K_AZURE_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_AZURE_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
+ typeset -g POWERLEVEL9K_AZURE_CLASSES=(
+ # '*prod*' PROD # These values are examples that are unlikely
+ # '*test*' TEST # to match your needs. Customize them as needed.
+ '*' OTHER)
+
+ # Azure account name color.
+ typeset -g POWERLEVEL9K_AZURE_OTHER_FOREGROUND=32
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_AZURE_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]###########
+ # Show gcloud only when the command you are typing invokes one of these tools.
+ # Tip: Remove the next line to always show gcloud.
+ typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil'
+ # Google cloud color.
+ typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32
+
+ # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or
+ # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative
+ # enough. You can use the following parameters in the expansions. Each of them corresponds to the
+ # output of `gcloud` tool.
+ #
+ # Parameter | Source
+ # -------------------------|--------------------------------------------------------------------
+ # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)'
+ # P9K_GCLOUD_ACCOUNT | gcloud config get-value account
+ # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project
+ # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)'
+ #
+ # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'.
+ #
+ # Obtaining project name requires sending a request to Google servers. This can take a long time
+ # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud
+ # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets
+ # set and gcloud prompt segment transitions to state COMPLETE.
+ #
+ # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL
+ # and COMPLETE. You can also hide gcloud in state PARTIAL by setting
+ # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and
+ # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty.
+ typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}'
+ typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}'
+
+ # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name
+ # this often. Negative value disables periodic polling. In this mode project name is retrieved
+ # only when the current configuration, account or project id changes.
+ typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60
+
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]#
+ # Show google_app_cred only when the command you are typing invokes one of these tools.
+ # Tip: Remove the next line to always show google_app_cred.
+ typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt'
+
+ # Google application credentials classes for the purpose of using different colors, icons and
+ # expansions with different credentials.
+ #
+ # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first
+ # element in each pair defines a pattern against which the current kubernetes context gets
+ # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion
+ # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION
+ # parameters, you'll see this value in your prompt. The second element of each pair in
+ # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order.
+ # The first match wins.
+ #
+ # For example, given these settings:
+ #
+ # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=(
+ # '*:*prod*:*' PROD
+ # '*:*test*:*' TEST
+ # '*' DEFAULT)
+ #
+ # If your current Google application credentials is "service_account deathray-testing x@y.com",
+ # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'.
+ #
+ # You can define different colors, icons and content expansions for different classes:
+ #
+ # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28
+ # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID'
+ typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=(
+ # '*:*prod*:*' PROD # These values are examples that are unlikely
+ # '*:*test*:*' TEST # to match your needs. Customize them as needed.
+ '*' DEFAULT)
+ typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32
+ # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by
+ # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference:
+ # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion.
+ #
+ # You can use the following parameters in the expansion. Each of them corresponds to one of the
+ # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS.
+ #
+ # Parameter | JSON key file field
+ # ---------------------------------+---------------
+ # P9K_GOOGLE_APP_CRED_TYPE | type
+ # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id
+ # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email
+ #
+ # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'.
+ typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}'
+
+ ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]###############
+ # Toolbox color.
+ typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178
+ # Don't display the name of the toolbox if it matches fedora-toolbox-*.
+ typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}'
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # Custom prefix.
+ typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%fin '
+
+ ###############################[ public_ip: public IP address ]###############################
+ # Public IP color.
+ typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ########################[ vpn_ip: virtual private network indicator ]#########################
+ # VPN IP color.
+ typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81
+ # When on VPN, show just an icon without the IP address.
+ # Tip: To display the private IP address when on VPN, remove the next line.
+ typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION=
+ # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN
+ # to see the name of the interface.
+ typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)'
+ # If set to true, show one segment per matching network interface. If set to false, show only
+ # one segment corresponding to the first matching network interface.
+ # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION.
+ typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ###########[ ip: ip address and bandwidth usage for a specified network interface ]###########
+ # IP color.
+ typeset -g POWERLEVEL9K_IP_FOREGROUND=38
+ # The following parameters are accessible within the expansion:
+ #
+ # Parameter | Meaning
+ # ----------------------+-------------------------------------------
+ # P9K_IP_IP | IP address
+ # P9K_IP_INTERFACE | network interface
+ # P9K_IP_RX_BYTES | total number of bytes received
+ # P9K_IP_TX_BYTES | total number of bytes sent
+ # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt
+ # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt
+ # P9K_IP_RX_RATE | receive rate (since last prompt)
+ # P9K_IP_TX_RATE | send rate (since last prompt)
+ typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='$P9K_IP_IP${P9K_IP_RX_RATE:+ %70F⇣$P9K_IP_RX_RATE}${P9K_IP_TX_RATE:+ %215F⇡$P9K_IP_TX_RATE}'
+ # Show information for the first network interface whose name matches this regular expression.
+ # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces.
+ typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*'
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ #########################[ proxy: system-wide http/https/ftp proxy ]##########################
+ # Proxy color.
+ typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ ################################[ battery: internal battery ]#################################
+ # Show battery in red when it's below this level and not connected to power supply.
+ typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20
+ typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160
+ # Show battery in green when it's charging or fully charged.
+ typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70
+ # Show battery in yellow when it's discharging.
+ typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178
+ # Battery pictograms going from low to high level of charge.
+ typeset -g POWERLEVEL9K_BATTERY_STAGES='\UF008E\UF007A\UF007B\UF007C\UF007D\UF007E\UF007F\UF0080\UF0081\UF0082\UF0079'
+ # Don't show the remaining time to charge/discharge.
+ typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false
+
+ #####################################[ wifi: wifi speed ]#####################################
+ # WiFi color.
+ typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS).
+ #
+ # # Wifi colors and icons for different signal strength levels (low to high).
+ # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values
+ # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values
+ #
+ # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps'
+ # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}'
+ #
+ # The following parameters are accessible within the expansions:
+ #
+ # Parameter | Meaning
+ # ----------------------+---------------
+ # P9K_WIFI_SSID | service set identifier, a.k.a. network name
+ # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown
+ # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second
+ # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0
+ # P9K_WIFI_NOISE | noise in dBm, from -120 to 0
+ # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE)
+
+ ####################################[ time: current time ]####################################
+ # Current time color.
+ typeset -g POWERLEVEL9K_TIME_FOREGROUND=66
+ # Format for the current time: 09:51:02. See `man 3 strftime`.
+ typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}'
+ # If set to true, time will update when you hit enter. This way prompts for the past
+ # commands will contain the start times of their commands as opposed to the default
+ # behavior where they contain the end times of their preceding commands.
+ typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
+ # Custom icon.
+ # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐'
+ # Custom prefix.
+ typeset -g POWERLEVEL9K_TIME_PREFIX='%fat '
+
+ # Example of a user-defined prompt segment. Function prompt_example will be called on every
+ # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or
+ # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user.
+ #
+ # Type `p10k help segment` for documentation and a more sophisticated example.
+ function prompt_example() {
+ p10k segment -f 208 -i '⭐' -t 'hello, %n'
+ }
+
+ # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job
+ # is to generate the prompt segment for display in instant prompt. See
+ # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
+ #
+ # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function
+ # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k
+ # will replay these calls without actually calling instant_prompt_*. It is imperative that
+ # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this
+ # rule is not observed, the content of instant prompt will be incorrect.
+ #
+ # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If
+ # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt.
+ function instant_prompt_example() {
+ # Since prompt_example always makes the same `p10k segment` calls, we can call it from
+ # instant_prompt_example. This will give us the same `example` prompt segment in the instant
+ # and regular prompts.
+ prompt_example
+ }
+
+ # User-defined prompt segments can be customized the same way as built-in segments.
+ # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208
+ # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐'
+
+ # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt
+ # when accepting a command line. Supported values:
+ #
+ # - off: Don't change prompt when accepting a command line.
+ # - always: Trim down prompt when accepting a command line.
+ # - same-dir: Trim down prompt when accepting a command line unless this is the first command
+ # typed after changing current working directory.
+ typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always
+
+ # Instant prompt mode.
+ #
+ # - off: Disable instant prompt. Choose this if you've tried instant prompt and found
+ # it incompatible with your zsh configuration files.
+ # - quiet: Enable instant prompt and don't print warnings when detecting console output
+ # during zsh initialization. Choose this if you've read and understood
+ # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
+ # - verbose: Enable instant prompt and print a warning when detecting console output during
+ # zsh initialization. Choose this if you've never tried instant prompt, haven't
+ # seen the warning, or if you are unsure what this all means.
+ typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose
+
+ # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized.
+ # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload
+ # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you
+ # really need it.
+ typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true
+
+ # If p10k is already loaded, reload configuration.
+ # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true.
+ (( ! $+functions[p10k] )) || p10k reload
+}
+
+# Tell `p10k configure` which file it should overwrite.
+typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a}
+
+(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
+'builtin' 'unset' 'p10k_config_opts'
diff --git a/fedora/.config/zsh/packages.zsh b/fedora/.config/zsh/packages.zsh
new file mode 100644
index 0000000..b3931f5
--- /dev/null
+++ b/fedora/.config/zsh/packages.zsh
@@ -0,0 +1,23 @@
+#!/bin/zsh
+
+### --- Packages --- ###
+typeset -A packages
+packages=(
+ atuin "--disable-up-arrow"
+ batman "--export-env"
+ zoxide "--cmd cd --hook prompt"
+ tmuxdbussync ""
+)
+
+### --- Eval Function --- ###
+eval_packages() {
+ for package in ${(k)packages}; do
+ if command -v "$package" >/dev/null; then
+ local args=(${(s: :)packages[$package]})
+ [[ ${#args[@]} -gt 0 ]] && eval "$($package init zsh ${args[@]})" || eval "$($package init zsh)"
+ fi
+ done
+}
+
+### --- Init --- ###
+eval_packages
diff --git a/fedora/.config/zsh/plugins.zsh b/fedora/.config/zsh/plugins.zsh
new file mode 100644
index 0000000..f1ef0a9
--- /dev/null
+++ b/fedora/.config/zsh/plugins.zsh
@@ -0,0 +1,105 @@
+#!/bin/zsh
+
+[[ "$XDG_SCRIPTS_HOME" == "$HOME/.local/bin" ]] || return
+[[ "$ZDOTDIR" == "$HOME/.config/zsh" ]] || return
+[[ "$ZPLUGINDIR" == "$XDG_SCRIPTS_HOME/zsh" ]] || return
+
+### --- Plugins --- ###
+plugins=(
+ "Aloxaf/fzf-tab"
+ # "jeffreytse/zsh-vi-mode"
+ "kutsan/zsh-system-clipboard"
+ # "MichaelAquilina/zsh-you-should-use"
+ # "marlonrichert/zsh-autocomplete"
+ "ohmyzsh/command-not-found"
+ #"ohmyzsh/sudo"
+ # "romkatv/powerlevel10k"
+ "wfxr/forgit"
+ "zdharma-continuum/fast-syntax-highlighting"
+ "zsh-users/zsh-autosuggestions"
+ "zsh-users/zsh-completions"
+)
+
+### --- Source Plugins --- ###
+# Check plugins
+zsh_check_plugins() {
+ installed="true"
+ for plugin in "${plugins[@]}"; do
+ PLUGIN_NAME=$(echo "$plugin" | cut -d '/' -f 2)
+ [ "$ZPLUGINDIR" = "ohmyzsh" ] && ZPLUGINDIR="$PLUGIN_NAME"
+ PLUGIN_PATH="$ZPLUGINDIR/$PLUGIN_NAME"
+ [ -d "$PLUGIN_PATH" ] && zsh_source_plugin "$PLUGIN_NAME/$PLUGIN_NAME" || { installed="false"; break; }
+ done
+ [ "$installed" = "true" ] || zsh_add_plugins "${plugins[@]}"
+}
+
+# Function to source plugin files
+zsh_source_plugin() {
+ for file in "$@"; do
+ if [ -f "$ZPLUGINDIR/$file.plugin.zsh" ] && echo "$file" | grep -vq "command-not-found/command-not-found"; then
+ . "$ZPLUGINDIR/$file.plugin.zsh"
+ elif echo "$file" | grep -q "command-not-found/command-not-found"; then
+ . "$ZPLUGINDIR/command-not-found/command-not-found.plugin.zsh"
+ elif [ -z "$ZPLUGINDIR/$file.plugin.zsh" ] && [ -f "$ZPLUGINDIR/$file.zsh" ]; then
+ . "$ZPLUGINDIR/$file.zsh"
+ fi
+ [ -f "$ZPLUGINDIR/$file.zsh-theme" ] && . "$ZPLUGINDIR/$file.zsh-theme" && . "${XDG_CONFIG_HOME:-${HOME}/.config}/shell/p10k"
+ done
+}
+
+# Function to add plugins
+zsh_add_plugins() {
+ for plugin do
+ PLUGIN_NAME=$(echo "$plugin" | cut -d '/' -f 2)
+ PLUGIN_PATH="$ZPLUGINDIR/$PLUGIN_NAME"
+
+ if [ -d "$PLUGIN_PATH" ]; then
+ zsh_source_plugin "$PLUGIN_NAME/$PLUGIN_NAME"
+ else
+ ORG_NAME=$(echo "$plugin" | cut -d '/' -f 1)
+ case "$ORG_NAME" in
+ "ohmyzsh")
+ [ ! -d "$ZPLUGINDIR/oh-my-zsh" ] && git clone --depth=1 https://github.com/ohmyzsh/ohmyzsh.git "$ZPLUGINDIR/oh-my-zsh" >/dev/null 2>&1
+
+ OHMYZSH_PLUGIN_PATH="$ZPLUGINDIR/oh-my-zsh/plugins/$PLUGIN_NAME"
+ cp -r "$OHMYZSH_PLUGIN_PATH" "$ZPLUGINDIR/" >/dev/null 2>&1
+ rm -rf "$ZPLUGINDIR/oh-my-zsh" >/dev/null 2>&1
+ ;;
+ *)
+ git clone "https://github.com/$plugin.git" "$PLUGIN_PATH" >/dev/null 2>&1
+ ;;
+ esac
+ rm -rf "$PLUGIN_PATH/.git"
+ chmod +x "$PLUGIN_PATH"
+ fi
+ done
+}
+
+# Function to sync plugins
+zsh_sync_plugins() {
+ ACTIVE_PLUGINS=$(grep '^[[:space:]]*"[^"]\+"' ~/.config/zsh/plugins.zsh | sed 's|.*/\([^/"]*\)".*|\1|')
+
+ for PLUGIN_DIR in "$ZPLUGINDIR"/*; do
+ if [ -d "$PLUGIN_DIR" ]; then
+ PLUGIN_NAME=$(basename "$PLUGIN_DIR")
+
+ echo "$ACTIVE_PLUGINS" | grep -q "$PLUGIN_NAME" || {
+ echo "Removing unused plugin: $PLUGIN_NAME"
+ rm -rf "$PLUGIN_DIR"
+ }
+ fi
+ done
+}
+
+# Function to update plugins
+# Since .git folder in each plugin dir is removed,
+# Delete all plugins and install them agian
+# .git is searched in Neovim projects
+alias zup=zsh_update_plugins
+zsh_update_plugins() {
+ [ -d "$ZPLUGINDIR" ] && rm -rf "$ZPLUGINDIR" && zsh_check_plugins "${plugins[@]}"
+ zsh_sync_plugins
+}
+
+zsh_check_plugins "${plugins[@]}"
+zsh_sync_plugins
diff --git a/fedora/.config/zsh/scripts.zsh b/fedora/.config/zsh/scripts.zsh
new file mode 100644
index 0000000..5a47ffa
--- /dev/null
+++ b/fedora/.config/zsh/scripts.zsh
@@ -0,0 +1,880 @@
+#!/bin/zsh
+
+###########################################################################################
+###########################################################################################
+### --- ALIAS --- ###
+# find aliases
+alias ali=fzf_aliases
+function fzf_aliases() {
+ local aliases=$(alias)
+ local max_length=$(echo "$aliases" | cut -d'=' -f1 | awk '{print length}' | sort -nr | head -n 1)
+ [ "$max_length" -gt 20 ] && max_length=20
+ format_aliases() {
+ echo "$aliases" | while IFS= read -r line; do
+ alias_name=$(echo "$line" | cut -d'=' -f1)
+ alias_command=$(echo "$line" | cut -d'=' -f2- | sed "s/^'//;s/'$//")
+ printf "%-${max_length}s = %s\n" "$alias_name" "$alias_command"
+ done
+ }
+ alias_file="${XDG_CONFIG_HOME:-${HOME}/.config}/shell/aliasrc"
+ selected_alias=$(format_aliases | fzf --header="select an alias")
+ # check if an alias was selected
+ if [ -n "$selected_alias" ]; then
+ # extract the alias name
+ alias_name=$(echo "$selected_alias" | cut -d'=' -f1 | xargs)
+
+ # get the line number from the alias file
+ line_number=$(grep -n "^alias $alias_name=" "$alias_file" | cut -d':' -f1)
+
+ # open nvim at the specified line
+ if [ -n "$line_number" ]; then
+ nvim "+$line_number" "$alias_file"
+ else
+ scripts_file="${ZDOTDIR:-${XDG_CONFIG_HOME:-${HOME}/.config}/zsh}/7-scripts.zsh"
+ line_number=$(grep -n "^alias $alias_name=" "$scripts_file" | cut -d':' -f1)
+ nvim "+$line_number" "$scripts_file"
+ fi
+ fi
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- CHEAT.SH --- ###
+function cht() {
+ if [ -z "$1" ]; then
+ printf "Enter program name: "
+ read prog
+ curl cht.sh/"$prog"
+ else
+ curl cht.sh/"$1"
+ fi
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- COLOR --- ###
+# print color
+alias pcol=print_col
+function print_col() {
+ awk 'BEGIN{
+s="/\\/\\/\\/\\/\\"; s=s s s s s s s s;
+for (colnum = 0; colnum<77; colnum++) {
+ r = 255-(colnum*255/76);
+ g = (colnum*510/76);
+ b = (colnum*255/76);
+ if (g>255) g = 510-g;
+ printf "\033[48;2;%d;%d;%dm", r,g,b;
+ printf "\033[38;2;%d;%d;%dm", 255-r,255-g,255-b;
+ printf "%s\033[0m", substr(s,colnum+1,1);
+}
+printf "\n";
+ }'
+}
+function colors() {
+ curl -s https://gist.githubusercontent.com/HaleTom/89ffe32783f89f403bba96bd7bcd1263/raw/ | zsh
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- COMMAND OUTPUT --- ###
+# print last command output
+alias ilco=insert_last_command_output
+function insert_last_command_output() { LBUFFER+="$(eval $history[$((HISTCMD-1))])"; }
+
+
+###########################################################################################
+###########################################################################################
+### --- CONFIG --- ###
+# fzf config
+alias fcfg=fzf_config
+function fzf_config() {
+ [ $# -gt 0 ] && zoxide query -i "$1" | xargs "${EDITOR}" && return
+ local file
+ file="$(zoxide query -l | fzf --cycle -1 -0 --no-sort +m)" && cd "${file}" || return 1
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- COPY --- ###
+# copy file name to clipboard
+alias cpfn=copy_filename
+function copy_filename() {
+ if ! command -v xclip >/dev/null; then
+ echo "Error: 'xclip' is not installed." >&2
+ return 1
+ fi
+
+ if ! command -v fzf >/dev/null; then
+ echo "Error: 'fzf' is not installed." >&2
+ return 1
+ fi
+
+ local file="$1"
+
+ # If no argument is provided, use fzf to select a file
+ if [ -z "$file" ]; then
+ file=$(fzf --cycle --preview "cat {}")
+ fi
+
+ # Check if a file was found or selected
+ if [ -n "$file" ]; then
+ local filename=$(basename "$file")
+ echo -n "$filename" | xclip -selection clipboard
+ echo "Filename copied to clipboard: $filename"
+ else
+ echo "No file selected."
+ fi
+}
+
+# copy file contents
+alias cpfc=copy_contents
+function copy_contents() {
+ if ! command -v xclip >/dev/null; then
+ echo "Error: 'xclip' is not installed." >&2
+ return 1
+ fi
+
+ if ! command -v fzf >/dev/null; then
+ echo "Error: 'fzf' is not installed." >&2
+ return 1
+ fi
+
+ local file="$1"
+
+ # If no argument is provided, use fzf to select a file
+ if [ -z "$file" ]; then
+ file=$(fzf --cycle --preview "cat {}")
+ fi
+
+ # Check if a file was found or selected
+ if [ -n "$file" ]; then
+ # Use `sed` to delete only the last newline character
+ cat "$file" | sed ':a;N;$!ba;s/\n$//' | xclip -selection clipboard
+ echo "Contents of '$file' copied to clipboard."
+ else
+ echo "No file selected."
+ fi
+}
+
+# copy the current working directory path to the clipboard
+alias cpcp=copy_current_path
+function copy_current_path() {
+ if command -v xclip >/dev/null; then
+ printf "%s" "$PWD" | xclip -selection clipboard
+ printf "%s\n" "Current working directory '$(basename "$PWD")' path copied to clipboard."
+ else
+ printf "%s\n" "Error: 'xclip' command not found. Please install 'xclip' to use this function."
+ fi
+}
+
+# copy file real path
+alias cprp=copy_real_path
+function copy_real_path() {
+ if ! command -v xclip >/dev/null; then
+ echo "Error: 'xclip' is not installed." >&2
+ return 1
+ fi
+
+ if ! command -v fzf >/dev/null; then
+ echo "Error: 'fzf' is not installed." >&2
+ return 1
+ fi
+
+ local file="$1"
+
+ # If no argument is provided, use fzf to select a file
+ if [ -z "$file" ]; then
+ file=$(fzf --cycle --preview "cat {}")
+ fi
+
+ # Check if a file was found or selected
+ if [ -n "$file" ]; then
+ local full_path=$(realpath "$file")
+ echo -n "$full_path" | xclip -selection clipboard
+ echo "File path copied to clipboard: $full_path"
+ else
+ echo "No file selected."
+ fi
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- CREATE --- ###
+# mkdir && cd
+alias mc=mkcd
+function mkcd() { mkdir -p "$@" && cd "$_"; }
+
+# create dir with current date
+function mkdt () { mkdir -p ${1:+$1$prefix_separator}"$(date +%F)"; }
+
+
+###########################################################################################
+###########################################################################################
+### --- DOCKER --- ###
+# select a docker container to start and attach to
+alias doca=docker_container_init
+function docker_container_init() {
+ local cid
+ cid=$(docker ps -a | sed 1d | fzf --cycle -1 -q "$1" | awk '{print $1}')
+
+ [ -n "$cid" ] && docker start "$cid" && docker attach "$cid"
+}
+
+# select a running docker container to stop
+alias docs=docker_stop
+function docker_stop() {
+ local cid
+ cid=$(docker ps | sed 1d | fzf --cycle -q "$1" | awk '{print $1}')
+
+ [ -n "$cid" ] && docker stop "$cid"
+}
+
+# select a docker container or containers to remove
+alias docrmc=docker_remove_containers
+function docker_remove_containers() { docker ps -a | sed 1d | fzf --cycle -q "$1" --no-sort -m --tac | awk '{ print $1 }' | xargs -r docker rm; }
+
+# select a docker image or images to remove
+alias docrmi=docker_remove_images
+function docker_remove_images() { docker images | sed 1d | fzf --cycle -q "$1" --no-sort -m --tac | awk '{ print $3 }' | xargs -r docker rmi; }
+
+
+###########################################################################################
+###########################################################################################
+### --- ECRYPTFS --- ###
+# mount ecryptfs
+alias emt=ecryptfs_mount
+function ecryptfs_mount() {
+ ! mount | grep -q " $1 " && echo "$(pass show encryption/ecryptfs)" | sudo mount -t ecryptfs "$1" "$2" \
+ -o ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_passthrough=no,ecryptfs_enable_filename_crypto=yes,ecryptfs_sig="$(sudo cat /root/.ecryptfs/sig-cache.txt)",ecryptfs_fnek_sig="$(sudo cat /root/.ecryptfs/sig-cache.txt)",passwd="$(pass show encryption/ecryptfs)" >/dev/null 2>&1 &&
+ echo "'$2' folder is mounted!"
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- GIT --- ###
+# TheSiahxyz's git repos
+alias gcggg=thesiahxyz_git
+function thesiahxyz_git() {
+ choice=$(ssh "$THESIAH_GIT" "ls -a | grep -i \".*\\.git$\"" | fzf --cycle --prompt="  " --height=50% --layout=reverse --border --exit-0)
+ [ -d "$HOME/Private/repos" ] || mkdir -p "$HOME/Private/repos"
+ [ -n "$choice" ] && [ -n "$1" ] && cd "$HOME/Private/repos" && git clone "${THESIAH_GIT:-git@${THESIAH:-thesiah.xyz}}":"$choice" "$1" ||
+ [ -n "$choice" ] && cd "$HOME/Private/repos" && git clone "${THESIAH_GIT:-git@${THESIAH:-thesiah.xyz}}":"$choice"
+ cd -
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- GOTO --- ###
+# go to the path stored in the clipboard
+alias cdp=cd_clipboard_path
+function cd_clipboard_path() {
+ if command -v xclip >/dev/null; then
+ local target_dir
+ target_dir="$(xclip -o -sel clipboard)"
+ if [[ -d "${target_dir}" ]]; then
+ cd "${target_dir}" && printf "%s\n" "Changed directory to: ${target_dir}"
+ else
+ printf "%s\n" "Error: Invalid directory path or directory does not exist."
+ fi
+ else
+ printf "%s\n" "Error: 'xclip' command not found. Please install 'xclip' to use this function."
+ fi
+}
+
+# fzf directory and go to the parent directory
+alias fD=fzf_directory
+function fzf_directory() {
+ dirs="$(find "$HOME" -type d \( -path "**/.git/*" -o -path "**/.cache/*" -o -path "**/yay/*" -o -path "$HOME/.local/bin/zsh" \) -prune -o -type d -print | fzf --multi)"
+ [ -d "$dirs" ] && cd "$dirs" && ls -A || opensessions "$dirs"
+}
+
+# search scripts in ~/.local/bin
+alias sscs=search_scripts
+function search_scripts() {
+ choice="$(find ${HOME}/.local/bin -mindepth 1 -not -path "${HOME}/.local/bin/zsh" -not -path "${HOME}/.local/bin/zsh/*" -printf '%P\n' | fzf)"
+ [ -f "$HOME/.local/bin/$choice" ] && $EDITOR "$HOME/.local/bin/$choice"
+}
+
+# check git status by directories in specific path
+alias fgst=fetch_git_repos_status
+function fetch_git_repos_status() {
+ SELECTED_DIRS=$(bash << 'EOF'
+ # Source the Git prompt script to get access to __git_ps1
+ source /usr/share/git/completion/git-prompt.sh
+
+ # Enable symbols for dirty state, untracked files, and branch ahead/behind
+ export GIT_PS1_SHOWDIRTYSTATE="auto"
+ export GIT_PS1_SHOWUNTRACKEDFILES="auto"
+ export GIT_PS1_SHOWUPSTREAM="auto"
+
+ # Define an array of target directories
+ TARGET_DIRECTORIES=(
+ "$HOME/.dotfiles"
+ "$HOME/.local/share/.password-store"
+ "$HOME/.local/src/suckless"
+ )
+
+ # Check the directories under the paths. eg. ../repos/*
+ GIT_DIRS=("$HOME/Private/repos" "$HOME/Public/repos")
+
+ # Append all subdirectories under GIT_DIRS that are Git repositories
+ for GIT_DIR in "${GIT_DIRS[@]}"; do
+ if [ -d "$GIT_DIR" ]; then
+ for SUBDIR in "$GIT_DIR"/*; do
+ if [ -d "$SUBDIR/.git" ]; then
+ TARGET_DIRECTORIES+=("$SUBDIR")
+ fi
+ done
+ fi
+ done
+
+ # Create an array to store the output
+ OUTPUT=()
+
+ # Function to colorize only the Git status symbols
+ colorize_git_status() {
+ local status="$1"
+ # Colorize the entire status with a single color
+ echo -e "\033[33m${status}\033[0m" # Apply yellow color to the status
+ }
+
+ update_time() {
+ timestamp_file="${HOME}/.cache/gitreposupdate"
+ current_time=$(date +%s)
+ if [[ -f "$timestamp_file" ]] && (($(cat "$timestamp_file") > (current_time - 21600))); then
+ return 1 # No update needed
+ else
+ echo "$current_time" >"$timestamp_file"
+ return 0 # Update needed
+ fi
+ }
+ update_time && update=true || update=false
+
+ # Loop through each directory and get the Git status
+ for DIR in "${TARGET_DIRECTORIES[@]}"; do
+ if [ -d "$DIR/.git" ]; then
+ cd "$DIR" || continue
+
+ if $update; then
+ if [ "$(dirname $DIR)" = ".password-store" ]; then
+ pass git fetch >/dev/null 2>&1
+ else
+ git fetch --all --prune --jobs=10 >/dev/null 2>&1
+ fi
+ fi
+
+ # Get Git branch and status using __git_ps1
+ GIT_STATUS=$(__git_ps1 "%s")
+
+ # Colorize the Git status
+ COLORED_GIT_STATUS=$(colorize_git_status "$GIT_STATUS")
+
+ # Add formatted output with colored Git status and directory
+ OUTPUT+=("$(printf "%-20s %s" "$COLORED_GIT_STATUS" "$DIR")")
+ fi
+ done
+
+ # Pass the output to fzf with multi-select enabled (-m)
+ SELECTED=$(printf "%s\n" "${OUTPUT[@]}" | fzf -m --ansi --layout=reverse)
+
+ # Filter out lines that do not end with a valid directory path and are not empty
+ echo "$SELECTED" | awk '{if (NF > 1 && system("[ -d \""$NF"\" ]") == 0) print $NF}'
+EOF
+ )
+ [[ -z "${SELECTED_DIRS// }" ]] && return
+ if [[ "$(echo "$SELECTED_DIRS" | wc -l)" -eq 1 ]]; then
+ cd "$SELECTED_DIRS"
+ if [[ -n "$(git -C "$SELECTED_DIRS" status --porcelain)" ]]; then
+ git status --porcelain 2>/dev/null
+ fi
+ else
+ opensessions "$SELECTED_DIRS"
+ fi
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- HELP --- ###
+# help opt colored by bat
+alias bathelp='bat --plain --language=help'
+function help() { "$@" --help 2>&1 | bathelp; }
+
+
+###########################################################################################
+###########################################################################################
+### --- KEYS --- ###
+# list setxkbmap options
+alias xkey=xset_options
+function xset_options() { grep --color -E "$1" /usr/share/X11/xkb/rules/base.lst; }
+
+# print raw xev key events
+alias keys=xev_raw_key_event
+function xev_raw_key_event() {
+ xev -event keyboard | awk '
+ /^KeyPress/,/^KeyRelease/ {
+ if ($0 ~ /keysym/) print $0
+ }'
+}
+
+# print aligned xev key events
+alias key=xev_aligned_key_event
+function xev_aligned_key_event() {
+ xev -event keyboard | awk '
+ /^(KeyPress|KeyRelease)/ {
+ event_type = $1
+ }
+ /keysym/ {
+ gsub(/\),$/, "", $7)
+ printf "%-12s %-3s %s\n", event_type, $4, $7
+ }'
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- KILL --- ###
+# kill process
+alias fpkill=fzf_kill_process
+function fzf_kill_process() {
+ ps aux | grep -e "^$(whoami)" |
+ fzf --height 40% \
+ --layout=reverse \
+ --header-lines=1 \
+ --prompt="Select process to kill: " \
+ --preview 'echo {}' \
+ --preview-window up:3:hidden:wrap \
+ --bind 'F2:toggle-preview' |
+ awk '{print $2}' |
+ xargs -r bash -c '
+ if ! kill -9 "$1" 2>/dev/null; then
+ echo "Regular kill failed. Attempting with sudo..."
+ sudo kill -9 "$1" || echo "Failed to kill process $1" >&2
+ fi
+ ' --
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- LF --- ###
+# open lf and cd to the file path
+function lfcd () {
+ tmp="$(mktemp -uq)"
+ trap 'rm -f $tmp >/dev/null 2>&1 && trap - HUP INT QUIT TERM PWR EXIT' HUP INT QUIT TERM PWR EXIT
+ lf -last-dir-path="$tmp" "$@"
+ if [ -f "$tmp" ]; then
+ dir="$(cat "$tmp")"
+ [ -d "$dir" ] && [ "$dir" != "$(pwd)" ] && cd "$dir"
+ fi
+}
+
+###########################################################################################
+###########################################################################################
+### --- MAN --- ###
+# color man page
+function van() {
+ if [[ -z "$@" ]]; then
+ if command -v fzf >/dev/null 2>&1; then
+ local page=$(command man -k . | fzf --prompt='Man> ' --exit-0 | awk '{print $1}')
+ if [[ -n $page ]]; then
+ nvim +"Man $page | only"
+ fi
+ fi
+ else
+ nvim +"Man $@ | only"
+ fi
+}
+function ban() {
+ BAT_THEME="ansi" command batman "$@"
+ return $?
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- NVIM --- ###
+# rename nvim directory
+alias ctn=rename_nvim_dir
+function rename_nvim_dir() {
+ if [ $# -ne 2 ]; then
+ echo "Usage: ctn <old_suffix> <new_suffix>"
+ return 1
+ fi
+
+ local old_suffix="$1"
+ local new_suffix="$2"
+ local base_name="nvim"
+
+ # Handle the case where the old suffix is '.'
+ [ "$old_suffix" = "." ] && old_suffix=""
+ [ "$new_suffix" = "." ] && new_suffix=""
+
+ # Directories to be renamed
+ local directories=(
+ "$HOME/.config/$base_name"
+ "$HOME/.local/share/$base_name"
+ "$HOME/.local/state/$base_name"
+ "$HOME/.cache/$base_name"
+ )
+
+ for dir in "${directories[@]}"; do
+ if [ -d "$dir$old_suffix" ]; then
+ mv "$dir$old_suffix" "$dir$new_suffix"
+ echo "Renamed $dir$old_suffix to $dir$new_suffix"
+ else
+ echo "Directory $dir$old_suffix does not exist"
+ fi
+ done
+}
+
+# change nvim config
+alias cnf=change_nvim_config_dir
+function change_nvim_config_dir() {
+ local base_dir="${XDG_DOTFILES_DIR:-$HOME/.dotfiles}/$(whereami)/.config" # Base directory for Neovim configs
+ local target_dir="${XDG_CONFIG_HOME:-$HOME/.config}/nvim" # Target directory for active Neovim config
+ local target_share="${XDG_DATA_HOME:-$HOME/.local/share}/nvim" # Neovim"s share directory
+ local target_state="${XDG_STATE_HOME:-$HOME/.local/state}/nvim" # Neovim"s state directory
+ local target_cache="${XDG_CACHE_HOME:-$HOME/.cache}/nvim" # Neovim"s cache directory
+
+ # Explicitly list your configuration options
+ local configs=("Default" "TheSiahxyz" "AstroNvim" "LazyVim" "LunarVim" "NvChad")
+ local selected_dir=$(printf "%s\n" "${configs[@]}" | fzf --cycle --prompt=" Neovim Config  " --height 50% --layout=reverse --border --exit-0)
+
+ # Check if a configuration was selected
+ [[ -z $selected_dir ]] && return 1
+
+ # Default configuration
+ if [[ $selected_dir == "Default" ]]; then
+ selected_dir="kickstart"
+ echo "Clearing the Neovim configuration directory..."
+ rm -rf "$target_dir" "$target_share" "$target_state" "$target_cache" &>/dev/null
+ echo "Switched to the base Neovim configuration."
+ return 0
+ fi
+
+ # Construct the full path of the selected configuration
+ local config_path="$base_dir/$selected_dir"
+ echo "$config_path"
+
+ # Clear existing configurations if confirmed by the user
+ echo -n "This will overwrite existing configurations. Continue? (y/n) "
+ read reply
+ if [[ $reply =~ ^[Yy]$ ]]; then
+ echo "Clearing existing Neovim configurations..."
+ rm -rf "$target_dir" "$target_share" "$target_state" "$target_cache" &>/dev/null
+ mkdir -p "$target_dir" "$target_share" "$target_state" "$target_cache" &>/dev/null
+ else
+ echo "Operation cancelled."
+ return 2
+ fi
+
+ # Copy the selected configuration to the target directories
+ if [[ -d "$config_path" ]]; then
+ cp -r "$config_path/." "$target_dir" > /dev/null 2>&1
+ echo "Successfully applied $selected_dir configuration."
+ shortcuts >/dev/null
+ else
+ echo "Configuration directory for $selected_dir does not exist."
+ return 3
+ fi
+
+ if [ "$whereami" = "ar" ]; then
+ chown -R "$USER:wheel" "/home/$USER/.config/nvim"
+ fi
+}
+
+# run nvim with target config
+alias vnf=nvim_target_config
+function nvim_target_config() {
+ items=("Default" "TheSiahxyz" "AstroNvim" "LazyVim" "LunarVim" "NvChad")
+ config=$(printf "%s\n" "${items[@]}" | fzf --cycle --prompt=" Neovim Config  " --height=~50% --layout=reverse --border --exit-0)
+ [[ -z $config ]] && return 0
+ [[ $config == "Default" ]] && config="kickstart"
+ NVIM_APPNAME=$config nvim $@
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- PASS --- ###
+# otp
+function pass_otp() { pass otp uri -q $1; }
+
+# otp insert
+function pass_otp_insert() { pass otp insert $1; }
+
+# copy pass qr code
+alias cpqr=pass_qr
+function pass_qr() { qrencode -o "$1".png -t png -Sv 40 < "$1".pgp; }
+
+
+###########################################################################################
+###########################################################################################
+### --- PASTE --- ###
+if ls "${ZPLUGINDIR:-${XDG_SCRIPTS_HOME:-${HOME}/.local/bin}/zsh}/zsh-autosuggestions" >/dev/null 2>&1; then
+ autoload -Uz url-quote-magic
+ function pasteinit() {
+ OLD_SELF_INSERT=${${(s.:.)widgets[self-insert]}[2,3]}
+ zle -N self-insert url-quote-magic
+ }
+ function pastefinish() {
+ zle -N self-insert $OLD_SELF_INSERT
+ }
+ zstyle :bracketed-paste-magic paste-init pasteinit
+ zstyle :bracketed-paste-magic paste-finish pastefinish
+fi
+
+
+###########################################################################################
+###########################################################################################
+### --- SDCV --- ###
+function def() {
+ sdcv -n --utf8-output --color "$@" 2>&1 | \
+ fold --width=$(tput cols) | \
+ less --quit-if-one-screen -RX
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- STOW --- ###
+# run stow script from dotfiles repo
+alias dstw=dotfeils_stw
+function dotfiles_stw() { "${XDG_DOTFILES_DIR:-${HOME}/.dotfiles}/$(whereami)/.local/bin/stw"; }
+
+
+###########################################################################################
+###########################################################################################
+### --- SUDO --- ###
+# insert prefix at the beginning of the previous command
+function __command_replace_buffer() {
+ local old=$1 new=$2 space=${2:+ }
+ if [[ $CURSOR -le ${#old} ]]; then
+ BUFFER="${new}${space}${BUFFER#$old }"
+ CURSOR=${#new}
+ else
+ LBUFFER="${new}${space}${LBUFFER#$old }"
+ fi
+}
+
+# manipulate the previous command line
+function pre_cmd() {
+ local prepend_command=$1
+ local EDITOR=${SUDO_EDITOR:-${VISUAL:-$EDITOR}}
+ [[ -z $BUFFER ]] && LBUFFER="$(fc -ln -1)"
+ local WHITESPACE=""
+
+ # Remove leading whitespace and store it for later restoration
+ if [[ ${LBUFFER:0:1} = " " ]]; then
+ WHITESPACE=" "
+ LBUFFER="${LBUFFER:1}"
+ fi
+
+ # Main logic block
+ {
+ local cmd="${${(Az)BUFFER}[1]}"
+ local realcmd="${${(Az)aliases[$cmd]}[1]:-$cmd}"
+ local editorcmd="${${(Az)EDITOR}[1]}"
+ # Check if EDITOR is set, otherwise prepend the command and return
+ if [[ -z "$EDITOR" ]]; then
+ LBUFFER="$prepend_command $LBUFFER"
+ return
+ fi
+ # Check if the command is an editor command
+ is_editor_cmd=false
+ # Check if realcmd matches EDITOR, editorcmd, or their case variations
+ [[ "$realcmd" = (\$EDITOR|$editorcmd|${editorcmd:c}) || "${realcmd:c}" = ($editorcmd|${editorcmd:c}) ]] && is_editor_cmd=true
+ # Check if the real command's executable path matches the editor command
+ builtin which -a "$realcmd" | command grep -Fx -q "$editorcmd" && is_editor_cmd=true
+ # Execute the command replacement if it's an editor command
+ if $is_editor_cmd; then
+ __command_replace_buffer "$cmd" "$prepend_command -e"
+ return
+ fi
+ # Handle various command patterns in BUFFER
+ case "$BUFFER" in
+ $editorcmd\ *) __command_replace_buffer "$editorcmd" "$prepend_command -e" ;;
+ \$EDITOR\ *) __command_replace_buffer '$EDITOR' "$prepend_command -e" ;;
+ ${prepend_command}\ -e\ *) __command_replace_buffer "${prepend_command} -e" "$EDITOR" ;;
+ ${prepend_command}\ *) __command_replace_buffer "${prepend_command}" "" ;;
+ *) LBUFFER="$prepend_command $LBUFFER" ;;
+ esac
+ } always {
+ # Cleanup code: restore leading whitespace and update the command line
+ LBUFFER="${WHITESPACE}${LBUFFER}"
+ zle && zle redisplay # Only run redisplay if zle is enabled
+ }
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- TMUX --- ###
+# tmux init
+alias tit=tmux_init
+function tmux_init() {
+ ! tmux has-session -t "$TERMINAL" 2>/dev/null && tmux new-session -d -s "$TERMINAL" -c "$HOME"
+ [[ -n "$TMUX" ]] && tmux switch-client -t "$TERMINAL" || tmux attach-session -t "$TERMINAL"
+}
+
+# cd tmux session
+alias cds=cd_session_path
+function cd_session_path() { cd "$(tmux display-message -p '#{session_path}')"; }
+
+# kill tmux session
+alias tmk='kill_tmux_sessions'
+function kill_tmux_sessions() {
+ local sessions
+ sessions="$(tmux ls | fzf --cycle --exit-0 --multi)" || return $?
+ local i
+ for i in "${(f@)sessions}"
+ do
+ [[ $i =~ '([^:]*):.*' ]] && {
+ echo "Killing $match[1]"
+ tmux kill-session -t "$match[1]"
+ }
+ done
+}
+
+# switch tmux session
+alias tms='switch_tmux_session'
+function switch_tmux_session() {
+ local session
+ session=$(tmux list-sessions -F "#{session_name}" \
+ | fzf --cycle --query="$1" --select-1 --exit-0) &&
+ tmux switch-client -t "$session"
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- VIRTUAL ENV --- ###
+# create venvs
+alias createv=create_venv
+function create_venv() {
+ local env_dir="${XDG_DATA_HOME:-${HOME}/.local/share}/venvs/${1:-venv}"
+ local requirements_path="${XDG_DATA_HOME:-${HOME}/.local/share}/venvs"
+
+ # Check if the environment already exists
+ # Create the virtual environment
+ echo "Creating new virtual environment in '$env_dir'..."
+ python3 -m venv $env_dir
+
+ # Activate the virtual environment
+ source $env_dir/bin/activate
+
+ # Optional: Install any default packages
+ pip3 install --upgrade pip >/dev/null 2>&1
+
+ if [ -f "$requirements_path/default-requirements.txt" ]; then
+ echo "Installing packages from '$requirements_path/default-requirements.txt'..."
+ pip3 install -r "$requirements_path/default-requirements.txt" >/dev/null 2>&1
+ fi
+
+ if [ -f "$requirements_path/captured-requirements.txt" ]; then
+ echo "Installing packages from '$requirements_path/captured-requirements.txt'..."
+ pip3 install -r "$requirements_path/captured-requirements.txt" >/dev/null 2>&1
+ fi
+
+ echo "Virtual environment '${1:-venv}' created and activated!"
+}
+
+# activate or switch venvs
+alias actv=active_venv
+function active_venv() {
+ local venv="$1"
+ if [[ -z "$venv" ]]; then
+ venv=$(find "$XDG_DATA_HOME/venvs" -mindepth 1 -maxdepth 1 -type d -exec basename {} \; | fzf)
+ fi
+ source "$XDG_DATA_HOME/venvs/$venv/bin/activate"
+ python -m ensurepip --upgrade >/dev/null 2>&1
+ python -m pip install --upgrade pip >/dev/null 2>&1
+ jupyter kernel --kernel=$venv
+}
+
+# list venvs
+alias listv=list_venv
+function list_venv() {
+ local venvs_dir="${XDG_DATA_HOME:-${HOME}/.local/share}/venvs"
+ local venvs=("$venvs_dir"/*)
+
+ if [ ${#venvs[@]} -eq 0 ]; then
+ echo "No venvs"
+ return 0
+ fi
+
+ echo "venvs list:"
+ for venv in "${venvs[@]}"; do
+ if [ -d "$venv" ]; then
+ echo " 󰢔 $(basename "$venv")"
+ fi
+ done
+}
+
+# deactivate venv
+alias deactv=deactive_venv
+function deactive_venv() {
+ if [[ "$VIRTUAL_ENV" != "" ]]; then
+ if [[ ! -f "${XDG_DATA_HOME:-${HOME}/.local/share}/venvs/requirements.txt" ]]; then
+ pip3 freeze > "${XDG_DATA_HOME:-${HOME}/.local/share}/venvs/captured-requirements.txt"
+ fi
+ deactivate
+ echo "Virtual environment deactivated and all installed packages captured"
+ else
+ echo "No virtual environment is active."
+ fi
+}
+
+# delete venv
+alias delv=delete_venv
+function delete_venv() {
+ local venv="$1"
+ local env_dir="${XDG_DATA_HOME:-${HOME}/.local/share}/venvs"
+
+ if [[ -z $venv ]]; then
+ local options=($(find "$env_dir" -maxdepth 1 -mindepth 1 -type d -exec basename {} \;))
+ options+=("Delete All")
+
+ # Prompt user to select virtual environments or choose to delete all
+ local selected_envs=$(printf "%s\n" "${options[@]}" | fzf --cycle --prompt="venvs  " --height=~50% --layout=reverse --border --multi --exit-0)
+
+ if [[ -z $selected_envs ]]; then
+ echo "No venvs selected"
+ return 0
+ elif [[ $selected_envs == *"Delete All"* ]]; then
+ rm -rf "$env_dir"/*
+ echo "All venvs deleted"
+ else
+ # Loop through selected environments and delete each
+ local env
+ while IFS= read -r env; do
+ rm -rf "$env_dir/$env"
+ echo "$env deleted"
+ done <<< "$selected_envs"
+ fi
+ else
+ rm -rf "$env_dir/$venv"
+ echo "$venv deleted"
+ fi
+}
+
+
+###########################################################################################
+###########################################################################################
+### --- YAZI --- ###
+# open yazi and cd to the file path
+function yazicd() {
+ local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
+ yazi "$@" --cwd-file="$tmp"
+ IFS= read -r -d '' cwd < "$tmp"
+ [ -n "$cwd" ] && [ "$cwd" != "$PWD" ] && builtin cd -- "$cwd"
+ rm -f -- "$tmp"
+}
diff --git a/fedora/.local/bin/bat b/fedora/.local/bin/bat
new file mode 100755
index 0000000..f9846c7
--- /dev/null
+++ b/fedora/.local/bin/bat
Binary files differ
diff --git a/fedora/.local/bin/shortcuts b/fedora/.local/bin/bmshortcuts
index ab5e69d..af4ad58 100755
--- a/fedora/.local/bin/shortcuts
+++ b/fedora/.local/bin/bmshortcuts
@@ -10,9 +10,15 @@ zsh_named_dirs="${XDG_CONFIG_HOME:-${HOME}/.config}/shell/zshnameddirrc"
command -v lf && lf_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/lf/shortcutrc" || lf_shortcuts="/dev/null"
command -v vim && vim_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/vim/shortcuts.vim" || vim_shortcuts="/dev/null"
command -v nvim && nvim_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/nvim/shortcuts.lua" || nvim_shortcuts="/dev/null"
-command -v yazi && yazi_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/yazi/keymap.toml" || yazi_shortcuts="/dev/null"
+if command -v yazi; then
+ yazi_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/yazi/keymap.toml"
+ yazi_shortcuts_tmp="$yazi_shortcuts.tmp"
+else
+ yazi_shortcuts="/dev/null"
+ yazi_shortcuts_tmp="/dev/null"
+fi
command -v ranger && ranger_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/ranger/shortcuts.conf" || ranger_shortcuts="/dev/null"
-command -v qutebrowser && qute_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/qutebrowser/shortcuts.py" || qute_shortcuts="/dev/null"
+command -v qutebrowser && qute_shortcuts="$HOME/.qutebrowser/shortcuts.py" || qute_shortcuts="/dev/null"
command -v fish && fish_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/fish/shortcuts.fish" || fish_shortcuts="/dev/null"
command -v vifm && vifm_shortcuts="${XDG_CONFIG_HOME:-${HOME}/.config}/vifm/shortcuts.rc" || vifm_shortcuts="/dev/null"
@@ -22,7 +28,7 @@ printf "# vim: filetype=sh\\n" >"$fish_shortcuts"
printf "# vim: filetype=sh\\nalias " >"$shell_shortcuts"
printf "# vim: filetype=sh\\n" >"$shell_env_shortcuts"
printf "\" vim: filetype=vim\\n" >"$vifm_shortcuts"
-cp "$HOME/.config/yazi/keymap-default.toml" "$yazi_shortcuts"
+[ -f "$HOME/.config/yazi/keymap-default.toml" ] && cp "$HOME/.config/yazi/keymap-default.toml" "$yazi_shortcuts"
# Format the `directories` file in the correct syntax and sent it to all three configs.
eval "echo \"$(cat "$bmdirs")\"" |
@@ -43,7 +49,7 @@ eval "echo \"$(cat "$bmdirs")\"" |
printf(\"vim.keymap.set('n', '<localleader><localleader>%s', function() require('mini.files').open('%s') end, { noremap = true, silent = true, desc = '%s' })\n\", \$1, \$2, desc_path) >> \"$nvim_shortcuts\" ;
desc_path = \$2; gsub(\"^/home/$USER/\",\"~/\",desc_path);
key_array = \"\"; for(i=1; i<=length(\$1); i++) { if(i==1) key_array = \"\\\"\" substr(\$1,i,1) \"\\\"\"; else key_array = key_array \", \\\"\" substr(\$1,i,1) \"\\\"\" }
- printf(\"\\t{ on = [ %s ], run = \\\"cd %s\\\", desc = \\\"Go to %s\\\" },\\n\",key_array,\$2,desc_path) >> \"$yazi_shortcuts.tmp\"}"
+ printf(\"\\t{ on = [ %s ], run = \\\"cd %s\\\", desc = \\\"Go to %s\\\" },\\n\",key_array,\$2,desc_path) >> \"$yazi_shortcuts_tmp\"}"
# Format the `files` file in the correct syntax and sent it to both configs.
eval "echo \"$(cat "$bmfiles")\"" |
@@ -66,10 +72,10 @@ eval "echo \"$(cat "$bmfiles")\"" |
printf(\"vim.keymap.set('n', '<localleader><localleader>%s', '<cmd>e %s<cr>', { noremap = true, silent = true, desc = '%s' })\n\", \$1, \$2, desc_path) >> \"$nvim_shortcuts\" ;
desc_path = \$2; gsub(\"^/home/$USER/\",\"~/\",desc_path);
key_array = \"\"; for(i=1; i<=length(\$1); i++) { if(i==1) key_array = \"\\\"\" substr(\$1,i,1) \"\\\"\"; else key_array = key_array \", \\\"\" substr(\$1,i,1) \"\\\"\" }
- printf(\"\\t{ on = [ %s ], run = [ 'reveal %s', 'open' ], desc = \\\"Open %s\\\" },\\n\", key_array, \$2, desc_path) >> \"$yazi_shortcuts.tmp\" }"
+ printf(\"\\t{ on = [ %s ], run = [ 'reveal %s', 'open' ], desc = \\\"Open %s\\\" },\\n\", key_array, \$2, desc_path) >> \"$yazi_shortcuts_tmp\" }"
# Merge bookmarks into keymap-default.toml
-if [ -f "$yazi_shortcuts.tmp" ]; then
+if [ -f "$yazi_shortcuts_tmp" ]; then
# Find the line with the closing bracket in the [mgr] section
line_num=$(grep -n "^]" "$yazi_shortcuts" | head -1 | cut -d: -f1)
@@ -77,11 +83,11 @@ if [ -f "$yazi_shortcuts.tmp" ]; then
head -n $((line_num - 1)) "$yazi_shortcuts" >"$yazi_shortcuts.new"
echo "" >>"$yazi_shortcuts.new"
echo " # Custom bookmarks" >>"$yazi_shortcuts.new"
- cat "$yazi_shortcuts.tmp" >>"$yazi_shortcuts.new"
+ cat "$yazi_shortcuts_tmp" >>"$yazi_shortcuts.new"
echo "]" >>"$yazi_shortcuts.new"
tail -n +$((line_num + 1)) "$yazi_shortcuts" >>"$yazi_shortcuts.new"
# Replace the original file
mv "$yazi_shortcuts.new" "$yazi_shortcuts"
- rm -f "$yazi_shortcuts.tmp"
+ rm -f "$yazi_shortcuts_tmp"
fi
diff --git a/fedora/.local/bin/bookmarks b/fedora/.local/bin/bookmarks
deleted file mode 100755
index a892a33..0000000
--- a/fedora/.local/bin/bookmarks
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/bin/sh
-
-usage() {
- echo "Open bookmarks, URLs, or browser history in a program."
- echo ""
- echo "Usage: ${0##*/} [OPTIONS]"
- echo ""
- echo "Options:"
- echo " -h : Show this message"
- echo " -b : Open a browser bookmark"
- echo " -c : Copy a URL from snippets/urls to the clipboard"
- echo " -o : Get a URL from snippets/urls and open it in a new browser window"
- echo " -p : Get a URL from snippets/urls and open it in a private browser window"
- echo " -s : Open browser history"
- echo " -t : Get a URL from snippets/urls and type it using xdotool"
- echo " -v : Open a browser bookmark in private browser window"
- echo ""
- echo "Programs:"
- echo " browser : System default browser"
- echo " lynx : A text browser for World Wide Web"
- echo " w3m : A text WWW browser, similar to lynx"
- echo ""
- echo "Examples:"
- echo " ${0##*/} -b # Opens a browser bookmark in a program"
- echo " ${0##*/} -c # Copies a URL from snippets/urls to the clipboard"
- echo " ${0##*/} -o # Opens a URL from snippets/urls in a new browser window"
- echo " ${0##*/} -p # Opens a URL in a private browser window"
- echo " ${0##*/} -s # Opens browser history in a program"
- echo " ${0##*/} -v # Opens browser boomark in private browser window"
-}
-
-addurls() {
- url=$(echo | dmenu -i -p "Enter a url: ")
- [ -z "$url" ] && printf "Error: url must be provided\n\n" && exit 0
-
- description=$(echo | dmenu -i -p "Enter a description of the url: ")
- [ -z "$description" ] && echo "https://$url" >>~/.local/share/thesiah/snippets
- [ -n "$description" ] && echo "$description https://$url" >>~/.local/share/thesiah/snippets
-}
-
-opentool() {
- available_tools=""
- command -v xdg-open 2>/dev/null | grep -v "alias" -q && available_tools="$available_tools xdg-open"
- command -v open 2>/dev/null | grep -v "alias" -q && available_tools="$available_tools open"
- command -v lynx 2>/dev/null | grep -v "alias" -q && available_tools="$available_tools lynx"
- command -v w3m 2>/dev/null | grep -v "alias" -q && available_tools="$available_tools w3m"
- available_tools=$(printf "%s" "$available_tools" | awk '{$1=$1; print}' | tr ' ' '\n')
- if [ -z "$available_tools" ]; then
- printf "No browser found\n" >&2
- exit 1
- fi
-
- opentool=$(printf "%s\n" "$available_tools" | dmenu -i -p "Choose an open tool:")
-
- # Set the selected tool to the variable 'open'
- case "$opentool" in
- xdg-open) xdg-open "$1" ;;
- open)
- case "$(uname -s)" in
- Darwin) open "$1" ;;
- *) xdg-open "$1" ;;
- esac
- ;;
- lynx) setsid -f "$TERMINAL" -e lynx "$1" ;;
- w3m) setsid -f "$TERMINAL" -e w3m "$1" ;;
- *) echo "Invalid selection" >&2 && exit 1 ;;
- esac
-}
-
-openwindow() {
- if [ "$1" = "private" ]; then
- case "$BROWSER" in
- *qutebrowser*) "$BROWSER" --target private-window "$url" ;;
- *firefox* | *librewolf*) "$BROWSER" --private-window "$url" ;;
- esac
- else
- case "$BROWSER" in
- *qutebrowser*) "$BROWSER" --target window "$url" ;;
- *firefox* | *librewolf*) "$BROWSER" --new-window "$url" ;;
- esac
- fi
-}
-
-openinbrowser() {
- # Extract only the default part of the profile name
- case $BROWSER in
- *firefox*)
- profiles_ini_path="$HOME/.mozilla/firefox/profiles.ini"
- profile=$(awk '/\[Install/ {found=1} found && /^Default=/ {split($0, arr, "."); print arr[2]; exit}' "$profiles_ini_path")
- profile_dir=$(find ~/.mozilla/firefox -type d -name "*.$profile*" | head -n 1)
- db_path="$profile_dir/places.sqlite"
- ;;
- *librewolf*)
- profiles_ini_path="$HOME/.librewolf/profiles.ini"
- profile=$(awk '/\[Install/ {found=1} found && /^Default=/ {split($0, arr, "."); print arr[2]; exit}' "$profiles_ini_path")
- profile_dir=$(find ~/.librewolf -type d -name "*.$profile*" | head -n 1)
- db_path="$profile_dir/places.sqlite"
- ;;
- *qutebrowser*)
- profile_dir="${XDG_DATA_HOME:-${HOME}/.local/share}/qutebrowser"
- db_path="$profile_dir/history.sqlite"
- ;;
- *) echo "Default browser path is needed." && exit ;;
- esac
-
- tmp_file="$(mktemp)"
- cp -f "$db_path" "$tmp_file"
-
- type dmenu >/dev/null 2>&1 &&
- selection="dmenu -i -l 20 -p \"Choose a $1 to open:\"" ||
- selection="fzf-tmux --reverse --cycle --ansi --delimiter='|' --with-nth=1..-2"
-
- cols=$((${COLUMNS:-90} / 3))
- case "$1" in
- *bookmark*)
- case "$BROWSER" in
- qutebrowser) bookmarks -o ;;
- *firefox* | *librewolf*)
- sqlite_query="
- SELECT substr(b.title, 1, $cols) || ' | ' || p.url AS bookmark
- FROM moz_bookmarks b
- JOIN moz_places p ON b.fk = p.id
- WHERE b.type = 1 AND p.url LIKE 'http%' AND b.title NOT NULL
- ORDER BY b.title;
- "
- ;;
- *qutebrowser*) geturls && openwindow && exit ;;
- esac
- ;;
- *history*)
- case "$BROWSER" in
- *qutebrowser*)
- sqlite_query="
- SELECT substr(h.title, 1, $cols) || ' | ' || h.url AS bookmark
- FROM CompletionHistory h
- ORDER BY h.last_atime DESC
- LIMIT 100;
- "
- ;;
- *firefox* | *librewolf*)
- sqlite_query="
- SELECT substr(p.title, 1, $cols) || ' | ' || p.url
- FROM moz_places p
- JOIN moz_historyvisits hv ON hv.place_id = p.id
- ORDER BY hv.visit_date DESC
- LIMIT 100;
- "
- ;;
- esac
- ;;
- esac
- choice=$(sqlite3 "$tmp_file" "$sqlite_query" | eval "$selection" | cut -d'|' -f2 | sed 's|.*\(https://\)|\1|' | xargs)
- if [ -n "$choice" ]; then
- if echo "$1" | grep -q "private"; then
- "$BROWSER" --private-window "$choice"
- else
- opentool "$choice"
- fi
- else
- exit
- fi
- rm "$tmp_file"
-}
-
-geturls() {
- urls=$(cat ~/.config/qutebrowser/quickmarks ~/.config/qutebrowser/bookmarks/urls ~/.local/share/thesiah/snippets ~/.local/share/thesiah/urls 2>/dev/null)
- choice=$(echo "$urls" | grep -v -e '^#' -e '^$' | awk '
- {
- if ($1 ~ /^https?:\/\//) { alias = substr($0, index($0, $2)) } # Case 2: URL first
- else { alias = substr($0, 1, length($0) - length($NF) - 1) } # Case 1: URL last
- print alias
- }' | dmenu -i -l 50 -p "Choose an alias $1:")
-
- [ -z "$choice" ] && exit
- url=$(echo "$urls" | grep -v -e '^#' -e '^$' | awk -v choice="$choice" '
- {
- if ($1 ~ /^https?:\/\//) { url = $1; alias = substr($0, index($0, $2)) } # Case 2
- else { alias = substr($0, 1, length($0) - length($NF) - 1); url = $NF } # Case 1
- if (alias == choice) print url
- }')
-}
-
-copytoclipboard() {
- if command -v xclip >/dev/null 2>&1; then
- printf "%s" "$url" | xclip -selection clipboard
- elif command -v clipcopy >/dev/null 2>&1; then
- printf "%s" "$url" | clipcopy
- elif command -v xsel >/dev/null 2>&1; then
- printf "%s" "$url" | xsel --clipboard --input
- else
- echo "Clipboard utility not found. Install xclip, clipcopy, or xsel." >&2
- exit 1
- fi
- notify-send "'$choice' copied in clipbaord" "$url"
-}
-
-[ $# -eq 0 ] && usage && exit 1
-
-while getopts "abchopstv" opt; do
- case $opt in
- a) addurls ;;
- b) openinbrowser "bookmark" ;;
- c) geturls "to copy" && copytoclipboard ;;
- o) geturls "to open in $BROWSER" && openwindow ;;
- p) geturls "to open in private $BROWSER" && openwindow private ;;
- s) openinbrowser "history" ;;
- t) geturls "to type under cursor" && xdotool type "$url" ;;
- v) openinbrowser "private bookmark" ;;
- h | *) usage && exit 0 ;;
- esac
-done
diff --git a/fedora/.local/bin/chafa b/fedora/.local/bin/chafa
new file mode 100755
index 0000000..89b4c96
--- /dev/null
+++ b/fedora/.local/bin/chafa
Binary files differ
diff --git a/fedora/.local/bin/eza b/fedora/.local/bin/eza
new file mode 100755
index 0000000..0d40b22
--- /dev/null
+++ b/fedora/.local/bin/eza
Binary files differ
diff --git a/fedora/.local/bin/fzf b/fedora/.local/bin/fzf
new file mode 100755
index 0000000..0e89dac
--- /dev/null
+++ b/fedora/.local/bin/fzf
Binary files differ
diff --git a/fedora/.local/bin/fzf-preview.sh b/fedora/.local/bin/fzf-preview.sh
new file mode 100755
index 0000000..5f99697
--- /dev/null
+++ b/fedora/.local/bin/fzf-preview.sh
@@ -0,0 +1,86 @@
+#!/usr/bin/env bash
+#
+# The purpose of this script is to demonstrate how to preview a file or an
+# image in the preview window of fzf.
+#
+# Dependencies:
+# - https://github.com/sharkdp/bat
+# - https://github.com/hpjansson/chafa
+# - https://iterm2.com/utilities/imgcat
+
+if [[ $# -ne 1 ]]; then
+ >&2 echo "usage: $0 FILENAME[:LINENO][:IGNORED]"
+ exit 1
+fi
+
+file=${1/#\~\//$HOME/}
+
+center=0
+if [[ ! -r $file ]]; then
+ if [[ $file =~ ^(.+):([0-9]+)\ *$ ]] && [[ -r ${BASH_REMATCH[1]} ]]; then
+ file=${BASH_REMATCH[1]}
+ center=${BASH_REMATCH[2]}
+ elif [[ $file =~ ^(.+):([0-9]+):[0-9]+\ *$ ]] && [[ -r ${BASH_REMATCH[1]} ]]; then
+ file=${BASH_REMATCH[1]}
+ center=${BASH_REMATCH[2]}
+ fi
+fi
+
+type=$(file --brief --dereference --mime -- "$file")
+
+if [[ ! $type =~ image/ ]]; then
+ if [[ $type =~ =binary ]]; then
+ file "$1"
+ exit
+ fi
+
+ # Sometimes bat is installed as batcat.
+ if command -v batcat > /dev/null; then
+ batname="batcat"
+ elif command -v bat > /dev/null; then
+ batname="bat"
+ else
+ cat "$1"
+ exit
+ fi
+
+ ${batname} --style="${BAT_STYLE:-numbers}" --color=always --pager=never --highlight-line="${center:-0}" -- "$file"
+ exit
+fi
+
+dim=${FZF_PREVIEW_COLUMNS}x${FZF_PREVIEW_LINES}
+if [[ $dim == x ]]; then
+ dim=$(stty size < /dev/tty | awk '{print $2 "x" $1}')
+elif ! [[ $KITTY_WINDOW_ID ]] && ((FZF_PREVIEW_TOP + FZF_PREVIEW_LINES == $(stty size < /dev/tty | awk '{print $1}'))); then
+ # Avoid scrolling issue when the Sixel image touches the bottom of the screen
+ # * https://github.com/junegunn/fzf/issues/2544
+ dim=${FZF_PREVIEW_COLUMNS}x$((FZF_PREVIEW_LINES - 1))
+fi
+
+# 1. Use icat (from Kitty) if kitten is installed
+if [[ $KITTY_WINDOW_ID ]] || [[ $GHOSTTY_RESOURCES_DIR ]] && command -v kitten > /dev/null; then
+ # 1. 'memory' is the fastest option but if you want the image to be scrollable,
+ # you have to use 'stream'.
+ #
+ # 2. The last line of the output is the ANSI reset code without newline.
+ # This confuses fzf and makes it render scroll offset indicator.
+ # So we remove the last line and append the reset code to its previous line.
+ kitten icat --clear --transfer-mode=memory --unicode-placeholder --stdin=no --place="$dim@0x0" "$file" | sed '$d' | sed $'$s/$/\e[m/'
+
+# 2. Use chafa with Sixel output
+elif command -v chafa > /dev/null; then
+ chafa -s "$dim" "$file"
+ # Add a new line character so that fzf can display multiple images in the preview window
+ echo
+
+# 3. If chafa is not found but imgcat is available, use it on iTerm2
+elif command -v imgcat > /dev/null; then
+ # NOTE: We should use https://iterm2.com/utilities/it2check to check if the
+ # user is running iTerm2. But for the sake of simplicity, we just assume
+ # that's the case here.
+ imgcat -W "${dim%%x*}" -H "${dim##*x}" "$file"
+
+# 4. Cannot find any suitable method to preview the image
+else
+ file "$file"
+fi
diff --git a/fedora/.local/bin/fzf-tmux b/fedora/.local/bin/fzf-tmux
new file mode 100755
index 0000000..e73a908
--- /dev/null
+++ b/fedora/.local/bin/fzf-tmux
@@ -0,0 +1,257 @@
+#!/usr/bin/env bash
+# fzf-tmux: starts fzf in a tmux pane
+# usage: fzf-tmux [LAYOUT OPTIONS] [--] [FZF OPTIONS]
+
+fail() {
+ >&2 echo "$1"
+ exit 2
+}
+
+fzf="$(command which fzf)" || fzf="$(dirname "$0")/fzf"
+[[ -x $fzf ]] || fail 'fzf executable not found'
+
+args=()
+opt=""
+skip=""
+swap=""
+close=""
+term=""
+[[ -n $LINES ]] && lines=$LINES || lines=$(tput lines) || lines=$(tmux display-message -p "#{pane_height}")
+[[ -n $COLUMNS ]] && columns=$COLUMNS || columns=$(tput cols) || columns=$(tmux display-message -p "#{pane_width}")
+
+tmux_version=$(tmux -V | sed 's/[^0-9.]//g')
+tmux_32=$(awk '{print ($1 >= 3.2)}' <<< "$tmux_version" 2> /dev/null || bc -l <<< "$tmux_version >= 3.2")
+
+help() {
+ >&2 echo 'usage: fzf-tmux [LAYOUT OPTIONS] [--] [FZF OPTIONS]
+
+ LAYOUT OPTIONS:
+ (default layout: -d 50%)
+
+ Popup window (requires tmux 3.2 or above):
+ -p [WIDTH[%][,HEIGHT[%]]] (default: 50%)
+ -w WIDTH[%]
+ -h HEIGHT[%]
+ -x COL
+ -y ROW
+
+ Split pane:
+ -u [HEIGHT[%]] Split above (up)
+ -d [HEIGHT[%]] Split below (down)
+ -l [WIDTH[%]] Split left
+ -r [WIDTH[%]] Split right
+'
+ exit
+}
+
+while [[ $# -gt 0 ]]; do
+ arg="$1"
+ shift
+ [[ -z $skip ]] && case "$arg" in
+ -)
+ term=1
+ ;;
+ --help)
+ help
+ ;;
+ --version)
+ echo "fzf-tmux (with fzf $("$fzf" --version))"
+ exit
+ ;;
+ -p* | -w* | -h* | -x* | -y* | -d* | -u* | -r* | -l*)
+ if [[ $arg =~ ^-[pwhxy] ]]; then
+ [[ $opt =~ "-E" ]] || opt="-E"
+ elif [[ $arg =~ ^.[lr] ]]; then
+ opt="-h"
+ if [[ $arg =~ ^.l ]]; then
+ opt="$opt -d"
+ swap="; swap-pane -D ; select-pane -L"
+ close="; tmux swap-pane -D"
+ fi
+ else
+ opt=""
+ if [[ $arg =~ ^.u ]]; then
+ opt="$opt -d"
+ swap="; swap-pane -D ; select-pane -U"
+ close="; tmux swap-pane -D"
+ fi
+ fi
+ if [[ ${#arg} -gt 2 ]]; then
+ size="${arg:2}"
+ else
+ if [[ $1 =~ ^[0-9%,]+$ ]] || [[ $1 =~ ^[A-Z]$ ]]; then
+ size="$1"
+ shift
+ else
+ continue
+ fi
+ fi
+
+ if [[ $arg =~ ^-p ]]; then
+ if [[ -n $size ]]; then
+ w=${size%%,*}
+ h=${size##*,}
+ opt="$opt -w$w -h$h"
+ fi
+ elif [[ $arg =~ ^-[whxy] ]]; then
+ opt="$opt ${arg:0:2}$size"
+ elif [[ $size =~ %$ ]]; then
+ size=${size:0:${#size}-1}
+ if [[ $tmux_32 == 1 ]]; then
+ if [[ -n $swap ]]; then
+ opt="$opt -l $((100 - size))%"
+ else
+ opt="$opt -l $size%"
+ fi
+ else
+ if [[ -n $swap ]]; then
+ opt="$opt -p $((100 - size))"
+ else
+ opt="$opt -p $size"
+ fi
+ fi
+ else
+ if [[ -n $swap ]]; then
+ if [[ $arg =~ ^.l ]]; then
+ max=$columns
+ else
+ max=$lines
+ fi
+ size=$((max - size))
+ [[ $size -lt 0 ]] && size=0
+ opt="$opt -l $size"
+ else
+ opt="$opt -l $size"
+ fi
+ fi
+ ;;
+ --)
+ # "--" can be used to separate fzf-tmux options from fzf options to
+ # avoid conflicts
+ skip=1
+ continue
+ ;;
+ *)
+ args+=("$arg")
+ ;;
+ esac
+ [[ -n $skip ]] && args+=("$arg")
+done
+
+if [[ -z $TMUX ]]; then
+ "$fzf" "${args[@]}"
+ exit $?
+fi
+
+# * --height option is not allowed
+# * CTRL-Z is also disabled
+# * fzf-tmux script is not compatible with --tmux option in fzf 0.53.0 or later
+args=("${args[@]}" "--no-height" "--bind=ctrl-z:ignore" "--no-tmux")
+
+# Handle zoomed tmux pane without popup options by moving it to a temp window
+if [[ ! $opt =~ "-E" ]] && tmux list-panes -F '#F' | grep -q Z; then
+ zoomed_without_popup=1
+ original_window=$(tmux display-message -p "#{window_id}")
+ tmp_window=$(tmux new-window -d -P -F "#{window_id}" "bash -c 'while :; do for c in \\| / - '\\;' do sleep 0.2; printf \"\\r\$c fzf-tmux is running\\r\"; done; done'")
+ tmux swap-pane -t $tmp_window \; select-window -t $tmp_window
+fi
+
+set -e
+
+# Clean up named pipes on exit
+id=$RANDOM
+argsf="${TMPDIR:-/tmp}/fzf-args-$id"
+fifo1="${TMPDIR:-/tmp}/fzf-fifo1-$id"
+fifo2="${TMPDIR:-/tmp}/fzf-fifo2-$id"
+fifo3="${TMPDIR:-/tmp}/fzf-fifo3-$id"
+if tmux_win_opts=$(tmux show-options -p remain-on-exit \; show-options -p synchronize-panes 2> /dev/null); then
+ tmux_win_opts=($(sed '/ off/d; s/synchronize-panes/set-option -p synchronize-panes/; s/remain-on-exit/set-option -p remain-on-exit/; s/$/ \\;/' <<< "$tmux_win_opts"))
+ tmux_off_opts='; set-option -p synchronize-panes off ; set-option -p remain-on-exit off'
+else
+ tmux_win_opts=($(tmux show-window-options remain-on-exit \; show-window-options synchronize-panes | sed '/ off/d; s/^/set-window-option /; s/$/ \\;/'))
+ tmux_off_opts='; set-window-option synchronize-panes off ; set-window-option remain-on-exit off'
+fi
+cleanup() {
+ \rm -f $argsf $fifo1 $fifo2 $fifo3
+
+ # Restore tmux window options
+ if [[ ${#tmux_win_opts[@]} -gt 1 ]]; then
+ eval "tmux ${tmux_win_opts[*]}"
+ fi
+
+ # Remove temp window if we were zoomed without popup options
+ if [[ -n $zoomed_without_popup ]]; then
+ tmux display-message -p "#{window_id}" > /dev/null
+ tmux swap-pane -t $original_window \; \
+ select-window -t $original_window \; \
+ kill-window -t $tmp_window \; \
+ resize-pane -Z
+ fi
+
+ if [[ $# -gt 0 ]]; then
+ trap - EXIT
+ exit 130
+ fi
+}
+trap 'cleanup 1' SIGUSR1
+trap 'cleanup' EXIT
+
+envs="export TERM=$TERM "
+if [[ $opt =~ "-E" ]]; then
+ if [[ $tmux_version == 3.2 ]]; then
+ FZF_DEFAULT_OPTS="--margin 0,1 $FZF_DEFAULT_OPTS"
+ elif [[ $tmux_32 == 1 ]]; then
+ FZF_DEFAULT_OPTS="--border $FZF_DEFAULT_OPTS"
+ opt="-B $opt"
+ else
+ echo "fzf-tmux: tmux 3.2 or above is required for popup mode" >&2
+ exit 2
+ fi
+fi
+envs="$envs FZF_DEFAULT_COMMAND=$(printf %q "$FZF_DEFAULT_COMMAND")"
+envs="$envs FZF_DEFAULT_OPTS=$(printf %q "$FZF_DEFAULT_OPTS")"
+envs="$envs FZF_DEFAULT_OPTS_FILE=$(printf %q "$FZF_DEFAULT_OPTS_FILE")"
+[[ -n $RUNEWIDTH_EASTASIAN ]] && envs="$envs RUNEWIDTH_EASTASIAN=$(printf %q "$RUNEWIDTH_EASTASIAN")"
+[[ -n $BAT_THEME ]] && envs="$envs BAT_THEME=$(printf %q "$BAT_THEME")"
+echo "$envs;" > "$argsf"
+
+# Build arguments to fzf
+opts=$(printf "%q " "${args[@]}")
+
+pppid=$$
+echo -n "trap 'kill -SIGUSR1 -$pppid' EXIT SIGINT SIGTERM;" >> $argsf
+close="; trap - EXIT SIGINT SIGTERM $close"
+
+export TMUX=$(cut -d , -f 1,2 <<< "$TMUX")
+mkfifo -m o+w $fifo2
+if [[ $opt =~ "-E" ]]; then
+ cat $fifo2 &
+ if [[ -n $term ]] || [[ -t 0 ]]; then
+ cat <<< "\"$fzf\" $opts > $fifo2; out=\$? $close; exit \$out" >> $argsf
+ else
+ mkfifo $fifo1
+ cat <<< "\"$fzf\" $opts < $fifo1 > $fifo2; out=\$? $close; exit \$out" >> $argsf
+ cat <&0 > $fifo1 &
+ fi
+
+ tmux popup -d "$PWD" $opt "bash $argsf" > /dev/null 2>&1
+ exit $?
+fi
+
+mkfifo -m o+w $fifo3
+if [[ -n $term ]] || [[ -t 0 ]]; then
+ cat <<< "\"$fzf\" $opts > $fifo2; echo \$? > $fifo3 $close" >> $argsf
+else
+ mkfifo $fifo1
+ cat <<< "\"$fzf\" $opts < $fifo1 > $fifo2; echo \$? > $fifo3 $close" >> $argsf
+ cat <&0 > $fifo1 &
+fi
+tmux \
+ split-window -c "$PWD" $opt "bash -c 'exec -a fzf bash $argsf'" $swap \
+ $tmux_off_opts \
+ > /dev/null 2>&1 || {
+ "$fzf" "${args[@]}"
+ exit $?
+}
+cat $fifo2
+exit "$(cat $fifo3)"
diff --git a/fedora/.local/bin/fzffiles b/fedora/.local/bin/fzffiles
new file mode 100755
index 0000000..97047e9
--- /dev/null
+++ b/fedora/.local/bin/fzffiles
@@ -0,0 +1,99 @@
+#!/bin/sh
+
+# The set -e option instructs sh to immediately exit if any command has a non-zero exit status
+set -e
+
+# Set new line and tab for word splitting
+IFS='
+'
+
+# Get the list of selected files with key bindings for specific paths
+files=$(fzf-tmux \
+ --header "^a pwd ^b public ^d .dotfiles ^f configs ^g git ^h home ^k desktop ^r scripts ^s suckless ^u staged files ^v private ^/ help" \
+ --preview "selection={};
+ clean=\$(printf '%s' \"\$selection\" | sed -e 's/^📄 //' -e 's/^✏️ //' -e 's/^✅ //' -e 's/^❌ //' -e 's/^🔀 //' -e 's/^❓ //');
+ [ -z \"\$clean\" ] && { echo 'No selection'; exit 0; }
+ target=\$(readlink -f \"\$clean\" 2>/dev/null || printf '%s' \"\$clean\");
+ if [ -z \"\$target\" ]; then
+ echo 'Could not resolve path';
+ exit 0;
+ fi
+ if [ -f \"\$target\" ]; then
+ dir=\$(dirname \"\$target\");
+ if git_root=\$(git -C \"\$dir\" rev-parse --show-toplevel 2>/dev/null); then
+ rel=\${target#\"\$git_root\"/};
+ diff_output=\$(git -C \"\$git_root\" diff --color -- \"\$rel\");
+ if [ -n \"\$diff_output\" ]; then
+ printf '%s\n' \"\$diff_output\"
+ exit 0
+ fi
+ diff_output=\$(git -C \"\$git_root\" diff --color --cached -- \"\$rel\");
+ if [ -n \"\$diff_output\" ]; then
+ printf '%s\n' \"\$diff_output\"
+ exit 0
+ fi
+ fi
+ fi
+ if [ -d \"\$target\" ]; then
+ exa --color=always --long --all --header --icons --git \"\$target\"
+ elif [ -f \"\$target\" ]; then
+ bat --color=always --style=header,grid --line-range=:500 \"\$target\"
+ else
+ file -h \"\$target\"
+ fi" \
+ --reverse \
+ --query="$1" \
+ --multi \
+ --exit-0 \
+ --prompt " 💡 " \
+ --bind "ctrl-a:change-prompt( ⚡ )+reload(fd -H -L -t f -E .Trash -E .git -E .cache . $PWD)" \
+ --bind "ctrl-b:change-prompt( 🌎 )+reload(fd -H -L -t f -E .Trash -E .git -E .cache . ${XDG_PUBLICSHARE_DIR:-${HOME}/Public})" \
+ --bind "ctrl-d:change-prompt( ⚙️ )+reload(fd -H -L -t f -E .Trash -E .git -E .cache . ${XDG_DOTFILES_DIR:-${HOME}/.dotfiles})" \
+ --bind "ctrl-f:change-prompt( 🗂️ )+reload(fd -H -L -t f -E .Trash -E .git -E .cache . ${XDG_CONFIG_HOME:-${HOME}/.config})" \
+ --bind "ctrl-g:change-prompt(  )+reload(fd -H -L -t f -E .Trash -E .git -E .cache . $HOME/Private/repos $HOME/Public/repos)" \
+ --bind "ctrl-h:change-prompt( 🏠 )+reload(fd -H -L -t f -E .Trash -E .git -E .cache . $HOME)" \
+ --bind "ctrl-k:change-prompt( 🖥️ )+reload(fd -H -L -t f -E .Trash -E .git -E .cache . ${XDG_DESKTOP_DIR:-${HOME}/Desktop})" \
+ --bind "ctrl-r:change-prompt( 👟 )+reload(fd -H -L -t f -E .Trash -E .git -E .cache -E zsh . ${XDG_SCRIPTS_HOME:-${HOME}/.local/bin})" \
+ --bind "ctrl-s:change-prompt( 🛠 )+reload(find ${XDG_SOURCES_HOME:-${HOME}/.local/src}/suckless -maxdepth 2 -type f -not -path '*/.git/*')" \
+ --bind "ctrl-u:change-prompt( 📝 )+reload(if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then top=\$(git rev-parse --show-toplevel 2>/dev/null); git -C \"\$top\" status --porcelain | awk -v root=\"\$top\" '{
+ staged=substr(\$0,1,1);
+ unstaged=substr(\$0,2,1);
+ file=substr(\$0,4);
+ gsub(/^ +/, \"\", file);
+ if (file == \"\") next;
+ if (staged == \"?\" && unstaged == \"?\") icon=\"📄\";
+ else if (staged == \"!\" && unstaged == \"!\") icon=\"❌\";
+ else if (staged != \" \" && staged != \"?\" && unstaged != \" \" && unstaged != \"?\") icon=\"🔀\";
+ else if (staged != \" \" && staged != \"?\") icon=\"✅\";
+ else if (unstaged != \" \") icon=\"✏️\";
+ else icon=\"❓\";
+ print icon \" \" root \"/\" file
+ }'; else echo 'This is not a git repository.'; fi)" \
+ --bind "ctrl-v:change-prompt( 🔒 )+reload(fd -H -L -t f -E .Trash -E .git -E .cache . $HOME/Private)" \
+ --bind 'ctrl-/:change-prompt( ❓ )+reload(echo "^a all
+^b public
+^c configs
+^d .dotfiles
+^g git
+^k desktop
+^r scripts
+^s suckless
+^u staged files
+^v private
+^/ help")')
+
+# Check if any files were selected, and exit if not
+[ -z "$files" ] && exit 0
+
+files=$(printf '%s\n' "$files" | sed -e 's/^📄 //' -e 's/^✏️ //' -e 's/^✅ //' -e 's/^❌ //' -e 's/^🔀 //' -e 's/^❓ //')
+
+if [ -d "$files" ]; then
+ absolute_files=$(realpath $files)
+ if echo "$absolute_files" | while read -r file; do file --mime-type "$file" | grep -q 'video/'; done; then
+ mpv --quiet --loop $absolute_files
+ else
+ openfiles "$absolute_files"
+ fi
+else
+ openfiles "$files"
+fi
diff --git a/fedora/.local/bin/fzffns b/fedora/.local/bin/fzffns
new file mode 100755
index 0000000..c919723
--- /dev/null
+++ b/fedora/.local/bin/fzffns
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+# Print all functions and comments in a readable format
+# Set the filename of the script containing the functions
+file="${ZDOTDIR:-${XDG_CONFIG_HOME:-${HOME}/.config}/zsh}/scripts.zsh"
+
+# Initialize an empty variable to hold functions, aliases, and comments
+functions=""
+
+# Parse the file for function names, aliases, and comments
+while IFS= read -r line || [ -n "$line" ]; do
+ case "$line" in
+ \#*)
+ if [ "$(printf '%s' "$line" | cut -c 2)" != "#" ] && [ "$(printf '%s' "$line" | cut -c 2)" != "!" ]; then
+ # Remove the '#' from the comment line
+ comment=$(printf '%s' "$line" | sed 's/^# //')
+
+ # Read the next line to check for alias or function definition
+ IFS= read -r next_line || break
+
+ # Check if it's an alias definition
+ if echo "$next_line" | grep -q '^alias '; then
+ alias_name=$(echo "$next_line" | sed -n 's/^alias \([a-zA-Z0-9_]*\)=.*$/\1/p')
+
+ # Read another line to get the function definition
+ IFS= read -r func_line || break
+ f_name=$(printf '%s' "$func_line" | sed -n 's/^function \([^(]*\)().*$/\1/p')
+
+ if [ -n "$f_name" ]; then
+ functions="$functions$f_name|$alias_name|$comment\n"
+ fi
+
+ # Check if it's a function definition
+ elif echo "$next_line" | grep -q '^function '; then
+ f_name=$(printf '%s' "$next_line" | sed -n 's/^function \([^(]*\)().*$/\1/p')
+ if [ -n "$f_name" ]; then
+ functions="$functions$f_name||$comment\n"
+ fi
+ fi
+ fi
+ ;;
+ esac
+done <"$file"
+
+# Sort the functions alphabetically by name
+sorted=$(printf '%b' "$functions" | sort)
+
+# Print out the sorted functions with aliases and comments in a readable format
+formatted=$(printf '%b' "$sorted" | while IFS='|' read -r f_name alias_name comment; do
+ if [ -n "$alias_name" ]; then
+ printf 'fn: %-30s - %s (alias: %s)\n' "$f_name" "$comment" "$alias_name"
+ else
+ printf 'fn: %-30s - %s\n' "$f_name" "$comment"
+ fi
+done)
+
+# Use fzf to select a function
+selected=$(printf '%b' "$formatted" | fzf-tmux --header "Select a function:" --reverse)
+
+# Check if a function was selected
+if [ -n "$selected" ]; then
+ # Extract the function name
+ f_name=$(echo "$selected" | cut -d ' ' -f 2 | sed 's/[[:space:]]\+//g')
+
+ # Get the line number of the function definition
+ line_number=$(grep -n "^function $f_name(" "$file" | cut -d ':' -f 1)
+
+ # Open the function in nvim at the specific line number
+ if [ -n "$line_number" ]; then
+ nvim "+$line_number" "$file"
+ else
+ echo "Function '$f_name' not found in $file."
+ fi
+fi
diff --git a/fedora/.local/bin/fzfpass b/fedora/.local/bin/fzfpass
new file mode 100755
index 0000000..5190f8e
--- /dev/null
+++ b/fedora/.local/bin/fzfpass
@@ -0,0 +1,88 @@
+#!/bin/sh
+
+set -e
+
+usage() {
+ echo "Find pass gpg files in Password-Store using fzf."
+ echo ""
+ echo "Usage: ${0##*/} [-h|--help]"
+ echo ""
+ echo "Options:"
+ echo " -h, --help : Show this message"
+ echo ""
+ echo "Shortcuts:"
+ echo " return - echo password and copy to clipboard (wayland only)"
+ echo " ctrl+a - new password (named as per the prompt)"
+ echo " ctrl+e - edit selected password"
+ echo " ctrl+g - regenerate selected password"
+ echo " ctrl+r - rename selected password"
+ echo " ctrl+x - delete selected password"
+ echo " tab - tab complete"
+ echo " esc/ctrl+c - exit"
+ exit 0
+}
+
+if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
+ usage
+fi
+
+passdir=${PASSWORD_STORE_DIR:-$HOME/.local/share/.password-store}
+cd "$passdir"
+
+# Unlock the password for this session
+pass show "$(tree -Ffi | grep '.gpg' | sed 's/.gpg$//g' | sed 's/^..//' | head -n 1)" >/dev/null
+
+# Main fzf session
+passfile=$(
+ tree -Ffi | grep '.gpg' | sed 's/.gpg$//g' | sed 's/^..//' |
+ fzf-tmux \
+ --header="🔑 Password Manager" \
+ --reverse \
+ --no-mouse \
+ --preview="pass {}" \
+ --header="🔑 ^a: Generate | ^e: Edit | ^g: Generate (no symbol) | ^r: Rename | ^s: Generate (symbol) | ^x: Delete | tab: Replace" \
+ --bind="ctrl-a:execute(if [ -z {q} ]; then read -p \"Can't generate empty password. Press enter to continue...\"; else pass generate -n {q} < /dev/tty > /dev/tty 2>&1 && pass edit {q} < /dev/tty > /dev/tty 2>&1; fi)+reload(tree -Ffi | grep '.gpg' | sed 's/.gpg$//g')" \
+ --bind="ctrl-e:execute(pass edit {} < /dev/tty > /dev/tty 2>&1)+reload(tree -Ffi | grep '.gpg' | sed 's/.gpg$//g')" \
+ --bind="ctrl-r:execute(bash -c '
+echo -n \"Enter new name for {}: \" > /dev/tty;
+read new_name < /dev/tty;
+if [ -n \"\$new_name\" ]; then
+ pass mv {} \"\$new_name\" || echo \"Rename failed.\" > /dev/tty;
+else
+ echo \"No name entered. Rename aborted.\" > /dev/tty;
+fi' < /dev/tty > /dev/tty 2>&1)+reload(tree -Ffi | grep '.gpg' | sed 's/.gpg$//g')" \
+ --bind="ctrl-g:execute(if [ -z {} ]; then read -p \"Can't generate empty password. Press enter to continue...\"; else pass generate -in {} < /dev/tty > /dev/tty 2>&1 && pass edit {} < /dev/tty > /dev/tty 2>&1; fi)+reload(tree -Ffi | grep '.gpg' | sed 's/.gpg$//g')" \
+ --bind="ctrl-s:execute(if [ -z {} ]; then read -p \"Can't generate empty password. Press enter to continue...\"; else pass generate -i {} < /dev/tty > /dev/tty 2>&1 && pass edit {} < /dev/tty > /dev/tty 2>&1; fi)+reload(tree -Ffi | grep '.gpg' | sed 's/.gpg$//g')" \
+ --bind="ctrl-x:execute(pass rm {} < /dev/tty > /dev/tty 2>&1)+reload(tree -Ffi | grep '.gpg' | sed 's/.gpg$//g')" \
+ --bind="tab:replace-query"
+)
+
+show_passdata=false
+
+if [ "$1" = "-i" ]; then
+ show_passdata=true
+ shift
+fi
+
+if [ "$show_passdata" = true ]; then
+ passdata="$(pass "$passfile")"
+ echo "$passdata"
+else
+ password="$(pass show "$passfile" | head -n 1)"
+ echo "$password"
+
+ if [ -n "$password" ]; then
+ case "$(uname)" in
+ Darwin*)
+ printf "%s" "$password" | pbcopy # Use pbcopy on macOS
+ ;;
+ Linux*)
+ printf "%s" "$password" | xclip -selection clipboard # Use xclip on Linux
+ ;;
+ *)
+ echo "Unsupported operating system"
+ ;;
+ esac
+ sleep 0.1
+ fi
+fi
diff --git a/fedora/.local/bin/imgcat b/fedora/.local/bin/imgcat
new file mode 100755
index 0000000..af50702
--- /dev/null
+++ b/fedora/.local/bin/imgcat
@@ -0,0 +1,274 @@
+#!/usr/bin/env bash
+
+set -o pipefail
+
+# tmux requires unrecognized OSC sequences to be wrapped with DCS tmux;
+# <sequence> ST, and for all ESCs in <sequence> to be replaced with ESC ESC. It
+# only accepts ESC backslash for ST. We use TERM instead of TMUX because TERM
+# gets passed through ssh.
+function print_osc() {
+ if [[ $TERM == screen* || $TERM == tmux* ]]; then
+ printf "\033Ptmux;\033\033]"
+ else
+ printf "\033]"
+ fi
+}
+
+# More of the tmux workaround described above.
+function print_st() {
+ if [[ $TERM == screen* || $TERM == tmux* ]]; then
+ printf "\a\033\\"
+ else
+ printf "\a"
+ fi
+}
+
+function load_version() {
+ if [ -z ${IMGCAT_BASE64_VERSION+x} ]; then
+ IMGCAT_BASE64_VERSION=$(base64 --version 2>&1)
+ export IMGCAT_BASE64_VERSION
+ fi
+}
+
+function b64_encode() {
+ load_version
+ if [[ $IMGCAT_BASE64_VERSION =~ GNU ]]; then
+ # Disable line wrap
+ base64 -w0
+ else
+ base64
+ fi
+}
+
+function b64_decode() {
+ load_version
+ if [[ $IMGCAT_BASE64_VERSION =~ fourmilab ]]; then
+ BASE64ARG=-d
+ elif [[ $IMGCAT_BASE64_VERSION =~ GNU ]]; then
+ BASE64ARG=-di
+ else
+ BASE64ARG=-D
+ fi
+ base64 $BASE64ARG
+}
+
+# print_image filename inline base64contents print_filename width height preserve_aspect_ratio
+# filename: Filename to convey to client
+# inline: 0 or 1, if set to 1, the file will be displayed inline, otherwise, it will be downloaded
+# base64contents: Base64-encoded contents
+# print_filename: 0 or 1, if set to 1, print the filename after outputting the image
+# width: set output width of the image in character cells, pixels or percent
+# height: set output height of the image in character cells, pixels or percent
+# preserve_aspect_ratio: 0 or 1, if set to 1, fill the specified width and height as much as possible without stretching the image
+# file: Empty string or file type like "application/json" or ".js".
+# legacy: 1 to send one giant control sequence, 0 to send many small control sequences.
+function print_image() {
+ # Send metadata to begin transfer.
+ print_osc
+ printf "1337;"
+ if [[ "$9" -eq 1 ]]; then
+ printf "File"
+ else
+ printf "MultipartFile"
+ fi
+ printf "=inline=%s" "$2"
+ printf ";size=%d" $(printf "%s" "$3" | b64_decode | wc -c)
+ [ -n "$1" ] && printf ";name=%s" "$(printf "%s" "$1" | b64_encode)"
+ [ -n "$5" ] && printf ";width=%s" "$5"
+ [ -n "$6" ] && printf ";height=%s" "$6"
+ [ -n "$7" ] && printf ";preserveAspectRatio=%s" "$7"
+ [ -n "$8" ] && printf ";type=%s" "$8"
+ if [[ "$9" -eq 1 ]]; then
+ printf ":%s" "$3"
+ print_st
+ else
+ print_st
+
+ # Split into 200-byte chunks. This helps it get through tmux.
+ parts=$(printf "%s" "$3" | fold -w 200)
+
+ # Send each part.
+ for part in $parts; do
+ print_osc
+ printf '1337;FilePart=%s' "$part"
+ print_st
+ done
+
+ # Indicate completion
+ print_osc
+ printf '1337;FileEnd'
+ print_st
+ fi
+
+ printf '\n'
+ [ "$4" == "1" ] && echo "$1"
+ has_image_displayed=t
+}
+
+function error() {
+ errcho "ERROR: $*"
+}
+
+function errcho() {
+ echo "$@" >&2
+}
+
+function show_help() {
+ errcho
+ errcho "Usage: imgcat [-p] [-n] [-W width] [-H height] [-r] [-s] [-u] [-t file-type] [-f] filename ..."
+ errcho " cat filename | imgcat [-W width] [-H height] [-r] [-s]"
+ errcho
+ errcho "Display images inline in the iTerm2 using Inline Images Protocol"
+ errcho
+ errcho "Options:"
+ errcho
+ errcho " -h, --help Display help message"
+ errcho " -p, --print Enable printing of filename or URL after each image"
+ errcho " -n, --no-print Disable printing of filename or URL after each image"
+ errcho " -u, --url Interpret following filename arguments as remote URLs"
+ errcho " -f, --file Interpret following filename arguments as regular Files"
+ errcho " -t, --type file-type Provides a type hint"
+ errcho " -r, --preserve-aspect-ratio When scaling image preserve its original aspect ratio"
+ errcho " -s, --stretch Stretch image to specified width and height (this option is opposite to -r)"
+ errcho " -W, --width N Set image width to N character cells, pixels or percent (see below)"
+ errcho " -H, --height N Set image height to N character cells, pixels or percent (see below)"
+ errcho " -l, --legacy Use legacy protocol that sends the whole image in a single control sequence"
+ errcho
+ errcho " If you don't specify width or height an appropriate value will be chosen automatically."
+ errcho " The width and height are given as word 'auto' or number N followed by a unit:"
+ errcho " N character cells"
+ errcho " Npx pixels"
+ errcho " N% percent of the session's width or height"
+ errcho " auto the image's inherent size will be used to determine an appropriate dimension"
+ errcho
+ errcho " If a type is provided, it is used as a hint to disambiguate."
+ errcho " The file type can be a mime type like text/markdown, a language name like Java, or a file extension like .c"
+ errcho " The file type can usually be inferred from the extension or its contents. -t is most useful when"
+ errcho " a filename is not available, such as whe input comes from a pipe."
+ errcho
+ errcho "Examples:"
+ errcho
+ errcho " $ imgcat -W 250px -H 250px -s avatar.png"
+ errcho " $ cat graph.png | imgcat -W 100%"
+ errcho " $ imgcat -p -W 500px -u http://host.tld/path/to/image.jpg -W 80 -f image.png"
+ errcho " $ cat url_list.txt | xargs imgcat -p -W 40 -u"
+ errcho " $ imgcat -t application/json config.json"
+ errcho
+}
+
+function check_dependency() {
+ if ! (builtin command -V "$1" >/dev/null 2>&1); then
+ error "missing dependency: can't find $1"
+ exit 1
+ fi
+}
+
+# verify that value is in the image sizing unit format: N / Npx / N% / auto
+function validate_size_unit() {
+ if [[ ! "$1" =~ ^(:?[0-9]+(:?px|%)?|auto)$ ]]; then
+ error "Invalid image sizing unit - '$1'"
+ show_help
+ exit 1
+ fi
+}
+
+## Main
+
+if [ -t 0 ]; then
+ has_stdin=f
+else
+ has_stdin=t
+fi
+
+# Show help if no arguments and no stdin.
+if [ $has_stdin = f ] && [ $# -eq 0 ]; then
+ show_help
+ exit
+fi
+
+check_dependency base64
+check_dependency wc
+file_type=""
+legacy=0
+
+# Look for command line flags.
+while [ $# -gt 0 ]; do
+ case "$1" in
+ -h | --h | --help)
+ show_help
+ exit
+ ;;
+ -p | --p | --print)
+ print_filename=1
+ ;;
+ -n | --n | --no-print)
+ print_filename=0
+ ;;
+ -W | --W | --width)
+ validate_size_unit "$2"
+ width="$2"
+ shift
+ ;;
+ -H | --H | --height)
+ validate_size_unit "$2"
+ height="$2"
+ shift
+ ;;
+ -r | --r | --preserve-aspect-ratio)
+ preserve_aspect_ratio=1
+ ;;
+ -s | --s | --stretch)
+ preserve_aspect_ratio=0
+ ;;
+ -l | --l | --legacy)
+ legacy=1
+ ;;
+ -f | --f | --file)
+ has_stdin=f
+ is_url=f
+ ;;
+ -u | --u | --url)
+ check_dependency curl
+ has_stdin=f
+ is_url=t
+ ;;
+ -t | --t | --type)
+ file_type="$2"
+ shift
+ ;;
+ -*)
+ error "Unknown option flag: $1"
+ show_help
+ exit 1
+ ;;
+ *)
+ if [ "$is_url" == "t" ]; then
+ encoded_image=$(curl -fs "$1" | b64_encode) || {
+ error "Could not retrieve image from URL $1, error_code: $?"
+ exit 2
+ }
+ elif [ -r "$1" ]; then
+ encoded_image=$(cat "$1" | b64_encode)
+ else
+ error "imgcat: $1: No such file or directory"
+ exit 2
+ fi
+ has_stdin=f
+ print_image "$1" 1 "$encoded_image" "$print_filename" "$width" "$height" "$preserve_aspect_ratio" "$file_type" "$legacy"
+ ;;
+ esac
+ shift
+done
+
+# Read and print stdin
+if [ $has_stdin = t ]; then
+ print_image "" 1 "$(cat | b64_encode)" 0 "$width" "$height" "$preserve_aspect_ratio" "$file_type" "$legacy"
+fi
+
+if [ "$has_image_displayed" != "t" ]; then
+ error "No image provided. Check command line options."
+ show_help
+ exit 1
+fi
+
+exit 0
diff --git a/fedora/.local/bin/lastnvim b/fedora/.local/bin/lastfiles
index b1ab6c9..082b004 100755
--- a/fedora/.local/bin/lastnvim
+++ b/fedora/.local/bin/lastfiles
@@ -2,14 +2,14 @@
# Display help message
usage() {
- echo "Open the most recent file or the list of old files in fzf edited by nvim."
+ echo "Open the most recent file or the list of old files in fzf edited by Vim."
echo ""
echo "Usage: ${0##*/} [OPTION]"
echo ""
echo "Options:"
- echo " : Open the most recent old file in Neovim."
+ echo " : Open the most recent old file in Vim."
echo " -h, --help : Show this help message."
- echo " -l, --list : Show all recent files in Neovim using fzf."
+ echo " -l, --list : Show all recent files in Vim using fzf."
echo ""
echo "Examples:"
echo " ${0##*/} # Open the most recent file."
@@ -17,14 +17,20 @@ usage() {
exit 0
}
+# Fetch oldfiles from Vim
+get_oldfiles() {
+ vim -u NONE -es +'silent oldfiles' +qa 2>/dev/null |
+ sed 's/^[0-9]\+\s\+//' |
+ grep -v "^$"
+}
+
# List and handle oldfiles
list_oldfiles() {
- # Fetch the oldfiles list from Neovim
- oldfiles=$(nvim -u NONE --headless +'lua io.write(table.concat(vim.v.oldfiles, "\n") .. "\n")' +qa)
+ oldfiles=$(get_oldfiles)
# Exit if no oldfiles are found
[ -z "$oldfiles" ] && {
- echo "No recent files found in Neovim." >&2
+ echo "No recent files found in Vim." >&2
exit 1
}
@@ -33,18 +39,15 @@ list_oldfiles() {
usage
;;
-l | --list)
- # Filter valid files
valid_files=$(echo "$oldfiles" | while IFS= read -r file; do
[ -f "$file" ] && printf "%s\n" "$file"
done)
- # Exit if no valid files exist
[ -z "$valid_files" ] && {
echo "No valid files found." >&2
exit 1
}
- # Use fzf to select files
selected_files=$(echo "$valid_files" |
fzf-tmux \
--multi \
@@ -52,14 +55,12 @@ list_oldfiles() {
--height=70% \
--reverse)
- # Exit if no files were selected
[ -z "$selected_files" ] && exit 1
- # Open selected files in Neovim
- openfiles "$selected_files"
+ openfiles $selected_files
;;
*)
- # Open the most recent file
+ # Open the most recent valid file
for file in $oldfiles; do
if [ -f "$file" ]; then
openfiles "$file"
diff --git a/fedora/.local/bin/openfiles b/fedora/.local/bin/openfiles
index 5b4f7e2..f35aef1 100755
--- a/fedora/.local/bin/openfiles
+++ b/fedora/.local/bin/openfiles
@@ -1,7 +1,7 @@
#!/bin/sh
-if ! command -v nvim >/dev/null 2>&1; then
- echo "Error: 'nvim' is not installed." >&2
+if ! command -v vim >/dev/null 2>&1; then
+ echo "Error: 'vim' is not installed." >&2
exit 1
fi
@@ -20,15 +20,15 @@ count=$#
case "$count" in
2)
- ${EDITOR:-nvim} -O +'silent! normal g;' "$@" -c 'wincmd t'
+ ${EDITOR:-vim} -O +'silent! normal g;' "$@" -c 'wincmd t'
;;
3)
- ${EDITOR:-nvim} -O "$1" -c 'wincmd j' -c "silent! vsplit $2" -c "silent! split $3" -c 'wincmd t'
+ ${EDITOR:-vim} -O "$1" -c 'wincmd j' -c "silent! vsplit $2" -c "silent! split $3" -c 'wincmd t'
;;
4)
- ${EDITOR:-nvim} -O "$1" -c "silent! vsplit $2" -c "silent! split $3" -c 'wincmd h' -c "silent! split $4" -c 'wincmd t'
+ ${EDITOR:-vim} -O "$1" -c "silent! vsplit $2" -c "silent! split $3" -c 'wincmd h' -c "silent! split $4" -c 'wincmd t'
;;
*)
- ${EDITOR:-nvim} "$@"
+ ${EDITOR:-vim} "$@"
;;
esac
diff --git a/fedora/.local/bin/restartnvim b/fedora/.local/bin/restartvim
index ab040ab..3c63f8b 100755
--- a/fedora/.local/bin/restartnvim
+++ b/fedora/.local/bin/restartvim
@@ -15,11 +15,11 @@ fi
# Get the current tmux pane ID
tmux_pane=$(tmux display-message -p '#D')
-# Send Escape, :wq, and Enter to Neovim in the tmux pane
+# Send Escape, :wq, and Enter to Vim in the tmux pane
tmux send-keys -t "$tmux_pane" Escape C-m ':wq' C-m
-# Wait to ensure Neovim exits
+# Wait to ensure Vim exits
sleep 0.5
-# Detach the script from Neovim and wait a bit to ensure Neovim exits
-(nohup sh -c "sleep 0.5; tmux send-keys -t \"$tmux_pane\" 'nvim -c \"execute \\\"edit \\\" . v:oldfiles[0] | normal '\''0\"' C-m" >/dev/null 2>&1 &)
+# Detach the script from Vim and wait a bit to ensure Vim exits
+(nohup sh -c "sleep 0.5; tmux send-keys -t \"$tmux_pane\" 'vim -c \"execute \\\"edit \\\" . v:oldfiles[0] | normal '\''0\"' C-m" >/dev/null 2>&1 &)
diff --git a/fedora/.local/bin/rg b/fedora/.local/bin/rg
new file mode 100755
index 0000000..477c475
--- /dev/null
+++ b/fedora/.local/bin/rg
Binary files differ
diff --git a/fedora/.local/bin/rga b/fedora/.local/bin/rga
new file mode 100755
index 0000000..545efba
--- /dev/null
+++ b/fedora/.local/bin/rga
Binary files differ
diff --git a/fedora/.local/bin/rga-fzf b/fedora/.local/bin/rga-fzf
new file mode 100755
index 0000000..7b86d75
--- /dev/null
+++ b/fedora/.local/bin/rga-fzf
Binary files differ
diff --git a/fedora/.local/bin/rga-fzf-open b/fedora/.local/bin/rga-fzf-open
new file mode 100755
index 0000000..71257cd
--- /dev/null
+++ b/fedora/.local/bin/rga-fzf-open
Binary files differ
diff --git a/fedora/.local/bin/rga-preproc b/fedora/.local/bin/rga-preproc
new file mode 100755
index 0000000..c1ce02f
--- /dev/null
+++ b/fedora/.local/bin/rga-preproc
Binary files differ
diff --git a/fedora/.local/bin/sesh b/fedora/.local/bin/sesh
new file mode 100755
index 0000000..0355f00
--- /dev/null
+++ b/fedora/.local/bin/sesh
Binary files differ
diff --git a/fedora/.local/bin/sessionizer b/fedora/.local/bin/sessionizer
new file mode 100755
index 0000000..93f32b1
--- /dev/null
+++ b/fedora/.local/bin/sessionizer
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+sessionizer() {
+ path="$(
+ sesh list -d --icons | fzf-tmux \
+ -p 80%,70% --no-sort --cycle --ignore-case --ansi --border=sharp --multi --reverse \
+ --border-label "╢ TheSiahxyz ╟" \
+ --header "^a all ^e sesh ^f zoxide ^g git ^t tmux ^u staged files ^x tmux kill M-cr open in editor ^/ help" \
+ --prompt "💡 " \
+ --bind "ctrl-a:change-prompt(💡 )+reload(sesh list -d -H --icons)" \
+ --bind "ctrl-e:change-prompt(📑 )+reload(sesh list -d -c -H --icons)" \
+ --bind "ctrl-f:change-prompt(🔎 )+reload(sesh list -d -z -H --icons)" \
+ --bind "ctrl-g:change-prompt( )+reload(fd -H -d 1 -d -t d -E .Trash -E .git -E .cache . $HOME/Private/repos $HOME/Public/repos | sed 's|$HOME|~|g')" \
+ --bind "ctrl-t:change-prompt(🪟 )+reload(sesh list -d -t --icons)" \
+ --bind "ctrl-v:execute($EDITOR ${0})+abort" \
+ --bind 'ctrl-x:execute(tmux kill-session -t "$(echo {} | cut -d" " -f2-)")+reload(sesh list -d --icons)' \
+ --bind "alt-enter:execute($EDITOR {})+abort" \
+ --bind 'ctrl-/:change-prompt(❓ )+reload(echo "^a all
+^e sesh config
+^f zoxide
+^g git
+^t tmux
+^x tmux kill
+M-cr open in editor
+^/ help")' \
+ --preview-window 'right:45%' \
+ --preview 'sesh preview {}'
+ )" 2>/dev/null
+
+ case "$path" in
+ ^*) sessionizer ;;
+ *) sesh connect "$path" >/dev/null 2>&1 && exit ;;
+ esac
+}
+
+sessionizer
diff --git a/fedora/.local/bin/tmuxopen b/fedora/.local/bin/tmuxopen
index 5362215..87e4f36 100755
--- a/fedora/.local/bin/tmuxopen
+++ b/fedora/.local/bin/tmuxopen
@@ -16,7 +16,7 @@ wrapper() {
echo " Ctrl+d Search directories"
echo ""
echo "Environment Variables:"
- echo " NVIM_SEARCH_REGISTRY Set to the search query, allowing Neovim to highlight matches"
+ echo " VIM_SEARCH_REGISTRY Set to the search query, allowing Neovim to highlight matches"
echo ""
echo "Example:"
echo " tmuxopen # Run the normal search and open"
@@ -79,32 +79,32 @@ wrapper() {
--prompt "🔎 "
}
- set_nvim_search_variable() {
+ set_vim_search_variable() {
raw_output="$1"
tmp_content_query="/tmp/search-content-query-$$"
if [ -f "$tmp_content_query" ]; then
saved_query=$(cat "$tmp_content_query" 2>/dev/null)
if [ -n "$saved_query" ]; then
- export NVIM_SEARCH_REGISTRY="$saved_query"
+ export VIM_SEARCH_REGISTRY="$saved_query"
return
fi
fi
query=$(echo "$raw_output" | head -n1)
- export NVIM_SEARCH_REGISTRY="$query"
+ export VIM_SEARCH_REGISTRY="$query"
}
- open_files_in_nvim() {
+ open_files_in_vim() {
pane="$1"
shift
file_indices="$*"
- nvim_cmd="nvim"
+ vim_cmd="vim"
for index in $file_indices; do
file=$(echo "$files" | awk -v idx="$index" '{print $idx}')
line=$(echo "$lines" | awk -v idx="$index" '{print $idx}')
- nvim_cmd="$nvim_cmd +$line $file"
+ vim_cmd="$vim_cmd +$line $file"
done
- nvim_cmd="$nvim_cmd -c 'let @/=\"$NVIM_SEARCH_REGISTRY\"'"
- tmux send-keys -t "$pane" "$nvim_cmd" C-m
+ vim_cmd="$vim_cmd -c 'let @/=\"$VIM_SEARCH_REGISTRY\"'"
+ tmux send-keys -t "$pane" "$vim_cmd" C-m
}
# Parse command line arguments
@@ -123,7 +123,7 @@ wrapper() {
done
raw_output=$(get_fzf_output)
- set_nvim_search_variable "$raw_output"
+ set_vim_search_variable "$raw_output"
# Split the newline-delimited output into an array, skipping the first line (query)
selections=$(echo "$raw_output" | sed 1d)
@@ -158,42 +158,42 @@ EOF
fi
if [ "$count" -eq 1 ]; then
- open_files_in_nvim "$(tmux display-message -p '#P')" 1
+ open_files_in_vim "$(tmux display-message -p '#P')" 1
else
window_name="$(date +%s)"
tmux new-window -n "$window_name"
case "$count" in
2)
tmux split-window -t "$window_name" -h -p 50
- open_files_in_nvim "$window_name.1" 1
- open_files_in_nvim "$window_name.2" 2
+ open_files_in_vim "$window_name.1" 1
+ open_files_in_vim "$window_name.2" 2
tmux select-pane -t "$window_name.1"
;;
3)
tmux split-window -t "$window_name" -h -p 50
tmux split-window -t "$window_name.2" -v -p 50
- open_files_in_nvim "$window_name.1" 1
- open_files_in_nvim "$window_name.2" 2
- open_files_in_nvim "$window_name.3" 3
+ open_files_in_vim "$window_name.1" 1
+ open_files_in_vim "$window_name.2" 2
+ open_files_in_vim "$window_name.3" 3
;;
*)
tmux split-window -t "$window_name" -h -p 50
tmux split-window -t "$window_name.1" -v -p 50
tmux split-window -t "$window_name.3" -v -p 50
- open_files_in_nvim "$window_name.1" 1
- open_files_in_nvim "$window_name.2" 2
- open_files_in_nvim "$window_name.3" 3
+ open_files_in_vim "$window_name.1" 1
+ open_files_in_vim "$window_name.2" 2
+ open_files_in_vim "$window_name.3" 3
remaining_indices=""
for i in $(seq 4 "$count"); do
remaining_indices="$remaining_indices $i"
done
- open_files_in_nvim "$window_name.4" "$remaining_indices"
+ open_files_in_vim "$window_name.4" "$remaining_indices"
;;
esac
fi
}
-for cmd in rg fzf bat tmux nvim; do
+for cmd in rg fzf bat tmux vim; do
if ! command -v $cmd >/dev/null 2>&1; then
echo "Error: $cmd not found" >&2
exit 1
diff --git a/fedora/.local/bin/ya b/fedora/.local/bin/ya
new file mode 100755
index 0000000..2701e30
--- /dev/null
+++ b/fedora/.local/bin/ya
Binary files differ
diff --git a/fedora/.local/bin/yazi b/fedora/.local/bin/yazi
new file mode 100755
index 0000000..0c01561
--- /dev/null
+++ b/fedora/.local/bin/yazi
Binary files differ
diff --git a/fedora/.local/bin/zoxide b/fedora/.local/bin/zoxide
new file mode 100755
index 0000000..e7ba833
--- /dev/null
+++ b/fedora/.local/bin/zoxide
Binary files differ
diff --git a/fedora/Dockerfile b/fedora/Dockerfile
index 0a08f75..090a48a 100644
--- a/fedora/Dockerfile
+++ b/fedora/Dockerfile
@@ -6,7 +6,7 @@ LABEL name="$NAME" \
summary="Fedora toolbox container" \
maintainer="TheSiahxyz"
-ENV EDITOR=nvim
+ENV EDITOR=vim
ENV NODE_VERSION=21.7.1