diff --git a/README.md b/README.md index 99545f2..d6346dd 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,6 @@ This repository contains my configuration files for the following tools: - **Shells & Prompt** - `zsh` + `starship` - **Terminal Emulator & Multiplexer** - - `foot` - `kitty` - `tmux` - **Editors & CLI Tools** @@ -32,14 +31,11 @@ This repository contains my configuration files for the following tools: - `lazygit` - `lazydocker` - `k9s` -- **Wayland Environment** - - `fuzzel` (launcher) - - `waybar` (status bar) - - `mako` (notification daemon) - - `sway` (window manager) - **Utilities** - `fastfetch` - `zoxide` + - `mpv` + - `yt-dlp` --- diff --git a/foot/.config/foot/foot.ini b/foot/.config/foot/foot.ini deleted file mode 100644 index 952d691..0000000 --- a/foot/.config/foot/foot.ini +++ /dev/null @@ -1,68 +0,0 @@ -# === General settings === -[main] -shell=/bin/zsh # Default shell to launch in the terminal -font=FiraCode Nerd Font:size=14 # Font family and size used in the terminal -initial-window-size-chars=160x45 # Initial size in character columns x rows -selection-target=clipboard # Copy selected text directly to system clipboard -term=foot # Terminal type identifier (useful for compatibility) -pad=8x8 # Adds 8-pixel padding around the content (horizontal x vertical) - -# === Mouse settings === -[mouse] -hide-when-typing=yes # Automatically hide the mouse cursor while typing -alternate-scroll-mode=no # Preserves scrollback history when applications exit (does not use alternate screen buffer) - -# === Scrollback bar indicator settings === -[scrollback] -lines=10000 # Number of scrollback lines to keep in history -indicator-format=percentage # Format of scroll indicator (e.g., "50%") - -# === Key bindings === -[key-bindings] -scrollback-up-page=Shift+Page_Up # Scroll up one page -scrollback-down-page=Shift+Page_Down # Scroll down one page -clipboard-copy=Control+Shift+c # Copy selected text to clipboard -clipboard-paste=Control+Shift+v # Paste from clipboard -show-urls-launch=Control+Shift+o # Detects and allows launching URLs found in the terminal output - -# === Cursor appearance === -[cursor] -style=beam # Beam-style (vertical bar) cursor -blink=true # Cursor should blink -beam-thickness=3 # Thickness of the beam cursor -color=11111b f5e0dc # Cursor color (background and foreground) - -# === Catppuccin Mocha color scheme === -[colors] -foreground=cdd6f4 # Default text color -background=1e1e2e # Main terminal background color - -regular0=45475a # ANSI Black/Grey -regular1=f38ba8 # ANSI Red -regular2=a6e3a1 # ANSI Green -regular3=f9e2af # ANSI Yellow -regular4=89b4fa # ANSI Blue -regular5=f5c2e7 # ANSI Magenta -regular6=94e2d5 # ANSI Cyan -regular7=bac2de # ANSI White/Light Grey - -bright0=585b70 # Bright ANSI Black/Grey -bright1=f38ba8 # Bright ANSI Red -bright2=a6e3a1 # Bright ANSI Green -bright3=f9e2af # Bright ANSI Yellow -bright4=89b4fa # Bright ANSI Blue -bright5=f5c2e7 # Bright ANSI Magenta -bright6=94e2d5 # Bright ANSI Cyan -bright7=a6adc8 # Bright ANSI White/Light Grey - -16=fab387 # Extended color 16 (Orange-like) -17=f5e0dc # Extended color 17 (Pink/Cream-like) - -selection-foreground=cdd6f4 # Color of selected text -selection-background=414356 # Background color of selected text - -search-box-no-match=11111b f38ba8 # Colors for search box when no match is found -search-box-match=cdd6f0 313244 # Colors for search box when a match is found - -jump-labels=11111b fab387 # Colors for jump labels (e.g., in URL launcher) -urls=89b4fa # Color for detected URLs diff --git a/fuzzel/.config/fuzzel/fuzzel.ini b/fuzzel/.config/fuzzel/fuzzel.ini deleted file mode 100644 index ab95e09..0000000 --- a/fuzzel/.config/fuzzel/fuzzel.ini +++ /dev/null @@ -1,22 +0,0 @@ -[main] -font=FiraCode Nerd Font:size=12 -icon-theme=Papirus -dpi-aware=yes -include=~/.config/fuzzel/themes/catppuccin-mocha/blue.ini -hide-before-typing=no -fields=filename,name,generic -match-mode=fzf -sort-result=yes -match-counter=yes -show-actions=no -anchor = center -x-margin=0 -y-margin=0 -lines=10 -width = 70 -tabs=4 -horizontal-pad=40 -vertical-pad=8 -inner-pad=0 -layer=overlay # values (top, overlay) - diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/blue.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/blue.ini deleted file mode 100644 index ed78ea1..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/blue.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=8caaeeff -selection=626880ff -selection-text=c6d0f5ff -selection-match=8caaeeff -counter=838ba7ff -border=8caaeeff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/flamingo.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/flamingo.ini deleted file mode 100644 index a9b606c..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/flamingo.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=eebebeff -selection=626880ff -selection-text=c6d0f5ff -selection-match=eebebeff -counter=838ba7ff -border=eebebeff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/green.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/green.ini deleted file mode 100644 index e36fbf6..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/green.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=a6d189ff -selection=626880ff -selection-text=c6d0f5ff -selection-match=a6d189ff -counter=838ba7ff -border=a6d189ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/lavender.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/lavender.ini deleted file mode 100644 index 6cdaea4..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/lavender.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=babbf1ff -selection=626880ff -selection-text=c6d0f5ff -selection-match=babbf1ff -counter=838ba7ff -border=babbf1ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/maroon.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/maroon.ini deleted file mode 100644 index 9910976..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/maroon.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=ea999cff -selection=626880ff -selection-text=c6d0f5ff -selection-match=ea999cff -counter=838ba7ff -border=ea999cff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/mauve.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/mauve.ini deleted file mode 100644 index 56ef194..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/mauve.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=ca9ee6ff -selection=626880ff -selection-text=c6d0f5ff -selection-match=ca9ee6ff -counter=838ba7ff -border=ca9ee6ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/peach.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/peach.ini deleted file mode 100644 index c05d46b..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/peach.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=ef9f76ff -selection=626880ff -selection-text=c6d0f5ff -selection-match=ef9f76ff -counter=838ba7ff -border=ef9f76ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/pink.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/pink.ini deleted file mode 100644 index 86613ce..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/pink.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=f4b8e4ff -selection=626880ff -selection-text=c6d0f5ff -selection-match=f4b8e4ff -counter=838ba7ff -border=f4b8e4ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/red.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/red.ini deleted file mode 100644 index d7f150b..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/red.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=e78284ff -selection=626880ff -selection-text=c6d0f5ff -selection-match=e78284ff -counter=838ba7ff -border=e78284ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/rosewater.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/rosewater.ini deleted file mode 100644 index 562fc4b..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/rosewater.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=f2d5cfff -selection=626880ff -selection-text=c6d0f5ff -selection-match=f2d5cfff -counter=838ba7ff -border=f2d5cfff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/sapphire.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/sapphire.ini deleted file mode 100644 index 7afb2bb..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/sapphire.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=85c1dcff -selection=626880ff -selection-text=c6d0f5ff -selection-match=85c1dcff -counter=838ba7ff -border=85c1dcff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/sky.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/sky.ini deleted file mode 100644 index 4717d7b..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/sky.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=99d1dbff -selection=626880ff -selection-text=c6d0f5ff -selection-match=99d1dbff -counter=838ba7ff -border=99d1dbff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/teal.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/teal.ini deleted file mode 100644 index 785b17d..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/teal.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=81c8beff -selection=626880ff -selection-text=c6d0f5ff -selection-match=81c8beff -counter=838ba7ff -border=81c8beff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/yellow.ini b/fuzzel/.config/fuzzel/themes/catppuccin-frappe/yellow.ini deleted file mode 100644 index a2eae4c..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-frappe/yellow.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=303446dd -text=c6d0f5ff -prompt=b5bfe2ff -placeholder=838ba7ff -input=c6d0f5ff -match=e5c890ff -selection=626880ff -selection-text=c6d0f5ff -selection-match=e5c890ff -counter=838ba7ff -border=e5c890ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/blue.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/blue.ini deleted file mode 100644 index c1ad804..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/blue.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=1e66f5ff -selection=acb0beff -selection-text=4c4f69ff -selection-match=1e66f5ff -counter=8c8fa1ff -border=1e66f5ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/flamingo.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/flamingo.ini deleted file mode 100644 index 027f212..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/flamingo.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=dd7878ff -selection=acb0beff -selection-text=4c4f69ff -selection-match=dd7878ff -counter=8c8fa1ff -border=dd7878ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/green.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/green.ini deleted file mode 100644 index 4065e87..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/green.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=40a02bff -selection=acb0beff -selection-text=4c4f69ff -selection-match=40a02bff -counter=8c8fa1ff -border=40a02bff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/lavender.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/lavender.ini deleted file mode 100644 index 3c92b88..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/lavender.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=7287fdff -selection=acb0beff -selection-text=4c4f69ff -selection-match=7287fdff -counter=8c8fa1ff -border=7287fdff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/maroon.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/maroon.ini deleted file mode 100644 index c8dae37..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/maroon.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=e64553ff -selection=acb0beff -selection-text=4c4f69ff -selection-match=e64553ff -counter=8c8fa1ff -border=e64553ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/mauve.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/mauve.ini deleted file mode 100644 index 249ab46..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/mauve.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=8839efff -selection=acb0beff -selection-text=4c4f69ff -selection-match=8839efff -counter=8c8fa1ff -border=8839efff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/peach.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/peach.ini deleted file mode 100644 index c45981d..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/peach.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=fe640bff -selection=acb0beff -selection-text=4c4f69ff -selection-match=fe640bff -counter=8c8fa1ff -border=fe640bff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/pink.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/pink.ini deleted file mode 100644 index 38c04ee..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/pink.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=ea76cbff -selection=acb0beff -selection-text=4c4f69ff -selection-match=ea76cbff -counter=8c8fa1ff -border=ea76cbff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/red.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/red.ini deleted file mode 100644 index 36fb973..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/red.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=d20f39ff -selection=acb0beff -selection-text=4c4f69ff -selection-match=d20f39ff -counter=8c8fa1ff -border=d20f39ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/rosewater.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/rosewater.ini deleted file mode 100644 index 25a53ef..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/rosewater.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=dc8a78ff -selection=acb0beff -selection-text=4c4f69ff -selection-match=dc8a78ff -counter=8c8fa1ff -border=dc8a78ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/sapphire.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/sapphire.ini deleted file mode 100644 index be92da0..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/sapphire.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=209fb5ff -selection=acb0beff -selection-text=4c4f69ff -selection-match=209fb5ff -counter=8c8fa1ff -border=209fb5ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/sky.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/sky.ini deleted file mode 100644 index 4d0fa89..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/sky.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=04a5e5ff -selection=acb0beff -selection-text=4c4f69ff -selection-match=04a5e5ff -counter=8c8fa1ff -border=04a5e5ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/teal.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/teal.ini deleted file mode 100644 index 59e1c4b..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/teal.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=179299ff -selection=acb0beff -selection-text=4c4f69ff -selection-match=179299ff -counter=8c8fa1ff -border=179299ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-latte/yellow.ini b/fuzzel/.config/fuzzel/themes/catppuccin-latte/yellow.ini deleted file mode 100644 index 8c5d300..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-latte/yellow.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=eff1f5dd -text=4c4f69ff -prompt=5c5f77ff -placeholder=8c8fa1ff -input=4c4f69ff -match=df8e1dff -selection=acb0beff -selection-text=4c4f69ff -selection-match=df8e1dff -counter=8c8fa1ff -border=df8e1dff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/blue.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/blue.ini deleted file mode 100644 index 20c6dec..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/blue.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=8aadf4ff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=8aadf4ff -counter=8087a2ff -border=8aadf4ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/flamingo.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/flamingo.ini deleted file mode 100644 index 104e37f..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/flamingo.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=f0c6c6ff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=f0c6c6ff -counter=8087a2ff -border=f0c6c6ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/green.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/green.ini deleted file mode 100644 index 859bd9e..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/green.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=a6da95ff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=a6da95ff -counter=8087a2ff -border=a6da95ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/lavender.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/lavender.ini deleted file mode 100644 index 2959faa..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/lavender.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=b7bdf8ff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=b7bdf8ff -counter=8087a2ff -border=b7bdf8ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/maroon.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/maroon.ini deleted file mode 100644 index 9332140..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/maroon.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=ee99a0ff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=ee99a0ff -counter=8087a2ff -border=ee99a0ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/mauve.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/mauve.ini deleted file mode 100644 index b465c83..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/mauve.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=c6a0f6ff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=c6a0f6ff -counter=8087a2ff -border=c6a0f6ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/peach.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/peach.ini deleted file mode 100644 index 08068f8..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/peach.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=f5a97fff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=f5a97fff -counter=8087a2ff -border=f5a97fff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/pink.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/pink.ini deleted file mode 100644 index 061066e..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/pink.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=f5bde6ff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=f5bde6ff -counter=8087a2ff -border=f5bde6ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/red.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/red.ini deleted file mode 100644 index 0bf6a7d..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/red.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=ed8796ff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=ed8796ff -counter=8087a2ff -border=ed8796ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/rosewater.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/rosewater.ini deleted file mode 100644 index f31584d..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/rosewater.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=f4dbd6ff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=f4dbd6ff -counter=8087a2ff -border=f4dbd6ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/sapphire.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/sapphire.ini deleted file mode 100644 index c057cea..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/sapphire.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=7dc4e4ff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=7dc4e4ff -counter=8087a2ff -border=7dc4e4ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/sky.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/sky.ini deleted file mode 100644 index 28f2241..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/sky.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=91d7e3ff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=91d7e3ff -counter=8087a2ff -border=91d7e3ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/teal.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/teal.ini deleted file mode 100644 index a58a6fe..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/teal.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=8bd5caff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=8bd5caff -counter=8087a2ff -border=8bd5caff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/yellow.ini b/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/yellow.ini deleted file mode 100644 index a980df8..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-macchiato/yellow.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=24273add -text=cad3f5ff -prompt=b8c0e0ff -placeholder=8087a2ff -input=cad3f5ff -match=eed49fff -selection=5b6078ff -selection-text=cad3f5ff -selection-match=eed49fff -counter=8087a2ff -border=eed49fff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/blue.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/blue.ini deleted file mode 100644 index f6ce89a..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/blue.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=89b4faff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=89b4faff -counter=7f849cff -border=89b4faff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/flamingo.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/flamingo.ini deleted file mode 100644 index 95670c5..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/flamingo.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=f2cdcdff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=f2cdcdff -counter=7f849cff -border=f2cdcdff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/green.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/green.ini deleted file mode 100644 index e66672e..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/green.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=a6e3a1ff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=a6e3a1ff -counter=7f849cff -border=a6e3a1ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/lavender.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/lavender.ini deleted file mode 100644 index 2070fc5..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/lavender.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=b4befeff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=b4befeff -counter=7f849cff -border=b4befeff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/maroon.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/maroon.ini deleted file mode 100644 index 0fb3c40..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/maroon.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=eba0acff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=eba0acff -counter=7f849cff -border=eba0acff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/mauve.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/mauve.ini deleted file mode 100644 index f4749a8..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/mauve.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=cba6f7ff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=cba6f7ff -counter=7f849cff -border=cba6f7ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/peach.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/peach.ini deleted file mode 100644 index 7ed3f73..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/peach.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=fab387ff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=fab387ff -counter=7f849cff -border=fab387ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/pink.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/pink.ini deleted file mode 100644 index fb30292..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/pink.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=f5c2e7ff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=f5c2e7ff -counter=7f849cff -border=f5c2e7ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/red.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/red.ini deleted file mode 100644 index fcea05d..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/red.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=f38ba8ff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=f38ba8ff -counter=7f849cff -border=f38ba8ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/rosewater.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/rosewater.ini deleted file mode 100644 index e79bfdb..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/rosewater.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=f5e0dcff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=f5e0dcff -counter=7f849cff -border=f5e0dcff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/sapphire.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/sapphire.ini deleted file mode 100644 index 2d7ab23..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/sapphire.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=74c7ecff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=74c7ecff -counter=7f849cff -border=74c7ecff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/sky.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/sky.ini deleted file mode 100644 index 101d896..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/sky.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=89dcebff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=89dcebff -counter=7f849cff -border=89dcebff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/teal.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/teal.ini deleted file mode 100644 index 4fb9507..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/teal.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=94e2d5ff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=94e2d5ff -counter=7f849cff -border=94e2d5ff diff --git a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/yellow.ini b/fuzzel/.config/fuzzel/themes/catppuccin-mocha/yellow.ini deleted file mode 100644 index a9959a1..0000000 --- a/fuzzel/.config/fuzzel/themes/catppuccin-mocha/yellow.ini +++ /dev/null @@ -1,12 +0,0 @@ -[colors] -background=1e1e2edd -text=cdd6f4ff -prompt=bac2deff -placeholder=7f849cff -input=cdd6f4ff -match=f9e2afff -selection=585b70ff -selection-text=cdd6f4ff -selection-match=f9e2afff -counter=7f849cff -border=f9e2afff diff --git a/lazyvim/.config/nvim/lazy-lock.json b/lazyvim/.config/nvim/lazy-lock.json index 38eeade..2c34cbd 100644 --- a/lazyvim/.config/nvim/lazy-lock.json +++ b/lazyvim/.config/nvim/lazy-lock.json @@ -1,16 +1,16 @@ { "LazyVim": { "branch": "main", "commit": "25abbf546d564dc484cf903804661ba12de45507" }, - "SchemaStore.nvim": { "branch": "main", "commit": "c957914d75b4a008ce09f4116e57e59fe6e3fae1" }, + "SchemaStore.nvim": { "branch": "main", "commit": "67d6c391e9a372d2d8701b5b8c9ae89455561fbf" }, "alpha-nvim": { "branch": "main", "commit": "2b3cbcdd980cae1e022409289245053f62fb50f6" }, "blink.cmp": { "branch": "main", "commit": "bae4bae0eedd1fa55f34b685862e94a222d5c6f8" }, "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, - "catppuccin": { "branch": "main", "commit": "e762a47478377612e59f01aa51db961f605c9aa4" }, + "catppuccin": { "branch": "main", "commit": "84336e08415858f6d835835e81a4f79e585463c6" }, "conform.nvim": { "branch": "master", "commit": "973f3cb73887d510321653044791d7937c7ec0fa" }, "crates.nvim": { "branch": "main", "commit": "c915ab5334a46178f64ce17ab606a79454bcd14f" }, "flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" }, "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, - "fzf-lua": { "branch": "main", "commit": "accfef9ddb36a79bd2b41f5dcebd36dddcaf8c79" }, - "gitsigns.nvim": { "branch": "main", "commit": "1fcaddcc427ff5802b6602f46de37a5352d0f9e0" }, + "fzf-lua": { "branch": "main", "commit": "c9a2deb7bf2d8deaf56a229ff9c7bfeffa8d7d53" }, + "gitsigns.nvim": { "branch": "main", "commit": "b01433169be710d6c69f7b4ee264d9670698b831" }, "glow.nvim": { "branch": "main", "commit": "5d5954b2f22e109d4a6eba8b2618c5b96e4ee7a2" }, "grug-far.nvim": { "branch": "main", "commit": "45981a9af7f4e666a3cdaedb1d21d2ab926727a2" }, "hydra.nvim": { "branch": "main", "commit": "8c4a9f621ec7cdc30411a1f3b6d5eebb12b469dc" }, @@ -24,18 +24,18 @@ "mini.icons": { "branch": "main", "commit": "b8f6fa6f5a3fd0c56936252edcd691184e5aac0c" }, "mini.pairs": { "branch": "main", "commit": "1e1ca3f60f58d4050bf814902b472eec9963a5dd" }, "multicursors.nvim": { "branch": "main", "commit": "72225ea9e4443c3f4b9df91d0193e07c4ee8d382" }, - "neo-tree.nvim": { "branch": "main", "commit": "b85cc7611ff8fb443b0a1591c53669ead195a826" }, + "neo-tree.nvim": { "branch": "main", "commit": "e858a443813097cba43524a6321e3976b14ec75d" }, "noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" }, "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, "nvim-lint": { "branch": "master", "commit": "9c6207559297b24f0b7c32829f8e45f7d65b991f" }, - "nvim-lspconfig": { "branch": "master", "commit": "169745f176f58becad80363c3f8f2315ed6bb365" }, + "nvim-lspconfig": { "branch": "master", "commit": "4d3b3bb8815fbe37bcaf3dbdb12a22382bc11ebe" }, "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, "nvim-treesitter-textobjects": { "branch": "master", "commit": "89ebe73cd2836db80a22d9748999ace0241917a5" }, "nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" }, "persistence.nvim": { "branch": "main", "commit": "166a79a55bfa7a4db3e26fc031b4d92af71d0b51" }, - "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, + "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, "refactoring.nvim": { "branch": "master", "commit": "74b608dfee827c2372250519d433cc21cb083407" }, - "rustaceanvim": { "branch": "master", "commit": "628ff0137003d2ff245a06aff101142a5c88391e" }, + "rustaceanvim": { "branch": "master", "commit": "f845bb055397019c4bc70f9c76376ca490f4c783" }, "snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" }, "telescope-file-browser.nvim": { "branch": "master", "commit": "7bf55ed0ff5be182ad3301cff266581fc1c56cce" }, "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" }, diff --git a/mako/.config/mako/config b/mako/.config/mako/config deleted file mode 100644 index 6043042..0000000 --- a/mako/.config/mako/config +++ /dev/null @@ -1,38 +0,0 @@ -# Global configuration options -max-history=10 -sort=-time - -# Binding options -on-button-left=invoke-default-action -on-button-middle=none -on-button-right=dismiss -on-touch=dismiss -on-notify=none - -# Style options -font=FiraCode Nerd Font 10 -width=400 -height=100 -outer-margin=0 -margin= 20 -padding=12 -border-size=2 -border-radius=4 -icons=1 -max-icon-size=48 -icon-location=left -icon-border-radius=0 -actions=1 -history=1 -text-alignment=left -default-timeout=5000 -ignore-timeout=0 -max-visible=3 -output=* -layer=overlay -anchor=top-right -group-by=app-name - -# Includes section -include=~/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-blue - diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-blue b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-blue deleted file mode 100644 index bfaa2cd..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-blue +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#8caaee -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-flamingo b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-flamingo deleted file mode 100644 index 7620a11..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-flamingo +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#eebebe -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-green b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-green deleted file mode 100644 index dc11511..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-green +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#a6d189 -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-lavender b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-lavender deleted file mode 100644 index e71c05a..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-lavender +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#babbf1 -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-maroon b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-maroon deleted file mode 100644 index 62c7608..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-maroon +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#ea999c -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-mauve b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-mauve deleted file mode 100644 index 0eb47ef..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-mauve +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#ca9ee6 -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-peach b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-peach deleted file mode 100644 index a985560..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-peach +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#ef9f76 -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-pink b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-pink deleted file mode 100644 index 8d18cae..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-pink +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#f4b8e4 -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-red b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-red deleted file mode 100644 index 82afc30..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-red +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#e78284 -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-rosewater b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-rosewater deleted file mode 100644 index b2a322b..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-rosewater +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#f2d5cf -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-sapphire b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-sapphire deleted file mode 100644 index c320aae..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-sapphire +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#85c1dc -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-sky b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-sky deleted file mode 100644 index ab787d2..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-sky +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#99d1db -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-teal b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-teal deleted file mode 100644 index 0a69ca2..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-teal +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#81c8be -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-yellow b/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-yellow deleted file mode 100644 index 234288d..0000000 --- a/mako/.config/mako/themes/catppuccin-frappe/catppuccin-frappe-yellow +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#303446 -text-color=#c6d0f5 -border-color=#e5c890 -progress-color=over #414559 - -[urgency=high] -border-color=#ef9f76 diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-blue b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-blue deleted file mode 100644 index 994bc8d..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-blue +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#1e66f5 -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-flamingo b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-flamingo deleted file mode 100644 index 0fa7988..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-flamingo +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#dd7878 -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-green b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-green deleted file mode 100644 index 50c592c..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-green +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#40a02b -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-lavender b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-lavender deleted file mode 100644 index 4e9d5d3..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-lavender +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#7287fd -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-maroon b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-maroon deleted file mode 100644 index 0ccb2b6..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-maroon +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#e64553 -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-mauve b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-mauve deleted file mode 100644 index cf91cdb..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-mauve +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#8839ef -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-peach b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-peach deleted file mode 100644 index a76858f..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-peach +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#fe640b -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-pink b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-pink deleted file mode 100644 index f873703..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-pink +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#ea76cb -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-red b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-red deleted file mode 100644 index b825052..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-red +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#d20f39 -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-rosewater b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-rosewater deleted file mode 100644 index 8a5da7d..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-rosewater +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#dc8a78 -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-sapphire b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-sapphire deleted file mode 100644 index ae0e859..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-sapphire +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#209fb5 -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-sky b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-sky deleted file mode 100644 index 5379fe2..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-sky +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#04a5e5 -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-teal b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-teal deleted file mode 100644 index d4b79c5..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-teal +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#179299 -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-yellow b/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-yellow deleted file mode 100644 index 6209f89..0000000 --- a/mako/.config/mako/themes/catppuccin-latte/catppuccin-latte-yellow +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#eff1f5 -text-color=#4c4f69 -border-color=#df8e1d -progress-color=over #ccd0da - -[urgency=high] -border-color=#fe640b diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-blue b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-blue deleted file mode 100644 index ba13b0e..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-blue +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#8aadf4 -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-flamingo b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-flamingo deleted file mode 100644 index 07614a8..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-flamingo +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#f0c6c6 -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-green b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-green deleted file mode 100644 index 6d157f6..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-green +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#a6da95 -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-lavender b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-lavender deleted file mode 100644 index 831011f..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-lavender +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#b7bdf8 -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-maroon b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-maroon deleted file mode 100644 index b2b1840..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-maroon +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#ee99a0 -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-mauve b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-mauve deleted file mode 100644 index 859e262..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-mauve +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#c6a0f6 -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-peach b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-peach deleted file mode 100644 index a7de568..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-peach +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#f5a97f -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-pink b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-pink deleted file mode 100644 index 38c13cc..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-pink +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#f5bde6 -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-red b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-red deleted file mode 100644 index 3bdf3da..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-red +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#ed8796 -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-rosewater b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-rosewater deleted file mode 100644 index 4bd9426..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-rosewater +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#f4dbd6 -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-sapphire b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-sapphire deleted file mode 100644 index 68fbbbc..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-sapphire +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#7dc4e4 -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-sky b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-sky deleted file mode 100644 index 1b9cf44..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-sky +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#91d7e3 -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-teal b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-teal deleted file mode 100644 index 42e270a..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-teal +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#8bd5ca -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-yellow b/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-yellow deleted file mode 100644 index c2892dc..0000000 --- a/mako/.config/mako/themes/catppuccin-macchiato/catppuccin-macchiato-yellow +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#24273a -text-color=#cad3f5 -border-color=#eed49f -progress-color=over #363a4f - -[urgency=high] -border-color=#f5a97f diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-blue b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-blue deleted file mode 100644 index 60ce5c1..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-blue +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#89b4fa -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-flamingo b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-flamingo deleted file mode 100644 index 5c4ddb5..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-flamingo +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#f2cdcd -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-green b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-green deleted file mode 100644 index 262b5b5..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-green +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#a6e3a1 -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-lavender b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-lavender deleted file mode 100644 index 717e84a..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-lavender +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#b4befe -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-maroon b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-maroon deleted file mode 100644 index bb3f4cf..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-maroon +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#eba0ac -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-mauve b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-mauve deleted file mode 100644 index 4959ef6..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-mauve +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#cba6f7 -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-peach b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-peach deleted file mode 100644 index 180c12e..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-peach +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#fab387 -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-pink b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-pink deleted file mode 100644 index ebf6ace..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-pink +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#f5c2e7 -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-red b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-red deleted file mode 100644 index 9c7ec01..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-red +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#f38ba8 -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-rosewater b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-rosewater deleted file mode 100644 index 53a7306..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-rosewater +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#f5e0dc -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-sapphire b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-sapphire deleted file mode 100644 index fd01684..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-sapphire +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#74c7ec -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-sky b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-sky deleted file mode 100644 index eecb4b6..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-sky +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#89dceb -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-teal b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-teal deleted file mode 100644 index 68016ad..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-teal +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#94e2d5 -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-yellow b/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-yellow deleted file mode 100644 index 54b1e7c..0000000 --- a/mako/.config/mako/themes/catppuccin-mocha/catppuccin-mocha-yellow +++ /dev/null @@ -1,9 +0,0 @@ -# Colors - -background-color=#1e1e2e -text-color=#cdd6f4 -border-color=#f9e2af -progress-color=over #313244 - -[urgency=high] -border-color=#fab387 diff --git a/mpd/.config/mpd/database b/mpd/.config/mpd/database new file mode 100644 index 0000000..b2e593e Binary files /dev/null and b/mpd/.config/mpd/database differ diff --git a/mpd/.config/mpd/mpd.conf b/mpd/.config/mpd/mpd.conf new file mode 100644 index 0000000..06f5d8d --- /dev/null +++ b/mpd/.config/mpd/mpd.conf @@ -0,0 +1,435 @@ + +# An example configuration file for MPD. +# Read the user manual for documentation: http://www.musicpd.org/doc/user/ + + +# Files and directories ####################################################### +# +# This setting controls the top directory which MPD will search to discover the +# available audio files and add them to the daemon's online database. This +# setting defaults to the XDG directory, otherwise the music directory will be +# be disabled and audio files will only be accepted over ipc socket (using +# file:// protocol) or streaming files over an accepted protocol. +# +#music_directory "~/music" +music_directory "~/Music" +# +# This setting sets the MPD internal playlist directory. The purpose of this +# directory is storage for playlists created by MPD. The server will use +# playlist files not created by the server but only if they are in the MPD +# format. This setting defaults to playlist saving being disabled. +# +#playlist_directory "~/.mpd/playlists" +playlist_directory "~/.config/mpd/playlists" +# +# This setting sets the location of the MPD database. This file is used to +# load the database at server start up and store the database while the +# server is not up. This setting defaults to disabled which will allow +# MPD to accept files over ipc socket (using file:// protocol) or streaming +# files over an accepted protocol. +# +db_file "~/.config/mpd/database" +#db_file "~/.mpd/database" + +# These settings are the locations for the daemon log files for the daemon. +# +# The special value "syslog" makes MPD use the local syslog daemon. This +# setting defaults to logging to syslog. +# +# If you use systemd, do not configure a log_file. With systemd, MPD +# defaults to the systemd journal, which is fine. +# +#log_file "~/.mpd/log" + +# This setting sets the location of the file which stores the process ID +# for use of mpd --kill and some init scripts. This setting is disabled by +# default and the pid file will not be stored. +# +# If you use systemd, do not configure a pid_file. +# +#pid_file "~/.mpd/pid" +pid_file "~/.config/mpd/pid" + +# This setting sets the location of the file which contains information about +# most variables to get MPD back into the same general shape it was in before +# it was brought down. This setting is disabled by default and the server +# state will be reset on server start up. +# +#state_file "~/.mpd/state" +state_file "~/.config/mpd/state" +# +# The location of the sticker database. This is a database which +# manages dynamic information attached to songs. +# +#sticker_file "~/.mpd/sticker.sql" +sticker_file "~/.config/mpd/sticker.sql" +# +############################################################################### + + +# General music daemon options ################################################ +# +# This setting specifies the user that MPD will run as. MPD should never run as +# root and you may use this setting to make MPD change its user ID after +# initialization. This setting is disabled by default and MPD is run as the +# current user. +# +#user "nobody" +# +# This setting specifies the group that MPD will run as. If not specified +# primary group of user specified with "user" setting will be used (if set). +# This is useful if MPD needs to be a member of group such as "audio" to +# have permission to use sound card. +# +#group "nogroup" +# +# This setting sets the address for the daemon to listen on. Careful attention +# should be paid if this is assigned to anything other than the default, any. +# This setting can deny access to control of the daemon. Not effective if +# systemd socket activation is in use. +# +# For network +#bind_to_address "any" +# +# And for Unix Socket +#bind_to_address "~/.mpd/socket" +# +# This setting is the TCP port that is desired for the daemon to get assigned +# to. +# +#port "6600" +# +# Suppress all messages below the given threshold. Use "verbose" for +# troubleshooting. Available setting arguments are "notice", "info", "verbose", +# "warning" and "error". +# +#log_level "notice" +# +# Setting "restore_paused" to "yes" puts MPD into pause mode instead +# of starting playback after startup. +# +#restore_paused "no" +# +# This setting enables MPD to create playlists in a format usable by other +# music players. +# +#save_absolute_paths_in_playlists "no" +# +# This setting defines a list of tag types that will be extracted during the +# audio file discovery process. The complete list of possible values can be +# found in the user manual. +#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" +# +# This example just enables the "comment" tag without disabling all +# the other supported tags: +#metadata_to_use "+comment" +# +# This setting enables automatic update of MPD's database when files in +# music_directory are changed. +# +auto_update "yes" +# +# Limit the depth of the directories being watched, 0 means only watch +# the music directory itself. There is no limit by default. +# +#auto_update_depth "3" +# +############################################################################### + + +# Symbolic link behavior ###################################################### +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links outside of the configured music_directory. +# +#follow_outside_symlinks "yes" +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links inside of the configured music_directory. +# +#follow_inside_symlinks "yes" +# +############################################################################### + + +# Zeroconf / Avahi Service Discovery ########################################## +# +# If this setting is set to "yes", service information will be published with +# Zeroconf / Avahi. +# +#zeroconf_enabled "yes" +# +# The argument to this setting will be the Zeroconf / Avahi unique name for +# this MPD server on the network. %h will be replaced with the hostname. +# +#zeroconf_name "Music Player @ %h" +# +############################################################################### + + +# Permissions ################################################################# +# +# If this setting is set, MPD will require password authorization. The password +# setting can be specified multiple times for different password profiles. +# +#password "password@read,add,control,admin" +# +# This setting specifies the permissions a user has who has not yet logged in. +# +#default_permissions "read,add,control,admin" +# +############################################################################### + + +# Database ####################################################################### +# +# An example of a database section instead of the old 'db_file' setting. +# It enables mounting other storages into the music directory. +# +#database { +# plugin "simple" +# path "~/.local/share/mpd/db +# cache_directory "~/.local/share/mpd/cache" +#} +# +# An example of database config for a satellite setup +# +#music_directory "nfs://fileserver.local/srv/mp3" +#database { +# plugin "proxy" +# host "other.mpd.host" +# port "6600" +#} + +# Input ####################################################################### +# +input { + plugin "curl" +# proxy "proxy.isp.com:8080" +# proxy_user "user" +# proxy_password "password" +} + +# +############################################################################### + +# Audio Output ################################################################ +# +# MPD supports various audio output types, as well as playing through multiple +# audio outputs at the same time, through multiple audio_output settings +# blocks. Setting this block is optional, though the server will only attempt +# autodetection for one sound card. +# +# An example of an ALSA output: +# +audio_output { + type "pulse" + name "pulse audio" +} + +# audio_output { +# type "pipewire" +# name "PipeWire Sound Server" +# } + +#audio_output { +# type "alsa" +# name "My ALSA Device" +## device "hw:0,0" # optional +## mixer_type "hardware" # optional +## mixer_device "default" # optional +## mixer_control "PCM" # optional +## mixer_index "0" # optional +#} +# +# An example of an OSS output: +# +#audio_output { +# type "oss" +# name "My OSS Device" +## device "/dev/dsp" # optional +## mixer_type "hardware" # optional +## mixer_device "/dev/mixer" # optional +## mixer_control "PCM" # optional +#} +# +# An example of a shout output (for streaming to Icecast): +# +#audio_output { +# type "shout" +# encoder "vorbis" # optional +# name "My Shout Stream" +# host "localhost" +# port "8000" +# mount "/mpd.ogg" +# password "hackme" +# quality "5.0" +# bitrate "128" +# format "44100:16:1" +## protocol "icecast2" # optional +## user "source" # optional +## description "My Stream Description" # optional +## url "http://example.com" # optional +## genre "jazz" # optional +## public "no" # optional +## timeout "2" # optional +## mixer_type "software" # optional +#} +# +# An example of a recorder output: +# +#audio_output { +# type "recorder" +# name "My recorder" +# encoder "vorbis" # optional, vorbis or lame +# path "/var/lib/mpd/recorder/mpd.ogg" +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +#} +# +# An example of a httpd output (built-in HTTP streaming server): +# +#audio_output { +# type "httpd" +# name "My HTTP Stream" +# encoder "vorbis" # optional, vorbis or lame +# port "8000" +# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +# max_clients "0" # optional 0=no limit +#} +# +# An example of a pulseaudio output (streaming to a remote pulseaudio server) +# +#audio_output { +# type "pulse" +# name "My Pulse Output" +## server "remote_server" # optional +## sink "remote_server_sink" # optional +## media_role "media_role" #optional +#} +# +# An example of a winmm output (Windows multimedia API). +# +#audio_output { +# type "winmm" +# name "My WinMM output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## mixer_type "hardware" # optional +#} +# +# An example of a wasapi output (Windows multimedia API). +# +#audio_output { +# type "wasapi" +# name "My WASAPI output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## Exclusive mode blocks all other audio source, and get best audio quality without resampling. +## exclusive "no" # optional +## Enumerate all devices in log. +## enumerate "no" # optional +#} +# +# An example of an openal output. +# +#audio_output { +# type "openal" +# name "My OpenAL output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +#} +# +# An example of an sndio output. +# +#audio_output { +# type "sndio" +# name "sndio output" +# mixer_type "hardware" +#} +# +# An example of an OS X output: +# +#audio_output { +# type "osx" +# name "My OS X Device" +## device "Built-in Output" # optional +## channel_map "-1,-1,0,1" # optional +#} +# +## Example "pipe" output: +# +#audio_output { +# type "pipe" +# name "my pipe" +# command "aplay -f cd 2>/dev/null" +## Or if you're want to use AudioCompress +# command "AudioCompress -m | aplay -f cd 2>/dev/null" +## Or to send raw PCM stream through PCM: +# command "nc example.org 8765" +# format "44100:16:2" +#} +# +## An example of a null output (for no audio output): +# +#audio_output { +# type "null" +# name "My Null Output" +# mixer_type "none" # optional +#} +# +############################################################################### + + +# Normalization automatic volume adjustments ################################## +# +# This setting specifies the type of ReplayGain to use. This setting can have +# the argument "off", "album", "track" or "auto". "auto" is a special mode that +# chooses between "track" and "album" depending on the current state of +# random playback. If random playback is enabled then "track" mode is used. +# See for +# more details about ReplayGain. +# This setting is off by default. +# +#replaygain "album" +# +# This setting sets the pre-amp used for files that have ReplayGain tags. By +# default this setting is disabled. +# +#replaygain_preamp "0" +# +# This setting sets the pre-amp used for files that do NOT have ReplayGain tags. +# By default this setting is disabled. +# +#replaygain_missing_preamp "0" +# +# This setting enables or disables ReplayGain limiting. +# MPD calculates actual amplification based on the ReplayGain tags +# and replaygain_preamp / replaygain_missing_preamp setting. +# If replaygain_limit is enabled MPD will never amplify audio signal +# above its original level. If replaygain_limit is disabled such amplification +# might occur. By default this setting is enabled. +# +#replaygain_limit "yes" +# +# This setting enables on-the-fly normalization volume adjustment. This will +# result in the volume of all playing audio to be adjusted so the output has +# equal "loudness". This setting is disabled by default. +# +#volume_normalization "no" +# +############################################################################### + +# Character Encoding ########################################################## +# +# If file or directory names do not display correctly for your locale then you +# may need to modify this setting. +# +#filesystem_charset "UTF-8" +# +############################################################################### diff --git a/mpd/.config/mpd/state b/mpd/.config/mpd/state new file mode 100644 index 0000000..d052502 --- /dev/null +++ b/mpd/.config/mpd/state @@ -0,0 +1,27 @@ +sw_volume: 100 +audio_device_state:1:pulse audio +state: play +current: 11 +time: 15.469000 +random: 1 +repeat: 0 +single: 0 +consume: 0 +crossfade: 0 +mixrampdb: 0.000000 +mixrampdelay: -1.000000 +playlist_begin +0:佐々木恵梨 - Ring of Fortune.mp3 +1:放課後ティータイム - わたしの恋はホッチキス.mp3 +2:早見沙織 - ここから、ここから -白石結月 ソロver.-.mp3 +3:瀬戸麻沙美,黒沢ともよ,小澤亜李 - さよなら。ありがとう。.mp3 +4:コアラモード. - 七色シンフォニー.mp3 +5:泠鸢yousa - 前前前世(Slow Ver.).mp3 +6:放課後ティータイム - わたしの恋はホッチキス.mp3 +7:佐々木恵梨 - Ring of Fortune.mp3 +8:放課後ティータイム - わたしの恋はホッチキス.mp3 +9:早見沙織 - ここから、ここから -白石結月 ソロver.-.mp3 +10:瀬戸麻沙美,黒沢ともよ,小澤亜李 - さよなら。ありがとう。.mp3 +11:コアラモード. - 七色シンフォニー.mp3 +12:泠鸢yousa - 前前前世(Slow Ver.).mp3 +playlist_end diff --git a/mpv/.config/mpv/input.conf b/mpv/.config/mpv/input.conf new file mode 100755 index 0000000..26646bd --- /dev/null +++ b/mpv/.config/mpv/input.conf @@ -0,0 +1,8 @@ +CTRL+1 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A (HQ)" +CTRL+2 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B (HQ)" +CTRL+3 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C (HQ)" +CTRL+4 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A+A (HQ)" +CTRL+5 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B+B (HQ)" +CTRL+6 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C+A (HQ)" + +CTRL+0 no-osd change-list glsl-shaders clr ""; show-text "GLSL shaders cleared" diff --git a/mpv/.config/mpv/mpv.conf b/mpv/.config/mpv/mpv.conf new file mode 100755 index 0000000..272c8be --- /dev/null +++ b/mpv/.config/mpv/mpv.conf @@ -0,0 +1,4 @@ +hwdec=auto +# vo=gpu-next #This will break Anime4K +gpu-api=opengl +script-opts=ytdl_hook-ytdl_path=yt-dlp diff --git a/mpv/.config/mpv/scripts/file-browser.lua b/mpv/.config/mpv/scripts/file-browser.lua new file mode 100644 index 0000000..803a5b6 --- /dev/null +++ b/mpv/.config/mpv/scripts/file-browser.lua @@ -0,0 +1,2593 @@ +--[[ + mpv-file-browser + This script allows users to browse and open files and folders entirely from within mpv. + The script uses nothing outside the mpv API, so should work identically on all platforms. + The browser can move up and down directories, start playing files and folders, or add them to the queue. + For full documentation see: https://github.com/CogentRedTester/mpv-file-browser +]] +-- + +local mp = require("mp") +local msg = require("mp.msg") +local utils = require("mp.utils") +local opt = require("mp.options") + +local o = { + --root directories + root = "~/Videos/", + + --characters to use as separators + root_separators = ",;", + + --number of entries to show on the screen at once + num_entries = 20, + + --wrap the cursor around the top and bottom of the list + wrap = false, + + --only show files compatible with mpv + filter_files = true, + + --experimental feature that recurses directories concurrently when + --appending items to the playlist + concurrent_recursion = false, + + --maximum number of recursions that can run concurrently + max_concurrency = 16, + + --enable custom keybinds + custom_keybinds = false, + + --blacklist compatible files, it's recommended to use this rather than to edit the + --compatible list directly. A semicolon separated list of extensions without spaces + extension_blacklist = "", + + --add extra file extensions + extension_whitelist = "", + + --files with these extensions will be added as additional audio tracks for the current file instead of appended to the playlist + audio_extensions = "mka,dts,dtshd,dts-hd,truehd,true-hd", + + --files with these extensions will be added as additional subtitle tracks instead of appended to the playlist + subtitle_extensions = "etf,etf8,utf-8,idx,sub,srt,rt,ssa,ass,mks,vtt,sup,scc,smi,lrc,pgs", + + --filter dot directories like .config + --most useful on linux systems + filter_dot_dirs = false, + filter_dot_files = false, + + --substitude forward slashes for backslashes when appending a local file to the playlist + --potentially useful on windows systems + substitute_backslash = false, + + --this option reverses the behaviour of the alt+ENTER keybind + --when disabled the keybind is required to enable autoload for the file + --when enabled the keybind disables autoload for the file + autoload = false, + + --if autoload is triggered by selecting the currently playing file, then + --the current file will have it's watch-later config saved before being closed + --essentially the current file will not be restarted + autoload_save_current = true, + + --when opening the browser in idle mode prefer the current working directory over the root + --note that the working directory is set as the 'current' directory regardless, so `home` will + --move the browser there even if this option is set to false + default_to_working_directory = false, + + --allows custom icons be set to fix incompatabilities with some fonts + --the `\h` character is a hard space to add padding between the symbol and the text + folder_icon = "🖿", + cursor_icon = "➤", + indent_icon = [[\h\h\h]], + + --enable addons + addons = false, + addon_directory = "~~/script-modules/file-browser-addons", + + --directory to load external modules - currently just user-input-module + module_directory = "~~/script-modules", + + --force file-browser to use a specific text alignment (default: top-left) + --uses ass tag alignment numbers: https://aegi.vmoe.info/docs/3.0/ASS_Tags/#index23h3 + --set to 0 to use the default mpv osd-align options + alignment = 7, + + --style settings + font_bold_header = true, + + font_size_header = 35, + font_size_body = 25, + font_size_wrappers = 16, + + font_name_header = "", + font_name_body = "", + font_name_wrappers = "", + font_name_folder = "", + font_name_cursor = "", + + font_colour_header = "00ccff", + font_colour_body = "ffffff", + font_colour_wrappers = "00ccff", + font_colour_cursor = "00ccff", + + font_colour_multiselect = "fcad88", + font_colour_selected = "fce788", + font_colour_playing = "33ff66", + font_colour_playing_multiselected = "22b547", +} + +opt.read_options(o, "file_browser") +utils.shared_script_property_set("file_browser-open", "no") + +-------------------------------------------------------------------------------------------------------- +-----------------------------------------Environment Setup---------------------------------------------- +-------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------- + +--sets the version for the file-browser API +API_VERSION = "1.3.0" + +--switch the main script to a different environment so that the +--executed lua code cannot access our global variales +if setfenv then + setfenv(1, setmetatable({}, { __index = _G })) +else + _ENV = setmetatable({}, { __index = _G }) +end + +--creates a table for the API functions +--adds one metatable redirect to prevent addon authors from accidentally breaking file-browser +local API = { API_VERSION = API_VERSION } +package.loaded["file-browser"] = setmetatable({}, { __index = API }) + +local parser_API = setmetatable({}, { __index = package.loaded["file-browser"] }) +local parse_state_API = {} + +-------------------------------------------------------------------------------------------------------- +------------------------------------------Variable Setup------------------------------------------------ +-------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------- + +--the osd_overlay API was not added until v0.31. The expand-path command was not added until 0.30 +local ass = mp.create_osd_overlay("ass-events") +if not ass then + return msg.error("Script requires minimum mpv version 0.31") +end + +package.path = mp.command_native({ "expand-path", o.module_directory }) .. "/?.lua;" .. package.path + +local style = { + global = o.alignment == 0 and "" or ([[{\an%d}]]):format(o.alignment), + + -- full line styles + header = ([[{\r\q2\b%s\fs%d\fn%s\c&H%s&}]]):format( + (o.font_bold_header and "1" or "0"), + o.font_size_header, + o.font_name_header, + o.font_colour_header + ), + body = ([[{\r\q2\fs%d\fn%s\c&H%s&}]]):format(o.font_size_body, o.font_name_body, o.font_colour_body), + footer_header = ([[{\r\q2\fs%d\fn%s\c&H%s&}]]):format( + o.font_size_wrappers, + o.font_name_wrappers, + o.font_colour_wrappers + ), + + --small section styles (for colours) + multiselect = ([[{\c&H%s&}]]):format(o.font_colour_multiselect), + selected = ([[{\c&H%s&}]]):format(o.font_colour_selected), + playing = ([[{\c&H%s&}]]):format(o.font_colour_playing), + playing_selected = ([[{\c&H%s&}]]):format(o.font_colour_playing_multiselected), + + --icon styles + cursor = ([[{\fn%s\c&H%s&}]]):format(o.font_name_cursor, o.font_colour_cursor), + folder = ([[{\fn%s}]]):format(o.font_name_folder), +} + +local state = { + list = {}, + selected = 1, + hidden = true, + flag_update = false, + keybinds = nil, + + parser = nil, + directory = nil, + directory_label = nil, + prev_directory = "", + co = nil, + + multiselect_start = nil, + initial_selection = nil, + selection = {}, +} + +--the parser table actually contains 3 entries for each parser +--a numeric entry which represents the priority of the parsers and has the parser object as the value +--a string entry representing the id of each parser and with the parser object as the value +--and a table entry with the parser itself as the key and a table value in the form { id = %s, index = %d } +local parsers = {} + +--this table contains the parse_state tables for every parse operation indexed with the coroutine used for the parse +--this table has weakly referenced keys, meaning that once the coroutine for a parse is no-longer used by anything that +--field in the table will be removed by the garbage collector +local parse_states = setmetatable({}, { __mode = "k" }) + +local extensions = {} +local sub_extensions = {} +local audio_extensions = {} +local parseable_extensions = {} + +local dvd_device = nil +local current_file = { + directory = nil, + name = nil, + path = nil, +} + +local root = nil + +--default list of compatible file extensions +--adding an item to this list is a valid request on github +local compatible_file_extensions = { + "264", + "265", + "3g2", + "3ga", + "3ga2", + "3gp", + "3gp2", + "3gpp", + "3iv", + "a52", + "aac", + "adt", + "adts", + "ahn", + "aif", + "aifc", + "aiff", + "amr", + "ape", + "asf", + "au", + "avc", + "avi", + "awb", + "ay", + "bmp", + "cue", + "divx", + "dts", + "dtshd", + "dts-hd", + "dv", + "dvr", + "dvr-ms", + "eac3", + "evo", + "evob", + "f4a", + "flac", + "flc", + "fli", + "flic", + "flv", + "gbs", + "gif", + "gxf", + "gym", + "h264", + "h265", + "hdmov", + "hdv", + "hes", + "hevc", + "jpeg", + "jpg", + "kss", + "lpcm", + "m1a", + "m1v", + "m2a", + "m2t", + "m2ts", + "m2v", + "m3u", + "m3u8", + "m4a", + "m4v", + "mk3d", + "mka", + "mkv", + "mlp", + "mod", + "mov", + "mp1", + "mp2", + "mp2v", + "mp3", + "mp4", + "mp4v", + "mp4v", + "mpa", + "mpe", + "mpeg", + "mpeg2", + "mpeg4", + "mpg", + "mpg4", + "mpv", + "mpv2", + "mts", + "mtv", + "mxf", + "nsf", + "nsfe", + "nsv", + "nut", + "oga", + "ogg", + "ogm", + "ogv", + "ogx", + "opus", + "pcm", + "pls", + "png", + "qt", + "ra", + "ram", + "rm", + "rmvb", + "sap", + "snd", + "spc", + "spx", + "svg", + "thd", + "thd+ac3", + "tif", + "tiff", + "tod", + "trp", + "truehd", + "true-hd", + "ts", + "tsa", + "tsv", + "tta", + "tts", + "vfw", + "vgm", + "vgz", + "vob", + "vro", + "wav", + "weba", + "webm", + "webp", + "wm", + "wma", + "wmv", + "wtv", + "wv", + "x264", + "x265", + "xvid", + "y4m", + "yuv", +} + +-------------------------------------------------------------------------------------------------------- +--------------------------------------Cache Implementation---------------------------------------------- +-------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------- + +--metatable of methods to manage the cache +local __cache = {} + +__cache.cached_values = { + "directory", + "directory_label", + "list", + "selected", + "selection", + "parser", + "empty_text", + "co", +} + +--inserts latest state values onto the cache stack +function __cache:push() + local t = {} + for _, value in ipairs(self.cached_values) do + t[value] = state[value] + end + table.insert(self, t) +end + +function __cache:pop() + table.remove(self) +end + +function __cache:apply() + local t = self[#self] + for _, value in ipairs(self.cached_values) do + state[value] = t[value] + end +end + +function __cache:clear() + for i = 1, #self do + self[i] = nil + end +end + +local cache = setmetatable({}, { __index = __cache }) + +-------------------------------------------------------------------------------------------------------- +-----------------------------------------Utility Functions---------------------------------------------- +---------------------------------------Part of the addon API-------------------------------------------- +-------------------------------------------------------------------------------------------------------- + +API.coroutine = {} +local ABORT_ERROR = { + msg = "browser is no longer waiting for list - aborting parse", +} + +--implements table.pack if on lua 5.1 +if not table.pack then + table.unpack = unpack + function table.pack(...) + local t = { ... } + t.n = select("#", ...) + return t + end +end + +--prints an error message and a stack trace +--accepts an error object and optionally a coroutine +--can be passed directly to xpcall +function API.traceback(errmsg, co) + if co then + msg.warn(debug.traceback(co)) + else + msg.warn(debug.traceback("", 2)) + end + msg.error(errmsg) +end + +--prints an error if a coroutine returns an error +--unlike the next function this one still returns the results of coroutine.resume() +function API.coroutine.resume_catch(...) + local returns = table.pack(coroutine.resume(...)) + if not returns[1] and returns[2] ~= ABORT_ERROR then + API.traceback(returns[2], select(1, ...)) + end + return table.unpack(returns, 1, returns.n) +end + +--resumes a coroutine and prints an error if it was not sucessful +function API.coroutine.resume_err(...) + local success, err = coroutine.resume(...) + if not success and err ~= ABORT_ERROR then + API.traceback(err, select(1, ...)) + end + return success +end + +--in lua 5.1 there is only one return value which will be nil if run from the main thread +--in lua 5.2 main will be true if running from the main thread +function API.coroutine.assert(err) + local co, main = coroutine.running() + assert(not main and co, err or "error - function must be executed from within a coroutine") + return co +end + +--creates a callback fuction to resume the current coroutine +function API.coroutine.callback() + local co = API.coroutine.assert("cannot create a coroutine callback for the main thread") + return function(...) + return API.coroutine.resume_err(co, ...) + end +end + +--puts the current coroutine to sleep for the given number of seconds +function API.coroutine.sleep(n) + mp.add_timeout(n, API.coroutine.callback()) + coroutine.yield() +end + +--runs the given function in a coroutine, passing through any additional arguments +--this is for triggering an event in a coroutine +function API.coroutine.run(fn, ...) + local co = coroutine.create(fn) + API.coroutine.resume_err(co, ...) +end + +--get the full path for the current file +function API.get_full_path(item, dir) + if item.path then + return item.path + end + return (dir or state.directory) .. item.name +end + +--gets the path for a new subdirectory, redirects if the path field is set +--returns the new directory path and a boolean specifying if a redirect happened +function API.get_new_directory(item, directory) + if item.path and item.redirect ~= false then + return item.path, true + end + if directory == "" then + return item.name + end + if string.sub(directory, -1) == "/" then + return directory .. item.name + end + return directory .. "/" .. item.name +end + +--returns the file extension of the given file +function API.get_extension(filename, def) + return string.lower(filename):match("%.([^%./]+)$") or def +end + +--returns the protocol scheme of the given url, or nil if there is none +function API.get_protocol(filename, def) + return string.lower(filename):match("^(%a[%w+-.]*)://") or def +end + +--formats strings for ass handling +--this function is based on a similar function from https://github.com/mpv-player/mpv/blob/master/player/lua/console.lua#L110 +function API.ass_escape(str, replace_newline) + if replace_newline == true then + replace_newline = "\\\239\187\191n" + end + + --escape the invalid single characters + str = string.gsub(str, "[\\{}\n]", { + -- There is no escape for '\' in ASS (I think?) but '\' is used verbatim if + -- it isn't followed by a recognised character, so add a zero-width + -- non-breaking space + ["\\"] = "\\\239\187\191", + ["{"] = "\\{", + ["}"] = "\\}", + -- Precede newlines with a ZWNBSP to prevent ASS's weird collapsing of + -- consecutive newlines + ["\n"] = "\239\187\191\\N", + }) + + -- Turn leading spaces into hard spaces to prevent ASS from stripping them + str = str:gsub("\\N ", "\\N\\h") + str = str:gsub("^ ", "\\h") + + if replace_newline then + str = str:gsub("\\N", replace_newline) + end + return str +end + +--escape lua pattern characters +function API.pattern_escape(str) + return string.gsub(str, "([%^%$%(%)%%%.%[%]%*%+%-])", "%%%1") +end + +--standardises filepaths across systems +function API.fix_path(str, is_directory) + str = string.gsub(str, [[\]], [[/]]) + str = str:gsub([[/./]], [[/]]) + if is_directory and str:sub(-1) ~= "/" then + str = str .. "/" + end + return str +end + +--wrapper for utils.join_path to handle protocols +function API.join_path(working, relative) + return API.get_protocol(relative) and relative or utils.join_path(working, relative) +end + +--sorts the table lexicographically ignoring case and accounting for leading/non-leading zeroes +--the number format functionality was proposed by github user twophyro, and was presumably taken +--from here: http://notebook.kulchenko.com/algorithms/alphanumeric-natural-sorting-for-humans-in-lua +function API.sort(t) + local function padnum(d) + local r = string.match(d, "0*(.+)") + return ("%03d%s"):format(#r, r) + end + + --appends the letter d or f to the start of the comparison to sort directories and folders as well + table.sort(t, function(a, b) + return a.type:sub(1, 1) .. (a.label or a.name):lower():gsub("%d+", padnum) + < b.type:sub(1, 1) .. (b.label or b.name):lower():gsub("%d+", padnum) + end) + return t +end + +function API.valid_dir(dir) + if o.filter_dot_dirs and string.sub(dir, 1, 1) == "." then + return false + end + return true +end + +function API.valid_file(file) + if o.filter_dot_files and (string.sub(file, 1, 1) == ".") then + return false + end + if o.filter_files and not extensions[API.get_extension(file, "")] then + return false + end + return true +end + +--returns whether or not the item can be parsed +function API.parseable_item(item) + return item.type == "dir" or parseable_extensions[API.get_extension(item.name, "")] +end + +--removes items and folders from the list +--this is for addons which can't filter things during their normal processing +function API.filter(t) + local max = #t + local top = 1 + for i = 1, max do + local temp = t[i] + t[i] = nil + + if + (temp.type == "dir" and API.valid_dir(temp.label or temp.name)) + or (temp.type == "file" and API.valid_file(temp.label or temp.name)) + then + t[top] = temp + top = top + 1 + end + end + return t +end + +--returns a string iterator that uses the root separators +function API.iterate_opt(str) + return string.gmatch(str, "([^" .. API.pattern_escape(o.root_separators) .. "]+)") +end + +--sorts a table into an array of selected items in the correct order +--if a predicate function is passed, then the item will only be added to +--the table if the function returns true +function API.sort_keys(t, include_item) + local keys = {} + for k in pairs(t) do + local item = state.list[k] + if not include_item or include_item(item) then + item.index = k + keys[#keys + 1] = item + end + end + + table.sort(keys, function(a, b) + return a.index < b.index + end) + return keys +end + +local invalid_types = { + userdata = true, + thread = true, + ["function"] = true, +} + +local invalid_key_types = { + boolean = true, + table = true, + ["nil"] = true, +} +setmetatable(invalid_key_types, { __index = invalid_types }) + +--recursively removes elements of the table which would cause +--utils.format_json to throw an error +local function json_safe_recursive(t) + if type(t) ~= "table" then + return t + end + + local invalid_ktypes = setmetatable({}, { __index = invalid_key_types }) + local arr_length = #t + if arr_length > 0 then + invalid_ktypes.string = true + setmetatable(t, { type = "ARRAY" }) + else + invalid_ktypes.number = true + setmetatable(t, { type = "MAP" }) + end + + for key, value in pairs(t) do + local ktype = type(key) + local vtype = type(value) + + if invalid_ktypes[ktype] or invalid_types[vtype] then + t[key] = nil + elseif ktype == "number" and key > arr_length then + t[key] = nil + else + t[key] = json_safe_recursive(t[key]) + end + end + return t +end + +--formats a table into a json string but ensures there are no invalid datatypes inside the table first +function API.format_json_safe(t) + --operate on a copy of the table to prevent any data loss in the original table + t = json_safe_recursive(API.copy_table(t)) + local success, result, err = pcall(utils.format_json, t) + if success then + return result, err + else + return nil, result + end +end + +--copies a table without leaving any references to the original +--uses a structured clone algorithm to maintain cyclic references +local function copy_table_recursive(t, references) + if type(t) ~= "table" then + return t + end + if references[t] then + return references[t] + end + + local mt = { + __original = t, + __index = getmetatable(t), + } + local copy = setmetatable({}, mt) + references[t] = copy + + for key, value in pairs(t) do + key = copy_table_recursive(key, references) + copy[key] = copy_table_recursive(value, references) + end + return copy +end + +--a wrapper around copy_table to provide the reference table +function API.copy_table(t) + --this is to handle cyclic table references + return copy_table_recursive(t, {}) +end + +-------------------------------------------------------------------------------------------------------- +------------------------------------Parser Object Implementation---------------------------------------- +-------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------- + +--parser object for the root +--this object is not added to the parsers table so that scripts cannot get access to +--the root table, which is returned directly by parse() +local root_parser = { + name = "root", + priority = math.huge, + + --if this is being called then all other parsers have failed and we've fallen back to root + can_parse = function() + return true + end, + + --we return the root directory exactly as setup + parse = function(self) + return root, { + sorted = true, + filtered = true, + escaped = true, + parser = self, + directory = "", + } + end, +} + +--parser ofject for native filesystems +local file_parser = { + name = "file", + priority = 110, + + --as the default parser we'll always attempt to use it if all others fail + can_parse = function(_, directory) + return true + end, + + --scans the given directory using the mp.utils.readdir function + parse = function(self, directory) + local new_list = {} + local list1 = utils.readdir(directory, "dirs") + if list1 == nil then + return nil + end + + --sorts folders and formats them into the list of directories + for i = 1, #list1 do + local item = list1[i] + + --filters hidden dot directories for linux + if self.valid_dir(item) then + msg.trace(item .. "/") + table.insert(new_list, { name = item .. "/", type = "dir" }) + end + end + + --appends files to the list of directory items + local list2 = utils.readdir(directory, "files") + for i = 1, #list2 do + local item = list2[i] + + --only adds whitelisted files to the browser + if self.valid_file(item) then + msg.trace(item) + table.insert(new_list, { name = item, type = "file" }) + end + end + return API.sort(new_list), { filtered = true, sorted = true } + end, +} + +-------------------------------------------------------------------------------------------------------- +-----------------------------------------List Formatting------------------------------------------------ +-------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------- + +--appends the entered text to the overlay +local function append(text) + if text == nil then + return + end + ass.data = ass.data .. text +end + +--appends a newline character to the osd +local function newline() + ass.data = ass.data .. "\\N" +end + +--detects whether or not to highlight the given entry as being played +local function highlight_entry(v) + if current_file.name == nil then + return false + end + if API.parseable_item(v) then + return current_file.directory:find(API.get_full_path(v), 1, true) + else + return current_file.path == API.get_full_path(v) + end +end + +--saves the directory and name of the currently playing file +local function update_current_directory(_, filepath) + --if we're in idle mode then we want to open the working directory + if filepath == nil then + current_file.directory = API.fix_path(mp.get_property("working-directory", ""), true) + current_file.name = nil + current_file.path = nil + return + elseif filepath:find("dvd://") == 1 then + filepath = dvd_device .. filepath:match("dvd://(.*)") + end + + local workingDirectory = mp.get_property("working-directory", "") + local exact_path = API.join_path(workingDirectory, filepath) + exact_path = API.fix_path(exact_path, false) + current_file.directory, current_file.name = utils.split_path(exact_path) + current_file.path = exact_path +end + +--refreshes the ass text using the contents of the list +local function update_ass() + if state.hidden then + state.flag_update = true + return + end + + ass.data = style.global + + local dir_name = state.directory_label or state.directory + if dir_name == "" then + dir_name = "ROOT" + end + append(style.header) + append(API.ass_escape(dir_name, style.cursor .. "\\\239\187\191n" .. style.header)) + append("\\N ----------------------------------------------------") + newline() + + if #state.list < 1 then + append(state.empty_text) + ass:update() + return + end + + local start = 1 + local finish = start + o.num_entries - 1 + + --handling cursor positioning + local mid = math.ceil(o.num_entries / 2) + 1 + if state.selected + mid > finish then + local offset = state.selected - finish + mid + + --if we've overshot the end of the list then undo some of the offset + if finish + offset > #state.list then + offset = offset - ((finish + offset) - #state.list) + end + + start = start + offset + finish = finish + offset + end + + --making sure that we don't overstep the boundaries + if start < 1 then + start = 1 + end + local overflow = finish < #state.list + --this is necessary when the number of items in the dir is less than the max + if not overflow then + finish = #state.list + end + + --adding a header to show there are items above in the list + if start > 1 then + append(style.footer_header .. (start - 1) .. " item(s) above\\N\\N") + end + + for i = start, finish do + local v = state.list[i] + local playing_file = highlight_entry(v) + append(style.body) + + --handles custom styles for different entries + if i == state.selected then + append(style.cursor) + append((state.multiselect_start and style.multiselect or "") .. o.cursor_icon) + append("\\h" .. style.body) + else + append(o.indent_icon .. "\\h" .. style.body) + end + + --sets the selection colour scheme + local multiselected = state.selection[i] + if multiselected then + append(style.multiselect) + elseif i == state.selected then + append(style.selected) + end + + --prints the currently-playing icon and style + if playing_file and multiselected then + append(style.playing_selected) + elseif playing_file then + append(style.playing) + end + + --sets the folder icon + if v.type == "dir" then + append(style.folder .. o.folder_icon .. "\\h" .. "{\\fn" .. o.font_name_body .. "}") + end + + --adds the actual name of the item + append(v.ass or API.ass_escape(v.label or v.name, true)) + newline() + end + + if overflow then + append("\\N" .. style.footer_header .. #state.list - finish .. " item(s) remaining") + end + ass:update() +end + +-------------------------------------------------------------------------------------------------------- +--------------------------------Scroll/Select Implementation-------------------------------------------- +-------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------- + +--disables multiselect +local function disable_select_mode() + state.multiselect_start = nil + state.initial_selection = nil +end + +--enables multiselect +local function enable_select_mode() + state.multiselect_start = state.selected + state.initial_selection = API.copy_table(state.selection) +end + +--calculates what drag behaviour is required for that specific movement +local function drag_select(original_pos, new_pos) + if original_pos == new_pos then + return + end + + local setting = state.selection[state.multiselect_start] + for i = original_pos, new_pos, (new_pos > original_pos and 1 or -1) do + --if we're moving the cursor away from the starting point then set the selection + --otherwise restore the original selection + if i > state.multiselect_start then + if new_pos > original_pos then + state.selection[i] = setting + elseif i ~= new_pos then + state.selection[i] = state.initial_selection[i] + end + elseif i < state.multiselect_start then + if new_pos < original_pos then + state.selection[i] = setting + elseif i ~= new_pos then + state.selection[i] = state.initial_selection[i] + end + end + end +end + +--moves the selector up and down the list by the entered amount +local function scroll(n, wrap) + local num_items = #state.list + if num_items == 0 then + return + end + + local original_pos = state.selected + + if original_pos + n > num_items then + state.selected = wrap and 1 or num_items + elseif original_pos + n < 1 then + state.selected = wrap and num_items or 1 + else + state.selected = original_pos + n + end + + if state.multiselect_start then + drag_select(original_pos, state.selected) + end + update_ass() +end + +--toggles the selection +local function toggle_selection() + if not state.list[state.selected] then + return + end + state.selection[state.selected] = not state.selection[state.selected] or nil + update_ass() +end + +--select all items in the list +local function select_all() + for i, _ in ipairs(state.list) do + state.selection[i] = true + end + update_ass() +end + +--toggles select mode +local function toggle_select_mode() + if state.multiselect_start == nil then + enable_select_mode() + toggle_selection() + else + disable_select_mode() + update_ass() + end +end + +-------------------------------------------------------------------------------------------------------- +-----------------------------------------Directory Movement--------------------------------------------- +-------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------- + +--scans the list for which item to select by default +--chooses the folder that the script just moved out of +--or, otherwise, the item highlighted as currently playing +local function select_prev_directory() + if state.prev_directory:find(state.directory, 1, true) == 1 then + local i = 1 + while state.list[i] and API.parseable_item(state.list[i]) do + if state.prev_directory:find(API.get_full_path(state.list[i]), 1, true) then + state.selected = i + return + end + i = i + 1 + end + end + + for i, item in ipairs(state.list) do + if highlight_entry(item) then + state.selected = i + return + end + end +end + +--parses the given directory or defers to the next parser if nil is returned +local function choose_and_parse(directory, index) + msg.debug("finding parser for", directory) + local parser, list, opts + local parse_state = API.get_parse_state() + while list == nil and not parse_state.already_deferred and index <= #parsers do + parser = parsers[index] + if parser:can_parse(directory, parse_state) then + msg.debug("attempting parser:", parser:get_id()) + list, opts = parser:parse(directory, parse_state) + end + index = index + 1 + end + if not list then + return nil, {} + end + + msg.debug("list returned from:", parser:get_id()) + opts = opts or {} + if list then + opts.id = opts.id or parser:get_id() + end + return list, opts +end + +--sets up the parse_state table and runs the parse operation +local function run_parse(directory, parse_state) + msg.verbose("scanning files in", directory) + parse_state.directory = directory + local co = coroutine.running() + + setmetatable(parse_state, { __index = parse_state_API }) + if directory == "" then + return root_parser:parse() + end + + parse_states[co] = parse_state + local list, opts = choose_and_parse(directory, 1) + + if list == nil then + return msg.debug("no successful parsers found") + end + opts.parser = parsers[opts.id] + + if not opts.filtered then + API.filter(list) + end + if not opts.sorted then + API.sort(list) + end + return list, opts +end + +--returns the contents of the given directory using the given parse state +--if a coroutine has already been used for a parse then create a new coroutine so that +--the every parse operation has a unique thread ID +local function parse_directory(directory, parse_state) + local co = API.coroutine.assert( + "scan_directory must be executed from within a coroutine - aborting scan " .. utils.to_string(parse_state) + ) + if not parse_states[co] then + return run_parse(directory, parse_state) + end + + --if this coroutine is already is use by another parse operation then we create a new + --one and hand execution over to that + local new_co = coroutine.create(function() + API.coroutine.resume_err(co, run_parse(directory, parse_state)) + end) + + --queue the new coroutine on the mpv event queue + mp.add_timeout(0, function() + local success, err = coroutine.resume(new_co) + if not success then + API.traceback(err, new_co) + API.coroutine.resume_err(co) + end + end) + return parse_states[co]:yield() +end + +--sends update requests to the different parsers +local function update_list() + msg.verbose("opening directory: " .. state.directory) + + state.selected = 1 + state.selection = {} + + --loads the current directry from the cache to save loading time + --there will be a way to forcibly reload the current directory at some point + --the cache is in the form of a stack, items are taken off the stack when the dir moves up + if cache[1] and cache[#cache].directory == state.directory then + msg.verbose("found directory in cache") + cache:apply() + state.prev_directory = state.directory + return + end + local directory = state.directory + local list, opts = parse_directory(state.directory, { source = "browser" }) + + --if the running coroutine isn't the one stored in the state variable, then the user + --changed directories while the coroutine was paused, and this operation should be aborted + if coroutine.running() ~= state.co then + msg.verbose(ABORT_ERROR.msg) + msg.debug("expected:", state.directory, "received:", directory) + return + end + + --apply fallbacks if the scan failed + if not list and cache[1] then + --switches settings back to the previously opened directory + --to the user it will be like the directory never changed + msg.warn("could not read directory", state.directory) + cache:apply() + return + elseif not list then + msg.warn("could not read directory", state.directory) + list, opts = root_parser:parse() + end + + state.list = list + state.parser = opts.parser + + --this only matters when displaying the list on the screen, so it doesn't need to be in the scan function + if not opts.escaped then + for i = 1, #list do + list[i].ass = list[i].ass or API.ass_escape(list[i].label or list[i].name, true) + end + end + + --setting custom options from parsers + state.directory_label = opts.directory_label + state.empty_text = opts.empty_text or state.empty_text + + --we assume that directory is only changed when redirecting to a different location + --therefore, the cache should be wiped + if opts.directory then + state.directory = opts.directory + cache:clear() + end + + if opts.selected_index then + state.selected = opts.selected_index or state.selected + if state.selected > #state.list then + state.selected = #state.list + elseif state.selected < 1 then + state.selected = 1 + end + end + + select_prev_directory() + state.prev_directory = state.directory +end + +--rescans the folder and updates the list +local function update(moving_adjacent) + --we can only make assumptions about the directory label when moving from adjacent directories + if not moving_adjacent then + state.directory_label = nil + cache:clear() + end + + state.empty_text = "~" + state.list = {} + disable_select_mode() + update_ass() + state.empty_text = "empty directory" + + --the directory is always handled within a coroutine to allow addons to + --pause execution for asynchronous operations + state.co = coroutine.create(function() + update_list() + update_ass() + end) + API.coroutine.resume_err(state.co) +end + +--the base function for moving to a directory +local function goto_directory(directory) + state.directory = directory + update() +end + +--loads the root list +local function goto_root() + msg.verbose("jumping to root") + goto_directory("") +end + +--switches to the directory of the currently playing file +local function goto_current_dir() + msg.verbose("jumping to current directory") + goto_directory(current_file.directory) +end + +--moves up a directory +local function up_dir() + local dir = state.directory:reverse() + local index = dir:find("[/\\]") + + while index == 1 do + dir = dir:sub(2) + index = dir:find("[/\\]") + end + + if index == nil then + state.directory = "" + else + state.directory = dir:sub(index):reverse() + end + + --we can make some assumptions about the next directory label when moving up or down + if state.directory_label then + state.directory_label = state.directory_label:match("^(.+/)[^/]+/$") + end + + update(true) + cache:pop() +end + +--moves down a directory +local function down_dir() + local current = state.list[state.selected] + if not current or not API.parseable_item(current) then + return + end + + cache:push() + local directory, redirected = API.get_new_directory(current, state.directory) + state.directory = directory + + --we can make some assumptions about the next directory label when moving up or down + if state.directory_label then + state.directory_label = state.directory_label .. (current.label or current.name) + end + update(not redirected) +end + +------------------------------------------------------------------------------------------ +------------------------------------Browser Controls-------------------------------------- +------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------ + +--opens the browser +local function open() + for _, v in ipairs(state.keybinds) do + mp.add_forced_key_binding(v[1], "dynamic/" .. v[2], v[3], v[4]) + end + + utils.shared_script_property_set("file_browser-open", "yes") + state.hidden = false + if state.directory == nil then + local path = mp.get_property("path") + update_current_directory(nil, path) + if path or o.default_to_working_directory then + goto_current_dir() + else + goto_root() + end + return + end + + if state.flag_update then + update_current_directory(nil, mp.get_property("path")) + end + if not state.flag_update then + ass:update() + else + state.flag_update = false + update_ass() + end +end + +--closes the list and sets the hidden flag +local function close() + for _, v in ipairs(state.keybinds) do + mp.remove_key_binding("dynamic/" .. v[2]) + end + + utils.shared_script_property_set("file_browser-open", "no") + state.hidden = true + ass:remove() +end + +--toggles the list +local function toggle() + if state.hidden then + open() + else + close() + end +end + +--run when the escape key is used +local function escape() + --if multiple items are selection cancel the + --selection instead of closing the browser + if next(state.selection) or state.multiselect_start then + state.selection = {} + disable_select_mode() + update_ass() + return + end + close() +end + +--opens a specific directory +local function browse_directory(directory) + if not directory then + return + end + directory = mp.command_native({ "expand-path", directory }, "") + -- directory = join_path( mp.get_property("working-directory", ""), directory ) + + if directory ~= "" then + directory = API.fix_path(directory, true) + end + msg.verbose("recieved directory from script message: " .. directory) + + if directory == "dvd://" then + directory = dvd_device + end + goto_directory(directory) + open() +end + +------------------------------------------------------------------------------------------ +---------------------------------File/Playlist Opening------------------------------------ +------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------ + +--adds a file to the playlist and changes the flag to `append-play` in preparation +--for future items +local function loadfile(file, opts) + if o.substitute_backslash and not API.get_protocol(file) then + file = file:gsub("/", "\\") + end + + if opts.flag == "replace" then + msg.verbose("Playling file", file) + else + msg.verbose("Appending", file, "to the playlist") + end + + if not mp.commandv("loadfile", file, opts.flag) then + msg.warn(file) + end + opts.flag = "append-play" + opts.items_appended = opts.items_appended + 1 +end + +--this function recursively loads directories concurrently in separate coroutines +--results are saved in a tree of tables that allows asynchronous access +local function concurrent_loadlist_parse(directory, load_opts, prev_dirs, item_t) + --prevents infinite recursion from the item.path or opts.directory fields + if prev_dirs[directory] then + return + end + prev_dirs[directory] = true + + local list, list_opts = parse_directory(directory, { source = "loadlist" }) + if list == root then + return + end + + --if we can't parse the directory then append it and hope mpv fares better + if list == nil then + msg.warn("Could not parse", directory, "appending to playlist anyway") + item_t.type = "file" + return + end + + directory = list_opts.directory or directory + if directory == "" then + return + end + + --we must declare these before we start loading sublists otherwise the append thread will + --need to wait until the whole list is loaded (when synchronous IO is used) + item_t._sublist = list or {} + list._directory = directory + + --launches new parse operations for directories, each in a different coroutine + for _, item in ipairs(list) do + if API.parseable_item(item) then + API.coroutine.run( + concurrent_loadlist_wrapper, + API.get_new_directory(item, directory), + load_opts, + prev_dirs, + item + ) + end + end + return true +end + +--a wrapper function that ensures the concurrent_loadlist_parse is run correctly +function concurrent_loadlist_wrapper(directory, opts, prev_dirs, item) + --ensures that only a set number of concurrent parses are operating at any one time. + --the mpv event queue is seemingly limited to 1000 items, but only async mpv actions like + --command_native_async should use that, events like mp.add_timeout (which coroutine.sleep() uses) should + --be handled enturely on the Lua side with a table, which has a significantly larger maximum size. + while opts.concurrency > o.max_concurrency do + API.coroutine.sleep(0.1) + end + opts.concurrency = opts.concurrency + 1 + + local success = concurrent_loadlist_parse(directory, opts, prev_dirs, item) + opts.concurrency = opts.concurrency - 1 + if not success then + item._sublist = {} + end + if coroutine.status(opts.co) == "suspended" then + API.coroutine.resume_err(opts.co) + end +end + +--recursively appends items to the playlist, acts as a consumer to the previous functions producer; +--if the next directory has not been parsed this function will yield until the parse has completed +local function concurrent_loadlist_append(list, load_opts) + local directory = list._directory + + for _, item in ipairs(list) do + if + not sub_extensions[API.get_extension(item.name, "")] + and not audio_extensions[API.get_extension(item.name, "")] + then + while not item._sublist and API.parseable_item(item) do + coroutine.yield() + end + + if API.parseable_item(item) then + concurrent_loadlist_append(item._sublist, load_opts) + else + loadfile(API.get_full_path(item, directory), load_opts) + end + end + end +end + +--recursive function to load directories using the script custom parsers +--returns true if any items were appended to the playlist +local function custom_loadlist_recursive(directory, load_opts, prev_dirs) + --prevents infinite recursion from the item.path or opts.directory fields + if prev_dirs[directory] then + return + end + prev_dirs[directory] = true + + local list, opts = parse_directory(directory, { source = "loadlist" }) + if list == root then + return + end + + --if we can't parse the directory then append it and hope mpv fares better + if list == nil then + msg.warn("Could not parse", directory, "appending to playlist anyway") + loadfile(directory, load_opts.flag) + return true + end + + directory = opts.directory or directory + if directory == "" then + return + end + + for _, item in ipairs(list) do + if + not sub_extensions[API.get_extension(item.name, "")] + and not audio_extensions[API.get_extension(item.name, "")] + then + if API.parseable_item(item) then + custom_loadlist_recursive(API.get_new_directory(item, directory), load_opts, prev_dirs) + else + local path = API.get_full_path(item, directory) + loadfile(path, load_opts) + end + end + end +end + +--a wrapper for the custom_loadlist_recursive function +local function loadlist(item, opts) + local dir = API.get_full_path(item, opts.directory) + local num_items = opts.items_appended + + if o.concurrent_recursion then + item = API.copy_table(item) + opts.co = API.coroutine.assert() + opts.concurrency = 0 + + --we need the current coroutine to suspend before we run the first parse operation, so + --we schedule the coroutine to run on the mpv event queue + mp.add_timeout(0, function() + API.coroutine.run(concurrent_loadlist_wrapper, dir, opts, {}, item) + end) + concurrent_loadlist_append({ item, _directory = opts.directory }, opts) + else + custom_loadlist_recursive(dir, opts, {}) + end + + if opts.items_appended == num_items then + msg.warn(dir, "contained no valid files") + end +end + +--load playlist entries before and after the currently playing file +local function autoload_dir(path, opts) + if o.autoload_save_current and path == current_file.path then + mp.commandv("write-watch-later-config") + end + + --loads the currently selected file, clearing the playlist in the process + loadfile(path, opts) + + local pos = 1 + local file_count = 0 + for _, item in ipairs(state.list) do + if + item.type == "file" + and not sub_extensions[API.get_extension(item.name, "")] + and not audio_extensions[API.get_extension(item.name, "")] + then + local p = API.get_full_path(item) + + if p == path then + pos = file_count + else + loadfile(p, opts) + end + + file_count = file_count + 1 + end + end + mp.commandv("playlist-move", 0, pos + 1) +end + +--runs the loadfile or loadlist command +local function open_item(item, opts) + if API.parseable_item(item) then + return loadlist(item, opts) + end + + local path = API.get_full_path(item, opts.directory) + if sub_extensions[API.get_extension(item.name, "")] then + mp.commandv("sub-add", path, opts.flag == "replace" and "select" or "auto") + elseif audio_extensions[API.get_extension(item.name, "")] then + mp.commandv("audio-add", path, opts.flag == "replace" and "select" or "auto") + else + if opts.autoload then + autoload_dir(path, opts) + else + loadfile(path, opts) + end + end +end + +--handles the open options as a coroutine +--once loadfile has been run we can no-longer guarantee synchronous execution - the state values may change +--therefore, we must ensure that any state values that could be used after a loadfile call are saved beforehand +local function open_file_coroutine(opts) + if not state.list[state.selected] then + return + end + if opts.flag == "replace" then + close() + end + + --we want to set the idle option to yes to ensure that if the first item + --fails to load then the player has a chance to attempt to load further items (for async append operations) + local idle = mp.get_property("idle", "once") + mp.set_property("idle", "yes") + + --handles multi-selection behaviour + if next(state.selection) then + local selection = API.sort_keys(state.selection) + --reset the selection after + state.selection = {} + + disable_select_mode() + update_ass() + + --the currently selected file will be loaded according to the flag + --the flag variable will be switched to append once a file is loaded + for i = 1, #selection do + open_item(selection[i], opts) + end + else + local item = state.list[state.selected] + if opts.flag == "replace" then + down_dir() + end + open_item(item, opts) + end + + if mp.get_property("idle") == "yes" then + mp.set_property("idle", idle) + end +end + +--opens the selelected file(s) +local function open_file(flag, autoload) + API.coroutine.run(open_file_coroutine, { + flag = flag, + autoload = (autoload ~= o.autoload and flag == "replace"), + directory = state.directory, + items_appended = 0, + }) +end + +------------------------------------------------------------------------------------------ +----------------------------------Keybind Implementation---------------------------------- +------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------ + +state.keybinds = { + { + "ENTER", + "play", + function() + open_file("replace", false) + end, + }, + { + "Shift+ENTER", + "play_append", + function() + open_file("append-play", false) + end, + }, + { + "Alt+ENTER", + "play_autoload", + function() + open_file("replace", true) + end, + }, + { "ESC", "close", escape }, + { "RIGHT", "down_dir", down_dir }, + { "LEFT", "up_dir", up_dir }, + { + "DOWN", + "scroll_down", + function() + scroll(1, o.wrap) + end, + { repeatable = true }, + }, + { + "UP", + "scroll_up", + function() + scroll(-1, o.wrap) + end, + { repeatable = true }, + }, + { + "PGDWN", + "page_down", + function() + scroll(o.num_entries) + end, + { repeatable = true }, + }, + { + "PGUP", + "page_up", + function() + scroll(-o.num_entries) + end, + { repeatable = true }, + }, + { + "Shift+PGDWN", + "list_bottom", + function() + scroll(math.huge) + end, + }, + { + "Shift+PGUP", + "list_top", + function() + scroll(-math.huge) + end, + }, + { "HOME", "goto_current", goto_current_dir }, + { "Shift+HOME", "goto_root", goto_root }, + { + "Ctrl+r", + "reload", + function() + cache:clear() + update() + end, + }, + { "s", "select_mode", toggle_select_mode }, + { "S", "select_item", toggle_selection }, + { "Ctrl+a", "select_all", select_all }, +} + +--characters used for custom keybind codes +local CUSTOM_KEYBIND_CODES = "%fFnNpPdDrR" + +--a map of key-keybinds - only saves the latest keybind if multiple have the same key code +local top_level_keys = {} + +--format the item string for either single or multiple items +local function create_item_string(cmd, items, funct) + if not items[1] then + return + end + + local str = funct(items[1]) + for i = 2, #items do + str = str .. (cmd["concat-string"] or " ") .. funct(items[i]) + end + return str +end + +--iterates through the command table and substitutes special +--character codes for the correct strings used for custom functions +local function format_command_table(cmd, items, state) + local copy = {} + for i = 1, #cmd.command do + copy[i] = {} + + for j = 1, #cmd.command[i] do + copy[i][j] = cmd.command[i][j]:gsub("%%[" .. CUSTOM_KEYBIND_CODES .. "]", { + ["%%"] = "%", + ["%f"] = create_item_string(cmd, items, function(item) + return item and API.get_full_path(item, state.directory) or "" + end), + ["%F"] = create_item_string(cmd, items, function(item) + return string.format("%q", item and API.get_full_path(item, state.directory) or "") + end), + ["%n"] = create_item_string(cmd, items, function(item) + return item and (item.label or item.name) or "" + end), + ["%N"] = create_item_string(cmd, items, function(item) + return string.format("%q", item and (item.label or item.name) or "") + end), + ["%p"] = state.directory or "", + ["%P"] = string.format("%q", state.directory or ""), + ["%d"] = (state.directory_label or state.directory):match("([^/]+)/?$") or "", + ["%D"] = string.format("%q", (state.directory_label or state.directory):match("([^/]+)/$") or ""), + ["%r"] = state.parser.keybind_name or state.parser.name or "", + ["%R"] = string.format("%q", state.parser.keybind_name or state.parser.name or ""), + }) + end + end + return copy +end + +--runs all of the commands in the command table +--key.command must be an array of command tables compatible with mp.command_native +--items must be an array of multiple items (when multi-type ~= concat the array will be 1 long) +local function run_custom_command(cmd, items, state) + local custom_cmds = cmd.codes and format_command_table(cmd, items, state) or cmd.command + + for _, cmd in ipairs(custom_cmds) do + msg.debug("running command:", utils.to_string(cmd)) + mp.command_native(cmd) + end +end + +--runs one of the custom commands +local function custom_command(cmd, state, co) + if cmd.parser and cmd.parser ~= (state.parser.keybind_name or state.parser.name) then + return false + end + + --the function terminates here if we are running the command on a single item + if not (cmd.multiselect and next(state.selection)) then + if cmd.filter then + if not state.list[state.selected] then + return false + end + if state.list[state.selected].type ~= cmd.filter then + return false + end + end + + --if the directory is empty, and this command needs to work on an item, then abort and fallback to the next command + if cmd.codes and not state.list[state.selected] then + if cmd.codes["%f"] or cmd.codes["%F"] or cmd.codes["%n"] or cmd.codes["%N"] then + return false + end + end + + run_custom_command(cmd, { state.list[state.selected] }, state) + return true + end + + --runs the command on all multi-selected items + local selection = API.sort_keys(state.selection, function(item) + return not cmd.filter or item.type == cmd.filter + end) + if not next(selection) then + return false + end + + if cmd["multi-type"] == "concat" then + run_custom_command(cmd, selection, state) + elseif cmd["multi-type"] == "repeat" then + for i, _ in ipairs(selection) do + run_custom_command(cmd, { selection[i] }, state) + + if cmd.delay then + mp.add_timeout(cmd.delay, function() + API.coroutine.resume_err(co) + end) + coroutine.yield() + end + end + end + + --we passthrough by default if the command is not run on every selected item + if cmd.passthrough ~= nil then + return + end + + local num_selection = 0 + for _ in pairs(state.selection) do + num_selection = num_selection + 1 + end + return #selection == num_selection +end + +--recursively runs the keybind functions, passing down through the chain +--of keybinds with the same key value +local function run_keybind_recursive(keybind, state, co) + msg.trace("Attempting custom command:", utils.to_string(keybind)) + + --these are for the default keybinds, or from addons which use direct functions + local addon_fn = type(keybind.command) == "function" + local fn = addon_fn and keybind.command or custom_command + + if keybind.passthrough ~= nil then + fn(keybind, addon_fn and API.copy_table(state) or state, co) + if keybind.passthrough == true and keybind.prev_key then + run_keybind_recursive(keybind.prev_key, state, co) + end + else + if fn(keybind, state, co) == false and keybind.prev_key then + run_keybind_recursive(keybind.prev_key, state, co) + end + end +end + +--a wrapper to run a custom keybind as a lua coroutine +local function run_keybind_coroutine(key) + msg.debug("Received custom keybind " .. key.key) + local co = coroutine.create(run_keybind_recursive) + + local state_copy = { + directory = state.directory, + directory_label = state.directory_label, + list = state.list, --the list should remain unchanged once it has been saved to the global state, new directories get new tables + selected = state.selected, + selection = API.copy_table(state.selection), + parser = state.parser, + } + local success, err = coroutine.resume(co, key, state_copy, co) + if not success then + msg.error("error running keybind:", utils.to_string(key)) + API.traceback(err, co) + end +end + +--scans the given command table to identify if they contain any custom keybind codes +local function scan_for_codes(command_table, codes) + if type(command_table) ~= "table" then + return codes + end + for _, value in pairs(command_table) do + local type = type(value) + if type == "table" then + scan_for_codes(value, codes) + elseif type == "string" then + value:gsub("%%[" .. CUSTOM_KEYBIND_CODES .. "]", function(code) + codes[code] = true + end) + end + end + return codes +end + +--inserting the custom keybind into the keybind array for declaration when file-browser is opened +--custom keybinds with matching names will overwrite eachother +local function insert_custom_keybind(keybind) + --we'll always save the keybinds as either an array of command arrays or a function + if type(keybind.command) == "table" and type(keybind.command[1]) ~= "table" then + keybind.command = { keybind.command } + end + + keybind.codes = scan_for_codes(keybind.command, {}) + if not next(keybind.codes) then + keybind.codes = nil + end + keybind.prev_key = top_level_keys[keybind.key] + + table.insert(state.keybinds, { + keybind.key, + keybind.name, + function() + run_keybind_coroutine(keybind) + end, + keybind.flags or {}, + }) + top_level_keys[keybind.key] = keybind +end + +--loading the custom keybinds +--can either load keybinds from the config file, from addons, or from both +local function setup_keybinds() + if not o.custom_keybinds and not o.addons then + return + end + + --this is to make the default keybinds compatible with passthrough from custom keybinds + for _, keybind in ipairs(state.keybinds) do + top_level_keys[keybind[1]] = { key = keybind[1], name = keybind[2], command = keybind[3], flags = keybind[4] } + end + + --this loads keybinds from addons + if o.addons then + for i = #parsers, 1, -1 do + local parser = parsers[i] + if parser.keybinds then + for i, keybind in ipairs(parser.keybinds) do + --if addons use the native array command format, then we need to convert them over to the custom command format + if not keybind.key then + keybind = { key = keybind[1], name = keybind[2], command = keybind[3], flags = keybind[4] } + else + keybind = API.copy_table(keybind) + end + + keybind.name = parsers[parser].id .. "/" .. (keybind.name or tostring(i)) + insert_custom_keybind(keybind) + end + end + end + end + + --loads custom keybinds from file-browser-keybinds.json + if o.custom_keybinds then + local path = mp.command_native({ "expand-path", "~~/script-opts" }) .. "/file-browser-keybinds.json" + local custom_keybinds, err = io.open(path) + if not custom_keybinds then + return error(err) + end + + local json = custom_keybinds:read("*a") + custom_keybinds:close() + + json = utils.parse_json(json) + if not json then + return error("invalid json syntax for " .. path) + end + + for i, keybind in ipairs(json) do + keybind.name = "custom/" .. (keybind.name or tostring(i)) + insert_custom_keybind(keybind) + end + end +end + +-------------------------------------------------------------------------------------------------------- +-------------------------------------------API Functions------------------------------------------------ +-------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------- + +--these functions we'll provide as-is +API.redraw = update_ass +API.rescan = update +API.browse_directory = browse_directory + +function API.clear_cache() + cache:clear() +end + +--a wrapper around scan_directory for addon API +function API.parse_directory(directory, parse_state) + if not parse_state then + parse_state = { source = "addon" } + elseif not parse_state.source then + parse_state.source = "addon" + end + return parse_directory(directory, parse_state) +end + +--register file extensions which can be opened by the browser +function API.register_parseable_extension(ext) + parseable_extensions[string.lower(ext)] = true +end +function API.remove_parseable_extension(ext) + parseable_extensions[string.lower(ext)] = nil +end + +--add a compatible extension to show through the filter, only applies if run during the setup() method +function API.add_default_extension(ext) + table.insert(compatible_file_extensions, ext) +end + +--add item to root at position pos +function API.insert_root_item(item, pos) + msg.verbose("adding item to root", item.label or item.name) + item.ass = item.ass or API.ass_escape(item.label or item.name) + item.type = "dir" + table.insert(root, pos or (#root + 1), item) +end + +--providing getter and setter functions so that addons can't modify things directly +function API.get_script_opts() + return API.copy_table(o) +end +function API.get_opt(key) + return o[key] +end +function API.get_extensions() + return API.copy_table(extensions) +end +function API.get_sub_extensions() + return API.copy_table(sub_extensions) +end +function API.get_audio_extensions() + return API.copy_table(audio_extensions) +end +function API.get_parseable_extensions() + return API.copy_table(parseable_extensions) +end +function API.get_state() + return API.copy_table(state) +end +function API.get_dvd_device() + return dvd_device +end +function API.get_parsers() + return API.copy_table(parsers) +end +function API.get_root() + return API.copy_table(root) +end +function API.get_directory() + return state.directory +end +function API.get_list() + return API.copy_table(state.list) +end +function API.get_current_file() + return API.copy_table(current_file) +end +function API.get_current_parser() + return state.parser:get_id() +end +function API.get_current_parser_keyname() + return state.parser.keybind_name or state.parser.name +end +function API.get_selected_index() + return state.selected +end +function API.get_selected_item() + return API.copy_table(state.list[state.selected]) +end +function API.get_open_status() + return not state.hidden +end +function API.get_parse_state(co) + return parse_states[co or coroutine.running() or ""] +end + +function API.set_empty_text(str) + state.empty_text = str + API.redraw() +end + +function API.set_selected_index(index) + if type(index) ~= "number" then + return false + end + if index < 1 then + index = 1 + end + if index > #state.list then + index = #state.list + end + state.selected = index + API.redraw() + return index +end + +function parser_API:get_index() + return parsers[self].index +end +function parser_API:get_id() + return parsers[self].id +end + +--runs choose_and_parse starting from the next parser +function parser_API:defer(directory) + msg.trace("deferring to other parsers...") + local list, opts = choose_and_parse(directory, self:get_index() + 1) + API.get_parse_state().already_deferred = true + return list, opts +end + +--a wrapper around coroutine.yield that aborts the coroutine if +--the parse request was cancelled by the user +--the coroutine is +function parse_state_API:yield(...) + local co = coroutine.running() + local is_browser = co == state.co + if self.source == "browser" and not is_browser then + msg.error("current coroutine does not match browser's expected coroutine - did you unsafely yield before this?") + error("current coroutine does not match browser's expected coroutine - aborting the parse") + end + + local result = table.pack(coroutine.yield(...)) + if is_browser and co ~= state.co then + msg.verbose("browser no longer waiting for list - aborting parse for", self.directory) + error(ABORT_ERROR) + end + return unpack(result, 1, result.n) +end + +--checks if the current coroutine is the one handling the browser's request +function parse_state_API:is_coroutine_current() + return coroutine.running() == state.co +end + +-------------------------------------------------------------------------------------------------------- +-----------------------------------------Setup Functions------------------------------------------------ +-------------------------------------------------------------------------------------------------------- +-------------------------------------------------------------------------------------------------------- + +local API_MAJOR, API_MINOR, API_PATCH = API_VERSION:match("(%d+)%.(%d+)%.(%d+)") + +--checks if the given parser has a valid version number +local function check_api_version(parser) + local version = parser.version or "1.0.0" + + local major, minor = version:match("(%d+)%.(%d+)") + + if not major or not minor then + return msg.error("Invalid version number") + elseif major ~= API_MAJOR then + return msg.error( + "parser", + parser.name, + "has wrong major version number, expected", + ("v%d.x.x"):format(API_MAJOR), + "got", + "v" .. version + ) + elseif minor > API_MINOR then + msg.warn( + "parser", + parser.name, + "has newer minor version number than API, expected", + ("v%d.%d.x"):format(API_MAJOR, API_MINOR), + "got", + "v" .. version + ) + end + return true +end + +--create a unique id for the given parser +local function set_parser_id(parser) + local name = parser.name + if parsers[name] then + local n = 2 + name = parser.name .. "_" .. n + while parsers[name] do + n = n + 1 + name = parser.name .. "_" .. n + end + end + + parsers[name] = parser + parsers[parser] = { id = name } +end + +local function redirect_table(t) + return setmetatable({}, { __index = t }) +end + +--loads an addon in a separate environment +local function load_addon(path) + local name_sqbr = string.format("[%s]", path:match("/([^/]*)%.lua$")) + local addon_environment = redirect_table(_G) + addon_environment._G = addon_environment + + --gives each addon custom debug messages + addon_environment.package = redirect_table(addon_environment.package) + addon_environment.package.loaded = redirect_table(addon_environment.package.loaded) + local msg_module = { + log = function(level, ...) + msg.log(level, name_sqbr, ...) + end, + fatal = function(...) + return msg.fatal(name_sqbr, ...) + end, + error = function(...) + return msg.error(name_sqbr, ...) + end, + warn = function(...) + return msg.warn(name_sqbr, ...) + end, + info = function(...) + return msg.info(name_sqbr, ...) + end, + verbose = function(...) + return msg.verbose(name_sqbr, ...) + end, + debug = function(...) + return msg.debug(name_sqbr, ...) + end, + trace = function(...) + return msg.trace(name_sqbr, ...) + end, + } + addon_environment.print = msg_module.info + + addon_environment.require = function(module) + if module == "mp.msg" then + return msg_module + end + return require(module) + end + + local chunk, err + if setfenv then + --since I stupidly named a function loadfile I need to specify the global one + --I've been using the name too long to want to change it now + chunk, err = _G.loadfile(path) + if not chunk then + return msg.error(err) + end + setfenv(chunk, addon_environment) + else + chunk, err = _G.loadfile(path, "bt", addon_environment) + if not chunk then + return msg.error(err) + end + end + + local success, result = xpcall(chunk, API.traceback) + return success and result or nil +end + +--setup an internal or external parser +local function setup_parser(parser, file) + parser = setmetatable(parser, { __index = parser_API }) + parser.name = parser.name or file:gsub("%-browser%.lua$", ""):gsub("%.lua$", "") + + set_parser_id(parser) + if not check_api_version(parser) then + return msg.error("aborting load of parser", parser:get_id(), "from", file) + end + + msg.verbose("imported parser", parser:get_id(), "from", file) + + --sets missing functions + if not parser.can_parse then + if parser.parse then + parser.can_parse = function() + return true + end + else + parser.can_parse = function() + return false + end + end + end + + if parser.priority == nil then + parser.priority = 0 + end + if type(parser.priority) ~= "number" then + return msg.error("parser", parser:get_id(), "needs a numeric priority") + end + + table.insert(parsers, parser) +end + +--load an external addon +local function setup_addon(file, path) + if file:sub(-4) ~= ".lua" then + return msg.verbose(path, "is not a lua file - aborting addon setup") + end + + local addon_parsers = load_addon(path) + if not addon_parsers or type(addon_parsers) ~= "table" then + return msg.error("addon", path, "did not return a table") + end + + --if the table contains a priority key then we assume it isn't an array of parsers + if not addon_parsers[1] then + addon_parsers = { addon_parsers } + end + + for _, parser in ipairs(addon_parsers) do + setup_parser(parser, file) + end +end + +--loading external addons +local function setup_addons() + local addon_dir = mp.command_native({ "expand-path", o.addon_directory .. "/" }) + local files = utils.readdir(addon_dir) + if not files then + error("could not read addon directory") + end + + for _, file in ipairs(files) do + setup_addon(file, addon_dir .. file) + end + table.sort(parsers, function(a, b) + return a.priority < b.priority + end) + + --we want to store the indexes of the parsers + for i = #parsers, 1, -1 do + parsers[parsers[i]].index = i + end + + --we want to run the setup functions for each addon + for index, parser in ipairs(parsers) do + if parser.setup then + local success = xpcall(function() + parser:setup() + end, API.traceback) + if not success then + msg.error( + "parser", + parser:get_id(), + "threw an error in the setup method - removing from list of parsers" + ) + table.remove(parsers, index) + end + end + end +end + +--sets up the compatible extensions list +local function setup_extensions_list() + --setting up subtitle extensions + for ext in API.iterate_opt(o.subtitle_extensions:lower()) do + sub_extensions[ext] = true + extensions[ext] = true + end + + --setting up audio extensions + for ext in API.iterate_opt(o.audio_extensions:lower()) do + audio_extensions[ext] = true + extensions[ext] = true + end + + --adding file extensions to the set + for _, ext in ipairs(compatible_file_extensions) do + extensions[ext] = true + end + + --adding extra extensions on the whitelist + for str in API.iterate_opt(o.extension_whitelist:lower()) do + extensions[str] = true + end + + --removing extensions that are in the blacklist + for str in API.iterate_opt(o.extension_blacklist:lower()) do + extensions[str] = nil + end +end + +--splits the string into a table on the semicolons +local function setup_root() + root = {} + for str in API.iterate_opt(o.root) do + local path = mp.command_native({ "expand-path", str }) + path = API.fix_path(path, true) + + local temp = { name = path, type = "dir", label = str, ass = API.ass_escape(str, true) } + + root[#root + 1] = temp + end +end + +setup_root() + +setup_parser(file_parser, "file-browser.lua") +if o.addons then + --all of the API functions need to be defined before this point for the addons to be able to access them safely + setup_addons() +end + +--these need to be below the addon setup in case any parsers add custom entries +setup_extensions_list() +setup_keybinds() + +------------------------------------------------------------------------------------------ +------------------------------Other Script Compatability---------------------------------- +------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------ + +local function scan_directory_json(directory, response_str) + if not directory then + msg.error("did not receive a directory string") + return + end + if not response_str then + msg.error("did not receive a response string") + return + end + + directory = mp.command_native({ "expand-path", directory }, "") + if directory ~= "" then + directory = API.fix_path(directory, true) + end + msg.verbose( + ("recieved %q from 'get-directory-contents' script message - returning result to %q"):format( + directory, + response_str + ) + ) + + local list, opts = parse_directory(directory, { source = "script-message" }) + opts.API_VERSION = API_VERSION + + local err + list, err = API.format_json_safe(list) + if not list then + msg.error(err) + end + + opts, err = API.format_json_safe(opts) + if not opts then + msg.error(err) + end + + mp.commandv("script-message", response_str, list or "", opts or "") +end + +pcall(function() + local input = require("user-input-module") + mp.add_key_binding("Alt+o", "browse-directory/get-user-input", function() + input.get_user_input(browse_directory, { request_text = "open directory:" }) + end) +end) + +------------------------------------------------------------------------------------------ +--------------------------------mpv API Callbacks----------------------------------------- +------------------------------------------------------------------------------------------ +------------------------------------------------------------------------------------------ + +--we don't want to add any overhead when the browser isn't open +mp.observe_property("path", "string", function(_, path) + if not state.hidden then + update_current_directory(_, path) + update_ass() + else + state.flag_update = true + end +end) + +--updates the dvd_device +mp.observe_property("dvd-device", "string", function(_, device) + if not device or device == "" then + device = "/dev/dvd/" + end + dvd_device = API.fix_path(device, true) +end) + +--declares the keybind to open the browser +mp.add_key_binding("MENU", "browse-files", toggle) +mp.add_key_binding("Ctrl+o", "open-browser", open) + +--allows keybinds/other scripts to auto-open specific directories +mp.register_script_message("browse-directory", browse_directory) + +--allows other scripts to request directory contents from file-browser +mp.register_script_message("get-directory-contents", function(directory, response_str) + API.coroutine.run(scan_directory_json, directory, response_str) +end) diff --git a/sway/.config/sway/config b/sway/.config/sway/config deleted file mode 100644 index d437a25..0000000 --- a/sway/.config/sway/config +++ /dev/null @@ -1,277 +0,0 @@ -### Variables -# -# Logo key. Use Mod1 for Alt. -set $mod Mod4 - -# Home row direction keys, like vim -set $left h -set $down j -set $up k -set $right l - -# Your preferred terminal emulator -set $term 'foot' - -# Your preferred application launcher -set $menu 'fuzzel' - -# Your preferred browser -set $browser 'firefox' - -# Your preferred notification daemon -set $notification 'mako' - -# Your preferred status bar -set $bar 'waybar' - -# Set theme -include themes/catppuccin-mocha - -# target title bg text indicator border -client.focused $lavender $base $text $rosewater $lavender -client.focused_inactive $overlay0 $base $text $rosewater $overlay0 -client.unfocused $overlay0 $base $text $rosewater $overlay0 -client.urgent $peach $base $peach $overlay0 $peach -client.placeholder $overlay0 $base $text $overlay0 $overlay0 -client.background $base - -### Output configuration -# -# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/) -# output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill -output * bg ~/.config/background.jpg fill - -# -# Example configuration: -# -# output HDMI-A-1 resolution 1920x1080 position 1920,0 -# -# You can get the names of your outputs by running: swaymsg -t get_outputs - -### Idle configuration -exec swayidle -w \ - timeout 300 'swaylock -f -c 000000' \ - timeout 600 'swaymsg "output * power off"' resume 'swaymsg "output * power on"' \ - before-sleep 'swaylock -f -c 000000' - -# This will lock your screen after 300 seconds of inactivity, then turn off -# your displays after another 300 seconds, and turn your screens back on when -# resumed. It will also lock your screen before your computer goes to sleep. - -### Run notification daemon -exec $notification - -### Run status bar -exec $bar - -### Start Pipewire session -exec pipewire - -### Input configuration -# -# Example configuration: -# -# input type:touchpad { -# dwt enabled -# tap enabled -# natural_scroll enabled -# middle_emulation enabled -# } -# -# input type:keyboard { -# xkb_layout "eu" -# } -# -# You can also configure each device individually. -# Read `man 5 sway-input` for more information about this section. - -### Key bindings -# -# Basics: -# - # Start a terminal - bindsym $mod+Return exec $term - - # Kill focused window - bindsym $mod+Shift+q kill - - # Start your launcher - bindsym $mod+d exec $menu - - # Star my browser - bindsym $mod+Shift+b exec $browser - - # Drag floating windows by holding down $mod and left mouse button. - # Resize them with right mouse button + $mod. - # Despite the name, also works for non-floating windows. - # Change normal to inverse to use left mouse button for resizing and right - # mouse button for dragging. - floating_modifier $mod normal - - # Reload the configuration file - bindsym $mod+Shift+c reload - - # Exit sway (logs you out of your Wayland session) - bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' - -# -# Moving around: -# - # Move your focus around - bindsym $mod+$left focus left - bindsym $mod+$down focus down - bindsym $mod+$up focus up - bindsym $mod+$right focus right - # Or use $mod+[up|down|left|right] - bindsym $mod+Left focus left - bindsym $mod+Down focus down - bindsym $mod+Up focus up - bindsym $mod+Right focus right - - # Move the focused window with the same, but add Shift - bindsym $mod+Shift+$left move left - bindsym $mod+Shift+$down move down - bindsym $mod+Shift+$up move up - bindsym $mod+Shift+$right move right - # Ditto, with arrow keys - bindsym $mod+Shift+Left move left - bindsym $mod+Shift+Down move down - bindsym $mod+Shift+Up move up - bindsym $mod+Shift+Right move right - -# -# Workspaces: -# - # Switch to workspace - bindsym $mod+1 workspace number 1 - bindsym $mod+2 workspace number 2 - bindsym $mod+3 workspace number 3 - bindsym $mod+4 workspace number 4 - bindsym $mod+5 workspace number 5 - bindsym $mod+6 workspace number 6 - bindsym $mod+7 workspace number 7 - bindsym $mod+8 workspace number 8 - bindsym $mod+9 workspace number 9 - bindsym $mod+0 workspace number 10 - - # Move focused container to workspace - bindsym $mod+Shift+1 move container to workspace number 1 - bindsym $mod+Shift+2 move container to workspace number 2 - bindsym $mod+Shift+3 move container to workspace number 3 - bindsym $mod+Shift+4 move container to workspace number 4 - bindsym $mod+Shift+5 move container to workspace number 5 - bindsym $mod+Shift+6 move container to workspace number 6 - bindsym $mod+Shift+7 move container to workspace number 7 - bindsym $mod+Shift+8 move container to workspace number 8 - bindsym $mod+Shift+9 move container to workspace number 9 - bindsym $mod+Shift+0 move container to workspace number 10 - -# -# Layout stuff: -# - # You can "split" the current object of your focus with - # $mod+b or $mod+v, for horizontal and vertical splits - # respectively. - bindsym $mod+b splith - bindsym $mod+v splitv - - # Switch the current container between different layout styles - bindsym $mod+s layout stacking - bindsym $mod+w layout tabbed - bindsym $mod+e layout toggle split - - # Make the current focus fullscreen - bindsym $mod+f fullscreen - - # Toggle the current focus between tiling and floating mode - bindsym $mod+Shift+space floating toggle - - # Swap focus between the tiling area and the floating area - bindsym $mod+space focus mode_toggle - - # Move focus to the parent container - bindsym $mod+a focus parent - -# -# Scratchpad: -# - # Sway has a "scratchpad", which is a bag of holding for windows. - # You can send windows there and get them back later. - - # Move the currently focused window to the scratchpad - bindsym $mod+Shift+minus move scratchpad - - # Show the next scratchpad window or hide the focused scratchpad window. - # If there are multiple scratchpad windows, this command cycles through them. - bindsym $mod+minus scratchpad show - -# -# Resizing containers: -# -mode "resize" { - # left will shrink the containers width - # right will grow the containers width - # up will shrink the containers height - # down will grow the containers height - bindsym $left resize shrink width 10px - bindsym $down resize grow height 10px - bindsym $up resize shrink height 10px - bindsym $right resize grow width 10px - - # Ditto, with arrow keys - bindsym Left resize shrink width 10px - bindsym Down resize grow height 10px - bindsym Up resize shrink height 10px - bindsym Right resize grow width 10px - - # Return to default mode - bindsym Return mode "default" - bindsym Escape mode "default" -} - -bindsym $mod+r mode "resize" - -# -# Utilities: -# - # Special keys to adjust volume via PulseAudio - bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle - bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5% - bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5% - bindsym --locked XF86AudioMicMute exec pactl set-source-mute \@DEFAULT_SOURCE@ toggle - # Special keys to adjust brightness via brightnessctl - bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%- - bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+ - # Special key to take a screenshot with grim - bindsym Print exec grim - -# -# Status Bar: -# -# Read `man 5 sway-bar` for more information about this section. -#bar { -# position top -# -# # When the status_command prints a new line to stdout, swaybar updates. -# # The default just shows the current date and time. -# status_command while date +'%Y-%m-%d %X'; do sleep 1; done -# -# colors { -# statusline #ffffff -# background #323232 -# inactive_workspace #32323200 #32323200 #5c5c5c -# } -#} - -### Window configurations - -gaps inner 10 -gaps outer 10 - -# No gaps when there is a single window -#smart_gaps on - -# Remove title bar -default_border pixel 2 - -include /etc/sway/config.d/* diff --git a/sway/.config/sway/themes/catppuccin-frappe b/sway/.config/sway/themes/catppuccin-frappe deleted file mode 100644 index 227d2cb..0000000 --- a/sway/.config/sway/themes/catppuccin-frappe +++ /dev/null @@ -1,26 +0,0 @@ -set $rosewater #f2d5cf -set $flamingo #eebebe -set $pink #f4b8e4 -set $mauve #ca9ee6 -set $red #e78284 -set $maroon #ea999c -set $peach #ef9f76 -set $yellow #e5c890 -set $green #a6d189 -set $teal #81c8be -set $sky #99d1db -set $sapphire #85c1dc -set $blue #8caaee -set $lavender #babbf1 -set $text #c6d0f5 -set $subtext1 #b5bfe2 -set $subtext0 #a5adce -set $overlay2 #949cbb -set $overlay1 #838ba7 -set $overlay0 #737994 -set $surface2 #626880 -set $surface1 #51576d -set $surface0 #414559 -set $base #303446 -set $mantle #292c3c -set $crust #232634 diff --git a/sway/.config/sway/themes/catppuccin-latte b/sway/.config/sway/themes/catppuccin-latte deleted file mode 100644 index b5164c6..0000000 --- a/sway/.config/sway/themes/catppuccin-latte +++ /dev/null @@ -1,26 +0,0 @@ -set $rosewater #dc8a78 -set $flamingo #dd7878 -set $pink #ea76cb -set $mauve #8839ef -set $red #d20f39 -set $maroon #e64553 -set $peach #fe640b -set $yellow #df8e1d -set $green #40a02b -set $teal #179299 -set $sky #04a5e5 -set $sapphire #209fb5 -set $blue #1e66f5 -set $lavender #7287fd -set $text #4c4f69 -set $subtext1 #5c5f77 -set $subtext0 #6c6f85 -set $overlay2 #7c7f93 -set $overlay1 #8c8fa1 -set $overlay0 #9ca0b0 -set $surface2 #acb0be -set $surface1 #bcc0cc -set $surface0 #ccd0da -set $base #eff1f5 -set $mantle #e6e9ef -set $crust #dce0e8 diff --git a/sway/.config/sway/themes/catppuccin-macchiato b/sway/.config/sway/themes/catppuccin-macchiato deleted file mode 100644 index 7523f26..0000000 --- a/sway/.config/sway/themes/catppuccin-macchiato +++ /dev/null @@ -1,26 +0,0 @@ -set $rosewater #f4dbd6 -set $flamingo #f0c6c6 -set $pink #f5bde6 -set $mauve #c6a0f6 -set $red #ed8796 -set $maroon #ee99a0 -set $peach #f5a97f -set $yellow #eed49f -set $green #a6da95 -set $teal #8bd5ca -set $sky #91d7e3 -set $sapphire #7dc4e4 -set $blue #8aadf4 -set $lavender #b7bdf8 -set $text #cad3f5 -set $subtext1 #b8c0e0 -set $subtext0 #a5adcb -set $overlay2 #939ab7 -set $overlay1 #8087a2 -set $overlay0 #6e738d -set $surface2 #5b6078 -set $surface1 #494d64 -set $surface0 #363a4f -set $base #24273a -set $mantle #1e2030 -set $crust #181926 diff --git a/sway/.config/sway/themes/catppuccin-mocha b/sway/.config/sway/themes/catppuccin-mocha deleted file mode 100644 index 77749f6..0000000 --- a/sway/.config/sway/themes/catppuccin-mocha +++ /dev/null @@ -1,26 +0,0 @@ -set $rosewater #f5e0dc -set $flamingo #f2cdcd -set $pink #f5c2e7 -set $mauve #cba6f7 -set $red #f38ba8 -set $maroon #eba0ac -set $peach #fab387 -set $yellow #f9e2af -set $green #a6e3a1 -set $teal #94e2d5 -set $sky #89dceb -set $sapphire #74c7ec -set $blue #89b4fa -set $lavender #b4befe -set $text #cdd6f4 -set $subtext1 #bac2de -set $subtext0 #a6adc8 -set $overlay2 #9399b2 -set $overlay1 #7f849c -set $overlay0 #6c7086 -set $surface2 #585b70 -set $surface1 #45475a -set $surface0 #313244 -set $base #1e1e2e -set $mantle #181825 -set $crust #11111b diff --git a/waybar/.config/waybar/config.jsonc b/waybar/.config/waybar/config.jsonc deleted file mode 100644 index 7cc88e3..0000000 --- a/waybar/.config/waybar/config.jsonc +++ /dev/null @@ -1,160 +0,0 @@ -{ - "layer": "top", // Waybar at top layer - "position": "top", // Waybar position (top|bottom|left|right) - "modules-left": [ - "sway/workspaces", - "sway/window" - ], - "modules-center": [ - "clock" - ], - "modules-right": [ - "pulseaudio", - "tray", - "bluetooth", - "battery", - "custom/power" - ], - "sway/workspaces": { - "disable-scroll": true, - "disable-markup": false, - "all-outputs": true, - "format": " {icon} ", - "on-click": "activate", - "sort-by-number": true, - "format-icons": { - "1": "", - "2": "", - "3": "", - "4": "", - "5": "", - "urgent": "", - "active": "", - "default": "" - }, - "persistent-workspaces": { - "1": [ - "HDMI-A-1" - ], - "2": [ - "HDMI-A-1" - ], - "3": [ - "HDMI-A-1" - ], - "4": [ - "HDMI-A-1" - ], - "5": [ - "HDMI-A-1" - ], - "6": [ - "HDMI-A-1" - ], - "7": [ - "HDMI-A-1" - ], - "8": [ - "HDMI-A-1" - ], - "9": [ - "HDMI-A-1" - ], - "10": [ - "eDP-1" - ] - } - }, - "sway/window": { - "format": "{}", - "max-length": 50 - }, - "tray": { - "icon-size": 24, - "spacing": 5 - }, - "custom/spotify": { - "format": " {}", - "escape": true, - "interval": 5, - "tooltip": false, - "exec": "playerctl metadata --format='{{ title }}'", - "on-click": "playerctl play-pause", - "max-length": 50 - }, - "clock": { - "timezone": "Europe/Rome", - "tooltip-format": "{:%Y %B}\n{calendar}", - "format-alt": "{:%d/%m/%Y}", - "format": "{:%a %b %d %I:%M %p}" - }, - "backlight": { - "device": "intel_backlight", - "format": "{icon} {percent}%", - "format-icons": [ - "", - "", - "", - "", - "", - "", - "", - "", - "" - ] - }, - "battery": { - "states": { - "warning": 30, - "critical": 15 - }, - "format": "{icon} {capacity}%", - "format-charging": "󰂄", - "format-plugged": "󰂄", - "format-alt": "{icon}", - "format-icons": [ - "󰁺", - "󰁻", - "󰁼", - "󰁽", - "󰁾", - "󰁿", - "󰂀", - "󰂁", - "󰂂" - ] - }, - "pulseaudio": { - // "scroll-step": 1, // %, can be a float - "format": "{icon} {volume}%", - "format-muted": "", - "format-icons": { - "default": [ - "", - "", - " " - ] - }, - "on-click": "pavucontrol" - }, - "custom/lock": { - "tooltip": false, - "on-click": "sh -c '(sleep 0.5s; swaylock --grace 0)' & disown", - "format": "" - }, - "custom/power": { - "tooltip": false, - "on-click": "wlogout &", - "format": "" - }, - "bluetooth": { - "format": " {status}", - "format-connected": " {device_alias}", - "format-connected-battery": " {device_alias} {device_battery_percentage}%", - "format-off": "󰂲", // "format-device-preference": [ "device1", "device2" ], // preference list deciding the displayed device - "tooltip-format": "{controller_alias}\t{controller_address}\n\n{num_connections} connected", - "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}", - "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}", - "tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}%" - } -} diff --git a/waybar/.config/waybar/style.css b/waybar/.config/waybar/style.css deleted file mode 100644 index 8343fd8..0000000 --- a/waybar/.config/waybar/style.css +++ /dev/null @@ -1,107 +0,0 @@ -@import "themes/mocha.css"; - -* { - font-family: FiraCode Nerd Font; - font-size: 12px; - min-height: 0; -} - -#waybar { - /*background: transparent;*/ - color: @text; - /*margin: 5px 5px;*/ -} - -#workspaces { - border-radius: 1rem; - margin: 5px; - background-color: @surface0; - margin-left: 1rem; -} - -#workspaces button { - color: @lavender; - border-radius: 1rem; - padding: 0.4rem; -} - -#workspaces button.active { - color: @sky; - border-radius: 1rem; -} - -#workspaces button:hover { - color: @sapphire; - border-radius: 1rem; -} - -#custom-music, -#tray, -#backlight, -#bluetooth, -#clock, -#battery, -#pulseaudio, -#custom-lock, -#custom-power { - background-color: @surface0; - padding: 0.5rem 1rem; - margin: 5px 0; -} - -#clock { - border-radius: 0px 1rem 1rem 0px; - margin-right: 1rem; -} - -#battery { - color: @green; -} - -#battery.charging { - color: @green; -} - -#battery.warning:not(.charging) { - color: @red; -} - -#bluetooth { - color: @blue; -} - -#bluetooth, #battery { - border-radius: 0; -} - -#pulseaudio { - color: @maroon; - border-radius: 1rem 0px 0px 1rem; - margin-left: 1rem; -} - -#clock, #custom-music { - color: @mauve; - border-radius: 1rem; -} - -#custom-lock { - border-radius: 1rem 0px 0px 1rem; - color: @lavender; -} - -#custom-power { - margin-right: 1rem; - border-radius: 0px 1rem 1rem 0px; - color: @red; -} - -#tray { - margin-right: 1rem; - border-radius: 1rem; -} - -window#waybar { - background-color: shade(@base, 0.9); - border: 2px solid alpha(@crust, 0.3); -} diff --git a/waybar/.config/waybar/themes/frappe.css b/waybar/.config/waybar/themes/frappe.css deleted file mode 100644 index c06b8fb..0000000 --- a/waybar/.config/waybar/themes/frappe.css +++ /dev/null @@ -1,26 +0,0 @@ -@define-color rosewater #f2d5cf; -@define-color flamingo #eebebe; -@define-color pink #f4b8e4; -@define-color mauve #ca9ee6; -@define-color red #e78284; -@define-color maroon #ea999c; -@define-color peach #ef9f76; -@define-color yellow #e5c890; -@define-color green #a6d189; -@define-color teal #81c8be; -@define-color sky #99d1db; -@define-color sapphire #85c1dc; -@define-color blue #8caaee; -@define-color lavender #babbf1; -@define-color text #c6d0f5; -@define-color subtext1 #b5bfe2; -@define-color subtext0 #a5adce; -@define-color overlay2 #949cbb; -@define-color overlay1 #838ba7; -@define-color overlay0 #737994; -@define-color surface2 #626880; -@define-color surface1 #51576d; -@define-color surface0 #414559; -@define-color base #303446; -@define-color mantle #292c3c; -@define-color crust #232634; diff --git a/waybar/.config/waybar/themes/latte.css b/waybar/.config/waybar/themes/latte.css deleted file mode 100644 index bb101b1..0000000 --- a/waybar/.config/waybar/themes/latte.css +++ /dev/null @@ -1,26 +0,0 @@ -@define-color rosewater #dc8a78; -@define-color flamingo #dd7878; -@define-color pink #ea76cb; -@define-color mauve #8839ef; -@define-color red #d20f39; -@define-color maroon #e64553; -@define-color peach #fe640b; -@define-color yellow #df8e1d; -@define-color green #40a02b; -@define-color teal #179299; -@define-color sky #04a5e5; -@define-color sapphire #209fb5; -@define-color blue #1e66f5; -@define-color lavender #7287fd; -@define-color text #4c4f69; -@define-color subtext1 #5c5f77; -@define-color subtext0 #6c6f85; -@define-color overlay2 #7c7f93; -@define-color overlay1 #8c8fa1; -@define-color overlay0 #9ca0b0; -@define-color surface2 #acb0be; -@define-color surface1 #bcc0cc; -@define-color surface0 #ccd0da; -@define-color base #eff1f5; -@define-color mantle #e6e9ef; -@define-color crust #dce0e8; diff --git a/waybar/.config/waybar/themes/macchiato.css b/waybar/.config/waybar/themes/macchiato.css deleted file mode 100644 index 112ee32..0000000 --- a/waybar/.config/waybar/themes/macchiato.css +++ /dev/null @@ -1,26 +0,0 @@ -@define-color rosewater #f4dbd6; -@define-color flamingo #f0c6c6; -@define-color pink #f5bde6; -@define-color mauve #c6a0f6; -@define-color red #ed8796; -@define-color maroon #ee99a0; -@define-color peach #f5a97f; -@define-color yellow #eed49f; -@define-color green #a6da95; -@define-color teal #8bd5ca; -@define-color sky #91d7e3; -@define-color sapphire #7dc4e4; -@define-color blue #8aadf4; -@define-color lavender #b7bdf8; -@define-color text #cad3f5; -@define-color subtext1 #b8c0e0; -@define-color subtext0 #a5adcb; -@define-color overlay2 #939ab7; -@define-color overlay1 #8087a2; -@define-color overlay0 #6e738d; -@define-color surface2 #5b6078; -@define-color surface1 #494d64; -@define-color surface0 #363a4f; -@define-color base #24273a; -@define-color mantle #1e2030; -@define-color crust #181926; diff --git a/waybar/.config/waybar/themes/mocha.css b/waybar/.config/waybar/themes/mocha.css deleted file mode 100644 index 0eb6a82..0000000 --- a/waybar/.config/waybar/themes/mocha.css +++ /dev/null @@ -1,26 +0,0 @@ -@define-color rosewater #f5e0dc; -@define-color flamingo #f2cdcd; -@define-color pink #f5c2e7; -@define-color mauve #cba6f7; -@define-color red #f38ba8; -@define-color maroon #eba0ac; -@define-color peach #fab387; -@define-color yellow #f9e2af; -@define-color green #a6e3a1; -@define-color teal #94e2d5; -@define-color sky #89dceb; -@define-color sapphire #74c7ec; -@define-color blue #89b4fa; -@define-color lavender #b4befe; -@define-color text #cdd6f4; -@define-color subtext1 #bac2de; -@define-color subtext0 #a6adc8; -@define-color overlay2 #9399b2; -@define-color overlay1 #7f849c; -@define-color overlay0 #6c7086; -@define-color surface2 #585b70; -@define-color surface1 #45475a; -@define-color surface0 #313244; -@define-color base #1e1e2e; -@define-color mantle #181825; -@define-color crust #11111b; diff --git a/yt-dlp/.config/yt-dlp/config b/yt-dlp/.config/yt-dlp/config new file mode 100755 index 0000000..0358374 --- /dev/null +++ b/yt-dlp/.config/yt-dlp/config @@ -0,0 +1,8 @@ +--ignore-errors +# --no-playlist + +# Save in ~/Videos +-o ~/Videos/%(title)s.%(ext)s + +# Prefer 1080p or lower resolutions +-f bestvideo[ext=mp4][width<2000][height<=1200]+bestaudio[ext=m4a]/bestvideo[ext=webm][width<2000][height<=1200]+bestaudio[ext=webm]/bestvideo[width<2000][height<=1200]+bestaudio/best[width<2000][height<=1200]/best diff --git a/zsh/.oh-my-zsh/custom/aliases.zsh b/zsh/.oh-my-zsh/custom/aliases.zsh index d3612f2..1e41d08 100644 --- a/zsh/.oh-my-zsh/custom/aliases.zsh +++ b/zsh/.oh-my-zsh/custom/aliases.zsh @@ -15,7 +15,7 @@ is_debian_based() { return 1 # NO Debian-based } -alias ls="eza --color=always --group-directories-first --icons" +alias ls="eza --color=always --group-directories-first --icons=always" # Replace some more things with better alternatives if is_debian_based; then diff --git a/zsh/.profile.d/sway-startup.sh b/zsh/.profile.d/sway-startup.sh index 4ff1972..f271ca6 100755 --- a/zsh/.profile.d/sway-startup.sh +++ b/zsh/.profile.d/sway-startup.sh @@ -1,9 +1,55 @@ #!/usr/bin/env bash if [ -z "$DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then - if [ -n "$DBUS_SESSION_BUS_ADDRESS" ]; then - exec sway - else - exec dbus-launch --exit-with-session sway - fi + if [ -n "$DBUS_SESSION_BUS_ADDRESS" ]; then + + # XDG Settings Basic + export XDG_CONFIG_HOME=${HOME}/.config + export XDG_DATA_HOME=${HOME}/.local/share + export XDG_CACHE_HOME=${HOME}/.local/cache + export XDG_STATE_HOME=${HOME}/.local/state + + # XDG_CONFIG_HOME + export GTK2_RC_FILES=${XDG_CONFIG_HOME}/gtk-2.0/gtkrc-2.0 + + # Reduces crashs for some gdk apps, like evolution + # ! Do not set as global variable. Electron Apps will not start ! + # export GDK_BACKEND=wayland + + # Required for tray icons on waybar + export XDG_CURRENT_DESKTOP=sway + + # Enable QT apps to have gtk theme + export QT_QPA_PLATFORMTHEME=qt5ct + + # Force wayland on qt apps + export QT_QPA_PLATFORM=wayland + + export QT_WAYLAND_DISABLE_WINDOWDECORATION=1 + # Explicitly set to '96' instead of 'physical' because some apps have problems + # Looking at you nextcloud client! + # https://github.com/nextcloud/desktop/issues/1079 + # https://github.com/swaywm/sway/issues/2424 + export QT_WAYLAND_FORCE_DPI=96 + + # Make Qt apps honour DPI settings. + export QT_AUTO_SCREEN_SCALE_FACTOR=1 + + # Mozilla Wayland support + hardware video decoding + export MOZ_ENABLE_WAYLAND=1 + export MOZ_WAYLAND_USE_VAAPI=1 + + # SDL + export SDL_VIDEODRIVER=wayland + + # Java under Xwayland + export _JAVA_AWT_WM_NONREPARENTING=1 + + # Session Type for later screensharing + export XDG_SESSION_TYPE=wayland + + exec dbus-launch --exit-with-session sway + else + echo "Cannot found dbus session: Sway don't work" + fi fi