diff --git a/.zshrc b/.zshrc
index 535c374..d73e05f 100644
--- a/.zshrc
+++ b/.zshrc
@@ -44,6 +44,7 @@ alias space="du -hsx * | sort -rh | head -10"
# Enable GPG support
export GPG_TTY=$(tty)
export PATH="/home/user/.bun/bin:$PATH"
+export EDITOR="nvim"
# set -o vi
# bindkey "^A" vi-beginning-of-line
diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf
deleted file mode 100644
index 12d120f..0000000
--- a/hypr/hyprland.conf
+++ /dev/null
@@ -1,254 +0,0 @@
-# ~/.config/hypr/hyprland.conf
-# Hyprland Configuration - Converted from Sway
-
-################
-### MONITORS ###
-################
-monitor=,2256x1504@60,0x0,1
-
-###################
-### MY PROGRAMS ###
-###################
-$terminal = foot
-$fileManager = nautilus
-$menu = wofi -S drun -p Search -I -i -b
-
-
-#################
-### AUTOSTART ###
-#################
-exec-once = waybar
-exec-once = swaybg -i ~/Nextcloud/wallpapers/laptop/hiroishi_nagasai.png -m fill
-exec-once = mako
-exec-once = keepassxc
-exec-once = nextcloud
-exec-once = wlsunset -S 08:00 -s 18:00
-exec-once = blueman-applet
-exec-once = nm-applet --indicator
-exec-once = wl-paste --type text --watch cliphist store
-exec-once = wl-paste --type image --watch cliphist store
-exec-once = /usr/lib/polkit-kde-authentication-agent-1
-exec-once = gnome-keyring-daemon --start --components=pkcs11,secrets,ssh
-# exec-once = swayidle -w
-exec-once = swayidle -w \
- timeout 300 'swaylock -f' \
- timeout 600 'hyprctl dispatch dpms off' \
- resume 'hyprctl dispatch dpms on' \
- before-sleep 'swaylock -f' \
- lock 'swaylock -f' \
- event lid:on 'bash ~/.config/hypr/scripts/lid_suspend.sh'
-
-#############################
-### ENVIRONMENT VARIABLES ###
-#############################
-env = XCURSOR_SIZE,24
-env = HYPRCURSOR_SIZE,24
-
-#####################
-### LOOK AND FEEL ###
-#####################
-general {
- gaps_in = 5
- gaps_out = 3
- border_size = 1
- col.active_border = rgba(d65d0eee)
- col.inactive_border = rgba(282828aa)
- resize_on_border = false
- allow_tearing = false
- layout = dwindle
-}
-
-decoration {
- rounding = 5
- active_opacity = 1.0
- inactive_opacity = 0.9
-
- shadow {
- enabled = false
- range = 4
- render_power = 3
- color = rgba(1a1a1aee)
- }
-
- blur {
- enabled = false
- size = 3
- passes = 1
- vibrancy = 0.1696
- }
-}
-
-animations {
- enabled = yes
- bezier = myBezier, 0.05, 0.9, 0.1, 1.05
- animation = windows, 1, 7, myBezier
- animation = windowsOut, 1, 7, default, popin 80%
- animation = border, 1, 10, default
- animation = borderangle, 1, 8, default
- animation = fade, 1, 7, default
- animation = workspaces, 1, 6, default
-}
-
-dwindle {
- pseudotile = true
- preserve_split = true
-}
-
-master {
- new_status = master
-}
-
-misc {
- force_default_wallpaper = -1
- disable_hyprland_logo = true
-}
-
-#############
-### INPUT ###
-#############
-input {
- kb_layout = us
- follow_mouse = 1
- sensitivity = 0
-
- touchpad {
- natural_scroll = true
- disable_while_typing = true
- tap-to-click = true
- middle_button_emulation = true
- }
-}
-
-gestures {
- workspace_swipe = true
-}
-
-###################
-### KEYBINDINGS ###
-###################
-$mainMod = SUPER
-
-# Basic binds
-bind = $mainMod, RETURN, exec, $terminal
-bind = $mainMod SHIFT, Q, killactive
-bind = $mainMod, M, exit
-bind = $mainMod, E, exec, $fileManager
-bind = $mainMod, V, togglefloating
-bind = $mainMod, D, exec, $menu
-bind = $mainMod, P, pseudo
-bind = $mainMod, J, togglesplit
-bind = $mainMod, F, fullscreen
-bind = $mainMod SHIFT, C, exec, hyprctl reload
-
-# Move focus with mainMod + arrow keys
-bind = $mainMod, left, movefocus, l
-bind = $mainMod, right, movefocus, r
-bind = $mainMod, up, movefocus, u
-bind = $mainMod, down, movefocus, d
-
-# Move focus with mainMod + hjkl
-bind = $mainMod, H, movefocus, l
-bind = $mainMod, L, movefocus, r
-bind = $mainMod, K, movefocus, u
-bind = $mainMod, J, movefocus, d
-
-# Move windows
-bind = $mainMod SHIFT, left, movewindow, l
-bind = $mainMod SHIFT, right, movewindow, r
-bind = $mainMod SHIFT, up, movewindow, u
-bind = $mainMod SHIFT, down, movewindow, d
-
-bind = $mainMod SHIFT, H, movewindow, l
-bind = $mainMod SHIFT, L, movewindow, r
-bind = $mainMod SHIFT, K, movewindow, u
-bind = $mainMod SHIFT, J, movewindow, d
-
-# Switch workspaces with mainMod + [0-9]
-bind = $mainMod, 1, workspace, 1
-bind = $mainMod, 2, workspace, 2
-bind = $mainMod, 3, workspace, 3
-bind = $mainMod, 4, workspace, 4
-bind = $mainMod, 5, workspace, 5
-bind = $mainMod, 6, workspace, 6
-bind = $mainMod, 7, workspace, 7
-bind = $mainMod, 8, workspace, 8
-bind = $mainMod, 9, workspace, 9
-bind = $mainMod, 0, workspace, 10
-
-# Move active window to a workspace with mainMod + SHIFT + [0-9]
-bind = $mainMod SHIFT, 1, movetoworkspace, 1
-bind = $mainMod SHIFT, 2, movetoworkspace, 2
-bind = $mainMod SHIFT, 3, movetoworkspace, 3
-bind = $mainMod SHIFT, 4, movetoworkspace, 4
-bind = $mainMod SHIFT, 5, movetoworkspace, 5
-bind = $mainMod SHIFT, 6, movetoworkspace, 6
-bind = $mainMod SHIFT, 7, movetoworkspace, 7
-bind = $mainMod SHIFT, 8, movetoworkspace, 8
-bind = $mainMod SHIFT, 9, movetoworkspace, 9
-bind = $mainMod SHIFT, 0, movetoworkspace, 10
-
-# Scratchpad
-bind = $mainMod, S, togglespecialworkspace, magic
-bind = $mainMod SHIFT, S, movetoworkspace, special:magic
-
-# Scroll through existing workspaces with mainMod + scroll
-bind = $mainMod, mouse_down, workspace, e+1
-bind = $mainMod, mouse_up, workspace, e-1
-
-# Move/resize windows with mainMod + LMB/RMB and dragging
-bindm = $mainMod, mouse:272, movewindow
-bindm = $mainMod, mouse:273, resizewindow
-
-# Audio and brightness controls
-bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
-bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
-bindel = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
-bindel = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
-bindel = , XF86MonBrightnessUp, exec, brightnessctl set 10%+
-bindel = , XF86MonBrightnessDown, exec, brightnessctl set 10%-
-
-# Media controls
-bindl = , XF86AudioNext, exec, playerctl next
-bindl = , XF86AudioPause, exec, playerctl play-pause
-bindl = , XF86AudioPlay, exec, playerctl play-pause
-bindl = , XF86AudioPrev, exec, playerctl previous
-
-
-# Screenshots
-bind = , Print, exec, grimshot copy output
-bind = $mainMod, Print, exec, grimshot copy area
-
-# Screen recording
-bind = $mainMod, XF86AudioMedia, exec, pkill wf-recorder || wf-recorder --audio --file ~/Videos/$(date +'%Y-%m-%d-%H-%M-%S').mp4
-
-##############################
-### WINDOWS AND WORKSPACES ###
-##############################
-
-# Window rules
-windowrule = suppressevent maximize, class:.*
-windowrule = float, class:^(blueman-manager)$
-windowrule = size 40% 30%, class:^(blueman-manager)$
-windowrule = float, class:^(org.keepassxc.KeePassXC)$
-windowrule = size 70% 60%, class:^(org.keepassxc.KeePassXC)$
-windowrule = float, class:^(pavucontrol)$
-windowrule = size 60% 50%, class:^(pavucontrol)$
-windowrule = float, title:^(Picture-in-Picture)$
-windowrule = pin, title:^(Picture-in-Picture)$
-
-
-
-
-
-$laptop = eDP-1
-# Quando il coperchio viene chiuso:
-# bindl=,switch:lid:on,exec,bash -c "if [[ $(hyprctl monitors | grep -c 'Monitor') == 1 ]]; then systemctl suspend; fi"
-bindl=,switch:on:Lid,exec,bash -c "if [[ $(hyprctl monitors | grep -c 'Monitor') == 1 ]]; then systemctl suspend; fi"
-# Quando il coperchio viene aperto:
-# bindl=,switch:lid:off,exec,hyprctl keyword output "$laptop, enable"
-bindl=,switch:off:Lid,exec,hyprctl keyword output "$laptop, enable"
-
-# # lid closed
-# bindl = , switch:on:Lid Switch, exec, hyprctl dispatch dpms off
-# bindl = , switch:off:Lid Switch, exec, hyprctl dispatch dpms on
-
diff --git a/hypr/scripts/lid_close.sh b/hypr/scripts/lid_close.sh
deleted file mode 100755
index 113a6f7..0000000
--- a/hypr/scripts/lid_close.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# ~/.config/hypr/scripts/lid_suspend.sh
-# Script per sospendere il sistema alla chiusura del coperchio,
-# mettendo prima in pausa la riproduzione multimediale.
-
-# Controlla se è collegato un solo monitor (quello del laptop).
-if [[ $(hyprctl monitors | grep -c 'Monitor') -eq 1 ]]; then
- # Controlla se playerctl è installato e se c'è qualcosa in riproduzione.
- # Se sì, mette in pausa tutti i lettori multimediali compatibili
- # (es. Spotify, browser, VLC, etc.).
- if command -v playerctl &> /dev/null && playerctl status &> /dev/null; then
- playerctl --all pause
- fi
-
- # Sospende il sistema.
- systemctl suspend
-fi
diff --git a/mpv/mpv.conf b/mpv/mpv.conf
index e43d715..30b6733 100644
--- a/mpv/mpv.conf
+++ b/mpv/mpv.conf
@@ -8,8 +8,7 @@ save-position-on-quit=yes
keep-open=yes
# Set default volume to 70%
-volume=70
-
+volume=100
# -----------------
# VIDEO & PERFORMANCE
diff --git a/sway/config b/sway/config
index 49d6998..2b859c3 100644
--- a/sway/config
+++ b/sway/config
@@ -216,6 +216,8 @@ bindsym XF86AudioPrev exec playerctl previous
### Screenshot e Registrazione Schermo
bindsym Print exec grimshot --notify copy output
bindsym $mod+Print exec grimshot --notify copy area
+bindsym $mod+P exec grimshot --notify copy output
+bindsym $mod+Shift+P exec grimshot --notify copy area
bindsym $mod+XF86AudioMedia exec --no-startup-id \
(pgrep -x wf-recorder > /dev/null && killall -s SIGINT wf-recorder && notify-send "Recording Stopped") || \
diff --git a/waybar/config.jsonc b/waybar/config.jsonc
index 2837c91..6ced3ea 100644
--- a/waybar/config.jsonc
+++ b/waybar/config.jsonc
@@ -1,138 +1,115 @@
// -*- mode: jsonc -*-
{
- "height": 30, // Waybar height (to be removed for auto height)
- "modules-left": [
- "hyprland/workspaces",
- "sway/workspaces",
- "sway/mode",
- "sway/scratchpad"
- ],
- "modules-center": [
- // "sway/window"
- "clock"
- ],
- "modules-right": [
- "idle_inhibitor",
- "pulseaudio",
- //"network",
- "power-profiles-daemon",
- // "cpu",
- // "memory",
- "temperature",
- "backlight",
- // "keyboard-state",
- // "sway/language",
- "battery",
- "battery#bat2",
- // "clock",
- "tray"
- // "custom/power"
- ],
-
- "hyprland/workspaces": {
- "format": "{icon}",
- "on-scroll-up": "hyprctl dispatch workspace e+1",
- "on-scroll-down": "hyprctl dispatch workspace e-1"
- },
- "sway/mode": {
- "format": "{}"
+ "height": 34, // Waybar height (to be removed for auto height)
+ "modules-left": ["sway/workspaces", "sway/mode", "sway/scratchpad"],
+ "modules-center": ["clock"],
+ "modules-right": [
+ "idle_inhibitor",
+ "pulseaudio",
+ "power-profiles-daemon",
+ "cpu",
+ "memory",
+ "temperature",
+ "backlight",
+ "battery",
+ "tray",
+ ],
+ "sway/mode": {
+ "format": "{}",
+ },
+ "sway/scratchpad": {
+ "format": "{icon} {count}",
+ "show-empty": false,
+ "format-icons": ["", ""],
+ "tooltip": true,
+ "tooltip-format": "{app}: {title}",
+ },
+ "idle_inhibitor": {
+ "format": "{icon}",
+ "format-icons": {
+ "activated": "",
+ "deactivated": "",
},
- "sway/scratchpad": {
- "format": "{icon} {count}",
- "show-empty": false,
- "format-icons": ["", ""],
- "tooltip": true,
- "tooltip-format": "{app}: {title}"
+ },
+ "tray": {
+ "spacing": 10,
+ },
+ "clock": {
+ "timezone": "Europe/Rome",
+ "format": "{:%H:%M %d-%m-%Y}",
+ },
+ "cpu": {
+ "format": "{usage}% ",
+ "tooltip": false,
+ },
+ "memory": {
+ "format": "{}% ",
+ },
+ "temperature": {
+ // "thermal-zone": 2,
+ // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
+ "critical-threshold": 80,
+ // "format-critical": "{temperatureC}°C {icon}",
+ "format": "{temperatureC}°C {icon}",
+ "format-icons": ["", "", ""],
+ },
+ "backlight": {
+ "device": "acpi_video1",
+ "format": "{percent}% {icon}",
+ "format-icons": ["", "", "", "", "", "", "", "", ""],
+ },
+ "battery": {
+ "states": {
+ "good": 95,
+ "warning": 30,
+ "critical": 15,
},
- "idle_inhibitor": {
- "format": "{icon}",
- "format-icons": {
- "activated": "",
- "deactivated": ""
- }
+ "format": "{capacity}% {icon}",
+ "format-full": "{capacity}% {icon}",
+ "format-charging": "{capacity}% ",
+ "format-plugged": "{capacity}% ",
+ "format-alt": "{time} {icon}",
+ // "format-good": "", // An empty format will hide the module
+ // "format-full": "",
+ "format-icons": ["", "", "", "", ""],
+ },
+ "power-profiles-daemon": {
+ "format": "{icon}",
+ "tooltip-format": "Power profile: {profile}\nDriver: {driver}",
+ "tooltip": true,
+ "format-icons": {
+ "default": "",
+ "performance": "",
+ "balanced": "",
+ "power-saver": "",
},
- "tray": {
- "spacing": 10
- },
- "clock": {
- "timezone": "Europe/Rome",
- "format": "{:%H:%M %d-%m-%Y}"
- },
- "cpu": {
- "format": "{usage}% ",
- "tooltip": false
- },
- "memory": {
- "format": "{}% "
- },
- "temperature": {
- // "thermal-zone": 2,
- // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input",
- "critical-threshold": 80,
- // "format-critical": "{temperatureC}°C {icon}",
- "format": "{temperatureC}°C {icon}",
- "format-icons": ["", "", ""]
- },
- "backlight": {
- "device": "acpi_video1",
- "format": "{percent}% {icon}",
- "format-icons": ["", "", "", "", "", "", "", "", ""]
- },
- "battery": {
- "states": {
- "good": 95,
- "warning": 30,
- "critical": 15
- },
- "format": "{capacity}% {icon}",
- "format-full": "{capacity}% {icon}",
- "format-charging": "{capacity}% ",
- "format-plugged": "{capacity}% ",
- "format-alt": "{time} {icon}",
- // "format-good": "", // An empty format will hide the module
- // "format-full": "",
- "format-icons": ["", "", "", "", ""]
- },
- "battery#bat2": {
- "bat": "BAT2"
- },
- "power-profiles-daemon": {
- "format": "{icon}",
- "tooltip-format": "Power profile: {profile}\nDriver: {driver}",
- "tooltip": true,
- "format-icons": {
- "default": "",
- "performance": "",
- "balanced": "",
- "power-saver": ""
- }
- },
- "network": {
- // "interface": "wlp2*", // (Optional) To force the use of this interface
- "format-wifi": "{essid} ({signalStrength}%) ",
- "format-ethernet": "{ipaddr}/{cidr} ",
- "tooltip-format": "{ifname} via {gwaddr} ",
- "format-linked": "{ifname} (No IP) ",
- "format-disconnected": "Disconnected ⚠",
- "format-alt": "{ifname}: {ipaddr}/{cidr}"
- },
- "pulseaudio": {
- // "scroll-step": 1, // %, can be a float
- "format": "{volume}% {icon} {format_source}",
- "format-bluetooth": "{volume}% {icon} {format_source}",
- "format-bluetooth-muted": " {icon} {format_source}",
- "format-muted": " {format_source}",
- "format-source": "{volume}% ",
- "format-source-muted": "",
- "format-icons": {
- "headphone": "",
- "hands-free": "",
- "headset": "",
- "phone": "",
- "portable": "",
- "car": "",
- "default": ["", "", ""]
- },
- "on-click": "pavucontrol"
+ },
+ "network": {
+ // "interface": "wlp2*", // (Optional) To force the use of this interface
+ "format-wifi": "{essid} ({signalStrength}%) ",
+ "format-ethernet": "{ipaddr}/{cidr} ",
+ "tooltip-format": "{ifname} via {gwaddr} ",
+ "format-linked": "{ifname} (No IP) ",
+ "format-disconnected": "Disconnected ⚠",
+ "format-alt": "{ifname}: {ipaddr}/{cidr}",
+ },
+ "pulseaudio": {
+ // "scroll-step": 1, // %, can be a float
+ "format": "{volume}% {icon} {format_source}",
+ "format-bluetooth": "{volume}% {icon} {format_source}",
+ "format-bluetooth-muted": " {icon} {format_source}",
+ "format-muted": " {format_source}",
+ "format-source": "{volume}% ",
+ "format-source-muted": "",
+ "format-icons": {
+ "headphone": "",
+ "hands-free": "",
+ "headset": "",
+ "phone": "",
+ "portable": "",
+ "car": "",
+ "default": ["", "", ""],
},
+ "on-click": "pavucontrol",
+ },
}
diff --git a/waybar/style.css b/waybar/style.css
index 6f35cf6..9e1f70d 100644
--- a/waybar/style.css
+++ b/waybar/style.css
@@ -1,7 +1,6 @@
* {
- font-family: "Iosevka Nerd Font";
+ font-family: "Iosevka Nerd Font", "Font Awesome 6 Free", "monospace";
font-size: 16px;
-
}
@define-color background #282828;
@@ -22,27 +21,23 @@ window#waybar {
color: @foreground;
}
-
.modules-left {
background-color: @background;
padding: 0;
margin: 0;
}
-
#custom-scratch {
background-color: @background;
color: #b8b8b8;
padding: 0px 9px 0px 9px;
}
-
#workspaces button {
border-radius: 0px;
color: @foreground;
}
-
#workspaces button.focused {
background-color: @orange;
color: @foreground;
@@ -75,8 +70,6 @@ window#waybar {
padding: 0 20px;
}
-
-
#battery.critical {
color: @red;
}
@@ -85,7 +78,6 @@ window#waybar {
color: @green;
}
-
#network.disconnected {
color: @red;
}
diff --git a/yazi/flavors/gruvbox-dark.yazi/LICENSE b/yazi/flavors/gruvbox-dark.yazi/LICENSE
new file mode 100644
index 0000000..e6984c6
--- /dev/null
+++ b/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/yazi/flavors/gruvbox-dark.yazi/LICENSE-tmtheme b/yazi/flavors/gruvbox-dark.yazi/LICENSE-tmtheme
new file mode 100644
index 0000000..c996915
--- /dev/null
+++ b/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/yazi/flavors/gruvbox-dark.yazi/README.md b/yazi/flavors/gruvbox-dark.yazi/README.md
new file mode 100644
index 0000000..d6fb349
--- /dev/null
+++ b/yazi/flavors/gruvbox-dark.yazi/README.md
@@ -0,0 +1,32 @@
+
+

+
+
+
+ Gruvbox Dark Flavor for Yazi
+
+
+## 👀 Preview
+
+
+
+## 🎨 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/yazi/flavors/gruvbox-dark.yazi/flavor.toml b/yazi/flavors/gruvbox-dark.yazi/flavor.toml
new file mode 100644
index 0000000..aba47d5
--- /dev/null
+++ b/yazi/flavors/gruvbox-dark.yazi/flavor.toml
@@ -0,0 +1,153 @@
+# 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" },
+]
+
+# : }}}
diff --git a/yazi/flavors/gruvbox-dark.yazi/preview.png b/yazi/flavors/gruvbox-dark.yazi/preview.png
new file mode 100644
index 0000000..d157dfe
Binary files /dev/null and b/yazi/flavors/gruvbox-dark.yazi/preview.png differ
diff --git a/yazi/flavors/gruvbox-dark.yazi/tmtheme.xml b/yazi/flavors/gruvbox-dark.yazi/tmtheme.xml
new file mode 100644
index 0000000..59c1ecd
--- /dev/null
+++ b/yazi/flavors/gruvbox-dark.yazi/tmtheme.xml
@@ -0,0 +1,1509 @@
+
+
+
+
+ comment
+ Based on gruvbox for Vim (https://github.com/morhetz/gruvbox)
+ originalAuthor
+ Pavel Pertsev (https://github.com/morhetz)
+ author
+ Brian Reilly (https://github.com/Briles/gruvbox)
+ name
+ gruvbox (Dark) (Medium)
+ colorSpaceName
+ sRGB
+ settings
+
+
+ settings
+
+ background
+ #222222
+ caret
+ #a89984
+ foreground
+ #ebdbb280
+ invisibles
+ #ebdbb226
+ lineHighlight
+ #3c3836
+ selection
+ #3c3836
+ inactiveSelection
+ #3c3836
+ guide
+ #ebdbb226
+ activeGuide
+ #ebdbb280
+ stackGuide
+ #ebdbb240
+ bracketContentsOptions
+ underline
+ bracketContentsForeground
+ #bdae93
+ bracketsOptions
+ underline
+ bracketsForeground
+ #bdae93
+ gutterForeground
+ #928374
+ highlight
+ #fbf1c7
+ highlightForeground
+ #fbf1c7
+ findHighlight
+ #d79921
+ findHighlightForeground
+ #222222
+ tagsOptions
+ underline
+ selectionBorder
+ #3c3836
+ popupCss
+
+ 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;
+ }
+
+
+
+
+ name
+ Text and Source Base Colors
+ scope
+ 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
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ Punctuation
+ scope
+ 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
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ Comments
+ scope
+ comment, comment text, markup.strikethrough, punctuation.definition.comment, punctuation.whitespace.comment, string.comment, text.cancelled
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #928374
+
+
+
+ name
+ Keywords Inside Comments
+ scope
+ comment.keyword, comment.keyword.punctuation
+ settings
+
+ foreground
+ #d5c4a1
+
+
+
+ name
+ DocBlockr & Other Keywords Inside Comments
+ scope
+ 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
+ settings
+
+ foreground
+ #bdae93
+
+
+
+ name
+ Entity
+ scope
+ constant.language.name, entity.name.type, entity.other.inherited-class
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ Template String Punctuation
+ scope
+ 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
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ Keywords
+ scope
+ 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
+ settings
+
+ foreground
+ #fb4934
+
+
+
+ name
+ CSS At-Rule Punctuation (@) & At-Rule Vendor Prefixes
+ scope
+ keyword.control.at-rule support.type.property-vendor, punctuation.definition.keyword
+ settings
+
+ foreground
+ #cc241d
+
+
+
+ name
+ Operators
+ scope
+ keyword.control.new, keyword.control.operator, keyword.operator, keyword.other.arrow, keyword.other.double-colon, punctuation.operator
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ Constants Punctuation
+ scope
+ 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
+ settings
+
+ foreground
+ #b16286
+
+
+
+ name
+ Storage
+ scope
+ storage, storage.type.annotation, storage.type.primitive
+ settings
+
+ foreground
+ #fb4934
+
+
+
+ scope
+ storage.modifier.import, storage.modifier.package, storage.type.import, variable.import, variable.package
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ Function Keyword
+ scope
+ entity.quasi.tag.name, meta.function storage.type.matlab, storage.type.function
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ Variables
+ scope
+ 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
+ settings
+
+ foreground
+ #83a598
+
+
+
+ name
+ Variable - Punctuation
+ scope
+ 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
+ settings
+
+ foreground
+ #458588
+
+
+
+ name
+ Function Declaration - Punctuation
+ scope
+ entity.name.function punctuation.dollar
+ settings
+
+ foreground
+ #98971a
+
+
+
+ name
+ Object Properties
+ scope
+ meta.property.object
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ Object Literal Properties
+ scope
+ constant.other.object.key string, meta.object-literal.key
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ Parameters
+ scope
+ meta.parameters, variable.parameter
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ SASS Import URL
+ scope
+ variable.parameter.url
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ Language Constants
+ scope
+ 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
+ settings
+
+ foreground
+ #d3869b
+
+
+
+ name
+ Language Constants Punctuation
+ scope
+ variable.language punctuation.definition.variable
+ settings
+
+ foreground
+ #b16286
+
+
+
+ name
+ User-Defined Constants
+ scope
+ entity.name.constant, variable.other.constant
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ Escaped Characters
+ scope
+ constant.character.escape, constant.character.escaped, constant.character.quoted, constant.other.character-class.escape
+ settings
+
+ foreground
+ #fb4934
+
+
+
+ name
+ Invalids and Illegals
+ scope
+ invalid
+ settings
+
+ foreground
+ #fbf1c7
+ background
+ #fb4934
+
+
+
+ name
+ Inner Scopes of Invalids and Illegals
+ scope
+ invalid keyword.other.custom-property.prefix, invalid support.type.custom-property.name
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ Errors
+ scope
+ message.error
+ settings
+
+ foreground
+ #fb4934
+
+
+
+ name
+ Strings
+ scope
+ meta.object-literal.key string, string
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ JSON Keys
+ scope
+ meta.structure.dictionary.key.json string
+ settings
+
+ foreground
+ #83a598
+
+
+
+ name
+ Regular Expressions Text
+ scope
+ source.regexp, string.regexp
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ Regular Expressions Start & End Punctuation
+ scope
+ string.regexp punctuation.definition.string
+ settings
+
+ foreground
+ #bdae93
+
+
+
+ name
+ Regular Expressions Character Class Punctuation ([])
+ scope
+ keyword.control.set.regexp, punctuation.definition.character-class, string.regexp.character-class.ruby
+ settings
+
+ foreground
+ #d3869b
+
+
+
+ name
+ Regular Expressions Capturing Group
+ scope
+ string.regexp.group
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ Regular Expressions Assertions
+ scope
+ constant.other.assertion.regexp, punctuation.definition.group.assertion.regexp, punctuation.definition.group.capture.regexp
+ settings
+
+ foreground
+ #83a598
+
+
+
+ name
+ Regular Expressions Character Class
+ scope
+ constant.other.character-class.escape.backslash.regexp, keyword.control.character-class.regexp, string.regexp.character-class constant.character.escape
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ Regular Expressions Quantifiers & Operators
+ scope
+ string.regexp.arbitrary-repetition, string.regexp.arbitrary-repetition punctuation
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ Hyperlinks
+ scope
+ constant.other.reference.link, string.other.link
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ Hyperlink Punctuation
+ scope
+ 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
+ settings
+
+ foreground
+ #689d6a
+
+
+
+ name
+ Markup Tag Punctuation
+ scope
+ punctuation.definition.tag
+ settings
+
+ foreground
+ #83a598
+
+
+
+ name
+ Markdown Heading
+ scope
+ markup.heading
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ Markdown Heading Punctuation
+ scope
+ punctuation.definition.heading, punctuation.definition.identity
+ settings
+
+ foreground
+ #98971a
+
+
+
+ name
+ Markdown Bold Text
+ scope
+ markup.bold
+ settings
+
+ foreground
+ #fe8019
+ fontStyle
+ bold
+
+
+
+ name
+ Markdown Bold Text Punctuation
+ scope
+ punctuation.definition.bold
+ settings
+
+ foreground
+ #d65d0e
+ fontStyle
+ bold
+
+
+
+ name
+ Markdown Italic Text
+ scope
+ markup.italic
+ settings
+
+ foreground
+ #fb4934
+ fontStyle
+ italic
+
+
+
+ name
+ Markdown Italic Text Punctuation
+ scope
+ punctuation.definition.italic
+ settings
+
+ foreground
+ #cc241d
+ fontStyle
+ italic
+
+
+
+ name
+ Markdown Inline Code
+ scope
+ markup.raw.inline
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ Markdown Inline Code Punctuation
+ scope
+ markup.raw.inline punctuation.definition.raw
+ settings
+
+ foreground
+ #d79921
+
+
+
+ name
+ Markdown Quoted
+ scope
+ markup.quote
+ settings
+
+ foreground
+ #d3869b
+
+
+
+ name
+ Markdown Quoted Punctuation
+ scope
+ markup.quote punctuation.definition.blockquote
+ settings
+
+ foreground
+ #b16286
+
+
+
+ name
+ Markdown List
+ scope
+ markup.list
+ settings
+
+ foreground
+ #83a598
+
+
+
+ name
+ Markdown List Punctuation
+ scope
+ markup.list punctuation.definition.list_item
+ settings
+
+ foreground
+ #458588
+
+
+
+ name
+ Markdown Separators
+ scope
+ meta.separator.markdown
+ settings
+
+ foreground
+ #928374
+
+
+
+ name
+ Support
+ scope
+ meta.function-call.constructor variable.type, support.class, support.type, variable.other.class
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ Supporting Type - Dollar Punctuation
+ scope
+ support.class punctuation.dollar
+ settings
+
+ foreground
+ #d79921
+
+
+
+ name
+ Function Calls
+ scope
+ 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
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ Method Calls
+ scope
+ 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
+ settings
+
+ foreground
+ #689d6a
+
+
+
+ name
+ Special Variables
+ scope
+ support.module
+ settings
+
+ foreground
+ #d3869b
+
+
+
+ name
+ Entities
+ scope
+ entity.name.accessor, entity.name.function, entity.name.label, entity.name.section
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ Modules
+ scope
+ entity.name.module
+ settings
+
+ foreground
+ #fe8019
+
+
+
+ name
+ HTML & CSS ID
+ scope
+ constant.id.tag, entity.name.tag.id, entity.other.attribute-name.id
+ settings
+
+ foreground
+ #fe8019
+
+
+
+ name
+ HTML & CSS ID Punctuation (#)
+ scope
+ entity.other.attribute-name.id punctuation.definition.entity
+ settings
+
+ foreground
+ #d65d0e
+
+
+
+ name
+ HTML & CSS Class
+ scope
+ entity.name.tag.class, entity.other.attribute-name.class
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ HTML & CSS Class Punctuation (.)
+ scope
+ entity.other.attribute-name.class punctuation.definition.entity
+ settings
+
+ foreground
+ #d79921
+
+
+
+ name
+ CSS Attribute Selector Attribute Name
+ scope
+ meta.attribute-selector entity.other.attribute-name
+ settings
+
+ foreground
+ #d79921
+
+
+
+ name
+ HTML & XML Entity Punctuation
+ scope
+ constant.character.entity punctuation.definition.constant, constant.character.entity punctuation.definition.entity
+ settings
+
+ foreground
+ #b16286
+
+
+
+ scope
+ entity.name.class, entity.name.type.class
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ Markup Tag
+ scope
+ 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
+ settings
+
+ foreground
+ #83a598
+
+
+
+ name
+ HTML Attribute Names
+ scope
+ entity.name.attribute-name, entity.other.attribute-name, meta.section.attributes.haml constant.other.symbol.ruby
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ CSS Pseudo Elements/Classes & Vendor Prefixes
+ scope
+ 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
+ settings
+
+ foreground
+ #d79921
+
+
+
+ name
+ CSS Animations / Keyframes
+ scope
+ 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
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ Author-Defined Names
+ scope
+ entity.other.namespace-prefix
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ scope
+ meta.class.body, meta.tag
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ Markdown Image & Hyperlink
+ scope
+ meta.image, meta.link
+ settings
+
+ foreground
+ #d3869b
+
+
+
+ name
+ Markdown Image & Hyperlink Punctuation
+ scope
+ meta.image punctuation.definition.metadata, meta.link punctuation.definition.metadata
+ settings
+
+ foreground
+ #b16286
+
+
+
+ scope
+ meta.require
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ Function Call Braces
+ scope
+ 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
+ settings
+
+ foreground
+ #bdae93
+
+
+
+ name
+ CSS Property Names
+ scope
+ meta.property-name, support.type.property-name, support.type.shape.definition support.constant.property-value
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ CSS Property Name Vendor Prefixes
+ scope
+ meta.property-name support.type.vendor-prefix, support.type.property-name.media support.type.vendor-prefix
+ settings
+
+ foreground
+ #98971a
+
+
+
+ name
+ CSS Property Values
+ scope
+ constant.string.sass, meta.property-value, support.constant.property-value
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ CSS Property Value Vendor Prefixes
+ scope
+ meta.property-value support.type.vendor-prefix
+ settings
+
+ foreground
+ #bdae93
+
+
+
+ name
+ Diff Foreground Text
+ scope
+ source.diff
+ settings
+
+ foreground
+ #a89984
+
+
+
+ name
+ Diff Header Text From
+ scope
+ meta.diff.header.from-file
+ settings
+
+ foreground
+ #83a598
+
+
+
+ name
+ Diff Header Text From Punctuation
+ scope
+ punctuation.definition.from-file
+ settings
+
+ foreground
+ #458588
+
+
+
+ name
+ Diff Header Text To
+ scope
+ meta.diff.header.to-file
+ settings
+
+ foreground
+ #d3869b
+
+
+
+ name
+ Diff Header Text To Punctuation
+ scope
+ punctuation.definition.to-file
+ settings
+
+ foreground
+ #b16286
+
+
+
+ name
+ Diff Additions & Deletions Stats
+ scope
+ meta.diff.range, meta.toc-list.line-number
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ Diff Additions & Deletions Stats Punctuation
+ scope
+ punctuation.definition.range.diff
+ settings
+
+ foreground
+ #d79921
+
+
+
+ name
+ FiF Line Number
+ scope
+ constant.numeric.line-number
+ settings
+
+ foreground
+ #928374
+
+
+
+ name
+ FiF Line Number Matched
+ scope
+ constant.numeric.line-number.match
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ FiF Filename
+ scope
+ entity.name.filename
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ GitGutter & Diff Deleted
+ scope
+ markup.deleted, punctuation.definition.deleted
+ settings
+
+ foreground
+ #fb4934
+
+
+
+ name
+ GitGutter & Diff Inserted
+ scope
+ markup.inserted, punctuation.definition.inserted
+ settings
+
+ foreground
+ #b8bb26
+
+
+
+ name
+ GitGutter & Diff Changed
+ scope
+ markup.changed, punctuation.definition.changed
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ GitGutter ignored
+ scope
+ markup.ignored
+ settings
+
+ foreground
+ #928374
+
+
+
+ name
+ GitGutter untracked
+ scope
+ markup.untracked
+ settings
+
+ foreground
+ #928374
+
+
+
+ name
+ Bracket Tag
+ scope
+ brackethighlighter.tag
+ settings
+
+ foreground
+ #bdae93
+
+
+
+ name
+ Bracket Curly
+ scope
+ brackethighlighter.curly
+ settings
+
+ foreground
+ #bdae93
+
+
+
+ name
+ Bracket Round
+ scope
+ brackethighlighter.round
+ settings
+
+ foreground
+ #bdae93
+
+
+
+ name
+ Bracket Square
+ scope
+ brackethighlighter.square
+ settings
+
+ foreground
+ #bdae93
+
+
+
+ name
+ Bracket Angle
+ scope
+ brackethighlighter.angle
+ settings
+
+ foreground
+ #bdae93
+
+
+
+ name
+ Bracket Quote
+ scope
+ brackethighlighter.quote
+ settings
+
+ foreground
+ #bdae93
+
+
+
+ name
+ Bracket Unmatched
+ scope
+ brackethighlighter.unmatched
+ settings
+
+ foreground
+ #fb4934
+
+
+
+ name
+ SublimeLinter Error
+ scope
+ sublimelinter.mark.error
+ settings
+
+ foreground
+ #fb4934
+
+
+
+ name
+ SublimeLinter Gutter Mark
+ scope
+ sublimelinter.gutter-mark
+ settings
+
+ foreground
+ #928374
+
+
+
+ name
+ SublimeLinter Warning
+ scope
+ sublimelinter.mark.warning
+ settings
+
+ foreground
+ #fabd2f
+
+
+
+ name
+ HexViewer Upper Byte Nibble
+ scope
+ raw.nibble.upper
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ HexViewer Lower Byte Nibble
+ scope
+ raw.nibble.lower
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ HexViewer Highlight
+ scope
+ hexviewer.highlight
+ settings
+
+ foreground
+ #222222
+ background
+ #fabd2f
+
+
+
+ name
+ HexViewer Edited Highlight
+ scope
+ hexviewer.highlight.edited
+ settings
+
+ foreground
+ #222222
+ background
+ #fe8019
+
+
+
+ name
+ Raw New Line: Carriage Return
+ scope
+ glyph.carriage-return
+ settings
+
+ foreground
+ #ebdbb226
+
+
+
+ name
+ Raw New Line: New Line Glyph
+ scope
+ glyph.new-line
+ settings
+
+ foreground
+ #ebdbb226
+
+
+
+ name
+ PlainTasks: Header
+ scope
+ keyword.control.header.todo
+ settings
+
+ foreground
+ #b8bb26
+ background
+ #3a3a3a
+
+
+
+ name
+ PlainTasks: Notes
+ scope
+ notes.todo
+ settings
+
+ foreground
+ #bdae93
+
+
+
+ name
+ PlainTasks: Punctuation
+ scope
+ text.todo punctuation.definition.bold, text.todo punctuation.definition.italic
+ settings
+
+ foreground
+ #7c6f64
+
+
+
+ name
+ PlainTasks: Task Pending
+ scope
+ meta.item.todo.pending
+ settings
+
+ foreground
+ #fbf1c7
+
+
+
+ name
+ PlainTasks: Task Pending Punctuation
+ scope
+ punctuation.definition.bullet.pending.todo
+ settings
+
+ foreground
+ #928374
+
+
+
+ name
+ PlainTasks: Task Completed Punctuation
+ scope
+ punctuation.definition.bullet.completed.todo
+ settings
+
+ foreground
+ #8ec07c
+
+
+
+ name
+ PlainTasks: Task Cancelled Punctuation
+ scope
+ punctuation.definition.bullet.cancelled.todo
+ settings
+
+ foreground
+ #fb4934
+
+
+
+ name
+ PlainTasks: Tag Critical
+ scope
+ string.other.tag.todo.critical
+ settings
+
+ foreground
+ #fb4934
+ fontStyle
+ bold
+
+
+
+ name
+ PlainTasks: Tag High
+ scope
+ string.other.tag.todo.high
+ settings
+
+ foreground
+ #fe8019
+ fontStyle
+ bold
+
+
+
+ name
+ PlainTasks: Tag Low
+ scope
+ string.other.tag.todo.low
+ settings
+
+ foreground
+ #83a598
+ fontStyle
+ bold
+
+
+
+ name
+ PlainTasks: Tag Today
+ scope
+ string.other.tag.todo.today
+ settings
+
+ foreground
+ #fabd2f
+ fontStyle
+ bold
+
+
+
+ name
+ PlainTasks: Tag
+ scope
+ meta.tag.todo
+ settings
+
+ foreground
+ #d3869b
+
+
+
+ name
+ PlainTasks: URL
+ scope
+ punctuation.definition.url, todo.url
+ settings
+
+ foreground
+ #83a598
+
+
+
+ name
+ PlainTasks: Separator
+ scope
+ meta.punctuation.archive.todo, meta.punctuation.separator.todo
+ settings
+
+ fontStyle
+ italic
+ foreground
+ #928374
+
+
+
+
+
diff --git a/yazi/keymap.toml b/yazi/keymap.toml
new file mode 100644
index 0000000..397b2ec
--- /dev/null
+++ b/yazi/keymap.toml
@@ -0,0 +1,368 @@
+# 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 = "", run = "escape", desc = "Exit visual mode, clear selection, or cancel search" },
+ { on = "", 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 = "", run = "close", desc = "Close the current tab, or quit if it's last" },
+ { on = "", run = "suspend", desc = "Suspend the process" },
+
+ # Hopping
+ { on = "k", run = "arrow prev", desc = "Previous file" },
+ { on = "j", run = "arrow next", desc = "Next file" },
+
+ { on = "", run = "arrow prev", desc = "Previous file" },
+ { on = "", run = "arrow next", desc = "Next file" },
+
+ { on = "", run = "arrow -50%", desc = "Move cursor up half page" },
+ { on = "", run = "arrow 50%", desc = "Move cursor down half page" },
+ { on = "", run = "arrow -100%", desc = "Move cursor up one page" },
+ { on = "", run = "arrow 100%", desc = "Move cursor down one page" },
+
+ { on = "", run = "arrow -50%", desc = "Move cursor up half page" },
+ { on = "", run = "arrow 50%", desc = "Move cursor down half page" },
+ { on = "", run = "arrow -100%", desc = "Move cursor up one page" },
+ { on = "", 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 = "", run = "leave", desc = "Back to the parent directory" },
+ { on = "", 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 = "", run = [ "toggle", "arrow next" ], desc = "Toggle the current selection state" },
+ { on = "", run = "toggle_all --state=on", desc = "Select all files" },
+ { on = "", run = "toggle_all", desc = "Invert selection of all files" },
+
+ # Visual mode
+ { on = "v", run = "visual_mode", desc = "Enter visual mode (selection mode)" },
+ { on = "V", run = "visual_mode --unset", desc = "Enter visual mode (unset mode)" },
+
+ # Seeking
+ { on = "K", run = "seek -5", desc = "Seek up 5 units in the preview" },
+ { on = "J", run = "seek 5", desc = "Seek down 5 units in the preview" },
+
+ # Spotting
+ { on = "", run = "spot", desc = "Spot hovered file" },
+
+ # Operation
+ { on = "o", run = "open", desc = "Open selected files" },
+ { on = "O", run = "open --interactive", desc = "Open selected files interactively" },
+ { on = "", run = "open", desc = "Open selected files" },
+ { on = "", run = "open --interactive", desc = "Open selected files interactively" },
+ { on = "y", run = "yank", desc = "Yank selected files (copy)" },
+ { on = "x", run = "yank --cut", desc = "Yank selected files (cut)" },
+ { on = "p", run = "paste", desc = "Paste yanked files" },
+ { on = "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 = "", 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 = "a", run = "create", desc = "Create a file (ends with / for directories)" },
+ { on = "r", run = "rename --cursor=before_ext", desc = "Rename selected file(s)" },
+ { 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", run = "search --via=fd", desc = "Search files by name via fd" },
+ { on = "S", run = "search --via=rg", desc = "Search files by content via ripgrep" },
+ { on = "", 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 = [ "c", "c" ], run = "copy path", desc = "Copy the file path" },
+ { on = [ "c", "d" ], run = "copy dirname", desc = "Copy the directory path" },
+ { on = [ "c", "f" ], run = "copy filename", desc = "Copy the filename" },
+ { on = [ "c", "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", "" ], run = "cd --interactive", desc = "Jump interactively" },
+ { on = [ "g", "f" ], run = "follow", desc = "Follow hovered symlink" },
+
+ # Tabs
+ { on = "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 = "w", run = "tasks:show", desc = "Show task manager" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "", run = "help", desc = "Open help" },
+]
+
+[tasks]
+
+keymap = [
+ { on = "", run = "close", desc = "Close task manager" },
+ { on = "", run = "close", desc = "Close task manager" },
+ { on = "", run = "close", desc = "Close task manager" },
+ { on = "w", run = "close", desc = "Close task manager" },
+
+ { on = "k", run = "arrow prev", desc = "Previous task" },
+ { on = "j", run = "arrow next", desc = "Next task" },
+
+ { on = "", run = "arrow prev", desc = "Previous task" },
+ { on = "", run = "arrow next", desc = "Next task" },
+
+ { on = "", run = "inspect", desc = "Inspect the task" },
+ { on = "x", run = "cancel", desc = "Cancel the task" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "", run = "help", desc = "Open help" },
+]
+
+[spot]
+
+keymap = [
+ { on = "", run = "close", desc = "Close the spot" },
+ { on = "", run = "close", desc = "Close the spot" },
+ { on = "", run = "close", desc = "Close the spot" },
+ { on = "", 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 = "", run = "arrow prev", desc = "Previous line" },
+ { on = "", run = "arrow next", desc = "Next line" },
+ { on = "", run = "swipe prev", desc = "Swipe to previous file" },
+ { on = "", 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 = "", run = "help", desc = "Open help" },
+]
+
+[pick]
+
+keymap = [
+ { on = "", run = "close", desc = "Cancel pick" },
+ { on = "", run = "close", desc = "Cancel pick" },
+ { on = "", run = "close", desc = "Cancel pick" },
+ { on = "", run = "close --submit", desc = "Submit the pick" },
+
+ { on = "k", run = "arrow prev", desc = "Previous option" },
+ { on = "j", run = "arrow next", desc = "Next option" },
+
+ { on = "", run = "arrow prev", desc = "Previous option" },
+ { on = "", run = "arrow next", desc = "Next option" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "", run = "help", desc = "Open help" },
+]
+
+[input]
+
+keymap = [
+ { on = "", run = "close", desc = "Cancel input" },
+ { on = "", run = "close --submit", desc = "Submit input" },
+ { on = "", run = "escape", desc = "Back to normal mode, or cancel input" },
+ { on = "", 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 = "", run = [ "move eol", "visual", "move bol" ], desc = "Select from EOL to BOL" },
+ { on = "", 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 = "", run = "move -1", desc = "Move back a character" },
+ { on = "", run = "move 1", desc = "Move forward a character" },
+ { on = "", run = "move -1", desc = "Move back a character" },
+ { on = "", 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 = "", run = "backward", desc = "Move back to the start of the current or previous word" },
+ { on = "", 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 = "", run = "move bol", desc = "Move to the BOL" },
+ { on = "", run = "move eol", desc = "Move to the EOL" },
+ { on = "", run = "move bol", desc = "Move to the BOL" },
+ { on = "", run = "move eol", desc = "Move to the EOL" },
+
+ # Delete
+ { on = "", run = "backspace", desc = "Delete the character before the cursor" },
+ { on = "", run = "backspace --under", desc = "Delete the character under the cursor" },
+ { on = "", run = "backspace", desc = "Delete the character before the cursor" },
+ { on = "", run = "backspace --under", desc = "Delete the character under the cursor" },
+
+ # Kill
+ { on = "", run = "kill bol", desc = "Kill backwards to the BOL" },
+ { on = "", run = "kill eol", desc = "Kill forwards to the EOL" },
+ { on = "", run = "kill backward", desc = "Kill backwards to the start of the current word" },
+ { on = "", 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 = "", run = "redo", desc = "Redo the last operation" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "", run = "help", desc = "Open help" },
+]
+
+[confirm]
+
+keymap = [
+ { on = "", run = "close", desc = "Cancel the confirm" },
+ { on = "", run = "close", desc = "Cancel the confirm" },
+ { on = "", run = "close", desc = "Cancel the confirm" },
+ { on = "", 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 = "", run = "arrow prev", desc = "Previous line" },
+ { on = "", run = "arrow next", desc = "Next line" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "", run = "help", desc = "Open help" },
+]
+
+[cmp]
+
+keymap = [
+ { on = "", run = "close", desc = "Cancel completion" },
+ { on = "", run = "close --submit", desc = "Submit the completion" },
+ { on = "", run = [ "close --submit", "input:close --submit" ], desc = "Complete and submit the input" },
+
+ { on = "", run = "arrow prev", desc = "Previous item" },
+ { on = "", run = "arrow next", desc = "Next item" },
+
+ { on = "", run = "arrow prev", desc = "Previous item" },
+ { on = "", run = "arrow next", desc = "Next item" },
+
+ { on = "", run = "arrow prev", desc = "Previous item" },
+ { on = "", run = "arrow next", desc = "Next item" },
+
+ # Help
+ { on = "~", run = "help", desc = "Open help" },
+ { on = "", run = "help", desc = "Open help" },
+]
+
+[help]
+
+keymap = [
+ { on = "", run = "escape", desc = "Clear the filter, or hide the help" },
+ { on = "", run = "escape", desc = "Clear the filter, or hide the help" },
+ { on = "", run = "close", desc = "Hide the help" },
+
+ # Navigation
+ { on = "k", run = "arrow prev", desc = "Previous line" },
+ { on = "j", run = "arrow next", desc = "Next line" },
+
+ { on = "", run = "arrow prev", desc = "Previous line" },
+ { on = "", run = "arrow next", desc = "Next line" },
+
+ # Filtering
+ { on = "f", run = "filter", desc = "Filter help items" },
+]
diff --git a/yazi/package.toml b/yazi/package.toml
new file mode 100644
index 0000000..e958a2e
--- /dev/null
+++ b/yazi/package.toml
@@ -0,0 +1,7 @@
+[plugin]
+deps = []
+
+[[flavor.deps]]
+use = "bennyyip/gruvbox-dark"
+rev = "91fdfa7"
+hash = "f48f510e5505f5d01e79c4f8257ec5cb"
diff --git a/yazi/theme.toml b/yazi/theme.toml
new file mode 100644
index 0000000..38ab792
--- /dev/null
+++ b/yazi/theme.toml
@@ -0,0 +1,958 @@
+# 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
+
+# : Flavor {{{
+
+[flavor]
+dark = "gruvbox-dark"
+light = ""
+
+# : }}}
+
+
+# # : Manager {{{
+#
+# [mgr]
+# cwd = { fg = "cyan" }
+#
+# # Hovered
+# hovered = { reversed = true }
+# preview_hovered = { underline = true }
+#
+# # Find
+# find_keyword = { fg = "yellow", bold = true, italic = true, underline = true }
+# find_position = { fg = "magenta", bg = "reset", bold = true, italic = true }
+#
+# # Symlink
+# symlink_target = { italic = true }
+#
+# # Marker
+# marker_copied = { fg = "lightgreen", bg = "lightgreen" }
+# marker_cut = { fg = "lightred", bg = "lightred" }
+# marker_marked = { fg = "lightcyan", bg = "lightcyan" }
+# marker_selected = { fg = "lightyellow", bg = "lightyellow" }
+#
+# # Count
+# count_copied = { fg = "white", bg = "green" }
+# count_cut = { fg = "white", bg = "red" }
+# count_selected = { fg = "white", bg = "yellow" }
+#
+# # Border
+# border_symbol = "│"
+# border_style = { fg = "gray" }
+#
+# # Highlighting
+# syntect_theme = ""
+#
+# # : }}}
+#
+#
+# # : Tabs {{{
+#
+# [tabs]
+# active = { bg = "blue", bold = true }
+# inactive = { fg = "blue", bg = "gray" }
+#
+# # Separator
+# sep_inner = { open = "", close = "" }
+# sep_outer = { open = "", close = "" }
+#
+# # : }}}
+#
+#
+# # : Mode {{{
+#
+# [mode]
+# normal_main = { bg = "blue", bold = true }
+# normal_alt = { fg = "blue", bg = "gray" }
+#
+# # Select mode
+# select_main = { bg = "red", bold = true }
+# select_alt = { fg = "red", bg = "gray" }
+#
+# # Unset mode
+# unset_main = { bg = "red", bold = true }
+# unset_alt = { fg = "red", bg = "gray" }
+#
+# # : }}}
+#
+#
+# # : Status bar {{{
+#
+# [status]
+# overall = {}
+# sep_left = { open = "", close = "" }
+# sep_right = { open = "", close = "" }
+#
+# # Permissions
+# perm_sep = { fg = "darkgray" }
+# perm_type = { fg = "green" }
+# perm_read = { fg = "yellow" }
+# perm_write = { fg = "red" }
+# perm_exec = { fg = "cyan" }
+#
+# # Progress
+# progress_label = { bold = true }
+# progress_normal = { fg = "blue", bg = "black" }
+# progress_error = { fg = "red", bg = "black" }
+#
+# # : }}}
+#
+#
+# # : Which {{{
+#
+# [which]
+# cols = 3
+# mask = { bg = "black" }
+# cand = { fg = "lightcyan" }
+# rest = { fg = "darkgray" }
+# desc = { fg = "lightmagenta" }
+# separator = " "
+# separator_style = { fg = "darkgray" }
+#
+# # : }}}
+#
+#
+# # : Confirmation {{{
+#
+# [confirm]
+# border = { fg = "blue" }
+# title = { fg = "blue" }
+# content = {}
+# list = {}
+# btn_yes = { reversed = true }
+# btn_no = {}
+# btn_labels = [ " [Y]es ", " (N)o " ]
+#
+# # : }}}
+#
+#
+# # : Spotter {{{
+#
+# [spot]
+# border = { fg = "blue" }
+# title = { fg = "blue" }
+#
+# # Table
+# tbl_col = { fg = "blue" }
+# tbl_cell = { fg = "yellow", reversed = true }
+#
+# # : }}}
+#
+#
+# # : Notification {{{
+#
+# [notify]
+# title_info = { fg = "green" }
+# title_warn = { fg = "yellow" }
+# title_error = { fg = "red" }
+#
+# # Icons
+# icon_info = ""
+# icon_warn = ""
+# icon_error = ""
+#
+# # : }}}
+#
+#
+# # : Picker {{{
+#
+# [pick]
+# border = { fg = "blue" }
+# active = { fg = "magenta", bold = true }
+# inactive = {}
+#
+# # : }}}
+#
+#
+# # : Input {{{
+#
+# [input]
+# border = { fg = "blue" }
+# title = {}
+# value = {}
+# selected = { reversed = true }
+#
+# # : }}}
+#
+#
+# # : Completion {{{
+#
+# [cmp]
+# border = { fg = "blue" }
+# active = { reversed = true }
+# inactive = {}
+#
+# # Icons
+# icon_file = ""
+# icon_folder = ""
+# icon_command = ""
+#
+# # : }}}
+#
+#
+# # : Task manager {{{
+#
+# [tasks]
+# border = { fg = "blue" }
+# title = {}
+# hovered = { fg = "magenta", underline = true }
+#
+# # : }}}
+#
+#
+# # : Help menu {{{
+#
+# [help]
+# on = { fg = "cyan" }
+# run = { fg = "magenta" }
+# desc = {}
+# hovered = { reversed = true, bold = true }
+# footer = { fg = "black", bg = "white" }
+#
+# # : }}}
+#
+#
+# # : File-specific styles {{{
+#
+# [filetype]
+# rules = [
+# # Images
+# { mime = "image/*", fg = "yellow" },
+#
+# # Media
+# { mime = "{audio,video}/*", fg = "magenta" },
+#
+# # Archives
+# { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "red" },
+#
+# # Documents
+# { mime = "application/{pdf,doc,rtf}", fg = "cyan" },
+#
+# # Empty files
+# # { mime = "inode/empty", fg = "red" },
+#
+# # Special files
+# { name = "*", is = "orphan", bg = "red" },
+# { name = "*", is = "exec" , fg = "green" },
+#
+# # Dummy files
+# { name = "*", is = "dummy", bg = "red" },
+# { name = "*/", is = "dummy", bg = "red" },
+#
+# # Fallback
+# # { name = "*", fg = "white" },
+# { name = "*/", fg = "blue" }
+# ]
+#
+# # : }}}
+#
+#
+# # : Icons {{{
+#
+# [icon]
+# globs = []
+# dirs = [
+# { name = ".config", text = "" },
+# { name = ".git", text = "" },
+# { name = ".github", text = "" },
+# { name = ".npm", text = "" },
+# { name = "Desktop", text = "" },
+# { name = "Development", text = "" },
+# { name = "Documents", text = "" },
+# { name = "Downloads", text = "" },
+# { name = "Library", text = "" },
+# { name = "Movies", text = "" },
+# { name = "Music", text = "" },
+# { name = "Pictures", text = "" },
+# { name = "Public", text = "" },
+# { name = "Videos", text = "" },
+# ]
+# files = [
+# { name = ".babelrc", text = "", fg = "#cbcb41" },
+# { name = ".bash_profile", text = "", fg = "#89e051" },
+# { name = ".bashrc", text = "", fg = "#89e051" },
+# { name = ".clang-format", text = "", fg = "#6d8086" },
+# { name = ".clang-tidy", text = "", fg = "#6d8086" },
+# { name = ".codespellrc", text = "", fg = "#35da60" },
+# { name = ".condarc", text = "", fg = "#43b02a" },
+# { name = ".dockerignore", text = "", fg = "#458ee6" },
+# { name = ".ds_store", text = "", fg = "#41535b" },
+# { name = ".editorconfig", text = "", fg = "#fff2f2" },
+# { name = ".env", text = "", fg = "#faf743" },
+# { name = ".eslintignore", text = "", fg = "#4b32c3" },
+# { name = ".eslintrc", text = "", fg = "#4b32c3" },
+# { name = ".git-blame-ignore-revs", text = "", fg = "#f54d27" },
+# { name = ".gitattributes", text = "", fg = "#f54d27" },
+# { name = ".gitconfig", text = "", fg = "#f54d27" },
+# { name = ".gitignore", text = "", fg = "#f54d27" },
+# { name = ".gitlab-ci.yml", text = "", fg = "#e24329" },
+# { name = ".gitmodules", text = "", fg = "#f54d27" },
+# { name = ".gtkrc-2.0", text = "", fg = "#ffffff" },
+# { name = ".gvimrc", text = "", fg = "#019833" },
+# { name = ".justfile", text = "", fg = "#6d8086" },
+# { name = ".luacheckrc", text = "", fg = "#00a2ff" },
+# { name = ".luaurc", text = "", fg = "#00a2ff" },
+# { name = ".mailmap", text = "", fg = "#f54d27" },
+# { name = ".nanorc", text = "", fg = "#440077" },
+# { name = ".npmignore", text = "", fg = "#e8274b" },
+# { name = ".npmrc", text = "", fg = "#e8274b" },
+# { name = ".nuxtrc", text = "", fg = "#00c58e" },
+# { name = ".nvmrc", text = "", fg = "#5fa04e" },
+# { name = ".pre-commit-config.yaml", text = "", fg = "#f8b424" },
+# { name = ".prettierignore", text = "", fg = "#4285f4" },
+# { name = ".prettierrc", text = "", fg = "#4285f4" },
+# { name = ".prettierrc.cjs", text = "", fg = "#4285f4" },
+# { name = ".prettierrc.js", text = "", fg = "#4285f4" },
+# { name = ".prettierrc.json", text = "", fg = "#4285f4" },
+# { name = ".prettierrc.json5", text = "", fg = "#4285f4" },
+# { name = ".prettierrc.mjs", text = "", fg = "#4285f4" },
+# { name = ".prettierrc.toml", text = "", fg = "#4285f4" },
+# { name = ".prettierrc.yaml", text = "", fg = "#4285f4" },
+# { name = ".prettierrc.yml", text = "", fg = "#4285f4" },
+# { name = ".pylintrc", text = "", fg = "#6d8086" },
+# { name = ".settings.json", text = "", fg = "#854cc7" },
+# { name = ".SRCINFO", text = "", fg = "#0f94d2" },
+# { name = ".vimrc", text = "", fg = "#019833" },
+# { name = ".Xauthority", text = "", fg = "#e54d18" },
+# { name = ".xinitrc", text = "", fg = "#e54d18" },
+# { name = ".Xresources", text = "", fg = "#e54d18" },
+# { name = ".xsession", text = "", fg = "#e54d18" },
+# { name = ".zprofile", text = "", fg = "#89e051" },
+# { name = ".zshenv", text = "", fg = "#89e051" },
+# { name = ".zshrc", text = "", fg = "#89e051" },
+# { name = "_gvimrc", text = "", fg = "#019833" },
+# { name = "_vimrc", text = "", fg = "#019833" },
+# { name = "AUTHORS", text = "", fg = "#a172ff" },
+# { name = "AUTHORS.txt", text = "", fg = "#a172ff" },
+# { name = "brewfile", text = "", fg = "#701516" },
+# { name = "bspwmrc", text = "", fg = "#2f2f2f" },
+# { name = "build", text = "", fg = "#89e051" },
+# { name = "build.gradle", text = "", fg = "#005f87" },
+# { name = "build.zig.zon", text = "", fg = "#f69a1b" },
+# { name = "bun.lock", text = "", fg = "#eadcd1" },
+# { name = "bun.lockb", text = "", fg = "#eadcd1" },
+# { name = "cantorrc", text = "", fg = "#1c99f3" },
+# { name = "checkhealth", text = "", fg = "#75b4fb" },
+# { name = "cmakelists.txt", text = "", fg = "#dce3eb" },
+# { name = "code_of_conduct", text = "", fg = "#e41662" },
+# { name = "code_of_conduct.md", text = "", fg = "#e41662" },
+# { name = "commit_editmsg", text = "", fg = "#f54d27" },
+# { name = "commitlint.config.js", text = "", fg = "#2b9689" },
+# { name = "commitlint.config.ts", text = "", fg = "#2b9689" },
+# { name = "compose.yaml", text = "", fg = "#458ee6" },
+# { name = "compose.yml", text = "", fg = "#458ee6" },
+# { name = "config", text = "", fg = "#6d8086" },
+# { name = "containerfile", text = "", fg = "#458ee6" },
+# { name = "copying", text = "", fg = "#cbcb41" },
+# { name = "copying.lesser", text = "", fg = "#cbcb41" },
+# { name = "Directory.Build.props", text = "", fg = "#00a2ff" },
+# { name = "Directory.Build.targets", text = "", fg = "#00a2ff" },
+# { name = "Directory.Packages.props", text = "", fg = "#00a2ff" },
+# { name = "docker-compose.yaml", text = "", fg = "#458ee6" },
+# { name = "docker-compose.yml", text = "", fg = "#458ee6" },
+# { name = "dockerfile", text = "", fg = "#458ee6" },
+# { name = "eslint.config.cjs", text = "", fg = "#4b32c3" },
+# { name = "eslint.config.js", text = "", fg = "#4b32c3" },
+# { name = "eslint.config.mjs", text = "", fg = "#4b32c3" },
+# { name = "eslint.config.ts", text = "", fg = "#4b32c3" },
+# { name = "ext_typoscript_setup.txt", text = "", fg = "#ff8700" },
+# { name = "favicon.ico", text = "", fg = "#cbcb41" },
+# { name = "fp-info-cache", text = "", fg = "#ffffff" },
+# { name = "fp-lib-table", text = "", fg = "#ffffff" },
+# { name = "FreeCAD.conf", text = "", fg = "#cb333b" },
+# { name = "Gemfile", text = "", fg = "#701516" },
+# { name = "gnumakefile", text = "", fg = "#6d8086" },
+# { name = "go.mod", text = "", fg = "#00add8" },
+# { name = "go.sum", text = "", fg = "#00add8" },
+# { name = "go.work", text = "", fg = "#00add8" },
+# { name = "gradle-wrapper.properties", text = "", fg = "#005f87" },
+# { name = "gradle.properties", text = "", fg = "#005f87" },
+# { name = "gradlew", text = "", fg = "#005f87" },
+# { name = "groovy", text = "", fg = "#4a687c" },
+# { name = "gruntfile.babel.js", text = "", fg = "#e37933" },
+# { name = "gruntfile.coffee", text = "", fg = "#e37933" },
+# { name = "gruntfile.js", text = "", fg = "#e37933" },
+# { name = "gruntfile.ts", text = "", fg = "#e37933" },
+# { name = "gtkrc", text = "", fg = "#ffffff" },
+# { name = "gulpfile.babel.js", text = "", fg = "#cc3e44" },
+# { name = "gulpfile.coffee", text = "", fg = "#cc3e44" },
+# { name = "gulpfile.js", text = "", fg = "#cc3e44" },
+# { name = "gulpfile.ts", text = "", fg = "#cc3e44" },
+# { name = "hypridle.conf", text = "", fg = "#00aaae" },
+# { name = "hyprland.conf", text = "", fg = "#00aaae" },
+# { name = "hyprlandd.conf", text = "", fg = "#00aaae" },
+# { name = "hyprlock.conf", text = "", fg = "#00aaae" },
+# { name = "hyprpaper.conf", text = "", fg = "#00aaae" },
+# { name = "i18n.config.js", text = "", fg = "#7986cb" },
+# { name = "i18n.config.ts", text = "", fg = "#7986cb" },
+# { name = "i3blocks.conf", text = "", fg = "#e8ebee" },
+# { name = "i3status.conf", text = "", fg = "#e8ebee" },
+# { name = "index.theme", text = "", fg = "#2db96f" },
+# { name = "ionic.config.json", text = "", fg = "#4f8ff7" },
+# { name = "justfile", text = "", fg = "#6d8086" },
+# { name = "kalgebrarc", text = "", fg = "#1c99f3" },
+# { name = "kdeglobals", text = "", fg = "#1c99f3" },
+# { name = "kdenlive-layoutsrc", text = "", fg = "#83b8f2" },
+# { name = "kdenliverc", text = "", fg = "#83b8f2" },
+# { name = "kritadisplayrc", text = "", fg = "#f245fb" },
+# { name = "kritarc", text = "", fg = "#f245fb" },
+# { name = "license", text = "", fg = "#d0bf41" },
+# { name = "license.md", text = "", fg = "#d0bf41" },
+# { name = "lxde-rc.xml", text = "", fg = "#909090" },
+# { name = "lxqt.conf", text = "", fg = "#0192d3" },
+# { name = "makefile", text = "", fg = "#6d8086" },
+# { name = "mix.lock", text = "", fg = "#a074c4" },
+# { name = "mpv.conf", text = "", fg = "#3b1342" },
+# { name = "node_modules", text = "", fg = "#e8274b" },
+# { name = "nuxt.config.cjs", text = "", fg = "#00c58e" },
+# { name = "nuxt.config.js", text = "", fg = "#00c58e" },
+# { name = "nuxt.config.mjs", text = "", fg = "#00c58e" },
+# { name = "nuxt.config.ts", text = "", fg = "#00c58e" },
+# { name = "package-lock.json", text = "", fg = "#7a0d21" },
+# { name = "package.json", text = "", fg = "#e8274b" },
+# { name = "PKGBUILD", text = "", fg = "#0f94d2" },
+# { name = "platformio.ini", text = "", fg = "#f6822b" },
+# { name = "pom.xml", text = "", fg = "#7a0d21" },
+# { name = "prettier.config.cjs", text = "", fg = "#4285f4" },
+# { name = "prettier.config.js", text = "", fg = "#4285f4" },
+# { name = "prettier.config.mjs", text = "", fg = "#4285f4" },
+# { name = "prettier.config.ts", text = "", fg = "#4285f4" },
+# { name = "procfile", text = "", fg = "#a074c4" },
+# { name = "PrusaSlicer.ini", text = "", fg = "#ec6b23" },
+# { name = "PrusaSlicerGcodeViewer.ini", text = "", fg = "#ec6b23" },
+# { name = "py.typed", text = "", fg = "#ffbc03" },
+# { name = "QtProject.conf", text = "", fg = "#40cd52" },
+# { name = "rakefile", text = "", fg = "#701516" },
+# { name = "readme", text = "", fg = "#ededed" },
+# { name = "readme.md", text = "", fg = "#ededed" },
+# { name = "rmd", text = "", fg = "#519aba" },
+# { name = "robots.txt", text = "", fg = "#5d7096" },
+# { name = "security", text = "", fg = "#bec4c9" },
+# { name = "security.md", text = "", fg = "#bec4c9" },
+# { name = "settings.gradle", text = "", fg = "#005f87" },
+# { name = "svelte.config.js", text = "", fg = "#ff3e00" },
+# { name = "sxhkdrc", text = "", fg = "#2f2f2f" },
+# { name = "sym-lib-table", text = "", fg = "#ffffff" },
+# { name = "tailwind.config.js", text = "", fg = "#20c2e3" },
+# { name = "tailwind.config.mjs", text = "", fg = "#20c2e3" },
+# { name = "tailwind.config.ts", text = "", fg = "#20c2e3" },
+# { name = "tmux.conf", text = "", fg = "#14ba19" },
+# { name = "tmux.conf.local", text = "", fg = "#14ba19" },
+# { name = "tsconfig.json", text = "", fg = "#519aba" },
+# { name = "unlicense", text = "", fg = "#d0bf41" },
+# { name = "vagrantfile", text = "", fg = "#1563ff" },
+# { name = "vercel.json", text = "", fg = "#ffffff" },
+# { name = "vlcrc", text = "", fg = "#ee7a00" },
+# { name = "webpack", text = "", fg = "#519aba" },
+# { name = "weston.ini", text = "", fg = "#ffbb01" },
+# { name = "workspace", text = "", fg = "#89e051" },
+# { name = "wrangler.jsonc", text = "", fg = "#f48120" },
+# { name = "wrangler.toml", text = "", fg = "#f48120" },
+# { name = "xmobarrc", text = "", fg = "#fd4d5d" },
+# { name = "xmobarrc.hs", text = "", fg = "#fd4d5d" },
+# { name = "xmonad.hs", text = "", fg = "#fd4d5d" },
+# { name = "xorg.conf", text = "", fg = "#e54d18" },
+# { name = "xsettingsd.conf", text = "", fg = "#e54d18" },
+# ]
+# exts = [
+# { name = "3gp", text = "", fg = "#fd971f" },
+# { name = "3mf", text = "", fg = "#888888" },
+# { name = "7z", text = "", fg = "#eca517" },
+# { name = "a", text = "", fg = "#dcddd6" },
+# { name = "aac", text = "", fg = "#00afff" },
+# { name = "ada", text = "", fg = "#599eff" },
+# { name = "adb", text = "", fg = "#599eff" },
+# { name = "ads", text = "", fg = "#a074c4" },
+# { name = "ai", text = "", fg = "#cbcb41" },
+# { name = "aif", text = "", fg = "#00afff" },
+# { name = "aiff", text = "", fg = "#00afff" },
+# { name = "android", text = "", fg = "#34a853" },
+# { name = "ape", text = "", fg = "#00afff" },
+# { name = "apk", text = "", fg = "#34a853" },
+# { name = "apl", text = "", fg = "#24a148" },
+# { name = "app", text = "", fg = "#9f0500" },
+# { name = "applescript", text = "", fg = "#6d8085" },
+# { name = "asc", text = "", fg = "#576d7f" },
+# { name = "asm", text = "", fg = "#0091bd" },
+# { name = "ass", text = "", fg = "#ffb713" },
+# { name = "astro", text = "", fg = "#e23f67" },
+# { name = "avif", text = "", fg = "#a074c4" },
+# { name = "awk", text = "", fg = "#4d5a5e" },
+# { name = "azcli", text = "", fg = "#0078d4" },
+# { name = "bak", text = "", fg = "#6d8086" },
+# { name = "bash", text = "", fg = "#89e051" },
+# { name = "bat", text = "", fg = "#c1f12e" },
+# { name = "bazel", text = "", fg = "#89e051" },
+# { name = "bib", text = "", fg = "#cbcb41" },
+# { name = "bicep", text = "", fg = "#519aba" },
+# { name = "bicepparam", text = "", fg = "#9f74b3" },
+# { name = "bin", text = "", fg = "#9f0500" },
+# { name = "blade.php", text = "", fg = "#f05340" },
+# { name = "blend", text = "", fg = "#ea7600" },
+# { name = "blp", text = "", fg = "#5796e2" },
+# { name = "bmp", text = "", fg = "#a074c4" },
+# { name = "bqn", text = "", fg = "#24a148" },
+# { name = "brep", text = "", fg = "#839463" },
+# { name = "bz", text = "", fg = "#eca517" },
+# { name = "bz2", text = "", fg = "#eca517" },
+# { name = "bz3", text = "", fg = "#eca517" },
+# { name = "bzl", text = "", fg = "#89e051" },
+# { name = "c", text = "", fg = "#599eff" },
+# { name = "c++", text = "", fg = "#f34b7d" },
+# { name = "cache", text = "", fg = "#ffffff" },
+# { name = "cast", text = "", fg = "#fd971f" },
+# { name = "cbl", text = "", fg = "#005ca5" },
+# { name = "cc", text = "", fg = "#f34b7d" },
+# { name = "ccm", text = "", fg = "#f34b7d" },
+# { name = "cfg", text = "", fg = "#6d8086" },
+# { name = "cjs", text = "", fg = "#cbcb41" },
+# { name = "clj", text = "", fg = "#8dc149" },
+# { name = "cljc", text = "", fg = "#8dc149" },
+# { name = "cljd", text = "", fg = "#519aba" },
+# { name = "cljs", text = "", fg = "#519aba" },
+# { name = "cmake", text = "", fg = "#dce3eb" },
+# { name = "cob", text = "", fg = "#005ca5" },
+# { name = "cobol", text = "", fg = "#005ca5" },
+# { name = "coffee", text = "", fg = "#cbcb41" },
+# { name = "conda", text = "", fg = "#43b02a" },
+# { name = "conf", text = "", fg = "#6d8086" },
+# { name = "config.ru", text = "", fg = "#701516" },
+# { name = "cow", text = "", fg = "#965824" },
+# { name = "cp", text = "", fg = "#519aba" },
+# { name = "cpp", text = "", fg = "#519aba" },
+# { name = "cppm", text = "", fg = "#519aba" },
+# { name = "cpy", text = "", fg = "#005ca5" },
+# { name = "cr", text = "", fg = "#c8c8c8" },
+# { name = "crdownload", text = "", fg = "#44cda8" },
+# { name = "cs", text = "", fg = "#596706" },
+# { name = "csh", text = "", fg = "#4d5a5e" },
+# { name = "cshtml", text = "", fg = "#512bd4" },
+# { name = "cson", text = "", fg = "#cbcb41" },
+# { name = "csproj", text = "", fg = "#512bd4" },
+# { name = "css", text = "", fg = "#663399" },
+# { name = "csv", text = "", fg = "#89e051" },
+# { name = "cts", text = "", fg = "#519aba" },
+# { name = "cu", text = "", fg = "#89e051" },
+# { name = "cue", text = "", fg = "#ed95ae" },
+# { name = "cuh", text = "", fg = "#a074c4" },
+# { name = "cxx", text = "", fg = "#519aba" },
+# { name = "cxxm", text = "", fg = "#519aba" },
+# { name = "d", text = "", fg = "#b03931" },
+# { name = "d.ts", text = "", fg = "#d59855" },
+# { name = "dart", text = "", fg = "#03589c" },
+# { name = "db", text = "", fg = "#dad8d8" },
+# { name = "dconf", text = "", fg = "#ffffff" },
+# { name = "desktop", text = "", fg = "#563d7c" },
+# { name = "diff", text = "", fg = "#41535b" },
+# { name = "dll", text = "", fg = "#4d2c0b" },
+# { name = "doc", text = "", fg = "#185abd" },
+# { name = "Dockerfile", text = "", fg = "#458ee6" },
+# { name = "dockerignore", text = "", fg = "#458ee6" },
+# { name = "docx", text = "", fg = "#185abd" },
+# { name = "dot", text = "", fg = "#30638e" },
+# { name = "download", text = "", fg = "#44cda8" },
+# { name = "drl", text = "", fg = "#ffafaf" },
+# { name = "dropbox", text = "", fg = "#0061fe" },
+# { name = "dump", text = "", fg = "#dad8d8" },
+# { name = "dwg", text = "", fg = "#839463" },
+# { name = "dxf", text = "", fg = "#839463" },
+# { name = "ebook", text = "", fg = "#eab16d" },
+# { name = "ebuild", text = "", fg = "#4c416e" },
+# { name = "edn", text = "", fg = "#519aba" },
+# { name = "eex", text = "", fg = "#a074c4" },
+# { name = "ejs", text = "", fg = "#cbcb41" },
+# { name = "el", text = "", fg = "#8172be" },
+# { name = "elc", text = "", fg = "#8172be" },
+# { name = "elf", text = "", fg = "#9f0500" },
+# { name = "elm", text = "", fg = "#519aba" },
+# { name = "eln", text = "", fg = "#8172be" },
+# { name = "env", text = "", fg = "#faf743" },
+# { name = "eot", text = "", fg = "#ececec" },
+# { name = "epp", text = "", fg = "#ffa61a" },
+# { name = "epub", text = "", fg = "#eab16d" },
+# { name = "erb", text = "", fg = "#701516" },
+# { name = "erl", text = "", fg = "#b83998" },
+# { name = "ex", text = "", fg = "#a074c4" },
+# { name = "exe", text = "", fg = "#9f0500" },
+# { name = "exs", text = "", fg = "#a074c4" },
+# { name = "f#", text = "", fg = "#519aba" },
+# { name = "f3d", text = "", fg = "#839463" },
+# { name = "f90", text = "", fg = "#734f96" },
+# { name = "fbx", text = "", fg = "#888888" },
+# { name = "fcbak", text = "", fg = "#cb333b" },
+# { name = "fcmacro", text = "", fg = "#cb333b" },
+# { name = "fcmat", text = "", fg = "#cb333b" },
+# { name = "fcparam", text = "", fg = "#cb333b" },
+# { name = "fcscript", text = "", fg = "#cb333b" },
+# { name = "fcstd", text = "", fg = "#cb333b" },
+# { name = "fcstd1", text = "", fg = "#cb333b" },
+# { name = "fctb", text = "", fg = "#cb333b" },
+# { name = "fctl", text = "", fg = "#cb333b" },
+# { name = "fdmdownload", text = "", fg = "#44cda8" },
+# { name = "feature", text = "", fg = "#00a818" },
+# { name = "fish", text = "", fg = "#4d5a5e" },
+# { name = "flac", text = "", fg = "#0075aa" },
+# { name = "flc", text = "", fg = "#ececec" },
+# { name = "flf", text = "", fg = "#ececec" },
+# { name = "fnl", text = "", fg = "#fff3d7" },
+# { name = "fodg", text = "", fg = "#fffb57" },
+# { name = "fodp", text = "", fg = "#fe9c45" },
+# { name = "fods", text = "", fg = "#78fc4e" },
+# { name = "fodt", text = "", fg = "#2dcbfd" },
+# { name = "fs", text = "", fg = "#519aba" },
+# { name = "fsi", text = "", fg = "#519aba" },
+# { name = "fsscript", text = "", fg = "#519aba" },
+# { name = "fsx", text = "", fg = "#519aba" },
+# { name = "gcode", text = "", fg = "#1471ad" },
+# { name = "gd", text = "", fg = "#6d8086" },
+# { name = "gemspec", text = "", fg = "#701516" },
+# { name = "gif", text = "", fg = "#a074c4" },
+# { name = "git", text = "", fg = "#f14c28" },
+# { name = "glb", text = "", fg = "#ffb13b" },
+# { name = "gleam", text = "", fg = "#ffaff3" },
+# { name = "gnumakefile", text = "", fg = "#6d8086" },
+# { name = "go", text = "", fg = "#00add8" },
+# { name = "godot", text = "", fg = "#6d8086" },
+# { name = "gpr", text = "", fg = "#6d8086" },
+# { name = "gql", text = "", fg = "#e535ab" },
+# { name = "gradle", text = "", fg = "#005f87" },
+# { name = "graphql", text = "", fg = "#e535ab" },
+# { name = "gresource", text = "", fg = "#ffffff" },
+# { name = "gv", text = "", fg = "#30638e" },
+# { name = "gz", text = "", fg = "#eca517" },
+# { name = "h", text = "", fg = "#a074c4" },
+# { name = "haml", text = "", fg = "#eaeae1" },
+# { name = "hbs", text = "", fg = "#f0772b" },
+# { name = "heex", text = "", fg = "#a074c4" },
+# { name = "hex", text = "", fg = "#2e63ff" },
+# { name = "hh", text = "", fg = "#a074c4" },
+# { name = "hpp", text = "", fg = "#a074c4" },
+# { name = "hrl", text = "", fg = "#b83998" },
+# { name = "hs", text = "", fg = "#a074c4" },
+# { name = "htm", text = "", fg = "#e34c26" },
+# { name = "html", text = "", fg = "#e44d26" },
+# { name = "http", text = "", fg = "#008ec7" },
+# { name = "huff", text = "", fg = "#4242c7" },
+# { name = "hurl", text = "", fg = "#ff0288" },
+# { name = "hx", text = "", fg = "#ea8220" },
+# { name = "hxx", text = "", fg = "#a074c4" },
+# { name = "ical", text = "", fg = "#2b2e83" },
+# { name = "icalendar", text = "", fg = "#2b2e83" },
+# { name = "ico", text = "", fg = "#cbcb41" },
+# { name = "ics", text = "", fg = "#2b2e83" },
+# { name = "ifb", text = "", fg = "#2b2e83" },
+# { name = "ifc", text = "", fg = "#839463" },
+# { name = "ige", text = "", fg = "#839463" },
+# { name = "iges", text = "", fg = "#839463" },
+# { name = "igs", text = "", fg = "#839463" },
+# { name = "image", text = "", fg = "#d0bec8" },
+# { name = "img", text = "", fg = "#d0bec8" },
+# { name = "import", text = "", fg = "#ececec" },
+# { name = "info", text = "", fg = "#ffffcd" },
+# { name = "ini", text = "", fg = "#6d8086" },
+# { name = "ino", text = "", fg = "#56b6c2" },
+# { name = "ipynb", text = "", fg = "#f57d01" },
+# { name = "iso", text = "", fg = "#d0bec8" },
+# { name = "ixx", text = "", fg = "#519aba" },
+# { name = "java", text = "", fg = "#cc3e44" },
+# { name = "jl", text = "", fg = "#a270ba" },
+# { name = "jpeg", text = "", fg = "#a074c4" },
+# { name = "jpg", text = "", fg = "#a074c4" },
+# { name = "js", text = "", fg = "#cbcb41" },
+# { name = "json", text = "", fg = "#cbcb41" },
+# { name = "json5", text = "", fg = "#cbcb41" },
+# { name = "jsonc", text = "", fg = "#cbcb41" },
+# { name = "jsx", text = "", fg = "#20c2e3" },
+# { name = "jwmrc", text = "", fg = "#0078cd" },
+# { name = "jxl", text = "", fg = "#a074c4" },
+# { name = "kbx", text = "", fg = "#737672" },
+# { name = "kdb", text = "", fg = "#529b34" },
+# { name = "kdbx", text = "", fg = "#529b34" },
+# { name = "kdenlive", text = "", fg = "#83b8f2" },
+# { name = "kdenlivetitle", text = "", fg = "#83b8f2" },
+# { name = "kicad_dru", text = "", fg = "#ffffff" },
+# { name = "kicad_mod", text = "", fg = "#ffffff" },
+# { name = "kicad_pcb", text = "", fg = "#ffffff" },
+# { name = "kicad_prl", text = "", fg = "#ffffff" },
+# { name = "kicad_pro", text = "", fg = "#ffffff" },
+# { name = "kicad_sch", text = "", fg = "#ffffff" },
+# { name = "kicad_sym", text = "", fg = "#ffffff" },
+# { name = "kicad_wks", text = "", fg = "#ffffff" },
+# { name = "ko", text = "", fg = "#dcddd6" },
+# { name = "kpp", text = "", fg = "#f245fb" },
+# { name = "kra", text = "", fg = "#f245fb" },
+# { name = "krz", text = "", fg = "#f245fb" },
+# { name = "ksh", text = "", fg = "#4d5a5e" },
+# { name = "kt", text = "", fg = "#7f52ff" },
+# { name = "kts", text = "", fg = "#7f52ff" },
+# { name = "lck", text = "", fg = "#bbbbbb" },
+# { name = "leex", text = "", fg = "#a074c4" },
+# { name = "less", text = "", fg = "#563d7c" },
+# { name = "lff", text = "", fg = "#ececec" },
+# { name = "lhs", text = "", fg = "#a074c4" },
+# { name = "lib", text = "", fg = "#4d2c0b" },
+# { name = "license", text = "", fg = "#cbcb41" },
+# { name = "liquid", text = "", fg = "#95bf47" },
+# { name = "lock", text = "", fg = "#bbbbbb" },
+# { name = "log", text = "", fg = "#dddddd" },
+# { name = "lrc", text = "", fg = "#ffb713" },
+# { name = "lua", text = "", fg = "#51a0cf" },
+# { name = "luac", text = "", fg = "#51a0cf" },
+# { name = "luau", text = "", fg = "#00a2ff" },
+# { name = "m", text = "", fg = "#599eff" },
+# { name = "m3u", text = "", fg = "#ed95ae" },
+# { name = "m3u8", text = "", fg = "#ed95ae" },
+# { name = "m4a", text = "", fg = "#00afff" },
+# { name = "m4v", text = "", fg = "#fd971f" },
+# { name = "magnet", text = "", fg = "#a51b16" },
+# { name = "makefile", text = "", fg = "#6d8086" },
+# { name = "markdown", text = "", fg = "#dddddd" },
+# { name = "material", text = "", fg = "#b83998" },
+# { name = "md", text = "", fg = "#dddddd" },
+# { name = "md5", text = "", fg = "#8c86af" },
+# { name = "mdx", text = "", fg = "#519aba" },
+# { name = "mint", text = "", fg = "#87c095" },
+# { name = "mjs", text = "", fg = "#f1e05a" },
+# { name = "mk", text = "", fg = "#6d8086" },
+# { name = "mkv", text = "", fg = "#fd971f" },
+# { name = "ml", text = "", fg = "#e37933" },
+# { name = "mli", text = "", fg = "#e37933" },
+# { name = "mm", text = "", fg = "#519aba" },
+# { name = "mo", text = "", fg = "#9772fb" },
+# { name = "mobi", text = "", fg = "#eab16d" },
+# { name = "mojo", text = "", fg = "#ff4c1f" },
+# { name = "mov", text = "", fg = "#fd971f" },
+# { name = "mp3", text = "", fg = "#00afff" },
+# { name = "mp4", text = "", fg = "#fd971f" },
+# { name = "mpp", text = "", fg = "#519aba" },
+# { name = "msf", text = "", fg = "#137be1" },
+# { name = "mts", text = "", fg = "#519aba" },
+# { name = "mustache", text = "", fg = "#e37933" },
+# { name = "nfo", text = "", fg = "#ffffcd" },
+# { name = "nim", text = "", fg = "#f3d400" },
+# { name = "nix", text = "", fg = "#7ebae4" },
+# { name = "norg", text = "", fg = "#4878be" },
+# { name = "nswag", text = "", fg = "#85ea2d" },
+# { name = "nu", text = "", fg = "#3aa675" },
+# { name = "o", text = "", fg = "#9f0500" },
+# { name = "obj", text = "", fg = "#888888" },
+# { name = "odf", text = "", fg = "#ff5a96" },
+# { name = "odg", text = "", fg = "#fffb57" },
+# { name = "odin", text = "", fg = "#3882d2" },
+# { name = "odp", text = "", fg = "#fe9c45" },
+# { name = "ods", text = "", fg = "#78fc4e" },
+# { name = "odt", text = "", fg = "#2dcbfd" },
+# { name = "oga", text = "", fg = "#0075aa" },
+# { name = "ogg", text = "", fg = "#0075aa" },
+# { name = "ogv", text = "", fg = "#fd971f" },
+# { name = "ogx", text = "", fg = "#fd971f" },
+# { name = "opus", text = "", fg = "#0075aa" },
+# { name = "org", text = "", fg = "#77aa99" },
+# { name = "otf", text = "", fg = "#ececec" },
+# { name = "out", text = "", fg = "#9f0500" },
+# { name = "part", text = "", fg = "#44cda8" },
+# { name = "patch", text = "", fg = "#41535b" },
+# { name = "pck", text = "", fg = "#6d8086" },
+# { name = "pcm", text = "", fg = "#0075aa" },
+# { name = "pdf", text = "", fg = "#b30b00" },
+# { name = "php", text = "", fg = "#a074c4" },
+# { name = "pl", text = "", fg = "#519aba" },
+# { name = "pls", text = "", fg = "#ed95ae" },
+# { name = "ply", text = "", fg = "#888888" },
+# { name = "pm", text = "", fg = "#519aba" },
+# { name = "png", text = "", fg = "#a074c4" },
+# { name = "po", text = "", fg = "#2596be" },
+# { name = "pot", text = "", fg = "#2596be" },
+# { name = "pp", text = "", fg = "#ffa61a" },
+# { name = "ppt", text = "", fg = "#cb4a32" },
+# { name = "pptx", text = "", fg = "#cb4a32" },
+# { name = "prisma", text = "", fg = "#5a67d8" },
+# { name = "pro", text = "", fg = "#e4b854" },
+# { name = "ps1", text = "", fg = "#4273ca" },
+# { name = "psb", text = "", fg = "#519aba" },
+# { name = "psd", text = "", fg = "#519aba" },
+# { name = "psd1", text = "", fg = "#6975c4" },
+# { name = "psm1", text = "", fg = "#6975c4" },
+# { name = "pub", text = "", fg = "#e3c58e" },
+# { name = "pxd", text = "", fg = "#5aa7e4" },
+# { name = "pxi", text = "", fg = "#5aa7e4" },
+# { name = "py", text = "", fg = "#ffbc03" },
+# { name = "pyc", text = "", fg = "#ffe291" },
+# { name = "pyd", text = "", fg = "#ffe291" },
+# { name = "pyi", text = "", fg = "#ffbc03" },
+# { name = "pyo", text = "", fg = "#ffe291" },
+# { name = "pyw", text = "", fg = "#5aa7e4" },
+# { name = "pyx", text = "", fg = "#5aa7e4" },
+# { name = "qm", text = "", fg = "#2596be" },
+# { name = "qml", text = "", fg = "#40cd52" },
+# { name = "qrc", text = "", fg = "#40cd52" },
+# { name = "qss", text = "", fg = "#40cd52" },
+# { name = "query", text = "", fg = "#90a850" },
+# { name = "r", text = "", fg = "#2266ba" },
+# { name = "R", text = "", fg = "#2266ba" },
+# { name = "rake", text = "", fg = "#701516" },
+# { name = "rar", text = "", fg = "#eca517" },
+# { name = "razor", text = "", fg = "#512bd4" },
+# { name = "rb", text = "", fg = "#701516" },
+# { name = "res", text = "", fg = "#cc3e44" },
+# { name = "resi", text = "", fg = "#f55385" },
+# { name = "rlib", text = "", fg = "#dea584" },
+# { name = "rmd", text = "", fg = "#519aba" },
+# { name = "rproj", text = "", fg = "#358a5b" },
+# { name = "rs", text = "", fg = "#dea584" },
+# { name = "rss", text = "", fg = "#fb9d3b" },
+# { name = "s", text = "", fg = "#0071c5" },
+# { name = "sass", text = "", fg = "#f55385" },
+# { name = "sbt", text = "", fg = "#cc3e44" },
+# { name = "sc", text = "", fg = "#cc3e44" },
+# { name = "scad", text = "", fg = "#f9d72c" },
+# { name = "scala", text = "", fg = "#cc3e44" },
+# { name = "scm", text = "", fg = "#eeeeee" },
+# { name = "scss", text = "", fg = "#f55385" },
+# { name = "sh", text = "", fg = "#4d5a5e" },
+# { name = "sha1", text = "", fg = "#8c86af" },
+# { name = "sha224", text = "", fg = "#8c86af" },
+# { name = "sha256", text = "", fg = "#8c86af" },
+# { name = "sha384", text = "", fg = "#8c86af" },
+# { name = "sha512", text = "", fg = "#8c86af" },
+# { name = "sig", text = "", fg = "#e37933" },
+# { name = "signature", text = "", fg = "#e37933" },
+# { name = "skp", text = "", fg = "#839463" },
+# { name = "sldasm", text = "", fg = "#839463" },
+# { name = "sldprt", text = "", fg = "#839463" },
+# { name = "slim", text = "", fg = "#e34c26" },
+# { name = "sln", text = "", fg = "#854cc7" },
+# { name = "slnx", text = "", fg = "#854cc7" },
+# { name = "slvs", text = "", fg = "#839463" },
+# { name = "sml", text = "", fg = "#e37933" },
+# { name = "so", text = "", fg = "#dcddd6" },
+# { name = "sol", text = "", fg = "#519aba" },
+# { name = "spec.js", text = "", fg = "#cbcb41" },
+# { name = "spec.jsx", text = "", fg = "#20c2e3" },
+# { name = "spec.ts", text = "", fg = "#519aba" },
+# { name = "spec.tsx", text = "", fg = "#1354bf" },
+# { name = "spx", text = "", fg = "#0075aa" },
+# { name = "sql", text = "", fg = "#dad8d8" },
+# { name = "sqlite", text = "", fg = "#dad8d8" },
+# { name = "sqlite3", text = "", fg = "#dad8d8" },
+# { name = "srt", text = "", fg = "#ffb713" },
+# { name = "ssa", text = "", fg = "#ffb713" },
+# { name = "ste", text = "", fg = "#839463" },
+# { name = "step", text = "", fg = "#839463" },
+# { name = "stl", text = "", fg = "#888888" },
+# { name = "stories.js", text = "", fg = "#ff4785" },
+# { name = "stories.jsx", text = "", fg = "#ff4785" },
+# { name = "stories.mjs", text = "", fg = "#ff4785" },
+# { name = "stories.svelte", text = "", fg = "#ff4785" },
+# { name = "stories.ts", text = "", fg = "#ff4785" },
+# { name = "stories.tsx", text = "", fg = "#ff4785" },
+# { name = "stories.vue", text = "", fg = "#ff4785" },
+# { name = "stp", text = "", fg = "#839463" },
+# { name = "strings", text = "", fg = "#2596be" },
+# { name = "styl", text = "", fg = "#8dc149" },
+# { name = "sub", text = "", fg = "#ffb713" },
+# { name = "sublime", text = "", fg = "#e37933" },
+# { name = "suo", text = "", fg = "#854cc7" },
+# { name = "sv", text = "", fg = "#019833" },
+# { name = "svelte", text = "", fg = "#ff3e00" },
+# { name = "svg", text = "", fg = "#ffb13b" },
+# { name = "svgz", text = "", fg = "#ffb13b" },
+# { name = "svh", text = "", fg = "#019833" },
+# { name = "swift", text = "", fg = "#e37933" },
+# { name = "t", text = "", fg = "#519aba" },
+# { name = "tbc", text = "", fg = "#1e5cb3" },
+# { name = "tcl", text = "", fg = "#1e5cb3" },
+# { name = "templ", text = "", fg = "#dbbd30" },
+# { name = "terminal", text = "", fg = "#31b53e" },
+# { name = "test.js", text = "", fg = "#cbcb41" },
+# { name = "test.jsx", text = "", fg = "#20c2e3" },
+# { name = "test.ts", text = "", fg = "#519aba" },
+# { name = "test.tsx", text = "", fg = "#1354bf" },
+# { name = "tex", text = "", fg = "#3d6117" },
+# { name = "tf", text = "", fg = "#5f43e9" },
+# { name = "tfvars", text = "", fg = "#5f43e9" },
+# { name = "tgz", text = "", fg = "#eca517" },
+# { name = "tmpl", text = "", fg = "#dbbd30" },
+# { name = "tmux", text = "", fg = "#14ba19" },
+# { name = "toml", text = "", fg = "#9c4221" },
+# { name = "torrent", text = "", fg = "#44cda8" },
+# { name = "tres", text = "", fg = "#6d8086" },
+# { name = "ts", text = "", fg = "#519aba" },
+# { name = "tscn", text = "", fg = "#6d8086" },
+# { name = "tsconfig", text = "", fg = "#ff8700" },
+# { name = "tsx", text = "", fg = "#1354bf" },
+# { name = "ttf", text = "", fg = "#ececec" },
+# { name = "twig", text = "", fg = "#8dc149" },
+# { name = "txt", text = "", fg = "#89e051" },
+# { name = "txz", text = "", fg = "#eca517" },
+# { name = "typ", text = "", fg = "#0dbcc0" },
+# { name = "typoscript", text = "", fg = "#ff8700" },
+# { name = "ui", text = "", fg = "#015bf0" },
+# { name = "v", text = "", fg = "#019833" },
+# { name = "vala", text = "", fg = "#7b3db9" },
+# { name = "vh", text = "", fg = "#019833" },
+# { name = "vhd", text = "", fg = "#019833" },
+# { name = "vhdl", text = "", fg = "#019833" },
+# { name = "vi", text = "", fg = "#fec60a" },
+# { name = "vim", text = "", fg = "#019833" },
+# { name = "vsh", text = "", fg = "#5d87bf" },
+# { name = "vsix", text = "", fg = "#854cc7" },
+# { name = "vue", text = "", fg = "#8dc149" },
+# { name = "wasm", text = "", fg = "#5c4cdb" },
+# { name = "wav", text = "", fg = "#00afff" },
+# { name = "webm", text = "", fg = "#fd971f" },
+# { name = "webmanifest", text = "", fg = "#f1e05a" },
+# { name = "webp", text = "", fg = "#a074c4" },
+# { name = "webpack", text = "", fg = "#519aba" },
+# { name = "wma", text = "", fg = "#00afff" },
+# { name = "woff", text = "", fg = "#ececec" },
+# { name = "woff2", text = "", fg = "#ececec" },
+# { name = "wrl", text = "", fg = "#888888" },
+# { name = "wrz", text = "", fg = "#888888" },
+# { name = "wv", text = "", fg = "#00afff" },
+# { name = "wvc", text = "", fg = "#00afff" },
+# { name = "x", text = "", fg = "#599eff" },
+# { name = "xaml", text = "", fg = "#512bd4" },
+# { name = "xcf", text = "", fg = "#635b46" },
+# { name = "xcplayground", text = "", fg = "#e37933" },
+# { name = "xcstrings", text = "", fg = "#2596be" },
+# { name = "xls", text = "", fg = "#207245" },
+# { name = "xlsx", text = "", fg = "#207245" },
+# { name = "xm", text = "", fg = "#519aba" },
+# { name = "xml", text = "", fg = "#e37933" },
+# { name = "xpi", text = "", fg = "#ff1b01" },
+# { name = "xul", text = "", fg = "#e37933" },
+# { name = "xz", text = "", fg = "#eca517" },
+# { name = "yaml", text = "", fg = "#6d8086" },
+# { name = "yml", text = "", fg = "#6d8086" },
+# { name = "zig", text = "", fg = "#f69a1b" },
+# { name = "zip", text = "", fg = "#eca517" },
+# { name = "zsh", text = "", fg = "#89e051" },
+# { name = "zst", text = "", fg = "#eca517" },
+# { name = "🔥", text = "", fg = "#ff4c1f" },
+# ]
+# conds = [
+# # Special files
+# { if = "orphan", text = "" },
+# { if = "link", text = "" },
+# { if = "block", text = "" },
+# { if = "char", text = "" },
+# { if = "fifo", text = "" },
+# { if = "sock", text = "" },
+# { if = "sticky", text = "" },
+# { if = "dummy", text = "" },
+#
+# # Fallback
+# { if = "dir", text = "" },
+# { if = "exec", text = "" },
+# { if = "!dir", text = "" },
+# ]
+#
+# # : }}}
diff --git a/yazi/yazi.toml b/yazi/yazi.toml
new file mode 100644
index 0000000..6af18ed
--- /dev/null
+++ b/yazi/yazi.toml
@@ -0,0 +1,223 @@
+# 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 = [ 2, 3, 3 ]
+sort_by = "alphabetical"
+sort_sensitive = false
+sort_reverse = false
+sort_dir_first = true
+sort_translit = false
+linemode = "none"
+show_hidden = false
+show_symlink = true
+scrolloff = 5
+mouse_events = [ "click", "scroll" ]
+title_format = "Yazi: {cwd}"
+
+[preview]
+wrap = "no"
+tab_size = 2
+max_width = 600
+max_height = 900
+cache_dir = ""
+image_delay = 30
+image_filter = "triangle"
+image_quality = 75
+ueberzug_scale = 1
+ueberzug_offset = [ 0, 0, 0, 0 ]
+
+[opener]
+edit = [
+ { run = '${EDITOR:-vi} "$@"', 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 = '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" },
+]
+
+[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 = [ "open", "reveal" ] },
+]
+
+[tasks]
+micro_workers = 10
+macro_workers = 10
+bizarre_retry = 3
+image_alloc = 536870912 # 512MB
+image_bound = [ 5000, 5000 ]
+suppress_preload = false
+
+[plugin]
+fetchers = [
+ # Mimetype
+ { id = "mime", name = "*", run = "mime", 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 = "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" },
+]
+
+[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/yt-dlp/config b/yt-dlp/config
index 39b7d5b..420d96d 100644
--- a/yt-dlp/config
+++ b/yt-dlp/config
@@ -18,7 +18,8 @@
# This example tries to get the best video up to 1080p with the best audio.
# If a combined stream is not available, it merges the best separate streams.
# 'best' is a fallback if nothing else matches.
--f "bestvideo[height<=1080]+bestaudio/best"
+-f "bestvideo/best+bestaudio/best"
+# -f "bestvideo[height<=2160][fps>=50]+bestvideo[height>=1000]+bestaudio/best"
# -----------------