From c1afb50799c08aa2ed2308e73d7e3084f03e8843 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Fri, 28 Feb 2025 11:41:18 +0100 Subject: [PATCH] Upload from GitHub --- README.md | 10 + ai-update.sh | 3 + ai.sh | 24 + collect.sh | 52 + collectLaptop.sh | 29 + fix-da-snippets.py | 73 + general/.bash_history | 500 +++ general/.bashrc | 359 +++ general/configs/Thunar/accels.scm | 131 + general/configs/Thunar/uca.xml | 25 + .../configs/VSCodium/User/keybindings.json | 1 + general/configs/VSCodium/User/settings.json | 73 + .../User/snippets/docSetup.code-snippets | 22 + .../configs/VSCodium/User/snippets/html.json | 58 + .../VSCodium/User/snippets/javascript.json | 106 + .../configs/VSCodium/User/snippets/latex.json | 361 +++ .../configs/VSCodium/User/snippets/tex.json | 124 + .../VSCodium/User/snippets/typescript.json | 106 + .../configs/VSCodium/User/snippets/vue.json | 24 + .../VSCodium/User/syncLocalSettings.json | 36 + general/configs/VSCodium/product.json | 8 + general/configs/dunst/defaultDunst | 58 + general/configs/dunst/dunstrc | 58 + general/configs/dunst/mcLarenDunst | 0 general/configs/fish/config.fish | 111 + general/configs/fish/fish_variables | 33 + general/configs/kitty/current-theme.conf | 51 + general/configs/kitty/kitty.conf | 2644 ++++++++++++++++ general/configs/kitty/kitty.conf.bak | 2639 ++++++++++++++++ .../mpv/fonts/Material-Design-Iconic-Font.ttf | Bin 0 -> 99212 bytes general/configs/mpv/scripts/modernx.lua | 2742 +++++++++++++++++ general/configs/rofi/applets/android/apps.sh | 94 + .../configs/rofi/applets/android/backlight.sh | 84 + .../configs/rofi/applets/android/colors.rasi | 22 + .../configs/rofi/applets/android/confirm.rasi | 24 + .../configs/rofi/applets/android/five.rasi | 92 + .../configs/rofi/applets/android/message.rasi | 24 + general/configs/rofi/applets/android/mpd.sh | 76 + .../configs/rofi/applets/android/powermenu.sh | 94 + .../rofi/applets/android/quicklinks.sh | 60 + .../rofi/applets/android/screenshot.sh | 48 + general/configs/rofi/applets/android/six.rasi | 92 + .../configs/rofi/applets/android/three.rasi | 92 + .../configs/rofi/applets/android/volume.sh | 56 + general/configs/rofi/applets/applets/apps.sh | 95 + .../configs/rofi/applets/applets/backlight.sh | 86 + .../configs/rofi/applets/applets/battery.sh | 65 + .../applets/applets/configs/circle/apps.rasi | 128 + .../applets/configs/circle/backlight.rasi | 128 + .../applets/configs/circle/battery.rasi | 128 + .../applets/applets/configs/circle/mpd.rasi | 128 + .../applets/configs/circle/network.rasi | 128 + .../applets/configs/circle/powermenu.rasi | 128 + .../applets/configs/circle/quicklinks.rasi | 128 + .../applets/configs/circle/screenshot.rasi | 128 + .../applets/applets/configs/circle/time.rasi | 128 + .../applets/configs/circle/volume.rasi | 128 + .../applets/applets/configs/rounded/apps.rasi | 128 + .../applets/configs/rounded/backlight.rasi | 128 + .../applets/configs/rounded/battery.rasi | 128 + .../applets/applets/configs/rounded/mpd.rasi | 128 + .../applets/configs/rounded/network.rasi | 128 + .../applets/configs/rounded/powermenu.rasi | 128 + .../applets/configs/rounded/quicklinks.rasi | 128 + .../applets/configs/rounded/screenshot.rasi | 128 + .../applets/applets/configs/rounded/time.rasi | 128 + .../applets/configs/rounded/volume.rasi | 128 + .../applets/applets/configs/square/apps.rasi | 127 + .../applets/configs/square/backlight.rasi | 127 + .../applets/configs/square/battery.rasi | 127 + .../applets/applets/configs/square/mpd.rasi | 127 + .../applets/configs/square/network.rasi | 127 + .../applets/configs/square/powermenu.rasi | 127 + .../applets/configs/square/quicklinks.rasi | 127 + .../applets/configs/square/screenshot.rasi | 127 + .../applets/applets/configs/square/time.rasi | 127 + .../applets/configs/square/volume.rasi | 127 + general/configs/rofi/applets/applets/mpd.sh | 78 + .../configs/rofi/applets/applets/network.sh | 68 + .../configs/rofi/applets/applets/powermenu.sh | 98 + .../rofi/applets/applets/quicklinks.sh | 62 + .../rofi/applets/applets/screenshot.sh | 50 + general/configs/rofi/applets/applets/style.sh | 15 + general/configs/rofi/applets/applets/time.sh | 24 + .../configs/rofi/applets/applets/volume.sh | 58 + general/configs/rofi/applets/menu/apps.sh | 95 + .../configs/rofi/applets/menu/backlight.sh | 86 + general/configs/rofi/applets/menu/battery.sh | 65 + .../applets/menu/configs/circle/apps.rasi | 128 + .../menu/configs/circle/backlight.rasi | 128 + .../applets/menu/configs/circle/battery.rasi | 128 + .../rofi/applets/menu/configs/circle/mpd.rasi | 128 + .../applets/menu/configs/circle/network.rasi | 128 + .../menu/configs/circle/powermenu.rasi | 128 + .../menu/configs/circle/quicklinks.rasi | 128 + .../menu/configs/circle/screenshot.rasi | 128 + .../applets/menu/configs/circle/time.rasi | 128 + .../applets/menu/configs/circle/volume.rasi | 128 + .../applets/menu/configs/rounded/apps.rasi | 128 + .../menu/configs/rounded/backlight.rasi | 128 + .../applets/menu/configs/rounded/battery.rasi | 128 + .../applets/menu/configs/rounded/mpd.rasi | 128 + .../applets/menu/configs/rounded/network.rasi | 128 + .../menu/configs/rounded/powermenu.rasi | 128 + .../menu/configs/rounded/quicklinks.rasi | 128 + .../menu/configs/rounded/screenshot.rasi | 128 + .../applets/menu/configs/rounded/time.rasi | 128 + .../applets/menu/configs/rounded/volume.rasi | 128 + .../applets/menu/configs/square/apps.rasi | 127 + .../menu/configs/square/backlight.rasi | 127 + .../applets/menu/configs/square/battery.rasi | 127 + .../rofi/applets/menu/configs/square/mpd.rasi | 127 + .../applets/menu/configs/square/network.rasi | 127 + .../menu/configs/square/powermenu.rasi | 127 + .../menu/configs/square/quicklinks.rasi | 127 + .../menu/configs/square/screenshot.rasi | 127 + .../applets/menu/configs/square/time.rasi | 127 + .../applets/menu/configs/square/volume.rasi | 127 + general/configs/rofi/applets/menu/mpd.sh | 78 + general/configs/rofi/applets/menu/network.sh | 68 + .../configs/rofi/applets/menu/powermenu.sh | 98 + .../configs/rofi/applets/menu/quicklinks.sh | 62 + .../configs/rofi/applets/menu/screenshot.sh | 50 + general/configs/rofi/applets/menu/style.sh | 15 + general/configs/rofi/applets/menu/time.sh | 24 + general/configs/rofi/applets/menu/volume.sh | 58 + .../rofi/applets/styles/adapta-nokto.rasi | 8 + .../configs/rofi/applets/styles/adapta.rasi | 8 + .../configs/rofi/applets/styles/adwaita.rasi | 8 + .../configs/rofi/applets/styles/arc-dark.rasi | 8 + general/configs/rofi/applets/styles/arc.rasi | 8 + .../configs/rofi/applets/styles/armchair.rasi | 8 + .../configs/rofi/applets/styles/colors.rasi | 22 + .../configs/rofi/applets/styles/confirm.rasi | 24 + general/configs/rofi/applets/styles/dark.rasi | 8 + .../configs/rofi/applets/styles/darkpink.rasi | 8 + .../configs/rofi/applets/styles/fresh.rasi | 8 + .../configs/rofi/applets/styles/gruvbox.rasi | 8 + .../configs/rofi/applets/styles/inside.rasi | 8 + .../applets/styles/material-dark/amber.rasi | 8 + .../applets/styles/material-dark/blue.rasi | 8 + .../styles/material-dark/blue_grey.rasi | 8 + .../applets/styles/material-dark/brown.rasi | 8 + .../applets/styles/material-dark/cyan.rasi | 8 + .../styles/material-dark/deep_orange.rasi | 8 + .../styles/material-dark/deep_purple.rasi | 8 + .../applets/styles/material-dark/green.rasi | 8 + .../applets/styles/material-dark/grey.rasi | 8 + .../applets/styles/material-dark/indigo.rasi | 8 + .../styles/material-dark/light_blue.rasi | 8 + .../styles/material-dark/light_green.rasi | 8 + .../applets/styles/material-dark/lime.rasi | 8 + .../applets/styles/material-dark/orange.rasi | 8 + .../applets/styles/material-dark/pink.rasi | 8 + .../applets/styles/material-dark/purple.rasi | 8 + .../applets/styles/material-dark/red.rasi | 8 + .../applets/styles/material-dark/teal.rasi | 8 + .../applets/styles/material-dark/yellow.rasi | 8 + .../applets/styles/material-light/amber.rasi | 8 + .../applets/styles/material-light/blue.rasi | 8 + .../styles/material-light/blue_grey.rasi | 8 + .../applets/styles/material-light/brown.rasi | 8 + .../applets/styles/material-light/cyan.rasi | 8 + .../styles/material-light/deep_orange.rasi | 8 + .../styles/material-light/deep_purple.rasi | 8 + .../applets/styles/material-light/green.rasi | 8 + .../applets/styles/material-light/grey.rasi | 8 + .../applets/styles/material-light/indigo.rasi | 8 + .../styles/material-light/light_blue.rasi | 8 + .../styles/material-light/light_green.rasi | 8 + .../applets/styles/material-light/lime.rasi | 8 + .../applets/styles/material-light/orange.rasi | 8 + .../applets/styles/material-light/pink.rasi | 8 + .../applets/styles/material-light/purple.rasi | 8 + .../applets/styles/material-light/red.rasi | 8 + .../applets/styles/material-light/teal.rasi | 8 + .../applets/styles/material-light/yellow.rasi | 8 + .../configs/rofi/applets/styles/message.rasi | 24 + .../configs/rofi/applets/styles/minimo.rasi | 8 + .../configs/rofi/applets/styles/party.rasi | 8 + .../configs/rofi/applets/styles/sirin.rasi | 8 + general/configs/rofi/bin/usedcpu | 45 + general/configs/rofi/bin/usedram | 27 + general/configs/rofi/config.rasi | 11 + general/configs/rofi/global/emoji.rasi | 68 + general/configs/rofi/global/history.txt | 0 general/configs/rofi/global/icons/ddg.svg | 615 ++++ general/configs/rofi/global/icons/google.svg | 365 +++ general/configs/rofi/global/icons/history.svg | 75 + general/configs/rofi/global/icons/result.svg | 57 + .../configs/rofi/global/icons/suggestion.svg | 1 + general/configs/rofi/global/rofi-spotlight.sh | 692 +++++ general/configs/rofi/global/rofi.rasi | 162 + general/configs/rofi/global/web-search.py | 167 + .../configs/rofi/powermenu/drop_square.rasi | 123 + general/configs/rofi/powermenu/powermenu.rasi | 93 + general/configs/rofi/powermenu/powermenu.sh | 70 + .../configs/rofi/powermenu/styles/berry.rasi | 9 + .../configs/rofi/powermenu/styles/bluish.rasi | 9 + .../configs/rofi/powermenu/styles/cocoa.rasi | 9 + .../configs/rofi/powermenu/styles/colors.rasi | 10 + .../configs/rofi/powermenu/styles/faded.rasi | 9 + .../configs/rofi/powermenu/styles/gotham.rasi | 9 + .../configs/rofi/powermenu/styles/mask.rasi | 9 + .../rofi/powermenu/styles/nightly.rasi | 9 + .../configs/rofi/powermenu/styles/nordic.rasi | 9 + general/configs/rofi/scripts/emoji | 5 + general/configs/rofi/scripts/powermenu.sh | 98 + general/configs/rofi/scripts/screenshot-wl.sh | 31 + general/configs/rofi/scripts/screenshot.sh | 31 + general/configs/rofi/spotlight/history.txt | 3 + general/configs/rofi/spotlight/icons/ddg.svg | 615 ++++ .../configs/rofi/spotlight/icons/google.svg | 365 +++ .../configs/rofi/spotlight/icons/history.svg | 75 + .../configs/rofi/spotlight/icons/result.svg | 57 + .../configs/rofi/spotlight/rofi-spotlight.sh | 692 +++++ general/configs/rofi/spotlight/rofi.rasi | 153 + general/configs/rofi/spotlight/web-search.py | 169 + .../themes/arc_dark_transparent_colors.rasi | 34 + general/configs/rofi/themes/defaultTheme.rasi | 78 + general/configs/rofi/themes/mcLarenTheme.rasi | 82 + general/configs/rofi/themes/nord.rasi | 127 + general/configs/rofi/themes/power.rasi | 78 + general/configs/rofi/themes/runnerTheme.rasi | 78 + general/configs/rofi/themes/sidetab-nord.rasi | 78 + general/configs/rofi/themes/sidetab.rasi | 135 + general/configs/terminator/config | 21 + general/configs/wlogout/default-style.css | 60 + general/configs/wlogout/layout | 30 + general/configs/wlogout/lock-hover.png | Bin 0 -> 5771 bytes general/configs/wlogout/lock.png | Bin 0 -> 5771 bytes general/configs/wlogout/logout-hover.png | Bin 0 -> 3784 bytes general/configs/wlogout/logout.png | Bin 0 -> 3784 bytes general/configs/wlogout/mclaren-style.css | 0 general/configs/wlogout/power-hover.png | Bin 0 -> 10841 bytes general/configs/wlogout/power.png | Bin 0 -> 10782 bytes general/configs/wlogout/restart-hover.png | Bin 0 -> 7810 bytes general/configs/wlogout/restart.png | Bin 0 -> 7810 bytes general/configs/wlogout/sleep-hover.png | Bin 0 -> 5721 bytes general/configs/wlogout/sleep.png | Bin 0 -> 5721 bytes general/configs/wlogout/style.css | 60 + .../yazi/flavors/tokyo-night.yazi/LICENSE | 21 + .../flavors/tokyo-night.yazi/LICENSE-tmtheme | 21 + .../yazi/flavors/tokyo-night.yazi/README.md | 37 + .../yazi/flavors/tokyo-night.yazi/flavor.toml | 167 + .../yazi/flavors/tokyo-night.yazi/preview.png | Bin 0 -> 729541 bytes .../yazi/flavors/tokyo-night.yazi/tmtheme.xml | 1329 ++++++++ general/configs/yazi/theme.toml | 2 + general/docker/daemon.json | 3 + general/hyprland/binds.conf | 140 + general/hyprland/general.conf | 122 + general/hyprland/windowrules.conf | 108 + general/mkinitcpio.conf | 73 + general/pacman.conf | 100 + general/vscode-extensions | 49 + install-new.sh | 58 + install-part-two.sh | 30 + laptop/.bashrc | 359 +++ laptop/configs/hypr/hypridle.conf | 39 + laptop/configs/hypr/hyprland-old.conf | 349 +++ laptop/configs/hypr/hyprland.conf | 54 + laptop/configs/hypr/hyprlock.conf | 96 + laptop/configs/hypr/wall_4K.png | Bin 0 -> 49045 bytes laptop/configs/hypr/xdg-portal-hyprland | 8 + laptop/configs/waybar/config.jsonc | 137 + laptop/configs/waybar/scripts/supower.py | 196 ++ laptop/configs/waybar/style.css | 135 + laptop/environment | 13 + laptop/grub | 63 + laptop/installedPackages.txt | 1472 +++++++++ laptop/mkinitcpio.conf | 73 + laptop/pacman.conf | 100 + laptop/vscode-extensions | 36 + pc/.bash_history | 500 +++ pc/.bashrc | 359 +++ pc/configs/OpenRGB/OpenRGB.json | 1284 ++++++++ pc/configs/Portmaster/Preferences | 1 + pc/configs/hypr/hypridle.conf | 39 + pc/configs/hypr/hyprland.conf | 38 + pc/configs/hypr/hyprlock.conf | 96 + pc/configs/hypr/wall_4K.png | Bin 0 -> 49045 bytes pc/configs/hypr/xdg-portal-hyprland | 8 + pc/configs/waybar/config.jsonc | 98 + pc/configs/waybar/default-style.css | 117 + pc/configs/waybar/dualsense-notifier.sh | 34 + pc/configs/waybar/mclaren-style.css | 112 + pc/configs/waybar/style.css | 113 + pc/docker/daemon.json | 3 + pc/environment | 16 + pc/grub | 63 + pc/installedPackages.txt | 2077 +++++++++++++ pc/mkinitcpio.conf | 73 + pc/mnt/mnt-janis.mount | 13 + pc/mnt/mnt-janisShare.mount | 13 + pc/mnt/mnt-shared.mount | 13 + pc/pacman.conf | 100 + pc/vscode-extensions | 48 + server/background.jpg | Bin 0 -> 214408 bytes server/index.html | 95 + setup.sh | 18 + setupLaptop.sh | 20 + setupVSCodium.sh | 6 + 302 files changed, 37418 insertions(+) create mode 100644 README.md create mode 100755 ai-update.sh create mode 100755 ai.sh create mode 100755 collect.sh create mode 100755 collectLaptop.sh create mode 100644 fix-da-snippets.py create mode 100644 general/.bash_history create mode 100644 general/.bashrc create mode 100755 general/configs/Thunar/accels.scm create mode 100755 general/configs/Thunar/uca.xml create mode 100755 general/configs/VSCodium/User/keybindings.json create mode 100644 general/configs/VSCodium/User/settings.json create mode 100755 general/configs/VSCodium/User/snippets/docSetup.code-snippets create mode 100755 general/configs/VSCodium/User/snippets/html.json create mode 100755 general/configs/VSCodium/User/snippets/javascript.json create mode 100644 general/configs/VSCodium/User/snippets/latex.json create mode 100644 general/configs/VSCodium/User/snippets/tex.json create mode 100644 general/configs/VSCodium/User/snippets/typescript.json create mode 100755 general/configs/VSCodium/User/snippets/vue.json create mode 100755 general/configs/VSCodium/User/syncLocalSettings.json create mode 100755 general/configs/VSCodium/product.json create mode 100644 general/configs/dunst/defaultDunst create mode 100755 general/configs/dunst/dunstrc create mode 100644 general/configs/dunst/mcLarenDunst create mode 100755 general/configs/fish/config.fish create mode 100755 general/configs/fish/fish_variables create mode 100644 general/configs/kitty/current-theme.conf create mode 100644 general/configs/kitty/kitty.conf create mode 100644 general/configs/kitty/kitty.conf.bak create mode 100644 general/configs/mpv/fonts/Material-Design-Iconic-Font.ttf create mode 100644 general/configs/mpv/scripts/modernx.lua create mode 100755 general/configs/rofi/applets/android/apps.sh create mode 100755 general/configs/rofi/applets/android/backlight.sh create mode 100755 general/configs/rofi/applets/android/colors.rasi create mode 100755 general/configs/rofi/applets/android/confirm.rasi create mode 100755 general/configs/rofi/applets/android/five.rasi create mode 100755 general/configs/rofi/applets/android/message.rasi create mode 100755 general/configs/rofi/applets/android/mpd.sh create mode 100755 general/configs/rofi/applets/android/powermenu.sh create mode 100755 general/configs/rofi/applets/android/quicklinks.sh create mode 100755 general/configs/rofi/applets/android/screenshot.sh create mode 100755 general/configs/rofi/applets/android/six.rasi create mode 100755 general/configs/rofi/applets/android/three.rasi create mode 100755 general/configs/rofi/applets/android/volume.sh create mode 100755 general/configs/rofi/applets/applets/apps.sh create mode 100755 general/configs/rofi/applets/applets/backlight.sh create mode 100755 general/configs/rofi/applets/applets/battery.sh create mode 100755 general/configs/rofi/applets/applets/configs/circle/apps.rasi create mode 100755 general/configs/rofi/applets/applets/configs/circle/backlight.rasi create mode 100755 general/configs/rofi/applets/applets/configs/circle/battery.rasi create mode 100755 general/configs/rofi/applets/applets/configs/circle/mpd.rasi create mode 100755 general/configs/rofi/applets/applets/configs/circle/network.rasi create mode 100755 general/configs/rofi/applets/applets/configs/circle/powermenu.rasi create mode 100755 general/configs/rofi/applets/applets/configs/circle/quicklinks.rasi create mode 100755 general/configs/rofi/applets/applets/configs/circle/screenshot.rasi create mode 100755 general/configs/rofi/applets/applets/configs/circle/time.rasi create mode 100755 general/configs/rofi/applets/applets/configs/circle/volume.rasi create mode 100755 general/configs/rofi/applets/applets/configs/rounded/apps.rasi create mode 100755 general/configs/rofi/applets/applets/configs/rounded/backlight.rasi create mode 100755 general/configs/rofi/applets/applets/configs/rounded/battery.rasi create mode 100755 general/configs/rofi/applets/applets/configs/rounded/mpd.rasi create mode 100755 general/configs/rofi/applets/applets/configs/rounded/network.rasi create mode 100755 general/configs/rofi/applets/applets/configs/rounded/powermenu.rasi create mode 100755 general/configs/rofi/applets/applets/configs/rounded/quicklinks.rasi create mode 100755 general/configs/rofi/applets/applets/configs/rounded/screenshot.rasi create mode 100755 general/configs/rofi/applets/applets/configs/rounded/time.rasi create mode 100755 general/configs/rofi/applets/applets/configs/rounded/volume.rasi create mode 100755 general/configs/rofi/applets/applets/configs/square/apps.rasi create mode 100755 general/configs/rofi/applets/applets/configs/square/backlight.rasi create mode 100755 general/configs/rofi/applets/applets/configs/square/battery.rasi create mode 100755 general/configs/rofi/applets/applets/configs/square/mpd.rasi create mode 100755 general/configs/rofi/applets/applets/configs/square/network.rasi create mode 100755 general/configs/rofi/applets/applets/configs/square/powermenu.rasi create mode 100755 general/configs/rofi/applets/applets/configs/square/quicklinks.rasi create mode 100755 general/configs/rofi/applets/applets/configs/square/screenshot.rasi create mode 100755 general/configs/rofi/applets/applets/configs/square/time.rasi create mode 100755 general/configs/rofi/applets/applets/configs/square/volume.rasi create mode 100755 general/configs/rofi/applets/applets/mpd.sh create mode 100755 general/configs/rofi/applets/applets/network.sh create mode 100755 general/configs/rofi/applets/applets/powermenu.sh create mode 100755 general/configs/rofi/applets/applets/quicklinks.sh create mode 100755 general/configs/rofi/applets/applets/screenshot.sh create mode 100755 general/configs/rofi/applets/applets/style.sh create mode 100755 general/configs/rofi/applets/applets/time.sh create mode 100755 general/configs/rofi/applets/applets/volume.sh create mode 100755 general/configs/rofi/applets/menu/apps.sh create mode 100755 general/configs/rofi/applets/menu/backlight.sh create mode 100755 general/configs/rofi/applets/menu/battery.sh create mode 100755 general/configs/rofi/applets/menu/configs/circle/apps.rasi create mode 100755 general/configs/rofi/applets/menu/configs/circle/backlight.rasi create mode 100755 general/configs/rofi/applets/menu/configs/circle/battery.rasi create mode 100755 general/configs/rofi/applets/menu/configs/circle/mpd.rasi create mode 100755 general/configs/rofi/applets/menu/configs/circle/network.rasi create mode 100755 general/configs/rofi/applets/menu/configs/circle/powermenu.rasi create mode 100755 general/configs/rofi/applets/menu/configs/circle/quicklinks.rasi create mode 100755 general/configs/rofi/applets/menu/configs/circle/screenshot.rasi create mode 100755 general/configs/rofi/applets/menu/configs/circle/time.rasi create mode 100755 general/configs/rofi/applets/menu/configs/circle/volume.rasi create mode 100755 general/configs/rofi/applets/menu/configs/rounded/apps.rasi create mode 100755 general/configs/rofi/applets/menu/configs/rounded/backlight.rasi create mode 100755 general/configs/rofi/applets/menu/configs/rounded/battery.rasi create mode 100755 general/configs/rofi/applets/menu/configs/rounded/mpd.rasi create mode 100755 general/configs/rofi/applets/menu/configs/rounded/network.rasi create mode 100755 general/configs/rofi/applets/menu/configs/rounded/powermenu.rasi create mode 100755 general/configs/rofi/applets/menu/configs/rounded/quicklinks.rasi create mode 100755 general/configs/rofi/applets/menu/configs/rounded/screenshot.rasi create mode 100755 general/configs/rofi/applets/menu/configs/rounded/time.rasi create mode 100755 general/configs/rofi/applets/menu/configs/rounded/volume.rasi create mode 100755 general/configs/rofi/applets/menu/configs/square/apps.rasi create mode 100755 general/configs/rofi/applets/menu/configs/square/backlight.rasi create mode 100755 general/configs/rofi/applets/menu/configs/square/battery.rasi create mode 100755 general/configs/rofi/applets/menu/configs/square/mpd.rasi create mode 100755 general/configs/rofi/applets/menu/configs/square/network.rasi create mode 100755 general/configs/rofi/applets/menu/configs/square/powermenu.rasi create mode 100755 general/configs/rofi/applets/menu/configs/square/quicklinks.rasi create mode 100755 general/configs/rofi/applets/menu/configs/square/screenshot.rasi create mode 100755 general/configs/rofi/applets/menu/configs/square/time.rasi create mode 100755 general/configs/rofi/applets/menu/configs/square/volume.rasi create mode 100755 general/configs/rofi/applets/menu/mpd.sh create mode 100755 general/configs/rofi/applets/menu/network.sh create mode 100755 general/configs/rofi/applets/menu/powermenu.sh create mode 100755 general/configs/rofi/applets/menu/quicklinks.sh create mode 100755 general/configs/rofi/applets/menu/screenshot.sh create mode 100755 general/configs/rofi/applets/menu/style.sh create mode 100755 general/configs/rofi/applets/menu/time.sh create mode 100755 general/configs/rofi/applets/menu/volume.sh create mode 100755 general/configs/rofi/applets/styles/adapta-nokto.rasi create mode 100755 general/configs/rofi/applets/styles/adapta.rasi create mode 100755 general/configs/rofi/applets/styles/adwaita.rasi create mode 100755 general/configs/rofi/applets/styles/arc-dark.rasi create mode 100755 general/configs/rofi/applets/styles/arc.rasi create mode 100755 general/configs/rofi/applets/styles/armchair.rasi create mode 100755 general/configs/rofi/applets/styles/colors.rasi create mode 100755 general/configs/rofi/applets/styles/confirm.rasi create mode 100755 general/configs/rofi/applets/styles/dark.rasi create mode 100755 general/configs/rofi/applets/styles/darkpink.rasi create mode 100755 general/configs/rofi/applets/styles/fresh.rasi create mode 100755 general/configs/rofi/applets/styles/gruvbox.rasi create mode 100755 general/configs/rofi/applets/styles/inside.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/amber.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/blue.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/blue_grey.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/brown.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/cyan.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/deep_orange.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/deep_purple.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/green.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/grey.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/indigo.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/light_blue.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/light_green.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/lime.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/orange.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/pink.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/purple.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/red.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/teal.rasi create mode 100755 general/configs/rofi/applets/styles/material-dark/yellow.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/amber.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/blue.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/blue_grey.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/brown.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/cyan.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/deep_orange.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/deep_purple.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/green.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/grey.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/indigo.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/light_blue.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/light_green.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/lime.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/orange.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/pink.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/purple.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/red.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/teal.rasi create mode 100755 general/configs/rofi/applets/styles/material-light/yellow.rasi create mode 100755 general/configs/rofi/applets/styles/message.rasi create mode 100755 general/configs/rofi/applets/styles/minimo.rasi create mode 100755 general/configs/rofi/applets/styles/party.rasi create mode 100755 general/configs/rofi/applets/styles/sirin.rasi create mode 100755 general/configs/rofi/bin/usedcpu create mode 100755 general/configs/rofi/bin/usedram create mode 100755 general/configs/rofi/config.rasi create mode 100755 general/configs/rofi/global/emoji.rasi create mode 100755 general/configs/rofi/global/history.txt create mode 100755 general/configs/rofi/global/icons/ddg.svg create mode 100755 general/configs/rofi/global/icons/google.svg create mode 100755 general/configs/rofi/global/icons/history.svg create mode 100755 general/configs/rofi/global/icons/result.svg create mode 100755 general/configs/rofi/global/icons/suggestion.svg create mode 100755 general/configs/rofi/global/rofi-spotlight.sh create mode 100755 general/configs/rofi/global/rofi.rasi create mode 100755 general/configs/rofi/global/web-search.py create mode 100755 general/configs/rofi/powermenu/drop_square.rasi create mode 100755 general/configs/rofi/powermenu/powermenu.rasi create mode 100755 general/configs/rofi/powermenu/powermenu.sh create mode 100755 general/configs/rofi/powermenu/styles/berry.rasi create mode 100755 general/configs/rofi/powermenu/styles/bluish.rasi create mode 100755 general/configs/rofi/powermenu/styles/cocoa.rasi create mode 100755 general/configs/rofi/powermenu/styles/colors.rasi create mode 100755 general/configs/rofi/powermenu/styles/faded.rasi create mode 100755 general/configs/rofi/powermenu/styles/gotham.rasi create mode 100755 general/configs/rofi/powermenu/styles/mask.rasi create mode 100755 general/configs/rofi/powermenu/styles/nightly.rasi create mode 100755 general/configs/rofi/powermenu/styles/nordic.rasi create mode 100755 general/configs/rofi/scripts/emoji create mode 100755 general/configs/rofi/scripts/powermenu.sh create mode 100755 general/configs/rofi/scripts/screenshot-wl.sh create mode 100755 general/configs/rofi/scripts/screenshot.sh create mode 100755 general/configs/rofi/spotlight/history.txt create mode 100755 general/configs/rofi/spotlight/icons/ddg.svg create mode 100755 general/configs/rofi/spotlight/icons/google.svg create mode 100755 general/configs/rofi/spotlight/icons/history.svg create mode 100755 general/configs/rofi/spotlight/icons/result.svg create mode 100755 general/configs/rofi/spotlight/rofi-spotlight.sh create mode 100755 general/configs/rofi/spotlight/rofi.rasi create mode 100755 general/configs/rofi/spotlight/web-search.py create mode 100755 general/configs/rofi/themes/arc_dark_transparent_colors.rasi create mode 100755 general/configs/rofi/themes/defaultTheme.rasi create mode 100644 general/configs/rofi/themes/mcLarenTheme.rasi create mode 100755 general/configs/rofi/themes/nord.rasi create mode 100755 general/configs/rofi/themes/power.rasi create mode 100755 general/configs/rofi/themes/runnerTheme.rasi create mode 100755 general/configs/rofi/themes/sidetab-nord.rasi create mode 100755 general/configs/rofi/themes/sidetab.rasi create mode 100755 general/configs/terminator/config create mode 100644 general/configs/wlogout/default-style.css create mode 100755 general/configs/wlogout/layout create mode 100755 general/configs/wlogout/lock-hover.png create mode 100755 general/configs/wlogout/lock.png create mode 100755 general/configs/wlogout/logout-hover.png create mode 100755 general/configs/wlogout/logout.png create mode 100644 general/configs/wlogout/mclaren-style.css create mode 100755 general/configs/wlogout/power-hover.png create mode 100755 general/configs/wlogout/power.png create mode 100755 general/configs/wlogout/restart-hover.png create mode 100755 general/configs/wlogout/restart.png create mode 100755 general/configs/wlogout/sleep-hover.png create mode 100755 general/configs/wlogout/sleep.png create mode 100755 general/configs/wlogout/style.css create mode 100644 general/configs/yazi/flavors/tokyo-night.yazi/LICENSE create mode 100644 general/configs/yazi/flavors/tokyo-night.yazi/LICENSE-tmtheme create mode 100644 general/configs/yazi/flavors/tokyo-night.yazi/README.md create mode 100644 general/configs/yazi/flavors/tokyo-night.yazi/flavor.toml create mode 100644 general/configs/yazi/flavors/tokyo-night.yazi/preview.png create mode 100644 general/configs/yazi/flavors/tokyo-night.yazi/tmtheme.xml create mode 100644 general/configs/yazi/theme.toml create mode 100644 general/docker/daemon.json create mode 100644 general/hyprland/binds.conf create mode 100644 general/hyprland/general.conf create mode 100644 general/hyprland/windowrules.conf create mode 100644 general/mkinitcpio.conf create mode 100644 general/pacman.conf create mode 100644 general/vscode-extensions create mode 100644 install-new.sh create mode 100644 install-part-two.sh create mode 100755 laptop/.bashrc create mode 100644 laptop/configs/hypr/hypridle.conf create mode 100644 laptop/configs/hypr/hyprland-old.conf create mode 100644 laptop/configs/hypr/hyprland.conf create mode 100644 laptop/configs/hypr/hyprlock.conf create mode 100755 laptop/configs/hypr/wall_4K.png create mode 100755 laptop/configs/hypr/xdg-portal-hyprland create mode 100755 laptop/configs/waybar/config.jsonc create mode 100755 laptop/configs/waybar/scripts/supower.py create mode 100755 laptop/configs/waybar/style.css create mode 100644 laptop/environment create mode 100644 laptop/grub create mode 100644 laptop/installedPackages.txt create mode 100644 laptop/mkinitcpio.conf create mode 100644 laptop/pacman.conf create mode 100644 laptop/vscode-extensions create mode 100644 pc/.bash_history create mode 100755 pc/.bashrc create mode 100755 pc/configs/OpenRGB/OpenRGB.json create mode 100755 pc/configs/Portmaster/Preferences create mode 100644 pc/configs/hypr/hypridle.conf create mode 100644 pc/configs/hypr/hyprland.conf create mode 100644 pc/configs/hypr/hyprlock.conf create mode 100755 pc/configs/hypr/wall_4K.png create mode 100755 pc/configs/hypr/xdg-portal-hyprland create mode 100755 pc/configs/waybar/config.jsonc create mode 100644 pc/configs/waybar/default-style.css create mode 100755 pc/configs/waybar/dualsense-notifier.sh create mode 100644 pc/configs/waybar/mclaren-style.css create mode 100755 pc/configs/waybar/style.css create mode 100644 pc/docker/daemon.json create mode 100644 pc/environment create mode 100644 pc/grub create mode 100644 pc/installedPackages.txt create mode 100644 pc/mkinitcpio.conf create mode 100755 pc/mnt/mnt-janis.mount create mode 100755 pc/mnt/mnt-janisShare.mount create mode 100755 pc/mnt/mnt-shared.mount create mode 100644 pc/pacman.conf create mode 100644 pc/vscode-extensions create mode 100644 server/background.jpg create mode 100644 server/index.html create mode 100755 setup.sh create mode 100755 setupLaptop.sh create mode 100644 setupVSCodium.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..75234cf --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# my personal dotfiles for Hyprland and others + +Contains the following config files: + +- waybar conifg (including CSS styling) +- hyprland config (hyprland.conf) +- dunst config +- fish config +- rofi config +- vscodium settings diff --git a/ai-update.sh b/ai-update.sh new file mode 100755 index 0000000..1bd642e --- /dev/null +++ b/ai-update.sh @@ -0,0 +1,3 @@ +docker pull ghcr.io/open-webui/open-webui:latest +docker container rm open-webui +docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v /home/janis/projects/otherProjects/open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:latest diff --git a/ai.sh b/ai.sh new file mode 100755 index 0000000..67f9763 --- /dev/null +++ b/ai.sh @@ -0,0 +1,24 @@ +echo " + ▄▄▄▄▄▄▄ ▄▄▄ ▄▄▄ ▄▄▄▄▄▄ ▄▄ ▄▄ ▄▄▄▄▄▄ +█ █ █ █ █ █ █ █▄█ █ █ +█ ▄ █ █ █ █ █ ▄ █ █ ▄ █ +█ █ █ █ █ █ █ █ █▄█ █ █ █▄█ █ +█ █▄█ █ █▄▄▄█ █▄▄▄█ █ █ █ +█ █ █ █ ▄ █ ██▄██ █ ▄ █ +█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄▄▄▄▄▄▄█▄█ █▄▄█▄█ █▄█▄█ █▄▄█ + +==> Starting ollama +" + +cmd="ollama serve"; +eval "${cmd}" &>/dev/null & disown; + +echo "==> Starting docker" +systemctl start docker + +echo "==> Starting open-webui." +docker start -i open-webui + +echo "==> Done. Visit http://localhost:3000 for a web-ui, http://localhost:11434 to check ollama status" + +read "Press enter to finish" diff --git a/collect.sh b/collect.sh new file mode 100755 index 0000000..179fec0 --- /dev/null +++ b/collect.sh @@ -0,0 +1,52 @@ +#! /bin/bash + +# Copy VSCodium settings +mkdir -p ./general/configs/VSCodium/User +cp ~/.config/VSCodium/product.json ./general/configs/VSCodium/ +cp -r ~/.config/VSCodium/User/snippets ./general/configs/VSCodium/User/ +cp -r ~/.config/VSCodium/User/globalStorage ./general/configs/VSCodium/User/ +cp ~/.config/VSCodium/User/keybindings.json ./general/configs/VSCodium/User/ +cp ~/.config/VSCodium/User/settings.json ./general/configs/VSCodium/User/ +cp ~/.config/VSCodium/User/syncLocalSettings.json ./general/configs/VSCodium/User/ +rm -rf ./general/configs/VSCodium/User/globalStorage + +rm ./pc/installedPackages.txt +pacman -Qq > ./pc/installedPackages.txt +sudo cat /etc/pacman.conf > ./general/pacman.conf +sudo cat /etc/mkinitcpio.conf > ./general/mkinitcpio.conf +sudo cat /etc/environment > ./pc/environment +sudo cat /etc/default/grub > ./pc/grub +mkdir ./general/docker +sudo cat /etc/docker/daemon.json > ./general/docker/daemon.json + +cp ~/.bash_history ./general +cp ~/.bashrc ./general + +# copy other config files +mkdir ./pc/configs/OpenRGB +mkdir ./pc/configs/Portmaster +cp -r ~/.config/hypr ./pc/configs/ +cp -r ~/.config/waybar ./pc/configs/ +cp -r ~/.config/OpenRGB/OpenRGB.json ./pc/configs/OpenRGB/OpenRGB.json +cp ~/.config/Portmaster/Preferences ./pc/configs/Portmaster/ +cp -r ~/.config/mpv ./general/configs +cp -r ~/.config/wlogout ./general/configs/ +cp -r ~/.config/fish ./general/configs/ +cp -r ~/.config/dunst ./general/configs/ +cp -r ~/.config/rofi ./general/configs/ +cp -r ~/.config/kitty ./general/configs/ +cp -r ~/.config/terminator ./general/configs/ +cp -r ~/.config/Thunar ./general/configs/ +cp -r ~/.config/yazi ./general/configs/ +rm -rf ./pc/configs/hypr/hyprland/ +cp -r ~/.config/hypr/hyprland/* ./general/hyprland/ + +# Get systemd mount jobs +sudo cp -r /etc/systemd/system/mnt* ./pc/mnt +sudo chmod -R 777 ./pc/mnt + + +vscodium --list-extensions > ./general/vscode-extensions + + +echo "Collected. Also consider running nvim-collect!" diff --git a/collectLaptop.sh b/collectLaptop.sh new file mode 100755 index 0000000..447d504 --- /dev/null +++ b/collectLaptop.sh @@ -0,0 +1,29 @@ +#! /bin/bash + +# Copy VSCodium settings +mkdir -p ./general/configs/VSCodium/User +cp ~/.config/VSCodium/product.json ./general/configs/VSCodium/ +cp -r ~/.config/VSCodium/User/snippets ./general/configs/VSCodium/User/ +cp ~/.config/VSCodium/User/keybindings.json ./general/configs/VSCodium/User/ +cp ~/.config/VSCodium/User/settings.json ./general/configs/VSCodium/User/ +cp ~/.config/VSCodium/User/syncLocalSettings.json ./general/configs/VSCodium/User/ + +rm ./laptop/installedPackages.txt +pacman -Qq > ./laptop/installedPackages.txt + +# copy other config files +cp -r ~/.config/hypr ./laptop/configs +cp -r ~/.config/waybar ./laptop/configs +cp -r ~/.config/wlogout ./general/configs +cp -r ~/.config/mpv ./general/configs +cp -r ~/.config/dunst ./general/configs +cp -r ~/.config/fish ./general/configs +cp -r ~/.config/rofi ./general/configs +cp -r ~/.config/yazi ./general/configs +cp -r ~/.config/kitty ./general/configs +rm -rf ./laptop/configs/hypr/hyprland/ +cp -r ~/.config/hypr/hyprland/* ./general/hyprland/ + +echo '=> Collected all laptop config files successfully' + +echo "Also consider running nvim-collect!" diff --git a/fix-da-snippets.py b/fix-da-snippets.py new file mode 100644 index 0000000..5633425 --- /dev/null +++ b/fix-da-snippets.py @@ -0,0 +1,73 @@ +import os +import re +import json +import sys + +def clean_json(content): + # Step 1: Remove comments (lines starting with //) + content = re.sub(r'^//.*\n', '', content, flags=re.MULTILINE) + + # Step 2: Replace single quotes with double quotes for JSON compatibility + content = content.replace("'", '"') + + # Step 3: Remove trailing commas in both objects and arrays + # Remove trailing commas in arrays + content = re.sub(r',\s*([\]}])', r'\1', content) + # Remove trailing commas in objects + content = re.sub(r',\s*(\n|\})', r'\1', content) + + # Step 4: Escape backslashes in LaTeX snippets + content = content.replace("\\", "\\\\") # Double backslashes for JSON + + # Step 5: Parse and re-encode to ensure valid JSON (removes trailing commas) + try: + data = json.loads(content) # Parse the content into a Python dictionary + cleaned_json = json.dumps(data, indent=4) # Re-encode into JSON, pretty-printed + except json.JSONDecodeError as e: + print(f"Error parsing JSON: {e}") + return None + + return cleaned_json + +def process_directory(directory): + # Loop through files in the specified directory (non-recursively) + for filename in os.listdir(directory): + file_path = os.path.join(directory, filename) + + # Only process files that end with .json + if os.path.isfile(file_path) and filename.endswith('.json'): + print(f"Processing {file_path}") + + # Read the file content + with open(file_path, 'r', encoding='utf-8') as file: + content = file.read() + + # Clean the JSON content + cleaned_content = clean_json(content) + + if cleaned_content is not None: + # Write the cleaned content back to the file + with open(file_path, 'w', encoding='utf-8') as file: + file.write(cleaned_content) + print(f"Fixed formatting in {file_path}") + else: + print(f"Failed to fix {file_path} due to JSON parsing error.") + +def main(): + # Check if a directory was passed as an argument, otherwise read from stdin + if len(sys.argv) > 1: + directory = sys.argv[1] + else: + print("Please provide a directory path as an argument.") + sys.exit(1) + + # Check if the directory exists + if not os.path.isdir(directory): + print(f"The provided path '{directory}' is not a valid directory.") + sys.exit(1) + + # Process all .json files in the directory + process_directory(directory) + +if __name__ == '__main__': + main() diff --git a/general/.bash_history b/general/.bash_history new file mode 100644 index 0000000..e691e82 --- /dev/null +++ b/general/.bash_history @@ -0,0 +1,500 @@ +pyinstaller imagevideoupscaler.spec +./imagevideoupscaler +./imagevideoupscaler +pyinstaller imagevideoupscaler.spec +./imagevideoupscaler +pyinstaller imagevideoupscaler.spec +pyinstaller imagevideoupscaler.spec +./imagevideoupscaler +pyinstaller imagevideoupscaler.spec +./imagevideoupscaler +pyinstaller imagevideoupscaler-cli.py --onefile --name imagevideoupscaler --hidden-import "bin.engines" +./imagevideoupscaler +pyinstaller imagevideoupscaler-cli.py --onefile --name imagevideoupscaler +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 +pyinstaller imagevideoupscaler-cli.py --name imagevideoupscaler +cd dist/imagevideoupscaler/ +./imagevideoupscaler -i +cd ../.. +cd ~/projects/FSRImageVideoUpscalerFrontend_New/ +ls +clear +ls +clear +yay -S rpm-build +yay -S rpm-tools +yay -S dpkg +yay -S fakeroot +clear +pip3 install py2deb +py2deb -r ./ +py2deb -r ~/projects/FSRImageVideoUpscalerFrontend_New/ +pip3 install symbol +clear +yay -S symbol +clear +pip3 install pyinstaller +yay -S python-pip +py2deb +python3 imagevideoupscaler-cli.py +clear +pip3 install symbol +pip3 install setuptools +yay -R python-pip +yay -S python-pip +pip install --upgrade pip +clear +pip install setuptools +yay -S setuptools +sudo pacman -Syu "pacman>=6.0.2-7" +pip3 +yay -S python-pip +yay -S python3-pip +clear +yay -S python-pip +pip3 install +python -m pip3 +python -m pip +pip +pip3 +clear +pip3 +pip3 install +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -s 2 +clear +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E ss +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E ss +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E ss +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E ss -s 2 +clear +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E fsr -s 2 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E fsr -M c -s 2 +clear +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E fsr -s 2 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E ss -s 2 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E ss -s 2 +npm run serve +npm run serve +npm run serve +npm i +npm run serve +clear +cd ../../website/ +cd dist/ +http-server +http-server +git pull origin main +git checkout origin master +git checkout origin main +cd frontend/ +npm run electron:serve +npm i -g @vue/cli +sudo npm i -g @vue/cli +npm audit fix --force +npm audit fix --force +npm audit fix --force +npm i +npm i +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm i child_process +clear +npm run electron:serve +npm run serve +npm run serve +npm run serve +cd .. +ls +clear +python3 imagevideoupscaler-cli.py -h +python3 imagevideoupscaler-cli.py -p +python3 imagevideoupscaler-cli.py -h +python3 imagevideoupscaler-cli.py -d ss +cd frontend/ +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm i --save-dev @electron-forge/cli +npm exec --package=@electron-forge/cli -c "electron-forge import" +npm run make +cd src/ +npm run make +clear +cd .. +npm run electron:build +npm run electron:build -- --linux deb --win nsis +clear +npm run electron:build -- --linux deb --win nsis +npm run electron:build -- --linux deb --win nsis +npm run electron:build -- --linux deb --win nsis +npm run electron:build -- --linux deb --win nsis +npm run electron:build -- --linux deb --win nsis +yay -S libcript +yay -S libssl +clear +npm run electron:build -- --linux deb --linux rpm --win nsis +npm run electron:build -- --linux deb rpm --win nsis +yay -S libxcrypt-compat +npm run electron:build -- --linux deb rpm --win nsis +npm run electron:build -- --linux deb rpm --win nsis +cd ../packaging/ +ls +sudo chmod +x package.sh +./package.sh +mv --help +pip3 install pyinstaller +./package.sh +./package.sh +./package.sh +./package.sh +./package.sh +./package.sh +./package.sh +./package.sh +./package.sh +./package.sh +cd packaging/ +ls +sudo chmod +x package.sh +sudo chmod +x package.sh +./package.sh +./package.sh +./package.sh +cd ../dist/imagevideoupscaler/ +cd ../../frontend/ +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +cd ../packaging/ +./package.sh +clear +cd ../frontend/ +npm run electron:serve +cd ../packaging/ +./package.sh +cd ../frontend/ +npm run electron:serve +npm run electron:serve +cd ../packaging/ +./package.sh +clear +cd ../frontend/ +npm run electron:serve +npm run electron:serve +npm run electron:serve +./imagevideoupscaler +./imagevideoupscaler -i /home/janis/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -s 2 -S 0.25 +clear +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm i socket.io +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm i socket.io-client +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +cd ../packaging/ +sudo chmod +x ./prepareWindowsPackaging.sh +./prepareWindowsPackaging.sh +wine python -m pip install pyinstaller +./package.sh +./package.sh +wine python -m PyInstaller +./package.sh +cd ../frontend/dist_electron/ +wine imagevideoupscaler\ Setup\ 2.0.0-dev1.exe +clear +cd ../../packaging/ +clear +cd ../frontend/ +npm run electron:serve +cd .. +python3 imagevideoupscaler-cli.py -d ss +cd frontend/ +npm run electron:serve +npm run electron:serve +cd ../packaging/ +./package.sh +sudo chmod +x packageWindows.sh +sudo chmod +x packageLinux.sh +./packageWindows.sh +./packageWindows.sh +cd .. +python3 imagevideoupscaler-cli.py -h +cd frontend/ +npm run serve +npm run electron:serve +npm run electron:serve +cd ../frontend/ +cd ../packaging/ +./packageWindows.sh +cd ../frontend/ +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm i electron +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +cd ../packaging/ +sudo chmod +x startTesting.sh +sudo chmod +x stopTesting.sh +clear +./startTesting.sh +cd ../frontend/ +npm run serve +npm run electron:serve +npm run electron:serve +cd ../packaging/ +./stopTesting.sh +./stopTesting.sh +./packageWindows.sh +cd .. +python3 imagevideoupscaler-cli.py -i /home/janis/projects/FSRImageVideoUpscalerFrontend_New/logo.png +python3 imagevideoupscaler-cli.py -i /home/janis/projects/FSRImageVideoUpscalerFrontend_New/logo.png +python3 imagevideoupscaler-cli.py -i /home/janis/projects/FSRImageVideoUpscalerFrontend_New/logo.png +python3 imagevideoupscaler-cli.py -i /home/janis/projects/FSRImageVideoUpscalerFrontend_New/logo.png -s 2 +cd ../fro +cd frontend/ +npm run serve +npm run electron:serve +cd ../packaging/ +./package.sh +./stopTesting.sh +./package.sh +./package.sh +cd ../frontend/ +npm run electron:serve +cd ../packaging/ +./packageWindows.sh +cd src/webapp/ +npm run serve +./packageWindows.sh +cd ../frontend/ +wine ./smuL-cli.exe +cd ../packaging/ +clear +./stopTesting.sh +./packageLinux.sh +cd ../frontend/ +./smuL-cli +clear +cd ../packaging/ +./stopTesting.sh +./packageWindows.sh +wine -m pip install importlib +clear +./stopTesting.sh +./prepareWindowsPackaging.sh +clear +cd ../ +wine python ./smuL-cli.py +wine python ./smuL-cli.py +wine python ./smuL-cli.py +wine python ./smuL-cli.py +wine python ./smuL-cli.py +wine python ./smuL-cli.py +wine python ./smuL-cli.py +cd packaging/ +./stopTesting.sh +./packageWindows.sh +cd ../frontend/dist_electron/ +wine ./SimpleMediaScalerLite\ Setup\ 2.0.0-dev1.exe +clear +cd ../../packaging/ +./packageWindows.sh +cd ../frontend/ +wine ./smuL-cli.exe -h +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +cd ../packaging/ +./stopTesting.sh +./packageWindows.sh +cd ../frontend/ +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +cd ../packaging/ +./stopTesting.sh +./packageWindows.sh +clear +cd ../frontend/ +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +clear +cd ../packaging/ +./stopTesting.sh +./packageWindows.sh +cd ../frontend/ +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +cd ../packaging/ +./stopTesting.sh +./packageWindows.sh +cd ../frontend/dist_electron/ +wine ./SimpleMediaScalerLite\ Setup\ 2.0.0-dev1.exe +wine ./SimpleMediaScalerLite\ Setup\ 2.0.0-dev1.exe +clear +cd ../../packaging/ +sudo chmod +x packageTesting.sh +./packageTesting.sh +cd ../frontend/dist_electron/linux-unpacked/ +ls +./simplemediascalerlite +cd ../../ +cd ../packag +cd ../packaging/ +./packageLinux.sh +./packageLinux.sh +./packageLinux.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageWindows.sh +cd ../frontend/dist_electron/ +wine SimpleMediaScalerLite\ Setup\ 2.0.0-dev1.exe +wine SimpleMediaScalerLite\ Setup\ 2.0.0-dev1.exe +clear +cd ../../packaging/ +./package.sh +cd .. +python3 smuL-cli.py -i /home/janis/Downloads/test.png -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -s 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -s 2 +clear +cd ./packaging/ +./packageWindows.sh +./packageWindows.sh +./packageWindows.sh +./packageWindows.sh +./package.sh +cd packag +cd packaging/ +./packageWindows.sh +./packageWindows.sh +cd ../../italian/ +http-server +node server.js +node server.js +node server.js +node server.js +node server.js +node server.js +node server.js +ls | grep -v jpg$ | while IFS= read -r FILENAME; do convert "${FILENAME}" "${FILENAME%.*}.jpg"; done +clear +for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done +for i in *.mov; do ffmpeg -i "$i" "${i%.*}.mp4"; done +rm ./*.mp4 +for i in *.mov; do ffmpeg -i "$i" "./Transcoded/${i%.*}.mp4"; done +for i in *.mov; do ffmpeg -i "$i" "./Transcoded/${i%.*}.mp4"; done +for i in *.mov; do ffmpeg -i "$i" "./Transcoded/${i%.*}.mp4"; done +file="/home/janis/dotfiles/config/vscode-extensions" +while read line; do vscodium --install-extension "${line}"; done < "${file}" +yay -S vscodium +clear +cp ./dotfiles/config/.bashrc .bashrc +clear +exit +clear +sudo plymouth-set-default-theme -R bgrt +cd dotfiles/ +sudo cp ./config/environment /etc/environment +sudo cp ./config/mkinitcpio.conf /etc/mkinitcpio.conf +sudo cp ./config/pacman.conf /etc/pacman.conf +clear +yay -Syu +clear +hugo +clear +cd /tmp +git clone https://github.com/rtlewis1/GTK/tree/Material-Black-Colors-Desktop +cd Material-Black-Colors-Desktop/ +sudo cp ./Material-Black-Blueberry /usr/share/themes +ls +git clone https://github.com/rtlewis1/GTK +cd gtk +cd GTK +git checkout Material-Black-Colors-Desktop +clear +ls +sudo cp ./Material-Black-Blueberry /usr/share/themes +sudo cp -r ./Material-Black-Blueberry /usr/share/themes +cd /tmp +git clone https://github.com/varlesh/oreo-cursors +cd oreo-cursors/generator +echo "black = #424242" > ./colours.conf +ruby convert.rb +cd .. +make build +sudo make install +ls +sudo make +sudo make build +make build +clear +cat build.sh +make build +clear +yay -S librewolf-bin +exit +file="/home/janis/dotfiles/config/vscode-extensions" +while read line; do vscodium --install-extension "${line}"; done < "${file}" diff --git a/general/.bashrc b/general/.bashrc new file mode 100644 index 0000000..95b0a32 --- /dev/null +++ b/general/.bashrc @@ -0,0 +1,359 @@ +# +# ~/.bashrc +# + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +export PATH="/home/janis/.local/share/gem/ruby/3.0.0/bin: $PATH" +export PATH="/home/janis/.local/bin: $PATH" +alias editHyprlandConf='nano ~/.config/hypr/hyprland.conf' +alias ls='ls -l --color=auto' +alias ll='ls -la --color=auto' +alias sl='ls --color=auto' +alias start-httpd='sudo systemctl start httpd' +PS1='[\u@\h \W]\$ ' + +################################################################################ +## FUNCTIONS ## +################################################################################ + +## +## ARRANGE $PWD AND STORE IT IN $NEW_PWD +## * The home directory (HOME) is replaced with a ~ +## * The last pwdmaxlen characters of the PWD are displayed +## * Leading partial directory names are striped off +## /home/me/stuff -> ~/stuff (if USER=me) +## /usr/share/big_dir_name -> ../share/big_dir_name (if pwdmaxlen=20) +## +## Original source: WOLFMAN'S color bash promt +## https://wiki.chakralinux.org/index.php?title=Color_Bash_Prompt#Wolfman.27s +## +bash_prompt_command() { + # How many characters of the $PWD should be kept + local pwdmaxlen=25 + + # Indicate that there has been dir truncation + local trunc_symbol=".." + + # Store local dir + local dir=${PWD##*/} + + # Which length to use + pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen )) + + NEW_PWD=${PWD/#$HOME/\~} + + local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen )) + + # Generate name + if [ ${pwdoffset} -gt "0" ] + then + NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen} + NEW_PWD=${trunc_symbol}/${NEW_PWD#*/} + fi +} + + + + +## +## GENERATE A FORMAT SEQUENCE +## +format_font() +{ + ## FIRST ARGUMENT TO RETURN FORMAT STRING + local output=$1 + + + case $# in + 2) + eval $output="'\[\033[0;${2}m\]'" + ;; + 3) + eval $output="'\[\033[0;${2};${3}m\]'" + ;; + 4) + eval $output="'\[\033[0;${2};${3};${4}m\]'" + ;; + *) + eval $output="'\[\033[0m\]'" + ;; + esac +} + + + +## +## COLORIZE BASH PROMT +## +bash_prompt() { + + ############################################################################ + ## COLOR CODES ## + ## These can be used in the configuration below ## + ############################################################################ + + ## FONT EFFECT + local NONE='0' + local BOLD='1' + local DIM='2' + local UNDERLINE='4' + local BLINK='5' + local INVERT='7' + local HIDDEN='8' + + + ## COLORS + local DEFAULT='9' + local BLACK='0' + local RED='1' + local GREEN='2' + local YELLOW='3' + local BLUE='4' + local MAGENTA='5' + local CYAN='6' + local L_GRAY='7' + local D_GRAY='60' + local L_RED='61' + local L_GREEN='62' + local L_YELLOW='63' + local L_BLUE='64' + local L_MAGENTA='65' + local L_CYAN='66' + local WHITE='67' + + + ## TYPE + local RESET='0' + local EFFECT='0' + local COLOR='30' + local BG='40' + + + ## 256 COLOR CODES + local NO_FORMAT="\[\033[0m\]" + local ORANGE_BOLD="\[\033[1;38;5;208m\]" + local TOXIC_GREEN_BOLD="\[\033[1;38;5;118m\]" + local RED_BOLD="\[\033[1;38;5;1m\]" + local CYAN_BOLD="\[\033[1;38;5;87m\]" + local BLACK_BOLD="\[\033[1;38;5;0m\]" + local WHITE_BOLD="\[\033[1;38;5;15m\]" + local GRAY_BOLD="\[\033[1;90m\]" + local BLUE_BOLD="\[\033[1;38;5;74m\]" + + + + + + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + + ## CONFIGURE HERE ## + + + + ############################################################################ + ## CONFIGURATION ## + ## Choose your color combination here ## + ############################################################################ + local FONT_COLOR_1=$WHITE + local BACKGROUND_1=$RED + local TEXTEFFECT_1=$BOLD + + local FONT_COLOR_2=$WHITE + local BACKGROUND_2=$YELLOW + local TEXTEFFECT_2=$BOLD + + local FONT_COLOR_3=$D_GRAY + local BACKGROUND_3=$WHITE + local TEXTEFFECT_3=$BOLD + + local PROMT_FORMAT=$BLUE_BOLD + + + ############################################################################ + ## EXAMPLE CONFIGURATIONS ## + ## I use them for different hosts. Test them out ;) ## + ############################################################################ + + ## CONFIGURATION: BLUE-WHITE + if [ "$HOSTNAME" = dell ]; then + FONT_COLOR_1=$WHITE; BACKGROUND_1=$BLUE; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$L_BLUE; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$D_GRAY; BACKGROUND_3=$WHITE; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$CYAN_BOLD + fi + + ## CONFIGURATION: BLACK-RED + if [ "$HOSTNAME" = giraff6 ]; then + FONT_COLOR_1=$WHITE; BACKGROUND_1=$BLACK; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$D_GRAY; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$WHITE; BACKGROUND_3=$RED; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$RED_BOLD + fi + + ## CONFIGURATION: RED-BLACK + #FONT_COLOR_1=$WHITE; BACKGROUND_1=$RED; TEXTEFFECT_1=$BOLD + #FONT_COLOR_2=$WHITE; BACKGROUND_2=$D_GRAY; TEXTEFFECT_2=$BOLD + #FONT_COLOR_3=$WHITE; BACKGROUND_3=$BLACK; TEXTEFFECT_3=$BOLD + #PROMT_FORMAT=$RED_BOLD + + ## CONFIGURATION: CYAN-BLUE + if [ "$HOSTNAME" = sharkoon ]; then + FONT_COLOR_1=$BLACK; BACKGROUND_1=$L_CYAN; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$L_BLUE; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$WHITE; BACKGROUND_3=$BLUE; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$CYAN_BOLD + fi + + ## CONFIGURATION: GRAY-SCALE + if [ "$HOSTNAME" = giraff ]; then + FONT_COLOR_1=$WHITE; BACKGROUND_1=$BLACK; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$D_GRAY; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$WHITE; BACKGROUND_3=$L_GRAY; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$BLACK_BOLD + fi + + ## CONFIGURATION: GRAY-CYAN + if [ "$HOSTNAME" = light ]; then + FONT_COLOR_1=$WHITE; BACKGROUND_1=$BLACK; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$D_GRAY; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$BLACK; BACKGROUND_3=$L_CYAN; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$CYAN_BOLD + fi + + + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + + + ############################################################################ + ## TEXT FORMATING ## + ## Generate the text formating according to configuration ## + ############################################################################ + + ## CONVERT CODES: add offset + FC1=$(($FONT_COLOR_1+$COLOR)) + BG1=$(($BACKGROUND_1+$BG)) + FE1=$(($TEXTEFFECT_1+$EFFECT)) + + FC2=$(($FONT_COLOR_2+$COLOR)) + BG2=$(($BACKGROUND_2+$BG)) + FE2=$(($TEXTEFFECT_2+$EFFECT)) + + FC3=$(($FONT_COLOR_3+$COLOR)) + BG3=$(($BACKGROUND_3+$BG)) + FE3=$(($TEXTEFFECT_3+$EFFECT)) + + FC4=$(($FONT_COLOR_4+$COLOR)) + BG4=$(($BACKGROUND_4+$BG)) + FE4=$(($TEXTEFFECT_4+$EFFECT)) + + + ## CALL FORMATING HELPER FUNCTION: effect + font color + BG color + local TEXT_FORMAT_1 + local TEXT_FORMAT_2 + local TEXT_FORMAT_3 + local TEXT_FORMAT_4 + format_font TEXT_FORMAT_1 $FE1 $FC1 $BG1 + format_font TEXT_FORMAT_2 $FE2 $FC2 $BG2 + format_font TEXT_FORMAT_3 $FC3 $FE3 $BG3 + format_font TEXT_FORMAT_4 $FC4 $FE4 $BG4 + + + # GENERATE PROMT SECTIONS + local PROMT_USER=$"$TEXT_FORMAT_1 \u " + local PROMT_HOST=$"$TEXT_FORMAT_2 \h " + local PROMT_PWD=$"$TEXT_FORMAT_3 \${NEW_PWD} " + local PROMT_INPUT=$"$PROMT_FORMAT " + + + ############################################################################ + ## SEPARATOR FORMATING ## + ## Generate the separators between sections ## + ## Uses background colors of the sections ## + ############################################################################ + + ## CONVERT CODES + TSFC1=$(($BACKGROUND_1+$COLOR)) + TSBG1=$(($BACKGROUND_2+$BG)) + + TSFC2=$(($BACKGROUND_2+$COLOR)) + TSBG2=$(($BACKGROUND_3+$BG)) + + TSFC3=$(($BACKGROUND_3+$COLOR)) + TSBG3=$(($DEFAULT+$BG)) + + + ## CALL FORMATING HELPER FUNCTION: effect + font color + BG color + local SEPARATOR_FORMAT_1 + local SEPARATOR_FORMAT_2 + local SEPARATOR_FORMAT_3 + format_font SEPARATOR_FORMAT_1 $TSFC1 $TSBG1 + format_font SEPARATOR_FORMAT_2 $TSFC2 $TSBG2 + format_font SEPARATOR_FORMAT_3 $TSFC3 $TSBG3 + + + # GENERATE SEPARATORS WITH FANCY TRIANGLE + local TRIANGLE=$'\uE0B0' + local SEPARATOR_1=$SEPARATOR_FORMAT_1$TRIANGLE + local SEPARATOR_2=$SEPARATOR_FORMAT_2$TRIANGLE + local SEPARATOR_3=$SEPARATOR_FORMAT_3$TRIANGLE + + + + ############################################################################ + ## WINDOW TITLE ## + ## Prevent messed up terminal-window titles ## + ############################################################################ + case $TERM in + xterm*|rxvt*) + local TITLEBAR='\[\033]0;\u:${NEW_PWD}\007\]' + ;; + *) + local TITLEBAR="" + ;; + esac + + + + ############################################################################ + ## BASH PROMT ## + ## Generate promt and remove format from the rest ## + ############################################################################ + PS1="$TITLEBAR\n${PROMT_USER}${SEPARATOR_1}${PROMT_HOST}${SEPARATOR_2}${PROMT_PWD}${SEPARATOR_3}${PROMT_INPUT}" + + + + ## For terminal line coloring, leaving the rest standard + none="$(tput sgr0)" + trap 'echo -ne "${none}"' DEBUG +} + + + + +################################################################################ +## MAIN ## +################################################################################ + +## Bash provides an environment variable called PROMPT_COMMAND. +## The contents of this variable are executed as a regular Bash command +## just before Bash displays a prompt. +## We want it to call our own command to truncate PWD and store it in NEW_PWD +PROMPT_COMMAND=bash_prompt_command + +## Call bash_promnt only once, then unset it (not needed any more) +## It will set $PS1 with colors and relative to $NEW_PWD, +## which gets updated by $PROMT_COMMAND on behalf of the terminal +bash_prompt +unset bash_prompt + +### EOF ### diff --git a/general/configs/Thunar/accels.scm b/general/configs/Thunar/accels.scm new file mode 100755 index 0000000..5775bc1 --- /dev/null +++ b/general/configs/Thunar/accels.scm @@ -0,0 +1,131 @@ +; thunar GtkAccelMap rc-file -*- scheme -*- +; this file is an automated accelerator map dump +; +; (gtk_accel_path "/ThunarStandardView/sort-by-type" "") +; (gtk_accel_path "/ThunarStatusBar/toggle-last-modified" "") +; (gtk_accel_path "/Thunarwindow/menu" "") +; (gtk_accel_path "/ThunarActionManager/cut" "x") +; (gtk_accel_path "/ThunarStandardView/sort-by-size" "") +; (gtk_accel_path "/ThunarWindow/file-menu" "") +; (gtk_accel_path "/ThunarBookmarks/e92146de8ffbb74bfd99784ed40bdeef" "") +; (gtk_accel_path "/ThunarWindow/close-tab" "w") +; (gtk_accel_path "/ThunarWindow/switch-previous-tab-alt" "ISO_Left_Tab") +; (gtk_accel_path "/ThunarStatusBar/toggle-size" "") +; (gtk_accel_path "/ThunarWindow/new-window" "n") +; (gtk_accel_path "/ThunarWindow/clear-directory-specific-settings" "") +; (gtk_accel_path "/ThunarWindow/close-window" "q") +; (gtk_accel_path "/ThunarWindow/open-parent" "Up") +; (gtk_accel_path "/ThunarWindow/view-side-pane-menu" "") +; (gtk_accel_path "/ThunarStatusBar/toggle-size-in-bytes" "") +; (gtk_accel_path "/ThunarWindow/switch-previous-tab" "Page_Up") +; (gtk_accel_path "/ThunarActionManager/open" "o") +; (gtk_accel_path "/ThunarStandardView/sort-ascending" "") +; (gtk_accel_path "/ThunarWindow/toggle-split-view" "F3") +; (gtk_accel_path "/ThunarActionManager/copy-2" "Insert") +; (gtk_accel_path "/ThunarActionManager/trash-delete" "Delete") +; (gtk_accel_path "/ThunarWindow/view-configure-toolbar" "") +; (gtk_accel_path "/ThunarWindow/open-recent" "") +; (gtk_accel_path "/ThunarBookmarks/7a203ca58c14c76ec1b07d08eaba7e8a" "") +; (gtk_accel_path "/ThunarStandardView/forward" "Right") +; (gtk_accel_path "/ThunarActionManager/restore" "") +; (gtk_accel_path "/ThunarWindow/open-location-alt" "d") +; (gtk_accel_path "/ThunarStandardView/select-by-pattern" "s") +; (gtk_accel_path "/ThunarWindow/zoom-out-alt" "KP_Subtract") +; (gtk_accel_path "/ThunarWindow/contents" "F1") +; (gtk_accel_path "/ThunarWindow/open-file-menu" "F10") +; (gtk_accel_path "/ThunarWindow/show-highlight" "") +; (gtk_accel_path "/ThunarStandardView/sort-descending" "") +; (gtk_accel_path "/ThunarStandardView/sort-by-name" "") +; (gtk_accel_path "/ThunarStandardView/select-all-files" "a") +; (gtk_accel_path "/ThunarActionManager/execute" "") +; (gtk_accel_path "/ThunarStandardView/properties" "Return") +; (gtk_accel_path "/ThunarActionManager/cut-2" "") +; (gtk_accel_path "/ThunarStandardView/sort-by-dtime" "") +; (gtk_accel_path "/ThunarBookmarks/de6d2099b95ef15820d04f5c3a6dc0f8" "") +; (gtk_accel_path "/ThunarWindow/open-templates" "") +; (gtk_accel_path "/ThunarActionManager/paste-2" "Insert") +; (gtk_accel_path "/ThunarWindow/switch-next-tab" "Page_Down") +; (gtk_accel_path "/ThunarStatusBar/toggle-filetype" "") +; (gtk_accel_path "/ThunarWindow/close-all-windows" "w") +; (gtk_accel_path "/ThunarStandardView/create-document" "") +; (gtk_accel_path "/ThunarWindow/detach-tab" "") +; (gtk_accel_path "/ThunarWindow/cancel-search" "Escape") +; (gtk_accel_path "/ThunarWindow/zoom-in-alt2" "equal") +; (gtk_accel_path "/ThunarStatusBar/toggle-hidden-count" "") +; (gtk_accel_path "/ThunarShortcutsPane/sendto-shortcuts" "d") +; (gtk_accel_path "/ThunarActionManager/undo" "z") +; (gtk_accel_path "/ThunarBookmarks/0064c8b8c2b8ae1954479b6f2feab576" "") +; (gtk_accel_path "/ThunarStandardView/toggle-sort-order" "") +; (gtk_accel_path "/ThunarWindow/view-location-selector-entry" "") +; (gtk_accel_path "/ThunarActionManager/paste" "v") +; (gtk_accel_path "/ThunarWindow/zoom-in-alt1" "KP_Add") +; (gtk_accel_path "/ThunarWindow/view-menubar" "m") +; (gtk_accel_path "/ThunarStandardView/back" "Left") +; (gtk_accel_path "/ThunarWindow/open-desktop" "") +; (gtk_accel_path "/ThunarWindow/view-as-detailed-list" "2") +; (gtk_accel_path "/ThunarActionManager/restore-show" "") +; (gtk_accel_path "/ThunarWindow/sendto-menu" "") +; (gtk_accel_path "/ThunarStatusBar/toggle-display-name" "") +; (gtk_accel_path "/ThunarWindow/go-menu" "") +; (gtk_accel_path "/ThunarWindow/zoom-out" "minus") +; (gtk_accel_path "/ThunarWindow/remove-from-recent" "") +; (gtk_accel_path "/ThunarActionManager/open-with-other" "") +; (gtk_accel_path "/ThunarStandardView/invert-selection" "i") +; (gtk_accel_path "/ThunarWindow/view-side-pane-shortcuts" "b") +; (gtk_accel_path "/ThunarWindow/reload-alt-2" "Reload") +; (gtk_accel_path "/ThunarBookmarks/fb8a2fb8c18b440d557134b69e8bfc79" "") +; (gtk_accel_path "/ThunarWindow/view-location-selector-menu" "") +; (gtk_accel_path "/ThunarWindow/edit-menu" "") +; (gtk_accel_path "/ThunarActionManager/copy" "c") +; (gtk_accel_path "/ThunarStandardView/sort-by-mtime" "") +; (gtk_accel_path "/ThunarWindow/reload-alt-1" "F5") +; (gtk_accel_path "/ThunarStandardView/forward-alt" "Forward") +; (gtk_accel_path "/ThunarActionManager/move-to-trash" "") +; (gtk_accel_path "/ThunarActionManager/delete-3" "KP_Delete") +; (gtk_accel_path "/ThunarWindow/bookmarks-menu" "") +; (gtk_accel_path "/ThunarWindow/reload" "r") +; (gtk_accel_path "/ThunarBookmarks/ab554ce947264f765ed1ba66309937f1" "") +; (gtk_accel_path "/ThunarStandardView/arrange-items-menu" "") +; (gtk_accel_path "/ThunarStandardView/unselect-all-files" "Escape") +; (gtk_accel_path "/ThunarWindow/open-computer" "") +; (gtk_accel_path "/ThunarWindow/toggle-image-preview" "") +; (gtk_accel_path "/ThunarWindow/toggle-side-pane" "F9") +; (gtk_accel_path "/ThunarWindow/view-as-icons" "1") +; (gtk_accel_path "/ThunarActionManager/delete-2" "Delete") +; (gtk_accel_path "/ThunarWindow/zoom-in" "plus") +; (gtk_accel_path "/ThunarStandardView/rename" "F2") +; (gtk_accel_path "/ThunarWindow/open-location" "l") +; (gtk_accel_path "/ThunarWindow/view-as-compact-list" "3") +; (gtk_accel_path "/ThunarWindow/view-menu" "") +; (gtk_accel_path "/ThunarWindow/search" "f") +; (gtk_accel_path "/ThunarWindow/new-tab" "t") +; (gtk_accel_path "/ThunarWindow/zoom-reset" "0") +; (gtk_accel_path "/ThunarWindow/contents/help-menu" "") +; (gtk_accel_path "/ThunarActionManager/open-in-new-tab" "p") +; (gtk_accel_path "/ThunarWindow/view-location-selector-buttons" "") +; (gtk_accel_path "/ThunarStandardView/back-alt2" "Back") +; (gtk_accel_path "/ThunarActionManager/redo" "z") +; (gtk_accel_path "/ThunarWindow/open-trash" "") +; (gtk_accel_path "/ThunarActionManager/open-in-new-window" "o") +; (gtk_accel_path "/ThunarWindow/view-statusbar" "") +; (gtk_accel_path "/ThunarActionManager/open-location" "") +; (gtk_accel_path "/ThunarStandardView/duplicate" "") +; (gtk_accel_path "/ThunarActionManager/trash-delete-2" "KP_Delete") +; (gtk_accel_path "/ThunarStandardView/back-alt1" "BackSpace") +; (gtk_accel_path "/ThunarStandardView/create-folder" "n") +; (gtk_accel_path "/ThunarWindow/open-home" "Home") +; (gtk_accel_path "/ThunarWindow/switch-focused-split-view-pane" "") +; (gtk_accel_path "/ThunarWindow/show-hidden" "h") +; (gtk_accel_path "/ThunarStandardView/set-default-app" "") +; (gtk_accel_path "/ThunarWindow/empty-trash" "") +; (gtk_accel_path "/ThunarWindow/preferences" "") +; (gtk_accel_path "/ThunarActionManager/delete" "") +; (gtk_accel_path "/ThunarWindow/open-network" "") +; (gtk_accel_path "/ThunarWindow/view-side-pane-tree" "e") +; (gtk_accel_path "/ThunarWindow/open-file-system" "") +; (gtk_accel_path "/ThunarWindow/search-alt" "Search") +; (gtk_accel_path "/ThunarWindow/switch-next-tab-alt" "Tab") +; (gtk_accel_path "/ThunarActionManager/sendto-desktop" "") +; (gtk_accel_path "/ThunarStandardView/make-link" "") +; (gtk_accel_path "/ThunarWindow/zoom-reset-alt" "KP_0") +; (gtk_accel_path "/ThunarWindow/about" "") diff --git a/general/configs/Thunar/uca.xml b/general/configs/Thunar/uca.xml new file mode 100755 index 0000000..0ddac52 --- /dev/null +++ b/general/configs/Thunar/uca.xml @@ -0,0 +1,25 @@ + + + + utilities-terminal + Open Terminal Here + + 1675076590898177-1 + terminator --working-directory %f + Example for a custom action + + * + + + + + com.github.artemanufrij.findfileconflicts + Fix filenames + + 1691249342110327-1 + /home/janis/scripts/removeSpaces.sh %f + A script that fixes the filenames in a directory recursively + * + * + + diff --git a/general/configs/VSCodium/User/keybindings.json b/general/configs/VSCodium/User/keybindings.json new file mode 100755 index 0000000..23ca3db --- /dev/null +++ b/general/configs/VSCodium/User/keybindings.json @@ -0,0 +1 @@ +// Empty \ No newline at end of file diff --git a/general/configs/VSCodium/User/settings.json b/general/configs/VSCodium/User/settings.json new file mode 100644 index 0000000..0c62e95 --- /dev/null +++ b/general/configs/VSCodium/User/settings.json @@ -0,0 +1,73 @@ +{ + "workbench.colorTheme": "Community Material Theme Darker High Contrast", + "workbench.iconTheme": "eq-material-theme-icons-darker", + "editor.fontFamily": "Source Code Pro", + "python.languageServer": "Jedi", + "python.devOptions": ["DEBUG_ON_STARTUP"], + "python.analysis.logLevel": "Trace", + "git.enableSmartCommit": true, + "git.autofetch": true, + "ltex.language": "en-GB", + "[latex]": { + "editor.defaultFormatter": "James-Yu.latex-workshop" + }, + "latex-workshop.latex.tools": [ + { + "name": "latexmk", + "command": "latexmk", + "args": [ + "-synctex=1", + "-interaction=nonstopmode", + "-file-line-error", + "--shell-escape", + "-pdf", + "%DOC%" + ] + }, + { + "name": "pdflatex", + "command": "pdflatex", + "args": [ + "--shell-escape", + "-synctex=1", + "-interaction=nonstopmode", + "-file-line-error", + "%DOC%" + ] + }, + { + "name": "bibtex", + "command": "bibtex", + "args": [ + "%DOCFILE%" + ], + "env": {} + } + ], + "[vue]": { + "editor.defaultFormatter": "Vue.volar" + }, + "redhat.telemetry.enabled": false, + "editor.defaultFormatter": "vscode.typescript-language-features", + "[html]": { + "editor.defaultFormatter": "vscode.html-language-features" + }, + "cSpell.userWords": [ + "fulfillable", + "libreǝvent", + "unsatisfiable" + ], + "[java]": { + "editor.defaultFormatter": "redhat.java" + }, + "[xml]": { + "editor.defaultFormatter": "redhat.vscode-xml" + }, + "cSpell.language": "en-GB", + "git.openRepositoryInParentFolders": "never", + "[lua]": { + "editor.defaultFormatter": "yinfei.luahelper" + }, + "diffEditor.ignoreTrimWhitespace": false, + +} \ No newline at end of file diff --git a/general/configs/VSCodium/User/snippets/docSetup.code-snippets b/general/configs/VSCodium/User/snippets/docSetup.code-snippets new file mode 100755 index 0000000..f818959 --- /dev/null +++ b/general/configs/VSCodium/User/snippets/docSetup.code-snippets @@ -0,0 +1,22 @@ +{ + // Place your global snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and + // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope + // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is + // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. + // Placeholders with the same ids are connected. + // Example: + // "Print to console": { + // "scope": "javascript,typescript", + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + "docTitle": { + "prefix": "prepareDoc", + "body": "$BLOCK_COMMENT_START\n*\t\t\t\t$WORKSPACE_NAME - $TM_FILENAME\n*\n*\tCreated by Janis Hutz $CURRENT_MONTH/$CURRENT_DATE/$CURRENT_YEAR, Licensed under ${1|the GPL V3,the MIT,a proprietary,the BSD,the LGPL V3,the Apache|} License\n*\t\t\thttps://janishutz.com, development@janishutz.com\n*\n*\n$BLOCK_COMMENT_END" + } +} \ No newline at end of file diff --git a/general/configs/VSCodium/User/snippets/html.json b/general/configs/VSCodium/User/snippets/html.json new file mode 100755 index 0000000..adcf69c --- /dev/null +++ b/general/configs/VSCodium/User/snippets/html.json @@ -0,0 +1,58 @@ +{ + // Place your snippets for html here. Each snippet is defined under a snippet name and has a prefix, body and + // description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the + // same ids are connected. + // Example: + // "Print to console": { + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + "impress": { + "prefix": "impress", + "body": [ + "", + "", + "\t\n\t\t$1\n\t\t\n\t", + "\t", + "\t\t
\n\t\t\t

Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

\n\t\t\t

For the best experience please use the latest Chrome, Safari or Firefox browser.

\n\t\t
", + "\t\t
", + "\t\t\t
\n\t\t\t\t
", + "\t\t\t\t\t

$2

\n\t\t\t\t
", + "\t\t\t
\n\t\t
", + "\n\t\t\n\t", + "" + ] + }, + "impress-step": { + "prefix": "impressStep", + "body": [ + "\n
", + "\t
", + "\t\t

$2

\n\t
", + "
\n" + ] + }, + "html-basic": { + "prefix": "basic", + "body": [ + "", + "", + "\t\n\t\t$1\n\t\t\n\t\t\n\t\t\n\t", + "\t\n\t\t

$3

", + "\t\n" + ] + }, + "impress-notes": { + "prefix": "impressNotes", + "body": "
\n\t$1\n
" + }, + "impress-substep": { + "prefix": "impressSubstep", + "body": "
\n\t$1\n
" + } +} \ No newline at end of file diff --git a/general/configs/VSCodium/User/snippets/javascript.json b/general/configs/VSCodium/User/snippets/javascript.json new file mode 100755 index 0000000..4577ae3 --- /dev/null +++ b/general/configs/VSCodium/User/snippets/javascript.json @@ -0,0 +1,106 @@ +{ + // Place your snippets for javascript here. Each snippet is defined under a snippet name and has a prefix, body and + // description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the + // same ids are connected. + // Example: + // "Print to console": { + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + "JS-Class": { + "prefix": "jsSetupClass", + "body": "class $1 { \n\tconstructor () {} \n\n \t$2 () {\n\t$3\n\t}\n}", + "description": "Setup the basic structure of a class in JS" + }, + "ExpressJS": { + "prefix": "jsExpressSetup", + "body": [ + "const express = require( 'express' );", + "let app = express();", + "const path = require( 'path' );", + "const expressSession = require( 'express-session' );", + "const fs = require( 'fs' );", + "const bodyParser = require( 'body-parser' );", + "const cookieParser = require( 'cookie-parser' )", + "const favicon = require( 'serve-favicon' );", + "\napp.use( expressSession ( {\n\tsecret: $1,\n\tresave: true,\n\tsaveUninitialized: true\n} ) );", + "app.use( bodyParser.urlencoded( { extended: false } ) );", + "app.use( bodyParser.json() );", + "app.use( cookieParser() );", + "app.use( favicon( path.join( __dirname + '$2' ) ) );\n", + "app.use( ( request, response, next ) => {\n\tresponse.sendFile( path.join( __dirname + '$3' ) ) \n} );", + "\n\napp.get( '/', ( request, response ) => {\n$4\n} );", + "\n\nconst PORT = process.env.PORT || 8080;", + "http.createServer( app ).listen( PORT );" + ] + }, + "ExpressJS-Route": { + "prefix": "jsEjsRoute", + "body": "\n\napp.get( '$1', ( request, response ) => {\n$4\n} );" + }, + "JSAsync": { + "prefix": "jsAsync", + "body": "(async () => {\n$1\n} ) ();" + }, + "JSpromiseReturnFunc": { + "prefix": "jsPromise", + "body": "function $1 () {\n\treturn new Promise( ( resolve, reject ) => {\n\t$2\n\t} );\n}" + }, + "fetch from other url": { + "prefix": "remoteURL", + "body": [ + "localStorage.getItem( 'url' ) + '/$1'", + ], + "description": "remote URL fetching (get from base address from local storage)" + }, + "fetch post": { + "prefix": "fetchPost", + "body": [ + "const fetchOptions = {", + "\tmethod: 'post',", + "\tbody: JSON.stringify( $1 ),", + "\tcredentials: 'include',", + "\theaders: {", + "\t\t'Content-Type': 'application/json',", + "\t\t'charset': 'utf-8'", + "\t}", + "};", + "fetch( $2, fetchOptions ).then( res => {", + "\tif ( res.status === 200 ) {", + "\t\tres.json().then( json => {", + "\t\t\t$3", + "\t\t} );", + "\t}", + "} );", + "$4" + ], + "description": "POST request using fetch" + }, + "fetch get": { + "prefix": "fetchGet", + "body": [ + "fetch( $2, { credentials: 'include' } ).then( res => {", + "\tif ( res.status === 200 ) {", + "\t\tres.json().then( json => {", + "\t\t\t$3", + "\t\t} );", + "\t}", + "} );", + "$4" + ], + "description": "POST request using fetch" + }, + "promise": { + "prefix": "promise", + "body": [ + "return new Promise( ( resolve, reject ) => {", + "\t", + "} );" + ] + } +} \ No newline at end of file diff --git a/general/configs/VSCodium/User/snippets/latex.json b/general/configs/VSCodium/User/snippets/latex.json new file mode 100644 index 0000000..772352b --- /dev/null +++ b/general/configs/VSCodium/User/snippets/latex.json @@ -0,0 +1,361 @@ +{ + // Place your snippets for latex here. Each snippet is defined under a snippet name and has a prefix, body and + // description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the + // same ids are connected. + // Example: + // "Print to console": { + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + // Place your snippets for tex here. Each snippet is defined under a snippet name and has a prefix, body and + // description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the + // same ids are connected. + // Example: + // "Print to console": { + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + "Formula (old)": { + "prefix": "formulaBare", + "body": [ + "\\begin{tcolorbox}[colback=red!5!white,colframe=red!75!black,title=Formula: $1]", + "\t$2", + "\\end{tcolorbox}", + ], + "description": "Red tcolorbox to provide a formula (without the default setup)" + }, + "Prepare Latex doc (old)": { + "prefix": "LaTeX-Prepare-Old", + "body": [ + "\\documentclass{article}\n", + "% Imports %", + "\\usepackage{amsmath}", + "\\usepackage{graphicx}", + "\\usepackage{subcaption}", + "\\usepackage[export]{adjustbox}", + "\\usepackage{tcolorbox}", + "\\usepackage{xcolor}", + "\\usepackage{cancel}", + "\\usepackage{dsfont}", + "\\usepackage{amssymb}", + "\\usepackage[a4paper]{geometry}", + "\\usepackage{parskip}\n", + "% Setup %", + "\\title{\\Huge \\textbf{$1}}", + "\\author{Janis Hutz}\n", + "% Configuring %", + "\\addtolength{\\oddsidemargin}{-0.75in}", + "\\addtolength{\\textwidth}{1.5in}", + "\\addtolength{\\evensidemargin}{-0.75in}", + "\\addtolength{\\topmargin}{-1in}", + "\\addtolength{\\textheight}{2in}\n", + "% Main doc %", + "\\begin{document}", + "\\maketitle", + "$2", + "\\end{document}", + ], + "description": "Prepare a LaTeX Document with all relevant imports" + }, + "prepare LaTeX Document (New)": { + "prefix": "latex-prepare", + "body": [ + "\\documentclass{article}\n", + "\\input{~/projects/generalSchool/helpers.tex}\n", + "\\setup{$1}\n", + "\\begin{document}", + "\\maketitle", + "\\pagestyle{fancy}", + "\\thispagestyle{fancy}\n\n", + "$2\n\n", + "\\end{document}" + ], + "description": "Prepares a full LaTeX Document for use and compiling" + }, + "Fancy table": { + "prefix": "table", + "body": [ + "\\begin{tabular}[h!]{|$1|}", + "\t\\hline", + "\t\\rowcolor{$2}\\multicolumn{$3}{|c|}{$4}\\", + "\t\\hline", + "\t$5\\\\\\", + "\t\\hline", + "\\end{tabular}" + ], + "description": "Inserts a tcolorbox to provide a formula (red)" + }, + "Formula (new)": { + "prefix": "formula", + "body": [ + "\\begin{formula}[]{$1}", + "\t$2", + "\\end{formula}" + ], + "description": "Inserts a tcolorbox to provide a formula (red)" + }, + "Definition (new)": { + "prefix": "definition", + "body": [ + "\\begin{definition}[]{$1}", + "\t$2", + "\\end{definition}" + ], + "description": "Inserts a tcolorbox to provide a definition (blue)" + }, + "Recall (new)": { + "prefix": "recall", + "body": [ + "\\begin{recall}[]{$1}", + "\t$2", + "\\end{recall}" + ], + "description": "Inserts a tcolorbox to provide a recall / revision of previous knowledge (yellow)" + }, + "Important Remarks (new)": { + "prefix": "remarks", + "body": [ + "\\begin{remarks}[]{$1}", + "\t$2", + "\\end{remarks}" + ], + "description": "Inserts a tcolorbox to provide remarks (green)" + }, + "Guides (new)": { + "prefix": "guides", + "body": [ + "\\begin{guides}[]{$1}{${2:Usage}}", + "\t$2", + "\\end{guides}" + ], + "description": "Inserts a tcolorbox to provide guides / instructions on how to use (purple)" + }, + "Properties (new)": { + "prefix": "properties", + "body": [ + "\\begin{properties}[]{$1}", + "\t$2", + "\\end{properties}" + ], + "description": "Inserts a tcolorbox to inform about properties / restrictions / limitations" + }, + "Restrictions (new)": { + "prefix": "restrictions", + "body": [ + "\\begin{restrictions}[]{$1}", + "\t$2", + "\\end{restrictions}" + ], + "description": "Inserts a tcolorbox to inform about restrictions" + }, + "Limitations (new)": { + "prefix": "limitations", + "body": [ + "\\begin{limitations}[]{$1}", + "\t$2", + "\\end{limitations}" + ], + "description": "Inserts a tcolorbox to inform about limitations" + }, + "Theorem (new)": { + "prefix": "theorem", + "body": [ + "\\begin{theorem}[]{$1}", + "\t$2", + "\\end{theorem}" + ], + "description": "Inserts a tcolorbox to inform about theorems" + }, + "Lemma (new)": { + "prefix": "lemma", + "body": [ + "\\begin{lemma}[]{$1}", + "\t$2", + "\\end{lemma}" + ], + "description": "Inserts a tcolorbox to inform about lemmas" + }, + "Corollary (new)": { + "prefix": "corollary", + "body": [ + "\\begin{corollary}[]{$1}", + "\t$2", + "\\end{corollary}" + ], + "description": "Inserts a tcolorbox to inform about corollaries" + }, + "Terms (new)": { + "prefix": "terms", + "body": [ + "\\begin{terms}[]{$1}", + "\t$2", + "\\end{terms}" + ], + "description": "Inserts a tcolorbox to inform about terms" + }, + "Proof (new)": { + "prefix": "proof", + "body": [ + "\\begin{proof}[]{$1}", + "\t$2", + "\\end{proof}" + ], + "description": "Inserts a tcolorbox to show a proof" + }, + "Axiom (new)": { + "prefix": "axiom", + "body": [ + "\\begin{axiom}[]{$1}", + "\t$2", + "\\end{axiom}" + ], + "description": "Inserts a tcolorbox to show an axiom" + }, + "Notation (new)": { + "prefix": "notation", + "body": [ + "\\begin{notation}[]{$1}", + "\t$2", + "\\end{notation}" + ], + "description": "Inserts a tcolorbox to show notation" + }, + "Example (new)": { + "prefix": "example", + "body": [ + "\\begin{example}[]{$1}", + "\t$2", + "\\end{example}" + ], + "description": "Inserts a tcolorbox to show example" + }, + "Usage (languages, new)": { + "prefix": "usage", + "body": [ + "\\begin{usage}[]{$1}", + "\t$2", + "\\end{usage}" + ], + "description": "Inserts a tcolorbox to inform about usage in a language context" + }, + "Conjugation (languages, new)": { + "prefix": "conjugation", + "body": [ + "\\begin{conjugation}[]{$1}", + "\t$2", + "\\end{conjugation}" + ], + "description": "Inserts a tcolorbox to inform about conjugation" + }, + "Forms (languages, new)": { + "prefix": "forms", + "body": [ + "\\begin{forms}[]{$1}", + "\t$2", + "\\end{forms}" + ], + "description": "Inserts a tcolorbox to inform about forms of e.g. grammatical structures" + }, + "General-Tcolorbox (new)": { + "prefix": "general-tcb", + "body": [ + "\\begin{general}[]{${1:title}}{${2:second title}}{${3|red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,lightgray,brown,lime,olive,orange,pink,purple,teal,violet|}}", + "\t$4", + "\\end{general}" + ], + "description": "Inserts a tcolorbox for general purposes. First bracket is title, second one is second title, third one colour" + }, + "Derivative": { + "prefix": "derivative", + "body": [ + "\\frac{\\mbox{d}}{\\mbox{d}x}$1" + ] + }, + "Example (inline)": { + "prefix": "example-inline", + "body": [ + "\\inlineex" + ] + }, + "bold": { + "prefix": "#bold", + "body": [ + "\\textbf{$1}" + ] + }, + "italic": { + "prefix": "#i", + "body": [ + "\\textit{$1}" + ] + }, + "bolditalic": { + "prefix": "#bi", + "body": [ + "\\textbf{\\textit{$1}}" + ] + }, + "underlinie": { + "prefix": "#u", + "body": [ + "\\underbar{$1}" + ] + }, + "algebra": { + "prefix": "algebra", + "body": [ + "\\langle $1 \\rangle" + ] + }, + "fill-width": { + "prefix": "#fill", + "body": [ + "\\hspace{\\fill}$1" + ] + }, + "Latex-Colour": { + "prefix": "colour", + "body": [ + "${1|red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,lightgray,brown,lime,olive,orange,pink,purple,teal,violet|}" + ] + }, + "Latex-Text-Colour": { + "prefix": "colour-text", + "body": [ + "\\color{${1|red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,lightgray,brown,lime,olive,orange,pink,purple,teal,violet|}}" + ] + }, + "German doc": { + "prefix": "latex-german", + "body": [ + "\\usepackage[ngerman]{babel}", + "\\setcounter{lang}{2} % Move below \\begin{document}", + ] + }, + "Letter": { + "prefix": "latex-letter", + "body": [ + "\\documentclass[12pt,a4paper]{scrlttr2}\n", + "\\input{~/projects/generalSchool/letter-helpers.tex}\n", + "% Subject", + "\\setkomavar{subject}{$1}", + "\\begin{document}\\raggedright", + "\t\\begin{letter}{Company \\\\\\ Name \\\\\\ Address \\\\\\ CH-Place}", + "\t\t\\opening{Intro}\n", + "\t\t$2\n", + "\t\t\\closing{Mit freundlichen Grüssen}", + "\t\\end{letter}", + "\\end{document}", + ] + }, +} \ No newline at end of file diff --git a/general/configs/VSCodium/User/snippets/tex.json b/general/configs/VSCodium/User/snippets/tex.json new file mode 100644 index 0000000..8f1f6fe --- /dev/null +++ b/general/configs/VSCodium/User/snippets/tex.json @@ -0,0 +1,124 @@ +{ + // Place your snippets for tex here. Each snippet is defined under a snippet name and has a prefix, body and + // description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the + // same ids are connected. + // Example: + // "Print to console": { + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + "Formula (old)": { + "prefix": "formulaBare", + "body": [ + "\\begin{tcolorbox}[colback=red!5!white,colframe=red!75!black,title=Formula: $1]", + "\t$2", + "\\end{tcolorbox}", + ], + "description": "Red tcolorbox to provide a formula (without the default setup)" + }, + "Prepare Latex doc (old)": { + "prefix": "LaTeX-Prepare-Old", + "body": [ + "\\documentclass{article}\n", + "% Imports %", + "\\usepackage{amsmath}", + "\\usepackage{graphicx}", + "\\usepackage{subcaption}", + "\\usepackage[export]{adjustbox}", + "\\usepackage{tcolorbox}", + "\\usepackage{xcolor}", + "\\usepackage{cancel}", + "\\usepackage{dsfont}", + "\\usepackage{amssymb}", + "\\usepackage[a4paper]{geometry}", + "\\usepackage{parskip}\n", + "% Setup %", + "\\title{\\Huge \\textbf{$1}}", + "\\author{Janis Hutz}\n", + "% Configuring %", + "\\addtolength{\\oddsidemargin}{-0.75in}", + "\\addtolength{\\textwidth}{1.5in}", + "\\addtolength{\\evensidemargin}{-0.75in}", + "\\addtolength{\\topmargin}{-1in}", + "\\addtolength{\\textheight}{2in}\n", + "% Main doc %", + "\\begin{document}", + "\\maketitle", + "$2", + "\\end{document}" + ], + "description": "Prepare a LaTeX Document with all relevant imports" + }, + "prepare LaTeX Document (New)": { + "prefix": "latex-prepare", + "body": [ + "\\documentclass{article}\n", + "\\input{~/projects/generalSchool/helpers.tex}\n", + "\\setup{$1}\n", + "\\begin{document}", + "\\maketitle\n\n", + "$2\n\n", + "\\end{document}" + ], + "description": "Prepares a full LaTeX Document for use and compiling" + }, + "Formula (new)": { + "prefix": "formula", + "body": [ + "\\begin{formula}[]{$1}", + "\t$2", + "\\end{formula}" + ], + "description": "Inserts a tcolorbox to provide a formula (red)" + }, + "Definition (new)": { + "prefix": "definition", + "body": [ + "\\begin{definition}[]{$1}", + "\t$2", + "\\end{definition}" + ], + "description": "Inserts a tcolorbox to provide a definition (blue)" + }, + "Recall (new)": { + "prefix": "recall", + "body": [ + "\\begin{recall}[]{$1}", + "\t$2", + "\\end{recall}" + ], + "description": "Inserts a tcolorbox to provide a recall / revision of previous knowledge (yellow)" + }, + "Important Remarks (new)": { + "prefix": "remarks", + "body": [ + "\\begin{remarks}[]{$1}", + "\t$2", + "\\end{remarks}" + ], + "description": "Inserts a tcolorbox to provide remarks (green)" + }, + "Guides (new)": { + "prefix": "guides", + "body": [ + "\\begin{guides}[]{$1}", + "\t$2", + "\\end{guides}" + ], + "description": "Inserts a tcolorbox to provide guides / instructions on how to use (purple)" + }, + "Properties / Restrictions (new)": { + "prefix": "properties", + "body": [ + "\\begin{properties}[]{$1}", + "\t$2", + "\\end{properties}" + ], + "description": "Inserts a tcolorbox to inform about properties / restrictions / limitations" + } +} \ No newline at end of file diff --git a/general/configs/VSCodium/User/snippets/typescript.json b/general/configs/VSCodium/User/snippets/typescript.json new file mode 100644 index 0000000..88d8683 --- /dev/null +++ b/general/configs/VSCodium/User/snippets/typescript.json @@ -0,0 +1,106 @@ +{ + // Place your snippets for javascript here. Each snippet is defined under a snippet name and has a prefix, body and + // description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the + // same ids are connected. + // Example: + // "Print to console": { + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + "JS-Class": { + "prefix": "jsSetupClass", + "body": "class $1 { \n\tconstructor () {} \n\n \t$2 () {\n\t$3\n\t}\n}", + "description": "Setup the basic structure of a class in JS" + }, + "ExpressJS": { + "prefix": "jsExpressSetup", + "body": [ + "const express = require( 'express' );", + "let app = express();", + "const path = require( 'path' );", + "const expressSession = require( 'express-session' );", + "const fs = require( 'fs' );", + "const bodyParser = require( 'body-parser' );", + "const cookieParser = require( 'cookie-parser' )", + "const favicon = require( 'serve-favicon' );", + "\napp.use( expressSession ( {\n\tsecret: $1,\n\tresave: true,\n\tsaveUninitialized: true\n} ) );", + "app.use( bodyParser.urlencoded( { extended: false } ) );", + "app.use( bodyParser.json() );", + "app.use( cookieParser() );", + "app.use( favicon( path.join( __dirname + '$2' ) ) );\n", + "app.use( ( request, response, next ) => {\n\tresponse.sendFile( path.join( __dirname + '$3' ) ) \n} );", + "\n\napp.get( '/', ( request, response ) => {\n$4\n} );", + "\n\nconst PORT = process.env.PORT || 8080;", + "http.createServer( app ).listen( PORT );" + ] + }, + "ExpressJS-Route": { + "prefix": "jsEjsRoute", + "body": "\n\napp.get( '$1', ( request: express.Request, response: express.Response ) => {\n$4\n} );" + }, + "JSAsync": { + "prefix": "jsAsync", + "body": "(async () => {\n$1\n} ) ();" + }, + "JSpromiseReturnFunc": { + "prefix": "jsPromise", + "body": "function $1 () {\n\treturn new Promise( ( resolve, reject ) => {\n\t$2\n\t} );\n}" + }, + "fetch from other url": { + "prefix": "remoteURL", + "body": [ + "localStorage.getItem( 'url' ) + '/$1'", + ], + "description": "remote URL fetching (get from base address from local storage)" + }, + "fetch post": { + "prefix": "fetchPost", + "body": [ + "const fetchOptions = {", + "\tmethod: 'post',", + "\tbody: JSON.stringify( $1 ),", + "\tcredentials: 'include',", + "\theaders: {", + "\t\t'Content-Type': 'application/json',", + "\t\t'charset': 'utf-8'", + "\t}", + "};", + "fetch( $2, fetchOptions ).then( res => {", + "\tif ( res.status === 200 ) {", + "\t\tres.json().then( json => {", + "\t\t\t$3", + "\t\t} );", + "\t}", + "} );", + "$4" + ], + "description": "POST request using fetch" + }, + "fetch get": { + "prefix": "fetchGet", + "body": [ + "fetch( $2, { credentials: 'include' } ).then( res => {", + "\tif ( res.status === 200 ) {", + "\t\tres.json().then( json => {", + "\t\t\t$3", + "\t\t} );", + "\t}", + "} );", + "$4" + ], + "description": "POST request using fetch" + }, + "promise": { + "prefix": "promise", + "body": [ + "return new Promise( ( resolve, reject ) => {", + "\t", + "} );" + ] + } +} \ No newline at end of file diff --git a/general/configs/VSCodium/User/snippets/vue.json b/general/configs/VSCodium/User/snippets/vue.json new file mode 100755 index 0000000..e7219f6 --- /dev/null +++ b/general/configs/VSCodium/User/snippets/vue.json @@ -0,0 +1,24 @@ +{ + // Place your snippets for vue here. Each snippet is defined under a snippet name and has a prefix, body and + // description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the + // same ids are connected. + // Example: + // "Print to console": { + // "prefix": "log", + // "body": [ + // "console.log( '$1' );", + // "$2" + // ], + // "description": "Log output to console" + // }, + "script:setup": { + "prefix": "script:setup", + "body": [ + "" + ], + "description": "Setup the basic structure of a class in JS" + }, +} \ No newline at end of file diff --git a/general/configs/VSCodium/User/syncLocalSettings.json b/general/configs/VSCodium/User/syncLocalSettings.json new file mode 100755 index 0000000..25554e0 --- /dev/null +++ b/general/configs/VSCodium/User/syncLocalSettings.json @@ -0,0 +1,36 @@ +{ + "ignoreUploadFiles": [ + "state.*", + "syncLocalSettings.json", + ".DS_Store", + "sync.lock", + "projects.json", + "projects_cache_vscode.json", + "projects_cache_git.json", + "projects_cache_svn.json", + "gpm_projects.json", + "gpm-recentItems.json" + ], + "ignoreUploadFolders": [ + "workspaceStorage" + ], + "ignoreExtensions": [], + "gistDescription": "Visual Studio Code Settings Sync Gist", + "version": 343, + "token": "", + "downloadPublicGist": false, + "supportedFileExtensions": [ + "json", + "code-snippets" + ], + "openTokenLink": true, + "disableUpdateMessage": false, + "lastUpload": null, + "lastDownload": null, + "githubEnterpriseUrl": null, + "askGistDescription": false, + "customFiles": {}, + "hostName": null, + "universalKeybindings": false, + "autoUploadDelay": 20 +} \ No newline at end of file diff --git a/general/configs/VSCodium/product.json b/general/configs/VSCodium/product.json new file mode 100755 index 0000000..ba7257d --- /dev/null +++ b/general/configs/VSCodium/product.json @@ -0,0 +1,8 @@ +{ + "extensionsGallery": { + "serviceUrl": "https://marketplace.visualstudio.com/_apis/public/gallery", + "itemUrl": "https://marketplace.visualstudio.com/items", + "cacheUrl": "https://vscode.blob.core.windows.net/gallery/index", + "controlUrl": "" + } +} diff --git a/general/configs/dunst/defaultDunst b/general/configs/dunst/defaultDunst new file mode 100644 index 0000000..60f79e2 --- /dev/null +++ b/general/configs/dunst/defaultDunst @@ -0,0 +1,58 @@ +[global] + follow = mouse + indicate_hidden = yes + + offset = 10x10 + + notification_height = 0 + + separator_height = 2 + + padding = 8 + horizontal_padding = 8 + text_icon_padding = 0 + frame_width = 2 + + frame_color = "#a6f7ad" + separator_color = frame + + sort = yes + idle_threshold = 120 + font = monospace 10 + line_height = 0 + markup = full + alignment = left + vertical_alignment = center + show_age_threshold = 60 + word_wrap = yes + stack_duplicates = true + hide_duplicate_count = false + + show_indicators = yes + + min_icon_size = 0 + max_icon_size = 64 + + icon_path = /usr/share/icons/candy-icons/16x16/status/:/usr/share/icons/candy-icons/16x16/devices/:/usr/share/icons/candy-icons/16x16/actions/:/usr/share/icons/candy-icons/16x16/animations/:/usr/share/icons/candy-icons/16x16/apps/:/usr/share/icons/candy-icons/16x16/categories/:/usr/share/icons/candy-icons/16x16/emblems/:/usr/share/icons/candy-icons/16x16/emotes/:/usr/share/icons/candy-icons/16x16/devices/mimetypes:/usr/share/icons/candy-icons/16x16/panel/:/usr/share/icons/candy-icons/16x16/places/ + + dmenu = /usr/bin/wofi -p dunst: + browser = /usr/bin/firefox --new-tab + + title = Dunst + class = Dunst + + corner_radius = 10 + timeout = 5 + +[urgency_low] + background = "#00003a" + foreground = "#CDD6F4" + +[urgency_normal] + background = "#00003a" + foreground = "#CDD6F4" + +[urgency_critical] + background = "#00003a" + foreground = "#CDD6F4" + frame_color = "#6c0000" diff --git a/general/configs/dunst/dunstrc b/general/configs/dunst/dunstrc new file mode 100755 index 0000000..32e0118 --- /dev/null +++ b/general/configs/dunst/dunstrc @@ -0,0 +1,58 @@ +[global] + follow = mouse + indicate_hidden = yes + + offset = 10x10 + + notification_height = 0 + + separator_height = 2 + + padding = 8 + horizontal_padding = 8 + text_icon_padding = 0 + frame_width = 2 + + frame_color = "#cc5c00" + separator_color = frame + + sort = yes + idle_threshold = 120 + font = monospace 10 + line_height = 0 + markup = full + alignment = left + vertical_alignment = center + show_age_threshold = 60 + word_wrap = yes + stack_duplicates = true + hide_duplicate_count = false + + show_indicators = yes + + min_icon_size = 0 + max_icon_size = 64 + + icon_path = /usr/share/icons/candy-icons/16x16/status/:/usr/share/icons/candy-icons/16x16/devices/:/usr/share/icons/candy-icons/16x16/actions/:/usr/share/icons/candy-icons/16x16/animations/:/usr/share/icons/candy-icons/16x16/apps/:/usr/share/icons/candy-icons/16x16/categories/:/usr/share/icons/candy-icons/16x16/emblems/:/usr/share/icons/candy-icons/16x16/emotes/:/usr/share/icons/candy-icons/16x16/devices/mimetypes:/usr/share/icons/candy-icons/16x16/panel/:/usr/share/icons/candy-icons/16x16/places/ + + dmenu = /usr/bin/wofi -p dunst: + browser = /usr/bin/firefox --new-tab + + title = Dunst + class = Dunst + + corner_radius = 10 + timeout = 5 + +[urgency_low] + background = "#000000" + foreground = "#CDD6F4" + +[urgency_normal] + background = "#000000" + foreground = "#CDD6F4" + +[urgency_critical] + background = "#000000" + foreground = "#CDD6F4" + frame_color = "#6c0000" diff --git a/general/configs/dunst/mcLarenDunst b/general/configs/dunst/mcLarenDunst new file mode 100644 index 0000000..e69de29 diff --git a/general/configs/fish/config.fish b/general/configs/fish/config.fish new file mode 100755 index 0000000..c879158 --- /dev/null +++ b/general/configs/fish/config.fish @@ -0,0 +1,111 @@ +alias ls='ls -l --color' +alias ll='ls -la --color' +alias v='nvim' +alias c='clear' +alias bt='bashtop' +alias vicfg='cd ~/.config/nvim/ && nvim' +alias fm='thunar .' +alias gl='git ls-files --others --exclude-standard' +alias gm='gti ls-files -m' +alias gpu='git push' +alias gp='git pull' +alias gc='git commit -a -m' +alias ga='git add ./*' + +function y + set tmp (mktemp -t "yazi-cwd.XXXXXX") + yazi $argv --cwd-file="$tmp" + if set cwd (command cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ] + builtin cd -- "$cwd" + end + rm -f -- "$tmp" +end + +[ -f /usr/share/autojump/autojump.fish ]; and source /usr/share/autojump/autojump.fish + +if status is-interactive + function fish_prompt + + # Cache exit status + set -l last_status $status + + # Set color for variables in prompt + set -l normal (set_color normal) + set -l white (set_color FFFFFF) + set -l turquoise (set_color 5fdfff) + set -l orange (set_color df5f00) + set -l hotpink (set_color df005f) + set -l blue (set_color blue) + set -l limegreen (set_color 87ff00) + set -l purple (set_color af5fff) + set -l red (set_color e70e0e) + + # Configure __fish_git_prompt + set -g __fish_git_prompt_char_stateseparator ' ' + set -g __fish_git_prompt_color 5fdfff + set -g __fish_git_prompt_color_flags df5f00 + set -g __fish_git_prompt_color_prefix white + set -g __fish_git_prompt_color_suffix white + set -g __fish_git_prompt_showdirtystate true + set -g __fish_git_prompt_showuntrackedfiles true + set -g __fish_git_prompt_showstashstate true + + set -g __fish_git_prompt_show_informative_status true + + + # Only calculate once, to save a few CPU cycles when displaying the prompt + if not set -q __fish_prompt_hostname + # set -g __fish_prompt_hostname (hostname|cut -d . -f 1) + set -g __fish_prompt_hostname $orange(prompt_hostname)(set_color normal) + end + if not set -q __fish_prompt_char + if [ (id -u) -eq 0 ] + set -g __fish_prompt_char (set_color red)'λ'(set_color normal) + else + set -g __fish_prompt_char 'λ' + end + end + + # change `at` to `ssh` when an interactive ssh session is present + if [ "$SSH_TTY" = "" ] + set -g location at + # set -g __fish_prompt_hostname (set_color orange)(hostname|cut -d . -f 1) + else # connected via ssh + if [ "$TERM" = "xterm-256color-italic" -o "$TERM" = "tmux-256color" ] + set -g location (echo -e "\e[3mssh\e[23m") + # set -g ssh_hostname (echo -e $blue$__fish_prompt_hostname) + set -g __fish_prompt_hostname $blue(prompt_hostname)(set_color normal) + else + set -g location ssh + # set -g ssh_hostname (echo -e $blue$__fish_prompt_hostname) + set -g __fish_prompt_hostname $blue(prompt_hostname)(set_color normal) + end + end + + if [ (id -u) -eq 0 ] + # top line > Superuser + echo -n $red'╭─'$hotpink$USER $white$location $__fish_prompt_hostname$white' in '$limegreen(pwd)$turquoise + __fish_git_prompt " (%s)" + echo + # bottom line > Superuser + echo -n $red'╰' + echo -n $red'─'$__fish_prompt_char $normal + else # top line > non superuser's + echo -n $white'╭─'$hotpink$USER $white$location $__fish_prompt_hostname$white' in '$limegreen(pwd)$turquoise + __fish_git_prompt " (%s)" + echo + # bottom line > non superuser's + echo -n $white'╰' + echo -n $white'─'$__fish_prompt_char $normal + end + + # NOTE: disable `VIRTUAL_ENV_DISABLE_PROMPT` in `config.fish` + # see: https://virtualenv.pypa.io/en/latest/reference/#envvar-VIRTUAL_ENV_DISABLE_PROMPT + # support for virtual env name + if set -q VIRTUAL_ENV + echo -n "($turquoise"(basename "$VIRTUAL_ENV")"$white)" + end +end + + +end diff --git a/general/configs/fish/fish_variables b/general/configs/fish/fish_variables new file mode 100755 index 0000000..71bee0c --- /dev/null +++ b/general/configs/fish/fish_variables @@ -0,0 +1,33 @@ +# This file contains fish universal variable definitions. +# VERSION: 3.0 +SETUVAR __fish_initialized:3400 +SETUVAR fish_color_autosuggestion:555\x1ebrblack +SETUVAR fish_color_cancel:\x2dr +SETUVAR fish_color_command:blue +SETUVAR fish_color_comment:red +SETUVAR fish_color_cwd:green +SETUVAR fish_color_cwd_root:red +SETUVAR fish_color_end:green +SETUVAR fish_color_error:brred +SETUVAR fish_color_escape:brcyan +SETUVAR fish_color_history_current:\x2d\x2dbold +SETUVAR fish_color_host:normal +SETUVAR fish_color_host_remote:yellow +SETUVAR fish_color_normal:normal +SETUVAR fish_color_operator:brcyan +SETUVAR fish_color_param:cyan +SETUVAR fish_color_quote:yellow +SETUVAR fish_color_redirection:cyan\x1e\x2d\x2dbold +SETUVAR fish_color_search_match:bryellow\x1e\x2d\x2dbackground\x3dbrblack +SETUVAR fish_color_selection:white\x1e\x2d\x2dbold\x1e\x2d\x2dbackground\x3dbrblack +SETUVAR fish_color_status:red +SETUVAR fish_color_user:brgreen +SETUVAR fish_color_valid_path:\x2d\x2dunderline +SETUVAR fish_greeting:\x1d +SETUVAR fish_key_bindings:fish_default_key_bindings +SETUVAR fish_pager_color_completion:normal +SETUVAR fish_pager_color_description:B3A06D\x1eyellow\x1e\x2di +SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline +SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan +SETUVAR fish_pager_color_selected_background:\x2dr +SETUVAR fish_user_paths:/usr/lib/python3\x2e11/site\x2dpackages\x1e/usr/lib/python3\x2e11\x1e/usr/lib/python3\x2e11/site\x2dpackages/\x1e/home/janis/\x2elocal/lib/python3\x2e11/site\x2dpackages/\x1e/home/janis/\x2elocal/lib/python3\x2e11/ diff --git a/general/configs/kitty/current-theme.conf b/general/configs/kitty/current-theme.conf new file mode 100644 index 0000000..6cd386b --- /dev/null +++ b/general/configs/kitty/current-theme.conf @@ -0,0 +1,51 @@ +# vim:ft=kitty + +## name: Adwaita darker +## license: MIT +## author: Emil Löfquist (https://github.com/ewal) +## upstream: https://github.com/ewal/kitty-adwaita/blob/main/adwaita_darker.conf +## blurb: Adwaita darker - based on https://github.com/Mofiqul/adwaita.nvim + +background #000000 +foreground #deddda + +selection_background #1c1c1c +selection_foreground #c0bfbc + +url_color #1a5fb4 + +wayland_titlebar_color system +macos_titlebar_color system + +cursor #deddda +cursor_text_color #000000 + +active_border_color #1e1e1e +inactive_border_color #282828 +bell_border_color #ed333b +visual_bell_color none + +active_tab_background #101010 +active_tab_foreground #fcfcfc +inactive_tab_background #1c1c1c +inactive_tab_foreground #b0afac +tab_bar_background none +tab_bar_margin_color none + +color0 #000000 +color1 #ed333b +color2 #57e389 +color3 #ff7800 +color4 #62a0ea +color5 #9141ac +color6 #5bc8af +color7 #deddda + +color8 #9a9996 +color9 #f66151 +color10 #8ff0a4 +color11 #ffa348 +color12 #99c1f1 +color13 #dc8add +color14 #93ddc2 +color15 #f6f5f4 diff --git a/general/configs/kitty/kitty.conf b/general/configs/kitty/kitty.conf new file mode 100644 index 0000000..12f2b84 --- /dev/null +++ b/general/configs/kitty/kitty.conf @@ -0,0 +1,2644 @@ +# vim:fileencoding=utf-8:foldmethod=marker + +Fonts {{{ + +#: kitty has very powerful font management. You can configure +#: individual font faces and even specify special fonts for particular +#: characters. + +font_family Source Code Pro +# bold_font auto +# italic_font auto +# bold_italic_font auto + +#: You can specify different fonts for the bold/italic/bold-italic +#: variants. The easiest way to select fonts is to run the `kitten +#: choose-fonts` command which will present a nice UI for you to +#: select the fonts you want with previews and support for selecting +#: variable fonts and font features. If you want to learn to select +#: fonts manually, read the font specification syntax +#: . + +font_size 12.0 + +#: Font size (in pts). + +# force_ltr no + +#: kitty does not support BIDI (bidirectional text), however, for RTL +#: scripts, words are automatically displayed in RTL. That is to say, +#: in an RTL script, the words "HELLO WORLD" display in kitty as +#: "WORLD HELLO", and if you try to select a substring of an RTL- +#: shaped string, you will get the character that would be there had +#: the string been LTR. For example, assuming the Hebrew word ירושלים, +#: selecting the character that on the screen appears to be ם actually +#: writes into the selection buffer the character י. kitty's default +#: behavior is useful in conjunction with a filter to reverse the word +#: order, however, if you wish to manipulate RTL glyphs, it can be +#: very challenging to work with, so this option is provided to turn +#: it off. Furthermore, this option can be used with the command line +#: program GNU FriBidi +#: to get BIDI support, because it will force kitty to always treat +#: the text as LTR, which FriBidi expects for terminals. + +# symbol_map + +#: E.g. symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols + +#: Map the specified Unicode codepoints to a particular font. Useful +#: if you need special rendering for some symbols, such as for +#: Powerline. Avoids the need for patched fonts. Each Unicode code +#: point is specified in the form `U+`. You +#: can specify multiple code points, separated by commas and ranges +#: separated by hyphens. This option can be specified multiple times. +#: The syntax is:: + +#: symbol_map codepoints Font Family Name + +# narrow_symbols + +#: E.g. narrow_symbols U+E0A0-U+E0A3,U+E0C0-U+E0C7 1 + +#: Usually, for Private Use Unicode characters and some symbol/dingbat +#: characters, if the character is followed by one or more spaces, +#: kitty will use those extra cells to render the character larger, if +#: the character in the font has a wide aspect ratio. Using this +#: option you can force kitty to restrict the specified code points to +#: render in the specified number of cells (defaulting to one cell). +#: This option can be specified multiple times. The syntax is:: + +#: narrow_symbols codepoints [optionally the number of cells] + +# disable_ligatures never + +#: Choose how you want to handle multi-character ligatures. The +#: default is to always render them. You can tell kitty to not render +#: them when the cursor is over them by using cursor to make editing +#: easier, or have kitty never render them at all by using always, if +#: you don't like them. The ligature strategy can be set per-window +#: either using the kitty remote control facility or by defining +#: shortcuts for it in kitty.conf, for example:: + +#: map alt+1 disable_ligatures_in active always +#: map alt+2 disable_ligatures_in all never +#: map alt+3 disable_ligatures_in tab cursor + +#: Note that this refers to programming ligatures, typically +#: implemented using the calt OpenType feature. For disabling general +#: ligatures, use the font_features option. + +# font_features + +#: E.g. font_features none + +#: Choose exactly which OpenType features to enable or disable. Note +#: that for the main fonts, features can be specified when selecting +#: the font using the choose-fonts kitten. This setting is useful for +#: fallback fonts. + +#: Some fonts might have features worthwhile in a terminal. For +#: example, Fira Code includes a discretionary feature, zero, which in +#: that font changes the appearance of the zero (0), to make it more +#: easily distinguishable from Ø. Fira Code also includes other +#: discretionary features known as Stylistic Sets which have the tags +#: ss01 through ss20. + +#: For the exact syntax to use for individual features, see the +#: HarfBuzz documentation . + +#: Note that this code is indexed by PostScript name, and not the font +#: family. This allows you to define very precise feature settings; +#: e.g. you can disable a feature in the italic font but not in the +#: regular font. + +#: On Linux, font features are first read from the FontConfig database +#: and then this option is applied, so they can be configured in a +#: single, central place. + +#: To get the PostScript name for a font, use the `fc-scan file.ttf` +#: command on Linux or the `Font Book tool on macOS +#: `__. + +#: Enable alternate zero and oldstyle numerals:: + +#: font_features FiraCode-Retina +zero +onum + +#: Enable only alternate zero in the bold font:: + +#: font_features FiraCode-Bold +zero + +#: Disable the normal ligatures, but keep the calt feature which (in +#: this font) breaks up monotony:: + +#: font_features TT2020StyleB-Regular -liga +calt + +#: In conjunction with force_ltr, you may want to disable Arabic +#: shaping entirely, and only look at their isolated forms if they +#: show up in a document. You can do this with e.g.:: + +#: font_features UnifontMedium +isol -medi -fina -init + +# modify_font + +#: Modify font characteristics such as the position or thickness of +#: the underline and strikethrough. The modifications can have the +#: suffix px for pixels or % for percentage of original value. No +#: suffix means use pts. For example:: + +#: modify_font underline_position -2 +#: modify_font underline_thickness 150% +#: modify_font strikethrough_position 2px + +#: Additionally, you can modify the size of the cell in which each +#: font glyph is rendered and the baseline at which the glyph is +#: placed in the cell. For example:: + +#: modify_font cell_width 80% +#: modify_font cell_height -2px +#: modify_font baseline 3 + +#: Note that modifying the baseline will automatically adjust the +#: underline and strikethrough positions by the same amount. +#: Increasing the baseline raises glyphs inside the cell and +#: decreasing it lowers them. Decreasing the cell size might cause +#: rendering artifacts, so use with care. + +# box_drawing_scale 0.001, 1, 1.5, 2 + +#: The sizes of the lines used for the box drawing Unicode characters. +#: These values are in pts. They will be scaled by the monitor DPI to +#: arrive at a pixel value. There must be four values corresponding to +#: thin, normal, thick, and very thick lines. + +# undercurl_style thin-sparse + +#: The style with which undercurls are rendered. This option takes the +#: form (thin|thick)-(sparse|dense). Thin and thick control the +#: thickness of the undercurl. Sparse and dense control how often the +#: curl oscillates. With sparse the curl will peak once per character, +#: with dense twice. + +# text_composition_strategy platform + +#: Control how kitty composites text glyphs onto the background color. +#: The default value of platform tries for text rendering as close to +#: "native" for the platform kitty is running on as possible. + +#: A value of legacy uses the old (pre kitty 0.28) strategy for how +#: glyphs are composited. This will make dark text on light +#: backgrounds look thicker and light text on dark backgrounds +#: thinner. It might also make some text appear like the strokes are +#: uneven. + +#: You can fine tune the actual contrast curve used for glyph +#: composition by specifying up to two space-separated numbers for +#: this setting. + +#: The first number is the gamma adjustment, which controls the +#: thickness of dark text on light backgrounds. Increasing the value +#: will make text appear thicker. The default value for this is 1.0 on +#: Linux and 1.7 on macOS. Valid values are 0.01 and above. The result +#: is scaled based on the luminance difference between the background +#: and the foreground. Dark text on light backgrounds receives the +#: full impact of the curve while light text on dark backgrounds is +#: affected very little. + +#: The second number is an additional multiplicative contrast. It is +#: percentage ranging from 0 to 100. The default value is 0 on Linux +#: and 30 on macOS. + +#: If you wish to achieve similar looking thickness in light and dark +#: themes, a good way to experiment is start by setting the value to +#: 1.0 0 and use a dark theme. Then adjust the second parameter until +#: it looks good. Then switch to a light theme and adjust the first +#: parameter until the perceived thickness matches the dark theme. + +# text_fg_override_threshold 0 + +#: The minimum accepted difference in luminance between the foreground +#: and background color, below which kitty will override the +#: foreground color. It is percentage ranging from 0 to 100. If the +#: difference in luminance of the foreground and background is below +#: this threshold, the foreground color will be set to white if the +#: background is dark or black if the background is light. The default +#: value is 0, which means no overriding is performed. Useful when +#: working with applications that use colors that do not contrast well +#: with your preferred color scheme. + +#: WARNING: Some programs use characters (such as block characters) +#: for graphics display and may expect to be able to set the +#: foreground and background to the same color (or similar colors). +#: If you see unexpected stripes, dots, lines, incorrect color, no +#: color where you expect color, or any kind of graphic display +#: problem try setting text_fg_override_threshold to 0 to see if this +#: is the cause of the problem. + +}}} + +#: Text cursor customization {{{ + +# cursor #cccccc + +#: Default text cursor color. If set to the special value none the +#: cursor will be rendered with a "reverse video" effect. Its color +#: will be the color of the text in the cell it is over and the text +#: will be rendered with the background color of the cell. Note that +#: if the program running in the terminal sets a cursor color, this +#: takes precedence. Also, the cursor colors are modified if the cell +#: background and foreground colors have very low contrast. Note that +#: some themes set this value, so if you want to override it, place +#: your value after the lines where the theme file is included. + +# cursor_text_color #111111 + +#: The color of text under the cursor. If you want it rendered with +#: the background color of the cell underneath instead, use the +#: special keyword: `background`. Note that if cursor is set to none +#: then this option is ignored. Note that some themes set this value, +#: so if you want to override it, place your value after the lines +#: where the theme file is included. + +# cursor_shape block + +#: The cursor shape can be one of block, beam, underline. Note that +#: when reloading the config this will be changed only if the cursor +#: shape has not been set by the program running in the terminal. This +#: sets the default cursor shape, applications running in the terminal +#: can override it. In particular, shell integration +#: in kitty sets +#: the cursor shape to beam at shell prompts. You can avoid this by +#: setting shell_integration to no-cursor. + +# cursor_shape_unfocused hollow + +#: Defines the text cursor shape when the OS window is not focused. +#: The unfocused cursor shape can be one of block, beam, underline, +#: hollow and unchanged (leave the cursor shape as it is). + +# cursor_beam_thickness 1.5 + +#: The thickness of the beam cursor (in pts). + +# cursor_underline_thickness 2.0 + +#: The thickness of the underline cursor (in pts). + +# cursor_blink_interval -1 + +#: The interval to blink the cursor (in seconds). Set to zero to +#: disable blinking. Negative values mean use system default. Note +#: that the minimum interval will be limited to repaint_delay. You can +#: also animate the cursor blink by specifying an easing function. For +#: example, setting this to option to 0.5 ease-in-out will cause the +#: cursor blink to be animated over a second, in the first half of the +#: second it will go from opaque to transparent and then back again +#: over the next half. You can specify different easing functions for +#: the two halves, for example: -1 linear ease-out. kitty supports all +#: the CSS easing functions . Note that turning on animations +#: uses extra power as it means the screen is redrawn multiple times +#: per blink interval. See also, cursor_stop_blinking_after. + +# cursor_stop_blinking_after 15.0 + +#: Stop blinking cursor after the specified number of seconds of +#: keyboard inactivity. Set to zero to never stop blinking. + +# cursor_trail 0 + +#: Set this to a value larger than zero to enable a "cursor trail" +#: animation. This is an animation that shows a "trail" following the +#: movement of the text cursor. It makes it easy to follow large +#: cursor jumps and makes for a cool visual effect of the cursor +#: zooming around the screen. The actual value of this option controls +#: when the animation is trigerred. It is a number of milliseconds. +#: The trail animation only follows cursors that have stayed in their +#: position for longer than the specified number of milliseconds. This +#: prevents trails from appearing for cursors that rapidly change +#: their positions during UI updates in complex applications. See +#: cursor_trail_decay to control the animation speed and +#: cursor_trail_start_threshold to control when a cursor trail is +#: started. + +# cursor_trail_decay 0.1 0.4 + +#: Controls the decay times for the cursor trail effect when the +#: cursor_trail is enabled. This option accepts two positive float +#: values specifying the fastest and slowest decay times in seconds. +#: The first value corresponds to the fastest decay time (minimum), +#: and the second value corresponds to the slowest decay time +#: (maximum). The second value must be equal to or greater than the +#: first value. Smaller values result in a faster decay of the cursor +#: trail. Adjust these values to control how quickly the cursor trail +#: fades away. + +# cursor_trail_start_threshold 2 + +#: Set the distance threshold for starting the cursor trail. This +#: option accepts a positive integer value that represents the minimum +#: number of cells the cursor must move before the trail is started. +#: When the cursor moves less than this threshold, the trail is +#: skipped, reducing unnecessary cursor trail animation. + +#: }}} + +#: Scrollback {{{ + +# scrollback_lines 2000 + +#: Number of lines of history to keep in memory for scrolling back. +#: Memory is allocated on demand. Negative numbers are (effectively) +#: infinite scrollback. Note that using very large scrollback is not +#: recommended as it can slow down performance of the terminal and +#: also use large amounts of RAM. Instead, consider using +#: scrollback_pager_history_size. Note that on config reload if this +#: is changed it will only affect newly created windows, not existing +#: ones. + +# scrollback_indicator_opacity 1.0 + +#: The opacity of the scrollback indicator which is a small colored +#: rectangle that moves along the right hand side of the window as you +#: scroll, indicating what fraction you have scrolled. The default is +#: one which means fully opaque, aka visible. Set to a value between +#: zero and one to make the indicator less visible. + +# scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER + +#: Program with which to view scrollback in a new window. The +#: scrollback buffer is passed as STDIN to this program. If you change +#: it, make sure the program you use can handle ANSI escape sequences +#: for colors and text formatting. INPUT_LINE_NUMBER in the command +#: line above will be replaced by an integer representing which line +#: should be at the top of the screen. Similarly CURSOR_LINE and +#: CURSOR_COLUMN will be replaced by the current cursor position or +#: set to 0 if there is no cursor, for example, when showing the last +#: command output. + +# scrollback_pager_history_size 0 + +#: Separate scrollback history size (in MB), used only for browsing +#: the scrollback buffer with pager. This separate buffer is not +#: available for interactive scrolling but will be piped to the pager +#: program when viewing scrollback buffer in a separate window. The +#: current implementation stores the data in UTF-8, so approximately +#: 10000 lines per megabyte at 100 chars per line, for pure ASCII, +#: unformatted text. A value of zero or less disables this feature. +#: The maximum allowed size is 4GB. Note that on config reload if this +#: is changed it will only affect newly created windows, not existing +#: ones. + +# scrollback_fill_enlarged_window no + +#: Fill new space with lines from the scrollback buffer after +#: enlarging a window. + +# wheel_scroll_multiplier 5.0 + +#: Multiplier for the number of lines scrolled by the mouse wheel. +#: Note that this is only used for low precision scrolling devices, +#: not for high precision scrolling devices on platforms such as macOS +#: and Wayland. Use negative numbers to change scroll direction. See +#: also wheel_scroll_min_lines. + +# wheel_scroll_min_lines 1 + +#: The minimum number of lines scrolled by the mouse wheel. The scroll +#: multiplier wheel_scroll_multiplier only takes effect after it +#: reaches this number. Note that this is only used for low precision +#: scrolling devices like wheel mice that scroll by very small amounts +#: when using the wheel. With a negative number, the minimum number of +#: lines will always be added. + +# touch_scroll_multiplier 1.0 + +#: Multiplier for the number of lines scrolled by a touchpad. Note +#: that this is only used for high precision scrolling devices on +#: platforms such as macOS and Wayland. Use negative numbers to change +#: scroll direction. + +#: }}} + +Mouse {{{ + +mouse_hide_wait 3.0 + +#: Hide mouse cursor after the specified number of seconds of the +#: mouse not being used. Set to zero to disable mouse cursor hiding. +#: Set to a negative value to hide the mouse cursor immediately when +#: typing text. Disabled by default on macOS as getting it to work +#: robustly with the ever-changing sea of bugs that is Cocoa is too +#: much effort. +# url_color #0087bd +url_style curly + +#: The color and style for highlighting URLs on mouse-over. url_style +#: can be one of: none, straight, double, curly, dotted, dashed. + +# open_url_with default + +#: The program to open clicked URLs. The special value default will +#: first look for any URL handlers defined via the open_actions +#: facility and if non +#: are found, it will use the Operating System's default URL handler +#: (open on macOS and xdg-open on Linux). + +url_prefixes file ftp ftps gemini git gopher http https irc ircs kitty mailto news sftp ssh + +#: The set of URL prefixes to look for when detecting a URL under the +#: mouse cursor. + +detect_urls yes + +#: Detect URLs under the mouse. Detected URLs are highlighted with an +#: underline and the mouse cursor becomes a hand over them. Even if +#: this option is disabled, URLs are still clickable. See also the +#: underline_hyperlinks option to control how hyperlinks (as opposed +#: to plain text URLs) are displayed. + +# url_excluded_characters + +#: Additional characters to be disallowed from URLs, when detecting +#: URLs under the mouse cursor. By default, all characters that are +#: legal in URLs are allowed. Additionally, newlines are allowed (but +#: stripped). This is to accommodate programs such as mutt that add +#: hard line breaks even for continued lines. \n can be added to this +#: option to disable this behavior. Special characters can be +#: specified using backslash escapes, to specify a backslash use a +#: double backslash. + +show_hyperlink_targets yes + +#: When the mouse hovers over a terminal hyperlink, show the actual +#: URL that will be activated when the hyperlink is clicked. + +# underline_hyperlinks hover + +#: Control how hyperlinks are underlined. They can either be +#: underlined on mouse hover, always (i.e. permanently underlined) or +#: never which means that kitty will not apply any underline styling +#: to hyperlinks. Note that the value of always only applies to real +#: (OSC 8) hyperlinks not text that is detected to be a URL on mouse +#: hover. Uses the url_style and url_color settings for the underline +#: style. Note that reloading the config and changing this value +#: to/from always will only affect text subsequently received by +#: kitty. + +# copy_on_select no + +#: Copy to clipboard or a private buffer on select. With this set to +#: clipboard, selecting text with the mouse will cause the text to be +#: copied to clipboard. Useful on platforms such as macOS that do not +#: have the concept of primary selection. You can instead specify a +#: name such as a1 to copy to a private kitty buffer. Map a shortcut +#: with the paste_from_buffer action to paste from this private +#: buffer. For example:: + +#: copy_on_select a1 +#: map shift+cmd+v paste_from_buffer a1 + +#: Note that copying to the clipboard is a security risk, as all +#: programs, including websites open in your browser can read the +#: contents of the system clipboard. + +# paste_actions quote-urls-at-prompt,confirm + +#: A comma separated list of actions to take when pasting text into +#: the terminal. The supported paste actions are: + +#: quote-urls-at-prompt: +#: If the text being pasted is a URL and the cursor is at a shell prompt, +#: automatically quote the URL (needs shell_integration). +#: replace-dangerous-control-codes +#: Replace dangerous control codes from pasted text, without confirmation. +#: replace-newline +#: Replace the newline character from pasted text, without confirmation. +#: confirm: +#: Confirm the paste if the text to be pasted contains any terminal control codes +#: as this can be dangerous, leading to code execution if the shell/program running +#: in the terminal does not properly handle these. +#: confirm-if-large +#: Confirm the paste if it is very large (larger than 16KB) as pasting +#: large amounts of text into shells can be very slow. +#: filter: +#: Run the filter_paste() function from the file paste-actions.py in +#: the kitty config directory on the pasted text. The text returned by the +#: function will be actually pasted. +#: no-op: +#: Has no effect. + +# strip_trailing_spaces never + +#: Remove spaces at the end of lines when copying to clipboard. A +#: value of smart will do it when using normal selections, but not +#: rectangle selections. A value of always will always do it. + +# select_by_word_characters @-./_~?&=%+# + +#: Characters considered part of a word when double clicking. In +#: addition to these characters any character that is marked as an +#: alphanumeric character in the Unicode database will be matched. + +# select_by_word_characters_forward + +#: Characters considered part of a word when extending the selection +#: forward on double clicking. In addition to these characters any +#: character that is marked as an alphanumeric character in the +#: Unicode database will be matched. + +#: If empty (default) select_by_word_characters will be used for both +#: directions. + +# click_interval -1.0 + +#: The interval between successive clicks to detect double/triple +#: clicks (in seconds). Negative numbers will use the system default +#: instead, if available, or fallback to 0.5. + +# focus_follows_mouse no + +#: Set the active window to the window under the mouse when moving the +#: mouse around. On macOS, this will also cause the OS Window under +#: the mouse to be focused automatically when the mouse enters it. + +# pointer_shape_when_grabbed arrow + +#: The shape of the mouse pointer when the program running in the +#: terminal grabs the mouse. + +# default_pointer_shape beam + +#: The default shape of the mouse pointer. + +# pointer_shape_when_dragging beam + +#: The default shape of the mouse pointer when dragging across text. + +#: Mouse actions {{{ + +#: Mouse buttons can be mapped to perform arbitrary actions. The +#: syntax is: + +#: .. code-block:: none + +#: mouse_map button-name event-type modes action + +#: Where button-name is one of left, middle, right, b1 ... b8 with +#: added keyboard modifiers. For example: ctrl+shift+left refers to +#: holding the Ctrl+Shift keys while clicking with the left mouse +#: button. The value b1 ... b8 can be used to refer to up to eight +#: buttons on a mouse. + +#: event-type is one of press, release, doublepress, triplepress, +#: click, doubleclick. modes indicates whether the action is performed +#: when the mouse is grabbed by the program running in the terminal, +#: or not. The values are grabbed or ungrabbed or a comma separated +#: combination of them. grabbed refers to when the program running in +#: the terminal has requested mouse events. Note that the click and +#: double click events have a delay of click_interval to disambiguate +#: from double and triple presses. + +#: You can run kitty with the kitty --debug-input command line option +#: to see mouse events. See the builtin actions below to get a sense +#: of what is possible. + +#: If you want to unmap a button, map it to nothing. For example, to +#: disable opening of URLs with a plain click:: + +#: mouse_map left click ungrabbed + +#: See all the mappable actions including mouse actions here +#: . + +#: .. note:: +#: Once a selection is started, releasing the button that started it will +#: automatically end it and no release event will be dispatched. + +# clear_all_mouse_actions no + +#: Remove all mouse action definitions up to this point. Useful, for +#: instance, to remove the default mouse actions. + +#: Click the link under the mouse or move the cursor + +# mouse_map left click ungrabbed mouse_handle_click selection link prompt + +#:: First check for a selection and if one exists do nothing. Then +#:: check for a link under the mouse cursor and if one exists, click +#:: it. Finally check if the click happened at the current shell +#:: prompt and if so, move the cursor to the click location. Note +#:: that this requires shell integration +#:: to work. + +#: Click the link under the mouse or move the cursor even when grabbed + +# mouse_map shift+left click grabbed,ungrabbed mouse_handle_click selection link prompt + +#:: Same as above, except that the action is performed even when the +#:: mouse is grabbed by the program running in the terminal. + +#: Click the link under the mouse cursor + +# mouse_map ctrl+shift+left release grabbed,ungrabbed mouse_handle_click link + +#:: Variant with Ctrl+Shift is present because the simple click based +#:: version has an unavoidable delay of click_interval, to +#:: disambiguate clicks from double clicks. + +#: Discard press event for link click + +# mouse_map ctrl+shift+left press grabbed discard_event + +#:: Prevent this press event from being sent to the program that has +#:: grabbed the mouse, as the corresponding release event is used to +#:: open a URL. + +#: Paste from the primary selection + +# mouse_map middle release ungrabbed paste_from_selection + +#: Start selecting text + +# mouse_map left press ungrabbed mouse_selection normal + +#: Start selecting text in a rectangle + +# mouse_map ctrl+alt+left press ungrabbed mouse_selection rectangle + +#: Select a word + +# mouse_map left doublepress ungrabbed mouse_selection word + +#: Select a line + +# mouse_map left triplepress ungrabbed mouse_selection line + +#: Select line from point + +# mouse_map ctrl+alt+left triplepress ungrabbed mouse_selection line_from_point + +#:: Select from the clicked point to the end of the line. If you +#:: would like to select the word at the point and then extend to the +#:: rest of the line, change `line_from_point` to +#:: `word_and_line_from_point`. + +#: Extend the current selection + +# mouse_map right press ungrabbed mouse_selection extend + +#:: If you want only the end of the selection to be moved instead of +#:: the nearest boundary, use move-end instead of extend. + +#: Paste from the primary selection even when grabbed + +# mouse_map shift+middle release ungrabbed,grabbed paste_selection +# mouse_map shift+middle press grabbed discard_event + +#: Start selecting text even when grabbed + +# mouse_map shift+left press ungrabbed,grabbed mouse_selection normal + +#: Start selecting text in a rectangle even when grabbed + +# mouse_map ctrl+shift+alt+left press ungrabbed,grabbed mouse_selection rectangle + +#: Select a word even when grabbed + +# mouse_map shift+left doublepress ungrabbed,grabbed mouse_selection word + +#: Select a line even when grabbed + +# mouse_map shift+left triplepress ungrabbed,grabbed mouse_selection line + +#: Select line from point even when grabbed + +# mouse_map ctrl+shift+alt+left triplepress ungrabbed,grabbed mouse_selection line_from_point + +#:: Select from the clicked point to the end of the line even when +#:: grabbed. If you would like to select the word at the point and +#:: then extend to the rest of the line, change `line_from_point` to +#:: `word_and_line_from_point`. + +#: Extend the current selection even when grabbed + +# mouse_map shift+right press ungrabbed,grabbed mouse_selection extend + +#: Show clicked command output in pager + +# mouse_map ctrl+shift+right press ungrabbed mouse_show_command_output + +#:: Requires shell integration +#:: to work. + +#: }}} +}}} + +#: Performance tuning {{{ + +# repaint_delay 10 + +#: Delay between screen updates (in milliseconds). Decreasing it, +#: increases frames-per-second (FPS) at the cost of more CPU usage. +#: The default value yields ~100 FPS which is more than sufficient for +#: most uses. Note that to actually achieve 100 FPS, you have to +#: either set sync_to_monitor to no or use a monitor with a high +#: refresh rate. Also, to minimize latency when there is pending input +#: to be processed, this option is ignored. + +# input_delay 3 + +#: Delay before input from the program running in the terminal is +#: processed (in milliseconds). Note that decreasing it will increase +#: responsiveness, but also increase CPU usage and might cause flicker +#: in full screen programs that redraw the entire screen on each loop, +#: because kitty is so fast that partial screen updates will be drawn. +#: This setting is ignored when the input buffer is almost full. + +# sync_to_monitor yes + +#: Sync screen updates to the refresh rate of the monitor. This +#: prevents screen tearing +#: when scrolling. +#: However, it limits the rendering speed to the refresh rate of your +#: monitor. With a very high speed mouse/high keyboard repeat rate, +#: you may notice some slight input latency. If so, set this to no. + +#: }}} + +#: Terminal bell {{{ + +# enable_audio_bell yes + +#: The audio bell. Useful to disable it in environments that require +#: silence. + +# visual_bell_duration 0.0 + +#: The visual bell duration (in seconds). Flash the screen when a bell +#: occurs for the specified number of seconds. Set to zero to disable. +#: The flash is animated, fading in and out over the specified +#: duration. The easing function used for the fading can be +#: controlled. For example, 2.0 linear will casuse the flash to fade +#: in and out linearly. The default if unspecified is to use ease-in- +#: out which fades slowly at the start, middle and end. You can +#: specify different easing functions for the fade-in and fade-out +#: parts, like this: 2.0 ease-in linear. kitty supports all the CSS +#: easing functions . + +# visual_bell_color none + +#: The color used by visual bell. Set to none will fall back to +#: selection background color. If you feel that the visual bell is too +#: bright, you can set it to a darker color. + +# window_alert_on_bell yes + +#: Request window attention on bell. Makes the dock icon bounce on +#: macOS or the taskbar flash on Linux. + +# bell_on_tab "🔔 " + +#: Some text or a Unicode symbol to show on the tab if a window in the +#: tab that does not have focus has a bell. If you want to use leading +#: or trailing spaces, surround the text with quotes. See +#: tab_title_template for how this is rendered. + +#: For backwards compatibility, values of yes, y and true are +#: converted to the default bell symbol and no, n, false and none are +#: converted to the empty string. + +# command_on_bell none + +#: Program to run when a bell occurs. The environment variable +#: KITTY_CHILD_CMDLINE can be used to get the program running in the +#: window in which the bell occurred. + +# bell_path none + +#: Path to a sound file to play as the bell sound. If set to none, the +#: system default bell sound is used. Must be in a format supported by +#: the operating systems sound API, such as WAV or OGA on Linux +#: (libcanberra) or AIFF, MP3 or WAV on macOS (NSSound). + +# linux_bell_theme __custom + +#: The XDG Sound Theme kitty will use to play the bell sound. Defaults +#: to the custom theme name specified in the XDG Sound theme +#: specification , falling back to the default +#: freedesktop theme if it does not exist. To change your sound theme +#: desktop wide, create +#: :file:~/.local/share/sounds/__custom/index.theme` with the +#: contents: + +#: [Sound Theme] + +#: Inherits=name-of-the-sound-theme-you-want-to-use + +#: Replace name-of-the-sound-theme-you-want-to-use with the actual +#: theme name. Now all compliant applications should use sounds from +#: this theme. + +#: }}} + +#: Window layout {{{ + +# remember_window_size yes +# initial_window_width 640 +# initial_window_height 400 + +#: If enabled, the OS Window size will be remembered so that new +#: instances of kitty will have the same size as the previous +#: instance. If disabled, the OS Window will initially have size +#: configured by initial_window_width/height, in pixels. You can use a +#: suffix of "c" on the width/height values to have them interpreted +#: as number of cells instead of pixels. + +# enabled_layouts * + +#: The enabled window layouts. A comma separated list of layout names. +#: The special value all means all layouts. The first listed layout +#: will be used as the startup layout. Default configuration is all +#: layouts in alphabetical order. For a list of available layouts, see +#: the layouts . + +# window_resize_step_cells 2 +# window_resize_step_lines 2 + +#: The step size (in units of cell width/cell height) to use when +#: resizing kitty windows in a layout with the shortcut +#: start_resizing_window. The cells value is used for horizontal +#: resizing, and the lines value is used for vertical resizing. + +# window_border_width 0.5pt + +#: The width of window borders. Can be either in pixels (px) or pts +#: (pt). Values in pts will be rounded to the nearest number of pixels +#: based on screen resolution. If not specified, the unit is assumed +#: to be pts. Note that borders are displayed only when more than one +#: window is visible. They are meant to separate multiple windows. + +# draw_minimal_borders yes + +#: Draw only the minimum borders needed. This means that only the +#: borders that separate the window from a neighbor are drawn. Note +#: that setting a non-zero window_margin_width overrides this and +#: causes all borders to be drawn. + +# window_margin_width 0 + +#: The window margin (in pts) (blank area outside the border). A +#: single value sets all four sides. Two values set the vertical and +#: horizontal sides. Three values set top, horizontal and bottom. Four +#: values set top, right, bottom and left. + +# single_window_margin_width -1 + +#: The window margin to use when only a single window is visible (in +#: pts). Negative values will cause the value of window_margin_width +#: to be used instead. A single value sets all four sides. Two values +#: set the vertical and horizontal sides. Three values set top, +#: horizontal and bottom. Four values set top, right, bottom and left. + +# window_padding_width 0 + +#: The window padding (in pts) (blank area between the text and the +#: window border). A single value sets all four sides. Two values set +#: the vertical and horizontal sides. Three values set top, horizontal +#: and bottom. Four values set top, right, bottom and left. + +# single_window_padding_width -1 + +#: The window padding to use when only a single window is visible (in +#: pts). Negative values will cause the value of window_padding_width +#: to be used instead. A single value sets all four sides. Two values +#: set the vertical and horizontal sides. Three values set top, +#: horizontal and bottom. Four values set top, right, bottom and left. + +# placement_strategy center + +#: When the window size is not an exact multiple of the cell size, the +#: cell area of the terminal window will have some extra padding on +#: the sides. You can control how that padding is distributed with +#: this option. Using a value of center means the cell area will be +#: placed centrally. A value of top-left means the padding will be +#: only at the bottom and right edges. The value can be one of: top- +#: left, top, top-right, left, center, right, bottom-left, bottom, +#: bottom-right. + +# active_border_color #00ff00 + +#: The color for the border of the active window. Set this to none to +#: not draw borders around the active window. + +# inactive_border_color #cccccc + +#: The color for the border of inactive windows. + +# bell_border_color #ff5a00 + +#: The color for the border of inactive windows in which a bell has +#: occurred. + +# inactive_text_alpha 1.0 + +#: Fade the text in inactive windows by the specified amount (a number +#: between zero and one, with zero being fully faded). + +# hide_window_decorations no + +#: Hide the window decorations (title-bar and window borders) with +#: yes. On macOS, titlebar-only and titlebar-and-corners can be used +#: to only hide the titlebar and the rounded corners. Whether this +#: works and exactly what effect it has depends on the window +#: manager/operating system. Note that the effects of changing this +#: option when reloading config are undefined. When using titlebar- +#: only, it is useful to also set window_margin_width and +#: placement_strategy to prevent the rounded corners from clipping +#: text. Or use titlebar-and-corners. + +# window_logo_path none + +#: Path to a logo image. Must be in PNG/JPEG/WEBP/GIF/TIFF/BMP format. +#: Relative paths are interpreted relative to the kitty config +#: directory. The logo is displayed in a corner of every kitty window. +#: The position is controlled by window_logo_position. Individual +#: windows can be configured to have different logos either using the +#: launch action or the remote control +#: facility. + +# window_logo_position bottom-right + +#: Where to position the window logo in the window. The value can be +#: one of: top-left, top, top-right, left, center, right, bottom-left, +#: bottom, bottom-right. + +# window_logo_alpha 0.5 + +#: The amount the logo should be faded into the background. With zero +#: being fully faded and one being fully opaque. + +# window_logo_scale 0 + +#: The percentage (0-100] of the window size to which the logo should +#: scale. Using a single number means the logo is scaled to that +#: percentage of the shortest window dimension, while preseving aspect +#: ratio of the logo image. + +#: Using two numbers means the width and height of the logo are scaled +#: to the respective percentage of the window's width and height. + +#: Using zero as the percentage disables scaling in that dimension. A +#: single zero (the default) disables all scaling of the window logo. + +# resize_debounce_time 0.1 0.5 + +#: The time to wait (in seconds) before asking the program running in +#: kitty to resize and redraw the screen during a live resize of the +#: OS window, when no new resize events have been received, i.e. when +#: resizing is either paused or finished. On platforms such as macOS, +#: where the operating system sends events corresponding to the start +#: and end of a live resize, the second number is used for redraw- +#: after-pause since kitty can distinguish between a pause and end of +#: resizing. On such systems the first number is ignored and redraw is +#: immediate after end of resize. On other systems only the first +#: number is used so that kitty is "ready" quickly after the end of +#: resizing, while not also continuously redrawing, to save energy. + +# resize_in_steps no + +#: Resize the OS window in steps as large as the cells, instead of +#: with the usual pixel accuracy. Combined with initial_window_width +#: and initial_window_height in number of cells, this option can be +#: used to keep the margins as small as possible when resizing the OS +#: window. Note that this does not currently work on Wayland. + +# visual_window_select_characters 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ + +#: The list of characters for visual window selection. For example, +#: for selecting a window to focus on with focus_visible_window. The +#: value should be a series of unique numbers or alphabets, case +#: insensitive, from the set 0-9A-Z\-=[];',./\\`. Specify your +#: preference as a string of characters. + +# confirm_os_window_close -1 + +#: Ask for confirmation when closing an OS window or a tab with at +#: least this number of kitty windows in it by window manager (e.g. +#: clicking the window close button or pressing the operating system +#: shortcut to close windows) or by the close_tab action. A value of +#: zero disables confirmation. This confirmation also applies to +#: requests to quit the entire application (all OS windows, via the +#: quit action). Negative values are converted to positive ones, +#: however, with shell_integration enabled, using negative values +#: means windows sitting at a shell prompt are not counted, only +#: windows where some command is currently running. Note that if you +#: want confirmation when closing individual windows, you can map the +#: close_window_with_confirmation action. + +#: }}} + +#: Tab bar {{{ + +# tab_bar_edge bottom + +#: The edge to show the tab bar on, top or bottom. + +# tab_bar_margin_width 0.0 + +#: The margin to the left and right of the tab bar (in pts). + +# tab_bar_margin_height 0.0 0.0 + +#: The margin above and below the tab bar (in pts). The first number +#: is the margin between the edge of the OS Window and the tab bar. +#: The second number is the margin between the tab bar and the +#: contents of the current tab. + +# tab_bar_style fade + +#: The tab bar style, can be one of: + +#: fade +#: Each tab's edges fade into the background color. (See also tab_fade) +#: slant +#: Tabs look like the tabs in a physical file. +#: separator +#: Tabs are separated by a configurable separator. (See also +#: tab_separator) +#: powerline +#: Tabs are shown as a continuous line with "fancy" separators. +#: (See also tab_powerline_style) +#: custom +#: A user-supplied Python function called draw_tab is loaded from the file +#: tab_bar.py in the kitty config directory. For examples of how to +#: write such a function, see the functions named draw_tab_with_* in +#: kitty's source code: kitty/tab_bar.py. See also +#: this discussion +#: for examples from kitty users. +#: hidden +#: The tab bar is hidden. If you use this, you might want to create +#: a mapping for the select_tab action which presents you with a list of +#: tabs and allows for easy switching to a tab. + +# tab_bar_align left + +#: The horizontal alignment of the tab bar, can be one of: left, +#: center, right. + +# tab_bar_min_tabs 2 + +#: The minimum number of tabs that must exist before the tab bar is +#: shown. + +# tab_switch_strategy previous + +#: The algorithm to use when switching to a tab when the current tab +#: is closed. The default of previous will switch to the last used +#: tab. A value of left will switch to the tab to the left of the +#: closed tab. A value of right will switch to the tab to the right of +#: the closed tab. A value of last will switch to the right-most tab. + +# tab_fade 0.25 0.5 0.75 1 + +#: Control how each tab fades into the background when using fade for +#: the tab_bar_style. Each number is an alpha (between zero and one) +#: that controls how much the corresponding cell fades into the +#: background, with zero being no fade and one being full fade. You +#: can change the number of cells used by adding/removing entries to +#: this list. + +# tab_separator " ┇" + +#: The separator between tabs in the tab bar when using separator as +#: the tab_bar_style. + +# tab_powerline_style angled + +#: The powerline separator style between tabs in the tab bar when +#: using powerline as the tab_bar_style, can be one of: angled, +#: slanted, round. + +# tab_activity_symbol none + +#: Some text or a Unicode symbol to show on the tab if a window in the +#: tab that does not have focus has some activity. If you want to use +#: leading or trailing spaces, surround the text with quotes. See +#: tab_title_template for how this is rendered. + +# tab_title_max_length 0 + +#: The maximum number of cells that can be used to render the text in +#: a tab. A value of zero means that no limit is applied. + +# tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title}" + +#: A template to render the tab title. The default just renders the +#: title with optional symbols for bell and activity. If you wish to +#: include the tab-index as well, use something like: {index}:{title}. +#: Useful if you have shortcuts mapped for goto_tab N. If you prefer +#: to see the index as a superscript, use {sup.index}. All data +#: available is: + +#: title +#: The current tab title. +#: index +#: The tab index usable with goto_tab N goto_tab shortcuts. +#: layout_name +#: The current layout name. +#: num_windows +#: The number of windows in the tab. +#: num_window_groups +#: The number of window groups (a window group is a window and all of its overlay windows) in the tab. +#: tab.active_wd +#: The working directory of the currently active window in the tab +#: (expensive, requires syscall). Use active_oldest_wd to get +#: the directory of the oldest foreground process rather than the newest. +#: tab.active_exe +#: The name of the executable running in the foreground of the currently +#: active window in the tab (expensive, requires syscall). Use +#: active_oldest_exe for the oldest foreground process. +#: max_title_length +#: The maximum title length available. +#: keyboard_mode +#: The name of the current keyboard mode or the empty string if no keyboard mode is active. + +#: Note that formatting is done by Python's string formatting +#: machinery, so you can use, for instance, {layout_name[:2].upper()} +#: to show only the first two letters of the layout name, upper-cased. +#: If you want to style the text, you can use styling directives, for +#: example: +#: `{fmt.fg.red}red{fmt.fg.tab}normal{fmt.bg._00FF00}greenbg{fmt.bg.tab}`. +#: Similarly, for bold and italic: +#: `{fmt.bold}bold{fmt.nobold}normal{fmt.italic}italic{fmt.noitalic}`. +#: The 256 eight terminal colors can be used as `fmt.fg.color0` +#: through `fmt.fg.color255`. Note that for backward compatibility, if +#: {bell_symbol} or {activity_symbol} are not present in the template, +#: they are prepended to it. + +# active_tab_title_template none + +#: Template to use for active tabs. If not specified falls back to +#: tab_title_template. + +# active_tab_foreground #000 +# active_tab_background #eee +# active_tab_font_style bold-italic +# inactive_tab_foreground #444 +# inactive_tab_background #999 +# inactive_tab_font_style normal + +#: Tab bar colors and styles. + +# tab_bar_background none + +#: Background color for the tab bar. Defaults to using the terminal +#: background color. + +# tab_bar_margin_color none + +#: Color for the tab bar margin area. Defaults to using the terminal +#: background color for margins above and below the tab bar. For side +#: margins the default color is chosen to match the background color +#: of the neighboring tab. + +#: }}} + +#: Color scheme {{{ + +# foreground #dddddd +# background #000000 + +#: The foreground and background colors. + +# background_opacity 1.0 + +#: The opacity of the background. A number between zero and one, where +#: one is opaque and zero is fully transparent. This will only work if +#: supported by the OS (for instance, when using a compositor under +#: X11). Note that it only sets the background color's opacity in +#: cells that have the same background color as the default terminal +#: background, so that things like the status bar in vim, powerline +#: prompts, etc. still look good. But it means that if you use a color +#: theme with a background color in your editor, it will not be +#: rendered as transparent. Instead you should change the default +#: background color in your kitty config and not use a background +#: color in the editor color scheme. Or use the escape codes to set +#: the terminals default colors in a shell script to launch your +#: editor. See also transparent_background_colors. Be aware that using +#: a value less than 1.0 is a (possibly significant) performance hit. +#: When using a low value for this setting, it is desirable that you +#: set the background color to a color the matches the general color +#: of the desktop background, for best text rendering. If you want to +#: dynamically change transparency of windows, set +#: dynamic_background_opacity to yes (this is off by default as it has +#: a performance cost). Changing this option when reloading the config +#: will only work if dynamic_background_opacity was enabled in the +#: original config. + +# background_blur 0 + +#: Set to a positive value to enable background blur (blurring of the +#: visuals behind a transparent window) on platforms that support it. +#: Only takes effect when background_opacity is less than one. On +#: macOS, this will also control the blur radius (amount of blurring). +#: Setting it to too high a value will cause severe performance issues +#: and/or rendering artifacts. Usually, values up to 64 work well. +#: Note that this might cause performance issues, depending on how the +#: platform implements it, so use with care. Currently supported on +#: macOS and KDE. + +# background_image none + +#: Path to a background image. Must be in PNG/JPEG/WEBP/TIFF/GIF/BMP +#: format. + +# background_image_layout tiled + +#: Whether to tile, scale or clamp the background image. The value can +#: be one of tiled, mirror-tiled, scaled, clamped, centered or +#: cscaled. The scaled and cscaled values scale the image to the +#: window size, with cscaled preserving the image aspect ratio. + +# background_image_linear no + +#: When background image is scaled, whether linear interpolation +#: should be used. + +# transparent_background_colors + +#: A space separated list of upto 7 colors, with opacity. When the +#: background color of a cell matches one of these colors, it is +#: rendered semi-transparent using the specified opacity. + +#: Useful in more complex UIs like editors where you could want more +#: than a single background color to be rendered as transparent, for +#: instance, for a cursor highlight line background or a highlighted +#: block. Terminal applications can set this color using The kitty +#: color control escape code. + +#: The syntax for specifiying colors is: color@opacity, where the +#: @opacity part is optional. When unspecified, the value of +#: background_opacity is used. For example:: + +#: transparent_background_colors red@0.5 #00ff00@0.3 + +# dynamic_background_opacity no + +#: Allow changing of the background_opacity dynamically, using either +#: keyboard shortcuts (increase_background_opacity and +#: decrease_background_opacity) or the remote control facility. +#: Changing this option by reloading the config is not supported. + +# background_tint 0.0 + +#: How much to tint the background image by the background color. This +#: option makes it easier to read the text. Tinting is done using the +#: current background color for each window. This option applies only +#: if background_opacity is set and transparent windows are supported +#: or background_image is set. + +# background_tint_gaps 1.0 + +#: How much to tint the background image at the window gaps by the +#: background color, after applying background_tint. Since this is +#: multiplicative with background_tint, it can be used to lighten the +#: tint over the window gaps for a *separated* look. + +# dim_opacity 0.4 + +#: How much to dim text that has the DIM/FAINT attribute set. One +#: means no dimming and zero means fully dimmed (i.e. invisible). + +# selection_foreground #000000 +# selection_background #fffacd + +#: The foreground and background colors for text selected with the +#: mouse. Setting both of these to none will cause a "reverse video" +#: effect for selections, where the selection will be the cell text +#: color and the text will become the cell background color. Setting +#: only selection_foreground to none will cause the foreground color +#: to be used unchanged. Note that these colors can be overridden by +#: the program running in the terminal. + +#: The color table {{{ + +#: The 256 terminal colors. There are 8 basic colors, each color has a +#: dull and bright version, for the first 16 colors. You can set the +#: remaining 240 colors as color16 to color255. + +# color0 #000000 +# color8 #767676 + +#: black + +# color1 #cc0403 +# color9 #f2201f + +#: red + +# color2 #19cb00 +# color10 #23fd00 + +#: green + +# color3 #cecb00 +# color11 #fffd00 + +#: yellow + +# color4 #0d73cc +# color12 #1a8fff + +#: blue + +# color5 #cb1ed1 +# color13 #fd28ff + +#: magenta + +# color6 #0dcdcd +# color14 #14ffff + +#: cyan + +# color7 #dddddd +# color15 #ffffff + +#: white + +# mark1_foreground black + +#: Color for marks of type 1 + +# mark1_background #98d3cb + +#: Color for marks of type 1 (light steel blue) + +# mark2_foreground black + +#: Color for marks of type 2 + +# mark2_background #f2dcd3 + +#: Color for marks of type 1 (beige) + +# mark3_foreground black + +#: Color for marks of type 3 + +# mark3_background #f274bc + +#: Color for marks of type 3 (violet) + +#: }}} + +#: }}} + +#: Advanced {{{ + +# shell . + +#: The shell program to execute. The default value of . means to use +#: the value of of the SHELL environment variable or if unset, +#: whatever shell is set as the default shell for the current user. +#: Note that on macOS if you change this, you might need to add +#: --login and --interactive to ensure that the shell starts in +#: interactive mode and reads its startup rc files. Environment +#: variables are expanded in this setting. + +# editor . + +#: The terminal based text editor (such as vim or nano) to use when +#: editing the kitty config file or similar tasks. + +#: The default value of . means to use the environment variables +#: VISUAL and EDITOR in that order. If these variables aren't set, +#: kitty will run your shell ($SHELL -l -i -c env) to see if your +#: shell startup rc files set VISUAL or EDITOR. If that doesn't work, +#: kitty will cycle through various known editors (vim, emacs, etc.) +#: and take the first one that exists on your system. + +# close_on_child_death no + +#: Close the window when the child process (usually the shell) exits. +#: With the default value no, the terminal will remain open when the +#: child exits as long as there are still other processes outputting +#: to the terminal (for example disowned or backgrounded processes). +#: When enabled with yes, the window will close as soon as the child +#: process exits. Note that setting it to yes means that any +#: background processes still using the terminal can fail silently +#: because their stdout/stderr/stdin no longer work. + +# remote_control_password + +#: Allow other programs to control kitty using passwords. This option +#: can be specified multiple times to add multiple passwords. If no +#: passwords are present kitty will ask the user for permission if a +#: program tries to use remote control with a password. A password can +#: also *optionally* be associated with a set of allowed remote +#: control actions. For example:: + +#: remote_control_password "my passphrase" get-colors set-colors focus-window focus-tab + +#: Only the specified actions will be allowed when using this +#: password. Glob patterns can be used too, for example:: + +#: remote_control_password "my passphrase" set-tab-* resize-* + +#: To get a list of available actions, run:: + +#: kitten @ --help + +#: A set of actions to be allowed when no password is sent can be +#: specified by using an empty password. For example:: + +#: remote_control_password "" *-colors + +#: Finally, the path to a python module can be specified that provides +#: a function is_cmd_allowed that is used to check every remote +#: control command. For example:: + +#: remote_control_password "my passphrase" my_rc_command_checker.py + +#: Relative paths are resolved from the kitty configuration directory. +#: See rc_custom_auth for details. + +# allow_remote_control no + +#: Allow other programs to control kitty. If you turn this on, other +#: programs can control all aspects of kitty, including sending text +#: to kitty windows, opening new windows, closing windows, reading the +#: content of windows, etc. Note that this even works over SSH +#: connections. The default setting of no prevents any form of remote +#: control. The meaning of the various values are: + +#: password +#: Remote control requests received over both the TTY device and the socket +#: are confirmed based on passwords, see remote_control_password. + +#: socket-only +#: Remote control requests received over a socket are accepted +#: unconditionally. Requests received over the TTY are denied. +#: See listen_on. + +#: socket +#: Remote control requests received over a socket are accepted +#: unconditionally. Requests received over the TTY are confirmed based on +#: password. + +#: no +#: Remote control is completely disabled. + +#: yes +#: Remote control requests are always accepted. + +# listen_on none + +#: Listen to the specified socket for remote control connections. Note +#: that this will apply to all kitty instances. It can be overridden +#: by the kitty --listen-on command line option. For UNIX sockets, +#: such as unix:${TEMP}/mykitty or unix:@mykitty (on Linux). +#: Environment variables are expanded and relative paths are resolved +#: with respect to the temporary directory. If {kitty_pid} is present, +#: then it is replaced by the PID of the kitty process, otherwise the +#: PID of the kitty process is appended to the value, with a hyphen. +#: For TCP sockets such as tcp:localhost:0 a random port is always +#: used even if a non-zero port number is specified. See the help for +#: kitty --listen-on for more details. Note that this will be ignored +#: unless allow_remote_control is set to either: yes, socket or +#: socket-only. Changing this option by reloading the config is not +#: supported. + +# env + +#: Specify the environment variables to be set in all child processes. +#: Using the name with an equal sign (e.g. env VAR=) will set it to +#: the empty string. Specifying only the name (e.g. env VAR) will +#: remove the variable from the child process' environment. Note that +#: environment variables are expanded recursively, for example:: + +#: env VAR1=a +#: env VAR2=${HOME}/${VAR1}/b + +#: The value of VAR2 will be /a/b. + +# filter_notification + +#: Specify rules to filter out notifications sent by applications +#: running in kitty. Can be specified multiple times to create +#: multiple filter rules. A rule specification is of the form +#: field:regexp. A filter rule can match on any of the fields: title, +#: body, app, type. The special value of all filters out all +#: notifications. Rules can be combined using Boolean operators. Some +#: examples:: + +#: filter_notification title:hello or body:"abc.*def" +#: # filter out notification from vim except for ones about updates, (?i) +#: # makes matching case insesitive. +#: filter_notification app:"[ng]?vim" and not body:"(?i)update" +#: # filter out all notifications +#: filter_notification all + +#: The field app is the name of the application sending the +#: notification and type is the type of the notification. Not all +#: applications will send these fields, so you can also match on the +#: title and body of the notification text. More sophisticated +#: programmatic filtering and custom actions on notifications can be +#: done by creating a notifications.py file in the kitty config +#: directory (~/.config/kitty). An annotated sample is available +#: . + +# watcher + +#: Path to python file which will be loaded for watchers +#: . Can be +#: specified more than once to load multiple watchers. The watchers +#: will be added to every kitty window. Relative paths are resolved +#: relative to the kitty config directory. Note that reloading the +#: config will only affect windows created after the reload. + +# exe_search_path + +#: Control where kitty finds the programs to run. The default search +#: order is: First search the system wide PATH, then ~/.local/bin and +#: ~/bin. If still not found, the PATH defined in the login shell +#: after sourcing all its startup files is tried. Finally, if present, +#: the PATH specified by the env option is tried. + +#: This option allows you to prepend, append, or remove paths from +#: this search order. It can be specified multiple times for multiple +#: paths. A simple path will be prepended to the search order. A path +#: that starts with the + sign will be append to the search order, +#: after ~/bin above. A path that starts with the - sign will be +#: removed from the entire search order. For example:: + +#: exe_search_path /some/prepended/path +#: exe_search_path +/some/appended/path +#: exe_search_path -/some/excluded/path + +# update_check_interval 24 + +#: The interval to periodically check if an update to kitty is +#: available (in hours). If an update is found, a system notification +#: is displayed informing you of the available update. The default is +#: to check every 24 hours, set to zero to disable. Update checking is +#: only done by the official binary builds. Distro packages or source +#: builds do not do update checking. Changing this option by reloading +#: the config is not supported. + +# startup_session none + +#: Path to a session file to use for all kitty instances. Can be +#: overridden by using the kitty --session =none command line option +#: for individual instances. See sessions +#: in the kitty +#: documentation for details. Note that relative paths are interpreted +#: with respect to the kitty config directory. Environment variables +#: in the path are expanded. Changing this option by reloading the +#: config is not supported. Note that if kitty is invoked with command +#: line arguments specifying a command to run, this option is ignored. + +# clipboard_control write-clipboard write-primary read-clipboard-ask read-primary-ask + +#: Allow programs running in kitty to read and write from the +#: clipboard. You can control exactly which actions are allowed. The +#: possible actions are: write-clipboard, read-clipboard, write- +#: primary, read-primary, read-clipboard-ask, read-primary-ask. The +#: default is to allow writing to the clipboard and primary selection +#: and to ask for permission when a program tries to read from the +#: clipboard. Note that disabling the read confirmation is a security +#: risk as it means that any program, even the ones running on a +#: remote server via SSH can read your clipboard. See also +#: clipboard_max_size. + +# clipboard_max_size 512 + +#: The maximum size (in MB) of data from programs running in kitty +#: that will be stored for writing to the system clipboard. A value of +#: zero means no size limit is applied. See also clipboard_control. + +# file_transfer_confirmation_bypass + +#: The password that can be supplied to the file transfer kitten +#: to skip the +#: transfer confirmation prompt. This should only be used when +#: initiating transfers from trusted computers, over trusted networks +#: or encrypted transports, as it allows any programs running on the +#: remote machine to read/write to the local filesystem, without +#: permission. + +# allow_hyperlinks yes + +#: Process hyperlink escape sequences (OSC 8). If disabled OSC 8 +#: escape sequences are ignored. Otherwise they become clickable +#: links, that you can click with the mouse or by using the hints +#: kitten . The +#: special value of ask means that kitty will ask before opening the +#: link when clicked. + +# shell_integration enabled + +#: Enable shell integration on supported shells. This enables features +#: such as jumping to previous prompts, browsing the output of the +#: previous command in a pager, etc. on supported shells. Set to +#: disabled to turn off shell integration, completely. It is also +#: possible to disable individual features, set to a space separated +#: list of these values: no-rc, no-cursor, no-title, no-cwd, no- +#: prompt-mark, no-complete, no-sudo. See Shell integration +#: for details. + +# allow_cloning ask + +#: Control whether programs running in the terminal can request new +#: windows to be created. The canonical example is clone-in-kitty +#: . +#: By default, kitty will ask for permission for each clone request. +#: Allowing cloning unconditionally gives programs running in the +#: terminal (including over SSH) permission to execute arbitrary code, +#: as the user who is running the terminal, on the computer that the +#: terminal is running on. + +# clone_source_strategies venv,conda,env_var,path + +#: Control what shell code is sourced when running clone-in-kitty in +#: the newly cloned window. The supported strategies are: + +#: venv +#: Source the file $VIRTUAL_ENV/bin/activate. This is used by the +#: Python stdlib venv module and allows cloning venvs automatically. +#: conda +#: Run conda activate $CONDA_DEFAULT_ENV. This supports the virtual +#: environments created by conda. +#: env_var +#: Execute the contents of the environment variable +#: KITTY_CLONE_SOURCE_CODE with eval. +#: path +#: Source the file pointed to by the environment variable +#: KITTY_CLONE_SOURCE_PATH. + +#: This option must be a comma separated list of the above values. +#: Only the first valid match, in the order specified, is sourced. + +# notify_on_cmd_finish never + +#: Show a desktop notification when a long-running command finishes +#: (needs shell_integration). The possible values are: + +#: never +#: Never send a notification. + +#: unfocused +#: Only send a notification when the window does not have keyboard focus. + +#: invisible +#: Only send a notification when the window both is unfocused and not visible +#: to the user, for example, because it is in an inactive tab or its OS window +#: is not currently active. + +#: always +#: Always send a notification, regardless of window state. + +#: There are two optional arguments: + +#: First, the minimum duration for what is considered a long running +#: command. The default is 5 seconds. Specify a second argument to set +#: the duration. For example: invisible 15. Do not set the value too +#: small, otherwise a command that launches a new OS Window and exits +#: will spam a notification. + +#: Second, the action to perform. The default is notify. The possible +#: values are: + +#: notify +#: Send a desktop notification. + +#: bell +#: Ring the terminal bell. + +#: command +#: Run a custom command. All subsequent arguments are the cmdline to run. + +#: Some more examples:: + +#: # Send a notification when a command takes more than 5 seconds in an unfocused window +#: notify_on_cmd_finish unfocused +#: # Send a notification when a command takes more than 10 seconds in a invisible window +#: notify_on_cmd_finish invisible 10.0 +#: # Ring a bell when a command takes more than 10 seconds in a invisible window +#: notify_on_cmd_finish invisible 10.0 bell +#: # Run 'notify-send' when a command takes more than 10 seconds in a invisible window +#: # Here %c is replaced by the current command line and %s by the job exit code +#: notify_on_cmd_finish invisible 10.0 command notify-send "job finished with status: %s" %c + +# term xterm-kitty + +#: The value of the TERM environment variable to set. Changing this +#: can break many terminal programs, only change it if you know what +#: you are doing, not because you read some advice on "Stack Overflow" +#: to change it. The TERM variable is used by various programs to get +#: information about the capabilities and behavior of the terminal. If +#: you change it, depending on what programs you run, and how +#: different the terminal you are changing it to is, various things +#: from key-presses, to colors, to various advanced features may not +#: work. Changing this option by reloading the config will only affect +#: newly created windows. + +# terminfo_type path + +#: The value of the TERMINFO environment variable to set. This +#: variable is used by programs running in the terminal to search for +#: terminfo databases. The default value of path causes kitty to set +#: it to a filesystem location containing the kitty terminfo database. +#: A value of direct means put the entire database into the env var +#: directly. This can be useful when connecting to containers, for +#: example. But, note that not all software supports this. A value of +#: none means do not touch the variable. + +# forward_stdio no + +#: Forward STDOUT and STDERR of the kitty process to child processes. +#: This is useful for debugging as it allows child processes to print +#: to kitty's STDOUT directly. For example, echo hello world +#: >&$KITTY_STDIO_FORWARDED in a shell will print to the parent +#: kitty's STDOUT. Sets the KITTY_STDIO_FORWARDED=fdnum environment +#: variable so child processes know about the forwarding. Note that on +#: macOS this prevents the shell from being run via the login utility +#: so getlogin() will not work in programs run in this session. + +# menu_map + +#: Specify entries for various menus in kitty. Currently only the +#: global menubar on macOS is supported. For example:: + +#: menu_map global "Actions::Launch something special" launch --hold --type=os-window sh -c "echo hello world" + +#: This will create a menu entry named "Launch something special" in +#: an "Actions" menu in the macOS global menubar. Sub-menus can be +#: created by adding more levels separated by the :: characters. + +#: }}} + +#: OS specific tweaks {{{ + +# wayland_titlebar_color system + +#: The color of the kitty window's titlebar on Wayland systems with +#: client side window decorations such as GNOME. A value of system +#: means to use the default system colors, a value of background means +#: to use the background color of the currently active kitty window +#: and finally you can use an arbitrary color, such as #12af59 or red. + +# macos_titlebar_color system + +#: The color of the kitty window's titlebar on macOS. A value of +#: system means to use the default system color, light or dark can +#: also be used to set it explicitly. A value of background means to +#: use the background color of the currently active window and finally +#: you can use an arbitrary color, such as #12af59 or red. WARNING: +#: This option works by using a hack when arbitrary color (or +#: background) is configured, as there is no proper Cocoa API for it. +#: It sets the background color of the entire window and makes the +#: titlebar transparent. As such it is incompatible with +#: background_opacity. If you want to use both, you are probably +#: better off just hiding the titlebar with hide_window_decorations. + +# macos_option_as_alt no + +#: Use the Option key as an Alt key on macOS. With this set to no, +#: kitty will use the macOS native Option+Key to enter Unicode +#: character behavior. This will break any Alt+Key keyboard shortcuts +#: in your terminal programs, but you can use the macOS Unicode input +#: technique. You can use the values: left, right or both to use only +#: the left, right or both Option keys as Alt, instead. Note that +#: kitty itself always treats Option the same as Alt. This means you +#: cannot use this option to configure different kitty shortcuts for +#: Option+Key vs. Alt+Key. Also, any kitty shortcuts using +#: Option/Alt+Key will take priority, so that any such key presses +#: will not be passed to terminal programs running inside kitty. +#: Changing this option by reloading the config is not supported. + +# macos_hide_from_tasks no + +#: Hide the kitty window from running tasks on macOS (⌘+Tab and the +#: Dock). Changing this option by reloading the config is not +#: supported. + +# macos_quit_when_last_window_closed no + +#: Have kitty quit when all the top-level windows are closed on macOS. +#: By default, kitty will stay running, even with no open windows, as +#: is the expected behavior on macOS. + +# macos_window_resizable yes + +#: Disable this if you want kitty top-level OS windows to not be +#: resizable on macOS. + +# macos_thicken_font 0 + +#: Draw an extra border around the font with the given width, to +#: increase legibility at small font sizes on macOS. For example, a +#: value of 0.75 will result in rendering that looks similar to sub- +#: pixel antialiasing at common font sizes. Note that in modern kitty, +#: this option is obsolete (although still supported). Consider using +#: text_composition_strategy instead. + +# macos_traditional_fullscreen no + +#: Use the macOS traditional full-screen transition, that is faster, +#: but less pretty. + +# macos_show_window_title_in all + +#: Control where the window title is displayed on macOS. A value of +#: window will show the title of the currently active window at the +#: top of the macOS window. A value of menubar will show the title of +#: the currently active window in the macOS global menu bar, making +#: use of otherwise wasted space. A value of all will show the title +#: in both places, and none hides the title. See +#: macos_menubar_title_max_length for how to control the length of the +#: title in the menu bar. + +# macos_menubar_title_max_length 0 + +#: The maximum number of characters from the window title to show in +#: the macOS global menu bar. Values less than one means that there is +#: no maximum limit. + +# macos_custom_beam_cursor no + +#: Use a custom mouse cursor for macOS that is easier to see on both +#: light and dark backgrounds. Nowadays, the default macOS cursor +#: already comes with a white border. WARNING: this might make your +#: mouse cursor invisible on dual GPU machines. Changing this option +#: by reloading the config is not supported. + +# macos_colorspace srgb + +#: The colorspace in which to interpret terminal colors. The default +#: of srgb will cause colors to match those seen in web browsers. The +#: value of default will use whatever the native colorspace of the +#: display is. The value of displayp3 will use Apple's special +#: snowflake display P3 color space, which will result in over +#: saturated (brighter) colors with some color shift. Reloading +#: configuration will change this value only for newly created OS +#: windows. + +# linux_display_server auto + +#: Choose between Wayland and X11 backends. By default, an appropriate +#: backend based on the system state is chosen automatically. Set it +#: to x11 or wayland to force the choice. Changing this option by +#: reloading the config is not supported. + +# wayland_enable_ime yes + +#: Enable Input Method Extension on Wayland. This is typically used +#: for inputting text in East Asian languages. However, its +#: implementation in Wayland is often buggy and introduces latency +#: into the input loop, so disable this if you know you dont need it. +#: Changing this option by reloading the config is not supported, it +#: will not have any effect. + +#: }}} + +#: Keyboard shortcuts {{{ + +#: Keys are identified simply by their lowercase Unicode characters. +#: For example: a for the A key, [ for the left square bracket key, +#: etc. For functional keys, such as Enter or Escape, the names are +#: present at Functional key definitions +#: . +#: For modifier keys, the names are ctrl (control, ⌃), shift (⇧), alt +#: (opt, option, ⌥), super (cmd, command, ⌘). + +#: Simple shortcut mapping is done with the map directive. For full +#: details on advanced mapping including modal and per application +#: maps, see mapping . Some +#: quick examples to illustrate common tasks:: + +#: # unmap a keyboard shortcut, passing it to the program running in kitty +#: map kitty_mod+space +#: # completely ignore a keyboard event +#: map ctrl+alt+f1 discard_event +#: # combine multiple actions +#: map kitty_mod+e combine : new_window : next_layout +#: # multi-key shortcuts +#: map ctrl+x>ctrl+y>z action + +#: The full list of actions that can be mapped to key presses is +#: available here . + +# kitty_mod ctrl+shift + +#: Special modifier key alias for default shortcuts. You can change +#: the value of this option to alter all default shortcuts that use +#: kitty_mod. + +# clear_all_shortcuts no + +#: Remove all shortcut definitions up to this point. Useful, for +#: instance, to remove the default shortcuts. + +# action_alias + +#: E.g. action_alias launch_tab launch --type=tab --cwd=current + +#: Define action aliases to avoid repeating the same options in +#: multiple mappings. Aliases can be defined for any action and will +#: be expanded recursively. For example, the above alias allows you to +#: create mappings to launch a new tab in the current working +#: directory without duplication:: + +#: map f1 launch_tab vim +#: map f2 launch_tab emacs + +#: Similarly, to alias kitten invocation:: + +#: action_alias hints kitten hints --hints-offset=0 + +# kitten_alias + +#: E.g. kitten_alias hints hints --hints-offset=0 + +#: Like action_alias above, but specifically for kittens. Generally, +#: prefer to use action_alias. This option is a legacy version, +#: present for backwards compatibility. It causes all invocations of +#: the aliased kitten to be substituted. So the example above will +#: cause all invocations of the hints kitten to have the --hints- +#: offset=0 option applied. + +#: Clipboard {{{ + +#: Copy to clipboard + +# map kitty_mod+c copy_to_clipboard +# map cmd+c copy_to_clipboard + +#:: There is also a copy_or_interrupt action that can be optionally +#:: mapped to Ctrl+C. It will copy only if there is a selection and +#:: send an interrupt otherwise. Similarly, +#:: copy_and_clear_or_interrupt will copy and clear the selection or +#:: send an interrupt if there is no selection. + +#: Paste from clipboard + +# map kitty_mod+v paste_from_clipboard +# map cmd+v paste_from_clipboard + +#: Paste from selection + +# map kitty_mod+s paste_from_selection +# map shift+insert paste_from_selection + +#: Pass selection to program + +# map kitty_mod+o pass_selection_to_program + +#:: You can also pass the contents of the current selection to any +#:: program with pass_selection_to_program. By default, the system's +#:: open program is used, but you can specify your own, the selection +#:: will be passed as a command line argument to the program. For +#:: example:: + +#:: map kitty_mod+o pass_selection_to_program firefox + +#:: You can pass the current selection to a terminal program running +#:: in a new kitty window, by using the @selection placeholder:: + +#:: map kitty_mod+y new_window less @selection + +#: }}} + +#: Scrolling {{{ + +#: Scroll line up + +# map kitty_mod+up scroll_line_up +# map kitty_mod+k scroll_line_up +# map opt+cmd+page_up scroll_line_up +# map cmd+up scroll_line_up + +#: Scroll line down + +# map kitty_mod+down scroll_line_down +# map kitty_mod+j scroll_line_down +# map opt+cmd+page_down scroll_line_down +# map cmd+down scroll_line_down + +#: Scroll page up + +# map kitty_mod+page_up scroll_page_up +# map cmd+page_up scroll_page_up + +#: Scroll page down + +# map kitty_mod+page_down scroll_page_down +# map cmd+page_down scroll_page_down + +#: Scroll to top + +# map kitty_mod+home scroll_home +# map cmd+home scroll_home + +#: Scroll to bottom + +# map kitty_mod+end scroll_end +# map cmd+end scroll_end + +#: Scroll to previous shell prompt + +# map kitty_mod+z scroll_to_prompt -1 + +#:: Use a parameter of 0 for scroll_to_prompt to scroll to the last +#:: jumped to or the last clicked position. Requires shell +#:: integration +#:: to work. + +#: Scroll to next shell prompt + +# map kitty_mod+x scroll_to_prompt 1 + +#: Browse scrollback buffer in pager + +# map kitty_mod+h show_scrollback + +#:: You can pipe the contents of the current screen and history +#:: buffer as STDIN to an arbitrary program using launch --stdin- +#:: source. For example, the following opens the scrollback buffer in +#:: less in an overlay window:: + +#:: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R + +#:: For more details on piping screen and buffer contents to external +#:: programs, see launch . + +#: Browse output of the last shell command in pager + +# map kitty_mod+g show_last_command_output + +#:: You can also define additional shortcuts to get the command +#:: output. For example, to get the first command output on screen:: + +#:: map f1 show_first_command_output_on_screen + +#:: To get the command output that was last accessed by a keyboard +#:: action or mouse action:: + +#:: map f1 show_last_visited_command_output + +#:: You can pipe the output of the last command run in the shell +#:: using the launch action. For example, the following opens the +#:: output in less in an overlay window:: + +#:: map f1 launch --stdin-source=@last_cmd_output --stdin-add-formatting --type=overlay less +G -R + +#:: To get the output of the first command on the screen, use +#:: @first_cmd_output_on_screen. To get the output of the last jumped +#:: to command, use @last_visited_cmd_output. + +#:: Requires shell integration +#:: to work. + +#: }}} + +#: Window management {{{ + +#: New window + +# map kitty_mod+enter new_window +# map cmd+enter new_window + +#:: You can open a new kitty window running an arbitrary program, for +#:: example:: + +#:: map kitty_mod+y launch mutt + +#:: You can open a new window with the current working directory set +#:: to the working directory of the current window using:: + +#:: map ctrl+alt+enter launch --cwd=current + +#:: You can open a new window that is allowed to control kitty via +#:: the kitty remote control facility with launch --allow-remote- +#:: control. Any programs running in that window will be allowed to +#:: control kitty. For example:: + +#:: map ctrl+enter launch --allow-remote-control some_program + +#:: You can open a new window next to the currently active window or +#:: as the first window, with:: + +#:: map ctrl+n launch --location=neighbor +#:: map ctrl+f launch --location=first + +#:: For more details, see launch +#:: . + +#: New OS window + +# map kitty_mod+n new_os_window +# map cmd+n new_os_window + +#:: Works like new_window above, except that it opens a top-level OS +#:: window. In particular you can use new_os_window_with_cwd to open +#:: a window with the current working directory. + +#: Close window + +# map kitty_mod+w close_window +# map shift+cmd+d close_window + +#: Next window + +# map kitty_mod+] next_window + +#: Previous window + +# map kitty_mod+[ previous_window + +#: Move window forward + +# map kitty_mod+f move_window_forward + +#: Move window backward + +# map kitty_mod+b move_window_backward + +#: Move window to top + +# map kitty_mod+` move_window_to_top + +#: Start resizing window + +# map kitty_mod+r start_resizing_window +# map cmd+r start_resizing_window + +#: First window + +# map kitty_mod+1 first_window +# map cmd+1 first_window + +#: Second window + +# map kitty_mod+2 second_window +# map cmd+2 second_window + +#: Third window + +# map kitty_mod+3 third_window +# map cmd+3 third_window + +#: Fourth window + +# map kitty_mod+4 fourth_window +# map cmd+4 fourth_window + +#: Fifth window + +# map kitty_mod+5 fifth_window +# map cmd+5 fifth_window + +#: Sixth window + +# map kitty_mod+6 sixth_window +# map cmd+6 sixth_window + +#: Seventh window + +# map kitty_mod+7 seventh_window +# map cmd+7 seventh_window + +#: Eighth window + +# map kitty_mod+8 eighth_window +# map cmd+8 eighth_window + +#: Ninth window + +# map kitty_mod+9 ninth_window +# map cmd+9 ninth_window + +#: Tenth window + +# map kitty_mod+0 tenth_window + +#: Visually select and focus window + +# map kitty_mod+f7 focus_visible_window + +#:: Display overlay numbers and alphabets on the window, and switch +#:: the focus to the window when you press the key. When there are +#:: only two windows, the focus will be switched directly without +#:: displaying the overlay. You can change the overlay characters and +#:: their order with option visual_window_select_characters. + +#: Visually swap window with another + +# map kitty_mod+f8 swap_with_window + +#:: Works like focus_visible_window above, but swaps the window. + +#: }}} + +#: Tab management {{{ + +#: Next tab + +# map kitty_mod+right next_tab +# map shift+cmd+] next_tab +# map ctrl+tab next_tab + +#: Previous tab + +# map kitty_mod+left previous_tab +# map shift+cmd+[ previous_tab +# map ctrl+shift+tab previous_tab + +#: New tab + +# map kitty_mod+t new_tab +# map cmd+t new_tab + +#: Close tab + +# map kitty_mod+q close_tab +# map cmd+w close_tab + +#: Close OS window + +# map shift+cmd+w close_os_window + +#: Move tab forward + +# map kitty_mod+. move_tab_forward + +#: Move tab backward + +# map kitty_mod+, move_tab_backward + +#: Set tab title + +# map kitty_mod+alt+t set_tab_title +# map shift+cmd+i set_tab_title + + +#: You can also create shortcuts to go to specific tabs, with 1 being +#: the first tab, 2 the second tab and -1 being the previously active +#: tab, -2 being the tab active before the previously active tab and +#: so on. Any number larger than the number of tabs goes to the last +#: tab and any number less than the number of previously used tabs in +#: the history goes to the oldest previously used tab in the history:: + +#: map ctrl+alt+1 goto_tab 1 +#: map ctrl+alt+2 goto_tab 2 + +#: Just as with new_window above, you can also pass the name of +#: arbitrary commands to run when using new_tab and new_tab_with_cwd. +#: Finally, if you want the new tab to open next to the current tab +#: rather than at the end of the tabs list, use:: + +#: map ctrl+t new_tab !neighbor [optional cmd to run] +#: }}} + +#: Layout management {{{ + +#: Next layout + +# map kitty_mod+l next_layout + + +#: You can also create shortcuts to switch to specific layouts:: + +#: map ctrl+alt+t goto_layout tall +#: map ctrl+alt+s goto_layout stack + +#: Similarly, to switch back to the previous layout:: + +#: map ctrl+alt+p last_used_layout + +#: There is also a toggle_layout action that switches to the named +#: layout or back to the previous layout if in the named layout. +#: Useful to temporarily "zoom" the active window by switching to the +#: stack layout:: + +#: map ctrl+alt+z toggle_layout stack +#: }}} + +#: Font sizes {{{ + +#: You can change the font size for all top-level kitty OS windows at +#: a time or only the current one. + +#: Increase font size + +# map kitty_mod+equal change_font_size all +2.0 +# map kitty_mod+plus change_font_size all +2.0 +# map kitty_mod+kp_add change_font_size all +2.0 +# map cmd+plus change_font_size all +2.0 +# map cmd+equal change_font_size all +2.0 +# map shift+cmd+equal change_font_size all +2.0 + +#: Decrease font size + +# map kitty_mod+minus change_font_size all -2.0 +# map kitty_mod+kp_subtract change_font_size all -2.0 +# map cmd+minus change_font_size all -2.0 +# map shift+cmd+minus change_font_size all -2.0 + +#: Reset font size + +# map kitty_mod+backspace change_font_size all 0 +# map cmd+0 change_font_size all 0 + + +#: To setup shortcuts for specific font sizes:: + +#: map kitty_mod+f6 change_font_size all 10.0 + +#: To setup shortcuts to change only the current OS window's font +#: size:: + +#: map kitty_mod+f6 change_font_size current 10.0 +#: }}} + +#: Select and act on visible text {{{ + +#: Use the hints kitten to select text and either pass it to an +#: external program or insert it into the terminal or copy it to the +#: clipboard. + +#: Open URL + +# map kitty_mod+e open_url_with_hints + +#:: Open a currently visible URL using the keyboard. The program used +#:: to open the URL is specified in open_url_with. + +#: Insert selected path + +# map kitty_mod+p>f kitten hints --type path --program - + +#:: Select a path/filename and insert it into the terminal. Useful, +#:: for instance to run git commands on a filename output from a +#:: previous git command. + +#: Open selected path + +# map kitty_mod+p>shift+f kitten hints --type path + +#:: Select a path/filename and open it with the default open program. + +#: Insert selected line + +# map kitty_mod+p>l kitten hints --type line --program - + +#:: Select a line of text and insert it into the terminal. Useful for +#:: the output of things like: `ls -1`. + +#: Insert selected word + +# map kitty_mod+p>w kitten hints --type word --program - + +#:: Select words and insert into terminal. + +#: Insert selected hash + +# map kitty_mod+p>h kitten hints --type hash --program - + +#:: Select something that looks like a hash and insert it into the +#:: terminal. Useful with git, which uses SHA1 hashes to identify +#:: commits. + +#: Open the selected file at the selected line + +# map kitty_mod+p>n kitten hints --type linenum + +#:: Select something that looks like filename:linenum and open it in +#:: your default editor at the specified line number. + +#: Open the selected hyperlink + +# map kitty_mod+p>y kitten hints --type hyperlink + +#:: Select a hyperlink (i.e. a URL that has been marked as such by +#:: the terminal program, for example, by `ls --hyperlink=auto`). + + +#: The hints kitten has many more modes of operation that you can map +#: to different shortcuts. For a full description see hints kitten +#: . +#: }}} + +#: Miscellaneous {{{ + +#: Show documentation + +# map kitty_mod+f1 show_kitty_doc overview + +#: Toggle fullscreen + +# map kitty_mod+f11 toggle_fullscreen +# map ctrl+cmd+f toggle_fullscreen + +#: Toggle maximized + +# map kitty_mod+f10 toggle_maximized + +#: Toggle macOS secure keyboard entry + +# map opt+cmd+s toggle_macos_secure_keyboard_entry + +#: Unicode input + +# map kitty_mod+u kitten unicode_input +# map ctrl+cmd+space kitten unicode_input + +#: Edit config file + +# map kitty_mod+f2 edit_config_file +# map cmd+, edit_config_file + +#: Open the kitty command shell + +# map kitty_mod+escape kitty_shell window + +#:: Open the kitty shell in a new window / tab / overlay / os_window +#:: to control kitty using commands. + +#: Increase background opacity + +# map kitty_mod+a>m set_background_opacity +0.1 + +#: Decrease background opacity + +# map kitty_mod+a>l set_background_opacity -0.1 + +#: Make background fully opaque + +# map kitty_mod+a>1 set_background_opacity 1 + +#: Reset background opacity + +# map kitty_mod+a>d set_background_opacity default + +#: Reset the terminal + +# map kitty_mod+delete clear_terminal reset active +# map opt+cmd+r clear_terminal reset active + +#:: You can create shortcuts to clear/reset the terminal. For +#:: example:: + +#:: # Reset the terminal +#:: map f1 clear_terminal reset active +#:: # Clear the terminal screen by erasing all contents +#:: map f1 clear_terminal clear active +#:: # Clear the terminal scrollback by erasing it +#:: map f1 clear_terminal scrollback active +#:: # Scroll the contents of the screen into the scrollback +#:: map f1 clear_terminal scroll active +#:: # Clear everything on screen up to the line with the cursor or the start of the current prompt (needs shell integration) +#:: map f1 clear_terminal to_cursor active +#:: # Same as above except cleared lines are moved into scrollback +#:: map f1 clear_terminal to_cursor_scroll active + +#:: If you want to operate on all kitty windows instead of just the +#:: current one, use all instead of active. + +#:: Some useful functions that can be defined in the shell rc files +#:: to perform various kinds of clearing of the current window: + +#:: .. code-block:: sh + +#:: clear-only-screen() { +#:: printf "\e[H\e[2J" +#:: } + +#:: clear-screen-and-scrollback() { +#:: printf "\e[H\e[3J" +#:: } + +#:: clear-screen-saving-contents-in-scrollback() { +#:: printf "\e[H\e[22J" +#:: } + +#:: For instance, using these escape codes, it is possible to remap +#:: Ctrl+L to both scroll the current screen contents into the +#:: scrollback buffer and clear the screen, instead of just clearing +#:: the screen. For ZSH, in ~/.zshrc, add: + +#:: .. code-block:: zsh + +#:: ctrl_l() { +#:: builtin print -rn -- $'\r\e[0J\e[H\e[22J' >"$TTY" +#:: builtin zle .reset-prompt +#:: builtin zle -R +#:: } +#:: zle -N ctrl_l +#:: bindkey '^l' ctrl_l + +#:: Alternatively, you can just add map ctrl+l clear_terminal +#:: to_cursor_scroll active to kitty.conf which works with no changes +#:: to the shell rc files, but only clears up to the prompt, it does +#:: not clear anytext at the prompt itself. + +#: Clear up to cursor line + +# map cmd+k clear_terminal to_cursor active + +#: Reload kitty.conf + +# map kitty_mod+f5 load_config_file +# map ctrl+cmd+, load_config_file + +#:: Reload kitty.conf, applying any changes since the last time it +#:: was loaded. Note that a handful of options cannot be dynamically +#:: changed and require a full restart of kitty. Particularly, when +#:: changing shortcuts for actions located on the macOS global menu +#:: bar, a full restart is needed. You can also map a keybinding to +#:: load a different config file, for example:: + +#:: map f5 load_config /path/to/alternative/kitty.conf + +#:: Note that all options from the original kitty.conf are discarded, +#:: in other words the new configuration *replace* the old ones. + +#: Debug kitty configuration + +# map kitty_mod+f6 debug_config +# map opt+cmd+, debug_config + +#:: Show details about exactly what configuration kitty is running +#:: with and its host environment. Useful for debugging issues. + +#: Send arbitrary text on key presses + +#:: E.g. map ctrl+shift+alt+h send_text all Hello World + +#:: You can tell kitty to send arbitrary (UTF-8) encoded text to the +#:: client program when pressing specified shortcut keys. For +#:: example:: + +#:: map ctrl+alt+a send_text all Special text + +#:: This will send "Special text" when you press the Ctrl+Alt+A key +#:: combination. The text to be sent decodes ANSI C escapes +#:: so you can use escapes like \e to send control +#:: codes or \u21fb to send Unicode characters (or you can just input +#:: the Unicode characters directly as UTF-8 text). You can use +#:: `kitten show-key` to get the key escape codes you want to +#:: emulate. + +#:: The first argument to send_text is the keyboard modes in which to +#:: activate the shortcut. The possible values are normal, +#:: application, kitty or a comma separated combination of them. The +#:: modes normal and application refer to the DECCKM cursor key mode +#:: for terminals, and kitty refers to the kitty extended keyboard +#:: protocol. The special value all means all of them. + +#:: Some more examples:: + +#:: # Output a word and move the cursor to the start of the line (like typing and pressing Home) +#:: map ctrl+alt+a send_text normal Word\e[H +#:: map ctrl+alt+a send_text application Word\eOH +#:: # Run a command at a shell prompt (like typing the command and pressing Enter) +#:: map ctrl+alt+a send_text normal,application some command with arguments\r + +#: Open kitty Website + +# map shift+cmd+/ open_url https://sw.kovidgoyal.net/kitty/ + +#: Hide macOS kitty application + +# map cmd+h hide_macos_app + +#: Hide macOS other applications + +# map opt+cmd+h hide_macos_other_apps + +#: Minimize macOS window + +# map cmd+m minimize_macos_window + +#: Quit kitty + +# map cmd+q quit + +#: }}} + +#: }}} + + +# BEGIN_KITTY_THEME +# Adwaita darker +include current-theme.conf +# END_KITTY_THEME \ No newline at end of file diff --git a/general/configs/kitty/kitty.conf.bak b/general/configs/kitty/kitty.conf.bak new file mode 100644 index 0000000..e285bcd --- /dev/null +++ b/general/configs/kitty/kitty.conf.bak @@ -0,0 +1,2639 @@ +# vim:fileencoding=utf-8:foldmethod=marker + +Fonts {{{ + +#: kitty has very powerful font management. You can configure +#: individual font faces and even specify special fonts for particular +#: characters. + +font_family Source Code Pro +# bold_font auto +# italic_font auto +# bold_italic_font auto + +#: You can specify different fonts for the bold/italic/bold-italic +#: variants. The easiest way to select fonts is to run the `kitten +#: choose-fonts` command which will present a nice UI for you to +#: select the fonts you want with previews and support for selecting +#: variable fonts and font features. If you want to learn to select +#: fonts manually, read the font specification syntax +#: . + +font_size 12.0 + +#: Font size (in pts). + +# force_ltr no + +#: kitty does not support BIDI (bidirectional text), however, for RTL +#: scripts, words are automatically displayed in RTL. That is to say, +#: in an RTL script, the words "HELLO WORLD" display in kitty as +#: "WORLD HELLO", and if you try to select a substring of an RTL- +#: shaped string, you will get the character that would be there had +#: the string been LTR. For example, assuming the Hebrew word ירושלים, +#: selecting the character that on the screen appears to be ם actually +#: writes into the selection buffer the character י. kitty's default +#: behavior is useful in conjunction with a filter to reverse the word +#: order, however, if you wish to manipulate RTL glyphs, it can be +#: very challenging to work with, so this option is provided to turn +#: it off. Furthermore, this option can be used with the command line +#: program GNU FriBidi +#: to get BIDI support, because it will force kitty to always treat +#: the text as LTR, which FriBidi expects for terminals. + +# symbol_map + +#: E.g. symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols + +#: Map the specified Unicode codepoints to a particular font. Useful +#: if you need special rendering for some symbols, such as for +#: Powerline. Avoids the need for patched fonts. Each Unicode code +#: point is specified in the form `U+`. You +#: can specify multiple code points, separated by commas and ranges +#: separated by hyphens. This option can be specified multiple times. +#: The syntax is:: + +#: symbol_map codepoints Font Family Name + +# narrow_symbols + +#: E.g. narrow_symbols U+E0A0-U+E0A3,U+E0C0-U+E0C7 1 + +#: Usually, for Private Use Unicode characters and some symbol/dingbat +#: characters, if the character is followed by one or more spaces, +#: kitty will use those extra cells to render the character larger, if +#: the character in the font has a wide aspect ratio. Using this +#: option you can force kitty to restrict the specified code points to +#: render in the specified number of cells (defaulting to one cell). +#: This option can be specified multiple times. The syntax is:: + +#: narrow_symbols codepoints [optionally the number of cells] + +# disable_ligatures never + +#: Choose how you want to handle multi-character ligatures. The +#: default is to always render them. You can tell kitty to not render +#: them when the cursor is over them by using cursor to make editing +#: easier, or have kitty never render them at all by using always, if +#: you don't like them. The ligature strategy can be set per-window +#: either using the kitty remote control facility or by defining +#: shortcuts for it in kitty.conf, for example:: + +#: map alt+1 disable_ligatures_in active always +#: map alt+2 disable_ligatures_in all never +#: map alt+3 disable_ligatures_in tab cursor + +#: Note that this refers to programming ligatures, typically +#: implemented using the calt OpenType feature. For disabling general +#: ligatures, use the font_features option. + +# font_features + +#: E.g. font_features none + +#: Choose exactly which OpenType features to enable or disable. Note +#: that for the main fonts, features can be specified when selecting +#: the font using the choose-fonts kitten. This setting is useful for +#: fallback fonts. + +#: Some fonts might have features worthwhile in a terminal. For +#: example, Fira Code includes a discretionary feature, zero, which in +#: that font changes the appearance of the zero (0), to make it more +#: easily distinguishable from Ø. Fira Code also includes other +#: discretionary features known as Stylistic Sets which have the tags +#: ss01 through ss20. + +#: For the exact syntax to use for individual features, see the +#: HarfBuzz documentation . + +#: Note that this code is indexed by PostScript name, and not the font +#: family. This allows you to define very precise feature settings; +#: e.g. you can disable a feature in the italic font but not in the +#: regular font. + +#: On Linux, font features are first read from the FontConfig database +#: and then this option is applied, so they can be configured in a +#: single, central place. + +#: To get the PostScript name for a font, use the `fc-scan file.ttf` +#: command on Linux or the `Font Book tool on macOS +#: `__. + +#: Enable alternate zero and oldstyle numerals:: + +#: font_features FiraCode-Retina +zero +onum + +#: Enable only alternate zero in the bold font:: + +#: font_features FiraCode-Bold +zero + +#: Disable the normal ligatures, but keep the calt feature which (in +#: this font) breaks up monotony:: + +#: font_features TT2020StyleB-Regular -liga +calt + +#: In conjunction with force_ltr, you may want to disable Arabic +#: shaping entirely, and only look at their isolated forms if they +#: show up in a document. You can do this with e.g.:: + +#: font_features UnifontMedium +isol -medi -fina -init + +# modify_font + +#: Modify font characteristics such as the position or thickness of +#: the underline and strikethrough. The modifications can have the +#: suffix px for pixels or % for percentage of original value. No +#: suffix means use pts. For example:: + +#: modify_font underline_position -2 +#: modify_font underline_thickness 150% +#: modify_font strikethrough_position 2px + +#: Additionally, you can modify the size of the cell in which each +#: font glyph is rendered and the baseline at which the glyph is +#: placed in the cell. For example:: + +#: modify_font cell_width 80% +#: modify_font cell_height -2px +#: modify_font baseline 3 + +#: Note that modifying the baseline will automatically adjust the +#: underline and strikethrough positions by the same amount. +#: Increasing the baseline raises glyphs inside the cell and +#: decreasing it lowers them. Decreasing the cell size might cause +#: rendering artifacts, so use with care. + +# box_drawing_scale 0.001, 1, 1.5, 2 + +#: The sizes of the lines used for the box drawing Unicode characters. +#: These values are in pts. They will be scaled by the monitor DPI to +#: arrive at a pixel value. There must be four values corresponding to +#: thin, normal, thick, and very thick lines. + +# undercurl_style thin-sparse + +#: The style with which undercurls are rendered. This option takes the +#: form (thin|thick)-(sparse|dense). Thin and thick control the +#: thickness of the undercurl. Sparse and dense control how often the +#: curl oscillates. With sparse the curl will peak once per character, +#: with dense twice. + +# text_composition_strategy platform + +#: Control how kitty composites text glyphs onto the background color. +#: The default value of platform tries for text rendering as close to +#: "native" for the platform kitty is running on as possible. + +#: A value of legacy uses the old (pre kitty 0.28) strategy for how +#: glyphs are composited. This will make dark text on light +#: backgrounds look thicker and light text on dark backgrounds +#: thinner. It might also make some text appear like the strokes are +#: uneven. + +#: You can fine tune the actual contrast curve used for glyph +#: composition by specifying up to two space-separated numbers for +#: this setting. + +#: The first number is the gamma adjustment, which controls the +#: thickness of dark text on light backgrounds. Increasing the value +#: will make text appear thicker. The default value for this is 1.0 on +#: Linux and 1.7 on macOS. Valid values are 0.01 and above. The result +#: is scaled based on the luminance difference between the background +#: and the foreground. Dark text on light backgrounds receives the +#: full impact of the curve while light text on dark backgrounds is +#: affected very little. + +#: The second number is an additional multiplicative contrast. It is +#: percentage ranging from 0 to 100. The default value is 0 on Linux +#: and 30 on macOS. + +#: If you wish to achieve similar looking thickness in light and dark +#: themes, a good way to experiment is start by setting the value to +#: 1.0 0 and use a dark theme. Then adjust the second parameter until +#: it looks good. Then switch to a light theme and adjust the first +#: parameter until the perceived thickness matches the dark theme. + +# text_fg_override_threshold 0 + +#: The minimum accepted difference in luminance between the foreground +#: and background color, below which kitty will override the +#: foreground color. It is percentage ranging from 0 to 100. If the +#: difference in luminance of the foreground and background is below +#: this threshold, the foreground color will be set to white if the +#: background is dark or black if the background is light. The default +#: value is 0, which means no overriding is performed. Useful when +#: working with applications that use colors that do not contrast well +#: with your preferred color scheme. + +#: WARNING: Some programs use characters (such as block characters) +#: for graphics display and may expect to be able to set the +#: foreground and background to the same color (or similar colors). +#: If you see unexpected stripes, dots, lines, incorrect color, no +#: color where you expect color, or any kind of graphic display +#: problem try setting text_fg_override_threshold to 0 to see if this +#: is the cause of the problem. + +}}} + +#: Text cursor customization {{{ + +# cursor #cccccc + +#: Default text cursor color. If set to the special value none the +#: cursor will be rendered with a "reverse video" effect. Its color +#: will be the color of the text in the cell it is over and the text +#: will be rendered with the background color of the cell. Note that +#: if the program running in the terminal sets a cursor color, this +#: takes precedence. Also, the cursor colors are modified if the cell +#: background and foreground colors have very low contrast. Note that +#: some themes set this value, so if you want to override it, place +#: your value after the lines where the theme file is included. + +# cursor_text_color #111111 + +#: The color of text under the cursor. If you want it rendered with +#: the background color of the cell underneath instead, use the +#: special keyword: `background`. Note that if cursor is set to none +#: then this option is ignored. Note that some themes set this value, +#: so if you want to override it, place your value after the lines +#: where the theme file is included. + +# cursor_shape block + +#: The cursor shape can be one of block, beam, underline. Note that +#: when reloading the config this will be changed only if the cursor +#: shape has not been set by the program running in the terminal. This +#: sets the default cursor shape, applications running in the terminal +#: can override it. In particular, shell integration +#: in kitty sets +#: the cursor shape to beam at shell prompts. You can avoid this by +#: setting shell_integration to no-cursor. + +# cursor_shape_unfocused hollow + +#: Defines the text cursor shape when the OS window is not focused. +#: The unfocused cursor shape can be one of block, beam, underline, +#: hollow and unchanged (leave the cursor shape as it is). + +# cursor_beam_thickness 1.5 + +#: The thickness of the beam cursor (in pts). + +# cursor_underline_thickness 2.0 + +#: The thickness of the underline cursor (in pts). + +# cursor_blink_interval -1 + +#: The interval to blink the cursor (in seconds). Set to zero to +#: disable blinking. Negative values mean use system default. Note +#: that the minimum interval will be limited to repaint_delay. You can +#: also animate the cursor blink by specifying an easing function. For +#: example, setting this to option to 0.5 ease-in-out will cause the +#: cursor blink to be animated over a second, in the first half of the +#: second it will go from opaque to transparent and then back again +#: over the next half. You can specify different easing functions for +#: the two halves, for example: -1 linear ease-out. kitty supports all +#: the CSS easing functions . Note that turning on animations +#: uses extra power as it means the screen is redrawn multiple times +#: per blink interval. See also, cursor_stop_blinking_after. + +# cursor_stop_blinking_after 15.0 + +#: Stop blinking cursor after the specified number of seconds of +#: keyboard inactivity. Set to zero to never stop blinking. + +# cursor_trail 0 + +#: Set this to a value larger than zero to enable a "cursor trail" +#: animation. This is an animation that shows a "trail" following the +#: movement of the text cursor. It makes it easy to follow large +#: cursor jumps and makes for a cool visual effect of the cursor +#: zooming around the screen. The actual value of this option controls +#: when the animation is trigerred. It is a number of milliseconds. +#: The trail animation only follows cursors that have stayed in their +#: position for longer than the specified number of milliseconds. This +#: prevents trails from appearing for cursors that rapidly change +#: their positions during UI updates in complex applications. See +#: cursor_trail_decay to control the animation speed and +#: cursor_trail_start_threshold to control when a cursor trail is +#: started. + +# cursor_trail_decay 0.1 0.4 + +#: Controls the decay times for the cursor trail effect when the +#: cursor_trail is enabled. This option accepts two positive float +#: values specifying the fastest and slowest decay times in seconds. +#: The first value corresponds to the fastest decay time (minimum), +#: and the second value corresponds to the slowest decay time +#: (maximum). The second value must be equal to or greater than the +#: first value. Smaller values result in a faster decay of the cursor +#: trail. Adjust these values to control how quickly the cursor trail +#: fades away. + +# cursor_trail_start_threshold 2 + +#: Set the distance threshold for starting the cursor trail. This +#: option accepts a positive integer value that represents the minimum +#: number of cells the cursor must move before the trail is started. +#: When the cursor moves less than this threshold, the trail is +#: skipped, reducing unnecessary cursor trail animation. + +#: }}} + +#: Scrollback {{{ + +# scrollback_lines 2000 + +#: Number of lines of history to keep in memory for scrolling back. +#: Memory is allocated on demand. Negative numbers are (effectively) +#: infinite scrollback. Note that using very large scrollback is not +#: recommended as it can slow down performance of the terminal and +#: also use large amounts of RAM. Instead, consider using +#: scrollback_pager_history_size. Note that on config reload if this +#: is changed it will only affect newly created windows, not existing +#: ones. + +# scrollback_indicator_opacity 1.0 + +#: The opacity of the scrollback indicator which is a small colored +#: rectangle that moves along the right hand side of the window as you +#: scroll, indicating what fraction you have scrolled. The default is +#: one which means fully opaque, aka visible. Set to a value between +#: zero and one to make the indicator less visible. + +# scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER + +#: Program with which to view scrollback in a new window. The +#: scrollback buffer is passed as STDIN to this program. If you change +#: it, make sure the program you use can handle ANSI escape sequences +#: for colors and text formatting. INPUT_LINE_NUMBER in the command +#: line above will be replaced by an integer representing which line +#: should be at the top of the screen. Similarly CURSOR_LINE and +#: CURSOR_COLUMN will be replaced by the current cursor position or +#: set to 0 if there is no cursor, for example, when showing the last +#: command output. + +# scrollback_pager_history_size 0 + +#: Separate scrollback history size (in MB), used only for browsing +#: the scrollback buffer with pager. This separate buffer is not +#: available for interactive scrolling but will be piped to the pager +#: program when viewing scrollback buffer in a separate window. The +#: current implementation stores the data in UTF-8, so approximately +#: 10000 lines per megabyte at 100 chars per line, for pure ASCII, +#: unformatted text. A value of zero or less disables this feature. +#: The maximum allowed size is 4GB. Note that on config reload if this +#: is changed it will only affect newly created windows, not existing +#: ones. + +# scrollback_fill_enlarged_window no + +#: Fill new space with lines from the scrollback buffer after +#: enlarging a window. + +# wheel_scroll_multiplier 5.0 + +#: Multiplier for the number of lines scrolled by the mouse wheel. +#: Note that this is only used for low precision scrolling devices, +#: not for high precision scrolling devices on platforms such as macOS +#: and Wayland. Use negative numbers to change scroll direction. See +#: also wheel_scroll_min_lines. + +# wheel_scroll_min_lines 1 + +#: The minimum number of lines scrolled by the mouse wheel. The scroll +#: multiplier wheel_scroll_multiplier only takes effect after it +#: reaches this number. Note that this is only used for low precision +#: scrolling devices like wheel mice that scroll by very small amounts +#: when using the wheel. With a negative number, the minimum number of +#: lines will always be added. + +# touch_scroll_multiplier 1.0 + +#: Multiplier for the number of lines scrolled by a touchpad. Note +#: that this is only used for high precision scrolling devices on +#: platforms such as macOS and Wayland. Use negative numbers to change +#: scroll direction. + +#: }}} + +Mouse {{{ + +mouse_hide_wait 3.0 + +#: Hide mouse cursor after the specified number of seconds of the +#: mouse not being used. Set to zero to disable mouse cursor hiding. +#: Set to a negative value to hide the mouse cursor immediately when +#: typing text. Disabled by default on macOS as getting it to work +#: robustly with the ever-changing sea of bugs that is Cocoa is too +#: much effort. + +url_color #0087bd +url_style curly + +#: The color and style for highlighting URLs on mouse-over. url_style +#: can be one of: none, straight, double, curly, dotted, dashed. + +# open_url_with default + +#: The program to open clicked URLs. The special value default will +#: first look for any URL handlers defined via the open_actions +#: facility and if non +#: are found, it will use the Operating System's default URL handler +#: (open on macOS and xdg-open on Linux). + +url_prefixes file ftp ftps gemini git gopher http https irc ircs kitty mailto news sftp ssh + +#: The set of URL prefixes to look for when detecting a URL under the +#: mouse cursor. + +detect_urls yes + +#: Detect URLs under the mouse. Detected URLs are highlighted with an +#: underline and the mouse cursor becomes a hand over them. Even if +#: this option is disabled, URLs are still clickable. See also the +#: underline_hyperlinks option to control how hyperlinks (as opposed +#: to plain text URLs) are displayed. + +# url_excluded_characters + +#: Additional characters to be disallowed from URLs, when detecting +#: URLs under the mouse cursor. By default, all characters that are +#: legal in URLs are allowed. Additionally, newlines are allowed (but +#: stripped). This is to accommodate programs such as mutt that add +#: hard line breaks even for continued lines. \n can be added to this +#: option to disable this behavior. Special characters can be +#: specified using backslash escapes, to specify a backslash use a +#: double backslash. + +show_hyperlink_targets yes + +#: When the mouse hovers over a terminal hyperlink, show the actual +#: URL that will be activated when the hyperlink is clicked. + +# underline_hyperlinks hover + +#: Control how hyperlinks are underlined. They can either be +#: underlined on mouse hover, always (i.e. permanently underlined) or +#: never which means that kitty will not apply any underline styling +#: to hyperlinks. Note that the value of always only applies to real +#: (OSC 8) hyperlinks not text that is detected to be a URL on mouse +#: hover. Uses the url_style and url_color settings for the underline +#: style. Note that reloading the config and changing this value +#: to/from always will only affect text subsequently received by +#: kitty. + +# copy_on_select no + +#: Copy to clipboard or a private buffer on select. With this set to +#: clipboard, selecting text with the mouse will cause the text to be +#: copied to clipboard. Useful on platforms such as macOS that do not +#: have the concept of primary selection. You can instead specify a +#: name such as a1 to copy to a private kitty buffer. Map a shortcut +#: with the paste_from_buffer action to paste from this private +#: buffer. For example:: + +#: copy_on_select a1 +#: map shift+cmd+v paste_from_buffer a1 + +#: Note that copying to the clipboard is a security risk, as all +#: programs, including websites open in your browser can read the +#: contents of the system clipboard. + +# paste_actions quote-urls-at-prompt,confirm + +#: A comma separated list of actions to take when pasting text into +#: the terminal. The supported paste actions are: + +#: quote-urls-at-prompt: +#: If the text being pasted is a URL and the cursor is at a shell prompt, +#: automatically quote the URL (needs shell_integration). +#: replace-dangerous-control-codes +#: Replace dangerous control codes from pasted text, without confirmation. +#: replace-newline +#: Replace the newline character from pasted text, without confirmation. +#: confirm: +#: Confirm the paste if the text to be pasted contains any terminal control codes +#: as this can be dangerous, leading to code execution if the shell/program running +#: in the terminal does not properly handle these. +#: confirm-if-large +#: Confirm the paste if it is very large (larger than 16KB) as pasting +#: large amounts of text into shells can be very slow. +#: filter: +#: Run the filter_paste() function from the file paste-actions.py in +#: the kitty config directory on the pasted text. The text returned by the +#: function will be actually pasted. +#: no-op: +#: Has no effect. + +# strip_trailing_spaces never + +#: Remove spaces at the end of lines when copying to clipboard. A +#: value of smart will do it when using normal selections, but not +#: rectangle selections. A value of always will always do it. + +# select_by_word_characters @-./_~?&=%+# + +#: Characters considered part of a word when double clicking. In +#: addition to these characters any character that is marked as an +#: alphanumeric character in the Unicode database will be matched. + +# select_by_word_characters_forward + +#: Characters considered part of a word when extending the selection +#: forward on double clicking. In addition to these characters any +#: character that is marked as an alphanumeric character in the +#: Unicode database will be matched. + +#: If empty (default) select_by_word_characters will be used for both +#: directions. + +# click_interval -1.0 + +#: The interval between successive clicks to detect double/triple +#: clicks (in seconds). Negative numbers will use the system default +#: instead, if available, or fallback to 0.5. + +# focus_follows_mouse no + +#: Set the active window to the window under the mouse when moving the +#: mouse around. On macOS, this will also cause the OS Window under +#: the mouse to be focused automatically when the mouse enters it. + +# pointer_shape_when_grabbed arrow + +#: The shape of the mouse pointer when the program running in the +#: terminal grabs the mouse. + +# default_pointer_shape beam + +#: The default shape of the mouse pointer. + +# pointer_shape_when_dragging beam + +#: The default shape of the mouse pointer when dragging across text. + +#: Mouse actions {{{ + +#: Mouse buttons can be mapped to perform arbitrary actions. The +#: syntax is: + +#: .. code-block:: none + +#: mouse_map button-name event-type modes action + +#: Where button-name is one of left, middle, right, b1 ... b8 with +#: added keyboard modifiers. For example: ctrl+shift+left refers to +#: holding the Ctrl+Shift keys while clicking with the left mouse +#: button. The value b1 ... b8 can be used to refer to up to eight +#: buttons on a mouse. + +#: event-type is one of press, release, doublepress, triplepress, +#: click, doubleclick. modes indicates whether the action is performed +#: when the mouse is grabbed by the program running in the terminal, +#: or not. The values are grabbed or ungrabbed or a comma separated +#: combination of them. grabbed refers to when the program running in +#: the terminal has requested mouse events. Note that the click and +#: double click events have a delay of click_interval to disambiguate +#: from double and triple presses. + +#: You can run kitty with the kitty --debug-input command line option +#: to see mouse events. See the builtin actions below to get a sense +#: of what is possible. + +#: If you want to unmap a button, map it to nothing. For example, to +#: disable opening of URLs with a plain click:: + +#: mouse_map left click ungrabbed + +#: See all the mappable actions including mouse actions here +#: . + +#: .. note:: +#: Once a selection is started, releasing the button that started it will +#: automatically end it and no release event will be dispatched. + +# clear_all_mouse_actions no + +#: Remove all mouse action definitions up to this point. Useful, for +#: instance, to remove the default mouse actions. + +#: Click the link under the mouse or move the cursor + +# mouse_map left click ungrabbed mouse_handle_click selection link prompt + +#:: First check for a selection and if one exists do nothing. Then +#:: check for a link under the mouse cursor and if one exists, click +#:: it. Finally check if the click happened at the current shell +#:: prompt and if so, move the cursor to the click location. Note +#:: that this requires shell integration +#:: to work. + +#: Click the link under the mouse or move the cursor even when grabbed + +# mouse_map shift+left click grabbed,ungrabbed mouse_handle_click selection link prompt + +#:: Same as above, except that the action is performed even when the +#:: mouse is grabbed by the program running in the terminal. + +#: Click the link under the mouse cursor + +# mouse_map ctrl+shift+left release grabbed,ungrabbed mouse_handle_click link + +#:: Variant with Ctrl+Shift is present because the simple click based +#:: version has an unavoidable delay of click_interval, to +#:: disambiguate clicks from double clicks. + +#: Discard press event for link click + +# mouse_map ctrl+shift+left press grabbed discard_event + +#:: Prevent this press event from being sent to the program that has +#:: grabbed the mouse, as the corresponding release event is used to +#:: open a URL. + +#: Paste from the primary selection + +# mouse_map middle release ungrabbed paste_from_selection + +#: Start selecting text + +# mouse_map left press ungrabbed mouse_selection normal + +#: Start selecting text in a rectangle + +# mouse_map ctrl+alt+left press ungrabbed mouse_selection rectangle + +#: Select a word + +# mouse_map left doublepress ungrabbed mouse_selection word + +#: Select a line + +# mouse_map left triplepress ungrabbed mouse_selection line + +#: Select line from point + +# mouse_map ctrl+alt+left triplepress ungrabbed mouse_selection line_from_point + +#:: Select from the clicked point to the end of the line. If you +#:: would like to select the word at the point and then extend to the +#:: rest of the line, change `line_from_point` to +#:: `word_and_line_from_point`. + +#: Extend the current selection + +# mouse_map right press ungrabbed mouse_selection extend + +#:: If you want only the end of the selection to be moved instead of +#:: the nearest boundary, use move-end instead of extend. + +#: Paste from the primary selection even when grabbed + +# mouse_map shift+middle release ungrabbed,grabbed paste_selection +# mouse_map shift+middle press grabbed discard_event + +#: Start selecting text even when grabbed + +# mouse_map shift+left press ungrabbed,grabbed mouse_selection normal + +#: Start selecting text in a rectangle even when grabbed + +# mouse_map ctrl+shift+alt+left press ungrabbed,grabbed mouse_selection rectangle + +#: Select a word even when grabbed + +# mouse_map shift+left doublepress ungrabbed,grabbed mouse_selection word + +#: Select a line even when grabbed + +# mouse_map shift+left triplepress ungrabbed,grabbed mouse_selection line + +#: Select line from point even when grabbed + +# mouse_map ctrl+shift+alt+left triplepress ungrabbed,grabbed mouse_selection line_from_point + +#:: Select from the clicked point to the end of the line even when +#:: grabbed. If you would like to select the word at the point and +#:: then extend to the rest of the line, change `line_from_point` to +#:: `word_and_line_from_point`. + +#: Extend the current selection even when grabbed + +# mouse_map shift+right press ungrabbed,grabbed mouse_selection extend + +#: Show clicked command output in pager + +# mouse_map ctrl+shift+right press ungrabbed mouse_show_command_output + +#:: Requires shell integration +#:: to work. + +#: }}} +}}} + +#: Performance tuning {{{ + +# repaint_delay 10 + +#: Delay between screen updates (in milliseconds). Decreasing it, +#: increases frames-per-second (FPS) at the cost of more CPU usage. +#: The default value yields ~100 FPS which is more than sufficient for +#: most uses. Note that to actually achieve 100 FPS, you have to +#: either set sync_to_monitor to no or use a monitor with a high +#: refresh rate. Also, to minimize latency when there is pending input +#: to be processed, this option is ignored. + +# input_delay 3 + +#: Delay before input from the program running in the terminal is +#: processed (in milliseconds). Note that decreasing it will increase +#: responsiveness, but also increase CPU usage and might cause flicker +#: in full screen programs that redraw the entire screen on each loop, +#: because kitty is so fast that partial screen updates will be drawn. +#: This setting is ignored when the input buffer is almost full. + +# sync_to_monitor yes + +#: Sync screen updates to the refresh rate of the monitor. This +#: prevents screen tearing +#: when scrolling. +#: However, it limits the rendering speed to the refresh rate of your +#: monitor. With a very high speed mouse/high keyboard repeat rate, +#: you may notice some slight input latency. If so, set this to no. + +#: }}} + +#: Terminal bell {{{ + +# enable_audio_bell yes + +#: The audio bell. Useful to disable it in environments that require +#: silence. + +# visual_bell_duration 0.0 + +#: The visual bell duration (in seconds). Flash the screen when a bell +#: occurs for the specified number of seconds. Set to zero to disable. +#: The flash is animated, fading in and out over the specified +#: duration. The easing function used for the fading can be +#: controlled. For example, 2.0 linear will casuse the flash to fade +#: in and out linearly. The default if unspecified is to use ease-in- +#: out which fades slowly at the start, middle and end. You can +#: specify different easing functions for the fade-in and fade-out +#: parts, like this: 2.0 ease-in linear. kitty supports all the CSS +#: easing functions . + +# visual_bell_color none + +#: The color used by visual bell. Set to none will fall back to +#: selection background color. If you feel that the visual bell is too +#: bright, you can set it to a darker color. + +# window_alert_on_bell yes + +#: Request window attention on bell. Makes the dock icon bounce on +#: macOS or the taskbar flash on Linux. + +# bell_on_tab "🔔 " + +#: Some text or a Unicode symbol to show on the tab if a window in the +#: tab that does not have focus has a bell. If you want to use leading +#: or trailing spaces, surround the text with quotes. See +#: tab_title_template for how this is rendered. + +#: For backwards compatibility, values of yes, y and true are +#: converted to the default bell symbol and no, n, false and none are +#: converted to the empty string. + +# command_on_bell none + +#: Program to run when a bell occurs. The environment variable +#: KITTY_CHILD_CMDLINE can be used to get the program running in the +#: window in which the bell occurred. + +# bell_path none + +#: Path to a sound file to play as the bell sound. If set to none, the +#: system default bell sound is used. Must be in a format supported by +#: the operating systems sound API, such as WAV or OGA on Linux +#: (libcanberra) or AIFF, MP3 or WAV on macOS (NSSound). + +# linux_bell_theme __custom + +#: The XDG Sound Theme kitty will use to play the bell sound. Defaults +#: to the custom theme name specified in the XDG Sound theme +#: specification , falling back to the default +#: freedesktop theme if it does not exist. To change your sound theme +#: desktop wide, create +#: :file:~/.local/share/sounds/__custom/index.theme` with the +#: contents: + +#: [Sound Theme] + +#: Inherits=name-of-the-sound-theme-you-want-to-use + +#: Replace name-of-the-sound-theme-you-want-to-use with the actual +#: theme name. Now all compliant applications should use sounds from +#: this theme. + +#: }}} + +#: Window layout {{{ + +# remember_window_size yes +# initial_window_width 640 +# initial_window_height 400 + +#: If enabled, the OS Window size will be remembered so that new +#: instances of kitty will have the same size as the previous +#: instance. If disabled, the OS Window will initially have size +#: configured by initial_window_width/height, in pixels. You can use a +#: suffix of "c" on the width/height values to have them interpreted +#: as number of cells instead of pixels. + +# enabled_layouts * + +#: The enabled window layouts. A comma separated list of layout names. +#: The special value all means all layouts. The first listed layout +#: will be used as the startup layout. Default configuration is all +#: layouts in alphabetical order. For a list of available layouts, see +#: the layouts . + +# window_resize_step_cells 2 +# window_resize_step_lines 2 + +#: The step size (in units of cell width/cell height) to use when +#: resizing kitty windows in a layout with the shortcut +#: start_resizing_window. The cells value is used for horizontal +#: resizing, and the lines value is used for vertical resizing. + +# window_border_width 0.5pt + +#: The width of window borders. Can be either in pixels (px) or pts +#: (pt). Values in pts will be rounded to the nearest number of pixels +#: based on screen resolution. If not specified, the unit is assumed +#: to be pts. Note that borders are displayed only when more than one +#: window is visible. They are meant to separate multiple windows. + +# draw_minimal_borders yes + +#: Draw only the minimum borders needed. This means that only the +#: borders that separate the window from a neighbor are drawn. Note +#: that setting a non-zero window_margin_width overrides this and +#: causes all borders to be drawn. + +# window_margin_width 0 + +#: The window margin (in pts) (blank area outside the border). A +#: single value sets all four sides. Two values set the vertical and +#: horizontal sides. Three values set top, horizontal and bottom. Four +#: values set top, right, bottom and left. + +# single_window_margin_width -1 + +#: The window margin to use when only a single window is visible (in +#: pts). Negative values will cause the value of window_margin_width +#: to be used instead. A single value sets all four sides. Two values +#: set the vertical and horizontal sides. Three values set top, +#: horizontal and bottom. Four values set top, right, bottom and left. + +# window_padding_width 0 + +#: The window padding (in pts) (blank area between the text and the +#: window border). A single value sets all four sides. Two values set +#: the vertical and horizontal sides. Three values set top, horizontal +#: and bottom. Four values set top, right, bottom and left. + +# single_window_padding_width -1 + +#: The window padding to use when only a single window is visible (in +#: pts). Negative values will cause the value of window_padding_width +#: to be used instead. A single value sets all four sides. Two values +#: set the vertical and horizontal sides. Three values set top, +#: horizontal and bottom. Four values set top, right, bottom and left. + +# placement_strategy center + +#: When the window size is not an exact multiple of the cell size, the +#: cell area of the terminal window will have some extra padding on +#: the sides. You can control how that padding is distributed with +#: this option. Using a value of center means the cell area will be +#: placed centrally. A value of top-left means the padding will be +#: only at the bottom and right edges. The value can be one of: top- +#: left, top, top-right, left, center, right, bottom-left, bottom, +#: bottom-right. + +# active_border_color #00ff00 + +#: The color for the border of the active window. Set this to none to +#: not draw borders around the active window. + +# inactive_border_color #cccccc + +#: The color for the border of inactive windows. + +# bell_border_color #ff5a00 + +#: The color for the border of inactive windows in which a bell has +#: occurred. + +# inactive_text_alpha 1.0 + +#: Fade the text in inactive windows by the specified amount (a number +#: between zero and one, with zero being fully faded). + +# hide_window_decorations no + +#: Hide the window decorations (title-bar and window borders) with +#: yes. On macOS, titlebar-only and titlebar-and-corners can be used +#: to only hide the titlebar and the rounded corners. Whether this +#: works and exactly what effect it has depends on the window +#: manager/operating system. Note that the effects of changing this +#: option when reloading config are undefined. When using titlebar- +#: only, it is useful to also set window_margin_width and +#: placement_strategy to prevent the rounded corners from clipping +#: text. Or use titlebar-and-corners. + +# window_logo_path none + +#: Path to a logo image. Must be in PNG/JPEG/WEBP/GIF/TIFF/BMP format. +#: Relative paths are interpreted relative to the kitty config +#: directory. The logo is displayed in a corner of every kitty window. +#: The position is controlled by window_logo_position. Individual +#: windows can be configured to have different logos either using the +#: launch action or the remote control +#: facility. + +# window_logo_position bottom-right + +#: Where to position the window logo in the window. The value can be +#: one of: top-left, top, top-right, left, center, right, bottom-left, +#: bottom, bottom-right. + +# window_logo_alpha 0.5 + +#: The amount the logo should be faded into the background. With zero +#: being fully faded and one being fully opaque. + +# window_logo_scale 0 + +#: The percentage (0-100] of the window size to which the logo should +#: scale. Using a single number means the logo is scaled to that +#: percentage of the shortest window dimension, while preseving aspect +#: ratio of the logo image. + +#: Using two numbers means the width and height of the logo are scaled +#: to the respective percentage of the window's width and height. + +#: Using zero as the percentage disables scaling in that dimension. A +#: single zero (the default) disables all scaling of the window logo. + +# resize_debounce_time 0.1 0.5 + +#: The time to wait (in seconds) before asking the program running in +#: kitty to resize and redraw the screen during a live resize of the +#: OS window, when no new resize events have been received, i.e. when +#: resizing is either paused or finished. On platforms such as macOS, +#: where the operating system sends events corresponding to the start +#: and end of a live resize, the second number is used for redraw- +#: after-pause since kitty can distinguish between a pause and end of +#: resizing. On such systems the first number is ignored and redraw is +#: immediate after end of resize. On other systems only the first +#: number is used so that kitty is "ready" quickly after the end of +#: resizing, while not also continuously redrawing, to save energy. + +# resize_in_steps no + +#: Resize the OS window in steps as large as the cells, instead of +#: with the usual pixel accuracy. Combined with initial_window_width +#: and initial_window_height in number of cells, this option can be +#: used to keep the margins as small as possible when resizing the OS +#: window. Note that this does not currently work on Wayland. + +# visual_window_select_characters 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ + +#: The list of characters for visual window selection. For example, +#: for selecting a window to focus on with focus_visible_window. The +#: value should be a series of unique numbers or alphabets, case +#: insensitive, from the set 0-9A-Z\-=[];',./\\`. Specify your +#: preference as a string of characters. + +# confirm_os_window_close -1 + +#: Ask for confirmation when closing an OS window or a tab with at +#: least this number of kitty windows in it by window manager (e.g. +#: clicking the window close button or pressing the operating system +#: shortcut to close windows) or by the close_tab action. A value of +#: zero disables confirmation. This confirmation also applies to +#: requests to quit the entire application (all OS windows, via the +#: quit action). Negative values are converted to positive ones, +#: however, with shell_integration enabled, using negative values +#: means windows sitting at a shell prompt are not counted, only +#: windows where some command is currently running. Note that if you +#: want confirmation when closing individual windows, you can map the +#: close_window_with_confirmation action. + +#: }}} + +#: Tab bar {{{ + +# tab_bar_edge bottom + +#: The edge to show the tab bar on, top or bottom. + +# tab_bar_margin_width 0.0 + +#: The margin to the left and right of the tab bar (in pts). + +# tab_bar_margin_height 0.0 0.0 + +#: The margin above and below the tab bar (in pts). The first number +#: is the margin between the edge of the OS Window and the tab bar. +#: The second number is the margin between the tab bar and the +#: contents of the current tab. + +# tab_bar_style fade + +#: The tab bar style, can be one of: + +#: fade +#: Each tab's edges fade into the background color. (See also tab_fade) +#: slant +#: Tabs look like the tabs in a physical file. +#: separator +#: Tabs are separated by a configurable separator. (See also +#: tab_separator) +#: powerline +#: Tabs are shown as a continuous line with "fancy" separators. +#: (See also tab_powerline_style) +#: custom +#: A user-supplied Python function called draw_tab is loaded from the file +#: tab_bar.py in the kitty config directory. For examples of how to +#: write such a function, see the functions named draw_tab_with_* in +#: kitty's source code: kitty/tab_bar.py. See also +#: this discussion +#: for examples from kitty users. +#: hidden +#: The tab bar is hidden. If you use this, you might want to create +#: a mapping for the select_tab action which presents you with a list of +#: tabs and allows for easy switching to a tab. + +# tab_bar_align left + +#: The horizontal alignment of the tab bar, can be one of: left, +#: center, right. + +# tab_bar_min_tabs 2 + +#: The minimum number of tabs that must exist before the tab bar is +#: shown. + +# tab_switch_strategy previous + +#: The algorithm to use when switching to a tab when the current tab +#: is closed. The default of previous will switch to the last used +#: tab. A value of left will switch to the tab to the left of the +#: closed tab. A value of right will switch to the tab to the right of +#: the closed tab. A value of last will switch to the right-most tab. + +# tab_fade 0.25 0.5 0.75 1 + +#: Control how each tab fades into the background when using fade for +#: the tab_bar_style. Each number is an alpha (between zero and one) +#: that controls how much the corresponding cell fades into the +#: background, with zero being no fade and one being full fade. You +#: can change the number of cells used by adding/removing entries to +#: this list. + +# tab_separator " ┇" + +#: The separator between tabs in the tab bar when using separator as +#: the tab_bar_style. + +# tab_powerline_style angled + +#: The powerline separator style between tabs in the tab bar when +#: using powerline as the tab_bar_style, can be one of: angled, +#: slanted, round. + +# tab_activity_symbol none + +#: Some text or a Unicode symbol to show on the tab if a window in the +#: tab that does not have focus has some activity. If you want to use +#: leading or trailing spaces, surround the text with quotes. See +#: tab_title_template for how this is rendered. + +# tab_title_max_length 0 + +#: The maximum number of cells that can be used to render the text in +#: a tab. A value of zero means that no limit is applied. + +# tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title}" + +#: A template to render the tab title. The default just renders the +#: title with optional symbols for bell and activity. If you wish to +#: include the tab-index as well, use something like: {index}:{title}. +#: Useful if you have shortcuts mapped for goto_tab N. If you prefer +#: to see the index as a superscript, use {sup.index}. All data +#: available is: + +#: title +#: The current tab title. +#: index +#: The tab index usable with goto_tab N goto_tab shortcuts. +#: layout_name +#: The current layout name. +#: num_windows +#: The number of windows in the tab. +#: num_window_groups +#: The number of window groups (a window group is a window and all of its overlay windows) in the tab. +#: tab.active_wd +#: The working directory of the currently active window in the tab +#: (expensive, requires syscall). Use active_oldest_wd to get +#: the directory of the oldest foreground process rather than the newest. +#: tab.active_exe +#: The name of the executable running in the foreground of the currently +#: active window in the tab (expensive, requires syscall). Use +#: active_oldest_exe for the oldest foreground process. +#: max_title_length +#: The maximum title length available. +#: keyboard_mode +#: The name of the current keyboard mode or the empty string if no keyboard mode is active. + +#: Note that formatting is done by Python's string formatting +#: machinery, so you can use, for instance, {layout_name[:2].upper()} +#: to show only the first two letters of the layout name, upper-cased. +#: If you want to style the text, you can use styling directives, for +#: example: +#: `{fmt.fg.red}red{fmt.fg.tab}normal{fmt.bg._00FF00}greenbg{fmt.bg.tab}`. +#: Similarly, for bold and italic: +#: `{fmt.bold}bold{fmt.nobold}normal{fmt.italic}italic{fmt.noitalic}`. +#: The 256 eight terminal colors can be used as `fmt.fg.color0` +#: through `fmt.fg.color255`. Note that for backward compatibility, if +#: {bell_symbol} or {activity_symbol} are not present in the template, +#: they are prepended to it. + +# active_tab_title_template none + +#: Template to use for active tabs. If not specified falls back to +#: tab_title_template. + +# active_tab_foreground #000 +# active_tab_background #eee +# active_tab_font_style bold-italic +# inactive_tab_foreground #444 +# inactive_tab_background #999 +# inactive_tab_font_style normal + +#: Tab bar colors and styles. + +# tab_bar_background none + +#: Background color for the tab bar. Defaults to using the terminal +#: background color. + +# tab_bar_margin_color none + +#: Color for the tab bar margin area. Defaults to using the terminal +#: background color for margins above and below the tab bar. For side +#: margins the default color is chosen to match the background color +#: of the neighboring tab. + +#: }}} + +#: Color scheme {{{ + +# foreground #dddddd +# background #000000 + +#: The foreground and background colors. + +# background_opacity 1.0 + +#: The opacity of the background. A number between zero and one, where +#: one is opaque and zero is fully transparent. This will only work if +#: supported by the OS (for instance, when using a compositor under +#: X11). Note that it only sets the background color's opacity in +#: cells that have the same background color as the default terminal +#: background, so that things like the status bar in vim, powerline +#: prompts, etc. still look good. But it means that if you use a color +#: theme with a background color in your editor, it will not be +#: rendered as transparent. Instead you should change the default +#: background color in your kitty config and not use a background +#: color in the editor color scheme. Or use the escape codes to set +#: the terminals default colors in a shell script to launch your +#: editor. See also transparent_background_colors. Be aware that using +#: a value less than 1.0 is a (possibly significant) performance hit. +#: When using a low value for this setting, it is desirable that you +#: set the background color to a color the matches the general color +#: of the desktop background, for best text rendering. If you want to +#: dynamically change transparency of windows, set +#: dynamic_background_opacity to yes (this is off by default as it has +#: a performance cost). Changing this option when reloading the config +#: will only work if dynamic_background_opacity was enabled in the +#: original config. + +# background_blur 0 + +#: Set to a positive value to enable background blur (blurring of the +#: visuals behind a transparent window) on platforms that support it. +#: Only takes effect when background_opacity is less than one. On +#: macOS, this will also control the blur radius (amount of blurring). +#: Setting it to too high a value will cause severe performance issues +#: and/or rendering artifacts. Usually, values up to 64 work well. +#: Note that this might cause performance issues, depending on how the +#: platform implements it, so use with care. Currently supported on +#: macOS and KDE. + +# background_image none + +#: Path to a background image. Must be in PNG/JPEG/WEBP/TIFF/GIF/BMP +#: format. + +# background_image_layout tiled + +#: Whether to tile, scale or clamp the background image. The value can +#: be one of tiled, mirror-tiled, scaled, clamped, centered or +#: cscaled. The scaled and cscaled values scale the image to the +#: window size, with cscaled preserving the image aspect ratio. + +# background_image_linear no + +#: When background image is scaled, whether linear interpolation +#: should be used. + +# transparent_background_colors + +#: A space separated list of upto 7 colors, with opacity. When the +#: background color of a cell matches one of these colors, it is +#: rendered semi-transparent using the specified opacity. + +#: Useful in more complex UIs like editors where you could want more +#: than a single background color to be rendered as transparent, for +#: instance, for a cursor highlight line background or a highlighted +#: block. Terminal applications can set this color using The kitty +#: color control escape code. + +#: The syntax for specifiying colors is: color@opacity, where the +#: @opacity part is optional. When unspecified, the value of +#: background_opacity is used. For example:: + +#: transparent_background_colors red@0.5 #00ff00@0.3 + +# dynamic_background_opacity no + +#: Allow changing of the background_opacity dynamically, using either +#: keyboard shortcuts (increase_background_opacity and +#: decrease_background_opacity) or the remote control facility. +#: Changing this option by reloading the config is not supported. + +# background_tint 0.0 + +#: How much to tint the background image by the background color. This +#: option makes it easier to read the text. Tinting is done using the +#: current background color for each window. This option applies only +#: if background_opacity is set and transparent windows are supported +#: or background_image is set. + +# background_tint_gaps 1.0 + +#: How much to tint the background image at the window gaps by the +#: background color, after applying background_tint. Since this is +#: multiplicative with background_tint, it can be used to lighten the +#: tint over the window gaps for a *separated* look. + +# dim_opacity 0.4 + +#: How much to dim text that has the DIM/FAINT attribute set. One +#: means no dimming and zero means fully dimmed (i.e. invisible). + +# selection_foreground #000000 +# selection_background #fffacd + +#: The foreground and background colors for text selected with the +#: mouse. Setting both of these to none will cause a "reverse video" +#: effect for selections, where the selection will be the cell text +#: color and the text will become the cell background color. Setting +#: only selection_foreground to none will cause the foreground color +#: to be used unchanged. Note that these colors can be overridden by +#: the program running in the terminal. + +#: The color table {{{ + +#: The 256 terminal colors. There are 8 basic colors, each color has a +#: dull and bright version, for the first 16 colors. You can set the +#: remaining 240 colors as color16 to color255. + +# color0 #000000 +# color8 #767676 + +#: black + +# color1 #cc0403 +# color9 #f2201f + +#: red + +# color2 #19cb00 +# color10 #23fd00 + +#: green + +# color3 #cecb00 +# color11 #fffd00 + +#: yellow + +# color4 #0d73cc +# color12 #1a8fff + +#: blue + +# color5 #cb1ed1 +# color13 #fd28ff + +#: magenta + +# color6 #0dcdcd +# color14 #14ffff + +#: cyan + +# color7 #dddddd +# color15 #ffffff + +#: white + +# mark1_foreground black + +#: Color for marks of type 1 + +# mark1_background #98d3cb + +#: Color for marks of type 1 (light steel blue) + +# mark2_foreground black + +#: Color for marks of type 2 + +# mark2_background #f2dcd3 + +#: Color for marks of type 1 (beige) + +# mark3_foreground black + +#: Color for marks of type 3 + +# mark3_background #f274bc + +#: Color for marks of type 3 (violet) + +#: }}} + +#: }}} + +#: Advanced {{{ + +# shell . + +#: The shell program to execute. The default value of . means to use +#: the value of of the SHELL environment variable or if unset, +#: whatever shell is set as the default shell for the current user. +#: Note that on macOS if you change this, you might need to add +#: --login and --interactive to ensure that the shell starts in +#: interactive mode and reads its startup rc files. Environment +#: variables are expanded in this setting. + +# editor . + +#: The terminal based text editor (such as vim or nano) to use when +#: editing the kitty config file or similar tasks. + +#: The default value of . means to use the environment variables +#: VISUAL and EDITOR in that order. If these variables aren't set, +#: kitty will run your shell ($SHELL -l -i -c env) to see if your +#: shell startup rc files set VISUAL or EDITOR. If that doesn't work, +#: kitty will cycle through various known editors (vim, emacs, etc.) +#: and take the first one that exists on your system. + +# close_on_child_death no + +#: Close the window when the child process (usually the shell) exits. +#: With the default value no, the terminal will remain open when the +#: child exits as long as there are still other processes outputting +#: to the terminal (for example disowned or backgrounded processes). +#: When enabled with yes, the window will close as soon as the child +#: process exits. Note that setting it to yes means that any +#: background processes still using the terminal can fail silently +#: because their stdout/stderr/stdin no longer work. + +# remote_control_password + +#: Allow other programs to control kitty using passwords. This option +#: can be specified multiple times to add multiple passwords. If no +#: passwords are present kitty will ask the user for permission if a +#: program tries to use remote control with a password. A password can +#: also *optionally* be associated with a set of allowed remote +#: control actions. For example:: + +#: remote_control_password "my passphrase" get-colors set-colors focus-window focus-tab + +#: Only the specified actions will be allowed when using this +#: password. Glob patterns can be used too, for example:: + +#: remote_control_password "my passphrase" set-tab-* resize-* + +#: To get a list of available actions, run:: + +#: kitten @ --help + +#: A set of actions to be allowed when no password is sent can be +#: specified by using an empty password. For example:: + +#: remote_control_password "" *-colors + +#: Finally, the path to a python module can be specified that provides +#: a function is_cmd_allowed that is used to check every remote +#: control command. For example:: + +#: remote_control_password "my passphrase" my_rc_command_checker.py + +#: Relative paths are resolved from the kitty configuration directory. +#: See rc_custom_auth for details. + +# allow_remote_control no + +#: Allow other programs to control kitty. If you turn this on, other +#: programs can control all aspects of kitty, including sending text +#: to kitty windows, opening new windows, closing windows, reading the +#: content of windows, etc. Note that this even works over SSH +#: connections. The default setting of no prevents any form of remote +#: control. The meaning of the various values are: + +#: password +#: Remote control requests received over both the TTY device and the socket +#: are confirmed based on passwords, see remote_control_password. + +#: socket-only +#: Remote control requests received over a socket are accepted +#: unconditionally. Requests received over the TTY are denied. +#: See listen_on. + +#: socket +#: Remote control requests received over a socket are accepted +#: unconditionally. Requests received over the TTY are confirmed based on +#: password. + +#: no +#: Remote control is completely disabled. + +#: yes +#: Remote control requests are always accepted. + +# listen_on none + +#: Listen to the specified socket for remote control connections. Note +#: that this will apply to all kitty instances. It can be overridden +#: by the kitty --listen-on command line option. For UNIX sockets, +#: such as unix:${TEMP}/mykitty or unix:@mykitty (on Linux). +#: Environment variables are expanded and relative paths are resolved +#: with respect to the temporary directory. If {kitty_pid} is present, +#: then it is replaced by the PID of the kitty process, otherwise the +#: PID of the kitty process is appended to the value, with a hyphen. +#: For TCP sockets such as tcp:localhost:0 a random port is always +#: used even if a non-zero port number is specified. See the help for +#: kitty --listen-on for more details. Note that this will be ignored +#: unless allow_remote_control is set to either: yes, socket or +#: socket-only. Changing this option by reloading the config is not +#: supported. + +# env + +#: Specify the environment variables to be set in all child processes. +#: Using the name with an equal sign (e.g. env VAR=) will set it to +#: the empty string. Specifying only the name (e.g. env VAR) will +#: remove the variable from the child process' environment. Note that +#: environment variables are expanded recursively, for example:: + +#: env VAR1=a +#: env VAR2=${HOME}/${VAR1}/b + +#: The value of VAR2 will be /a/b. + +# filter_notification + +#: Specify rules to filter out notifications sent by applications +#: running in kitty. Can be specified multiple times to create +#: multiple filter rules. A rule specification is of the form +#: field:regexp. A filter rule can match on any of the fields: title, +#: body, app, type. The special value of all filters out all +#: notifications. Rules can be combined using Boolean operators. Some +#: examples:: + +#: filter_notification title:hello or body:"abc.*def" +#: # filter out notification from vim except for ones about updates, (?i) +#: # makes matching case insesitive. +#: filter_notification app:"[ng]?vim" and not body:"(?i)update" +#: # filter out all notifications +#: filter_notification all + +#: The field app is the name of the application sending the +#: notification and type is the type of the notification. Not all +#: applications will send these fields, so you can also match on the +#: title and body of the notification text. More sophisticated +#: programmatic filtering and custom actions on notifications can be +#: done by creating a notifications.py file in the kitty config +#: directory (~/.config/kitty). An annotated sample is available +#: . + +# watcher + +#: Path to python file which will be loaded for watchers +#: . Can be +#: specified more than once to load multiple watchers. The watchers +#: will be added to every kitty window. Relative paths are resolved +#: relative to the kitty config directory. Note that reloading the +#: config will only affect windows created after the reload. + +# exe_search_path + +#: Control where kitty finds the programs to run. The default search +#: order is: First search the system wide PATH, then ~/.local/bin and +#: ~/bin. If still not found, the PATH defined in the login shell +#: after sourcing all its startup files is tried. Finally, if present, +#: the PATH specified by the env option is tried. + +#: This option allows you to prepend, append, or remove paths from +#: this search order. It can be specified multiple times for multiple +#: paths. A simple path will be prepended to the search order. A path +#: that starts with the + sign will be append to the search order, +#: after ~/bin above. A path that starts with the - sign will be +#: removed from the entire search order. For example:: + +#: exe_search_path /some/prepended/path +#: exe_search_path +/some/appended/path +#: exe_search_path -/some/excluded/path + +# update_check_interval 24 + +#: The interval to periodically check if an update to kitty is +#: available (in hours). If an update is found, a system notification +#: is displayed informing you of the available update. The default is +#: to check every 24 hours, set to zero to disable. Update checking is +#: only done by the official binary builds. Distro packages or source +#: builds do not do update checking. Changing this option by reloading +#: the config is not supported. + +# startup_session none + +#: Path to a session file to use for all kitty instances. Can be +#: overridden by using the kitty --session =none command line option +#: for individual instances. See sessions +#: in the kitty +#: documentation for details. Note that relative paths are interpreted +#: with respect to the kitty config directory. Environment variables +#: in the path are expanded. Changing this option by reloading the +#: config is not supported. Note that if kitty is invoked with command +#: line arguments specifying a command to run, this option is ignored. + +# clipboard_control write-clipboard write-primary read-clipboard-ask read-primary-ask + +#: Allow programs running in kitty to read and write from the +#: clipboard. You can control exactly which actions are allowed. The +#: possible actions are: write-clipboard, read-clipboard, write- +#: primary, read-primary, read-clipboard-ask, read-primary-ask. The +#: default is to allow writing to the clipboard and primary selection +#: and to ask for permission when a program tries to read from the +#: clipboard. Note that disabling the read confirmation is a security +#: risk as it means that any program, even the ones running on a +#: remote server via SSH can read your clipboard. See also +#: clipboard_max_size. + +# clipboard_max_size 512 + +#: The maximum size (in MB) of data from programs running in kitty +#: that will be stored for writing to the system clipboard. A value of +#: zero means no size limit is applied. See also clipboard_control. + +# file_transfer_confirmation_bypass + +#: The password that can be supplied to the file transfer kitten +#: to skip the +#: transfer confirmation prompt. This should only be used when +#: initiating transfers from trusted computers, over trusted networks +#: or encrypted transports, as it allows any programs running on the +#: remote machine to read/write to the local filesystem, without +#: permission. + +# allow_hyperlinks yes + +#: Process hyperlink escape sequences (OSC 8). If disabled OSC 8 +#: escape sequences are ignored. Otherwise they become clickable +#: links, that you can click with the mouse or by using the hints +#: kitten . The +#: special value of ask means that kitty will ask before opening the +#: link when clicked. + +# shell_integration enabled + +#: Enable shell integration on supported shells. This enables features +#: such as jumping to previous prompts, browsing the output of the +#: previous command in a pager, etc. on supported shells. Set to +#: disabled to turn off shell integration, completely. It is also +#: possible to disable individual features, set to a space separated +#: list of these values: no-rc, no-cursor, no-title, no-cwd, no- +#: prompt-mark, no-complete, no-sudo. See Shell integration +#: for details. + +# allow_cloning ask + +#: Control whether programs running in the terminal can request new +#: windows to be created. The canonical example is clone-in-kitty +#: . +#: By default, kitty will ask for permission for each clone request. +#: Allowing cloning unconditionally gives programs running in the +#: terminal (including over SSH) permission to execute arbitrary code, +#: as the user who is running the terminal, on the computer that the +#: terminal is running on. + +# clone_source_strategies venv,conda,env_var,path + +#: Control what shell code is sourced when running clone-in-kitty in +#: the newly cloned window. The supported strategies are: + +#: venv +#: Source the file $VIRTUAL_ENV/bin/activate. This is used by the +#: Python stdlib venv module and allows cloning venvs automatically. +#: conda +#: Run conda activate $CONDA_DEFAULT_ENV. This supports the virtual +#: environments created by conda. +#: env_var +#: Execute the contents of the environment variable +#: KITTY_CLONE_SOURCE_CODE with eval. +#: path +#: Source the file pointed to by the environment variable +#: KITTY_CLONE_SOURCE_PATH. + +#: This option must be a comma separated list of the above values. +#: Only the first valid match, in the order specified, is sourced. + +# notify_on_cmd_finish never + +#: Show a desktop notification when a long-running command finishes +#: (needs shell_integration). The possible values are: + +#: never +#: Never send a notification. + +#: unfocused +#: Only send a notification when the window does not have keyboard focus. + +#: invisible +#: Only send a notification when the window both is unfocused and not visible +#: to the user, for example, because it is in an inactive tab or its OS window +#: is not currently active. + +#: always +#: Always send a notification, regardless of window state. + +#: There are two optional arguments: + +#: First, the minimum duration for what is considered a long running +#: command. The default is 5 seconds. Specify a second argument to set +#: the duration. For example: invisible 15. Do not set the value too +#: small, otherwise a command that launches a new OS Window and exits +#: will spam a notification. + +#: Second, the action to perform. The default is notify. The possible +#: values are: + +#: notify +#: Send a desktop notification. + +#: bell +#: Ring the terminal bell. + +#: command +#: Run a custom command. All subsequent arguments are the cmdline to run. + +#: Some more examples:: + +#: # Send a notification when a command takes more than 5 seconds in an unfocused window +#: notify_on_cmd_finish unfocused +#: # Send a notification when a command takes more than 10 seconds in a invisible window +#: notify_on_cmd_finish invisible 10.0 +#: # Ring a bell when a command takes more than 10 seconds in a invisible window +#: notify_on_cmd_finish invisible 10.0 bell +#: # Run 'notify-send' when a command takes more than 10 seconds in a invisible window +#: # Here %c is replaced by the current command line and %s by the job exit code +#: notify_on_cmd_finish invisible 10.0 command notify-send "job finished with status: %s" %c + +# term xterm-kitty + +#: The value of the TERM environment variable to set. Changing this +#: can break many terminal programs, only change it if you know what +#: you are doing, not because you read some advice on "Stack Overflow" +#: to change it. The TERM variable is used by various programs to get +#: information about the capabilities and behavior of the terminal. If +#: you change it, depending on what programs you run, and how +#: different the terminal you are changing it to is, various things +#: from key-presses, to colors, to various advanced features may not +#: work. Changing this option by reloading the config will only affect +#: newly created windows. + +# terminfo_type path + +#: The value of the TERMINFO environment variable to set. This +#: variable is used by programs running in the terminal to search for +#: terminfo databases. The default value of path causes kitty to set +#: it to a filesystem location containing the kitty terminfo database. +#: A value of direct means put the entire database into the env var +#: directly. This can be useful when connecting to containers, for +#: example. But, note that not all software supports this. A value of +#: none means do not touch the variable. + +# forward_stdio no + +#: Forward STDOUT and STDERR of the kitty process to child processes. +#: This is useful for debugging as it allows child processes to print +#: to kitty's STDOUT directly. For example, echo hello world +#: >&$KITTY_STDIO_FORWARDED in a shell will print to the parent +#: kitty's STDOUT. Sets the KITTY_STDIO_FORWARDED=fdnum environment +#: variable so child processes know about the forwarding. Note that on +#: macOS this prevents the shell from being run via the login utility +#: so getlogin() will not work in programs run in this session. + +# menu_map + +#: Specify entries for various menus in kitty. Currently only the +#: global menubar on macOS is supported. For example:: + +#: menu_map global "Actions::Launch something special" launch --hold --type=os-window sh -c "echo hello world" + +#: This will create a menu entry named "Launch something special" in +#: an "Actions" menu in the macOS global menubar. Sub-menus can be +#: created by adding more levels separated by the :: characters. + +#: }}} + +#: OS specific tweaks {{{ + +# wayland_titlebar_color system + +#: The color of the kitty window's titlebar on Wayland systems with +#: client side window decorations such as GNOME. A value of system +#: means to use the default system colors, a value of background means +#: to use the background color of the currently active kitty window +#: and finally you can use an arbitrary color, such as #12af59 or red. + +# macos_titlebar_color system + +#: The color of the kitty window's titlebar on macOS. A value of +#: system means to use the default system color, light or dark can +#: also be used to set it explicitly. A value of background means to +#: use the background color of the currently active window and finally +#: you can use an arbitrary color, such as #12af59 or red. WARNING: +#: This option works by using a hack when arbitrary color (or +#: background) is configured, as there is no proper Cocoa API for it. +#: It sets the background color of the entire window and makes the +#: titlebar transparent. As such it is incompatible with +#: background_opacity. If you want to use both, you are probably +#: better off just hiding the titlebar with hide_window_decorations. + +# macos_option_as_alt no + +#: Use the Option key as an Alt key on macOS. With this set to no, +#: kitty will use the macOS native Option+Key to enter Unicode +#: character behavior. This will break any Alt+Key keyboard shortcuts +#: in your terminal programs, but you can use the macOS Unicode input +#: technique. You can use the values: left, right or both to use only +#: the left, right or both Option keys as Alt, instead. Note that +#: kitty itself always treats Option the same as Alt. This means you +#: cannot use this option to configure different kitty shortcuts for +#: Option+Key vs. Alt+Key. Also, any kitty shortcuts using +#: Option/Alt+Key will take priority, so that any such key presses +#: will not be passed to terminal programs running inside kitty. +#: Changing this option by reloading the config is not supported. + +# macos_hide_from_tasks no + +#: Hide the kitty window from running tasks on macOS (⌘+Tab and the +#: Dock). Changing this option by reloading the config is not +#: supported. + +# macos_quit_when_last_window_closed no + +#: Have kitty quit when all the top-level windows are closed on macOS. +#: By default, kitty will stay running, even with no open windows, as +#: is the expected behavior on macOS. + +# macos_window_resizable yes + +#: Disable this if you want kitty top-level OS windows to not be +#: resizable on macOS. + +# macos_thicken_font 0 + +#: Draw an extra border around the font with the given width, to +#: increase legibility at small font sizes on macOS. For example, a +#: value of 0.75 will result in rendering that looks similar to sub- +#: pixel antialiasing at common font sizes. Note that in modern kitty, +#: this option is obsolete (although still supported). Consider using +#: text_composition_strategy instead. + +# macos_traditional_fullscreen no + +#: Use the macOS traditional full-screen transition, that is faster, +#: but less pretty. + +# macos_show_window_title_in all + +#: Control where the window title is displayed on macOS. A value of +#: window will show the title of the currently active window at the +#: top of the macOS window. A value of menubar will show the title of +#: the currently active window in the macOS global menu bar, making +#: use of otherwise wasted space. A value of all will show the title +#: in both places, and none hides the title. See +#: macos_menubar_title_max_length for how to control the length of the +#: title in the menu bar. + +# macos_menubar_title_max_length 0 + +#: The maximum number of characters from the window title to show in +#: the macOS global menu bar. Values less than one means that there is +#: no maximum limit. + +# macos_custom_beam_cursor no + +#: Use a custom mouse cursor for macOS that is easier to see on both +#: light and dark backgrounds. Nowadays, the default macOS cursor +#: already comes with a white border. WARNING: this might make your +#: mouse cursor invisible on dual GPU machines. Changing this option +#: by reloading the config is not supported. + +# macos_colorspace srgb + +#: The colorspace in which to interpret terminal colors. The default +#: of srgb will cause colors to match those seen in web browsers. The +#: value of default will use whatever the native colorspace of the +#: display is. The value of displayp3 will use Apple's special +#: snowflake display P3 color space, which will result in over +#: saturated (brighter) colors with some color shift. Reloading +#: configuration will change this value only for newly created OS +#: windows. + +# linux_display_server auto + +#: Choose between Wayland and X11 backends. By default, an appropriate +#: backend based on the system state is chosen automatically. Set it +#: to x11 or wayland to force the choice. Changing this option by +#: reloading the config is not supported. + +# wayland_enable_ime yes + +#: Enable Input Method Extension on Wayland. This is typically used +#: for inputting text in East Asian languages. However, its +#: implementation in Wayland is often buggy and introduces latency +#: into the input loop, so disable this if you know you dont need it. +#: Changing this option by reloading the config is not supported, it +#: will not have any effect. + +#: }}} + +#: Keyboard shortcuts {{{ + +#: Keys are identified simply by their lowercase Unicode characters. +#: For example: a for the A key, [ for the left square bracket key, +#: etc. For functional keys, such as Enter or Escape, the names are +#: present at Functional key definitions +#: . +#: For modifier keys, the names are ctrl (control, ⌃), shift (⇧), alt +#: (opt, option, ⌥), super (cmd, command, ⌘). + +#: Simple shortcut mapping is done with the map directive. For full +#: details on advanced mapping including modal and per application +#: maps, see mapping . Some +#: quick examples to illustrate common tasks:: + +#: # unmap a keyboard shortcut, passing it to the program running in kitty +#: map kitty_mod+space +#: # completely ignore a keyboard event +#: map ctrl+alt+f1 discard_event +#: # combine multiple actions +#: map kitty_mod+e combine : new_window : next_layout +#: # multi-key shortcuts +#: map ctrl+x>ctrl+y>z action + +#: The full list of actions that can be mapped to key presses is +#: available here . + +# kitty_mod ctrl+shift + +#: Special modifier key alias for default shortcuts. You can change +#: the value of this option to alter all default shortcuts that use +#: kitty_mod. + +# clear_all_shortcuts no + +#: Remove all shortcut definitions up to this point. Useful, for +#: instance, to remove the default shortcuts. + +# action_alias + +#: E.g. action_alias launch_tab launch --type=tab --cwd=current + +#: Define action aliases to avoid repeating the same options in +#: multiple mappings. Aliases can be defined for any action and will +#: be expanded recursively. For example, the above alias allows you to +#: create mappings to launch a new tab in the current working +#: directory without duplication:: + +#: map f1 launch_tab vim +#: map f2 launch_tab emacs + +#: Similarly, to alias kitten invocation:: + +#: action_alias hints kitten hints --hints-offset=0 + +# kitten_alias + +#: E.g. kitten_alias hints hints --hints-offset=0 + +#: Like action_alias above, but specifically for kittens. Generally, +#: prefer to use action_alias. This option is a legacy version, +#: present for backwards compatibility. It causes all invocations of +#: the aliased kitten to be substituted. So the example above will +#: cause all invocations of the hints kitten to have the --hints- +#: offset=0 option applied. + +#: Clipboard {{{ + +#: Copy to clipboard + +# map kitty_mod+c copy_to_clipboard +# map cmd+c copy_to_clipboard + +#:: There is also a copy_or_interrupt action that can be optionally +#:: mapped to Ctrl+C. It will copy only if there is a selection and +#:: send an interrupt otherwise. Similarly, +#:: copy_and_clear_or_interrupt will copy and clear the selection or +#:: send an interrupt if there is no selection. + +#: Paste from clipboard + +# map kitty_mod+v paste_from_clipboard +# map cmd+v paste_from_clipboard + +#: Paste from selection + +# map kitty_mod+s paste_from_selection +# map shift+insert paste_from_selection + +#: Pass selection to program + +# map kitty_mod+o pass_selection_to_program + +#:: You can also pass the contents of the current selection to any +#:: program with pass_selection_to_program. By default, the system's +#:: open program is used, but you can specify your own, the selection +#:: will be passed as a command line argument to the program. For +#:: example:: + +#:: map kitty_mod+o pass_selection_to_program firefox + +#:: You can pass the current selection to a terminal program running +#:: in a new kitty window, by using the @selection placeholder:: + +#:: map kitty_mod+y new_window less @selection + +#: }}} + +#: Scrolling {{{ + +#: Scroll line up + +# map kitty_mod+up scroll_line_up +# map kitty_mod+k scroll_line_up +# map opt+cmd+page_up scroll_line_up +# map cmd+up scroll_line_up + +#: Scroll line down + +# map kitty_mod+down scroll_line_down +# map kitty_mod+j scroll_line_down +# map opt+cmd+page_down scroll_line_down +# map cmd+down scroll_line_down + +#: Scroll page up + +# map kitty_mod+page_up scroll_page_up +# map cmd+page_up scroll_page_up + +#: Scroll page down + +# map kitty_mod+page_down scroll_page_down +# map cmd+page_down scroll_page_down + +#: Scroll to top + +# map kitty_mod+home scroll_home +# map cmd+home scroll_home + +#: Scroll to bottom + +# map kitty_mod+end scroll_end +# map cmd+end scroll_end + +#: Scroll to previous shell prompt + +# map kitty_mod+z scroll_to_prompt -1 + +#:: Use a parameter of 0 for scroll_to_prompt to scroll to the last +#:: jumped to or the last clicked position. Requires shell +#:: integration +#:: to work. + +#: Scroll to next shell prompt + +# map kitty_mod+x scroll_to_prompt 1 + +#: Browse scrollback buffer in pager + +# map kitty_mod+h show_scrollback + +#:: You can pipe the contents of the current screen and history +#:: buffer as STDIN to an arbitrary program using launch --stdin- +#:: source. For example, the following opens the scrollback buffer in +#:: less in an overlay window:: + +#:: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R + +#:: For more details on piping screen and buffer contents to external +#:: programs, see launch . + +#: Browse output of the last shell command in pager + +# map kitty_mod+g show_last_command_output + +#:: You can also define additional shortcuts to get the command +#:: output. For example, to get the first command output on screen:: + +#:: map f1 show_first_command_output_on_screen + +#:: To get the command output that was last accessed by a keyboard +#:: action or mouse action:: + +#:: map f1 show_last_visited_command_output + +#:: You can pipe the output of the last command run in the shell +#:: using the launch action. For example, the following opens the +#:: output in less in an overlay window:: + +#:: map f1 launch --stdin-source=@last_cmd_output --stdin-add-formatting --type=overlay less +G -R + +#:: To get the output of the first command on the screen, use +#:: @first_cmd_output_on_screen. To get the output of the last jumped +#:: to command, use @last_visited_cmd_output. + +#:: Requires shell integration +#:: to work. + +#: }}} + +#: Window management {{{ + +#: New window + +# map kitty_mod+enter new_window +# map cmd+enter new_window + +#:: You can open a new kitty window running an arbitrary program, for +#:: example:: + +#:: map kitty_mod+y launch mutt + +#:: You can open a new window with the current working directory set +#:: to the working directory of the current window using:: + +#:: map ctrl+alt+enter launch --cwd=current + +#:: You can open a new window that is allowed to control kitty via +#:: the kitty remote control facility with launch --allow-remote- +#:: control. Any programs running in that window will be allowed to +#:: control kitty. For example:: + +#:: map ctrl+enter launch --allow-remote-control some_program + +#:: You can open a new window next to the currently active window or +#:: as the first window, with:: + +#:: map ctrl+n launch --location=neighbor +#:: map ctrl+f launch --location=first + +#:: For more details, see launch +#:: . + +#: New OS window + +# map kitty_mod+n new_os_window +# map cmd+n new_os_window + +#:: Works like new_window above, except that it opens a top-level OS +#:: window. In particular you can use new_os_window_with_cwd to open +#:: a window with the current working directory. + +#: Close window + +# map kitty_mod+w close_window +# map shift+cmd+d close_window + +#: Next window + +# map kitty_mod+] next_window + +#: Previous window + +# map kitty_mod+[ previous_window + +#: Move window forward + +# map kitty_mod+f move_window_forward + +#: Move window backward + +# map kitty_mod+b move_window_backward + +#: Move window to top + +# map kitty_mod+` move_window_to_top + +#: Start resizing window + +# map kitty_mod+r start_resizing_window +# map cmd+r start_resizing_window + +#: First window + +# map kitty_mod+1 first_window +# map cmd+1 first_window + +#: Second window + +# map kitty_mod+2 second_window +# map cmd+2 second_window + +#: Third window + +# map kitty_mod+3 third_window +# map cmd+3 third_window + +#: Fourth window + +# map kitty_mod+4 fourth_window +# map cmd+4 fourth_window + +#: Fifth window + +# map kitty_mod+5 fifth_window +# map cmd+5 fifth_window + +#: Sixth window + +# map kitty_mod+6 sixth_window +# map cmd+6 sixth_window + +#: Seventh window + +# map kitty_mod+7 seventh_window +# map cmd+7 seventh_window + +#: Eighth window + +# map kitty_mod+8 eighth_window +# map cmd+8 eighth_window + +#: Ninth window + +# map kitty_mod+9 ninth_window +# map cmd+9 ninth_window + +#: Tenth window + +# map kitty_mod+0 tenth_window + +#: Visually select and focus window + +# map kitty_mod+f7 focus_visible_window + +#:: Display overlay numbers and alphabets on the window, and switch +#:: the focus to the window when you press the key. When there are +#:: only two windows, the focus will be switched directly without +#:: displaying the overlay. You can change the overlay characters and +#:: their order with option visual_window_select_characters. + +#: Visually swap window with another + +# map kitty_mod+f8 swap_with_window + +#:: Works like focus_visible_window above, but swaps the window. + +#: }}} + +#: Tab management {{{ + +#: Next tab + +# map kitty_mod+right next_tab +# map shift+cmd+] next_tab +# map ctrl+tab next_tab + +#: Previous tab + +# map kitty_mod+left previous_tab +# map shift+cmd+[ previous_tab +# map ctrl+shift+tab previous_tab + +#: New tab + +# map kitty_mod+t new_tab +# map cmd+t new_tab + +#: Close tab + +# map kitty_mod+q close_tab +# map cmd+w close_tab + +#: Close OS window + +# map shift+cmd+w close_os_window + +#: Move tab forward + +# map kitty_mod+. move_tab_forward + +#: Move tab backward + +# map kitty_mod+, move_tab_backward + +#: Set tab title + +# map kitty_mod+alt+t set_tab_title +# map shift+cmd+i set_tab_title + + +#: You can also create shortcuts to go to specific tabs, with 1 being +#: the first tab, 2 the second tab and -1 being the previously active +#: tab, -2 being the tab active before the previously active tab and +#: so on. Any number larger than the number of tabs goes to the last +#: tab and any number less than the number of previously used tabs in +#: the history goes to the oldest previously used tab in the history:: + +#: map ctrl+alt+1 goto_tab 1 +#: map ctrl+alt+2 goto_tab 2 + +#: Just as with new_window above, you can also pass the name of +#: arbitrary commands to run when using new_tab and new_tab_with_cwd. +#: Finally, if you want the new tab to open next to the current tab +#: rather than at the end of the tabs list, use:: + +#: map ctrl+t new_tab !neighbor [optional cmd to run] +#: }}} + +#: Layout management {{{ + +#: Next layout + +# map kitty_mod+l next_layout + + +#: You can also create shortcuts to switch to specific layouts:: + +#: map ctrl+alt+t goto_layout tall +#: map ctrl+alt+s goto_layout stack + +#: Similarly, to switch back to the previous layout:: + +#: map ctrl+alt+p last_used_layout + +#: There is also a toggle_layout action that switches to the named +#: layout or back to the previous layout if in the named layout. +#: Useful to temporarily "zoom" the active window by switching to the +#: stack layout:: + +#: map ctrl+alt+z toggle_layout stack +#: }}} + +#: Font sizes {{{ + +#: You can change the font size for all top-level kitty OS windows at +#: a time or only the current one. + +#: Increase font size + +# map kitty_mod+equal change_font_size all +2.0 +# map kitty_mod+plus change_font_size all +2.0 +# map kitty_mod+kp_add change_font_size all +2.0 +# map cmd+plus change_font_size all +2.0 +# map cmd+equal change_font_size all +2.0 +# map shift+cmd+equal change_font_size all +2.0 + +#: Decrease font size + +# map kitty_mod+minus change_font_size all -2.0 +# map kitty_mod+kp_subtract change_font_size all -2.0 +# map cmd+minus change_font_size all -2.0 +# map shift+cmd+minus change_font_size all -2.0 + +#: Reset font size + +# map kitty_mod+backspace change_font_size all 0 +# map cmd+0 change_font_size all 0 + + +#: To setup shortcuts for specific font sizes:: + +#: map kitty_mod+f6 change_font_size all 10.0 + +#: To setup shortcuts to change only the current OS window's font +#: size:: + +#: map kitty_mod+f6 change_font_size current 10.0 +#: }}} + +#: Select and act on visible text {{{ + +#: Use the hints kitten to select text and either pass it to an +#: external program or insert it into the terminal or copy it to the +#: clipboard. + +#: Open URL + +# map kitty_mod+e open_url_with_hints + +#:: Open a currently visible URL using the keyboard. The program used +#:: to open the URL is specified in open_url_with. + +#: Insert selected path + +# map kitty_mod+p>f kitten hints --type path --program - + +#:: Select a path/filename and insert it into the terminal. Useful, +#:: for instance to run git commands on a filename output from a +#:: previous git command. + +#: Open selected path + +# map kitty_mod+p>shift+f kitten hints --type path + +#:: Select a path/filename and open it with the default open program. + +#: Insert selected line + +# map kitty_mod+p>l kitten hints --type line --program - + +#:: Select a line of text and insert it into the terminal. Useful for +#:: the output of things like: `ls -1`. + +#: Insert selected word + +# map kitty_mod+p>w kitten hints --type word --program - + +#:: Select words and insert into terminal. + +#: Insert selected hash + +# map kitty_mod+p>h kitten hints --type hash --program - + +#:: Select something that looks like a hash and insert it into the +#:: terminal. Useful with git, which uses SHA1 hashes to identify +#:: commits. + +#: Open the selected file at the selected line + +# map kitty_mod+p>n kitten hints --type linenum + +#:: Select something that looks like filename:linenum and open it in +#:: your default editor at the specified line number. + +#: Open the selected hyperlink + +# map kitty_mod+p>y kitten hints --type hyperlink + +#:: Select a hyperlink (i.e. a URL that has been marked as such by +#:: the terminal program, for example, by `ls --hyperlink=auto`). + + +#: The hints kitten has many more modes of operation that you can map +#: to different shortcuts. For a full description see hints kitten +#: . +#: }}} + +#: Miscellaneous {{{ + +#: Show documentation + +# map kitty_mod+f1 show_kitty_doc overview + +#: Toggle fullscreen + +# map kitty_mod+f11 toggle_fullscreen +# map ctrl+cmd+f toggle_fullscreen + +#: Toggle maximized + +# map kitty_mod+f10 toggle_maximized + +#: Toggle macOS secure keyboard entry + +# map opt+cmd+s toggle_macos_secure_keyboard_entry + +#: Unicode input + +# map kitty_mod+u kitten unicode_input +# map ctrl+cmd+space kitten unicode_input + +#: Edit config file + +# map kitty_mod+f2 edit_config_file +# map cmd+, edit_config_file + +#: Open the kitty command shell + +# map kitty_mod+escape kitty_shell window + +#:: Open the kitty shell in a new window / tab / overlay / os_window +#:: to control kitty using commands. + +#: Increase background opacity + +# map kitty_mod+a>m set_background_opacity +0.1 + +#: Decrease background opacity + +# map kitty_mod+a>l set_background_opacity -0.1 + +#: Make background fully opaque + +# map kitty_mod+a>1 set_background_opacity 1 + +#: Reset background opacity + +# map kitty_mod+a>d set_background_opacity default + +#: Reset the terminal + +# map kitty_mod+delete clear_terminal reset active +# map opt+cmd+r clear_terminal reset active + +#:: You can create shortcuts to clear/reset the terminal. For +#:: example:: + +#:: # Reset the terminal +#:: map f1 clear_terminal reset active +#:: # Clear the terminal screen by erasing all contents +#:: map f1 clear_terminal clear active +#:: # Clear the terminal scrollback by erasing it +#:: map f1 clear_terminal scrollback active +#:: # Scroll the contents of the screen into the scrollback +#:: map f1 clear_terminal scroll active +#:: # Clear everything on screen up to the line with the cursor or the start of the current prompt (needs shell integration) +#:: map f1 clear_terminal to_cursor active +#:: # Same as above except cleared lines are moved into scrollback +#:: map f1 clear_terminal to_cursor_scroll active + +#:: If you want to operate on all kitty windows instead of just the +#:: current one, use all instead of active. + +#:: Some useful functions that can be defined in the shell rc files +#:: to perform various kinds of clearing of the current window: + +#:: .. code-block:: sh + +#:: clear-only-screen() { +#:: printf "\e[H\e[2J" +#:: } + +#:: clear-screen-and-scrollback() { +#:: printf "\e[H\e[3J" +#:: } + +#:: clear-screen-saving-contents-in-scrollback() { +#:: printf "\e[H\e[22J" +#:: } + +#:: For instance, using these escape codes, it is possible to remap +#:: Ctrl+L to both scroll the current screen contents into the +#:: scrollback buffer and clear the screen, instead of just clearing +#:: the screen. For ZSH, in ~/.zshrc, add: + +#:: .. code-block:: zsh + +#:: ctrl_l() { +#:: builtin print -rn -- $'\r\e[0J\e[H\e[22J' >"$TTY" +#:: builtin zle .reset-prompt +#:: builtin zle -R +#:: } +#:: zle -N ctrl_l +#:: bindkey '^l' ctrl_l + +#:: Alternatively, you can just add map ctrl+l clear_terminal +#:: to_cursor_scroll active to kitty.conf which works with no changes +#:: to the shell rc files, but only clears up to the prompt, it does +#:: not clear anytext at the prompt itself. + +#: Clear up to cursor line + +# map cmd+k clear_terminal to_cursor active + +#: Reload kitty.conf + +# map kitty_mod+f5 load_config_file +# map ctrl+cmd+, load_config_file + +#:: Reload kitty.conf, applying any changes since the last time it +#:: was loaded. Note that a handful of options cannot be dynamically +#:: changed and require a full restart of kitty. Particularly, when +#:: changing shortcuts for actions located on the macOS global menu +#:: bar, a full restart is needed. You can also map a keybinding to +#:: load a different config file, for example:: + +#:: map f5 load_config /path/to/alternative/kitty.conf + +#:: Note that all options from the original kitty.conf are discarded, +#:: in other words the new configuration *replace* the old ones. + +#: Debug kitty configuration + +# map kitty_mod+f6 debug_config +# map opt+cmd+, debug_config + +#:: Show details about exactly what configuration kitty is running +#:: with and its host environment. Useful for debugging issues. + +#: Send arbitrary text on key presses + +#:: E.g. map ctrl+shift+alt+h send_text all Hello World + +#:: You can tell kitty to send arbitrary (UTF-8) encoded text to the +#:: client program when pressing specified shortcut keys. For +#:: example:: + +#:: map ctrl+alt+a send_text all Special text + +#:: This will send "Special text" when you press the Ctrl+Alt+A key +#:: combination. The text to be sent decodes ANSI C escapes +#:: so you can use escapes like \e to send control +#:: codes or \u21fb to send Unicode characters (or you can just input +#:: the Unicode characters directly as UTF-8 text). You can use +#:: `kitten show-key` to get the key escape codes you want to +#:: emulate. + +#:: The first argument to send_text is the keyboard modes in which to +#:: activate the shortcut. The possible values are normal, +#:: application, kitty or a comma separated combination of them. The +#:: modes normal and application refer to the DECCKM cursor key mode +#:: for terminals, and kitty refers to the kitty extended keyboard +#:: protocol. The special value all means all of them. + +#:: Some more examples:: + +#:: # Output a word and move the cursor to the start of the line (like typing and pressing Home) +#:: map ctrl+alt+a send_text normal Word\e[H +#:: map ctrl+alt+a send_text application Word\eOH +#:: # Run a command at a shell prompt (like typing the command and pressing Enter) +#:: map ctrl+alt+a send_text normal,application some command with arguments\r + +#: Open kitty Website + +# map shift+cmd+/ open_url https://sw.kovidgoyal.net/kitty/ + +#: Hide macOS kitty application + +# map cmd+h hide_macos_app + +#: Hide macOS other applications + +# map opt+cmd+h hide_macos_other_apps + +#: Minimize macOS window + +# map cmd+m minimize_macos_window + +#: Quit kitty + +# map cmd+q quit + +#: }}} + +#: }}} diff --git a/general/configs/mpv/fonts/Material-Design-Iconic-Font.ttf b/general/configs/mpv/fonts/Material-Design-Iconic-Font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5d489fdd1a04cf2169af5e4d29d2929432a73f04 GIT binary patch literal 99212 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 Bf0O_K literal 0 HcmV?d00001 diff --git a/general/configs/mpv/scripts/modernx.lua b/general/configs/mpv/scripts/modernx.lua new file mode 100644 index 0000000..dce1d49 --- /dev/null +++ b/general/configs/mpv/scripts/modernx.lua @@ -0,0 +1,2742 @@ +-- mpv-osc-modern by maoiscat +-- email:valarmor@163.com +-- https://github.com/maoiscat/mpv-osc-modern + +-- fork by cyl0 +-- https://github.com/cyl0/ModernX/ + +local assdraw = require 'mp.assdraw' +local msg = require 'mp.msg' +local opt = require 'mp.options' +local utils = require 'mp.utils' + +-- +-- Parameters +-- +-- default user option values +-- may change them in osc.conf +local user_opts = { + showwindowed = true, -- show OSC when windowed? + showfullscreen = true, -- show OSC when fullscreen? + idlescreen = true, -- draw logo and text when idle + scalewindowed = 1.0, -- scaling of the controller when windowed + scalefullscreen = 1.0, -- scaling of the controller when fullscreen + scaleforcedwindow = 2.0, -- scaling when rendered on a forced window + vidscale = true, -- scale the controller with the video? + hidetimeout = 1500, -- duration in ms until the OSC hides if no + -- mouse movement. enforced non-negative for the + -- user, but internally negative is 'always-on'. + fadeduration = 250, -- duration of fade out in ms, 0 = no fade + minmousemove = 1, -- minimum amount of pixels the mouse has to + -- move between ticks to make the OSC show up + iamaprogrammer = false, -- use native mpv values and disable OSC + -- internal track list management (and some + -- functions that depend on it) + font = 'mpv-osd-symbols', -- default osc font + seekbarhandlesize = 1.0, -- size ratio of the slider handle, range 0 ~ 1 + seekrange = true, -- show seekrange overlay + seekrangealpha = 64, -- transparency of seekranges + seekbarkeyframes = true, -- use keyframes when dragging the seekbar + showjump = true, -- show "jump forward/backward 5 seconds" buttons + -- shift+left-click to step 1 frame and + -- right-click to jump 1 minute + jumpamount = 5, -- change the jump amount (in seconds by default) + jumpiconnumber = true, -- show different icon when jumpamount is 5, 10, or 30 + jumpmode = 'exact', -- seek mode for jump buttons. e.g. + -- 'exact', 'relative+keyframes', etc. + title = '${media-title}', -- string compatible with property-expansion + -- to be shown as OSC title + showtitle = true, -- show title in OSC + showonpause = true, -- whether to disable the hide timeout on pause + timetotal = true, -- display total time instead of remaining time? + timems = false, -- Display time down to millliseconds by default + visibility = 'auto', -- only used at init to set visibility_mode(...) + windowcontrols = 'auto', -- whether to show window controls + greenandgrumpy = false, -- disable santa hat + language = 'eng', -- eng=English, chs=Chinese + volumecontrol = true, -- whether to show mute button and volume slider + keyboardnavigation = false, -- enable directional keyboard navigation + chapter_fmt = "Chapter: %s", -- chapter print format for seekbar-hover. "no" to disable +} + +-- Icons for jump button depending on jumpamount +local jumpicons = { + [5] = {'\239\142\177', '\239\142\163'}, + [10] = {'\239\142\175', '\239\142\161'}, + [30] = {'\239\142\176', '\239\142\162'}, + default = {'\239\142\178 ', '\239\142\178'}, -- second icon is mirrored in layout() +} + +local icons = { + previous = '\239\142\181', + next = '\239\142\180', + play = '\239\142\170', + pause = '\239\142\167', + backward = '\239\142\160', + forward = '\239\142\159', + audio = '\239\142\183', + volume = '\239\142\188', + volume_mute = '\239\142\187', + sub = '\239\143\147', + minimize = '\239\133\172', + fullscreen = '\239\133\173', + info = '', +} + +-- Localization +local language = { + ['eng'] = { + welcome = '{\\fs24\\1c&H0&\\1c&HFFFFFF&}Drop files or URLs to play here.', -- this text appears when mpv starts + off = 'OFF', + na = 'n/a', + none = 'none', + video = 'Video', + audio = 'Audio', + subtitle = 'Subtitle', + available = 'Available ', + track = ' Tracks:', + playlist = 'Playlist', + nolist = 'Empty playlist.', + chapter = 'Chapter', + nochapter = 'No chapters.', + }, + ['chs'] = { + welcome = '{\\1c&H00\\bord0\\fs30\\fn微软雅黑 light\\fscx125}MPV{\\fscx100} 播放器', -- this text appears when mpv starts + off = '关闭', + na = 'n/a', + none = '无', + video = '视频', + audio = '音频', + subtitle = '字幕', + available = '可选', + track = ':', + playlist = '播放列表', + nolist = '无列表信息', + chapter = '章节', + nochapter = '无章节信息', + }, + ['pl'] = { + welcome = '{\\fs24\\1c&H0&\\1c&HFFFFFF&}Upuść plik lub łącze URL do odtworzenia.', -- this text appears when mpv starts + off = 'WYŁ.', + na = 'n/a', + none = 'nic', + video = 'Wideo', + audio = 'Ścieżka audio', + subtitle = 'Napisy', + available = 'Dostępne ', + track = ' Ścieżki:', + playlist = 'Lista odtwarzania', + nolist = 'Lista odtwarzania pusta.', + chapter = 'Rozdział', + nochapter = 'Brak rozdziałów.', + } +} +-- read options from config and command-line +opt.read_options(user_opts, 'osc', function(list) update_options(list) end) +-- apply lang opts +local texts = language[user_opts.language] +local osc_param = { -- calculated by osc_init() + playresy = 0, -- canvas size Y + playresx = 0, -- canvas size X + display_aspect = 1, + unscaled_y = 0, + areas = {}, +} + +local osc_styles = { + TransBg = '{\\blur100\\bord150\\1c&H000000&\\3c&H000000&}', + SeekbarBg = '{\\blur0\\bord0\\1c&HFFFFFF&}', + SeekbarFg = '{\\blur1\\bord1\\1c&HE39C42&}', + VolumebarBg = '{\\blur0\\bord0\\1c&H999999&}', + VolumebarFg = '{\\blur1\\bord1\\1c&HFFFFFF&}', + Ctrl1 = '{\\blur0\\bord0\\1c&HFFFFFF&\\3c&HFFFFFF&\\fs36\\fnmaterial-design-iconic-font}', + Ctrl2 = '{\\blur0\\bord0\\1c&HFFFFFF&\\3c&HFFFFFF&\\fs24\\fnmaterial-design-iconic-font}', + Ctrl2Flip = '{\\blur0\\bord0\\1c&HFFFFFF&\\3c&HFFFFFF&\\fs24\\fnmaterial-design-iconic-font\\fry180', + Ctrl3 = '{\\blur0\\bord0\\1c&HFFFFFF&\\3c&HFFFFFF&\\fs24\\fnmaterial-design-iconic-font}', + Time = '{\\blur0\\bord0\\1c&HFFFFFF&\\3c&H000000&\\fs17\\fn' .. user_opts.font .. '}', + Tooltip = '{\\blur1\\bord0.5\\1c&HFFFFFF&\\3c&H000000&\\fs18\\fn' .. user_opts.font .. '}', + Title = '{\\blur1\\bord0.5\\1c&HFFFFFF&\\3c&H0\\fs38\\q2\\fn' .. user_opts.font .. '}', + WinCtrl = '{\\blur1\\bord0.5\\1c&HFFFFFF&\\3c&H0\\fs20\\fnmpv-osd-symbols}', + elementDown = '{\\1c&H999999&}', + elementHighlight = '{\\blur1\\bord1\\1c&HFFC033&}', +} + +-- internal states, do not touch +local state = { + showtime, -- time of last invocation (last mouse move) + osc_visible = false, + anistart, -- time when the animation started + anitype, -- current type of animation + animation, -- current animation alpha + mouse_down_counter = 0, -- used for softrepeat + active_element = nil, -- nil = none, 0 = background, 1+ = see elements[] + active_event_source = nil, -- the 'button' that issued the current event + rightTC_trem = not user_opts.timetotal, -- if the right timecode should display total or remaining time + mp_screen_sizeX, mp_screen_sizeY, -- last screen-resolution, to detect resolution changes to issue reINITs + initREQ = false, -- is a re-init request pending? + last_mouseX, last_mouseY, -- last mouse position, to detect significant mouse movement + mouse_in_window = false, + message_text, + message_hide_timer, + fullscreen = false, + tick_timer = nil, + tick_last_time = 0, -- when the last tick() was run + hide_timer = nil, + cache_state = nil, + idle = false, + enabled = true, + input_enabled = true, + showhide_enabled = false, + dmx_cache = 0, + border = true, + maximized = false, + osd = mp.create_osd_overlay('ass-events'), + mute = false, + lastvisibility = user_opts.visibility, -- save last visibility on pause if showonpause + fulltime = user_opts.timems, + highlight_element = 'cy_audio', + chapter_list = {}, -- sorted by time +} + +local thumbfast = { + width = 0, + height = 0, + disabled = true, + available = false +} + +local window_control_box_width = 138 +local tick_delay = 0.03 + +local is_december = os.date("*t").month == 12 + +--- Automatically disable OSC +local builtin_osc_enabled = mp.get_property_native('osc') +if builtin_osc_enabled then + mp.set_property_native('osc', false) +end + +-- + + +-- WindowControl helpers +function window_controls_enabled() + val = user_opts.windowcontrols + if val == 'auto' then + return (not state.border) or state.fullscreen + else + return val ~= 'no' + end +end + + + +function build_keyboard_controls() + + -- prepare the main button row + local bottom_button_line = {} + table.insert(bottom_button_line, 'cy_audio') + table.insert(bottom_button_line, 'cy_sub') + table.insert(bottom_button_line, 'pl_prev') + table.insert(bottom_button_line, 'skipback') + if user_opts.showjump then + table.insert(bottom_button_line, 'jumpback') + end + table.insert(bottom_button_line, 'playpause') + if user_opts.showjump then + table.insert(bottom_button_line, 'jumpfrwd') + end + table.insert(bottom_button_line, 'skipfrwd') + table.insert(bottom_button_line, 'pl_next') + table.insert(bottom_button_line, 'tog_info') + table.insert(bottom_button_line, 'tog_fs') + + -- build up the main mapping object + local mapping = {} + if window_controls_enabled() then + table.insert(mapping, { + 'minimize', + 'maximize', + 'close' + }) + end + table.insert(mapping, { + 'seekbar' + }) + table.insert(mapping, bottom_button_line) + + return mapping +end + + +-- +-- Helperfunctions +-- + +function set_osd(res_x, res_y, text) + if state.osd.res_x == res_x and + state.osd.res_y == res_y and + state.osd.data == text then + return + end + state.osd.res_x = res_x + state.osd.res_y = res_y + state.osd.data = text + state.osd.z = 1000 + state.osd:update() +end + +-- scale factor for translating between real and virtual ASS coordinates +function get_virt_scale_factor() + local w, h = mp.get_osd_size() + if w <= 0 or h <= 0 then + return 0, 0 + end + return osc_param.playresx / w, osc_param.playresy / h +end + +-- return mouse position in virtual ASS coordinates (playresx/y) +function get_virt_mouse_pos() + if state.mouse_in_window then + local sx, sy = get_virt_scale_factor() + local x, y = mp.get_mouse_pos() + return x * sx, y * sy + else + return -1, -1 + end +end + +function set_virt_mouse_area(x0, y0, x1, y1, name) + local sx, sy = get_virt_scale_factor() + mp.set_mouse_area(x0 / sx, y0 / sy, x1 / sx, y1 / sy, name) +end + +function scale_value(x0, x1, y0, y1, val) + local m = (y1 - y0) / (x1 - x0) + local b = y0 - (m * x0) + return (m * val) + b +end + +-- returns hitbox spanning coordinates (top left, bottom right corner) +-- according to alignment +function get_hitbox_coords(x, y, an, w, h) + + local alignments = { + [1] = function () return x, y-h, x+w, y end, + [2] = function () return x-(w/2), y-h, x+(w/2), y end, + [3] = function () return x-w, y-h, x, y end, + + [4] = function () return x, y-(h/2), x+w, y+(h/2) end, + [5] = function () return x-(w/2), y-(h/2), x+(w/2), y+(h/2) end, + [6] = function () return x-w, y-(h/2), x, y+(h/2) end, + + [7] = function () return x, y, x+w, y+h end, + [8] = function () return x-(w/2), y, x+(w/2), y+h end, + [9] = function () return x-w, y, x, y+h end, + } + + return alignments[an]() +end + +function get_hitbox_coords_geo(geometry) + return get_hitbox_coords(geometry.x, geometry.y, geometry.an, + geometry.w, geometry.h) +end + +function get_element_hitbox(element) + return element.hitbox.x1, element.hitbox.y1, + element.hitbox.x2, element.hitbox.y2 +end + +function mouse_hit(element) + return mouse_hit_coords(get_element_hitbox(element)) +end + +function mouse_hit_coords(bX1, bY1, bX2, bY2) + local mX, mY = get_virt_mouse_pos() + return (mX >= bX1 and mX <= bX2 and mY >= bY1 and mY <= bY2) +end + +function limit_range(min, max, val) + if val > max then + val = max + elseif val < min then + val = min + end + return val +end + +-- translate value into element coordinates +function get_slider_ele_pos_for(element, val) + + local ele_pos = scale_value( + element.slider.min.value, element.slider.max.value, + element.slider.min.ele_pos, element.slider.max.ele_pos, + val) + + return limit_range( + element.slider.min.ele_pos, element.slider.max.ele_pos, + ele_pos) +end + +-- translates global (mouse) coordinates to value +function get_slider_value_at(element, glob_pos) + + local val = scale_value( + element.slider.min.glob_pos, element.slider.max.glob_pos, + element.slider.min.value, element.slider.max.value, + glob_pos) + + return limit_range( + element.slider.min.value, element.slider.max.value, + val) +end + +-- get value at current mouse position +function get_slider_value(element) + return get_slider_value_at(element, get_virt_mouse_pos()) +end + +function countone(val) + if not (user_opts.iamaprogrammer) then + val = val + 1 + end + return val +end + +-- multiplies two alpha values, formular can probably be improved +function mult_alpha(alphaA, alphaB) + return 255 - (((1-(alphaA/255)) * (1-(alphaB/255))) * 255) +end + +function add_area(name, x1, y1, x2, y2) + -- create area if needed + if (osc_param.areas[name] == nil) then + osc_param.areas[name] = {} + end + table.insert(osc_param.areas[name], {x1=x1, y1=y1, x2=x2, y2=y2}) +end + +function ass_append_alpha(ass, alpha, modifier) + local ar = {} + + for ai, av in pairs(alpha) do + av = mult_alpha(av, modifier) + if state.animation then + av = mult_alpha(av, state.animation) + end + ar[ai] = av + end + + ass:append(string.format('{\\1a&H%X&\\2a&H%X&\\3a&H%X&\\4a&H%X&}', + ar[1], ar[2], ar[3], ar[4])) +end + +function ass_draw_cir_cw(ass, x, y, r) + ass:round_rect_cw(x-r, y-r, x+r, y+r, r) +end + +function ass_draw_rr_h_cw(ass, x0, y0, x1, y1, r1, hexagon, r2) + if hexagon then + ass:hexagon_cw(x0, y0, x1, y1, r1, r2) + else + ass:round_rect_cw(x0, y0, x1, y1, r1, r2) + end +end + +function ass_draw_rr_h_ccw(ass, x0, y0, x1, y1, r1, hexagon, r2) + if hexagon then + ass:hexagon_ccw(x0, y0, x1, y1, r1, r2) + else + ass:round_rect_ccw(x0, y0, x1, y1, r1, r2) + end +end + + +-- +-- Tracklist Management +-- + +local nicetypes = {video = texts.video, audio = texts.audio, sub = texts.subtitle} + +-- updates the OSC internal playlists, should be run each time the track-layout changes +function update_tracklist() + local tracktable = mp.get_property_native('track-list', {}) + + -- by osc_id + tracks_osc = {} + tracks_osc.video, tracks_osc.audio, tracks_osc.sub = {}, {}, {} + -- by mpv_id + tracks_mpv = {} + tracks_mpv.video, tracks_mpv.audio, tracks_mpv.sub = {}, {}, {} + for n = 1, #tracktable do + if not (tracktable[n].type == 'unknown') then + local type = tracktable[n].type + local mpv_id = tonumber(tracktable[n].id) + + -- by osc_id + table.insert(tracks_osc[type], tracktable[n]) + + -- by mpv_id + tracks_mpv[type][mpv_id] = tracktable[n] + tracks_mpv[type][mpv_id].osc_id = #tracks_osc[type] + end + end +end + +-- return a nice list of tracks of the given type (video, audio, sub) +function get_tracklist(type) + local msg = texts.available .. nicetypes[type] .. texts.track + if #tracks_osc[type] == 0 then + msg = msg .. texts.none + else + for n = 1, #tracks_osc[type] do + local track = tracks_osc[type][n] + local lang, title, selected = 'unknown', '', '○' + if not(track.lang == nil) then lang = track.lang end + if not(track.title == nil) then title = track.title end + if (track.id == tonumber(mp.get_property(type))) then + selected = '●' + end + msg = msg..'\n'..selected..' '..n..': ['..lang..'] '..title + end + end + return msg +end + +-- relatively change the track of given by tracks + --(+1 -> next, -1 -> previous) +function set_track(type, next) + local current_track_mpv, current_track_osc + if (mp.get_property(type) == 'no') then + current_track_osc = 0 + else + current_track_mpv = tonumber(mp.get_property(type)) + current_track_osc = tracks_mpv[type][current_track_mpv].osc_id + end + local new_track_osc = (current_track_osc + next) % (#tracks_osc[type] + 1) + local new_track_mpv + if new_track_osc == 0 then + new_track_mpv = 'no' + else + new_track_mpv = tracks_osc[type][new_track_osc].id + end + + mp.commandv('set', type, new_track_mpv) + +-- if (new_track_osc == 0) then +-- show_message(nicetypes[type] .. ' Track: none') +-- else +-- show_message(nicetypes[type] .. ' Track: ' +-- .. new_track_osc .. '/' .. #tracks_osc[type] +-- .. ' ['.. (tracks_osc[type][new_track_osc].lang or 'unknown') ..'] ' +-- .. (tracks_osc[type][new_track_osc].title or '')) +-- end +end + +-- get the currently selected track of , OSC-style counted +function get_track(type) + local track = mp.get_property(type) + if track ~= 'no' and track ~= nil then + local tr = tracks_mpv[type][tonumber(track)] + if tr then + return tr.osc_id + end + end + return 0 +end + +-- +-- Element Management +-- + +local elements = {} + +function prepare_elements() + + -- remove elements without layout or invisble + local elements2 = {} + for n, element in pairs(elements) do + if not (element.layout == nil) and (element.visible) then + table.insert(elements2, element) + end + end + elements = elements2 + + function elem_compare (a, b) + return a.layout.layer < b.layout.layer + end + + table.sort(elements, elem_compare) + + + for _,element in pairs(elements) do + + local elem_geo = element.layout.geometry + + -- Calculate the hitbox + local bX1, bY1, bX2, bY2 = get_hitbox_coords_geo(elem_geo) + element.hitbox = {x1 = bX1, y1 = bY1, x2 = bX2, y2 = bY2} + + local style_ass = assdraw.ass_new() + + -- prepare static elements + style_ass:append('{}') -- hack to troll new_event into inserting a \n + style_ass:new_event() + style_ass:pos(elem_geo.x, elem_geo.y) + style_ass:an(elem_geo.an) + style_ass:append(element.layout.style) + + element.style_ass = style_ass + + local static_ass = assdraw.ass_new() + + + if (element.type == 'box') then + --draw box + static_ass:draw_start() + ass_draw_rr_h_cw(static_ass, 0, 0, elem_geo.w, elem_geo.h, + element.layout.box.radius, element.layout.box.hexagon) + static_ass:draw_stop() + + elseif (element.type == 'slider') then + --draw static slider parts + local slider_lo = element.layout.slider + -- calculate positions of min and max points + element.slider.min.ele_pos = user_opts.seekbarhandlesize * elem_geo.h / 2 + element.slider.max.ele_pos = elem_geo.w - element.slider.min.ele_pos + element.slider.min.glob_pos = element.hitbox.x1 + element.slider.min.ele_pos + element.slider.max.glob_pos = element.hitbox.x1 + element.slider.max.ele_pos + + static_ass:draw_start() + -- a hack which prepares the whole slider area to allow center placements such like an=5 + static_ass:rect_cw(0, 0, elem_geo.w, elem_geo.h) + static_ass:rect_ccw(0, 0, elem_geo.w, elem_geo.h) + -- marker nibbles + if not (element.slider.markerF == nil) and (slider_lo.gap > 0) then + local markers = element.slider.markerF() + for _,marker in pairs(markers) do + if (marker >= element.slider.min.value) and (marker <= element.slider.max.value) then + local s = get_slider_ele_pos_for(element, marker) + if (slider_lo.gap > 5) then -- draw triangles + --top + if (slider_lo.nibbles_top) then + static_ass:move_to(s - 3, slider_lo.gap - 5) + static_ass:line_to(s + 3, slider_lo.gap - 5) + static_ass:line_to(s, slider_lo.gap - 1) + end + --bottom + if (slider_lo.nibbles_bottom) then + static_ass:move_to(s - 3, elem_geo.h - slider_lo.gap + 5) + static_ass:line_to(s, elem_geo.h - slider_lo.gap + 1) + static_ass:line_to(s + 3, elem_geo.h - slider_lo.gap + 5) + end + else -- draw 2x1px nibbles + --top + if (slider_lo.nibbles_top) then + static_ass:rect_cw(s - 1, 0, s + 1, slider_lo.gap); + end + --bottom + if (slider_lo.nibbles_bottom) then + static_ass:rect_cw(s - 1, elem_geo.h-slider_lo.gap, s + 1, elem_geo.h); + end + end + end + end + end + end + + element.static_ass = static_ass + + -- if the element is supposed to be disabled, + -- style it accordingly and kill the eventresponders + if not (element.enabled) then + element.layout.alpha[1] = 136 + element.eventresponder = nil + end + -- gray out the element if it is toggled off + if (element.off) then + element.layout.alpha[1] = 136 + end + + end +end + +-- +-- Element Rendering +-- + +-- returns nil or a chapter element from the native property chapter-list +function get_chapter(possec) + local cl = state.chapter_list -- sorted, get latest before possec, if any + + for n=#cl,1,-1 do + if possec >= cl[n].time then + return cl[n] + end + end +end + +function render_elements(master_ass) + -- when the slider is dragged or hovered and we have a target chapter name + -- then we use it instead of the normal title. we calculate it before the + -- render iterations because the title may be rendered before the slider. + state.forced_title = nil + if thumbfast.disabled then + local se, ae = state.slider_element, elements[state.active_element] + if user_opts.chapter_fmt ~= "no" and se and (ae == se or (not ae and mouse_hit(se))) then + local dur = mp.get_property_number("duration", 0) + if dur > 0 then + local possec = get_slider_value(se) * dur / 100 -- of mouse pos + local ch = get_chapter(possec) + if ch and ch.title and ch.title ~= "" then + state.forced_title = string.format(user_opts.chapter_fmt, ch.title) + end + end + end + end + + for n=1, #elements do + local element = elements[n] + local style_ass = assdraw.ass_new() + style_ass:merge(element.style_ass) + ass_append_alpha(style_ass, element.layout.alpha, 0) + + if element.eventresponder and (state.active_element == n) then + -- run render event functions + if not (element.eventresponder.render == nil) then + element.eventresponder.render(element) + end + if mouse_hit(element) then + -- mouse down styling + if (element.styledown) then + style_ass:append(osc_styles.elementDown) + end + if (element.softrepeat) and (state.mouse_down_counter >= 15 + and state.mouse_down_counter % 5 == 0) then + + element.eventresponder[state.active_event_source..'_down'](element) + end + state.mouse_down_counter = state.mouse_down_counter + 1 + end + end + + if user_opts.keyboardnavigation and state.highlight_element == element.name then + style_ass:append(osc_styles.elementHighlight) + end + + local elem_ass = assdraw.ass_new() + elem_ass:merge(style_ass) + + if not (element.type == 'button') then + elem_ass:merge(element.static_ass) + end + + if (element.type == 'slider') then + + local slider_lo = element.layout.slider + local elem_geo = element.layout.geometry + local s_min = element.slider.min.value + local s_max = element.slider.max.value + -- draw pos marker + local pos = element.slider.posF() + local seekRanges = element.slider.seekRangesF() + local rh = user_opts.seekbarhandlesize * elem_geo.h / 2 -- Handle radius + local xp + + if pos then + xp = get_slider_ele_pos_for(element, pos) + ass_draw_cir_cw(elem_ass, xp, elem_geo.h/2, rh) + elem_ass:rect_cw(0, slider_lo.gap, xp, elem_geo.h - slider_lo.gap) + end + + if seekRanges then + elem_ass:draw_stop() + elem_ass:merge(element.style_ass) + ass_append_alpha(elem_ass, element.layout.alpha, user_opts.seekrangealpha) + elem_ass:merge(element.static_ass) + + for _,range in pairs(seekRanges) do + local pstart = get_slider_ele_pos_for(element, range['start']) + local pend = get_slider_ele_pos_for(element, range['end']) + elem_ass:rect_cw(pstart - rh, slider_lo.gap, pend + rh, elem_geo.h - slider_lo.gap) + end + end + + elem_ass:draw_stop() + + -- add tooltip + if not (element.slider.tooltipF == nil) then + if mouse_hit(element) then + local sliderpos = get_slider_value(element) + local tooltiplabel = element.slider.tooltipF(sliderpos) + local an = slider_lo.tooltip_an + local ty + if (an == 2) then + ty = element.hitbox.y1 + else + ty = element.hitbox.y1 + elem_geo.h/2 + end + + local tx = get_virt_mouse_pos() + if (slider_lo.adjust_tooltip) then + if (an == 2) then + if (sliderpos < (s_min + 3)) then + an = an - 1 + elseif (sliderpos > (s_max - 3)) then + an = an + 1 + end + elseif (sliderpos > (s_max-s_min)/2) then + an = an + 1 + tx = tx - 5 + else + an = an - 1 + tx = tx + 10 + end + end + + -- tooltip label + elem_ass:new_event() + elem_ass:pos(tx, ty) + elem_ass:an(an) + elem_ass:append(slider_lo.tooltip_style) + ass_append_alpha(elem_ass, slider_lo.alpha, 0) + elem_ass:append(tooltiplabel) + + -- thumbnail + if not thumbfast.disabled then + local osd_w = mp.get_property_number("osd-width") + if osd_w then + local r_w, r_h = get_virt_scale_factor() + + local tooltip_font_size = 18 + local thumbPad = 4 + local thumbMarginX = 18 / r_w + local thumbMarginY = tooltip_font_size + thumbPad + 2 / r_h + local tooltipBgColor = "FFFFFF" + local tooltipBgAlpha = 80 + local thumbX = math.min(osd_w - thumbfast.width - thumbMarginX, math.max(thumbMarginX, tx / r_w - thumbfast.width / 2)) + local thumbY = (ty - thumbMarginY) / r_h - thumbfast.height + + thumbX = math.floor(thumbX + 0.5) + thumbY = math.floor(thumbY + 0.5) + + elem_ass:new_event() + elem_ass:pos(thumbX * r_w, ty - thumbMarginY - thumbfast.height * r_h) + elem_ass:an(7) + elem_ass:append(osc_styles.Tooltip) + elem_ass:draw_start() + elem_ass:rect_cw(-thumbPad * r_w, -thumbPad * r_h, (thumbfast.width + thumbPad) * r_w, (thumbfast.height + thumbPad) * r_h) + elem_ass:draw_stop() + + mp.commandv("script-message-to", "thumbfast", "thumb", + mp.get_property_number("duration", 0) * (sliderpos / 100), + thumbX, + thumbY + ) + + local se, ae = state.slider_element, elements[state.active_element] + if user_opts.chapter_fmt ~= "no" and se and (ae == se or (not ae and mouse_hit(se))) then + local dur = mp.get_property_number("duration", 0) + if dur > 0 then + local possec = get_slider_value(se) * dur / 100 -- of mouse pos + local ch = get_chapter(possec) + if ch and ch.title and ch.title ~= "" then + elem_ass:new_event() + elem_ass:pos((thumbX + thumbfast.width / 2) * r_w, thumbY * r_h - tooltip_font_size) + elem_ass:an(an) + elem_ass:append(slider_lo.tooltip_style) + ass_append_alpha(elem_ass, slider_lo.alpha, 0) + elem_ass:append(string.format(user_opts.chapter_fmt, ch.title)) + end + end + end + end + end + else + if thumbfast.available then + mp.commandv("script-message-to", "thumbfast", "clear") + end + end + end + + elseif (element.type == 'button') then + + local buttontext + if type(element.content) == 'function' then + buttontext = element.content() -- function objects + elseif not (element.content == nil) then + buttontext = element.content -- text objects + end + + buttontext = buttontext:gsub(':%((.?.?.?)%) unknown ', ':%(%1%)') --gsub('%) unknown %(\'', '') + + local maxchars = element.layout.button.maxchars + -- 认为1个中文字符约等于1.5个英文字符 + -- local charcount = buttontext:len()- (buttontext:len()-select(2, buttontext:gsub('[^\128-\193]', '')))/1.5 + local charcount = (buttontext:len() + select(2, buttontext:gsub('[^\128-\193]', ''))*2) / 3 + if not (maxchars == nil) and (charcount > maxchars) then + local limit = math.max(0, maxchars - 3) + if (charcount > limit) then + while (charcount > limit) do + buttontext = buttontext:gsub('.[\128-\191]*$', '') + charcount = (buttontext:len() + select(2, buttontext:gsub('[^\128-\193]', ''))*2) / 3 + end + buttontext = buttontext .. '...' + end + end + + elem_ass:append(buttontext) + + -- add tooltip + if not (element.tooltipF == nil) and element.enabled then + if mouse_hit(element) then + local tooltiplabel = element.tooltipF + local an = 1 + local ty = element.hitbox.y1 + local tx = get_virt_mouse_pos() + + if ty < osc_param.playresy / 2 then + ty = element.hitbox.y2 + an = 7 + end + + -- tooltip label + if type(element.tooltipF) == 'function' then + tooltiplabel = element.tooltipF() + else + tooltiplabel = element.tooltipF + end + elem_ass:new_event() + elem_ass:pos(tx, ty) + elem_ass:an(an) + elem_ass:append(element.tooltip_style) + elem_ass:append(tooltiplabel) + end + end + end + + master_ass:merge(elem_ass) + end +end + +-- +-- Message display +-- + +-- pos is 1 based +function limited_list(prop, pos) + local proplist = mp.get_property_native(prop, {}) + local count = #proplist + if count == 0 then + return count, proplist + end + + local fs = tonumber(mp.get_property('options/osd-font-size')) + local max = math.ceil(osc_param.unscaled_y*0.75 / fs) + if max % 2 == 0 then + max = max - 1 + end + local delta = math.ceil(max / 2) - 1 + local begi = math.max(math.min(pos - delta, count - max + 1), 1) + local endi = math.min(begi + max - 1, count) + + local reslist = {} + for i=begi, endi do + local item = proplist[i] + item.current = (i == pos) and true or nil + table.insert(reslist, item) + end + return count, reslist +end + +function get_playlist() + local pos = mp.get_property_number('playlist-pos', 0) + 1 + local count, limlist = limited_list('playlist', pos) + if count == 0 then + return texts.nolist + end + + local message = string.format(texts.playlist .. ' [%d/%d]:\n', pos, count) + for i, v in ipairs(limlist) do + local title = v.title + local _, filename = utils.split_path(v.filename) + if title == nil then + title = filename + end + message = string.format('%s %s %s\n', message, + (v.current and '●' or '○'), title) + end + return message +end + +function get_chapterlist() + local pos = mp.get_property_number('chapter', 0) + 1 + local count, limlist = limited_list('chapter-list', pos) + if count == 0 then + return texts.nochapter + end + + local message = string.format(texts.chapter.. ' [%d/%d]:\n', pos, count) + for i, v in ipairs(limlist) do + local time = mp.format_time(v.time) + local title = v.title + if title == nil then + title = string.format(texts.chapter .. ' %02d', i) + end + message = string.format('%s[%s] %s %s\n', message, time, + (v.current and '●' or '○'), title) + end + return message +end + +function show_message(text, duration) + + --print('text: '..text..' duration: ' .. duration) + if duration == nil then + duration = tonumber(mp.get_property('options/osd-duration')) / 1000 + elseif not type(duration) == 'number' then + print('duration: ' .. duration) + end + + -- cut the text short, otherwise the following functions + -- may slow down massively on huge input + text = string.sub(text, 0, 4000) + + -- replace actual linebreaks with ASS linebreaks + text = string.gsub(text, '\n', '\\N') + + state.message_text = text + + if not state.message_hide_timer then + state.message_hide_timer = mp.add_timeout(0, request_tick) + end + state.message_hide_timer:kill() + state.message_hide_timer.timeout = duration + state.message_hide_timer:resume() + request_tick() +end + +function render_message(ass) + if state.message_hide_timer and state.message_hide_timer:is_enabled() and + state.message_text + then + local _, lines = string.gsub(state.message_text, '\\N', '') + + local fontsize = tonumber(mp.get_property('options/osd-font-size')) + local outline = tonumber(mp.get_property('options/osd-border-size')) + local maxlines = math.ceil(osc_param.unscaled_y*0.75 / fontsize) + local counterscale = osc_param.playresy / osc_param.unscaled_y + + fontsize = fontsize * counterscale / math.max(0.65 + math.min(lines/maxlines, 1), 1) + outline = outline * counterscale / math.max(0.75 + math.min(lines/maxlines, 1)/2, 1) + + local style = '{\\bord' .. outline .. '\\fs' .. fontsize .. '}' + + + ass:new_event() + ass:append(style .. state.message_text) + else + state.message_text = nil + end +end + +-- +-- Initialisation and Layout +-- + +function new_element(name, type) + elements[name] = {} + elements[name].type = type + elements[name].name = name + + -- add default stuff + elements[name].eventresponder = {} + elements[name].visible = true + elements[name].enabled = true + elements[name].softrepeat = false + elements[name].styledown = (type == 'button') + elements[name].state = {} + + if (type == 'slider') then + elements[name].slider = {min = {value = 0}, max = {value = 100}} + end + + + return elements[name] +end + +function add_layout(name) + if not (elements[name] == nil) then + -- new layout + elements[name].layout = {} + + -- set layout defaults + elements[name].layout.layer = 50 + elements[name].layout.alpha = {[1] = 0, [2] = 255, [3] = 255, [4] = 255} + + if (elements[name].type == 'button') then + elements[name].layout.button = { + maxchars = nil, + } + elseif (elements[name].type == 'slider') then + -- slider defaults + elements[name].layout.slider = { + border = 1, + gap = 1, + nibbles_top = true, + nibbles_bottom = true, + adjust_tooltip = true, + tooltip_style = '', + tooltip_an = 2, + alpha = {[1] = 0, [2] = 255, [3] = 88, [4] = 255}, + } + elseif (elements[name].type == 'box') then + elements[name].layout.box = {radius = 0, hexagon = false} + end + + return elements[name].layout + else + msg.error('Can\'t add_layout to element \''..name..'\', doesn\'t exist.') + end +end + +-- Window Controls +function window_controls() + local wc_geo = { + x = 0, + y = 32, + an = 1, + w = osc_param.playresx, + h = 32, + } + + local controlbox_w = window_control_box_width + local titlebox_w = wc_geo.w - controlbox_w + + -- Default alignment is 'right' + local controlbox_left = wc_geo.w - controlbox_w + local titlebox_left = wc_geo.x + local titlebox_right = wc_geo.w - controlbox_w + + add_area('window-controls', + get_hitbox_coords(controlbox_left, wc_geo.y, wc_geo.an, + controlbox_w, wc_geo.h)) + + local lo + + local button_y = wc_geo.y - (wc_geo.h / 2) + local first_geo = + {x = controlbox_left + 27, y = button_y, an = 5, w = 40, h = wc_geo.h} + local second_geo = + {x = controlbox_left + 69, y = button_y, an = 5, w = 40, h = wc_geo.h} + local third_geo = + {x = controlbox_left + 115, y = button_y, an = 5, w = 40, h = wc_geo.h} + + -- Window control buttons use symbols in the custom mpv osd font + -- because the official unicode codepoints are sufficiently + -- exotic that a system might lack an installed font with them, + -- and libass will complain that they are not present in the + -- default font, even if another font with them is available. + + -- Close: ?? + ne = new_element('close', 'button') + ne.content = '\238\132\149' + ne.eventresponder['mbtn_left_up'] = + function () mp.commandv('quit') end + lo = add_layout('close') + lo.geometry = third_geo + lo.style = osc_styles.WinCtrl + lo.alpha[3] = 0 + + -- Minimize: ?? + ne = new_element('minimize', 'button') + ne.content = '\\n\238\132\146' + ne.eventresponder['mbtn_left_up'] = + function () mp.commandv('cycle', 'window-minimized') end + lo = add_layout('minimize') + lo.geometry = first_geo + lo.style = osc_styles.WinCtrl + lo.alpha[3] = 0 + + -- Maximize: ?? /?? + ne = new_element('maximize', 'button') + if state.maximized or state.fullscreen then + ne.content = '\238\132\148' + else + ne.content = '\238\132\147' + end + ne.eventresponder['mbtn_left_up'] = + function () + if state.fullscreen then + mp.commandv('cycle', 'fullscreen') + else + mp.commandv('cycle', 'window-maximized') + end + end + lo = add_layout('maximize') + lo.geometry = second_geo + lo.style = osc_styles.WinCtrl + lo.alpha[3] = 0 +end + +-- +-- Layouts +-- + +local layouts = {} + +-- Default layout +layouts = function () + + local osc_geo = {w, h} + + osc_geo.w = osc_param.playresx + osc_geo.h = 180 + + -- origin of the controllers, left/bottom corner + local posX = 0 + local posY = osc_param.playresy + + osc_param.areas = {} -- delete areas + + -- area for active mouse input + add_area('input', get_hitbox_coords(posX, posY, 1, osc_geo.w, 104)) + + -- area for show/hide + add_area('showhide', 0, 0, osc_param.playresx, osc_param.playresy) + + -- fetch values + local osc_w, osc_h= + osc_geo.w, osc_geo.h + + -- + -- Controller Background + -- + local lo + + new_element('TransBg', 'box') + lo = add_layout('TransBg') + lo.geometry = {x = posX, y = posY, an = 7, w = osc_w, h = 1} + lo.style = osc_styles.TransBg + lo.layer = 10 + lo.alpha[3] = 0 + + -- + -- Alignment + -- + local refX = osc_w / 2 + local refY = posY + local geo + + -- + -- Seekbar + -- + new_element('seekbarbg', 'box') + lo = add_layout('seekbarbg') + lo.geometry = {x = refX , y = refY - 96 , an = 5, w = osc_geo.w - 50, h = 2} + lo.layer = 13 + lo.style = osc_styles.SeekbarBg + lo.alpha[1] = 128 + lo.alpha[3] = 128 + + lo = add_layout('seekbar') + lo.geometry = {x = refX, y = refY - 96 , an = 5, w = osc_geo.w - 50, h = 16} + lo.style = osc_styles.SeekbarFg + lo.slider.gap = 7 + lo.slider.tooltip_style = osc_styles.Tooltip + lo.slider.tooltip_an = 2 + + local showjump = user_opts.showjump + local offset = showjump and 60 or 0 + + -- + -- Volumebar + -- + lo = new_element('volumebarbg', 'box') + lo.visible = (osc_param.playresx >= 750) and user_opts.volumecontrol + lo = add_layout('volumebarbg') + lo.geometry = {x = 155, y = refY - 40, an = 4, w = 80, h = 2} + lo.layer = 13 + lo.style = osc_styles.VolumebarBg + + + lo = add_layout('volumebar') + lo.geometry = {x = 155, y = refY - 40, an = 4, w = 80, h = 8} + lo.style = osc_styles.VolumebarFg + lo.slider.gap = 3 + lo.slider.tooltip_style = osc_styles.Tooltip + lo.slider.tooltip_an = 2 + + -- buttons + lo = add_layout('pl_prev') + lo.geometry = {x = refX - 120 - offset, y = refY - 40 , an = 5, w = 30, h = 24} + lo.style = osc_styles.Ctrl2 + + lo = add_layout('skipback') + lo.geometry = {x = refX - 60 - offset, y = refY - 40 , an = 5, w = 30, h = 24} + lo.style = osc_styles.Ctrl2 + + + if showjump then + lo = add_layout('jumpback') + lo.geometry = {x = refX - 60, y = refY - 40 , an = 5, w = 30, h = 24} + lo.style = osc_styles.Ctrl2 + end + + lo = add_layout('playpause') + lo.geometry = {x = refX, y = refY - 40 , an = 5, w = 45, h = 45} + lo.style = osc_styles.Ctrl1 + + if showjump then + lo = add_layout('jumpfrwd') + lo.geometry = {x = refX + 60, y = refY - 40 , an = 5, w = 30, h = 24} + + -- HACK: jumpfrwd's icon must be mirrored for nonstandard # of seconds + -- as the font only has an icon without a number for rewinding + lo.style = (user_opts.jumpiconnumber and jumpicons[user_opts.jumpamount] ~= nil) and osc_styles.Ctrl2 or osc_styles.Ctrl2Flip + end + + lo = add_layout('skipfrwd') + lo.geometry = {x = refX + 60 + offset, y = refY - 40 , an = 5, w = 30, h = 24} + lo.style = osc_styles.Ctrl2 + + lo = add_layout('pl_next') + lo.geometry = {x = refX + 120 + offset, y = refY - 40 , an = 5, w = 30, h = 24} + lo.style = osc_styles.Ctrl2 + + + -- Time + lo = add_layout('tc_left') + lo.geometry = {x = 25, y = refY - 84, an = 7, w = 64, h = 20} + lo.style = osc_styles.Time + + + lo = add_layout('tc_right') + lo.geometry = {x = osc_geo.w - 25 , y = refY -84, an = 9, w = 64, h = 20} + lo.style = osc_styles.Time + + lo = add_layout('cy_audio') + lo.geometry = {x = 37, y = refY - 40, an = 5, w = 24, h = 24} + lo.style = osc_styles.Ctrl3 + lo.visible = (osc_param.playresx >= 540) + + lo = add_layout('cy_sub') + lo.geometry = {x = 87, y = refY - 40, an = 5, w = 24, h = 24} + lo.style = osc_styles.Ctrl3 + lo.visible = (osc_param.playresx >= 600) + + lo = add_layout('vol_ctrl') + lo.geometry = {x = 137, y = refY - 40, an = 5, w = 24, h = 24} + lo.style = osc_styles.Ctrl3 + lo.visible = (osc_param.playresx >= 650) + + lo = add_layout('tog_fs') + lo.geometry = {x = osc_geo.w - 37, y = refY - 40, an = 5, w = 24, h = 24} + lo.style = osc_styles.Ctrl3 + lo.visible = (osc_param.playresx >= 540) + + lo = add_layout('tog_info') + lo.geometry = {x = osc_geo.w - 87, y = refY - 40, an = 5, w = 24, h = 24} + lo.style = osc_styles.Ctrl3 + lo.visible = (osc_param.playresx >= 600) + + geo = { x = 25, y = refY - 132, an = 1, w = osc_geo.w - 50, h = 48 } + lo = add_layout('title') + lo.geometry = geo + lo.style = string.format('%s{\\clip(%f,%f,%f,%f)}', osc_styles.Title, + geo.x, geo.y - geo.h, geo.x + geo.w , geo.y + 5) + lo.alpha[3] = 0 + lo.button.maxchars = geo.w / 23 +end + +-- Validate string type user options +function validate_user_opts() + if user_opts.windowcontrols ~= 'auto' and + user_opts.windowcontrols ~= 'yes' and + user_opts.windowcontrols ~= 'no' then + msg.warn('windowcontrols cannot be \'' .. + user_opts.windowcontrols .. '\'. Ignoring.') + user_opts.windowcontrols = 'auto' + end +end + +function update_options(list) + validate_user_opts() + request_tick() + visibility_mode(user_opts.visibility, true) + update_duration_watch() + request_init() +end + +-- OSC INIT +function osc_init() + msg.debug('osc_init') + + -- set canvas resolution according to display aspect and scaling setting + local baseResY = 720 + local display_w, display_h, display_aspect = mp.get_osd_size() + local scale = 1 + + if (mp.get_property('video') == 'no') then -- dummy/forced window + scale = user_opts.scaleforcedwindow + elseif state.fullscreen then + scale = user_opts.scalefullscreen + else + scale = user_opts.scalewindowed + end + + if user_opts.vidscale then + osc_param.unscaled_y = baseResY + else + osc_param.unscaled_y = display_h + end + osc_param.playresy = osc_param.unscaled_y / scale + if (display_aspect > 0) then + osc_param.display_aspect = display_aspect + end + osc_param.playresx = osc_param.playresy * osc_param.display_aspect + + -- stop seeking with the slider to prevent skipping files + state.active_element = nil + + elements = {} + + -- some often needed stuff + local pl_count = mp.get_property_number('playlist-count', 0) + local have_pl = (pl_count > 1) + local pl_pos = mp.get_property_number('playlist-pos', 0) + 1 + local have_ch = (mp.get_property_number('chapters', 0) > 0) + local loop = mp.get_property('loop-playlist', 'no') + + local ne + + -- playlist buttons + -- prev + ne = new_element('pl_prev', 'button') + + ne.content = icons.previous + ne.enabled = (pl_pos > 1) or (loop ~= 'no') + ne.eventresponder['mbtn_left_up'] = + function () + mp.commandv('playlist-prev', 'weak') + end + ne.eventresponder['mbtn_right_up'] = + function () show_message(get_playlist()) end + + --next + ne = new_element('pl_next', 'button') + + ne.content = icons.next + ne.enabled = (have_pl and (pl_pos < pl_count)) or (loop ~= 'no') + ne.eventresponder['mbtn_left_up'] = + function () + mp.commandv('playlist-next', 'weak') + end + ne.eventresponder['mbtn_right_up'] = + function () show_message(get_playlist()) end + + + --play control buttons + --playpause + ne = new_element('playpause', 'button') + + ne.content = function () + if mp.get_property('pause') == 'yes' then + return (icons.play) + else + return (icons.pause) + end + end + ne.eventresponder['mbtn_left_up'] = + function () mp.commandv('cycle', 'pause') end + --ne.eventresponder['mbtn_right_up'] = + -- function () mp.commandv('script-binding', 'open-file-dialog') end + + if user_opts.showjump then + local jumpamount = user_opts.jumpamount + local jumpmode = user_opts.jumpmode + local icons = jumpicons.default + if user_opts.jumpiconnumber then + icons = jumpicons[jumpamount] or jumpicons.default + end + + --jumpback + ne = new_element('jumpback', 'button') + + ne.softrepeat = true + ne.content = icons[1] + ne.eventresponder['mbtn_left_down'] = + --function () mp.command('seek -5') end + function () mp.commandv('seek', -jumpamount, jumpmode) end + ne.eventresponder['shift+mbtn_left_down'] = + function () mp.commandv('frame-back-step') end + ne.eventresponder['mbtn_right_down'] = + --function () mp.command('seek -60') end + function () mp.commandv('seek', -60, jumpmode) end + ne.eventresponder['enter'] = + --function () mp.command('seek -5') end + function () mp.commandv('seek', -jumpamount, jumpmode) end + + + --jumpfrwd + ne = new_element('jumpfrwd', 'button') + + ne.softrepeat = true + ne.content = icons[2] + ne.eventresponder['mbtn_left_down'] = + --function () mp.command('seek +5') end + function () mp.commandv('seek', jumpamount, jumpmode) end + ne.eventresponder['shift+mbtn_left_down'] = + function () mp.commandv('frame-step') end + ne.eventresponder['mbtn_right_down'] = + --function () mp.command('seek +60') end + function () mp.commandv('seek', 60, jumpmode) end + ne.eventresponder['enter'] = + --function () mp.command('seek +5') end + function () mp.commandv('seek', jumpamount, jumpmode) end + end + + + --skipback + ne = new_element('skipback', 'button') + + ne.softrepeat = true + ne.content = icons.backward + ne.enabled = (have_ch) -- disables button when no chapters available. + ne.eventresponder['mbtn_left_down'] = + --function () mp.command('seek -5') end + --function () mp.commandv('seek', -5, 'relative', 'keyframes') end + function () mp.commandv("add", "chapter", -1) end + --ne.eventresponder['shift+mbtn_left_down'] = + --function () mp.commandv('frame-back-step') end + ne.eventresponder['mbtn_right_down'] = + function () show_message(get_chapterlist()) end + --function () mp.command('seek -60') end + --function () mp.commandv('seek', -60, 'relative', 'keyframes') end + ne.eventresponder['enter'] = + --function () mp.command('seek -5') end + --function () mp.commandv('seek', -5, 'relative', 'keyframes') end + function () mp.commandv("add", "chapter", -1) end + + --skipfrwd + ne = new_element('skipfrwd', 'button') + + ne.softrepeat = true + ne.content = icons.forward + ne.enabled = (have_ch) -- disables button when no chapters available. + ne.eventresponder['mbtn_left_down'] = + --function () mp.command('seek +5') end + --function () mp.commandv('seek', 5, 'relative', 'keyframes') end + function () mp.commandv("add", "chapter", 1) end + --ne.eventresponder['shift+mbtn_left_down'] = + --function () mp.commandv('frame-step') end + ne.eventresponder['mbtn_right_down'] = + function () show_message(get_chapterlist()) end + --function () mp.command('seek +60') end + --function () mp.commandv('seek', 60, 'relative', 'keyframes') end + ne.eventresponder['enter'] = + --function () mp.command('seek +5') end + --function () mp.commandv('seek', 5, 'relative', 'keyframes') end + function () mp.commandv("add", "chapter", 1) end + + -- + update_tracklist() + + --cy_audio + ne = new_element('cy_audio', 'button') + ne.enabled = (#tracks_osc.audio > 0) + ne.off = (get_track('audio') == 0) + ne.visible = (osc_param.playresx >= 540) + ne.content = icons.audio + ne.tooltip_style = osc_styles.Tooltip + ne.tooltipF = function () + local msg = texts.off + if not (get_track('audio') == 0) then + msg = (texts.audio .. ' [' .. get_track('audio') .. ' ∕ ' .. #tracks_osc.audio .. '] ') + local prop = mp.get_property('current-tracks/audio/title') --('current-tracks/audio/lang') + if not prop then + prop = texts.na + end + msg = msg .. '[' .. prop .. ']' + prop = mp.get_property('current-tracks/audio/lang') --('current-tracks/audio/title') + if prop then + msg = msg .. ' ' .. prop + end + return msg + end + return msg + end + ne.eventresponder['mbtn_left_up'] = + function () set_track('audio', 1) end + ne.eventresponder['mbtn_right_up'] = + function () set_track('audio', -1) end + ne.eventresponder['shift+mbtn_left_down'] = + function () show_message(get_tracklist('audio')) end + ne.eventresponder['enter'] = + function () set_track('audio', 1); show_message(get_tracklist('audio')) end + + --cy_sub + ne = new_element('cy_sub', 'button') + ne.enabled = (#tracks_osc.sub > 0) + ne.off = (get_track('sub') == 0) + ne.visible = (osc_param.playresx >= 600) + ne.content = icons.sub + ne.tooltip_style = osc_styles.Tooltip + ne.tooltipF = function () + local msg = texts.off + if not (get_track('sub') == 0) then + msg = (texts.subtitle .. ' [' .. get_track('sub') .. ' ∕ ' .. #tracks_osc.sub .. '] ') + local prop = mp.get_property('current-tracks/sub/lang') + if not prop then + prop = texts.na + end + msg = msg .. '[' .. prop .. ']' + prop = mp.get_property('current-tracks/sub/title') + if prop then + msg = msg .. ' ' .. prop + end + return msg + end + return msg + end + ne.eventresponder['mbtn_left_up'] = + function () set_track('sub', 1) end + ne.eventresponder['mbtn_right_up'] = + function () set_track('sub', -1) end + ne.eventresponder['shift+mbtn_left_down'] = + function () show_message(get_tracklist('sub')) end + ne.eventresponder['enter'] = + function () set_track('sub', 1); show_message(get_tracklist('sub')) end + + -- vol_ctrl + ne = new_element('vol_ctrl', 'button') + ne.enabled = (get_track('audio')>0) + ne.visible = (osc_param.playresx >= 650) and user_opts.volumecontrol + ne.content = function () + if (state.mute) then + return (icons.volume_mute) + else + return (icons.volume) + end + end + ne.eventresponder['mbtn_left_up'] = + function () mp.commandv('cycle', 'mute') end + ne.eventresponder["wheel_up_press"] = + function () mp.commandv("osd-auto", "add", "volume", 5) end + ne.eventresponder["wheel_down_press"] = + function () mp.commandv("osd-auto", "add", "volume", -5) end + + --tog_fs + ne = new_element('tog_fs', 'button') + ne.content = function () + if (state.fullscreen) then + return (icons.minimize) + else + return (icons.fullscreen) + end + end + ne.visible = (osc_param.playresx >= 540) + ne.eventresponder['mbtn_left_up'] = + function () mp.commandv('cycle', 'fullscreen') end + + --tog_info + ne = new_element('tog_info', 'button') + ne.content = icons.info + ne.visible = (osc_param.playresx >= 600) + ne.eventresponder['mbtn_left_up'] = + function () mp.commandv('script-binding', 'stats/display-stats-toggle') end + + -- title + ne = new_element('title', 'button') + ne.content = function () + local title = state.forced_title or + mp.command_native({"expand-text", user_opts.title}) + if state.paused then + title = title:gsub('\\n', ' '):gsub('\\$', ''):gsub('{','\\{') + else + title = title:gsub('\\n', ' '):gsub('\\$', ''):gsub('{','\\{') --title = ' ' + end + return not (title == '') and title or ' ' + end + ne.visible = osc_param.playresy >= 320 and user_opts.showtitle + + --seekbar + ne = new_element('seekbar', 'slider') + + ne.enabled = not (mp.get_property('percent-pos') == nil) + state.slider_element = ne.enabled and ne or nil -- used for forced_title + ne.slider.markerF = function () + local duration = mp.get_property_number('duration', nil) + if not (duration == nil) then + local chapters = mp.get_property_native('chapter-list', {}) + local markers = {} + for n = 1, #chapters do + markers[n] = (chapters[n].time / duration * 100) + end + return markers + else + return {} + end + end + ne.slider.posF = + function () return mp.get_property_number('percent-pos', nil) end + ne.slider.tooltipF = function (pos) + local duration = mp.get_property_number('duration', nil) + if not ((duration == nil) or (pos == nil)) then + possec = duration * (pos / 100) + return mp.format_time(possec) + else + return '' + end + end + ne.slider.seekRangesF = function() + if not user_opts.seekrange then + return nil + end + local cache_state = state.cache_state + if not cache_state then + return nil + end + local duration = mp.get_property_number('duration', nil) + if (duration == nil) or duration <= 0 then + return nil + end + local ranges = cache_state['seekable-ranges'] + if #ranges == 0 then + return nil + end + local nranges = {} + for _, range in pairs(ranges) do + nranges[#nranges + 1] = { + ['start'] = 100 * range['start'] / duration, + ['end'] = 100 * range['end'] / duration, + } + end + return nranges + end + ne.eventresponder['mouse_move'] = --keyframe seeking when mouse is dragged + function (element) + if not element.state.mbtnleft then return end -- allow drag for mbtnleft only! + -- mouse move events may pile up during seeking and may still get + -- sent when the user is done seeking, so we need to throw away + -- identical seeks + local seekto = get_slider_value(element) + if (element.state.lastseek == nil) or + (not (element.state.lastseek == seekto)) then + local flags = 'absolute-percent' + if not user_opts.seekbarkeyframes then + flags = flags .. '+exact' + end + mp.commandv('seek', seekto, flags) + element.state.lastseek = seekto + end + + end + ne.eventresponder['mbtn_left_down'] = --exact seeks on single clicks + function (element) + mp.commandv('seek', get_slider_value(element), 'absolute-percent', 'exact') + element.state.mbtnleft = true + end + ne.eventresponder['mbtn_left_up'] = + function (element) element.state.mbtnleft = false end + ne.eventresponder['mbtn_right_down'] = --seeks to chapter start + function (element) + local duration = mp.get_property_number('duration', nil) + if not (duration == nil) then + local chapters = mp.get_property_native('chapter-list', {}) + if #chapters > 0 then + local pos = get_slider_value(element) + local ch = #chapters + for n = 1, ch do + if chapters[n].time / duration * 100 >= pos then + ch = n - 1 + break + end + end + mp.commandv('set', 'chapter', ch - 1) + --if chapters[ch].title then show_message(chapters[ch].time) end + end + end + end + ne.eventresponder['reset'] = + function (element) element.state.lastseek = nil end + + --volumebar + ne = new_element('volumebar', 'slider') + ne.visible = (osc_param.playresx >= 700) and user_opts.volumecontrol + ne.enabled = (get_track('audio')>0) + ne.slider.markerF = function () + return {} + end + ne.slider.seekRangesF = function() + return nil + end + ne.slider.posF = + function () + local val = mp.get_property_number('volume', nil) + return val*val/100 + end + ne.eventresponder['mouse_move'] = + function (element) + if not element.state.mbtnleft then return end -- allow drag for mbtnleft only! + local seekto = get_slider_value(element) + if (element.state.lastseek == nil) or + (not (element.state.lastseek == seekto)) then + mp.commandv('set', 'volume', 10*math.sqrt(seekto)) + element.state.lastseek = seekto + end + end + ne.eventresponder['mbtn_left_down'] = --exact seeks on single clicks + function (element) + local seekto = get_slider_value(element) + mp.commandv('set', 'volume', 10*math.sqrt(seekto)) + element.state.mbtnleft = true + end + ne.eventresponder['mbtn_left_up'] = + function (element) element.state.mbtnleft = false end + ne.eventresponder['reset'] = + function (element) element.state.lastseek = nil end + ne.eventresponder["wheel_up_press"] = + function () mp.commandv("osd-auto", "add", "volume", 5) end + ne.eventresponder["wheel_down_press"] = + function () mp.commandv("osd-auto", "add", "volume", -5) end + + -- tc_left (current pos) + ne = new_element('tc_left', 'button') + ne.content = function () + if (state.fulltime) then + return (mp.get_property_osd('playback-time/full')) + else + return (mp.get_property_osd('playback-time')) + end + end + ne.eventresponder["mbtn_left_up"] = function () + state.fulltime = not state.fulltime + request_init() + end + -- tc_right (total/remaining time) + ne = new_element('tc_right', 'button') + ne.content = function () + if (mp.get_property_number('duration', 0) <= 0) then return '--:--:--' end + if (state.rightTC_trem) then + if (state.fulltime) then + return ('-'..mp.get_property_osd('playtime-remaining/full')) + else + return ('-'..mp.get_property_osd('playtime-remaining')) + end + else + if (state.fulltime) then + return (mp.get_property_osd('duration/full')) + else + return (mp.get_property_osd('duration')) + end + + end + end + ne.eventresponder['mbtn_left_up'] = + function () state.rightTC_trem = not state.rightTC_trem end + + -- load layout + layouts() + + -- load window controls + if window_controls_enabled() then + window_controls() + end + + --do something with the elements + prepare_elements() +end + +function shutdown() + +end + +-- +-- Other important stuff +-- + + +function show_osc() + -- show when disabled can happen (e.g. mouse_move) due to async/delayed unbinding + if not state.enabled then return end + + msg.trace('show_osc') + --remember last time of invocation (mouse move) + state.showtime = mp.get_time() + + osc_visible(true) + + if user_opts.keyboardnavigation == true then + osc_enable_key_bindings() + end + + if (user_opts.fadeduration > 0) then + state.anitype = nil + end +end + +function hide_osc() + msg.trace('hide_osc') + if not state.enabled then + -- typically hide happens at render() from tick(), but now tick() is + -- no-op and won't render again to remove the osc, so do that manually. + state.osc_visible = false + render_wipe() + if user_opts.keyboardnavigation == true then + osc_disable_key_bindings() + end + elseif (user_opts.fadeduration > 0) then + if not(state.osc_visible == false) then + state.anitype = 'out' + request_tick() + end + else + osc_visible(false) + end +end + +function osc_visible(visible) + if state.osc_visible ~= visible then + state.osc_visible = visible + end + request_tick() +end + +function pause_state(name, enabled) + state.paused = enabled + mp.add_timeout(0.1, function() state.osd:update() end) + if user_opts.showonpause then + if enabled then + state.lastvisibility = user_opts.visibility + visibility_mode("always", true) + show_osc() + else + visibility_mode(state.lastvisibility, true) + end + end + request_tick() +end + +function cache_state(name, st) + state.cache_state = st + request_tick() +end + +-- Request that tick() is called (which typically re-renders the OSC). +-- The tick is then either executed immediately, or rate-limited if it was +-- called a small time ago. +function request_tick() + if state.tick_timer == nil then + state.tick_timer = mp.add_timeout(0, tick) + end + + if not state.tick_timer:is_enabled() then + local now = mp.get_time() + local timeout = tick_delay - (now - state.tick_last_time) + if timeout < 0 then + timeout = 0 + end + state.tick_timer.timeout = timeout + state.tick_timer:resume() + end +end + +function mouse_leave() + if get_hidetimeout() >= 0 then + hide_osc() + end + -- reset mouse position + state.last_mouseX, state.last_mouseY = nil, nil + state.mouse_in_window = false +end + +function request_init() + state.initREQ = true + request_tick() +end + +-- Like request_init(), but also request an immediate update +function request_init_resize() + request_init() + -- ensure immediate update + state.tick_timer:kill() + state.tick_timer.timeout = 0 + state.tick_timer:resume() +end + +function render_wipe() + msg.trace('render_wipe()') + state.osd:remove() +end + +function render() + msg.trace('rendering') + local current_screen_sizeX, current_screen_sizeY, aspect = mp.get_osd_size() + local mouseX, mouseY = get_virt_mouse_pos() + local now = mp.get_time() + + -- check if display changed, if so request reinit + if not (state.mp_screen_sizeX == current_screen_sizeX + and state.mp_screen_sizeY == current_screen_sizeY) then + + request_init_resize() + + state.mp_screen_sizeX = current_screen_sizeX + state.mp_screen_sizeY = current_screen_sizeY + end + + -- init management + if state.active_element then + -- mouse is held down on some element - keep ticking and igore initReq + -- till it's released, or else the mouse-up (click) will misbehave or + -- get ignored. that's because osc_init() recreates the osc elements, + -- but mouse handling depends on the elements staying unmodified + -- between mouse-down and mouse-up (using the index active_element). + request_tick() + elseif state.initREQ then + osc_init() + state.initREQ = false + + -- store initial mouse position + if (state.last_mouseX == nil or state.last_mouseY == nil) + and not (mouseX == nil or mouseY == nil) then + + state.last_mouseX, state.last_mouseY = mouseX, mouseY + end + end + + + -- fade animation + if not(state.anitype == nil) then + + if (state.anistart == nil) then + state.anistart = now + end + + if (now < state.anistart + (user_opts.fadeduration/1000)) then + + if (state.anitype == 'in') then --fade in + osc_visible(true) + state.animation = scale_value(state.anistart, + (state.anistart + (user_opts.fadeduration/1000)), + 255, 0, now) + elseif (state.anitype == 'out') then --fade out + state.animation = scale_value(state.anistart, + (state.anistart + (user_opts.fadeduration/1000)), + 0, 255, now) + end + + else + if (state.anitype == 'out') then + osc_visible(false) + end + state.anistart = nil + state.animation = nil + state.anitype = nil + end + else + state.anistart = nil + state.animation = nil + state.anitype = nil + end + + --mouse show/hide area + for k,cords in pairs(osc_param.areas['showhide']) do + set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, 'showhide') + end + if osc_param.areas['showhide_wc'] then + for k,cords in pairs(osc_param.areas['showhide_wc']) do + set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, 'showhide_wc') + end + else + set_virt_mouse_area(0, 0, 0, 0, 'showhide_wc') + end + do_enable_keybindings() + + --mouse input area + local mouse_over_osc = false + + for _,cords in ipairs(osc_param.areas['input']) do + if state.osc_visible then -- activate only when OSC is actually visible + set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, 'input') + end + if state.osc_visible ~= state.input_enabled then + if state.osc_visible then + mp.enable_key_bindings('input') + else + mp.disable_key_bindings('input') + end + state.input_enabled = state.osc_visible + end + + if (mouse_hit_coords(cords.x1, cords.y1, cords.x2, cords.y2)) then + mouse_over_osc = true + end + end + + if osc_param.areas['window-controls'] then + for _,cords in ipairs(osc_param.areas['window-controls']) do + if state.osc_visible then -- activate only when OSC is actually visible + set_virt_mouse_area(cords.x1, cords.y1, cords.x2, cords.y2, 'window-controls') + mp.enable_key_bindings('window-controls') + else + mp.disable_key_bindings('window-controls') + end + + if (mouse_hit_coords(cords.x1, cords.y1, cords.x2, cords.y2)) then + mouse_over_osc = true + end + end + end + + if osc_param.areas['window-controls-title'] then + for _,cords in ipairs(osc_param.areas['window-controls-title']) do + if (mouse_hit_coords(cords.x1, cords.y1, cords.x2, cords.y2)) then + mouse_over_osc = true + end + end + end + + -- autohide + if not (state.showtime == nil) and (get_hidetimeout() >= 0) then + local timeout = state.showtime + (get_hidetimeout()/1000) - now + if timeout <= 0 then + if (state.active_element == nil) and not (mouse_over_osc) then + hide_osc() + end + else + -- the timer is only used to recheck the state and to possibly run + -- the code above again + if not state.hide_timer then + state.hide_timer = mp.add_timeout(0, tick) + end + state.hide_timer.timeout = timeout + -- re-arm + state.hide_timer:kill() + state.hide_timer:resume() + end + end + + + -- actual rendering + local ass = assdraw.ass_new() + + -- Messages + render_message(ass) + + -- actual OSC + if state.osc_visible then + render_elements(ass) + end + + -- submit + set_osd(osc_param.playresy * osc_param.display_aspect, + osc_param.playresy, ass.text) +end + +-- +-- Eventhandling +-- + +local function element_has_action(element, action) + return element and element.eventresponder and + element.eventresponder[action] +end + +function process_event(source, what) + local action = string.format('%s%s', source, + what and ('_' .. what) or '') + + if what == 'down' or what == 'press' then + + for n = 1, #elements do + + if mouse_hit(elements[n]) and + elements[n].eventresponder and + (elements[n].eventresponder[source .. '_up'] or + elements[n].eventresponder[action]) then + + if what == 'down' then + state.active_element = n + state.active_event_source = source + end + -- fire the down or press event if the element has one + if element_has_action(elements[n], action) then + elements[n].eventresponder[action](elements[n]) + end + + end + end + + elseif what == 'up' then + + if elements[state.active_element] then + local n = state.active_element + + if n == 0 then + --click on background (does not work) + elseif element_has_action(elements[n], action) and + mouse_hit(elements[n]) then + + elements[n].eventresponder[action](elements[n]) + end + + --reset active element + if element_has_action(elements[n], 'reset') then + elements[n].eventresponder['reset'](elements[n]) + end + + end + state.active_element = nil + state.mouse_down_counter = 0 + + elseif source == 'mouse_move' then + + state.mouse_in_window = true + + local mouseX, mouseY = get_virt_mouse_pos() + if (user_opts.minmousemove == 0) or + (not ((state.last_mouseX == nil) or (state.last_mouseY == nil)) and + ((math.abs(mouseX - state.last_mouseX) >= user_opts.minmousemove) + or (math.abs(mouseY - state.last_mouseY) >= user_opts.minmousemove) + ) + ) then + show_osc() + end + state.last_mouseX, state.last_mouseY = mouseX, mouseY + + local n = state.active_element + if element_has_action(elements[n], action) then + elements[n].eventresponder[action](elements[n]) + end + end + + -- ensure rendering after any (mouse) event - icons could change etc + request_tick() +end + +local logo_lines = { + -- White border + "{\\c&HE5E5E5&\\p6}m 895 10 b 401 10 0 410 0 905 0 1399 401 1800 895 1800 1390 1800 1790 1399 1790 905 1790 410 1390 10 895 10 {\\p0}", + -- Purple fill + "{\\c&H682167&\\p6}m 925 42 b 463 42 87 418 87 880 87 1343 463 1718 925 1718 1388 1718 1763 1343 1763 880 1763 418 1388 42 925 42{\\p0}", + -- Darker fill + "{\\c&H430142&\\p6}m 1605 828 b 1605 1175 1324 1456 977 1456 631 1456 349 1175 349 828 349 482 631 200 977 200 1324 200 1605 482 1605 828{\\p0}", + -- White fill + "{\\c&HDDDBDD&\\p6}m 1296 910 b 1296 1131 1117 1310 897 1310 676 1310 497 1131 497 910 497 689 676 511 897 511 1117 511 1296 689 1296 910{\\p0}", + -- Triangle + "{\\c&H691F69&\\p6}m 762 1113 l 762 708 b 881 776 1000 843 1119 911 1000 978 881 1046 762 1113{\\p0}", +} + +local santa_hat_lines = { + -- Pompoms + "{\\c&HC0C0C0&\\p6}m 500 -323 b 491 -322 481 -318 475 -311 465 -312 456 -319 446 -318 434 -314 427 -304 417 -297 410 -290 404 -282 395 -278 390 -274 387 -267 381 -265 377 -261 379 -254 384 -253 397 -244 409 -232 425 -228 437 -228 446 -218 457 -217 462 -216 466 -213 468 -209 471 -205 477 -203 482 -206 491 -211 499 -217 508 -222 532 -235 556 -249 576 -267 584 -272 584 -284 578 -290 569 -305 550 -312 533 -309 523 -310 515 -316 507 -321 505 -323 503 -323 500 -323{\\p0}", + "{\\c&HE0E0E0&\\p6}m 315 -260 b 286 -258 259 -240 246 -215 235 -210 222 -215 211 -211 204 -188 177 -176 172 -151 170 -139 163 -128 154 -121 143 -103 141 -81 143 -60 139 -46 125 -34 129 -17 132 -1 134 16 142 30 145 56 161 80 181 96 196 114 210 133 231 144 266 153 303 138 328 115 373 79 401 28 423 -24 446 -73 465 -123 483 -174 487 -199 467 -225 442 -227 421 -232 402 -242 384 -254 364 -259 342 -250 322 -260 320 -260 317 -261 315 -260{\\p0}", + -- Main cap + "{\\c&H0000F0&\\p6}m 1151 -523 b 1016 -516 891 -458 769 -406 693 -369 624 -319 561 -262 526 -252 465 -235 479 -187 502 -147 551 -135 588 -111 1115 165 1379 232 1909 761 1926 800 1952 834 1987 858 2020 883 2053 912 2065 952 2088 1000 2146 962 2139 919 2162 836 2156 747 2143 662 2131 615 2116 567 2122 517 2120 410 2090 306 2089 199 2092 147 2071 99 2034 64 1987 5 1928 -41 1869 -86 1777 -157 1712 -256 1629 -337 1578 -389 1521 -436 1461 -476 1407 -509 1343 -507 1284 -515 1240 -519 1195 -521 1151 -523{\\p0}", + -- Cap shadow + "{\\c&H0000AA&\\p6}m 1657 248 b 1658 254 1659 261 1660 267 1669 276 1680 284 1689 293 1695 302 1700 311 1707 320 1716 325 1726 330 1735 335 1744 347 1752 360 1761 371 1753 352 1754 331 1753 311 1751 237 1751 163 1751 90 1752 64 1752 37 1767 14 1778 -3 1785 -24 1786 -45 1786 -60 1786 -77 1774 -87 1760 -96 1750 -78 1751 -65 1748 -37 1750 -8 1750 20 1734 78 1715 134 1699 192 1694 211 1689 231 1676 246 1671 251 1661 255 1657 248 m 1909 541 b 1914 542 1922 549 1917 539 1919 520 1921 502 1919 483 1918 458 1917 433 1915 407 1930 373 1942 338 1947 301 1952 270 1954 238 1951 207 1946 214 1947 229 1945 239 1939 278 1936 318 1924 356 1923 362 1913 382 1912 364 1906 301 1904 237 1891 175 1887 150 1892 126 1892 101 1892 68 1893 35 1888 2 1884 -9 1871 -20 1859 -14 1851 -6 1854 9 1854 20 1855 58 1864 95 1873 132 1883 179 1894 225 1899 273 1908 362 1910 451 1909 541{\\p0}", + -- Brim and tip pompom + "{\\c&HF8F8F8&\\p6}m 626 -191 b 565 -155 486 -196 428 -151 387 -115 327 -101 304 -47 273 2 267 59 249 113 219 157 217 213 215 265 217 309 260 302 285 283 373 264 465 264 555 257 608 252 655 292 709 287 759 294 816 276 863 298 903 340 972 324 1012 367 1061 394 1125 382 1167 424 1213 462 1268 482 1322 506 1385 546 1427 610 1479 662 1510 690 1534 725 1566 752 1611 796 1664 830 1703 880 1740 918 1747 986 1805 1005 1863 991 1897 932 1916 880 1914 823 1945 777 1961 725 1979 673 1957 622 1938 575 1912 534 1862 515 1836 473 1790 417 1755 351 1697 305 1658 266 1633 216 1593 176 1574 138 1539 116 1497 110 1448 101 1402 77 1371 37 1346 -16 1295 15 1254 6 1211 -27 1170 -62 1121 -86 1072 -104 1027 -128 976 -133 914 -130 851 -137 794 -162 740 -181 679 -168 626 -191 m 2051 917 b 1971 932 1929 1017 1919 1091 1912 1149 1923 1214 1970 1254 2000 1279 2027 1314 2066 1325 2139 1338 2212 1295 2254 1238 2281 1203 2287 1158 2282 1116 2292 1061 2273 1006 2229 970 2206 941 2167 938 2138 918{\\p0}", +} + +-- called by mpv on every frame +function tick() + if (not state.enabled) then return end + + if (state.idle) then + + -- render idle message + msg.trace('idle message') + local _, _, display_aspect = mp.get_osd_size() + local display_h = 360 + local display_w = display_h * display_aspect + -- logo is rendered at 2^(6-1) = 32 times resolution with size 1800x1800 + local icon_x, icon_y = (display_w - 1800 / 32) / 2, 140 + local line_prefix = ('{\\rDefault\\an7\\1a&H00&\\bord0\\shad0\\pos(%f,%f)}'):format(icon_x, icon_y) + + local ass = assdraw.ass_new() + -- mpv logo + if user_opts.idlescreen then + for i, line in ipairs(logo_lines) do + ass:new_event() + ass:append(line_prefix .. line) + end + end + + -- Santa hat + if is_december and user_opts.idlescreen and not user_opts.greenandgrumpy then + for i, line in ipairs(santa_hat_lines) do + ass:new_event() + ass:append(line_prefix .. line) + end + end + + if user_opts.idlescreen then + ass:new_event() + ass:pos(display_w / 2, icon_y + 65) + ass:an(8) + ass:append(texts.welcome) + end + set_osd(display_w, display_h, ass.text) + + if state.showhide_enabled then + mp.disable_key_bindings('showhide') + mp.disable_key_bindings('showhide_wc') + state.showhide_enabled = false + end + + + elseif (state.fullscreen and user_opts.showfullscreen) + or (not state.fullscreen and user_opts.showwindowed) then + + -- render the OSC + render() + else + -- Flush OSD + set_osd(osc_param.playresy, osc_param.playresy, '') + end + + state.tick_last_time = mp.get_time() + + if state.anitype ~= nil then + -- state.anistart can be nil - animation should now start, or it can + -- be a timestamp when it started. state.idle has no animation. + if not state.idle and + (not state.anistart or + mp.get_time() < 1 + state.anistart + user_opts.fadeduration/1000) + then + -- animating or starting, or still within 1s past the deadline + request_tick() + else + kill_animation() + end + end +end + +function do_enable_keybindings() + if state.enabled then + if not state.showhide_enabled then + mp.enable_key_bindings('showhide', 'allow-vo-dragging+allow-hide-cursor') + mp.enable_key_bindings('showhide_wc', 'allow-vo-dragging+allow-hide-cursor') + end + state.showhide_enabled = true + end +end + +function enable_osc(enable) + state.enabled = enable + if enable then + do_enable_keybindings() + else + hide_osc() -- acts immediately when state.enabled == false + if state.showhide_enabled then + mp.disable_key_bindings('showhide') + mp.disable_key_bindings('showhide_wc') + end + state.showhide_enabled = false + end +end + +-- duration is observed for the sole purpose of updating chapter markers +-- positions. live streams with chapters are very rare, and the update is also +-- expensive (with request_init), so it's only observed when we have chapters +-- and the user didn't disable the livemarkers option (update_duration_watch). +function on_duration() request_init() end + +local duration_watched = false +function update_duration_watch() + local want_watch = user_opts.livemarkers and + (mp.get_property_number("chapters", 0) or 0) > 0 and + true or false -- ensure it's a boolean + + if (want_watch ~= duration_watched) then + if want_watch then + mp.observe_property("duration", nil, on_duration) + else + mp.unobserve_property(on_duration) + end + duration_watched = want_watch + end +end + +validate_user_opts() +update_duration_watch() + +mp.register_event('shutdown', shutdown) +mp.register_event('start-file', request_init) +mp.observe_property('track-list', nil, request_init) +mp.observe_property('playlist', nil, request_init) +mp.observe_property("chapter-list", "native", function(_, list) + list = list or {} -- safety, shouldn't return nil + table.sort(list, function(a, b) return a.time < b.time end) + state.chapter_list = list + update_duration_watch() + request_init() +end) + +mp.register_script_message('osc-message', show_message) +mp.register_script_message('osc-chapterlist', function(dur) + show_message(get_chapterlist(), dur) +end) +mp.register_script_message('osc-playlist', function(dur) + show_message(get_playlist(), dur) +end) +mp.register_script_message('osc-tracklist', function(dur) + local msg = {} + for k,v in pairs(nicetypes) do + table.insert(msg, get_tracklist(k)) + end + show_message(table.concat(msg, '\n\n'), dur) +end) + +mp.observe_property('fullscreen', 'bool', + function(name, val) + state.fullscreen = val + request_init_resize() + end +) +mp.observe_property('mute', 'bool', + function(name, val) + state.mute = val + end +) +mp.observe_property('border', 'bool', + function(name, val) + state.border = val + request_init_resize() + end +) +mp.observe_property('window-maximized', 'bool', + function(name, val) + state.maximized = val + request_init_resize() + end +) +mp.observe_property('idle-active', 'bool', + function(name, val) + state.idle = val + request_tick() + end +) +mp.observe_property('pause', 'bool', pause_state) +mp.observe_property('demuxer-cache-state', 'native', cache_state) +mp.observe_property('vo-configured', 'bool', function(name, val) + request_tick() +end) +mp.observe_property('playback-time', 'number', function(name, val) + request_tick() +end) +mp.observe_property('osd-dimensions', 'native', function(name, val) + -- (we could use the value instead of re-querying it all the time, but then + -- we might have to worry about property update ordering) + request_init_resize() +end) + +-- mouse show/hide bindings +mp.set_key_bindings({ + {'mouse_move', function(e) process_event('mouse_move', nil) end}, + {'mouse_leave', mouse_leave}, +}, 'showhide', 'force') +mp.set_key_bindings({ + {'mouse_move', function(e) process_event('mouse_move', nil) end}, + {'mouse_leave', mouse_leave}, +}, 'showhide_wc', 'force') +do_enable_keybindings() + +--mouse input bindings +mp.set_key_bindings({ + {"mbtn_left", function(e) process_event("mbtn_left", "up") end, + function(e) process_event("mbtn_left", "down") end}, + {"shift+mbtn_left", function(e) process_event("shift+mbtn_left", "up") end, + function(e) process_event("shift+mbtn_left", "down") end}, + {"mbtn_right", function(e) process_event("mbtn_right", "up") end, + function(e) process_event("mbtn_right", "down") end}, + -- alias to shift_mbtn_left for single-handed mouse use + {"mbtn_mid", function(e) process_event("shift+mbtn_left", "up") end, + function(e) process_event("shift+mbtn_left", "down") end}, + {"wheel_up", function(e) process_event("wheel_up", "press") end}, + {"wheel_down", function(e) process_event("wheel_down", "press") end}, + {"mbtn_left_dbl", "ignore"}, + {"shift+mbtn_left_dbl", "ignore"}, + {"mbtn_right_dbl", "ignore"}, +}, "input", "force") +mp.enable_key_bindings('input') + +mp.set_key_bindings({ + {'mbtn_left', function(e) process_event('mbtn_left', 'up') end, + function(e) process_event('mbtn_left', 'down') end}, +}, 'window-controls', 'force') +mp.enable_key_bindings('window-controls') + +function get_hidetimeout() + if user_opts.visibility == 'always' then + return -1 -- disable autohide + end + return user_opts.hidetimeout +end + +function always_on(val) + if state.enabled then + if val then + show_osc() + else + hide_osc() + end + end +end + +-- mode can be auto/always/never/cycle +-- the modes only affect internal variables and not stored on its own. +function visibility_mode(mode, no_osd) + if mode == "cycle" then + if not state.enabled then + mode = "auto" + elseif user_opts.visibility ~= "always" then + mode = "always" + else + mode = "never" + end + end + + if mode == 'auto' then + always_on(false) + enable_osc(true) + elseif mode == 'always' then + enable_osc(true) + always_on(true) + elseif mode == 'never' then + enable_osc(false) + else + msg.warn('Ignoring unknown visibility mode \"' .. mode .. '\"') + return + end + + user_opts.visibility = mode + mp.set_property_native("user-data/osc/visibility", user_opts.visibility) + + if not no_osd and tonumber(mp.get_property('osd-level')) >= 1 then + mp.osd_message('OSC visibility: ' .. mode) + end + + -- Reset the input state on a mode change. The input state will be + -- recalcuated on the next render cycle, except in 'never' mode where it + -- will just stay disabled. + mp.disable_key_bindings('input') + mp.disable_key_bindings('window-controls') + state.input_enabled = false + request_tick() +end + + +-- KeyboardControl +-- + +local osc_key_bindings = {} + +function osc_kb_control_up() + visibility_mode('always', true) + local keyboard_controls = build_keyboard_controls() + local rows = {} + local active_row_index = 0 + local active_row_name = nil + + local row_index = -1 + for row_name, row_controls in pairs(keyboard_controls) do + row_index = row_index + 1 + rows[row_index] = row_name + for i, control in pairs(row_controls) do + if control == state.highlight_element then + active_row_index = row_index + active_row_name = row_name + end + end + end + + if active_row_index - 1 < 0 then + return + end + + local next_row_index = active_row_index - 1 + + local new_active_row_name = rows[next_row_index] + local new_active_row = keyboard_controls[new_active_row_name] + + for i, control in pairs(new_active_row) do + state.highlight_element = control + return + end +end + +function osc_kb_control_down() + visibility_mode('always', true) + local keyboard_controls = build_keyboard_controls() + local rows = {} + local active_row_index = 0 + local active_row_name = nil + + local row_index = -1 + for row_name, row_controls in pairs(keyboard_controls) do + row_index = row_index + 1 + rows[row_index] = row_name + for i, control in pairs(row_controls) do + if control == state.highlight_element then + active_row_index = row_index + active_row_name = row_name + end + end + end + + if active_row_index + 1 > #rows then + return + end + + local next_row_index = active_row_index + 1 + + local new_active_row_name = rows[next_row_index] + local new_active_row = keyboard_controls[new_active_row_name] + + for i, control in pairs(new_active_row) do + state.highlight_element = control + return + end + +end + +function osc_kb_control_left() + visibility_mode('always', true) + local keyboard_controls = build_keyboard_controls() + + local active_control_name = nil + for row_name, row_controls in pairs(keyboard_controls) do + local controls = {} + local controls_index = -1 + for i, control in pairs(row_controls) do + controls_index = controls_index + 1 + controls[controls_index] = control + if control == state.highlight_element then + active_control_index = controls_index + active_control_name = control + end + end + + if active_control_name == 'seekbar' then + mp.commandv('seek', -5, 'exact', 'keyframes') + return + end + + if active_control_name then + if active_control_index - 1 < 0 then + return + end + + local next_control_index = active_control_index - 1 + state.highlight_element = controls[next_control_index] + return + end + end + +end + +function osc_kb_control_right() + visibility_mode('always', true) + local keyboard_controls = build_keyboard_controls() + + local active_control_name = nil + for row_name, row_controls in pairs(keyboard_controls) do + local controls = {} + local controls_index = -1 + for i, control in pairs(row_controls) do + controls_index = controls_index + 1 + controls[controls_index] = control + if control == state.highlight_element then + active_control_index = controls_index + active_control_name = control + end + end + + if active_control_name == 'seekbar' then + mp.commandv('seek', 5, 'exact', 'keyframes') + return + end + + if active_control_name then + if active_control_index + 1 > #controls then + return + end + + local next_control_index = active_control_index + 1 + state.highlight_element = controls[next_control_index] + return + end + end + +end + +function osc_kb_control_back() + visibility_mode('auto', true) +end + +function osc_kb_control_enter() + visibility_mode('always', true) + for n = 1, #elements do + if elements[n].name == state.highlight_element then + + local action = 'enter' + if element_has_action(elements[n], action) then + elements[n].eventresponder[action](elements[n]) + return + end + + local action = 'mbtn_left_up' + if element_has_action(elements[n], action) then + elements[n].eventresponder[action](elements[n]) + return + end + end + end + +end + +function osc_add_key_binding(key, name, fn, flags) + osc_key_bindings[#osc_key_bindings + 1] = name + mp.add_forced_key_binding(key, name, fn, flags) +end + +-- This is based on code from https://github.com/darsain/uosc +function osc_enable_key_bindings() + osc_key_bindings = {} + -- The `mp.set_key_bindings()` method would be easier here, but that + -- doesn't support 'repeatable' flag, so we are stuck with this monster. + osc_add_key_binding('up', 'osc-kb-control-prev1', osc_kb_control_up, 'repeatable') + osc_add_key_binding('down', 'osc-kb-control-next1', osc_kb_control_down, 'repeatable') + osc_add_key_binding('left', 'osc-kb-control-left1', osc_kb_control_left, 'repeatable') + osc_add_key_binding('right', 'osc-kb-control-right1', osc_kb_control_right, 'repeatable') + osc_add_key_binding('enter', 'osc-kb-control-select-alt3', osc_kb_control_enter, 'repeatable') + osc_add_key_binding('esc', 'osc-kb-control-close', osc_kb_control_back, 'repeatable') +end + +function osc_disable_key_bindings() + for _, name in ipairs(osc_key_bindings) do mp.remove_key_binding(name) end + osc_key_bindings = {} +end + + + +visibility_mode(user_opts.visibility, true) +mp.register_script_message('osc-visibility', visibility_mode) +mp.add_key_binding(nil, 'visibility', function() visibility_mode('cycle') end) + +mp.register_script_message("thumbfast-info", function(json) + local data = utils.parse_json(json) + if type(data) ~= "table" or not data.width or not data.height then + msg.error("thumbfast-info: received json didn't produce a table with thumbnail information") + else + thumbfast = data + end +end) + +set_virt_mouse_area(0, 0, 0, 0, 'input') +set_virt_mouse_area(0, 0, 0, 0, 'window-controls') diff --git a/general/configs/rofi/applets/android/apps.sh b/general/configs/rofi/applets/android/apps.sh new file mode 100755 index 0000000..466c629 --- /dev/null +++ b/general/configs/rofi/applets/android/apps.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/applets/android" +rofi_command="rofi -theme $dir/six.rasi" + +# Links +terminal="" +files="" +editor="" +browser="" +music="" +settings="" + +# Error msg +msg() { + rofi -theme "$dir/message.rasi" -e "$1" +} + +# Variable passed to rofi +options="$terminal\n$files\n$editor\n$browser\n$music\n$settings" + +chosen="$(echo -e "$options" | $rofi_command -p "Most Used" -dmenu -selected-row 0)" +case $chosen in + $terminal) + if [[ -f /usr/bin/termite ]]; then + termite & + elif [[ -f /usr/bin/urxvt ]]; then + urxvt & + elif [[ -f /usr/bin/kitty ]]; then + kitty & + elif [[ -f /usr/bin/xterm ]]; then + xterm & + elif [[ -f /usr/bin/xfce4-terminal ]]; then + xfce4-terminal & + elif [[ -f /usr/bin/gnome-terminal ]]; then + gnome-terminal & + else + msg "No suitable terminal found!" + fi + ;; + $files) + if [[ -f /usr/bin/thunar ]]; then + thunar & + elif [[ -f /usr/bin/pcmanfm ]]; then + pcmanfm & + else + msg "No suitable file manager found!" + fi + ;; + $editor) + if [[ -f /usr/bin/geany ]]; then + geany & + elif [[ -f /usr/bin/leafpad ]]; then + leafpad & + elif [[ -f /usr/bin/mousepad ]]; then + mousepad & + elif [[ -f /usr/bin/code ]]; then + code & + else + msg "No suitable text editor found!" + fi + ;; + $browser) + if [[ -f /usr/bin/firefox ]]; then + firefox & + elif [[ -f /usr/bin/chromium ]]; then + chromium & + elif [[ -f /usr/bin/midori ]]; then + midori & + else + msg "No suitable web browser found!" + fi + ;; + $music) + if [[ -f /usr/bin/lxmusic ]]; then + lxmusic & + else + msg "No suitable music player found!" + fi + ;; + $settings) + if [[ -f /usr/bin/xfce4-settings-manager ]]; then + xfce4-settings-manager & + else + msg "No suitable settings manager found!" + fi + ;; +esac + diff --git a/general/configs/rofi/applets/android/backlight.sh b/general/configs/rofi/applets/android/backlight.sh new file mode 100755 index 0000000..d37f975 --- /dev/null +++ b/general/configs/rofi/applets/android/backlight.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/applets/android" +rofi_command="rofi -theme $dir/three.rasi" + +# Error msg +msg() { + rofi -theme "$dir/message.rasi" -e "$1" +} + +## Get Brightness +if [[ -f /bin/brightnessctl ]]; then + BNESS="$(brightnessctl get)" + MAX="$(brightnessctl max)" + PERC="$((BNESS*100/MAX))" + BLIGHT=${PERC%.*} +elif [[ -f /usr/bin/blight ]]; then + DEVICE=$(ls /sys/class/backlight | head -n 1) + BNESS="$(blight -d $DEVICE get brightness)" + PERC="$(($BNESS*100/255))" + BLIGHT=${PERC%.*} +elif [[ -f /usr/bin/xbacklight ]]; then + VAR="$(xbacklight -get)" + BLIGHT="$(printf "%.0f\n" "$VAR")" +else + msg "No suitable backlight utility found!" + exit 1 +fi + +if [[ $BLIGHT -ge 1 ]] && [[ $BLIGHT -le 29 ]]; then + MSG="Low" +elif [[ $BLIGHT -ge 30 ]] && [[ $BLIGHT -le 49 ]]; then + MSG="Optimal" +elif [[ $BLIGHT -ge 50 ]] && [[ $BLIGHT -le 69 ]]; then + MSG="High" +elif [[ $BLIGHT -ge 70 ]] && [[ $BLIGHT -le 99 ]]; then + MSG="Too Much" +fi + +## Icons +ICON_UP="" +ICON_DOWN="" +ICON_OPT="" + +notify="notify-send -u low -t 1500" +options="$ICON_UP\n$ICON_OPT\n$ICON_DOWN" + +## Main +chosen="$(echo -e "$options" | $rofi_command -p "$BLIGHT%" -dmenu -selected-row 1)" +case $chosen in + "$ICON_UP") + if [[ -f /bin/brightnessctl ]]; then + brightnessctl -q set +10% && $notify "Brightness Up $ICON_UP" + elif [[ -f /usr/bin/blight ]]; then + blight -d "$DEVICE" set +10% && $notify "Brightness Up $ICON_UP" + elif [[ -f /usr/bin/xbacklight ]]; then + xbacklight -inc 10 && $notify "Brightness Up $ICON_UP" + fi + ;; + "$ICON_DOWN") + if [[ -f /bin/brightnessctl ]]; then + brightnessctl -q set 10%- && $notify "Brightness Down $ICON_DOWN" + elif [[ -f /usr/bin/blight ]]; then + blight -d "$DEVICE" set -10% && $notify "Brightness Down $ICON_DOWN" + elif [[ -f /usr/bin/xbacklight ]]; then + xbacklight -dec 10 && $notify "Brightness Down $ICON_DOWN" + fi + ;; + "$ICON_OPT") + if [[ -f /bin/brightnessctl ]]; then + brightnessctl -q set 25% && $notify "Optimal Brightness $ICON_OPT" + elif [[ -f /usr/bin/blight ]]; then + blight -d "$DEVICE" set 25% && $notify "Optimal Brightness $ICON_OPT" + elif [[ -f /usr/bin/xbacklight ]]; then + xbacklight -set 30 && $notify "Optimal Brightness $ICON_OPT" + fi + ;; +esac + diff --git a/general/configs/rofi/applets/android/colors.rasi b/general/configs/rofi/applets/android/colors.rasi new file mode 100755 index 0000000..5ce46fc --- /dev/null +++ b/general/configs/rofi/applets/android/colors.rasi @@ -0,0 +1,22 @@ +/* + * Change the colorscheme for every menu simply by editing this file... + * + * Available Color Schemes + * // Dark + * material-dark/amber material-dark/blue material-dark/blue_grey material-dark/brown material-dark/cyan material-dark/deep_orange + * material-dark/deep_purple material-dark/green material-dark/grey material-dark/indigo material-dark/light_blue material-dark/light_green + * material-dark/lime material-dark/orange material-dark/pink material-dark/purple material-dark/red material-dark/teal + * material-dark/yellow + * // Light + * material-light/amber material-light/blue material-light/blue_grey material-light/brown material-light/cyan material-light/deep_orange + * material-light/deep_purple material-light/green material-light/grey material-light/indigo material-light/light_blue material-light/light_green + * material-light/lime material-light/orange material-light/pink material-light/purple material-light/red material-light/teal + * material-light/yellow + * + * // Other + * adapta, adapta-nokto, arc, arc-dark, adwaita, gruvbox, dark + * armchair, darkpink, fresh, inside, party, sirin + * + */ + +@import "../styles/arc.rasi" diff --git a/general/configs/rofi/applets/android/confirm.rasi b/general/configs/rofi/applets/android/confirm.rasi new file mode 100755 index 0000000..970783f --- /dev/null +++ b/general/configs/rofi/applets/android/confirm.rasi @@ -0,0 +1,24 @@ +/* Confirm Dialog */ + +@import "colors.rasi" + +* { + background-color: @background; + text-color: @foreground; + font: "Iosevka Nerd Font 12"; +} + +window { + width: 225px; + padding: 25px; + border: 0px; + border-radius: 12px; + border-color: @accent; + location: center; + y-offset: -20px; +} + +entry { + expand: true; + text-color: @accent; +} diff --git a/general/configs/rofi/applets/android/five.rasi b/general/configs/rofi/applets/android/five.rasi new file mode 100755 index 0000000..29cdcce --- /dev/null +++ b/general/configs/rofi/applets/android/five.rasi @@ -0,0 +1,92 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + disable-history: false; + sidebar-mode: false; +} + +@import "colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + width: 100px; + location: east; + x-offset: -15px; + y-offset: 0px; +} + +listview { + lines: 5; + margin: 8px; + spacing: 8px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ listview ]; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 26px 26px 26px 26px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @urgent; + text-color: @foreground; + border-radius: 10px; +} + +element normal.active, +element alternate.active { + background-color: @background-alt; + text-color: @foreground; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 10px; + border-color: @border; +} + +element selected.urgent { + background-color: @urgent; + text-color: @foreground; +} + +element selected.active { + background-color: @background-alt; + color: @foreground; +} diff --git a/general/configs/rofi/applets/android/message.rasi b/general/configs/rofi/applets/android/message.rasi new file mode 100755 index 0000000..f35d3a2 --- /dev/null +++ b/general/configs/rofi/applets/android/message.rasi @@ -0,0 +1,24 @@ +/* Confirm Dialog */ + +@import "colors.rasi" + +* { + background-color: @background; + text-color: @foreground; + font: "Iosevka Nerd Font 12"; +} + +window { + width: 360px; + padding: 25px; + border: 0px; + border-radius: 12px; + border-color: @accent; + location: center; + y-offset: -20px; +} + +entry { + expand: true; + text-color: @accent; +} diff --git a/general/configs/rofi/applets/android/mpd.sh b/general/configs/rofi/applets/android/mpd.sh new file mode 100755 index 0000000..6f15be0 --- /dev/null +++ b/general/configs/rofi/applets/android/mpd.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/applets/android" +rofi_command="rofi -theme $dir/six.rasi" + +# Gets the current status of mpd (for us to parse it later on) +status="$(mpc status)" +# Defines the Play / Pause option content +if [[ $status == *"[playing]"* ]]; then + play_pause="" +else + play_pause="" +fi +active="" +urgent="" + +# Display if repeat mode is on / off +tog_repeat="" +if [[ $status == *"repeat: on"* ]]; then + active="-a 4" +elif [[ $status == *"repeat: off"* ]]; then + urgent="-u 4" +else + tog_repeat=" Parsing error" +fi + +# Display if random mode is on / off +tog_random="" +if [[ $status == *"random: on"* ]]; then + [ -n "$active" ] && active+=",5" || active="-a 5" +elif [[ $status == *"random: off"* ]]; then + [ -n "$urgent" ] && urgent+=",5" || urgent="-u 5" +else + tog_random=" Parsing error" +fi +stop="" +next="" +previous="" + +# Variable passed to rofi +options="$previous\n$play_pause\n$stop\n$next\n$tog_repeat\n$tog_random" + +# Get the current playing song +current=$(mpc -f %title% current) +# If mpd isn't running it will return an empty string, we don't want to display that +if [[ -z "$current" ]]; then + current="-" +fi + +# Spawn the mpd menu with the "Play / Pause" entry selected by default +chosen="$(echo -e "$options" | $rofi_command -p " $current" -dmenu $active $urgent -selected-row 1)" +case $chosen in + $previous) + mpc -q prev && notify-send -u low -t 1800 " $(mpc current)" + ;; + $play_pause) + mpc -q toggle && notify-send -u low -t 1800 " $(mpc current)" + ;; + $stop) + mpc -q stop + ;; + $next) + mpc -q next && notify-send -u low -t 1800 " $(mpc current)" + ;; + $tog_repeat) + mpc -q repeat + ;; + $tog_random) + mpc -q random + ;; +esac diff --git a/general/configs/rofi/applets/android/powermenu.sh b/general/configs/rofi/applets/android/powermenu.sh new file mode 100755 index 0000000..e28c731 --- /dev/null +++ b/general/configs/rofi/applets/android/powermenu.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/applets/android" +rofi_command="rofi -theme $dir/five.rasi" + +uptime=$(uptime -p | sed -e 's/up //g') + +# Options +shutdown="" +reboot="" +lock="" +suspend="" +logout="" + +# Confirmation +confirm_exit() { + rofi -dmenu\ + -i\ + -no-fixed-num-lines\ + -p "Are You Sure? : "\ + -theme $dir/confirm.rasi +} + +# Message +msg() { + rofi -theme "$dir/message.rasi" -e "Available Options - yes / y / no / n" +} + +# Variable passed to rofi +options="$shutdown\n$reboot\n$lock\n$suspend\n$logout" + +chosen="$(echo -e "$options" | $rofi_command -p "Uptime: $uptime" -dmenu -selected-row 2)" +case $chosen in + $shutdown) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + systemctl poweroff + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $reboot) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + systemctl reboot + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $lock) + if [[ -f /usr/bin/i3lock ]]; then + i3lock + elif [[ -f /usr/bin/betterlockscreen ]]; then + betterlockscreen -l + fi + ;; + $suspend) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + mpc -q pause + amixer set Master mute + systemctl suspend + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $logout) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + if [[ "$DESKTOP_SESSION" == "Openbox" ]]; then + openbox --exit + elif [[ "$DESKTOP_SESSION" == "bspwm" ]]; then + bspc quit + elif [[ "$DESKTOP_SESSION" == "i3" ]]; then + i3-msg exit + fi + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; +esac diff --git a/general/configs/rofi/applets/android/quicklinks.sh b/general/configs/rofi/applets/android/quicklinks.sh new file mode 100755 index 0000000..e2ae62f --- /dev/null +++ b/general/configs/rofi/applets/android/quicklinks.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/applets/android" +rofi_command="rofi -theme $dir/six.rasi" + +# Error msg +msg() { + rofi -theme "$dir/message.rasi" -e "$1" +} + +# Browser +if [[ -f /usr/bin/firefox ]]; then + app="firefox" +elif [[ -f /usr/bin/chromium ]]; then + app="chromium" +elif [[ -f /usr/bin/midori ]]; then + app="midori" +else + msg "No suitable web browser found!" + exit 1 +fi + +# Links +google="" +facebook="" +twitter="" +github="" +mail="" +youtube="" + +# Variable passed to rofi +options="$google\n$facebook\n$twitter\n$github\n$mail\n$youtube" + +chosen="$(echo -e "$options" | $rofi_command -p "Open In : Firefox" -dmenu -selected-row 0)" +case $chosen in + $google) + $app https://www.google.com & + ;; + $facebook) + $app https://www.facebook.com & + ;; + $twitter) + $app https://www.twitter.com & + ;; + $github) + $app https://www.github.com & + ;; + $mail) + $app https://www.gmail.com & + ;; + $youtube) + $app https://www.youtube.com & + ;; +esac + diff --git a/general/configs/rofi/applets/android/screenshot.sh b/general/configs/rofi/applets/android/screenshot.sh new file mode 100755 index 0000000..95abe34 --- /dev/null +++ b/general/configs/rofi/applets/android/screenshot.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/applets/android" +rofi_command="rofi -theme $dir/three.rasi" + +# Error msg +msg() { + rofi -theme "$dir/message.rasi" -e "Please install 'scrot' first." +} + +# Options +screen="" +area="" +window="" + +# Variable passed to rofi +options="$screen\n$area\n$window" + +chosen="$(echo -e "$options" | $rofi_command -p '' -dmenu -selected-row 1)" +case $chosen in + $screen) + if [[ -f /usr/bin/scrot ]]; then + sleep 1; scrot 'Screenshot_%Y-%m-%d-%S_$wx$h.png' -e 'mv $f $$(xdg-user-dir PICTURES) ; viewnior $$(xdg-user-dir PICTURES)/$f' + else + msg + fi + ;; + $area) + if [[ -f /usr/bin/scrot ]]; then + scrot -s 'Screenshot_%Y-%m-%d-%S_$wx$h.png' -e 'mv $f $$(xdg-user-dir PICTURES) ; viewnior $$(xdg-user-dir PICTURES)/$f' + else + msg + fi + ;; + $window) + if [[ -f /usr/bin/scrot ]]; then + sleep 1; scrot -u 'Screenshot_%Y-%m-%d-%S_$wx$h.png' -e 'mv $f $$(xdg-user-dir PICTURES) ; viewnior $$(xdg-user-dir PICTURES)/$f' + else + msg + fi + ;; +esac + diff --git a/general/configs/rofi/applets/android/six.rasi b/general/configs/rofi/applets/android/six.rasi new file mode 100755 index 0000000..e654946 --- /dev/null +++ b/general/configs/rofi/applets/android/six.rasi @@ -0,0 +1,92 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + disable-history: false; + sidebar-mode: false; +} + +@import "colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + width: 100px; + location: east; + x-offset: -15px; + y-offset: 0px; +} + +listview { + lines: 6; + margin: 8px; + spacing: 8px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ listview ]; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 26px 26px 26px 26px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 10px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 10px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/android/three.rasi b/general/configs/rofi/applets/android/three.rasi new file mode 100755 index 0000000..0a09705 --- /dev/null +++ b/general/configs/rofi/applets/android/three.rasi @@ -0,0 +1,92 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + disable-history: false; + sidebar-mode: false; +} + +@import "colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + width: 100px; + location: east; + x-offset: -15px; + y-offset: 0px; +} + +listview { + lines: 3; + margin: 8px; + spacing: 8px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ listview ]; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 26px 26px 26px 26px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 10px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 10px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/android/volume.sh b/general/configs/rofi/applets/android/volume.sh new file mode 100755 index 0000000..429db8c --- /dev/null +++ b/general/configs/rofi/applets/android/volume.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/applets/android" +rofi_command="rofi -theme $dir/three.rasi" + +## Get Volume +#VOLUME=$(amixer get Master | tail -n 1 | awk -F ' ' '{print $5}' | tr -d '[]%') +MUTE=$(amixer get Master | tail -n 1 | awk -F ' ' '{print $6}' | tr -d '[]%') + +active="" +urgent="" + +if [[ $MUTE == *"off"* ]]; then + active="-a 1" +else + urgent="-u 1" +fi + +if [[ $MUTE == *"off"* ]]; then + active="-a 1" +else + urgent="-u 1" +fi + +if [[ $MUTE == *"on"* ]]; then + VOLUME="$(amixer get Master | tail -n 1 | awk -F ' ' '{print $5}' | tr -d '[]%')%" +else + VOLUME="Mu..." +fi + +## Icons +ICON_UP="" +ICON_DOWN="" +ICON_MUTED="" + +options="$ICON_UP\n$ICON_MUTED\n$ICON_DOWN" + +## Main +chosen="$(echo -e "$options" | $rofi_command -p "$VOLUME" -dmenu $active $urgent -selected-row 0)" +case $chosen in + $ICON_UP) + amixer -Mq set Master,0 5%+ unmute && notify-send -u low -t 1500 "Volume Up $ICON_UP" + ;; + $ICON_DOWN) + amixer -Mq set Master,0 5%- unmute && notify-send -u low -t 1500 "Volume Down $ICON_DOWN" + ;; + $ICON_MUTED) + amixer -q set Master toggle + ;; +esac + diff --git a/general/configs/rofi/applets/applets/apps.sh b/general/configs/rofi/applets/applets/apps.sh new file mode 100755 index 0000000..f8129ce --- /dev/null +++ b/general/configs/rofi/applets/applets/apps.sh @@ -0,0 +1,95 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/applets/style.sh)" + +dir="$HOME/.config/rofi/applets/applets/configs/$style" +rofi_command="rofi -theme $dir/apps.rasi" + +# Links +terminal="" +files="" +editor="" +browser="" +music="" +settings="" + +# Error msg +msg() { + rofi -theme "$HOME/.config/rofi/applets/styles/message.rasi" -e "$1" +} + +# Variable passed to rofi +options="$terminal\n$files\n$editor\n$browser\n$music\n$settings" + +chosen="$(echo -e "$options" | $rofi_command -p "Most Used" -dmenu -selected-row 0)" +case $chosen in + $terminal) + if [[ -f /usr/bin/termite ]]; then + termite & + elif [[ -f /usr/bin/urxvt ]]; then + urxvt & + elif [[ -f /usr/bin/kitty ]]; then + kitty & + elif [[ -f /usr/bin/xterm ]]; then + xterm & + elif [[ -f /usr/bin/xfce4-terminal ]]; then + xfce4-terminal & + elif [[ -f /usr/bin/gnome-terminal ]]; then + gnome-terminal & + else + msg "No suitable terminal found!" + fi + ;; + $files) + if [[ -f /usr/bin/thunar ]]; then + thunar & + elif [[ -f /usr/bin/pcmanfm ]]; then + pcmanfm & + else + msg "No suitable file manager found!" + fi + ;; + $editor) + if [[ -f /usr/bin/geany ]]; then + geany & + elif [[ -f /usr/bin/leafpad ]]; then + leafpad & + elif [[ -f /usr/bin/mousepad ]]; then + mousepad & + elif [[ -f /usr/bin/code ]]; then + code & + else + msg "No suitable text editor found!" + fi + ;; + $browser) + if [[ -f /usr/bin/firefox ]]; then + firefox & + elif [[ -f /usr/bin/chromium ]]; then + chromium & + elif [[ -f /usr/bin/midori ]]; then + midori & + else + msg "No suitable web browser found!" + fi + ;; + $music) + if [[ -f /usr/bin/lxmusic ]]; then + lxmusic & + else + msg "No suitable music player found!" + fi + ;; + $settings) + if [[ -f /usr/bin/xfce4-settings-manager ]]; then + xfce4-settings-manager & + else + msg "No suitable settings manager found!" + fi + ;; +esac diff --git a/general/configs/rofi/applets/applets/backlight.sh b/general/configs/rofi/applets/applets/backlight.sh new file mode 100755 index 0000000..b94cfa7 --- /dev/null +++ b/general/configs/rofi/applets/applets/backlight.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/applets/style.sh)" + +dir="$HOME/.config/rofi/applets/applets/configs/$style" +rofi_command="rofi -theme $dir/backlight.rasi" + +# Error msg +msg() { + rofi -theme "$HOME/.config/rofi/applets/styles/message.rasi" -e "$1" +} + +## Get Brightness +if [[ -f /bin/brightnessctl ]]; then + BNESS="$(brightnessctl get)" + MAX="$(brightnessctl max)" + PERC="$((BNESS*100/MAX))" + BLIGHT=${PERC%.*} +elif [[ -f /usr/bin/blight ]]; then + DEVICE=$(ls /sys/class/backlight | head -n 1) + BNESS="$(blight -d $DEVICE get brightness)" + PERC="$(($BNESS*100/255))" + BLIGHT=${PERC%.*} +elif [[ -f /usr/bin/xbacklight ]]; then + VAR="$(xbacklight -get)" + BLIGHT="$(printf "%.0f\n" "$VAR")" +else + msg "No suitable backlight utility found!" + exit 1 +fi + +if [[ $BLIGHT -ge 1 ]] && [[ $BLIGHT -le 29 ]]; then + MSG="Low" +elif [[ $BLIGHT -ge 30 ]] && [[ $BLIGHT -le 49 ]]; then + MSG="Optimal" +elif [[ $BLIGHT -ge 50 ]] && [[ $BLIGHT -le 69 ]]; then + MSG="High" +elif [[ $BLIGHT -ge 70 ]] && [[ $BLIGHT -le 99 ]]; then + MSG="Too Much" +fi + +## Icons +ICON_UP="" +ICON_DOWN="" +ICON_OPT="" + +notify="notify-send -u low -t 1500" +options="$ICON_UP\n$ICON_OPT\n$ICON_DOWN" + +## Main +chosen="$(echo -e "$options" | $rofi_command -p "$BLIGHT%" -dmenu -selected-row 1)" +case $chosen in + "$ICON_UP") + if [[ -f /bin/brightnessctl ]]; then + brightnessctl -q set +10% && $notify "Brightness Up $ICON_UP" + elif [[ -f /usr/bin/blight ]]; then + blight -d "$DEVICE" set +10% && $notify "Brightness Up $ICON_UP" + elif [[ -f /usr/bin/xbacklight ]]; then + xbacklight -inc 10 && $notify "Brightness Up $ICON_UP" + fi + ;; + "$ICON_DOWN") + if [[ -f /bin/brightnessctl ]]; then + brightnessctl -q set 10%- && $notify "Brightness Down $ICON_DOWN" + elif [[ -f /usr/bin/blight ]]; then + blight -d "$DEVICE" set -10% && $notify "Brightness Down $ICON_DOWN" + elif [[ -f /usr/bin/xbacklight ]]; then + xbacklight -dec 10 && $notify "Brightness Down $ICON_DOWN" + fi + ;; + "$ICON_OPT") + if [[ -f /bin/brightnessctl ]]; then + brightnessctl -q set 25% && $notify "Optimal Brightness $ICON_OPT" + elif [[ -f /usr/bin/blight ]]; then + blight -d "$DEVICE" set 25% && $notify "Optimal Brightness $ICON_OPT" + elif [[ -f /usr/bin/xbacklight ]]; then + xbacklight -set 30 && $notify "Optimal Brightness $ICON_OPT" + fi + ;; +esac + diff --git a/general/configs/rofi/applets/applets/battery.sh b/general/configs/rofi/applets/applets/battery.sh new file mode 100755 index 0000000..8a38ab4 --- /dev/null +++ b/general/configs/rofi/applets/applets/battery.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/applets/style.sh)" + +dir="$HOME/.config/rofi/applets/applets/configs/$style" +rofi_command="rofi -theme $dir/battery.rasi" + +## Get data +BATTERY="$(acpi | awk -F ' ' '{print $4}' | tr -d \%,)" +CHARGE="$(acpi | awk -F ' ' '{print $3}' | tr -d \,)" + +active="" +urgent="" + +if [[ $CHARGE = *"Charging"* ]]; then + active="-a 1" + ICON_CHRG="" + MSG=$CHARGE +elif [[ $CHARGE = *"Full"* ]]; then + active="-u 1" + ICON_CHRG="" + MSG=$CHARGE +else + urgent="-u 1" + ICON_CHRG="" + MSG=$CHARGE +fi + +# Discharging +#if [[ $CHARGE -eq 1 ]] && [[ $BATTERY -eq 100 ]]; then +# ICON_DISCHRG="" +if [[ $BATTERY -ge 5 ]] && [[ $BATTERY -le 19 ]]; then + ICON_DISCHRG="" +elif [[ $BATTERY -ge 20 ]] && [[ $BATTERY -le 39 ]]; then + ICON_DISCHRG="" +elif [[ $BATTERY -ge 40 ]] && [[ $BATTERY -le 59 ]]; then + ICON_DISCHRG="" +elif [[ $BATTERY -ge 60 ]] && [[ $BATTERY -le 79 ]]; then + ICON_DISCHRG="" +elif [[ $BATTERY -ge 80 ]] && [[ $BATTERY -le 100 ]]; then + ICON_DISCHRG="" +fi + +## Icons +ICON_PMGR="" + +options="$ICON_DISCHRG\n$ICON_CHRG\n$ICON_PMGR" + +## Main +chosen="$(echo -e "$options" | $rofi_command -p "$BATTERY%" -dmenu $active $urgent -selected-row 0)" +case $chosen in + $ICON_CHRG) + ;; + $ICON_DISCHRG) + ;; + $ICON_PMGR) + xfce4-power-manager-settings + ;; +esac + diff --git a/general/configs/rofi/applets/applets/configs/circle/apps.rasi b/general/configs/rofi/applets/applets/configs/circle/apps.rasi new file mode 100755 index 0000000..5bd1300 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/circle/apps.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 40px; + location: southeast; + width: 500px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 25px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Apps "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; + border-radius: 25px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 100%; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/circle/backlight.rasi b/general/configs/rofi/applets/applets/configs/circle/backlight.rasi new file mode 100755 index 0000000..5c6bf3b --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/circle/backlight.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 40px; + location: southeast; + width: 250px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 25px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Brightness "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; + border-radius: 25px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 100%; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/circle/battery.rasi b/general/configs/rofi/applets/applets/configs/circle/battery.rasi new file mode 100755 index 0000000..db6d8d0 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/circle/battery.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 40px; + location: southeast; + width: 260px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 25px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Battery "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; + border-radius: 25px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "Iosevka Nerd Font 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 100%; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/circle/mpd.rasi b/general/configs/rofi/applets/applets/configs/circle/mpd.rasi new file mode 100755 index 0000000..e49f391 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/circle/mpd.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 40px; + location: southeast; + width: 500px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 25px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " MPD "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; + border-radius: 25px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 100%; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/circle/network.rasi b/general/configs/rofi/applets/applets/configs/circle/network.rasi new file mode 100755 index 0000000..4ccc4fc --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/circle/network.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 40px; + location: southeast; + width: 335px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 25px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Network "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; + border-radius: 25px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 4; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 100%; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/circle/powermenu.rasi b/general/configs/rofi/applets/applets/configs/circle/powermenu.rasi new file mode 100755 index 0000000..2dfc85d --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/circle/powermenu.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 40px; + location: southeast; + width: 420px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 25px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " System "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; + border-radius: 25px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 5; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 100%; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/circle/quicklinks.rasi b/general/configs/rofi/applets/applets/configs/circle/quicklinks.rasi new file mode 100755 index 0000000..1eb01ec --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/circle/quicklinks.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 40px; + location: southeast; + width: 500px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 25px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Quick Links "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; + border-radius: 25px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 100%; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/circle/screenshot.rasi b/general/configs/rofi/applets/applets/configs/circle/screenshot.rasi new file mode 100755 index 0000000..801f6f4 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/circle/screenshot.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 40px; + location: southeast; + width: 250px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 25px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Screenshot "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; + border-radius: 25px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 100%; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/circle/time.rasi b/general/configs/rofi/applets/applets/configs/circle/time.rasi new file mode 100755 index 0000000..cc3fd05 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/circle/time.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 40px; + location: southeast; + width: 450px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 25px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Time "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; + border-radius: 25px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "Hurmit Nerd Font Mono 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 10px 40px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 100%; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/circle/volume.rasi b/general/configs/rofi/applets/applets/configs/circle/volume.rasi new file mode 100755 index 0000000..3b533e4 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/circle/volume.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 40px; + location: southeast; + width: 250px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 25px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Volume "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; + border-radius: 25px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 0px 2px 0px; + border-radius: 100%; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/rounded/apps.rasi b/general/configs/rofi/applets/applets/configs/rounded/apps.rasi new file mode 100755 index 0000000..616a144 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/rounded/apps.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + location: southeast; + width: 500px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 10px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Apps "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 12px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/rounded/backlight.rasi b/general/configs/rofi/applets/applets/configs/rounded/backlight.rasi new file mode 100755 index 0000000..5ce20c4 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/rounded/backlight.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + location: southeast; + width: 250px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 10px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Brightness "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 12px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/rounded/battery.rasi b/general/configs/rofi/applets/applets/configs/rounded/battery.rasi new file mode 100755 index 0000000..801e962 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/rounded/battery.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + location: southeast; + width: 250px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 10px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Battery "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "Iosevka Nerd Font 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 12px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/rounded/mpd.rasi b/general/configs/rofi/applets/applets/configs/rounded/mpd.rasi new file mode 100755 index 0000000..61595af --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/rounded/mpd.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + location: southeast; + width: 500px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 10px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " MPD "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 12px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/rounded/network.rasi b/general/configs/rofi/applets/applets/configs/rounded/network.rasi new file mode 100755 index 0000000..54e40d0 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/rounded/network.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + location: southeast; + width: 335px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 10px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Network "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 4; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 12px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/rounded/powermenu.rasi b/general/configs/rofi/applets/applets/configs/rounded/powermenu.rasi new file mode 100755 index 0000000..51a8b13 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/rounded/powermenu.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + location: southeast; + width: 420px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 10px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " System "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 5; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 12px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/rounded/quicklinks.rasi b/general/configs/rofi/applets/applets/configs/rounded/quicklinks.rasi new file mode 100755 index 0000000..b44f3b2 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/rounded/quicklinks.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + location: southeast; + width: 500px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 10px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Quick Links "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 12px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/rounded/screenshot.rasi b/general/configs/rofi/applets/applets/configs/rounded/screenshot.rasi new file mode 100755 index 0000000..4c1071e --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/rounded/screenshot.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + location: southeast; + width: 250px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 10px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Screenshot "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 12px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/rounded/time.rasi b/general/configs/rofi/applets/applets/configs/rounded/time.rasi new file mode 100755 index 0000000..bee4545 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/rounded/time.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + location: southeast; + width: 450px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 10px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Time "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "Hurmit Nerd Font Mono 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 30px 10px 30px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 12px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/rounded/volume.rasi b/general/configs/rofi/applets/applets/configs/rounded/volume.rasi new file mode 100755 index 0000000..43f753d --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/rounded/volume.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 12px; + location: southeast; + width: 250px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 10px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Volume "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 12px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 12px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 12px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @background-light; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/square/apps.rasi b/general/configs/rofi/applets/applets/configs/square/apps.rasi new file mode 100755 index 0000000..6760c56 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/square/apps.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: southeast; + width: 500px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Apps "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/square/backlight.rasi b/general/configs/rofi/applets/applets/configs/square/backlight.rasi new file mode 100755 index 0000000..5dcf4b1 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/square/backlight.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: southeast; + width: 250px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Brightness "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/square/battery.rasi b/general/configs/rofi/applets/applets/configs/square/battery.rasi new file mode 100755 index 0000000..cfa2adf --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/square/battery.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: southeast; + width: 250px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Battery "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "Iosevka Nerd Font 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/square/mpd.rasi b/general/configs/rofi/applets/applets/configs/square/mpd.rasi new file mode 100755 index 0000000..ec2eff9 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/square/mpd.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: southeast; + width: 500px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " MPD "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/square/network.rasi b/general/configs/rofi/applets/applets/configs/square/network.rasi new file mode 100755 index 0000000..f57cb17 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/square/network.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: southeast; + width: 350px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 3px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Network "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 4; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/square/powermenu.rasi b/general/configs/rofi/applets/applets/configs/square/powermenu.rasi new file mode 100755 index 0000000..6bd1c96 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/square/powermenu.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: southeast; + width: 420px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " System "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 5; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/square/quicklinks.rasi b/general/configs/rofi/applets/applets/configs/square/quicklinks.rasi new file mode 100755 index 0000000..731ed7e --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/square/quicklinks.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: southeast; + width: 500px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Quick Links "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/square/screenshot.rasi b/general/configs/rofi/applets/applets/configs/square/screenshot.rasi new file mode 100755 index 0000000..5c1fa95 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/square/screenshot.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: southeast; + width: 250px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Screenshot "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/square/time.rasi b/general/configs/rofi/applets/applets/configs/square/time.rasi new file mode 100755 index 0000000..7022da9 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/square/time.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: southeast; + width: 450px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 3px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Time "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "Hurmit Nerd Font Mono 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 30px 10px 30px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/configs/square/volume.rasi b/general/configs/rofi/applets/applets/configs/square/volume.rasi new file mode 100755 index 0000000..adfeb39 --- /dev/null +++ b/general/configs/rofi/applets/applets/configs/square/volume.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 12"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: southeast; + width: 250px; + x-offset: -15px; + y-offset: -45px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Volume "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 12px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 12px; + margin: 12px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 20"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 19px 10px 19px 10px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/applets/mpd.sh b/general/configs/rofi/applets/applets/mpd.sh new file mode 100755 index 0000000..d1f3d2b --- /dev/null +++ b/general/configs/rofi/applets/applets/mpd.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/applets/style.sh)" + +dir="$HOME/.config/rofi/applets/applets/configs/$style" +rofi_command="rofi -theme $dir/mpd.rasi" + +# Gets the current status of mpd (for us to parse it later on) +status="$(mpc status)" +# Defines the Play / Pause option content +if [[ $status == *"[playing]"* ]]; then + play_pause="" +else + play_pause="" +fi +active="" +urgent="" + +# Display if repeat mode is on / off +tog_repeat="" +if [[ $status == *"repeat: on"* ]]; then + active="-a 4" +elif [[ $status == *"repeat: off"* ]]; then + urgent="-u 4" +else + tog_repeat=" Parsing error" +fi + +# Display if random mode is on / off +tog_random="" +if [[ $status == *"random: on"* ]]; then + [ -n "$active" ] && active+=",5" || active="-a 5" +elif [[ $status == *"random: off"* ]]; then + [ -n "$urgent" ] && urgent+=",5" || urgent="-u 5" +else + tog_random=" Parsing error" +fi +stop="" +next="" +previous="" + +# Variable passed to rofi +options="$previous\n$play_pause\n$stop\n$next\n$tog_repeat\n$tog_random" + +# Get the current playing song +current=$(mpc -f "%title%" current) +# If mpd isn't running it will return an empty string, we don't want to display that +if [[ -z "$current" ]]; then + current="-" +fi + +# Spawn the mpd menu with the "Play / Pause" entry selected by default +chosen="$(echo -e "$options" | $rofi_command -p " $current" -dmenu $active $urgent -selected-row 1)" +case $chosen in + $previous) + mpc -q prev && notify-send -u low -t 1800 " $(mpc current)" + ;; + $play_pause) + mpc -q toggle && notify-send -u low -t 1800 " $(mpc current)" + ;; + $stop) + mpc -q stop + ;; + $next) + mpc -q next && notify-send -u low -t 1800 " $(mpc current)" + ;; + $tog_repeat) + mpc -q repeat + ;; + $tog_random) + mpc -q random + ;; +esac diff --git a/general/configs/rofi/applets/applets/network.sh b/general/configs/rofi/applets/applets/network.sh new file mode 100755 index 0000000..260eddb --- /dev/null +++ b/general/configs/rofi/applets/applets/network.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/applets/style.sh)" + +dir="$HOME/.config/rofi/applets/applets/configs/$style" +rofi_command="rofi -theme $dir/network.rasi" + +## Get info +IFACE="$(nmcli | grep -i interface | awk '/interface/ {print $2}')" +#SSID="$(iwgetid -r)" +#LIP="$(nmcli | grep -i server | awk '/server/ {print $2}')" +#PIP="$(dig +short myip.opendns.com @resolver1.opendns.com )" +STATUS="$(nmcli radio wifi)" + +active="" +urgent="" + +if (ping -c 1 archlinux.org || ping -c 1 google.com || ping -c 1 bitbucket.org || ping -c 1 github.com || ping -c 1 sourceforge.net) &>/dev/null; then + if [[ $STATUS == *"enable"* ]]; then + if [[ $IFACE == e* ]]; then + connected="" + else + connected="" + fi + active="-a 0" + SSID="﬉ $(iwgetid -r)" + PIP="$(wget --timeout=30 http://ipinfo.io/ip -qO -)" + fi +else + urgent="-u 0" + SSID="Disconnected" + PIP="Not Available" + connected="" +fi + +## Icons +bmon="" +launch_cli="" +launch="" + +options="$connected\n$bmon\n$launch_cli\n$launch" + +## Main +chosen="$(echo -e "$options" | $rofi_command -p "$SSID" -dmenu $active $urgent -selected-row 1)" +case $chosen in + $connected) + if [[ $STATUS == *"enable"* ]]; then + nmcli radio wifi off + else + nmcli radio wifi on + fi + ;; + $bmon) + termite -e bmon + ;; + $launch_cli) + termite -e nmtui + ;; + $launch) + nm-connection-editor + ;; +esac + diff --git a/general/configs/rofi/applets/applets/powermenu.sh b/general/configs/rofi/applets/applets/powermenu.sh new file mode 100755 index 0000000..500cbce --- /dev/null +++ b/general/configs/rofi/applets/applets/powermenu.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/applets/style.sh)" + +dir="$HOME/.config/rofi/applets/applets/configs/$style" +rofi_command="rofi -theme $dir/powermenu.rasi" + +uptime=$(uptime -p | sed -e 's/up //g') +cpu=$($HOME/.config/rofi/bin/usedcpu) +memory=$($HOME/.config/rofi/bin/usedram) + +# Options +shutdown="" +reboot="" +lock="" +suspend="" +logout="" + +# Confirmation +confirm_exit() { + rofi -dmenu\ + -i\ + -no-fixed-num-lines\ + -p "Are You Sure? : "\ + -theme $HOME/.config/rofi/applets/styles/confirm.rasi +} + +# Message +msg() { + rofi -theme "$HOME/.config/rofi/applets/styles/message.rasi" -e "Available Options - yes / y / no / n" +} + +# Variable passed to rofi +options="$shutdown\n$reboot\n$lock\n$suspend\n$logout" + +chosen="$(echo -e "$options" | $rofi_command -p "UP - $uptime" -dmenu -selected-row 2)" +case $chosen in + $shutdown) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + systemctl poweroff + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $reboot) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + systemctl reboot + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $lock) + if [[ -f /usr/bin/i3lock ]]; then + i3lock + elif [[ -f /usr/bin/betterlockscreen ]]; then + betterlockscreen -l + fi + ;; + $suspend) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + mpc -q pause + amixer set Master mute + systemctl suspend + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $logout) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + if [[ "$DESKTOP_SESSION" == "Openbox" ]]; then + openbox --exit + elif [[ "$DESKTOP_SESSION" == "bspwm" ]]; then + bspc quit + elif [[ "$DESKTOP_SESSION" == "i3" ]]; then + i3-msg exit + fi + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; +esac diff --git a/general/configs/rofi/applets/applets/quicklinks.sh b/general/configs/rofi/applets/applets/quicklinks.sh new file mode 100755 index 0000000..e736b71 --- /dev/null +++ b/general/configs/rofi/applets/applets/quicklinks.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/applets/style.sh)" + +dir="$HOME/.config/rofi/applets/applets/configs/$style" +rofi_command="rofi -theme $dir/quicklinks.rasi" + +# Error msg +msg() { + rofi -theme "$HOME/.config/rofi/applets/styles/message.rasi" -e "$1" +} + +# Browser +if [[ -f /usr/bin/firefox ]]; then + app="firefox" +elif [[ -f /usr/bin/chromium ]]; then + app="chromium" +elif [[ -f /usr/bin/midori ]]; then + app="midori" +else + msg "No suitable web browser found!" + exit 1 +fi + +# Links +google="" +facebook="" +twitter="" +github="" +mail="" +youtube="" + +# Variable passed to rofi +options="$google\n$facebook\n$twitter\n$github\n$mail\n$youtube" + +chosen="$(echo -e "$options" | $rofi_command -p "Open In : $app" -dmenu -selected-row 0)" +case $chosen in + $google) + $app https://www.google.com & + ;; + $facebook) + $app https://www.facebook.com & + ;; + $twitter) + $app https://www.twitter.com & + ;; + $github) + $app https://www.github.com & + ;; + $mail) + $app https://www.gmail.com & + ;; + $youtube) + $app https://www.youtube.com & + ;; +esac + diff --git a/general/configs/rofi/applets/applets/screenshot.sh b/general/configs/rofi/applets/applets/screenshot.sh new file mode 100755 index 0000000..f614599 --- /dev/null +++ b/general/configs/rofi/applets/applets/screenshot.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/applets/style.sh)" + +dir="$HOME/.config/rofi/applets/applets/configs/$style" +rofi_command="rofi -theme $dir/screenshot.rasi" + +# Error msg +msg() { + rofi -theme "$HOME/.config/rofi/applets/styles/message.rasi" -e "Please install 'scrot' first." +} + +# Options +screen="" +area="" +window="" + +# Variable passed to rofi +options="$screen\n$area\n$window" + +chosen="$(echo -e "$options" | $rofi_command -p 'scrot' -dmenu -selected-row 1)" +case $chosen in + $screen) + if [[ -f /usr/bin/scrot ]]; then + sleep 1; scrot 'Screenshot_%Y-%m-%d-%S_$wx$h.png' -e 'mv $f $$(xdg-user-dir PICTURES) ; viewnior $$(xdg-user-dir PICTURES)/$f' + else + msg + fi + ;; + $area) + if [[ -f /usr/bin/scrot ]]; then + scrot -s 'Screenshot_%Y-%m-%d-%S_$wx$h.png' -e 'mv $f $$(xdg-user-dir PICTURES) ; viewnior $$(xdg-user-dir PICTURES)/$f' + else + msg + fi + ;; + $window) + if [[ -f /usr/bin/scrot ]]; then + sleep 1; scrot -u 'Screenshot_%Y-%m-%d-%S_$wx$h.png' -e 'mv $f $$(xdg-user-dir PICTURES) ; viewnior $$(xdg-user-dir PICTURES)/$f' + else + msg + fi + ;; +esac + diff --git a/general/configs/rofi/applets/applets/style.sh b/general/configs/rofi/applets/applets/style.sh new file mode 100755 index 0000000..68b9668 --- /dev/null +++ b/general/configs/rofi/applets/applets/style.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +# Available Styles +# >> Created and tested on : rofi 1.6.0-1 +# +# square circle rounded + +style="square" + +# uncomment these lines to enable random style +#styles=('square' 'circle' 'rounded') +#style="${styles[$(( $RANDOM % 3 ))]}" + +# print style name +echo "$style" diff --git a/general/configs/rofi/applets/applets/time.sh b/general/configs/rofi/applets/applets/time.sh new file mode 100755 index 0000000..b8e7e8c --- /dev/null +++ b/general/configs/rofi/applets/applets/time.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/applets/style.sh)" + +dir="$HOME/.config/rofi/applets/applets/configs/$style" +rofi_command="rofi -theme $dir/time.rasi" + +## Get time and date +TIME="$(date +"%I:%M %p")" +DN=$(date +"%A") +MN=$(date +"%B") +DAY="$(date +"%d")" +MONTH="$(date +"%m")" +YEAR="$(date +"%Y")" + +options="$DAY\n$MONTH\n$YEAR" + +## Main +chosen="$(echo -e "$options" | $rofi_command -p " $DN, $TIME" -dmenu -selected-row 1)" diff --git a/general/configs/rofi/applets/applets/volume.sh b/general/configs/rofi/applets/applets/volume.sh new file mode 100755 index 0000000..7be3242 --- /dev/null +++ b/general/configs/rofi/applets/applets/volume.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/applets/style.sh)" + +dir="$HOME/.config/rofi/applets/applets/configs/$style" +rofi_command="rofi -theme $dir/volume.rasi" + +## Get Volume +#VOLUME=$(amixer get Master | tail -n 1 | awk -F ' ' '{print $5}' | tr -d '[]%') +MUTE=$(amixer get Master | tail -n 1 | awk -F ' ' '{print $6}' | tr -d '[]%') + +active="" +urgent="" + +if [[ $MUTE == *"off"* ]]; then + active="-a 1" +else + urgent="-u 1" +fi + +if [[ $MUTE == *"off"* ]]; then + active="-a 1" +else + urgent="-u 1" +fi + +if [[ $MUTE == *"on"* ]]; then + VOLUME="$(amixer get Master | tail -n 1 | awk -F ' ' '{print $5}' | tr -d '[]%')%" +else + VOLUME="Mute" +fi + +## Icons +ICON_UP="" +ICON_DOWN="" +ICON_MUTED="" + +options="$ICON_UP\n$ICON_MUTED\n$ICON_DOWN" + +## Main +chosen="$(echo -e "$options" | $rofi_command -p "$VOLUME" -dmenu $active $urgent -selected-row 0)" +case $chosen in + $ICON_UP) + amixer -Mq set Master,0 5%+ unmute && notify-send -u low -t 1500 "Volume Up $ICON_UP" + ;; + $ICON_DOWN) + amixer -Mq set Master,0 5%- unmute && notify-send -u low -t 1500 "Volume Down $ICON_DOWN" + ;; + $ICON_MUTED) + amixer -q set Master toggle + ;; +esac + diff --git a/general/configs/rofi/applets/menu/apps.sh b/general/configs/rofi/applets/menu/apps.sh new file mode 100755 index 0000000..b5dd989 --- /dev/null +++ b/general/configs/rofi/applets/menu/apps.sh @@ -0,0 +1,95 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/menu/style.sh)" + +dir="$HOME/.config/rofi/applets/menu/configs/$style" +rofi_command="rofi -theme $dir/apps.rasi" + +# Links +terminal="" +files="" +editor="" +browser="" +music="" +settings="" + +# Error msg +msg() { + rofi -theme "$HOME/.config/rofi/applets/styles/message.rasi" -e "$1" +} + +# Variable passed to rofi +options="$terminal\n$files\n$editor\n$browser\n$music\n$settings" + +chosen="$(echo -e "$options" | $rofi_command -p "Most Used" -dmenu -selected-row 0)" +case $chosen in + $terminal) + if [[ -f /usr/bin/termite ]]; then + termite & + elif [[ -f /usr/bin/urxvt ]]; then + urxvt & + elif [[ -f /usr/bin/kitty ]]; then + kitty & + elif [[ -f /usr/bin/xterm ]]; then + xterm & + elif [[ -f /usr/bin/xfce4-terminal ]]; then + xfce4-terminal & + elif [[ -f /usr/bin/gnome-terminal ]]; then + gnome-terminal & + else + msg "No suitable terminal found!" + fi + ;; + $files) + if [[ -f /usr/bin/thunar ]]; then + thunar & + elif [[ -f /usr/bin/pcmanfm ]]; then + pcmanfm & + else + msg "No suitable file manager found!" + fi + ;; + $editor) + if [[ -f /usr/bin/geany ]]; then + geany & + elif [[ -f /usr/bin/leafpad ]]; then + leafpad & + elif [[ -f /usr/bin/mousepad ]]; then + mousepad & + elif [[ -f /usr/bin/code ]]; then + code & + else + msg "No suitable text editor found!" + fi + ;; + $browser) + if [[ -f /usr/bin/firefox ]]; then + firefox & + elif [[ -f /usr/bin/chromium ]]; then + chromium & + elif [[ -f /usr/bin/midori ]]; then + midori & + else + msg "No suitable web browser found!" + fi + ;; + $music) + if [[ -f /usr/bin/lxmusic ]]; then + lxmusic & + else + msg "No suitable music player found!" + fi + ;; + $settings) + if [[ -f /usr/bin/xfce4-settings-manager ]]; then + xfce4-settings-manager & + else + msg "No suitable settings manager found!" + fi + ;; +esac diff --git a/general/configs/rofi/applets/menu/backlight.sh b/general/configs/rofi/applets/menu/backlight.sh new file mode 100755 index 0000000..15333eb --- /dev/null +++ b/general/configs/rofi/applets/menu/backlight.sh @@ -0,0 +1,86 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/menu/style.sh)" + +dir="$HOME/.config/rofi/applets/menu/configs/$style" +rofi_command="rofi -theme $dir/backlight.rasi" + +# Error msg +msg() { + rofi -theme "$HOME/.config/rofi/applets/styles/message.rasi" -e "$1" +} + +## Get Brightness +if [[ -f /bin/brightnessctl ]]; then + BNESS="$(brightnessctl get)" + MAX="$(brightnessctl max)" + PERC="$((BNESS*100/MAX))" + BLIGHT=${PERC%.*} +elif [[ -f /usr/bin/blight ]]; then + DEVICE=$(ls /sys/class/backlight | head -n 1) + BNESS="$(blight -d $DEVICE get brightness)" + PERC="$(($BNESS*100/255))" + BLIGHT=${PERC%.*} +elif [[ -f /usr/bin/xbacklight ]]; then + VAR="$(xbacklight -get)" + BLIGHT="$(printf "%.0f\n" "$VAR")" +else + msg "No suitable backlight utility found!" + exit 1 +fi + +if [[ $BLIGHT -ge 1 ]] && [[ $BLIGHT -le 29 ]]; then + MSG="Low" +elif [[ $BLIGHT -ge 30 ]] && [[ $BLIGHT -le 49 ]]; then + MSG="Optimal" +elif [[ $BLIGHT -ge 50 ]] && [[ $BLIGHT -le 69 ]]; then + MSG="High" +elif [[ $BLIGHT -ge 70 ]] && [[ $BLIGHT -le 99 ]]; then + MSG="Too Much" +fi + +## Icons +ICON_UP="" +ICON_DOWN="" +ICON_OPT="" + +notify="notify-send -u low -t 1500" +options="$ICON_UP\n$ICON_OPT\n$ICON_DOWN" + +## Main +chosen="$(echo -e "$options" | $rofi_command -p "$BLIGHT% : $MSG" -dmenu -selected-row 1)" +case $chosen in + "$ICON_UP") + if [[ -f /bin/brightnessctl ]]; then + brightnessctl -q set +10% && $notify "Brightness Up $ICON_UP" + elif [[ -f /usr/bin/blight ]]; then + blight -d "$DEVICE" set +10% && $notify "Brightness Up $ICON_UP" + elif [[ -f /usr/bin/xbacklight ]]; then + xbacklight -inc 10 && $notify "Brightness Up $ICON_UP" + fi + ;; + "$ICON_DOWN") + if [[ -f /bin/brightnessctl ]]; then + brightnessctl -q set 10%- && $notify "Brightness Down $ICON_DOWN" + elif [[ -f /usr/bin/blight ]]; then + blight -d "$DEVICE" set -10% && $notify "Brightness Down $ICON_DOWN" + elif [[ -f /usr/bin/xbacklight ]]; then + xbacklight -dec 10 && $notify "Brightness Down $ICON_DOWN" + fi + ;; + "$ICON_OPT") + if [[ -f /bin/brightnessctl ]]; then + brightnessctl -q set 25% && $notify "Optimal Brightness $ICON_OPT" + elif [[ -f /usr/bin/blight ]]; then + blight -d "$DEVICE" set 25% && $notify "Optimal Brightness $ICON_OPT" + elif [[ -f /usr/bin/xbacklight ]]; then + xbacklight -set 30 && $notify "Optimal Brightness $ICON_OPT" + fi + ;; +esac + diff --git a/general/configs/rofi/applets/menu/battery.sh b/general/configs/rofi/applets/menu/battery.sh new file mode 100755 index 0000000..c279794 --- /dev/null +++ b/general/configs/rofi/applets/menu/battery.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/menu/style.sh)" + +dir="$HOME/.config/rofi/applets/menu/configs/$style" +rofi_command="rofi -theme $dir/battery.rasi" + +## Get data +BATTERY="$(acpi | awk -F ' ' '{print $4}' | tr -d \%,)" +CHARGE="$(acpi | awk -F ' ' '{print $3}' | tr -d \,)" + +active="" +urgent="" + +if [[ $CHARGE = *"Charging"* ]]; then + active="-a 1" + ICON_CHRG="" + MSG=$CHARGE +elif [[ $CHARGE = *"Full"* ]]; then + active="-u 1" + ICON_CHRG="" + MSG=$CHARGE +else + urgent="-u 1" + ICON_CHRG="" + MSG=$CHARGE +fi + +# Discharging +#if [[ $CHARGE -eq 1 ]] && [[ $BATTERY -eq 100 ]]; then +# ICON_DISCHRG="" +if [[ $BATTERY -ge 5 ]] && [[ $BATTERY -le 19 ]]; then + ICON_DISCHRG="" +elif [[ $BATTERY -ge 20 ]] && [[ $BATTERY -le 39 ]]; then + ICON_DISCHRG="" +elif [[ $BATTERY -ge 40 ]] && [[ $BATTERY -le 59 ]]; then + ICON_DISCHRG="" +elif [[ $BATTERY -ge 60 ]] && [[ $BATTERY -le 79 ]]; then + ICON_DISCHRG="" +elif [[ $BATTERY -ge 80 ]] && [[ $BATTERY -le 100 ]]; then + ICON_DISCHRG="" +fi + +## Icons +ICON_PMGR="" + +options="$ICON_DISCHRG\n$ICON_CHRG\n$ICON_PMGR" + +## Main +chosen="$(echo -e "$options" | $rofi_command -p "$MSG : $BATTERY%" -dmenu $active $urgent -selected-row 0)" +case $chosen in + $ICON_CHRG) + ;; + $ICON_DISCHRG) + ;; + $ICON_PMGR) + xfce4-power-manager-settings + ;; +esac + diff --git a/general/configs/rofi/applets/menu/configs/circle/apps.rasi b/general/configs/rofi/applets/menu/configs/circle/apps.rasi new file mode 100755 index 0000000..c2042b3 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/circle/apps.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 950px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 100%; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Apps "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 100%; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 100%; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/circle/backlight.rasi b/general/configs/rofi/applets/menu/configs/circle/backlight.rasi new file mode 100755 index 0000000..2688014 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/circle/backlight.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 500px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 100%; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Brightness "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 100%; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 100%; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/circle/battery.rasi b/general/configs/rofi/applets/menu/configs/circle/battery.rasi new file mode 100755 index 0000000..9444210 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/circle/battery.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 500px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 100%; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Battery "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 100%; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "Iosevka Nerd Font 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 100%; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/circle/mpd.rasi b/general/configs/rofi/applets/menu/configs/circle/mpd.rasi new file mode 100755 index 0000000..04ba678 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/circle/mpd.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 950px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 100%; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " MPD "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 100%; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 100%; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/circle/network.rasi b/general/configs/rofi/applets/menu/configs/circle/network.rasi new file mode 100755 index 0000000..2a7de93 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/circle/network.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 650px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 100%; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Network "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 100%; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 4; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 100%; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/circle/powermenu.rasi b/general/configs/rofi/applets/menu/configs/circle/powermenu.rasi new file mode 100755 index 0000000..6e0131b --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/circle/powermenu.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 800px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 100%; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " System "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 100%; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 5; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 100%; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/circle/quicklinks.rasi b/general/configs/rofi/applets/menu/configs/circle/quicklinks.rasi new file mode 100755 index 0000000..a8a6ba3 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/circle/quicklinks.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 950px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 100%; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Quick Links "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 100%; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 100%; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/circle/screenshot.rasi b/general/configs/rofi/applets/menu/configs/circle/screenshot.rasi new file mode 100755 index 0000000..519560e --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/circle/screenshot.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 500px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 100%; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Screenshot "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 100%; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 100%; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/circle/time.rasi b/general/configs/rofi/applets/menu/configs/circle/time.rasi new file mode 100755 index 0000000..ac0ffc8 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/circle/time.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 700px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 100%; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Time "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 100%; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "Hurmit Nerd Font Mono 48"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 60px 0px 60px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 100%; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/circle/volume.rasi b/general/configs/rofi/applets/menu/configs/circle/volume.rasi new file mode 100755 index 0000000..0fb93ca --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/circle/volume.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 500px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 100%; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Volume "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 100%; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 100%; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 100%; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 100%; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/rounded/apps.rasi b/general/configs/rofi/applets/menu/configs/rounded/apps.rasi new file mode 100755 index 0000000..dcddce8 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/rounded/apps.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 950px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Apps "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 12px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 20px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 20px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 20px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/rounded/backlight.rasi b/general/configs/rofi/applets/menu/configs/rounded/backlight.rasi new file mode 100755 index 0000000..84c27c1 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/rounded/backlight.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 500px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Brightness "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 12px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 20px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 20px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 20px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/rounded/battery.rasi b/general/configs/rofi/applets/menu/configs/rounded/battery.rasi new file mode 100755 index 0000000..198ccc6 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/rounded/battery.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 500px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Battery "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 12px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 20px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "Iosevka Nerd Font 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 20px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 20px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/rounded/mpd.rasi b/general/configs/rofi/applets/menu/configs/rounded/mpd.rasi new file mode 100755 index 0000000..a7ba438 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/rounded/mpd.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 950px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " MPD "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 12px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 20px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 20px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 20px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/rounded/network.rasi b/general/configs/rofi/applets/menu/configs/rounded/network.rasi new file mode 100755 index 0000000..3a49537 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/rounded/network.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 650px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Network "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 12px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 4; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 20px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 20px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 20px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/rounded/powermenu.rasi b/general/configs/rofi/applets/menu/configs/rounded/powermenu.rasi new file mode 100755 index 0000000..d64175f --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/rounded/powermenu.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 800px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " System "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 12px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 5; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 20px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 20px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 20px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/rounded/quicklinks.rasi b/general/configs/rofi/applets/menu/configs/rounded/quicklinks.rasi new file mode 100755 index 0000000..7536a86 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/rounded/quicklinks.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 950px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Quick Links "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 12px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 20px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 20px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 20px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/rounded/screenshot.rasi b/general/configs/rofi/applets/menu/configs/rounded/screenshot.rasi new file mode 100755 index 0000000..b468206 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/rounded/screenshot.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 500px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Screenshot "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 12px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 20px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 20px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 20px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/rounded/time.rasi b/general/configs/rofi/applets/menu/configs/rounded/time.rasi new file mode 100755 index 0000000..a56c59d --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/rounded/time.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 700px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Time "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 12px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 20px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "Hurmit Nerd Font Mono 48"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 20px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 20px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/rounded/volume.rasi b/general/configs/rofi/applets/menu/configs/rounded/volume.rasi new file mode 100755 index 0000000..7da2a4a --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/rounded/volume.rasi @@ -0,0 +1,128 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 20px; + location: center; + width: 500px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background; + text-color: @accent; + border: 0px 2px 0px 2px; + border-radius: 12px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Volume "; + background-color: @accent; + text-color: @background; + padding: 10px 10px 0px 10px; + border-radius: 12px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 15px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 20px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 20px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 20px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/square/apps.rasi b/general/configs/rofi/applets/menu/configs/square/apps.rasi new file mode 100755 index 0000000..559c7e5 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/square/apps.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: center; + width: 950px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Apps "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/square/backlight.rasi b/general/configs/rofi/applets/menu/configs/square/backlight.rasi new file mode 100755 index 0000000..bb20f5e --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/square/backlight.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: center; + width: 500px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Brightness "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/square/battery.rasi b/general/configs/rofi/applets/menu/configs/square/battery.rasi new file mode 100755 index 0000000..0b0a6c2 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/square/battery.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: center; + width: 500px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Battery "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "Iosevka Nerd Font 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/square/mpd.rasi b/general/configs/rofi/applets/menu/configs/square/mpd.rasi new file mode 100755 index 0000000..b489728 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/square/mpd.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: center; + width: 950px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 3px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " MPD "; + background-color: @accent; + text-color: @background; + padding: 14px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/square/network.rasi b/general/configs/rofi/applets/menu/configs/square/network.rasi new file mode 100755 index 0000000..4d5bfde --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/square/network.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: center; + width: 650px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 4px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Network "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 4; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/square/powermenu.rasi b/general/configs/rofi/applets/menu/configs/square/powermenu.rasi new file mode 100755 index 0000000..9dcc9e2 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/square/powermenu.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: center; + width: 800px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 4px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " System "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 5; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/square/quicklinks.rasi b/general/configs/rofi/applets/menu/configs/square/quicklinks.rasi new file mode 100755 index 0000000..77d7d72 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/square/quicklinks.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: center; + width: 950px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Quick Links "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 6; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/square/screenshot.rasi b/general/configs/rofi/applets/menu/configs/square/screenshot.rasi new file mode 100755 index 0000000..a95d9e2 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/square/screenshot.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: center; + width: 500px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Screenshot "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/square/time.rasi b/general/configs/rofi/applets/menu/configs/square/time.rasi new file mode 100755 index 0000000..7c81666 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/square/time.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: center; + width: 700px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 4px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Time "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "Hurmit Nerd Font Mono 48"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/configs/square/volume.rasi b/general/configs/rofi/applets/menu/configs/square/volume.rasi new file mode 100755 index 0000000..f83d167 --- /dev/null +++ b/general/configs/rofi/applets/menu/configs/square/volume.rasi @@ -0,0 +1,127 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + show-icons: false; + font: "Comfortaa 14"; + disable-history: false; + sidebar-mode: false; +} + +@import "../../../styles/colors.rasi" + +* { + background-color: @background; + text-color: @foreground; +} + +window { + transparency: "real"; + border-radius: 0px; + location: center; + width: 500px; + x-offset: 0px; + y-offset: 0px; +} + +prompt { + enabled: true; + padding: 10px; + background-color: @background-light; + text-color: @accent; + border: 2px 2px 2px 2px; + border-radius: 0px; + border-color: @accent; +} + +textbox-prompt-colon { + expand: false; + str: " Volume "; + background-color: @accent; + text-color: @background; + padding: 12px 10px 0px 10px; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + spacing: 0px; + background-color: @background; + text-color: @foreground; + expand: false; + border: 0px; + border-radius: 0px; + border-color: @accent; + margin: 0px 0px 0px 0px; + padding: 0px; + position: center; +} + +listview { + columns: 3; + lines: 1; + spacing: 15px; + cycle: true; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background; + children: [ inputbar, listview ]; + spacing: 15px; + margin: 40px; +} + +element { + background-color: @background-light; + text-color: @foreground; + orientation: vertical; + border-radius: 0px; +} + +element-text { + background-color: inherit; + text-color: inherit; + font: "feather 32"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 40px 0px 40px 0px; +} + +element normal.urgent, +element alternate.urgent { + background-color: @off; + text-color: @background; + border-radius: 0px; +} + +element normal.active, +element alternate.active { + background-color: @on; + text-color: @background; +} + +element selected { + background-color: @accent; + text-color: @background; + border: 0px; + border-radius: 0px; + border-color: @border; +} + +element selected.urgent { + background-color: @on; + text-color: @background; +} + +element selected.active { + background-color: @off; + color: @background; +} diff --git a/general/configs/rofi/applets/menu/mpd.sh b/general/configs/rofi/applets/menu/mpd.sh new file mode 100755 index 0000000..3eb5498 --- /dev/null +++ b/general/configs/rofi/applets/menu/mpd.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/menu/style.sh)" + +dir="$HOME/.config/rofi/applets/menu/configs/$style" +rofi_command="rofi -theme $dir/mpd.rasi" + +# Gets the current status of mpd (for us to parse it later on) +status="$(mpc status)" +# Defines the Play / Pause option content +if [[ $status == *"[playing]"* ]]; then + play_pause="" +else + play_pause="" +fi +active="" +urgent="" + +# Display if repeat mode is on / off +tog_repeat="" +if [[ $status == *"repeat: on"* ]]; then + active="-a 4" +elif [[ $status == *"repeat: off"* ]]; then + urgent="-u 4" +else + tog_repeat=" Parsing error" +fi + +# Display if random mode is on / off +tog_random="" +if [[ $status == *"random: on"* ]]; then + [ -n "$active" ] && active+=",5" || active="-a 5" +elif [[ $status == *"random: off"* ]]; then + [ -n "$urgent" ] && urgent+=",5" || urgent="-u 5" +else + tog_random=" Parsing error" +fi +stop="" +next="" +previous="" + +# Variable passed to rofi +options="$previous\n$play_pause\n$stop\n$next\n$tog_repeat\n$tog_random" + +# Get the current playing song +current=$(mpc -f "%artist% - %title%" current) +# If mpd isn't running it will return an empty string, we don't want to display that +if [[ -z "$current" ]]; then + current="-" +fi + +# Spawn the mpd menu with the "Play / Pause" entry selected by default +chosen="$(echo -e "$options" | $rofi_command -p " $current" -dmenu $active $urgent -selected-row 1)" +case $chosen in + $previous) + mpc -q prev && notify-send -u low -t 1800 " $(mpc current)" + ;; + $play_pause) + mpc -q toggle && notify-send -u low -t 1800 " $(mpc current)" + ;; + $stop) + mpc -q stop + ;; + $next) + mpc -q next && notify-send -u low -t 1800 " $(mpc current)" + ;; + $tog_repeat) + mpc -q repeat + ;; + $tog_random) + mpc -q random + ;; +esac diff --git a/general/configs/rofi/applets/menu/network.sh b/general/configs/rofi/applets/menu/network.sh new file mode 100755 index 0000000..6e50332 --- /dev/null +++ b/general/configs/rofi/applets/menu/network.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/menu/style.sh)" + +dir="$HOME/.config/rofi/applets/menu/configs/$style" +rofi_command="rofi -theme $dir/network.rasi" + +## Get info +IFACE="$(nmcli | grep -i interface | awk '/interface/ {print $2}')" +#SSID="$(iwgetid -r)" +#LIP="$(nmcli | grep -i server | awk '/server/ {print $2}')" +#PIP="$(dig +short myip.opendns.com @resolver1.opendns.com )" +STATUS="$(nmcli radio wifi)" + +active="" +urgent="" + +if (ping -c 1 archlinux.org || ping -c 1 google.com || ping -c 1 bitbucket.org || ping -c 1 github.com || ping -c 1 sourceforge.net) &>/dev/null; then + if [[ $STATUS == *"enable"* ]]; then + if [[ $IFACE == e* ]]; then + connected="" + else + connected="" + fi + active="-a 0" + SSID="﬉ $(iwgetid -r)" + PIP="$(wget --timeout=30 http://ipinfo.io/ip -qO -)" + fi +else + urgent="-u 0" + SSID="Disconnected" + PIP="Not Available" + connected="" +fi + +## Icons +bmon="" +launch_cli="" +launch="" + +options="$connected\n$bmon\n$launch_cli\n$launch" + +## Main +chosen="$(echo -e "$options" | $rofi_command -p "$SSID : $PIP" -dmenu $active $urgent -selected-row 1)" +case $chosen in + $connected) + if [[ $STATUS == *"enable"* ]]; then + nmcli radio wifi off + else + nmcli radio wifi on + fi + ;; + $bmon) + termite -e bmon + ;; + $launch_cli) + termite -e nmtui + ;; + $launch) + nm-connection-editor + ;; +esac + diff --git a/general/configs/rofi/applets/menu/powermenu.sh b/general/configs/rofi/applets/menu/powermenu.sh new file mode 100755 index 0000000..7316af7 --- /dev/null +++ b/general/configs/rofi/applets/menu/powermenu.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/menu/style.sh)" + +dir="$HOME/.config/rofi/applets/menu/configs/$style" +rofi_command="rofi -theme $dir/powermenu.rasi" + +uptime=$(uptime -p | sed -e 's/up //g') +cpu=$($HOME/.config/rofi/bin/usedcpu) +memory=$($HOME/.config/rofi/bin/usedram) + +# Options +shutdown="" +reboot="" +lock="" +suspend="" +logout="" + +# Confirmation +confirm_exit() { + rofi -dmenu\ + -i\ + -no-fixed-num-lines\ + -p "Are You Sure? : "\ + -theme $HOME/.config/rofi/applets/styles/confirm.rasi +} + +# Message +msg() { + rofi -theme "$HOME/.config/rofi/applets/styles/message.rasi" -e "Available Options - yes / y / no / n" +} + +# Variable passed to rofi +options="$shutdown\n$reboot\n$lock\n$suspend\n$logout" + +chosen="$(echo -e "$options" | $rofi_command -p "祥 $uptime |  $cpu | ﬙ $memory " -dmenu -selected-row 2)" +case $chosen in + $shutdown) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + systemctl poweroff + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $reboot) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + systemctl reboot + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $lock) + if [[ -f /usr/bin/i3lock ]]; then + i3lock + elif [[ -f /usr/bin/betterlockscreen ]]; then + betterlockscreen -l + fi + ;; + $suspend) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + mpc -q pause + amixer set Master mute + systemctl suspend + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $logout) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + if [[ "$DESKTOP_SESSION" == "Openbox" ]]; then + openbox --exit + elif [[ "$DESKTOP_SESSION" == "bspwm" ]]; then + bspc quit + elif [[ "$DESKTOP_SESSION" == "i3" ]]; then + i3-msg exit + fi + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; +esac diff --git a/general/configs/rofi/applets/menu/quicklinks.sh b/general/configs/rofi/applets/menu/quicklinks.sh new file mode 100755 index 0000000..c2f0495 --- /dev/null +++ b/general/configs/rofi/applets/menu/quicklinks.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/menu/style.sh)" + +dir="$HOME/.config/rofi/applets/menu/configs/$style" +rofi_command="rofi -theme $dir/quicklinks.rasi" + +# Error msg +msg() { + rofi -theme "$HOME/.config/rofi/applets/styles/message.rasi" -e "$1" +} + +# Browser +if [[ -f /usr/bin/firefox ]]; then + app="firefox" +elif [[ -f /usr/bin/chromium ]]; then + app="chromium" +elif [[ -f /usr/bin/midori ]]; then + app="midori" +else + msg "No suitable web browser found!" + exit 1 +fi + +# Links +google="" +facebook="" +twitter="" +github="" +mail="" +youtube="" + +# Variable passed to rofi +options="$google\n$facebook\n$twitter\n$github\n$mail\n$youtube" + +chosen="$(echo -e "$options" | $rofi_command -p "Open In : $app" -dmenu -selected-row 0)" +case $chosen in + $google) + $app https://www.google.com & + ;; + $facebook) + $app https://www.facebook.com & + ;; + $twitter) + $app https://www.twitter.com & + ;; + $github) + $app https://www.github.com & + ;; + $mail) + $app https://www.gmail.com & + ;; + $youtube) + $app https://www.youtube.com & + ;; +esac + diff --git a/general/configs/rofi/applets/menu/screenshot.sh b/general/configs/rofi/applets/menu/screenshot.sh new file mode 100755 index 0000000..24c5e1b --- /dev/null +++ b/general/configs/rofi/applets/menu/screenshot.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/menu/style.sh)" + +dir="$HOME/.config/rofi/applets/menu/configs/$style" +rofi_command="rofi -theme $dir/screenshot.rasi" + +# Error msg +msg() { + rofi -theme "$HOME/.config/rofi/applets/styles/message.rasi" -e "Please install 'scrot' first." +} + +# Options +screen="" +area="" +window="" + +# Variable passed to rofi +options="$screen\n$area\n$window" + +chosen="$(echo -e "$options" | $rofi_command -p 'App : scrot' -dmenu -selected-row 1)" +case $chosen in + $screen) + if [[ -f /usr/bin/scrot ]]; then + sleep 1; scrot 'Screenshot_%Y-%m-%d-%S_$wx$h.png' -e 'mv $f $$(xdg-user-dir PICTURES) ; viewnior $$(xdg-user-dir PICTURES)/$f' + else + msg + fi + ;; + $area) + if [[ -f /usr/bin/scrot ]]; then + scrot -s 'Screenshot_%Y-%m-%d-%S_$wx$h.png' -e 'mv $f $$(xdg-user-dir PICTURES) ; viewnior $$(xdg-user-dir PICTURES)/$f' + else + msg + fi + ;; + $window) + if [[ -f /usr/bin/scrot ]]; then + sleep 1; scrot -u 'Screenshot_%Y-%m-%d-%S_$wx$h.png' -e 'mv $f $$(xdg-user-dir PICTURES) ; viewnior $$(xdg-user-dir PICTURES)/$f' + else + msg + fi + ;; +esac + diff --git a/general/configs/rofi/applets/menu/style.sh b/general/configs/rofi/applets/menu/style.sh new file mode 100755 index 0000000..68b9668 --- /dev/null +++ b/general/configs/rofi/applets/menu/style.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +# Available Styles +# >> Created and tested on : rofi 1.6.0-1 +# +# square circle rounded + +style="square" + +# uncomment these lines to enable random style +#styles=('square' 'circle' 'rounded') +#style="${styles[$(( $RANDOM % 3 ))]}" + +# print style name +echo "$style" diff --git a/general/configs/rofi/applets/menu/time.sh b/general/configs/rofi/applets/menu/time.sh new file mode 100755 index 0000000..4432676 --- /dev/null +++ b/general/configs/rofi/applets/menu/time.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/menu/style.sh)" + +dir="$HOME/.config/rofi/applets/menu/configs/$style" +rofi_command="rofi -theme $dir/time.rasi" + +## Get time and date +TIME="$(date +"%I:%M %p")" +DN=$(date +"%A") +MN=$(date +"%B") +DAY="$(date +"%d")" +MONTH="$(date +"%m")" +YEAR="$(date +"%Y")" + +options="$DAY\n$MONTH\n$YEAR" + +## Main +chosen="$(echo -e "$options" | $rofi_command -p " at $TIME on $DN in $MN" -dmenu -selected-row 1)" diff --git a/general/configs/rofi/applets/menu/volume.sh b/general/configs/rofi/applets/menu/volume.sh new file mode 100755 index 0000000..7e4a0d8 --- /dev/null +++ b/general/configs/rofi/applets/menu/volume.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +style="$($HOME/.config/rofi/applets/menu/style.sh)" + +dir="$HOME/.config/rofi/applets/menu/configs/$style" +rofi_command="rofi -theme $dir/volume.rasi" + +## Get Volume +#VOLUME=$(amixer get Master | tail -n 1 | awk -F ' ' '{print $5}' | tr -d '[]%') +MUTE=$(amixer get Master | tail -n 1 | awk -F ' ' '{print $6}' | tr -d '[]%') + +active="" +urgent="" + +if [[ $MUTE == *"off"* ]]; then + active="-a 1" +else + urgent="-u 1" +fi + +if [[ $MUTE == *"off"* ]]; then + active="-a 1" +else + urgent="-u 1" +fi + +if [[ $MUTE == *"on"* ]]; then + VOLUME="$(amixer get Master | tail -n 1 | awk -F ' ' '{print $5}' | tr -d '[]%')%" +else + VOLUME="Mute" +fi + +## Icons +ICON_UP="" +ICON_DOWN="" +ICON_MUTED="" + +options="$ICON_UP\n$ICON_MUTED\n$ICON_DOWN" + +## Main +chosen="$(echo -e "$options" | $rofi_command -p "$VOLUME" -dmenu $active $urgent -selected-row 0)" +case $chosen in + $ICON_UP) + amixer -Mq set Master,0 5%+ unmute && notify-send -u low -t 1500 "Volume Up $ICON_UP" + ;; + $ICON_DOWN) + amixer -Mq set Master,0 5%- unmute && notify-send -u low -t 1500 "Volume Down $ICON_DOWN" + ;; + $ICON_MUTED) + amixer -q set Master toggle + ;; +esac + diff --git a/general/configs/rofi/applets/styles/adapta-nokto.rasi b/general/configs/rofi/applets/styles/adapta-nokto.rasi new file mode 100755 index 0000000..3c4ef95 --- /dev/null +++ b/general/configs/rofi/applets/styles/adapta-nokto.rasi @@ -0,0 +1,8 @@ +* { + accent: #00BCD4; + background: #263238; + background-light: #293840; + foreground: #E7E8EB; + on: #44ad4d; + off: #e34039; +} diff --git a/general/configs/rofi/applets/styles/adapta.rasi b/general/configs/rofi/applets/styles/adapta.rasi new file mode 100755 index 0000000..c1c9999 --- /dev/null +++ b/general/configs/rofi/applets/styles/adapta.rasi @@ -0,0 +1,8 @@ +* { + accent: #00ADC2; + background: #FFFFFF; + background-light: #E7E7E7; + foreground: #535353; + on: #44ad4d; + off: #e34039; +} diff --git a/general/configs/rofi/applets/styles/adwaita.rasi b/general/configs/rofi/applets/styles/adwaita.rasi new file mode 100755 index 0000000..81cd482 --- /dev/null +++ b/general/configs/rofi/applets/styles/adwaita.rasi @@ -0,0 +1,8 @@ +* { + accent: #2E6BB6; + background: #2D2D2D; + background-light: #353535; + foreground: #E7E8EB; + on: #44ad4d; + off: #e34039; +} diff --git a/general/configs/rofi/applets/styles/arc-dark.rasi b/general/configs/rofi/applets/styles/arc-dark.rasi new file mode 100755 index 0000000..41f775f --- /dev/null +++ b/general/configs/rofi/applets/styles/arc-dark.rasi @@ -0,0 +1,8 @@ +* { + accent: #6BA0DE; + background: #383C4A; + background-light: #404552; + foreground: #E4E4E4; + on: #44ad4d; + off: #e34039; +} diff --git a/general/configs/rofi/applets/styles/arc.rasi b/general/configs/rofi/applets/styles/arc.rasi new file mode 100755 index 0000000..a5c211b --- /dev/null +++ b/general/configs/rofi/applets/styles/arc.rasi @@ -0,0 +1,8 @@ +* { + accent: #5294E2; + background: #FFFFFF; + background-light: #E7E8EB; + foreground: #333333; + on: #44ad4d; + off: #e34039; +} diff --git a/general/configs/rofi/applets/styles/armchair.rasi b/general/configs/rofi/applets/styles/armchair.rasi new file mode 100755 index 0000000..93a9e2f --- /dev/null +++ b/general/configs/rofi/applets/styles/armchair.rasi @@ -0,0 +1,8 @@ +* { + accent: #E85A50; + background: #EAE8DC; + background-light: #E4D9C8; + foreground: #8E8D89; + on: #66bb6a; + off: #F68887; +} diff --git a/general/configs/rofi/applets/styles/colors.rasi b/general/configs/rofi/applets/styles/colors.rasi new file mode 100755 index 0000000..f9043a3 --- /dev/null +++ b/general/configs/rofi/applets/styles/colors.rasi @@ -0,0 +1,22 @@ +/* + * Change the colorscheme for every menu simply by editing this file... + * + * Available Color Schemes + * // Dark + * material-dark/amber material-dark/blue material-dark/blue_grey material-dark/brown material-dark/cyan material-dark/deep_orange + * material-dark/deep_purple material-dark/green material-dark/grey material-dark/indigo material-dark/light_blue material-dark/light_green + * material-dark/lime material-dark/orange material-dark/pink material-dark/purple material-dark/red material-dark/teal + * material-dark/yellow + * // Light + * material-light/amber material-light/blue material-light/blue_grey material-light/brown material-light/cyan material-light/deep_orange + * material-light/deep_purple material-light/green material-light/grey material-light/indigo material-light/light_blue material-light/light_green + * material-light/lime material-light/orange material-light/pink material-light/purple material-light/red material-light/teal + * material-light/yellow + * + * // Other + * adapta, adapta-nokto, arc, arc-dark, adwaita, gruvbox, dark + * armchair, darkpink, fresh, inside, party, sirin + * + */ + +@import "dark.rasi" diff --git a/general/configs/rofi/applets/styles/confirm.rasi b/general/configs/rofi/applets/styles/confirm.rasi new file mode 100755 index 0000000..79a4be2 --- /dev/null +++ b/general/configs/rofi/applets/styles/confirm.rasi @@ -0,0 +1,24 @@ +/* Confirm Dialog */ + +@import "colors.rasi" + +* { + background-color: @background; + text-color: @foreground; + font: "Comfortaa 12"; +} + +window { + width: 225px; + padding: 25px; + border: 0px; + border-radius: 0px; + border-color: @accent; + location: center; + y-offset: -20px; +} + +entry { + expand: true; + text-color: @accent; +} diff --git a/general/configs/rofi/applets/styles/dark.rasi b/general/configs/rofi/applets/styles/dark.rasi new file mode 100755 index 0000000..162207b --- /dev/null +++ b/general/configs/rofi/applets/styles/dark.rasi @@ -0,0 +1,8 @@ +* { + accent: #A9C03F; + background: #141c21; + background-light: #1C252A; + foreground: #93a1a1; + on: #5BB462; + off: #DE635E; +} diff --git a/general/configs/rofi/applets/styles/darkpink.rasi b/general/configs/rofi/applets/styles/darkpink.rasi new file mode 100755 index 0000000..3bae851 --- /dev/null +++ b/general/configs/rofi/applets/styles/darkpink.rasi @@ -0,0 +1,8 @@ +* { + accent: #F75176; + background: #414656; + background-light: #4B5060; + foreground: #F2F7E3; + on: #CDF0D9; + off: #FF796A; +} diff --git a/general/configs/rofi/applets/styles/fresh.rasi b/general/configs/rofi/applets/styles/fresh.rasi new file mode 100755 index 0000000..a19ceb1 --- /dev/null +++ b/general/configs/rofi/applets/styles/fresh.rasi @@ -0,0 +1,8 @@ +* { + accent: #043968; + background: #5CDB94; + background-light: #59C78A; + foreground: #303030; + on: #2e7d32; + off: #d32f2f; +} diff --git a/general/configs/rofi/applets/styles/gruvbox.rasi b/general/configs/rofi/applets/styles/gruvbox.rasi new file mode 100755 index 0000000..9f686f0 --- /dev/null +++ b/general/configs/rofi/applets/styles/gruvbox.rasi @@ -0,0 +1,8 @@ +* { + accent: #83a598; + background: #282828; + background-light: #303030; + foreground: #ebdbb2; + on: #44ad4d; + off: #fb4934; +} diff --git a/general/configs/rofi/applets/styles/inside.rasi b/general/configs/rofi/applets/styles/inside.rasi new file mode 100755 index 0000000..8436894 --- /dev/null +++ b/general/configs/rofi/applets/styles/inside.rasi @@ -0,0 +1,8 @@ +* { + accent: #C7493A; + background: #151515; + background-light: #202020; + foreground: #AD8174; + on: #689775; + off: #A33327; +} diff --git a/general/configs/rofi/applets/styles/material-dark/amber.rasi b/general/configs/rofi/applets/styles/material-dark/amber.rasi new file mode 100755 index 0000000..14cbfcd --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/amber.rasi @@ -0,0 +1,8 @@ +* { + accent: #ffc107; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/blue.rasi b/general/configs/rofi/applets/styles/material-dark/blue.rasi new file mode 100755 index 0000000..821e449 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/blue.rasi @@ -0,0 +1,8 @@ +* { + accent: #1e88e5; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/blue_grey.rasi b/general/configs/rofi/applets/styles/material-dark/blue_grey.rasi new file mode 100755 index 0000000..d810c0d --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/blue_grey.rasi @@ -0,0 +1,8 @@ +* { + accent: #607d8b; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/brown.rasi b/general/configs/rofi/applets/styles/material-dark/brown.rasi new file mode 100755 index 0000000..edf7633 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/brown.rasi @@ -0,0 +1,8 @@ +* { + accent: #8d6e63; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/cyan.rasi b/general/configs/rofi/applets/styles/material-dark/cyan.rasi new file mode 100755 index 0000000..8de289c --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/cyan.rasi @@ -0,0 +1,8 @@ +* { + accent: #26c6da; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/deep_orange.rasi b/general/configs/rofi/applets/styles/material-dark/deep_orange.rasi new file mode 100755 index 0000000..6c061b3 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/deep_orange.rasi @@ -0,0 +1,8 @@ +* { + accent: #ff5722; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/deep_purple.rasi b/general/configs/rofi/applets/styles/material-dark/deep_purple.rasi new file mode 100755 index 0000000..d30571e --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/deep_purple.rasi @@ -0,0 +1,8 @@ +* { + accent: #7e57c2; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/green.rasi b/general/configs/rofi/applets/styles/material-dark/green.rasi new file mode 100755 index 0000000..674280b --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/green.rasi @@ -0,0 +1,8 @@ +* { + accent: #4caf50; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #a5d6a7; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/grey.rasi b/general/configs/rofi/applets/styles/material-dark/grey.rasi new file mode 100755 index 0000000..6c5e57c --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/grey.rasi @@ -0,0 +1,8 @@ +* { + accent: #9e9e9e; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/indigo.rasi b/general/configs/rofi/applets/styles/material-dark/indigo.rasi new file mode 100755 index 0000000..8f89719 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/indigo.rasi @@ -0,0 +1,8 @@ +* { + accent: #5c6bc0; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/light_blue.rasi b/general/configs/rofi/applets/styles/material-dark/light_blue.rasi new file mode 100755 index 0000000..d3f4e1b --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/light_blue.rasi @@ -0,0 +1,8 @@ +* { + accent: #039be5; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/light_green.rasi b/general/configs/rofi/applets/styles/material-dark/light_green.rasi new file mode 100755 index 0000000..5afdf7a --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/light_green.rasi @@ -0,0 +1,8 @@ +* { + accent: #8bc34a; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #4caf50; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/lime.rasi b/general/configs/rofi/applets/styles/material-dark/lime.rasi new file mode 100755 index 0000000..c32550e --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/lime.rasi @@ -0,0 +1,8 @@ +* { + accent: #cddc39; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/orange.rasi b/general/configs/rofi/applets/styles/material-dark/orange.rasi new file mode 100755 index 0000000..2f26952 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/orange.rasi @@ -0,0 +1,8 @@ +* { + accent: #ff9800; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/pink.rasi b/general/configs/rofi/applets/styles/material-dark/pink.rasi new file mode 100755 index 0000000..ef7a0af --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/pink.rasi @@ -0,0 +1,8 @@ +* { + accent: #ec407a; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/purple.rasi b/general/configs/rofi/applets/styles/material-dark/purple.rasi new file mode 100755 index 0000000..a1dd6d4 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/purple.rasi @@ -0,0 +1,8 @@ +* { + accent: #ab47bc; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/red.rasi b/general/configs/rofi/applets/styles/material-dark/red.rasi new file mode 100755 index 0000000..f5d3862 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/red.rasi @@ -0,0 +1,8 @@ +* { + accent: #ef5350; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef9a9a; +} diff --git a/general/configs/rofi/applets/styles/material-dark/teal.rasi b/general/configs/rofi/applets/styles/material-dark/teal.rasi new file mode 100755 index 0000000..e6cdb73 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/teal.rasi @@ -0,0 +1,8 @@ +* { + accent: #009688; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-dark/yellow.rasi b/general/configs/rofi/applets/styles/material-dark/yellow.rasi new file mode 100755 index 0000000..d2788b0 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-dark/yellow.rasi @@ -0,0 +1,8 @@ +* { + accent: #ffeb3b; + background: #212121; + background-light: #272727; + foreground: #bdbdbd; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/amber.rasi b/general/configs/rofi/applets/styles/material-light/amber.rasi new file mode 100755 index 0000000..c02ae2a --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/amber.rasi @@ -0,0 +1,8 @@ +* { + accent: #ff8f00; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/blue.rasi b/general/configs/rofi/applets/styles/material-light/blue.rasi new file mode 100755 index 0000000..780663e --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/blue.rasi @@ -0,0 +1,8 @@ +* { + accent: #1565c0; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/blue_grey.rasi b/general/configs/rofi/applets/styles/material-light/blue_grey.rasi new file mode 100755 index 0000000..8e15a53 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/blue_grey.rasi @@ -0,0 +1,8 @@ +* { + accent: #607d8b; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/brown.rasi b/general/configs/rofi/applets/styles/material-light/brown.rasi new file mode 100755 index 0000000..3f7d39f --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/brown.rasi @@ -0,0 +1,8 @@ +* { + accent: #795548; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/cyan.rasi b/general/configs/rofi/applets/styles/material-light/cyan.rasi new file mode 100755 index 0000000..d879af0 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/cyan.rasi @@ -0,0 +1,8 @@ +* { + accent: #00acc1; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/deep_orange.rasi b/general/configs/rofi/applets/styles/material-light/deep_orange.rasi new file mode 100755 index 0000000..23f5815 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/deep_orange.rasi @@ -0,0 +1,8 @@ +* { + accent: #f4511e; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/deep_purple.rasi b/general/configs/rofi/applets/styles/material-light/deep_purple.rasi new file mode 100755 index 0000000..cc5ec7d --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/deep_purple.rasi @@ -0,0 +1,8 @@ +* { + accent: #5e35b1; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/green.rasi b/general/configs/rofi/applets/styles/material-light/green.rasi new file mode 100755 index 0000000..f476e01 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/green.rasi @@ -0,0 +1,8 @@ +* { + accent: #43a047; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/grey.rasi b/general/configs/rofi/applets/styles/material-light/grey.rasi new file mode 100755 index 0000000..6936929 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/grey.rasi @@ -0,0 +1,8 @@ +* { + accent: #555555; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/indigo.rasi b/general/configs/rofi/applets/styles/material-light/indigo.rasi new file mode 100755 index 0000000..f0508c3 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/indigo.rasi @@ -0,0 +1,8 @@ +* { + accent: #3949ab; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/light_blue.rasi b/general/configs/rofi/applets/styles/material-light/light_blue.rasi new file mode 100755 index 0000000..a0db87a --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/light_blue.rasi @@ -0,0 +1,8 @@ +* { + accent: #039be5; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/light_green.rasi b/general/configs/rofi/applets/styles/material-light/light_green.rasi new file mode 100755 index 0000000..0e33cef --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/light_green.rasi @@ -0,0 +1,8 @@ +* { + accent: #558b2f; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/lime.rasi b/general/configs/rofi/applets/styles/material-light/lime.rasi new file mode 100755 index 0000000..044eb62 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/lime.rasi @@ -0,0 +1,8 @@ +* { + accent: #afb42b; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/orange.rasi b/general/configs/rofi/applets/styles/material-light/orange.rasi new file mode 100755 index 0000000..072c9e2 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/orange.rasi @@ -0,0 +1,8 @@ +* { + accent: #ef6c00; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/pink.rasi b/general/configs/rofi/applets/styles/material-light/pink.rasi new file mode 100755 index 0000000..e17d94d --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/pink.rasi @@ -0,0 +1,8 @@ +* { + accent: #d81b60; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/purple.rasi b/general/configs/rofi/applets/styles/material-light/purple.rasi new file mode 100755 index 0000000..fa95bb9 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/purple.rasi @@ -0,0 +1,8 @@ +* { + accent: #8e24aa; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/red.rasi b/general/configs/rofi/applets/styles/material-light/red.rasi new file mode 100755 index 0000000..d3ebcc0 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/red.rasi @@ -0,0 +1,8 @@ +* { + accent: #d32f2f; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/teal.rasi b/general/configs/rofi/applets/styles/material-light/teal.rasi new file mode 100755 index 0000000..b137892 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/teal.rasi @@ -0,0 +1,8 @@ +* { + accent: #00796b; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/material-light/yellow.rasi b/general/configs/rofi/applets/styles/material-light/yellow.rasi new file mode 100755 index 0000000..8f68244 --- /dev/null +++ b/general/configs/rofi/applets/styles/material-light/yellow.rasi @@ -0,0 +1,8 @@ +* { + accent: #f9a825; + background: #f5f5f5; + background-light: #e0e0e0; + foreground: #424242; + on: #66bb6a; + off: #ef5350; +} diff --git a/general/configs/rofi/applets/styles/message.rasi b/general/configs/rofi/applets/styles/message.rasi new file mode 100755 index 0000000..69d5b07 --- /dev/null +++ b/general/configs/rofi/applets/styles/message.rasi @@ -0,0 +1,24 @@ +/* Confirm Dialog */ + +@import "colors.rasi" + +* { + background-color: @background; + text-color: @foreground; + font: "Comfortaa 12"; +} + +window { + width: 360px; + padding: 25px; + border: 0px; + border-radius: 0px; + border-color: @accent; + location: center; + y-offset: -20px; +} + +entry { + expand: true; + text-color: @accent; +} diff --git a/general/configs/rofi/applets/styles/minimo.rasi b/general/configs/rofi/applets/styles/minimo.rasi new file mode 100755 index 0000000..b6fa284 --- /dev/null +++ b/general/configs/rofi/applets/styles/minimo.rasi @@ -0,0 +1,8 @@ +* { + accent: #656565; + background: #C6C6C4; + background-light: #FFFFFF; + foreground: #909090; + on: #226827; + off: #682226; +} diff --git a/general/configs/rofi/applets/styles/party.rasi b/general/configs/rofi/applets/styles/party.rasi new file mode 100755 index 0000000..d8ea9af --- /dev/null +++ b/general/configs/rofi/applets/styles/party.rasi @@ -0,0 +1,8 @@ +* { + accent: #FFE401; + background: #272727; + background-light: #323232; + foreground: #747474; + on: #13A76B; + off: #FF652F; +} diff --git a/general/configs/rofi/applets/styles/sirin.rasi b/general/configs/rofi/applets/styles/sirin.rasi new file mode 100755 index 0000000..302cbce --- /dev/null +++ b/general/configs/rofi/applets/styles/sirin.rasi @@ -0,0 +1,8 @@ +* { + accent: #106466; + background: #FFCB9B; + background-light: #D8B08C; + foreground: #2C3532; + on: #43a047; + off: #ef5350; +} diff --git a/general/configs/rofi/bin/usedcpu b/general/configs/rofi/bin/usedcpu new file mode 100755 index 0000000..512933c --- /dev/null +++ b/general/configs/rofi/bin/usedcpu @@ -0,0 +1,45 @@ +#!/usr/bin/env bash + +PREV_TOTAL=0 +PREV_IDLE=0 + +cpuFile="/tmp/.cpu" + +if [[ -f "${cpuFile}" ]]; then + fileCont=$(cat "${cpuFile}") + PREV_TOTAL=$(echo "${fileCont}" | head -n 1) + PREV_IDLE=$(echo "${fileCont}" | tail -n 1) +fi + +CPU=(`cat /proc/stat | grep '^cpu '`) # Get the total CPU statistics. +unset CPU[0] # Discard the "cpu" prefix. +IDLE=${CPU[4]} # Get the idle CPU time. + +# Calculate the total CPU time. +TOTAL=0 + +for VALUE in "${CPU[@]:0:4}"; do + let "TOTAL=$TOTAL+$VALUE" +done + +if [[ "${PREV_TOTAL}" != "" ]] && [[ "${PREV_IDLE}" != "" ]]; then + # Calculate the CPU usage since we last checked. + let "DIFF_IDLE=$IDLE-$PREV_IDLE" + let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL" + let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10" + if [[ $1 = "-i" ]]; then + echo " ${DIFF_USAGE}%" + else + echo "${DIFF_USAGE}%" + fi +else + if [[ $1 = "-i" ]]; then + echo " ?" + else + echo "?" + fi +fi + +# Remember the total and idle CPU times for the next check. +echo "${TOTAL}" > "${cpuFile}" +echo "${IDLE}" >> "${cpuFile}" diff --git a/general/configs/rofi/bin/usedram b/general/configs/rofi/bin/usedram new file mode 100755 index 0000000..e8a6108 --- /dev/null +++ b/general/configs/rofi/bin/usedram @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +mem_info=$( + + + + + + + image/svg+xml + + + + + + + + + diff --git a/general/configs/rofi/global/icons/google.svg b/general/configs/rofi/global/icons/google.svg new file mode 100755 index 0000000..21e5bf3 --- /dev/null +++ b/general/configs/rofi/global/icons/google.svg @@ -0,0 +1,365 @@ + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/general/configs/rofi/global/icons/history.svg b/general/configs/rofi/global/icons/history.svg new file mode 100755 index 0000000..872bac8 --- /dev/null +++ b/general/configs/rofi/global/icons/history.svg @@ -0,0 +1,75 @@ + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/general/configs/rofi/global/icons/result.svg b/general/configs/rofi/global/icons/result.svg new file mode 100755 index 0000000..0f4d883 --- /dev/null +++ b/general/configs/rofi/global/icons/result.svg @@ -0,0 +1,57 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/general/configs/rofi/global/icons/suggestion.svg b/general/configs/rofi/global/icons/suggestion.svg new file mode 100755 index 0000000..bf67346 --- /dev/null +++ b/general/configs/rofi/global/icons/suggestion.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/general/configs/rofi/global/rofi-spotlight.sh b/general/configs/rofi/global/rofi-spotlight.sh new file mode 100755 index 0000000..d993949 --- /dev/null +++ b/general/configs/rofi/global/rofi-spotlight.sh @@ -0,0 +1,692 @@ +#!/usr/bin/env bash + +TMP_DIR="/tmp/rofi/${USER}/" + +PREV_LOC_FILE="${TMP_DIR}rofi_fb_prevloc" +CURRENT_FILE="${TMP_DIR}rofi_fb_current_file" + +MY_PATH="$(realpath "$0" | xargs dirname)" +HIST_FILE="${MY_PATH}/history.txt" + +OPENER=xdg-open +TERM_EMU=wezterm +TEXT_EDITOR=$EDITOR +FILE_MANAGER=xdg-open +BLUETOOTH_SEND=blueman-sendto + +CUR_DIR=$PWD +NEXT_DIR="" +FD_INSTALLED=$(command -v fd) + +SHOW_HIDDEN=false + +# Setup menu options +declare -a OPEN_FILE_LOCATION=( + "Open file location in ${TERM_EMU}" + "Open file location in ${FILE_MANAGER}" +) +declare -a RUN_COMMANDS=( + "Run" + "Execute in ${TERM_EMU}" +) +declare -a STANDARD_CONTROLS=( + "Move to trash" + "Delete" + "Back" +) +declare -a SHELL_NO_X_OPTIONS=( + "Edit" + "${OPEN_FILE_LOCATION[@]}" + "${STANDARD_CONTROLS[@]}" +) +declare -a SHELL_OPTIONS=( + "${RUN_COMMANDS[@]}" + "${SHELL_NO_X_OPTIONS[@]}" +) +declare -a BIN_NO_X_OPTIONS=( + "${OPEN_FILE_LOCATION[@]}" + "Back" +) +declare -a BIN_OPTIONS=( + "${RUN_COMMANDS[@]}" + "${BIN_NO_X_OPTIONS[@]}" +) +declare -a TEXT_OPTIONS=("${SHELL_NO_X_OPTIONS[@]}") +declare -a HTML_OPTIONS=( + "Open" + "Edit" + "${OPEN_FILE_LOCATION[@]}" + "${STANDARD_CONTROLS[@]}" +) +declare -a XCF_SVG_OPTIONS=( + "Open" + "${OPEN_FILE_LOCATION[@]}" + "${STANDARD_CONTROLS[@]}" +) +declare -a IMAGE_OPTIONS=( + "Open" + "Send via Bluetooth" + "${OPEN_FILE_LOCATION[@]}" + "${STANDARD_CONTROLS[@]}" +) + +declare -a ALL_OPTIONS=() + +# Combine all context menu +COMBINED_OPTIONS=( + "${SHELL_OPTIONS[@]}" + "${IMAGE_OPTIONS[@]}" +) + +# Remove duplicates +ALL_OPTIONS=("$(printf '%s\n' "${COMBINED_OPTIONS[@]}" | sort -u)") + +# Create tmp dir for rofi +[ ! -d "${TMP_DIR}" ] && mkdir -p "${TMP_DIR}"; + +# Create hist file if it doesn't exist +[ ! -f "${HIST_FILE}" ] && touch "${HIST_FILE}" + +# Help message +if [ -n "$*" ] && [[ "$*" = ":help" ]] +then + echo -en "Rofi Spotlight +A Rofi with file and web searching functionality + +Commands: +:help to print this help message +:h or :hidden to show hidden files/dirs +:sh or :show_hist to show search history +:ch or :clear_hist to clear search history +:xdg to jump to an xdg directory +Examples: + :xdg DOCUMENTS + :xdg DOWNLOADS +Also supports incomplete path: +Examples: + :xdg doc + :xdg down +For more info about XDG dirs, see: +\`man xdg-user-dir\` + +File search syntaxes: +! to search for a file and web suggestions +? to search parent directories +Examples: + !half-life 3 + ?portal 3 + +Web search syntaxes: +! to gets search suggestions +:web/:w to also to gets search suggestions +:webbro/:wb to search directly from your browser +Examples: + !how to install archlinux + :web how to install gentoo + :w how to make a nuclear fission + :webbro how to install wine in windowsxp +Back\0icon\x1fdraw-arrow-back\n" + + exit +fi + +# Return the icon string +function icon_file_type(){ + icon_name="" + mime_type=$(file --mime-type -b "${1}") + + case "${mime_type}" in + "inode/directory") + case "${1}" in + "Desktop/" ) + icon_name='folder-blue-desktop' + ;; + "Documents/" ) + icon_name='folder-blue-documents' + ;; + "Downloads/" ) + icon_name='folder-blue-downloads' + ;; + "Music/" ) + icon_name='folder-blue-music' + ;; + "Pictures/" ) + icon_name='folder-blue-pictures' + ;; + "Public/" ) + icon_name='folder-blue-public' + ;; + "Templates/" ) + icon_name='folder-blue-templates' + ;; + "Videos/" ) + icon_name='folder-blue-videos' + ;; + "root/" ) + icon_name='folder-root' + ;; + "home/" | "${USER}/") + icon_name='folder-home' + ;; + *"$" ) + icon_name='folder-blue' + ;; + *) + icon_name='folder-blue' + ;; + esac + ;; + "inode/symlink" ) + icon_name='inode-symlink' + ;; + "audio/flac" | "audio/mpeg" ) + icon_name='music' + ;; + "video/mp4" ) + icon_name='video-mp4' + ;; + "video/x-matroska" ) + icon_name=video-x-matroska + ;; + "image/x-xcf" ) + # notify-send '123' + icon_name='image-x-xcf' + ;; + "image/jpeg" | "image/png" | "image/svg+xml") + icon_name="${CUR_DIR}/${1}" + ;; + "image/gif" ) + icon_name='gif' + ;; + "image/vnd.adobe.photoshop" ) + icon_name='image-vnd.adobe.photoshop' + ;; + "image/webp" ) + icon_name='gif' + ;; + "application/x-pie-executable" ) + icon_name='binary' + ;; + "application/pdf" ) + icon_name='pdf' + ;; + "application/zip" ) + icon_name='application-zip' + ;; + "application/x-xz" ) + icon_name='application-x-xz-compressed-tar' + ;; + "application/x-7z-compressed" ) + icon_name='application-x-7zip' + ;; + "application/x-rar" ) + icon_name='application-x-rar' + ;; + "application/octet-stream" | "application/x-iso9660-image" ) + icon_name='application-x-iso' + ;; + "application/x-dosexec" ) + icon_name='application-x-ms-dos-executable' + ;; + "text/plain" ) + icon_name='application-text' + ;; + "text/x-shellscript" ) + icon_name='application-x-shellscript' + ;; + "text/html" ) + icon_name='text-html' + ;; + "font/sfnt" | "application/vnd.ms-opentype" ) + icon_name='application-x-font-ttf' + ;; + * ) + case "${1}" in + *."docx" | *".doc" ) + icon_name='application-msword' + ;; + *."apk" ) + icon_name='android-package-archive' + ;; + * ) + icon_name='unknown' + ;; + esac + ;; + esac + + echo -en "$1\0icon\x1f$icon_name\n" +} + +export -f icon_file_type + +# Pass the argument to python script +function web_search() { + # Pass the search query to web-search script + "${MY_PATH}/web-search.py" "${1}" + exit; +} + +# Handles the web search method +if [ ! -z "$@" ] && ([[ "$@" == ":webbro"* ]] || [[ "$@" == ":wb"* ]]) +then + remove='' + [[ "$*" = ":webbro"* ]] && remove=":webbro" || remove=":wb" + + # Search directly from your web browser + web_search "$(printf '%s\n' "${1//$remove/}")" + exit; + +elif [ ! -z "$@" ] && ([[ "$@" == ":web"* ]] || [[ "$@" == ":w"* ]]) +then + remove='' + [[ "$*" = ":web"* ]] && remove=":web" || remove=":w" + + # Get search suggestions + web_search "!$(printf '%s\n' "${1//$remove/}")" + exit; +fi + +function find_query() { + QUERY=${1} + if [[ ! "${QUERY}" =~ ( |\') ]] + then + if [ -z "$FD_INSTALLED" ]; + then + find "${HOME}" -iname *"${QUERY}"* | sed "s/\/home\/$USER/\~/" | + awk -v MY_PATH="${MY_PATH}" '{print $0"\0icon\x1f"MY_PATH"/icons/result.svg\n"}' + else + fd -H ${QUERY} ${HOME} | sed "s/\/home\/$USER/\~/" | + awk -v MY_PATH="${MY_PATH}" '{print $0"\0icon\x1f"MY_PATH"/icons/result.svg\n"}' + fi + fi +} + +# File and calls to the web search +if [ ! -z "$@" ] && ([[ "$@" == ?(\~)/* ]] || [[ "$@" == \?* ]] || [[ "$@" == \!* ]]) +then + QUERY=$@ + + echo "${QUERY}" >> "${HIST_FILE}" + + if [[ "$@" == ?(\~)/* ]] + then + [[ "$*" = \~* ]] && QUERY="${QUERY//"~"/"$HOME"}" + + coproc ${OPENER} "${QUERY}" > /dev/null 2>&1 + exec 1>&- + exit + + elif [[ "$@" == \?* ]] + then + find_query ${QUERY#\?} + + else + # Find the file + find_query ${QUERY#!} + + # Web search + web_search "! ${QUERY#!}" + fi + exit; +fi + +# Create notification if there's an error +function create_notification() { + case "${1}" in + "denied" ) + notify-send -a "Global Search" "Permission denied!" \ + 'You have no permission to access '"${CUR_DIR}!" + ;; + "deleted" ) + notify-send -a "Global Search" "Success!" \ + 'File deleted!' + ;; + "trashed" ) + notify-send -a "Global Search" "Success!" \ + 'The file has been moved to trash!' + ;; + "cleared" ) + notify-send -a "Global Search" "Success!" \ + 'Search history has been successfully cleared!' + ;; + * ) + notify-send -a "Global Search" "Somethings wrong I can feel it!" \ + 'This incident will be reported!' + ;; + esac +} + +# Show the files in the current directory +function navigate_to() { + # process current dir. + if [ -n "${CUR_DIR}" ] + then + CUR_DIR=$(readlink -e "${CUR_DIR}") + if [ ! -d "${CUR_DIR}" ] || [ ! -r "${CUR_DIR}" ] + then + create_notification "denied" + CUR_DIR=$(realpath ${CUR_DIR} | xargs dirname) + echo "${CUR_DIR}" > "${PREV_LOC_FILE}" + else + echo "${CUR_DIR}/" > "${PREV_LOC_FILE}" + fi + pushd "${CUR_DIR}" >/dev/null || exit + fi + + printf "..\0icon\x1fup\n" + + if [[ -z "$FD_INSTALLED" ]] + then + #Group directories + if [[ ${SHOW_HIDDEN} == true ]] + then + for i in .*/ + do + [[ -d "${i}" ]] && ([[ "${i}" != "./" ]] && [[ "${i}" != "../"* ]]) && icon_file_type "${i}" + done + fi + for i in */ + do + [[ -d "${i}" ]] && icon_file_type "${i}" + done + #Group files + if [[ ${SHOW_HIDDEN} = true ]] + then + for i in .* + do + [[ -f "${i}" ]] && icon_file_type "${i}" + done + fi + for i in * + do + [[ -f "${i}" ]] && icon_file_type "${i}" + done + else + THREADS=$(getconf _NPROCESSORS_ONLN) + export CUR_DIR + if [[ ${SHOW_HIDDEN} == true ]] + then + fd -Ht d -d 1 -x bash -c 'icon_file_type "$1/"' _ {} \ | sort -V --parallel=$THREADS + fd -Ht f -d 1 -x bash -c 'icon_file_type "$1"' _ {} \ | sort -V --parallel=$THREADS + else + fd -t d -d 1 -x bash -c 'icon_file_type "$1/"' _ {} \ | sort -V --parallel=$THREADS + fd -t f -d 1 -x bash -c 'icon_file_type "$1"' _ {} \ | sort -V --parallel=$THREADS + fi + fi +} + +# Set XDG dir +function return_xdg_dir() { + target_dir=${1^^} + + if [[ "HOME" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir) + + elif [[ "DESKTOP" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir DESKTOP) + + elif [[ "DOCUMENTS" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir DOCUMENTS) + + elif [[ "DOWNLOADS" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir DOWNLOAD) + + elif [[ "MUSIC" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir MUSIC) + + elif [[ "PICTURES" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir PICTURES) + + elif [[ "PUBLICSHARE" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir PUBLICSHARE) + + elif [[ "TEMPLATES" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir TEMPLATES) + + elif [[ "VIDEOS" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir VIDEOS) + + elif [[ "ROOT" == *"${target_dir}"* ]] + then + CUR_DIR="/" + + else + CUR_DIR="${HOME}" + fi + navigate_to + exit; +} + +# Show and Clear History +if [ ! -z "$@" ] && ([[ "$@" == ":sh" ]] || [[ "$@" == ":show_hist" ]]) +then + hist=$(tac "${HIST_FILE}") + + echo -en "Back\0icon\x1fdraw-arrow-back\n" + [ -z "${hist}" ] && echo -en "No History Yet\0icon\x1ftext-plain\n" + + while IFS= read -r line; + do + echo -en "${line}\0icon\x1f${MY_PATH}/icons/history.svg\n"; + done <<< "${hist}" + + exit; +elif [ ! -z "$@" ] && ([[ "$@" == ":ch" ]] || [[ "$@" == ":clear_hist" ]]) +then + :> "${HIST_FILE}" + create_notification "cleared" + + CUR_DIR="${HOME}" + navigate_to + exit; +fi + +# Accepts XDG command +if [[ ! -z "$@" ]] && [[ "$@" == ":xdg"* ]] +then + NEXT_DIR=${*//":xdg "/} + + [[ -n "$NEXT_DIR" ]] && return_xdg_dir "${NEXT_DIR}" || return_xdg_dir "${HOME}" +fi + +# Read last location, otherwise we default to PWD. +[ -f "${PREV_LOC_FILE}" ] && CUR_DIR=$(< "${PREV_LOC_FILE}") + +if [[ ! -z "$@" ]] && ([[ "$@" == ":h" ]] || [[ "$@" == ":hidden" ]]) +then + SHOW_HIDDEN=true + navigate_to + exit; +fi + +# Handle argument. +[ -n "$*" ] && CUR_DIR="${CUR_DIR}/$*" + +# Context Menu +if [ -n "$*" ] && [[ "${ALL_OPTIONS[*]} " = *"$*"* ]] +then + case "${1}" in + "Run" ) + coproc ( eval "$(< ${CURRENT_FILE})" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Execute in ${TERM_EMU}" ) + coproc ( eval "${TERM_EMU} \"$(< ${CURRENT_FILE})\"" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Open" ) + coproc ( eval "${OPENER} \"$(< ${CURRENT_FILE})\"" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Open file location in ${TERM_EMU}" ) + file_path="$(< ${CURRENT_FILE})" + coproc ( ${TERM_EMU} bash -c "cd ${file_path%/*} ; ${SHELL}" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Open file location in ${FILE_MANAGER}" ) + file_path="$(< "${CURRENT_FILE}")" + coproc ( eval "${FILE_MANAGER} "${file_path%/*}"" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Edit" ) + coproc ( eval "${TERM_EMU} ${TEXT_EDITOR} \"$(< ${CURRENT_FILE})\"" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Move to trash" ) + coproc( gio trash "$(< ${CURRENT_FILE})" & > /dev/null 2>&1 ) + create_notification "trashed" + CUR_DIR="$(dirname "$(< ${CURRENT_FILE})")" + navigate_to + ;; + "Delete" ) + shred "$(< ${CURRENT_FILE})" + rm "$(< ${CURRENT_FILE})" + create_notification "deleted" + CUR_DIR="$(dirname "$(< ${CURRENT_FILE})")" + navigate_to + ;; + "Send via Bluetooth" ) + rfkill unblock bluetooth && bluetoothctl power on + sleep 1 + blueman-sendto "$(< ${CURRENT_FILE})" & > /dev/null 2>&1 + kill -9 $(pgrep rofi) + ;; + "Back" ) + CUR_DIR="$(< ${PREV_LOC_FILE})" + navigate_to + ;; + esac + exit; +fi + +function context_menu_icons() { + + if [[ "${1}" == "Run" ]] + then + echo '\0icon\x1fsystem-run\n' + + elif [[ "${1}" == "Execute in ${TERM_EMU}" ]] + then + echo "\0icon\x1f${TERM_EMU}\n" + + elif [[ "${1}" == "Open" ]] + then + echo "\0icon\x1futilities-x-terminal\n" + + elif [[ "${1}" == "Open file location in ${TERM_EMU}" ]] + then + echo "\0icon\x1f${TERM_EMU}\n" + + elif [[ "${1}" == "Open file location in ${FILE_MANAGER}" ]] + then + echo "\0icon\x1fblue-folder-open\n" + + elif [[ "${1}" == "Edit" ]] + then + echo "\0icon\x1faccessories-text-editor\n" + + elif [[ "${1}" == "Move to trash" ]] + then + echo "\0icon\x1fapplication-x-trash\n" + + elif [[ "${1}" == "Delete" ]] + then + echo "\0icon\x1findicator-trashindicator\n" + + elif [[ "${1}" == "Send via Bluetooth" ]] + then + echo "\0icon\x1fbluetooth\n" + + elif [[ "${1}" == "Back" ]] + then + echo "\0icon\x1fback\n" + fi +} + +function print_context_menu() { + declare -a arg_arr=("${!1}") + + for menu in "${arg_arr[@]}" + do + printf "$menu$(context_menu_icons "${menu}")\n" + done +} + +function context_menu() { + + type="$(file --mime-type -b "${CUR_DIR}")" + + if [ -w "${CUR_DIR}" ] && [[ "${type}" == "text/x-shellscript" ]] + then + if [ -x "${CUR_DIR}" ]; + then + print_context_menu SHELL_OPTIONS[@] + else + print_context_menu SHELL_NO_X_OPTIONS[@] + fi + + elif [[ "${type}" == "application/x-executable" ]] || [[ "${type}" == "application/x-pie-executable" ]] + then + if [ -x "${CUR_DIR}" ] + then + print_context_menu BIN_OPTIONS[@] + else + print_context_menu BIN_NO_X_OPTIONS[@] + fi + + elif [[ "${type}" == "text/plain" ]] + then + print_context_menu TEXT_OPTIONS[@] + + elif [[ "${type}" == "text/html" ]] + then + print_context_menu HTML_OPTIONS[@] + + elif [[ "${type}" == "image/jpeg" ]] || [[ "${type}" == "image/png" ]] + then + print_context_menu IMAGE_OPTIONS[@] + + elif [[ "${type}" == "image/x-xcf" ]] || [[ "${type}" == "image/svg+xml" ]] + then + print_context_menu XCF_SVG_OPTIONS[@] + + elif [ ! -w "${CUR_DIR}" ] && [[ "${type}" == "text/x-shellscript" ]] + then + coproc ( exec "${CUR_DIR}" & > /dev/null 2>&1 ) + + else + if [ ! -d "${CUR_DIR}" ] && [ ! -f "${CUR_DIR}" ] + then + QUERY="${CUR_DIR//*\/\//}" + + echo "${QUERY}" >> "${HIST_FILE}" + + find_query "${QUERY#!}" + + web_search "!${QUERY}" + else + coproc ( ${OPENER} "${CUR_DIR}" & > /dev/null 2>&1 ) + fi + fi + exit; +} + +# If argument is not a directory/folder +if [ ! -d "${CUR_DIR}" ] +then + echo "${CUR_DIR}" > "${CURRENT_FILE}" + context_menu + exit; +fi + +navigate_to diff --git a/general/configs/rofi/global/rofi.rasi b/general/configs/rofi/global/rofi.rasi new file mode 100755 index 0000000..819fc2b --- /dev/null +++ b/general/configs/rofi/global/rofi.rasi @@ -0,0 +1,162 @@ +configuration { + font: "Inter Regular 10"; + sidebar-mode: true; + show-icons: true; + icon-theme: "Nordzy"; + fullscreen: false; + threads: 0; + matching: "fuzzy"; + scroll-method: 0; + monitor: "primary"; +} + +* { + transparent: #00000000; + foreground: #F2F2F2EE; + background-selected: #F2F2F245; + background-active: #F2F2F230; + background-white: #F2F2F211; + background-black: #00000000; + urgent: #E91E6366; + urgent-selected: #E91E6377; +} + +window { + transparency: "real"; + background-color: #1917244D; + text-color: #6e6a86; + location: west; + anchor: west; + x-offset: 5px; + y-offset: -50px; + height: 70%; + width: 350px; + orientation: vertical; +} + +prompt { + enabled: false; +} + +button { + action: "ok"; + str: " "; + font: "FantasqueSansMono Nerd Font 16"; + expand: false; + text-color: #6e6a86; + background-color: @transparent; + vertical-align: 0.5; + horizontal-align: 0.5; +} + +entry { + font: "Inter Regular 12"; + background-color: @transparent; + text-color: #6e6a86; + expand: true; + vertical-align: 0.5; + horizontal-align: 0; + placeholder: "Global Search"; + placeholder-color: @foreground; + blink: true; +} + +entry-wrapper { + orientation: horizontal; + margin: 0 12px 0 12px; + spacing: 24px; + vertical-align: 0.5; + background-color: @transparent; + children: [ button, entry ]; +} + +inputbar { + padding: 14px; + margin: 10px 10px 14px 10px; + background-color: #26233a; + text-color: @foreground; + expand: false; + border-radius: 9px; + position: north; + children: [ entry-wrapper ]; +} + +listview { + background-color: @transparent; + spacing: 0; + cycle: true; + dynamic: true; + scrollbar: true; +} + +mainbox { + width: 200px; + expand: true; + spacing: 12px; + padding: 5px; + background-color: @background-black; + children: [ inputbar, listview ]; +} + +scrollbar { + background-color: @background-white; + handle-width: 0; + margin: 0 0 5px 0; + border-radius: 9px; +} + +element { + background-color: @transparent; + text-color: @foreground; + orientation: horizontal; + border: 0; + border-color: @background-white; + border-radius: 6px; + spacing: 24px; + margin: 0px 12px 0px 12px; + padding: 10px 24px 10px 24px; +} + +element-icon { + size: 24px; + border: 0; + border-color: @transparent; + background-color: transparent; +} + +element-text { + font: "Inter Regular 11"; + expand: true; + horizontal-align: 0; + vertical-align: 0.5; + color: #6e6a86; + background-color: transparent; +} + +element normal.urgent, +element alternate.urgent { + background-color: @urgent; + text-color: @foreground; + border-radius: 9px; +} + +element normal.active, +element alternate.active { + background-color: @background-active; + text-color: @foreground; +} + +element selected { + background-color: #403d5220; + text-color: @foreground; +} + +element selected.urgent { + background-color: @urgent-selected; + text-color: @foreground; +} + +element selected.active { + background-color: #403d5220; + color: @foreground-selected; +} \ No newline at end of file diff --git a/general/configs/rofi/global/web-search.py b/general/configs/rofi/global/web-search.py new file mode 100755 index 0000000..ba314d5 --- /dev/null +++ b/general/configs/rofi/global/web-search.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python3 + +# MIT License + +# Copyright (c) 2019 Paolo Donadeo + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + +import json +import re +import urllib.parse +import urllib.request +import sys +import os +import datetime +import gzip + +import subprocess as sp + +import html + + +################################################################################ +##### C O N F I G U R A T I O N ###### +################################################################################ +SEARCH_ENGINE = 'google' # or 'duckduckgo' +BROWSER = 'firefox' # or 'firefox', 'chromium', 'brave', 'lynx' +TERMINAL = ['kitty', '--'] # or ['st', '-e'] or something like that +################################################################################ + +CONFIG = { + 'BROWSER_PATH' : { + 'chrome' : ['google-chrome-stable'], + 'firefox' : ['firefox'], + 'chromium' : ['chromium-browser'], + 'brave' : ['brave-browser'], + 'lynx' : TERMINAL + ['lynx'] + }, + 'USER_AGENT' : { + 'chrome' : 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + 'firefox' : 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0', + 'chromium' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/76.0.3809.100 Chrome/76.0.3809.100 Safari/537.36', + 'brave' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36', + 'lynx' : 'Lynx/2.8.9rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/1.1.1d' + }, + 'SEARCH_ENGINE_NAME' : { + 'google' : 'Google', + 'duckduckgo' : 'DuckDuckGo' + }, + 'SEARCH_URL' : { + 'google' : 'https://www.google.com/search?q=', + 'duckduckgo' : 'https://duckduckgo.com/?q=' + }, + 'SUGGESTION_URL' : { + 'google' : 'https://www.google.com/complete/search?', + 'duckduckgo' : 'https://duckduckgo.com/ac/?' + } +} + +def cleanhtml(txt): + return re.sub(r'<.*?>', '', txt) + +def fetch_suggestions(search_string): + if SEARCH_ENGINE == 'google': + r = { + 'q' : search_string, + 'cp' : '11', + 'client' : 'psy-ab', + 'xssi' : 't', + 'gs_ri' : 'gws-wiz', + 'hl' : 'en-IT', + 'authuser' : '0' + } + url = CONFIG['SUGGESTION_URL'][SEARCH_ENGINE] + urllib.parse.urlencode(r) + headers = { + 'sec-fetch-mode' : 'cors', + 'dnt' : '1', + 'accept-encoding' : 'gzip', + 'accept-language' : 'en-US;q=0.9,en;q=0.8', + 'pragma' : 'no-cache', + 'user-agent' : CONFIG['USER_AGENT'][BROWSER], + 'accept' : '*/*', + 'cache-control' : 'no-cache', + 'authority' : 'www.google.com', + 'referer' : 'https://www.google.com/', + 'sec-fetch-site' : 'same-origin' + } + req = urllib.request.Request(url, headers=headers, method='GET') + + reply_data = gzip.decompress(urllib.request.urlopen(req).read()).split(b'\n')[1] + reply_data = json.loads(reply_data) + return [ cleanhtml(res[0]).strip() for res in reply_data[0] ] + else: # 'duckduckgo' + if search_string.startswith('!'): + bang_search = True + search_string = search_string.lstrip('!') + else: + bang_search = False + r = { + 'q' : search_string, + 'callback' : 'autocompleteCallback', + 'kl' : 'wt-wt', + '_' : str(int((datetime.datetime.now().timestamp())*1000)) + } + url = CONFIG['SUGGESTION_URL'][SEARCH_ENGINE] + urllib.parse.urlencode(r) + if bang_search: + url = url.replace('?q=', '?q=!') + headers = { + 'pragma' : 'no-cache', + 'dnt' : '1', + 'accept-encoding' : 'gzip', + 'accept-language' : 'en-US;q=0.9,en;q=0.8', + 'user-agent' : CONFIG['USER_AGENT'][BROWSER], + 'sec-fetch-mode' : 'no-cors', + 'accept' : '*/*', + 'cache-control' : 'no-cache', + 'authority' : 'duckduckgo.com', + 'referer' : 'https://duckduckgo.com/', + 'sec-fetch-site' : 'same-origin', + } + req = urllib.request.Request(url, headers=headers, method='GET') + reply_data = gzip.decompress(urllib.request.urlopen(req).read()).decode('utf8') + reply_data = json.loads(re.match(r'autocompleteCallback\((.*)\);', reply_data).group(1)) + return [ cleanhtml(res['phrase']).strip() for res in reply_data ] + +def main(): + search_string = html.unescape((' '.join(sys.argv[1:])).strip()) + + path_str = os.path.dirname(os.path.realpath(__file__)) + '/' + icon_path_str = path_str + 'icons/' + icon_name = icon_path_str + + if SEARCH_ENGINE == 'google': + icon_name += 'google.svg' + else: + icon_name += 'ddg.svg' + + if search_string.startswith('!'): + search_string = search_string.rstrip('!').strip() + results = fetch_suggestions(search_string) + for r in results: + print(":wb " + html.unescape(r) + "\0icon\x1f"+icon_name+"\n") + else: + url = CONFIG['SEARCH_URL'][SEARCH_ENGINE] + urllib.parse.quote_plus(search_string) + sp.Popen(CONFIG['BROWSER_PATH'][BROWSER] + [url], stdout=sp.DEVNULL, stderr=sp.DEVNULL, shell=False) + +if __name__ == "__main__": + try: + main() + except Exception as e: + if e: + sys.exit(1) diff --git a/general/configs/rofi/powermenu/drop_square.rasi b/general/configs/rofi/powermenu/drop_square.rasi new file mode 100755 index 0000000..b4ae903 --- /dev/null +++ b/general/configs/rofi/powermenu/drop_square.rasi @@ -0,0 +1,123 @@ +/* + * + * Author : Aditya Shakya + * Mail : adi1090x@gmail.com + * Github : @adi1090x + * Twitter : @adi1090x + * + */ + +configuration { + font: "FantasqueSansMono Nerd Font 14"; + show-icons: false; + icon-theme: "Papirus"; + drun-display-format: "{name}"; + disable-history: false; + sidebar-mode: false; +} + +@import "styles/colors.rasi" + +window { + transparency: "real"; + background-color: @background; + text-color: @foreground; + border-radius: 0px; + height: 42%; + width: 100%; + location: north; + x-offset: 0; + y-offset: 0; +} + +prompt { + enabled: true; + padding: 1% 1% 1% 0%; + background-color: @background-alt; + text-color: @foreground; +} + +textbox-prompt-colon { + expand: false; + str: "System |"; + background-color: @background-alt; + text-color: @foreground; + padding: 1% 0.5% 1% 7%; +} + +inputbar { + children: [ textbox-prompt-colon, prompt ]; + background-color: @background-alt; + text-color: @foreground; + expand: false; + border: 0% 0% 0.2% 0%; + border-radius: 0% 0% 0% 0%; + border-color: @border; + margin: 0% 33.25% 0% 20%; + padding: 0.5%; + position: center; +} + +listview { + background-color: @background; + margin: 0% 0% 0% 0%; + spacing: 3%; + cycle: true; + dynamic: true; + layout: horizontal; +} + +mainbox { + background-color: @background; + children: [ listview, inputbar ]; + spacing: 0%; + padding: 5% 0% 5% 13.25%; +} + +element { + background-color: @background-alt; + text-color: @foreground; + orientation: horizontal; + border-radius: 0%; +} + +element-text { + background-color: #00000000; + text-color: inherit; + font: "feather 64"; + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; + margin: 6.5% 4% 6.5% 4%; +} + +element normal.urgent, +element alternate.urgent { + background-color: @urgent; + text-color: @foreground; + border-radius: 0.2%; +} + +element normal.active, +element alternate.active { + background-color: @background-alt; + text-color: @foreground; +} + +element selected { + background-color: @selected; + text-color: @foreground; + border: 0% 0% 0.2% 0%; + border-radius: 0%; + border-color: @border; +} + +element selected.urgent { + background-color: @urgent; + text-color: @foreground; +} + +element selected.active { + background-color: @background-alt; + color: @foreground; +} diff --git a/general/configs/rofi/powermenu/powermenu.rasi b/general/configs/rofi/powermenu/powermenu.rasi new file mode 100755 index 0000000..41fc910 --- /dev/null +++ b/general/configs/rofi/powermenu/powermenu.rasi @@ -0,0 +1,93 @@ +configuration { + font: "JetBrainsMono Nerd Font 36"; + drun-display-format: "{name}"; + fullscreen: false; + threads: 0; + matching: "fuzzy"; + scroll-method: 0; + disable-history: false; + fullscreen: true; +} + +* { + transparent: #00000000; + foreground: #F2F2F2EE; + background-selected: #F2F2F245; + background-active: #F2F2F230; + background-white: #F2F2F211; + background-black: #00000066; + urgent: #E91E6366; + urgent-selected: #E91E6377; +} + +window { + transparency: "real"; + background-color: @transparent; + text-color: @foreground; + location: northwest; + anchor: northwest; +} + +inputbar { + margin: 0; + padding: 0; + children: [ entry-wrapper ]; +} + +listview { + background-color: @transparent; + lines: 6; + spacing: 5%; + cycle: false; + dynamic: true; + layout: horizontal; +} + +mainbox { + background-color: @background-black; + children: [ inputbar, listview ]; + padding: calc(50% - 70px) 0% 0% 15%; +} + +element { + background-color: @transparent; + text-color: @foreground; + orientation: horizontal; + border-radius: 10px; + padding: 30px; + vertical: 0.5; +} + +element-text { + expand: true; + horizontal-align: 0.5; + vertical-align: 0.5; +} + +element normal.urgent, +element alternate.urgent { + background-color: @urgent; + text-color: @foreground; + border-radius: 9px; +} + +element normal.active, +element alternate.active { + background-color: @background-active; + text-color: @foreground; +} + +element selected { + background-color: #29B6F6; + text-color: #212121; +} + +element selected.urgent { + background-color: @urgent-selected; + text-color: @foreground; +} + +element selected.active { + background-color: @background-active; + color: @foreground-selected; +} diff --git a/general/configs/rofi/powermenu/powermenu.sh b/general/configs/rofi/powermenu/powermenu.sh new file mode 100755 index 0000000..f857ac5 --- /dev/null +++ b/general/configs/rofi/powermenu/powermenu.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +# Available Styles +# >> Created and tested on : rofi 1.6.0-1 +# +# column_circle column_square column_rounded column_alt +# card_circle card_square card_rounded card_alt +# dock_circle dock_square dock_rounded dock_alt +# drop_circle drop_square drop_rounded drop_alt +# full_circle full_square full_rounded full_alt +# row_circle row_square row_rounded row_alt + +theme="drop_square" +dir="$HOME/.config/rofi/powermenu" + + +uptime=$(uptime -p | sed -e 's/up //g') + +rofi_command="rofi -theme $dir/$theme" + +# Options +shutdown="" +reboot="" +lock="" +suspend="" +logout="" + +# Message +msg() { + rofi -theme "$dir/message.rasi" -e "Available Options - yes / y / no / n" +} + +# Variable passed to rofi +options="$shutdown\n$reboot\n$lock\n$suspend\n$logout" + +chosen="$(echo -e "$options" | $rofi_command -p "Uptime: $uptime" -dmenu -selected-row 2)" +case $chosen in + $shutdown) + systemctl poweroff + ;; + $reboot) + systemctl reboot + ;; + $lock) + if [[ -f /usr/bin/i3lock ]]; then + i3lock + elif [[ -f /usr/bin/betterlockscreen ]]; then + betterlockscreen -l + fi + ;; + $suspend) + mpc -q pause + amixer set Master mute + systemctl suspend + ;; + $logout) + if [[ "$DESKTOP_SESSION" == "Openbox" ]]; then + openbox --exit + elif [[ "$DESKTOP_SESSION" == "bspwm" ]]; then + bspc quit + elif [[ "$DESKTOP_SESSION" == "i3" ]]; then + i3-msg exit + fi + ;; +esac diff --git a/general/configs/rofi/powermenu/styles/berry.rasi b/general/configs/rofi/powermenu/styles/berry.rasi new file mode 100755 index 0000000..025c231 --- /dev/null +++ b/general/configs/rofi/powermenu/styles/berry.rasi @@ -0,0 +1,9 @@ +* { + background: #280F28ff; + background-alt: #2D142Cff; + foreground: #ffffffA6; + border: #EE4540ff; + border-alt: #C92A42ff; + selected: #510A3299; + urgent: #DA4453FF; +} diff --git a/general/configs/rofi/powermenu/styles/bluish.rasi b/general/configs/rofi/powermenu/styles/bluish.rasi new file mode 100755 index 0000000..2305bd5 --- /dev/null +++ b/general/configs/rofi/powermenu/styles/bluish.rasi @@ -0,0 +1,9 @@ +* { + background: #EFF0F1FF; + background-alt: #E3E3E3FF; + foreground: #000000A6; + border: #000B83FF; + border-alt: #3DAEE9FF; + selected: #93CEE9FF; + urgent: #DA4453FF; +} diff --git a/general/configs/rofi/powermenu/styles/cocoa.rasi b/general/configs/rofi/powermenu/styles/cocoa.rasi new file mode 100755 index 0000000..31f780d --- /dev/null +++ b/general/configs/rofi/powermenu/styles/cocoa.rasi @@ -0,0 +1,9 @@ +* { + background: #3C3945FF; + background-alt: #413E4Aff; + foreground: #F7C7B2ff; + border: #B38184ff; + border-alt: #F3B69Eff; + selected: #B381841a; + urgent: #DA4453FF; +} diff --git a/general/configs/rofi/powermenu/styles/colors.rasi b/general/configs/rofi/powermenu/styles/colors.rasi new file mode 100755 index 0000000..a1d2937 --- /dev/null +++ b/general/configs/rofi/powermenu/styles/colors.rasi @@ -0,0 +1,10 @@ +/* + * Change the colorscheme for every menu simply by editing this file... + * + * Available Color Schemes + * + * bluish berry nordic nightly gotham mask faded cocoa + * + */ + +@import "nordic.rasi" diff --git a/general/configs/rofi/powermenu/styles/faded.rasi b/general/configs/rofi/powermenu/styles/faded.rasi new file mode 100755 index 0000000..0eebd64 --- /dev/null +++ b/general/configs/rofi/powermenu/styles/faded.rasi @@ -0,0 +1,9 @@ +* { + background: #57678CFF; + background-alt: #5E6C91ff; + foreground: #FFFCFFff; + border: #FF83A7ff; + border-alt: #F4BB6Cff; + selected: #A0B5F44c; + urgent: #DA4453FF; +} diff --git a/general/configs/rofi/powermenu/styles/gotham.rasi b/general/configs/rofi/powermenu/styles/gotham.rasi new file mode 100755 index 0000000..2bae381 --- /dev/null +++ b/general/configs/rofi/powermenu/styles/gotham.rasi @@ -0,0 +1,9 @@ +* { + background: #24334Aff; + background-alt: #29384Fff; + foreground: #FEFFF1ff; + border: #3A6081ff; + border-alt: #715979ff; + selected: #C46C854C; + urgent: #DA4453FF; +} diff --git a/general/configs/rofi/powermenu/styles/mask.rasi b/general/configs/rofi/powermenu/styles/mask.rasi new file mode 100755 index 0000000..c63ac9e --- /dev/null +++ b/general/configs/rofi/powermenu/styles/mask.rasi @@ -0,0 +1,9 @@ +* { + background: #3E4667ff; + background-alt: #434C6Dff; + foreground: #FAF7CCff; + border: #CA8CA5ff; + border-alt: #F0B2B3ff; + selected: #EFD4B61a; + urgent: #DA4453FF; +} diff --git a/general/configs/rofi/powermenu/styles/nightly.rasi b/general/configs/rofi/powermenu/styles/nightly.rasi new file mode 100755 index 0000000..400e6cd --- /dev/null +++ b/general/configs/rofi/powermenu/styles/nightly.rasi @@ -0,0 +1,9 @@ +* { + background: #25344Bff; + background-alt: #2A3950ff; + foreground: #FEFFF1ff; + border: #A162F7ff; + border-alt: #45E3FFff; + selected: #6F88FE1a; + urgent: #DA4453FF; +} diff --git a/general/configs/rofi/powermenu/styles/nordic.rasi b/general/configs/rofi/powermenu/styles/nordic.rasi new file mode 100755 index 0000000..3c42c77 --- /dev/null +++ b/general/configs/rofi/powermenu/styles/nordic.rasi @@ -0,0 +1,9 @@ +* { + background: #2E3440ff; + background-alt: #2E3440ff; + foreground: #8FBCBBff; + border: #bbbbbbff; + border-alt: #ccccccff; + selected: #444444ff; + urgent: #777777FF; +} diff --git a/general/configs/rofi/scripts/emoji b/general/configs/rofi/scripts/emoji new file mode 100755 index 0000000..dcc641e --- /dev/null +++ b/general/configs/rofi/scripts/emoji @@ -0,0 +1,5 @@ +#!/bin/bash + +DIR="$HOME/.config" + +rofi -show emoji -modi emoji -theme $DIR/rofi/Themes/emojis.rasi diff --git a/general/configs/rofi/scripts/powermenu.sh b/general/configs/rofi/scripts/powermenu.sh new file mode 100755 index 0000000..ac31173 --- /dev/null +++ b/general/configs/rofi/scripts/powermenu.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/styles" +rofi_command="rofi -theme $dir/five.rasi" + +uptime=$(uptime -p | sed -e 's/up //g') + +# Options +shutdown="" +reboot="" +lock="" +suspend="" +logout="" + +# Confirmation +confirm_exit() { + rofi -dmenu\ + -i\ + -no-fixed-num-lines\ + -p "Are You Sure? : "\ + -theme $dir/confirm.rasi +} + +# Message +msg() { + rofi -theme "$dir/message.rasi" -e "Available Options - yes / y / no / n" +} + +# Variable passed to rofi +options="$shutdown\n$reboot\n$lock\n$suspend\n$logout" + +chosen="$(echo -e "$options" | $rofi_command -p "Uptime: $uptime" -dmenu -selected-row 2)" +case $chosen in + $shutdown) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + loginctl poweroff + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $reboot) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + loginctl reboot + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $lock) + if [[ -f /usr/bin/i3lock ]]; then + i3lock + elif [[ -f /usr/bin/betterlockscreen ]]; then + betterlockscreen -l + fi + ;; + $suspend) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + loginctl suspend + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; + $logout) + ans=$(confirm_exit &) + if [[ $ans == "yes" || $ans == "YES" || $ans == "y" || $ans == "Y" ]]; then + if [[ "$DESKTOP_SESSION" == "/usr/share/xsessions/voidwm" ]]; then + pkill dwm + elif [[ "$DESKTOP_SESSION" == "bspwm" ]]; then + bspc quit + elif [[ "$DESKTOP_SESSION" == "/usr/share/xsessions/i3" ]]; then + i3-msg exit + elif [[ "$DESKTOP_SESSION" == "/usr/local/bin/dwm" ]]; then + pkill dwm + elif [[ "$DESKTOP_SESSION" == "awesome" ]]; then + pkill awesome + else + pkill Hyprland + fi + elif [[ $ans == "no" || $ans == "NO" || $ans == "n" || $ans == "N" ]]; then + exit 0 + else + msg + fi + ;; +esac diff --git a/general/configs/rofi/scripts/screenshot-wl.sh b/general/configs/rofi/scripts/screenshot-wl.sh new file mode 100755 index 0000000..fcb907e --- /dev/null +++ b/general/configs/rofi/scripts/screenshot-wl.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/styles" +rofi_command="rofi -theme $dir/three.rasi" + +# Options +screen="" +area="" +window="" + +# Variable passed to rofi +options="$screen\n$area\n$window" + +chosen="$(echo -e "$options" | $rofi_command -p '' -dmenu -selected-row 1)" +case $chosen in + $screen) + sleep 0.4; grim -t png - | wl-copy -t image/png + ;; + $area) + grim -g "$(slurp)" -t png - | wl-copy -t image/png + ;; + $window) + sleep 0.4; grim -g "$(hyprctl activewindow | grep at: | cut -d' ' -f2) $(hyprctl activewindow | grep size: | cut -d' ' -f2 | sed 's/,/x/g')" - | wl-copy + ;; +esac + diff --git a/general/configs/rofi/scripts/screenshot.sh b/general/configs/rofi/scripts/screenshot.sh new file mode 100755 index 0000000..0b26829 --- /dev/null +++ b/general/configs/rofi/scripts/screenshot.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +## Author : Aditya Shakya +## Mail : adi1090x@gmail.com +## Github : @adi1090x +## Twitter : @adi1090x + +dir="$HOME/.config/rofi/styles" +rofi_command="rofi -theme $dir/three.rasi" + +# Options +screen="" +area="" +window="" + +# Variable passed to rofi +options="$screen\n$area\n$window" + +chosen="$(echo -e "$options" | $rofi_command -p '' -dmenu -selected-row 1)" +case $chosen in + $screen) + scrot -e 'xclip -selection clipboard -target image/png -i $f && rm $f' + ;; + $area) + scrot -s --line mode=edge -e 'xclip -selection clipboard -target image/png -i $f && rm $f' + ;; + $window) + scrot -u -e 'xclip -selection clipboard -target image/png -i $f && rm $f' + ;; +esac + diff --git a/general/configs/rofi/spotlight/history.txt b/general/configs/rofi/spotlight/history.txt new file mode 100755 index 0000000..d0143a7 --- /dev/null +++ b/general/configs/rofi/spotlight/history.txt @@ -0,0 +1,3 @@ +!te +A Rofi with file and web searching functionality +!test diff --git a/general/configs/rofi/spotlight/icons/ddg.svg b/general/configs/rofi/spotlight/icons/ddg.svg new file mode 100755 index 0000000..20ea387 --- /dev/null +++ b/general/configs/rofi/spotlight/icons/ddg.svg @@ -0,0 +1,615 @@ + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/general/configs/rofi/spotlight/icons/google.svg b/general/configs/rofi/spotlight/icons/google.svg new file mode 100755 index 0000000..21e5bf3 --- /dev/null +++ b/general/configs/rofi/spotlight/icons/google.svg @@ -0,0 +1,365 @@ + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/general/configs/rofi/spotlight/icons/history.svg b/general/configs/rofi/spotlight/icons/history.svg new file mode 100755 index 0000000..872bac8 --- /dev/null +++ b/general/configs/rofi/spotlight/icons/history.svg @@ -0,0 +1,75 @@ + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/general/configs/rofi/spotlight/icons/result.svg b/general/configs/rofi/spotlight/icons/result.svg new file mode 100755 index 0000000..0f4d883 --- /dev/null +++ b/general/configs/rofi/spotlight/icons/result.svg @@ -0,0 +1,57 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/general/configs/rofi/spotlight/rofi-spotlight.sh b/general/configs/rofi/spotlight/rofi-spotlight.sh new file mode 100755 index 0000000..0ed30e9 --- /dev/null +++ b/general/configs/rofi/spotlight/rofi-spotlight.sh @@ -0,0 +1,692 @@ +#!/usr/bin/env bash + +TMP_DIR="/tmp/rofi/${USER}/" + +PREV_LOC_FILE="${TMP_DIR}rofi_fb_prevloc" +CURRENT_FILE="${TMP_DIR}rofi_fb_current_file" + +MY_PATH="$(realpath "$0" | xargs dirname)" +HIST_FILE="${MY_PATH}/history.txt" + +OPENER=xdg-open +TERM_EMU=terminator +TEXT_EDITOR=$EDITOR +FILE_MANAGER=xdg-open +BLUETOOTH_SEND=blueman-sendto + +CUR_DIR=$PWD +NEXT_DIR="" +FD_INSTALLED=$(command -v fd) + +SHOW_HIDDEN=false + +# Setup menu options +declare -a OPEN_FILE_LOCATION=( + "Open file location in ${TERM_EMU}" + "Open file location in ${FILE_MANAGER}" +) +declare -a RUN_COMMANDS=( + "Run" + "Execute in ${TERM_EMU}" +) +declare -a STANDARD_CONTROLS=( + "Move to trash" + "Delete" + "Back" +) +declare -a SHELL_NO_X_OPTIONS=( + "Edit" + "${OPEN_FILE_LOCATION[@]}" + "${STANDARD_CONTROLS[@]}" +) +declare -a SHELL_OPTIONS=( + "${RUN_COMMANDS[@]}" + "${SHELL_NO_X_OPTIONS[@]}" +) +declare -a BIN_NO_X_OPTIONS=( + "${OPEN_FILE_LOCATION[@]}" + "Back" +) +declare -a BIN_OPTIONS=( + "${RUN_COMMANDS[@]}" + "${BIN_NO_X_OPTIONS[@]}" +) +declare -a TEXT_OPTIONS=("${SHELL_NO_X_OPTIONS[@]}") +declare -a HTML_OPTIONS=( + "Open" + "Edit" + "${OPEN_FILE_LOCATION[@]}" + "${STANDARD_CONTROLS[@]}" +) +declare -a XCF_SVG_OPTIONS=( + "Open" + "${OPEN_FILE_LOCATION[@]}" + "${STANDARD_CONTROLS[@]}" +) +declare -a IMAGE_OPTIONS=( + "Open" + "Send via Bluetooth" + "${OPEN_FILE_LOCATION[@]}" + "${STANDARD_CONTROLS[@]}" +) + +declare -a ALL_OPTIONS=() + +# Combine all context menu +COMBINED_OPTIONS=( + "${SHELL_OPTIONS[@]}" + "${IMAGE_OPTIONS[@]}" +) + +# Remove duplicates +ALL_OPTIONS=("$(printf '%s\n' "${COMBINED_OPTIONS[@]}" | sort -u)") + +# Create tmp dir for rofi +[ ! -d "${TMP_DIR}" ] && mkdir -p "${TMP_DIR}"; + +# Create hist file if it doesn't exist +[ ! -f "${HIST_FILE}" ] && touch "${HIST_FILE}" + +# Help message +if [ -n "$*" ] && [[ "$*" = ":help" ]] +then + echo -en "Rofi Spotlight +A Rofi with file and web searching functionality + +Commands: +:help to print this help message +:h or :hidden to show hidden files/dirs +:sh or :show_hist to show search history +:ch or :clear_hist to clear search history +:xdg to jump to an xdg directory +Examples: + :xdg DOCUMENTS + :xdg DOWNLOADS +Also supports incomplete path: +Examples: + :xdg doc + :xdg down +For more info about XDG dirs, see: +\`man xdg-user-dir\` + +File search syntaxes: +! to search for a file and web suggestions +? to search parent directories +Examples: + !half-life 3 + ?portal 3 + +Web search syntaxes: +! to gets search suggestions +:web/:w to also to gets search suggestions +:webbro/:wb to search directly from your browser +Examples: + !how to install archlinux + :web how to install gentoo + :w how to make a nuclear fission + :webbro how to install wine in windowsxp +Back\0icon\x1fdraw-arrow-back\n" + + exit +fi + +# Return the icon string +function icon_file_type(){ + icon_name="" + mime_type=$(file --mime-type -b "${1}") + + case "${mime_type}" in + "inode/directory") + case "${1}" in + "Desktop/" ) + icon_name='folder-blue-desktop' + ;; + "Documents/" ) + icon_name='folder-blue-documents' + ;; + "Downloads/" ) + icon_name='folder-blue-downloads' + ;; + "Music/" ) + icon_name='folder-blue-music' + ;; + "Pictures/" ) + icon_name='folder-blue-pictures' + ;; + "Public/" ) + icon_name='folder-blue-public' + ;; + "Templates/" ) + icon_name='folder-blue-templates' + ;; + "Videos/" ) + icon_name='folder-blue-videos' + ;; + "root/" ) + icon_name='folder-root' + ;; + "home/" | "${USER}/") + icon_name='folder-home' + ;; + *"$" ) + icon_name='folder-blue' + ;; + *) + icon_name='folder-blue' + ;; + esac + ;; + "inode/symlink" ) + icon_name='inode-symlink' + ;; + "audio/flac" | "audio/mpeg" ) + icon_name='music' + ;; + "video/mp4" ) + icon_name='video-mp4' + ;; + "video/x-matroska" ) + icon_name=video-x-matroska + ;; + "image/x-xcf" ) + # notify-send '123' + icon_name='image-x-xcf' + ;; + "image/jpeg" | "image/png" | "image/svg+xml") + icon_name="${CUR_DIR}/${1}" + ;; + "image/gif" ) + icon_name='gif' + ;; + "image/vnd.adobe.photoshop" ) + icon_name='image-vnd.adobe.photoshop' + ;; + "image/webp" ) + icon_name='gif' + ;; + "application/x-pie-executable" ) + icon_name='binary' + ;; + "application/pdf" ) + icon_name='pdf' + ;; + "application/zip" ) + icon_name='application-zip' + ;; + "application/x-xz" ) + icon_name='application-x-xz-compressed-tar' + ;; + "application/x-7z-compressed" ) + icon_name='application-x-7zip' + ;; + "application/x-rar" ) + icon_name='application-x-rar' + ;; + "application/octet-stream" | "application/x-iso9660-image" ) + icon_name='application-x-iso' + ;; + "application/x-dosexec" ) + icon_name='application-x-ms-dos-executable' + ;; + "text/plain" ) + icon_name='application-text' + ;; + "text/x-shellscript" ) + icon_name='application-x-shellscript' + ;; + "text/html" ) + icon_name='text-html' + ;; + "font/sfnt" | "application/vnd.ms-opentype" ) + icon_name='application-x-font-ttf' + ;; + * ) + case "${1}" in + *."docx" | *".doc" ) + icon_name='application-msword' + ;; + *."apk" ) + icon_name='android-package-archive' + ;; + * ) + icon_name='unknown' + ;; + esac + ;; + esac + + echo -en "$1\0icon\x1f$icon_name\n" +} + +export -f icon_file_type + +# Pass the argument to python script +function web_search() { + # Pass the search query to web-search script + "${MY_PATH}/web-search.py" "${1}" + exit; +} + +# Handles the web search method +if [ ! -z "$@" ] && ([[ "$@" == ":webbro"* ]] || [[ "$@" == ":wb"* ]]) +then + remove='' + [[ "$*" = ":webbro"* ]] && remove=":webbro" || remove=":wb" + + # Search directly from your web browser + web_search "$(printf '%s\n' "${1//$remove/}")" + exit; + +elif [ ! -z "$@" ] && ([[ "$@" == ":web"* ]] || [[ "$@" == ":w"* ]]) +then + remove='' + [[ "$*" = ":web"* ]] && remove=":web" || remove=":w" + + # Get search suggestions + web_search "!$(printf '%s\n' "${1//$remove/}")" + exit; +fi + +function find_query() { + QUERY=${1} + if [[ ! "${QUERY}" =~ ( |\') ]] + then + if [ -z "$FD_INSTALLED" ]; + then + find "${HOME}" -iname *"${QUERY}"* | sed "s/\/home\/$USER/\~/" | + awk -v MY_PATH="${MY_PATH}" '{print $0"\0icon\x1f"MY_PATH"/icons/result.svg\n"}' + else + fd -H ${QUERY} ${HOME} | sed "s/\/home\/$USER/\~/" | + awk -v MY_PATH="${MY_PATH}" '{print $0"\0icon\x1f"MY_PATH"/icons/result.svg\n"}' + fi + fi +} + +# File and calls to the web search +if [ ! -z "$@" ] && ([[ "$@" == ?(\~)/* ]] || [[ "$@" == \?* ]] || [[ "$@" == \!* ]]) +then + QUERY=$@ + + echo "${QUERY}" >> "${HIST_FILE}" + + if [[ "$@" == ?(\~)/* ]] + then + [[ "$*" = \~* ]] && QUERY="${QUERY//"~"/"$HOME"}" + + coproc ${OPENER} "${QUERY}" > /dev/null 2>&1 + exec 1>&- + exit + + elif [[ "$@" == \?* ]] + then + find_query ${QUERY#\?} + + else + # Find the file + find_query ${QUERY#!} + + # Web search + web_search "! ${QUERY#!}" + fi + exit; +fi + +# Create notification if there's an error +function create_notification() { + case "${1}" in + "denied" ) + notify-send -a "Global Search" "Permission denied!" \ + 'You have no permission to access '"${CUR_DIR}!" + ;; + "deleted" ) + notify-send -a "Global Search" "Success!" \ + 'File deleted!' + ;; + "trashed" ) + notify-send -a "Global Search" "Success!" \ + 'The file has been moved to trash!' + ;; + "cleared" ) + notify-send -a "Global Search" "Success!" \ + 'Search history has been successfully cleared!' + ;; + * ) + notify-send -a "Global Search" "Somethings wrong I can feel it!" \ + 'This incident will be reported!' + ;; + esac +} + +# Show the files in the current directory +function navigate_to() { + # process current dir. + if [ -n "${CUR_DIR}" ] + then + CUR_DIR=$(readlink -e "${CUR_DIR}") + if [ ! -d "${CUR_DIR}" ] || [ ! -r "${CUR_DIR}" ] + then + create_notification "denied" + CUR_DIR=$(realpath ${CUR_DIR} | xargs dirname) + echo "${CUR_DIR}" > "${PREV_LOC_FILE}" + else + echo "${CUR_DIR}/" > "${PREV_LOC_FILE}" + fi + pushd "${CUR_DIR}" >/dev/null || exit + fi + + printf "..\0icon\x1fup\n" + + if [[ -z "$FD_INSTALLED" ]] + then + #Group directories + if [[ ${SHOW_HIDDEN} == true ]] + then + for i in .*/ + do + [[ -d "${i}" ]] && ([[ "${i}" != "./" ]] && [[ "${i}" != "../"* ]]) && icon_file_type "${i}" + done + fi + for i in */ + do + [[ -d "${i}" ]] && icon_file_type "${i}" + done + #Group files + if [[ ${SHOW_HIDDEN} = true ]] + then + for i in .* + do + [[ -f "${i}" ]] && icon_file_type "${i}" + done + fi + for i in * + do + [[ -f "${i}" ]] && icon_file_type "${i}" + done + else + THREADS=$(getconf _NPROCESSORS_ONLN) + export CUR_DIR + if [[ ${SHOW_HIDDEN} == true ]] + then + fd -Ht d -d 1 -x bash -c 'icon_file_type "$1/"' _ {} \ | sort -V --parallel=$THREADS + fd -Ht f -d 1 -x bash -c 'icon_file_type "$1"' _ {} \ | sort -V --parallel=$THREADS + else + fd -t d -d 1 -x bash -c 'icon_file_type "$1/"' _ {} \ | sort -V --parallel=$THREADS + fd -t f -d 1 -x bash -c 'icon_file_type "$1"' _ {} \ | sort -V --parallel=$THREADS + fi + fi +} + +# Set XDG dir +function return_xdg_dir() { + target_dir=${1^^} + + if [[ "HOME" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir) + + elif [[ "DESKTOP" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir DESKTOP) + + elif [[ "DOCUMENTS" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir DOCUMENTS) + + elif [[ "DOWNLOADS" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir DOWNLOAD) + + elif [[ "MUSIC" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir MUSIC) + + elif [[ "PICTURES" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir PICTURES) + + elif [[ "PUBLICSHARE" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir PUBLICSHARE) + + elif [[ "TEMPLATES" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir TEMPLATES) + + elif [[ "VIDEOS" == *"${target_dir}"* ]] + then + CUR_DIR=$(xdg-user-dir VIDEOS) + + elif [[ "ROOT" == *"${target_dir}"* ]] + then + CUR_DIR="/" + + else + CUR_DIR="${HOME}" + fi + navigate_to + exit; +} + +# Show and Clear History +if [ ! -z "$@" ] && ([[ "$@" == ":sh" ]] || [[ "$@" == ":show_hist" ]]) +then + hist=$(tac "${HIST_FILE}") + + echo -en "Back\0icon\x1fdraw-arrow-back\n" + [ -z "${hist}" ] && echo -en "No History Yet\0icon\x1ftext-plain\n" + + while IFS= read -r line; + do + echo -en "${line}\0icon\x1f${MY_PATH}/icons/history.svg\n"; + done <<< "${hist}" + + exit; +elif [ ! -z "$@" ] && ([[ "$@" == ":ch" ]] || [[ "$@" == ":clear_hist" ]]) +then + :> "${HIST_FILE}" + create_notification "cleared" + + CUR_DIR="${HOME}" + navigate_to + exit; +fi + +# Accepts XDG command +if [[ ! -z "$@" ]] && [[ "$@" == ":xdg"* ]] +then + NEXT_DIR=${*//":xdg "/} + + [[ -n "$NEXT_DIR" ]] && return_xdg_dir "${NEXT_DIR}" || return_xdg_dir "${HOME}" +fi + +# Read last location, otherwise we default to PWD. +[ -f "${PREV_LOC_FILE}" ] && CUR_DIR=$(< "${PREV_LOC_FILE}") + +if [[ ! -z "$@" ]] && ([[ "$@" == ":h" ]] || [[ "$@" == ":hidden" ]]) +then + SHOW_HIDDEN=true + navigate_to + exit; +fi + +# Handle argument. +[ -n "$*" ] && CUR_DIR="${CUR_DIR}/$*" + +# Context Menu +if [ -n "$*" ] && [[ "${ALL_OPTIONS[*]} " = *"$*"* ]] +then + case "${1}" in + "Run" ) + coproc ( eval "$(< ${CURRENT_FILE})" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Execute in ${TERM_EMU}" ) + coproc ( eval "${TERM_EMU} \"$(< ${CURRENT_FILE})\"" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Open" ) + coproc ( eval "${OPENER} \"$(< ${CURRENT_FILE})\"" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Open file location in ${TERM_EMU}" ) + file_path="$(< ${CURRENT_FILE})" + coproc ( ${TERM_EMU} bash -c "cd ${file_path%/*} ; ${SHELL}" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Open file location in ${FILE_MANAGER}" ) + file_path="$(< "${CURRENT_FILE}")" + coproc ( eval "${FILE_MANAGER} "${file_path%/*}"" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Edit" ) + coproc ( eval "${TERM_EMU} ${TEXT_EDITOR} \"$(< ${CURRENT_FILE})\"" & > /dev/null 2>&1 ) + kill -9 $(pgrep rofi) + ;; + "Move to trash" ) + coproc( gio trash "$(< ${CURRENT_FILE})" & > /dev/null 2>&1 ) + create_notification "trashed" + CUR_DIR="$(dirname "$(< ${CURRENT_FILE})")" + navigate_to + ;; + "Delete" ) + shred "$(< ${CURRENT_FILE})" + rm "$(< ${CURRENT_FILE})" + create_notification "deleted" + CUR_DIR="$(dirname "$(< ${CURRENT_FILE})")" + navigate_to + ;; + "Send via Bluetooth" ) + rfkill unblock bluetooth && bluetoothctl power on + sleep 1 + blueman-sendto "$(< ${CURRENT_FILE})" & > /dev/null 2>&1 + kill -9 $(pgrep rofi) + ;; + "Back" ) + CUR_DIR="$(< ${PREV_LOC_FILE})" + navigate_to + ;; + esac + exit; +fi + +function context_menu_icons() { + + if [[ "${1}" == "Run" ]] + then + echo '\0icon\x1fsystem-run\n' + + elif [[ "${1}" == "Execute in ${TERM_EMU}" ]] + then + echo "\0icon\x1f${TERM_EMU}\n" + + elif [[ "${1}" == "Open" ]] + then + echo "\0icon\x1futilities-x-terminal\n" + + elif [[ "${1}" == "Open file location in ${TERM_EMU}" ]] + then + echo "\0icon\x1f${TERM_EMU}\n" + + elif [[ "${1}" == "Open file location in ${FILE_MANAGER}" ]] + then + echo "\0icon\x1fblue-folder-open\n" + + elif [[ "${1}" == "Edit" ]] + then + echo "\0icon\x1faccessories-text-editor\n" + + elif [[ "${1}" == "Move to trash" ]] + then + echo "\0icon\x1fapplication-x-trash\n" + + elif [[ "${1}" == "Delete" ]] + then + echo "\0icon\x1findicator-trashindicator\n" + + elif [[ "${1}" == "Send via Bluetooth" ]] + then + echo "\0icon\x1fbluetooth\n" + + elif [[ "${1}" == "Back" ]] + then + echo "\0icon\x1fback\n" + fi +} + +function print_context_menu() { + declare -a arg_arr=("${!1}") + + for menu in "${arg_arr[@]}" + do + printf "$menu$(context_menu_icons "${menu}")\n" + done +} + +function context_menu() { + + type="$(file --mime-type -b "${CUR_DIR}")" + + if [ -w "${CUR_DIR}" ] && [[ "${type}" == "text/x-shellscript" ]] + then + if [ -x "${CUR_DIR}" ]; + then + print_context_menu SHELL_OPTIONS[@] + else + print_context_menu SHELL_NO_X_OPTIONS[@] + fi + + elif [[ "${type}" == "application/x-executable" ]] || [[ "${type}" == "application/x-pie-executable" ]] + then + if [ -x "${CUR_DIR}" ] + then + print_context_menu BIN_OPTIONS[@] + else + print_context_menu BIN_NO_X_OPTIONS[@] + fi + + elif [[ "${type}" == "text/plain" ]] + then + print_context_menu TEXT_OPTIONS[@] + + elif [[ "${type}" == "text/html" ]] + then + print_context_menu HTML_OPTIONS[@] + + elif [[ "${type}" == "image/jpeg" ]] || [[ "${type}" == "image/png" ]] + then + print_context_menu IMAGE_OPTIONS[@] + + elif [[ "${type}" == "image/x-xcf" ]] || [[ "${type}" == "image/svg+xml" ]] + then + print_context_menu XCF_SVG_OPTIONS[@] + + elif [ ! -w "${CUR_DIR}" ] && [[ "${type}" == "text/x-shellscript" ]] + then + coproc ( exec "${CUR_DIR}" & > /dev/null 2>&1 ) + + else + if [ ! -d "${CUR_DIR}" ] && [ ! -f "${CUR_DIR}" ] + then + QUERY="${CUR_DIR//*\/\//}" + + echo "${QUERY}" >> "${HIST_FILE}" + + find_query "${QUERY#!}" + + web_search "!${QUERY}" + else + coproc ( ${OPENER} "${CUR_DIR}" & > /dev/null 2>&1 ) + fi + fi + exit; +} + +# If argument is not a directory/folder +if [ ! -d "${CUR_DIR}" ] +then + echo "${CUR_DIR}" > "${CURRENT_FILE}" + context_menu + exit; +fi + +navigate_to diff --git a/general/configs/rofi/spotlight/rofi.rasi b/general/configs/rofi/spotlight/rofi.rasi new file mode 100755 index 0000000..13fc4fa --- /dev/null +++ b/general/configs/rofi/spotlight/rofi.rasi @@ -0,0 +1,153 @@ +configuration { + font: "Inter Regular 10"; + show-icons: true; + drun-display-format: "{name}"; + fullscreen: false; + threads: 0; + matching: "fuzzy"; + scroll-method: 0; + disable-history: false; + fullscreen: false; + window-thumbnail: true; +} + +* { + background: rgba(5, 0, 52, 1); + foreground: #FFFFFFFF; + background-selected: #F2F2F245; + background-active: #F2F2F230; + background-white: rgba(0, 0, 0, 1); + background-black: rgba(0, 0, 0, 1); + urgent: rgba(5, 0, 52, 1); + urgent-selected: #E91E6377; +} + +window { + background-color: @background; + location: center; + anchor: center; + x-offset: 0px; + height: 50%; + width: 750px; + orientation: vertical; + border-radius: 12px; +} + +prompt { + enabled: false; +} + +button { + action: "ok"; + str: "🔎 "; + font: "FantasqueSansMono Nerd Font 11"; + expand: false; + text-color: @foreground; + background-color: @background; + vertical-align: 0.7; + horizontal-align: 0.5; + border-radius: 15px; +} + +entry { + font: "Inter Regular 11"; + background-color: @background; + text-color: @foreground; + expand: true; + vertical-align: 0.5; + horizontal-align: 0.5; + placeholder: "Type to search"; + placeholder-color: @foreground; + blink: true; +} + +case-indicator { + background-color: @background; + text-color: @foreground; + vertical-align: 0.5; + horizontal-align: 0.5; +} + +entry-wrapper { + orientation: horizontal; + vertical-align: 0.5; + spacing: 4px; + background-color: @background; + children: [ button, entry, case-indicator ]; +} + +inputbar { + background-color: @background-white; + text-color: @foreground; + expand: false; + border-radius: 24px; + margin: 0px 225px 0px 225px; + padding: 10px 10px 10px 10px; + position: north; + children: [ entry-wrapper ]; +} + +listview { + background-color: @background; + columns: 2; + spacing: 5px; + cycle: false; + dynamic: true; + layout: vertical; +} + +mainbox { + background-color: @background-black; + children: [ inputbar, listview ]; + spacing: 25px; + padding: 40px 25px 25px 25px; +} + +element { + background-color: @background; + text-color: @foreground; + orientation: horizontal; + border-radius: 6px; + padding: 5px 10px 5px 10px; +} + +element-icon { + size: 36px; + border: 0; +} + +element-text { + expand: true; + horizontal-align: 0; + vertical-align: 0.5; + margin: 0 10px 0 10px; +} + +element normal.urgent, +element alternate.urgent { + str: "t"; + background-color: @urgent; + text-color: @foreground; + border-radius: 9px; +} + +element normal.active, +element alternate.active { + background-color: @background-active; + text-color: @foreground; +} + +element selected { + background-color: @background-selected; + text-color: @foreground; +} + +element selected.urgent { + background-color: @urgent-selected; + text-color: @foreground; +} + +element selected.active { + background-color: @background-active; + color: @foreground-selected; +} diff --git a/general/configs/rofi/spotlight/web-search.py b/general/configs/rofi/spotlight/web-search.py new file mode 100755 index 0000000..936f065 --- /dev/null +++ b/general/configs/rofi/spotlight/web-search.py @@ -0,0 +1,169 @@ +#!/usr/bin/env python3 + +# MIT License + +# Copyright (c) 2019 Paolo Donadeo + +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + +import json +import re +import urllib.parse +import urllib.request +import sys +import os +import datetime +import gzip + +import subprocess as sp + +import html + + +################################################################################ +##### C O N F I G U R A T I O N ###### +################################################################################ +SEARCH_ENGINE = 'duckduckgo' # or 'duckduckgo' +BROWSER = 'librewolf' # or 'firefox', 'chromium', 'brave', 'lynx' +TERMINAL = ['terminator', '--'] # or ['st', '-e'] or something like that +################################################################################ + +CONFIG = { + 'BROWSER_PATH' : { + 'chrome' : ['google-chrome-stable'], + 'firefox' : ['firefox'], + 'librewolf' : ['librewolf'], + 'chromium' : ['chromium-browser'], + 'brave' : ['brave-browser'], + 'lynx' : TERMINAL + ['lynx'] + }, + 'USER_AGENT' : { + 'chrome' : 'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', + 'firefox' : 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0', + 'librewolf' : 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0', + 'chromium' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/76.0.3809.100 Chrome/76.0.3809.100 Safari/537.36', + 'brave' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36', + 'lynx' : 'Lynx/2.8.9rel.1 libwww-FM/2.14 SSL-MM/1.4.1 OpenSSL/1.1.1d' + }, + 'SEARCH_ENGINE_NAME' : { + 'google' : 'Google', + 'duckduckgo' : 'DuckDuckGo' + }, + 'SEARCH_URL' : { + 'google' : 'https://www.google.com/search?q=', + 'duckduckgo' : 'https://duckduckgo.com/?q=' + }, + 'SUGGESTION_URL' : { + 'google' : 'https://www.google.com/complete/search?', + 'duckduckgo' : 'https://duckduckgo.com/ac/?' + } +} + +def cleanhtml(txt): + return re.sub(r'<.*?>', '', txt) + +def fetch_suggestions(search_string): + if SEARCH_ENGINE == 'google': + r = { + 'q' : search_string, + 'cp' : '11', + 'client' : 'psy-ab', + 'xssi' : 't', + 'gs_ri' : 'gws-wiz', + 'hl' : 'en-IT', + 'authuser' : '0' + } + url = CONFIG['SUGGESTION_URL'][SEARCH_ENGINE] + urllib.parse.urlencode(r) + headers = { + 'sec-fetch-mode' : 'cors', + 'dnt' : '1', + 'accept-encoding' : 'gzip', + 'accept-language' : 'en-US;q=0.9,en;q=0.8', + 'pragma' : 'no-cache', + 'user-agent' : CONFIG['USER_AGENT'][BROWSER], + 'accept' : '*/*', + 'cache-control' : 'no-cache', + 'authority' : 'www.google.com', + 'referer' : 'https://www.google.com/', + 'sec-fetch-site' : 'same-origin' + } + req = urllib.request.Request(url, headers=headers, method='GET') + + reply_data = gzip.decompress(urllib.request.urlopen(req).read()).split(b'\n')[1] + reply_data = json.loads(reply_data) + return [ cleanhtml(res[0]).strip() for res in reply_data[0] ] + else: # 'duckduckgo' + if search_string.startswith('!'): + bang_search = True + search_string = search_string.lstrip('!') + else: + bang_search = False + r = { + 'q' : search_string, + 'callback' : 'autocompleteCallback', + 'kl' : 'wt-wt', + '_' : str(int((datetime.datetime.now().timestamp())*1000)) + } + url = CONFIG['SUGGESTION_URL'][SEARCH_ENGINE] + urllib.parse.urlencode(r) + if bang_search: + url = url.replace('?q=', '?q=!') + headers = { + 'pragma' : 'no-cache', + 'dnt' : '1', + 'accept-encoding' : 'gzip', + 'accept-language' : 'en-US;q=0.9,en;q=0.8', + 'user-agent' : CONFIG['USER_AGENT'][BROWSER], + 'sec-fetch-mode' : 'no-cors', + 'accept' : '*/*', + 'cache-control' : 'no-cache', + 'authority' : 'duckduckgo.com', + 'referer' : 'https://duckduckgo.com/', + 'sec-fetch-site' : 'same-origin', + } + req = urllib.request.Request(url, headers=headers, method='GET') + reply_data = gzip.decompress(urllib.request.urlopen(req).read()).decode('utf8') + reply_data = json.loads(re.match(r'autocompleteCallback\((.*)\);', reply_data).group(1)) + return [ cleanhtml(res['phrase']).strip() for res in reply_data ] + +def main(): + search_string = html.unescape((' '.join(sys.argv[1:])).strip()) + + path_str = os.path.dirname(os.path.realpath(__file__)) + '/' + icon_path_str = path_str + 'icons/' + icon_name = icon_path_str + + if SEARCH_ENGINE == 'google': + icon_name += 'google.svg' + else: + icon_name += 'ddg.svg' + + if search_string.startswith('!'): + search_string = search_string.rstrip('!').strip() + results = fetch_suggestions(search_string) + for r in results: + print(":wb " + html.unescape(r) + "\0icon\x1f"+icon_name+"\n") + else: + url = CONFIG['SEARCH_URL'][SEARCH_ENGINE] + urllib.parse.quote_plus(search_string) + sp.Popen(CONFIG['BROWSER_PATH'][BROWSER] + [url], stdout=sp.DEVNULL, stderr=sp.DEVNULL, shell=False) + +if __name__ == "__main__": + try: + main() + except Exception as e: + if e: + sys.exit(1) diff --git a/general/configs/rofi/themes/arc_dark_transparent_colors.rasi b/general/configs/rofi/themes/arc_dark_transparent_colors.rasi new file mode 100755 index 0000000..4dc8195 --- /dev/null +++ b/general/configs/rofi/themes/arc_dark_transparent_colors.rasi @@ -0,0 +1,34 @@ +/******************************************************* + * ROFI Arch Dark Transparent colors for EndeavourOS + * Maintainer: joekamprad + *******************************************************/ +* { + selected-normal-foreground: rgba ( 255, 147, 5, 100 % ); + foreground: rgba ( 196, 203, 212, 100 % ); + normal-foreground: @foreground; + alternate-normal-background: rgba ( 45, 48, 59, 1 % ); + red: rgba ( 220, 50, 47, 100 % ); + selected-urgent-foreground: rgba ( 249, 249, 249, 100 % ); + blue: rgba ( 38, 139, 210, 100 % ); + urgent-foreground: rgba ( 204, 102, 102, 100 % ); + alternate-urgent-background: rgba ( 75, 81, 96, 90 % ); + active-foreground: rgba ( 101, 172, 255, 100 % ); + lightbg: rgba ( 238, 232, 213, 100 % ); + selected-active-foreground: rgba ( 249, 249, 249, 100 % ); + alternate-active-background: rgba ( 45, 48, 59, 88 % ); + background: rgba ( 45, 48, 59, 88 % ); + alternate-normal-foreground: @foreground; + normal-background: rgba ( 45, 48, 59, 1 % ); + lightfg: rgba ( 88, 104, 117, 100 % ); + selected-normal-background: rgba ( 24, 26, 32, 100 % ); + border-color: rgba ( 124, 131, 137, 100 % ); + spacing: 2; + separatorcolor: rgba ( 45, 48, 59, 1 % ); + urgent-background: rgba ( 45, 48, 59, 15 % ); + selected-urgent-background: rgba ( 165, 66, 66, 100 % ); + alternate-urgent-foreground: @urgent-foreground; + background-color: rgba ( 0, 0, 0, 0 % ); + alternate-active-foreground: @active-foreground; + active-background: rgba ( 29, 31, 33, 17 % ); + selected-active-background: rgba ( 26, 28, 35, 100 % ); +} diff --git a/general/configs/rofi/themes/defaultTheme.rasi b/general/configs/rofi/themes/defaultTheme.rasi new file mode 100755 index 0000000..7d4774c --- /dev/null +++ b/general/configs/rofi/themes/defaultTheme.rasi @@ -0,0 +1,78 @@ +* { + background: rgba(0, 30, 50, 1); + foreground: #ffffff; + border-color: @background; + bg-selected: #282c34; + grey: #565c64; + spacing: 2; + width: 30em; + margin: 0; + padding: 0; +} + +#window { + background-color: @background; + border: 0; + padding: 0; + location: west; + anchor: west; + height: 70%; + margin: 0; +} + +#mainbox { + background-color: @background; + spacing: 10px; + margin: 10px 0 0 0; + width: 200px; +} + +#inputbar { + children: [prompt,entry]; + background-color: @background; +} + +#listview { + background-color: @background; + fixed-height: true; + margin: 5px 0 0 10px; +} + +#element { + padding: 5px; + background-color: @background; + text-color: @foreground; +} + +element selected { + background-color: @bg-selected; + text-color: @foreground; +} + +element-text { + background-color: inherit; + text-color: inherit; +} + +element-icon { + background-color: inherit; + margin: 0 4px 0 0; + size: 25px; +} + +#entry { + background-color: @background; + text-color: @foreground; + placeholder: "Search"; + placeholder-color: @grey; + font: "Sora Regular 20"; +} + +#prompt { + background-color: @background; + padding: 0 4px; + margin: 0 5px 0 0; + text-color: @foreground; + font: "Sora Regular 20"; +} + diff --git a/general/configs/rofi/themes/mcLarenTheme.rasi b/general/configs/rofi/themes/mcLarenTheme.rasi new file mode 100644 index 0000000..9db5700 --- /dev/null +++ b/general/configs/rofi/themes/mcLarenTheme.rasi @@ -0,0 +1,82 @@ +* { + background: rgba(0, 0, 0, 1); + foreground: #ffffff; + mclaren: #cc5c00; + border-color: @mclaren; + bg-selected: #282c34; + grey: #565c64; + spacing: 2; + width: 30em; + margin: 0; + padding: 0; +} + +#window { + background-color: @background; + border-color: @mclaren; + border: 1px; + border-radius: 10px; + padding: 0; + location: west; + anchor: west; + margin: 0; +} + +#mainbox { + background-color: @background; + spacing: 10px; + margin: 10px 0 0 0; + width: 200px; +} + +#inputbar { + children: [prompt,entry]; + background-color: @background; +} + +#listview { + background-color: @background; + fixed-height: true; + margin: 5px 0 0 10px; +} + +#element { + padding: 5px; + background-color: @background; + text-color: @foreground; +} + +element selected { + background-color: @bg-selected; + text-color: @mclaren; + border: 1px; + border-radius: 5px; +} + +element-text { + background-color: inherit; + text-color: inherit; +} + +element-icon { + background-color: inherit; + margin: 0 4px 0 0; + size: 25px; +} + +#entry { + background-color: @background; + text-color: @mclaren; + placeholder: "Search"; + placeholder-color: @grey; + font: "Sora Regular 20"; +} + +#prompt { + background-color: @background; + padding: 0 4px; + margin: 0 5px 0 0; + text-color: @foreground; + font: "Sora Regular 20"; +} + diff --git a/general/configs/rofi/themes/nord.rasi b/general/configs/rofi/themes/nord.rasi new file mode 100755 index 0000000..e81b5eb --- /dev/null +++ b/general/configs/rofi/themes/nord.rasi @@ -0,0 +1,127 @@ +/** + * Nordic rofi theme + * Adapted by undiabler + * + * Nord Color palette imported from https://www.nordtheme.com/ + * + */ + + +* { + nord0: #2e3440; + nord1: #3b4252; + nord2: #434c5e; + nord3: #4c566a; + + nord4: #d8dee9; + nord5: #e5e9f0; + nord6: #eceff4; + + nord7: #8fbcbb; + nord8: #88c0d0; + nord9: #81a1c1; + nord10: #5e81ac; + nord11: #bf616a; + + nord12: #d08770; + nord13: #ebcb8b; + nord14: #a3be8c; + nord15: #b48ead; + + foreground: @nord9; + backlight: #ccffeedd; + background-color: transparent; + + highlight: underline bold #eceff4; + + transparent: rgba(46,52,64,0); +} + +window { + location: center; + anchor: center; + transparency: "screenshot"; + padding: 10px; + border: 0px; + border-radius: 6px; + + background-color: @transparent; + spacing: 0; + children: [mainbox]; + orientation: horizontal; +} + +mainbox { + spacing: 0; + children: [ inputbar, message, listview ]; +} + +message { + color: @nord0; + padding: 5; + border-color: @foreground; + border: 0px 2px 2px 2px; + background-color: @nord7; +} + +inputbar { + color: @nord6; + padding: 11px; + background-color: #3b4252; + + border: 1px; + border-radius: 6px 6px 0px 0px; + border-color: @nord10; +} + +entry, prompt, case-indicator { + text-font: inherit; + text-color:inherit; +} + +prompt { + margin: 0px 1em 0em 0em ; +} + +listview { + padding: 8px; + border-radius: 0px 0px 6px 6px; + border-color: @nord10; + border: 0px 1px 1px 1px; + background-color: rgba(46,52,64,0.9); + dynamic: false; +} + +element { + padding: 3px; + vertical-align: 0.5; + border-radius: 4px; + background-color: transparent; + color: @foreground; + text-color: rgb(216, 222, 233); +} + +element selected.normal { + background-color: @nord7; + text-color: #2e3440; +} + +element-text, element-icon { + background-color: inherit; + text-color: inherit; +} + +button { + padding: 6px; + color: @foreground; + horizontal-align: 0.5; + + border: 2px 0px 2px 2px; + border-radius: 4px 0px 0px 4px; + border-color: @foreground; +} + +button selected normal { + border: 2px 0px 2px 2px; + border-color: @foreground; +} \ No newline at end of file diff --git a/general/configs/rofi/themes/power.rasi b/general/configs/rofi/themes/power.rasi new file mode 100755 index 0000000..8c70407 --- /dev/null +++ b/general/configs/rofi/themes/power.rasi @@ -0,0 +1,78 @@ +* { + background: rgba(0, 30, 50, 1); + foreground: #ffffff; + border-color: @background; + bg-selected: #282c34; + grey: #565c64; + spacing: 2; + width: 20em; + margin: 0; + padding: 0; +} + +#window { + background-color: @background; + border: 0; + padding: 0; + location: west; + anchor: west; + height: 40%; + margin: 0; +} + +#mainbox { + background-color: @background; + spacing: 10px; + margin: 10px 0 0 0; + width: 200px; +} + +#inputbar { + children: [prompt,entry]; + background-color: @background; +} + +#listview { + background-color: @background; + fixed-height: true; + margin: 5px 0 0 10px; +} + +#element { + padding: 5px; + background-color: @background; + text-color: @foreground; +} + +element selected { + background-color: @bg-selected; + text-color: @foreground; +} + +element-text { + background-color: inherit; + text-color: inherit; +} + +element-icon { + background-color: inherit; + margin: 0 4px 0 0; + size: 25px; +} + +#entry { + background-color: @background; + text-color: @foreground; + placeholder: "Search"; + placeholder-color: @grey; + font: "Sora Regular 20"; +} + +#prompt { + background-color: @background; + padding: 0 4px; + margin: 0 5px 0 0; + text-color: @foreground; + font: "Sora Regular 20"; +} + diff --git a/general/configs/rofi/themes/runnerTheme.rasi b/general/configs/rofi/themes/runnerTheme.rasi new file mode 100755 index 0000000..7d4774c --- /dev/null +++ b/general/configs/rofi/themes/runnerTheme.rasi @@ -0,0 +1,78 @@ +* { + background: rgba(0, 30, 50, 1); + foreground: #ffffff; + border-color: @background; + bg-selected: #282c34; + grey: #565c64; + spacing: 2; + width: 30em; + margin: 0; + padding: 0; +} + +#window { + background-color: @background; + border: 0; + padding: 0; + location: west; + anchor: west; + height: 70%; + margin: 0; +} + +#mainbox { + background-color: @background; + spacing: 10px; + margin: 10px 0 0 0; + width: 200px; +} + +#inputbar { + children: [prompt,entry]; + background-color: @background; +} + +#listview { + background-color: @background; + fixed-height: true; + margin: 5px 0 0 10px; +} + +#element { + padding: 5px; + background-color: @background; + text-color: @foreground; +} + +element selected { + background-color: @bg-selected; + text-color: @foreground; +} + +element-text { + background-color: inherit; + text-color: inherit; +} + +element-icon { + background-color: inherit; + margin: 0 4px 0 0; + size: 25px; +} + +#entry { + background-color: @background; + text-color: @foreground; + placeholder: "Search"; + placeholder-color: @grey; + font: "Sora Regular 20"; +} + +#prompt { + background-color: @background; + padding: 0 4px; + margin: 0 5px 0 0; + text-color: @foreground; + font: "Sora Regular 20"; +} + diff --git a/general/configs/rofi/themes/sidetab-nord.rasi b/general/configs/rofi/themes/sidetab-nord.rasi new file mode 100755 index 0000000..49a1f49 --- /dev/null +++ b/general/configs/rofi/themes/sidetab-nord.rasi @@ -0,0 +1,78 @@ +* { + background: #1e222a; + foreground: #E5E9F0; + border-color: @background; + bg-selected: #282c34; + grey: #565c64; + spacing: 2; + width: 30em; + margin: 0; + padding: 0; +} + +#window { + background-color: @background; + border: 0; + padding: 0; + location: west; + anchor: west; + height: 100%; + margin: 0; +} + +#mainbox { + background-color: @background; + spacing: 10px; + margin: 10px 0 0 0; + width: 200px; +} + +#inputbar { + children: [prompt,entry]; + background-color: @background; +} + +#listview { + background-color: @background; + fixed-height: true; + margin: 5px 0 0 10px; +} + +#element { + padding: 5px; + background-color: @background; + text-color: @foreground; +} + +element selected { + background-color: @bg-selected; + text-color: @foreground; +} + +element-text { + background-color: inherit; + text-color: inherit; +} + +element-icon { + background-color: inherit; + margin: 0 4px 0 0; + size: 25px; +} + +#entry { + background-color: @background; + text-color: @foreground; + placeholder: "Search"; + placeholder-color: @grey; + font: "Sora Regular 20"; +} + +#prompt { + background-color: @background; + padding: 0 4px; + margin: 0 5px 0 0; + text-color: @foreground; + font: "Sora Regular 20"; +} + diff --git a/general/configs/rofi/themes/sidetab.rasi b/general/configs/rofi/themes/sidetab.rasi new file mode 100755 index 0000000..507e3c4 --- /dev/null +++ b/general/configs/rofi/themes/sidetab.rasi @@ -0,0 +1,135 @@ +/******************************************************* + * ROFI configs i3 Apps menu for EndeavourOS + * Maintainer: joekamprad + *******************************************************/ +configuration { + font: "Sourcecode Pro Regular 10"; + show-icons: true; + icon-theme: "Arc-X-D"; + display-drun: "Apps"; + drun-display-format: "{name}"; + scroll-method: 0; + disable-history: false; + sidebar-mode: false; +} + +@import "~/.config/rofi/arc_dark_transparent_colors.rasi" + +window { + background-color: @background; + border: 0; + padding: 30; +} +listview { + lines: 10; + columns: 3; +} +mainbox { + border: 0; + padding: 0; +} +message { + border: 2px 0px 0px ; + border-color: @separatorcolor; + padding: 1px ; +} +textbox { + text-color: @foreground; +} +listview { + fixed-height: 0; + border: 8px 0px 0px ; + border-color: @separatorcolor; + spacing: 8px ; + scrollbar: false; + padding: 2px 0px 0px ; +} +element { + border: 0; + padding: 1px ; +} +element-text { + background-color: inherit; + text-color: inherit; +} +element.normal.normal { + background-color: @normal-background; + text-color: @normal-foreground; +} +element.normal.urgent { + background-color: @urgent-background; + text-color: @urgent-foreground; +} +element.normal.active { + background-color: @active-background; + text-color: @active-foreground; +} +element.selected.normal { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; +} +element.selected.urgent { + background-color: @selected-urgent-background; + text-color: @selected-urgent-foreground; +} +element.selected.active { + background-color: @selected-active-background; + text-color: @selected-active-foreground; +} +element.alternate.normal { + background-color: @alternate-normal-background; + text-color: @alternate-normal-foreground; +} +element.alternate.urgent { + background-color: @alternate-urgent-background; + text-color: @alternate-urgent-foreground; +} +element.alternate.active { + background-color: @alternate-active-background; + text-color: @alternate-active-foreground; +} +scrollbar { + width: 4px ; + border: 0; + handle-color: @normal-foreground; + handle-width: 8px ; + padding: 0; +} +mode-switcher { + border: 2px 0px 0px ; + border-color: @separatorcolor; +} +button { + spacing: 0; + text-color: @normal-foreground; +} +button.selected { + background-color: @selected-normal-background; + text-color: @selected-normal-foreground; +} +inputbar { + spacing: 0; + text-color: @normal-foreground; + padding: 1px ; +} +case-indicator { + spacing: 0; + text-color: @normal-foreground; +} +entry { + spacing: 0; + text-color: @normal-foreground; +} +prompt { + spacing: 0; + text-color: @normal-foreground; +} +inputbar { + children: [ prompt,textbox-prompt-colon,entry,case-indicator ]; +} +textbox-prompt-colon { + expand: false; + str: ":"; + margin: 0px 0.3em 0em 0em ; + text-color: @normal-foreground; +} \ No newline at end of file diff --git a/general/configs/terminator/config b/general/configs/terminator/config new file mode 100755 index 0000000..6a401a1 --- /dev/null +++ b/general/configs/terminator/config @@ -0,0 +1,21 @@ +[global_config] +[keybindings] +[profiles] + [[default]] + background_darkness = 0.9 + background_type = transparent + font = Source Code Pro 10 + foreground_color = "#cc5c00" + custom_command = fish + use_system_font = False + title_transmit_fg_color = "#000000" + title_transmit_bg_color = "#cc5c00" +[layouts] + [[default]] + [[[window0]]] + type = Window + parent = "" + [[[child1]]] + type = Terminal + parent = window0 +[plugins] diff --git a/general/configs/wlogout/default-style.css b/general/configs/wlogout/default-style.css new file mode 100644 index 0000000..56a3578 --- /dev/null +++ b/general/configs/wlogout/default-style.css @@ -0,0 +1,60 @@ +window { + font-family: monospace; + font-size: 14pt; + color: #ffffff; /* text */ + background-color: rgba(1, 9, 36, 0.5); +} + +button { + background-repeat: no-repeat; + background-position: center; + background-size: 25%; + border: none; + background-color: rgba(30, 30, 46, 0); + margin: 5px; + transition: box-shadow 0.2s ease-in-out, background-color 0.2s ease-in-out; +} + +button:hover { + background-color: rgba(0, 94, 31, 0.2); +} + +button:focus { + background-color: rgba(0, 94, 31, 1); + color: #1e1e2e; +} + +#lock { + background-image: image(url("./lock.png")); +} +#lock:focus { + background-image: image(url("./lock-hover.png")); +} + +#logout { + background-image: image(url("./logout.png")); +} +#logout:focus { + background-image: image(url("./logout-hover.png")); +} + +#suspend { + background-image: image(url("./sleep.png")); +} +#suspend:focus { + background-image: image(url("./sleep-hover.png")); +} + +#shutdown { + background-image: image(url("./power.png")); +} +#shutdown:focus { + background-image: image(url("./power-hover.png")); +} + +#reboot { + background-image: image(url("./restart.png")); +} +#reboot:focus { + background-image: image(url("./restart-hover.png")); +} diff --git a/general/configs/wlogout/layout b/general/configs/wlogout/layout new file mode 100755 index 0000000..86b2184 --- /dev/null +++ b/general/configs/wlogout/layout @@ -0,0 +1,30 @@ +{ + "label" : "lock", + "action" : "hyprlock", + "text" : "Lock", + "keybind" : "l" +} +{ + "label" : "reboot", + "action" : "systemctl reboot", + "text" : "Reboot", + "keybind" : "r" +} +{ + "label" : "shutdown", + "action" : "systemctl poweroff", + "text" : "Shutdown", + "keybind" : "s" +} +{ + "label" : "logout", + "action" : "hyprctl dispatch exit 0", + "text" : "Logout", + "keybind" : "e" +} +{ + "label" : "suspend", + "action" : "systemctl suspend", + "text" : "Suspend", + "keybind" : "u" +} diff --git a/general/configs/wlogout/lock-hover.png b/general/configs/wlogout/lock-hover.png new file mode 100755 index 0000000000000000000000000000000000000000..8fb86fe4421996ac31b81124dd628f74478672bb GIT binary patch literal 5771 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 Z=BpAK;a9M7S`-ulERi;5wI&`n{|3+(eklL| literal 0 HcmV?d00001 diff --git a/general/configs/wlogout/lock.png b/general/configs/wlogout/lock.png new file mode 100755 index 0000000000000000000000000000000000000000..430451c8df14dd98eac8bc6fd4a9aea3b6a1d8df GIT binary patch literal 5771 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 z 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 literal 0 HcmV?d00001 diff --git a/general/configs/wlogout/logout.png b/general/configs/wlogout/logout.png new file mode 100755 index 0000000000000000000000000000000000000000..128c9955b46dcd12fcbb3df8c9d989d1adca1fb7 GIT binary patch literal 3784 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 ALjV8( literal 0 HcmV?d00001 diff --git a/general/configs/wlogout/mclaren-style.css b/general/configs/wlogout/mclaren-style.css new file mode 100644 index 0000000..e69de29 diff --git a/general/configs/wlogout/power-hover.png b/general/configs/wlogout/power-hover.png new file mode 100755 index 0000000000000000000000000000000000000000..122d3318ec07cff6a5b2883830d7003491ea9ecf GIT binary patch literal 10841 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 d6L~C&U+kZxR&qr-LCKQx#otWy|u8Qq#y)A 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 TnM0Cb5oBX&Z&73Bef9qU&dpfM literal 0 HcmV?d00001 diff --git a/general/configs/wlogout/restart-hover.png b/general/configs/wlogout/restart-hover.png new file mode 100755 index 0000000000000000000000000000000000000000..3e1853601ef6d61e2d49593f56d4b92d2280453b GIT binary patch literal 7810 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%0D^TMR7k8sOQ9pF4k+?e){3PqY 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 literal 0 HcmV?d00001 diff --git a/general/configs/wlogout/sleep-hover.png b/general/configs/wlogout/sleep-hover.png new file mode 100755 index 0000000000000000000000000000000000000000..0fd3badea33fadee1245b528bc04defa9510649d GIT binary patch literal 5721 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 literal 0 HcmV?d00001 diff --git a/general/configs/wlogout/style.css b/general/configs/wlogout/style.css new file mode 100755 index 0000000..48b3a11 --- /dev/null +++ b/general/configs/wlogout/style.css @@ -0,0 +1,60 @@ +window { + font-family: monospace; + font-size: 14pt; + color: #ffffff; /* text */ + background-color: rgba(0, 0, 0, 0.6); +} + +button { + background-repeat: no-repeat; + background-position: center; + background-size: 25%; + border: none; + background-color: rgba(30, 30, 46, 0); + margin: 5px; + transition: box-shadow 0.2s ease-in-out, background-color 0.2s ease-in-out; +} + +button:hover { + background-color: rgba(204, 92, 0, 0.3); +} + +button:focus { + background-color: #cc5c00; + color: #1e1e2e; +} + +#lock { + background-image: image(url("./lock.png")); +} +#lock:focus { + background-image: image(url("./lock-hover.png")); +} + +#logout { + background-image: image(url("./logout.png")); +} +#logout:focus { + background-image: image(url("./logout-hover.png")); +} + +#suspend { + background-image: image(url("./sleep.png")); +} +#suspend:focus { + background-image: image(url("./sleep-hover.png")); +} + +#shutdown { + background-image: image(url("./power.png")); +} +#shutdown:focus { + background-image: image(url("./power-hover.png")); +} + +#reboot { + background-image: image(url("./restart.png")); +} +#reboot:focus { + background-image: image(url("./restart-hover.png")); +} diff --git a/general/configs/yazi/flavors/tokyo-night.yazi/LICENSE b/general/configs/yazi/flavors/tokyo-night.yazi/LICENSE new file mode 100644 index 0000000..9a5124e --- /dev/null +++ b/general/configs/yazi/flavors/tokyo-night.yazi/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 - sxyazi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/general/configs/yazi/flavors/tokyo-night.yazi/LICENSE-tmtheme b/general/configs/yazi/flavors/tokyo-night.yazi/LICENSE-tmtheme new file mode 100644 index 0000000..44b4479 --- /dev/null +++ b/general/configs/yazi/flavors/tokyo-night.yazi/LICENSE-tmtheme @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Himanshu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/general/configs/yazi/flavors/tokyo-night.yazi/README.md b/general/configs/yazi/flavors/tokyo-night.yazi/README.md new file mode 100644 index 0000000..ec2a2e6 --- /dev/null +++ b/general/configs/yazi/flavors/tokyo-night.yazi/README.md @@ -0,0 +1,37 @@ +
+ Yazi logo +
+ +

+ Tokyo Night Flavor for Yazi +

+ +## 👀 Preview + + + +## 🎨 Installation + +```bash +# Linux/macOS +git clone https://github.com/BennyOe/tokyo-night.yazi.git ~/.config/yazi/flavors/tokyo-night.yazi + +# Windows +git clone https://github.com/BennyOe/tokyo-night.yazi.git %AppData%\yazi\config\flavors\tokyo-night.yazi +``` + +## ⚙️ Usage + +Add the these lines to your `theme.toml` configuration file to use it: + + +```toml +[flavor] +use = "tokyo-night" +``` + +## 📜 License + +The flavor is MIT-licensed, and the included tmTheme is also MIT-licensed. + +Check the [LICENSE](LICENSE) and [LICENSE-tmtheme](LICENSE-tmtheme) file for more details. diff --git a/general/configs/yazi/flavors/tokyo-night.yazi/flavor.toml b/general/configs/yazi/flavors/tokyo-night.yazi/flavor.toml new file mode 100644 index 0000000..c6d3303 --- /dev/null +++ b/general/configs/yazi/flavors/tokyo-night.yazi/flavor.toml @@ -0,0 +1,167 @@ +# : Manager {{{ + +[manager] +cwd = { fg = "#7aa2f7" } # Blue + +# Hovered +hovered = { reversed = true } +preview_hovered = { underline = true } + +# Find +find_keyword = { fg = "#f7768e", bold = true, italic = true, underline = true } # Red +find_position = { fg = "#bb9af7", bg = "reset", bold = true, italic = true } # Magenta + +# Marker +marker_copied = { fg = "#9ece6a", bg = "#9ece6a" } # Green +marker_cut = { fg = "#e0af68", bg = "#f7768e" } # Red +marker_marked = { fg = "#7aa2f7", bg = "#7dcfff" } # Cyan +marker_selected = { fg = "#e0af68", bg = "#e0af68" } # Yellow + +# Tab +tab_active = { bg = "#282C34", fg = "#7aa2f7" } # Darkened background, Blue text +tab_inactive = {} +tab_width = 1 + +# Count +count_copied = { fg = "#414868", bg = "#9ece6a" } # Darkened black on Green +count_cut = { fg = "#414868", bg = "#e0af68" } # Darkened black on Yellow +count_selected = { fg = "#414868", bg = "#7aa2f7" } # Darkened black on Blue + +# Border +border_symbol = "│" +border_style = { fg = "#414868" } # Darkened black + +# : }}} + + +# : Status {{{ + +[status] +separator_open = "" +separator_close = "" +separator_style = { fg = "#7aa2f7", bg = "#414868" } # Blue on Darkened black + +# Mode +mode_normal = { fg = "#414868", bg = "#7aa2f7", bold = true } # Darkened black on Blue +mode_select = { fg = "#414868", bg = "#9ece6a", bold = true } # Darkened black on Green +mode_unset = { fg = "#414868", bg = "#bb9af7", bold = true } # Darkened black on Magenta + +# Progress +progress_label = { fg = "#a9b1d6", bold = true } # White +progress_normal = { fg = "#7aa2f7", bg = "#414868" } # Blue on Darkened black +progress_error = { fg = "#f7768e", bg = "#414868" } # Red on Darkened black + +# Permissions +permissions_t = { fg = "#7aa2f7" } # Blue +permissions_r = { fg = "#9ece6a" } # Green +permissions_w = { fg = "#e0af68" } # Yellow +permissions_x = { fg = "#f7768e" } # Red +permissions_s = { fg = "#bb9af7" } # Magenta + +# : }}} + + +# : Select {{{ + +[select] +border = { fg = "#7aa2f7" } # Blue +active = { fg = "#bb9af7", bold = true } # Magenta +inactive = {} + +# : }}} + + +# : Input {{{ + +[input] +border = { fg = "#7aa2f7" } # Blue +title = {} +value = {} +selected = { reversed = true } + +# : }}} + + +# : Completion {{{ + +[completion] +border = { fg = "#7aa2f7" } # Blue + +# : }}} + + +# : Tasks {{{ + +[tasks] +border = { fg = "#7aa2f7" } # Blue +title = {} +hovered = { fg = "#bb9af7", underline = true } # Magenta + +# : }}} +# : Which {{{ + +[which] +mask = { bg = "#414868" } # Darkened black +cand = { fg = "#9ece6a" } # Green +rest = { fg = "#a9b1d6" } # White +desc = { fg = "#bb9af7" } # Magenta +separator = "  " +separator_style = { fg = "#626880" } # Darkened gray + +# : }}} + + +# : Help {{{ + +[help] +on = { fg = "#9ece6a" } # Green +run = { fg = "#bb9af7" } # Magenta +hovered = { reversed = true, bold = true } +footer = { fg = "#a9b1d6", bg = "#c6d0f5" } # White on Light gray + +# : }}} + + +# : Notify {{{ + +[notify] +title_info = { fg = "#9ece6a" } # Green +title_warn = { fg = "#f7768e" } # Red +title_error = { fg = "#e0af68" } # Yellow + +# : }}} + + +# : File-specific styles {{{ + +[filetype] + +rules = [ + # Images + { mime = "image/*", fg = "#e0af68" }, # Yellow + + # Media + { mime = "video/*", fg = "#f7768e" }, # Red + { mime = "audio/*", fg = "#f7768e" }, # Red + + # Archives + { mime = "application/zip", fg = "#bb9af7" }, # Magenta + { mime = "application/x-tar", fg = "#bb9af7" }, # Magenta + { mime = "application/x-bzip*", fg = "#bb9af7" }, # Magenta + { mime = "application/x-bzip2", fg = "#bb9af7" }, # Magenta + { mime = "application/x-7z-compressed", fg = "#bb9af7" }, # Magenta + { mime = "application/x-rar", fg = "#bb9af7" }, # Magenta + { mime = "application/x-xz", fg = "#bb9af7" }, # Magenta + + # Documents + { mime = "application/doc", fg = "#9ece6a" }, # Green + { mime = "application/pdf", fg = "#9ece6a" }, # Green + { mime = "application/rtf", fg = "#9ece6a" }, # Green + { mime = "application/vnd.*", fg = "#9ece6a" }, # Green + + # Fallback + { name = "*", fg = "#c6d0f5" }, # Light gray + { name = "*/", fg = "#7aa2f7" } # Blue +] + +# : }}} diff --git a/general/configs/yazi/flavors/tokyo-night.yazi/preview.png b/general/configs/yazi/flavors/tokyo-night.yazi/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..75f2f4a907ac813801548ee752de8fbd388303d6 GIT binary patch literal 729541 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
  • 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�j~6i2CpPX#E;K0jgHw+n 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 )8~$8-9MqhieZR{OcD6cLt(zWz{G1U%ht3 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%0AMVuPQg)Bvh$+xm#$qk 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%0A1MZ*ut+zyOUB#T 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 + + + + author + Kristi Russell (http://github.com/enkia) + colorSpaceName + sRGB + name + Enki-Tokyo-Night + semanticClass + enki.theme.tokyo + settings + + + settings + + activeGuide + #363b54 + background + #1d1f29 + caret + #DBC08A + findHighlight + #ffa300 + findHighlightForeground + #000000 + foreground + #AFBAD4ff + guide + #4f4f5e40 + gutterForeground + #3b415caa + inactiveSelection + #282833 + invisibles + #4f4f5e + lineHighlight + #00000030 + phantomCss + <![CDATA[ html { position: relative; } ]]> + popupCss + <![CDATA[ html { color: #B376B3; background-color: #2b2d3a; padding: 10px; } a { color: #6189BB; line-height: 1.2; text-decoration: none; } .error, .deleted { color: #50B4DC; } .success, .inserted { color: #9DBA72; } .warning, .modified { color: #ffa300; } ]]> + selection + #9D599D40 + selectionBorder + #9D599D + shadow + #00000010 + stackGuide + #4f4f5e60 + tagsOptions + underline + + + + name + Italics - Comments, Storage, Keyword Flow, Vue attributes, Decorators + scope + comment, meta.var.expr storage.type, keyword.control.flow, meta.directive.vue punctuation.separator.key-value.html, meta.directive.vue entity.other.attribute-name.html, tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js, storage.modifier + settings + + fontStyle + italic + + + + name + Comment + scope + comment, comment.block.documentation, punctuation.definition.comment + settings + + foreground + #444b6a + + + + name + Comment Doc + scope + comment.block.documentation variable, comment.block.documentation storage, comment.block.documentation punctuation, comment.block.documentation keyword, comment.block.documentation support, comment.block.documentation markup, comment.block.documentation markup.inline.raw.string.markdown, keyword.other.phpdoc.php + settings + + foreground + #7982a9 + + + + name + Number, Boolean, Undefined, Null + scope + variable.other.constant, punctuation.definition.constant, constant.language, constant.numeric, support.constant + settings + + foreground + #ff9e64 + + + + name + String, Symbols, Markup Heading + scope + string, constant.other.symbol, constant.other.key, markup.heading, meta.attribute-selector + settings + + fontStyle + + foreground + #9ece6a + + + + name + Colors + scope + constant.other.color, constant.other.color.rgb-value.hex punctuation.definition.constant + settings + + foreground + #9aa5ce + + + + name + Invalid + scope + invalid, invalid.illegal + settings + + foreground + #ff5370 + + + + name + Invalid deprecated + scope + invalid.deprecated + settings + + foreground + #bb9af7 + + + + name + Storage Type + scope + storage.type + settings + + foreground + #bb9af7 + + + + name + Storage - modifier, var, const, let + scope + meta.var.expr storage.type, storage.modifier + settings + + foreground + #9d7cd8 + + + + name + Interpolation + scope + punctuation.definition.template-expression, punctuation.section.embedded + settings + + foreground + #7dcfff + + + + name + Spread + scope + keyword.operator.spread, keyword.operator.rest + settings + + fontStyle + bold + foreground + #f7768e + + + + name + Operator, Misc + scope + keyword.operator, keyword.control.as, keyword.other, keyword.operator.bitwise.shift, punctuation, punctuation.definition.constant.markdown, punctuation.definition.string, punctuation.support.type.property-name, text.html.vue-html meta.tag, punctuation.definition.keyword, punctuation.terminator.rule, punctuation.definition.entity, punctuation.definition.tag, punctuation.separator.inheritance.php, punctuation.definition.tag.html, keyword.other.template, keyword.other.substitution, entity.name.operator, text.html.vue meta.tag.block.any.html, text.html.vue meta.tag.inline.any.html, text.html.vue meta.tag.other.html, text.html.twig meta.tag.inline.any.html, text.html.twig meta.tag.block.any.html, text.html.twig meta.tag.structure.any.html, text.html.twig meta.tag.any.html + settings + + foreground + #89ddff + + + + name + Import, Export, From, Default + scope + keyword.control.import, keyword.control.export, keyword.control.from, keyword.control.default, meta.import keyword.other + settings + + foreground + #7dcfff + + + + name + Keyword + scope + keyword, keyword.control, keyword.other.important + settings + + foreground + #bb9af7 + + + + name + Keyword SQL + scope + keyword.other.DML + settings + + foreground + #7dcfff + + + + name + Keyword Operator Logical, Arrow, Ternary, Comparison + scope + keyword.operator.logical, storage.type.function, keyword.operator.bitwise, keyword.operator.ternary, keyword.operator.comparison, keyword.operator.relational, keyword.operator.or.regexp + settings + + foreground + #bb9af7 + + + + name + Tag + scope + entity.name.tag, entity.name.tag support.class.component, meta.tag + settings + + foreground + #f7768e + + + + name + Tag Punctuation + scope + punctuation.definition.tag, punctuation.definition.tag.html, punctuation.definition.tag.begin.html, punctuation.definition.tag.end.html + settings + + foreground + #ba3c97 + + + + name + Blade + scope + keyword.blade, entity.name.function.blade + settings + + foreground + #7aa2f7 + + + + name + PHP - Embedded Tag + scope + punctuation.section.embedded.begin.php, punctuation.section.embedded.end.php + settings + + foreground + #0db9d7 + + + + name + Smarty - Twig tag - Blade + scope + punctuation.definition.variable.smarty, punctuation.section.embedded.begin.smarty, punctuation.section.embedded.end.smarty, meta.tag.template.value.twig, punctuation.section.tag.twig, meta.tag.expression.twig, punctuation.definition.tag.expression.twig, punctuation.definition.tag.output.twig, variable.parameter.smarty + settings + + foreground + #7DCFFF + + + + name + Smarty - Twig variable - function + scope + variable.other.property.twig, support.function.twig, meta.function-call.twig, keyword.control.twig, keyword.control.smarty, keyword.operator.other.twig, keyword.operator.comparison.twig, support.function.functions.twig, support.function.functions.twig, keyword.operator.assignment.twig, support.function.filters.twig, support.function.built-in.smarty, keyword.operator.smarty, text.blade text.html.blade custom.compiler.blade.php punctuation.section.embedded.php entity.name.tag.block.any.html, text.blade text.html.blade custom.compiler.blade.php punctuation.section.embedded.php constant.other.inline-data.html, text.blade text.html.blade custom.compiler.blade.php support.function constant.other.inline-data.html + settings + + foreground + #0db9d7 + + + + name + Globals - PHP Constants etc + scope + constant.other.php, variable.other.global.safer, variable.other.global.safer punctuation.definition.variable, variable.other.global, variable.other.global punctuation.definition.variable, constant.other + settings + + foreground + #e0af68 + + + + name + Variables + scope + variable, support.variable, string constant.other.placeholder + settings + + foreground + #c0caf5 + + + + name + Object Variable + scope + variable.other.object, support.module.node + settings + + foreground + #c0caf5 + + + + name + Object Key + scope + meta.object-literal.key, meta.group.braces.curly constant.other.object.key.js string.unquoted.label.js, string.alias.graphql, string.unquoted.graphql, string.unquoted.alias.graphql, meta.field.declaration.ts variable.object.property + settings + + foreground + #73daca + + + + name + Object Property + scope + variable.other.property, support.variable.property, support.variable.property.dom, meta.function-call variable.other.object.property, variable.language.prototype, meta.property.object, variable.other.member + settings + + foreground + #7dcfff + + + + name + Object Property + scope + variable.other.object.property + settings + + foreground + #c0caf5 + + + + name + Object Literal Member lvl 3 (Vue Prop Validation) + scope + meta.objectliteral meta.object.member meta.objectliteral meta.object.member meta.objectliteral meta.object.member meta.object-literal.key + settings + + foreground + #41a6b5 + + + + name + C-related Block Level Variables + scope + source.cpp meta.block variable.other + settings + + foreground + #f7768e + + + + name + Other Variable + scope + support.other.variable + settings + + foreground + #f7768e + + + + name + Methods + scope + meta.class-method.js entity.name.function.js, entity.name.method.js, variable.function.constructor, keyword.other.special-method, storage.type.cs + settings + + foreground + #7aa2f7 + + + + name + Function Definition + scope + entity.name.function, meta.function-call, meta.function-call entity.name.function, variable.function, meta.definition.method entity.name.function, meta.object-literal entity.name.function + settings + + foreground + #7aa2f7 + + + + name + Function Argument + scope + variable.parameter.function.language.special, variable.parameter, meta.function.parameters punctuation.definition.variable, meta.function.parameter variable + settings + + foreground + #e0af68 + + + + name + Constant, Tag Attribute + scope + keyword.other.type.php, storage.type.php, constant.character, constant.escape, keyword.other.unit + settings + + foreground + #bb9af7 + + + + name + Variable Definition + scope + meta.definition.variable variable.other.constant, meta.definition.variable variable.other.readwrite, variable.other.declaration + settings + + foreground + #bb9af7 + + + + name + Inherited Class + scope + entity.other.inherited-class + settings + + fontStyle + + foreground + #bb9af7 + + + + name + Class, Support, DOM, etc + scope + support.class, support.type, variable.other.readwrite.alias, support.orther.namespace.use.php, meta.use.php, support.other.namespace.php, support.type.sys-types, support.variable.dom, support.constant.math, support.type.object.module, support.constant.json, entity.name.namespace, meta.import.qualifier, entity.name.class + settings + + foreground + #0db9d7 + + + + name + Class Name + scope + entity.name + settings + + foreground + #c0caf5 + + + + name + Support Function + scope + support.function + settings + + foreground + #0db9d7 + + + + name + CSS Class and Support + scope + source.css support.type.property-name, source.sass support.type.property-name, source.scss support.type.property-name, source.less support.type.property-name, source.stylus support.type.property-name, source.postcss support.type.property-name, support.type.property-name.css, support.type.vendored.property-name, support.type.map.key + settings + + foreground + #7aa2f7 + + + + name + CSS Font + scope + support.constant.font-name, meta.definition.variable + settings + + foreground + #9ece6a + + + + name + CSS Class + scope + entity.other.attribute-name.class, meta.at-rule.mixin.scss entity.name.function.scss + settings + + foreground + #9ece6a + + + + name + CSS ID + scope + entity.other.attribute-name.id + settings + + foreground + #fc7b7b + + + + name + CSS Tag + scope + entity.name.tag.css, entity.name.tag.reference, entity.name.tag.scss + settings + + foreground + #0db9d7 + + + + name + CSS Tag Reference + scope + entity.name.tag.reference + settings + + foreground + #e0af68 + + + + name + CSS Property Separator + scope + meta.property-list punctuation.separator.key-value + settings + + foreground + #9abdf5 + + + + name + CSS Punctuation + scope + meta.property-list, punctuation.definition.entity.css + settings + + foreground + #e0af68 + + + + name + SCSS @ + scope + meta.at-rule.mixin keyword.control.at-rule.mixin, meta.at-rule.include entity.name.function.scss, meta.at-rule.include keyword.control.at-rule.include + settings + + foreground + #bb9af7 + + + + name + SCSS Mixins, Extends, Include Keyword + scope + keyword.control.at-rule.include punctuation.definition.keyword, keyword.control.at-rule.mixin punctuation.definition.keyword, meta.at-rule.include keyword.control.at-rule.include, keyword.control.at-rule.extend punctuation.definition.keyword, meta.at-rule.extend keyword.control.at-rule.extend, entity.other.attribute-name.placeholder.css punctuation.definition.entity.css, meta.at-rule.media keyword.control.at-rule.media, meta.at-rule.mixin keyword.control.at-rule.mixin, meta.at-rule.function keyword.control.at-rule.function, keyword.control punctuation.definition.keyword, meta.at-rule.import.scss entity.other.attribute-name.placeholder.scss punctuation.definition.entity.scss, meta.at-rule.import.scss keyword.control.at-rule.import.scss + settings + + foreground + #9d7cd8 + + + + name + SCSS Include Mixin Argument + scope + meta.property-list meta.at-rule.include + settings + + foreground + #c0caf5 + + + + name + CSS value + scope + support.constant.property-value + settings + + foreground + #ff9e64 + + + + name + Sub-methods + scope + entity.name.module.js, variable.import.parameter.js, variable.other.class.js + settings + + foreground + #c0caf5 + + + + name + Language methods + scope + variable.language + settings + + foreground + #f7768e + + + + name + Variable punctuation + scope + variable.other punctuation.definition.variable + settings + + foreground + #c0caf5 + + + + name + Keyword this with Punctuation, ES7 Bind Operator + scope + source.js constant.other.object.key.js string.unquoted.label.js, variable.language.this punctuation.definition.variable, keyword.other.this + settings + + foreground + #f7768e + + + + name + HTML Attributes + scope + entity.other.attribute-name, text.html.basic entity.other.attribute-name.html, text.html.basic entity.other.attribute-name, text.blade entity.other.attribute-name.class, text.html.smarty entity.other.attribute-name.class + settings + + foreground + #bb9af7 + + + + name + Vue Template attributes + scope + meta.directive.vue punctuation.separator.key-value.html, meta.directive.vue entity.other.attribute-name.html + settings + + foreground + #bb9af7 + + + + name + Vue Template attribute separator + scope + meta.directive.vue punctuation.separator.key-value.html + settings + + foreground + #89ddff + + + + name + CSS IDs + scope + source.sass keyword.control + settings + + foreground + #7aa2f7 + + + + name + CSS psuedo selectors + scope + entity.other.attribute-name.pseudo-class, entity.other.attribute-name.pseudo-element, entity.other.attribute-name.placeholder, meta.property-list meta.property-value + settings + + foreground + #bb9af7 + + + + name + Inserted + scope + markup.inserted + settings + + foreground + #449dab + + + + name + Deleted + scope + markup.deleted + settings + + foreground + #914c54 + + + + name + Changed + scope + markup.changed + settings + + foreground + #6183bb + + + + name + Regular Expressions + scope + string.regexp + settings + + foreground + #b4f9f8 + + + + name + Regular Expressions - Punctuation + scope + punctuation.definition.group + settings + + foreground + #f7768e + + + + name + Regular Expressions - Character Class + scope + constant.other.character-class.regexp + settings + + foreground + #bb9af7 + + + + name + Regular Expressions - Character Class Set + scope + constant.other.character-class.set.regexp, punctuation.definition.character-class.regexp + settings + + foreground + #e0af68 + + + + name + Regular Expressions - Quantifier + scope + keyword.operator.quantifier.regexp + settings + + foreground + #89ddff + + + + name + Regular Expressions - Backslash + scope + constant.character.escape.backslash + settings + + foreground + #c0caf5 + + + + name + Escape Characters + scope + constant.character.escape + settings + + foreground + #89ddff + + + + name + Decorators + scope + tag.decorator.js entity.name.tag.js, tag.decorator.js punctuation.definition.tag.js + settings + + foreground + #7aa2f7 + + + + name + CSS Units + scope + keyword.other.unit + settings + + foreground + #f7768e + + + + name + JSON Key - Level 0 + scope + source.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #7aa2f7 + + + + name + JSON Key - Level 1 + scope + source.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #0db9d7 + + + + name + JSON Key - Level 2 + scope + source.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #7dcfff + + + + name + JSON Key - Level 3 + scope + source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #bb9af7 + + + + name + JSON Key - Level 4 + scope + source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #e0af68 + + + + name + JSON Key - Level 5 + scope + source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #0db9d7 + + + + name + JSON Key - Level 6 + scope + source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json string.quoted.double.json + settings + + foreground + #73daca + + + + name + JSON Key - Level 7 + scope + source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json + settings + + foreground + #f7768e + + + + name + JSON Key - Level 8 + scope + source.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.value.json meta.sequence.json meta.mapping.key.json string.quoted.double.json punctuation.definition.string.end.json + settings + + foreground + #9ece6a + + + + name + JSON Key - value + scope + source.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json, source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.array.json meta.structure.dictionary.json meta.structure.dictionary.value.json string.quoted.double.json + settings + + foreground + #9ece6a + + + + name + Plain Punctuation + scope + punctuation.definition.list_item.markdown + settings + + foreground + #9abdf5 + + + + name + Block Punctuation + scope + meta.block, meta.brace, punctuation.definition.block, punctuation.definition.use, punctuation.definition.group.shell, punctuation.definition.class, punctuation.definition.begin.bracket, punctuation.definition.end.bracket, punctuation.definition.parameters, punctuation.definition.arguments, punctuation.definition.dictionary, punctuation.definition.array, punctuation.section + settings + + foreground + #9abdf5 + + + + name + Markdown - Plain + scope + meta.jsx.children, meta.embedded.block + settings + + foreground + #c0caf5 + + + + name + HTML text + scope + text.html + settings + + foreground + #9aa5ce + + + + name + Markdown - Markup Raw Inline + scope + text.html.markdown markup.inline.raw.markdown + settings + + foreground + #bb9af7 + + + + name + Markdown - Markup Raw Inline Punctuation + scope + text.html.markdown markup.inline.raw.markdown punctuation.definition.raw.markdown + settings + + foreground + #4E5579 + + + + name + Markdown - Heading 1 + scope + heading.1.markdown entity.name, heading.1.markdown punctuation.definition.heading.markdown + settings + + fontStyle + bold + foreground + #89ddff + + + + name + Markdown - Heading 2 + scope + heading.2.markdown entity.name, heading.2.markdown punctuation.definition.heading.markdown + settings + + fontStyle + bold + foreground + #61bdf2 + + + + name + Markdown - Heading 3 + scope + heading.3.markdown entity.name, heading.3.markdown punctuation.definition.heading.markdown + settings + + fontStyle + bold + foreground + #7aa2f7 + + + + name + Markdown - Heading 4 + scope + heading.4.markdown entity.name, heading.4.markdown punctuation.definition.heading.markdown + settings + + fontStyle + bold + foreground + #6d91de + + + + name + Markdown - Heading 5 + scope + heading.5.markdown entity.name, heading.5.markdown punctuation.definition.heading.markdown + settings + + fontStyle + bold + foreground + #9aa5ce + + + + name + Markdown - Heading 6 + scope + heading.6.markdown entity.name, heading.6.markdown punctuation.definition.heading.markdown + settings + + fontStyle + bold + foreground + #747ca1 + + + + name + Markup - Italic + scope + markup.italic, markup.italic punctuation + settings + + fontStyle + italic + foreground + #c0caf5 + + + + name + Markup - Bold + scope + markup.bold, markup.bold punctuation + settings + + fontStyle + bold + foreground + #c0caf5 + + + + name + Markup - Bold-Italic + scope + markup.bold markup.italic, markup.bold markup.italic punctuation + settings + + fontStyle + bold italic + foreground + #c0caf5 + + + + name + Markup - Underline + scope + markup.underline, markup.underline punctuation + settings + + fontStyle + underline + + + + name + Markdown - Blockquote + scope + markup.quote punctuation.definition.blockquote.markdown + settings + + foreground + #4e5579 + + + + name + Markup - Quote + scope + markup.quote + settings + + fontStyle + italic + + + + name + Markdown - Link + scope + string.other.link, markup.underline.link, constant.other.reference.link.markdown, string.other.link.description.title.markdown + settings + + foreground + #73daca + + + + name + Markdown - Fenced Code Block + scope + markup.fenced_code.block.markdown, markup.inline.raw.string.markdown, variable.language.fenced.markdown + settings + + foreground + #89ddff + + + + name + Markdown - Separator + scope + meta.separator + settings + + fontStyle + bold + foreground + #444b6a + + + + name + Markup - Table + scope + markup.table + settings + + foreground + #c0cefc + + + + name + Token - Info + scope + token.info-token + settings + + foreground + #0db9d7 + + + + name + Token - Warn + scope + token.warn-token + settings + + foreground + #ffdb69 + + + + name + Token - Error + scope + token.error-token + settings + + foreground + #db4b4b + + + + name + Token - Debug + scope + token.debug-token + settings + + foreground + #b267e6 + + + + name + Apache Tag + scope + entity.tag.apacheconf + settings + + foreground + #f7768e + + + + name + Preprocessor + scope + meta.preprocessor + settings + + foreground + #73daca + + + + name + ENV value + scope + source.env + settings + + foreground + #7aa2f7 + + + + uuid + 06f855e3-9fb7-4fb1-b790-aef06065f34e + + diff --git a/general/configs/yazi/theme.toml b/general/configs/yazi/theme.toml new file mode 100644 index 0000000..a1460bf --- /dev/null +++ b/general/configs/yazi/theme.toml @@ -0,0 +1,2 @@ +[flavor] +use = "tokyo-night" diff --git a/general/docker/daemon.json b/general/docker/daemon.json new file mode 100644 index 0000000..581de36 --- /dev/null +++ b/general/docker/daemon.json @@ -0,0 +1,3 @@ +{ + "data-root": "/mnt/storage/docker" +} diff --git a/general/hyprland/binds.conf b/general/hyprland/binds.conf new file mode 100644 index 0000000..30ac1f9 --- /dev/null +++ b/general/hyprland/binds.conf @@ -0,0 +1,140 @@ +#----------# +# KEYBINDS # +#----------# +$mainMod = SUPER +# These key-binds are non-specific, laptop config has a separate file that includes +# extra config for it specifically +bind = $mainMod, Q, killactive +bind = $mainMod SHIFT, Q, exit +bind = $mainMod, Return, exec, kitty +bind = $mainMod, C, killactive, +# bind = $mainMod, E, exec, thunar +bind = $mainMod SHIFT, E, exec, thunar +bind = $mainMod, E, exec, kitty --hold fish -c "y" +bind = $mainMod, V, togglefloating, +bind = $mainMod, F, fullscreen, + +# Launch commands +bind = $mainMod SHIFT, L, exec, librewolf +bind = $mainMod SHIFT, D, exec, vesktop +bind = $mainMod SHIFT, V, exec, vscodium +bind = $mainMod SHIFT, T, exec, thunderbird +bind = $mainMod SHIFT, H, exec, heroic +bind = $mainMod SHIFT, I, exec, notify-send 'AirPlay video server starting...' && terminator -e "systemctl start avahi-daemon && sleep 5 && uxplay -n LinuxVideoPlay -nh" +bind = $mainMod SHIFT, A, exec, notify-send 'AirPlay server starting...' && terminator -T "hidden-terminator" -e "systemctl start avahi-daemon && shairport-sync -a LinuxPlay" +bind = $mainMod SHIFT, G, exec, notify-send 'Preparing system for gaming...' && corectrl +bind = $mainMod SHIFT, P, exec, notify-send 'Steam is launching...' && steam +bind = $mainMod SHIFT, R, exec, notify-send 'Launching in Remoteplay optimised session' && steam -pipewire +bind = $mainMod CTRL, K, exec, notify-send 'Insta-Kill activated' && hyprctl kill +bind = $mainMod SHIFT, O, exec, terminator -e "~/projects/dotfiles/ai.sh" + +# Screenshots +bind = $mainMod SHIFT, S, exec, grimblast --notify copy area +bind = $mainMod CTRL, S, exec, grimblast --notify copysave area +bind = $mainMod ALT, S, exec, grimblast --notify save area +bind = , PRINT, exec, grimblast --notify copy screen +bind = CTRL, PRINT, exec, grimblast --notify copysave screen +bind = SHIFT, PRINT, exec, grimblast --notify save screen + +# Rofi commands +bind = $mainMod, Space, exec, killall rofi || rofi -show combi -modes combi -combi-modes "window,drun,run" +bind = $mainMod SHIFT, Space, exec, rofi -modi "Global Search":"~/.config/rofi/spotlight/rofi-spotlight.sh" -show "Global Search" -config ~/.config/rofi/spotlight/rofi.rasi +bind = $mainMod, P, exec, killall rofi || rofi -show p -modi p:rofi-power-menu -theme ~/.config/rofi/themes/power.rasi + +# Logout commands +bind = $mainMod, escape, exec, wlogout +bind = $mainMod ALT CTRL, L, exec, hyprlock --immediate + + +#--------------# +# Layout binds # +#--------------# + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Same with vim-motions +bind = $mainMod, h, movefocus, l +bind = $mainMod, l, movefocus, r +bind = $mainMod, j, movefocus, d +bind = $mainMod, k, movefocus, u + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 +bind = $mainMod ALT, left, workspace, e-1 +bind = $mainMod ALT, right, workspace, e+1 +bind = $mainMod ALT, h, workspace, e-1 +bind = $mainMod ALT, l, workspace, e+1 + + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 +bind = $mainMod SHIFT, left, movetoworkspace, e-1 +bind = $mainMod SHIFT, right, movetoworkspace, e+1 +bind = $mainMod SHIFT, j, movetoworkspace, e-1 +bind = $mainMod SHIFT, k, movetoworkspace, e+1 + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Tile window to a part of the screen +bind = $mainMod CTRL, left, movewindow, left +bind = $mainMod CTRL, right, movewindow, right + +# move to next window / previous window with ALT + Tab / SHIFT + ALT + Tab +bind = ALT SHIFT, tab, cyclenext, prev +# bind = ALT, tab, cyclenext, next +# bind = ALT CTRL, tab, focusurgentorlast +bind = ALT, tab, focusurgentorlast + +# Master layout commands +bind = $mainMod CTRL, M, layoutmsg, swapwithmaster +bind = $mainMod SHIFT, A, layoutmsg, addmaster +bind = $mainMod SHIFT CTRL, right, layoutmsg, orientationnext +bind = $mainMod SHIFT CTRL, left, layoutmsg, orientationprev + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + + +# Freeze +bind = $mainMod SHIFT, escape, exec, hyprfreeze -a + + +# Volume control +bind = ,code:123, exec, pamixer -i 5 +bind = ,code:122, exec, pamixer -d 5 +bind = ,code:121, exec, pamixer -t + + +# Brightness-Control +bind = ,code:232, exec, light -U 5 && notify-send 'Display brightness decreased by 5%' +bind = ,code:233, exec, light -A 5 && notify-send 'Display brightness increased by 5%' + + +# Monitor config binds +bind = $mainMod CTRL, D, exec, hyprctl keyword monitor HDMI-A-1, 1280x720@60, 1920x0, 1, mirror, DP-1 && notify-send 'Set FPV goggles to mirror main screen' +bind = $mainMod CTRL, E, exec, hyprctl keyword monitor HDMI-A-1, 1280x720@60, 3840x0, 1 && notify-send 'Set to expand FPV goggles' diff --git a/general/hyprland/general.conf b/general/hyprland/general.conf new file mode 100644 index 0000000..c3edb5e --- /dev/null +++ b/general/hyprland/general.conf @@ -0,0 +1,122 @@ +#-----------------------# +# LAUNCHING OF PROGRAMS # +#-----------------------# +exec-once = dunst --startup_notification +exec-once = ~/.config/hypr/xdg-portal-hyprland +exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XAUTHORITY DISPLAY +exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 +exec-once = waybar +exec-once = hypridle + +exec-once = nm-applet +exec-once = nextcloud --background + + +exec = hyprctl setcursor oreo_spark_blue_cursors 24 +env = QT_QPA_PLATFORM,wayland +env = QT_QPA_PLATFORM_THEME,qt6ct +env = OLLAMA_HOST,0.0.0.0 + +#-------# +# INPUT # +#-------# +input { + kb_layout = ch + natural_scroll = true + + numlock_by_default = true + + follow_mouse = 2 + mouse_refocus = true + + touchpad { + disable_while_typing = true + natural_scroll = true + } + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = true + workspace_swipe_distance = 300 +} + + +#----------------# +# GENERAL CONFIG # +#----------------# +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 3 + gaps_out = 10 + border_size = 1 + col.active_border = rgba(cc5c00ff) rgba(cc5c00ff) rgba(ff0000ff) 45deg + col.inactive_border = rgba(595959aa) + + layout = master + no_border_on_floating = false +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + inactive_opacity = 1 + rounding = 10 + + shadow { + enabled = true + range = 4 + color = rgba(1a1a1aee) + } + + blur { + enabled = true + xray = true + new_optimizations = true + size = 1 + passes = 2 + } + dim_inactive = true + dim_strength = 0.1 +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +misc { + disable_hyprland_logo = true + disable_splash_rendering = false + vrr = 2 + allow_session_lock_restore = true +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more +# no_gaps_when_only = true +} + + +cursor { + no_warps = false + inactive_timeout = 60 +} diff --git a/general/hyprland/windowrules.conf b/general/hyprland/windowrules.conf new file mode 100644 index 0000000..34fd193 --- /dev/null +++ b/general/hyprland/windowrules.conf @@ -0,0 +1,108 @@ +#-----------------# +# WORKSPACE RULES # +#-----------------# +# Display full sized (without gaps), if only window on screen +workspace = w[tv1], gapsout:0, gapsin:0 +workspace = f[1], gapsout:0, gapsin:0 +windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1] +windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1] +windowrulev2 = bordersize 0, floating:0, onworkspace:f[1] +windowrulev2 = rounding 0, floating:0, onworkspace:f[1] + +$mainMod = SUPER + +#--------------# +# WINDOW RULES # +#--------------# +windowrule = float, title:.*(rofi).* +windowrulev2 = animation popin, title:.*(rofi).* +windowrulev2 = center, title:(rofi)(.*) + +windowrulev2 = move 1450 50, title:^(.*)(Power menu)$ +windowrule = workspace 2, evince +windowrulev2 = workspace 2, title:.*(Okular).* +windowrulev2 = fullscreen, title:wlogout +windowrule = workspace 2, librewolf +windowrulev2 = workspace 2, title:LibreWolf +windowrulev2 = workspace 2, title:(.*)(Discord)(.*) +windowrulev2 = workspace 3, title:^(Steam)(.*)$ +windowrulev2 = workspace 1, title:^(.*)(VSCodium)$ +windowrulev2 = center, title:^(.*)(VSCodium)$ +windowrule = workspace 3, minecraft-launcher +windowrule = tile, minecraft-launcher +windowrulev2 = fullscreen, title:^(.*)(Minecraft)(.*)$ +windowrulev2 = workspace 3, title:^(.*)(Minecraft)(.*)$ + +windowrulev2 = workspace 1, title:^(.*)hidden-terminator*(.*)$ +windowrulev2 = size 0 0, title:^(.*)hidden-terminator*(.*)$ +windowrulev2 = move 0 0, title:^(.*)hidden-terminator*(.*)$ +windowrulev2 = float, title:^(.*)hidden-terminator*(.*)$ + +# Set floating windows & position them centered +windowrule = float, file_progress +windowrule = center, file_progress + +windowrule = float, confirm +windowrule = center, confirm + +windowrule = float, dialog +windowrule = center, dialog + +windowrule = float, download +windowrule = center, download + +windowrule = float, notification +windowrule = center, notification + +windowrule = float, error +windowrule = center, error + +windowrule = float, splash +windowrule = center, splash + +windowrule = float, confirmreset +windowrule = center, confirmreset + +windowrulev2 = float, title:Open File +windowrulev2 = center, title:Open File + +windowrulev2 = float, title:branchdialog +windowrulev2 = center, title:branchdialog + +windowrule = float, Lxappearance +windowrule = center, Lxappearance + +windowrulev2 = float, title:^(Media viewer)$ +windowrulev2 = center, title:^(Media viewer)$ + +windowrulev2 = float, title:^(Volume Control)$ +windowrulev2 = center, title:^(Volume Control)$ + +windowrulev2 = float, title:^(Picture-in-Picture)$ +windowrulev2 = center, title:^(Picture-in-Picture)$ + +windowrulev2 = float, title:^(File Operation Progress)$ +windowrulev2 = center, title:^(File Operation Progress)$ + +windowrulev2 = float, title:^(Loading)(.*)$ +windowrulev2 = center, title:^(Loading)(.*)$ + +windowrule = float, pavucontrol-qt +windowrule = center, pavucontrol-qt + +windowrule = float, pavucontrol +windowrule = center, pavucontrol + +windowrule = float, file-roller +windowrule = center, file-roller + +windowrulev2 = idleinhibit focus, title:^(Rocket League)(.*)$ +windowrulev2 = fullscreen, title:^(Steam Big Picture)$ +windowrule = idleinhibit always, steam +windowrule = idleinhibit always, lutris +windowrule = idleinhibit focus, vlc +windowrule = idleinhibit focus, supertuxkart +windowrulev2 = idleinhibit fullscreen, title:^(.*)(Discord)(.*)$ +windowrulev2 = idleinhibit fullscreen, title:^(.*)(~)(.*)$ +windowrulev2 = idleinhibit focus, title:^(.*)(~)(.*)$ +windowrulev2 = idleinhibit focus, title:^(.*)(LibreWolf)(.*)$ diff --git a/general/mkinitcpio.conf b/general/mkinitcpio.conf new file mode 100644 index 0000000..2fd80a4 --- /dev/null +++ b/general/mkinitcpio.conf @@ -0,0 +1,73 @@ +# vim:set ft=sh +# MODULES +# The following modules are loaded before any boot hooks are +# run. Advanced users may wish to specify all system modules +# in this array. For instance: +# MODULES=(usbhid xhci_hcd) +MODULES=() + +# BINARIES +# This setting includes any additional binaries a given user may +# wish into the CPIO image. This is run last, so it may be used to +# override the actual binaries included by a given hook +# BINARIES are dependency parsed, so you may safely ignore libraries +BINARIES=() + +# FILES +# This setting is similar to BINARIES above, however, files are added +# as-is and are not parsed in any way. This is useful for config files. +FILES=() + +# HOOKS +# This is the most important setting in this file. The HOOKS control the +# modules and scripts added to the image, and what happens at boot time. +# Order is important, and it is recommended that you do not change the +# order in which HOOKS are added. Run 'mkinitcpio -H ' for +# help on a given hook. +# 'base' is _required_ unless you know precisely what you are doing. +# 'udev' is _required_ in order to automatically load modules +# 'filesystems' is _required_ unless you specify your fs modules in MODULES +# Examples: +## This setup specifies all modules in the MODULES setting above. +## No RAID, lvm2, or encrypted root is needed. +# HOOKS=(base) +# +## This setup will autodetect all modules for your system and should +## work as a sane default +# HOOKS=(base udev autodetect modconf block filesystems fsck) +# +## This setup will generate a 'full' image which supports most systems. +## No autodetection is done. +# HOOKS=(base udev modconf block filesystems fsck) +# +## This setup assembles a mdadm array with an encrypted root file system. +## Note: See 'mkinitcpio -H mdadm_udev' for more information on RAID devices. +# HOOKS=(base udev modconf keyboard keymap consolefont block mdadm_udev encrypt filesystems fsck) +# +## This setup loads an lvm2 volume group. +# HOOKS=(base udev modconf block lvm2 filesystems fsck) +# +## NOTE: If you have /usr on a separate partition, you MUST include the +# usr and fsck hooks. +HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block filesystems fsck plymouth) + +# COMPRESSION +# Use this to compress the initramfs image. By default, zstd compression +# is used. Use 'cat' to create an uncompressed image. +#COMPRESSION="zstd" +#COMPRESSION="gzip" +#COMPRESSION="bzip2" +#COMPRESSION="lzma" +#COMPRESSION="xz" +#COMPRESSION="lzop" +#COMPRESSION="lz4" + +# COMPRESSION_OPTIONS +# Additional options for the compressor +#COMPRESSION_OPTIONS=() + +# MODULES_DECOMPRESS +# Decompress kernel modules during initramfs creation. +# Enable to speedup boot process, disable to save RAM +# during early userspace. Switch (yes/no). +#MODULES_DECOMPRESS="yes" diff --git a/general/pacman.conf b/general/pacman.conf new file mode 100644 index 0000000..7d7c2fd --- /dev/null +++ b/general/pacman.conf @@ -0,0 +1,100 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = auto +ILoveCandy +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +Color +#NoProgressBar +CheckSpace +#VerbosePkgLists +ParallelDownloads = 5 + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +#[extra-testing] +#Include = /etc/pacman.d/mirrorlist + +# If you want to run 32 bit applications on your x86_64 system, +# enable the multilib repositories as required here. + +#[multilib-testing] +#Include = /etc/pacman.d/mirrorlist + +[multilib] +Include = /etc/pacman.d/mirrorlist + +[arch4edu] +Server = https://de.arch4edu.mirror.kescher.at/$arch + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/general/vscode-extensions b/general/vscode-extensions new file mode 100644 index 0000000..d61326c --- /dev/null +++ b/general/vscode-extensions @@ -0,0 +1,49 @@ +aaron-bond.better-comments +abusaidm.html-snippets +bmewburn.vscode-intelephense-client +bungcip.better-toml +dbaeumer.vscode-eslint +dlasagno.rasi +donjayamanne.jquerysnippets +ecmel.vscode-html-css +equinusocio.vsc-community-material-theme +equinusocio.vsc-material-theme +equinusocio.vsc-material-theme-icons +eww-yuck.yuck +fivethree.vscode-hugo-snippets +formulahendry.auto-rename-tag +gitlab.gitlab-workflow +golang.go +hollowtree.vue-snippets +ionic.ionic +james-yu.latex-workshop +lllllllqw.jsdoc +mads-hartmann.bash-ide-vscode +mathematic.vscode-latex +mathiasfrohlich.kotlin +mechatroner.rainbow-csv +ms-python.debugpy +ms-python.python +ms-vscode.cpptools +nadim-vscode.html-meta-tags-hero +nilssoderman.sitemap-generator +pwabuilder.pwa-studio +quicktype.quicktype +redhat.java +redhat.vscode-xml +rust-lang.rust-analyzer +sbsnippets.pytorch-snippets +spences10.robots-txt +streetsidesoftware.code-spell-checker +streetsidesoftware.code-spell-checker-german +svelte.svelte-vscode +tecosaur.latex-utilities +valentjn.vscode-ltex +vitest.explorer +vscjava.vscode-java-debug +vscjava.vscode-java-test +vscodevim.vim +vue.volar +wayou.vscode-todo-highlight +xdebug.php-debug +yinfei.luahelper diff --git a/install-new.sh b/install-new.sh new file mode 100644 index 0000000..3dea5af --- /dev/null +++ b/install-new.sh @@ -0,0 +1,58 @@ +echo "Welcome!" + +currentDir=pwd + +sudo pacman-key --recv-keys 7931B6D628C8D3BA +sudo pacman-key --finger 7931B6D628C8D3BA +sudo pacman-key --lsign-key 7931B6D628C8D3BA + +curl -O https://mirrors.tuna.tsinghua.edu.cn/arch4edu/any/arch4edu-keyring-20200805-1-any.pkg.tar.zst +pacman -U arch4edu-keyring-20200805-1-any.pkg.tar.zst + +echo " + +Installed arch4edu keyring, running reflector to update pacman mirrorlist... + +" +sudo pacman -Syu base-devel git reflector +sudo reflector -c 'Switzerland, Germany' --sort 'rate' --protocol https --latest 10 --save /etc/pacman.d/mirrorlist + +echo " + +Mirrorlist created, installing yay + +" + +cd /tmp +git clone https://aur.archlinux.org/yay.git +cd yay && makepkg -si + +echo " + +yay installed, updating & installing + +" + +yay -Syu + +# Hyprland +yay -S hyprland hypridle hyprfreeze hyprlock plymouth dunst rofi wlogout waybar xdg-desktop-portal-hyprland pipewire pipewire-alsa pipewire-pulse pipewire-jack mesa thunar yazi wireplumber grimblast wl-clipboard wget ttf-fantasque-nerd ttf-jetbrains-mono-nerd ttf-fluentui-system-icons ttf-comfortaa + +# Core +yay -S fish adobe-source-code-pro-fonts gnome-font-viewer gnome-characters gnome-tweaks lxappearance kvantum gnome-keyring smartmontools ffmpeg polkit-gnome swaybg network-manager-applet polkit-kde-agent cpupower-gui + +# Programming +yay -S meld docker vscodium kitty fish docker terminator ghex nodejs npm python-pip git-credential-manager-core-bin wine kate rustup cargo filezilla typescript-language-server php jdk vscode-css-languageserver vscode-html-languageserver bash-language-server +sudo npm i -g @vue/typescript-plugin + +# nvim +yay -S neovim lua lua-language-server tree-sitter texlab stylua luarocks jdtls perl julia autojump pyright + +# Internet +yay -S librewolf-bin webcord-bin thunderbird rustdesk brave-bin + +# Utilities +yay -S okular vlc nextcloud-client p7zip zip unzip gnome-keyring noto-fonts thunderbird pamixer pavucontrol light neofetch bashtop hugo sddm uxplay upower + +# LaTeX +yay -S texlive biber diff --git a/install-part-two.sh b/install-part-two.sh new file mode 100644 index 0000000..53cc98b --- /dev/null +++ b/install-part-two.sh @@ -0,0 +1,30 @@ +echo "Welcome!" + +file="/home/janis/projects/dotfiles/pc/vscode-extensions" +while read line; do + vscodium --install-extension "${line}" +done < "${file}" + +echo "\n==> VSCode Extensions installed\n" + +cp -r ./pc/.config/* ~/.config +cp ./pc/.bashrc ~/.bashrc +cp ./pc/.bash_history ~/.bash_history + +sudo cp ./pc/mkinitcpio.conf /etc/mkinitcpio.conf +sudo cp ./pc/environment /etc/environment +sudo cp ./pc/grub /etc/default/grub +sudo plymouth-set-default-theme -R bgrt + +sudo mkinitcpio -P + +cd /tmp +git clone https://github.com/rtlewis1/GTK +cd GTK/ +git checkout Material-Black-Colors-Desktop +sudo cp -r ./Material-Black-Blueberry /usr/share/themes + +cd /tmp +git clone https://github.com/sandesh236/monterey-grub-theme +cd monterey-grub-theme/ +sudo ./install.sh diff --git a/laptop/.bashrc b/laptop/.bashrc new file mode 100755 index 0000000..95b0a32 --- /dev/null +++ b/laptop/.bashrc @@ -0,0 +1,359 @@ +# +# ~/.bashrc +# + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +export PATH="/home/janis/.local/share/gem/ruby/3.0.0/bin: $PATH" +export PATH="/home/janis/.local/bin: $PATH" +alias editHyprlandConf='nano ~/.config/hypr/hyprland.conf' +alias ls='ls -l --color=auto' +alias ll='ls -la --color=auto' +alias sl='ls --color=auto' +alias start-httpd='sudo systemctl start httpd' +PS1='[\u@\h \W]\$ ' + +################################################################################ +## FUNCTIONS ## +################################################################################ + +## +## ARRANGE $PWD AND STORE IT IN $NEW_PWD +## * The home directory (HOME) is replaced with a ~ +## * The last pwdmaxlen characters of the PWD are displayed +## * Leading partial directory names are striped off +## /home/me/stuff -> ~/stuff (if USER=me) +## /usr/share/big_dir_name -> ../share/big_dir_name (if pwdmaxlen=20) +## +## Original source: WOLFMAN'S color bash promt +## https://wiki.chakralinux.org/index.php?title=Color_Bash_Prompt#Wolfman.27s +## +bash_prompt_command() { + # How many characters of the $PWD should be kept + local pwdmaxlen=25 + + # Indicate that there has been dir truncation + local trunc_symbol=".." + + # Store local dir + local dir=${PWD##*/} + + # Which length to use + pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen )) + + NEW_PWD=${PWD/#$HOME/\~} + + local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen )) + + # Generate name + if [ ${pwdoffset} -gt "0" ] + then + NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen} + NEW_PWD=${trunc_symbol}/${NEW_PWD#*/} + fi +} + + + + +## +## GENERATE A FORMAT SEQUENCE +## +format_font() +{ + ## FIRST ARGUMENT TO RETURN FORMAT STRING + local output=$1 + + + case $# in + 2) + eval $output="'\[\033[0;${2}m\]'" + ;; + 3) + eval $output="'\[\033[0;${2};${3}m\]'" + ;; + 4) + eval $output="'\[\033[0;${2};${3};${4}m\]'" + ;; + *) + eval $output="'\[\033[0m\]'" + ;; + esac +} + + + +## +## COLORIZE BASH PROMT +## +bash_prompt() { + + ############################################################################ + ## COLOR CODES ## + ## These can be used in the configuration below ## + ############################################################################ + + ## FONT EFFECT + local NONE='0' + local BOLD='1' + local DIM='2' + local UNDERLINE='4' + local BLINK='5' + local INVERT='7' + local HIDDEN='8' + + + ## COLORS + local DEFAULT='9' + local BLACK='0' + local RED='1' + local GREEN='2' + local YELLOW='3' + local BLUE='4' + local MAGENTA='5' + local CYAN='6' + local L_GRAY='7' + local D_GRAY='60' + local L_RED='61' + local L_GREEN='62' + local L_YELLOW='63' + local L_BLUE='64' + local L_MAGENTA='65' + local L_CYAN='66' + local WHITE='67' + + + ## TYPE + local RESET='0' + local EFFECT='0' + local COLOR='30' + local BG='40' + + + ## 256 COLOR CODES + local NO_FORMAT="\[\033[0m\]" + local ORANGE_BOLD="\[\033[1;38;5;208m\]" + local TOXIC_GREEN_BOLD="\[\033[1;38;5;118m\]" + local RED_BOLD="\[\033[1;38;5;1m\]" + local CYAN_BOLD="\[\033[1;38;5;87m\]" + local BLACK_BOLD="\[\033[1;38;5;0m\]" + local WHITE_BOLD="\[\033[1;38;5;15m\]" + local GRAY_BOLD="\[\033[1;90m\]" + local BLUE_BOLD="\[\033[1;38;5;74m\]" + + + + + + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + + ## CONFIGURE HERE ## + + + + ############################################################################ + ## CONFIGURATION ## + ## Choose your color combination here ## + ############################################################################ + local FONT_COLOR_1=$WHITE + local BACKGROUND_1=$RED + local TEXTEFFECT_1=$BOLD + + local FONT_COLOR_2=$WHITE + local BACKGROUND_2=$YELLOW + local TEXTEFFECT_2=$BOLD + + local FONT_COLOR_3=$D_GRAY + local BACKGROUND_3=$WHITE + local TEXTEFFECT_3=$BOLD + + local PROMT_FORMAT=$BLUE_BOLD + + + ############################################################################ + ## EXAMPLE CONFIGURATIONS ## + ## I use them for different hosts. Test them out ;) ## + ############################################################################ + + ## CONFIGURATION: BLUE-WHITE + if [ "$HOSTNAME" = dell ]; then + FONT_COLOR_1=$WHITE; BACKGROUND_1=$BLUE; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$L_BLUE; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$D_GRAY; BACKGROUND_3=$WHITE; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$CYAN_BOLD + fi + + ## CONFIGURATION: BLACK-RED + if [ "$HOSTNAME" = giraff6 ]; then + FONT_COLOR_1=$WHITE; BACKGROUND_1=$BLACK; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$D_GRAY; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$WHITE; BACKGROUND_3=$RED; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$RED_BOLD + fi + + ## CONFIGURATION: RED-BLACK + #FONT_COLOR_1=$WHITE; BACKGROUND_1=$RED; TEXTEFFECT_1=$BOLD + #FONT_COLOR_2=$WHITE; BACKGROUND_2=$D_GRAY; TEXTEFFECT_2=$BOLD + #FONT_COLOR_3=$WHITE; BACKGROUND_3=$BLACK; TEXTEFFECT_3=$BOLD + #PROMT_FORMAT=$RED_BOLD + + ## CONFIGURATION: CYAN-BLUE + if [ "$HOSTNAME" = sharkoon ]; then + FONT_COLOR_1=$BLACK; BACKGROUND_1=$L_CYAN; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$L_BLUE; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$WHITE; BACKGROUND_3=$BLUE; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$CYAN_BOLD + fi + + ## CONFIGURATION: GRAY-SCALE + if [ "$HOSTNAME" = giraff ]; then + FONT_COLOR_1=$WHITE; BACKGROUND_1=$BLACK; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$D_GRAY; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$WHITE; BACKGROUND_3=$L_GRAY; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$BLACK_BOLD + fi + + ## CONFIGURATION: GRAY-CYAN + if [ "$HOSTNAME" = light ]; then + FONT_COLOR_1=$WHITE; BACKGROUND_1=$BLACK; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$D_GRAY; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$BLACK; BACKGROUND_3=$L_CYAN; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$CYAN_BOLD + fi + + + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + + + ############################################################################ + ## TEXT FORMATING ## + ## Generate the text formating according to configuration ## + ############################################################################ + + ## CONVERT CODES: add offset + FC1=$(($FONT_COLOR_1+$COLOR)) + BG1=$(($BACKGROUND_1+$BG)) + FE1=$(($TEXTEFFECT_1+$EFFECT)) + + FC2=$(($FONT_COLOR_2+$COLOR)) + BG2=$(($BACKGROUND_2+$BG)) + FE2=$(($TEXTEFFECT_2+$EFFECT)) + + FC3=$(($FONT_COLOR_3+$COLOR)) + BG3=$(($BACKGROUND_3+$BG)) + FE3=$(($TEXTEFFECT_3+$EFFECT)) + + FC4=$(($FONT_COLOR_4+$COLOR)) + BG4=$(($BACKGROUND_4+$BG)) + FE4=$(($TEXTEFFECT_4+$EFFECT)) + + + ## CALL FORMATING HELPER FUNCTION: effect + font color + BG color + local TEXT_FORMAT_1 + local TEXT_FORMAT_2 + local TEXT_FORMAT_3 + local TEXT_FORMAT_4 + format_font TEXT_FORMAT_1 $FE1 $FC1 $BG1 + format_font TEXT_FORMAT_2 $FE2 $FC2 $BG2 + format_font TEXT_FORMAT_3 $FC3 $FE3 $BG3 + format_font TEXT_FORMAT_4 $FC4 $FE4 $BG4 + + + # GENERATE PROMT SECTIONS + local PROMT_USER=$"$TEXT_FORMAT_1 \u " + local PROMT_HOST=$"$TEXT_FORMAT_2 \h " + local PROMT_PWD=$"$TEXT_FORMAT_3 \${NEW_PWD} " + local PROMT_INPUT=$"$PROMT_FORMAT " + + + ############################################################################ + ## SEPARATOR FORMATING ## + ## Generate the separators between sections ## + ## Uses background colors of the sections ## + ############################################################################ + + ## CONVERT CODES + TSFC1=$(($BACKGROUND_1+$COLOR)) + TSBG1=$(($BACKGROUND_2+$BG)) + + TSFC2=$(($BACKGROUND_2+$COLOR)) + TSBG2=$(($BACKGROUND_3+$BG)) + + TSFC3=$(($BACKGROUND_3+$COLOR)) + TSBG3=$(($DEFAULT+$BG)) + + + ## CALL FORMATING HELPER FUNCTION: effect + font color + BG color + local SEPARATOR_FORMAT_1 + local SEPARATOR_FORMAT_2 + local SEPARATOR_FORMAT_3 + format_font SEPARATOR_FORMAT_1 $TSFC1 $TSBG1 + format_font SEPARATOR_FORMAT_2 $TSFC2 $TSBG2 + format_font SEPARATOR_FORMAT_3 $TSFC3 $TSBG3 + + + # GENERATE SEPARATORS WITH FANCY TRIANGLE + local TRIANGLE=$'\uE0B0' + local SEPARATOR_1=$SEPARATOR_FORMAT_1$TRIANGLE + local SEPARATOR_2=$SEPARATOR_FORMAT_2$TRIANGLE + local SEPARATOR_3=$SEPARATOR_FORMAT_3$TRIANGLE + + + + ############################################################################ + ## WINDOW TITLE ## + ## Prevent messed up terminal-window titles ## + ############################################################################ + case $TERM in + xterm*|rxvt*) + local TITLEBAR='\[\033]0;\u:${NEW_PWD}\007\]' + ;; + *) + local TITLEBAR="" + ;; + esac + + + + ############################################################################ + ## BASH PROMT ## + ## Generate promt and remove format from the rest ## + ############################################################################ + PS1="$TITLEBAR\n${PROMT_USER}${SEPARATOR_1}${PROMT_HOST}${SEPARATOR_2}${PROMT_PWD}${SEPARATOR_3}${PROMT_INPUT}" + + + + ## For terminal line coloring, leaving the rest standard + none="$(tput sgr0)" + trap 'echo -ne "${none}"' DEBUG +} + + + + +################################################################################ +## MAIN ## +################################################################################ + +## Bash provides an environment variable called PROMPT_COMMAND. +## The contents of this variable are executed as a regular Bash command +## just before Bash displays a prompt. +## We want it to call our own command to truncate PWD and store it in NEW_PWD +PROMPT_COMMAND=bash_prompt_command + +## Call bash_promnt only once, then unset it (not needed any more) +## It will set $PS1 with colors and relative to $NEW_PWD, +## which gets updated by $PROMT_COMMAND on behalf of the terminal +bash_prompt +unset bash_prompt + +### EOF ### diff --git a/laptop/configs/hypr/hypridle.conf b/laptop/configs/hypr/hypridle.conf new file mode 100644 index 0000000..c39dccf --- /dev/null +++ b/laptop/configs/hypr/hypridle.conf @@ -0,0 +1,39 @@ +#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░ ░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░ +#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ +#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒ +#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓ +#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ +#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓ +#█ ████ ████ ████ ██████ ████ ██ █ ██ ███ █████████████ ██████ █████ ██ ███ ████ █████ █ +#██████████████ █████ ████████████████████████████████████████████████████████████████████████████████████████████████ ██ + +general { + lock_cmd = hyprlock --immediate + unlock_cmd = loginctl unlock-session + before_sleep_cmd = hyprlock --immediate + after_sleep_cmd = hyprlock --immediate +} + +listener { + timeout = 100 + on-timeout = notify-send "Entering idle state... (200s to screen off)" + on-resume = notify-send "Welcome back!" +} + +listener { + timeout = 200 + on-timeout = notify-send "100s to screen off" && sleep 5 && hyprlock +} + +listener { + timeout = 300 + on-timeout = hyprctl dispatch dpms off + on-resume = hyprctl dispatch dpms on +} + +listener { + timeout = 600 + on-timeout = systemctl suspend + on-resume = hyprctl dispatch dpms on +} \ No newline at end of file diff --git a/laptop/configs/hypr/hyprland-old.conf b/laptop/configs/hypr/hyprland-old.conf new file mode 100644 index 0000000..b5568f4 --- /dev/null +++ b/laptop/configs/hypr/hyprland-old.conf @@ -0,0 +1,349 @@ +#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░ +#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ +#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒ +#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓ +#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓▓ ▓▓ ▓ ▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ +#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓▓ ▓▓ ▓ ▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓ +#█ ████ ████ ████ ██████ ████ ███ █ █ ██ ██ █ ███████████ ██████ █████ ██ ███ ████ █████ █ +#██████████████ █████ ██████████████████████████████████████████████████████████████████████████████████████████████████████ ██ + + + + +#----------# +# MONITORS # +#----------# + +monitor=eDP-1, 2880x1800@60, 0x0, 1.5 +# monitor=,highres highrr, auto, 1 + + +#-----------------------# +# LAUNCHING OF PROGRAMS # +#-----------------------# +exec-once = dunst +# exec-once = wl-clipboard-history -t +exec-once = ~/.config/hypr/xdg-portal-hyprland +exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XAUTHORITY DISPLAY +exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 +exec-once = waybar +exec-once = hypridle + +# exec-once = openrgb --startminimized +# exec-once = polychromatic-tray-applet +# exec-once = blueman-applet +exec-once = nm-applet +exec-once = nextcloud + +exec = swaybg -m fill -i /home/janis/Pictures/arch-bg.png + +exec = hyprctl setcursor oreo_spark_blue_cursors 36 +env = QT_QPA_PLATFORM,wayland +env = QT_QPA_PLATFORM_THEME,qt6ct +# env = GDK_SCALE,2 +# env = GDK_DPI_SCALE,0.75 + +env = HYPRCURSOR_THEME, Oreo_spark_blue_cursor +env = X_CURSOR_THEME, Oreo_spark_blue_cursor +env = XCURSOR_SIZE,24 +# env = ELECTRON_OZONE_PLATFORM_HINT,wayland + +#-------# +# INPUT # +#-------# +input { + kb_layout = ch + natural_scroll = true + + numlock_by_default = true + + follow_mouse = 2 + mouse_refocus = true + + touchpad { + disable_while_typing = true + natural_scroll = true + } + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + + +#----------------# +# GENERAL CONFIG # +#----------------# +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 3 + gaps_out = 10 + border_size = 1 + col.active_border = rgba(2288ffee) rgba(a6f7adff) 45deg + col.inactive_border = rgba(595959aa) + + layout = master + no_border_on_floating = false +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + inactive_opacity = 1 + rounding = 10 + + shadow { + enabled = false + range = 4 + color = rgba(1a1a1aee) + } + + blur { + enabled = false + xray = true + new_optimizations = true + size = 1 + passes = 2 + } + dim_inactive = true + dim_strength = 0.1 +} + +animations { + enabled = yes + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +misc { + disable_hyprland_logo = true + disable_splash_rendering = false + vrr = 2 + vfr = 1 + allow_session_lock_restore = true +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = true + workspace_swipe_distance = 300 +} + +cursor { + no_warps = false + inactive_timeout = 60 +} + +xwayland { + force_zero_scaling = true +} + + +# Display full sized (without gaps), if only window on screen +workspace = w[tv1], gapsout:0, gapsin:0 +workspace = f[1], gapsout:0, gapsin:0 +windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1] +windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1] +windowrulev2 = bordersize 0, floating:0, onworkspace:f[1] +windowrulev2 = rounding 0, floating:0, onworkspace:f[1] + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +# WINDOW RULES +windowrule = float, title:^(.*)(rofi)(.*)$ +# windowrule = size 800 900, title:^(.*)(rofi)(.*)$ +windowrule = animation popin, title:^(.*)(rofi)(.*)$ +windowrule = center, title:^(.*)(rofi)(.*)$ +windowrule = move 1450 50, title:^(.*)(Power menu)$ +windowrule = workspace 2, evince +windowrule = workspace 2, okular +windowrule = fullscreen, title:wlogout +windowrule = workspace 2, title:^(.*)(LibreWolf)(.*)$ +windowrule = workspace 2, title:^(.*)(WebCord)(.*)$ +windowrule = workspace 3, title:^(Steam)(.*)$ +windowrule = workspace 1, title:^(.*)(VSCodium)$ +windowrule = workspace 3, minecraft-launcher +windowrule = tile, minecraft-launcher +windowrule = fullscreen, title:^(.*)Minecraft*(.*)$ +windowrule = workspace 3, title:^(.*)Minecraft*(.*)$ +# Hide terminator +windowrule = float, title:^(.*)hidden-terminator(.*)$ +windowrule = size 0 0, title:^(.*)hidden-terminator(.*)$ +windowrule = move 3000 0, title:^(.*)hidden-terminator(.*)$ +windowrule = workspace 1, title:^(.*)hidden-terminator(.*)$ + +windowrule = float, file_progress +windowrule = float, confirm +windowrule = float, dialog +windowrule = float, download +windowrule = float, notification +windowrule = float, error +windowrule = float, splash +windowrule = float, confirmreset +windowrule = float, title:Open File +windowrule = float, title:branchdialog +windowrule = float, Lxappearance +windowrule = float, title:^(Media viewer)$ +windowrule = float, title:^(Volume Control)$ +windowrule = float, title:^(Picture-in-Picture)$ +windowrule = float, title:^(Loading)(.*)$ +windowrule = float, pavucontrol-qt +windowrule = float, pavucontrol +windowrule = float, file-roller +windowrule = idleinhibit always, ^(Steam)$ +windowrule = idleinhibit focus, ^(Rocket League)(.*)$ +windowrule = fullscreen, ^(Steam Big Picture)$ +windowrule = idleinhibit always, steam +windowrule = idleinhibit always, lutris +windowrule = idleinhibit focus, vlc +windowrule = idleinhibit focus, supertuxkart +windowrule = idleinhibit fullscreen, title:^(.*)(WebCord)(.*)$ +windowrule = idleinhibit fullscreen, title:^(.*)(~)(.*)$ +windowrule = idleinhibit focus, title:^(.*)(~)(.*)$ +windowrule = idleinhibit focus, title:^(.*)(LibreWolf)(.*)$ + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, Q, killactive +bind = $mainMod SHIFT, Q, exit +bind = $mainMod, Return, exec, kitty +# bind = $mainMod, Return, exec, terminator +bind = $mainMod, C, killactive, +bind = $mainMod, E, exec, thunar +bind = $mainMod, V, togglefloating, +bind = $mainMod, F, fullscreen, + +# Launch commands +bind = $mainMod SHIFT, L, exec, librewolf +bind = $mainMod SHIFT, K, exec, librewolf http://localhost:8080/admin && librewolf http://localhost:8081/test/login +bind = $mainMod SHIFT, D, exec, terminator --title "hidden-terminator" -e "GDK_SCALE=2 webcord && exit" +# bind = $mainMod SHIFT, D, exec, webcord +# bind = $mainMod SHIFT, V, exec, terminator --title "hidden-terminator" -e "GDK_SCALE=2 codium && exit" +bind = $mainMod SHIFT, V, exec, codium +bind = $mainMod SHIFT, T, exec, thunderbird +bind = $mainMod SHIFT, M, exec, systemctl start docker && terminator -e "sudo docker run -it --network=host --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size 16G --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /home/janis/projects:/mnt rocm/pytorch:latest" +# bind = $mainMod SHIFT, G, exec, notify-send 'Preparing system for gaming...' && /usr/lib/polkit-kde-authentication-agent-1 && notify-send 'Starting CoreCtrl...' && corectrl +bind = $mainMod SHIFT, G, exec, notify-send 'Preparing system for gaming...' && corectrl +bind = $mainMod SHIFT, P, exec, notify-send 'Steam is launching...' && steam +bind = $mainMod SHIFT, R, exec, notify-send 'START CORECTRL! (Super + Shift + G twice). Launching in Remoteplay optimised session' && steam -pipewire +bind = $mainMod CTRL, K, exec, notify-send 'Insta-Kill activated' && hyprctl kill + +# Screenshots +bind = $mainMod SHIFT, S, exec, grimblast --notify copy area +bind = $mainMod CTRL, S, exec, grimblast --notify copysave area +bind = $mainMod ALT, S, exec, grimblast --notify save area +bind = , PRINT, exec, grimblast --notify copy screen +bind = CTRL, PRINT, exec, grimblast --notify copysave screen +bind = SHIFT, PRINT, exec, grimblast --notify save screen + +# Rofi commands +bind = $mainMod, Space, exec, killall rofi || rofi -show combi -modes combi -combi-modes "window,drun,run" +bind = $mainMod SHIFT, Space, exec, rofi -modi "Global Search":"~/.config/rofi/spotlight/rofi-spotlight.sh" -show "Global Search" -config ~/.config/rofi/spotlight/rofi.rasi +bind = $mainMod, P, exec, killall rofi || rofi -show p -modi p:rofi-power-menu -theme ~/.config/rofi/themes/power.rasi + +# Logout commands +bind = $mainMod, escape, exec, wlogout +bind = $mainMod, L, exec, hyprlock +#bind = $mainMod, L, exec, swaylock --screenshots --clock --indicator --grace 10 --fade-in 2 --effect-blur 10x10 --indicator-radius 200 --ring-color ff0202 --show-failed-attempts --effect-greyscale --effect-vignette 0.6:0.6 + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 +bind = $mainMod ALT, left, workspace, e-1 +bind = $mainMod ALT, right, workspace, e+1 + + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 +bind = $mainMod SHIFT, left, movetoworkspace, e-1 +bind = $mainMod SHIFT, right, movetoworkspace, e+1 + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Tile window to a part of the screen +bind = $mainMod CTRL, left, movewindow, left +bind = $mainMod CTRL, right, movewindow, right + +# move to next window / previous window with ALT + Tab / SHIFT + ALT + Tab +bind = ALT SHIFT, tab, cyclenext, prev +# bind = ALT, tab, cyclenext, next +# bind = ALT CTRL, tab, focusurgentorlast +bind = ALT, tab, focusurgentorlast + +# Master layout commands +bind = $mainMod CTRL, M, layoutmsg, swapwithmaster +bind = $mainMod SHIFT, A, layoutmsg, addmaster +bind = $mainMod SHIFT CTRL, right, layoutmsg, orientationnext +bind = $mainMod SHIFT CTRL, left, layoutmsg, orientationprev + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + + +# Freeze +bind = $mainMod SHIFT, escape, exec, hyprfreeze -a + + +# Volume control +bind = ,code:123, exec, pamixer -i 5 +bind = ,code:122, exec, pamixer -d 5 +bind = ,code:121, exec, pamixer -t + + +# Brightness-Control +bind = ,code:232, exec, light -U 5 && notify-send 'Display brightness decreased by 5%' +bind = ,code:233, exec, light -A 5 && notify-send 'Display brightness increased by 5%' + + +# Monitor config binds +bind = $mainMod CTRL, D, exec, hyprctl keyword monitor HDMI-A-1, 1920x1080@60, 1920x0, 1, mirror, eDP-1 && notify-send 'Set to mirror internal display' +bind = $mainMod CTRL, E, exec, hyprctl keyword monitor HDMI-A-1, 1920x1080@60, 1920x0, 1 && notify-send 'Set to expand external display' + +# Internal display controls +bind = $mainMod ALT, E, exec, hyprctl keyword monitor eDP-1, 2880x1800@60, 0x0, 1.5 && notify-send 'Set to battery optimized display settings' +bind = $mainMod ALT, P, exec, hyprctl keyword monitor eDP-1, preferred, 0x0, 1.5 && notify-send 'Set to performance optimized display settings' diff --git a/laptop/configs/hypr/hyprland.conf b/laptop/configs/hypr/hyprland.conf new file mode 100644 index 0000000..d32c37a --- /dev/null +++ b/laptop/configs/hypr/hyprland.conf @@ -0,0 +1,54 @@ +#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░ +#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ +#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒ +#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓ +#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓▓ ▓▓ ▓ ▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ +#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓▓ ▓▓ ▓ ▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓ +#█ ████ ████ ████ ██████ ████ ███ █ █ ██ ██ █ ███████████ ██████ █████ ██ ███ ████ █████ █ +#██████████████ █████ ██████████████████████████████████████████████████████████████████████████████████████████████████████ ██ + + + + +#----------# +# MONITORS # +#----------# + +monitor=eDP-1, 2880x1800@60, 0x0, 1.5 +# monitor=,highres highrr, auto, 1 + + +exec = swaybg -m fill -i /home/janis/Pictures/arch-bg.png + + +source=./hyprland/binds.conf +source=./hyprland/general.conf +source=./hyprland/windowrules.conf + +#--------# +# LAPTOP # +#--------# +exec = hyprctl setcursor oreo_spark_blue_cursors 36 +env = HYPRCURSOR_THEME, Oreo_spark_blue_cursor +env = X_CURSOR_THEME, Oreo_spark_blue_cursor +env = XCURSOR_SIZE,24 + +# Volume control +bind = ,code:123, exec, pamixer -i 5 +bind = ,code:122, exec, pamixer -d 5 +bind = ,code:121, exec, pamixer -t + + +# Brightness-Control +bind = ,code:232, exec, light -U 5 && notify-send 'Display brightness decreased by 5%' +bind = ,code:233, exec, light -A 5 && notify-send 'Display brightness increased by 5%' + + +# Monitor config binds +bind = $mainMod CTRL, D, exec, hyprctl keyword monitor HDMI-A-1, 1920x1080@60, 1920x0, 1, mirror, eDP-1 && notify-send 'Set to mirror internal display' +bind = $mainMod CTRL, E, exec, hyprctl keyword monitor HDMI-A-1, 1920x1080@60, 1920x0, 1 && notify-send 'Set to expand external display' + +# Internal display controls +bind = $mainMod ALT, E, exec, hyprctl keyword monitor eDP-1, 2880x1800@60, 0x0, 1.5 && notify-send 'Set to battery optimized display settings' +bind = $mainMod ALT, P, exec, hyprctl keyword monitor eDP-1, preferred, 0x0, 1.5 && notify-send 'Set to performance optimized display settings' diff --git a/laptop/configs/hypr/hyprlock.conf b/laptop/configs/hypr/hyprlock.conf new file mode 100644 index 0000000..eb9c47f --- /dev/null +++ b/laptop/configs/hypr/hyprlock.conf @@ -0,0 +1,96 @@ +#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░ +#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ +#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒ ▒▒ ▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒ +#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓ +#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓▓ ▓ ▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ +#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓ +#█ ████ ████ ████ ██████ ████ ████ ████████ █ ██ ██████████ ██████ █████ ██ ███ ████ █████ █ +#██████████████ █████ ███████████████████████████████████████████████████████████████████████████████████████████████████ ██ + + +general { + grace = 15 +} + +# BACKGROUND +background { + monitor = + path = /home/janis/Pictures/arch-bg.png # Or screenshot + + blur_passes = 1 +} + +# PASSWORD INPUT +input-field { + monitor = + size = 300, 40 + outline_thickness = 3 + dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = false + outer_color = rgb(204, 92, 0) + inner_color = rgb(200, 200, 200) + font_color = rgb(10, 10, 10) + fade_on_empty = true + placeholder_text = Input Password... # Text rendered in the input box when it's empty. + hide_input = false + + position = 0, -80 + halign = center + valign = center +} + +label { + monitor = + text = $TIME + color = rgba(200, 200, 200, 1.0) + font_size = 100 + font_family = Source Code Pro + + position = 0, 80 + halign = center + valign = center +} + +label { + monitor = + text = $LAYOUT + color = rgba(200, 200, 200, 1.0) + font_size = 12 + font_family = Source Code Pro + + position = 0, 0 + halign = right + valign = bottom +} + +label { + monitor = + text = $USER + color = rgba(200, 200, 200, 1.0) + font_size = 12 + font_family = Source Code Pro + + position = 0, 0 + halign = left + valign = bottom + shadow_passes = 3 +} + +label { + monitor = + text = Failed attempts: $ATTEMPTS + color = rgba(200, 0, 0, 1.0) + font_size = 12 + font_family = Source Code Pro + + position = 0, 20 + halign = center + valign = bottom + shadow_passes = 3 + shadow_size = 5 + shadow_boost = 3 + shadow_color = rgb(255,255,255) +} + diff --git a/laptop/configs/hypr/wall_4K.png b/laptop/configs/hypr/wall_4K.png new file mode 100755 index 0000000000000000000000000000000000000000..f835a978661c8670b0d74f57fb94fbd7a263ee9e GIT binary patch literal 49045 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 He}DDAM^699 literal 0 HcmV?d00001 diff --git a/laptop/configs/hypr/xdg-portal-hyprland b/laptop/configs/hypr/xdg-portal-hyprland new file mode 100755 index 0000000..61a3648 --- /dev/null +++ b/laptop/configs/hypr/xdg-portal-hyprland @@ -0,0 +1,8 @@ +#!/bin/bash +sleep 1 +killall xdg-desktop-portal-hyprland +killall xdg-desktop-portal-wlr +killall xdg-desktop-portal +/usr/libexec/xdg-desktop-portal-hyprland & +sleep 2 +/usr/lib/xdg-desktop-portal & \ No newline at end of file diff --git a/laptop/configs/waybar/config.jsonc b/laptop/configs/waybar/config.jsonc new file mode 100755 index 0000000..b86e733 --- /dev/null +++ b/laptop/configs/waybar/config.jsonc @@ -0,0 +1,137 @@ +{ + "layer": "top", + "position": "top", + "mod": "dock", + "exclusive": true, + "passthrough": false, + "gtk-layer-shell": true, + "height": 0, + "modules-left": [ + "clock", + "cpu", + "memory", + "battery", + "backlight", + "hyprland/workspaces" + ], + "modules-center": ["hyprland/window"], + "modules-right": [ + "tray", + "network", + "pulseaudio", + "pulseaudio#microphone", + "custom/powerMenu" + ], + "hyprland/window": { + "format": "{}" + }, + "tray": { + "icon-size": 14, + "spacing": 8 + }, + "custom/powerMenu": { + "format": "⏻", + "on-click": "rofi -show p -modi p:rofi-power-menu -theme ~/.config/rofi/themes/power.rasi" + }, + "network": { + "format-disconnected": " Net", + "format-wifi": "{icon} {essid}", + "format-ethernet": " Wired", + "tooltip-format-ethernet": "Ethernet\nInterface: {ifname}\nIP: {ipaddr}\nUp/Down (bps): {bandwidthUpBits}/{bandwidthDownBits}", + "tooltip-format-wifi": "Wi-Fi\nSSID: {essid}\nIP: {ipaddr}\nSignal strength: {signalStrength}%\nUp/Down (bps): {bandwidthUpBits}/{bandwidthDownBits}\nFrequency: {frequency}GHz", + "tooltip-format-disconnected": "Networking\n{ifname} disconnected", + "on-click": "terminator -x nmtui", + "format-icons": ["", "", "", ""] + }, + "battery":{ + "states": { + "95": 100, + "85": 90, + "75": 80, + "65": 70, + "55": 60, + "45": 50, + "35": 40, + "25": 30, + "15": 20, + "5": 10, + "critical": 0, + }, + "format":" {capacity}", + "format-95": " {capacity}", + "format-85": " {capacity}", + "format-75": " {capacity}", + "format-65": " {capacity}", + "format-55": " {capacity}", + "format-45": " {capacity}", + "format-35": " {capacity}", + "format-25": " {capacity}", + "format-15": " {capacity}", + "format-15": " {capacity}", + "format-critical": " {capacity}", + "format-charging":" {capacity}", + "format-plugged": " ", + "format-full": " 100", + "format-empty": " ({capacity}%)", + "tooltip-format":"Battery\nCurrently {timeTo}\nCurrently drawing: {power}W\nBattery status: {capacity}%" + }, + "backlight": { + "stages": { + "high": 50, + "low": 0, + }, + "format": "🌣 {percent}", + "format-high": " {percent}", + "format-low": " {percent}", + "tooltip-format": "Brightness\n🌣 {percent}", + "on-scroll-up": "light -A 1", + "on-scroll-down": "light -U 1" + }, + "clock": { + "format": "{:%a, %d.%m %H:%M:%S}", + "tooltip-format": "Calendar\n{calendar}", + "interval": 1 + }, + "hyprland/workspaces": { + "disable-scroll": true, + "all-outputs": true, + "on-click": "activate", + "format": "{icon}" + }, + "cpu": { + "tooltip-format": "CPU\nTotal: {usage}", + "format": " {usage}", + "interval": 5 + }, + "memory": { + "format": " {percentage}", + "interval": 5 + }, + "pulseaudio": { + "format": "{icon} {volume}", + "tooltip": true, + "format-muted": " Off", + "on-click": "pamixer -t", + "on-scroll-up": "pamixer -i 5", + "on-scroll-down": "pamixer -d 5", + "scroll-step": 5, + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "🏎", + "default": ["", "", ""] + } + }, + "pulseaudio#microphone": { + "format": "{format_source}", + "format-source": " {volume}", + "format-source-muted": " 0", + "on-click": "pamixer --default-source -t", + "on-scroll-up": "pamixer --default-source -i 5", + "on-scroll-down": "pamixer --default-source -d 5", + "scroll-step": 5 + } +} diff --git a/laptop/configs/waybar/scripts/supower.py b/laptop/configs/waybar/scripts/supower.py new file mode 100755 index 0000000..a534143 --- /dev/null +++ b/laptop/configs/waybar/scripts/supower.py @@ -0,0 +1,196 @@ +#!/usr/bin/python +# pylint: disable=missing-module-docstring +import json +import sys +import time +import dbus +import click + +FBOOL = ('no', 'yes') +PROPERTIES = { + 'BatteryLevel': ('unknown', 'none', 'low', 'critical', 'normal', 'high', 'full'), + 'Capacity': None, + 'Energy': None, + 'EnergyEmpty': None, + 'EnergyFull': None, + 'EnergyFullDesign': None, + 'EnergyRate': None, + 'HasHistory': FBOOL, + 'HasStatistics': FBOOL, + 'IconName': None, + 'IsPresent': FBOOL, + 'IsRechargeable': FBOOL, + 'Luminosity': None, + 'Model': None, + 'NativePath': None, + 'Online': FBOOL, + 'Percentage': None, + 'PowerSupply': FBOOL, + 'Serial': None, + 'State': ('unknown', 'charging', 'discharging', 'empty', 'fully charged', + 'pending charge','pending discharge'), + 'Technology': ('unknown', 'lithium ion', 'lithium polymer', 'lithium iron phosphate', + 'lead acid', 'nickel cadmium', 'nickel metal hydride'), + 'Temperature': None, + 'TimeToEmpty': None, + 'TimeToFull': None, + 'Type': ('unknown', 'line-power', 'battery', 'ups', 'monitor', 'mouse', 'keyboard', + 'pda', 'phone', 'media-player', 'tablet', 'computer', 'gaming_input', + 'pen', 'touchpad', 'modem', 'network', 'headset', 'speakers', + 'headphones', 'video', 'other_audio', 'remote_control', 'printer', 'scanner', + 'camera', 'wearable', 'toy', 'bluetooth-generic'), + 'UpdateTime': None, + 'Vendor': None, + 'Voltage': None, + 'WarningLevel': ('unknown', 'none', 'discharging', 'low', 'critical', 'action') +} + + +def get_tooltip(_type): + #TOOLTIP_OTHER=""" luminosity: {Luminosity}""" I don't have a way to test this property + header = ('native-path: {NativePath}' + '\npower supply: {PowerSupply}' + '\nupdated: {UpdateTime}' + '\nhas history: {HasHistory}' + '\nhas statistics: {HasStatistics}') + + body = ('\n{Type}' + '\n warning-level: {WarningLevel}' + '\n icon-name: {IconName}') + + if _type == 'line-power': + body += '\n online: {Online}' + + else: + header += ('\nmodel: {Model}' + '\nserial: {Serial}') + + body += ('\n percentage: {Percentage}%' + '\n present: {IsPresent}') + + if _type == "battery": + header += ('\nvendor: {Vendor}') + body += ('\n state: {State}' + '\n rechargeable: {IsRechargeable}' + '\n energy: {Energy} Wh' + '\n energy-empty: {EnergyEmpty} Wh' + '\n energy-full: {EnergyFull} Wh' + '\n energy-full-design: {EnergyFullDesign} Wh' + '\n energy-rate: {EnergyRate} W' + '\n voltage: {Voltage} V' + '\n capacity: {Capacity}%' + '\n technology: {Technology}' + '\n temperature: {Temperature}' + '\n time-to-empty: {TimeToEmpty}' + '\n time-to-full: {TimeToFull}' + '\n battery-level: {BatteryLevel}') + + return f'{header}{body}' + + +def device_info(bus, device): + """Lookup device properties""" + result = {} + device_proxy = bus.get_object('org.freedesktop.UPower', device) + device_interface = dbus.Interface(device_proxy, 'org.freedesktop.DBus.Properties') + for _property, friendly_name in PROPERTIES.items(): + try: + data = device_interface.Get('org.freedesktop.UPower.Device', _property) + if _property == 'UpdateTime': + result[_property] = time.ctime(data) + else: + result[_property] = friendly_name[data] if friendly_name else data + except (dbus.exceptions.DBusException, IndexError): + result[_property] = 'none' + + return result + + +def get_devices(bus): + """Retrieve list of Upower devices""" + devices_proxy = bus.get_object('org.freedesktop.UPower', '/org/freedesktop/UPower') + devices_interface = dbus.Interface(devices_proxy, 'org.freedesktop.UPower') + devices = devices_interface.EnumerateDevices() + + return devices + + +def get_device(bus, devices, device): + """Retrieve Upower device using path or model""" + + if device in devices: + return device + + for path in devices: + inspect = device_info(bus, path) + if inspect.get('Model') == device: + return path + + raise Exception("Device Not Found") + + +def output_devices(bus, devices): + """Output device list""" + for device in devices: + print(f'{device}\t{device_info(bus, device).get("Model")}') + sys.exit(0) + +def check_device(key, info): + sys.exit(FBOOL.index(info.get(key.replace('{','').replace('}', '')))) + + +@click.command() +@click.option('--list-devices', is_flag=True, help='List devices and models') +@click.option('--check', help='Exists using boolean values for device') +@click.option('--device', '--model', help='Path or Model') +@click.option('--text', show_default=True, default="{Model}") +@click.option('--alt', show_default=True, default="{BatteryLevel}") +@click.option('--tooltip', default=None, help="Similar to upower -i ") +@click.option('--class', '_class', show_default=True, default="{BatteryLevel}") +@click.option('--percentage', show_default=True, default="{Percentage:.0f}") +def main(list_devices, check, device, text, alt, tooltip, _class, percentage): + """ + TEXT can be replaced using one or more {KEY}\n + {BatteryLevel} {Capacity} {Energy} {EnergyEmpty} {EnergyFull} + {EnergyFullDesign} {EnergyRate} {HasHistory} {HasStatistics} + {IconName} {IsPresent} {IsRechargeable} {Luminosity} + {Model} {NativePath} {Online} {Percentage} {PowerSupply} + {Serial} {State} {Technology} {Temperature} {TimeToEmpty} + {TimeToFull} {Type} {UpdateTime} {Vendor} {Voltage} + {WarningLevel} + + Example: supower.py --model 'MX Master 2S' --tooltip '{State}' + supower.py --model '/org/freedesktop/UPower/devices/line_power_AC' --check Online + + """ + exit = 0 + bus = dbus.SystemBus() + devices = get_devices(bus) + + if list_devices: + output_devices(bus, devices) + + try: + device = get_device(bus, devices, device) + info = device_info(bus, device) + if check: + check_device(check, info) + + output = { + "text": text.format(**info), + "alt": alt.format(**info), + "tooltip": (tooltip if tooltip else get_tooltip(info['Type'])).format(**info), + "class": _class.format(**info), + "percentage": float(percentage.format(**info)) + } + except Exception as error: + output = {"text": f'Error {device.split("/")[-1]} {error}', 'tooltip': f'{error}'} + exit = 2 + + print(json.dumps(output)) + sys.exit(exit) + + +if __name__ == "__main__": + # pylint: disable=no-value-for-parameter + main() \ No newline at end of file diff --git a/laptop/configs/waybar/style.css b/laptop/configs/waybar/style.css new file mode 100755 index 0000000..dc5c92d --- /dev/null +++ b/laptop/configs/waybar/style.css @@ -0,0 +1,135 @@ +* { + border: none; + border-radius: 0; + font-family: 'FluentSystemIcons-Regular,Comfortaa', monospace; + font-weight: 600; + font-size: 16px; + min-height: 0; + margin-left: 3px; + margin-right: 3px; +} + +window#waybar { + background: rgba(0, 0, 0, 0); + color: #cdd6f4; +} + +tooltip { + background: #1e1e2e; + border-radius: 10px; + border-width: 2px; + border-style: solid; + border-color: #11111b; +} + +#workspaces button { + padding: 3px; + color: #313244; + margin-right: 5px; +} + +#workspaces button.active { + color: #a6adc8; +} + +#workspaces button.focused { + color: #a6adc8; + background: #eba0ac; + border-radius: 10px; +} + +#workspaces button.urgent { + color: #11111b; + background: #a6e3a1; + border-radius: 10px; +} + +#workspaces button:hover { + background: #11111b; + color: #cdd6f4; + border-radius: 10px; +} + +#workspaces { + background: #1e1e2e; + border-radius: 10px; + margin-left: 10px; + padding-right: 0px; + padding-left: 5px; +} + +#window, +#clock, +#custom-powerMenu, +#pulseaudio, +#memory, +#battery, +#backlight, +#tray, +#network, +#workspaces, +#cpu { + background: #000024; + padding: 2px 12px; + margin: 3px 2px; + margin-top: 9px; + border: 1px solid #181825; + border-radius: 10px; +} + +#tray { + border-radius: 10px; + margin-right: 10px; +} + +#cpu { + margin-right: 0; + border-radius: 10px 0px 0px 10px; + background-color: #222244; +} + +#memory, #battery { + color: #89b4fa; + margin-left: 0; + margin-right: 0; + border-radius: 0px; + background-color: #222244; +} + +#backlight { + color: #89b4fa; + margin-left: 0; + border-radius: 0px 10px 10px 0px; + background-color: #222244; +} + +#battery.critical { + color: orange; +} + +#battery.empty { + color: red; +} + +#window { + border-radius: 10px; + margin-left: 60px; + margin-right: 60px; +} + +#clock { + color: #a6f7ad; + min-width: 145px; +} + +#pulseaudio { + color: #89b4fa; + border-left: 0px; + border-right: 0px; +} + +#pulseaudio.microphone { + color: #a6f7ad; + border-left: 0px; + border-right: 0px; +} diff --git a/laptop/environment b/laptop/environment new file mode 100644 index 0000000..ec041a4 --- /dev/null +++ b/laptop/environment @@ -0,0 +1,13 @@ +# +# This file is parsed by pam_env module +# +# Syntax: simple "KEY=VAL" pairs on separate lines +# + +QT_QPA_PLATFORMTHEME=qt5ct +GCM_CREDENTIAL_STORE=secretservice +VKD3D_CONFIG=dxr11,dxr +RADV_PERFTEST_RT=1 +QT_QPA_PLATFORM=wayland +GTK_THEME=Material-Black-Blueberry +QT_STYLE_OVERRIDE=kvantum diff --git a/laptop/grub b/laptop/grub new file mode 100644 index 0000000..f09a5b8 --- /dev/null +++ b/laptop/grub @@ -0,0 +1,63 @@ +# GRUB boot loader configuration + +GRUB_DEFAULT=0 +GRUB_TIMEOUT=5 +GRUB_DISTRIBUTOR="Arch" +GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet splash" +GRUB_CMDLINE_LINUX="" + +# Preload both GPT and MBR modules so that they are not missed +GRUB_PRELOAD_MODULES="part_gpt part_msdos" + +# Uncomment to enable booting from LUKS encrypted devices +#GRUB_ENABLE_CRYPTODISK=y + +# Set to 'countdown' or 'hidden' to change timeout behavior, +# press ESC key to display menu. +GRUB_TIMEOUT_STYLE=menu + +# Uncomment to use basic console +GRUB_TERMINAL_INPUT=console + +# Uncomment to disable graphical terminal +#GRUB_TERMINAL_OUTPUT=console + +# The resolution used on graphical terminal +# note that you can use only modes which your graphic card supports via VBE +# you can see them in real GRUB with the command `videoinfo' +GRUB_GFXMODE=auto + +# Uncomment to allow the kernel use the same resolution used by grub +GRUB_GFXPAYLOAD_LINUX=keep + +# Uncomment if you want GRUB to pass to the Linux kernel the old parameter +# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx" +#GRUB_DISABLE_LINUX_UUID=true + +# Uncomment to disable generation of recovery mode menu entries +GRUB_DISABLE_RECOVERY=true + +# Uncomment and set to the desired menu colors. Used by normal and wallpaper +# modes only. Entries specified as foreground/background. +#GRUB_COLOR_NORMAL="light-blue/black" +#GRUB_COLOR_HIGHLIGHT="light-cyan/blue" + +# Uncomment one of them for the gfx desired, a image background or a gfxtheme +#GRUB_BACKGROUND="/path/to/wallpaper" + +# Uncomment to get a beep at GRUB start +#GRUB_INIT_TUNE="480 440 1" + +# Uncomment to make GRUB remember the last selection. This requires +# setting 'GRUB_DEFAULT=saved' above. +#GRUB_SAVEDEFAULT=true + +# Uncomment to disable submenus in boot menu +#GRUB_DISABLE_SUBMENU=y + +# Probing for other operating systems is disabled for security reasons. Read +# documentation on GRUB_DISABLE_OS_PROBER, if still want to enable this +# functionality install os-prober and uncomment to detect and include other +# operating systems. +GRUB_DISABLE_OS_PROBER=false +GRUB_THEME="/usr/share/grub/themes/monterey-grub-theme/theme.txt" diff --git a/laptop/installedPackages.txt b/laptop/installedPackages.txt new file mode 100644 index 0000000..241ff14 --- /dev/null +++ b/laptop/installedPackages.txt @@ -0,0 +1,1472 @@ +7zip +a52dec +aalib +abseil-cpp +accounts-qml-module +acl +acpi +adobe-source-code-pro-fonts +adwaita-cursors +adwaita-icon-theme +adwaita-icon-theme-legacy +alsa-card-profiles +alsa-lib +alsa-plugins +alsa-topology-conf +alsa-ucm-conf +aom +appstream +appstream-glib +aquamarine +archlinux-keyring +argon2 +aribb24 +ark +at-spi2-core +atkmm +attica +attr +audit +autoconf +autojump +automake +avahi +babl +baloo +base +base-devel +bash +bash-language-server +bashtop +biber +binutils +bison +blas +blas64-openblas +blueman +bluez +bluez-libs +botan2 +brave-bin +breeze-icons +bridge-utils +brotli +bubblewrap +bzip2 +c-ares +ca-certificates +ca-certificates-mozilla +ca-certificates-utils +cairo +cairomm +cairomm-1.16 +cantarell-fonts +cdparanoia +cfitsio +cheese +chromaprint +clutter +clutter-gst +clutter-gtk +cmake +cmark +cmatrix +cogl +colord +composer +containerd +convertlit +coreutils +cppdap +cpupower-gui +cracklib +cryptsetup +curl +dav1d +db5.3 +dbus +dbus-broker +dbus-broker-units +dbus-glib +dconf +debugedit +default-cursors +desktop-file-utils +device-mapper +diffutils +discount +djvulibre +dnssec-anchors +docker +double-conversion +duktape +dunst +dvisvgm +e2fsprogs +ebook-tools +eclipse-java-bin +editorconfig-core-c +efibootmgr +efivar +electron34 +elementary-icon-theme +enchant +exiv2 +exo +expat +faac +faad2 +fakeroot +fcitx5 +ffcall +ffmpeg +ffmpeg4.4 +fftw +file +filesystem +filezilla +findutils +fish +flac +flex +fluidsynth +fmt +fontconfig +freeglut +freetype2 +frei0r-plugins +fribidi +fuse-common +fuse3 +garcon +gawk +gc +gcc +gcc-libs +gcr +gcr-4 +gd +gdbm +gdk-pixbuf2 +gegl +geoclue +gettext +ghc-libs +ghex +ghostscript +giflib +gimp +girara +git +git-credential-manager-core-bin +gjs +glib-networking +glib2 +glibc +glibmm +glibmm-2.68 +glslang +glu +gmp +gnome-characters +gnome-desktop +gnome-desktop-4 +gnome-desktop-common +gnome-disk-utility +gnome-font-viewer +gnome-keyring +gnome-themes-extra +gnome-tweaks +gnome-video-effects +gnulib-l10n +gnupg +gnutls +go +gobject-introspection +gobject-introspection-runtime +gperftools +gpgme +gpm +graphene +graphite +grep +grim +grimblast-git +groff +grub +gsettings-desktop-schemas +gsettings-system-schemas +gsfonts +gsm +gssdp +gst-libav +gst-plugin-pipewire +gst-plugins-bad +gst-plugins-bad-libs +gst-plugins-base +gst-plugins-base-libs +gst-plugins-good +gstreamer +gtest +gtk-layer-shell +gtk-update-icon-cache +gtk2 +gtk3 +gtk4 +gtkmm-4.0 +gtkmm3 +gtksourceview4 +guile +gupnp +gupnp-igd +gvfs +gwenview +gzip +handbrake +harfbuzz +harfbuzz-icu +haskell-aeson +haskell-aeson-pretty +haskell-ansi-terminal +haskell-ansi-terminal-types +haskell-ansi-wl-pprint +haskell-appar +haskell-asn1-encoding +haskell-asn1-parse +haskell-asn1-types +haskell-assoc +haskell-async +haskell-attoparsec +haskell-attoparsec-aeson +haskell-attoparsec-iso8601 +haskell-auto-update +haskell-base-compat +haskell-base-compat-batteries +haskell-base-orphans +haskell-base-unicode-symbols +haskell-base16-bytestring +haskell-base64-bytestring +haskell-basement +haskell-bifunctors +haskell-bitvec +haskell-blaze-builder +haskell-blaze-html +haskell-blaze-markup +haskell-boring +haskell-bsb-http-chunked +haskell-byteorder +haskell-call-stack +haskell-case-insensitive +haskell-cassava +haskell-cereal +haskell-citeproc +haskell-cmdargs +haskell-colour +haskell-commonmark +haskell-commonmark-extensions +haskell-commonmark-pandoc +haskell-comonad +haskell-conduit +haskell-conduit-extra +haskell-constraints +haskell-contravariant +haskell-cookie +haskell-crypton +haskell-crypton-connection +haskell-crypton-x509 +haskell-crypton-x509-store +haskell-crypton-x509-system +haskell-crypton-x509-validation +haskell-data-array-byte +haskell-data-default +haskell-data-default-class +haskell-data-default-instances-containers +haskell-data-default-instances-dlist +haskell-data-default-instances-old-locale +haskell-data-fix +haskell-dec +haskell-digest +haskell-distributive +haskell-djot +haskell-dlist +haskell-doclayout +haskell-doctemplates +haskell-easy-file +haskell-emojis +haskell-erf +haskell-fast-logger +haskell-file-embed +haskell-foldable1-classes-compat +haskell-generically +haskell-ghc-bignum-orphans +haskell-glob +haskell-gridtables +haskell-haddock-library +haskell-hashable +haskell-hourglass +haskell-hslua +haskell-hslua-aeson +haskell-hslua-classes +haskell-hslua-core +haskell-hslua-list +haskell-hslua-marshalling +haskell-hslua-module-doclayout +haskell-hslua-module-path +haskell-hslua-module-system +haskell-hslua-module-text +haskell-hslua-module-version +haskell-hslua-module-zip +haskell-hslua-objectorientation +haskell-hslua-packaging +haskell-hslua-repl +haskell-hslua-typing +haskell-http-api-data +haskell-http-client +haskell-http-client-tls +haskell-http-date +haskell-http-media +haskell-http-types +haskell-http2 +haskell-hunit +haskell-indexed-traversable +haskell-indexed-traversable-instances +haskell-integer-logarithms +haskell-iproute +haskell-ipynb +haskell-isocline +haskell-jira-wiki-markup +haskell-juicypixels +haskell-lexer +haskell-libyaml +haskell-lpeg +haskell-lua +haskell-memory +haskell-mime-types +haskell-mmorph +haskell-monad-control +haskell-mono-traversable +haskell-network +haskell-network-byte-order +haskell-network-uri +haskell-old-locale +haskell-old-time +haskell-onetuple +haskell-only +haskell-optparse-applicative +haskell-ordered-containers +haskell-os-string +haskell-pandoc +haskell-pandoc-lua-engine +haskell-pandoc-lua-marshal +haskell-pandoc-server +haskell-pandoc-types +haskell-pem +haskell-pretty-show +haskell-prettyprinter +haskell-primitive +haskell-psqueues +haskell-quickcheck +haskell-random +haskell-recv +haskell-regex-base +haskell-regex-tdfa +haskell-resourcet +haskell-safe +haskell-safe-exceptions +haskell-scientific +haskell-semialign +haskell-semigroupoids +haskell-servant +haskell-servant-server +haskell-sha +haskell-simple-sendfile +haskell-singleton-bool +haskell-skylighting +haskell-skylighting-core +haskell-skylighting-format-ansi +haskell-skylighting-format-blaze-html +haskell-skylighting-format-context +haskell-skylighting-format-latex +haskell-socks +haskell-some +haskell-sop-core +haskell-split +haskell-splitmix +haskell-statevar +haskell-streaming-commons +haskell-strict +haskell-syb +haskell-tagged +haskell-tagsoup +haskell-temporary +haskell-texmath +haskell-text-conversions +haskell-text-icu +haskell-text-short +haskell-th-abstraction +haskell-th-compat +haskell-th-lift +haskell-th-lift-instances +haskell-these +haskell-time-compat +haskell-time-manager +haskell-tls +haskell-toml-parser +haskell-transformers-base +haskell-transformers-compat +haskell-type-equality +haskell-typed-process +haskell-typst +haskell-typst-symbols +haskell-unicode-collation +haskell-unicode-data +haskell-unicode-transforms +haskell-uniplate +haskell-unix-compat +haskell-unix-time +haskell-unliftio +haskell-unliftio-core +haskell-unordered-containers +haskell-utf8-string +haskell-uuid-types +haskell-vault +haskell-vector +haskell-vector-algorithms +haskell-vector-stream +haskell-wai +haskell-wai-app-static +haskell-wai-cors +haskell-wai-extra +haskell-wai-logger +haskell-warp +haskell-witherable +haskell-word8 +haskell-xml +haskell-xml-conduit +haskell-xml-types +haskell-yaml +haskell-zip-archive +haskell-zlib +hicolor-icon-theme +hidapi +highway +hslua-cli +http-parser +hugo +hunspell +hwdata +hwloc +hyphen +hyprcursor +hyprevents-git +hyprfreeze-git +hyprgraphics +hypridle +hyprland +hyprland-qt-support +hyprland-qtutils +hyprlang +hyprlock +hyprprop-git +hyprutils +hyprwayland-scanner +iana-etc +ibus +icu +ijs +imagemagick +imath +imlib2 +iproute2 +iptables +iputils +iso-codes +jansson +jasper +java-environment-common +java-runtime-common +jbig2dec +jbigkit +jdk-openjdk +jdtls +jq +js115 +js128 +json-c +json-glib +jsoncpp +julia +kaccounts-integration +karchive +karchive5 +kate +kauth +kbd +kbookmarks +kcmutils +kcodecs +kcolorpicker +kcolorscheme +kcompletion +kconfig +kconfigwidgets +kcoreaddons +kcrash +kdbusaddons +kdnssd +keyutils +kfilemetadata +kglobalaccel +kguiaddons +kguiaddons5 +ki18n +kiconthemes +kidletime +kimageannotator +kio +kirigami +kitemmodels +kitemviews +kitty +kitty-shell-integration +kitty-terminfo +kjobwidgets +kmines +kmod +knewstuff +knotifications +kpackage +kparts +kpty +krb5 +kservice +ktexteditor +ktextwidgets +kuserfeedback +kvantum +kwallet +kwidgetsaddons +kwindowsystem +kxmlgui +l-smash +lame +lapack +lcms2 +ldns +leancrypto +lensfun +less +lib32-acl +lib32-alsa-lib +lib32-alsa-plugins +lib32-brotli +lib32-bzip2 +lib32-curl +lib32-dbus +lib32-e2fsprogs +lib32-expat +lib32-fontconfig +lib32-freetype2 +lib32-gcc-libs +lib32-gettext +lib32-glib2 +lib32-glibc +lib32-harfbuzz +lib32-icu +lib32-json-c +lib32-keyutils +lib32-krb5 +lib32-libcap +lib32-libdrm +lib32-libelf +lib32-libffi +lib32-libgcrypt +lib32-libglvnd +lib32-libgpg-error +lib32-libidn2 +lib32-libldap +lib32-libnghttp2 +lib32-libnghttp3 +lib32-libnl +lib32-libnsl +lib32-libpcap +lib32-libpciaccess +lib32-libpng +lib32-libpsl +lib32-libssh2 +lib32-libtasn1 +lib32-libtirpc +lib32-libunistring +lib32-libunwind +lib32-libx11 +lib32-libxau +lib32-libxcb +lib32-libxcrypt +lib32-libxcrypt-compat +lib32-libxcursor +lib32-libxdmcp +lib32-libxext +lib32-libxfixes +lib32-libxi +lib32-libxkbcommon +lib32-libxml2 +lib32-libxrandr +lib32-libxrender +lib32-libxshmfence +lib32-libxss +lib32-libxxf86vm +lib32-llvm-libs +lib32-lm_sensors +lib32-mesa +lib32-ncurses +lib32-nspr +lib32-nss +lib32-openssl +lib32-p11-kit +lib32-pam +lib32-pcre2 +lib32-spirv-tools +lib32-sqlite +lib32-systemd +lib32-util-linux +lib32-vulkan-icd-loader +lib32-vulkan-radeon +lib32-wayland +lib32-xcb-util-keysyms +lib32-xz +lib32-zlib +lib32-zstd +libaccounts-glib +libaccounts-qt +libadwaita +libao +libappindicator-gtk3 +libarchive +libass +libassuan +libasyncns +libatasmart +libavc1394 +libavif +libavtp +libb2 +libblastrampoline +libblockdev +libblockdev-crypto +libblockdev-fs +libblockdev-loop +libblockdev-mdraid +libblockdev-nvme +libblockdev-part +libblockdev-swap +libbluray +libbpf +libbs2b +libbsd +libbytesize +libcaca +libcamera +libcamera-ipa +libcanberra +libcap +libcap-ng +libcdio +libcdio-paranoia +libcheese +libcloudproviders +libcolord +libcups +libdaemon +libdatrie +libdbusmenu-glib +libdbusmenu-gtk3 +libdc1394 +libdca +libde265 +libdecor +libdeflate +libdisplay-info +libdovi +libdrm +libdv +libdvbpsi +libdvdnav +libdvdread +libebml +libedit +libei +libelf +libepoxy +libevdev +libevent +libexif +libfdk-aac +libffi +libfilezilla +libfontenc +libfreeaptx +libgcrypt +libgexiv2 +libgirepository +libgit2 +libglvnd +libgme +libgpg-error +libgtop +libgudev +libgusb +libhandy +libheif +libibus +libice +libidn +libidn2 +libiec61883 +libimobiledevice +libimobiledevice-glue +libinih +libinput +libinstpatch +libisl +libjpeg-turbo +libjxl +libkdcraw +libkdegames +libkexiv2 +libkeybinder3 +libksba +liblc3 +libldac +libldap +libliftoff +liblqr +liblrdf +libltc +libluv +libmad +libmanette +libmatroska +libmd +libmfx +libmicrodns +libmm-glib +libmng +libmnl +libmodplug +libmpc +libmpcdec +libmpdclient +libmpeg2 +libmspack +libmypaint +libmysofa +libndp +libnet +libnetfilter_conntrack +libnewt +libnfnetlink +libnftnl +libnghttp2 +libnghttp3 +libngtcp2 +libnice +libnl +libnm +libnma +libnma-common +libnotify +libnsl +libnvme +libogg +libomxil-bellagio +libopenmpt +libp11-kit +libpaper +libpcap +libpciaccess +libpgm +libpipeline +libpipewire +libplacebo +libplist +libpng +libproxy +libpsl +libpulse +libpwquality +libqalculate +libraqm +libraw +libraw1394 +librewolf-bin +librewolf-bin-debug +librsvg +librsync +libsamplerate +libsasl +libseccomp +libsecret +libshout +libsigc++ +libsigc++-3.0 +libsigsegv +libsixel +libsm +libsndfile +libsodium +libsoup +libsoup3 +libsoxr +libspectre +libspiro +libspng +libsrtp +libssh +libssh2 +libstemmer +libsynctex +libsysprof-capture +libtar +libtasn1 +libteam +libthai +libtheora +libtiff +libtirpc +libtommath +libtool +libunibreak +libunistring +libunwind +libupnp +libusb +libusbmuxd +libutempter +libutf8proc +libuv +libva +libvdpau +libverto +libvlc +libvorbis +libvpl +libvpx +libvterm +libwacom +libwebp +libwireplumber +libwmf +libwnck3 +libx11 +libxau +libxaw +libxcb +libxcomposite +libxcrypt +libxcrypt-compat +libxcursor +libxcvt +libxdamage +libxdg-basedir +libxdmcp +libxext +libxfce4ui +libxfce4util +libxfce4windowing +libxfixes +libxfont2 +libxft +libxi +libxinerama +libxkbcommon +libxkbcommon-x11 +libxkbfile +libxklavier +libxml2 +libxmlb +libxmu +libxpm +libxpresent +libxrandr +libxrender +libxres +libxshmfence +libxslt +libxss +libxt +libxtst +libxv +libxxf86vm +libyaml +libyuv +libzip +licenses +light +light-debug +lilv +linux +linux-api-headers +linux-firmware +linux-firmware-whence +lld +llhttp +llvm-julia-libs +llvm-libs +lm_sensors +lmdb +lsb-release +lsof +lua +lua-language-server +lua-lpeg +lua51-lpeg +luajit +luarocks +lv2 +lz4 +lzo +m4 +mailcap +make +man-db +mbedtls2 +md4c +mdadm +media-player-info +meld +mesa +mesa-utils +meson +minizip +mjpegtools +mkinitcpio +mkinitcpio-busybox +mobile-broadband-provider-info +mpdecimal +mpfr +mpg123 +mpv +msgpack-c +mtdev +mujs +mypaint-brushes1 +nano +ncurses +neofetch +neon +neovim +nettle +network-manager-applet +networkmanager +nextcloud-client +ninja +nm-connection-editor +nmap +node-gyp +nodejs-lts-jod +nodejs-nopt +noto-fonts +noto-fonts-emoji +npm +npth +nspr +nss +numactl +nwg-look +ocl-icd +okular +onetbb +oniguruma +openal +openblas64 +opencore-amr +openexr +openh264 +openjpeg2 +openlibm +openssh +openssl +openvr +opus +orc +p11-kit +pacman +pacman-mirrorlist +pam +pambase +pamixer +pandoc-cli +pango +pangomm +pangomm-2.48 +parted +patch +pavucontrol +pciutils +pcre +pcre2 +pcsclite +perl +perl-alien-build +perl-alien-libxml2 +perl-autovivification +perl-b-hooks-endofscope +perl-business-isbn +perl-business-isbn-data +perl-business-ismn +perl-business-issn +perl-capture-tiny +perl-class-accessor +perl-class-data-inheritable +perl-class-inspector +perl-class-load +perl-class-singleton +perl-clone +perl-data-compare +perl-data-dump +perl-data-optlist +perl-data-uniqid +perl-datetime +perl-datetime-calendar-julian +perl-datetime-format-builder +perl-datetime-format-strptime +perl-datetime-locale +perl-datetime-timezone +perl-devel-stacktrace +perl-dist-checkconflicts +perl-encode-locale +perl-error +perl-eval-closure +perl-exception-class +perl-exporter-tiny +perl-ffi-checklib +perl-file-chdir +perl-file-find-rule +perl-file-listing +perl-file-sharedir +perl-file-sharedir-install +perl-file-slurp-tiny +perl-file-slurper +perl-file-which +perl-html-parser +perl-html-tagset +perl-http-cookiejar +perl-http-cookies +perl-http-daemon +perl-http-date +perl-http-message +perl-http-negotiate +perl-io-html +perl-io-socket-ssl +perl-io-string +perl-ipc-run3 +perl-libwww +perl-lingua-translit +perl-list-allutils +perl-list-moreutils +perl-list-moreutils-xs +perl-list-someutils +perl-list-utilsby +perl-log-log4perl +perl-lwp-mediatypes +perl-lwp-protocol-https +perl-mailtools +perl-math-round +perl-mime-charset +perl-module-implementation +perl-module-runtime +perl-mozilla-ca +perl-mro-compat +perl-namespace-autoclean +perl-namespace-clean +perl-net-http +perl-net-ssleay +perl-number-compare +perl-package-deprecationmanager +perl-package-stash +perl-package-stash-xs +perl-params-util +perl-params-validate +perl-params-validationcompiler +perl-parse-recdescent +perl-path-tiny +perl-perlio-utf8-strict +perl-regexp-common +perl-role-tiny +perl-sort-key +perl-specio +perl-sub-exporter +perl-sub-exporter-progressive +perl-sub-identify +perl-sub-install +perl-test-fatal +perl-text-bibtex +perl-text-csv +perl-text-glob +perl-text-roman +perl-tie-cycle +perl-timedate +perl-try-tiny +perl-unicode-linebreak +perl-uri +perl-variable-magic +perl-www-robotrules +perl-xml-libxml +perl-xml-libxml-simple +perl-xml-libxslt +perl-xml-namespacesupport +perl-xml-sax +perl-xml-sax-base +perl-xml-writer +phonon-qt6 +phonon-qt6-vlc +php +pinentry +pipewire +pipewire-alsa +pipewire-audio +pipewire-jack +pipewire-pulse +pipewire-session-manager +pixman +pkgconf +plasma-activities +playerctl +plymouth +polkit +polkit-gnome +polkit-kde-agent +polkit-qt6 +poppler +poppler-data +poppler-glib +poppler-qt6 +popt +portaudio +potrace +prettier +prismlauncher +procps-ng +psmisc +pugixml +purpose +pyright +python +python-attrs +python-autocommand +python-cairo +python-cffi +python-colorama +python-configobj +python-cryptography +python-dbus +python-fastjsonschema +python-filelock +python-gobject +python-inflect +python-jaraco.collections +python-jaraco.context +python-jaraco.functools +python-jaraco.text +python-mako +python-markdown +python-markupsafe +python-more-itertools +python-ordered-set +python-packaging +python-pip +python-platformdirs +python-psutil +python-pycparser +python-pygments +python-pyxdg +python-setuptools +python-shtab +python-six +python-termcolor +python-tomli +python-tqdm +python-trove-classifiers +python-typeguard +python-typing_extensions +python-validate-pyproject +python-wheel +qalculate-gtk +qca-qt6 +qqc2-desktop-style +qrencode +qt5-base +qt5-declarative +qt5-graphicaleffects +qt5-location +qt5-quickcontrols +qt5-quickcontrols2 +qt5-svg +qt5-translations +qt5-wayland +qt5-webchannel +qt5-webengine +qt5-websockets +qt5-x11extras +qt5ct +qt6-5compat +qt6-base +qt6-declarative +qt6-imageformats +qt6-multimedia +qt6-multimedia-ffmpeg +qt6-networkauth +qt6-positioning +qt6-shadertools +qt6-speech +qt6-svg +qt6-translations +qt6-wayland +qt6-webchannel +qt6-webengine +qt6-websockets +qt6ct +qtkeychain-qt5 +qtkeychain-qt6 +quazip-qt6 +raptor +rav1e +re2 +readline +reflector +rhash +ripgrep +rofi +rofi-power-menu +rtkit +rtmpdump +rubberband +ruby +rubygems +runc +rustdesk +rustup +sbc +scdoc +sdbus-cpp +sddm +sdl2 +sdl2-debug +sdl3 +seahorse +seatd +sed +semver +serd +serpl +shaderc +shadow +shairplay +shared-mime-info +shfmt +signon-kwallet-extension +signon-plugin-oauth2 +signon-ui +signond +slang +slurp +smartmontools +snappy +sndio +socat +solid +sonnet +sord +sound-theme-freedesktop +soundtouch +spandsp +spdlog +speex +speexdsp +spirv-tools +sqlite +sratom +srt +startup-notification +steam +stylua +sudo +suitesparse +svt-av1 +svt-hevc +swaybg +syndication +syntax-highlighting +systemd +systemd-libs +systemd-sysvcompat +taglib +tar +tcl +tdb +terminator +texinfo +texlab +texlive-basic +texlive-bibtexextra +texlive-bin +texlive-binextra +texlive-context +texlive-fontsextra +texlive-fontsrecommended +texlive-fontutils +texlive-formatsextra +texlive-games +texlive-humanities +texlive-langgerman +texlive-latex +texlive-latexextra +texlive-latexrecommended +texlive-luatex +texlive-mathscience +texlive-metapost +texlive-music +texlive-pictures +texlive-plaingeneric +texlive-pstricks +texlive-publishers +texlive-xetex +threadweaver +thunar +thunar-volman +thunderbird +tinysparql +tk +tldr +tomlplusplus +tpm2-tss +tree-sitter +tree-sitter-c +tree-sitter-lua +tree-sitter-markdown +tree-sitter-query +tree-sitter-vim +tree-sitter-vimdoc +tslib +ttf-comfortaa +ttf-fantasque-nerd +ttf-fluentui-system-icons +ttf-iosevka-nerd +ttf-jetbrains-mono-nerd +ttf-nerd-fonts-symbols +ttf-nerd-fonts-symbols-common +tumbler +twolame +typescript +typescript-language-server +tzdata +uchardet +udisks2 +unibilium +unzip +upower +usbutils +util-linux +util-linux-libs +uxplay +uxplay-debug +v4l-utils +vapoursynth +vesktop-bin +vid.stab +vlc +vmaf +volume_key +vscode-html-languageserver +vscodium +vte-common +vte3 +vulkan-headers +vulkan-icd-loader +vulkan-radeon +vulkan-validation-layers +wavpack +waybar +wayland +wayland-protocols +webcord-bin +webkit2gtk +webrtc-audio-processing-1 +wget +which +wildmidi +wine +wireplumber +wl-clipboard +wlogout +wlogout-debug +wlroots +woff2 +wpa_supplicant +wxwidgets-common +wxwidgets-gtk3 +x264 +x265 +xcb-imdkit +xcb-proto +xcb-util +xcb-util-cursor +xcb-util-errors +xcb-util-image +xcb-util-keysyms +xcb-util-renderutil +xcb-util-wm +xcb-util-xrm +xcur2png +xdg-dbus-proxy +xdg-desktop-portal +xdg-desktop-portal-hyprland +xdg-user-dirs +xdg-utils +xdotool +xf86-input-libinput +xfce4-appfinder +xfce4-notifyd +xfce4-panel +xfce4-power-manager +xfce4-session +xfce4-settings +xfconf +xfdesktop +xfwm4 +xfwm4-themes +xkeyboard-config +xorg-fonts-encodings +xorg-iceauth +xorg-server +xorg-server-common +xorg-setxkbmap +xorg-xauth +xorg-xinit +xorg-xinput +xorg-xkbcomp +xorg-xmodmap +xorg-xprop +xorg-xrandr +xorg-xrdb +xorg-xset +xorg-xwayland +xorgproto +xvidcore +xxhash +xz +y-cruncher +yay +yazi +zathura +zbar +zenity +zeromq +zimg +zip +zix +zlib +zstd +zvbi +zxing-cpp +zziplib diff --git a/laptop/mkinitcpio.conf b/laptop/mkinitcpio.conf new file mode 100644 index 0000000..2fd80a4 --- /dev/null +++ b/laptop/mkinitcpio.conf @@ -0,0 +1,73 @@ +# vim:set ft=sh +# MODULES +# The following modules are loaded before any boot hooks are +# run. Advanced users may wish to specify all system modules +# in this array. For instance: +# MODULES=(usbhid xhci_hcd) +MODULES=() + +# BINARIES +# This setting includes any additional binaries a given user may +# wish into the CPIO image. This is run last, so it may be used to +# override the actual binaries included by a given hook +# BINARIES are dependency parsed, so you may safely ignore libraries +BINARIES=() + +# FILES +# This setting is similar to BINARIES above, however, files are added +# as-is and are not parsed in any way. This is useful for config files. +FILES=() + +# HOOKS +# This is the most important setting in this file. The HOOKS control the +# modules and scripts added to the image, and what happens at boot time. +# Order is important, and it is recommended that you do not change the +# order in which HOOKS are added. Run 'mkinitcpio -H ' for +# help on a given hook. +# 'base' is _required_ unless you know precisely what you are doing. +# 'udev' is _required_ in order to automatically load modules +# 'filesystems' is _required_ unless you specify your fs modules in MODULES +# Examples: +## This setup specifies all modules in the MODULES setting above. +## No RAID, lvm2, or encrypted root is needed. +# HOOKS=(base) +# +## This setup will autodetect all modules for your system and should +## work as a sane default +# HOOKS=(base udev autodetect modconf block filesystems fsck) +# +## This setup will generate a 'full' image which supports most systems. +## No autodetection is done. +# HOOKS=(base udev modconf block filesystems fsck) +# +## This setup assembles a mdadm array with an encrypted root file system. +## Note: See 'mkinitcpio -H mdadm_udev' for more information on RAID devices. +# HOOKS=(base udev modconf keyboard keymap consolefont block mdadm_udev encrypt filesystems fsck) +# +## This setup loads an lvm2 volume group. +# HOOKS=(base udev modconf block lvm2 filesystems fsck) +# +## NOTE: If you have /usr on a separate partition, you MUST include the +# usr and fsck hooks. +HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block filesystems fsck plymouth) + +# COMPRESSION +# Use this to compress the initramfs image. By default, zstd compression +# is used. Use 'cat' to create an uncompressed image. +#COMPRESSION="zstd" +#COMPRESSION="gzip" +#COMPRESSION="bzip2" +#COMPRESSION="lzma" +#COMPRESSION="xz" +#COMPRESSION="lzop" +#COMPRESSION="lz4" + +# COMPRESSION_OPTIONS +# Additional options for the compressor +#COMPRESSION_OPTIONS=() + +# MODULES_DECOMPRESS +# Decompress kernel modules during initramfs creation. +# Enable to speedup boot process, disable to save RAM +# during early userspace. Switch (yes/no). +#MODULES_DECOMPRESS="yes" diff --git a/laptop/pacman.conf b/laptop/pacman.conf new file mode 100644 index 0000000..7d7c2fd --- /dev/null +++ b/laptop/pacman.conf @@ -0,0 +1,100 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = auto +ILoveCandy +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +Color +#NoProgressBar +CheckSpace +#VerbosePkgLists +ParallelDownloads = 5 + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +#[extra-testing] +#Include = /etc/pacman.d/mirrorlist + +# If you want to run 32 bit applications on your x86_64 system, +# enable the multilib repositories as required here. + +#[multilib-testing] +#Include = /etc/pacman.d/mirrorlist + +[multilib] +Include = /etc/pacman.d/mirrorlist + +[arch4edu] +Server = https://de.arch4edu.mirror.kescher.at/$arch + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/laptop/vscode-extensions b/laptop/vscode-extensions new file mode 100644 index 0000000..f96a2b0 --- /dev/null +++ b/laptop/vscode-extensions @@ -0,0 +1,36 @@ +aaron-bond.better-comments +abusaidm.html-snippets +bungcip.better-toml +dbaeumer.vscode-eslint +dlasagno.rasi +donjayamanne.jquerysnippets +ecmel.vscode-html-css +Equinusocio.vsc-community-material-theme +Equinusocio.vsc-material-theme +equinusocio.vsc-material-theme-icons +ev3dev.ev3dev-browser +eww-yuck.yuck +fivethree.vscode-hugo-snippets +formulahendry.auto-rename-tag +golang.go +hollowtree.vue-snippets +Ionic.ionic +James-Yu.latex-workshop +lllllllqw.jsdoc +mads-hartmann.bash-ide-vscode +mathematic.vscode-latex +mechatroner.rainbow-csv +ms-python.python +ms-vscode.cpptools +NilsSoderman.sitemap-generator +quicktype.quicktype +rust-lang.rust-analyzer +Shan.code-settings-sync +spences10.robots-txt +streetsidesoftware.code-spell-checker +streetsidesoftware.code-spell-checker-german +svelte.svelte-vscode +tecosaur.latex-utilities +valentjn.vscode-ltex +Vue.volar +wayou.vscode-todo-highlight diff --git a/pc/.bash_history b/pc/.bash_history new file mode 100644 index 0000000..e691e82 --- /dev/null +++ b/pc/.bash_history @@ -0,0 +1,500 @@ +pyinstaller imagevideoupscaler.spec +./imagevideoupscaler +./imagevideoupscaler +pyinstaller imagevideoupscaler.spec +./imagevideoupscaler +pyinstaller imagevideoupscaler.spec +pyinstaller imagevideoupscaler.spec +./imagevideoupscaler +pyinstaller imagevideoupscaler.spec +./imagevideoupscaler +pyinstaller imagevideoupscaler-cli.py --onefile --name imagevideoupscaler --hidden-import "bin.engines" +./imagevideoupscaler +pyinstaller imagevideoupscaler-cli.py --onefile --name imagevideoupscaler +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 +pyinstaller imagevideoupscaler-cli.py --name imagevideoupscaler +cd dist/imagevideoupscaler/ +./imagevideoupscaler -i +cd ../.. +cd ~/projects/FSRImageVideoUpscalerFrontend_New/ +ls +clear +ls +clear +yay -S rpm-build +yay -S rpm-tools +yay -S dpkg +yay -S fakeroot +clear +pip3 install py2deb +py2deb -r ./ +py2deb -r ~/projects/FSRImageVideoUpscalerFrontend_New/ +pip3 install symbol +clear +yay -S symbol +clear +pip3 install pyinstaller +yay -S python-pip +py2deb +python3 imagevideoupscaler-cli.py +clear +pip3 install symbol +pip3 install setuptools +yay -R python-pip +yay -S python-pip +pip install --upgrade pip +clear +pip install setuptools +yay -S setuptools +sudo pacman -Syu "pacman>=6.0.2-7" +pip3 +yay -S python-pip +yay -S python3-pip +clear +yay -S python-pip +pip3 install +python -m pip3 +python -m pip +pip +pip3 +clear +pip3 +pip3 install +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -s 2 +clear +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E ss +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E ss +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E ss +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E ss -s 2 +clear +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E fsr -s 2 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E fsr -M c -s 2 +clear +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E fsr -s 2 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E ss -s 2 +python3 imagevideoupscaler-cli.py -i ~/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -E ss -s 2 +npm run serve +npm run serve +npm run serve +npm i +npm run serve +clear +cd ../../website/ +cd dist/ +http-server +http-server +git pull origin main +git checkout origin master +git checkout origin main +cd frontend/ +npm run electron:serve +npm i -g @vue/cli +sudo npm i -g @vue/cli +npm audit fix --force +npm audit fix --force +npm audit fix --force +npm i +npm i +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm i child_process +clear +npm run electron:serve +npm run serve +npm run serve +npm run serve +cd .. +ls +clear +python3 imagevideoupscaler-cli.py -h +python3 imagevideoupscaler-cli.py -p +python3 imagevideoupscaler-cli.py -h +python3 imagevideoupscaler-cli.py -d ss +cd frontend/ +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm i --save-dev @electron-forge/cli +npm exec --package=@electron-forge/cli -c "electron-forge import" +npm run make +cd src/ +npm run make +clear +cd .. +npm run electron:build +npm run electron:build -- --linux deb --win nsis +clear +npm run electron:build -- --linux deb --win nsis +npm run electron:build -- --linux deb --win nsis +npm run electron:build -- --linux deb --win nsis +npm run electron:build -- --linux deb --win nsis +npm run electron:build -- --linux deb --win nsis +yay -S libcript +yay -S libssl +clear +npm run electron:build -- --linux deb --linux rpm --win nsis +npm run electron:build -- --linux deb rpm --win nsis +yay -S libxcrypt-compat +npm run electron:build -- --linux deb rpm --win nsis +npm run electron:build -- --linux deb rpm --win nsis +cd ../packaging/ +ls +sudo chmod +x package.sh +./package.sh +mv --help +pip3 install pyinstaller +./package.sh +./package.sh +./package.sh +./package.sh +./package.sh +./package.sh +./package.sh +./package.sh +./package.sh +./package.sh +cd packaging/ +ls +sudo chmod +x package.sh +sudo chmod +x package.sh +./package.sh +./package.sh +./package.sh +cd ../dist/imagevideoupscaler/ +cd ../../frontend/ +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +cd ../packaging/ +./package.sh +clear +cd ../frontend/ +npm run electron:serve +cd ../packaging/ +./package.sh +cd ../frontend/ +npm run electron:serve +npm run electron:serve +cd ../packaging/ +./package.sh +clear +cd ../frontend/ +npm run electron:serve +npm run electron:serve +npm run electron:serve +./imagevideoupscaler +./imagevideoupscaler -i /home/janis/Downloads/test.mp4 -o ~/Downloads/test_us.mp4 -s 2 -S 0.25 +clear +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm i socket.io +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm i socket.io-client +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +cd ../packaging/ +sudo chmod +x ./prepareWindowsPackaging.sh +./prepareWindowsPackaging.sh +wine python -m pip install pyinstaller +./package.sh +./package.sh +wine python -m PyInstaller +./package.sh +cd ../frontend/dist_electron/ +wine imagevideoupscaler\ Setup\ 2.0.0-dev1.exe +clear +cd ../../packaging/ +clear +cd ../frontend/ +npm run electron:serve +cd .. +python3 imagevideoupscaler-cli.py -d ss +cd frontend/ +npm run electron:serve +npm run electron:serve +cd ../packaging/ +./package.sh +sudo chmod +x packageWindows.sh +sudo chmod +x packageLinux.sh +./packageWindows.sh +./packageWindows.sh +cd .. +python3 imagevideoupscaler-cli.py -h +cd frontend/ +npm run serve +npm run electron:serve +npm run electron:serve +cd ../frontend/ +cd ../packaging/ +./packageWindows.sh +cd ../frontend/ +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm i electron +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +npm run electron:serve +cd ../packaging/ +sudo chmod +x startTesting.sh +sudo chmod +x stopTesting.sh +clear +./startTesting.sh +cd ../frontend/ +npm run serve +npm run electron:serve +npm run electron:serve +cd ../packaging/ +./stopTesting.sh +./stopTesting.sh +./packageWindows.sh +cd .. +python3 imagevideoupscaler-cli.py -i /home/janis/projects/FSRImageVideoUpscalerFrontend_New/logo.png +python3 imagevideoupscaler-cli.py -i /home/janis/projects/FSRImageVideoUpscalerFrontend_New/logo.png +python3 imagevideoupscaler-cli.py -i /home/janis/projects/FSRImageVideoUpscalerFrontend_New/logo.png +python3 imagevideoupscaler-cli.py -i /home/janis/projects/FSRImageVideoUpscalerFrontend_New/logo.png -s 2 +cd ../fro +cd frontend/ +npm run serve +npm run electron:serve +cd ../packaging/ +./package.sh +./stopTesting.sh +./package.sh +./package.sh +cd ../frontend/ +npm run electron:serve +cd ../packaging/ +./packageWindows.sh +cd src/webapp/ +npm run serve +./packageWindows.sh +cd ../frontend/ +wine ./smuL-cli.exe +cd ../packaging/ +clear +./stopTesting.sh +./packageLinux.sh +cd ../frontend/ +./smuL-cli +clear +cd ../packaging/ +./stopTesting.sh +./packageWindows.sh +wine -m pip install importlib +clear +./stopTesting.sh +./prepareWindowsPackaging.sh +clear +cd ../ +wine python ./smuL-cli.py +wine python ./smuL-cli.py +wine python ./smuL-cli.py +wine python ./smuL-cli.py +wine python ./smuL-cli.py +wine python ./smuL-cli.py +wine python ./smuL-cli.py +cd packaging/ +./stopTesting.sh +./packageWindows.sh +cd ../frontend/dist_electron/ +wine ./SimpleMediaScalerLite\ Setup\ 2.0.0-dev1.exe +clear +cd ../../packaging/ +./packageWindows.sh +cd ../frontend/ +wine ./smuL-cli.exe -h +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +cd ../packaging/ +./stopTesting.sh +./packageWindows.sh +cd ../frontend/ +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +cd ../packaging/ +./stopTesting.sh +./packageWindows.sh +clear +cd ../frontend/ +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +clear +cd ../packaging/ +./stopTesting.sh +./packageWindows.sh +cd ../frontend/ +wine ./smuL-cli.exe -i ~/Downloads/test.png -s 2 +cd ../packaging/ +./stopTesting.sh +./packageWindows.sh +cd ../frontend/dist_electron/ +wine ./SimpleMediaScalerLite\ Setup\ 2.0.0-dev1.exe +wine ./SimpleMediaScalerLite\ Setup\ 2.0.0-dev1.exe +clear +cd ../../packaging/ +sudo chmod +x packageTesting.sh +./packageTesting.sh +cd ../frontend/dist_electron/linux-unpacked/ +ls +./simplemediascalerlite +cd ../../ +cd ../packag +cd ../packaging/ +./packageLinux.sh +./packageLinux.sh +./packageLinux.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageTesting.sh +./packageWindows.sh +cd ../frontend/dist_electron/ +wine SimpleMediaScalerLite\ Setup\ 2.0.0-dev1.exe +wine SimpleMediaScalerLite\ Setup\ 2.0.0-dev1.exe +clear +cd ../../packaging/ +./package.sh +cd .. +python3 smuL-cli.py -i /home/janis/Downloads/test.png -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -s 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -S 2 +python3 smuL-cli.py -i /home/janis/Downloads/test.mp4 -s 2 +clear +cd ./packaging/ +./packageWindows.sh +./packageWindows.sh +./packageWindows.sh +./packageWindows.sh +./package.sh +cd packag +cd packaging/ +./packageWindows.sh +./packageWindows.sh +cd ../../italian/ +http-server +node server.js +node server.js +node server.js +node server.js +node server.js +node server.js +node server.js +ls | grep -v jpg$ | while IFS= read -r FILENAME; do convert "${FILENAME}" "${FILENAME%.*}.jpg"; done +clear +for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done +for i in *.mov; do ffmpeg -i "$i" "${i%.*}.mp4"; done +rm ./*.mp4 +for i in *.mov; do ffmpeg -i "$i" "./Transcoded/${i%.*}.mp4"; done +for i in *.mov; do ffmpeg -i "$i" "./Transcoded/${i%.*}.mp4"; done +for i in *.mov; do ffmpeg -i "$i" "./Transcoded/${i%.*}.mp4"; done +file="/home/janis/dotfiles/config/vscode-extensions" +while read line; do vscodium --install-extension "${line}"; done < "${file}" +yay -S vscodium +clear +cp ./dotfiles/config/.bashrc .bashrc +clear +exit +clear +sudo plymouth-set-default-theme -R bgrt +cd dotfiles/ +sudo cp ./config/environment /etc/environment +sudo cp ./config/mkinitcpio.conf /etc/mkinitcpio.conf +sudo cp ./config/pacman.conf /etc/pacman.conf +clear +yay -Syu +clear +hugo +clear +cd /tmp +git clone https://github.com/rtlewis1/GTK/tree/Material-Black-Colors-Desktop +cd Material-Black-Colors-Desktop/ +sudo cp ./Material-Black-Blueberry /usr/share/themes +ls +git clone https://github.com/rtlewis1/GTK +cd gtk +cd GTK +git checkout Material-Black-Colors-Desktop +clear +ls +sudo cp ./Material-Black-Blueberry /usr/share/themes +sudo cp -r ./Material-Black-Blueberry /usr/share/themes +cd /tmp +git clone https://github.com/varlesh/oreo-cursors +cd oreo-cursors/generator +echo "black = #424242" > ./colours.conf +ruby convert.rb +cd .. +make build +sudo make install +ls +sudo make +sudo make build +make build +clear +cat build.sh +make build +clear +yay -S librewolf-bin +exit +file="/home/janis/dotfiles/config/vscode-extensions" +while read line; do vscodium --install-extension "${line}"; done < "${file}" diff --git a/pc/.bashrc b/pc/.bashrc new file mode 100755 index 0000000..95b0a32 --- /dev/null +++ b/pc/.bashrc @@ -0,0 +1,359 @@ +# +# ~/.bashrc +# + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +export PATH="/home/janis/.local/share/gem/ruby/3.0.0/bin: $PATH" +export PATH="/home/janis/.local/bin: $PATH" +alias editHyprlandConf='nano ~/.config/hypr/hyprland.conf' +alias ls='ls -l --color=auto' +alias ll='ls -la --color=auto' +alias sl='ls --color=auto' +alias start-httpd='sudo systemctl start httpd' +PS1='[\u@\h \W]\$ ' + +################################################################################ +## FUNCTIONS ## +################################################################################ + +## +## ARRANGE $PWD AND STORE IT IN $NEW_PWD +## * The home directory (HOME) is replaced with a ~ +## * The last pwdmaxlen characters of the PWD are displayed +## * Leading partial directory names are striped off +## /home/me/stuff -> ~/stuff (if USER=me) +## /usr/share/big_dir_name -> ../share/big_dir_name (if pwdmaxlen=20) +## +## Original source: WOLFMAN'S color bash promt +## https://wiki.chakralinux.org/index.php?title=Color_Bash_Prompt#Wolfman.27s +## +bash_prompt_command() { + # How many characters of the $PWD should be kept + local pwdmaxlen=25 + + # Indicate that there has been dir truncation + local trunc_symbol=".." + + # Store local dir + local dir=${PWD##*/} + + # Which length to use + pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen )) + + NEW_PWD=${PWD/#$HOME/\~} + + local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen )) + + # Generate name + if [ ${pwdoffset} -gt "0" ] + then + NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen} + NEW_PWD=${trunc_symbol}/${NEW_PWD#*/} + fi +} + + + + +## +## GENERATE A FORMAT SEQUENCE +## +format_font() +{ + ## FIRST ARGUMENT TO RETURN FORMAT STRING + local output=$1 + + + case $# in + 2) + eval $output="'\[\033[0;${2}m\]'" + ;; + 3) + eval $output="'\[\033[0;${2};${3}m\]'" + ;; + 4) + eval $output="'\[\033[0;${2};${3};${4}m\]'" + ;; + *) + eval $output="'\[\033[0m\]'" + ;; + esac +} + + + +## +## COLORIZE BASH PROMT +## +bash_prompt() { + + ############################################################################ + ## COLOR CODES ## + ## These can be used in the configuration below ## + ############################################################################ + + ## FONT EFFECT + local NONE='0' + local BOLD='1' + local DIM='2' + local UNDERLINE='4' + local BLINK='5' + local INVERT='7' + local HIDDEN='8' + + + ## COLORS + local DEFAULT='9' + local BLACK='0' + local RED='1' + local GREEN='2' + local YELLOW='3' + local BLUE='4' + local MAGENTA='5' + local CYAN='6' + local L_GRAY='7' + local D_GRAY='60' + local L_RED='61' + local L_GREEN='62' + local L_YELLOW='63' + local L_BLUE='64' + local L_MAGENTA='65' + local L_CYAN='66' + local WHITE='67' + + + ## TYPE + local RESET='0' + local EFFECT='0' + local COLOR='30' + local BG='40' + + + ## 256 COLOR CODES + local NO_FORMAT="\[\033[0m\]" + local ORANGE_BOLD="\[\033[1;38;5;208m\]" + local TOXIC_GREEN_BOLD="\[\033[1;38;5;118m\]" + local RED_BOLD="\[\033[1;38;5;1m\]" + local CYAN_BOLD="\[\033[1;38;5;87m\]" + local BLACK_BOLD="\[\033[1;38;5;0m\]" + local WHITE_BOLD="\[\033[1;38;5;15m\]" + local GRAY_BOLD="\[\033[1;90m\]" + local BLUE_BOLD="\[\033[1;38;5;74m\]" + + + + + + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + + ## CONFIGURE HERE ## + + + + ############################################################################ + ## CONFIGURATION ## + ## Choose your color combination here ## + ############################################################################ + local FONT_COLOR_1=$WHITE + local BACKGROUND_1=$RED + local TEXTEFFECT_1=$BOLD + + local FONT_COLOR_2=$WHITE + local BACKGROUND_2=$YELLOW + local TEXTEFFECT_2=$BOLD + + local FONT_COLOR_3=$D_GRAY + local BACKGROUND_3=$WHITE + local TEXTEFFECT_3=$BOLD + + local PROMT_FORMAT=$BLUE_BOLD + + + ############################################################################ + ## EXAMPLE CONFIGURATIONS ## + ## I use them for different hosts. Test them out ;) ## + ############################################################################ + + ## CONFIGURATION: BLUE-WHITE + if [ "$HOSTNAME" = dell ]; then + FONT_COLOR_1=$WHITE; BACKGROUND_1=$BLUE; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$L_BLUE; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$D_GRAY; BACKGROUND_3=$WHITE; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$CYAN_BOLD + fi + + ## CONFIGURATION: BLACK-RED + if [ "$HOSTNAME" = giraff6 ]; then + FONT_COLOR_1=$WHITE; BACKGROUND_1=$BLACK; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$D_GRAY; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$WHITE; BACKGROUND_3=$RED; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$RED_BOLD + fi + + ## CONFIGURATION: RED-BLACK + #FONT_COLOR_1=$WHITE; BACKGROUND_1=$RED; TEXTEFFECT_1=$BOLD + #FONT_COLOR_2=$WHITE; BACKGROUND_2=$D_GRAY; TEXTEFFECT_2=$BOLD + #FONT_COLOR_3=$WHITE; BACKGROUND_3=$BLACK; TEXTEFFECT_3=$BOLD + #PROMT_FORMAT=$RED_BOLD + + ## CONFIGURATION: CYAN-BLUE + if [ "$HOSTNAME" = sharkoon ]; then + FONT_COLOR_1=$BLACK; BACKGROUND_1=$L_CYAN; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$L_BLUE; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$WHITE; BACKGROUND_3=$BLUE; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$CYAN_BOLD + fi + + ## CONFIGURATION: GRAY-SCALE + if [ "$HOSTNAME" = giraff ]; then + FONT_COLOR_1=$WHITE; BACKGROUND_1=$BLACK; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$D_GRAY; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$WHITE; BACKGROUND_3=$L_GRAY; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$BLACK_BOLD + fi + + ## CONFIGURATION: GRAY-CYAN + if [ "$HOSTNAME" = light ]; then + FONT_COLOR_1=$WHITE; BACKGROUND_1=$BLACK; TEXTEFFECT_1=$BOLD + FONT_COLOR_2=$WHITE; BACKGROUND_2=$D_GRAY; TEXTEFFECT_2=$BOLD + FONT_COLOR_3=$BLACK; BACKGROUND_3=$L_CYAN; TEXTEFFECT_3=$BOLD + PROMT_FORMAT=$CYAN_BOLD + fi + + + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## + + + + + ############################################################################ + ## TEXT FORMATING ## + ## Generate the text formating according to configuration ## + ############################################################################ + + ## CONVERT CODES: add offset + FC1=$(($FONT_COLOR_1+$COLOR)) + BG1=$(($BACKGROUND_1+$BG)) + FE1=$(($TEXTEFFECT_1+$EFFECT)) + + FC2=$(($FONT_COLOR_2+$COLOR)) + BG2=$(($BACKGROUND_2+$BG)) + FE2=$(($TEXTEFFECT_2+$EFFECT)) + + FC3=$(($FONT_COLOR_3+$COLOR)) + BG3=$(($BACKGROUND_3+$BG)) + FE3=$(($TEXTEFFECT_3+$EFFECT)) + + FC4=$(($FONT_COLOR_4+$COLOR)) + BG4=$(($BACKGROUND_4+$BG)) + FE4=$(($TEXTEFFECT_4+$EFFECT)) + + + ## CALL FORMATING HELPER FUNCTION: effect + font color + BG color + local TEXT_FORMAT_1 + local TEXT_FORMAT_2 + local TEXT_FORMAT_3 + local TEXT_FORMAT_4 + format_font TEXT_FORMAT_1 $FE1 $FC1 $BG1 + format_font TEXT_FORMAT_2 $FE2 $FC2 $BG2 + format_font TEXT_FORMAT_3 $FC3 $FE3 $BG3 + format_font TEXT_FORMAT_4 $FC4 $FE4 $BG4 + + + # GENERATE PROMT SECTIONS + local PROMT_USER=$"$TEXT_FORMAT_1 \u " + local PROMT_HOST=$"$TEXT_FORMAT_2 \h " + local PROMT_PWD=$"$TEXT_FORMAT_3 \${NEW_PWD} " + local PROMT_INPUT=$"$PROMT_FORMAT " + + + ############################################################################ + ## SEPARATOR FORMATING ## + ## Generate the separators between sections ## + ## Uses background colors of the sections ## + ############################################################################ + + ## CONVERT CODES + TSFC1=$(($BACKGROUND_1+$COLOR)) + TSBG1=$(($BACKGROUND_2+$BG)) + + TSFC2=$(($BACKGROUND_2+$COLOR)) + TSBG2=$(($BACKGROUND_3+$BG)) + + TSFC3=$(($BACKGROUND_3+$COLOR)) + TSBG3=$(($DEFAULT+$BG)) + + + ## CALL FORMATING HELPER FUNCTION: effect + font color + BG color + local SEPARATOR_FORMAT_1 + local SEPARATOR_FORMAT_2 + local SEPARATOR_FORMAT_3 + format_font SEPARATOR_FORMAT_1 $TSFC1 $TSBG1 + format_font SEPARATOR_FORMAT_2 $TSFC2 $TSBG2 + format_font SEPARATOR_FORMAT_3 $TSFC3 $TSBG3 + + + # GENERATE SEPARATORS WITH FANCY TRIANGLE + local TRIANGLE=$'\uE0B0' + local SEPARATOR_1=$SEPARATOR_FORMAT_1$TRIANGLE + local SEPARATOR_2=$SEPARATOR_FORMAT_2$TRIANGLE + local SEPARATOR_3=$SEPARATOR_FORMAT_3$TRIANGLE + + + + ############################################################################ + ## WINDOW TITLE ## + ## Prevent messed up terminal-window titles ## + ############################################################################ + case $TERM in + xterm*|rxvt*) + local TITLEBAR='\[\033]0;\u:${NEW_PWD}\007\]' + ;; + *) + local TITLEBAR="" + ;; + esac + + + + ############################################################################ + ## BASH PROMT ## + ## Generate promt and remove format from the rest ## + ############################################################################ + PS1="$TITLEBAR\n${PROMT_USER}${SEPARATOR_1}${PROMT_HOST}${SEPARATOR_2}${PROMT_PWD}${SEPARATOR_3}${PROMT_INPUT}" + + + + ## For terminal line coloring, leaving the rest standard + none="$(tput sgr0)" + trap 'echo -ne "${none}"' DEBUG +} + + + + +################################################################################ +## MAIN ## +################################################################################ + +## Bash provides an environment variable called PROMPT_COMMAND. +## The contents of this variable are executed as a regular Bash command +## just before Bash displays a prompt. +## We want it to call our own command to truncate PWD and store it in NEW_PWD +PROMPT_COMMAND=bash_prompt_command + +## Call bash_promnt only once, then unset it (not needed any more) +## It will set $PS1 with colors and relative to $NEW_PWD, +## which gets updated by $PROMT_COMMAND on behalf of the terminal +bash_prompt +unset bash_prompt + +### EOF ### diff --git a/pc/configs/OpenRGB/OpenRGB.json b/pc/configs/OpenRGB/OpenRGB.json new file mode 100755 index 0000000..4ee3f30 --- /dev/null +++ b/pc/configs/OpenRGB/OpenRGB.json @@ -0,0 +1,1284 @@ +{ + "AutoStart": { + "client": "localhost:6742", + "custom": "", + "enabled": false, + "host": "0.0.0.0", + "port": "6742", + "profile": "Main", + "setclient": false, + "setcustom": false, + "setminimized": false, + "setprofile": false, + "setserver": false, + "setserverhost": false, + "setserverport": false + }, + "CorsairDominatorSettings": { + "model": "CMT" + }, + "Detectors": { + "detectors": { + "AMD Wraith Prism": true, + "AOC AGON AMM700": true, + "AOC GK500": true, + "AOC GM500": true, + "ASRock Deskmini Addressable LED Strip": true, + "ASRock Motherboard SMBus Controllers": true, + "ASRock Polychrome USB": true, + "ASUS AREZ Strix RX Vega 56 O8G": true, + "ASUS Aura Addressable": true, + "ASUS Aura Core": true, + "ASUS Aura Motherboard": true, + "ASUS Aura SMBus Motherboard": true, + "ASUS Cerberus Mech": true, + "ASUS GTX 1060 Strix": true, + "ASUS GTX 1060 Strix 6G Gaming": true, + "ASUS GTX 1070 Strix Gaming": true, + "ASUS GTX 1070 Strix OC": true, + "ASUS GTX 1080 Strix OC": true, + "ASUS KO RTX 3060 O12G V2 GAMING": true, + "ASUS KO RTX 3060 OC O12G GAMING": true, + "ASUS KO RTX 3060Ti O8G GAMING": true, + "ASUS KO RTX 3060Ti O8G V2 GAMING": true, + "ASUS KO RTX 3070 O8G V2 GAMING": true, + "ASUS ROG AURA Terminal": true, + "ASUS ROG Ally": true, + "ASUS ROG Balteus": true, + "ASUS ROG Balteus Qi": true, + "ASUS ROG Chakram (Wireless)": true, + "ASUS ROG Claymore": true, + "ASUS ROG Falchion (Wired)": true, + "ASUS ROG Falchion (Wireless)": true, + "ASUS ROG GTX 1660 Ti OC 6G": true, + "ASUS ROG Gladius II": true, + "ASUS ROG Gladius II Core": true, + "ASUS ROG Gladius II Origin": true, + "ASUS ROG Gladius II Origin COD": true, + "ASUS ROG Gladius II Origin PNK LTD": true, + "ASUS ROG Gladius II Wireless": true, + "ASUS ROG Gladius III": true, + "ASUS ROG Gladius III Wireless 2.4Ghz": true, + "ASUS ROG Gladius III Wireless Bluetooth": true, + "ASUS ROG Gladius III Wireless USB": true, + "ASUS ROG Keris": true, + "ASUS ROG Keris Wireless 2.4Ghz": true, + "ASUS ROG Keris Wireless Bluetooth": true, + "ASUS ROG Keris Wireless USB": true, + "ASUS ROG PG32UQ": true, + "ASUS ROG Pugio": true, + "ASUS ROG Pugio II (Wired)": true, + "ASUS ROG Pugio II (Wireless)": true, + "ASUS ROG RTX 3080 10G GUNDAM EDITION": true, + "ASUS ROG Ryuo AIO": true, + "ASUS ROG STRIX 3060 12G GAMING": true, + "ASUS ROG STRIX 3060 O12G GAMING": true, + "ASUS ROG STRIX 3060 O12G V2 GAMING": true, + "ASUS ROG STRIX 3060Ti O8G OC": true, + "ASUS ROG STRIX 3060Ti O8G V2": true, + "ASUS ROG STRIX 3070 O8G GAMING": true, + "ASUS ROG STRIX 3070 O8G V2 GAMING": true, + "ASUS ROG STRIX 3070 O8G V2 White": true, + "ASUS ROG STRIX 3070 O8G White": true, + "ASUS ROG STRIX 3070 OC": true, + "ASUS ROG STRIX 3070Ti O8G GAMING": true, + "ASUS ROG STRIX 3080 10G GAMING": true, + "ASUS ROG STRIX 3080 10G V2 GAMING": true, + "ASUS ROG STRIX 3080 O10G GAMING": true, + "ASUS ROG STRIX 3080 O10G V2 GAMING": true, + "ASUS ROG STRIX 3080 O10G V2 WHITE": true, + "ASUS ROG STRIX 3080 O10G WHITE": true, + "ASUS ROG STRIX 3080Ti O12G GAMING": true, + "ASUS ROG STRIX 3090 24G GAMING": true, + "ASUS ROG STRIX 3090 O24G GAMING": true, + "ASUS ROG STRIX 3090 O24G GAMING White OC": true, + "ASUS ROG STRIX LC 3080Ti O12G GAMING": true, + "ASUS ROG STRIX LC RX 6800XT O16G GAMING": true, + "ASUS ROG STRIX LC RX 6900XT O16G GAMING": true, + "ASUS ROG STRIX LC RX 6900XT O16G GAMING TOP": true, + "ASUS ROG STRIX LC RX 6950XT O16G GAMING": true, + "ASUS ROG STRIX RTX 2060 EVO Gaming 6G": true, + "ASUS ROG STRIX RTX 2060 O6G EVO Gaming": true, + "ASUS ROG STRIX RTX 2060 O6G Gaming": true, + "ASUS ROG STRIX RTX 2060S 8G Gaming": true, + "ASUS ROG STRIX RTX 2060S A8G EVO Gaming": true, + "ASUS ROG STRIX RTX 2060S A8G Gaming": true, + "ASUS ROG STRIX RTX 2060S O8G Gaming": true, + "ASUS ROG STRIX RTX 2070 A8G Gaming": true, + "ASUS ROG STRIX RTX 2070 O8G Gaming": true, + "ASUS ROG STRIX RTX 2070S 8G Gaming": true, + "ASUS ROG STRIX RTX 2070S A8G Gaming": true, + "ASUS ROG STRIX RTX 2070S O8G Gaming": true, + "ASUS ROG STRIX RTX 2080 8G Gaming": true, + "ASUS ROG STRIX RTX 2080 O8G Gaming": true, + "ASUS ROG STRIX RTX 2080 O8G V2 Gaming": true, + "ASUS ROG STRIX RTX 2080 Ti 11G Gaming": true, + "ASUS ROG STRIX RTX 2080 Ti A11G Gaming": true, + "ASUS ROG STRIX RTX 2080 Ti O11G Gaming": true, + "ASUS ROG STRIX RTX 2080S A8G Gaming": true, + "ASUS ROG STRIX RTX 2080S O8G Gaming": true, + "ASUS ROG STRIX RTX 2080S O8G White": true, + "ASUS ROG STRIX RTX 3080 12G": true, + "ASUS ROG STRIX RTX 3080 O12G": true, + "ASUS ROG STRIX RTX 3080 O12G EVA EDITION": true, + "ASUS ROG STRIX RTX 4080 16G GAMING": true, + "ASUS ROG STRIX RTX 4080 O16G GAMING": true, + "ASUS ROG STRIX RTX 4090 24G GAMING": true, + "ASUS ROG STRIX RTX 4090 O24G GAMING": true, + "ASUS ROG STRIX RX 6700XT O12G GAMING": true, + "ASUS ROG STRIX RX 6750XT O12G GAMING": true, + "ASUS ROG STRIX RX 6800 O16G Gaming": true, + "ASUS ROG STRIX RX470 O4G GAMING": true, + "ASUS ROG STRIX RX470 O4G Gaming": true, + "ASUS ROG STRIX RX480 Gaming OC": true, + "ASUS ROG STRIX RX560 Gaming": true, + "ASUS ROG Strix Claw": true, + "ASUS ROG Strix Evolve": true, + "ASUS ROG Strix Flare": true, + "ASUS ROG Strix Flare CoD Black Ops 4 Edition": true, + "ASUS ROG Strix Flare PNK LTD": true, + "ASUS ROG Strix GTX 1050 O2G Gaming": true, + "ASUS ROG Strix GTX 1050 TI 4G Gaming": true, + "ASUS ROG Strix GTX 1050 TI O4G Gaming": true, + "ASUS ROG Strix GTX 1650S OC 4G": true, + "ASUS ROG Strix GTX 1660S O6G Gaming": true, + "ASUS ROG Strix GTX1070 Ti 8G Gaming": true, + "ASUS ROG Strix GTX1070 Ti A8G Gaming": true, + "ASUS ROG Strix GTX1080 A8G Gaming": true, + "ASUS ROG Strix GTX1080 O8G 11Gbps": true, + "ASUS ROG Strix GTX1080 O8G Gaming": true, + "ASUS ROG Strix GTX1080 Ti 11G Gaming": true, + "ASUS ROG Strix GTX1080 Ti Gaming": true, + "ASUS ROG Strix GTX1080 Ti O11G Gaming": true, + "ASUS ROG Strix Impact": true, + "ASUS ROG Strix Impact II": true, + "ASUS ROG Strix Impact II Electro Punk": true, + "ASUS ROG Strix Impact II Gundam": true, + "ASUS ROG Strix Impact II Moonlight White": true, + "ASUS ROG Strix Impact II Wireless 2.4 Ghz": true, + "ASUS ROG Strix Impact II Wireless USB": true, + "ASUS ROG Strix LC": true, + "ASUS ROG Strix SCAR 15": true, + "ASUS ROG Strix Scope": true, + "ASUS ROG Strix Scope RX": true, + "ASUS ROG Strix Scope RX TKL Wireless Deluxe": true, + "ASUS ROG Strix Scope TKL": true, + "ASUS ROG Strix Scope TKL PNK LTD": true, + "ASUS ROG Strix XG279Q": true, + "ASUS ROG Strix XG27AQ": true, + "ASUS ROG Strix XG27AQM": true, + "ASUS ROG Strix XG27W": true, + "ASUS ROG Throne": true, + "ASUS ROG Throne QI": true, + "ASUS ROG Throne QI GUNDAM": true, + "ASUS RX 5600XT Strix O6G Gaming": true, + "ASUS RX 570 Strix O4G Gaming OC": true, + "ASUS RX 570 Strix O8G Gaming OC": true, + "ASUS RX 5700XT Strix 08G Gaming": true, + "ASUS RX 5700XT Strix Gaming OC": true, + "ASUS RX 580 Strix Gaming OC": true, + "ASUS RX 580 Strix Gaming TOP": true, + "ASUS RX 6800 TUF Gaming OC": true, + "ASUS TUF 3060 O12G GAMING": true, + "ASUS TUF 3060 O12G V2 GAMING": true, + "ASUS TUF Gaming K1": true, + "ASUS TUF Gaming K3": true, + "ASUS TUF Gaming K5": true, + "ASUS TUF Gaming K7": true, + "ASUS TUF Gaming M3": true, + "ASUS TUF Gaming M5": true, + "ASUS TUF Laptop": true, + "ASUS TUF RTX 3060 Ti 8G Gaming OC": true, + "ASUS TUF RTX 3060Ti O8G": true, + "ASUS TUF RTX 3060Ti O8G OC": true, + "ASUS TUF RTX 3070 8G GAMING": true, + "ASUS TUF RTX 3070 O8G GAMING": true, + "ASUS TUF RTX 3070 O8G V2 GAMING": true, + "ASUS TUF RTX 3070Ti O8G GAMING": true, + "ASUS TUF RTX 3070Ti O8G V2 GAMING": true, + "ASUS TUF RTX 3080 10G GAMING": true, + "ASUS TUF RTX 3080 O10G OC": true, + "ASUS TUF RTX 3080 O10G V2 GAMING": true, + "ASUS TUF RTX 3080 O12G GAMING": true, + "ASUS TUF RTX 3080Ti 12G GAMING": true, + "ASUS TUF RTX 3080Ti O12G GAMING": true, + "ASUS TUF RTX 3090 O24G": true, + "ASUS TUF RTX 3090 O24G OC": true, + "ASUS TUF RTX 3090Ti 24G GAMING": true, + "ASUS TUF RTX 3090Ti O24G OC GAMING": true, + "ASUS TUF RTX 4070 O12G Gaming": true, + "ASUS TUF RTX 4070 Ti 12G Gaming": true, + "ASUS TUF RTX 4070 Ti O12G Gaming": true, + "ASUS TUF RTX 4080 16G GAMING": true, + "ASUS TUF RTX 4080 O16G GAMING": true, + "ASUS TUF RTX 4080 O16G OC": true, + "ASUS TUF RTX 4090 O24G": true, + "ASUS TUF RTX 4090 O24G OC": true, + "ASUS TUF RX 6700XT O12G GAMING": true, + "ASUS TUF RX 6800XT O16G GAMING": true, + "ASUS TUF RX 6900XT O16G GAMING": true, + "ASUS TUF RX 6900XT T16G GAMING": true, + "ASUS TUF RX 6950XT O16G GAMING": true, + "ASUS Vega 64 Strix": true, + "ASUS_TUF RX 6700XT O12G GAMING": true, + "Acer Predator Gaming Mouse (Rival 300)": true, + "Alienware AW510K": true, + "Anne Pro 2": true, + "Aorus CPU Coolers": true, + "Asus ROG Chakram (Wired)": true, + "Asus ROG Chakram Core": true, + "Asus ROG Chakram X 2.4GHz": true, + "Asus ROG Chakram X USB": true, + "Asus ROG Spatha X 2.4GHz": true, + "Asus ROG Spatha X USB": true, + "BlinkyTape": true, + "Bloody MP 50RS": true, + "Bloody W60 Pro": true, + "CRYORIG H7 Quad Lumi": true, + "Cherry Keyboard CCF MX 1.0 TKL BL": true, + "Cherry Keyboard CCF MX 1.0 TKL NBL": true, + "Cherry Keyboard CCF MX 8.0 TKL BL": true, + "Cherry Keyboard G80-3000 TKL NBL": true, + "Cherry Keyboard G80-3000 TKL NBL KOREAN": true, + "Cherry Keyboard G80-3000 TKL RGB": true, + "Cherry Keyboard G80-3000N FL RGB": true, + "Cherry Keyboard G80-3000N TKL RGB": true, + "Cherry Keyboard MV BOARD 3.0 FL RGB": true, + "Cherry Keyboard MX 1.0 FL BL": true, + "Cherry Keyboard MX 1.0 FL NBL": true, + "Cherry Keyboard MX 1.0 FL RGB": true, + "Cherry Keyboard MX BOARD 1.0 TKL RGB": true, + "Cherry Keyboard MX BOARD 10.0 FL RGB": true, + "Cherry Keyboard MX BOARD 10.0N FL RGB": true, + "Cherry Keyboard MX BOARD 2.0S FL NBL": true, + "Cherry Keyboard MX BOARD 2.0S FL RGB": true, + "Cherry Keyboard MX BOARD 2.0S FL RGB DE": true, + "Cherry Keyboard MX BOARD 3.0S FL NBL": true, + "Cherry Keyboard MX BOARD 3.0S FL RGB": true, + "Cherry Keyboard MX BOARD 3.0S FL RGB KOREAN": true, + "Cherry Keyboard MX BOARD 8.0 TKL RGB": true, + "Cooler Master ARGB": true, + "Cooler Master ARGB Gen 2 A1": true, + "Cooler Master ARGB Gen 2 A1 V2": true, + "Cooler Master MK750": true, + "Cooler Master MM530": true, + "Cooler Master MM711": true, + "Cooler Master MM720": true, + "Cooler Master MM730": true, + "Cooler Master MP750 Large": true, + "Cooler Master MP750 Medium": true, + "Cooler Master MP750 XL": true, + "Cooler Master MasterKeys Pro L": true, + "Cooler Master MasterKeys Pro L White": true, + "Cooler Master MasterKeys Pro S": true, + "Cooler Master RGB": true, + "Cooler Master Radeon 6000 GPU": true, + "Cooler Master Radeon 6900 GPU": true, + "Cooler Master SK630": true, + "Cooler Master SK650": true, + "Cooler Master Small ARGB": true, + "Corsair 1000D Obsidian": true, + "Corsair Commander Core": true, + "Corsair Commander Pro": true, + "Corsair Dominator Platinum": true, + "Corsair Glaive RGB": true, + "Corsair Glaive RGB PRO": true, + "Corsair H100i v2": true, + "Corsair Harpoon RGB": true, + "Corsair Harpoon RGB PRO": true, + "Corsair Hydro H100i Platinum": true, + "Corsair Hydro H100i Platinum SE": true, + "Corsair Hydro H100i Pro XT": true, + "Corsair Hydro H100i Pro XT v2": true, + "Corsair Hydro H115i Platinum": true, + "Corsair Hydro H115i Pro XT": true, + "Corsair Hydro H150i Pro XT": true, + "Corsair Hydro H60i Pro XT": true, + "Corsair Hydro Series": true, + "Corsair Ironclaw RGB": true, + "Corsair Ironclaw Wireless": true, + "Corsair Ironclaw Wireless (Wired)": true, + "Corsair K100": true, + "Corsair K55 RGB": true, + "Corsair K55 RGB PRO": true, + "Corsair K55 RGB PRO XT": true, + "Corsair K57 RGB (Wired)": true, + "Corsair K60 RGB PRO": true, + "Corsair K60 RGB PRO Low Profile": true, + "Corsair K65 LUX RGB": true, + "Corsair K65 Mini": true, + "Corsair K65 RGB": true, + "Corsair K65 RGB RAPIDFIRE": true, + "Corsair K68 RGB": true, + "Corsair K70 LUX": true, + "Corsair K70 LUX RGB": true, + "Corsair K70 RGB": true, + "Corsair K70 RGB MK.2": true, + "Corsair K70 RGB MK.2 Low Profile": true, + "Corsair K70 RGB MK.2 SE": true, + "Corsair K70 RGB RAPIDFIRE": true, + "Corsair K95 RGB": true, + "Corsair K95 RGB PLATINUM": true, + "Corsair K95 RGB PLATINUM XT": true, + "Corsair LS100 Lighting Kit": true, + "Corsair LT100": true, + "Corsair Lighting Node Core": true, + "Corsair Lighting Node Pro": true, + "Corsair M55 RGB PRO": true, + "Corsair M65": true, + "Corsair M65 PRO": true, + "Corsair M65 RGB Elite": true, + "Corsair MM700": true, + "Corsair MM800 RGB Polaris": true, + "Corsair Nightsword": true, + "Corsair SPEC OMEGA RGB": true, + "Corsair ST100 RGB": true, + "Corsair Sabre RGB": true, + "Corsair Scimitar Elite RGB": true, + "Corsair Scimitar PRO RGB": true, + "Corsair Scimitar RGB": true, + "Corsair Strafe": true, + "Corsair Strafe MK.2": true, + "Corsair Strafe Red": true, + "Corsair Vengeance": true, + "Corsair Vengeance Pro": true, + "Cougar 700K EVO Gaming Keyboard": true, + "Cougar Revenger ST": true, + "Creative SoundBlasterX G6": true, + "Crucial": true, + "DMX": true, + "Dark Project KD3B V2": true, + "Das Keyboard Q4 RGB": true, + "Das Keyboard Q5 RGB": true, + "Das Keyboard Q5S RGB": true, + "Debug Controllers": true, + "Dell G Series LED Controller": true, + "Ducky One 2 RGB TKL": true, + "Ducky Shine 7/Ducky One 2 RGB": true, + "Dygma Raise": true, + "E1.31": true, + "EK Loop Connect": true, + "ENE SMBus DRAM": true, + "EVGA GP102 GPU": true, + "EVGA GeForce RTX 2070 SUPER FTW3 Ultra": true, + "EVGA GeForce RTX 2070 SUPER FTW3 Ultra+": true, + "EVGA GeForce RTX 2070 SUPER XC Gaming": true, + "EVGA GeForce RTX 2070 SUPER XC Ultra": true, + "EVGA GeForce RTX 2070 SUPER XC Ultra+": true, + "EVGA GeForce RTX 2070 XC Black": true, + "EVGA GeForce RTX 2070 XC Gaming": true, + "EVGA GeForce RTX 2070 XC OC": true, + "EVGA GeForce RTX 2080 Black": true, + "EVGA GeForce RTX 2080 SUPER FTW3 Hybrid OC": true, + "EVGA GeForce RTX 2080 SUPER FTW3 Ultra": true, + "EVGA GeForce RTX 2080 SUPER FTW3 Ultra Hydro Copper": true, + "EVGA GeForce RTX 2080 SUPER XC Gaming": true, + "EVGA GeForce RTX 2080 SUPER XC Ultra": true, + "EVGA GeForce RTX 2080 XC Black": true, + "EVGA GeForce RTX 2080 XC Gaming": true, + "EVGA GeForce RTX 2080 XC Ultra Gaming": true, + "EVGA GeForce RTX 2080Ti Black": true, + "EVGA GeForce RTX 2080Ti FTW3 Ultra": true, + "EVGA GeForce RTX 2080Ti XC HYBRID GAMING": true, + "EVGA GeForce RTX 2080Ti XC HYDRO COPPER": true, + "EVGA GeForce RTX 2080Ti XC Ultra": true, + "EVGA GeForce RTX 3060TI FTW3 Gaming": true, + "EVGA GeForce RTX 3060TI FTW3 Ultra": true, + "EVGA GeForce RTX 3060TI FTW3 Ultra LHR": true, + "EVGA GeForce RTX 3070 Black Gaming": true, + "EVGA GeForce RTX 3070 FTW3 Ultra": true, + "EVGA GeForce RTX 3070 FTW3 Ultra LHR": true, + "EVGA GeForce RTX 3070 XC3 Gaming": true, + "EVGA GeForce RTX 3070 XC3 Ultra": true, + "EVGA GeForce RTX 3070 XC3 Ultra LHR": true, + "EVGA GeForce RTX 3070Ti FTW3 Ultra": true, + "EVGA GeForce RTX 3070Ti FTW3 Ultra v2": true, + "EVGA GeForce RTX 3070Ti XC3 Gaming": true, + "EVGA GeForce RTX 3070Ti XC3 Ultra": true, + "EVGA GeForce RTX 3070Ti XC3 Ultra v2": true, + "EVGA GeForce RTX 3080 FTW3 Gaming": true, + "EVGA GeForce RTX 3080 FTW3 Ultra": true, + "EVGA GeForce RTX 3080 FTW3 Ultra 12GB": true, + "EVGA GeForce RTX 3080 FTW3 Ultra Hybrid": true, + "EVGA GeForce RTX 3080 FTW3 Ultra Hybrid Gaming LHR": true, + "EVGA GeForce RTX 3080 FTW3 Ultra Hybrid LHR": true, + "EVGA GeForce RTX 3080 FTW3 Ultra Hydro Copper": true, + "EVGA GeForce RTX 3080 FTW3 Ultra Hydro Copper 12G": true, + "EVGA GeForce RTX 3080 FTW3 Ultra LHR": true, + "EVGA GeForce RTX 3080 FTW3 Ultra v2 LHR": true, + "EVGA GeForce RTX 3080 XC3 Black": true, + "EVGA GeForce RTX 3080 XC3 Black LHR": true, + "EVGA GeForce RTX 3080 XC3 Gaming": true, + "EVGA GeForce RTX 3080 XC3 Gaming LHR": true, + "EVGA GeForce RTX 3080 XC3 Ultra": true, + "EVGA GeForce RTX 3080 XC3 Ultra 12G": true, + "EVGA GeForce RTX 3080 XC3 Ultra Hybrid": true, + "EVGA GeForce RTX 3080 XC3 Ultra Hybrid LHR": true, + "EVGA GeForce RTX 3080 XC3 Ultra Hydro Copper": true, + "EVGA GeForce RTX 3080 XC3 Ultra LHR": true, + "EVGA GeForce RTX 3080Ti FTW3 Ultra": true, + "EVGA GeForce RTX 3080Ti FTW3 Ultra Hybrid": true, + "EVGA GeForce RTX 3080Ti FTW3 Ultra Hydro Copper": true, + "EVGA GeForce RTX 3080Ti XC3 Gaming": true, + "EVGA GeForce RTX 3080Ti XC3 Gaming Hybrid": true, + "EVGA GeForce RTX 3080Ti XC3 Gaming Hydro Copper": true, + "EVGA GeForce RTX 3080Ti XC3 Ultra Gaming": true, + "EVGA GeForce RTX 3090 FTW3 Ultra": true, + "EVGA GeForce RTX 3090 FTW3 Ultra Hybrid": true, + "EVGA GeForce RTX 3090 FTW3 Ultra Hydro Copper": true, + "EVGA GeForce RTX 3090 FTW3 Ultra v2": true, + "EVGA GeForce RTX 3090 FTW3 Ultra v3": true, + "EVGA GeForce RTX 3090 K|NGP|N Hybrid": true, + "EVGA GeForce RTX 3090 K|NGP|N Hydro Copper": true, + "EVGA GeForce RTX 3090 XC3 Black": true, + "EVGA GeForce RTX 3090 XC3 Gaming": true, + "EVGA GeForce RTX 3090 XC3 Ultra": true, + "EVGA GeForce RTX 3090 XC3 Ultra Hybrid": true, + "EVGA GeForce RTX 3090 XC3 Ultra Hydro Copper": true, + "EVGA GeForce RTX 3090Ti FTW3 Black Gaming": true, + "EVGA GeForce RTX 3090Ti FTW3 Gaming": true, + "EVGA GeForce RTX 3090Ti FTW3 Ultra Gaming": true, + "EVGA Pascal GPU": true, + "EVGA X20 Gaming Mouse": true, + "EVGA X20 USB Receiver": true, + "EVGA Z15 Keyboard": true, + "EVGA Z20 Keyboard": true, + "EVision Keyboard 0C45:5004": true, + "EVision Keyboard 0C45:5104": true, + "EVision Keyboard 0C45:5204": true, + "EVision Keyboard 0C45:652F": true, + "EVision Keyboard 0C45:7698": true, + "EVision Keyboard 0C45:8520": true, + "EVision Keyboard 320F:5000": true, + "EVision Keyboard 320F:502A": true, + "EVision Keyboard 320F:5064": true, + "ElgatoKeyLight": true, + "Epomaker TH80 Pro (USB Cable)": true, + "Epomaker TH80 Pro (USB Dongle)": true, + "Espurna": true, + "Everest GT-100 RGB": true, + "FanBus": true, + "Faustus": true, + "GALAX RTX 2070 Super EX Gamer Black": true, + "GaiZhongGai 17 PRO": true, + "GaiZhongGai 17+4+Touch PRO": true, + "GaiZhongGai 20 PRO": true, + "GaiZhongGai 42 PRO": true, + "GaiZhongGai 68+4 PRO": true, + "GaiZhongGai Dial": true, + "GaiZhongGai LightBoard": true, + "GaiZhongGai RGB HUB Blue": true, + "GaiZhongGai RGB HUB Green": true, + "Gainward GTX 1080 Phoenix": true, + "Gainward GTX 1080 Ti Phoenix": true, + "Gainward RTX 2070 Super Phantom": true, + "Gainward RTX 2080 Phoenix GS": true, + "Gainward RTX 3070 Phoenix": true, + "Gainward RTX 3070 Ti Phoenix": true, + "Gainward RTX 3080 Phoenix": true, + "Gainward RTX 3080 Ti Phoenix": true, + "Gainward RTX 3090 Phoenix": true, + "Genesis Thor 300": true, + "Gigabyte AORUS RTX2060 SUPER 8G V1": true, + "Gigabyte AORUS RTX2070 SUPER 8G": true, + "Gigabyte AORUS RTX2070 XTREME 8G": true, + "Gigabyte AORUS RTX2080 8G": true, + "Gigabyte AORUS RTX2080 SUPER 8G": true, + "Gigabyte AORUS RTX2080 SUPER 8G Rev 1.0": true, + "Gigabyte AORUS RTX2080 SUPER Waterforce WB 8G": true, + "Gigabyte AORUS RTX2080 Ti XTREME 11G": true, + "Gigabyte AORUS RTX2080 XTREME 8G": true, + "Gigabyte AORUS RTX3060 ELITE 12G": true, + "Gigabyte AORUS RTX3060 ELITE 12G LHR": true, + "Gigabyte AORUS RTX3060 ELITE 12G Rev a1": true, + "Gigabyte AORUS RTX3060 Ti ELITE 8G LHR": true, + "Gigabyte AORUS RTX3070 Ti MASTER 8G": true, + "Gigabyte AORUS RTX3080 Ti XTREME WATERFORCE 12G": true, + "Gigabyte AORUS RTX3080 XTREME WATERFORCE 10G Rev 2.0": true, + "Gigabyte AORUS RTX3080 XTREME WATERFORCE WB 10G": true, + "Gigabyte AORUS RTX3080 XTREME WATERFORCE WB 12G LHR": true, + "Gigabyte AORUS RTX3090 XTREME WATERFORCE 24G": true, + "Gigabyte AORUS RTX3090 XTREME WATERFORCE WB 24G": true, + "Gigabyte AORUS RTX4080 MASTER 16G": true, + "Gigabyte AORUS RTX4090 MASTER 24G": true, + "Gigabyte Aorus M2": true, + "Gigabyte GTX1050 Ti G1 Gaming": true, + "Gigabyte GTX1050 Ti G1 Gaming (rev A1)": true, + "Gigabyte GTX1060 G1 Gaming 6G": true, + "Gigabyte GTX1060 G1 Gaming 6G OC": true, + "Gigabyte GTX1060 Xtreme Gaming V1": true, + "Gigabyte GTX1060 Xtreme Gaming v2": true, + "Gigabyte GTX1070 G1 Gaming 8G V1": true, + "Gigabyte GTX1070 Ti 8G Gaming": true, + "Gigabyte GTX1070 Xtreme Gaming": true, + "Gigabyte GTX1080 G1 Gaming": true, + "Gigabyte GTX1080 Ti 11G": true, + "Gigabyte GTX1080 Ti Gaming OC 11G": true, + "Gigabyte GTX1080 Ti Gaming OC BLACK 11G": true, + "Gigabyte GTX1080 Ti Xtreme Edition": true, + "Gigabyte GTX1080 Ti Xtreme Waterforce Edition": true, + "Gigabyte GTX1650 Gaming OC": true, + "Gigabyte GTX1660 Gaming OC 6G": true, + "Gigabyte GTX1660 SUPER Gaming OC": true, + "Gigabyte RGB": true, + "Gigabyte RGB Fusion": true, + "Gigabyte RGB Fusion 2 DRAM": true, + "Gigabyte RGB Fusion 2 SMBus": true, + "Gigabyte RGB Fusion 2 USB": true, + "Gigabyte RTX2060 Gaming OC": true, + "Gigabyte RTX2060 Gaming OC PRO": true, + "Gigabyte RTX2060 Gaming OC PRO V2": true, + "Gigabyte RTX2060 Gaming OC PRO White": true, + "Gigabyte RTX2060 SUPER Gaming": true, + "Gigabyte RTX2060 SUPER Gaming OC": true, + "Gigabyte RTX2060 SUPER Gaming OC 3X 8G V2": true, + "Gigabyte RTX2060 SUPER Gaming OC 3X White 8G": true, + "Gigabyte RTX2070 Gaming OC 8G": true, + "Gigabyte RTX2070 Gaming OC 8GC": true, + "Gigabyte RTX2070 Windforce 8G": true, + "Gigabyte RTX2070S Gaming OC": true, + "Gigabyte RTX2070S Gaming OC 3X": true, + "Gigabyte RTX2070S Gaming OC 3X White": true, + "Gigabyte RTX2080 Gaming OC 8G": true, + "Gigabyte RTX2080 Ti GAMING OC 11G": true, + "Gigabyte RTX2080S Gaming OC 8G": true, + "Gigabyte RTX3050 Gaming OC 8G": true, + "Gigabyte RTX3060 EAGLE 12G LHR V2": true, + "Gigabyte RTX3060 EAGLE OC 12G": true, + "Gigabyte RTX3060 EAGLE OC 12G V2": true, + "Gigabyte RTX3060 Gaming OC 12G": true, + "Gigabyte RTX3060 Gaming OC 12G (rev. 2.0)": true, + "Gigabyte RTX3060 Ti EAGLE OC 8G": true, + "Gigabyte RTX3060 Ti EAGLE OC 8G V2.0 LHR": true, + "Gigabyte RTX3060 Ti GAMING OC 8G": true, + "Gigabyte RTX3060 Ti GAMING OC LHR 8G": true, + "Gigabyte RTX3060 Ti GAMING OC PRO 8G": true, + "Gigabyte RTX3060 Ti Gaming OC PRO 8G LHR": true, + "Gigabyte RTX3060 Ti Vision OC 8G": true, + "Gigabyte RTX3060 Vision OC 12G": true, + "Gigabyte RTX3060 Vision OC 12G LHR": true, + "Gigabyte RTX3060 Vision OC 12G v3.0": true, + "Gigabyte RTX3070 Eagle OC 8G": true, + "Gigabyte RTX3070 Eagle OC 8G V2.0 LHR": true, + "Gigabyte RTX3070 Gaming OC 8G": true, + "Gigabyte RTX3070 Gaming OC 8G v3.0 LHR": true, + "Gigabyte RTX3070 MASTER 8G": true, + "Gigabyte RTX3070 MASTER 8G LHR": true, + "Gigabyte RTX3070 Ti EAGLE 8G": true, + "Gigabyte RTX3070 Ti Gaming OC 8G": true, + "Gigabyte RTX3070 Ti Vision OC 8G": true, + "Gigabyte RTX3070 Vision 8G": true, + "Gigabyte RTX3070 Vision 8G V2.0 LHR": true, + "Gigabyte RTX3080 EAGLE OC 10G": true, + "Gigabyte RTX3080 Gaming OC 10G": true, + "Gigabyte RTX3080 Gaming OC 12G": true, + "Gigabyte RTX3080 Ti EAGLE 12G": true, + "Gigabyte RTX3080 Ti EAGLE OC 12G": true, + "Gigabyte RTX3080 Ti Gaming OC 12G": true, + "Gigabyte RTX3080 Ti Vision OC 12G": true, + "Gigabyte RTX3080 Vision OC 10G": true, + "Gigabyte RTX3080 Vision OC 10G (REV 2.0)": true, + "Gigabyte RTX3090 Gaming OC 24G": true, + "Gigabyte RTX3090 VISION OC 24G ": true, + "Gigabyte RTX4070Ti Gaming OC 12G": true, + "Gigabyte RTX4080 AERO OC 16G": true, + "Gigabyte RTX4080 Eagle OC 16G": true, + "Gigabyte RTX4080 Gaming OC 16G": true, + "Gigabyte RTX4090 GAMING OC 24G": true, + "Glorious Model D / D-": true, + "Glorious Model D / D- Wireless": true, + "Glorious Model O / O-": true, + "Glorious Model O / O- Wireless": true, + "HP Omen 30L": true, + "Holtek Mousemat": true, + "Holtek USB Gaming Mouse": true, + "HyperX Alloy Elite 2": true, + "HyperX Alloy Elite 2 (HP)": true, + "HyperX Alloy Elite RGB": true, + "HyperX Alloy FPS RGB": true, + "HyperX Alloy Origins": true, + "HyperX Alloy Origins (HP)": true, + "HyperX Alloy Origins 60": true, + "HyperX Alloy Origins 60 (HP)": true, + "HyperX Alloy Origins 65 (HP)": true, + "HyperX Alloy Origins Core": true, + "HyperX Alloy Origins Core (HP)": true, + "HyperX DRAM": true, + "HyperX DuoCast": true, + "HyperX Fury Ultra": true, + "HyperX Pulsefire Core": true, + "HyperX Pulsefire Dart (Wired)": true, + "HyperX Pulsefire Dart (Wireless)": true, + "HyperX Pulsefire FPS Pro": true, + "HyperX Pulsefire Haste": true, + "HyperX Pulsefire Mat": true, + "HyperX Pulsefire Mat RGB Mouse Pad XL": true, + "HyperX Pulsefire Raid": true, + "HyperX Pulsefire Surge": true, + "HyperX Quadcast S": true, + "Intel Arc A770 Limited Edition": true, + "Ionico Keyboard": true, + "Ionico Light Bar": true, + "JSAUX RGB Docking Station": true, + "KFA2 RTX 2070 EX": true, + "KFA2 RTX 2080 EX OC": true, + "KFA2 RTX 2080 Super EX OC": true, + "KFA2 RTX 2080 TI EX OC": true, + "KasaSmart": true, + "Keychron Gaming Keyboard 1": true, + "LED Strip": true, + "LIFX": true, + "Lego Dimensions Toypad Base": true, + "Lenovo": true, + "Lenovo 5 2020": true, + "Lenovo 5 2021": true, + "Lenovo 5 2022": true, + "Lenovo Ideapad 3-15ach6": true, + "Lenovo Legion 7 gen 5": true, + "Lenovo Legion 7 gen 6": true, + "Lenovo Legion 7S gen 5": true, + "Lenovo Legion 7S gen 6": true, + "Lenovo Legion Y740": true, + "Lian Li O11 Dynamic - Razer Edition": true, + "Lian Li Uni Hub": true, + "Lian Li Uni Hub - AL": true, + "Lian Li Uni Hub - SL V2": true, + "Lian Li Uni Hub - SL V2 v0.5": true, + "Linux LED": true, + "Logitech G Pro (HERO) Gaming Mouse": true, + "Logitech G Pro Gaming Mouse": true, + "Logitech G Pro RGB Mechanical Gaming Keyboard": true, + "Logitech G Pro Wireless Gaming Mouse": true, + "Logitech G Pro Wireless Gaming Mouse (wired)": true, + "Logitech G203 Lightsync": true, + "Logitech G203 Prodigy": true, + "Logitech G213": true, + "Logitech G303 Daedalus Apex": true, + "Logitech G403 Hero": true, + "Logitech G403 Prodigy Gaming Mouse": true, + "Logitech G403 Wireless Gaming Mouse": true, + "Logitech G403 Wireless Gaming Mouse (wired)": true, + "Logitech G502 Hero Gaming Mouse": true, + "Logitech G502 Proteus Spectrum Gaming Mouse": true, + "Logitech G502 Wireless Gaming Mouse": true, + "Logitech G502 Wireless Gaming Mouse (wired)": true, + "Logitech G512": true, + "Logitech G512 RGB": true, + "Logitech G560 Lightsync Speaker": true, + "Logitech G610 Orion": true, + "Logitech G633 Gaming Headset": true, + "Logitech G703 Hero Wireless Gaming Mouse": true, + "Logitech G703 Hero Wireless Gaming Mouse (wired)": true, + "Logitech G703 Wireless Gaming Mouse": true, + "Logitech G703 Wireless Gaming Mouse (wired)": true, + "Logitech G733 Gaming Headset": true, + "Logitech G810 Orion Spectrum": true, + "Logitech G813 RGB Mechanical Gaming Keyboard": true, + "Logitech G815 RGB Mechanical Gaming Keyboard": true, + "Logitech G900 Wireless Gaming Mouse": true, + "Logitech G900 Wireless Gaming Mouse (wired)": true, + "Logitech G903 Hero Wireless Gaming Mouse": true, + "Logitech G903 Hero Wireless Gaming Mouse (wired)": true, + "Logitech G903 Wireless Gaming Mouse": true, + "Logitech G903 Wireless Gaming Mouse (wired)": true, + "Logitech G910 Orion Spark": true, + "Logitech G910 Orion Spectrum": true, + "Logitech G915 Wireless RGB Mechanical Gaming Keyboard": true, + "Logitech G915 Wireless RGB Mechanical Gaming Keyboard (Wired)": true, + "Logitech G915TKL Wireless RGB Mechanical Gaming Keyboard": true, + "Logitech G915TKL Wireless RGB Mechanical Gaming Keyboard (Wired)": true, + "Logitech G933 Lightsync Headset": true, + "Logitech G935 Gaming Headset": true, + "Logitech Powerplay Mat": true, + "Logitech X56 Rhino Hotas Joystick": true, + "Logitech X56 Rhino Hotas Throttle": true, + "MSI 3-Zone Laptop": true, + "MSI GeForce GTX 1070 Gaming X": true, + "MSI GeForce GTX 1660 Gaming X 6G": true, + "MSI GeForce GTX 1660 Super Gaming 6G": true, + "MSI GeForce GTX 1660 Super Gaming X 6G": true, + "MSI GeForce GTX 1660Ti Gaming 6G": true, + "MSI GeForce GTX 1660Ti Gaming X 6G": true, + "MSI GeForce RTX 2060 Gaming Z 6G": true, + "MSI GeForce RTX 2060 Super ARMOR OC": true, + "MSI GeForce RTX 2060 Super Gaming X": true, + "MSI GeForce RTX 2070 ARMOR": true, + "MSI GeForce RTX 2070 ARMOR OC": true, + "MSI GeForce RTX 2070 Gaming": true, + "MSI GeForce RTX 2070 Gaming Z": true, + "MSI GeForce RTX 2070 SUPER ARMOR OC": true, + "MSI GeForce RTX 2070 Super Gaming": true, + "MSI GeForce RTX 2070 Super Gaming Trio": true, + "MSI GeForce RTX 2070 Super Gaming X": true, + "MSI GeForce RTX 2070 Super Gaming X Trio": true, + "MSI GeForce RTX 2070 Super Gaming Z Trio": true, + "MSI GeForce RTX 2080 Duke 8G OC": true, + "MSI GeForce RTX 2080 Gaming Trio": true, + "MSI GeForce RTX 2080 Gaming X Trio": true, + "MSI GeForce RTX 2080 Sea Hawk EK X": true, + "MSI GeForce RTX 2080 Super Gaming X Trio": true, + "MSI GeForce RTX 2080Ti 11G Gaming X Trio": true, + "MSI GeForce RTX 2080Ti Gaming X Trio": true, + "MSI GeForce RTX 2080Ti Gaming Z Trio": true, + "MSI GeForce RTX 2080Ti Sea Hawk EK X": true, + "MSI GeForce RTX 3050 Gaming X 8G": true, + "MSI GeForce RTX 3060 12G Gaming X Trio": true, + "MSI GeForce RTX 3060 12G Gaming X Trio LHR": true, + "MSI GeForce RTX 3060 12G Gaming Z Trio": true, + "MSI GeForce RTX 3060 12GB Gaming X Trio": true, + "MSI GeForce RTX 3060 Gaming X 12G": true, + "MSI GeForce RTX 3060 Gaming X 12G (GA104)": true, + "MSI GeForce RTX 3060 Gaming X 12G LHR": true, + "MSI GeForce RTX 3060 Ti 8GB Gaming X LHR": true, + "MSI GeForce RTX 3060 Ti 8GB Gaming X Trio": true, + "MSI GeForce RTX 3060 Ti 8GB Gaming X Trio LHR": true, + "MSI GeForce RTX 3070 8GB Gaming Trio": true, + "MSI GeForce RTX 3070 8GB Gaming X Trio": true, + "MSI GeForce RTX 3070 8GB Suprim": true, + "MSI GeForce RTX 3070 8GB Suprim X": true, + "MSI GeForce RTX 3070 8GB Suprim X LHR": true, + "MSI GeForce RTX 3070 Ti 8GB Gaming X Trio": true, + "MSI GeForce RTX 3070 Ti Suprim X 8G": true, + "MSI GeForce RTX 3080 10GB Gaming X Trio": true, + "MSI GeForce RTX 3080 10GB Gaming Z Trio": true, + "MSI GeForce RTX 3080 10GB Gaming Z Trio LHR": true, + "MSI GeForce RTX 3080 12GB Gaming Z Trio LHR": true, + "MSI GeForce RTX 3080 Suprim X 10G": true, + "MSI GeForce RTX 3080 Suprim X 10G LHR": true, + "MSI GeForce RTX 3080 Suprim X 12G LHR": true, + "MSI GeForce RTX 3080 Ti Gaming X Trio 12G": true, + "MSI GeForce RTX 3080 Ti Suprim X 12G": true, + "MSI GeForce RTX 3090 24GB Gaming X Trio": true, + "MSI GeForce RTX 3090 Suprim 24G": true, + "MSI GeForce RTX 3090 Suprim X 24G": true, + "MSI GeForce RTX 3090 Ti Gaming X Trio 24G": true, + "MSI GeForce RTX 3090 Ti Suprim X 24G": true, + "MSI GeForce RTX 4070 12GB Gaming X Trio": true, + "MSI GeForce RTX 4070Ti 12GB Gaming X Trio": true, + "MSI GeForce RTX 4070Ti 12GB Suprim X Trio": true, + "MSI GeForce RTX 4080 16GB Gaming X Trio": true, + "MSI GeForce RTX 4080 16GB Suprim X": true, + "MSI GeForce RTX 4090 24GB Gaming X Trio": true, + "MSI GeForce RTX 4090 24GB Suprim Liquid X": true, + "MSI GeForce RTX 4090 24GB Suprim X": true, + "MSI Mystic Light MS_1562": true, + "MSI Mystic Light MS_1563": true, + "MSI Mystic Light MS_1564": true, + "MSI Mystic Light MS_1720": true, + "MSI Mystic Light MS_7B12": true, + "MSI Mystic Light MS_7B16": true, + "MSI Mystic Light MS_7B17": true, + "MSI Mystic Light MS_7B18": true, + "MSI Mystic Light MS_7B50": true, + "MSI Mystic Light MS_7B85": true, + "MSI Mystic Light MS_7B93": true, + "MSI Mystic Light MS_7C34": true, + "MSI Mystic Light MS_7C35": true, + "MSI Mystic Light MS_7C36": true, + "MSI Mystic Light MS_7C37": true, + "MSI Mystic Light MS_7C56": true, + "MSI Mystic Light MS_7C59": true, + "MSI Mystic Light MS_7C60": true, + "MSI Mystic Light MS_7C67": true, + "MSI Mystic Light MS_7C71": true, + "MSI Mystic Light MS_7C73": true, + "MSI Mystic Light MS_7C75": true, + "MSI Mystic Light MS_7C76": true, + "MSI Mystic Light MS_7C77": true, + "MSI Mystic Light MS_7C79": true, + "MSI Mystic Light MS_7C80": true, + "MSI Mystic Light MS_7C81": true, + "MSI Mystic Light MS_7C82": true, + "MSI Mystic Light MS_7C83": true, + "MSI Mystic Light MS_7C84": true, + "MSI Mystic Light MS_7C86": true, + "MSI Mystic Light MS_7C87": true, + "MSI Mystic Light MS_7C90": true, + "MSI Mystic Light MS_7C91": true, + "MSI Mystic Light MS_7C92": true, + "MSI Mystic Light MS_7C94": true, + "MSI Mystic Light MS_7C95": true, + "MSI Mystic Light MS_7C98": true, + "MSI Mystic Light MS_7D03": true, + "MSI Mystic Light MS_7D06": true, + "MSI Mystic Light MS_7D07": true, + "MSI Mystic Light MS_7D08": true, + "MSI Mystic Light MS_7D09": true, + "MSI Mystic Light MS_7D13": true, + "MSI Mystic Light MS_7D15": true, + "MSI Mystic Light MS_7D17": true, + "MSI Mystic Light MS_7D18": true, + "MSI Mystic Light MS_7D19": true, + "MSI Mystic Light MS_7D20": true, + "MSI Mystic Light MS_7D25": true, + "MSI Mystic Light MS_7D27": true, + "MSI Mystic Light MS_7D28": true, + "MSI Mystic Light MS_7D29": true, + "MSI Mystic Light MS_7D30": true, + "MSI Mystic Light MS_7D31": true, + "MSI Mystic Light MS_7D32": true, + "MSI Mystic Light MS_7D36": true, + "MSI Mystic Light MS_7D38": true, + "MSI Mystic Light MS_7D41": true, + "MSI Mystic Light MS_7D42": true, + "MSI Mystic Light MS_7D43": true, + "MSI Mystic Light MS_7D46": true, + "MSI Mystic Light MS_7D50": true, + "MSI Mystic Light MS_7D51": true, + "MSI Mystic Light MS_7D52": true, + "MSI Mystic Light MS_7D53": true, + "MSI Mystic Light MS_7D54": true, + "MSI Mystic Light MS_7D59": true, + "MSI Mystic Light MS_7D67": true, + "MSI Mystic Light MS_7D69": true, + "MSI Mystic Light MS_7D70": true, + "MSI Mystic Light MS_7D73": true, + "MSI Mystic Light MS_7D75": true, + "MSI Mystic Light MS_7D76": true, + "MSI Mystic Light MS_7D77": true, + "MSI Mystic Light MS_7D78": true, + "MSI Mystic Light MS_7D86": true, + "MSI Mystic Light MS_7D89": true, + "MSI Mystic Light MS_7D91": true, + "MSI Mystic Light MS_7E01": true, + "MSI Mystic Light MS_7E06": true, + "MSI Mystic Light MS_7E07": true, + "MSI Mystic Light MS_B926": true, + "MSI Optix controller": true, + "MSI Radeon RX 6600 XT Gaming X": true, + "MSI Radeon RX 6700 XT Gaming X": true, + "MSI Radeon RX 6750 XT Gaming X Trio 12G": true, + "MSI Radeon RX 6800 Gaming X Trio": true, + "MSI Radeon RX 6800 Gaming Z Trio v1": true, + "MSI Radeon RX 6800 XT Gaming X Trio": true, + "MSI Radeon RX 6800 XT Gaming Z Trio": true, + "MSI Radeon RX 6900 XT Gaming X Trio": true, + "MSI Radeon RX 6900 XT Gaming Z Trio": true, + "MSI Radeon RX 6950 XT Gaming X Trio": true, + "MSI Vigor GK30 controller": true, + "MSI-RGB": true, + "Mountain Everest": true, + "N5312A USB Optical Mouse": true, + "NVIDIA RTX2060S": true, + "NVIDIA RTX2080S": true, + "NZXT Hue 2": true, + "NZXT Hue 2 Ambient": true, + "NZXT Hue 2 Motherboard": true, + "NZXT Hue+": true, + "NZXT Kraken M2": true, + "NZXT Kraken X2": true, + "NZXT Kraken X3": true, + "NZXT Kraken X3 Series": true, + "NZXT Kraken X3 Series RGB": true, + "NZXT RGB & Fan Controller": true, + "NZXT RGB Controller": true, + "NZXT Smart Device V1": true, + "NZXT Smart Device V2": true, + "Nanoleaf": true, + "Nollie 32CH": true, + "Np93 ALPHA - Gaming Mouse": true, + "Nvidia ESA - Dell XPS 730x": true, + "OKS Optical Axis RGB": true, + "OpenRazer": false, + "PNY XLR8 OC EDITION RTX 2060": true, + "PNY XLR8 Revel EPIC-X RTX 3060": true, + "PNY XLR8 Revel EPIC-X RTX 3070": true, + "PNY XLR8 Revel EPIC-X RTX 3070 LHR": true, + "PNY XLR8 Revel EPIC-X RTX 3080": true, + "PNY XLR8 Revel EPIC-X RTX 3090": true, + "Palit 1080": true, + "Palit 3060": true, + "Palit 3060 LHR": true, + "Palit 3060TI LHR": true, + "Palit 3060Ti": true, + "Palit 3070": true, + "Palit 3070 LHR": true, + "Palit 3070Ti": true, + "Palit 3070Ti GamingPro": true, + "Palit 3080": true, + "Palit 3080 Gamerock": true, + "Palit 3080 Gamerock LHR": true, + "Palit 3080 GamingPro 12G": true, + "Palit 3080 LHR": true, + "Palit 3080Ti": true, + "Palit 3080Ti Gamerock": true, + "Palit 3090": true, + "Palit 3090 Gamerock": true, + "Palit 4070Ti Gamerock": true, + "Palit 4090 Gamerock": true, + "Palit GeForce RTX 3060 Ti Dual": true, + "Patriot Viper": true, + "Patriot Viper Steel": true, + "Philips Hue": true, + "Philips Wiz": true, + "Razer Abyssus Elite D.Va Edition": true, + "Razer Abyssus Essential": true, + "Razer Base Station Chroma": true, + "Razer Base Station V2 Chroma": true, + "Razer Basilisk": true, + "Razer Basilisk Essential": true, + "Razer Basilisk Ultimate (Wired)": true, + "Razer Basilisk Ultimate (Wireless)": true, + "Razer Basilisk V2": true, + "Razer Basilisk V3": true, + "Razer Basilisk V3 Pro (Wired)": true, + "Razer Basilisk V3 Pro (Wireless)": true, + "Razer Blackwidow 2019": true, + "Razer Blackwidow Chroma": true, + "Razer Blackwidow Chroma Tournament Edition": true, + "Razer Blackwidow Chroma V2": true, + "Razer Blackwidow Elite": true, + "Razer Blackwidow Overwatch": true, + "Razer Blackwidow V3": true, + "Razer Blackwidow V3 Mini (Wired)": true, + "Razer Blackwidow V3 Mini (Wireless)": true, + "Razer Blackwidow V3 Pro (Wired)": true, + "Razer Blackwidow V3 Pro (Wireless)": true, + "Razer Blackwidow V3 TKL": true, + "Razer Blackwidow X Chroma": true, + "Razer Blackwidow X Chroma Tournament Edition": true, + "Razer Blade (2016)": true, + "Razer Blade (Late 2016)": true, + "Razer Blade 14 (2021)": true, + "Razer Blade 14 (2022)": true, + "Razer Blade 15 (2018 Advanced)": true, + "Razer Blade 15 (2018 Base)": true, + "Razer Blade 15 (2018 Mercury)": true, + "Razer Blade 15 (2019 Advanced)": true, + "Razer Blade 15 (2019 Base)": true, + "Razer Blade 15 (2019 Mercury)": true, + "Razer Blade 15 (2019 Studio)": true, + "Razer Blade 15 (2020 Advanced)": true, + "Razer Blade 15 (2020 Base)": true, + "Razer Blade 15 (2021 Advanced)": true, + "Razer Blade 15 (2021 Base)": true, + "Razer Blade 15 (2022)": true, + "Razer Blade 15 (Late 2020)": true, + "Razer Blade 15 (Late 2021 Advanced)": true, + "Razer Blade Pro (2016)": true, + "Razer Blade Pro (2017 FullHD)": true, + "Razer Blade Pro (2017)": true, + "Razer Blade Pro (2019)": true, + "Razer Blade Pro (Late 2019)": true, + "Razer Blade Pro 17 (2020)": true, + "Razer Blade Pro 17 (2021)": true, + "Razer Blade Stealth (2016)": true, + "Razer Blade Stealth (2017)": true, + "Razer Blade Stealth (2019)": true, + "Razer Blade Stealth (2020)": true, + "Razer Blade Stealth (Late 2016)": true, + "Razer Blade Stealth (Late 2017)": true, + "Razer Blade Stealth (Late 2019)": true, + "Razer Blade Stealth (Late 2020)": true, + "Razer Book 13 (2020)": true, + "Razer Charging Pad Chroma": true, + "Razer Chroma Addressable RGB Controller": true, + "Razer Chroma HDK": true, + "Razer Chroma Mug Holder": true, + "Razer Chroma PC Case Lighting Kit": true, + "Razer Core": true, + "Razer Core X": true, + "Razer Cynosa Chroma": true, + "Razer Cynosa Chroma V2": true, + "Razer Cynosa Lite": true, + "Razer Deathadder Chroma": true, + "Razer Deathadder Elite": true, + "Razer Deathadder Essential": true, + "Razer Deathadder Essential V2": true, + "Razer Deathadder Essential White Edition": true, + "Razer Deathadder V2": true, + "Razer Deathadder V2 Mini": true, + "Razer Deathadder V2 Pro (Wired)": true, + "Razer Deathadder V2 Pro (Wireless)": true, + "Razer Deathstalker Chroma": true, + "Razer Deathstalker V2": true, + "Razer Deathstalker V2 Pro (Wired)": true, + "Razer Deathstalker V2 Pro (Wireless)": true, + "Razer Diamondback": true, + "Razer Firefly": true, + "Razer Firefly Hyperflux": true, + "Razer Firefly V2": true, + "Razer Goliathus": true, + "Razer Goliathus Extended": true, + "Razer Huntsman": true, + "Razer Huntsman Elite": true, + "Razer Huntsman Mini": true, + "Razer Huntsman Tournament Edition": true, + "Razer Huntsman V2": true, + "Razer Huntsman V2 Analog": true, + "Razer Huntsman V2 TKL": true, + "Razer Kraken 7.1": true, + "Razer Kraken 7.1 Chroma": true, + "Razer Kraken 7.1 V2": true, + "Razer Kraken Kitty Black Edition": true, + "Razer Kraken Kitty Edition": true, + "Razer Kraken Ultimate": true, + "Razer Lancehead 2017 (Wired)": true, + "Razer Lancehead 2017 (Wireless)": true, + "Razer Lancehead 2019 (Wired)": true, + "Razer Lancehead 2019 (Wireless)": true, + "Razer Lancehead Tournament Edition": true, + "Razer Laptop Stand Chroma": true, + "Razer Laptop Stand Chroma V2": true, + "Razer Leviathan V2 X": true, + "Razer Mamba 2012 (Wired)": true, + "Razer Mamba 2012 (Wireless)": true, + "Razer Mamba 2015 (Wired)": true, + "Razer Mamba 2015 (Wireless)": true, + "Razer Mamba 2018 (Wired)": true, + "Razer Mamba 2018 (Wireless)": true, + "Razer Mamba Elite": true, + "Razer Mamba Tournament Edition": true, + "Razer Mouse Bungee V3 Chroma": true, + "Razer Mouse Dock Chroma": true, + "Razer Mouse Dock Pro": true, + "Razer Naga Chroma": true, + "Razer Naga Classic": true, + "Razer Naga Epic Chroma": true, + "Razer Naga Hex V2": true, + "Razer Naga Left Handed": true, + "Razer Naga Pro (Wired)": true, + "Razer Naga Pro (Wireless)": true, + "Razer Naga Trinity": true, + "Razer Nommo Chroma": true, + "Razer Nommo Pro": true, + "Razer Orbweaver Chroma": true, + "Razer Ornata Chroma": true, + "Razer Ornata Chroma V2": true, + "Razer Ornata V3": true, + "Razer Ornata V3 Rev2": true, + "Razer Ornata V3 X": true, + "Razer Seiren Emote": true, + "Razer Strider Chroma": true, + "Razer Tartarus Chroma": true, + "Razer Tartarus Pro": true, + "Razer Tartarus V2": true, + "Razer Thunderbolt 4 Dock Chroma": true, + "Razer Tiamat 7.1 V2": true, + "Razer Viper": true, + "Razer Viper 8kHz": true, + "Razer Viper Mini": true, + "Razer Viper Ultimate (Wired)": true, + "Razer Viper Ultimate (Wireless)": true, + "Red Square Keyrox TKL": true, + "Red Square Keyrox TKL Classic": true, + "Redragon M602 Griffin": true, + "Redragon M711 Cobra": true, + "Redragon M715 Dagger": true, + "Redragon M716 Inquisitor": true, + "Redragon M808 Storm": true, + "Redragon M908 Impact": true, + "Roccat Burst Core": true, + "Roccat Burst Pro": true, + "Roccat Elo 7.1": true, + "Roccat Horde Aimo": true, + "Roccat Kone Aimo": true, + "Roccat Kone Aimo 16K": true, + "Roccat Kova": true, + "Roccat Vulcan 120-Series Aimo": true, + "SRGBMods LED Controller v1": true, + "SRGBmods Pico LED Controller": true, + "Sapphire RX 470/480 Nitro+": true, + "Sapphire RX 5500 XT Nitro+": true, + "Sapphire RX 570/580/590 Nitro+": true, + "Sapphire RX 5700 (XT) Nitro+": true, + "Sapphire RX 5700 XT Nitro+": true, + "Sapphire RX 580 Nitro+ (2048SP)": true, + "Sapphire RX 6600 XT Nitro+": true, + "Sapphire RX 6700 XT Nitro+": true, + "Sapphire RX 6750 XT Nitro+": true, + "Sapphire RX 6800 Nitro+": true, + "Sapphire RX 6800 XT Nitro+ SE": true, + "Sapphire RX 6800 XT/6900 XT Nitro+": true, + "Sapphire RX 6900 XT Nitro+ SE": true, + "Sapphire RX 6900 XT Toxic": true, + "Sapphire RX 6900 XT Toxic Limited Edition": true, + "Sapphire RX 6950 XT Nitro+": true, + "Sapphire RX 7900 XTX Nitro+": true, + "Sapphire RX Vega 56/64 Nitro+": true, + "Sony DualSense": true, + "Sony DualShock 4": true, + "SteelSeries Aerox 3 Wired": true, + "SteelSeries Aerox 9 Wired": true, + "SteelSeries Apex (OG)/Apex Fnatic": true, + "SteelSeries Apex 3": true, + "SteelSeries Apex 3 TKL": true, + "SteelSeries Apex 350": true, + "SteelSeries Apex 5": true, + "SteelSeries Apex 7": true, + "SteelSeries Apex 7 TKL": true, + "SteelSeries Apex M750": true, + "SteelSeries Apex Pro": true, + "SteelSeries Apex Pro TKL": true, + "SteelSeries Arctis 5": true, + "SteelSeries QCK Prism Cloth 3XL": true, + "SteelSeries QCK Prism Cloth 4XL": true, + "SteelSeries QCK Prism Cloth Medium": true, + "SteelSeries QCK Prism Cloth XL": true, + "SteelSeries QCK Prism Cloth XL CS:GO Neon Rider Ed.": true, + "SteelSeries QCK Prism Cloth XL Destiny Ed.": true, + "SteelSeries Rival 100": true, + "SteelSeries Rival 100 DotA 2 Edition": true, + "SteelSeries Rival 105": true, + "SteelSeries Rival 106": true, + "SteelSeries Rival 110": true, + "SteelSeries Rival 3": true, + "SteelSeries Rival 3 (Old Firmware)": true, + "SteelSeries Rival 300": true, + "SteelSeries Rival 300 Black Ops Edition": true, + "SteelSeries Rival 300 CS:GO Fade Edition": true, + "SteelSeries Rival 300 CS:GO Fade Edition (stm32)": true, + "SteelSeries Rival 300 CS:GO Hyperbeast Edition": true, + "SteelSeries Rival 300 Dota 2 Edition": true, + "SteelSeries Rival 300 HP Omen Edition": true, + "SteelSeries Rival 310": true, + "SteelSeries Rival 310 CS:GO Howl Edition": true, + "SteelSeries Rival 310 PUBG Edition": true, + "SteelSeries Rival 600": true, + "SteelSeries Rival 600 Dota 2 Edition": true, + "SteelSeries Rival 650": true, + "SteelSeries Rival 650 Wireless": true, + "SteelSeries Rival 700": true, + "SteelSeries Rival 710": true, + "SteelSeries Sensei 310": true, + "SteelSeries Sensei TEN": true, + "SteelSeries Sensei TEN CS:GO Neon Rider Edition": true, + "SteelSeries Siberia 350": true, + "Strimer L Connect": true, + "Tecknet M008": true, + "Thermaltake Poseidon Z RGB": true, + "Thermaltake Riing (PID 0x1FA5)": true, + "Thermaltake Riing (PID 0x1FA6)": true, + "Thermaltake Riing (PID 0x1FA7)": true, + "Thermaltake Riing (PID 0x1FA8)": true, + "Thermaltake Riing (PID 0x1FA9)": true, + "Thermaltake Riing (PID 0x1FAA)": true, + "Thermaltake Riing (PID 0x1FAB)": true, + "Thermaltake Riing (PID 0x1FAC)": true, + "Thermaltake Riing (PID 0x1FAD)": true, + "Thermaltake Riing (PID 0x1FAE)": true, + "Thermaltake Riing (PID 0x1FAF)": true, + "Thermaltake Riing (PID 0x1FB0)": true, + "Thermaltake Riing (PID 0x1FB1)": true, + "Thermaltake Riing (PID 0x1FB2)": true, + "Thermaltake Riing (PID 0x1FB3)": true, + "Thermaltake Riing (PID 0x1FB4)": true, + "Thermaltake Riing (PID 0x1FB5)": true, + "Thermaltake Riing Quad (PID 0x2260)": true, + "Thermaltake Riing Quad (PID 0x2261)": true, + "Thermaltake Riing Quad (PID 0x2262)": true, + "Thermaltake Riing Quad (PID 0x2263)": true, + "Thermaltake Riing Quad (PID 0x2264)": true, + "Thermaltake Riing Quad (PID 0x2265)": true, + "Thermaltake Riing Quad (PID 0x2266)": true, + "Thermaltake Riing Quad (PID 0x2267)": true, + "Thermaltake Riing Quad (PID 0x2268)": true, + "Thermaltake Riing Quad (PID 0x2269)": true, + "Thermaltake Riing Quad (PID 0x226A)": true, + "Thermaltake Riing Quad (PID 0x226B)": true, + "Thermaltake Riing Quad (PID 0x226C)": true, + "Thermaltake Riing Quad (PID 0x226D)": true, + "Thermaltake Riing Quad (PID 0x226E)": true, + "Thermaltake Riing Quad (PID 0x226F)": true, + "Thermaltake Riing Quad (PID 0x2270)": true, + "ThingM blink(1) mk2": true, + "Trust GXT 114": true, + "Trust GXT 180": true, + "ViewSonic Monitor XG270QG": true, + "Wooting One (Classic)": true, + "Wooting One (Legacy)": true, + "Wooting One (None)": true, + "Wooting One (Xbox)": true, + "Wooting Two (Classic)": true, + "Wooting Two (Legacy)": true, + "Wooting Two (None)": true, + "Wooting Two (Xbox)": true, + "Wooting Two 60HE (ARM) (Classic)": true, + "Wooting Two 60HE (ARM) (None)": true, + "Wooting Two 60HE (ARM) (Xbox)": true, + "Wooting Two 60HE (Classic)": true, + "Wooting Two 60HE (None)": true, + "Wooting Two 60HE (Xbox)": true, + "Wooting Two HE (ARM) (Classic)": true, + "Wooting Two HE (ARM) (None)": true, + "Wooting Two HE (ARM) (Xbox)": true, + "Wooting Two HE (Classic)": true, + "Wooting Two HE (None)": true, + "Wooting Two HE (Xbox)": true, + "Wooting Two LE (Classic)": true, + "Wooting Two LE (None)": true, + "Wooting Two LE (Xbox)": true, + "XPG Spectrix S40G": true, + "Yeelight": true, + "ZET Blade Optical": true, + "ZET Fury Pro": true, + "ZET GAMING Edge Air Elit": true, + "ZET GAMING Edge Air Elit (Wireless)": true, + "ZET GAMING Edge Air Pro": true, + "ZET GAMING Edge Air Pro (Wireless)": true, + "ZOTAC GAMING GeForce RTX 2070 SUPER Twin Fan": true, + "ZOTAC GAMING GeForce RTX 3070 Ti Trinity OC": true, + "ZOTAC GAMING GeForce RTX 3080 Ti AMP Holo": true, + "ZOTAC GAMING GeForce RTX 3090 AMP Extreme Holo": true, + "ZOTAC GAMING GeForce RTX 4090 AMP Extreme AIRO": true, + "ZOTAC GAMING GeForce RTX 4090 Trinity OC": true, + "Zalman Z Sync": true, + "iGame GeForce RTX 2070 SUPER Advanced OC-V": true, + "iGame GeForce RTX 3060 Advanced OC 12G L-V": true, + "iGame GeForce RTX 3060 Ti Advanced OC-V": true, + "iGame GeForce RTX 3060 Ti Ultra W OC LHR-V": true, + "iGame GeForce RTX 3060 Ultra W OC 12G L-V": true, + "iGame GeForce RTX 3070 Advanced OC-V": true, + "iGame GeForce RTX 3070 Ti Advanced OC-V": true, + "iGame GeForce RTX 3070 Ti Ultra W OC LHR": true, + "iGame GeForce RTX 3070 Ultra W OC LHR": true, + "iGame GeForce RTX 3080 Ti Advanced OC-V": true, + "iGame GeForce RTX 4070 Ti Advanced OC-V": true, + "iGame GeForce RTX 4080 Ultra W OC-V": true + } + }, + "Gigabyte RGB Fusion 2 SMBus": { + "SupportedDevices": [ + "B450 AORUS ELITE", + "B450 AORUS ELITE V2", + "B450 AORUS M", + "B450 AORUS PRO WIFI-CF", + "B450 AORUS PRO-CF", + "B450 AORUS PRO-CF4", + "B450 I AORUS PRO WIFI-CF", + "B450M DS3H-CF", + "X299 DESIGNARE EX-CF", + "X399 AORUS XTREME-CF", + "X399 DESIGNARE EX-CF", + "X470 AORUS GAMING 5 WIFI", + "X470 AORUS GAMING 7 WIFI-CF", + "X470 AORUS GAMING 7 WIFI-50-CF", + "X470 AORUS ULTRA GAMING", + "X470 AORUS ULTRA GAMING-CF", + "B360M AORUS Gaming 3-CF", + "Z370 AORUS Gaming 5-CF", + "Z370 AORUS Ultra Gaming-CF" + ] + }, + "Theme": { + "theme": "dark" + }, + "UserInterface": { + "RunZoneChecks": false, + "exit_profile": { + "profile_name": "Main", + "set_on_exit": true + }, + "geometry": { + "height": 0, + "load_geometry": false, + "save_on_exit": false, + "width": 0, + "x": 0, + "y": 0 + }, + "greyscale_tray_icon": false, + "language": "default", + "minimize_on_close": true + } +} \ No newline at end of file diff --git a/pc/configs/Portmaster/Preferences b/pc/configs/Portmaster/Preferences new file mode 100755 index 0000000..1ec6df7 --- /dev/null +++ b/pc/configs/Portmaster/Preferences @@ -0,0 +1 @@ +{"spellcheck":{"dictionaries":["en-US"],"dictionary":""}} \ No newline at end of file diff --git a/pc/configs/hypr/hypridle.conf b/pc/configs/hypr/hypridle.conf new file mode 100644 index 0000000..c39dccf --- /dev/null +++ b/pc/configs/hypr/hypridle.conf @@ -0,0 +1,39 @@ +#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░ ░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░ +#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ +#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒ +#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓ +#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ +#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓ +#█ ████ ████ ████ ██████ ████ ██ █ ██ ███ █████████████ ██████ █████ ██ ███ ████ █████ █ +#██████████████ █████ ████████████████████████████████████████████████████████████████████████████████████████████████ ██ + +general { + lock_cmd = hyprlock --immediate + unlock_cmd = loginctl unlock-session + before_sleep_cmd = hyprlock --immediate + after_sleep_cmd = hyprlock --immediate +} + +listener { + timeout = 100 + on-timeout = notify-send "Entering idle state... (200s to screen off)" + on-resume = notify-send "Welcome back!" +} + +listener { + timeout = 200 + on-timeout = notify-send "100s to screen off" && sleep 5 && hyprlock +} + +listener { + timeout = 300 + on-timeout = hyprctl dispatch dpms off + on-resume = hyprctl dispatch dpms on +} + +listener { + timeout = 600 + on-timeout = systemctl suspend + on-resume = hyprctl dispatch dpms on +} \ No newline at end of file diff --git a/pc/configs/hypr/hyprland.conf b/pc/configs/hypr/hyprland.conf new file mode 100644 index 0000000..fd9ec71 --- /dev/null +++ b/pc/configs/hypr/hyprland.conf @@ -0,0 +1,38 @@ +#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░ +#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ +#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒ +#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓ +#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓▓ ▓▓ ▓ ▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ +#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓▓ ▓▓ ▓ ▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓ +#█ ████ ████ ████ ██████ ████ ███ █ █ ██ ██ █ ███████████ ██████ █████ ██ ███ ████ █████ █ +#██████████████ █████ ██████████████████████████████████████████████████████████████████████████████████████████████████████ ██ + + + + +#----------# +# MONITORS # +#----------# + +# monitor=DP-1, preferred, 0x0, 1, vrr, 2 +monitor=DP-1, 1920x1080@144, 0x0, 1, vrr, 2 +monitor=DP-2, 1920x1080@75, 1920x0, 1 +# monitor=,highres highrr, auto, 1 + + +# exec = swaybg -m fill -i /mnt/storage/SORTED/Pictures/Wallpapers/wallpaper/arch-bg-matterhorn.jpg +exec = swaybg -m fill -i /mnt/storage/SORTED/Pictures/Wallpapers/McLaren/main_livery_upscaled.jpg + + +source=./hyprland/binds.conf +source=./hyprland/general.conf +source=./hyprland/windowrules.conf + +#---------# +# DESKTOP # +#---------# +workspace = 1, monitor:DP-1, default:1 +workspace = 2, monitor:DP-2, default:1 +workspace = 3, monitor:DP-1 +workspace = 4, monitor:DP-2 diff --git a/pc/configs/hypr/hyprlock.conf b/pc/configs/hypr/hyprlock.conf new file mode 100644 index 0000000..57a8087 --- /dev/null +++ b/pc/configs/hypr/hyprlock.conf @@ -0,0 +1,96 @@ +#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ +#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░ +#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ +#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒ ▒▒ ▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒ +#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓ +#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓▓ ▓ ▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ +#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓ +#█ ████ ████ ████ ██████ ████ ████ ████████ █ ██ ██████████ ██████ █████ ██ ███ ████ █████ █ +#██████████████ █████ ███████████████████████████████████████████████████████████████████████████████████████████████████ ██ + + +general { + grace = 15 +} + +# BACKGROUND +background { + monitor = + path = /mnt/storage/SORTED/Pictures/Wallpapers/McLaren/livery_3.jpg # Or screenshot + + blur_passes = 1 +} + +# PASSWORD INPUT +input-field { + monitor = + size = 300, 40 + outline_thickness = 3 + dots_size = 0.33 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.15 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = false + outer_color = rgb(204, 92, 0) + inner_color = rgb(200, 200, 200) + font_color = rgb(10, 10, 10) + fade_on_empty = true + placeholder_text = Input Password... # Text rendered in the input box when it's empty. + hide_input = false + + position = 0, -80 + halign = center + valign = center +} + +label { + monitor = + text = $TIME + color = rgba(200, 200, 200, 1.0) + font_size = 100 + font_family = Source Code Pro + + position = 0, 80 + halign = center + valign = center +} + +label { + monitor = + text = $LAYOUT + color = rgba(200, 200, 200, 1.0) + font_size = 12 + font_family = Source Code Pro + + position = 0, 0 + halign = right + valign = bottom +} + +label { + monitor = + text = $USER + color = rgba(200, 200, 200, 1.0) + font_size = 12 + font_family = Source Code Pro + + position = 0, 0 + halign = left + valign = bottom + shadow_passes = 3 +} + +label { + monitor = + text = Failed attempts: $ATTEMPTS + color = rgba(200, 0, 0, 1.0) + font_size = 12 + font_family = Source Code Pro + + position = 0, 20 + halign = center + valign = bottom + shadow_passes = 3 + shadow_size = 5 + shadow_boost = 3 + shadow_color = rgb(255,255,255) +} + diff --git a/pc/configs/hypr/wall_4K.png b/pc/configs/hypr/wall_4K.png new file mode 100755 index 0000000000000000000000000000000000000000..f835a978661c8670b0d74f57fb94fbd7a263ee9e GIT binary patch literal 49045 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 He}DDAM^699 literal 0 HcmV?d00001 diff --git a/pc/configs/hypr/xdg-portal-hyprland b/pc/configs/hypr/xdg-portal-hyprland new file mode 100755 index 0000000..61a3648 --- /dev/null +++ b/pc/configs/hypr/xdg-portal-hyprland @@ -0,0 +1,8 @@ +#!/bin/bash +sleep 1 +killall xdg-desktop-portal-hyprland +killall xdg-desktop-portal-wlr +killall xdg-desktop-portal +/usr/libexec/xdg-desktop-portal-hyprland & +sleep 2 +/usr/lib/xdg-desktop-portal & \ No newline at end of file diff --git a/pc/configs/waybar/config.jsonc b/pc/configs/waybar/config.jsonc new file mode 100755 index 0000000..2870ad0 --- /dev/null +++ b/pc/configs/waybar/config.jsonc @@ -0,0 +1,98 @@ +{ + "layer": "top", + "position": "top", + "mod": "dock", + "exclusive": true, + "passthrough": false, + "gtk-layer-shell": true, + "height": 0, + "modules-left": [ + "clock", + "cpu", + "memory", + "hyprland/workspaces" + ], + "modules-center": ["hyprland/window"], + "modules-right": [ + "tray", + "network", + "custom/dualsense", + "pulseaudio", + "pulseaudio#microphone", + "custom/powerMenu" + ], + "hyprland/window": { + "format": "{}" + }, + "tray": { + "icon-size": 14, + "spacing": 8 + }, + "custom/dualsense": { + "tooltip": false, + "return-type": "json", + "exec": "$HOME/.config/waybar/dualsense-notifier.sh", + "on-click": "dualsensectl power-off" + }, + "custom/powerMenu": { + "format": "⏻", + "on-click": "rofi -show p -modi p:rofi-power-menu -theme ~/.config/rofi/themes/power.rasi" + }, + "network": { + "format-disconnected": " Net", + "format-wifi": "{icon} {essid}", + "format-ethernet": " Wired", + "tooltip-format-ethernet": "Ethernet\nInterface: {ifname}\nIP: {ipaddr}\nUp/Down (bps): {bandwidthUpBits}/{bandwidthDownBits}", + "tooltip-format-wifi": "Wi-Fi\nSSID: {essid}\nIP: {ipaddr}\nSignal strength: {signalStrength}%\nUp/Down (bps): {bandwidthUpBits}/{bandwidthDownBits}\nFrequency: {frequency}GHz", + "tooltip-format-disconnected": "Networking\n{ifname} disconnected", + "on-click": "terminator -x nmtui", + "format-icons": ["", "", "", ""] + }, + "clock": { + "format": "{:%a, %d.%m %H:%M:%S}", + "tooltip-format": "Calendar\n{calendar}", + "interval": 1 + }, + "hyprland/workspaces": { + "disable-scroll": true, + "all-outputs": true, + "on-click": "activate", + "format": "{icon}" + }, + "cpu": { + "tooltip-format": "CPU\nTotal: {usage}", + "format": " {usage}", + "interval": 5 + }, + "memory": { + "format": " {percentage}", + "interval": 5 + }, + "pulseaudio": { + "format": "{icon} {volume}", + "tooltip": true, + "format-muted": " Off", + "on-click": "pamixer -t", + "on-scroll-up": "pamixer -i 5", + "on-scroll-down": "pamixer -d 5", + "scroll-step": 5, + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "🏎", + "default": ["", "", ""] + } + }, + "pulseaudio#microphone": { + "format": "{format_source}", + "format-source": " {volume}", + "format-source-muted": " 0", + "on-click": "pamixer --default-source -t", + "on-scroll-up": "pamixer --default-source -i 5", + "on-scroll-down": "pamixer --default-source -d 5", + "scroll-step": 5 + } +} diff --git a/pc/configs/waybar/default-style.css b/pc/configs/waybar/default-style.css new file mode 100644 index 0000000..23a5fc8 --- /dev/null +++ b/pc/configs/waybar/default-style.css @@ -0,0 +1,117 @@ +* { + border: none; + border-radius: 0; + font-family: Cartograph CF Nerd Font, monospace; + font-weight: bold; + font-size: 13px; + min-height: 0; + margin-left: 3px; + margin-right: 3px; +} + +window#waybar { + background: rgba(0, 0, 0, 0.8); + color: #cdd6f4; +} + +tooltip { + background: #1e1e2e; + border-radius: 10px; + border-width: 2px; + border-style: solid; + border-color: #11111b; +} + +#workspaces button { + padding: 3px; + color: #313244; + margin-right: 5px; +} + +#workspaces button.active { + color: #a6adc8; +} + +#workspaces button.focused { + color: #a6adc8; + background: #eba0ac; + border-radius: 10px; +} + +#workspaces button.urgent { + color: #11111b; + background: #a6e3a1; + border-radius: 10px; +} + +#workspaces button:hover { + background: #11111b; + color: #cdd6f4; + border-radius: 10px; +} + +#workspaces { + background: #1e1e2e; + border-radius: 10px; + margin-left: 10px; + padding-right: 0px; + padding-left: 5px; +} + +#window, +#clock, +#custom-powerMenu, +#pulseaudio, +#memory, +#tray, +#custom-dualsense, +#network, +#workspaces, +#cpu { + background: #000024; + padding: 4px 12px; + margin: 3px 2px; + margin-top: 9px; + border: 1px solid #181825; + border-radius: 10px; +} + +#tray { + border-radius: 10px; + margin-right: 10px; +} + +#cpu { + margin-right: 0; + border-radius: 10px 0px 0px 10px; + background-color: #222244; +} + +#memory { + color: #89b4fa; + margin-left: 0; + border-radius: 0px 10px 10px 0px; + background-color: #222244; +} + +#window { + border-radius: 10px; + margin-left: 60px; + margin-right: 60px; +} + +#clock { + color: #a6f7ad; +} + +#pulseaudio { + color: #89b4fa; + border-left: 0px; + border-right: 0px; +} + +#pulseaudio.microphone { + color: #a6f7ad; + border-left: 0px; + border-right: 0px; +} diff --git a/pc/configs/waybar/dualsense-notifier.sh b/pc/configs/waybar/dualsense-notifier.sh new file mode 100755 index 0000000..8007849 --- /dev/null +++ b/pc/configs/waybar/dualsense-notifier.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +notify_id=-1 +icon="/usr/share/icons/breeze-dark/devices/64/input-gamepad.svg" + +dev=$(echo $DS_DEV | tr '[:lower:]' '[:upper:]') + +case "$1" in +add) + notify_id=$(notify-desktop -r $notify_id -i $icon "$dev" "Controller connected") + while true; do + class="" + battery=$(dualsensectl battery 2> /dev/null) + perc=$(echo $battery | cut -d' ' -f1) + state=$(echo $perc | cut -d' ' -f2) + if [ -z "$perc" -o -z "$state" ]; then + exit; + fi + if [ $perc -lt 15 -a "$state" != "charging" ]; then + notify_id=$(notify-desktop -r $notify_id -i $icon "$dev" "Low battery ${perc}%") + fi + echo "{\"class\": \"$class\", \"text\": \" ${perc}%\"}" + sleep 5m + done + ;; +remove) + notify_id=$(notify-desktop -r $notify_id -i $icon "$dev" "Controller disconnected") + echo "{\"text\": \"\"}" + ;; +*) + echo "{\"text\": \"\"}" + exec dualsensectl monitor add "${BASH_SOURCE[0]} add" remove "${BASH_SOURCE[0]} remove" + ;; +esac \ No newline at end of file diff --git a/pc/configs/waybar/mclaren-style.css b/pc/configs/waybar/mclaren-style.css new file mode 100644 index 0000000..411c2c3 --- /dev/null +++ b/pc/configs/waybar/mclaren-style.css @@ -0,0 +1,112 @@ +* { + border: none; + border-radius: 0; + font-family: Cartograph CF Nerd Font, monospace; + font-weight: bold; + font-size: 13px; + min-height: 0; + margin-left: 3px; + margin-right: 3px; +} + +window#waybar { + background: rgba(0, 0, 0, 0); + color: #cc5c00; +} + +tooltip { + background: black; + border-radius: 10px; + border-width: 2px; + border-style: solid; + border-color: #cc5c00; +} + +#workspaces button { + padding: 3px; + color: #a79f9d; + margin-right: 5px; +} + +#workspaces button.active { + color: white; +} + +#workspaces button.focused { + color: white; + background: #cc5c00; + border-radius: 10px; +} + +#workspaces button.urgent { + color: white; + background: #cc5c00; + border-radius: 10px; +} + +#workspaces button:hover { + background: white; + color: #cc5c00; + border-radius: 10px; +} + +#workspaces { + background: black; + border-radius: 10px; + margin-left: 10px; + padding-right: 0px; + padding-left: 5px; +} + +#window, +#clock, +#custom-powerMenu, +#pulseaudio, +#memory, +#tray, +#custom-dualsense, +#network, +#workspaces, +#cpu { + background: black; + padding: 4px 12px; + margin: 3px 2px; + margin-top: 9px; + border: 1px solid rgb(204, 92, 0); + border-radius: 10px; +} + +#tray { + border-radius: 10px; + margin-right: 10px; +} + +#cpu { + margin-right: 0; + border-radius: 10px 0px 0px 10px; + background-color: #010006; +} + +#memory { + margin-left: 0; + border-radius: 0px 10px 10px 0px; + background-color: #010006; +} + +#window { + border-radius: 10px; + margin-left: 60px; + margin-right: 60px; +} + +#clock { + color: #009e58; +} + +#pulseaudio { + color: #9b1603; +} + +#pulseaudio.microphone { + color: rgb(167, 159, 157); +} diff --git a/pc/configs/waybar/style.css b/pc/configs/waybar/style.css new file mode 100755 index 0000000..bad3d70 --- /dev/null +++ b/pc/configs/waybar/style.css @@ -0,0 +1,113 @@ +* { + border: none; + border-radius: 0; + font-family: 'FluentSystemIcons-Regular,Comfortaa', monospace; + font-weight: bold; + font-size: 13px; + min-height: 0; + margin-left: 3px; + margin-right: 3px; +} + +window#waybar { + background: rgba(0, 0, 0, 0); + color: #cc5c00; +} + +tooltip { + background: black; + border-radius: 10px; + border-width: 2px; + border-style: solid; + border-color: #cc5c00; +} + +#workspaces button { + padding: 3px; + color: #a79f9d; + margin-right: 5px; +} + +#workspaces button.active { + color: white; +} + +#workspaces button.focused { + color: white; + background: #cc5c00; + border-radius: 10px; +} + +#workspaces button.urgent { + color: white; + background: #cc5c00; + border-radius: 10px; +} + +#workspaces button:hover { + background: white; + color: #cc5c00; + border-radius: 10px; +} + +#workspaces { + background: black; + border-radius: 10px; + margin-left: 10px; + padding-right: 0px; + padding-left: 5px; +} + +#window, +#clock, +#custom-powerMenu, +#pulseaudio, +#memory, +#tray, +#custom-dualsense, +#network, +#workspaces, +#cpu { + background: black; + padding: 4px 12px; + margin: 3px 2px; + margin-top: 9px; + border: 1px solid rgb(204, 92, 0); + border-radius: 10px; +} + +#tray { + border-radius: 10px; + margin-right: 10px; +} + +#cpu { + margin-right: 0; + border-radius: 10px 0px 0px 10px; + background-color: #010006; +} + +#memory { + margin-left: 0; + border-radius: 0px 10px 10px 0px; + background-color: #010006; +} + +#window { + border-radius: 10px; + margin-left: 60px; + margin-right: 60px; +} + +#clock { + color: #009e58; + min-width: 125px; +} + +#pulseaudio { + color: #9b1603; +} + +#pulseaudio.microphone { + color: rgb(167, 159, 157); +} diff --git a/pc/docker/daemon.json b/pc/docker/daemon.json new file mode 100644 index 0000000..581de36 --- /dev/null +++ b/pc/docker/daemon.json @@ -0,0 +1,3 @@ +{ + "data-root": "/mnt/storage/docker" +} diff --git a/pc/environment b/pc/environment new file mode 100644 index 0000000..23ce03f --- /dev/null +++ b/pc/environment @@ -0,0 +1,16 @@ +# +# This file is parsed by pam_env module +# +# Syntax: simple "KEY=VAL" pairs on separate lines +# + +QT_QPA_PLATFORMTHEME=qt5ct +QT_STYLE_OVERRIDE=kvantum +GCM_CREDENTIAL_STORE=secretservice +VKD3D_CONFIG=dxr11,dxr +RADV_PERFTEST_RT=1 +ANDROID_HOME=/home/janis/Android/Sdk +QT_QPA_PLATFORM=wayland +JELLYFIN_WEB_DIR=/usr/share/jellyfin-web +GTK_THEME=Material-Black-Blueberry +EDITOR=nvim diff --git a/pc/grub b/pc/grub new file mode 100644 index 0000000..25e09c8 --- /dev/null +++ b/pc/grub @@ -0,0 +1,63 @@ +# GRUB boot loader configuration + +GRUB_DEFAULT=0 +GRUB_TIMEOUT=5 +GRUB_DISTRIBUTOR="Arch" +GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 quiet splash" +GRUB_CMDLINE_LINUX="" + +# Preload both GPT and MBR modules so that they are not missed +GRUB_PRELOAD_MODULES="part_gpt part_msdos" + +# Uncomment to enable booting from LUKS encrypted devices +#GRUB_ENABLE_CRYPTODISK=y + +# Set to 'countdown' or 'hidden' to change timeout behavior, +# press ESC key to display menu. +GRUB_TIMEOUT_STYLE=menu + +# Uncomment to use basic console +GRUB_TERMINAL_INPUT=console + +# Uncomment to disable graphical terminal +#GRUB_TERMINAL_OUTPUT=console + +# The resolution used on graphical terminal +# note that you can use only modes which your graphic card supports via VBE +# you can see them in real GRUB with the command `videoinfo' +GRUB_GFXMODE=1920x1080 + +# Uncomment to allow the kernel use the same resolution used by grub +GRUB_GFXPAYLOAD_LINUX=keep + +# Uncomment if you want GRUB to pass to the Linux kernel the old parameter +# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx" +#GRUB_DISABLE_LINUX_UUID=true + +# Uncomment to disable generation of recovery mode menu entries +GRUB_DISABLE_RECOVERY=true + +# Uncomment and set to the desired menu colors. Used by normal and wallpaper +# modes only. Entries specified as foreground/background. +#GRUB_COLOR_NORMAL="light-blue/black" +#GRUB_COLOR_HIGHLIGHT="light-cyan/blue" + +# Uncomment one of them for the gfx desired, a image background or a gfxtheme +#GRUB_BACKGROUND="/path/to/wallpaper" + +# Uncomment to get a beep at GRUB start +#GRUB_INIT_TUNE="480 440 1" + +# Uncomment to make GRUB remember the last selection. This requires +# setting 'GRUB_DEFAULT=saved' above. +#GRUB_SAVEDEFAULT=true + +# Uncomment to disable submenus in boot menu +#GRUB_DISABLE_SUBMENU=y + +# Probing for other operating systems is disabled for security reasons. Read +# documentation on GRUB_DISABLE_OS_PROBER, if still want to enable this +# functionality install os-prober and uncomment to detect and include other +# operating systems. +GRUB_DISABLE_OS_PROBER=false +GRUB_THEME="/usr/share/grub/themes/monterey-grub-theme/theme.txt" diff --git a/pc/installedPackages.txt b/pc/installedPackages.txt new file mode 100644 index 0000000..74c5508 --- /dev/null +++ b/pc/installedPackages.txt @@ -0,0 +1,2077 @@ +7zip +a52dec +aalib +abseil-cpp +accounts-qml-module +accountsservice +acl +adobe-source-code-pro-fonts +adwaita-cursors +adwaita-icon-theme +adwaita-icon-theme-legacy +alembic +alsa-card-profiles +alsa-lib +alsa-plugins +alsa-topology-conf +alsa-ucm-conf +android-studio +android-udev +aom +appmenu-glib-translator-git-debug +appstream +appstream-glib +aquamarine +archlinux-keyring +argon2 +aria2 +aribb24 +ark +at-spi2-core +atkmm +attica +attica5 +attr +audit +augeas +autoconf +autoconf-archive +autojump +automake +avahi +ayatana-ido +aylurs-gtk-shell-git-debug +babl +baloo +base +base-devel +bash +bash-language-server +bashtop +betaflight-configurator-bin +biber +bind +binutils +bison +blas +blas64-openblas +blender +blender-benchmark +blosc +blueman +bluez +bluez-libs +boost +boost-libs +botan +botan2 +brave-bin +breeze-icons +bridge-utils +brotli +btrfs-progs +bubblewrap +bzip2 +c-ares +ca-certificates +ca-certificates-mozilla +ca-certificates-utils +cairo +cairomm +cairomm-1.16 +calligra +cantarell-fonts +capstone +cauchy +cblas +cdparanoia +cfitsio +chromaprint +chrono-date +cider +cifs-utils +cjson +clamav +clang +clang15 +clang15-debug +cmake +cmark +colord +colord-sane +comgr +compiler-rt +compiler-rt15 +composer +containerd +convertlit +corectrl +coreutils +cpio +cppdap +cpupower +cpupower-gui +cracklib +cryptsetup +cups +cups-filters +curl +cython +dav1d +db +db5.3 +dbus +dbus-broker +dbus-broker-units +dbus-glib +dconf +debootstrap +debugedit +dee +default-cursors +desktop-file-utils +device-mapper +dhcpcd +diffutils +discount +distro-info +distro-info-data +djvulibre +dkms +dnsmasq +dnssec-anchors +docbook-xml +docbook-xsl +docker +docker-compose +dos2unix +dosfstools +dotnet-host +dotnet-runtime +dotnet-sdk +dotnet-targeting-pack +double-conversion +doxygen +draco +dtc +dualsensectl +dualsensectl-debug +duktape +dunst +dvisvgm +e2fsprogs +easytax-ag-2022 +easytax-ag-2023 +easytax-ag-2024 +ebook-tools +editorconfig-core-c +edk2-ovmf +efibootmgr +efivar +electron34 +elementary-icon-theme +embree +enchant +epiphany +evince +exfatprogs +exiv2 +exo +expat +extra-cmake-modules +f2fs-tools +faac +faad2 +fakeroot +fcitx5 +fd +ffcall +ffmpeg +ffmpeg4.4 +ffmpegthumbnailer +fftw +file +filesystem +filezilla +findutils +fish +flac +flex +fluidsynth +fmt +fontconfig +foomatic-db +foomatic-db-engine +foomatic-db-ppds +freeglut +freetype2 +frei0r-plugins +fribidi +fuse-common +fuse2 +fuse3 +gamemode +gamescope +garcon +gawk +gc +gcc +gcc-libs +gcr +gcr-4 +gd +gdb +gdb-common +gdbm +gdk-pixbuf2 +gegl +geoclue +geocode-glib-2 +geocode-glib-common +gettext +gflags +ghc-libs +ghex +ghostscript +giflib +gimp +girara +git +git-credential-manager-bin +gjs +glances +glew +glfw +glib-networking +glib2 +glib2-devel +glib2-docs +glibc +glibmm +glibmm-2.68 +glm +glslang +glu +gmp +gnome-characters +gnome-common +gnome-desktop +gnome-desktop-4 +gnome-desktop-common +gnome-disk-utility +gnome-font-viewer +gnome-keyring +gnome-settings-daemon +gnome-themes-extra +gnu-free-fonts +gnulib-l10n +gnupg +gnutls +go +gobject-introspection +gobject-introspection-runtime +google-glog +gparted +gperftools +gpgme +gpm +gptfdisk +gradle +graphene +graphicsmagick +graphite +graphviz +grep +grim +grimblast-git +groff +grub +gsettings-desktop-schemas +gsettings-system-schemas +gsfonts +gsl +gsm +gspell +gssdp +gst-libav +gst-plugin-pipewire +gst-plugins-bad +gst-plugins-bad-libs +gst-plugins-base +gst-plugins-base-libs +gst-plugins-good +gstreamer +gtest +gtk-doc +gtk-layer-shell +gtk-update-icon-cache +gtk-vnc +gtk2 +gtk3 +gtk4 +gtkmm-4.0 +gtkmm3 +gtksourceview4 +gts +guile +gupnp +gupnp-igd +gvfs +gwenview +gzip +handbrake +harfbuzz +harfbuzz-icu +haskell-aeson +haskell-aeson-pretty +haskell-ansi-terminal +haskell-ansi-terminal-types +haskell-ansi-wl-pprint +haskell-appar +haskell-asn1-encoding +haskell-asn1-parse +haskell-asn1-types +haskell-assoc +haskell-async +haskell-attoparsec +haskell-attoparsec-aeson +haskell-attoparsec-iso8601 +haskell-auto-update +haskell-base-compat +haskell-base-compat-batteries +haskell-base-orphans +haskell-base-unicode-symbols +haskell-base16-bytestring +haskell-base64-bytestring +haskell-basement +haskell-bifunctors +haskell-bitvec +haskell-blaze-builder +haskell-blaze-html +haskell-blaze-markup +haskell-boring +haskell-bsb-http-chunked +haskell-byteorder +haskell-call-stack +haskell-case-insensitive +haskell-cassava +haskell-cereal +haskell-citeproc +haskell-cmdargs +haskell-colour +haskell-commonmark +haskell-commonmark-extensions +haskell-commonmark-pandoc +haskell-comonad +haskell-conduit +haskell-conduit-extra +haskell-constraints +haskell-contravariant +haskell-cookie +haskell-crypton +haskell-crypton-connection +haskell-crypton-x509 +haskell-crypton-x509-store +haskell-crypton-x509-system +haskell-crypton-x509-validation +haskell-data-array-byte +haskell-data-default +haskell-data-default-class +haskell-data-default-instances-containers +haskell-data-default-instances-dlist +haskell-data-default-instances-old-locale +haskell-data-fix +haskell-dec +haskell-digest +haskell-distributive +haskell-djot +haskell-dlist +haskell-doclayout +haskell-doctemplates +haskell-easy-file +haskell-emojis +haskell-erf +haskell-fast-logger +haskell-file-embed +haskell-foldable1-classes-compat +haskell-generically +haskell-ghc-bignum-orphans +haskell-glob +haskell-gridtables +haskell-haddock-library +haskell-hashable +haskell-hourglass +haskell-hslua +haskell-hslua-aeson +haskell-hslua-classes +haskell-hslua-core +haskell-hslua-list +haskell-hslua-marshalling +haskell-hslua-module-doclayout +haskell-hslua-module-path +haskell-hslua-module-system +haskell-hslua-module-text +haskell-hslua-module-version +haskell-hslua-module-zip +haskell-hslua-objectorientation +haskell-hslua-packaging +haskell-hslua-repl +haskell-hslua-typing +haskell-http-api-data +haskell-http-client +haskell-http-client-tls +haskell-http-date +haskell-http-media +haskell-http-types +haskell-http2 +haskell-hunit +haskell-indexed-traversable +haskell-indexed-traversable-instances +haskell-integer-logarithms +haskell-iproute +haskell-ipynb +haskell-isocline +haskell-jira-wiki-markup +haskell-juicypixels +haskell-lexer +haskell-libyaml +haskell-lpeg +haskell-lua +haskell-memory +haskell-mime-types +haskell-mmorph +haskell-monad-control +haskell-mono-traversable +haskell-network +haskell-network-byte-order +haskell-network-uri +haskell-old-locale +haskell-old-time +haskell-onetuple +haskell-only +haskell-optparse-applicative +haskell-ordered-containers +haskell-os-string +haskell-pandoc +haskell-pandoc-lua-engine +haskell-pandoc-lua-marshal +haskell-pandoc-server +haskell-pandoc-types +haskell-pem +haskell-pretty-show +haskell-prettyprinter +haskell-primitive +haskell-psqueues +haskell-quickcheck +haskell-random +haskell-recv +haskell-regex-base +haskell-regex-tdfa +haskell-resourcet +haskell-safe +haskell-safe-exceptions +haskell-scientific +haskell-semialign +haskell-semigroupoids +haskell-servant +haskell-servant-server +haskell-sha +haskell-simple-sendfile +haskell-singleton-bool +haskell-skylighting +haskell-skylighting-core +haskell-skylighting-format-ansi +haskell-skylighting-format-blaze-html +haskell-skylighting-format-context +haskell-skylighting-format-latex +haskell-socks +haskell-some +haskell-sop-core +haskell-split +haskell-splitmix +haskell-statevar +haskell-streaming-commons +haskell-strict +haskell-syb +haskell-tagged +haskell-tagsoup +haskell-temporary +haskell-texmath +haskell-text-conversions +haskell-text-icu +haskell-text-short +haskell-th-abstraction +haskell-th-compat +haskell-th-lift +haskell-th-lift-instances +haskell-these +haskell-time-compat +haskell-time-manager +haskell-tls +haskell-toml-parser +haskell-transformers-base +haskell-transformers-compat +haskell-type-equality +haskell-typed-process +haskell-typst +haskell-typst-symbols +haskell-unicode-collation +haskell-unicode-data +haskell-unicode-transforms +haskell-uniplate +haskell-unix-compat +haskell-unix-time +haskell-unliftio +haskell-unliftio-core +haskell-unordered-containers +haskell-utf8-string +haskell-uuid-types +haskell-vault +haskell-vector +haskell-vector-algorithms +haskell-vector-stream +haskell-wai +haskell-wai-app-static +haskell-wai-cors +haskell-wai-extra +haskell-wai-logger +haskell-warp +haskell-witherable +haskell-word8 +haskell-xml +haskell-xml-conduit +haskell-xml-types +haskell-yaml +haskell-zip-archive +haskell-zlib +hdf5 +heroic-games-launcher-bin +hicolor-icon-theme +hidapi +highway +hip-runtime-amd +hipblas +hivex +hsa-rocr +hsakmt-roct +hslua-cli +http-parser +hugo +hunspell +hwdata +hwinfo +hwloc +hyphen +hyprcursor +hyprevents-git +hyprfreeze-git +hyprgraphics +hypridle +hyprland +hyprland-qt-support +hyprland-qtutils +hyprland-qtutils-debug +hyprlang +hyprlock +hyprprop-git +hyprutils +hyprwayland-scanner +iana-etc +ibus +icu +ifuse +ijs +imagemagick +imath +imlib2 +iniparser +inkscape +input-remapper-git +intel-oneapi-common +intel-oneapi-compiler-dpcpp-cpp-runtime-libs +intel-oneapi-compiler-shared-runtime-libs +intel-oneapi-openmp +intel-oneapi-tbb +intel-oneapi-tcm +inter-font +intltool +iproute2 +iptables-nft +iputils +iso-codes +itstool +jansson +jasper +java-environment-common +java-hamcrest +java-runtime-common +jbig2dec +jbigkit +jdk-openjdk +jdk21-openjdk +jdtls +jemalloc +jfsutils +jq +js115 +js128 +json-c +json-glib +jsoncpp +jstest-gtk-git +julia +junit +kaccounts-integration +kactivities5 +karchive +karchive5 +kate +kauth +kauth5 +kbd +kbookmarks +kbookmarks5 +kcmutils +kcmutils5 +kcodecs +kcodecs5 +kcolorpicker +kcolorpicker-qt5 +kcolorscheme +kcompletion +kcompletion5 +kconfig +kconfig5 +kconfigwidgets +kconfigwidgets5 +kcontacts5 +kcoreaddons +kcoreaddons5 +kcrash +kcrash5 +kdbusaddons +kdbusaddons5 +kdeclarative +kdeclarative5 +kded5 +kdelibs4support +kdelibs4support-debug +kdesignerplugin +kdesignerplugin-debug +kdiagram +kdiagram5 +kdoctools5 +kemoticons +kemoticons-debug +keyutils +kfilemetadata +kfilemetadata5 +kglobalaccel +kglobalaccel5 +kguiaddons +kguiaddons5 +khtml +ki18n +ki18n5 +kiconthemes +kiconthemes5 +kidletime +kidletime5 +kimageannotator +kimageannotator-qt5 +kinit +kio +kio5 +kirigami +kirigami-addons +kirigami2 +kitemmodels +kitemmodels5 +kitemviews +kitemviews5 +kitty +kitty-shell-integration +kitty-terminfo +kjobwidgets +kjobwidgets5 +kjs +kmod +knewstuff +knewstuff5 +knock-bin +knock-bin-debug +knotifications +knotifications5 +knotifyconfig +knotifyconfig5 +kotlin +kpackage +kpackage5 +kparts +kparts5 +kpty +kpty5 +kquickcharts +kquickimageeditor +kquickimageeditor5 +krb5 +kross +ksanecore +kservice +kservice5 +kstatusnotifieritem +ksvg +ksystemstats +ktexteditor +ktexteditor5 +ktextwidgets +ktextwidgets5 +ktorrent +kunitconversion5 +kuserfeedback +kvantum +kvantum-qt5 +kwallet +kwallet5 +kwidgetsaddons +kwidgetsaddons5 +kwindowsystem +kwindowsystem5 +kxmlgui +kxmlgui5 +l-smash +ladspa +lame +lapack +lcms2 +ldb +ldns +leancrypto +lensfun +leptonica +less +level-zero-loader +lib2geom +lib32-acl +lib32-alsa-lib +lib32-alsa-plugins +lib32-brotli +lib32-bzip2 +lib32-curl +lib32-dbus +lib32-e2fsprogs +lib32-expat +lib32-fontconfig +lib32-freetype2 +lib32-gcc-libs +lib32-gettext +lib32-glib2 +lib32-glibc +lib32-harfbuzz +lib32-icu +lib32-json-c +lib32-keyutils +lib32-krb5 +lib32-libcap +lib32-libdrm +lib32-libelf +lib32-libffi +lib32-libgcrypt +lib32-libglvnd +lib32-libgpg-error +lib32-libidn2 +lib32-libldap +lib32-libnghttp2 +lib32-libnghttp3 +lib32-libnl +lib32-libnsl +lib32-libpcap +lib32-libpciaccess +lib32-libpng +lib32-libpsl +lib32-libssh2 +lib32-libtasn1 +lib32-libtirpc +lib32-libunistring +lib32-libunwind +lib32-libx11 +lib32-libxau +lib32-libxcb +lib32-libxcrypt +lib32-libxcrypt-compat +lib32-libxcursor +lib32-libxdamage +lib32-libxdmcp +lib32-libxext +lib32-libxfixes +lib32-libxi +lib32-libxkbcommon +lib32-libxml2 +lib32-libxrandr +lib32-libxrender +lib32-libxshmfence +lib32-libxss +lib32-libxxf86vm +lib32-llvm-libs +lib32-lm_sensors +lib32-mesa +lib32-ncurses +lib32-nspr +lib32-nss +lib32-openssl +lib32-p11-kit +lib32-pam +lib32-pcre2 +lib32-spirv-tools +lib32-sqlite +lib32-systemd +lib32-util-linux +lib32-vulkan-icd-loader +lib32-vulkan-radeon +lib32-wayland +lib32-xcb-util-keysyms +lib32-xz +lib32-zlib +lib32-zstd +libaccounts-glib +libaccounts-qt +libadwaita +libaec +libaio +libappindicator-gtk3 +libarchive +libass +libassuan +libastal-4-git-debug +libastal-apps-git-debug +libastal-auth-git-debug +libastal-battery-git-debug +libastal-bluetooth-git-debug +libastal-cava-git-debug +libastal-git-debug +libastal-greetd-git-debug +libastal-hyprland-git-debug +libastal-io-git-debug +libastal-mpris-git-debug +libastal-network-git-debug +libastal-notifd-git-debug +libastal-powerprofiles-git-debug +libastal-river-git-debug +libastal-tray-git-debug +libastal-wireplumber-git-debug +libasyncns +libatasmart +libavc1394 +libavif +libavtp +libayatana-appindicator +libayatana-indicator +libb2 +libblastrampoline +libblockdev +libblockdev-crypto +libblockdev-fs +libblockdev-loop +libblockdev-mdraid +libblockdev-nvme +libblockdev-part +libblockdev-swap +libbluray +libbpf +libbs2b +libbsd +libburn +libbytesize +libcaca +libcacard +libcamera +libcamera-ipa +libcanberra +libcap +libcap-ng +libcava-debug +libcdio +libcdio-paranoia +libcdr +libclc +libcloudproviders +libcolord +libconfig +libcups +libcupsfilters +libdaemon +libdatachannel +libdatrie +libdbusmenu-glib +libdbusmenu-gtk3 +libdbusmenu-qt5 +libdc1394 +libdca +libde265 +libdecor +libdeflate +libdiscid +libdisplay-info +libdovi +libdrm +libdv +libdvbpsi +libdvdcss +libdvdnav +libdvdread +libebml +libebur128 +libedit +libei +libelf +libepoxy +libev +libevdev +libevent +libewf +libexif +libfabric +libfdk-aac +libffi +libfilezilla +libfontenc +libfreeaptx +libgcrypt +libgexiv2 +libgirepository +libgit2 +libglvnd +libgme +libgnome-keyring +libgovirt +libgpg-error +libgphoto2 +libgtop +libgudev +libguestfs +libgusb +libgweather-4 +libgxps +libhandy +libharu +libheif +libibus +libical +libice +libidn +libidn2 +libiec61883 +libieee1284 +libimagequant +libimobiledevice +libimobiledevice-glue +libinih +libinput +libinstpatch +libisl +libisoburn +libisofs +libjpeg-turbo +libjuice +libjxl +libkdcraw +libkdcraw5 +libkexiv2 +libkeybinder3 +libksba +libksysguard +libktorrent +liblc3 +libldac +libldap +libldm +libliftoff +liblqr +liblrdf +libltc +libluv +libmad +libmanette +libmatroska +libmaxminddb +libmd +libmediainfo +libmfx +libmicrodns +libmicrohttpd +libmm-glib +libmms +libmng +libmnl +libmodplug +libmpc +libmpcdec +libmpdclient +libmpeg2 +libmspack +libmtp +libmypaint +libmysofa +libnbd +libndp +libnet +libnetfilter_conntrack +libnewt +libnfnetlink +libnftnl +libnghttp2 +libnghttp3 +libngtcp2 +libnice +libnick +libnl +libnm +libnma +libnma-common +libnotify +libnsl +libnvme +libodfgen +libogg +libomxil-bellagio +libopenmpt +libosinfo +libp11-kit +libpaper +libpcap +libpciaccess +libpgm +libpipeline +libpipewire +libplacebo +libplasma +libplist-git +libplist-git-debug +libpng +libportal +libportal-gtk4 +libppd +libproxy +libpsl +libpulse +libpwquality +libqalculate +libraqm +libraw +libraw1394 +librest +librevenge +librewolf-bin +librewolf-bin-debug +librsvg +librsync +libsamplerate +libsasl +libsass +libseccomp +libsecret +libshout +libsigc++ +libsigc++-3.0 +libsigsegv +libslirp +libsm +libsndfile +libsodium +libsoup +libsoup3 +libsoxr +libspectre +libspiro +libspnav +libspng +libsrtp +libssh +libssh2 +libstemmer +libsynctex +libsysprof-capture +libtar +libtasn1 +libtatsu-git +libtatsu-git-debug +libteam +libtermkey +libthai +libtheora +libtiff +libtirpc +libtommath +libtool +libtraceevent +libtracefs +libunibreak +libunistring +libunity +libunwind +libupnp +liburcu +liburing +libusb +libusbmuxd +libutempter +libutf8proc +libuv +libva +libvdpau +libverto +libvirt +libvirt-glib +libvirt-python +libvisio +libvlc +libvorbis +libvpl +libvpx +libvterm +libwacom +libwbclient +libwebp +libwebsockets +libwireplumber +libwmf +libwnck3 +libwpd +libwpe +libwpg +libx11 +libx86emu +libxau +libxaw +libxcb +libxcomposite +libxcrypt +libxcrypt-compat +libxcursor +libxcvt +libxdamage +libxdg-basedir +libxdmcp +libxdp +libxext +libxfce4ui +libxfce4util +libxfce4windowing +libxfixes +libxfont2 +libxft +libxi +libxinerama +libxkbcommon +libxkbcommon-x11 +libxkbfile +libxklavier +libxml++-5.0 +libxml2 +libxmlb +libxmu +libxnvctrl +libxpm +libxpresent +libxrandr +libxrender +libxres +libxshmfence +libxslt +libxss +libxt +libxtst +libxv +libxxf86vm +libyaml +libyuv +libzen +libzip +licenses +lilv +linux-api-headers +linux-firmware +linux-firmware-whence +linux-zen +linux-zen-headers +lld +llhttp +llvm +llvm-julia-libs +llvm-libs +llvm15 +llvm15-libs +lm_sensors +lmdb +log4cplus +lrzip +lsb-release +lsof +lsscsi +lua +lua-filesystem +lua-language-server +lua-lpeg +lua51-lpeg +luajit +luarocks +lv2 +lvm2 +lxappearance +lz4 +lzo +lzop +m4 +mailcap +make +mallard-ducktype +man-db +mangohud +materialx +maven +mbedtls +mbedtls2 +md4c +mdadm +media-player-info +mediainfo +mesa +meson +minecraft-launcher +minecraft-launcher-debug +minisign +minizip +minizip-ng +mjpegtools +mkinitcpio +mkinitcpio-busybox +mlt +mobile-broadband-provider-info +mosquitto +movit +mpdecimal +mpfr +mpg123 +msgpack-c +mtdev +mtools +multipath-tools +mypaint-brushes1 +nano +nasm +ncurses +ndctl +neofetch +neon +neovim +net-snmp +netpbm +netstandard-targeting-pack +nettle +network-manager-applet +networkmanager +nextcloud-client +nftables +nilfs-utils +ninja +nm-connection-editor +nmap +node-gyp +nodejs-lts-jod +nodejs-nopt +noto-fonts +noto-fonts-emoji +npm +npth +nspr +nss +ntfs-3g +numactl +nvm +nwjs-bin +nwjs-bin-debug +obs-studio +ocl-icd +okular +ollama +ollama-rocm +onetbb +oniguruma +openal +openblas64 +opencl-clover-mesa +opencl-headers +opencollada +opencolorio +opencore-amr +openexr +openh264 +openimagedenoise +openimageio +openjpeg2 +openlibm +openmp +openmpi +openpgl +openpmix +openrazer-daemon +openrazer-driver-dkms +openresolv +openrgb +openshadinglanguage +openssh +openssl +opensubdiv +openucx +openvdb +openxr +opus +orc +os-prober +osinfo-db +otf-firamono-nerd +otf-sora +p11-kit +pacman +pacman-contrib +pacman-mirrorlist +pahole +pam +pambase +pamixer +pandoc-cli +pango +pangomm +pangomm-2.48 +parabolic-debug +parabolic-gtk +parted +patch +pavucontrol +pciutils +pcre +pcre2 +pcsclite +perl +perl-alien-build +perl-alien-libxml2 +perl-autovivification +perl-b-hooks-endofscope +perl-business-isbn +perl-business-isbn-data +perl-business-ismn +perl-business-issn +perl-capture-tiny +perl-class-accessor +perl-class-data-inheritable +perl-class-inspector +perl-class-load +perl-class-singleton +perl-clone +perl-data-compare +perl-data-dump +perl-data-optlist +perl-data-uniqid +perl-datetime +perl-datetime-calendar-julian +perl-datetime-format-builder +perl-datetime-format-strptime +perl-datetime-locale +perl-datetime-timezone +perl-dbi +perl-devel-stacktrace +perl-dist-checkconflicts +perl-encode-locale +perl-error +perl-eval-closure +perl-exception-class +perl-exporter-tiny +perl-ffi-checklib +perl-file-chdir +perl-file-find-rule +perl-file-listing +perl-file-sharedir +perl-file-sharedir-install +perl-file-slurp-tiny +perl-file-slurper +perl-file-which +perl-html-parser +perl-html-tagset +perl-http-cookiejar +perl-http-cookies +perl-http-daemon +perl-http-date +perl-http-message +perl-http-negotiate +perl-io-html +perl-io-socket-ssl +perl-io-string +perl-ipc-run3 +perl-libintl-perl +perl-libwww +perl-lingua-translit +perl-list-allutils +perl-list-moreutils +perl-list-moreutils-xs +perl-list-someutils +perl-list-utilsby +perl-log-log4perl +perl-lwp-mediatypes +perl-lwp-protocol-https +perl-mailtools +perl-math-round +perl-mime-charset +perl-module-implementation +perl-module-runtime +perl-mozilla-ca +perl-mro-compat +perl-namespace-autoclean +perl-namespace-clean +perl-net-http +perl-net-ssleay +perl-number-compare +perl-package-deprecationmanager +perl-package-stash +perl-package-stash-xs +perl-params-util +perl-params-validate +perl-params-validationcompiler +perl-parse-recdescent +perl-path-tiny +perl-perlio-utf8-strict +perl-regexp-common +perl-role-tiny +perl-sort-key +perl-specio +perl-sub-exporter +perl-sub-exporter-progressive +perl-sub-install +perl-test-fatal +perl-text-bibtex +perl-text-csv +perl-text-glob +perl-text-roman +perl-tie-cycle +perl-timedate +perl-try-tiny +perl-unicode-linebreak +perl-uri +perl-variable-magic +perl-www-robotrules +perl-xml-libxml +perl-xml-libxml-simple +perl-xml-libxslt +perl-xml-namespacesupport +perl-xml-parser +perl-xml-sax +perl-xml-sax-base +perl-xml-writer +phodav +phonon-qt5 +phonon-qt5-vlc +phonon-qt6 +phonon-qt6-vlc +php +picard +pinentry +pipewire +pipewire-alsa +pipewire-audio +pipewire-jack +pipewire-pulse +pipewire-session-manager +pixman +pkgconf +plasma-activities +plasma-systemmonitor +playerctl +plymouth +polkit +polkit-gnome +polkit-kde-agent +polkit-qt5 +polkit-qt6 +polychromatic +poppler +poppler-data +poppler-glib +poppler-qt5 +poppler-qt6 +popt +portaudio +portmaster-stub-bin +potrace +power-profiles-daemon +powertop +prettier +print-manager +prismlauncher +procps-ng +protonup-git +protonup-qt +prrte +psensor +psmisc +ptex +pugixml +purpose +purpose5 +pybind11 +pyright +pyside2 +pyside6 +pystring +python +python-annotated-types +python-anyio +python-appdirs +python-attrs +python-autocommand +python-beautifulsoup4 +python-brotli +python-build +python-cachecontrol +python-cachetools +python-cairo +python-certifi +python-cffi +python-chardet +python-charset-normalizer +python-click +python-colorama +python-colour +python-configobj +python-contourpy +python-coverage +python-cryptography +python-cssselect +python-cycler +python-daemonize +python-dateutil +python-dbus +python-defusedxml +python-discid +python-distlib +python-distro +python-distutils-extra +python-editables +python-evdev +python-fasteners +python-fastjsonschema +python-filelock +python-fonttools +python-gobject +python-greenlet +python-h11 +python-hatch +python-hatchling +python-html2text +python-httpcore +python-httpx +python-hyperlink +python-idna +python-inflect +python-iniconfig +python-inputs +python-installer +python-jaraco.classes +python-jaraco.collections +python-jaraco.context +python-jaraco.functools +python-jaraco.text +python-jeepney +python-jinja +python-keyring +python-kiwisolver +python-lark-parser +python-lockfile +python-lxml +python-mako +python-markdown +python-markdown-it-py +python-markupsafe +python-matplotlib +python-mdurl +python-mock +python-more-itertools +python-msgpack +python-mutagen +python-nose +python-numpy +python-opengl +python-openrazer +python-ordered-set +python-orjson +python-packaging +python-pathspec +python-pbr +python-pexpect +python-pillow +python-pip +python-platformdirs +python-pluggy +python-ply +python-poetry-core +python-psutil +python-ptyprocess +python-pyaml +python-pycparser +python-pycryptodomex +python-pydantic +python-pydantic-core +python-pydbus +python-pygments +python-pyjwt +python-pynvim +python-pyparsing +python-pyproject-hooks +python-pyqt5 +python-pyqt5-sip +python-pyqt5-webengine +python-pyqt6 +python-pyqt6-sip +python-pyqt6-webengine +python-pyserial +python-pytest +python-pytest-cov +python-pyudev +python-pyxattr +python-pyxdg +python-requests +python-rich +python-secretstorage +python-setproctitle +python-setuptools +python-shellingham +python-shiboken2 +python-shtab +python-six +python-sniffio +python-soupsieve +python-steam-solstice +python-termcolor +python-tomli +python-tomli-w +python-tomlkit +python-tqdm +python-trove-classifiers +python-typeguard +python-typing_extensions +python-uc-micro-py +python-ujson +python-urllib3 +python-userpath +python-uv +python-validate-pyproject +python-vdf-solstice +python-virtualenv +python-websockets +python-wheel +python-yaml +python-zstandard +qalculate-qt +qca-qt5 +qca-qt6 +qemu-base +qemu-common +qemu-img +qemu-system-x86 +qemu-system-x86-firmware +qhull +qpdf +qqc2-desktop-style +qqc2-desktop-style5 +qrencode +qt5-base +qt5-charts +qt5-declarative +qt5-doc +qt5-graphicaleffects +qt5-location +qt5-multimedia +qt5-networkauth +qt5-quickcontrols +qt5-quickcontrols2 +qt5-script +qt5-speech +qt5-svg +qt5-tools +qt5-translations +qt5-wayland +qt5-webchannel +qt5-webengine +qt5-websockets +qt5-x11extras +qt5-xmlpatterns +qt5ct +qt6-5compat +qt6-base +qt6-charts +qt6-declarative +qt6-imageformats +qt6-multimedia +qt6-multimedia-ffmpeg +qt6-networkauth +qt6-positioning +qt6-shadertools +qt6-speech +qt6-svg +qt6-tools +qt6-translations +qt6-wayland +qt6-webchannel +qt6-webengine +qt6-websockets +qt6ct +qtkeychain-qt5 +qtkeychain-qt6 +quazip-qt5 +quazip-qt6 +ragel +raptor +rav1e +re2 +readline +reflector +reiserfsprogs +rhash +ripgrep +rnnoise +rocblas +rocm-cmake +rocm-core +rocm-device-libs +rocm-hip-runtime +rocm-language-runtime +rocm-llvm +rocm-opencl-runtime +rocminfo +rocprim +rocprofiler-register +rocsolver +rocsparse +rofi +rofi-power-menu +rsync +rtkit +rtmpdump +rubberband +ruby +ruby-bundled-gems +ruby-bundler +ruby-debug +ruby-default-gems +ruby-erb +ruby-irb +ruby-matrix +ruby-minitest +ruby-net-ftp +ruby-net-imap +ruby-net-pop +ruby-net-smtp +ruby-power_assert +ruby-prime +ruby-racc +ruby-rake +ruby-rbs +ruby-rdoc +ruby-rexml +ruby-rss +ruby-stdlib +ruby-test-unit +ruby-typeprof +rubygems +runc +rustdesk +rustup +samba +sane +sassc +sbc +scdoc +scour +sdbus-cpp +sddm +sdl12-compat +sdl2-compat +sdl3 +seabios +seahorse +seatd +sed +semver +serd +serpl +shaderc +shadow +shairport-sync +shared-mime-info +shfmt +shiboken6 +shotcut +signon-kwallet-extension +signon-plugin-oauth2 +signon-ui +signond +simple-scan +skanpage +slang +sleuthkit +slurp +smartmontools +smbclient +snappy +sndio +socat +solid +solid5 +sonnet +sonnet5 +sord +sound-theme-freedesktop +soundtouch +source-highlight +spandsp +spdlog +speex +speexdsp +spice-gtk +spice-protocol +spirv-llvm-translator +spirv-tools +sqlite +squashfs-tools +sratom +srt +startup-notification +steam +strace +stripe-cli-bin +stripe-cli-bin-debug +stylua +sudo +suitesparse +supermin +supertuxkart +svt-av1 +svt-hevc +swaybg +syndication +syndication5 +syntax-highlighting +syntax-highlighting5 +sysfsutils +syslinux +systemd +systemd-libs +systemd-sysvcompat +t1lib +taglib +talloc +tar +tcl +tdb +terminator +tesseract +tesseract-data-afr +tesseract-data-osd +tevent +texinfo +texlab +texlive-basic +texlive-bibtexextra +texlive-bin +texlive-binextra +texlive-context +texlive-fontsextra +texlive-fontsrecommended +texlive-fontutils +texlive-formatsextra +texlive-games +texlive-humanities +texlive-langgerman +texlive-latex +texlive-latexextra +texlive-latexrecommended +texlive-luatex +texlive-mathscience +texlive-metapost +texlive-music +texlive-pictures +texlive-plaingeneric +texlive-pstricks +texlive-publishers +texlive-xetex +thin-provisioning-tools +threadweaver +threadweaver5 +thunar +thunderbird +tinysparql +tinyxml +tinyxml2 +tk +tldr +tomlplusplus +tpm2-tss +tree-sitter +tree-sitter-bash +tree-sitter-c +tree-sitter-cli +tree-sitter-lua +tree-sitter-markdown +tree-sitter-python +tree-sitter-query +tree-sitter-vim +tree-sitter-vimdoc +tslib +ttf-comfortaa +ttf-fantasque-nerd +ttf-fluentui-system-icons +ttf-icomoon-feather +ttf-iosevka-nerd +ttf-jetbrains-mono-nerd +ttf-liberation +ttf-nerd-fonts-symbols +ttf-nerd-fonts-symbols-common +turbostat +twolame +typescript +typescript-language-server +tzdata +udisks2 +unibilium +unzip +upower +usbmuxd +usbredir +usbutils +usd +uthash +util-linux +util-linux-libs +uv +uxplay +uxplay-debug +v4l-utils +vala +vapoursynth +vde2 +vesktop-bin +vi +vid.stab +vim +vim-runtime +virt-install +virt-manager +virt-viewer +virtiofsd +vlc +vmaf +volume_key +vscode-css-languageserver +vscode-html-languageserver +vscodium +vte-common +vte3 +vulkan-headers +vulkan-icd-loader +vulkan-radeon +vulkan-validation-layers +wavpack +waybar +wayland +wayland-protocols +webkitgtk-6.0 +webrtc-audio-processing-1 +wget +which +wildmidi +wine +wireplumber +wl-clipboard +wlogout +wlogout-debug +wlroots +woff2 +wolfssl +wpa_supplicant +wpebackend-fdo +wxwidgets-common +wxwidgets-gtk3 +x264 +x265 +xautomation +xcb-imdkit +xcb-proto +xcb-util +xcb-util-cursor +xcb-util-errors +xcb-util-image +xcb-util-keysyms +xcb-util-renderutil +xcb-util-wm +xcb-util-xrm +xclip +xdg-dbus-proxy +xdg-desktop-portal +xdg-desktop-portal-hyprland +xdg-user-dirs +xdg-utils +xdotool +xf86-input-libinput +xfce4-appfinder +xfce4-notifyd +xfce4-panel +xfce4-power-manager +xfce4-session +xfce4-settings +xfconf +xfdesktop +xfsprogs +xfwm4 +xfwm4-themes +xkeyboard-config +xorg-fonts-encodings +xorg-iceauth +xorg-server +xorg-server-common +xorg-setxkbmap +xorg-xauth +xorg-xcursorgen +xorg-xinit +xorg-xinput +xorg-xkbcomp +xorg-xmodmap +xorg-xprop +xorg-xrandr +xorg-xrdb +xorg-xset +xorg-xwayland +xorgproto +xvidcore +xxhash +xz +y-cruncher +yajl +yaml-cpp +yara +yarn +yay +yazi +yelp-tools +yelp-xsl +yt-dlp +zathura +zbar +zenity +zeromq +zimg +zip +zix +zlib +zlib-ng +zstd +zvbi +zxing-cpp +zziplib diff --git a/pc/mkinitcpio.conf b/pc/mkinitcpio.conf new file mode 100644 index 0000000..2fd80a4 --- /dev/null +++ b/pc/mkinitcpio.conf @@ -0,0 +1,73 @@ +# vim:set ft=sh +# MODULES +# The following modules are loaded before any boot hooks are +# run. Advanced users may wish to specify all system modules +# in this array. For instance: +# MODULES=(usbhid xhci_hcd) +MODULES=() + +# BINARIES +# This setting includes any additional binaries a given user may +# wish into the CPIO image. This is run last, so it may be used to +# override the actual binaries included by a given hook +# BINARIES are dependency parsed, so you may safely ignore libraries +BINARIES=() + +# FILES +# This setting is similar to BINARIES above, however, files are added +# as-is and are not parsed in any way. This is useful for config files. +FILES=() + +# HOOKS +# This is the most important setting in this file. The HOOKS control the +# modules and scripts added to the image, and what happens at boot time. +# Order is important, and it is recommended that you do not change the +# order in which HOOKS are added. Run 'mkinitcpio -H ' for +# help on a given hook. +# 'base' is _required_ unless you know precisely what you are doing. +# 'udev' is _required_ in order to automatically load modules +# 'filesystems' is _required_ unless you specify your fs modules in MODULES +# Examples: +## This setup specifies all modules in the MODULES setting above. +## No RAID, lvm2, or encrypted root is needed. +# HOOKS=(base) +# +## This setup will autodetect all modules for your system and should +## work as a sane default +# HOOKS=(base udev autodetect modconf block filesystems fsck) +# +## This setup will generate a 'full' image which supports most systems. +## No autodetection is done. +# HOOKS=(base udev modconf block filesystems fsck) +# +## This setup assembles a mdadm array with an encrypted root file system. +## Note: See 'mkinitcpio -H mdadm_udev' for more information on RAID devices. +# HOOKS=(base udev modconf keyboard keymap consolefont block mdadm_udev encrypt filesystems fsck) +# +## This setup loads an lvm2 volume group. +# HOOKS=(base udev modconf block lvm2 filesystems fsck) +# +## NOTE: If you have /usr on a separate partition, you MUST include the +# usr and fsck hooks. +HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block filesystems fsck plymouth) + +# COMPRESSION +# Use this to compress the initramfs image. By default, zstd compression +# is used. Use 'cat' to create an uncompressed image. +#COMPRESSION="zstd" +#COMPRESSION="gzip" +#COMPRESSION="bzip2" +#COMPRESSION="lzma" +#COMPRESSION="xz" +#COMPRESSION="lzop" +#COMPRESSION="lz4" + +# COMPRESSION_OPTIONS +# Additional options for the compressor +#COMPRESSION_OPTIONS=() + +# MODULES_DECOMPRESS +# Decompress kernel modules during initramfs creation. +# Enable to speedup boot process, disable to save RAM +# during early userspace. Switch (yes/no). +#MODULES_DECOMPRESS="yes" diff --git a/pc/mnt/mnt-janis.mount b/pc/mnt/mnt-janis.mount new file mode 100755 index 0000000..46fd799 --- /dev/null +++ b/pc/mnt/mnt-janis.mount @@ -0,0 +1,13 @@ +[Unit] +Description=Mount Share at boot + +[Mount] +What=//192.168.1.136/janis +Where=/mnt/janis +Options=_netdev,credentials=/etc/samba/credentials/janis,iocharset=utf8,rw,uid=janis,gid=janis +Type=cifs +TimeoutSec=30 +ForceUnmount=true + +[Install] +WantedBy=multi-user.target diff --git a/pc/mnt/mnt-janisShare.mount b/pc/mnt/mnt-janisShare.mount new file mode 100755 index 0000000..33dd2d4 --- /dev/null +++ b/pc/mnt/mnt-janisShare.mount @@ -0,0 +1,13 @@ +[Unit] +Description=Mount Share at boot + +[Mount] +What=//192.168.1.136/janis-share +Where=/mnt/janisShare +Options=_netdev,credentials=/etc/samba/credentials/janis,iocharset=utf8,rw,uid=janis,gid=janis +Type=cifs +TimeoutSec=30 +ForceUnmount=true + +[Install] +WantedBy=multi-user.target diff --git a/pc/mnt/mnt-shared.mount b/pc/mnt/mnt-shared.mount new file mode 100755 index 0000000..dda0d05 --- /dev/null +++ b/pc/mnt/mnt-shared.mount @@ -0,0 +1,13 @@ +[Unit] +Description=Mount Share at boot + +[Mount] +What=//192.168.1.136/shared +Where=/mnt/shared +Options=_netdev,credentials=/etc/samba/credentials/janis,iocharset=utf8,rw,uid=janis,gid=janis +Type=cifs +TimeoutSec=30 +ForceUnmount=true + +[Install] +WantedBy=multi-user.target diff --git a/pc/pacman.conf b/pc/pacman.conf new file mode 100644 index 0000000..7d7c2fd --- /dev/null +++ b/pc/pacman.conf @@ -0,0 +1,100 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = auto +ILoveCandy +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +Color +#NoProgressBar +CheckSpace +#VerbosePkgLists +ParallelDownloads = 5 + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +#[extra-testing] +#Include = /etc/pacman.d/mirrorlist + +# If you want to run 32 bit applications on your x86_64 system, +# enable the multilib repositories as required here. + +#[multilib-testing] +#Include = /etc/pacman.d/mirrorlist + +[multilib] +Include = /etc/pacman.d/mirrorlist + +[arch4edu] +Server = https://de.arch4edu.mirror.kescher.at/$arch + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/pc/vscode-extensions b/pc/vscode-extensions new file mode 100644 index 0000000..e12c0f9 --- /dev/null +++ b/pc/vscode-extensions @@ -0,0 +1,48 @@ +aaron-bond.better-comments +abusaidm.html-snippets +bmewburn.vscode-intelephense-client +bungcip.better-toml +dbaeumer.vscode-eslint +dlasagno.rasi +donjayamanne.jquerysnippets +ecmel.vscode-html-css +equinusocio.vsc-community-material-theme +equinusocio.vsc-material-theme +equinusocio.vsc-material-theme-icons +eww-yuck.yuck +fivethree.vscode-hugo-snippets +formulahendry.auto-rename-tag +github.github-vscode-theme +gitlab.gitlab-workflow +golang.go +hollowtree.vue-snippets +ionic.ionic +james-yu.latex-workshop +lllllllqw.jsdoc +mads-hartmann.bash-ide-vscode +mathematic.vscode-latex +mathiasfrohlich.kotlin +mechatroner.rainbow-csv +ms-python.debugpy +ms-python.python +ms-vscode.cpptools +nadim-vscode.html-meta-tags-hero +nilssoderman.sitemap-generator +pwabuilder.pwa-studio +quicktype.quicktype +redhat.java +redhat.vscode-xml +rust-lang.rust-analyzer +sbsnippets.pytorch-snippets +spences10.robots-txt +streetsidesoftware.code-spell-checker +streetsidesoftware.code-spell-checker-german +svelte.svelte-vscode +tecosaur.latex-utilities +valentjn.vscode-ltex +vitest.explorer +vscjava.vscode-java-debug +vscjava.vscode-java-test +vue.volar +wayou.vscode-todo-highlight +xdebug.php-debug diff --git a/server/background.jpg b/server/background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddd3ef1163e902a8867b86a87c427c6e403de788 GIT binary patch literal 214408 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 -NSn9S9Bo|X8mcV?2B#?cx&{pXK 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 QNH|$OYWNdB=D+#>1CmLr;Q#;t literal 0 HcmV?d00001 diff --git a/server/index.html b/server/index.html new file mode 100644 index 0000000..acab0e2 --- /dev/null +++ b/server/index.html @@ -0,0 +1,95 @@ + + + + + + πCloud + + + +

    + + \ No newline at end of file diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..ba9c13c --- /dev/null +++ b/setup.sh @@ -0,0 +1,18 @@ +#! /bin/bash + +# Copy VSCodium settings + +cp -r ./general/configs/VSCodium/* ~/.config/VSCodium/ + +# copy other config files +cp -r ./pc/configs/hypr ~/.config/ +cp -r ./pc/configs/waybar ~/.config/ +cp -r ./general/configs/fish ~/.config/ +cp -r ./general/configs/dunst ~/.config/ +cp -r ./general/configs/rofi ~/.config/ +cp -r ./general/configs/wlogout ~/.config/ +cp -r ./general/configs/yazi ~/.config/ +cp -r ./general/configs/Thunar ~/.config/ +cp -r ./general/configs/terminator ~/.config/ +cp -r ./general/configs/kitty ~/.config/ +cp -r ./general/hyprland ~/.config/hypr/ diff --git a/setupLaptop.sh b/setupLaptop.sh new file mode 100755 index 0000000..ad10581 --- /dev/null +++ b/setupLaptop.sh @@ -0,0 +1,20 @@ +#! /bin/bash + +# Copy VSCodium settings + +cp -r ./general/configs/VSCodium/* ~/.config/VSCodium/ + +# copy other config files +cp -r ./laptop/configs/hypr ~/.config/ +cp -r ./laptop/configs/waybar ~/.config/ +cp -r ./general/configs/fish ~/.config/ +cp -r ./general/configs/dunst ~/.config/ +cp -r ./general/configs/rofi ~/.config/ +cp -r ./general/configs/wlogout ~/.config/ +cp -r ./general/configs/yazi ~/.config/ +cp -r ./general/configs/Thunar ~/.config/ +cp -r ./general/configs/terminator ~/.config/ +cp -r ./general/configs/kitty ~/.config/ +cp -r ./general/hyprland ~/.config/hypr/ + +echo '=> Installed all laptop config files successfully' diff --git a/setupVSCodium.sh b/setupVSCodium.sh new file mode 100644 index 0000000..1ca8e31 --- /dev/null +++ b/setupVSCodium.sh @@ -0,0 +1,6 @@ +file="./laptopConfig/vscode-extensions" +while read line; do + vscodium --install-extension "${line}" +done < "${file}" + +echo "==> Done!" \ No newline at end of file

    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%0D#RpYMZLGQqOq7)i>r63SguO6eqr_eUf+uE9a1$ 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