From 4d3384faaa08e28a19bf7358934769ff52d8bb9f Mon Sep 17 00:00:00 2001 From: Aidan Haas Date: Sat, 8 Nov 2025 19:16:02 -0500 Subject: [PATCH] init --- hypr/.initial_startup_done | 0 hypr/Monitor_Profiles/README | 14 + hypr/Monitor_Profiles/default.conf | 52 + hypr/UserConfigs/.01-UserDefaults.conf.swp | Bin 0 -> 12288 bytes hypr/UserConfigs/.UserKeybinds.conf.swp | Bin 0 -> 20480 bytes hypr/UserConfigs/00-Readme | 16 + hypr/UserConfigs/01-UserDefaults.conf | 18 + hypr/UserConfigs/ENVariables.conf | 89 + hypr/UserConfigs/LaptopDisplay.conf | 4 + hypr/UserConfigs/Laptops.conf | 55 + hypr/UserConfigs/Startup_Apps.conf | 57 + hypr/UserConfigs/UserAnimations.conf | 26 + hypr/UserConfigs/UserDecorations.conf | 58 + hypr/UserConfigs/UserKeybinds.conf | 89 + hypr/UserConfigs/UserSettings.conf | 120 ++ hypr/UserConfigs/WindowRules-old.conf | 206 ++ hypr/UserConfigs/WindowRules.conf | 236 +++ hypr/UserConfigs/WorkSpaceRules | 32 + hypr/UserScripts/00-Readme | 5 + hypr/UserScripts/RainbowBorders.bak.sh | 14 + hypr/UserScripts/RofiBeats.sh | 153 ++ hypr/UserScripts/RofiCalc.sh | 30 + hypr/UserScripts/Tak0-Autodispatch.sh | 90 + hypr/UserScripts/WallpaperAutoChange.sh | 42 + hypr/UserScripts/WallpaperEffects.sh | 148 ++ hypr/UserScripts/WallpaperRandom.sh | 30 + hypr/UserScripts/WallpaperSelect.sh | 248 +++ hypr/UserScripts/Weather.py | 544 +++++ hypr/UserScripts/Weather.sh | 87 + hypr/UserScripts/ZshChangeTheme.sh | 69 + hypr/animations/00-default.conf | 26 + hypr/animations/01-default - v2.conf | 27 + hypr/animations/03- Disable Animation.conf | 5 + hypr/animations/END-4.conf | 40 + hypr/animations/HYDE - Vertical.conf | 34 + hypr/animations/HYDE - default.conf | 21 + hypr/animations/HYDE - minimal-1.conf | 27 + hypr/animations/HYDE - minimal-2.conf | 16 + hypr/animations/HYDE - optimized.conf | 41 + hypr/animations/ML4W - classic.conf | 15 + hypr/animations/ML4W - dynamic.conf | 20 + hypr/animations/ML4W - fast.conf | 24 + hypr/animations/ML4W - high.conf | 20 + hypr/animations/ML4W - moving.conf | 20 + hypr/animations/ML4W - standard.conf | 15 + hypr/animations/Mahaveer - me-1.conf | 55 + hypr/animations/Mahaveer - me-2.conf | 30 + hypr/application-style.conf | 8 + hypr/configs/Keybinds.conf | 152 ++ hypr/configs/Keybinds.confDefault | 152 ++ hypr/configs/Keybinds.confMine | 61 + hypr/hypridle.conf | 50 + hypr/hyprland.conf | 43 + hypr/hyprlock-1080p.conf | 183 ++ hypr/hyprlock.conf | 184 ++ hypr/initial-boot.sh | 66 + hypr/monitors.conf | 61 + hypr/scripts/AirplaneMode.sh | 16 + hypr/scripts/Animations.sh | 31 + hypr/scripts/Battery.sh | 9 + hypr/scripts/Brightness.sh | 69 + hypr/scripts/BrightnessKbd.sh | 51 + hypr/scripts/ChangeBlur.sh | 17 + hypr/scripts/ChangeLayout.sh | 30 + hypr/scripts/ClipManager.sh | 49 + hypr/scripts/DarkLight.sh | 254 +++ hypr/scripts/Distro_update.sh | 40 + hypr/scripts/Dropterminal.sh | 380 ++++ hypr/scripts/GameMode.sh | 34 + hypr/scripts/Hypridle.sh | 23 + hypr/scripts/Hyprsunset.sh | 99 + hypr/scripts/KeyBinds.sh | 39 + hypr/scripts/KeyHints.sh | 72 + hypr/scripts/KillActiveProcess.sh | 11 + hypr/scripts/Kitty_themes.sh | 136 ++ hypr/scripts/KooLsDotsUpdate.sh | 73 + hypr/scripts/Kool_Quick_Settings.sh | 117 ++ hypr/scripts/LockScreen.sh | 7 + hypr/scripts/MediaCtrl.sh | 62 + hypr/scripts/MonitorProfiles.sh | 42 + hypr/scripts/Polkit-NixOS.sh | 21 + hypr/scripts/Polkit.sh | 34 + hypr/scripts/PortalHyprland.sh | 16 + hypr/scripts/Refresh.sh | 55 + hypr/scripts/RefreshNoWaybar.sh | 48 + hypr/scripts/RofiEmoji.sh | 1871 +++++++++++++++++ hypr/scripts/RofiSearch.sh | 36 + hypr/scripts/RofiThemeSelector-modified.sh | 229 ++ hypr/scripts/RofiThemeSelector.sh | 154 ++ hypr/scripts/ScreenShot.sh | 164 ++ hypr/scripts/Sounds.sh | 77 + hypr/scripts/SwitchKeyboardLayout.sh | 104 + hypr/scripts/Tak0-Autodispatch.sh | 90 + hypr/scripts/Tak0-Per-Window-Switch.sh | 123 ++ hypr/scripts/TouchPad.sh | 32 + hypr/scripts/UptimeNixOS.sh | 33 + hypr/scripts/Volume.sh | 143 ++ hypr/scripts/WallustSwww.sh | 59 + hypr/scripts/WaybarCava.sh | 55 + hypr/scripts/WaybarLayout.sh | 71 + hypr/scripts/WaybarScripts.sh | 44 + hypr/scripts/WaybarStyles.sh | 64 + hypr/scripts/Wlogout.sh | 57 + hypr/scripts/sddm_wallpaper.sh | 95 + hypr/v2.3.17 | 5 + hypr/wallpaper_effects/.wallpaper_current | Bin 0 -> 824309 bytes hypr/wallpaper_effects/.wallpaper_modified | Bin 0 -> 824309 bytes hypr/wallust/wallust-hyprland.conf | 21 + hypr/workspaces.conf | 33 + kitty/kitty-themes/00-Default.conf | 3 + kitty/kitty-themes/01-Wallust.conf | 32 + kitty/kitty-themes/3024_Day.conf | 21 + kitty/kitty-themes/3024_Night.conf | 21 + kitty/kitty-themes/AdventureTime.conf | 21 + kitty/kitty-themes/Afterglow.conf | 21 + kitty/kitty-themes/AlienBlood.conf | 21 + kitty/kitty-themes/Alucard.conf | 21 + kitty/kitty-themes/Apprentice.conf | 26 + kitty/kitty-themes/Argonaut.conf | 21 + kitty/kitty-themes/Arthur.conf | 21 + kitty/kitty-themes/AtelierSulphurpool.conf | 21 + kitty/kitty-themes/Atom.conf | 21 + kitty/kitty-themes/AtomOneLight.conf | 21 + kitty/kitty-themes/Batman.conf | 21 + kitty/kitty-themes/Belafonte_Day.conf | 21 + kitty/kitty-themes/Belafonte_Night.conf | 21 + kitty/kitty-themes/BirdsOfParadise.conf | 21 + kitty/kitty-themes/Blazer.conf | 21 + kitty/kitty-themes/Borland.conf | 21 + kitty/kitty-themes/Bright_Lights.conf | 21 + kitty/kitty-themes/Broadcast.conf | 21 + kitty/kitty-themes/Brogrammer.conf | 21 + kitty/kitty-themes/C64.conf | 21 + kitty/kitty-themes/CLRS.conf | 21 + kitty/kitty-themes/Chalk.conf | 21 + kitty/kitty-themes/Chalkboard.conf | 21 + kitty/kitty-themes/Ciapre.conf | 21 + kitty/kitty-themes/Cobalt2.conf | 21 + kitty/kitty-themes/Cobalt_Neon.conf | 21 + kitty/kitty-themes/CrayonPonyFish.conf | 21 + kitty/kitty-themes/Dark_Pastel.conf | 21 + kitty/kitty-themes/Darkside.conf | 21 + kitty/kitty-themes/Desert.conf | 21 + kitty/kitty-themes/DimmedMonokai.conf | 21 + kitty/kitty-themes/DotGov.conf | 21 + kitty/kitty-themes/Dracula.conf | 21 + kitty/kitty-themes/Dumbledore.conf | 21 + kitty/kitty-themes/Duotone_Dark.conf | 21 + kitty/kitty-themes/ENCOM.conf | 21 + kitty/kitty-themes/Earthsong.conf | 21 + kitty/kitty-themes/Elemental.conf | 21 + kitty/kitty-themes/Espresso.conf | 27 + kitty/kitty-themes/Espresso_Libre.conf | 21 + kitty/kitty-themes/Fideloper.conf | 21 + kitty/kitty-themes/FishTank.conf | 21 + kitty/kitty-themes/Flat.conf | 21 + kitty/kitty-themes/Flatland.conf | 21 + kitty/kitty-themes/Floraverse.conf | 21 + kitty/kitty-themes/FrontEndDelight.conf | 21 + kitty/kitty-themes/FunForrest.conf | 21 + kitty/kitty-themes/Galaxy.conf | 21 + kitty/kitty-themes/Github.conf | 21 + kitty/kitty-themes/Glacier.conf | 21 + kitty/kitty-themes/GoaBase.conf | 21 + kitty/kitty-themes/Grape.conf | 21 + kitty/kitty-themes/Grass.conf | 23 + kitty/kitty-themes/Hardcore.conf | 21 + kitty/kitty-themes/Harper.conf | 21 + kitty/kitty-themes/Highway.conf | 21 + kitty/kitty-themes/Hipster_Green.conf | 21 + kitty/kitty-themes/Homebrew.conf | 23 + kitty/kitty-themes/Hurtado.conf | 21 + kitty/kitty-themes/Hybrid.conf | 21 + kitty/kitty-themes/IC_Green_PPL.conf | 21 + kitty/kitty-themes/IC_Orange_PPL.conf | 21 + kitty/kitty-themes/IR_Black.conf | 21 + kitty/kitty-themes/Jackie_Brown.conf | 21 + kitty/kitty-themes/Japanesque.conf | 21 + kitty/kitty-themes/Jellybeans.conf | 21 + kitty/kitty-themes/JetBrains_Darcula.conf | 21 + kitty/kitty-themes/Kibble.conf | 21 + kitty/kitty-themes/Later_This_Evening.conf | 21 + kitty/kitty-themes/Lavandula.conf | 21 + kitty/kitty-themes/LiquidCarbon.conf | 21 + .../kitty-themes/LiquidCarbonTransparent.conf | 21 + .../LiquidCarbonTransparentInverse.conf | 21 + kitty/kitty-themes/Man_Page.conf | 23 + kitty/kitty-themes/Material.conf | 21 + kitty/kitty-themes/MaterialDark.conf | 21 + kitty/kitty-themes/Mathias.conf | 21 + kitty/kitty-themes/Medallion.conf | 21 + kitty/kitty-themes/Misterioso.conf | 21 + kitty/kitty-themes/Molokai.conf | 21 + kitty/kitty-themes/MonaLisa.conf | 21 + kitty/kitty-themes/Monokai.conf | 41 + kitty/kitty-themes/Monokai_Classic.conf | 47 + kitty/kitty-themes/Monokai_Pro.conf | 47 + .../Monokai_Pro_(Filter_Machine).conf | 47 + .../Monokai_Pro_(Filter_Octagon).conf | 47 + .../Monokai_Pro_(Filter_Ristretto).conf | 47 + .../Monokai_Pro_(Filter_Spectrum).conf | 47 + kitty/kitty-themes/Monokai_Soda.conf | 21 + kitty/kitty-themes/N0tch2k.conf | 21 + kitty/kitty-themes/Neopolitan.conf | 21 + kitty/kitty-themes/Neutron.conf | 21 + kitty/kitty-themes/NightLion_v1.conf | 21 + kitty/kitty-themes/NightLion_v2.conf | 21 + kitty/kitty-themes/Nova.conf | 21 + kitty/kitty-themes/Novel.conf | 23 + kitty/kitty-themes/Obsidian.conf | 21 + kitty/kitty-themes/Ocean.conf | 23 + kitty/kitty-themes/OceanicMaterial.conf | 21 + kitty/kitty-themes/Ollie.conf | 21 + kitty/kitty-themes/OneDark.conf | 25 + kitty/kitty-themes/Parasio_Dark.conf | 21 + kitty/kitty-themes/PaulMillr.conf | 21 + kitty/kitty-themes/PencilDark.conf | 21 + kitty/kitty-themes/PencilLight.conf | 21 + kitty/kitty-themes/Piatto_Light.conf | 21 + kitty/kitty-themes/Pnevma.conf | 21 + kitty/kitty-themes/Pro.conf | 23 + kitty/kitty-themes/Red_Alert.conf | 21 + kitty/kitty-themes/Red_Sands.conf | 23 + kitty/kitty-themes/Relaxed_Afterglow.conf | 25 + kitty/kitty-themes/Renault_Style.conf | 22 + kitty/kitty-themes/Renault_Style_Light.conf | 21 + kitty/kitty-themes/Rippedcasts.conf | 21 + kitty/kitty-themes/Royal.conf | 21 + kitty/kitty-themes/SeaShells.conf | 21 + kitty/kitty-themes/Seafoam_Pastel.conf | 21 + kitty/kitty-themes/Seti.conf | 21 + kitty/kitty-themes/Shaman.conf | 21 + kitty/kitty-themes/Slate.conf | 21 + kitty/kitty-themes/Smyck.conf | 21 + kitty/kitty-themes/SoftServer.conf | 21 + kitty/kitty-themes/Solarized_Darcula.conf | 21 + kitty/kitty-themes/Solarized_Dark.conf | 21 + .../Solarized_Dark_-_Patched.conf | 21 + .../Solarized_Dark_Higher_Contrast.conf | 21 + kitty/kitty-themes/Solarized_Light.conf | 21 + kitty/kitty-themes/Source_Code_X.conf | 21 + kitty/kitty-themes/SpaceGray.conf | 21 + kitty/kitty-themes/SpaceGray_Eighties.conf | 21 + .../kitty-themes/SpaceGray_Eighties_Dull.conf | 21 + kitty/kitty-themes/Spacedust.conf | 21 + kitty/kitty-themes/Spiderman.conf | 21 + kitty/kitty-themes/Spring.conf | 21 + kitty/kitty-themes/Square.conf | 21 + kitty/kitty-themes/Sundried.conf | 21 + kitty/kitty-themes/Symfonic.conf | 21 + kitty/kitty-themes/Tango_Dark.conf | 21 + kitty/kitty-themes/Tango_Light.conf | 21 + kitty/kitty-themes/Teerb.conf | 21 + kitty/kitty-themes/Thayer_Bright.conf | 21 + kitty/kitty-themes/The_Hulk.conf | 21 + kitty/kitty-themes/Tomorrow.conf | 21 + kitty/kitty-themes/Tomorrow_Night.conf | 21 + kitty/kitty-themes/Tomorrow_Night_Blue.conf | 21 + kitty/kitty-themes/Tomorrow_Night_Bright.conf | 21 + .../kitty-themes/Tomorrow_Night_Eighties.conf | 21 + kitty/kitty-themes/ToyChest.conf | 21 + kitty/kitty-themes/Treehouse.conf | 21 + kitty/kitty-themes/Twilight.conf | 21 + kitty/kitty-themes/Ubuntu.conf | 21 + kitty/kitty-themes/Urple.conf | 21 + kitty/kitty-themes/Vaughn.conf | 21 + kitty/kitty-themes/VibrantInk.conf | 21 + kitty/kitty-themes/WarmNeon.conf | 21 + kitty/kitty-themes/Wez.conf | 21 + kitty/kitty-themes/WildCherry.conf | 21 + kitty/kitty-themes/Wombat.conf | 21 + kitty/kitty-themes/Wryan.conf | 21 + kitty/kitty-themes/Zenburn.conf | 25 + kitty/kitty-themes/ayu.conf | 21 + kitty/kitty-themes/ayu_light.conf | 21 + kitty/kitty-themes/ayu_mirage.conf | 21 + kitty/kitty-themes/gruvbox_dark.conf | 49 + kitty/kitty-themes/gruvbox_light.conf | 49 + kitty/kitty-themes/idleToes.conf | 21 + kitty/kitty-themes/snazzy.conf | 46 + kitty/kitty.conf | 34 + rofi/.current_wallpaper | 1 + rofi/0-shared-fonts.rasi | 16 + rofi/config-Animations.rasi | 44 + rofi/config-Monitors.rasi | 43 + rofi/config-calc.rasi | 25 + rofi/config-clipboard.rasi | 47 + rofi/config-edit.rasi | 55 + rofi/config-emoji.rasi | 49 + rofi/config-keybinds.rasi | 48 + rofi/config-kitty-theme.rasi | 68 + rofi/config-rofi-Beats-menu.rasi | 45 + rofi/config-rofi-Beats.rasi | 48 + rofi/config-rofi-theme.rasi | 65 + rofi/config-search.rasi | 25 + rofi/config-wallpaper-effect.rasi | 50 + rofi/config-wallpaper.rasi | 69 + rofi/config-waybar-layout.rasi | 48 + rofi/config-waybar-style.rasi | 47 + rofi/config-zsh-theme.rasi | 68 + rofi/config.rasi | 23 + rofi/themes/KooL_LonerOrZ.rasi | 198 ++ rofi/themes/KooL_style-1.rasi | 242 +++ rofi/themes/KooL_style-10-Fancy-v2.rasi | 176 ++ rofi/themes/KooL_style-10-Fancy.rasi | 295 +++ .../themes/KooL_style-11-Win11-list-dark.rasi | 149 ++ .../KooL_style-11-Win11-list-light.rasi | 150 ++ rofi/themes/KooL_style-12-TOP-Docu.rasi | 157 ++ rofi/themes/KooL_style-13-Vertical.rasi | 271 +++ rofi/themes/KooL_style-14.rasi | 188 ++ rofi/themes/KooL_style-15-solarized.rasi | 141 ++ rofi/themes/KooL_style-2-Dark.rasi | 188 ++ rofi/themes/KooL_style-2-Light.rasi | 189 ++ rofi/themes/KooL_style-3-FullScreen-v1.rasi | 252 +++ rofi/themes/KooL_style-3-Fullscreen-v2.rasi | 224 ++ rofi/themes/KooL_style-4.rasi | 324 +++ rofi/themes/KooL_style-5.rasi | 268 +++ rofi/themes/KooL_style-6.rasi | 237 +++ rofi/themes/KooL_style-7.rasi | 196 ++ rofi/themes/KooL_style-8.rasi | 238 +++ rofi/themes/KooL_style-9.rasi | 202 ++ rofi/themes/saint-rofi.rasi | 207 ++ rofi/wallust/colors-rofi.rasi | 50 + waybar/config | 166 ++ waybar/style.css | 1 + waybar/wallust/colors-waybar.css | 24 + 326 files changed, 18853 insertions(+) create mode 100644 hypr/.initial_startup_done create mode 100644 hypr/Monitor_Profiles/README create mode 100644 hypr/Monitor_Profiles/default.conf create mode 100644 hypr/UserConfigs/.01-UserDefaults.conf.swp create mode 100644 hypr/UserConfigs/.UserKeybinds.conf.swp create mode 100644 hypr/UserConfigs/00-Readme create mode 100644 hypr/UserConfigs/01-UserDefaults.conf create mode 100644 hypr/UserConfigs/ENVariables.conf create mode 100644 hypr/UserConfigs/LaptopDisplay.conf create mode 100644 hypr/UserConfigs/Laptops.conf create mode 100644 hypr/UserConfigs/Startup_Apps.conf create mode 100644 hypr/UserConfigs/UserAnimations.conf create mode 100644 hypr/UserConfigs/UserDecorations.conf create mode 100644 hypr/UserConfigs/UserKeybinds.conf create mode 100644 hypr/UserConfigs/UserSettings.conf create mode 100644 hypr/UserConfigs/WindowRules-old.conf create mode 100644 hypr/UserConfigs/WindowRules.conf create mode 100644 hypr/UserConfigs/WorkSpaceRules create mode 100755 hypr/UserScripts/00-Readme create mode 100755 hypr/UserScripts/RainbowBorders.bak.sh create mode 100755 hypr/UserScripts/RofiBeats.sh create mode 100755 hypr/UserScripts/RofiCalc.sh create mode 100755 hypr/UserScripts/Tak0-Autodispatch.sh create mode 100755 hypr/UserScripts/WallpaperAutoChange.sh create mode 100755 hypr/UserScripts/WallpaperEffects.sh create mode 100755 hypr/UserScripts/WallpaperRandom.sh create mode 100755 hypr/UserScripts/WallpaperSelect.sh create mode 100755 hypr/UserScripts/Weather.py create mode 100755 hypr/UserScripts/Weather.sh create mode 100755 hypr/UserScripts/ZshChangeTheme.sh create mode 100644 hypr/animations/00-default.conf create mode 100644 hypr/animations/01-default - v2.conf create mode 100644 hypr/animations/03- Disable Animation.conf create mode 100644 hypr/animations/END-4.conf create mode 100644 hypr/animations/HYDE - Vertical.conf create mode 100644 hypr/animations/HYDE - default.conf create mode 100644 hypr/animations/HYDE - minimal-1.conf create mode 100644 hypr/animations/HYDE - minimal-2.conf create mode 100644 hypr/animations/HYDE - optimized.conf create mode 100644 hypr/animations/ML4W - classic.conf create mode 100644 hypr/animations/ML4W - dynamic.conf create mode 100644 hypr/animations/ML4W - fast.conf create mode 100644 hypr/animations/ML4W - high.conf create mode 100644 hypr/animations/ML4W - moving.conf create mode 100644 hypr/animations/ML4W - standard.conf create mode 100644 hypr/animations/Mahaveer - me-1.conf create mode 100644 hypr/animations/Mahaveer - me-2.conf create mode 100644 hypr/application-style.conf create mode 100644 hypr/configs/Keybinds.conf create mode 100644 hypr/configs/Keybinds.confDefault create mode 100644 hypr/configs/Keybinds.confMine create mode 100644 hypr/hypridle.conf create mode 100644 hypr/hyprland.conf create mode 100644 hypr/hyprlock-1080p.conf create mode 100644 hypr/hyprlock.conf create mode 100755 hypr/initial-boot.sh create mode 100644 hypr/monitors.conf create mode 100755 hypr/scripts/AirplaneMode.sh create mode 100755 hypr/scripts/Animations.sh create mode 100755 hypr/scripts/Battery.sh create mode 100755 hypr/scripts/Brightness.sh create mode 100755 hypr/scripts/BrightnessKbd.sh create mode 100755 hypr/scripts/ChangeBlur.sh create mode 100755 hypr/scripts/ChangeLayout.sh create mode 100755 hypr/scripts/ClipManager.sh create mode 100755 hypr/scripts/DarkLight.sh create mode 100755 hypr/scripts/Distro_update.sh create mode 100755 hypr/scripts/Dropterminal.sh create mode 100755 hypr/scripts/GameMode.sh create mode 100755 hypr/scripts/Hypridle.sh create mode 100755 hypr/scripts/Hyprsunset.sh create mode 100755 hypr/scripts/KeyBinds.sh create mode 100755 hypr/scripts/KeyHints.sh create mode 100755 hypr/scripts/KillActiveProcess.sh create mode 100755 hypr/scripts/Kitty_themes.sh create mode 100755 hypr/scripts/KooLsDotsUpdate.sh create mode 100755 hypr/scripts/Kool_Quick_Settings.sh create mode 100755 hypr/scripts/LockScreen.sh create mode 100755 hypr/scripts/MediaCtrl.sh create mode 100755 hypr/scripts/MonitorProfiles.sh create mode 100755 hypr/scripts/Polkit-NixOS.sh create mode 100755 hypr/scripts/Polkit.sh create mode 100755 hypr/scripts/PortalHyprland.sh create mode 100755 hypr/scripts/Refresh.sh create mode 100755 hypr/scripts/RefreshNoWaybar.sh create mode 100755 hypr/scripts/RofiEmoji.sh create mode 100755 hypr/scripts/RofiSearch.sh create mode 100755 hypr/scripts/RofiThemeSelector-modified.sh create mode 100755 hypr/scripts/RofiThemeSelector.sh create mode 100755 hypr/scripts/ScreenShot.sh create mode 100755 hypr/scripts/Sounds.sh create mode 100755 hypr/scripts/SwitchKeyboardLayout.sh create mode 100755 hypr/scripts/Tak0-Autodispatch.sh create mode 100755 hypr/scripts/Tak0-Per-Window-Switch.sh create mode 100755 hypr/scripts/TouchPad.sh create mode 100755 hypr/scripts/UptimeNixOS.sh create mode 100755 hypr/scripts/Volume.sh create mode 100755 hypr/scripts/WallustSwww.sh create mode 100755 hypr/scripts/WaybarCava.sh create mode 100755 hypr/scripts/WaybarLayout.sh create mode 100755 hypr/scripts/WaybarScripts.sh create mode 100755 hypr/scripts/WaybarStyles.sh create mode 100755 hypr/scripts/Wlogout.sh create mode 100755 hypr/scripts/sddm_wallpaper.sh create mode 100644 hypr/v2.3.17 create mode 100644 hypr/wallpaper_effects/.wallpaper_current create mode 100644 hypr/wallpaper_effects/.wallpaper_modified create mode 100644 hypr/wallust/wallust-hyprland.conf create mode 100644 hypr/workspaces.conf create mode 100644 kitty/kitty-themes/00-Default.conf create mode 100644 kitty/kitty-themes/01-Wallust.conf create mode 100644 kitty/kitty-themes/3024_Day.conf create mode 100644 kitty/kitty-themes/3024_Night.conf create mode 100644 kitty/kitty-themes/AdventureTime.conf create mode 100644 kitty/kitty-themes/Afterglow.conf create mode 100644 kitty/kitty-themes/AlienBlood.conf create mode 100644 kitty/kitty-themes/Alucard.conf create mode 100644 kitty/kitty-themes/Apprentice.conf create mode 100644 kitty/kitty-themes/Argonaut.conf create mode 100644 kitty/kitty-themes/Arthur.conf create mode 100644 kitty/kitty-themes/AtelierSulphurpool.conf create mode 100644 kitty/kitty-themes/Atom.conf create mode 100644 kitty/kitty-themes/AtomOneLight.conf create mode 100644 kitty/kitty-themes/Batman.conf create mode 100644 kitty/kitty-themes/Belafonte_Day.conf create mode 100644 kitty/kitty-themes/Belafonte_Night.conf create mode 100644 kitty/kitty-themes/BirdsOfParadise.conf create mode 100644 kitty/kitty-themes/Blazer.conf create mode 100644 kitty/kitty-themes/Borland.conf create mode 100644 kitty/kitty-themes/Bright_Lights.conf create mode 100644 kitty/kitty-themes/Broadcast.conf create mode 100644 kitty/kitty-themes/Brogrammer.conf create mode 100644 kitty/kitty-themes/C64.conf create mode 100644 kitty/kitty-themes/CLRS.conf create mode 100644 kitty/kitty-themes/Chalk.conf create mode 100644 kitty/kitty-themes/Chalkboard.conf create mode 100644 kitty/kitty-themes/Ciapre.conf create mode 100644 kitty/kitty-themes/Cobalt2.conf create mode 100644 kitty/kitty-themes/Cobalt_Neon.conf create mode 100644 kitty/kitty-themes/CrayonPonyFish.conf create mode 100644 kitty/kitty-themes/Dark_Pastel.conf create mode 100644 kitty/kitty-themes/Darkside.conf create mode 100644 kitty/kitty-themes/Desert.conf create mode 100644 kitty/kitty-themes/DimmedMonokai.conf create mode 100644 kitty/kitty-themes/DotGov.conf create mode 100644 kitty/kitty-themes/Dracula.conf create mode 100644 kitty/kitty-themes/Dumbledore.conf create mode 100644 kitty/kitty-themes/Duotone_Dark.conf create mode 100644 kitty/kitty-themes/ENCOM.conf create mode 100644 kitty/kitty-themes/Earthsong.conf create mode 100644 kitty/kitty-themes/Elemental.conf create mode 100644 kitty/kitty-themes/Espresso.conf create mode 100644 kitty/kitty-themes/Espresso_Libre.conf create mode 100644 kitty/kitty-themes/Fideloper.conf create mode 100644 kitty/kitty-themes/FishTank.conf create mode 100644 kitty/kitty-themes/Flat.conf create mode 100644 kitty/kitty-themes/Flatland.conf create mode 100644 kitty/kitty-themes/Floraverse.conf create mode 100644 kitty/kitty-themes/FrontEndDelight.conf create mode 100644 kitty/kitty-themes/FunForrest.conf create mode 100644 kitty/kitty-themes/Galaxy.conf create mode 100644 kitty/kitty-themes/Github.conf create mode 100644 kitty/kitty-themes/Glacier.conf create mode 100644 kitty/kitty-themes/GoaBase.conf create mode 100644 kitty/kitty-themes/Grape.conf create mode 100644 kitty/kitty-themes/Grass.conf create mode 100644 kitty/kitty-themes/Hardcore.conf create mode 100644 kitty/kitty-themes/Harper.conf create mode 100644 kitty/kitty-themes/Highway.conf create mode 100644 kitty/kitty-themes/Hipster_Green.conf create mode 100644 kitty/kitty-themes/Homebrew.conf create mode 100644 kitty/kitty-themes/Hurtado.conf create mode 100644 kitty/kitty-themes/Hybrid.conf create mode 100644 kitty/kitty-themes/IC_Green_PPL.conf create mode 100644 kitty/kitty-themes/IC_Orange_PPL.conf create mode 100644 kitty/kitty-themes/IR_Black.conf create mode 100644 kitty/kitty-themes/Jackie_Brown.conf create mode 100644 kitty/kitty-themes/Japanesque.conf create mode 100644 kitty/kitty-themes/Jellybeans.conf create mode 100644 kitty/kitty-themes/JetBrains_Darcula.conf create mode 100644 kitty/kitty-themes/Kibble.conf create mode 100644 kitty/kitty-themes/Later_This_Evening.conf create mode 100644 kitty/kitty-themes/Lavandula.conf create mode 100644 kitty/kitty-themes/LiquidCarbon.conf create mode 100644 kitty/kitty-themes/LiquidCarbonTransparent.conf create mode 100644 kitty/kitty-themes/LiquidCarbonTransparentInverse.conf create mode 100644 kitty/kitty-themes/Man_Page.conf create mode 100644 kitty/kitty-themes/Material.conf create mode 100644 kitty/kitty-themes/MaterialDark.conf create mode 100644 kitty/kitty-themes/Mathias.conf create mode 100644 kitty/kitty-themes/Medallion.conf create mode 100644 kitty/kitty-themes/Misterioso.conf create mode 100644 kitty/kitty-themes/Molokai.conf create mode 100644 kitty/kitty-themes/MonaLisa.conf create mode 100644 kitty/kitty-themes/Monokai.conf create mode 100644 kitty/kitty-themes/Monokai_Classic.conf create mode 100644 kitty/kitty-themes/Monokai_Pro.conf create mode 100644 kitty/kitty-themes/Monokai_Pro_(Filter_Machine).conf create mode 100644 kitty/kitty-themes/Monokai_Pro_(Filter_Octagon).conf create mode 100644 kitty/kitty-themes/Monokai_Pro_(Filter_Ristretto).conf create mode 100644 kitty/kitty-themes/Monokai_Pro_(Filter_Spectrum).conf create mode 100644 kitty/kitty-themes/Monokai_Soda.conf create mode 100644 kitty/kitty-themes/N0tch2k.conf create mode 100644 kitty/kitty-themes/Neopolitan.conf create mode 100644 kitty/kitty-themes/Neutron.conf create mode 100644 kitty/kitty-themes/NightLion_v1.conf create mode 100644 kitty/kitty-themes/NightLion_v2.conf create mode 100644 kitty/kitty-themes/Nova.conf create mode 100644 kitty/kitty-themes/Novel.conf create mode 100644 kitty/kitty-themes/Obsidian.conf create mode 100644 kitty/kitty-themes/Ocean.conf create mode 100644 kitty/kitty-themes/OceanicMaterial.conf create mode 100644 kitty/kitty-themes/Ollie.conf create mode 100644 kitty/kitty-themes/OneDark.conf create mode 100644 kitty/kitty-themes/Parasio_Dark.conf create mode 100644 kitty/kitty-themes/PaulMillr.conf create mode 100644 kitty/kitty-themes/PencilDark.conf create mode 100644 kitty/kitty-themes/PencilLight.conf create mode 100644 kitty/kitty-themes/Piatto_Light.conf create mode 100644 kitty/kitty-themes/Pnevma.conf create mode 100644 kitty/kitty-themes/Pro.conf create mode 100644 kitty/kitty-themes/Red_Alert.conf create mode 100644 kitty/kitty-themes/Red_Sands.conf create mode 100644 kitty/kitty-themes/Relaxed_Afterglow.conf create mode 100644 kitty/kitty-themes/Renault_Style.conf create mode 100644 kitty/kitty-themes/Renault_Style_Light.conf create mode 100644 kitty/kitty-themes/Rippedcasts.conf create mode 100644 kitty/kitty-themes/Royal.conf create mode 100644 kitty/kitty-themes/SeaShells.conf create mode 100644 kitty/kitty-themes/Seafoam_Pastel.conf create mode 100644 kitty/kitty-themes/Seti.conf create mode 100644 kitty/kitty-themes/Shaman.conf create mode 100644 kitty/kitty-themes/Slate.conf create mode 100644 kitty/kitty-themes/Smyck.conf create mode 100644 kitty/kitty-themes/SoftServer.conf create mode 100644 kitty/kitty-themes/Solarized_Darcula.conf create mode 100644 kitty/kitty-themes/Solarized_Dark.conf create mode 100644 kitty/kitty-themes/Solarized_Dark_-_Patched.conf create mode 100644 kitty/kitty-themes/Solarized_Dark_Higher_Contrast.conf create mode 100644 kitty/kitty-themes/Solarized_Light.conf create mode 100644 kitty/kitty-themes/Source_Code_X.conf create mode 100644 kitty/kitty-themes/SpaceGray.conf create mode 100644 kitty/kitty-themes/SpaceGray_Eighties.conf create mode 100644 kitty/kitty-themes/SpaceGray_Eighties_Dull.conf create mode 100644 kitty/kitty-themes/Spacedust.conf create mode 100644 kitty/kitty-themes/Spiderman.conf create mode 100644 kitty/kitty-themes/Spring.conf create mode 100644 kitty/kitty-themes/Square.conf create mode 100644 kitty/kitty-themes/Sundried.conf create mode 100644 kitty/kitty-themes/Symfonic.conf create mode 100644 kitty/kitty-themes/Tango_Dark.conf create mode 100644 kitty/kitty-themes/Tango_Light.conf create mode 100644 kitty/kitty-themes/Teerb.conf create mode 100644 kitty/kitty-themes/Thayer_Bright.conf create mode 100644 kitty/kitty-themes/The_Hulk.conf create mode 100644 kitty/kitty-themes/Tomorrow.conf create mode 100644 kitty/kitty-themes/Tomorrow_Night.conf create mode 100644 kitty/kitty-themes/Tomorrow_Night_Blue.conf create mode 100644 kitty/kitty-themes/Tomorrow_Night_Bright.conf create mode 100644 kitty/kitty-themes/Tomorrow_Night_Eighties.conf create mode 100644 kitty/kitty-themes/ToyChest.conf create mode 100644 kitty/kitty-themes/Treehouse.conf create mode 100644 kitty/kitty-themes/Twilight.conf create mode 100644 kitty/kitty-themes/Ubuntu.conf create mode 100644 kitty/kitty-themes/Urple.conf create mode 100644 kitty/kitty-themes/Vaughn.conf create mode 100644 kitty/kitty-themes/VibrantInk.conf create mode 100644 kitty/kitty-themes/WarmNeon.conf create mode 100644 kitty/kitty-themes/Wez.conf create mode 100644 kitty/kitty-themes/WildCherry.conf create mode 100644 kitty/kitty-themes/Wombat.conf create mode 100644 kitty/kitty-themes/Wryan.conf create mode 100644 kitty/kitty-themes/Zenburn.conf create mode 100644 kitty/kitty-themes/ayu.conf create mode 100644 kitty/kitty-themes/ayu_light.conf create mode 100644 kitty/kitty-themes/ayu_mirage.conf create mode 100644 kitty/kitty-themes/gruvbox_dark.conf create mode 100644 kitty/kitty-themes/gruvbox_light.conf create mode 100644 kitty/kitty-themes/idleToes.conf create mode 100644 kitty/kitty-themes/snazzy.conf create mode 100644 kitty/kitty.conf create mode 120000 rofi/.current_wallpaper create mode 100644 rofi/0-shared-fonts.rasi create mode 100644 rofi/config-Animations.rasi create mode 100644 rofi/config-Monitors.rasi create mode 100644 rofi/config-calc.rasi create mode 100644 rofi/config-clipboard.rasi create mode 100644 rofi/config-edit.rasi create mode 100644 rofi/config-emoji.rasi create mode 100644 rofi/config-keybinds.rasi create mode 100644 rofi/config-kitty-theme.rasi create mode 100644 rofi/config-rofi-Beats-menu.rasi create mode 100644 rofi/config-rofi-Beats.rasi create mode 100644 rofi/config-rofi-theme.rasi create mode 100644 rofi/config-search.rasi create mode 100644 rofi/config-wallpaper-effect.rasi create mode 100644 rofi/config-wallpaper.rasi create mode 100644 rofi/config-waybar-layout.rasi create mode 100644 rofi/config-waybar-style.rasi create mode 100644 rofi/config-zsh-theme.rasi create mode 100644 rofi/config.rasi create mode 100644 rofi/themes/KooL_LonerOrZ.rasi create mode 100644 rofi/themes/KooL_style-1.rasi create mode 100644 rofi/themes/KooL_style-10-Fancy-v2.rasi create mode 100644 rofi/themes/KooL_style-10-Fancy.rasi create mode 100644 rofi/themes/KooL_style-11-Win11-list-dark.rasi create mode 100644 rofi/themes/KooL_style-11-Win11-list-light.rasi create mode 100644 rofi/themes/KooL_style-12-TOP-Docu.rasi create mode 100644 rofi/themes/KooL_style-13-Vertical.rasi create mode 100644 rofi/themes/KooL_style-14.rasi create mode 100644 rofi/themes/KooL_style-15-solarized.rasi create mode 100644 rofi/themes/KooL_style-2-Dark.rasi create mode 100644 rofi/themes/KooL_style-2-Light.rasi create mode 100644 rofi/themes/KooL_style-3-FullScreen-v1.rasi create mode 100644 rofi/themes/KooL_style-3-Fullscreen-v2.rasi create mode 100644 rofi/themes/KooL_style-4.rasi create mode 100644 rofi/themes/KooL_style-5.rasi create mode 100644 rofi/themes/KooL_style-6.rasi create mode 100644 rofi/themes/KooL_style-7.rasi create mode 100644 rofi/themes/KooL_style-8.rasi create mode 100644 rofi/themes/KooL_style-9.rasi create mode 100644 rofi/themes/saint-rofi.rasi create mode 100644 rofi/wallust/colors-rofi.rasi create mode 100644 waybar/config create mode 120000 waybar/style.css create mode 100644 waybar/wallust/colors-waybar.css diff --git a/hypr/.initial_startup_done b/hypr/.initial_startup_done new file mode 100644 index 0000000..e69de29 diff --git a/hypr/Monitor_Profiles/README b/hypr/Monitor_Profiles/README new file mode 100644 index 0000000..86075d7 --- /dev/null +++ b/hypr/Monitor_Profiles/README @@ -0,0 +1,14 @@ +# Create a Monitor profile you want to on this directory + +# Create a unique file name i.e. Mirror, or Office, Scale, etc etc + +# tip: You can easily create a profile using nwg-displays +# after creating a profile using nwg-displays, copy the ~/.config/hypr/monitors.conf file to this directory with a unique file name +# suggest not to call it default + + +# Note, after selecting Profiles wanted via Rofi (SUPER SHIFT E), previous content of ~/.config/hypr/monitors.conf will be backed up and named as Previous_Profile.conf + +# Monitor profile should be loaded automatically once selected by KooL Rofi Settings ROfi Menu, unless you disabled the auto-reload function on Hyprland settings. +# However, if it does not load, kindly log out and re-login. This seem apparent if you are using a Virtual Environment. + diff --git a/hypr/Monitor_Profiles/default.conf b/hypr/Monitor_Profiles/default.conf new file mode 100644 index 0000000..a96cac7 --- /dev/null +++ b/hypr/Monitor_Profiles/default.conf @@ -0,0 +1,52 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# default Monitor config + +# Monitor Configuration +# See Hyprland wiki for more details +# https://wiki.hyprland.org/Configuring/Monitors/ +# Configure your Display resolution, offset, scale and Monitors here, use `hyprctl monitors` to get the info. + +# Monitors +monitor=,preferred,auto,1 + +# High Refresh Rate +monitor=,highrr,auto,1 + +# High Resolution +monitor=,highres,auto,1 + +# NOTE: for laptop, kindly check notes in Laptops.conf regarding display +# Created this inorder for the monitor display to not wake up if not intended. +# See here: https://github.com/hyprwm/Hyprland/issues/4090 + +# Some examples to set your own monitor +#monitor = eDP-1, preferred, auto, 1 +#monitor = eDP-1, 2560x1440@165, 0x0, 1 #own screen +#monitor = DP-3, 1920x1080@240, auto, 1 +#monitor = DP-1, preferred, auto, 1 +#monitor = HDMI-A-1, preferred,auto,1 + +# QEMU-KVM, virtual box or vmware +#monitor = Virtual-1, 1920x1080@60,auto,1 + +# to disable a monitor +#monitor=name,disable + +# Mirror samples +#monitor=DP-3,1920x1080@60,0x0,1,mirror,DP-2 +#monitor=,preferred,auto,1,mirror,eDP-1 +#monitor=HDMI-A-1,2560x1440@144,0x0,1,mirror,eDP-1 + +# 10 bit monitor support - See wiki https://wiki.hyprland.org/Configuring/Monitors/#10-bit-support - See NOTES below +# NOTE: Colors registered in Hyprland (e.g. the border color) do not support 10 bit. +# NOTE: Some applications do not support screen capture with 10 bit enabled. (Screen captures like OBS may render black screen) +# monitor=,preferred,auto,1,bitdepth,10 + +#monitor=eDP-1,transform,0 +#monitor=eDP-1,addreserved,10,10,10,49 + +# workspaces - Monitor rules +# https://wiki.hyprland.org/Configuring/Workspace-Rules/ +# SUPER E - Workspace-Rules +# See ~/.config/hypr/UserConfigs/WorkspaceRules.conf + diff --git a/hypr/UserConfigs/.01-UserDefaults.conf.swp b/hypr/UserConfigs/.01-UserDefaults.conf.swp new file mode 100644 index 0000000000000000000000000000000000000000..e985b66cbf908e499fcd6a0d27eb44076655e101 GIT binary patch literal 12288 zcmeI2F>ezw6vth*A_}MstdAx_P&K&}2B1=f1WiRKq0lBUFd*md-NnkqKJI)CQC0X3 ze1Wo;k%b*b78bq%GaD<6xO0=uE3?`?z~kz&jgqN6JP>NfC(@GCcp%kz<)%* zCJW*%?dQy7Ps@{j;g5bYF@t97limsvZRdUk-na%`vIgA(hCxh&XN{M-)Q|O(tFY|X-IOO4H7pdzyz28 z6JP>NfC(@GCcp%kz^NoqE!#fI)bGD+>PTsXO<3t$n`9fFHyVxVkugz>bbop1WkuZG zSDS}NE209EyUkE8hspBLq_DTU-I_kWw%>iy+=Kn=LR3Q)V@3&}0^9Tz+EU91Q&F{; z4(a(oSv#i54h@x-F(v8rF+;E;12RQ$=I&bc4vu?D2j#VDxC+nZxF=I+n;@qQlnDc6 zH>-!utyX7uZ=-^`Kd}Qj8q(hl>;*FBLw9gZ7735>Hu6k$P7Xm$35u}XesU1 z(MeJaF-l48#o>#PcH7>1OmPIqtV4N-ygk>Fl0jEcpsmL#9J zn~|R7mPwMW%|_*knjRgrzBBYzp+*gU9=|(*=~0Z7?dQGX7(SE^v$ADC5xVNpnG(MN Dc>N$p literal 0 HcmV?d00001 diff --git a/hypr/UserConfigs/.UserKeybinds.conf.swp b/hypr/UserConfigs/.UserKeybinds.conf.swp new file mode 100644 index 0000000000000000000000000000000000000000..827a6ab50ead650d586eb8d05adf3940a5614cb4 GIT binary patch literal 20480 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 IZ28 apps (may help) ## +# https://www.electronjs.org/docs/latest/api/environment-variables +env = ELECTRON_OZONE_PLATFORM_HINT,auto # auto selects Wayland if possible, X11 otherwise + +# NVIDIA +# This is from Hyprland Wiki. Below will be activated nvidia gpu detected +# See hyprland wiki https://wiki.hyprland.org/Nvidia/#environment-variables + +env = LIBVA_DRIVER_NAME,nvidia +env = __GLX_VENDOR_LIBRARY_NAME,nvidia +env = NVD_BACKEND,direct +env = GSK_RENDERER,ngl + +# additional ENV's for nvidia. Caution, activate with care +#env = GBM_BACKEND,nvidia-drm + +#env = __GL_GSYNC_ALLOWED,1 #adaptive Vsync +#env = __NV_PRIME_RENDER_OFFLOAD,1 +#env = __VK_LAYER_NV_optimus,NVIDIA_only +#env = WLR_DRM_NO_ATOMIC,1 + +# FOR VM and POSSIBLY NVIDIA +# LIBGL_ALWAYS_SOFTWARE software mesa rendering +#env = LIBGL_ALWAYS_SOFTWARE,1 # Warning. May cause hyprland to crash +#env = WLR_RENDERER_ALLOW_SOFTWARE,1 + +# nvidia firefox (for hardware acceleration on FF)? +# check this post https://github.com/elFarto/nvidia-vaapi-driver#configuration +#env = MOZ_DISABLE_RDD_SANDBOX,1 +#env = EGL_PLATFORM,wayland + +#### Aquamarine Environment Variables #### ( Hyprland > 0.45 ) +# https://wiki.hyprland.org/Configuring/Environment-variables/#aquamarine-environment-variables----ref-httpsgithubcomhyprwmaquamarineblobmaindocsenvmd--- +# env = AQ_TRACE,1 # Enables more verbose logging. +# env = AQ_DRM_DEVICES,/dev/dri/card1:/dev/dri/card0 # Set an explicit list of DRM devices (GPUs) to use. Itโ€™s a colon-separated list of paths, with the first being the primary. E.g. /dev/dri/card1:/dev/dri/card0 +# env = AQ_MGPU_NO_EXPLICIT,1 # Disables explicit syncing on mgpu buffers +# env = AQ_NO_MODIFIERS,1 # Disables modifiers for DRM buffers + +#### Hyprland Environment Variables #### +# https://wiki.hyprland.org/Configuring/Environment-variables/#hyprland-environment-variables +# env = HYPRLAND_TRACE,1 # Enables more verbose logging. +# env = HYPRLAND_NO_RT,1 # Disables realtime priority setting by Hyprland. +# env = HYPRLAND_NO_SD_NOTIFY,1 # If systemd, disables the 'sd_notify' calls. +# env = HYPRLAND_NO_SD_VARS,1 # Disables management of variables in systemd and dbus activation environments. diff --git a/hypr/UserConfigs/LaptopDisplay.conf b/hypr/UserConfigs/LaptopDisplay.conf new file mode 100644 index 0000000..9f76658 --- /dev/null +++ b/hypr/UserConfigs/LaptopDisplay.conf @@ -0,0 +1,4 @@ +# NOTE, THIS FILE IS BEING USED by disabling Laptop display monitor behaviour when closing lid. +# See notes on Laptops.conf + +#monitor = eDP-1, preferred, auto, 1 diff --git a/hypr/UserConfigs/Laptops.conf b/hypr/UserConfigs/Laptops.conf new file mode 100644 index 0000000..edb6846 --- /dev/null +++ b/hypr/UserConfigs/Laptops.conf @@ -0,0 +1,55 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more variable settings +# These configs are mostly for laptops. This is addemdum to Keybinds.conf + +$mainMod = SUPER +$scriptsDir = $HOME/.config/hypr/scripts +$UserConfigs = $HOME/.config/hypr/UserConfigs + +# for disabling Touchpad. hyprctl devices to get device name. +$Touchpad_Device=asue1209:00-04f3:319f-touchpad + +binde = , xf86KbdBrightnessDown, exec, $scriptsDir/BrightnessKbd.sh --dec # decrease keyboard brightness +binde = , xf86KbdBrightnessUp, exec, $scriptsDir/BrightnessKbd.sh --inc # increase keyboard brightness +bind = , xf86Launch1, exec, rog-control-center # ASUS Armory crate button +bind = , xf86Launch3, exec, asusctl led-mode -n # FN+F4 Switch keyboard RGB profile +bind = , xf86Launch4, exec, asusctl profile -n # FN+F5 change of fan profiles (Quite, Balance, Performance) +binde = , xf86MonBrightnessDown, exec, $scriptsDir/Brightness.sh --dec # decrease monitor brightness +binde = , xf86MonBrightnessUp, exec, $scriptsDir/Brightness.sh --inc # increase monitor brightness +bind = , xf86TouchpadToggle, exec, $scriptsDir/TouchPad.sh # disable touchpad + +# Screenshot keybindings using F6 (no PrinSrc button) +bind = $mainMod, F6, exec, $scriptsDir/ScreenShot.sh --now # screenshot +bind = $mainMod SHIFT, F6, exec, $scriptsDir/ScreenShot.sh --area # screenshot (area) +bind = $mainMod CTRL, F6, exec, $scriptsDir/ScreenShot.sh --in5 # # screenshot (5 secs delay) +bind = $mainMod ALT, F6, exec, $scriptsDir/ScreenShot.sh --in10 # screenshot (10 secs delay) +bind = ALT, F6, exec, $scriptsDir/ScreenShot.sh --active # screenshot (active window only) + +$TOUCHPAD_ENABLED = true +device { + name = $Touchpad_Device + enabled = $TOUCHPAD_ENABLED +} +# Below are useful when you are connecting your laptop in external display +# Suggest you edit below for your laptop display +# From WIKI This is to disable laptop monitor when lid is closed. +# consult https://wiki.hyprland.org/hyprland-wiki/pages/Configuring/Binds/#switches +#bindl = , switch:off:Lid Switch,exec,hyprctl keyword monitor "eDP-1, preferred, auto, 1" +#bindl = , switch:on:Lid Switch,exec,hyprctl keyword monitor "eDP-1, disable" + + +# WARNING! Using this method has some caveats!! USE THIS PART WITH SOME CAUTION! +# CONS of doing this, is that you need to set up your wallpaper (SUPER W) and choose wallpaper. +# CAVEATS! Sometimes the Main Laptop Monitor DOES NOT have display that it needs to re-connect your external monitor +# One work around is to ensure that before shutting down laptop, MAKE SURE your laptop lid is OPEN!! +# Make sure to comment (put # on the both the bindl = , switch ......) above +# NOTE: Display for laptop are being generated into LaptopDisplay.conf +# This part is to be use if you do not want your main laptop monitor to wake up during say wallpaper change etc + +#bindl = , switch:off:Lid Switch,exec,echo "monitor = eDP-1, preferred, auto, 1" > $UserConfigs/LaptopDisplay.conf +#bindl = , switch:on:Lid Switch,exec,echo "monitor = eDP-1, disable" > $UserConfigs/LaptopDisplay.conf + +# for laptop-lid action (to erase the last entry) +#exec-once = echo "monitor = eDP-1, preferred, auto, 1" > $HOME/.config/hypr/UserConfigs/LaptopDisplay.conf +# diff --git a/hypr/UserConfigs/Startup_Apps.conf b/hypr/UserConfigs/Startup_Apps.conf new file mode 100644 index 0000000..bbe349d --- /dev/null +++ b/hypr/UserConfigs/Startup_Apps.conf @@ -0,0 +1,57 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# Commands and Apps to be executed at launch + +$scriptsDir = $HOME/.config/hypr/scripts +$UserScripts = $HOME/.config/hypr/UserScripts + +$wallDIR=$HOME/Pictures/wallpapers +$lock = $scriptsDir/LockScreen.sh +$SwwwRandom = $UserScripts/WallpaperAutoChange.sh +$livewallpaper="" + +# wallpaper stuff +exec-once = swww-daemon --format xrgb +#exec-once = mpvpaper '*' -o "load-scripts=no no-audio --loop" $livewallpaper + +# wallpaper random +#exec-once = $SwwwRandom $wallDIR # random wallpaper switcher every 30 minutes + +# Startup +exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP + +# Initialize Drop Down terminal - See Bug#810 https://github.com/JaKooLit/Hyprland-Dots/issues/810#issuecomment-3351947644 +exec-once = $HOME/.config/hypr/scripts/Dropterminal.sh kitty & + + +# Polkit (Polkit Gnome / KDE) +exec-once = $scriptsDir/Polkit.sh + +# starup apps +exec-once = nm-applet --indicator +exec-once = swaync +#exec-once = ags +exec-once = blueman-applet +#exec-once = rog-control-center +exec-once = waybar +exec-once = qs # quickshell AGS Desktop Overview alternative + +#clipboard manager +exec-once = wl-paste --type text --watch cliphist store +exec-once = wl-paste --type image --watch cliphist store + +# Rainbow borders +#exec-once = $UserScripts/RainbowBorders.sh + +# Starting hypridle to start hyprlock +exec-once = hypridle + + +# Here are list of features available but disabled by default +# exec-once = swww-daemon --format xrgb && swww img $HOME/Pictures/wallpapers/mecha-nostalgia.png # persistent wallpaper + +#gnome polkit for nixos +#exec-once = $scriptsDir/Polkit-NixOS.sh + +# xdg-desktop-portal-hyprland (should be auto starting. However, you can force to start) +#exec-once = $scriptsDir/PortalHyprland.sh diff --git a/hypr/UserConfigs/UserAnimations.conf b/hypr/UserConfigs/UserAnimations.conf new file mode 100644 index 0000000..10279c7 --- /dev/null +++ b/hypr/UserConfigs/UserAnimations.conf @@ -0,0 +1,26 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # + +animations { + enabled = yes + + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + bezier = overshot, 0.05, 0.9, 0.1, 1.05 + bezier = smoothOut, 0.5, 0, 0.99, 0.99 + bezier = smoothIn, 0.5, -0.5, 0.68, 1.5 + + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 5, winIn, slide + animation = windowsOut, 1, 3, smoothOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 180, liner, loop #used by rainbow borders and rotating colors + animation = fade, 1, 3, smoothOut + animation = workspaces, 1, 5, overshot + + # animations for -git or version >0.42.0 + animation = workspacesIn, 1, 5, winIn, slide + animation = workspacesOut, 1, 5, winOut, slide +} diff --git a/hypr/UserConfigs/UserDecorations.conf b/hypr/UserConfigs/UserDecorations.conf new file mode 100644 index 0000000..28172e2 --- /dev/null +++ b/hypr/UserConfigs/UserDecorations.conf @@ -0,0 +1,58 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# Decoration Settings + +# Hyprland Wiki Links +# Animation - https://wiki.hyprland.org/Configuring/Animations/ +# Decoration - https://wiki.hyprland.org/Configuring/Variables/#decoration + +# Sourcing colors generated by wallust +source = $HOME/.config/hypr/wallust/wallust-hyprland.conf + +general { + border_size = 2 + gaps_in = 2 + gaps_out = 4 + + col.active_border = $color12 + col.inactive_border = $color10 +} + +decoration { + rounding = 10 + + active_opacity = 1.0 + inactive_opacity = 1.0 + fullscreen_opacity = 1.0 + + dim_inactive = false + dim_strength = 0.1 + dim_special = 0.8 + + shadow { + enabled = true + range = 3 + render_power = 1 + + color = $color12 + color_inactive = $color10 + } + + + blur { + enabled = true + size = 6 + passes = 2 + ignore_opacity = true + new_optimizations = true + special = true + popups = true + } +} + +group { + col.border_active = $color15 + + groupbar { + col.active = $color0 + } +} diff --git a/hypr/UserConfigs/UserKeybinds.conf b/hypr/UserConfigs/UserKeybinds.conf new file mode 100644 index 0000000..578528a --- /dev/null +++ b/hypr/UserConfigs/UserKeybinds.conf @@ -0,0 +1,89 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# This is where you put your own keybinds. Be Mindful to check as well ~/.config/hypr/configs/Keybinds.conf to avoid conflict +# if you think I should replace the Pre-defined Keybinds in ~/.config/hypr/configs/Keybinds.conf , submit an issue or let me know in DC and present me a valid reason as to why, such as conflicting with global shortcuts, etc etc + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more settings and variables +# See also Laptops.conf for laptops keybinds + +# /* ---- โœด๏ธ Variables โœด๏ธ ---- */ # +$mainMod = SUPER +$scriptsDir = $HOME/.config/hypr/scripts +$UserScripts = $HOME/.config/hypr/UserScripts +$UserConfigs = $HOME/.config/hypr/UserConfigs + +# settings for User defaults apps - set your default terminal and file manager on this file +source= $UserConfigs/01-UserDefaults.conf + +# common shortcuts +#bindr = $mainMod, $mainMod_L, exec, pkill rofi || rofi -show drun -modi drun,filebrowser,run,window # Super Key to Launch rofi menu +bind = $mainMod, R, exec, pkill rofi || true && rofi -show drun -modi drun,filebrowser,run,window # Main Menu (APP Launcher) +#bind = $mainMod, W, exec, xdg-open "https://" # default browser +#bind = $mainMod, A, exec, pkill rofi || true && ags -t 'overview' # desktop overview (if installed) +bind = $mainMod, A, global, quickshell:overviewToggle # desktop overview (if installed) +bind = $mainMod, Return, exec, $term #terminal +bind = $mainMod, R, exec, $files #file manager +bind = $mainMod, Q, exec, $term +bind = $mainMod, W, exec, flatpak run org.mozilla.firefox + + +# FEATURES / EXTRAS +bind = $mainMod, H, exec, $scriptsDir/KeyHints.sh # help / cheat sheet +bind = $mainMod ALT, R, exec, $scriptsDir/Refresh.sh # Refresh waybar, swaync, rofi +bind = $mainMod, period, exec, $scriptsDir/RofiEmoji.sh # emoji menu +bind = $mainMod, S, exec, $scriptsDir/RofiSearch.sh # Google search using rofi +bind = $mainMod CTRL, S, exec, rofi -show window # list/switch apps using rofi +bind = $mainMod ALT, O, exec, $scriptsDir/ChangeBlur.sh # Toggle blur settings +bind = $mainMod SHIFT, G, exec, $scriptsDir/GameMode.sh # Toggle animations ON/OFF +bind = $mainMod ALT, L, exec, $scriptsDir/ChangeLayout.sh # Toggle Master or Dwindle Layout +bind = $mainMod SHIFT, V, exec, $scriptsDir/ClipManager.sh # Clipboard Manager +bind = $mainMod CTRL, R, exec, $scriptsDir/RofiThemeSelector.sh # KooL Rofi Menu Theme Selector +bind = $mainMod CTRL SHIFT, R, exec, pkill rofi || true && $scriptsDir/RofiThemeSelector-modified.sh # modified Rofi Theme Selector + +bind = $mainMod SHIFT, F, fullscreen # whole full screen +bind = $mainMod CTRL, F, fullscreen, 1 # fake full screen +bind = $mainMod, SPACE, togglefloating, #Float Mode +bind = $mainMod ALT, SPACE, exec, hyprctl dispatch workspaceopt allfloat #All Float Mode +bind = $mainMod SHIFT, Return, exec, $scriptsDir/Dropterminal.sh $term # Dropdown terminal + +# Desktop zooming or magnifier +bind = $mainMod ALT, mouse_down, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 2.0}')" +bind = $mainMod ALT, mouse_up, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 2.0}')" + +## NOTES for ja (Hyprland version 0.39 (Ubuntu 24.04)) +#bind = $mainMod ALT, mouse_down, exec, hyprctl keyword misc:cursor_zoom_factor "$(hyprctl getoption misc:cursor_zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 2.0}')" +#bind = $mainMod ALT, mouse_up, exec, hyprctl keyword misc:cursor_zoom_factor "$(hyprctl getoption misc:cursor_zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 2.0}')" + +# Waybar / Bar related +bind = $mainMod CTRL ALT, B, exec, pkill -SIGUSR1 waybar # Toggle hide/show waybar +bind = $mainMod CTRL, B, exec, $scriptsDir/WaybarStyles.sh # Waybar Styles Menu +bind = $mainMod ALT, B, exec, $scriptsDir/WaybarLayout.sh # Waybar Layout Menu + +# Night light toggle (Hyprsunset) +bind = $mainMod, N, exec, $scriptsDir/Hyprsunset.sh toggle + +# FEATURES / EXTRAS (UserScripts) +bind = $mainMod SHIFT, M, exec, $UserScripts/RofiBeats.sh # online music using rofi +bind = $mainMod SHIFT, W, exec, $UserScripts/WallpaperSelect.sh # Select wallpaper to apply +bind = $mainMod SHIFT, W, exec, $UserScripts/WallpaperEffects.sh # Wallpaper Effects by imagemagick +bind = CTRL ALT, W, exec, $UserScripts/WallpaperRandom.sh # Random wallpapers +bind = $mainMod CTRL, O, exec, hyprctl setprop active opaque toggle # disable opacity on active window +bind = $mainMod SHIFT, K, exec, $scriptsDir/KeyBinds.sh # search keybinds via rofi +bind = $mainMod SHIFT, A, exec, $scriptsDir/Animations.sh #hyprland animations menu +bind = $mainMod SHIFT, O, exec, $UserScripts/ZshChangeTheme.sh # Change oh-my-zsh theme +bindln = ALT_L, SHIFT_L, exec, $scriptsDir/SwitchKeyboardLayout.sh # Change keyboard layout globally +bindln = SHIFT_L, ALT_L, exec, $scriptsDir/Tak0-Per-Window-Switch.sh # Change keyboard layout locally for each window +bind = $mainMod ALT, C, exec, $UserScripts/RofiCalc.sh # calculator (qalculate) + +# Move current workspaces to monitors (left right up or down) +bind = $mainMod CTRL, F9, movecurrentworkspacetomonitor, l #move current workspace to LEFT monitor +bind = $mainMod CTRL, F10, movecurrentworkspacetomonitor, r #move current workspace to RIGHT monitor +bind = $mainMod CTRL, F11, movecurrentworkspacetomonitor, u #move current workspace to UP monitor +bind = $mainMod CTRL, F12, movecurrentworkspacetomonitor, d #move current workspace to DOWN monitor + + +# For passthrough keyboard into a VM +# bind = $mainMod ALT, P, submap, passthru +#submap = passthru +# to unbind +#bind = $mainMod ALT, P, submap, reset +#submap = reset diff --git a/hypr/UserConfigs/UserSettings.conf b/hypr/UserConfigs/UserSettings.conf new file mode 100644 index 0000000..6d9f7d7 --- /dev/null +++ b/hypr/UserConfigs/UserSettings.conf @@ -0,0 +1,120 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# User Settings +# This is where you put your own settings as this will not be touched during update +# if the upgrade.sh is used. + +# refer to Hyprland wiki for more info https://wiki.hyprland.org/Configuring/Variables/ + +# NOTE: some settings are in ~/.config/hypr/UserConfigs/UserDecorAnimations.conf + +dwindle { + pseudotile = true + preserve_split = true + #smart_split = true + special_scale_factor = 0.8 +} + +master { + new_status = master + new_on_top = 1 + mfact = 0.5 +} + +general { + resize_on_border = true + + layout = dwindle +} + +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + repeat_rate = 50 + repeat_delay = 300 + + sensitivity = 0.00 #mouse sensitivity + accel_profile = # flat or adaptive or blank or EMPTY means libinputโ€™s default mode + numlock_by_default = true + left_handed = false + follow_mouse = 2 + float_switch_override_focus = false + + touchpad { + disable_while_typing = true + natural_scroll = true + clickfinger_behavior = false + middle_button_emulation = true + tap-to-click = true + drag_lock = false + } + + # below for devices with touchdevice ie. touchscreen + touchdevice { + enabled = true + } + + # below is for table see link above for proper variables + tablet { + transform = 0 + left_handed = 0 + } +} + + +gestures { + gesture = 3, horizontal, workspace + workspace_swipe_distance = 500 + workspace_swipe_invert = true + workspace_swipe_min_speed_to_force = 30 + workspace_swipe_cancel_ratio = 0.5 + workspace_swipe_create_new = true + workspace_swipe_forever = true + #workspace_swipe_use_r = true #uncomment if wanted a forever create a new workspace with swipe right +} + +misc { + disable_hyprland_logo = true + disable_splash_rendering = true + vfr = true + vrr = 2 + mouse_move_enables_dpms = true + enable_swallow = off + swallow_regex = ^(kitty)$ + focus_on_activate = false + initial_workspace_tracking = 0 + middle_click_paste = true + enable_anr_dialog = true # Application not Responding (ANR) + anr_missed_pings = 15 # ANR Threshold default 1 is too low + allow_session_lock_restore = true # Prevent lockscreen crash when resume from suspend +} + +#opengl { +# nvidia_anti_flicker = true +#} + +binds { + workspace_back_and_forth = true + allow_workspace_cycles = true + pass_mouse_when_bound = false +} + +#Could help when scaling and not pixelating +xwayland { + enabled = true + force_zero_scaling = true +} + +render { + direct_scanout = 0 +} + +cursor { + sync_gsettings_theme = true + no_hardware_cursors = 0 # change to 1 if want to disable + enable_hyprcursor = false + warp_on_change_workspace = 2 + no_warps = true +} diff --git a/hypr/UserConfigs/WindowRules-old.conf b/hypr/UserConfigs/WindowRules-old.conf new file mode 100644 index 0000000..d6e1dea --- /dev/null +++ b/hypr/UserConfigs/WindowRules-old.conf @@ -0,0 +1,206 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# For window rules and layerrules +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + +# NOTES: This is only for Hyprland older versions (< 0.48) + +# windowrule v2 - tags - add apps under appropriate tag to use the same settings +# browser tags +windowrulev2 = tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$ +windowrulev2 = tag +browser, class:^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$ +windowrulev2 = tag +browser, class:^(chrome-.+-Default)$ # Chrome PWAs +windowrulev2 = tag +browser, class:^([Cc]hromium)$ +windowrulev2 = tag +browser, class:^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$ +windowrulev2 = tag +browser, class:^(Brave-browser(-beta|-dev|-unstable)?)$ +windowrulev2 = tag +browser, class:^([Tt]horium-browser|[Cc]achy-browser)$ +windowrulev2 = tag +browser, class:^(zen-alpha|zen)$ +windowrulev2 = tag +notif, class:^(swaync-control-center|swaync-notification-window|swaync-client|class)$ +windowrulev2 = tag +KooL_Cheat, title:^(KooL Quick Cheat Sheet)$ +windowrulev2 = tag +KooL_Settings, title:^(KooL Hyprland Settings)$ +windowrulev2 = tag +KooL-Settings, class:^(nwg-displays|nwg-look)$ + +# terminal tags +windowrulev2 = tag +terminal, class:^(Alacritty|kitty|kitty-dropterm)$ + +# email tags +windowrulev2 = tag +email, class:^([Tt]hunderbird|org.gnome.Evolution)$ +windowrulev2 = tag +email, class:^(eu.betterbird.Betterbird)$ + +# project tags +windowrulev2 = tag +projects, class:^(codium|codium-url-handler|VSCodium)$ +windowrulev2 = tag +projects, class:^(VSCode|code-url-handler)$ +windowrulev2 = tag +projects, class:^(jetbrains-.+)$ # JetBrains IDEs + +# screenshare tags +windowrulev2 = tag +screenshare, class:^(com.obsproject.Studio)$ + +# IM tags +windowrulev2 = tag +im, class:^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$ +windowrulev2 = tag +im, class:^([Ff]erdium)$ +windowrulev2 = tag +im, class:^([Ww]hatsapp-for-linux)$ +windowrulev2 = tag +im, class:^(ZapZap|com.rtosta.zapzap)$ +windowrulev2 = tag +im, class:^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$ +windowrulev2 = tag +im, class:^(teams-for-linux)$ + +# game tags +windowrulev2 = tag +games, class:^(gamescope)$ +windowrulev2 = tag +games, class:^(steam_app_\d+)$ + +# gamestore tags +windowrulev2 = tag +gamestore, class:^([Ss]team)$ +windowrulev2 = tag +gamestore, title:^([Ll]utris)$ +windowrulev2 = tag +gamestore, class:^(com.heroicgameslauncher.hgl)$ + +# file-manager tags +windowrulev2 = tag +file-manager, class:^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$ +windowrulev2 = tag +file-manager, class:^(app.drey.Warp)$ + +# wallpaper tags +windowrulev2 = tag +wallpaper title:^([Ww]aytrogen)$ +windowrulev2 = tag +wallpaper, class:^([Ww]aytrogen)$ + +# multimedia tags +windowrulev2 = tag +multimedia, class:^([Aa]udacious)$ + + +# settings tags +windowrulev2 = tag +settings, title:^(ROG Control)$ +windowrulev2 = tag +settings, class:^(wihotspot(-gui)?)$ # wifi hotspot +windowrulev2 = tag +settings, class:^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer +windowrulev2 = tag +settings, class:^(gnome-disks|wihotspot(-gui)?)$ +windowrulev2 = tag +settings, title:(Kvantum Manager) +windowrulev2 = tag +settings, class:^(file-roller|org.gnome.FileRoller)$ # archive manager +windowrulev2 = tag +settings, class:^(nm-applet|nm-connection-editor|blueman-manager)$ +windowrulev2 = tag +settings, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ +windowrulev2 = tag +settings, class:^(qt5ct|qt6ct|[Yy]ad)$ +windowrulev2 = tag +settings, class:(xdg-desktop-portal-gtk) +windowrulev2 = tag +settings, class:^(org.kde.polkit-kde-authentication-agent-1)$ +windowrulev2 = tag +settings, class:^([Rr]ofi)$ + +# viewer tags +windowrulev2 = tag +viewer, class:^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor +windowrulev2 = tag +viewer, class:^(evince)$ # document viewer +windowrulev2 = tag +viewer, class:^(eog|org.gnome.Loupe)$ # image viewer + +# POSITION +# windowrulev2 = center,floating:1 # warning, it cause even the menu to float and center. +windowrulev2 = center, tag:KooL_Cheat* +windowrulev2 = center, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) +windowrulev2 = center, title:^(ROG Control)$ +windowrulev2 = center, tag:KooL-Settings* +windowrulev2 = center, title:^(Keybindings)$ +windowrulev2 = center, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ +windowrulev2 = center, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +windowrulev2 = center, class:^([Ff]erdium)$ +windowrulev2 = move 72% 7%,title:^(Picture-in-Picture)$ +#windowrulev2 = move 72% 7%,title:^(Firefox)$ + +# windowrule v2 to avoid idle for fullscreen apps +#windowrulev2 = idleinhibit fullscreen, class:^(*)$ +#windowrulev2 = idleinhibit fullscreen, title:^(*)$ +windowrulev2 = idleinhibit fullscreen, fullscreen:1 + +# windowrule v2 move to workspace +windowrulev2 = workspace 1, tag:email* +windowrulev2 = workspace 2, tag:browser* +#windowrulev2 = workspace 3, class:^([Tt]hunar)$ +#windowrulev2 = workspace 3, tag:projects* +windowrulev2 = workspace 5, tag:gamestore* +windowrulev2 = workspace 7, tag:im* +windowrulev2 = workspace 8, tag:games* + +# windowrule v2 move to workspace (silent) +windowrulev2 = workspace 4 silent, tag:screenshare* +windowrulev2 = workspace 6 silent, class:^(virt-manager)$ +windowrulev2 = workspace 6 silent, class:^(.virt-manager-wrapped)$ +windowrulev2 = workspace 9 silent, tag:multimedia* + +# FLOAT +windowrulev2 = float, tag:KooL_Cheat* +windowrulev2 = float, tag:wallpaper* +windowrulev2 = float, tag:settings* +windowrulev2 = float, tag:viewer* +windowrulev2 = float, tag:KooL-Settings* +windowrulev2 = float, class:([Zz]oom|onedriver|onedriver-launcher)$ +windowrulev2 = float, class:(org.gnome.Calculator), title:(Calculator) +windowrulev2 = float, class:^(mpv|com.github.rafostar.Clapper)$ +windowrulev2 = float, class:^([Qq]alculate-gtk)$ +#windowrulev2 = float, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +windowrulev2 = float, class:^([Ff]erdium)$ +windowrulev2 = float, title:^(Picture-in-Picture)$ +#windowrulev2 = float, title:^(Firefox)$ + + +#windowrule v2 - float popups and dialogue +windowrulev2 = float, title:^(Authentication Required)$ +windowrulev2 = center, title:^(Authentication Required)$ +windowrulev2 = float, class:(codium|codium-url-handler|VSCodium), title:negative:(.*codium.*|.*VSCodium.*) +windowrulev2 = float, class:^(com.heroicgameslauncher.hgl)$, title:negative:(Heroic Games Launcher) +windowrulev2 = float, class:^([Ss]team)$, title:negative:^([Ss]team)$ +windowrulev2 = float, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) +#windowrulev2 = float, class:(electron), title:(Add Folder to Workspace) +windowrulev2 = float, title:^(Add Folder to Workspace)$ +windowrulev2 = size 70% 60%, title:^(Add Folder to Workspace)$ +windowrulev2 = center, title:^(Add Folder to Workspace)$ +windowrulev2 = float, initialTitle:(Open Files) +windowrulev2 = size 70% 60%, initialTitle:(Open Files) +windowrulev2 = float, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background +windowrulev2 = center, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background +windowrulev2 = size 16% 12%, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background + +# OPACITY +windowrulev2 = opacity 0.9 0.7, tag:browser* +windowrulev2 = opacity 0.9 0.8, tag:projects* +windowrulev2 = opacity 0.94 0.86, tag:im* +windowrulev2 = opacity 0.94 0.86, tag:multimedia* +windowrulev2 = opacity 0.9 0.8, tag:file-manager* +windowrulev2 = opacity 0.8 0.7, tag:terminal* +windowrulev2 = opacity 0.8 0.7, tag:settings* +windowrulev2 = opacity 0.82 0.75, tag:viewer* +windowrulev2 = opacity 0.9 0.7, tag:wallpaper* +windowrulev2 = opacity 0.8 0.7, class:^(gedit|org.gnome.TextEditor|mousepad)$ +windowrulev2 = opacity 0.9 0.8, class:^(deluge)$ +windowrulev2 = opacity 0.9 0.8, class:^(im.riot.Riot)$ # Element matrix client +windowrulev2 = opacity 0.9 0.8, class:^(seahorse)$ # gnome-keyring gui +windowrulev2 = opacity 0.95 0.75, title:^(Picture-in-Picture)$ + + +# SIZE +windowrulev2 = size 65% 90%, tag:KooL_Cheat* +windowrulev2 = size 70% 70%, tag:wallpaper* +windowrulev2 = size 70% 70%, tag:settings* +windowrulev2 = size 60% 70%, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +windowrulev2 = size 60% 70%, class:^([Ff]erdium)$ + +#windowrulev2 = size 25% 25%, title:^(Picture-in-Picture)$ +#windowrulev2 = size 25% 25%, title:^(Firefox)$ + +# PINNING +windowrulev2 = pin, title:^(Picture-in-Picture)$ +#windowrulev2 = pin,title:^(Firefox)$ + +# windowrule v2 - extras +windowrulev2 = keepaspectratio, title:^(Picture-in-Picture)$ + +# BLUR & FULLSCREEN +windowrulev2 = noblur, tag:games* +windowrulev2 = fullscreen, tag:games* + +#windowrulev2 = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1 +#windowrulev2 = bordercolor rgb(282737) rgb(1E1D2D), floating:1 +#windowrulev2 = opacity 0.8 0.8, pinned:1 + +# LAYER RULES +layerrule = blur, rofi +layerrule = ignorezero, rofi +layerrule = blur, notifications +layerrule = ignorezero, notifications +#layerrule = ignorealpha 0.5, tag:notif* + +#layerrule = ignorezero, class:^([Rr]ofi)$ +#layerrule = blur, class:^([Rr]ofi)$ +#layerrule = unset,class:^([Rr]ofi)$ +#layerrule = ignorezero, + +#layerrule = ignorezero, overview +#layerrule = blur, overview \ No newline at end of file diff --git a/hypr/UserConfigs/WindowRules.conf b/hypr/UserConfigs/WindowRules.conf new file mode 100644 index 0000000..85437c6 --- /dev/null +++ b/hypr/UserConfigs/WindowRules.conf @@ -0,0 +1,236 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# For window rules and layerrules +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + +# NOTES: This is only for Hyprland > 0.48 + +# note for ja: This should NOT be implemented on Debian and Ubuntu + +# windowrule - tags - add apps under appropriate tag to use the same settings +# browser tags +windowrule = tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$ +windowrule = tag +browser, class:^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$ +windowrule = tag +browser, class:^(chrome-.+-Default)$ # Chrome PWAs +windowrule = tag +browser, class:^([Cc]hromium)$ +windowrule = tag +browser, class:^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$ +windowrule = tag +browser, class:^(Brave-browser(-beta|-dev|-unstable)?)$ +windowrule = tag +browser, class:^([Tt]horium-browser|[Cc]achy-browser)$ +windowrule = tag +browser, class:^(zen-alpha|zen)$ + +# notif tags +windowrule = tag +notif, class:^(swaync-control-center|swaync-notification-window|swaync-client|class)$ + +# KooL settings tag +windowrule = tag +KooL_Cheat, title:^(KooL Quick Cheat Sheet)$ +windowrule = tag +KooL_Settings, title:^(KooL Hyprland Settings)$ +windowrule = tag +KooL-Settings, class:^(nwg-displays|nwg-look)$ + +# terminal tags +windowrule = tag +terminal, class:^(Alacritty|kitty|kitty-dropterm)$ + +# email tags +windowrule = tag +email, class:^([Tt]hunderbird|org.gnome.Evolution)$ +windowrule = tag +email, class:^(eu.betterbird.Betterbird)$ + +# project tags +windowrule = tag +projects, class:^(codium|codium-url-handler|VSCodium)$ +windowrule = tag +projects, class:^(VSCode|code-url-handler)$ +windowrule = tag +projects, class:^(jetbrains-.+)$ # JetBrains IDEs + +# screenshare tags +windowrule = tag +screenshare, class:^(com.obsproject.Studio)$ + +# IM tags +windowrule = tag +im, class:^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$ +windowrule = tag +im, class:^([Ff]erdium)$ +windowrule = tag +im, class:^([Ww]hatsapp-for-linux)$ +windowrule = tag +im, class:^(ZapZap|com.rtosta.zapzap)$ +windowrule = tag +im, class:^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$ +windowrule = tag +im, class:^(teams-for-linux)$ +windowrule = tag +im, class:^(im.riot.Riot|Element)$ # Element Matrix client + +# game tags +windowrule = tag +games, class:^(gamescope)$ +windowrule = tag +games, class:^(steam_app_\d+)$ + +# gamestore tags +windowrule = tag +gamestore, class:^([Ss]team)$ +windowrule = tag +gamestore, title:^([Ll]utris)$ +windowrule = tag +gamestore, class:^(com.heroicgameslauncher.hgl)$ + +# file-manager tags +windowrule = tag +file-manager, class:^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$ +windowrule = tag +file-manager, class:^(app.drey.Warp)$ + +# wallpaper tags +windowrule = tag +wallpaper, class:^([Ww]aytrogen)$ + +# multimedia tags +windowrule = tag +multimedia, class:^([Aa]udacious)$ + +# multimedia-video tags +windowrule = tag +multimedia_video, class:^([Mm]pv|vlc)$ + +# settings tags +windowrule = tag +settings, title:^(ROG Control)$ +windowrule = tag +settings, class:^(wihotspot(-gui)?)$ # wifi hotspot +windowrule = tag +settings, class:^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer +windowrule = tag +settings, class:^(gnome-disks|wihotspot(-gui)?)$ +windowrule = tag +settings, title:(Kvantum Manager) +windowrule = tag +settings, class:^(file-roller|org.gnome.FileRoller)$ # archive manager +windowrule = tag +settings, class:^(nm-applet|nm-connection-editor|blueman-manager)$ +windowrule = tag +settings, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ +windowrule = tag +settings, class:^(qt5ct|qt6ct|[Yy]ad)$ +windowrule = tag +settings, class:(xdg-desktop-portal-gtk) +windowrule = tag +settings, class:^(org.kde.polkit-kde-authentication-agent-1)$ +windowrule = tag +settings, class:^([Rr]ofi)$ + +# viewer tags +windowrule = tag +viewer, class:^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor +windowrule = tag +viewer, class:^(evince)$ # document viewer +windowrule = tag +viewer, class:^(eog|org.gnome.Loupe)$ # image viewer + +# Some special override rules +windowrule = noblur, tag:multimedia_video* +windowrule = opacity 1.0, tag:multimedia_video* + +# POSITION +# windowrule = center,floating:1 # warning, it cause even the menu to float and center. +windowrule = center, tag:KooL_Cheat* +windowrule = center, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) +windowrule = center, title:^(ROG Control)$ +windowrule = center, tag:KooL-Settings* +windowrule = center, title:^(Keybindings)$ +windowrule = center, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ +windowrule = center, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +windowrule = center, class:^([Ff]erdium)$ +windowrule = move 72% 7%,title:^(Picture-in-Picture)$ +#windowrule = move 72% 7%,title:^(Firefox)$ + +# windowrule to avoid idle for fullscreen apps +#windowrule = idleinhibit fullscreen, class:^(*)$ +#windowrule = idleinhibit fullscreen, title:^(*)$ +windowrule = idleinhibit fullscreen, fullscreen:1 + +# windowrule move to workspace +windowrule = workspace 1, tag:email* +windowrule = workspace 2, tag:browser* +#windowrule = workspace 3, class:^([Tt]hunar)$ +#windowrule = workspace 3, tag:projects* +windowrule = workspace 5, tag:gamestore* +windowrule = workspace 7, tag:im* +windowrule = workspace 8, tag:games* + +# windowrule move to workspace (silent) +windowrule = workspace 4 silent, tag:screenshare* +windowrule = workspace 6 silent, class:^(virt-manager)$ +windowrule = workspace 6 silent, class:^(.virt-manager-wrapped)$ +windowrule = workspace 9 silent, tag:multimedia* + +# FLOAT +windowrule = float, tag:KooL_Cheat* +windowrule = float, tag:wallpaper* +windowrule = float, tag:settings* +windowrule = float, tag:viewer* +windowrule = float, tag:KooL-Settings* +windowrule = float, class:([Zz]oom|onedriver|onedriver-launcher)$ +windowrule = float, class:(org.gnome.Calculator), title:(Calculator) +windowrule = float, class:^(mpv|com.github.rafostar.Clapper)$ +windowrule = float, class:^([Qq]alculate-gtk)$ +#windowrule = float, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +windowrule = float, class:^([Ff]erdium)$ +windowrule = float, title:^(Picture-in-Picture)$ +#windowrule = float, title:^(Firefox)$ + +# windowrule - ######### float popups and dialogue ####### +windowrule = float, title:^(Authentication Required)$ +windowrule = center, title:^(Authentication Required)$ +windowrule = float, class:(codium|codium-url-handler|VSCodium), title:negative:(.*codium.*|.*VSCodium.*) +windowrule = float, class:^(com.heroicgameslauncher.hgl)$, title:negative:(Heroic Games Launcher) +windowrule = float, class:^([Ss]team)$, title:negative:^([Ss]team)$ +windowrule = float, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) + +windowrule = float, title:^(Add Folder to Workspace)$ +windowrule = size 70% 60%, title:^(Add Folder to Workspace)$ +windowrule = center, title:^(Add Folder to Workspace)$ + +windowrule = float, title:^(Save As)$ +windowrule = size 70% 60%, title:^(Save As)$ +windowrule = center, title:^(Save As)$ + +windowrule = float, initialTitle:(Open Files) +windowrule = size 70% 60%, initialTitle:(Open Files) + +windowrule = float, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background +windowrule = center, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background +windowrule = size 16% 12%, title:^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background +# END of float popups and dialogue ####### + +# OPACITY +windowrule = opacity 0.9 0.7, tag:browser* +windowrule = opacity 1.0, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$ +windowrule = opacity 0.9 0.8, tag:projects* +windowrule = opacity 0.94 0.86, tag:im* +windowrule = opacity 0.94 0.86, tag:multimedia* +windowrule = opacity 0.9 0.8, tag:file-manager* +windowrule = opacity 0.8 0.7, tag:terminal* +windowrule = opacity 0.8 0.7, tag:settings* +windowrule = opacity 0.82 0.75, tag:viewer* +windowrule = opacity 0.9 0.7, tag:wallpaper* +windowrule = opacity 0.8 0.7, class:^(gedit|org.gnome.TextEditor|mousepad)$ +windowrule = opacity 0.9 0.8, class:^(deluge)$ +windowrule = opacity 0.9 0.8, class:^(seahorse)$ # gnome-keyring gui +windowrule = opacity 0.95 0.75, title:^(Picture-in-Picture)$ +windowrule = opacity 0.9,class:^(code)$ + +# SIZE +windowrule = size 65% 90%, tag:KooL_Cheat* +windowrule = size 70% 70%, tag:wallpaper* +windowrule = size 70% 70%, tag:settings* +windowrule = size 60% 70%, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$ +windowrule = size 60% 70%, class:^([Ff]erdium)$ + +#windowrule = size 25% 25%, title:^(Picture-in-Picture)$ +#windowrule = size 25% 25%, title:^(Firefox)$ + +# PINNING +windowrule = pin, title:^(Picture-in-Picture)$ +#windowrule = pin,title:^(Firefox)$ + +# windowrule - extras +windowrule = keepaspectratio, title:^(Picture-in-Picture)$ + +# BLUR & FULLSCREEN +windowrule = noblur, tag:games* +windowrule = fullscreen, tag:games* + + +#This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products +windowrule = noinitialfocus, class:^(jetbrains-*) +windowrule = noinitialfocus, title:^(wind.*)$ + +#This will gonna make the VS Code bluer like other apps +windowrule = opacity 0.8,class:^(code)$ + +#windowrule = bordercolor rgb(EE4B55) rgb(880808), fullscreen:1 +#windowrule = bordercolor rgb(282737) rgb(1E1D2D), floating:1 +#windowrule = opacity 0.8 0.8, pinned:1 + +# LAYER RULES +layerrule = blur, rofi +layerrule = ignorezero, rofi +layerrule = blur, notifications +layerrule = ignorezero, notifications +layerrule = blur, quickshell:overview +layerrule = ignorezero, quickshell:overview +layerrule = ignorealpha 0.5, quickshell:overview + +#layerrule = ignorealpha 0.5, tag:notif* + +#layerrule = ignorezero, class:^([Rr]ofi)$ +#layerrule = blur, class:^([Rr]ofi)$ +#layerrule = unset,class:^([Rr]ofi)$ +#layerrule = ignorezero, + +#layerrule = ignorezero, overview +#layerrule = blur, overview diff --git a/hypr/UserConfigs/WorkSpaceRules b/hypr/UserConfigs/WorkSpaceRules new file mode 100644 index 0000000..aa86b35 --- /dev/null +++ b/hypr/UserConfigs/WorkSpaceRules @@ -0,0 +1,32 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # + +# NOTE: THIS IS NOT BEING SOURCED by hyprland +# It is only here as a guide if you want to do it manually +# The file you should edit is ~/.config/hypr/workspaces.conf +# Since that is the work space rules being sourced by hyprland +# use nwg-displays to handle your workspace rules. + +# You can set workspace rules to achieve workspace-specific behaviors. +# For instance, you can define a workspace where all windows are drawn without borders or gaps. + +# https://wiki.hyprland.org/Configuring/Workspace-Rules/ + +# Assigning workspace to a certain monitor. Below are just examples +# workspace = 1, monitor:eDP-1 +# workspace = 2, monitor:eDP-1 +# workspace = 3, monitor:eDP-1 +# workspace = 4, monitor:eDP-1 +# workspace = 5, monitor:DP-2 +# workspace = 6, monitor:DP-2 +# workspace = 7, monitor:DP-2 +# workspace = 8, monitor:DP-2 + + +# example rules (from wiki) +# workspace = 3, rounding:false, decorate:false +# workspace = name:coding, rounding:false, decorate:false, gapsin:0, gapsout:0, border:false, decorate:false, monitor:DP-1 +# workspace = 8,bordersize:8 +# workspace = name:Hello, monitor:DP-1, default:true +# workspace = name:gaming, monitor:desc:Chimei Innolux Corporation 0x150C, default:true +# workspace = 5, on-created-empty:[float] firefox +# workspace = special:scratchpad, on-created-empty:foot \ No newline at end of file diff --git a/hypr/UserScripts/00-Readme b/hypr/UserScripts/00-Readme new file mode 100755 index 0000000..091bac8 --- /dev/null +++ b/hypr/UserScripts/00-Readme @@ -0,0 +1,5 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # + +# Place your new scripts here. +# If you need to edit a script from main script (~/.config/hypr/scripts), copy it on this directory, and edit. +# Make sure to update as well the keybinds in ~/.config/hypr/UserConfigs directory if any script is linked to it \ No newline at end of file diff --git a/hypr/UserScripts/RainbowBorders.bak.sh b/hypr/UserScripts/RainbowBorders.bak.sh new file mode 100755 index 0000000..cc1419f --- /dev/null +++ b/hypr/UserScripts/RainbowBorders.bak.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# for rainbow borders animation + +function random_hex() { + random_hex=("0xff$(openssl rand -hex 3)") + echo $random_hex +} + +# rainbow colors only for active window +hyprctl keyword general:col.active_border $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) 270deg + +# rainbow colors for inactive window (uncomment to take effect) +#hyprctl keyword general:col.inactive_border $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) $(random_hex) 270deg \ No newline at end of file diff --git a/hypr/UserScripts/RofiBeats.sh b/hypr/UserScripts/RofiBeats.sh new file mode 100755 index 0000000..1cddce0 --- /dev/null +++ b/hypr/UserScripts/RofiBeats.sh @@ -0,0 +1,153 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# For Rofi Beats to play online Music or Locally saved media files + +# Variables +mDIR="$HOME/Music/" +iDIR="$HOME/.config/swaync/icons" +rofi_theme="$HOME/.config/rofi/config-rofi-Beats.rasi" +rofi_theme_1="$HOME/.config/rofi/config-rofi-Beats-menu.rasi" + +# Online Stations. Edit as required +declare -A online_music=( + ["FM - Easy Rock 96.3 ๐Ÿ“ป๐ŸŽถ"]="https://radio-stations-philippines.com/easy-rock" + ["FM - Easy Rock - Baguio 91.9 ๐Ÿ“ป๐ŸŽถ"]="https://radio-stations-philippines.com/easy-rock-baguio" + ["FM - Love Radio 90.7 ๐Ÿ“ป๐ŸŽถ"]="https://radio-stations-philippines.com/love" + ["FM - WRock - CEBU 96.3 ๐Ÿ“ป๐ŸŽถ"]="https://onlineradio.ph/126-96-3-wrock.html" + ["FM - Fresh Philippines ๐Ÿ“ป๐ŸŽถ"]="https://onlineradio.ph/553-fresh-fm.html" + ["Radio - Lofi Girl ๐ŸŽง๐ŸŽถ"]="https://play.streamafrica.net/lofiradio" + ["Radio - Chillhop ๐ŸŽง๐ŸŽถ"]="http://stream.zeno.fm/fyn8eh3h5f8uv" + ["Radio - Ibiza Global ๐ŸŽง๐ŸŽถ"]="https://filtermusic.net/ibiza-global" + ["Radio - Metal Music ๐ŸŽง๐ŸŽถ"]="https://tunein.com/radio/mETaLmuSicRaDio-s119867/" + ["YT - Wish 107.5 YT Pinoy HipHop ๐Ÿ“ป๐ŸŽถ"]="https://youtube.com/playlist?list=PLkrzfEDjeYJnmgMYwCKid4XIFqUKBVWEs&si=vahW_noh4UDJ5d37" + ["YT - Youtube Top 100 Songs Global ๐Ÿ“น๐ŸŽถ"]="https://youtube.com/playlist?list=PL4fGSI1pDJn6puJdseH2Rt9sMvt9E2M4i&si=5jsyfqcoUXBCSLeu" + ["YT - Wish 107.5 YT Wishclusives ๐Ÿ“น๐ŸŽถ"]="https://youtube.com/playlist?list=PLkrzfEDjeYJn5B22H9HOWP3Kxxs-DkPSM&si=d_Ld2OKhGvpH48WO" + ["YT - Relaxing Piano Music ๐ŸŽน๐ŸŽถ"]="https://youtu.be/6H7hXzjFoVU?si=nZTPREC9lnK1JJUG" + ["YT - Youtube Remix ๐Ÿ“น๐ŸŽถ"]="https://youtube.com/playlist?list=PLeqTkIUlrZXlSNn3tcXAa-zbo95j0iN-0" + ["YT - Korean Drama OST ๐Ÿ“น๐ŸŽถ"]="https://youtube.com/playlist?list=PLUge_o9AIFp4HuA-A3e3ZqENh63LuRRlQ" + ["YT - lofi hip hop radio beats ๐Ÿ“น๐ŸŽถ"]="https://www.youtube.com/live/jfKfPfyJRdk?si=PnJIA9ErQIAw6-qd" + ["YT - Relaxing Piano Jazz Music ๐ŸŽน๐ŸŽถ"]="https://youtu.be/85UEqRat6E4?si=jXQL1Yp2VP_G6NSn" +) + +# Populate local_music array with files from music directory and subdirectories +populate_local_music() { + local_music=() + filenames=() + while IFS= read -r file; do + local_music+=("$file") + filenames+=("$(basename "$file")") + done < <(find -L "$mDIR" -type f \( -iname "*.mp3" -o -iname "*.flac" -o -iname "*.wav" -o -iname "*.ogg" -o -iname "*.mp4" \)) +} + +# Function for displaying notifications +notification() { + notify-send -u normal -i "$iDIR/music.png" "Now Playing:" "$@" +} + +# Main function for playing local music +play_local_music() { + populate_local_music + + # Prompt the user to select a song + choice=$(printf "%s\n" "${filenames[@]}" | rofi -i -dmenu -config $rofi_theme) + + if [ -z "$choice" ]; then + exit 1 + fi + + # Find the corresponding file path based on user's choice and set that to play the song then continue on the list + for (( i=0; i<"${#filenames[@]}"; ++i )); do + if [ "${filenames[$i]}" = "$choice" ]; then + + if music_playing; then + stop_music + fi + notification "$choice" + mpv --playlist-start="$i" --loop-playlist --vid=no "${local_music[@]}" + + break + fi + done +} + +# Main function for shuffling local music +shuffle_local_music() { + if music_playing; then + stop_music + fi + notification "Shuffle Play local music" + + # Play music in $mDIR on shuffle + mpv --shuffle --loop-playlist --vid=no "$mDIR" +} + +# Main function for playing online music +play_online_music() { + choice=$(for online in "${!online_music[@]}"; do + echo "$online" + done | sort | rofi -i -dmenu -config "$rofi_theme") + + if [ -z "$choice" ]; then + exit 1 + fi + + link="${online_music[$choice]}" + + if music_playing; then + stop_music + fi + notification "$choice" + + # Play the selected online music using mpv + mpv --shuffle --vid=no "$link" +} + +# Function to check if music is already playing +music_playing() { + pgrep -x "mpv" > /dev/null +} + +# Function to stop music and kill mpv processes +stop_music() { + mpv_pids=$(pgrep -x mpv) + + if [ -n "$mpv_pids" ]; then + # Get the PID of the mpv process used by mpvpaper (using the unique argument added) + mpvpaper_pid=$(ps aux | grep -- 'unique-wallpaper-process' | grep -v 'grep' | awk '{print $2}') + + for pid in $mpv_pids; do + if ! echo "$mpvpaper_pid" | grep -q "$pid"; then + kill -9 $pid || true + fi + done + notify-send -u low -i "$iDIR/music.png" "Music stopped" || true + fi +} + +user_choice=$(printf "%s\n" \ + "Play from Online Stations" \ + "Play from Music directory" \ + "Shuffle Play from Music directory" \ + "Stop RofiBeats" \ + | rofi -dmenu -config $rofi_theme_1) + +echo "User choice: $user_choice" + +case "$user_choice" in + "Play from Online Stations") + play_online_music + ;; + "Play from Music directory") + play_local_music + ;; + "Shuffle Play from Music directory") + shuffle_local_music + ;; + "Stop RofiBeats") + if music_playing; then + stop_music + fi + ;; + *) + ;; +esac diff --git a/hypr/UserScripts/RofiCalc.sh b/hypr/UserScripts/RofiCalc.sh new file mode 100755 index 0000000..4b3b8b6 --- /dev/null +++ b/hypr/UserScripts/RofiCalc.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ +# /* Calculator (using qalculate) and rofi */ +# /* Submitted by: https://github.com/JosephArmas */ + +rofi_theme="$HOME/.config/rofi/config-calc.rasi" + +# Kill Rofi if already running before execution +if pgrep -x "rofi" >/dev/null; then + pkill rofi +fi + +# main function + +while true; do + result=$( + rofi -i -dmenu \ + -config $rofi_theme \ + -mesg "$result = $calc_result" + ) + + if [ $? -ne 0 ]; then + exit + fi + + if [ -n "$result" ]; then + calc_result=$(qalc -t "$result") + echo "$calc_result" | wl-copy + fi +done diff --git a/hypr/UserScripts/Tak0-Autodispatch.sh b/hypr/UserScripts/Tak0-Autodispatch.sh new file mode 100755 index 0000000..a1f7212 --- /dev/null +++ b/hypr/UserScripts/Tak0-Autodispatch.sh @@ -0,0 +1,90 @@ +#!/bin/bash +# USAGE / ะ†ะะกะขะ ะฃะšะฆะ†ะฏ: +# 1) Run from terminal: +# ./dispatch.sh +# Example: +# ./dispatch.sh discord 2 +# +# 2) Call from Hyprland config (in hyprland.conf file): +# exec-once = /path/to/dispatch.sh +# +# Logs are saved in dispatch.log file next to the script. +# If the window doesn't appear or is dispatched incorrectly โ€” info will be there. +# +# Notes: +# - Script waits about ~9 seconds (30 iterations of 0.3 sec) for window to appear. +# - Uses hyprctl and jq, so these tools must be installed. +# +# USAGE / ะ†ะะกะขะ ะฃะšะฆะ†ะฏ: +# 1) ะ—ะฐะฟัƒัะบ ะท ั‚ะตั€ะผั–ะฝะฐะปัƒ: +# ./dispatch.sh +# ะะฐะฟั€ะธะบะปะฐะด: +# ./dispatch.sh discord 2 +# +# 2) ะ’ะธะบะปะธะบ ะท ะบะพะฝั„ั–ะณัƒั€ะฐั†ั–ั— Hyprland (ัƒ ั„ะฐะนะปั– hyprland.conf): +# exec-once = /path/to/dispatch.sh +# +# ะ›ะพะณะธ ะทะฑะตั€ั–ะณะฐัŽั‚ัŒัั ัƒ ั„ะฐะนะปั– dispatch.log ะฟะพั€ัƒั‡ ะทั– ัะบั€ะธะฟั‚ะพะผ. +# ะฏะบั‰ะพ ะฒั–ะบะฝะพ ะฝะต ะท'ัะฒะธะปะพััŒ ะฐะฑะพ ะฝะตะฟั€ะฐะฒะธะปัŒะฝะพ ะดะธัะฟะฐั‚ั‡ะธะปะพััŒ โ€” ั–ะฝั„ะพั€ะผะฐั†ั–ั ั‚ะฐะผ. +# +# ะŸั€ะธะผั–ั‚ะบะธ: +# - ะกะบั€ะธะฟั‚ ั‡ะตะบะฐั” ะดะพ ~9 ัะตะบัƒะฝะด (30 ั–ั‚ะตั€ะฐั†ั–ะน ะฟะพ 0.3 ัะตะบ) ะฟะพะบะธ ะฒั–ะบะฝะพ ะท'ัะฒะธั‚ัŒัั. +# - ะ’ะธะบะพั€ะธัั‚ะพะฒัƒั” hyprctl ั– jq, ั‚ะพะผัƒ ั†ั– ั–ะฝัั‚ั€ัƒะผะตะฝั‚ะธ ะผะฐัŽั‚ัŒ ะฑัƒั‚ะธ ะฒัั‚ะฐะฝะพะฒะปะตะฝั–. + +LOGFILE="$(dirname "$0")/dispatch.log" +# Log file path located next to the script. +# ะคะฐะนะป ะปะพะณั–ะฒ ั€ะพะทั‚ะฐัˆะพะฒะฐะฝะธะน ะฟะพั€ัƒั‡ ะทั– ัะบั€ะธะฟั‚ะพะผ. + +APP=$1 +# The application command or window class to launch or match. +# ะšะพะผะฐะฝะดะฐ ะดะปั ะทะฐะฟัƒัะบัƒ ะฐะฟะปั–ะบะฐั†ั–ั— ะฐะฑะพ ะบะปะฐั ะฒั–ะบะฝะฐ ะดะปั ะฟะพัˆัƒะบัƒ. + +TARGET_WORKSPACE=$2 +# The target workspace number where the window should be moved. +# ะฆั–ะปัŒะพะฒะธะน ะฝะพะผะตั€ ะฒะพั€ะบัะฟะตะนััƒ, ะบัƒะดะธ ะฟะพั‚ั€ั–ะฑะฝะพ ะฟะตั€ะตะผั–ัั‚ะธั‚ะธ ะฒั–ะบะฝะพ. + +# Check if required arguments are provided. +# ะŸะตั€ะตะฒั–ั€ะบะฐ ะฝะฐัะฒะฝะพัั‚ั– ะฝะตะพะฑั…ั–ะดะฝะธั… ะฟะฐั€ะฐะผะตั‚ั€ั–ะฒ. +if [[ -z "$APP" || -z "$TARGET_WORKSPACE" ]]; then + echo "Usage: $0 " >> "$LOGFILE" 2>&1 + exit 1 +fi + +echo "Starting dispatch of '$APP' to workspace $TARGET_WORKSPACE at $(date)" >> "$LOGFILE" +# Starting the dispatch process and logging the event. +# ะŸะพั‡ะฐั‚ะพะบ ะฟั€ะพั†ะตััƒ ะดะธัะฟะฐั‚ั‡ัƒ, ะทะฐะฟะธั ัƒ ะปะพะณ. + +# Avoid early workspace focus issues by switching workspace first. +# ะฃะฝะธะบะฐั”ะผะพ ะฟั€ะพะฑะปะตะผ ะท ั€ะฐะฝะฝั–ะผ ั„ะพะบัƒัะพะผ, ัะฟะพั‡ะฐั‚ะบัƒ ะฟะตั€ะตะบะปัŽั‡ะฐั”ะผะพ ะฒะพั€ะบัะฟะตะนั. +hyprctl dispatch workspace "$TARGET_WORKSPACE" >> "$LOGFILE" 2>&1 +sleep 0.4 + +# Launch the application in the background and disown it. +# ะ—ะฐะฟัƒัะบะฐั”ะผะพ ะฐะฟะปั–ะบะฐั†ั–ัŽ ัƒ ั„ะพะฝะพะฒะพะผัƒ ั€ะตะถะธะผั– ั‚ะฐ ะฒั–ะดะฒโ€™ัะทัƒั”ะผะพ ะฒั–ะด ั‚ะตั€ะผั–ะฝะฐะปัƒ. +$APP & disown +pid=$! + +echo "Launched '$APP' with PID $pid" >> "$LOGFILE" +# Log the launched process ID. +# ะ›ะพะณ ะฟั€ะพั†ะตััƒ ะทะฐะฟัƒัะบัƒ ะท PID. + +# Wait for the application window to appear (matching window class). +# ะงะตะบะฐั”ะผะพ ะฟะพัะฒะธ ะฒั–ะบะฝะฐ ะฐะฟะปั–ะบะฐั†ั–ั— (ะทะฐ ะบะปะฐัะพะผ ะฒั–ะบะฝะฐ). +for i in {1..30}; do + win=$(hyprctl clients -j | jq -r --arg APP "$APP" ' + .[] | select(.class | test($APP;"i")) | .address' 2>>"$LOGFILE") + + if [[ -n "$win" ]]; then + echo "Found window $win for app '$APP', moving to workspace $TARGET_WORKSPACE" >> "$LOGFILE" + # Move the window to the target workspace. + # ะŸะตั€ะตะผั–ั‰ะฐั”ะผะพ ะฒั–ะบะฝะพ ะฝะฐ ั†ั–ะปัŒะพะฒะธะน ะฒะพั€ะบัะฟะตะนั. + hyprctl dispatch movetoworkspace "$TARGET_WORKSPACE,address:$win" >> "$LOGFILE" 2>&1 + exit 0 + fi + sleep 0.3 +done + +echo "ERROR: Window for '$APP' was NOT found or dispatched properly to workspace $TARGET_WORKSPACE at $(date)" >> "$LOGFILE" +# Log error if window was not found or dispatched correctly. +# ะ—ะฐะฟะธั ะฟะพะผะธะปะบะธ, ัะบั‰ะพ ะฒั–ะบะฝะพ ะฝะต ะทะฝะฐะนะดะตะฝะพ ะฐะฑะพ ะฝะตะฟั€ะฐะฒะธะปัŒะฝะพ ะดะธัะฟะฐั‚ั‡ะตะฝะพ. +exit 1 diff --git a/hypr/UserScripts/WallpaperAutoChange.sh b/hypr/UserScripts/WallpaperAutoChange.sh new file mode 100755 index 0000000..a6d2ced --- /dev/null +++ b/hypr/UserScripts/WallpaperAutoChange.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# source https://wiki.archlinux.org/title/Hyprland#Using_a_script_to_change_wallpaper_every_X_minutes + +# This script will randomly go through the files of a directory, setting it +# up as the wallpaper at regular intervals +# +# NOTE: this script uses bash (not POSIX shell) for the RANDOM variable + +wallust_refresh=$HOME/.config/hypr/scripts/RefreshNoWaybar.sh + +focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}') + +if [[ $# -lt 1 ]] || [[ ! -d $1 ]]; then + echo "Usage: + $0 " + exit 1 +fi + +# Edit below to control the images transition +export SWWW_TRANSITION_FPS=60 +export SWWW_TRANSITION_TYPE=simple + +# This controls (in seconds) when to switch to the next image +INTERVAL=1800 + +while true; do + find "$1" \ + | while read -r img; do + echo "$((RANDOM % 1000)):$img" + done \ + | sort -n | cut -d':' -f2- \ + | while read -r img; do + swww img -o $focused_monitor "$img" + # Regenerate colors from the exact image path to avoid cache races + $HOME/.config/hypr/scripts/WallustSwww.sh "$img" + # Refresh UI components that depend on wallust output + $wallust_refresh + sleep $INTERVAL + + done +done diff --git a/hypr/UserScripts/WallpaperEffects.sh b/hypr/UserScripts/WallpaperEffects.sh new file mode 100755 index 0000000..ac8fc0e --- /dev/null +++ b/hypr/UserScripts/WallpaperEffects.sh @@ -0,0 +1,148 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# Wallpaper Effects using ImageMagick (SUPER SHIFT W) + +# Variables +terminal=kitty +wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current" +wallpaper_output="$HOME/.config/hypr/wallpaper_effects/.wallpaper_modified" +SCRIPTSDIR="$HOME/.config/hypr/scripts" +focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name') +rofi_theme="$HOME/.config/rofi/config-wallpaper-effect.rasi" + +# Directory for swaync +iDIR="$HOME/.config/swaync/images" +iDIRi="$HOME/.config/swaync/icons" + +# swww transition config +FPS=60 +TYPE="wipe" +DURATION=2 +BEZIER=".43,1.19,1,.4" +SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER" + +# Define ImageMagick effects +declare -A effects=( + ["No Effects"]="no-effects" + ["Black & White"]="magick $wallpaper_current -colorspace gray -sigmoidal-contrast 10,40% $wallpaper_output" + ["Blurred"]="magick $wallpaper_current -blur 0x10 $wallpaper_output" + ["Charcoal"]="magick $wallpaper_current -charcoal 0x5 $wallpaper_output" + ["Edge Detect"]="magick $wallpaper_current -edge 1 $wallpaper_output" + ["Emboss"]="magick $wallpaper_current -emboss 0x5 $wallpaper_output" + ["Frame Raised"]="magick $wallpaper_current +raise 150 $wallpaper_output" + ["Frame Sunk"]="magick $wallpaper_current -raise 150 $wallpaper_output" + ["Negate"]="magick $wallpaper_current -negate $wallpaper_output" + ["Oil Paint"]="magick $wallpaper_current -paint 4 $wallpaper_output" + ["Posterize"]="magick $wallpaper_current -posterize 4 $wallpaper_output" + ["Polaroid"]="magick $wallpaper_current -polaroid 0 $wallpaper_output" + ["Sepia Tone"]="magick $wallpaper_current -sepia-tone 65% $wallpaper_output" + ["Solarize"]="magick $wallpaper_current -solarize 80% $wallpaper_output" + ["Sharpen"]="magick $wallpaper_current -sharpen 0x5 $wallpaper_output" + ["Vignette"]="magick $wallpaper_current -vignette 0x3 $wallpaper_output" + ["Vignette-black"]="magick $wallpaper_current -background black -vignette 0x3 $wallpaper_output" + ["Zoomed"]="magick $wallpaper_current -gravity Center -extent 1:1 $wallpaper_output" +) + +# Function to apply no effects +no-effects() { + swww img -o "$focused_monitor" "$wallpaper_current" $SWWW_PARAMS && + wait $! + wallust run "$wallpaper_current" -s && + wait $! + # Refresh rofi, waybar, wallust palettes + sleep 2 + "$SCRIPTSDIR/Refresh.sh" + + notify-send -u low -i "$iDIR/ja.png" "No wallpaper" "effects applied" + # copying wallpaper for rofi menu + cp "$wallpaper_current" "$wallpaper_output" +} + +# Function to run rofi menu +main() { + # Populate rofi menu options + options=("No Effects") + for effect in "${!effects[@]}"; do + [[ "$effect" != "No Effects" ]] && options+=("$effect") + done + + choice=$(printf "%s\n" "${options[@]}" | LC_COLLATE=C sort | rofi -dmenu -i -config $rofi_theme) + + # Process user choice + if [[ -n "$choice" ]]; then + if [[ "$choice" == "No Effects" ]]; then + no-effects + elif [[ "${effects[$choice]+exists}" ]]; then + # Apply selected effect + notify-send -u normal -i "$iDIR/ja.png" "Applying:" "$choice effects" + eval "${effects[$choice]}" + + # intial kill process + for pid in swaybg mpvpaper; do + killall -SIGUSR1 "$pid" + done + + sleep 1 + swww img -o "$focused_monitor" "$wallpaper_output" $SWWW_PARAMS & + + sleep 2 + + wallust run "$wallpaper_output" -s & + sleep 1 + # Refresh rofi, waybar, wallust palettes + "${SCRIPTSDIR}/Refresh.sh" + notify-send -u low -i "$iDIR/ja.png" "$choice" "effects applied" + else + echo "Effect '$choice' not recognized." + fi + fi +} + +# Check if rofi is already running and kill it +if pidof rofi > /dev/null; then + pkill rofi +fi + +main + +sleep 1 + +if [[ -n "$choice" ]]; then + # Resolve SDDM themes directory (standard and NixOS path) + sddm_themes_dir="" + if [ -d "/usr/share/sddm/themes" ]; then + sddm_themes_dir="/usr/share/sddm/themes" + elif [ -d "/run/current-system/sw/share/sddm/themes" ]; then + sddm_themes_dir="/run/current-system/sw/share/sddm/themes" + fi + + if [ -n "$sddm_themes_dir" ]; then + sddm_simple="$sddm_themes_dir/simple_sddm_2" + + # Only prompt if theme exists and its Backgrounds directory is writable + if [ -d "$sddm_simple" ] && [ -w "$sddm_simple/Backgrounds" ]; then + # Check if yad is running to avoid multiple yad notification + if pidof yad > /dev/null; then + killall yad + fi + + if yad --info --text="Set current wallpaper as SDDM background?\n\nNOTE: This only applies to SIMPLE SDDM v2 Theme" \ + --text-align=left \ + --title="SDDM Background" \ + --timeout=5 \ + --timeout-indicator=right \ + --button="yad-yes:0" \ + --button="yad-no:1" \ + ; then + + # Check if terminal exists + if ! command -v "$terminal" &>/dev/null; then + notify-send -i "$iDIR/ja.png" "Missing $terminal" "Install $terminal to enable setting of wallpaper background" + exit 1 + fi + + exec "$SCRIPTSDIR/sddm_wallpaper.sh" --effects + fi + fi + fi +fi diff --git a/hypr/UserScripts/WallpaperRandom.sh b/hypr/UserScripts/WallpaperRandom.sh new file mode 100755 index 0000000..7939650 --- /dev/null +++ b/hypr/UserScripts/WallpaperRandom.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Script for Random Wallpaper ( CTRL ALT W) + +wallDIR="$HOME/Pictures/wallpapers" +SCRIPTSDIR="$HOME/.config/hypr/scripts" + +focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name') + +PICS=($(find -L ${wallDIR} -type f \( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.pnm" -o -name "*.tga" -o -name "*.tiff" -o -name "*.webp" -o -name "*.bmp" -o -name "*.farbfeld" -o -name "*.gif" \))) +RANDOMPICS=${PICS[ $RANDOM % ${#PICS[@]} ]} + + +# Transition config +FPS=30 +TYPE="random" +DURATION=1 +BEZIER=".43,1.19,1,.4" +SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER" + + +swww query || swww-daemon --format xrgb && swww img -o $focused_monitor ${RANDOMPICS} $SWWW_PARAMS + +wait $! +"$SCRIPTSDIR/WallustSwww.sh" && + +wait $! +sleep 2 +"$SCRIPTSDIR/Refresh.sh" + diff --git a/hypr/UserScripts/WallpaperSelect.sh b/hypr/UserScripts/WallpaperSelect.sh new file mode 100755 index 0000000..466832b --- /dev/null +++ b/hypr/UserScripts/WallpaperSelect.sh @@ -0,0 +1,248 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ +# This script for selecting wallpapers (SUPER W) + +# WALLPAPERS PATH +terminal=kitty +wallDIR="$HOME/Pictures/wallpapers" +SCRIPTSDIR="$HOME/.config/hypr/scripts" +wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current" + +# Directory for swaync +iDIR="$HOME/.config/swaync/images" +iDIRi="$HOME/.config/swaync/icons" + +# swww transition config +FPS=60 +TYPE="any" +DURATION=2 +BEZIER=".43,1.19,1,.4" +SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER" + +# Check if package bc exists +if ! command -v bc &>/dev/null; then + notify-send -i "$iDIR/error.png" "bc missing" "Install package bc first" + exit 1 +fi + +# Variables +rofi_theme="$HOME/.config/rofi/config-wallpaper.rasi" +focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name') + +# Ensure focused_monitor is detected +if [[ -z "$focused_monitor" ]]; then + notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Could not detect focused monitor" + exit 1 +fi + +# Monitor details +scale_factor=$(hyprctl monitors -j | jq -r --arg mon "$focused_monitor" '.[] | select(.name == $mon) | .scale') +monitor_height=$(hyprctl monitors -j | jq -r --arg mon "$focused_monitor" '.[] | select(.name == $mon) | .height') + +icon_size=$(echo "scale=1; ($monitor_height * 3) / ($scale_factor * 150)" | bc) +adjusted_icon_size=$(echo "$icon_size" | awk '{if ($1 < 15) $1 = 20; if ($1 > 25) $1 = 25; print $1}') +rofi_override="element-icon{size:${adjusted_icon_size}%;}" + +# Kill existing wallpaper daemons for video +kill_wallpaper_for_video() { + swww kill 2>/dev/null + pkill mpvpaper 2>/dev/null + pkill swaybg 2>/dev/null + pkill hyprpaper 2>/dev/null +} + +# Kill existing wallpaper daemons for image +kill_wallpaper_for_image() { + pkill mpvpaper 2>/dev/null + pkill swaybg 2>/dev/null + pkill hyprpaper 2>/dev/null +} + +# Retrieve wallpapers (both images & videos) +mapfile -d '' PICS < <(find -L "${wallDIR}" -type f \( \ + -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" -o \ + -iname "*.bmp" -o -iname "*.tiff" -o -iname "*.webp" -o \ + -iname "*.mp4" -o -iname "*.mkv" -o -iname "*.mov" -o -iname "*.webm" \) -print0) + +RANDOM_PIC="${PICS[$((RANDOM % ${#PICS[@]}))]}" +RANDOM_PIC_NAME=". random" + +# Rofi command +rofi_command="rofi -i -show -dmenu -config $rofi_theme -theme-str $rofi_override" + +# Sorting Wallpapers +menu() { + IFS=$'\n' sorted_options=($(sort <<<"${PICS[*]}")) + + printf "%s\x00icon\x1f%s\n" "$RANDOM_PIC_NAME" "$RANDOM_PIC" + + for pic_path in "${sorted_options[@]}"; do + pic_name=$(basename "$pic_path") + if [[ "$pic_name" =~ \.gif$ ]]; then + cache_gif_image="$HOME/.cache/gif_preview/${pic_name}.png" + if [[ ! -f "$cache_gif_image" ]]; then + mkdir -p "$HOME/.cache/gif_preview" + magick "$pic_path[0]" -resize 1920x1080 "$cache_gif_image" + fi + printf "%s\x00icon\x1f%s\n" "$pic_name" "$cache_gif_image" + elif [[ "$pic_name" =~ \.(mp4|mkv|mov|webm|MP4|MKV|MOV|WEBM)$ ]]; then + cache_preview_image="$HOME/.cache/video_preview/${pic_name}.png" + if [[ ! -f "$cache_preview_image" ]]; then + mkdir -p "$HOME/.cache/video_preview" + ffmpeg -v error -y -i "$pic_path" -ss 00:00:01.000 -vframes 1 "$cache_preview_image" + fi + printf "%s\x00icon\x1f%s\n" "$pic_name" "$cache_preview_image" + else + printf "%s\x00icon\x1f%s\n" "$(echo "$pic_name" | cut -d. -f1)" "$pic_path" + fi + done +} + +# Offer SDDM Simple Wallpaper Option (only for non-video wallpapers) +set_sddm_wallpaper() { + sleep 1 + + # Resolve SDDM themes directory (standard and NixOS path) + local sddm_themes_dir="" + if [ -d "/usr/share/sddm/themes" ]; then + sddm_themes_dir="/usr/share/sddm/themes" + elif [ -d "/run/current-system/sw/share/sddm/themes" ]; then + sddm_themes_dir="/run/current-system/sw/share/sddm/themes" + fi + + [ -z "$sddm_themes_dir" ] && return 0 + + local sddm_simple="$sddm_themes_dir/simple_sddm_2" + + # Only prompt if theme exists and its Backgrounds directory is writable + if [ -d "$sddm_simple" ] && [ -w "$sddm_simple/Backgrounds" ]; then + + # Check if yad is running to avoid multiple notifications + if pidof yad >/dev/null; then + killall yad + fi + + if yad --info --text="Set current wallpaper as SDDM background?\n\nNOTE: This only applies to SIMPLE SDDM v2 Theme" \ + --text-align=left \ + --title="SDDM Background" \ + --timeout=5 \ + --timeout-indicator=right \ + --button="yes:0" \ + --button="no:1"; then + + # Check if terminal exists + if ! command -v "$terminal" &>/dev/null; then + notify-send -i "$iDIR/error.png" "Missing $terminal" "Install $terminal to enable setting of wallpaper background" + exit 1 + fi + + exec "$SCRIPTSDIR/sddm_wallpaper.sh" --normal + + fi + fi +} + +modify_startup_config() { + local selected_file="$1" + local startup_config="$HOME/.config/hypr/UserConfigs/Startup_Apps.conf" + + # Check if it's a live wallpaper (video) + if [[ "$selected_file" =~ \.(mp4|mkv|mov|webm)$ ]]; then + # For video wallpapers: + sed -i '/^\s*exec-once\s*=\s*swww-daemon\s*--format\s*xrgb\s*$/s/^/\#/' "$startup_config" + sed -i '/^\s*#\s*exec-once\s*=\s*mpvpaper\s*.*$/s/^#\s*//;' "$startup_config" + + # Update the livewallpaper variable with the selected video path (using $HOME) + selected_file="${selected_file/#$HOME/\$HOME}" # Replace /home/user with $HOME + sed -i "s|^\$livewallpaper=.*|\$livewallpaper=\"$selected_file\"|" "$startup_config" + + echo "Configured for live wallpaper (video)." + else + # For image wallpapers: + sed -i '/^\s*#\s*exec-once\s*=\s*swww-daemon\s*--format\s*xrgb\s*$/s/^\s*#\s*//;' "$startup_config" + + sed -i '/^\s*exec-once\s*=\s*mpvpaper\s*.*$/s/^/\#/' "$startup_config" + + echo "Configured for static wallpaper (image)." + fi +} + +# Apply Image Wallpaper +apply_image_wallpaper() { + local image_path="$1" + + kill_wallpaper_for_image + + if ! pgrep -x "swww-daemon" >/dev/null; then + echo "Starting swww-daemon..." + swww-daemon --format xrgb & + fi + + swww img -o "$focused_monitor" "$image_path" $SWWW_PARAMS + + # Run additional scripts (pass the image path to avoid cache race conditions) + "$SCRIPTSDIR/WallustSwww.sh" "$image_path" + sleep 2 + "$SCRIPTSDIR/Refresh.sh" + sleep 1 + + set_sddm_wallpaper +} + +apply_video_wallpaper() { + local video_path="$1" + + # Check if mpvpaper is installed + if ! command -v mpvpaper &>/dev/null; then + notify-send -i "$iDIR/error.png" "E-R-R-O-R" "mpvpaper not found" + return 1 + fi + kill_wallpaper_for_video + + # Apply video wallpaper using mpvpaper + mpvpaper '*' -o "load-scripts=no no-audio --loop" "$video_path" & +} + +# Main function +main() { + choice=$(menu | $rofi_command) + choice=$(echo "$choice" | xargs) + RANDOM_PIC_NAME=$(echo "$RANDOM_PIC_NAME" | xargs) + + if [[ -z "$choice" ]]; then + echo "No choice selected. Exiting." + exit 0 + fi + + # Handle random selection correctly + if [[ "$choice" == "$RANDOM_PIC_NAME" ]]; then + choice=$(basename "$RANDOM_PIC") + fi + + choice_basename=$(basename "$choice" | sed 's/\(.*\)\.[^.]*$/\1/') + + # Search for the selected file in the wallpapers directory, including subdirectories + selected_file=$(find "$wallDIR" -iname "$choice_basename.*" -print -quit) + + if [[ -z "$selected_file" ]]; then + echo "File not found. Selected choice: $choice" + exit 1 + fi + + # Modify the Startup_Apps.conf file based on wallpaper type + modify_startup_config "$selected_file" + + # **CHECK FIRST** if it's a video or an image **before calling any function** + if [[ "$selected_file" =~ \.(mp4|mkv|mov|webm|MP4|MKV|MOV|WEBM)$ ]]; then + apply_video_wallpaper "$selected_file" + else + apply_image_wallpaper "$selected_file" + fi +} + +# Check if rofi is already running +if pidof rofi >/dev/null; then + pkill rofi +fi + +main \ No newline at end of file diff --git a/hypr/UserScripts/Weather.py b/hypr/UserScripts/Weather.py new file mode 100755 index 0000000..ca1d528 --- /dev/null +++ b/hypr/UserScripts/Weather.py @@ -0,0 +1,544 @@ +#!/usr/bin/env python3 +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# Rewritten to use Open-Meteo APIs (worldwide, no API key) for robust weather data. +# Outputs Waybar-compatible JSON and a simple text cache. + +import json +import os +import sys +import time +import html +from typing import Any, Dict, List, Optional, Tuple + +import requests + +# =============== Configuration =============== +# You can configure behavior via environment variables OR the constants below. +# Examples (zsh): +# # One-off run +# # WEATHER_UNITS can be "metric" or "imperial" +# WEATHER_UNITS=imperial WEATHER_PLACE="Concord, NH" python3 /home/dwilliams/Projects/Weather.py +# +# # Persist in current shell session +# export WEATHER_UNITS=imperial +# export WEATHER_LAT=43.2229 +# export WEATHER_LON=-71.332 +# export WEATHER_PLACE="Concord, NH" +# export WEATHER_TOOLTIP_MARKUP=1 # 1 to enable Pango markup, 0 to disable +# export WEATHER_LOC_ICON="๐Ÿ“" # or "*" for ASCII-only +# +CACHE_DIR = os.path.expanduser("~/.cache") +API_CACHE_PATH = os.path.join(CACHE_DIR, "open_meteo_cache.json") +SIMPLE_TEXT_CACHE_PATH = os.path.join(CACHE_DIR, ".weather_cache") +CACHE_TTL_SECONDS = int(os.getenv("WEATHER_CACHE_TTL", "600")) # default 10 minutes + +# Units: metric or imperial (default metric) +UNITS = os.getenv("WEATHER_UNITS", "metric").strip().lower() # metric|imperial + +# Optional manual coordinates +ENV_LAT = os.getenv("WEATHER_LAT") +ENV_LON = os.getenv("WEATHER_LON") +# Optional manual place override for tooltip +ENV_PLACE = os.getenv("WEATHER_PLACE") +# Manual place name set inside this file. If set (non-empty), this takes top priority. +# Example: MANUAL_PLACE = "Concord, NH, US" +MANUAL_PLACE: Optional[str] = None + +# Location icon in tooltip (default to a standard emoji to avoid missing glyphs) +LOC_ICON = os.getenv("WEATHER_LOC_ICON", "๐Ÿ“") +# Enable/disable Pango markup in tooltip (1/0, true/false) +TOOLTIP_MARKUP = os.getenv("WEATHER_TOOLTIP_MARKUP", "1").lower() not in ("0", "false", "no") +# Optional debug logging to stderr (set WEATHER_DEBUG=1 to enable) +DEBUG = os.getenv("WEATHER_DEBUG", "0").lower() not in ("0", "false", "no") + +# HTTP settings +UA = ( + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 " + "(KHTML, like Gecko) Chrome/128.0 Safari/537.36" +) +TIMEOUT = 8 + +SESSION = requests.Session() +SESSION.headers.update({"User-Agent": UA}) + +# =============== Icon and status mapping =============== +# Reuse prior icon set for continuity +WEATHER_ICONS = { + "sunnyDay": "๓ฐ–™", + "clearNight": "๓ฐ–”", + "cloudyFoggyDay": "๎Œƒ", + "cloudyFoggyNight": "๎†", + "rainyDay": "๎Œ†", + "rainyNight": "๎Œฑ", + "snowyIcyDay": "๎ŒŠ", + "snowyIcyNight": "๎Œง", + "severe": "๎ฎ", + "default": "๎Œ‚", +} + +WMO_STATUS = { + 0: "Clear sky", + 1: "Mainly clear", + 2: "Partly cloudy", + 3: "Overcast", + 45: "Fog", + 48: "Depositing rime fog", + 51: "Light drizzle", + 53: "Moderate drizzle", + 55: "Dense drizzle", + 56: "Freezing drizzle", + 57: "Freezing drizzle", + 61: "Light rain", + 63: "Moderate rain", + 65: "Heavy rain", + 66: "Freezing rain", + 67: "Freezing rain", + 71: "Slight snow", + 73: "Moderate snow", + 75: "Heavy snow", + 77: "Snow grains", + 80: "Rain showers", + 81: "Rain showers", + 82: "Violent rain showers", + 85: "Snow showers", + 86: "Heavy snow showers", + 95: "Thunderstorm", + 96: "Thunderstorm w/ hail", + 99: "Thunderstorm w/ hail", +} + + +def wmo_to_icon(code: int, is_day: int) -> str: + day = bool(is_day) + if code == 0: + return WEATHER_ICONS["sunnyDay" if day else "clearNight"] + if code in (1, 2, 3, 45, 48): + return WEATHER_ICONS["cloudyFoggyDay" if day else "cloudyFoggyNight"] + if code in (51, 53, 55, 61, 63, 65, 80, 81, 82): + return WEATHER_ICONS["rainyDay" if day else "rainyNight"] + if code in (56, 57, 66, 67, 71, 73, 75, 77, 85, 86): + return WEATHER_ICONS["snowyIcyDay" if day else "snowyIcyNight"] + if code in (95, 96, 99): + return WEATHER_ICONS["severe"] + return WEATHER_ICONS["default"] + + +def wmo_to_status(code: int) -> str: + return WMO_STATUS.get(code, "Unknown") + + +# =============== Utilities =============== + +def esc(s: Optional[str]) -> str: + return html.escape(s, quote=False) if s else "" + +def log_debug(msg: str) -> None: + if DEBUG: + print(msg, file=sys.stderr) + +def ensure_cache_dir() -> None: + try: + os.makedirs(CACHE_DIR, exist_ok=True) + except Exception as e: + print(f"Error creating cache dir: {e}", file=sys.stderr) + + +def read_api_cache() -> Optional[Dict[str, Any]]: + try: + if not os.path.exists(API_CACHE_PATH): + return None + with open(API_CACHE_PATH, "r", encoding="utf-8") as f: + data = json.load(f) + if (time.time() - data.get("timestamp", 0)) <= CACHE_TTL_SECONDS: + return data + return None + except Exception as e: + print(f"Error reading cache: {e}", file=sys.stderr) + return None + + +def write_api_cache(payload: Dict[str, Any]) -> None: + try: + ensure_cache_dir() + payload["timestamp"] = time.time() + with open(API_CACHE_PATH, "w", encoding="utf-8") as f: + json.dump(payload, f) + except Exception as e: + print(f"Error writing API cache: {e}", file=sys.stderr) + + +def write_simple_text_cache(text: str) -> None: + try: + ensure_cache_dir() + with open(SIMPLE_TEXT_CACHE_PATH, "w", encoding="utf-8") as f: + f.write(text) + except Exception as e: + print(f"Error writing simple cache: {e}", file=sys.stderr) + + +def get_coords() -> Tuple[float, float]: + # 1) Explicit env + if ENV_LAT and ENV_LON: + try: + return float(ENV_LAT), float(ENV_LON) + except ValueError: + print("Invalid WEATHER_LAT/WEATHER_LON; falling back to IP geolocation", file=sys.stderr) + + # 2) Try cached coordinates from last successful forecast + try: + cached = read_api_cache() + if cached and isinstance(cached, dict): + fc = cached.get("forecast") or {} + lat = fc.get("latitude") + lon = fc.get("longitude") + if isinstance(lat, (int, float)) and isinstance(lon, (int, float)): + return float(lat), float(lon) + except Exception as e: + print(f"Reading cached coords failed: {e}", file=sys.stderr) + + # 3) IP-based geolocation with multiple providers (prefer ipwho.is, ipapi.co; ipinfo.io as fallback) + # ipwho.is + try: + resp = SESSION.get("https://ipwho.is/", timeout=TIMEOUT) + resp.raise_for_status() + data = resp.json() + if data.get("success"): + lat = data.get("latitude") + lon = data.get("longitude") + if isinstance(lat, (int, float)) and isinstance(lon, (int, float)): + return float(lat), float(lon) + except Exception as e: + print(f"ipwho.is failed: {e}", file=sys.stderr) + + # ipapi.co + try: + resp = SESSION.get("https://ipapi.co/json", timeout=TIMEOUT) + resp.raise_for_status() + data = resp.json() + lat = data.get("latitude") + lon = data.get("longitude") + if isinstance(lat, (int, float)) and isinstance(lon, (int, float)): + return float(lat), float(lon) + except Exception as e: + print(f"ipapi.co failed: {e}", file=sys.stderr) + + # ipinfo.io (fallback) + try: + resp = SESSION.get("https://ipinfo.io/json", timeout=TIMEOUT) + resp.raise_for_status() + data = resp.json() + loc = data.get("loc") + if loc and "," in loc: + lat_s, lon_s = loc.split(",", 1) + return float(lat_s), float(lon_s) + except Exception as e: + print(f"ipinfo.io failed: {e}", file=sys.stderr) + + # 4) Last resort + print("IP geolocation failed: no providers succeeded", file=sys.stderr) + return 0.0, 0.0 + + +def units_params(units: str) -> Dict[str, str]: + if units == "imperial": + return { + "temperature_unit": "fahrenheit", + "wind_speed_unit": "mph", + "precipitation_unit": "inch", + } + # default metric + return { + "temperature_unit": "celsius", + "wind_speed_unit": "kmh", + "precipitation_unit": "mm", + } + + +def format_visibility(meters: Optional[float]) -> str: + if meters is None: + return "" + try: + if UNITS == "imperial": + miles = meters / 1609.344 + return f"{miles:.1f} mi" + else: + km = meters / 1000.0 + return f"{km:.1f} km" + except Exception: + return "" + + +# =============== API Fetching =============== + +def fetch_open_meteo(lat: float, lon: float) -> Dict[str, Any]: + base = "https://api.open-meteo.com/v1/forecast" + params = { + "latitude": lat, + "longitude": lon, + "current": "temperature_2m,apparent_temperature,relative_humidity_2m,wind_speed_10m,wind_direction_10m,weather_code,visibility,precipitation,pressure_msl,is_day", + "hourly": "precipitation_probability", + "daily": "temperature_2m_max,temperature_2m_min", + "timezone": "auto", + } + params.update(units_params(UNITS)) + resp = SESSION.get(base, params=params, timeout=TIMEOUT) + resp.raise_for_status() + return resp.json() + + +def fetch_aqi(lat: float, lon: float) -> Optional[Dict[str, Any]]: + try: + base = "https://air-quality-api.open-meteo.com/v1/air-quality" + params = { + "latitude": lat, + "longitude": lon, + "current": "european_aqi", + "timezone": "auto", + } + resp = SESSION.get(base, params=params, timeout=TIMEOUT) + resp.raise_for_status() + return resp.json() + except Exception as e: + print(f"AQI fetch failed: {e}", file=sys.stderr) + return None + + +def fetch_place(lat: float, lon: float) -> Optional[str]: + """Reverse geocode lat/lon to an approximate place. Tries Nominatim first, then Open-Meteo.""" + lang = os.getenv("WEATHER_LANG", "en") + + # 1) Nominatim (OpenStreetMap) + try: + base = "https://nominatim.openstreetmap.org/reverse" + params = { + "lat": lat, + "lon": lon, + "format": "jsonv2", + "accept-language": lang, + } + headers = {"User-Agent": UA + " Weather.py/1.0"} + resp = SESSION.get(base, params=params, headers=headers, timeout=TIMEOUT) + resp.raise_for_status() + data = resp.json() + address = data.get("address", {}) + name = data.get("name") or address.get("city") or address.get("town") or address.get("village") or address.get("hamlet") + admin1 = address.get("state") + country = address.get("country") + parts = [part for part in [name, admin1, country] if part] + if parts: + return ", ".join(parts) + except Exception as e: + log_debug(f"Reverse geocoding (Nominatim) failed: {e}") + + # 2) Open-Meteo reverse (fallback) + try: + base = "https://geocoding-api.open-meteo.com/v1/reverse" + params = { + "latitude": lat, + "longitude": lon, + "language": lang, + "format": "json", + } + resp = SESSION.get(base, params=params, timeout=TIMEOUT) + resp.raise_for_status() + data = resp.json() + results = data.get("results") or [] + if results: + p = results[0] + name = p.get("name") + admin1 = p.get("admin1") + country = p.get("country") + parts = [part for part in [name, admin1, country] if part] + if parts: + return ", ".join(parts) + except Exception as e: + log_debug(f"Reverse geocoding (Open-Meteo) failed: {e}") + + return None + + +# =============== Build Output =============== + +def safe_get(dct: Dict[str, Any], *keys, default=None): + cur: Any = dct + for k in keys: + if isinstance(cur, dict): + if k not in cur: + return default + cur = cur[k] + elif isinstance(cur, list): + try: + cur = cur[k] # type: ignore[index] + except Exception: + return default + else: + return default + return cur + + +def build_hourly_precip(forecast: Dict[str, Any]) -> str: + try: + times: List[str] = safe_get(forecast, "hourly", "time", default=[]) or [] + probs: List[Optional[float]] = safe_get( + forecast, "hourly", "precipitation_probability", default=[] + ) or [] + cur_time: Optional[str] = safe_get(forecast, "current", "time") + idx = times.index(cur_time) if cur_time in times else 0 + window = probs[idx : idx + 6] + if not window: + return "" + parts = [f"{int(p)}%" if p is not None else "-" for p in window] + return "๎Œ˜ (next 6h) " + " ".join(parts) + except Exception: + return "" + + +def build_output(lat: float, lon: float, forecast: Dict[str, Any], aqi: Optional[Dict[str, Any]], place: Optional[str] = None) -> Tuple[Dict[str, Any], str]: + cur = forecast.get("current", {}) + cur_units = forecast.get("current_units", {}) + daily = forecast.get("daily", {}) + daily_units = forecast.get("daily_units", {}) + + temp_val = cur.get("temperature_2m") + temp_unit = cur_units.get("temperature_2m", "") + temp_str = f"{int(round(temp_val))}{temp_unit}" if isinstance(temp_val, (int, float)) else "N/A" + + feels_val = cur.get("apparent_temperature") + feels_unit = cur_units.get("apparent_temperature", "") + feels_str = f"Feels like {int(round(feels_val))}{feels_unit}" if isinstance(feels_val, (int, float)) else "" + + is_day = int(cur.get("is_day", 1) or 1) + code = int(cur.get("weather_code", -1) or -1) + icon = wmo_to_icon(code, is_day) + status = wmo_to_status(code) + + # min/max today (index 0) + tmin_val = safe_get(daily, "temperature_2m_min", 0) + tmax_val = safe_get(daily, "temperature_2m_max", 0) + dtemp_unit = daily_units.get("temperature_2m_min", temp_unit) + tmin_str = f"{int(round(tmin_val))}{dtemp_unit}" if isinstance(tmin_val, (int, float)) else "" + tmax_str = f"{int(round(tmax_val))}{dtemp_unit}" if isinstance(tmax_val, (int, float)) else "" + min_max = f"๏‹‹ {tmin_str}\t\t๏‹‡ {tmax_str}" if tmin_str and tmax_str else "" + + wind_val = cur.get("wind_speed_10m") + wind_unit = cur_units.get("wind_speed_10m", "") + wind_text = f"๎‰พ {int(round(wind_val))}{wind_unit}" if isinstance(wind_val, (int, float)) else "" + + hum_val = cur.get("relative_humidity_2m") + humidity_text = f"๎ณ {int(hum_val)}%" if isinstance(hum_val, (int, float)) else "" + + vis_val = cur.get("visibility") + visibility_text = f"๏ฎ {format_visibility(vis_val)}" if isinstance(vis_val, (int, float)) else "" + + aqi_val = safe_get(aqi or {}, "current", "european_aqi") + aqi_text = f"AQI {int(aqi_val)}" if isinstance(aqi_val, (int, float)) else "AQI N/A" + + hourly_precip = build_hourly_precip(forecast) + prediction = f"\n\n{hourly_precip}" if hourly_precip else "" + + # Build place string (priority: MANUAL_PLACE > ENV_PLACE > reverse geocode > lat,lon) + place_str = (MANUAL_PLACE or ENV_PLACE or place or f"{lat:.3f}, {lon:.3f}") + location_text = f"{LOC_ICON} {place_str}" + + # Build tooltip (markup or plain) + if TOOLTIP_MARKUP: + # Escape dynamic text to avoid breaking Pango markup + tooltip_text = str.format( + "\t\t{}\t\t\n{}\n{}\n{}\n{}\n\n{}\n{}\n{}{}", + f'{esc(temp_str)}', + f" {icon}", + f"{esc(status)}", + esc(location_text), + f"{esc(feels_str)}" if feels_str else "", + f"{esc(min_max)}" if min_max else "", + f"{esc(wind_text)}\t{esc(humidity_text)}", + f"{esc(visibility_text)}\t{esc(aqi_text)}", + f" {esc(prediction)}" if prediction else "", + ) + else: + lines = [ + f"{icon} {temp_str}", + status, + location_text, + ] + if feels_str: + lines.append(feels_str) + if min_max: + lines.append(min_max) + lines.append(f"{wind_text} {humidity_text}".strip()) + lines.append(f"{visibility_text} {aqi_text}".strip()) + if prediction: + lines.append(hourly_precip) + tooltip_text = "\n".join([ln for ln in lines if ln]) + + out_data = { + "text": f"{icon} {temp_str}", + "alt": status, + "tooltip": tooltip_text, + "class": f"wmo-{code} {'day' if is_day else 'night'}", + } + + simple_weather = ( + f"{icon} {status}\n" + + f"๏‹‰ {temp_str} ({feels_str})\n" + + (f"{wind_text} \n" if wind_text else "") + + (f"{humidity_text} \n" if humidity_text else "") + + f"{visibility_text} {aqi_text}\n" + ) + + return out_data, simple_weather + + +def main() -> None: + lat, lon = get_coords() + + # Try cache first + cached = read_api_cache() + if cached and isinstance(cached, dict): + forecast = cached.get("forecast") + aqi = cached.get("aqi") + cached_place = cached.get("place") if isinstance(cached.get("place"), str) else None + place_effective = MANUAL_PLACE or ENV_PLACE or cached_place + try: + out, simple = build_output(lat, lon, forecast, aqi, place_effective) + print(json.dumps(out, ensure_ascii=False)) + write_simple_text_cache(simple) + return + except Exception as e: + print(f"Cached data build failed, refetching: {e}", file=sys.stderr) + + # Fetch fresh + try: + forecast = fetch_open_meteo(lat, lon) + aqi = fetch_aqi(lat, lon) + # Use manual/env place if provided; otherwise reverse geocode + place_effective = MANUAL_PLACE or ENV_PLACE or fetch_place(lat, lon) + write_api_cache({"forecast": forecast, "aqi": aqi, "place": place_effective}) + out, simple = build_output(lat, lon, forecast, aqi, place_effective) + print(json.dumps(out, ensure_ascii=False)) + write_simple_text_cache(simple) + except Exception as e: + print(f"Open-Meteo fetch failed: {e}", file=sys.stderr) + # Last resort: try stale cache without TTL + try: + if os.path.exists(API_CACHE_PATH): + with open(API_CACHE_PATH, "r", encoding="utf-8") as f: + stale = json.load(f) + out, simple = build_output(lat, lon, stale.get("forecast", {}), stale.get("aqi"), stale.get("place") if isinstance(stale.get("place"), str) else None) + print(json.dumps(out, ensure_ascii=False)) + write_simple_text_cache(simple) + return + except Exception as e2: + print(f"Failed to use stale cache: {e2}", file=sys.stderr) + # Fallback minimal output + fallback = { + "text": f"{WEATHER_ICONS['default']} N/A", + "alt": "Unavailable", + "tooltip": "Weather unavailable", + "class": "unavailable", + } + print(json.dumps(fallback, ensure_ascii=False)) + + +if __name__ == "__main__": + main() diff --git a/hypr/UserScripts/Weather.sh b/hypr/UserScripts/Weather.sh new file mode 100755 index 0000000..9bdaff4 --- /dev/null +++ b/hypr/UserScripts/Weather.sh @@ -0,0 +1,87 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# weather info from wttr. https://github.com/chubin/wttr.in +# Remember to add city + +city= +cachedir="$HOME/.cache/rbn" +cachefile=${0##*/}-$1 + +if [ ! -d $cachedir ]; then + mkdir -p $cachedir +fi + +if [ ! -f $cachedir/$cachefile ]; then + touch $cachedir/$cachefile +fi + +# Save current IFS +SAVEIFS=$IFS +# Change IFS to new line. +IFS=$'\n' + +cacheage=$(($(date +%s) - $(stat -c '%Y' "$cachedir/$cachefile"))) +if [ $cacheage -gt 1740 ] || [ ! -s $cachedir/$cachefile ]; then + data=($(curl -s https://en.wttr.in/"$city"$1\?0qnT 2>&1)) + echo ${data[0]} | cut -f1 -d, > $cachedir/$cachefile + echo ${data[1]} | sed -E 's/^.{15}//' >> $cachedir/$cachefile + echo ${data[2]} | sed -E 's/^.{15}//' >> $cachedir/$cachefile +fi + +weather=($(cat $cachedir/$cachefile)) + +# Restore IFSClear +IFS=$SAVEIFS + +temperature=$(echo ${weather[2]} | sed -E 's/([[:digit:]]+)\.\./\1 to /g') + +#echo ${weather[1]##*,} + +# https://fontawesome.com/icons?s=solid&c=weather +case $(echo ${weather[1]##*,} | tr '[:upper:]' '[:lower:]') in +"clear" | "sunny") + condition="๎Œ" + ;; +"partly cloudy") + condition="๓ฐ–•" + ;; +"cloudy") + condition="๎Œ’" + ;; +"overcast") + condition="๎ŒŒ" + ;; +"fog" | "freezing fog") + condition="๎Œ“" + ;; +"patchy rain possible" | "patchy light drizzle" | "light drizzle" | "patchy light rain" | "light rain" | "light rain shower" | "mist" | "rain") + condition="๓ฐผณ" + ;; +"moderate rain at times" | "moderate rain" | "heavy rain at times" | "heavy rain" | "moderate or heavy rain shower" | "torrential rain shower" | "rain shower") + condition="๎ˆน" + ;; +"patchy snow possible" | "patchy sleet possible" | "patchy freezing drizzle possible" | "freezing drizzle" | "heavy freezing drizzle" | "light freezing rain" | "moderate or heavy freezing rain" | "light sleet" | "ice pellets" | "light sleet showers" | "moderate or heavy sleet showers") + condition="๓ฐผด" + ;; +"blowing snow" | "moderate or heavy sleet" | "patchy light snow" | "light snow" | "light snow showers") + condition="๓ฐ™ฟ" + ;; +"blizzard" | "patchy moderate snow" | "moderate snow" | "patchy heavy snow" | "heavy snow" | "moderate or heavy snow with thunder" | "moderate or heavy snow showers") + condition="๎ž" + ;; +"thundery outbreaks possible" | "patchy light rain with thunder" | "moderate or heavy rain with thunder" | "patchy light snow with thunder") + condition="๎Œ" + ;; +*) + condition="๏ช" + echo -e "{\"text\":\""$condition"\", \"alt\":\""${weather[0]}"\", \"tooltip\":\""${weather[0]}: $temperature ${weather[1]}"\"}" + ;; +esac + +#echo $temp $condition + +echo -e "{\"text\":\""$temperature $condition"\", \"alt\":\""${weather[0]}"\", \"tooltip\":\""${weather[0]}: $temperature ${weather[1]}"\"}" + +cached_weather="๏‹‰ $temperature \n$condition ${weather[1]}" + +echo -e $cached_weather > "$HOME/.cache/.weather_cache" \ No newline at end of file diff --git a/hypr/UserScripts/ZshChangeTheme.sh b/hypr/UserScripts/ZshChangeTheme.sh new file mode 100755 index 0000000..cffaf5c --- /dev/null +++ b/hypr/UserScripts/ZshChangeTheme.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Script for Oh my ZSH theme ( CTRL SHIFT O) + +# preview of theme can be view here: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes +# after choosing theme, TTY need to be closed and re-open + +# Variables +iDIR="$HOME/.config/swaync/images" +rofi_theme="$HOME/.config/rofi/config-zsh-theme.rasi" + +if [ -n "$(grep -i nixos < /etc/os-release)" ]; then + notify-send -i "$iDIR/note.png" "NOT Supported" "Sorry NixOS does not support this KooL feature" + exit 1 +fi + +themes_dir="$HOME/.oh-my-zsh/themes" +file_extension=".zsh-theme" + + +themes_array=($(find -L "$themes_dir" -type f -name "*$file_extension" -exec basename {} \; | sed -e "s/$file_extension//")) + +# Add "Random" option to the beginning of the array +themes_array=("Random" "${themes_array[@]}") + +rofi_command="rofi -i -dmenu -config $rofi_theme" + +menu() { + for theme in "${themes_array[@]}"; do + echo "$theme" + done +} + +main() { + choice=$(menu | ${rofi_command}) + + # if nothing selected, script won't change anything + if [ -z "$choice" ]; then + exit 0 + fi + + zsh_path="$HOME/.zshrc" + var_name="ZSH_THEME" + + if [[ "$choice" == "Random" ]]; then + # Pick a random theme from the original themes_array (excluding "Random") + random_theme=${themes_array[$((RANDOM % (${#themes_array[@]} - 1) + 1))]} + theme_to_set="$random_theme" + notify-send -i "$iDIR/ja.png" "Random theme:" "selected: $random_theme" + else + # Set theme to the selected choice + theme_to_set="$choice" + notify-send -i "$iDIR/ja.png" "Theme selected:" "$choice" + fi + + if [ -f "$zsh_path" ]; then + sed -i "s/^$var_name=.*/$var_name=\"$theme_to_set\"/" "$zsh_path" + notify-send -i "$iDIR/ja.png" "OMZ theme" "applied. restart your terminal" + else + notify-send -i "$iDIR/error.png" "E-R-R-O-R" "~.zshrc file not found!" + fi +} + +# Check if rofi is already running +if pidof rofi > /dev/null; then + pkill rofi +fi + +main diff --git a/hypr/animations/00-default.conf b/hypr/animations/00-default.conf new file mode 100644 index 0000000..10279c7 --- /dev/null +++ b/hypr/animations/00-default.conf @@ -0,0 +1,26 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # + +animations { + enabled = yes + + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + bezier = overshot, 0.05, 0.9, 0.1, 1.05 + bezier = smoothOut, 0.5, 0, 0.99, 0.99 + bezier = smoothIn, 0.5, -0.5, 0.68, 1.5 + + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 5, winIn, slide + animation = windowsOut, 1, 3, smoothOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 180, liner, loop #used by rainbow borders and rotating colors + animation = fade, 1, 3, smoothOut + animation = workspaces, 1, 5, overshot + + # animations for -git or version >0.42.0 + animation = workspacesIn, 1, 5, winIn, slide + animation = workspacesOut, 1, 5, winOut, slide +} diff --git a/hypr/animations/01-default - v2.conf b/hypr/animations/01-default - v2.conf new file mode 100644 index 0000000..dfbbed7 --- /dev/null +++ b/hypr/animations/01-default - v2.conf @@ -0,0 +1,27 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # + +# old animations + +animations { + enabled = yes + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + bezier = linear, 0.0, 0.0, 1.0, 1.0 + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = slow, 0, 0.85, 0.3, 1 + bezier = overshot, 0.7, 0.6, 0.1, 1.1 + bezier = bounce, 1.1, 1.6, 0.1, 0.85 + bezier = sligshot, 1, -1, 0.15, 1.25 + bezier = nice, 0, 6.9, 0.5, -4.20 + + animation = windowsIn, 1, 5, slow, popin + animation = windowsOut, 1, 5, winOut, popin + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 10, linear + animation = borderangle, 1, 180, linear, loop #used by rainbow borders and rotating colors + animation = fade, 1, 5, overshot + animation = workspaces, 1, 5, wind + animation = windows, 1, 5, bounce, popin +} \ No newline at end of file diff --git a/hypr/animations/03- Disable Animation.conf b/hypr/animations/03- Disable Animation.conf new file mode 100644 index 0000000..f73a485 --- /dev/null +++ b/hypr/animations/03- Disable Animation.conf @@ -0,0 +1,5 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # + +animations { + enabled = no +} \ No newline at end of file diff --git a/hypr/animations/END-4.conf b/hypr/animations/END-4.conf new file mode 100644 index 0000000..0ab8d1a --- /dev/null +++ b/hypr/animations/END-4.conf @@ -0,0 +1,40 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# name "End-4" +# credit https://github.com/end-4/dots-hyprland + +animations { + enabled = true + # Animation curves + + bezier = linear, 0, 0, 1, 1 + bezier = md3_standard, 0.2, 0, 0, 1 + bezier = md3_decel, 0.05, 0.7, 0.1, 1 + bezier = md3_accel, 0.3, 0, 0.8, 0.15 + bezier = overshot, 0.05, 0.9, 0.1, 1.1 + bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 + bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0 + bezier = menu_decel, 0.1, 1, 0, 1 + bezier = menu_accel, 0.38, 0.04, 1, 0.07 + bezier = easeInOutCirc, 0.85, 0, 0.15, 1 + bezier = easeOutCirc, 0, 0.55, 0.45, 1 + bezier = easeOutExpo, 0.16, 1, 0.3, 1 + bezier = softAcDecel, 0.26, 0.26, 0.15, 1 + bezier = md2, 0.4, 0, 0.2, 1 # use with .2s duration + # Animation configs + animation = windows, 1, 3, md3_decel, popin 60% + animation = windowsIn, 1, 3, md3_decel, popin 60% + animation = windowsOut, 1, 3, md3_accel, popin 60% + animation = border, 1, 10, default + animation = fade, 1, 3, md3_decel + # animation = layers, 1, 2, md3_decel, slide + animation = layersIn, 1, 3, menu_decel, slide + animation = layersOut, 1, 1.6, menu_accel + animation = fadeLayersIn, 1, 2, menu_decel + animation = fadeLayersOut, 1, 4.5, menu_accel + animation = workspaces, 1, 7, menu_decel, slide + # animation = workspaces, 1, 2.5, softAcDecel, slide + # animation = workspaces, 1, 7, menu_decel, slidefade 15% + # animation = specialWorkspace, 1, 3, md3_decel, slidefadevert 15% + animation = specialWorkspace, 1, 3, md3_decel, slidevert +} diff --git a/hypr/animations/HYDE - Vertical.conf b/hypr/animations/HYDE - Vertical.conf new file mode 100644 index 0000000..ccceccf --- /dev/null +++ b/hypr/animations/HYDE - Vertical.conf @@ -0,0 +1,34 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# name "Vertical" +# credit https://github.com/prasanthrangan/hyprdots + +animations { + enabled = yes + + bezier = fluent_decel, 0, 0.2, 0.4, 1 + bezier = easeOutCirc, 0, 0.55, 0.45, 1 + bezier = easeOutCubic, 0.33, 1, 0.68, 1 + bezier = easeinoutsine, 0.37, 0, 0.63, 1 + + # Windows + animation = windowsIn, 1, 1.5, easeinoutsine, popin 60% # window open + animation = windowsOut, 1, 1.5, easeOutCubic, popin 60% # window close. + animation = windowsMove, 1, 1.5, easeinoutsine, slide # everything in between, moving, dragging, resizing. + + # Fading + animation = fade, 1, 2.5, fluent_decel + + animation = fadeLayersIn, 0 + animation = border, 0 + + + # Layers + animation = layers, 1, 1.5, easeinoutsine, popin + + # Workspaces + #animation = workspaces, 1, 3, fluent_decel, slidefade 30% # styles: slide, slidevert, fade, slidefade, slidefadevert + animation = workspaces, 1, 3, fluent_decel, slidefadevert 30% # styles: slide, slidevert, fade, slidefade, slidefadevert + + animation = specialWorkspace, 1, 2, fluent_decel, slidefade 10% +} diff --git a/hypr/animations/HYDE - default.conf b/hypr/animations/HYDE - default.conf new file mode 100644 index 0000000..96c439d --- /dev/null +++ b/hypr/animations/HYDE - default.conf @@ -0,0 +1,21 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# name "Default" +# credit https://github.com/prasanthrangan/hyprdots + +animations { + enabled = yes + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 6, winIn, slide + animation = windowsOut, 1, 5, winOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 30, liner, once + animation = fade, 1, 10, default + animation = workspaces, 1, 5, wind + animation = specialWorkspace, 1, 5, wind, slidevert +} diff --git a/hypr/animations/HYDE - minimal-1.conf b/hypr/animations/HYDE - minimal-1.conf new file mode 100644 index 0000000..6dbcf8e --- /dev/null +++ b/hypr/animations/HYDE - minimal-1.conf @@ -0,0 +1,27 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# # name "Minimal-1" +# credit https://github.com/prasanthrangan/hyprdots- + +animations { + enabled = true + + # โ–ˆโ–„โ–„โ€ƒโ–ˆโ–€โ–€โ€ƒโ–€โ–ˆโ€ƒโ–ˆโ€ƒโ–ˆโ–€โ–€โ€ƒโ–ˆโ–€โ–ˆโ€ƒ โ€ƒโ–ˆโ–€โ–€โ€ƒโ–ˆโ–‘โ–ˆโ€ƒโ–ˆโ–€โ–ˆโ€ƒโ–ˆโ–‘โ–ˆโ€ƒโ–ˆโ–€โ–€ + # โ–ˆโ–„โ–ˆโ€ƒโ–ˆโ–ˆโ–„โ€ƒโ–ˆโ–„โ€ƒโ–ˆโ€ƒโ–ˆโ–ˆโ–„โ€ƒโ–ˆโ–€โ–„โ€ƒ โ€ƒโ–ˆโ–„โ–„โ€ƒโ–ˆโ–„โ–ˆโ€ƒโ–ˆโ–€โ–„โ€ƒโ–€โ–„โ–€โ€ƒโ–ˆโ–ˆโ–„ + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + + + #โ–„โ–€โ–ˆโ€ƒโ–ˆโ–„โ–‘โ–ˆโ€ƒโ–ˆโ€ƒโ–ˆโ–€โ–„โ–€โ–ˆโ€ƒโ–„โ–€โ–ˆโ€ƒโ–€โ–ˆโ–€โ€ƒโ–ˆโ€ƒโ–ˆโ–€โ–ˆโ€ƒโ–ˆโ–„โ–‘โ–ˆ + #โ–ˆโ–€โ–ˆโ€ƒโ–ˆโ–‘โ–€โ–ˆโ€ƒโ–ˆโ€ƒโ–ˆโ–‘โ–€โ–‘โ–ˆโ€ƒโ–ˆโ–€โ–ˆโ€ƒโ–‘โ–ˆโ–‘โ€ƒโ–ˆโ€ƒโ–ˆโ–„โ–ˆโ€ƒโ–ˆโ–‘โ–€โ–ˆ + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 6, winIn, slide + animation = windowsOut, 1, 5, winOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 30, liner, once + animation = fade, 1, 10, default + animation = workspaces, 1, 5, wind +} diff --git a/hypr/animations/HYDE - minimal-2.conf b/hypr/animations/HYDE - minimal-2.conf new file mode 100644 index 0000000..6ac56bc --- /dev/null +++ b/hypr/animations/HYDE - minimal-2.conf @@ -0,0 +1,16 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# # name "Minimal-2" +# credit https://github.com/prasanthrangan/hyprdots + +animations { + enabled = yes + + bezier = quart, 0.25, 1, 0.5, 1 + + animation = windows, 1, 6, quart, slide + animation = border, 1, 6, quart + animation = borderangle, 1, 6, quart + animation = fade, 1, 6, quart + animation = workspaces, 1, 6, quart +} \ No newline at end of file diff --git a/hypr/animations/HYDE - optimized.conf b/hypr/animations/HYDE - optimized.conf new file mode 100644 index 0000000..7534c69 --- /dev/null +++ b/hypr/animations/HYDE - optimized.conf @@ -0,0 +1,41 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# name "Optimized" +# credit https://github.com/prasanthrangan/hyprdots + +animations { + enabled = true + bezier = wind, 0.05, 0.85, 0.03, 0.97 + bezier = winIn, 0.07, 0.88, 0.04, 0.99 + bezier = winOut, 0.20, -0.15, 0, 1 + bezier = liner, 1, 1, 1, 1 + bezier = md3_standard, 0.12, 0, 0, 1 + bezier = md3_decel, 0.05, 0.80, 0.10, 0.97 + bezier = md3_accel, 0.20, 0, 0.80, 0.08 + bezier = overshot, 0.05, 0.85, 0.07, 1.04 + bezier = crazyshot, 0.1, 1.22, 0.68, 0.98 + bezier = hyprnostretch, 0.05, 0.82, 0.03, 0.94 + bezier = menu_decel, 0.05, 0.82, 0, 1 + bezier = menu_accel, 0.20, 0, 0.82, 0.10 + bezier = easeInOutCirc, 0.75, 0, 0.15, 1 + bezier = easeOutCirc, 0, 0.48, 0.38, 1 + bezier = easeOutExpo, 0.10, 0.94, 0.23, 0.98 + bezier = softAcDecel, 0.20, 0.20, 0.15, 1 + bezier = md2, 0.30, 0, 0.15, 1 + + bezier = OutBack, 0.28, 1.40, 0.58, 1 + bezier = easeInOutCirc, 0.78, 0, 0.15, 1 + + animation = border, 1, 1.6, liner + animation = borderangle, 1, 82, liner, once + animation = windowsIn, 1, 3.2, winIn, slide + animation = windowsOut, 1, 2.8, easeOutCirc + animation = windowsMove, 1, 3.0, wind, slide + animation = fade, 1, 1.8, md3_decel + animation = layersIn, 1, 1.8, menu_decel, slide + animation = layersOut, 1, 1.5, menu_accel + animation = fadeLayersIn, 1, 1.6, menu_decel + animation = fadeLayersOut, 1, 1.8, menu_accel + animation = workspaces, 1, 4.0, menu_decel, slide + animation = specialWorkspace, 1, 2.3, md3_decel, slidefadevert 15% +} diff --git a/hypr/animations/ML4W - classic.conf b/hypr/animations/ML4W - classic.conf new file mode 100644 index 0000000..af8c5e1 --- /dev/null +++ b/hypr/animations/ML4W - classic.conf @@ -0,0 +1,15 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# name "Classic" +# credit https://github.com/mylinuxforwork/dotfiles + +animations { + enabled = true + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} diff --git a/hypr/animations/ML4W - dynamic.conf b/hypr/animations/ML4W - dynamic.conf new file mode 100644 index 0000000..c5f1da0 --- /dev/null +++ b/hypr/animations/ML4W - dynamic.conf @@ -0,0 +1,20 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# name "Dynamic" +# credit https://github.com/mylinuxforwork/dotfiles + +animations { + enabled = true + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 6, winIn, slide + animation = windowsOut, 1, 5, winOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 30, liner, loop + animation = fade, 1, 10, default + animation = workspaces, 1, 5, wind +} diff --git a/hypr/animations/ML4W - fast.conf b/hypr/animations/ML4W - fast.conf new file mode 100644 index 0000000..9623c41 --- /dev/null +++ b/hypr/animations/ML4W - fast.conf @@ -0,0 +1,24 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# name "Fast" +# credit https://github.com/mylinuxforwork/dotfiles + +animations { + enabled = true + bezier = linear, 0, 0, 1, 1 + bezier = md3_standard, 0.2, 0, 0, 1 + bezier = md3_decel, 0.05, 0.7, 0.1, 1 + bezier = md3_accel, 0.3, 0, 0.8, 0.15 + bezier = overshot, 0.05, 0.9, 0.1, 1.1 + bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 + bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0 + bezier = fluent_decel, 0.1, 1, 0, 1 + bezier = easeInOutCirc, 0.85, 0, 0.15, 1 + bezier = easeOutCirc, 0, 0.55, 0.45, 1 + bezier = easeOutExpo, 0.16, 1, 0.3, 1 + animation = windows, 1, 3, md3_decel, popin 60% + animation = border, 1, 10, default + animation = fade, 1, 2.5, md3_decel + animation = workspaces, 1, 3.5, easeOutExpo, slide + animation = specialWorkspace, 1, 3, md3_decel, slidevert +} \ No newline at end of file diff --git a/hypr/animations/ML4W - high.conf b/hypr/animations/ML4W - high.conf new file mode 100644 index 0000000..e881d8b --- /dev/null +++ b/hypr/animations/ML4W - high.conf @@ -0,0 +1,20 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# name "High" +# credit https://github.com/mylinuxforwork/dotfiles + +animations { + enabled = true + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 6, winIn, slide + animation = windowsOut, 1, 5, winOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 30, liner, once + animation = fade, 1, 10, default + animation = workspaces, 1, 5, wind +} diff --git a/hypr/animations/ML4W - moving.conf b/hypr/animations/ML4W - moving.conf new file mode 100644 index 0000000..974a8f6 --- /dev/null +++ b/hypr/animations/ML4W - moving.conf @@ -0,0 +1,20 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# name "Moving" +# credit https://github.com/mylinuxforwork/dotfiles + + +animations { + enabled = true + bezier = overshot, 0.05, 0.9, 0.1, 1.05 + bezier = smoothOut, 0.5, 0, 0.99, 0.99 + bezier = smoothIn, 0.5, -0.5, 0.68, 1.5 + animation = windows, 1, 5, overshot, slide + animation = windowsOut, 1, 3, smoothOut + animation = windowsIn, 1, 3, smoothOut + animation = windowsMove, 1, 4, smoothIn, slide + animation = border, 1, 5, default + animation = fade, 1, 5, smoothIn + animation = fadeDim, 1, 5, smoothIn + animation = workspaces, 1, 6, default +} diff --git a/hypr/animations/ML4W - standard.conf b/hypr/animations/ML4W - standard.conf new file mode 100644 index 0000000..aa312bb --- /dev/null +++ b/hypr/animations/ML4W - standard.conf @@ -0,0 +1,15 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# name "Standard" +# credit https://github.com/mylinuxforwork/dotfiles + +animations { + enabled = true + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} diff --git a/hypr/animations/Mahaveer - me-1.conf b/hypr/animations/Mahaveer - me-1.conf new file mode 100644 index 0000000..7c93f3e --- /dev/null +++ b/hypr/animations/Mahaveer - me-1.conf @@ -0,0 +1,55 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# name "Me-1" +# credit https://github.com/mahaveergurjar + +animations { + enabled = true + # Animation curves + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + # bezier = linear, 0, 0, 1, 1 + bezier = md3_standard, 0.2, 0, 0, 1 + bezier = md3_decel, 0.05, 0.7, 0.1, 1 + bezier = md3_accel, 0.3, 0, 0.8, 0.15 + bezier = overshot, 0.05, 0.9, 0.1, 1.1 + bezier = crazyshot, 0.1, 1.5, 0.76, 0.92 + bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0 + bezier = menu_decel, 0.1, 1, 0, 1 + bezier = menu_accel, 0.38, 0.04, 1, 0.07 + bezier = easeInOutCirc, 0.85, 0, 0.15, 1 + bezier = easeOutCirc, 0, 0.55, 0.45, 1 + bezier = easeOutExpo, 0.16, 1, 0.3, 1 + bezier = softAcDecel, 0.26, 0.26, 0.15, 1 + bezier = md2, 0.4, 0, 0.2, 1 # use with .2s duration + + # Animation configs + # animation = windows, 1, 3, md3_decel, popin 60% + # animation = windowsIn, 1, 3, md3_decel, popin 60% + # animation = windowsOut, 1, 3, md3_accel, popin 60% + # animation = windows, 1, 6, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 30, liner, once + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 6, winIn, slide + animation = windowsOut, 1, 5, winOut, slide + animation = windowsMove, 1, 5, wind, slide + + # animation = border, 1, 10, default + animation = fade, 1, 3, md3_decel + # animation = layers, 1, 2, md3_decel, slide + animation = layersIn, 1, 3, menu_decel, slide + animation = layersOut, 1, 1.6, menu_accel + animation = fadeLayersIn, 1, 2, menu_decel + animation = fadeLayersOut, 1, 4.5, menu_accel + animation = workspaces, 1, 7, menu_decel, slide + animation = workspaces, 1, 5, wind + # animation = workspaces, 1, 2.5, softAcDecel, slide + # animation = workspaces, 1, 7, menu_decel, slidefade 15% + animation = specialWorkspace, 1, 3, md3_decel, slidefadevert 15% + animation = specialWorkspace, 1, 3, md3_decel, slidevert +} + + diff --git a/hypr/animations/Mahaveer - me-2.conf b/hypr/animations/Mahaveer - me-2.conf new file mode 100644 index 0000000..4cc2bfa --- /dev/null +++ b/hypr/animations/Mahaveer - me-2.conf @@ -0,0 +1,30 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# +# name "Me-2" +# credit https://github.com/mahaveergurjar + + +animations { + enabled = yes + + bezier = wind, 0.05, 0.9, 0.1, 1.05 + bezier = winIn, 0.1, 1.1, 0.1, 1.1 + bezier = winOut, 0.3, -0.3, 0, 1 + bezier = liner, 1, 1, 1, 1 + bezier = overshot, 0.05, 0.9, 0.1, 1.05 + bezier = smoothOut, 0.5, 0, 0.99, 0.99 + bezier = smoothIn, 0.5, -0.5, 0.68, 1.5 + + animation = windows, 1, 6, wind, slide + animation = windowsIn, 1, 5, winIn, slide + animation = windowsOut, 1, 3, smoothOut, slide + animation = windowsMove, 1, 5, wind, slide + animation = border, 1, 1, liner + animation = borderangle, 1, 180, liner, loop #used by rainbow borders and rotating colors + animation = fade, 1, 3, smoothOut + animation = workspaces, 1, 5, overshot + + # animations for -git or version >0.42.0 + animation = workspacesIn, 1, 5, winIn, slide + animation = workspacesOut, 1, 5, winOut, slide +} \ No newline at end of file diff --git a/hypr/application-style.conf b/hypr/application-style.conf new file mode 100644 index 0000000..7e67f10 --- /dev/null +++ b/hypr/application-style.conf @@ -0,0 +1,8 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# as per Hyprland wiki: hyprland-qt-support provides a QML style for hypr* qt6 apps + +roundess = 2 + +border_width = 0 + +reduce_motion = false \ No newline at end of file diff --git a/hypr/configs/Keybinds.conf b/hypr/configs/Keybinds.conf new file mode 100644 index 0000000..853043d --- /dev/null +++ b/hypr/configs/Keybinds.conf @@ -0,0 +1,152 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# Default Keybinds +# visit https://wiki.hyprland.org/Configuring/Binds/ for more info + +# /* ---- โœด๏ธ Variables โœด๏ธ ---- */ # +$mainMod = SUPER +$scriptsDir = $HOME/.config/hypr/scripts +$UserConfigs = $HOME/.config/hypr/UserConfigs +$UserScripts = $HOME/.config/hypr/UserScripts + +bind = CTRL ALT, Delete, exec, hyprctl dispatch exit 0 # exit Hyprland +bind = $mainMod, C, killactive, # close active (not kill) +bind = $mainMod SHIFT, C, exec, $scriptsDir/KillActiveProcess.sh # Kill active process +bind = $mainMod ALT, L, exec, $scriptsDir/LockScreen.sh # screen lock +bind = $mainMod ALT, P, exec, $scriptsDir/Wlogout.sh # power menu +bind = $mainMod ALT, A, exec, swaync-client -t -sw # swayNC notification panel +bind = $mainMod, E, exec, $scriptsDir/Kool_Quick_Settings.sh # Settings Menu KooL Hyprland Settings + +# My Bindings +bind = $mainMod, V, togglefloating + +# Master Layout +bind = $mainMod CTRL, D, layoutmsg, removemaster +bind = $mainMod, I, layoutmsg, addmaster +bind = $mainMod, J, layoutmsg, cyclenext +bind = $mainMod, K, layoutmsg, cycleprev +bind = $mainMod CTRL, Return, layoutmsg, swapwithmaster + +# Dwindle Layout +bind = $mainMod SHIFT, I, togglesplit # only works on dwindle layout +bind = $mainMod, P, pseudo, # dwindle + +# Works on either layout (Master or Dwindle) +bind = $mainMod, M, exec, hyprctl dispatch splitratio 0.3 + +# group +bind = $mainMod, G, togglegroup # toggle group +bind = $mainMod CTRL, tab, changegroupactive # change focus to another window + + # Cycle windows if floating bring to top +bind = ALT, tab, cyclenext +bind = ALT, tab, bringactivetotop + +# Special Keys / Hot Keys +bindel = , xf86audioraisevolume, exec, $scriptsDir/Volume.sh --inc # volume up +bindel = , xf86audiolowervolume, exec, $scriptsDir/Volume.sh --dec # volume down +bindl = , xf86AudioMicMute, exec, $scriptsDir/Volume.sh --toggle-mic # mic mute +bindl = , xf86audiomute, exec, $scriptsDir/Volume.sh --toggle # mute +bindl = , xf86Sleep, exec, systemctl suspend # sleep button +bindl = , xf86Rfkill, exec, $scriptsDir/AirplaneMode.sh # Airplane mode + +# media controls using keyboards +bindl = , xf86AudioPlayPause, exec, $scriptsDir/MediaCtrl.sh --pause +bindl = , xf86AudioPause, exec, $scriptsDir/MediaCtrl.sh --pause +bindl = , xf86AudioPlay, exec, $scriptsDir/MediaCtrl.sh --pause +bindl = , xf86AudioNext, exec, $scriptsDir/MediaCtrl.sh --nxt +bindl = , xf86AudioPrev, exec, $scriptsDir/MediaCtrl.sh --prv +bindl = , xf86audiostop, exec, $scriptsDir/MediaCtrl.sh --stop + +# Screenshot keybindings NOTE: You may need to press Fn key as well +bind = $mainMod, Print, exec, $scriptsDir/ScreenShot.sh --now # screenshot +bind = $mainMod SHIFT, Print, exec, $scriptsDir/ScreenShot.sh --area # screenshot (area) +bind = $mainMod CTRL, Print, exec, $scriptsDir/ScreenShot.sh --in5 # screenshot (5 secs delay) +bind = $mainMod CTRL SHIFT, Print, exec, $scriptsDir/ScreenShot.sh --in10 # screenshot (10 secs delay) +bind = ALT, Print, exec, $scriptsDir/ScreenShot.sh --active # screenshot (active window only) + +# screenshot with swappy (another screenshot tool) +bind = $mainMod SHIFT, S, exec, $scriptsDir/ScreenShot.sh --swappy #screenshot (swappy) + +# Resize windows +binde = $mainMod SHIFT, left, resizeactive,-50 0 +binde = $mainMod SHIFT, right, resizeactive,50 0 +binde = $mainMod SHIFT, up, resizeactive,0 -50 +binde = $mainMod SHIFT, down, resizeactive,0 50 + +# Move windows +bind = $mainMod CTRL, left, movewindow, l +bind = $mainMod CTRL, right, movewindow, r +bind = $mainMod CTRL, up, movewindow, u +bind = $mainMod CTRL, down, movewindow, d + +# Swap windows +bind = $mainMod ALT, left, swapwindow, l +bind = $mainMod ALT, right, swapwindow, r +bind = $mainMod ALT, up, swapwindow, u +bind = $mainMod ALT, down, swapwindow, d + +# 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 + +# Workspaces related +bind = $mainMod, tab, workspace, m+1 +bind = $mainMod SHIFT, tab, workspace, m-1 + +# Special workspace +bind = $mainMod SHIFT, U, movetoworkspace, special +bind = $mainMod, U, togglespecialworkspace, + +# The following mappings use the key codes to better support various keyboard layouts +# 1 is code:10, 2 is code 11, etc +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, code:10, workspace, 1 # NOTE: code:10 = key 1 +bind = $mainMod, code:11, workspace, 2 # NOTE: code:11 = key 2 +bind = $mainMod, code:12, workspace, 3 # NOTE: code:12 = key 3 +bind = $mainMod, code:13, workspace, 4 # NOTE: code:13 = key 4 +bind = $mainMod, code:14, workspace, 5 # NOTE: code:14 = key 5 +bind = $mainMod, code:15, workspace, 6 # NOTE: code:15 = key 6 +bind = $mainMod, code:16, workspace, 7 # NOTE: code:16 = key 7 +bind = $mainMod, code:17, workspace, 8 # NOTE: code:17 = key 8 +bind = $mainMod, code:18, workspace, 9 # NOTE: code:18 = key 9 +bind = $mainMod, code:19, workspace, 10 # NOTE: code:19 = key 0 + +# Move active window and follow to workspace mainMod + SHIFT [0-9] +bind = $mainMod SHIFT, code:10, movetoworkspace, 1 # NOTE: code:10 = key 1 +bind = $mainMod SHIFT, code:11, movetoworkspace, 2 # NOTE: code:11 = key 2 +bind = $mainMod SHIFT, code:12, movetoworkspace, 3 # NOTE: code:12 = key 3 +bind = $mainMod SHIFT, code:13, movetoworkspace, 4 # NOTE: code:13 = key 4 +bind = $mainMod SHIFT, code:14, movetoworkspace, 5 # NOTE: code:14 = key 5 +bind = $mainMod SHIFT, code:15, movetoworkspace, 6 # NOTE: code:15 = key 6 +bind = $mainMod SHIFT, code:16, movetoworkspace, 7 # NOTE: code:16 = key 7 +bind = $mainMod SHIFT, code:17, movetoworkspace, 8 # NOTE: code:17 = key 8 +bind = $mainMod SHIFT, code:18, movetoworkspace, 9 # NOTE: code:18 = key 9 +bind = $mainMod SHIFT, code:19, movetoworkspace, 10 # NOTE: code:19 = key 0 +bind = $mainMod SHIFT, bracketleft, movetoworkspace, -1 # brackets [ +bind = $mainMod SHIFT, bracketright, movetoworkspace, +1 # brackets ] + +# Move active window to a workspace silently mainMod + CTRL [0-9] +bind = $mainMod CTRL, code:10, movetoworkspacesilent, 1 # NOTE: code:10 = key 1 +bind = $mainMod CTRL, code:11, movetoworkspacesilent, 2 # NOTE: code:11 = key 2 +bind = $mainMod CTRL, code:12, movetoworkspacesilent, 3 # NOTE: code:12 = key 3 +bind = $mainMod CTRL, code:13, movetoworkspacesilent, 4 # NOTE: code:13 = key 4 +bind = $mainMod CTRL, code:14, movetoworkspacesilent, 5 # NOTE: code:14 = key 5 +bind = $mainMod CTRL, code:15, movetoworkspacesilent, 6 # NOTE: code:15 = key 6 +bind = $mainMod CTRL, code:16, movetoworkspacesilent, 7 # NOTE: code:16 = key 7 +bind = $mainMod CTRL, code:17, movetoworkspacesilent, 8 # NOTE: code:17 = key 8 +bind = $mainMod CTRL, code:18, movetoworkspacesilent, 9 # NOTE: code:18 = key 9 +bind = $mainMod CTRL, code:19, movetoworkspacesilent, 10 # NOTE: code:19 = key 0 +bind = $mainMod CTRL, bracketleft, movetoworkspacesilent, -1 # brackets [ +bind = $mainMod CTRL, bracketright, movetoworkspacesilent, +1 # brackets ] + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 +#bind = $mainMod, period, workspace, e+1 +#bind = $mainMod, comma, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow # NOTE: mouse:272 = left click +bindm = $mainMod, mouse:273, resizewindow # NOTE: mouse:272 = right click diff --git a/hypr/configs/Keybinds.confDefault b/hypr/configs/Keybinds.confDefault new file mode 100644 index 0000000..0a9c67e --- /dev/null +++ b/hypr/configs/Keybinds.confDefault @@ -0,0 +1,152 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# Default Keybinds +# visit https://wiki.hyprland.org/Configuring/Binds/ for more info + +# /* ---- โœด๏ธ Variables โœด๏ธ ---- */ # +$mainMod = SUPER +$scriptsDir = $HOME/.config/hypr/scripts +$UserConfigs = $HOME/.config/hypr/UserConfigs +$UserScripts = $HOME/.config/hypr/UserScripts + +bind = CTRL ALT, Delete, exec, hyprctl dispatch exit 0 # exit Hyprland +bind = $mainMod, Q, killactive, # close active (not kill) +bind = $mainMod SHIFT, Q, exec, $scriptsDir/KillActiveProcess.sh # Kill active process +bind = CTRL ALT, L, exec, $scriptsDir/LockScreen.sh # screen lock +bind = CTRL ALT, P, exec, $scriptsDir/Wlogout.sh # power menu +bind = $mainMod SHIFT, N, exec, swaync-client -t -sw # swayNC notification panel +bind = $mainMod SHIFT, E, exec, $scriptsDir/Kool_Quick_Settings.sh # Settings Menu KooL Hyprland Settings + +# My Bindings +bind = CTRL, R, exec, alacritty + +# Master Layout +bind = $mainMod CTRL, D, layoutmsg, removemaster +bind = $mainMod, I, layoutmsg, addmaster +bind = $mainMod, J, layoutmsg, cyclenext +bind = $mainMod, K, layoutmsg, cycleprev +bind = $mainMod CTRL, Return, layoutmsg, swapwithmaster + +# Dwindle Layout +bind = $mainMod SHIFT, I, togglesplit # only works on dwindle layout +bind = $mainMod, P, pseudo, # dwindle + +# Works on either layout (Master or Dwindle) +bind = $mainMod, M, exec, hyprctl dispatch splitratio 0.3 + +# group +bind = $mainMod, G, togglegroup # toggle group +bind = $mainMod CTRL, tab, changegroupactive # change focus to another window + + # Cycle windows if floating bring to top +bind = ALT, tab, cyclenext +bind = ALT, tab, bringactivetotop + +# Special Keys / Hot Keys +bindel = , xf86audioraisevolume, exec, $scriptsDir/Volume.sh --inc # volume up +bindel = , xf86audiolowervolume, exec, $scriptsDir/Volume.sh --dec # volume down +bindl = , xf86AudioMicMute, exec, $scriptsDir/Volume.sh --toggle-mic # mic mute +bindl = , xf86audiomute, exec, $scriptsDir/Volume.sh --toggle # mute +bindl = , xf86Sleep, exec, systemctl suspend # sleep button +bindl = , xf86Rfkill, exec, $scriptsDir/AirplaneMode.sh # Airplane mode + +# media controls using keyboards +bindl = , xf86AudioPlayPause, exec, $scriptsDir/MediaCtrl.sh --pause +bindl = , xf86AudioPause, exec, $scriptsDir/MediaCtrl.sh --pause +bindl = , xf86AudioPlay, exec, $scriptsDir/MediaCtrl.sh --pause +bindl = , xf86AudioNext, exec, $scriptsDir/MediaCtrl.sh --nxt +bindl = , xf86AudioPrev, exec, $scriptsDir/MediaCtrl.sh --prv +bindl = , xf86audiostop, exec, $scriptsDir/MediaCtrl.sh --stop + +# Screenshot keybindings NOTE: You may need to press Fn key as well +bind = $mainMod, Print, exec, $scriptsDir/ScreenShot.sh --now # screenshot +bind = $mainMod SHIFT, Print, exec, $scriptsDir/ScreenShot.sh --area # screenshot (area) +bind = $mainMod CTRL, Print, exec, $scriptsDir/ScreenShot.sh --in5 # screenshot (5 secs delay) +bind = $mainMod CTRL SHIFT, Print, exec, $scriptsDir/ScreenShot.sh --in10 # screenshot (10 secs delay) +bind = ALT, Print, exec, $scriptsDir/ScreenShot.sh --active # screenshot (active window only) + +# screenshot with swappy (another screenshot tool) +bind = $mainMod SHIFT, S, exec, $scriptsDir/ScreenShot.sh --swappy #screenshot (swappy) + +# Resize windows +binde = $mainMod SHIFT, left, resizeactive,-50 0 +binde = $mainMod SHIFT, right, resizeactive,50 0 +binde = $mainMod SHIFT, up, resizeactive,0 -50 +binde = $mainMod SHIFT, down, resizeactive,0 50 + +# Move windows +bind = $mainMod CTRL, left, movewindow, l +bind = $mainMod CTRL, right, movewindow, r +bind = $mainMod CTRL, up, movewindow, u +bind = $mainMod CTRL, down, movewindow, d + +# Swap windows +bind = $mainMod ALT, left, swapwindow, l +bind = $mainMod ALT, right, swapwindow, r +bind = $mainMod ALT, up, swapwindow, u +bind = $mainMod ALT, down, swapwindow, d + +# 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 + +# Workspaces related +bind = $mainMod, tab, workspace, m+1 +bind = $mainMod SHIFT, tab, workspace, m-1 + +# Special workspace +bind = $mainMod SHIFT, U, movetoworkspace, special +bind = $mainMod, U, togglespecialworkspace, + +# The following mappings use the key codes to better support various keyboard layouts +# 1 is code:10, 2 is code 11, etc +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, code:10, workspace, 1 # NOTE: code:10 = key 1 +bind = $mainMod, code:11, workspace, 2 # NOTE: code:11 = key 2 +bind = $mainMod, code:12, workspace, 3 # NOTE: code:12 = key 3 +bind = $mainMod, code:13, workspace, 4 # NOTE: code:13 = key 4 +bind = $mainMod, code:14, workspace, 5 # NOTE: code:14 = key 5 +bind = $mainMod, code:15, workspace, 6 # NOTE: code:15 = key 6 +bind = $mainMod, code:16, workspace, 7 # NOTE: code:16 = key 7 +bind = $mainMod, code:17, workspace, 8 # NOTE: code:17 = key 8 +bind = $mainMod, code:18, workspace, 9 # NOTE: code:18 = key 9 +bind = $mainMod, code:19, workspace, 10 # NOTE: code:19 = key 0 + +# Move active window and follow to workspace mainMod + SHIFT [0-9] +bind = $mainMod SHIFT, code:10, movetoworkspace, 1 # NOTE: code:10 = key 1 +bind = $mainMod SHIFT, code:11, movetoworkspace, 2 # NOTE: code:11 = key 2 +bind = $mainMod SHIFT, code:12, movetoworkspace, 3 # NOTE: code:12 = key 3 +bind = $mainMod SHIFT, code:13, movetoworkspace, 4 # NOTE: code:13 = key 4 +bind = $mainMod SHIFT, code:14, movetoworkspace, 5 # NOTE: code:14 = key 5 +bind = $mainMod SHIFT, code:15, movetoworkspace, 6 # NOTE: code:15 = key 6 +bind = $mainMod SHIFT, code:16, movetoworkspace, 7 # NOTE: code:16 = key 7 +bind = $mainMod SHIFT, code:17, movetoworkspace, 8 # NOTE: code:17 = key 8 +bind = $mainMod SHIFT, code:18, movetoworkspace, 9 # NOTE: code:18 = key 9 +bind = $mainMod SHIFT, code:19, movetoworkspace, 10 # NOTE: code:19 = key 0 +bind = $mainMod SHIFT, bracketleft, movetoworkspace, -1 # brackets [ +bind = $mainMod SHIFT, bracketright, movetoworkspace, +1 # brackets ] + +# Move active window to a workspace silently mainMod + CTRL [0-9] +bind = $mainMod CTRL, code:10, movetoworkspacesilent, 1 # NOTE: code:10 = key 1 +bind = $mainMod CTRL, code:11, movetoworkspacesilent, 2 # NOTE: code:11 = key 2 +bind = $mainMod CTRL, code:12, movetoworkspacesilent, 3 # NOTE: code:12 = key 3 +bind = $mainMod CTRL, code:13, movetoworkspacesilent, 4 # NOTE: code:13 = key 4 +bind = $mainMod CTRL, code:14, movetoworkspacesilent, 5 # NOTE: code:14 = key 5 +bind = $mainMod CTRL, code:15, movetoworkspacesilent, 6 # NOTE: code:15 = key 6 +bind = $mainMod CTRL, code:16, movetoworkspacesilent, 7 # NOTE: code:16 = key 7 +bind = $mainMod CTRL, code:17, movetoworkspacesilent, 8 # NOTE: code:17 = key 8 +bind = $mainMod CTRL, code:18, movetoworkspacesilent, 9 # NOTE: code:18 = key 9 +bind = $mainMod CTRL, code:19, movetoworkspacesilent, 10 # NOTE: code:19 = key 0 +bind = $mainMod CTRL, bracketleft, movetoworkspacesilent, -1 # brackets [ +bind = $mainMod CTRL, bracketright, movetoworkspacesilent, +1 # brackets ] + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 +bind = $mainMod, period, workspace, e+1 +bind = $mainMod, comma, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow # NOTE: mouse:272 = left click +bindm = $mainMod, mouse:273, resizewindow # NOTE: mouse:272 = right click diff --git a/hypr/configs/Keybinds.confMine b/hypr/configs/Keybinds.confMine new file mode 100644 index 0000000..65805ff --- /dev/null +++ b/hypr/configs/Keybinds.confMine @@ -0,0 +1,61 @@ +$mainMod = SUPER + +# Function Keys +bindle=, XF86MonBrightnessUp, exec, brightnessctl -c backlight set 5%+ +bindle=, XF86MonBrightnessDown, exec, brightnessctl -c backlight set 5%- + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, Q, exec, $terminal +# bind = CTRL, Space, exec, fuzzel +bind = $mainMod, Return, exec, $terminal +bind = $mainMod, W, exec, $browser +bind = $mainMod, S, exec, grimshot copy area +bind = $mainMod, C, killactive, +bind = $mainMod, M, exit, +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, V, togglefloating, +bind = $mainMod, R, exec, $menu +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle + +# 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 + +# 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 + +# Example special workspace (scratchpad) +bind = $mainMod, S, togglespecialworkspace, magic +bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow diff --git a/hypr/hypridle.conf b/hypr/hypridle.conf new file mode 100644 index 0000000..4b8cd7e --- /dev/null +++ b/hypr/hypridle.conf @@ -0,0 +1,50 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# Hypridle +# Original config submitted by https://github.com/SherLock707 + +$iDIR="$HOME/.config/swaync/images/ja.png" + +general { + lock_cmd = pidof hyprlock || hyprlock # runs hyprlock if it is not already running (this is always run when "loginctl lock-session" is called) + # unlock_cmd = killall hyprlock # kills hyprlock when unlocking (this is always run when "loginctl unlock-session" is called) + before_sleep_cmd = loginctl lock-session # ensures that the session is locked before going to sleep + after_sleep_cmd = hyprctl dispatch dpms on # turn of screen after sleep (not strictly necessary, but just in case) + ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam) +} + +# turn off screen faster if session is already locked +# (disabled by default) +# listener { +# timeout = 30 # 30 seconds +# on-timeout = pidof hyprlock && hyprctl dispatch dpms off # turns off the screen if hyprlock is active +# on-resume = pidof hyprlock && hyprctl dispatch dpms on # command to run when activity is detected after timeout has fired. +# } + +# Warn +listener { + timeout = 540 # 9 min + on-timeout = notify-send -i $iDIR " You are idle!" # command to run when timeout has passed + on-resume = notify-send -i $iDIR " Oh! you're Back" " Hello !!!" # command to run when activity is detected after timeout has fired. +} + +# Screenlock +listener { + timeout = 600 # 10 min + on-timeout = loginctl lock-session # command to run when timeout has passed + #on-resume = notify-send -i $iDIR " System Unlocked!" # command to run when activity is detected after timeout has fired. +} + +# Turn off screen +# (disabled by default) +# listener { +# timeout = 630 # 10.5 min +# on-timeout = hyprctl dispatch dpms off # command to run when timeout has passed +# on-resume = hyprctl dispatch dpms on # command to run when activity is detected after timeout has fired. +# } + +# Suspend # disabled by default +# listener { + # timeout = 1200 # 20 min + # on-timeout = systemctl suspend # command to run when timeout has passed + # on-resume = notify-send -i $iDIR " Oh! you're back" "Hello !!!" # command to run when activity is detected after timeout has fired. +# } diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf new file mode 100644 index 0000000..71f243e --- /dev/null +++ b/hypr/hyprland.conf @@ -0,0 +1,43 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# always refer to Hyprland wiki +# https://wiki.hyprland.org/ + +# Initial boot script enable to apply initial wallpapers, theming, new settings etc. +# suggest not to change this or delete this including deleting referrence file in ~/.config/hypr/.initial_startup_done +# as long as the referrence file is present, this initial-boot.sh will not execute +exec-once = $HOME/.config/hypr/initial-boot.sh + +# Sourcing external config files +$configs = $HOME/.config/hypr/configs # Default Configs directory path + +source=$configs/Keybinds.conf # Pre-configured keybinds + +# ## This is where you want to start tinkering +$UserConfigs = $HOME/.config/hypr/UserConfigs # User Configs directory path + +source= $UserConfigs/Startup_Apps.conf # put your start-up packages on this file + +source= $UserConfigs/ENVariables.conf # Environment variables to load + +#source= $UserConfigs/Monitors.conf # Its all about your monitor config (old dots) will remove on push to main +#source= $UserConfigs/WorkspaceRules.conf # Hyprland workspaces (old dots) will remove on push to main + +source= $UserConfigs/Laptops.conf # For laptop related + +source= $UserConfigs/LaptopDisplay.conf # Laptop display related. You need to read the comment on this file + +source= $UserConfigs/WindowRules.conf # all about Hyprland Window Rules and Layer Rules + +source= $UserConfigs/UserDecorations.conf # Decorations config file + +source= $UserConfigs/UserAnimations.conf # Animation config file + +source= $UserConfigs/UserKeybinds.conf # Put your own keybinds here + +source= $UserConfigs/UserSettings.conf # Main Hyprland Settings. + +source= $UserConfigs/01-UserDefaults.conf # settings for User defaults apps + +# nwg-displays +source= $HOME/.config/hypr/monitors.conf +source= $HOME/.config/hypr/workspaces.conf \ No newline at end of file diff --git a/hypr/hyprlock-1080p.conf b/hypr/hyprlock-1080p.conf new file mode 100644 index 0000000..14f2f35 --- /dev/null +++ b/hypr/hyprlock-1080p.conf @@ -0,0 +1,183 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# Hyprlock config for < 1080p monitor resolutions +# Original config submitted by https://github.com/SherLock707 + +# Sourcing colors generated by wallust +source = $HOME/.config/hypr/wallust/wallust-hyprland.conf +$Scripts = $HOME/.config/hypr/scripts + +general { + grace = 1 + fractional_scaling = 2 + immediate_render = true +} + +background { + monitor = + # NOTE: use only 1 path + #path = screenshot # screenshot of your desktop + #path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_modified # by wallpaper effects + path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current # current wallpaper + + color = rgb(0,0,0) # color will be rendered initially until path is available + + # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations + blur_size = 3 + blur_passes = 2 # 0 disables blurring + noise = 0.0117 + contrast = 1.3000 # Vibrant!!! + brightness = 0.8000 + vibrancy = 0.2100 + vibrancy_darkness = 0.0 +} + + +# Date +label { + monitor = + text = cmd[update:18000000] echo " "$(date +'%A, %-d %B')" " + color = $color13 + font_size = 16 + font_family = Victor Mono Bold Italic + position = 0, -120 + halign = center + valign = center +} + +# Hour-Time +label { + monitor = + text = cmd[update:1000] echo "$(date +"%H")" +# text = cmd[update:1000] echo "$(date +"%I")" #AM/PM + #color = rgba(255, 185, 0, .8) + color = $color13 + font_size = 200 + font_family = JetBrainsMono Nerd Font ExtraBold + position = 0, -60 + halign = center + valign = top +} + +# Minute-Time +label { + monitor = + text = cmd[update:1000] echo "$(date +"%M")" + #color = rgba(15, 10, 222, .8) + color = $color12 + font_size = 200 + font_family = JetBrainsMono Nerd Font ExtraBold + position = 0, -340 + halign = center + valign = top +} + +# Seconds-Time +label { + monitor = + text = cmd[update:1000] echo "$(date +"%S")" +# text = cmd[update:1000] echo "$(date +"%S %p")" #AM/PM + color = $color11 + font_size = 35 + font_family = JetBrainsMono Nerd Font ExtraBold + position = 0, -350 + halign = center + valign = top +} + +# Put a picture of choice here. Default is the current wallpaper +#image { +# monitor = +# path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current +# size = 160 +# rounding = -1 +# border_size = 0 +# border_color = $color11 +# rotate = 0 +# reload_time = -1 +# position = 0, 280 +# halign = center +# valign = bottom +} + +# USER +label { + monitor = + text = ๏Šพ $USER + color = $color13 + font_size = 24 + font_family = Victor Mono Bold Oblique + position = 0, 220 + halign = center + valign = bottom +} + +# INPUT FIELD +input-field { + monitor = + size = 200, 60 + outline_thickness = 2 + dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = true + outer_color = $color11 + inner_color = rgba(255, 255, 255, 0.1) + capslock_color = rgb(255,255,255) + font_color = $color13 + fade_on_empty = false + font_family = Victor Mono Bold Oblique + placeholder_text = ๐Ÿ”’ Type Password + hide_input = false + position = 0, 100 + halign = center + valign = bottom +} + +# Keyboard LAYOUT +label { + monitor = + text = $LAYOUT + color = $color13 + font_size = 10 + font_family = Victor Mono Bold Oblique + position = 0, 70 + halign = center + valign = bottom +} + +# uptime +label { + monitor = + text = cmd[update:60000] echo " "$(uptime -p || $Scripts/UptimeNixOS.sh)" " + color = $color13 + font_size = 16 + font_family = Victor Mono Bold Oblique + position = 0, 0 + halign = right + valign = bottom +} + +# battery information +label { + monitor = + text = cmd[update:1000] echo " "$($Scripts/Battery.sh)" " + color = $color13 + font_size = 16 + font_family = Victor Mono Bold Oblique + position = 0, 30 + halign = right + valign = bottom +} + +# weather edit the scripts for locations +# weather scripts are located in ~/.config/hypr/UserScripts Weather.sh and/or Weather.py +# see https://github.com/JaKooLit/Hyprland-Dots/wiki/TIPS#%EF%B8%8F-weather-app-related-for-waybar-and-hyprlock +label { + monitor = + text = cmd[update:3600000] [ -f "$HOME/.cache/.weather_cache" ] && cat "$HOME/.cache/.weather_cache" + color = $color13 + font_size = 16 + font_family = Victor Mono Bold Oblique + position = 50, 0 + halign = left + valign = bottom +} diff --git a/hypr/hyprlock.conf b/hypr/hyprlock.conf new file mode 100644 index 0000000..e8bef16 --- /dev/null +++ b/hypr/hyprlock.conf @@ -0,0 +1,184 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# Hyprlock config for => 2k monitor resolutions +# Original config submitted by https://github.com/SherLock707 + +# Sourcing colors generated by wallust +source = $HOME/.config/hypr/wallust/wallust-hyprland.conf +$Scripts = $HOME/.config/hypr/scripts + +general { + grace = 1 + fractional_scaling = 2 + immediate_render = true +} + +background { + monitor = + # NOTE: use only 1 path + #path = screenshot # screenshot of your desktop + #path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_modified # by wallpaper effects + path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current # current wallpaper + + color = rgb(0,0,0) # color will be rendered initially until path is available + + # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations + blur_size = 3 + blur_passes = 2 # 0 disables blurring + noise = 0.0117 + contrast = 1.3000 # Vibrant!!! + brightness = 0.8000 + vibrancy = 0.2100 + vibrancy_darkness = 0.0 +} + + +# Date +label { + monitor = + text = cmd[update:18000000] echo " "$(date +'%A, %-d %B')" " + color = $color13 + font_size = 18 + font_family = Victor Mono Bold Italic + position = 0, -120 + halign = center + valign = center +} + +# Hour-Time +label { + monitor = +# text = cmd[update:1000] echo "$(date +"%H")" + text = cmd[update:1000] echo "$(date +"%I")" #AM/PM + #color = rgba(255, 185, 0, .8) + color = $color13 + font_size = 240 + font_family = JetBrainsMono Nerd Font ExtraBold + position = 0, -100 + halign = center + valign = top +} + +# Minute-Time +label { + monitor = + text = cmd[update:1000] echo "$(date +"%M")" + #color = rgba(15, 10, 222, .8) + color = $color12 + font_size = 240 + font_family = JetBrainsMono Nerd Font ExtraBold + position = 0, -450 + halign = center + valign = top +} + +# Seconds-Time +label { + monitor = +# text = cmd[update:1000] echo "$(date +"%S")" + text = cmd[update:1000] echo "$(date +"%S %p")" #AM/PM + color = $color11 + font_size = 50 + font_family = JetBrainsMono Nerd Font ExtraBold + position = 0, -450 + halign = center + valign = top +} + +# Put a picture of choice here. Default is the current wallpaper +#image { +# monitor = +# #path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current +# size = 160 +# rounding = -1 +# border_size = 0 +# border_color = $color11 +# rotate = 0 +# reload_time = -1 +# position = 0, 400 +# halign = center +# valign = bottom +#} + +# USER +label { + monitor = + text = ๏Šพ $USER + color = $color13 + font_size = 24 + font_family = Victor Mono Bold Oblique + position = 0, 280 + halign = center + valign = bottom +} + +# INPUT FIELD +input-field { + monitor = + size = 300, 60 + outline_thickness = 2 + dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8 + dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0 + dots_center = true + outer_color = $color11 + inner_color = rgba(255, 255, 255, 0.1) + font_color = $color13 + capslock_color = rgb(255,255,255) + fade_on_empty = false + font_family = Victor Mono Bold Oblique + placeholder_text = ๐Ÿ”’ Type Password + hide_input = false + position = 0, 120 + halign = center + valign = bottom +} + + +# Keyboard LAYOUT +label { + monitor = + text = $LAYOUT + color = $color13 + font_size = 12 + font_family = Victor Mono Bold Oblique + position = 0, 80 + halign = center + valign = bottom +} + +# uptime +label { + monitor = + text = cmd[update:60000] echo " "$(uptime -p || $Scripts/UptimeNixOS.sh)" " + color = $color13 + font_size = 18 + font_family = Victor Mono Bold Oblique + position = 0, 0 + halign = right + valign = bottom +} + +# battery information +label { + monitor = + text = cmd[update:1000] echo " "$($Scripts/Battery.sh)" " + color = $color13 + font_size = 18 + font_family = Victor Mono Bold Oblique + position = 0, 30 + halign = right + valign = bottom +} + +# weather edit the scripts for locations +# weather scripts are located in ~/.config/hypr/UserScripts Weather.sh and/or Weather.py +# see https://github.com/JaKooLit/Hyprland-Dots/wiki/TIPS#%EF%B8%8F-weather-app-related-for-waybar-and-hyprlock +label { + monitor = + text = cmd[update:3600000] [ -f "$HOME/.cache/.weather_cache" ] && cat "$HOME/.cache/.weather_cache" + color = $color13 + font_size = 18 + font_family = Victor Mono Bold Oblique + position = 50, 0 + halign = left + valign = bottom +} diff --git a/hypr/initial-boot.sh b/hypr/initial-boot.sh new file mode 100755 index 0000000..5b49cb6 --- /dev/null +++ b/hypr/initial-boot.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# A bash script designed to run only once dotfiles installed + +# THIS SCRIPT CAN BE DELETED ONCE SUCCESSFULLY BOOTED!! And also, edit ~/.config/hypr/configs/Settings.conf +# NOT necessary to do since this script is only designed to run only once as long as the marker exists +# marker file is located at ~/.config/hypr/.initial_startup_done +# However, I do highly suggest not to touch it since again, as long as the marker exist, script wont run + +# Variables +scriptsDir=$HOME/.config/hypr/scripts +wallpaper=$HOME/.config/hypr/wallpaper_effects/.wallpaper_current +waybar_style="$HOME/.config/waybar/style/[Extra] Neon Circuit.css" +kvantum_theme="catppuccin-mocha-blue" +color_scheme="prefer-dark" +gtk_theme="Flat-Remix-GTK-Blue-Dark" +icon_theme="Flat-Remix-Blue-Dark" +cursor_theme="Bibata-Modern-Ice" + +swww="swww img" +effect="--transition-bezier .43,1.19,1,.4 --transition-fps 30 --transition-type grow --transition-pos 0.925,0.977 --transition-duration 2" + +# Check if a marker file exists. +if [ ! -f "$HOME/.config/hypr/.initial_startup_done" ]; then + sleep 1 + # Initialize wallust and wallpaper + if [ -f "$wallpaper" ]; then + wallust run -s $wallpaper > /dev/null + swww query || swww-daemon && $swww $wallpaper $effect + "$scriptsDir/WallustSwww.sh" > /dev/null 2>&1 & + fi + + # initiate GTK dark mode and apply icon and cursor theme + gsettings set org.gnome.desktop.interface color-scheme $color_scheme > /dev/null 2>&1 & + gsettings set org.gnome.desktop.interface gtk-theme $gtk_theme > /dev/null 2>&1 & + gsettings set org.gnome.desktop.interface icon-theme $icon_theme > /dev/null 2>&1 & + gsettings set org.gnome.desktop.interface cursor-theme $cursor_theme > /dev/null 2>&1 & + gsettings set org.gnome.desktop.interface cursor-size 24 > /dev/null 2>&1 & + + # NIXOS initiate GTK dark mode and apply icon and cursor theme + if [ -n "$(grep -i nixos < /etc/os-release)" ]; then + gsettings set org.gnome.desktop.interface color-scheme "'$color_scheme'" > /dev/null 2>&1 & + dconf write /org/gnome/desktop/interface/gtk-theme "'$gtk_theme'" > /dev/null 2>&1 & + dconf write /org/gnome/desktop/interface/icon-theme "'$icon_theme'" > /dev/null 2>&1 & + dconf write /org/gnome/desktop/interface/cursor-theme "'$cursor_theme'" > /dev/null 2>&1 & + dconf write /org/gnome/desktop/interface/cursor-size "24" > /dev/null 2>&1 & + fi + + # initiate kvantum theme + kvantummanager --set "$kvantum_theme" > /dev/null 2>&1 & + + # initiate the kb_layout (for some reason) waybar cant launch it + "$scriptsDir/SwitchKeyboardLayout.sh" > /dev/null 2>&1 & + + # waybar style + #if [ -L "$HOME/.config/waybar/config" ]; then + ## ln -sf "$waybar_style" "$HOME/.config/waybar/style.css" + # "$scriptsDir/Refresh.sh" > /dev/null 2>&1 & + #fi + + + # Create a marker file to indicate that the script has been executed. + touch "$HOME/.config/hypr/.initial_startup_done" + + exit +fi diff --git a/hypr/monitors.conf b/hypr/monitors.conf new file mode 100644 index 0000000..b6b7478 --- /dev/null +++ b/hypr/monitors.conf @@ -0,0 +1,61 @@ +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# default Monitor config + +# *********************************************************** # +# +# NOTE: This will be overwritten by NWG-Displays +# once you use and click apply. You can still find this +# default at ~/.config/hypr/Monitor_Profiles/default.conf +# +# *********************************************************** # + + +# Monitor Configuration +# See Hyprland wiki for more details +# https://wiki.hyprland.org/Configuring/Monitors/ +# Configure your Display resolution, offset, scale and Monitors here, use `hyprctl monitors` to get the info. + +# Monitors +monitor=,preferred,auto,1 + +# High Refresh Rate +monitor=,highrr,auto,1 + +# High Resolution +monitor=,highres,auto,1.25 + +# NOTE: for laptop, kindly check notes in Laptops.conf regarding display +# Created this inorder for the monitor display to not wake up if not intended. +# See here: https://github.com/hyprwm/Hyprland/issues/4090 + +# Some examples to set your own monitor +#monitor = eDP-1, preferred, auto, 1 +#monitor = eDP-1, 2560x1440@165, 0x0, 1 #own screen +#monitor = DP-3, 1920x1080@240, auto, 1 +#monitor = DP-1, preferred, auto, 1 +#monitor = HDMI-A-1, preferred,auto,1 + +# QEMU-KVM, virtual box or vmware +#monitor = Virtual-1, 1920x1080@60,auto,1 + +# to disable a monitor +#monitor=name,disable + +# Mirror samples +#monitor=DP-3,1920x1080@60,0x0,1,mirror,DP-2 +#monitor=,preferred,auto,1,mirror,eDP-1 +#monitor=HDMI-A-1,2560x1440@144,0x0,1,mirror,eDP-1 + +# 10 bit monitor support - See wiki https://wiki.hyprland.org/Configuring/Monitors/#10-bit-support - See NOTES below +# NOTE: Colors registered in Hyprland (e.g. the border color) do not support 10 bit. +# NOTE: Some applications do not support screen capture with 10 bit enabled. (Screen captures like OBS may render black screen) +# monitor=,preferred,auto,1,bitdepth,10 + +#monitor=eDP-1,transform,0 +#monitor=eDP-1,addreserved,10,10,10,49 + +# workspaces - Monitor rules +# https://wiki.hyprland.org/Configuring/Workspace-Rules/ +# SUPER E - Workspace-Rules +# See ~/.config/hypr/UserConfigs/WorkspaceRules.conf + diff --git a/hypr/scripts/AirplaneMode.sh b/hypr/scripts/AirplaneMode.sh new file mode 100755 index 0000000..4379935 --- /dev/null +++ b/hypr/scripts/AirplaneMode.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Airplane Mode. Turning on or off all wifi using rfkill. + +notif="$HOME/.config/swaync/images/ja.png" + +# Check if any wireless device is blocked +wifi_blocked=$(rfkill list wifi | grep -o "Soft blocked: yes") + +if [ -n "$wifi_blocked" ]; then + rfkill unblock wifi + notify-send -u low -i "$notif" " Airplane" " mode: OFF" +else + rfkill block wifi + notify-send -u low -i "$notif" " Airplane" " mode: ON" +fi diff --git a/hypr/scripts/Animations.sh b/hypr/scripts/Animations.sh new file mode 100755 index 0000000..477e5cd --- /dev/null +++ b/hypr/scripts/Animations.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# For applying Animations from different users + +# Check if rofi is already running +if pidof rofi > /dev/null; then + pkill rofi +fi + +# Variables +iDIR="$HOME/.config/swaync/images" +SCRIPTSDIR="$HOME/.config/hypr/scripts" +animations_dir="$HOME/.config/hypr/animations" +UserConfigs="$HOME/.config/hypr/UserConfigs" +rofi_theme="$HOME/.config/rofi/config-Animations.rasi" +msg='โ—NOTE:โ— This will copy animations into UserAnimations.conf' +# list of animation files, sorted alphabetically with numbers first +animations_list=$(find -L "$animations_dir" -maxdepth 1 -type f | sed 's/.*\///' | sed 's/\.conf$//' | sort -V) + +# Rofi Menu +chosen_file=$(echo "$animations_list" | rofi -i -dmenu -config $rofi_theme -mesg "$msg") + +# Check if a file was selected +if [[ -n "$chosen_file" ]]; then + full_path="$animations_dir/$chosen_file.conf" + cp "$full_path" "$UserConfigs/UserAnimations.conf" + notify-send -u low -i "$iDIR/ja.png" "$chosen_file" "Hyprland Animation Loaded" +fi + +sleep 1 +"$SCRIPTSDIR/RefreshNoWaybar.sh" diff --git a/hypr/scripts/Battery.sh b/hypr/scripts/Battery.sh new file mode 100755 index 0000000..d783005 --- /dev/null +++ b/hypr/scripts/Battery.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +for i in {0..3}; do + if [ -f /sys/class/power_supply/BAT$i/capacity ]; then + battery_level=$(cat /sys/class/power_supply/BAT$i/status) + battery_capacity=$(cat /sys/class/power_supply/BAT$i/capacity) + echo "Battery: $battery_capacity% ($battery_level)" + fi +done diff --git a/hypr/scripts/Brightness.sh b/hypr/scripts/Brightness.sh new file mode 100755 index 0000000..63fd02f --- /dev/null +++ b/hypr/scripts/Brightness.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Script for Monitor backlights (if supported) using brightnessctl + +iDIR="$HOME/.config/swaync/icons" +notification_timeout=1000 +step=10 # INCREASE/DECREASE BY THIS VALUE + +# Get current brightness as an integer (without %) +get_brightness() { + brightnessctl -m | cut -d, -f4 | tr -d '%' +} + +# Determine the icon based on brightness level +get_icon_path() { + local brightness=$1 + local level=$(( (brightness + 19) / 20 * 20 )) # Round up to next 20 + if (( level > 100 )); then + level=100 + fi + echo "$iDIR/brightness-${level}.png" +} + +# Send notification +send_notification() { + local brightness=$1 + local icon_path=$2 + + notify-send -e \ + -h string:x-canonical-private-synchronous:brightness_notif \ + -h int:value:"$brightness" \ + -u low \ + -i "$icon_path" \ + "Screen" "Brightness: ${brightness}%" +} + +# Change brightness and notify +change_brightness() { + local delta=$1 + local current new icon + + current=$(get_brightness) + new=$((current + delta)) + + # Clamp between 5 and 100 + (( new < 5 )) && new=5 + (( new > 100 )) && new=100 + + brightnessctl set "${new}%" + + icon=$(get_icon_path "$new") + send_notification "$new" "$icon" +} + +# Main +case "$1" in + "--get") + get_brightness + ;; + "--inc") + change_brightness "$step" + ;; + "--dec") + change_brightness "-$step" + ;; + *) + get_brightness + ;; +esac \ No newline at end of file diff --git a/hypr/scripts/BrightnessKbd.sh b/hypr/scripts/BrightnessKbd.sh new file mode 100755 index 0000000..24737b7 --- /dev/null +++ b/hypr/scripts/BrightnessKbd.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Script for keyboard backlights (if supported) using brightnessctl + +iDIR="$HOME/.config/swaync/icons" + +# Get keyboard brightness +get_kbd_backlight() { + echo $(brightnessctl -d '*::kbd_backlight' -m | cut -d, -f4) +} + +# Get icons +get_icon() { + current=$(get_kbd_backlight | sed 's/%//') + if [ "$current" -le "20" ]; then + icon="$iDIR/brightness-20.png" + elif [ "$current" -le "40" ]; then + icon="$iDIR/brightness-40.png" + elif [ "$current" -le "60" ]; then + icon="$iDIR/brightness-60.png" + elif [ "$current" -le "80" ]; then + icon="$iDIR/brightness-80.png" + else + icon="$iDIR/brightness-100.png" + fi +} +# Notify +notify_user() { + notify-send -e -h string:x-canonical-private-synchronous:brightness_notif -h int:value:$current -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$icon" "Keyboard" "Brightness:$current%" +} + +# Change brightness +change_kbd_backlight() { + brightnessctl -d *::kbd_backlight set "$1" && get_icon && notify_user +} + +# Execute accordingly +case "$1" in + "--get") + get_kbd_backlight + ;; + "--inc") + change_kbd_backlight "+30%" + ;; + "--dec") + change_kbd_backlight "30%-" + ;; + *) + get_kbd_backlight + ;; +esac diff --git a/hypr/scripts/ChangeBlur.sh b/hypr/scripts/ChangeBlur.sh new file mode 100755 index 0000000..895987a --- /dev/null +++ b/hypr/scripts/ChangeBlur.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Script for changing blurs on the fly + +notif="$HOME/.config/swaync/images" + +STATE=$(hyprctl -j getoption decoration:blur:passes | jq ".int") + +if [ "${STATE}" == "2" ]; then + hyprctl keyword decoration:blur:size 2 + hyprctl keyword decoration:blur:passes 1 + notify-send -e -u low -i "$notif/note.png" " Less Blur" +else + hyprctl keyword decoration:blur:size 5 + hyprctl keyword decoration:blur:passes 2 + notify-send -e -u low -i "$notif/ja.png" " Normal Blur" +fi diff --git a/hypr/scripts/ChangeLayout.sh b/hypr/scripts/ChangeLayout.sh new file mode 100755 index 0000000..b083fcd --- /dev/null +++ b/hypr/scripts/ChangeLayout.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# for changing Hyprland Layouts (Master or Dwindle) on the fly + +notif="$HOME/.config/swaync/images/ja.png" + +LAYOUT=$(hyprctl -j getoption general:layout | jq '.str' | sed 's/"//g') + +case $LAYOUT in +"master") + hyprctl keyword general:layout dwindle + hyprctl keyword unbind SUPER,J + hyprctl keyword unbind SUPER,K + hyprctl keyword bind SUPER,J,cyclenext + hyprctl keyword bind SUPER,K,cyclenext,prev + hyprctl keyword bind SUPER,O,togglesplit + notify-send -e -u low -i "$notif" " Dwindle Layout" + ;; +"dwindle") + hyprctl keyword general:layout master + hyprctl keyword unbind SUPER,J + hyprctl keyword unbind SUPER,K + hyprctl keyword unbind SUPER,O + hyprctl keyword bind SUPER,J,layoutmsg,cyclenext + hyprctl keyword bind SUPER,K,layoutmsg,cycleprev + notify-send -e -u low -i "$notif" " Master Layout" + ;; +*) ;; + +esac diff --git a/hypr/scripts/ClipManager.sh b/hypr/scripts/ClipManager.sh new file mode 100755 index 0000000..9937b6f --- /dev/null +++ b/hypr/scripts/ClipManager.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Clipboard Manager. This script uses cliphist, rofi, and wl-copy. + +# Variables +rofi_theme="$HOME/.config/rofi/config-clipboard.rasi" +msg='๐Ÿ‘€ **note** CTRL DEL = cliphist del (entry) or ALT DEL - cliphist wipe (all)' +# Actions: +# CTRL Del to delete an entry +# ALT Del to wipe clipboard contents + +# Check if rofi is already running +if pidof rofi > /dev/null; then + pkill rofi +fi + +while true; do + result=$( + rofi -i -dmenu \ + -kb-custom-1 "Control-Delete" \ + -kb-custom-2 "Alt-Delete" \ + -config $rofi_theme < <(cliphist list) \ + -mesg "$msg" + ) + + case "$?" in + 1) + exit + ;; + 0) + case "$result" in + "") + continue + ;; + *) + cliphist decode <<<"$result" | wl-copy + exit + ;; + esac + ;; + 10) + cliphist delete <<<"$result" + ;; + 11) + cliphist wipe + ;; + esac +done + diff --git a/hypr/scripts/DarkLight.sh b/hypr/scripts/DarkLight.sh new file mode 100755 index 0000000..1bc1602 --- /dev/null +++ b/hypr/scripts/DarkLight.sh @@ -0,0 +1,254 @@ +#!/bin/bash +## /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# For Dark and Light switching +# Note: Scripts are looking for keywords Light or Dark except for wallpapers as the are in a separate directories + +# Paths +wallpaper_base_path="$HOME/Pictures/wallpapers/Dynamic-Wallpapers" +dark_wallpapers="$wallpaper_base_path/Dark" +light_wallpapers="$wallpaper_base_path/Light" +hypr_config_path="$HOME/.config/hypr" +swaync_style="$HOME/.config/swaync/style.css" +ags_style="$HOME/.config/ags/user/style.css" +SCRIPTSDIR="$HOME/.config/hypr/scripts" +notif="$HOME/.config/swaync/images/bell.png" +wallust_rofi="$HOME/.config/wallust/templates/colors-rofi.rasi" + +kitty_conf="$HOME/.config/kitty/kitty.conf" + +wallust_config="$HOME/.config/wallust/wallust.toml" +pallete_dark="dark16" +pallete_light="light16" + +# intial kill process +for pid in waybar rofi swaync ags swaybg; do + killall -SIGUSR1 "$pid" +done + + +# Initialize swww if needed +swww query || swww-daemon --format xrgb + +# Set swww options +swww="swww img" +effect="--transition-bezier .43,1.19,1,.4 --transition-fps 60 --transition-type grow --transition-pos 0.925,0.977 --transition-duration 2" + +# Determine current theme mode +if [ "$(cat $HOME/.cache/.theme_mode)" = "Light" ]; then + next_mode="Dark" + # Logic for Dark mode + wallpaper_path="$dark_wallpapers" +else + next_mode="Light" + # Logic for Light mode + wallpaper_path="$light_wallpapers" +fi + +# Function to update theme mode for the next cycle +update_theme_mode() { + echo "$next_mode" > "$HOME/.cache/.theme_mode" +} + +# Function to notify user +notify_user() { + notify-send -u low -i "$notif" " Switching to" " $1 mode" +} + +# Use sed to replace the palette setting in the wallust config file +if [ "$next_mode" = "Dark" ]; then + sed -i 's/^palette = .*/palette = "'"$pallete_dark"'"/' "$wallust_config" +else + sed -i 's/^palette = .*/palette = "'"$pallete_light"'"/' "$wallust_config" +fi + +# Function to set Waybar style +set_waybar_style() { + theme="$1" + waybar_styles="$HOME/.config/waybar/style" + waybar_style_link="$HOME/.config/waybar/style.css" + style_prefix="\\[${theme}\\].*\\.css$" + + style_file=$(find -L "$waybar_styles" -maxdepth 1 -type f -regex ".*$style_prefix" | shuf -n 1) + + if [ -n "$style_file" ]; then + ln -sf "$style_file" "$waybar_style_link" + else + echo "Style file not found for $theme theme." + fi +} + +# Call the function after determining the mode +set_waybar_style "$next_mode" +notify_user "$next_mode" + + +# swaync color change +if [ "$next_mode" = "Dark" ]; then + sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(0, 0, 0, 0.8);/' "${swaync_style}" + #sed -i '/@define-color noti-bg-alt/s/#.*;/#111111;/' "${swaync_style}" +else + sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(255, 255, 255, 0.9);/' "${swaync_style}" + #sed -i '/@define-color noti-bg-alt/s/#.*;/#F0F0F0;/' "${swaync_style}" +fi + +# ags color change +if command -v ags >/dev/null 2>&1; then + if [ "$next_mode" = "Dark" ]; then + sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(0, 0, 0, 0.4);/' "${ags_style}" + sed -i '/@define-color text-color/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(255, 255, 255, 0.7);/' "${ags_style}" + sed -i '/@define-color noti-bg-alt/s/#.*;/#111111;/' "${ags_style}" + else + sed -i '/@define-color noti-bg/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(255, 255, 255, 0.4);/' "${ags_style}" + sed -i '/@define-color text-color/s/rgba([0-9]*,\s*[0-9]*,\s*[0-9]*,\s*[0-9.]*);/rgba(0, 0, 0, 0.7);/' "${ags_style}" + sed -i '/@define-color noti-bg-alt/s/#.*;/#F0F0F0;/' "${ags_style}" + fi +fi + +# kitty background color change +if [ "$next_mode" = "Dark" ]; then + sed -i '/^foreground /s/^foreground .*/foreground #dddddd/' "${kitty_conf}" + sed -i '/^background /s/^background .*/background #000000/' "${kitty_conf}" + sed -i '/^cursor /s/^cursor .*/cursor #dddddd/' "${kitty_conf}" +else + sed -i '/^foreground /s/^foreground .*/foreground #000000/' "${kitty_conf}" + sed -i '/^background /s/^background .*/background #dddddd/' "${kitty_conf}" + sed -i '/^cursor /s/^cursor .*/cursor #000000/' "${kitty_conf}" +fi + +for pid_kitty in $(pidof kitty); do + kill -SIGUSR1 "$pid_kitty" +done + +# Set Dynamic Wallpaper for Dark or Light Mode +if [ "$next_mode" = "Dark" ]; then + next_wallpaper="$(find -L "${dark_wallpapers}" -type f \( -iname "*.jpg" -o -iname "*.png" \) -print0 | shuf -n1 -z | xargs -0)" +else + next_wallpaper="$(find -L "${light_wallpapers}" -type f \( -iname "*.jpg" -o -iname "*.png" \) -print0 | shuf -n1 -z | xargs -0)" +fi + +# Update wallpaper using swww command +$swww "${next_wallpaper}" $effect + + +# Set Kvantum Manager theme & QT5/QT6 settings +if [ "$next_mode" = "Dark" ]; then + kvantum_theme="catppuccin-mocha-blue" + #qt5ct_color_scheme="$HOME/.config/qt5ct/colors/Catppuccin-Mocha.conf" + #qt6ct_color_scheme="$HOME/.config/qt6ct/colors/Catppuccin-Mocha.conf" +else + kvantum_theme="catppuccin-latte-blue" + #qt5ct_color_scheme="$HOME/.config/qt5ct/colors/Catppuccin-Latte.conf" + #qt6ct_color_scheme="$HOME/.config/qt6ct/colors/Catppuccin-Latte.conf" +fi + +sed -i "s|^color_scheme_path=.*$|color_scheme_path=$qt5ct_color_scheme|" "$HOME/.config/qt5ct/qt5ct.conf" +sed -i "s|^color_scheme_path=.*$|color_scheme_path=$qt6ct_color_scheme|" "$HOME/.config/qt6ct/qt6ct.conf" +kvantummanager --set "$kvantum_theme" + + +# set the rofi color for background +if [ "$next_mode" = "Dark" ]; then + sed -i '/^background:/s/.*/background: rgba(0,0,0,0.7);/' $wallust_rofi +else + sed -i '/^background:/s/.*/background: rgba(255,255,255,0.9);/' $wallust_rofi +fi + + +# GTK themes and icons switching +set_custom_gtk_theme() { + mode=$1 + gtk_themes_directory="$HOME/.themes" + icon_directory="$HOME/.icons" + color_setting="org.gnome.desktop.interface color-scheme" + theme_setting="org.gnome.desktop.interface gtk-theme" + icon_setting="org.gnome.desktop.interface icon-theme" + + if [ "$mode" == "Light" ]; then + search_keywords="*Light*" + gsettings set $color_setting 'prefer-light' + elif [ "$mode" == "Dark" ]; then + search_keywords="*Dark*" + gsettings set $color_setting 'prefer-dark' + else + echo "Invalid mode provided." + return 1 + fi + + themes=() + icons=() + + while IFS= read -r -d '' theme_search; do + themes+=("$(basename "$theme_search")") + done < <(find "$gtk_themes_directory" -maxdepth 1 -type d -iname "$search_keywords" -print0) + + while IFS= read -r -d '' icon_search; do + icons+=("$(basename "$icon_search")") + done < <(find "$icon_directory" -maxdepth 1 -type d -iname "$search_keywords" -print0) + + if [ ${#themes[@]} -gt 0 ]; then + if [ "$mode" == "Dark" ]; then + selected_theme=${themes[RANDOM % ${#themes[@]}]} + else + selected_theme=${themes[$RANDOM % ${#themes[@]}]} + fi + echo "Selected GTK theme for $mode mode: $selected_theme" + gsettings set $theme_setting "$selected_theme" + + # Flatpak GTK apps (themes) + if command -v flatpak &> /dev/null; then + flatpak --user override --filesystem=$HOME/.themes + sleep 0.5 + flatpak --user override --env=GTK_THEME="$selected_theme" + fi + else + echo "No $mode GTK theme found" + fi + + if [ ${#icons[@]} -gt 0 ]; then + if [ "$mode" == "Dark" ]; then + selected_icon=${icons[RANDOM % ${#icons[@]}]} + else + selected_icon=${icons[$RANDOM % ${#icons[@]}]} + fi + echo "Selected icon theme for $mode mode: $selected_icon" + gsettings set $icon_setting "$selected_icon" + + ## QT5ct icon_theme + sed -i "s|^icon_theme=.*$|icon_theme=$selected_icon|" "$HOME/.config/qt5ct/qt5ct.conf" + sed -i "s|^icon_theme=.*$|icon_theme=$selected_icon|" "$HOME/.config/qt6ct/qt6ct.conf" + + # Flatpak GTK apps (icons) + if command -v flatpak &> /dev/null; then + flatpak --user override --filesystem=$HOME/.icons + sleep 0.5 + flatpak --user override --env=ICON_THEME="$selected_icon" + fi + else + echo "No $mode icon theme found" + fi +} + +# Call the function to set GTK theme and icon theme based on mode +set_custom_gtk_theme "$next_mode" + +# Update theme mode for the next cycle +update_theme_mode + + +${SCRIPTSDIR}/WallustSwww.sh && + +sleep 2 +# kill process +for pid1 in waybar rofi swaync ags swaybg; do + killall "$pid1" +done + +sleep 1 +${SCRIPTSDIR}/Refresh.sh + +sleep 0.5 +# Display notifications for theme and icon changes +notify-send -u low -i "$notif" " Themes switched to:" " $next_mode Mode" + +exit 0 + diff --git a/hypr/scripts/Distro_update.sh b/hypr/scripts/Distro_update.sh new file mode 100755 index 0000000..b0b1446 --- /dev/null +++ b/hypr/scripts/Distro_update.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Simple bash script to check and will try to update your system + +# Local Paths +iDIR="$HOME/.config/swaync/images" + +# Check for required tools (kitty) +if ! command -v kitty &> /dev/null; then + notify-send -i "$iDIR/error.png" "Need Kitty:" "Kitty terminal not found. Please install Kitty terminal." + exit 1 +fi + +# Detect distribution and update accordingly +if command -v paru &> /dev/null || command -v yay &> /dev/null; then + # Arch-based + if command -v paru &> /dev/null; then + kitty -T update paru -Syu + notify-send -i "$iDIR/ja.png" -u low 'Arch-based system' 'has been updated.' + else + kitty -T update yay -Syu + notify-send -i "$iDIR/ja.png" -u low 'Arch-based system' 'has been updated.' + fi +elif command -v dnf &> /dev/null; then + # Fedora-based + kitty -T update sudo dnf update --refresh -y + notify-send -i "$iDIR/ja.png" -u low 'Fedora system' 'has been updated.' +elif command -v apt &> /dev/null; then + # Debian-based (Debian, Ubuntu, etc.) + kitty -T update sudo apt update && sudo apt upgrade -y + notify-send -i "$iDIR/ja.png" -u low 'Debian/Ubuntu system' 'has been updated.' +elif command -v zypper &> /dev/null; then + # openSUSE-based + kitty -T update sudo zypper dup -y + notify-send -i "$iDIR/ja.png" -u low 'openSUSE system' 'has been updated.' +else + # Unsupported distro + notify-send -i "$iDIR/error.png" -u critical "Unsupported system" "This script does not support your distribution." + exit 1 +fi diff --git a/hypr/scripts/Dropterminal.sh b/hypr/scripts/Dropterminal.sh new file mode 100755 index 0000000..4833545 --- /dev/null +++ b/hypr/scripts/Dropterminal.sh @@ -0,0 +1,380 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# +# Made and brought to by Kiran George +# /* -- โœจ https://github.com/SherLock707 โœจ -- */ ## +# Dropdown Terminal +# Usage: ./Dropdown.sh [-d] +# Example: ./Dropdown.sh foot +# ./Dropdown.sh -d foot (with debug output) +# ./Dropdown.sh "kitty -e zsh" +# ./Dropdown.sh "alacritty --working-directory /home/user" + +DEBUG=false +SPECIAL_WS="special:scratchpad" +ADDR_FILE="/tmp/dropdown_terminal_addr" + +# Dropdown size and position configuration (percentages) +WIDTH_PERCENT=50 # Width as percentage of screen width +HEIGHT_PERCENT=50 # Height as percentage of screen height +Y_PERCENT=5 # Y position as percentage from top (X is auto-centered) + +# Animation settings +ANIMATION_DURATION=100 # milliseconds +SLIDE_STEPS=5 +SLIDE_DELAY=5 # milliseconds between steps + +# Parse arguments +if [ "$1" = "-d" ]; then + DEBUG=true + shift +fi + +TERMINAL_CMD="$1" + +# Debug echo function +debug_echo() { + if [ "$DEBUG" = true ]; then + echo "$@" + fi +} + +# Validate input +if [ -z "$TERMINAL_CMD" ]; then + echo "Missing terminal command. Usage: $0 [-d] " + echo "Examples:" + echo " $0 foot" + echo " $0 -d foot (with debug output)" + echo " $0 'kitty -e zsh'" + echo " $0 'alacritty --working-directory /home/user'" + echo "" + echo "Edit the script to modify size and position:" + echo " WIDTH_PERCENT - Width as percentage of screen (default: 50)" + echo " HEIGHT_PERCENT - Height as percentage of screen (default: 50)" + echo " Y_PERCENT - Y position from top as percentage (default: 5)" + echo " Note: X position is automatically centered" + exit 1 +fi + +# Function to get window geometry +get_window_geometry() { + local addr="$1" + hyprctl clients -j | jq -r --arg ADDR "$addr" '.[] | select(.address == $ADDR) | "\(.at[0]) \(.at[1]) \(.size[0]) \(.size[1])"' +} + +# Function to animate window slide down (show) +animate_slide_down() { + local addr="$1" + local target_x="$2" + local target_y="$3" + local width="$4" + local height="$5" + + debug_echo "Animating slide down for window $addr to position $target_x,$target_y" + + # Start position (above screen) + local start_y=$((target_y - height - 50)) + + # Calculate step size + local step_y=$(((target_y - start_y) / SLIDE_STEPS)) + + # Move window to start position instantly (off-screen) + hyprctl dispatch movewindowpixel "exact $target_x $start_y,address:$addr" >/dev/null 2>&1 + sleep 0.05 + + # Animate slide down + for i in $(seq 1 $SLIDE_STEPS); do + local current_y=$((start_y + (step_y * i))) + hyprctl dispatch movewindowpixel "exact $target_x $current_y,address:$addr" >/dev/null 2>&1 + sleep 0.03 + done + + # Ensure final position is exact + hyprctl dispatch movewindowpixel "exact $target_x $target_y,address:$addr" >/dev/null 2>&1 +} + +# Function to animate window slide up (hide) +animate_slide_up() { + local addr="$1" + local start_x="$2" + local start_y="$3" + local width="$4" + local height="$5" + + debug_echo "Animating slide up for window $addr from position $start_x,$start_y" + + # End position (above screen) + local end_y=$((start_y - height - 50)) + + # Calculate step size + local step_y=$(((start_y - end_y) / SLIDE_STEPS)) + + # Animate slide up + for i in $(seq 1 $SLIDE_STEPS); do + local current_y=$((start_y - (step_y * i))) + hyprctl dispatch movewindowpixel "exact $start_x $current_y,address:$addr" >/dev/null 2>&1 + sleep 0.03 + done + + debug_echo "Slide up animation completed" +} + +# Function to get monitor info including scale and name of focused monitor +get_monitor_info() { + local monitor_data=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x) \(.y) \(.width) \(.height) \(.scale) \(.name)"') + if [ -z "$monitor_data" ] || [[ "$monitor_data" =~ ^null ]]; then + debug_echo "Error: Could not get focused monitor information" + return 1 + fi + echo "$monitor_data" +} + +# Function to calculate dropdown position with proper scaling and centering +calculate_dropdown_position() { + local monitor_info=$(get_monitor_info) + + if [ $? -ne 0 ] || [ -z "$monitor_info" ]; then + debug_echo "Error: Failed to get monitor info, using fallback values" + echo "100 100 800 600 fallback-monitor" + return 1 + fi + + local mon_x=$(echo $monitor_info | cut -d' ' -f1) + local mon_y=$(echo $monitor_info | cut -d' ' -f2) + local mon_width=$(echo $monitor_info | cut -d' ' -f3) + local mon_height=$(echo $monitor_info | cut -d' ' -f4) + local mon_scale=$(echo $monitor_info | cut -d' ' -f5) + local mon_name=$(echo $monitor_info | cut -d' ' -f6) + + debug_echo "Monitor info: x=$mon_x, y=$mon_y, width=$mon_width, height=$mon_height, scale=$mon_scale" + + # Validate scale value and provide fallback + if [ -z "$mon_scale" ] || [ "$mon_scale" = "null" ] || [ "$mon_scale" = "0" ]; then + debug_echo "Invalid scale value, using 1.0 as fallback" + mon_scale="1.0" + fi + + # Calculate logical dimensions by dividing physical dimensions by scale + local logical_width logical_height + if command -v bc >/dev/null 2>&1; then + # Use bc for precise floating point calculation + logical_width=$(echo "scale=0; $mon_width / $mon_scale" | bc | cut -d'.' -f1) + logical_height=$(echo "scale=0; $mon_height / $mon_scale" | bc | cut -d'.' -f1) + else + # Fallback to integer math (multiply by 100 for precision, then divide) + local scale_int=$(echo "$mon_scale" | sed 's/\.//' | sed 's/^0*//') + if [ -z "$scale_int" ]; then scale_int=100; fi + + logical_width=$(((mon_width * 100) / scale_int)) + logical_height=$(((mon_height * 100) / scale_int)) + fi + + # Ensure we have valid integer values + if ! [[ "$logical_width" =~ ^-?[0-9]+$ ]]; then logical_width=$mon_width; fi + if ! [[ "$logical_height" =~ ^-?[0-9]+$ ]]; then logical_height=$mon_height; fi + + debug_echo "Physical resolution: ${mon_width}x${mon_height}" + debug_echo "Logical resolution: ${logical_width}x${logical_height} (physical รท scale)" + + # Calculate window dimensions based on LOGICAL space percentages + local width=$((logical_width * WIDTH_PERCENT / 100)) + local height=$((logical_height * HEIGHT_PERCENT / 100)) + + # Calculate Y position from top based on percentage of LOGICAL height + local y_offset=$((logical_height * Y_PERCENT / 100)) + + # Calculate centered X position in LOGICAL space + local x_offset=$(((logical_width - width) / 2)) + + # Apply monitor offset to get final positions in logical coordinates + local final_x=$((mon_x + x_offset)) + local final_y=$((mon_y + y_offset)) + + debug_echo "Window size: ${width}x${height} (logical pixels)" + debug_echo "Final position: x=$final_x, y=$final_y (logical coordinates)" + debug_echo "Hyprland will scale these to physical coordinates automatically" + + echo "$final_x $final_y $width $height $mon_name" +} + +# Get the current workspace +CURRENT_WS=$(hyprctl activeworkspace -j | jq -r '.id') + +# Function to get stored terminal address +get_terminal_address() { + if [ -f "$ADDR_FILE" ] && [ -s "$ADDR_FILE" ]; then + cut -d' ' -f1 "$ADDR_FILE" + fi +} + +# Function to get stored monitor name +get_terminal_monitor() { + if [ -f "$ADDR_FILE" ] && [ -s "$ADDR_FILE" ]; then + cut -d' ' -f2- "$ADDR_FILE" + fi +} + +# Function to check if terminal exists +terminal_exists() { + local addr=$(get_terminal_address) + if [ -n "$addr" ]; then + hyprctl clients -j | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR)' >/dev/null 2>&1 + else + return 1 + fi +} + +# Function to check if terminal is in special workspace +terminal_in_special() { + local addr=$(get_terminal_address) + if [ -n "$addr" ]; then + hyprctl clients -j | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR and .workspace.name == "special:scratchpad")' >/dev/null 2>&1 + else + return 1 + fi +} + +# Function to spawn terminal and capture its address +spawn_terminal() { + debug_echo "Creating new dropdown terminal with command: $TERMINAL_CMD" + + # Calculate dropdown position for later use + local pos_info=$(calculate_dropdown_position) + if [ $? -ne 0 ]; then + debug_echo "Warning: Using fallback positioning" + fi + + local target_x=$(echo $pos_info | cut -d' ' -f1) + local target_y=$(echo $pos_info | cut -d' ' -f2) + local width=$(echo $pos_info | cut -d' ' -f3) + local height=$(echo $pos_info | cut -d' ' -f4) + local monitor_name=$(echo $pos_info | cut -d' ' -f5) + + debug_echo "Target position: ${target_x},${target_y}, size: ${width}x${height}" + + # Get window count before spawning + local windows_before=$(hyprctl clients -j) + local count_before=$(echo "$windows_before" | jq 'length') + + # Launch terminal directly in special workspace to avoid visible spawn + hyprctl dispatch exec "[float; size $width $height; workspace special:scratchpad silent] $TERMINAL_CMD" + + # Wait for window to appear + sleep 0.1 + + # Get windows after spawning + local windows_after=$(hyprctl clients -j) + local count_after=$(echo "$windows_after" | jq 'length') + + local new_addr="" + + if [ "$count_after" -gt "$count_before" ]; then + # Find the new window by comparing before/after lists + new_addr=$(comm -13 \ + <(echo "$windows_before" | jq -r '.[].address' | sort) \ + <(echo "$windows_after" | jq -r '.[].address' | sort) \ + | head -1) + fi + + # Fallback: try to find by the most recently mapped window + if [ -z "$new_addr" ] || [ "$new_addr" = "null" ]; then + new_addr=$(hyprctl clients -j | jq -r 'sort_by(.focusHistoryID) | .[-1] | .address') + fi + + if [ -n "$new_addr" ] && [ "$new_addr" != "null" ]; then + # Store the address and monitor name + echo "$new_addr $monitor_name" > "$ADDR_FILE" + debug_echo "Terminal created with address: $new_addr in special workspace on monitor $monitor_name" + + # Small delay to ensure it's properly in special workspace + sleep 0.2 + + # Now bring it back with the same animation as subsequent shows + # Use movetoworkspacesilent to avoid affecting workspace history + hyprctl dispatch movetoworkspacesilent "$CURRENT_WS,address:$new_addr" + hyprctl dispatch pin "address:$new_addr" + animate_slide_down "$new_addr" "$target_x" "$target_y" "$width" "$height" + + return 0 + fi + + debug_echo "Failed to get terminal address" + return 1 +} + +# Main logic +if terminal_exists; then + TERMINAL_ADDR=$(get_terminal_address) + debug_echo "Found existing terminal: $TERMINAL_ADDR" + focused_monitor=$(get_monitor_info | awk '{print $6}') + dropdown_monitor=$(get_terminal_monitor) + if [ "$focused_monitor" != "$dropdown_monitor" ]; then + debug_echo "Monitor focus changed: moving dropdown to $focused_monitor" + # Calculate new position for focused monitor + pos_info=$(calculate_dropdown_position) + target_x=$(echo $pos_info | cut -d' ' -f1) + target_y=$(echo $pos_info | cut -d' ' -f2) + width=$(echo $pos_info | cut -d' ' -f3) + height=$(echo $pos_info | cut -d' ' -f4) + monitor_name=$(echo $pos_info | cut -d' ' -f5) + # Move and resize window + hyprctl dispatch movewindowpixel "exact $target_x $target_y,address:$TERMINAL_ADDR" + hyprctl dispatch resizewindowpixel "exact $width $height,address:$TERMINAL_ADDR" + # Update ADDR_FILE + echo "$TERMINAL_ADDR $monitor_name" > "$ADDR_FILE" + fi + + if terminal_in_special; then + debug_echo "Bringing terminal from scratchpad with slide down animation" + + # Calculate target position + pos_info=$(calculate_dropdown_position) + target_x=$(echo $pos_info | cut -d' ' -f1) + target_y=$(echo $pos_info | cut -d' ' -f2) + width=$(echo $pos_info | cut -d' ' -f3) + height=$(echo $pos_info | cut -d' ' -f4) + + # Use movetoworkspacesilent to avoid affecting workspace history + hyprctl dispatch movetoworkspacesilent "$CURRENT_WS,address:$TERMINAL_ADDR" + hyprctl dispatch pin "address:$TERMINAL_ADDR" + + # Set size and animate slide down + hyprctl dispatch resizewindowpixel "exact $width $height,address:$TERMINAL_ADDR" + animate_slide_down "$TERMINAL_ADDR" "$target_x" "$target_y" "$width" "$height" + + hyprctl dispatch focuswindow "address:$TERMINAL_ADDR" + else + debug_echo "Hiding terminal to scratchpad with slide up animation" + + # Get current geometry for animation + geometry=$(get_window_geometry "$TERMINAL_ADDR") + if [ -n "$geometry" ]; then + curr_x=$(echo $geometry | cut -d' ' -f1) + curr_y=$(echo $geometry | cut -d' ' -f2) + curr_width=$(echo $geometry | cut -d' ' -f3) + curr_height=$(echo $geometry | cut -d' ' -f4) + + debug_echo "Current geometry: ${curr_x},${curr_y} ${curr_width}x${curr_height}" + + # Animate slide up first + animate_slide_up "$TERMINAL_ADDR" "$curr_x" "$curr_y" "$curr_width" "$curr_height" + + # Small delay then move to special workspace and unpin + sleep 0.1 + hyprctl dispatch pin "address:$TERMINAL_ADDR" # Unpin (toggle) + hyprctl dispatch movetoworkspacesilent "$SPECIAL_WS,address:$TERMINAL_ADDR" + else + debug_echo "Could not get window geometry, moving to scratchpad without animation" + hyprctl dispatch pin "address:$TERMINAL_ADDR" + hyprctl dispatch movetoworkspacesilent "$SPECIAL_WS,address:$TERMINAL_ADDR" + fi + fi +else + debug_echo "No existing terminal found, creating new one" + if spawn_terminal; then + TERMINAL_ADDR=$(get_terminal_address) + if [ -n "$TERMINAL_ADDR" ]; then + hyprctl dispatch focuswindow "address:$TERMINAL_ADDR" + fi + fi +fi diff --git a/hypr/scripts/GameMode.sh b/hypr/scripts/GameMode.sh new file mode 100755 index 0000000..7a39da3 --- /dev/null +++ b/hypr/scripts/GameMode.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Game Mode. Turning off all animations + +notif="$HOME/.config/swaync/images/ja.png" +SCRIPTSDIR="$HOME/.config/hypr/scripts" + + +HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}') +if [ "$HYPRGAMEMODE" = 1 ] ; then + hyprctl --batch "\ + keyword animations:enabled 0;\ + keyword decoration:shadow:enabled 0;\ + keyword decoration:blur:enabled 0;\ + keyword general:gaps_in 0;\ + keyword general:gaps_out 0;\ + keyword general:border_size 1;\ + keyword decoration:rounding 0" + + hyprctl keyword "windowrule opacity 1 override 1 override 1 override, ^(.*)$" + swww kill + notify-send -e -u low -i "$notif" " Gamemode:" " enabled" + exit +else + swww-daemon --format xrgb && swww img "$HOME/.config/rofi/.current_wallpaper" & + sleep 0.1 + ${SCRIPTSDIR}/WallustSwww.sh + sleep 0.5 + hyprctl reload + ${SCRIPTSDIR}/Refresh.sh + notify-send -e -u normal -i "$notif" " Gamemode:" " disabled" + exit +fi +hyprctl reload diff --git a/hypr/scripts/Hypridle.sh b/hypr/scripts/Hypridle.sh new file mode 100755 index 0000000..5617671 --- /dev/null +++ b/hypr/scripts/Hypridle.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# This is for custom version of waybar idle_inhibitor which activates / deactivates hypridle instead + +PROCESS="hypridle" + +if [[ "$1" == "status" ]]; then + sleep 1 + if pgrep -x "$PROCESS" >/dev/null; then + echo '{"text": "RUNNING", "class": "active", "tooltip": "idle_inhibitor NOT ACTIVE\nLeft Click: Activate\nRight Click: Lock Screen"}' + else + echo '{"text": "NOT RUNNING", "class": "notactive", "tooltip": "idle_inhibitor is ACTIVE\nLeft Click: Deactivate\nRight Click: Lock Screen"}' + fi +elif [[ "$1" == "toggle" ]]; then + if pgrep -x "$PROCESS" >/dev/null; then + pkill "$PROCESS" + else + "$PROCESS" + fi +else + echo "Usage: $0 {status|toggle}" + exit 1 +fi diff --git a/hypr/scripts/Hyprsunset.sh b/hypr/scripts/Hyprsunset.sh new file mode 100755 index 0000000..c7c4b39 --- /dev/null +++ b/hypr/scripts/Hyprsunset.sh @@ -0,0 +1,99 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Hyprsunset toggle + Waybar status helper +# Phase 1: manual toggle only (no scheduling) +# Icons: +# - Off: bright sun +# - On: sunset icon if available, otherwise a blue sun +# +# Customize via env vars: +# HYPERSUNSET_TEMP default 4500 (K) +# HYPERSUNSET_ICON_MODE sunset|blue (default: sunset) + +STATE_FILE="$HOME/.cache/.hyprsunset_state" +TARGET_TEMP="${HYPERSUNSET_TEMP:-4500}" +ICON_MODE="${HYPERSUNSET_ICON_MODE:-sunset}" + +ensure_state() { + [[ -f "$STATE_FILE" ]] || echo "off" > "$STATE_FILE" +} + +# Render icons using pango markup to allow colorization +icon_off() { + # universally available sun symbol + printf "โ˜€" +} + +icon_on() { + case "$ICON_MODE" in + sunset) + # sunset emoji (falls back to tofu if no emoji font) + printf "๐ŸŒ‡" + ;; + blue) + # no color in text; rely on CSS .on to style if desired + printf "โ˜€" + ;; + *) + printf "โ˜€" + ;; + esac +} + +cmd_toggle() { + ensure_state + state="$(cat "$STATE_FILE" || echo off)" + + # Always stop any running hyprsunset first to avoid CTM manager conflicts + if pgrep -x hyprsunset >/dev/null 2>&1; then + pkill -x hyprsunset || true + # give it a moment to release the CTM manager + sleep 0.2 + fi + +if [[ "$state" == "on" ]]; then + # Turning OFF: set identity and exit + if command -v hyprsunset >/dev/null 2>&1; then + nohup hyprsunset -i >/dev/null 2>&1 & + # if hyprsunset persists, stop it shortly after applying identity + sleep 0.3 && pkill -x hyprsunset || true + fi + echo off > "$STATE_FILE" + notify-send -u low "Hyprsunset: Disabled" || true + else + # Turning ON: start hyprsunset at target temp in background + if command -v hyprsunset >/dev/null 2>&1; then + nohup hyprsunset -t "$TARGET_TEMP" >/dev/null 2>&1 & + fi + echo on > "$STATE_FILE" + notify-send -u low "Hyprsunset: Enabled" "${TARGET_TEMP}K" || true + fi +} + +cmd_status() { + ensure_state + # Prefer live process detection; fall back to state file + if pgrep -x hyprsunset >/dev/null 2>&1; then + onoff="on" + else + onoff="$(cat "$STATE_FILE" || echo off)" + fi + + if [[ "$onoff" == "on" ]]; then + txt="$(icon_on)" + cls="on" + tip="Night light on @ ${TARGET_TEMP}K" + else + txt="$(icon_off)" + cls="off" + tip="Night light off" + fi + printf '{"text":"%s","class":"%s","tooltip":"%s"}\n' "$txt" "$cls" "$tip" +} + +case "${1:-}" in + toggle) cmd_toggle ;; + status) cmd_status ;; + *) echo "usage: $0 [toggle|status]" >&2; exit 2 ;; + esac diff --git a/hypr/scripts/KeyBinds.sh b/hypr/scripts/KeyBinds.sh new file mode 100755 index 0000000..9c6b5ab --- /dev/null +++ b/hypr/scripts/KeyBinds.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# searchable enabled keybinds using rofi + +# kill yad to not interfere with this binds +pkill yad || true + +# check if rofi is already running +if pidof rofi > /dev/null; then + pkill rofi +fi + +# define the config files +keybinds_conf="$HOME/.config/hypr/configs/Keybinds.conf" +user_keybinds_conf="$HOME/.config/hypr/UserConfigs/UserKeybinds.conf" +laptop_conf="$HOME/.config/hypr/UserConfigs/Laptops.conf" +rofi_theme="$HOME/.config/rofi/config-keybinds.rasi" +msg='โ˜ฃ๏ธ NOTE โ˜ฃ๏ธ: Clicking with Mouse or Pressing ENTER will have NO function' + +# combine the contents of the keybinds files and filter for keybinds +keybinds=$(cat "$keybinds_conf" "$user_keybinds_conf" | grep -E '^bind') + +# check if laptop.conf exists and add its keybinds if present +if [[ -f "$laptop_conf" ]]; then + laptop_binds=$(grep -E '^bind' "$laptop_conf") + keybinds+=$'\n'"$laptop_binds" +fi + +# check for any keybinds to display +if [[ -z "$keybinds" ]]; then + echo "no keybinds found." + exit 1 +fi + +# replace $mainmod with super in the displayed keybinds for rofi +display_keybinds=$(echo "$keybinds" | sed 's/\$mainMod/SUPER/g') + +# use rofi to display the keybinds with the modified content +echo "$display_keybinds" | rofi -dmenu -i -config "$rofi_theme" -mesg "$msg" \ No newline at end of file diff --git a/hypr/scripts/KeyHints.sh b/hypr/scripts/KeyHints.sh new file mode 100755 index 0000000..7917ae3 --- /dev/null +++ b/hypr/scripts/KeyHints.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## + +# GDK BACKEND. Change to either wayland or x11 if having issues +BACKEND=wayland + +# Check if rofi or yad is running and kill them if they are +if pidof rofi > /dev/null; then + pkill rofi +fi + +if pidof yad > /dev/null; then + pkill yad +fi + +# Launch yad with calculated width and height +GDK_BACKEND=$BACKEND yad \ + --center \ + --title="KooL Quick Cheat Sheet" \ + --no-buttons \ + --list \ + --column=Key: \ + --column=Description: \ + --column=Command: \ + --timeout-indicator=bottom \ +"ESC" "close this app" "๏—" "๎ฏ† = ๏…บ" "SUPER KEY (Windows Key Button)" "(SUPER KEY)" \ +"๎ฏ† SHIFT K" "Searchable Keybinds" "(Search all Keybinds via rofi)" \ +"๎ฏ† SHIFT E" "KooL Hyprland Settings Menu" "" \ +"" "" "" \ +"๎ฏ† enter" "Terminal" "(kitty)" \ +"๎ฏ† SHIFT enter" "DropDown Terminal" "๎ฏ† Q to close" \ +"๎ฏ† B" "Launch Browser" "(Default browser)" \ +"๎ฏ† A" "Desktop Overview" "(AGS - if opted to install)" \ +"๎ฏ† D" "Application Launcher" "(rofi-wayland)" \ +"๎ฏ† E" "Open File Manager" "(Thunar)" \ +"๎ฏ† S" "Google Search using rofi" "(rofi)" \ +"๎ฏ† Q" "close active window" "(not kill)" \ +"๎ฏ† Shift Q " "kills an active window" "(kill)" \ +"๎ฏ† ALT mouse scroll up/down " "Desktop Zoom" "Desktop Magnifier" \ +"๎ฏ† Alt V" "Clipboard Manager" "(cliphist)" \ +"๎ฏ† W" "Choose wallpaper" "(Wallpaper Menu)" \ +"๎ฏ† Shift W" "Choose wallpaper effects" "(imagemagick + swww)" \ +"CTRL ALT W" "Random wallpaper" "(via swww)" \ +"๎ฏ† CTRL ALT B" "Hide/UnHide Waybar" "waybar" \ +"๎ฏ† CTRL B" "Choose waybar styles" "(waybar styles)" \ +"๎ฏ† ALT B" "Choose waybar layout" "(waybar layout)" \ +"๎ฏ† ALT R" "Reload Waybar swaync Rofi" "CHECK NOTIFICATION FIRST!!!" \ +"๎ฏ† SHIFT N" "Launch Notification Panel" "swaync Notification Center" \ +"๎ฏ† Print" "screenshot" "(grim)" \ +"๎ฏ† Shift Print" "screenshot region" "(grim + slurp)" \ +"๎ฏ† Shift S" "screenshot region" "(swappy)" \ +"๎ฏ† CTRL Print" "screenshot timer 5 secs " "(grim)" \ +"๎ฏ† CTRL SHIFT Print" "screenshot timer 10 secs " "(grim)" \ +"ALT Print" "Screenshot active window" "active window only" \ +"CTRL ALT P" "power-menu" "(wlogout)" \ +"CTRL ALT L" "screen lock" "(hyprlock)" \ +"CTRL ALT Del" "Hyprland Exit" "(NOTE: Hyprland Will exit immediately)" \ +"๎ฏ† SHIFT F" "Fullscreen" "Toggles to full screen" \ +"๎ฏ† CTL F" "Fake Fullscreen" "Toggles to fake full screen" \ +"๎ฏ† ALT L" "Toggle Dwindle | Master Layout" "Hyprland Layout" \ +"๎ฏ† SPACEBAR" "Toggle float" "single window" \ +"๎ฏ† ALT SPACEBAR" "Toggle all windows to float" "all windows" \ +"๎ฏ† ALT O" "Toggle Blur" "normal or less blur" \ +"๎ฏ† CTRL O" "Toggle Opaque ON or OFF" "on active window only" \ +"๎ฏ† Shift A" "Animations Menu" "Choose Animations via rofi" \ +"๎ฏ† CTRL R" "Rofi Themes Menu" "Choose Rofi Themes via rofi" \ +"๎ฏ† CTRL Shift R" "Rofi Themes Menu v2" "Choose Rofi Themes via Theme Selector (modified)" \ +"๎ฏ† SHIFT G" "Gamemode! All animations OFF or ON" "toggle" \ +"๎ฏ† ALT E" "Rofi Emoticons" "Emoticon" \ +"๎ฏ† H" "Launch this Quick Cheat Sheet" "" \ +"" "" "" \ +"More tips:" "https://github.com/JaKooLit/Hyprland-Dots/wiki" ""\ \ No newline at end of file diff --git a/hypr/scripts/KillActiveProcess.sh b/hypr/scripts/KillActiveProcess.sh new file mode 100755 index 0000000..bee146d --- /dev/null +++ b/hypr/scripts/KillActiveProcess.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## + +# Copied from Discord post. Thanks to @Zorg + + +# Get id of an active window +active_pid=$(hyprctl activewindow | grep -o 'pid: [0-9]*' | cut -d' ' -f2) + +# Close active window +kill $active_pid \ No newline at end of file diff --git a/hypr/scripts/Kitty_themes.sh b/hypr/scripts/Kitty_themes.sh new file mode 100755 index 0000000..48bfa99 --- /dev/null +++ b/hypr/scripts/Kitty_themes.sh @@ -0,0 +1,136 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ย  # +# Kitty Themes Source https://github.com/dexpota/kitty-themes # + +# Define directories and variables +kitty_themes_DiR="$HOME/.config/kitty/kitty-themes" # Kitty Themes Directory +kitty_config="$HOME/.config/kitty/kitty.conf" +iDIR="$HOME/.config/swaync/images" # For notifications +rofi_theme_for_this_script="$HOME/.config/rofi/config-kitty-theme.rasi" + +# --- Helper Functions --- +notify_user() { + notify-send -u low -i "$1" "$2" "$3" +} + +# Function to apply the selected kitty theme +apply_kitty_theme_to_config() { + local theme_name_to_apply="$1" + if [ -z "$theme_name_to_apply" ]; then + echo "Error: No theme name provided to apply_kitty_theme_to_config." >&2 + return 1 + fi + + local theme_file_path_to_apply="$kitty_themes_DiR/$theme_name_to_apply.conf" + if [ ! -f "$theme_file_path_to_apply" ]; then + notify_user "$iDIR/error.png" "Error" "Theme file not found: $theme_name_to_apply.conf" + return 1 + fi + + local temp_kitty_config_file + temp_kitty_config_file=$(mktemp) + cp "$kitty_config" "$temp_kitty_config_file" + + if grep -q -E '^[#[:space:]]*include\s+\./kitty-themes/.*\.conf' "$temp_kitty_config_file"; then + sed -i -E "s|^([#[:space:]]*include\s+\./kitty-themes/).*\.conf|include ./kitty-themes/$theme_name_to_apply.conf|g" "$temp_kitty_config_file" + else + if [ -s "$temp_kitty_config_file" ] && [ "$(tail -c1 "$temp_kitty_config_file")" != "" ]; then + echo >>"$temp_kitty_config_file" + fi + echo "include ./kitty-themes/$theme_name_to_apply.conf" >>"$temp_kitty_config_file" + fi + + cp "$temp_kitty_config_file" "$kitty_config" + rm "$temp_kitty_config_file" + + for pid_kitty in $(pidof kitty); do + if [ -n "$pid_kitty" ]; then + kill -SIGUSR1 "$pid_kitty" + fi + done + return 0 +} + +# --- Main Script Execution --- + +if [ ! -d "$kitty_themes_DiR" ]; then + notify_user "$iDIR/error.png" "E-R-R-O-R" "Kitty Themes directory not found: $kitty_themes_DiR" + exit 1 +fi + +if [ ! -f "$rofi_theme_for_this_script" ]; then + notify_user "$iDIR/error.png" "Rofi Config Missing" "Rofi theme for Kitty selector not found at: $rofi_theme_for_this_script." + exit 1 +fi + +original_kitty_config_content_backup=$(cat "$kitty_config") + +mapfile -t available_theme_names < <(find "$kitty_themes_DiR" -maxdepth 1 -name "*.conf" -type f -printf "%f\n" | sed 's/\.conf$//' | sort) + +if [ ${#available_theme_names[@]} -eq 0 ]; then + notify_user "$iDIR/error.png" "No Kitty Themes" "No .conf files found in $kitty_themes_DiR." + exit 1 +fi + +current_selection_index=0 +current_active_theme_name=$(awk -F'include ./kitty-themes/|\\.conf' '/^[[:space:]]*include \.\/kitty-themes\/.*\.conf/{print $2; exit}' "$kitty_config") + +if [ -n "$current_active_theme_name" ]; then + for i in "${!available_theme_names[@]}"; do + if [[ "${available_theme_names[$i]}" == "$current_active_theme_name" ]]; then + current_selection_index=$i + break + fi + done +fi + +while true; do + theme_to_preview_now="${available_theme_names[$current_selection_index]}" + + if ! apply_kitty_theme_to_config "$theme_to_preview_now"; then + echo "$original_kitty_config_content_backup" >"$kitty_config" + for pid_kitty in $(pidof kitty); do if [ -n "$pid_kitty" ]; then kill -SIGUSR1 "$pid_kitty"; fi; done + notify_user "$iDIR/error.png" "Preview Error" "Failed to apply $theme_to_preview_now. Reverted." + exit 1 + fi + + rofi_input_list="" + for theme_name_in_list in "${available_theme_names[@]}"; do + rofi_input_list+="$theme_name_in_list\n" + done + rofi_input_list_trimmed="${rofi_input_list%\\n}" + + chosen_index_from_rofi=$(echo -e "$rofi_input_list_trimmed" | + rofi -dmenu -i \ + -format 'i' \ + -p "Kitty Theme" \ + -mesg "Preview: ${theme_to_preview_now} | Enter: Preview | Ctrl+S: Apply & Exit | Esc: Cancel" \ + -config "$rofi_theme_for_this_script" \ + -selected-row "$current_selection_index" \ + -kb-custom-1 "Control+s") # MODIFIED HERE: Changed to Control+s for custom action 1 + + rofi_exit_code=$? + + if [ $rofi_exit_code -eq 0 ]; then + if [[ "$chosen_index_from_rofi" =~ ^[0-9]+$ ]] && [ "$chosen_index_from_rofi" -lt "${#available_theme_names[@]}" ]; then + current_selection_index="$chosen_index_from_rofi" + else + : + fi + elif [ $rofi_exit_code -eq 1 ]; then + notify_user "$iDIR/note.png" "Kitty Theme" "Selection cancelled. Reverting to original theme." + echo "$original_kitty_config_content_backup" >"$kitty_config" + for pid_kitty in $(pidof kitty); do if [ -n "$pid_kitty" ]; then kill -SIGUSR1 "$pid_kitty"; fi; done + break + elif [ $rofi_exit_code -eq 10 ]; then # This is the exit code for -kb-custom-1 + notify_user "$iDIR/ja.png" "Kitty Theme Applied" "$theme_to_preview_now" + break + else + notify_user "$iDIR/error.png" "Rofi Error" "Unexpected Rofi exit ($rofi_exit_code). Reverting." + echo "$original_kitty_config_content_backup" >"$kitty_config" + for pid_kitty in $(pidof kitty); do if [ -n "$pid_kitty" ]; then kill -SIGUSR1 "$pid_kitty"; fi; done + break + fi +done + +exit 0 diff --git a/hypr/scripts/KooLsDotsUpdate.sh b/hypr/scripts/KooLsDotsUpdate.sh new file mode 100755 index 0000000..f4b8814 --- /dev/null +++ b/hypr/scripts/KooLsDotsUpdate.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# simple bash script to check if update is available by comparing local version and github version + +# Local Paths +local_dir="$HOME/.config/hypr" +iDIR="$HOME/.config/swaync/images/" +local_version=$(ls $local_dir/v* 2>/dev/null | sort -V | tail -n 1 | sed 's/.*v\(.*\)/\1/') +KooL_Dots_DIR="$HOME/Hyprland-Dots" + +# exit if cannot find local version +if [ -z "$local_version" ]; then + notify-send -i "$iDIR/error.png" "ERROR "!?!?!!"" "Unable to find KooL's dots version . exiting.... " + exit 1 +fi + +# GitHub URL - KooL's dots +branch="main" +github_url="https://github.com/JaKooLit/Hyprland-Dots/tree/$branch/config/hypr/" + +# Fetch the version from GitHub URL - KooL's dots +github_version=$(curl -s $github_url | grep -o 'v[0-9]\+\.[0-9]\+\.[0-9]\+' | sort -V | tail -n 1 | sed 's/v//') + +# Cant find GitHub URL - KooL's dots version +if [ -z "$github_version" ]; then + exit 1 +fi + +# Comparing local and github versions +if [ "$(echo -e "$github_version\n$local_version" | sort -V | head -n 1)" = "$github_version" ]; then + notify-send -i "$iDIR/note.png" "KooL Hyprland:" "No update available" + exit 0 +else + # update available + notify_cmd_base="notify-send -t 10000 -A action1=Update -A action2=NO -h string:x-canonical-private-synchronous:shot-notify" + notify_cmd_shot="${notify_cmd_base} -i $iDIR/ja.png" + + response=$($notify_cmd_shot "KooL Hyprland:" "Update available! Update now?") + + case "$response" in + "action1") + if [ -d $KooL_Dots_DIR ]; then + if ! command -v kitty &> /dev/null; then + notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Kitty terminal not found. Please install Kitty terminal." + exit 1 + fi + kitty -e bash -c " + cd $KooL_Dots_DIR && + git stash && + git pull && + ./copy.sh && + notify-send -u critical -i "$iDIR/ja.png" 'Update Completed:' 'Kindly log out and relogin to take effect' + " + + else + if ! command -v kitty &> /dev/null; then + notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Kitty terminal not found. Please install Kitty terminal." + exit 1 + fi + kitty -e bash -c " + git clone --depth=1 https://github.com/JaKooLit/Hyprland-Dots.git $KooL_Dots_DIR && + cd $KooL_Dots_DIR && + chmod +x copy.sh && + ./copy.sh && + notify-send -u critical -i "$iDIR/ja.png" 'Update Completed:' 'Kindly log out and relogin to take effect' + " + fi + ;; + "action2") + exit 0 + ;; + esac +fi diff --git a/hypr/scripts/Kool_Quick_Settings.sh b/hypr/scripts/Kool_Quick_Settings.sh new file mode 100755 index 0000000..e43749b --- /dev/null +++ b/hypr/scripts/Kool_Quick_Settings.sh @@ -0,0 +1,117 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Rofi menu for KooL Hyprland Quick Settings (SUPER SHIFT E) + +# Modify this config file for default terminal and EDITOR +config_file="$HOME/.config/hypr/UserConfigs/01-UserDefaults.conf" + +tmp_config_file=$(mktemp) +sed 's/^\$//g; s/ = /=/g' "$config_file" > "$tmp_config_file" +source "$tmp_config_file" +# ##################################### # + +# variables +configs="$HOME/.config/hypr/configs" +UserConfigs="$HOME/.config/hypr/UserConfigs" +rofi_theme="$HOME/.config/rofi/config-edit.rasi" +msg=' โ‰๏ธ Choose what to do โ‰๏ธ' +iDIR="$HOME/.config/swaync/images" +scriptsDir="$HOME/.config/hypr/scripts" +UserScripts="$HOME/.config/hypr/UserScripts" + +# Function to display the menu options without numbers +menu() { + cat </dev/null; then + notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Install nwg-displays first" + exit 1 + fi + nwg-displays ;; + "Configure Workspace Rules (nwg-displays)") + if ! command -v nwg-displays &>/dev/null; then + notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Install nwg-displays first" + exit 1 + fi + nwg-displays ;; + "GTK Settings (nwg-look)") + if ! command -v nwg-look &>/dev/null; then + notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Install nwg-look first" + exit 1 + fi + nwg-look ;; + "QT Apps Settings (qt6ct)") + if ! command -v qt6ct &>/dev/null; then + notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Install qt6ct first" + exit 1 + fi + qt6ct ;; + "QT Apps Settings (qt5ct)") + if ! command -v qt5ct &>/dev/null; then + notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Install qt5ct first" + exit 1 + fi + qt5ct ;; + "Choose Hyprland Animations") $scriptsDir/Animations.sh ;; + "Choose Monitor Profiles") $scriptsDir/MonitorProfiles.sh ;; + "Choose Rofi Themes") $scriptsDir/RofiThemeSelector.sh ;; + "Search for Keybinds") $scriptsDir/KeyBinds.sh ;; + "Toggle Game Mode") $scriptsDir/GameMode.sh ;; + "Switch Dark-Light Theme") $scriptsDir/DarkLight.sh ;; + *) return ;; # Do nothing for invalid choices + esac + + # Open the selected file in the terminal with the text editor + if [ -n "$file" ]; then + $term -e $edit "$file" + fi +} + +# Check if rofi is already running +if pidof rofi > /dev/null; then + pkill rofi +fi + +main \ No newline at end of file diff --git a/hypr/scripts/LockScreen.sh b/hypr/scripts/LockScreen.sh new file mode 100755 index 0000000..5e79918 --- /dev/null +++ b/hypr/scripts/LockScreen.sh @@ -0,0 +1,7 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## + +# For Hyprlock +#pidof hyprlock || hyprlock -q + +loginctl lock-session \ No newline at end of file diff --git a/hypr/scripts/MediaCtrl.sh b/hypr/scripts/MediaCtrl.sh new file mode 100755 index 0000000..000c3ad --- /dev/null +++ b/hypr/scripts/MediaCtrl.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Playerctl + +music_icon="$HOME/.config/swaync/icons/music.png" + +# Play the next track +play_next() { + playerctl next + show_music_notification +} + +# Play the previous track +play_previous() { + playerctl previous + show_music_notification +} + +# Toggle play/pause +toggle_play_pause() { + playerctl play-pause + sleep 0.1 + show_music_notification +} + +# Stop playback +stop_playback() { + playerctl stop + notify-send -e -u low -i $music_icon " Playback:" " Stopped" +} + +# Display notification with song information +show_music_notification() { + status=$(playerctl status) + if [[ "$status" == "Playing" ]]; then + song_title=$(playerctl metadata title) + song_artist=$(playerctl metadata artist) + notify-send -e -u low -i $music_icon "Now Playing:" "$song_title by $song_artist" + elif [[ "$status" == "Paused" ]]; then + notify-send -e -u low -i $music_icon " Playback:" " Paused" + fi +} + +# Get media control action from command line argument +case "$1" in +"--nxt") + play_next + ;; +"--prv") + play_previous + ;; +"--pause") + toggle_play_pause + ;; +"--stop") + stop_playback + ;; +*) + echo "Usage: $0 [--nxt|--prv|--pause|--stop]" + exit 1 + ;; +esac diff --git a/hypr/scripts/MonitorProfiles.sh b/hypr/scripts/MonitorProfiles.sh new file mode 100755 index 0000000..67316c0 --- /dev/null +++ b/hypr/scripts/MonitorProfiles.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# For applying Pre-configured Monitor Profiles + +# Check if rofi is already running +if pidof rofi > /dev/null; then + pkill rofi +fi + +# Variables +iDIR="$HOME/.config/swaync/images" +SCRIPTSDIR="$HOME/.config/hypr/scripts" +monitor_dir="$HOME/.config/hypr/Monitor_Profiles" +target="$HOME/.config/hypr/monitors.conf" +rofi_theme="$HOME/.config/rofi/config-Monitors.rasi" +msg='โ—NOTE:โ— This will overwrite $HOME/.config/hypr/monitors.conf' + +# Define the list of files to ignore +ignore_files=( + "README" +) + +# list of Monitor Profiles, sorted alphabetically with numbers first +mon_profiles_list=$(find -L "$monitor_dir" -maxdepth 1 -type f | sed 's/.*\///' | sed 's/\.conf$//' | sort -V) + +# Remove ignored files from the list +for ignored_file in "${ignore_files[@]}"; do + mon_profiles_list=$(echo "$mon_profiles_list" | grep -v -E "^$ignored_file$") +done + +# Rofi Menu +chosen_file=$(echo "$mon_profiles_list" | rofi -i -dmenu -config $rofi_theme -mesg "$msg") + +if [[ -n "$chosen_file" ]]; then + full_path="$monitor_dir/$chosen_file.conf" + cp "$full_path" "$target" + + notify-send -u low -i "$iDIR/ja.png" "$chosen_file" "Monitor Profile Loaded" +fi + +sleep 1 +${SCRIPTSDIR}/RefreshNoWaybar.sh & \ No newline at end of file diff --git a/hypr/scripts/Polkit-NixOS.sh b/hypr/scripts/Polkit-NixOS.sh new file mode 100755 index 0000000..51675ef --- /dev/null +++ b/hypr/scripts/Polkit-NixOS.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# For NixOS starting of polkit-gnome. Dec 2023, the settings stated in NixOS wiki does not work so have to manual start it + +# Find all polkit-gnome executables in the Nix store +polkit_gnome_paths=$(find /nix/store -name 'polkit-gnome-authentication-agent-1' -type f 2>/dev/null) + +for polkit_gnome_path in $polkit_gnome_paths; do + # Extract the directory containing the executable + polkit_gnome_dir=$(dirname "$polkit_gnome_path") + + # Check if the executable is valid and exists + if [ -x "$polkit_gnome_dir/polkit-gnome-authentication-agent-1" ]; then + # Start the Polkit-GNOME Authentication Agent + "$polkit_gnome_dir/polkit-gnome-authentication-agent-1" & + exit 0 + fi +done + +# If no valid executable is found, report an error +echo "No valid Polkit-GNOME Authentication Agent executable found." \ No newline at end of file diff --git a/hypr/scripts/Polkit.sh b/hypr/scripts/Polkit.sh new file mode 100755 index 0000000..dcea765 --- /dev/null +++ b/hypr/scripts/Polkit.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# This script starts the first available Polkit agent from a list of possible locations + +# List of potential Polkit agent file paths +polkit=( + "/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1" + "/usr/libexec/hyprpolkitagent" + "/usr/lib/hyprpolkitagent" + "/usr/lib/hyprpolkitagent/hyprpolkitagent" + "/usr/lib/polkit-kde-authentication-agent-1" + "/usr/lib/polkit-gnome-authentication-agent-1" + "/usr/libexec/polkit-gnome-authentication-agent-1" + "/usr/libexec/polkit-mate-authentication-agent-1" + "/usr/lib/x86_64-linux-gnu/libexec/polkit-kde-authentication-agent-1" + "/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1" +) + +executed=false + +# Loop through the list of paths +for file in "${polkit[@]}"; do + if [ -e "$file" ] && [ ! -d "$file" ]; then + echo "Found: $file โ€” executing..." + exec "$file" + executed=true + break + fi +done + +# Fallback message if nothing executed +if [ "$executed" == false ]; then + echo "No valid Polkit agent found. Please install one." +fi diff --git a/hypr/scripts/PortalHyprland.sh b/hypr/scripts/PortalHyprland.sh new file mode 100755 index 0000000..9bdf4b8 --- /dev/null +++ b/hypr/scripts/PortalHyprland.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# For manually starting xdg-desktop-portal-hyprland + +sleep 1 +killall xdg-desktop-portal-hyprland +killall xdg-desktop-portal-wlr +killall xdg-desktop-portal-gnome +killall xdg-desktop-portal +sleep 1 +/usr/lib/xdg-desktop-portal-hyprland & +/usr/libexec/xdg-desktop-portal-hyprland & +sleep 2 +/usr/lib/xdg-desktop-portal & +/usr/libexec/xdg-desktop-portal & + diff --git a/hypr/scripts/Refresh.sh b/hypr/scripts/Refresh.sh new file mode 100755 index 0000000..5b4fe6f --- /dev/null +++ b/hypr/scripts/Refresh.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Scripts for refreshing ags, waybar, rofi, swaync, wallust + +SCRIPTSDIR=$HOME/.config/hypr/scripts +UserScripts=$HOME/.config/hypr/UserScripts + +# Define file_exists function +file_exists() { + if [ -e "$1" ]; then + return 0 # File exists + else + return 1 # File does not exist + fi +} + +# Kill already running processes +_ps=(waybar rofi swaync ags) +for _prs in "${_ps[@]}"; do + if pidof "${_prs}" >/dev/null; then + pkill "${_prs}" + fi +done + +# added since wallust sometimes not applying +killall -SIGUSR2 waybar + +# quit ags & relaunch ags +#ags -q && ags & + +# quit quickshell & relaunch quickshell +pkill qs && qs & + +# some process to kill +for pid in $(pidof waybar rofi swaync ags swaybg); do + kill -SIGUSR1 "$pid" +done + +#Restart waybar +sleep 1 +waybar & + +# relaunch swaync +sleep 0.5 +swaync > /dev/null 2>&1 & +# reload swaync +swaync-client --reload-config + +# Relaunching rainbow borders if the script exists +sleep 1 +if file_exists "${UserScripts}/RainbowBorders.sh"; then + ${UserScripts}/RainbowBorders.sh & +fi + +exit 0 \ No newline at end of file diff --git a/hypr/scripts/RefreshNoWaybar.sh b/hypr/scripts/RefreshNoWaybar.sh new file mode 100755 index 0000000..16a91e5 --- /dev/null +++ b/hypr/scripts/RefreshNoWaybar.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## + +# Modified version of Refresh.sh but waybar wont refresh +# Used by automatic wallpaper change +# Modified inorder to refresh rofi background, Wallust, SwayNC only + +SCRIPTSDIR=$HOME/.config/hypr/scripts +UserScripts=$HOME/.config/hypr/UserScripts + +# Define file_exists function +file_exists() { + if [ -e "$1" ]; then + return 0 # File exists + else + return 1 # File does not exist + fi +} + +# Kill already running processes +_ps=(rofi) +for _prs in "${_ps[@]}"; do + if pidof "${_prs}" >/dev/null; then + pkill "${_prs}" + fi +done + +# quit ags & relaunch ags +#ags -q && ags & + +# quit quickshell & relaunch quickshell +pkill qs && qs & + +# Wallust refresh (synchronous to ensure colors are ready) +${SCRIPTSDIR}/WallustSwww.sh +sleep 0.2 + +# reload swaync +swaync-client --reload-config + +# Relaunching rainbow borders if the script exists +sleep 1 +if file_exists "${UserScripts}/RainbowBorders.sh"; then + ${UserScripts}/RainbowBorders.sh & +fi + + +exit 0 \ No newline at end of file diff --git a/hypr/scripts/RofiEmoji.sh b/hypr/scripts/RofiEmoji.sh new file mode 100755 index 0000000..4570831 --- /dev/null +++ b/hypr/scripts/RofiEmoji.sh @@ -0,0 +1,1871 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## + +# Variables +rofi_theme="$HOME/.config/rofi/config-emoji.rasi" +msg='** note ** ๐Ÿ‘€ Click or Return to choose || Ctrl V to Paste' + +# Check if rofi is already running +if pidof rofi > /dev/null; then + pkill rofi +fi + +sed '1,/^# # DATA # #$/d' "$0" | \ +rofi -i -dmenu -mesg "$msg" -config $rofi_theme | \ +awk '{print $1}' | \ +head -n 1 | \ +tr -d '\n' | \ +wl-copy + +exit + +# # DATA # # +๐Ÿ˜€ grinning face face smile happy joy :D grin +๐Ÿ˜ƒ grinning face with big eyes face happy joy haha :D :) smile funny +๐Ÿ˜„ grinning face with smiling eyes face happy joy funny haha laugh like :D :) smile +๐Ÿ˜ beaming face with smiling eyes face happy smile joy kawaii +๐Ÿ˜† grinning squinting face happy joy lol satisfied haha face glad XD laugh +๐Ÿ˜… grinning face with sweat face hot happy laugh sweat smile relief +๐Ÿคฃ rolling on the floor laughing face rolling floor laughing lol haha rofl +๐Ÿ˜‚ face with tears of joy face cry tears weep happy happytears haha +๐Ÿ™‚ slightly smiling face face smile +๐Ÿ™ƒ upside down face face flipped silly smile +๐Ÿ˜‰ winking face face happy mischievous secret ;) smile eye +๐Ÿ˜Š smiling face with smiling eyes face smile happy flushed crush embarrassed shy joy +๐Ÿ˜‡ smiling face with halo face angel heaven halo +๐Ÿฅฐ smiling face with hearts face love like affection valentines infatuation crush hearts adore +๐Ÿ˜ smiling face with heart eyes face love like affection valentines infatuation crush heart +๐Ÿคฉ star struck face smile starry eyes grinning +๐Ÿ˜˜ face blowing a kiss face love like affection valentines infatuation kiss +๐Ÿ˜— kissing face love like face 3 valentines infatuation kiss +โ˜บ๏ธ smiling face face blush massage happiness +๐Ÿ˜š kissing face with closed eyes face love like affection valentines infatuation kiss +๐Ÿ˜™ kissing face with smiling eyes face affection valentines infatuation kiss +๐Ÿ˜‹ face savoring food happy joy tongue smile face silly yummy nom delicious savouring +๐Ÿ˜› face with tongue face prank childish playful mischievous smile tongue +๐Ÿ˜œ winking face with tongue face prank childish playful mischievous smile wink tongue +๐Ÿคช zany face face goofy crazy +๐Ÿ˜ squinting face with tongue face prank playful mischievous smile tongue +๐Ÿค‘ money mouth face face rich dollar money +๐Ÿค— hugging face face smile hug +๐Ÿคญ face with hand over mouth face whoops shock surprise +๐Ÿคซ shushing face face quiet shhh +๐Ÿค” thinking face face hmmm think consider +๐Ÿค zipper mouth face face sealed zipper secret +๐Ÿคจ face with raised eyebrow face distrust scepticism disapproval disbelief surprise +๐Ÿ˜ neutral face indifference meh :| neutral +๐Ÿ˜‘ expressionless face face indifferent - - meh deadpan +๐Ÿ˜ถ face without mouth face hellokitty +๐Ÿ˜ smirking face face smile mean prank smug sarcasm +๐Ÿ˜’ unamused face indifference bored straight face serious sarcasm unimpressed skeptical dubious side eye +๐Ÿ™„ face with rolling eyes face eyeroll frustrated +๐Ÿ˜ฌ grimacing face face grimace teeth +๐Ÿคฅ lying face face lie pinocchio +๐Ÿ˜Œ relieved face face relaxed phew massage happiness +๐Ÿ˜” pensive face face sad depressed upset +๐Ÿ˜ช sleepy face face tired rest nap +๐Ÿคค drooling face face +๐Ÿ˜ด sleeping face face tired sleepy night zzz +๐Ÿ˜ท face with medical mask face sick ill disease +๐Ÿค’ face with thermometer sick temperature thermometer cold fever +๐Ÿค• face with head bandage injured clumsy bandage hurt +๐Ÿคข nauseated face face vomit gross green sick throw up ill +๐Ÿคฎ face vomiting face sick +๐Ÿคง sneezing face face gesundheit sneeze sick allergy +๐Ÿฅต hot face face feverish heat red sweating +๐Ÿฅถ cold face face blue freezing frozen frostbite icicles +๐Ÿฅด woozy face face dizzy intoxicated tipsy wavy +๐Ÿ˜ต dizzy face spent unconscious xox dizzy +๐Ÿคฏ exploding head face shocked mind blown +๐Ÿค  cowboy hat face face cowgirl hat +๐Ÿฅณ partying face face celebration woohoo +๐Ÿ˜Ž smiling face with sunglasses face cool smile summer beach sunglass +๐Ÿค“ nerd face face nerdy geek dork +๐Ÿง face with monocle face stuffy wealthy +๐Ÿ˜• confused face face indifference huh weird hmmm :/ +๐Ÿ˜Ÿ worried face face concern nervous :( +๐Ÿ™ slightly frowning face face frowning disappointed sad upset +โ˜น๏ธ frowning face face sad upset frown +๐Ÿ˜ฎ face with open mouth face surprise impressed wow whoa :O +๐Ÿ˜ฏ hushed face face woo shh +๐Ÿ˜ฒ astonished face face xox surprised poisoned +๐Ÿ˜ณ flushed face face blush shy flattered +๐Ÿฅบ pleading face face begging mercy +๐Ÿ˜ฆ frowning face with open mouth face aw what +๐Ÿ˜ง anguished face face stunned nervous +๐Ÿ˜จ fearful face face scared terrified nervous oops huh +๐Ÿ˜ฐ anxious face with sweat face nervous sweat +๐Ÿ˜ฅ sad but relieved face face phew sweat nervous +๐Ÿ˜ข crying face face tears sad depressed upset :'( +๐Ÿ˜ญ loudly crying face face cry tears sad upset depressed +๐Ÿ˜ฑ face screaming in fear face munch scared omg +๐Ÿ˜– confounded face face confused sick unwell oops :S +๐Ÿ˜ฃ persevering face face sick no upset oops +๐Ÿ˜ž disappointed face face sad upset depressed :( +๐Ÿ˜“ downcast face with sweat face hot sad tired exercise +๐Ÿ˜ฉ weary face face tired sleepy sad frustrated upset +๐Ÿ˜ซ tired face sick whine upset frustrated +๐Ÿฅฑ yawning face tired sleepy +๐Ÿ˜ค face with steam from nose face gas phew proud pride +๐Ÿ˜ก pouting face angry mad hate despise +๐Ÿ˜  angry face mad face annoyed frustrated +๐Ÿคฌ face with symbols on mouth face swearing cursing cussing profanity expletive +๐Ÿ˜ˆ smiling face with horns devil horns +๐Ÿ‘ฟ angry face with horns devil angry horns +๐Ÿ’€ skull dead skeleton creepy death +โ˜ ๏ธ skull and crossbones poison danger deadly scary death pirate evil +๐Ÿ’ฉ pile of poo hankey shitface fail turd shit +๐Ÿคก clown face face +๐Ÿ‘น ogre monster red mask halloween scary creepy devil demon japanese ogre +๐Ÿ‘บ goblin red evil mask monster scary creepy japanese goblin +๐Ÿ‘ป ghost halloween spooky scary +๐Ÿ‘ฝ alien UFO paul weird outer space +๐Ÿ‘พ alien monster game arcade play +๐Ÿค– robot computer machine bot +๐Ÿ˜บ grinning cat animal cats happy smile +๐Ÿ˜ธ grinning cat with smiling eyes animal cats smile +๐Ÿ˜น cat with tears of joy animal cats haha happy tears +๐Ÿ˜ป smiling cat with heart eyes animal love like affection cats valentines heart +๐Ÿ˜ผ cat with wry smile animal cats smirk +๐Ÿ˜ฝ kissing cat animal cats kiss +๐Ÿ™€ weary cat animal cats munch scared scream +๐Ÿ˜ฟ crying cat animal tears weep sad cats upset cry +๐Ÿ˜พ pouting cat animal cats +๐Ÿ™ˆ see no evil monkey monkey animal nature haha +๐Ÿ™‰ hear no evil monkey animal monkey nature +๐Ÿ™Š speak no evil monkey monkey animal nature omg +๐Ÿ’‹ kiss mark face lips love like affection valentines +๐Ÿ’Œ love letter email like affection envelope valentines +๐Ÿ’˜ heart with arrow love like heart affection valentines +๐Ÿ’ heart with ribbon love valentines +๐Ÿ’– sparkling heart love like affection valentines +๐Ÿ’— growing heart like love affection valentines pink +๐Ÿ’“ beating heart love like affection valentines pink heart +๐Ÿ’ž revolving hearts love like affection valentines +๐Ÿ’• two hearts love like affection valentines heart +๐Ÿ’Ÿ heart decoration purple-square love like +โฃ๏ธ heart exclamation decoration love +๐Ÿ’” broken heart sad sorry break heart heartbreak +โค๏ธ red heart love like valentines +๐Ÿงก orange heart love like affection valentines +๐Ÿ’› yellow heart love like affection valentines +๐Ÿ’š green heart love like affection valentines +๐Ÿ’™ blue heart love like affection valentines +๐Ÿ’œ purple heart love like affection valentines +๐ŸคŽ brown heart coffee +๐Ÿ–ค black heart evil +๐Ÿค white heart pure +๐Ÿ’ฏ hundred points score perfect numbers century exam quiz test pass hundred +๐Ÿ’ข anger symbol angry mad +๐Ÿ’ฅ collision bomb explode explosion collision blown +๐Ÿ’ซ dizzy star sparkle shoot magic +๐Ÿ’ฆ sweat droplets water drip oops +๐Ÿ’จ dashing away wind air fast shoo fart smoke puff +๐Ÿ•ณ๏ธ hole embarrassing +๐Ÿ’ฃ bomb boom explode explosion terrorism +๐Ÿ’ฌ speech balloon bubble words message talk chatting +๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ eye in speech bubble info +๐Ÿ—จ๏ธ left speech bubble words message talk chatting +๐Ÿ—ฏ๏ธ right anger bubble caption speech thinking mad +๐Ÿ’ญ thought balloon bubble cloud speech thinking dream +๐Ÿ’ค zzz sleepy tired dream +๐Ÿ‘‹ waving hand hands gesture goodbye solong farewell hello hi palm +๐Ÿคš raised back of hand fingers raised backhand +๐Ÿ–๏ธ hand with fingers splayed hand fingers palm +โœ‹ raised hand fingers stop highfive palm ban +๐Ÿ–– vulcan salute hand fingers spock star trek +๐Ÿ‘Œ ok hand fingers limbs perfect ok okay +๐Ÿค pinching hand tiny small size +โœŒ๏ธ victory hand fingers ohyeah hand peace victory two +๐Ÿคž crossed fingers good lucky +๐ŸคŸ love you gesture hand fingers gesture +๐Ÿค˜ sign of the horns hand fingers evil eye sign of horns rock on +๐Ÿค™ call me hand hands gesture shaka +๐Ÿ‘ˆ backhand index pointing left direction fingers hand left +๐Ÿ‘‰ backhand index pointing right fingers hand direction right +๐Ÿ‘† backhand index pointing up fingers hand direction up +๐Ÿ–• middle finger hand fingers rude middle flipping +๐Ÿ‘‡ backhand index pointing down fingers hand direction down +โ˜๏ธ index pointing up hand fingers direction up +๐Ÿ‘ thumbs up thumbsup yes awesome good agree accept cool hand like +1 +๐Ÿ‘Ž thumbs down thumbsdown no dislike hand -1 +โœŠ raised fist fingers hand grasp +๐Ÿ‘Š oncoming fist angry violence fist hit attack hand +๐Ÿค› left facing fist hand fistbump +๐Ÿคœ right facing fist hand fistbump +๐Ÿ‘ clapping hands hands praise applause congrats yay +๐Ÿ™Œ raising hands gesture hooray yea celebration hands +๐Ÿ‘ open hands fingers butterfly hands open +๐Ÿคฒ palms up together hands gesture cupped prayer +๐Ÿค handshake agreement shake +๐Ÿ™ folded hands please hope wish namaste highfive pray +โœ๏ธ writing hand lower left ballpoint pen stationery write compose +๐Ÿ’… nail polish beauty manicure finger fashion nail +๐Ÿคณ selfie camera phone +๐Ÿ’ช flexed biceps arm flex hand summer strong biceps +๐Ÿฆพ mechanical arm accessibility +๐Ÿฆฟ mechanical leg accessibility +๐Ÿฆต leg kick limb +๐Ÿฆถ foot kick stomp +๐Ÿ‘‚ ear face hear sound listen +๐Ÿฆป ear with hearing aid accessibility +๐Ÿ‘ƒ nose smell sniff +๐Ÿง  brain smart intelligent +๐Ÿฆท tooth teeth dentist +๐Ÿฆด bone skeleton +๐Ÿ‘€ eyes look watch stalk peek see +๐Ÿ‘๏ธ eye face look see watch stare +๐Ÿ‘… tongue mouth playful +๐Ÿ‘„ mouth mouth kiss +๐Ÿ‘ถ baby child boy girl toddler +๐Ÿง’ child gender-neutral young +๐Ÿ‘ฆ boy man male guy teenager +๐Ÿ‘ง girl female woman teenager +๐Ÿง‘ person gender-neutral person +๐Ÿ‘ฑ person blond hair hairstyle +๐Ÿ‘จ man mustache father dad guy classy sir moustache +๐Ÿง” man beard person bewhiskered +๐Ÿ‘จโ€๐Ÿฆฐ man red hair hairstyle +๐Ÿ‘จโ€๐Ÿฆฑ man curly hair hairstyle +๐Ÿ‘จโ€๐Ÿฆณ man white hair old elder +๐Ÿ‘จโ€๐Ÿฆฒ man bald hairless +๐Ÿ‘ฉ woman female girls lady +๐Ÿ‘ฉโ€๐Ÿฆฐ woman red hair hairstyle +๐Ÿง‘โ€๐Ÿฆฐ person red hair hairstyle +๐Ÿ‘ฉโ€๐Ÿฆฑ woman curly hair hairstyle +๐Ÿง‘โ€๐Ÿฆฑ person curly hair hairstyle +๐Ÿ‘ฉโ€๐Ÿฆณ woman white hair old elder +๐Ÿง‘โ€๐Ÿฆณ person white hair elder old +๐Ÿ‘ฉโ€๐Ÿฆฒ woman bald hairless +๐Ÿง‘โ€๐Ÿฆฒ person bald hairless +๐Ÿ‘ฑโ€โ™€๏ธ woman blond hair woman female girl blonde person +๐Ÿ‘ฑโ€โ™‚๏ธ man blond hair man male boy blonde guy person +๐Ÿง“ older person human elder senior gender-neutral +๐Ÿ‘ด old man human male men old elder senior +๐Ÿ‘ต old woman human female women lady old elder senior +๐Ÿ™ person frowning worried +๐Ÿ™โ€โ™‚๏ธ man frowning male boy man sad depressed discouraged unhappy +๐Ÿ™โ€โ™€๏ธ woman frowning female girl woman sad depressed discouraged unhappy +๐Ÿ™Ž person pouting upset +๐Ÿ™Žโ€โ™‚๏ธ man pouting male boy man +๐Ÿ™Žโ€โ™€๏ธ woman pouting female girl woman +๐Ÿ™… person gesturing no decline +๐Ÿ™…โ€โ™‚๏ธ man gesturing no male boy man nope +๐Ÿ™…โ€โ™€๏ธ woman gesturing no female girl woman nope +๐Ÿ™† person gesturing ok agree +๐Ÿ™†โ€โ™‚๏ธ man gesturing ok men boy male blue human man +๐Ÿ™†โ€โ™€๏ธ woman gesturing ok women girl female pink human woman +๐Ÿ’ person tipping hand information +๐Ÿ’โ€โ™‚๏ธ man tipping hand male boy man human information +๐Ÿ’โ€โ™€๏ธ woman tipping hand female girl woman human information +๐Ÿ™‹ person raising hand question +๐Ÿ™‹โ€โ™‚๏ธ man raising hand male boy man +๐Ÿ™‹โ€โ™€๏ธ woman raising hand female girl woman +๐Ÿง deaf person accessibility +๐Ÿงโ€โ™‚๏ธ deaf man accessibility +๐Ÿงโ€โ™€๏ธ deaf woman accessibility +๐Ÿ™‡ person bowing respectiful +๐Ÿ™‡โ€โ™‚๏ธ man bowing man male boy +๐Ÿ™‡โ€โ™€๏ธ woman bowing woman female girl +๐Ÿคฆ person facepalming disappointed +๐Ÿคฆโ€โ™‚๏ธ man facepalming man male boy disbelief +๐Ÿคฆโ€โ™€๏ธ woman facepalming woman female girl disbelief +๐Ÿคท person shrugging regardless +๐Ÿคทโ€โ™‚๏ธ man shrugging man male boy confused indifferent doubt +๐Ÿคทโ€โ™€๏ธ woman shrugging woman female girl confused indifferent doubt +๐Ÿง‘โ€โš•๏ธ health worker hospital +๐Ÿ‘จโ€โš•๏ธ man health worker doctor nurse therapist healthcare man human +๐Ÿ‘ฉโ€โš•๏ธ woman health worker doctor nurse therapist healthcare woman human +๐Ÿง‘โ€๐ŸŽ“ student learn +๐Ÿ‘จโ€๐ŸŽ“ man student graduate man human +๐Ÿ‘ฉโ€๐ŸŽ“ woman student graduate woman human +๐Ÿง‘โ€๐Ÿซ teacher professor +๐Ÿ‘จโ€๐Ÿซ man teacher instructor professor man human +๐Ÿ‘ฉโ€๐Ÿซ woman teacher instructor professor woman human +๐Ÿง‘โ€โš–๏ธ judge law +๐Ÿ‘จโ€โš–๏ธ man judge justice court man human +๐Ÿ‘ฉโ€โš–๏ธ woman judge justice court woman human +๐Ÿง‘โ€๐ŸŒพ farmer crops +๐Ÿ‘จโ€๐ŸŒพ man farmer rancher gardener man human +๐Ÿ‘ฉโ€๐ŸŒพ woman farmer rancher gardener woman human +๐Ÿง‘โ€๐Ÿณ cook food kitchen culinary +๐Ÿ‘จโ€๐Ÿณ man cook chef man human +๐Ÿ‘ฉโ€๐Ÿณ woman cook chef woman human +๐Ÿง‘โ€๐Ÿ”ง mechanic worker technician +๐Ÿ‘จโ€๐Ÿ”ง man mechanic plumber man human wrench +๐Ÿ‘ฉโ€๐Ÿ”ง woman mechanic plumber woman human wrench +๐Ÿง‘โ€๐Ÿญ factory worker labor +๐Ÿ‘จโ€๐Ÿญ man factory worker assembly industrial man human +๐Ÿ‘ฉโ€๐Ÿญ woman factory worker assembly industrial woman human +๐Ÿง‘โ€๐Ÿ’ผ office worker business +๐Ÿ‘จโ€๐Ÿ’ผ man office worker business manager man human +๐Ÿ‘ฉโ€๐Ÿ’ผ woman office worker business manager woman human +๐Ÿง‘โ€๐Ÿ”ฌ scientist chemistry +๐Ÿ‘จโ€๐Ÿ”ฌ man scientist biologist chemist engineer physicist man human +๐Ÿ‘ฉโ€๐Ÿ”ฌ woman scientist biologist chemist engineer physicist woman human +๐Ÿง‘โ€๐Ÿ’ป technologist computer +๐Ÿ‘จโ€๐Ÿ’ป man technologist coder developer engineer programmer software man human laptop computer +๐Ÿ‘ฉโ€๐Ÿ’ป woman technologist coder developer engineer programmer software woman human laptop computer +๐Ÿง‘โ€๐ŸŽค singer song artist performer +๐Ÿ‘จโ€๐ŸŽค man singer rockstar entertainer man human +๐Ÿ‘ฉโ€๐ŸŽค woman singer rockstar entertainer woman human +๐Ÿง‘โ€๐ŸŽจ artist painting draw creativity +๐Ÿ‘จโ€๐ŸŽจ man artist painter man human +๐Ÿ‘ฉโ€๐ŸŽจ woman artist painter woman human +๐Ÿง‘โ€โœˆ๏ธ pilot fly plane airplane +๐Ÿ‘จโ€โœˆ๏ธ man pilot aviator plane man human +๐Ÿ‘ฉโ€โœˆ๏ธ woman pilot aviator plane woman human +๐Ÿง‘โ€๐Ÿš€ astronaut outerspace +๐Ÿ‘จโ€๐Ÿš€ man astronaut space rocket man human +๐Ÿ‘ฉโ€๐Ÿš€ woman astronaut space rocket woman human +๐Ÿง‘โ€๐Ÿš’ firefighter fire +๐Ÿ‘จโ€๐Ÿš’ man firefighter fireman man human +๐Ÿ‘ฉโ€๐Ÿš’ woman firefighter fireman woman human +๐Ÿ‘ฎ police officer cop +๐Ÿ‘ฎโ€โ™‚๏ธ man police officer man police law legal enforcement arrest 911 +๐Ÿ‘ฎโ€โ™€๏ธ woman police officer woman police law legal enforcement arrest 911 female +๐Ÿ•ต๏ธ detective human spy detective +๐Ÿ•ต๏ธโ€โ™‚๏ธ man detective crime +๐Ÿ•ต๏ธโ€โ™€๏ธ woman detective human spy detective female woman +๐Ÿ’‚ guard protect +๐Ÿ’‚โ€โ™‚๏ธ man guard uk gb british male guy royal +๐Ÿ’‚โ€โ™€๏ธ woman guard uk gb british female royal woman +๐Ÿ‘ท construction worker labor build +๐Ÿ‘ทโ€โ™‚๏ธ man construction worker male human wip guy build construction worker labor +๐Ÿ‘ทโ€โ™€๏ธ woman construction worker female human wip build construction worker labor woman +๐Ÿคด prince boy man male crown royal king +๐Ÿ‘ธ princess girl woman female blond crown royal queen +๐Ÿ‘ณ person wearing turban headdress +๐Ÿ‘ณโ€โ™‚๏ธ man wearing turban male indian hinduism arabs +๐Ÿ‘ณโ€โ™€๏ธ woman wearing turban female indian hinduism arabs woman +๐Ÿ‘ฒ man with skullcap male boy chinese +๐Ÿง• woman with headscarf female hijab mantilla tichel +๐Ÿคต man in tuxedo couple marriage wedding groom +๐Ÿ‘ฐ bride with veil couple marriage wedding woman bride +๐Ÿคฐ pregnant woman baby +๐Ÿคฑ breast feeding nursing baby +๐Ÿ‘ผ baby angel heaven wings halo +๐ŸŽ… santa claus festival man male xmas father christmas +๐Ÿคถ mrs claus woman female xmas mother christmas +๐Ÿฆธ superhero marvel +๐Ÿฆธโ€โ™‚๏ธ man superhero man male good hero superpowers +๐Ÿฆธโ€โ™€๏ธ woman superhero woman female good heroine superpowers +๐Ÿฆน supervillain marvel +๐Ÿฆนโ€โ™‚๏ธ man supervillain man male evil bad criminal hero superpowers +๐Ÿฆนโ€โ™€๏ธ woman supervillain woman female evil bad criminal heroine superpowers +๐Ÿง™ mage magic +๐Ÿง™โ€โ™‚๏ธ man mage man male mage sorcerer +๐Ÿง™โ€โ™€๏ธ woman mage woman female mage witch +๐Ÿงš fairy wings magical +๐Ÿงšโ€โ™‚๏ธ man fairy man male +๐Ÿงšโ€โ™€๏ธ woman fairy woman female +๐Ÿง› vampire blood twilight +๐Ÿง›โ€โ™‚๏ธ man vampire man male dracula +๐Ÿง›โ€โ™€๏ธ woman vampire woman female +๐Ÿงœ merperson sea +๐Ÿงœโ€โ™‚๏ธ merman man male triton +๐Ÿงœโ€โ™€๏ธ mermaid woman female merwoman ariel +๐Ÿง elf magical +๐Ÿงโ€โ™‚๏ธ man elf man male +๐Ÿงโ€โ™€๏ธ woman elf woman female +๐Ÿงž genie magical wishes +๐Ÿงžโ€โ™‚๏ธ man genie man male +๐Ÿงžโ€โ™€๏ธ woman genie woman female +๐ŸงŸ zombie dead +๐ŸงŸโ€โ™‚๏ธ man zombie man male dracula undead walking dead +๐ŸงŸโ€โ™€๏ธ woman zombie woman female undead walking dead +๐Ÿ’† person getting massage relax +๐Ÿ’†โ€โ™‚๏ธ man getting massage male boy man head +๐Ÿ’†โ€โ™€๏ธ woman getting massage female girl woman head +๐Ÿ’‡ person getting haircut hairstyle +๐Ÿ’‡โ€โ™‚๏ธ man getting haircut male boy man +๐Ÿ’‡โ€โ™€๏ธ woman getting haircut female girl woman +๐Ÿšถ person walking move +๐Ÿšถโ€โ™‚๏ธ man walking human feet steps +๐Ÿšถโ€โ™€๏ธ woman walking human feet steps woman female +๐Ÿง person standing still +๐Ÿงโ€โ™‚๏ธ man standing still +๐Ÿงโ€โ™€๏ธ woman standing still +๐ŸงŽ person kneeling pray respectful +๐ŸงŽโ€โ™‚๏ธ man kneeling pray respectful +๐ŸงŽโ€โ™€๏ธ woman kneeling respectful pray +๐Ÿง‘โ€๐Ÿฆฏ person with probing cane blind +๐Ÿ‘จโ€๐Ÿฆฏ man with probing cane blind +๐Ÿ‘ฉโ€๐Ÿฆฏ woman with probing cane blind +๐Ÿง‘โ€๐Ÿฆผ person in motorized wheelchair disability accessibility +๐Ÿ‘จโ€๐Ÿฆผ man in motorized wheelchair disability accessibility +๐Ÿ‘ฉโ€๐Ÿฆผ woman in motorized wheelchair disability accessibility +๐Ÿง‘โ€๐Ÿฆฝ person in manual wheelchair disability accessibility +๐Ÿ‘จโ€๐Ÿฆฝ man in manual wheelchair disability accessibility +๐Ÿ‘ฉโ€๐Ÿฆฝ woman in manual wheelchair disability accessibility +๐Ÿƒ person running move +๐Ÿƒโ€โ™‚๏ธ man running man walking exercise race running +๐Ÿƒโ€โ™€๏ธ woman running woman walking exercise race running female +๐Ÿ’ƒ woman dancing female girl woman fun +๐Ÿ•บ man dancing male boy fun dancer +๐Ÿ•ด๏ธ man in suit levitating suit business levitate hover jump +๐Ÿ‘ฏ people with bunny ears perform costume +๐Ÿ‘ฏโ€โ™‚๏ธ men with bunny ears male bunny men boys +๐Ÿ‘ฏโ€โ™€๏ธ women with bunny ears female bunny women girls +๐Ÿง– person in steamy room relax spa +๐Ÿง–โ€โ™‚๏ธ man in steamy room male man spa steamroom sauna +๐Ÿง–โ€โ™€๏ธ woman in steamy room female woman spa steamroom sauna +๐Ÿง— person climbing sport +๐Ÿง—โ€โ™‚๏ธ man climbing sports hobby man male rock +๐Ÿง—โ€โ™€๏ธ woman climbing sports hobby woman female rock +๐Ÿคบ person fencing sports fencing sword +๐Ÿ‡ horse racing animal betting competition gambling luck +โ›ท๏ธ skier sports winter snow +๐Ÿ‚ snowboarder sports winter +๐ŸŒ๏ธ person golfing sports business +๐ŸŒ๏ธโ€โ™‚๏ธ man golfing sport +๐ŸŒ๏ธโ€โ™€๏ธ woman golfing sports business woman female +๐Ÿ„ person surfing sport sea +๐Ÿ„โ€โ™‚๏ธ man surfing sports ocean sea summer beach +๐Ÿ„โ€โ™€๏ธ woman surfing sports ocean sea summer beach woman female +๐Ÿšฃ person rowing boat sport move +๐Ÿšฃโ€โ™‚๏ธ man rowing boat sports hobby water ship +๐Ÿšฃโ€โ™€๏ธ woman rowing boat sports hobby water ship woman female +๐ŸŠ person swimming sport pool +๐ŸŠโ€โ™‚๏ธ man swimming sports exercise human athlete water summer +๐ŸŠโ€โ™€๏ธ woman swimming sports exercise human athlete water summer woman female +โ›น๏ธ person bouncing ball sports human +โ›น๏ธโ€โ™‚๏ธ man bouncing ball sport +โ›น๏ธโ€โ™€๏ธ woman bouncing ball sports human woman female +๐Ÿ‹๏ธ person lifting weights sports training exercise +๐Ÿ‹๏ธโ€โ™‚๏ธ man lifting weights sport +๐Ÿ‹๏ธโ€โ™€๏ธ woman lifting weights sports training exercise woman female +๐Ÿšด person biking sport move +๐Ÿšดโ€โ™‚๏ธ man biking sports bike exercise hipster +๐Ÿšดโ€โ™€๏ธ woman biking sports bike exercise hipster woman female +๐Ÿšต person mountain biking sport move +๐Ÿšตโ€โ™‚๏ธ man mountain biking transportation sports human race bike +๐Ÿšตโ€โ™€๏ธ woman mountain biking transportation sports human race bike woman female +๐Ÿคธ person cartwheeling sport gymnastic +๐Ÿคธโ€โ™‚๏ธ man cartwheeling gymnastics +๐Ÿคธโ€โ™€๏ธ woman cartwheeling gymnastics +๐Ÿคผ people wrestling sport +๐Ÿคผโ€โ™‚๏ธ men wrestling sports wrestlers +๐Ÿคผโ€โ™€๏ธ women wrestling sports wrestlers +๐Ÿคฝ person playing water polo sport +๐Ÿคฝโ€โ™‚๏ธ man playing water polo sports pool +๐Ÿคฝโ€โ™€๏ธ woman playing water polo sports pool +๐Ÿคพ person playing handball sport +๐Ÿคพโ€โ™‚๏ธ man playing handball sports +๐Ÿคพโ€โ™€๏ธ woman playing handball sports +๐Ÿคน person juggling performance balance +๐Ÿคนโ€โ™‚๏ธ man juggling juggle balance skill multitask +๐Ÿคนโ€โ™€๏ธ woman juggling juggle balance skill multitask +๐Ÿง˜ person in lotus position meditate +๐Ÿง˜โ€โ™‚๏ธ man in lotus position man male meditation yoga serenity zen mindfulness +๐Ÿง˜โ€โ™€๏ธ woman in lotus position woman female meditation yoga serenity zen mindfulness +๐Ÿ›€ person taking bath clean shower bathroom +๐Ÿ›Œ person in bed bed rest +๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ people holding hands friendship +๐Ÿ‘ญ women holding hands pair friendship couple love like female people human +๐Ÿ‘ซ woman and man holding hands pair people human love date dating like affection valentines marriage +๐Ÿ‘ฌ men holding hands pair couple love like bromance friendship people human +๐Ÿ’ kiss pair valentines love like dating marriage +๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ kiss woman man love +๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ kiss man man pair valentines love like dating marriage +๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ kiss woman woman pair valentines love like dating marriage +๐Ÿ’‘ couple with heart pair love like affection human dating valentines marriage +๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ couple with heart woman man love +๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ couple with heart man man pair love like affection human dating valentines marriage +๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘ฉ couple with heart woman woman pair love like affection human dating valentines marriage +๐Ÿ‘ช family home parents child mom dad father mother people human +๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ family man woman boy love +๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง family man woman girl home parents people human child +๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ family man woman girl boy home parents people human children +๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ family man woman boy boy home parents people human children +๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง family man woman girl girl home parents people human children +๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ family man man boy home parents people human children +๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง family man man girl home parents people human children +๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ family man man girl boy home parents people human children +๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ family man man boy boy home parents people human children +๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง family man man girl girl home parents people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ family woman woman boy home parents people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง family woman woman girl home parents people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ family woman woman girl boy home parents people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ family woman woman boy boy home parents people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง family woman woman girl girl home parents people human children +๐Ÿ‘จโ€๐Ÿ‘ฆ family man boy home parent people human child +๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ family man boy boy home parent people human children +๐Ÿ‘จโ€๐Ÿ‘ง family man girl home parent people human child +๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ family man girl boy home parent people human children +๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง family man girl girl home parent people human children +๐Ÿ‘ฉโ€๐Ÿ‘ฆ family woman boy home parent people human child +๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ family woman boy boy home parent people human children +๐Ÿ‘ฉโ€๐Ÿ‘ง family woman girl home parent people human child +๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ family woman girl boy home parent people human children +๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง family woman girl girl home parent people human children +๐Ÿ—ฃ๏ธ speaking head user person human sing say talk +๐Ÿ‘ค bust in silhouette user person human +๐Ÿ‘ฅ busts in silhouette user person human group team +๐Ÿ‘ฃ footprints feet tracking walking beach +๐Ÿต monkey face animal nature circus +๐Ÿ’ monkey animal nature banana circus +๐Ÿฆ gorilla animal nature circus +๐Ÿฆง orangutan animal +๐Ÿถ dog face animal friend nature woof puppy pet faithful +๐Ÿ• dog animal nature friend doge pet faithful +๐Ÿฆฎ guide dog animal blind +๐Ÿ•โ€๐Ÿฆบ service dog blind animal +๐Ÿฉ poodle dog animal 101 nature pet +๐Ÿบ wolf animal nature wild +๐ŸฆŠ fox animal nature face +๐Ÿฆ raccoon animal nature +๐Ÿฑ cat face animal meow nature pet kitten +๐Ÿˆ cat animal meow pet cats +๐Ÿฆ lion animal nature +๐Ÿฏ tiger face animal cat danger wild nature roar +๐Ÿ… tiger animal nature roar +๐Ÿ† leopard animal nature +๐Ÿด horse face animal brown nature +๐ŸŽ horse animal gamble luck +๐Ÿฆ„ unicorn animal nature mystical +๐Ÿฆ“ zebra animal nature stripes safari +๐ŸฆŒ deer animal nature horns venison +๐Ÿฎ cow face beef ox animal nature moo milk +๐Ÿ‚ ox animal cow beef +๐Ÿƒ water buffalo animal nature ox cow +๐Ÿ„ cow beef ox animal nature moo milk +๐Ÿท pig face animal oink nature +๐Ÿ– pig animal nature +๐Ÿ— boar animal nature +๐Ÿฝ pig nose animal oink +๐Ÿ ram animal sheep nature +๐Ÿ‘ ewe animal nature wool shipit +๐Ÿ goat animal nature +๐Ÿช camel animal hot desert hump +๐Ÿซ two hump camel animal nature hot desert hump +๐Ÿฆ™ llama animal nature alpaca +๐Ÿฆ’ giraffe animal nature spots safari +๐Ÿ˜ elephant animal nature nose th circus +๐Ÿฆ rhinoceros animal nature horn +๐Ÿฆ› hippopotamus animal nature +๐Ÿญ mouse face animal nature cheese wedge rodent +๐Ÿ mouse animal nature rodent +๐Ÿ€ rat animal mouse rodent +๐Ÿน hamster animal nature +๐Ÿฐ rabbit face animal nature pet spring magic bunny +๐Ÿ‡ rabbit animal nature pet magic spring +๐Ÿฟ๏ธ chipmunk animal nature rodent squirrel +๐Ÿฆ” hedgehog animal nature spiny +๐Ÿฆ‡ bat animal nature blind vampire +๐Ÿป bear animal nature wild +๐Ÿจ koala animal nature +๐Ÿผ panda animal nature panda +๐Ÿฆฅ sloth animal +๐Ÿฆฆ otter animal +๐Ÿฆจ skunk animal +๐Ÿฆ˜ kangaroo animal nature australia joey hop marsupial +๐Ÿฆก badger animal nature honey +๐Ÿพ paw prints animal tracking footprints dog cat pet feet +๐Ÿฆƒ turkey animal bird +๐Ÿ” chicken animal cluck nature bird +๐Ÿ“ rooster animal nature chicken +๐Ÿฃ hatching chick animal chicken egg born baby bird +๐Ÿค baby chick animal chicken bird +๐Ÿฅ front facing baby chick animal chicken baby bird +๐Ÿฆ bird animal nature fly tweet spring +๐Ÿง penguin animal nature +๐Ÿ•Š๏ธ dove animal bird +๐Ÿฆ… eagle animal nature bird +๐Ÿฆ† duck animal nature bird mallard +๐Ÿฆข swan animal nature bird +๐Ÿฆ‰ owl animal nature bird hoot +๐Ÿฆฉ flamingo animal +๐Ÿฆš peacock animal nature peahen bird +๐Ÿฆœ parrot animal nature bird pirate talk +๐Ÿธ frog animal nature croak toad +๐ŸŠ crocodile animal nature reptile lizard alligator +๐Ÿข turtle animal slow nature tortoise +๐ŸฆŽ lizard animal nature reptile +๐Ÿ snake animal evil nature hiss python +๐Ÿฒ dragon face animal myth nature chinese green +๐Ÿ‰ dragon animal myth nature chinese green +๐Ÿฆ• sauropod animal nature dinosaur brachiosaurus brontosaurus diplodocus extinct +๐Ÿฆ– t rex animal nature dinosaur tyrannosaurus extinct +๐Ÿณ spouting whale animal nature sea ocean +๐Ÿ‹ whale animal nature sea ocean +๐Ÿฌ dolphin animal nature fish sea ocean flipper fins beach +๐ŸŸ fish animal food nature +๐Ÿ  tropical fish animal swim ocean beach nemo +๐Ÿก blowfish animal nature food sea ocean +๐Ÿฆˆ shark animal nature fish sea ocean jaws fins beach +๐Ÿ™ octopus animal creature ocean sea nature beach +๐Ÿš spiral shell nature sea beach +๐ŸŒ snail slow animal shell +๐Ÿฆ‹ butterfly animal insect nature caterpillar +๐Ÿ› bug animal insect nature worm +๐Ÿœ ant animal insect nature bug +๐Ÿ honeybee animal insect nature bug spring honey +๐Ÿž lady beetle animal insect nature ladybug +๐Ÿฆ— cricket animal cricket chirp +๐Ÿ•ท๏ธ spider animal arachnid +๐Ÿ•ธ๏ธ spider web animal insect arachnid silk +๐Ÿฆ‚ scorpion animal arachnid +๐ŸฆŸ mosquito animal nature insect malaria +๐Ÿฆ  microbe amoeba bacteria germs virus +๐Ÿ’ bouquet flowers nature spring +๐ŸŒธ cherry blossom nature plant spring flower +๐Ÿ’ฎ white flower japanese spring +๐Ÿต๏ธ rosette flower decoration military +๐ŸŒน rose flowers valentines love spring +๐Ÿฅ€ wilted flower plant nature flower +๐ŸŒบ hibiscus plant vegetable flowers beach +๐ŸŒป sunflower nature plant fall +๐ŸŒผ blossom nature flowers yellow +๐ŸŒท tulip flowers plant nature summer spring +๐ŸŒฑ seedling plant nature grass lawn spring +๐ŸŒฒ evergreen tree plant nature +๐ŸŒณ deciduous tree plant nature +๐ŸŒด palm tree plant vegetable nature summer beach mojito tropical +๐ŸŒต cactus vegetable plant nature +๐ŸŒพ sheaf of rice nature plant +๐ŸŒฟ herb vegetable plant medicine weed grass lawn +โ˜˜๏ธ shamrock vegetable plant nature irish clover +๐Ÿ€ four leaf clover vegetable plant nature lucky irish +๐Ÿ maple leaf nature plant vegetable ca fall +๐Ÿ‚ fallen leaf nature plant vegetable leaves +๐Ÿƒ leaf fluttering in wind nature plant tree vegetable grass lawn spring +๐Ÿ‡ grapes fruit food wine +๐Ÿˆ melon fruit nature food +๐Ÿ‰ watermelon fruit food picnic summer +๐ŸŠ tangerine food fruit nature orange +๐Ÿ‹ lemon fruit nature +๐ŸŒ banana fruit food monkey +๐Ÿ pineapple fruit nature food +๐Ÿฅญ mango fruit food tropical +๐ŸŽ red apple fruit mac school +๐Ÿ green apple fruit nature +๐Ÿ pear fruit nature food +๐Ÿ‘ peach fruit nature food +๐Ÿ’ cherries food fruit +๐Ÿ“ strawberry fruit food nature +๐Ÿฅ kiwi fruit fruit food +๐Ÿ… tomato fruit vegetable nature food +๐Ÿฅฅ coconut fruit nature food palm +๐Ÿฅ‘ avocado fruit food +๐Ÿ† eggplant vegetable nature food aubergine +๐Ÿฅ” potato food tuber vegatable starch +๐Ÿฅ• carrot vegetable food orange +๐ŸŒฝ ear of corn food vegetable plant +๐ŸŒถ๏ธ hot pepper food spicy chilli chili +๐Ÿฅ’ cucumber fruit food pickle +๐Ÿฅฌ leafy green food vegetable plant bok choy cabbage kale lettuce +๐Ÿฅฆ broccoli fruit food vegetable +๐Ÿง„ garlic food spice cook +๐Ÿง… onion cook food spice +๐Ÿ„ mushroom plant vegetable +๐Ÿฅœ peanuts food nut +๐ŸŒฐ chestnut food squirrel +๐Ÿž bread food wheat breakfast toast +๐Ÿฅ croissant food bread french +๐Ÿฅ– baguette bread food bread french +๐Ÿฅจ pretzel food bread twisted +๐Ÿฅฏ bagel food bread bakery schmear +๐Ÿฅž pancakes food breakfast flapjacks hotcakes +๐Ÿง‡ waffle food breakfast +๐Ÿง€ cheese wedge food chadder +๐Ÿ– meat on bone good food drumstick +๐Ÿ— poultry leg food meat drumstick bird chicken turkey +๐Ÿฅฉ cut of meat food cow meat cut chop lambchop porkchop +๐Ÿฅ“ bacon food breakfast pork pig meat +๐Ÿ” hamburger meat fast food beef cheeseburger mcdonalds burger king +๐ŸŸ french fries chips snack fast food +๐Ÿ• pizza food party +๐ŸŒญ hot dog food frankfurter +๐Ÿฅช sandwich food lunch bread +๐ŸŒฎ taco food mexican +๐ŸŒฏ burrito food mexican +๐Ÿฅ™ stuffed flatbread food flatbread stuffed gyro +๐Ÿง† falafel food +๐Ÿฅš egg food chicken breakfast +๐Ÿณ cooking food breakfast kitchen egg +๐Ÿฅ˜ shallow pan of food food cooking casserole paella +๐Ÿฒ pot of food food meat soup +๐Ÿฅฃ bowl with spoon food breakfast cereal oatmeal porridge +๐Ÿฅ— green salad food healthy lettuce +๐Ÿฟ popcorn food movie theater films snack +๐Ÿงˆ butter food cook +๐Ÿง‚ salt condiment shaker +๐Ÿฅซ canned food food soup +๐Ÿฑ bento box food japanese box +๐Ÿ˜ rice cracker food japanese +๐Ÿ™ rice ball food japanese +๐Ÿš cooked rice food china asian +๐Ÿ› curry rice food spicy hot indian +๐Ÿœ steaming bowl food japanese noodle chopsticks +๐Ÿ spaghetti food italian noodle +๐Ÿ  roasted sweet potato food nature +๐Ÿข oden food japanese +๐Ÿฃ sushi food fish japanese rice +๐Ÿค fried shrimp food animal appetizer summer +๐Ÿฅ fish cake with swirl food japan sea beach narutomaki pink swirl kamaboko surimi ramen +๐Ÿฅฎ moon cake food autumn +๐Ÿก dango food dessert sweet japanese barbecue meat +๐ŸฅŸ dumpling food empanada pierogi potsticker +๐Ÿฅ  fortune cookie food prophecy +๐Ÿฅก takeout box food leftovers +๐Ÿฆ€ crab animal crustacean +๐Ÿฆž lobster animal nature bisque claws seafood +๐Ÿฆ shrimp animal ocean nature seafood +๐Ÿฆ‘ squid animal nature ocean sea +๐Ÿฆช oyster food +๐Ÿฆ soft ice cream food hot dessert summer +๐Ÿง shaved ice hot dessert summer +๐Ÿจ ice cream food hot dessert +๐Ÿฉ doughnut food dessert snack sweet donut +๐Ÿช cookie food snack oreo chocolate sweet dessert +๐ŸŽ‚ birthday cake food dessert cake +๐Ÿฐ shortcake food dessert +๐Ÿง cupcake food dessert bakery sweet +๐Ÿฅง pie food dessert pastry +๐Ÿซ chocolate bar food snack dessert sweet +๐Ÿฌ candy snack dessert sweet lolly +๐Ÿญ lollipop food snack candy sweet +๐Ÿฎ custard dessert food +๐Ÿฏ honey pot bees sweet kitchen +๐Ÿผ baby bottle food container milk +๐Ÿฅ› glass of milk beverage drink cow +โ˜• hot beverage beverage caffeine latte espresso coffee +๐Ÿต teacup without handle drink bowl breakfast green british +๐Ÿถ sake wine drink drunk beverage japanese alcohol booze +๐Ÿพ bottle with popping cork drink wine bottle celebration +๐Ÿท wine glass drink beverage drunk alcohol booze +๐Ÿธ cocktail glass drink drunk alcohol beverage booze mojito +๐Ÿน tropical drink beverage cocktail summer beach alcohol booze mojito +๐Ÿบ beer mug relax beverage drink drunk party pub summer alcohol booze +๐Ÿป clinking beer mugs relax beverage drink drunk party pub summer alcohol booze +๐Ÿฅ‚ clinking glasses beverage drink party alcohol celebrate cheers wine champagne toast +๐Ÿฅƒ tumbler glass drink beverage drunk alcohol liquor booze bourbon scotch whisky glass shot +๐Ÿฅค cup with straw drink soda +๐Ÿงƒ beverage box drink +๐Ÿง‰ mate drink tea beverage +๐ŸงŠ ice water cold +๐Ÿฅข chopsticks food +๐Ÿฝ๏ธ fork and knife with plate food eat meal lunch dinner restaurant +๐Ÿด fork and knife cutlery kitchen +๐Ÿฅ„ spoon cutlery kitchen tableware +๐Ÿ”ช kitchen knife knife blade cutlery kitchen weapon +๐Ÿบ amphora vase jar +๐ŸŒ globe showing europe africa globe world international +๐ŸŒŽ globe showing americas globe world USA international +๐ŸŒ globe showing asia australia globe world east international +๐ŸŒ globe with meridians earth international world internet interweb i18n +๐Ÿ—บ๏ธ world map location direction +๐Ÿ—พ map of japan nation country japanese asia +๐Ÿงญ compass magnetic navigation orienteering +๐Ÿ”๏ธ snow capped mountain photo nature environment winter cold +โ›ฐ๏ธ mountain photo nature environment +๐ŸŒ‹ volcano photo nature disaster +๐Ÿ—ป mount fuji photo mountain nature japanese +๐Ÿ•๏ธ camping photo outdoors tent +๐Ÿ–๏ธ beach with umbrella weather summer sunny sand mojito +๐Ÿœ๏ธ desert photo warm saharah +๐Ÿ๏ธ desert island photo tropical mojito +๐Ÿž๏ธ national park photo environment nature +๐ŸŸ๏ธ stadium photo place sports concert venue +๐Ÿ›๏ธ classical building art culture history +๐Ÿ—๏ธ building construction wip working progress +๐Ÿงฑ brick bricks +๐Ÿ˜๏ธ houses buildings photo +๐Ÿš๏ธ derelict house abandon evict broken building +๐Ÿ  house building home +๐Ÿก house with garden home plant nature +๐Ÿข office building building bureau work +๐Ÿฃ japanese post office building envelope communication +๐Ÿค post office building email +๐Ÿฅ hospital building health surgery doctor +๐Ÿฆ bank building money sales cash business enterprise +๐Ÿจ hotel building accomodation checkin +๐Ÿฉ love hotel like affection dating +๐Ÿช convenience store building shopping groceries +๐Ÿซ school building student education learn teach +๐Ÿฌ department store building shopping mall +๐Ÿญ factory building industry pollution smoke +๐Ÿฏ japanese castle photo building +๐Ÿฐ castle building royalty history +๐Ÿ’’ wedding love like affection couple marriage bride groom +๐Ÿ—ผ tokyo tower photo japanese +๐Ÿ—ฝ statue of liberty american newyork +โ›ช church building religion christ +๐Ÿ•Œ mosque islam worship minaret +๐Ÿ›• hindu temple religion +๐Ÿ• synagogue judaism worship temple jewish +โ›ฉ๏ธ shinto shrine temple japan kyoto +๐Ÿ•‹ kaaba mecca mosque islam +โ›ฒ fountain photo summer water fresh +โ›บ tent photo camping outdoors +๐ŸŒ foggy photo mountain +๐ŸŒƒ night with stars evening city downtown +๐Ÿ™๏ธ cityscape photo night life urban +๐ŸŒ„ sunrise over mountains view vacation photo +๐ŸŒ… sunrise morning view vacation photo +๐ŸŒ† cityscape at dusk photo evening sky buildings +๐ŸŒ‡ sunset photo good morning dawn +๐ŸŒ‰ bridge at night photo sanfrancisco +โ™จ๏ธ hot springs bath warm relax +๐ŸŽ  carousel horse photo carnival +๐ŸŽก ferris wheel photo carnival londoneye +๐ŸŽข roller coaster carnival playground photo fun +๐Ÿ’ˆ barber pole hair salon style +๐ŸŽช circus tent festival carnival party +๐Ÿš‚ locomotive transportation vehicle train +๐Ÿšƒ railway car transportation vehicle +๐Ÿš„ high speed train transportation vehicle +๐Ÿš… bullet train transportation vehicle speed fast public travel +๐Ÿš† train transportation vehicle +๐Ÿš‡ metro transportation blue-square mrt underground tube +๐Ÿšˆ light rail transportation vehicle +๐Ÿš‰ station transportation vehicle public +๐ŸšŠ tram transportation vehicle +๐Ÿš monorail transportation vehicle +๐Ÿšž mountain railway transportation vehicle +๐Ÿš‹ tram car transportation vehicle carriage public travel +๐ŸšŒ bus car vehicle transportation +๐Ÿš oncoming bus vehicle transportation +๐ŸšŽ trolleybus bart transportation vehicle +๐Ÿš minibus vehicle car transportation +๐Ÿš‘ ambulance health 911 hospital +๐Ÿš’ fire engine transportation cars vehicle +๐Ÿš“ police car vehicle cars transportation law legal enforcement +๐Ÿš” oncoming police car vehicle law legal enforcement 911 +๐Ÿš• taxi uber vehicle cars transportation +๐Ÿš– oncoming taxi vehicle cars uber +๐Ÿš— automobile red transportation vehicle +๐Ÿš˜ oncoming automobile car vehicle transportation +๐Ÿš™ sport utility vehicle transportation vehicle +๐Ÿšš delivery truck cars transportation +๐Ÿš› articulated lorry vehicle cars transportation express +๐Ÿšœ tractor vehicle car farming agriculture +๐ŸŽ๏ธ racing car sports race fast formula f1 +๐Ÿ๏ธ motorcycle race sports fast +๐Ÿ›ต motor scooter vehicle vespa sasha +๐Ÿฆฝ manual wheelchair accessibility +๐Ÿฆผ motorized wheelchair accessibility +๐Ÿ›บ auto rickshaw move transportation +๐Ÿšฒ bicycle sports bicycle exercise hipster +๐Ÿ›ด kick scooter vehicle kick razor +๐Ÿ›น skateboard board +๐Ÿš bus stop transportation wait +๐Ÿ›ฃ๏ธ motorway road cupertino interstate highway +๐Ÿ›ค๏ธ railway track train transportation +๐Ÿ›ข๏ธ oil drum barrell +โ›ฝ fuel pump gas station petroleum +๐Ÿšจ police car light police ambulance 911 emergency alert error pinged law legal +๐Ÿšฅ horizontal traffic light transportation signal +๐Ÿšฆ vertical traffic light transportation driving +๐Ÿ›‘ stop sign stop +๐Ÿšง construction wip progress caution warning +โš“ anchor ship ferry sea boat +โ›ต sailboat ship summer transportation water sailing +๐Ÿ›ถ canoe boat paddle water ship +๐Ÿšค speedboat ship transportation vehicle summer +๐Ÿ›ณ๏ธ passenger ship yacht cruise ferry +โ›ด๏ธ ferry boat ship yacht +๐Ÿ›ฅ๏ธ motor boat ship +๐Ÿšข ship transportation titanic deploy +โœˆ๏ธ airplane vehicle transportation flight fly +๐Ÿ›ฉ๏ธ small airplane flight transportation fly vehicle +๐Ÿ›ซ airplane departure airport flight landing +๐Ÿ›ฌ airplane arrival airport flight boarding +๐Ÿช‚ parachute fly glide +๐Ÿ’บ seat sit airplane transport bus flight fly +๐Ÿš helicopter transportation vehicle fly +๐ŸšŸ suspension railway vehicle transportation +๐Ÿš  mountain cableway transportation vehicle ski +๐Ÿšก aerial tramway transportation vehicle ski +๐Ÿ›ฐ๏ธ satellite communication gps orbit spaceflight NASA ISS +๐Ÿš€ rocket launch ship staffmode NASA outer space outer space fly +๐Ÿ›ธ flying saucer transportation vehicle ufo +๐Ÿ›Ž๏ธ bellhop bell service +๐Ÿงณ luggage packing travel +โŒ› hourglass done time clock oldschool limit exam quiz test +โณ hourglass not done oldschool time countdown +โŒš watch time accessories +โฐ alarm clock time wake +โฑ๏ธ stopwatch time deadline +โฒ๏ธ timer clock alarm +๐Ÿ•ฐ๏ธ mantelpiece clock time +๐Ÿ•› twelve o clock time noon midnight midday late early schedule +๐Ÿ•ง twelve thirty time late early schedule +๐Ÿ• one o clock time late early schedule +๐Ÿ•œ one thirty time late early schedule +๐Ÿ•‘ two o clock time late early schedule +๐Ÿ• two thirty time late early schedule +๐Ÿ•’ three o clock time late early schedule +๐Ÿ•ž three thirty time late early schedule +๐Ÿ•“ four o clock time late early schedule +๐Ÿ•Ÿ four thirty time late early schedule +๐Ÿ•” five o clock time late early schedule +๐Ÿ•  five thirty time late early schedule +๐Ÿ•• six o clock time late early schedule dawn dusk +๐Ÿ•ก six thirty time late early schedule +๐Ÿ•– seven o clock time late early schedule +๐Ÿ•ข seven thirty time late early schedule +๐Ÿ•— eight o clock time late early schedule +๐Ÿ•ฃ eight thirty time late early schedule +๐Ÿ•˜ nine o clock time late early schedule +๐Ÿ•ค nine thirty time late early schedule +๐Ÿ•™ ten o clock time late early schedule +๐Ÿ•ฅ ten thirty time late early schedule +๐Ÿ•š eleven o clock time late early schedule +๐Ÿ•ฆ eleven thirty time late early schedule +๐ŸŒ‘ new moon nature twilight planet space night evening sleep +๐ŸŒ’ waxing crescent moon nature twilight planet space night evening sleep +๐ŸŒ“ first quarter moon nature twilight planet space night evening sleep +๐ŸŒ” waxing gibbous moon nature night sky gray twilight planet space evening sleep +๐ŸŒ• full moon nature yellow twilight planet space night evening sleep +๐ŸŒ– waning gibbous moon nature twilight planet space night evening sleep waxing gibbous moon +๐ŸŒ— last quarter moon nature twilight planet space night evening sleep +๐ŸŒ˜ waning crescent moon nature twilight planet space night evening sleep +๐ŸŒ™ crescent moon night sleep sky evening magic +๐ŸŒš new moon face nature twilight planet space night evening sleep +๐ŸŒ› first quarter moon face nature twilight planet space night evening sleep +๐ŸŒœ last quarter moon face nature twilight planet space night evening sleep +๐ŸŒก๏ธ thermometer weather temperature hot cold +โ˜€๏ธ sun weather nature brightness summer beach spring +๐ŸŒ full moon face nature twilight planet space night evening sleep +๐ŸŒž sun with face nature morning sky +๐Ÿช ringed planet outerspace +โญ star night yellow +๐ŸŒŸ glowing star night sparkle awesome good magic +๐ŸŒ  shooting star night photo +๐ŸŒŒ milky way photo space stars +โ˜๏ธ cloud weather sky +โ›… sun behind cloud weather nature cloudy morning fall spring +โ›ˆ๏ธ cloud with lightning and rain weather lightning +๐ŸŒค๏ธ sun behind small cloud weather +๐ŸŒฅ๏ธ sun behind large cloud weather +๐ŸŒฆ๏ธ sun behind rain cloud weather +๐ŸŒง๏ธ cloud with rain weather +๐ŸŒจ๏ธ cloud with snow weather +๐ŸŒฉ๏ธ cloud with lightning weather thunder +๐ŸŒช๏ธ tornado weather cyclone twister +๐ŸŒซ๏ธ fog weather +๐ŸŒฌ๏ธ wind face gust air +๐ŸŒ€ cyclone weather swirl blue cloud vortex spiral whirlpool spin tornado hurricane typhoon +๐ŸŒˆ rainbow nature happy unicorn face photo sky spring +๐ŸŒ‚ closed umbrella weather rain drizzle +โ˜‚๏ธ umbrella weather spring +โ˜” umbrella with rain drops rainy weather spring +โ›ฑ๏ธ umbrella on ground weather summer +โšก high voltage thunder weather lightning bolt fast +โ„๏ธ snowflake winter season cold weather christmas xmas +โ˜ƒ๏ธ snowman winter season cold weather christmas xmas frozen +โ›„ snowman without snow winter season cold weather christmas xmas frozen without snow +โ˜„๏ธ comet space +๐Ÿ”ฅ fire hot cook flame +๐Ÿ’ง droplet water drip faucet spring +๐ŸŒŠ water wave sea water wave nature tsunami disaster +๐ŸŽƒ jack o lantern halloween light pumpkin creepy fall +๐ŸŽ„ christmas tree festival vacation december xmas celebration +๐ŸŽ† fireworks photo festival carnival congratulations +๐ŸŽ‡ sparkler stars night shine +๐Ÿงจ firecracker dynamite boom explode explosion explosive +โœจ sparkles stars shine shiny cool awesome good magic +๐ŸŽˆ balloon party celebration birthday circus +๐ŸŽ‰ party popper party congratulations birthday magic circus celebration tada +๐ŸŽŠ confetti ball festival party birthday circus +๐ŸŽ‹ tanabata tree plant nature branch summer +๐ŸŽ pine decoration plant nature vegetable panda pine decoration +๐ŸŽŽ japanese dolls japanese toy kimono +๐ŸŽ carp streamer fish japanese koinobori carp banner +๐ŸŽ wind chime nature ding spring bell +๐ŸŽ‘ moon viewing ceremony photo japan asia tsukimi +๐Ÿงง red envelope gift +๐ŸŽ€ ribbon decoration pink girl bowtie +๐ŸŽ wrapped gift present birthday christmas xmas +๐ŸŽ—๏ธ reminder ribbon sports cause support awareness +๐ŸŽŸ๏ธ admission tickets sports concert entrance +๐ŸŽซ ticket event concert pass +๐ŸŽ–๏ธ military medal award winning army +๐Ÿ† trophy win award contest place ftw ceremony +๐Ÿ… sports medal award winning +๐Ÿฅ‡ 1st place medal award winning first +๐Ÿฅˆ 2nd place medal award second +๐Ÿฅ‰ 3rd place medal award third +โšฝ soccer ball sports football +โšพ baseball sports balls +๐ŸฅŽ softball sports balls +๐Ÿ€ basketball sports balls NBA +๐Ÿ volleyball sports balls +๐Ÿˆ american football sports balls NFL +๐Ÿ‰ rugby football sports team +๐ŸŽพ tennis sports balls green +๐Ÿฅ flying disc sports frisbee ultimate +๐ŸŽณ bowling sports fun play +๐Ÿ cricket game sports +๐Ÿ‘ field hockey sports +๐Ÿ’ ice hockey sports +๐Ÿฅ lacrosse sports ball stick +๐Ÿ“ ping pong sports pingpong +๐Ÿธ badminton sports +๐ŸฅŠ boxing glove sports fighting +๐Ÿฅ‹ martial arts uniform judo karate taekwondo +๐Ÿฅ… goal net sports +โ›ณ flag in hole sports business flag hole summer +โ›ธ๏ธ ice skate sports +๐ŸŽฃ fishing pole food hobby summer +๐Ÿคฟ diving mask sport ocean +๐ŸŽฝ running shirt play pageant +๐ŸŽฟ skis sports winter cold snow +๐Ÿ›ท sled sleigh luge toboggan +๐ŸฅŒ curling stone sports +๐ŸŽฏ direct hit game play bar target bullseye +๐Ÿช€ yo yo toy +๐Ÿช kite wind fly +๐ŸŽฑ pool 8 ball pool hobby game luck magic +๐Ÿ”ฎ crystal ball disco party magic circus fortune teller +๐Ÿงฟ nazar amulet bead charm +๐ŸŽฎ video game play console PS4 controller +๐Ÿ•น๏ธ joystick game play +๐ŸŽฐ slot machine bet gamble vegas fruit machine luck casino +๐ŸŽฒ game die dice random tabletop play luck +๐Ÿงฉ puzzle piece interlocking puzzle piece +๐Ÿงธ teddy bear plush stuffed +โ™ ๏ธ spade suit poker cards suits magic +โ™ฅ๏ธ heart suit poker cards magic suits +โ™ฆ๏ธ diamond suit poker cards magic suits +โ™ฃ๏ธ club suit poker cards magic suits +โ™Ÿ๏ธ chess pawn expendable +๐Ÿƒ joker poker cards game play magic +๐Ÿ€„ mahjong red dragon game play chinese kanji +๐ŸŽด flower playing cards game sunset red +๐ŸŽญ performing arts acting theater drama +๐Ÿ–ผ๏ธ framed picture photography +๐ŸŽจ artist palette design paint draw colors +๐Ÿงต thread needle sewing spool string +๐Ÿงถ yarn ball crochet knit +๐Ÿ‘“ glasses fashion accessories eyesight nerdy dork geek +๐Ÿ•ถ๏ธ sunglasses face cool accessories +๐Ÿฅฝ goggles eyes protection safety +๐Ÿฅผ lab coat doctor experiment scientist chemist +๐Ÿฆบ safety vest protection +๐Ÿ‘” necktie shirt suitup formal fashion cloth business +๐Ÿ‘• t shirt fashion cloth casual shirt tee +๐Ÿ‘– jeans fashion shopping +๐Ÿงฃ scarf neck winter clothes +๐Ÿงค gloves hands winter clothes +๐Ÿงฅ coat jacket +๐Ÿงฆ socks stockings clothes +๐Ÿ‘— dress clothes fashion shopping +๐Ÿ‘˜ kimono dress fashion women female japanese +๐Ÿฅป sari dress +๐Ÿฉฑ one piece swimsuit fashion +๐Ÿฉฒ briefs clothing +๐Ÿฉณ shorts clothing +๐Ÿ‘™ bikini swimming female woman girl fashion beach summer +๐Ÿ‘š woman s clothes fashion shopping bags female +๐Ÿ‘› purse fashion accessories money sales shopping +๐Ÿ‘œ handbag fashion accessory accessories shopping +๐Ÿ‘ clutch bag bag accessories shopping +๐Ÿ›๏ธ shopping bags mall buy purchase +๐ŸŽ’ backpack student education bag backpack +๐Ÿ‘ž man s shoe fashion male +๐Ÿ‘Ÿ running shoe shoes sports sneakers +๐Ÿฅพ hiking boot backpacking camping hiking +๐Ÿฅฟ flat shoe ballet slip-on slipper +๐Ÿ‘  high heeled shoe fashion shoes female pumps stiletto +๐Ÿ‘ก woman s sandal shoes fashion flip flops +๐Ÿฉฐ ballet shoes dance +๐Ÿ‘ข woman s boot shoes fashion +๐Ÿ‘‘ crown king kod leader royalty lord +๐Ÿ‘’ woman s hat fashion accessories female lady spring +๐ŸŽฉ top hat magic gentleman classy circus +๐ŸŽ“ graduation cap school college degree university graduation cap hat legal learn education +๐Ÿงข billed cap cap baseball +โ›‘๏ธ rescue worker s helmet construction build +๐Ÿ“ฟ prayer beads dhikr religious +๐Ÿ’„ lipstick female girl fashion woman +๐Ÿ’ ring wedding propose marriage valentines diamond fashion jewelry gem engagement +๐Ÿ’Ž gem stone blue ruby diamond jewelry +๐Ÿ”‡ muted speaker sound volume silence quiet +๐Ÿ”ˆ speaker low volume sound volume silence broadcast +๐Ÿ”‰ speaker medium volume volume speaker broadcast +๐Ÿ”Š speaker high volume volume noise noisy speaker broadcast +๐Ÿ“ข loudspeaker volume sound +๐Ÿ“ฃ megaphone sound speaker volume +๐Ÿ“ฏ postal horn instrument music +๐Ÿ”” bell sound notification christmas xmas chime +๐Ÿ”• bell with slash sound volume mute quiet silent +๐ŸŽผ musical score treble clef compose +๐ŸŽต musical note score tone sound +๐ŸŽถ musical notes music score +๐ŸŽ™๏ธ studio microphone sing recording artist talkshow +๐ŸŽš๏ธ level slider scale +๐ŸŽ›๏ธ control knobs dial +๐ŸŽค microphone sound music PA sing talkshow +๐ŸŽง headphone music score gadgets +๐Ÿ“ป radio communication music podcast program +๐ŸŽท saxophone music instrument jazz blues +๐ŸŽธ guitar music instrument +๐ŸŽน musical keyboard piano instrument compose +๐ŸŽบ trumpet music brass +๐ŸŽป violin music instrument orchestra symphony +๐Ÿช• banjo music instructment +๐Ÿฅ drum music instrument drumsticks snare +๐Ÿ“ฑ mobile phone technology apple gadgets dial +๐Ÿ“ฒ mobile phone with arrow iphone incoming +โ˜Ž๏ธ telephone technology communication dial telephone +๐Ÿ“ž telephone receiver technology communication dial +๐Ÿ“Ÿ pager bbcall oldschool 90s +๐Ÿ“  fax machine communication technology +๐Ÿ”‹ battery power energy sustain +๐Ÿ”Œ electric plug charger power +๐Ÿ’ป laptop technology laptop screen display monitor +๐Ÿ–ฅ๏ธ desktop computer technology computing screen +๐Ÿ–จ๏ธ printer paper ink +โŒจ๏ธ keyboard technology computer type input text +๐Ÿ–ฑ๏ธ computer mouse click +๐Ÿ–ฒ๏ธ trackball technology trackpad +๐Ÿ’ฝ computer disk technology record data disk 90s +๐Ÿ’พ floppy disk oldschool technology save 90s 80s +๐Ÿ’ฟ optical disk technology dvd disk disc 90s +๐Ÿ“€ dvd cd disk disc +๐Ÿงฎ abacus calculation +๐ŸŽฅ movie camera film record +๐ŸŽž๏ธ film frames movie +๐Ÿ“ฝ๏ธ film projector video tape record movie +๐ŸŽฌ clapper board movie film record +๐Ÿ“บ television technology program oldschool show television +๐Ÿ“ท camera gadgets photography +๐Ÿ“ธ camera with flash photography gadgets +๐Ÿ“น video camera film record +๐Ÿ“ผ videocassette record video oldschool 90s 80s +๐Ÿ” magnifying glass tilted left search zoom find detective +๐Ÿ”Ž magnifying glass tilted right search zoom find detective +๐Ÿ•ฏ๏ธ candle fire wax +๐Ÿ’ก light bulb light electricity idea +๐Ÿ”ฆ flashlight dark camping sight night +๐Ÿฎ red paper lantern light paper halloween spooky +๐Ÿช” diya lamp lighting +๐Ÿ“” notebook with decorative cover classroom notes record paper study +๐Ÿ“• closed book read library knowledge textbook learn +๐Ÿ“– open book book read library knowledge literature learn study +๐Ÿ“— green book read library knowledge study +๐Ÿ“˜ blue book read library knowledge learn study +๐Ÿ“™ orange book read library knowledge textbook study +๐Ÿ“š books literature library study +๐Ÿ““ notebook stationery record notes paper study +๐Ÿ“’ ledger notes paper +๐Ÿ“ƒ page with curl documents office paper +๐Ÿ“œ scroll documents ancient history paper +๐Ÿ“„ page facing up documents office paper information +๐Ÿ“ฐ newspaper press headline +๐Ÿ—ž๏ธ rolled up newspaper press headline +๐Ÿ“‘ bookmark tabs favorite save order tidy +๐Ÿ”– bookmark favorite label save +๐Ÿท๏ธ label sale tag +๐Ÿ’ฐ money bag dollar payment coins sale +๐Ÿ’ด yen banknote money sales japanese dollar currency +๐Ÿ’ต dollar banknote money sales bill currency +๐Ÿ’ถ euro banknote money sales dollar currency +๐Ÿ’ท pound banknote british sterling money sales bills uk england currency +๐Ÿ’ธ money with wings dollar bills payment sale +๐Ÿ’ณ credit card money sales dollar bill payment shopping +๐Ÿงพ receipt accounting expenses +๐Ÿ’น chart increasing with yen green-square graph presentation stats +๐Ÿ’ฑ currency exchange money sales dollar travel +๐Ÿ’ฒ heavy dollar sign money sales payment currency buck +โœ‰๏ธ envelope letter postal inbox communication +๐Ÿ“ง e mail communication inbox +๐Ÿ“จ incoming envelope email inbox +๐Ÿ“ฉ envelope with arrow email communication +๐Ÿ“ค outbox tray inbox email +๐Ÿ“ฅ inbox tray email documents +๐Ÿ“ฆ package mail gift cardboard box moving +๐Ÿ“ซ closed mailbox with raised flag email inbox communication +๐Ÿ“ช closed mailbox with lowered flag email communication inbox +๐Ÿ“ฌ open mailbox with raised flag email inbox communication +๐Ÿ“ญ open mailbox with lowered flag email inbox +๐Ÿ“ฎ postbox email letter envelope +๐Ÿ—ณ๏ธ ballot box with ballot election vote +โœ๏ธ pencil stationery write paper writing school study +โœ’๏ธ black nib pen stationery writing write +๐Ÿ–‹๏ธ fountain pen stationery writing write +๐Ÿ–Š๏ธ pen stationery writing write +๐Ÿ–Œ๏ธ paintbrush drawing creativity art +๐Ÿ–๏ธ crayon drawing creativity +๐Ÿ“ memo write documents stationery pencil paper writing legal exam quiz test study compose +๐Ÿ’ผ briefcase business documents work law legal job career +๐Ÿ“ file directory documents business office +๐Ÿ“‚ open file directory documents load +๐Ÿ—‚๏ธ card index dividers organizing business stationery +๐Ÿ“… calendar calendar schedule +๐Ÿ“† tear off calendar schedule date planning +๐Ÿ—’๏ธ spiral notepad memo stationery +๐Ÿ—“๏ธ spiral calendar date schedule planning +๐Ÿ“‡ card index business stationery +๐Ÿ“ˆ chart increasing graph presentation stats recovery business economics money sales good success +๐Ÿ“‰ chart decreasing graph presentation stats recession business economics money sales bad failure +๐Ÿ“Š bar chart graph presentation stats +๐Ÿ“‹ clipboard stationery documents +๐Ÿ“Œ pushpin stationery mark here +๐Ÿ“ round pushpin stationery location map here +๐Ÿ“Ž paperclip documents stationery +๐Ÿ–‡๏ธ linked paperclips documents stationery +๐Ÿ“ straight ruler stationery calculate length math school drawing architect sketch +๐Ÿ“ triangular ruler stationery math architect sketch +โœ‚๏ธ scissors stationery cut +๐Ÿ—ƒ๏ธ card file box business stationery +๐Ÿ—„๏ธ file cabinet filing organizing +๐Ÿ—‘๏ธ wastebasket bin trash rubbish garbage toss +๐Ÿ”’ locked security password padlock +๐Ÿ”“ unlocked privacy security +๐Ÿ” locked with pen security secret +๐Ÿ” locked with key security privacy +๐Ÿ”‘ key lock door password +๐Ÿ—๏ธ old key lock door password +๐Ÿ”จ hammer tools build create +๐Ÿช“ axe tool chop cut +โ›๏ธ pick tools dig +โš’๏ธ hammer and pick tools build create +๐Ÿ› ๏ธ hammer and wrench tools build create +๐Ÿ—ก๏ธ dagger weapon +โš”๏ธ crossed swords weapon +๐Ÿ”ซ pistol violence weapon pistol revolver +๐Ÿน bow and arrow sports +๐Ÿ›ก๏ธ shield protection security +๐Ÿ”ง wrench tools diy ikea fix maintainer +๐Ÿ”ฉ nut and bolt handy tools fix +โš™๏ธ gear cog +๐Ÿ—œ๏ธ clamp tool +โš–๏ธ balance scale law fairness weight +๐Ÿฆฏ probing cane accessibility +๐Ÿ”— link rings url +โ›“๏ธ chains lock arrest +๐Ÿงฐ toolbox tools diy fix maintainer mechanic +๐Ÿงฒ magnet attraction magnetic +โš—๏ธ alembic distilling science experiment chemistry +๐Ÿงช test tube chemistry experiment lab science +๐Ÿงซ petri dish bacteria biology culture lab +๐Ÿงฌ dna biologist genetics life +๐Ÿ”ฌ microscope laboratory experiment zoomin science study +๐Ÿ”ญ telescope stars space zoom science astronomy +๐Ÿ“ก satellite antenna communication future radio space +๐Ÿ’‰ syringe health hospital drugs blood medicine needle doctor nurse +๐Ÿฉธ drop of blood period hurt harm wound +๐Ÿ’Š pill health medicine doctor pharmacy drug +๐Ÿฉน adhesive bandage heal +๐Ÿฉบ stethoscope health +๐Ÿšช door house entry exit +๐Ÿ›๏ธ bed sleep rest +๐Ÿ›‹๏ธ couch and lamp read chill +๐Ÿช‘ chair sit furniture +๐Ÿšฝ toilet restroom wc washroom bathroom potty +๐Ÿšฟ shower clean water bathroom +๐Ÿ› bathtub clean shower bathroom +๐Ÿช’ razor cut +๐Ÿงด lotion bottle moisturizer sunscreen +๐Ÿงท safety pin diaper +๐Ÿงน broom cleaning sweeping witch +๐Ÿงบ basket laundry +๐Ÿงป roll of paper roll +๐Ÿงผ soap bar bathing cleaning lather +๐Ÿงฝ sponge absorbing cleaning porous +๐Ÿงฏ fire extinguisher quench +๐Ÿ›’ shopping cart trolley +๐Ÿšฌ cigarette kills tobacco cigarette joint smoke +โšฐ๏ธ coffin vampire dead die death rip graveyard cemetery casket funeral box +โšฑ๏ธ funeral urn dead die death rip ashes +๐Ÿ—ฟ moai rock easter island moai +๐Ÿง atm sign money sales cash blue-square payment bank +๐Ÿšฎ litter in bin sign blue-square sign human info +๐Ÿšฐ potable water blue-square liquid restroom cleaning faucet +โ™ฟ wheelchair symbol blue-square disabled accessibility +๐Ÿšน men s room toilet restroom wc blue-square gender male +๐Ÿšบ women s room purple-square woman female toilet loo restroom gender +๐Ÿšป restroom blue-square toilet refresh wc gender +๐Ÿšผ baby symbol orange-square child +๐Ÿšพ water closet toilet restroom blue-square +๐Ÿ›‚ passport control custom blue-square +๐Ÿ›ƒ customs passport border blue-square +๐Ÿ›„ baggage claim blue-square airport transport +๐Ÿ›… left luggage blue-square travel +โš ๏ธ warning exclamation wip alert error problem issue +๐Ÿšธ children crossing school warning danger sign driving yellow-diamond +โ›” no entry limit security privacy bad denied stop circle +๐Ÿšซ prohibited forbid stop limit denied disallow circle +๐Ÿšณ no bicycles cyclist prohibited circle +๐Ÿšญ no smoking cigarette blue-square smell smoke +๐Ÿšฏ no littering trash bin garbage circle +๐Ÿšฑ non potable water drink faucet tap circle +๐Ÿšท no pedestrians rules crossing walking circle +๐Ÿ“ต no mobile phones iphone mute circle +๐Ÿ”ž no one under eighteen 18 drink pub night minor circle +โ˜ข๏ธ radioactive nuclear danger +โ˜ฃ๏ธ biohazard danger +โฌ†๏ธ up arrow blue-square continue top direction +โ†—๏ธ up right arrow blue-square point direction diagonal northeast +โžก๏ธ right arrow blue-square next +โ†˜๏ธ down right arrow blue-square direction diagonal southeast +โฌ‡๏ธ down arrow blue-square direction bottom +โ†™๏ธ down left arrow blue-square direction diagonal southwest +โฌ…๏ธ left arrow blue-square previous back +โ†–๏ธ up left arrow blue-square point direction diagonal northwest +โ†•๏ธ up down arrow blue-square direction way vertical +โ†”๏ธ left right arrow shape direction horizontal sideways +โ†ฉ๏ธ right arrow curving left back return blue-square undo enter +โ†ช๏ธ left arrow curving right blue-square return rotate direction +โคด๏ธ right arrow curving up blue-square direction top +โคต๏ธ right arrow curving down blue-square direction bottom +๐Ÿ”ƒ clockwise vertical arrows sync cycle round repeat +๐Ÿ”„ counterclockwise arrows button blue-square sync cycle +๐Ÿ”™ back arrow arrow words return +๐Ÿ”š end arrow words arrow +๐Ÿ”› on arrow arrow words +๐Ÿ”œ soon arrow arrow words +๐Ÿ” top arrow words blue-square +๐Ÿ› place of worship religion church temple prayer +โš›๏ธ atom symbol science physics chemistry +๐Ÿ•‰๏ธ om hinduism buddhism sikhism jainism +โœก๏ธ star of david judaism +โ˜ธ๏ธ wheel of dharma hinduism buddhism sikhism jainism +โ˜ฏ๏ธ yin yang balance +โœ๏ธ latin cross christianity +โ˜ฆ๏ธ orthodox cross suppedaneum religion +โ˜ช๏ธ star and crescent islam +โ˜ฎ๏ธ peace symbol hippie +๐Ÿ•Ž menorah hanukkah candles jewish +๐Ÿ”ฏ dotted six pointed star purple-square religion jewish hexagram +โ™ˆ aries sign purple-square zodiac astrology +โ™‰ taurus purple-square sign zodiac astrology +โ™Š gemini sign zodiac purple-square astrology +โ™‹ cancer sign zodiac purple-square astrology +โ™Œ leo sign purple-square zodiac astrology +โ™ virgo sign zodiac purple-square astrology +โ™Ž libra sign purple-square zodiac astrology +โ™ scorpio sign zodiac purple-square astrology scorpio +โ™ sagittarius sign zodiac purple-square astrology +โ™‘ capricorn sign zodiac purple-square astrology +โ™’ aquarius sign purple-square zodiac astrology +โ™“ pisces purple-square sign zodiac astrology +โ›Ž ophiuchus sign purple-square constellation astrology +๐Ÿ”€ shuffle tracks button blue-square shuffle music random +๐Ÿ” repeat button loop record +๐Ÿ”‚ repeat single button blue-square loop +โ–ถ๏ธ play button blue-square right direction play +โฉ fast forward button blue-square play speed continue +โญ๏ธ next track button forward next blue-square +โฏ๏ธ play or pause button blue-square play pause +โ—€๏ธ reverse button blue-square left direction +โช fast reverse button play blue-square +โฎ๏ธ last track button backward +๐Ÿ”ผ upwards button blue-square triangle direction point forward top +โซ fast up button blue-square direction top +๐Ÿ”ฝ downwards button blue-square direction bottom +โฌ fast down button blue-square direction bottom +โธ๏ธ pause button pause blue-square +โน๏ธ stop button blue-square +โบ๏ธ record button blue-square +โ๏ธ eject button blue-square +๐ŸŽฆ cinema blue-square record film movie curtain stage theater +๐Ÿ”… dim button sun afternoon warm summer +๐Ÿ”† bright button sun light +๐Ÿ“ถ antenna bars blue-square reception phone internet connection wifi bluetooth bars +๐Ÿ“ณ vibration mode orange-square phone +๐Ÿ“ด mobile phone off mute orange-square silence quiet +โ™€๏ธ female sign woman women lady girl +โ™‚๏ธ male sign man boy men +โš•๏ธ medical symbol health hospital +โ™พ๏ธ infinity forever +โ™ป๏ธ recycling symbol arrow environment garbage trash +โšœ๏ธ fleur de lis decorative scout +๐Ÿ”ฑ trident emblem weapon spear +๐Ÿ“› name badge fire forbid +๐Ÿ”ฐ japanese symbol for beginner badge shield +โญ• hollow red circle circle round +โœ… check mark button green-square ok agree vote election answer tick +โ˜‘๏ธ check box with check ok agree confirm black-square vote election yes tick +โœ”๏ธ check mark ok nike answer yes tick +โœ–๏ธ multiplication sign math calculation +โŒ cross mark no delete remove cancel red +โŽ cross mark button x green-square no deny +โž• plus sign math calculation addition more increase +โž– minus sign math calculation subtract less +โž— division sign divide math calculation +โžฐ curly loop scribble draw shape squiggle +โžฟ double curly loop tape cassette +ใ€ฝ๏ธ part alternation mark graph presentation stats business economics bad +โœณ๏ธ eight spoked asterisk star sparkle green-square +โœด๏ธ eight pointed star orange-square shape polygon +โ‡๏ธ sparkle stars green-square awesome good fireworks +โ€ผ๏ธ double exclamation mark exclamation surprise +โ‰๏ธ exclamation question mark wat punctuation surprise +โ“ question mark doubt confused +โ” white question mark doubts gray huh confused +โ• white exclamation mark surprise punctuation gray wow warning +โ— exclamation mark heavy exclamation mark danger surprise punctuation wow warning +ใ€ฐ๏ธ wavy dash draw line moustache mustache squiggle scribble +ยฉ๏ธ copyright ip license circle law legal +ยฎ๏ธ registered alphabet circle +โ„ข๏ธ trade mark trademark brand law legal +ycap symbol blue-square twitter +*๏ธโƒฃ keycap star keycap +0๏ธโƒฃ keycap 0 0 numbers blue-square null +1๏ธโƒฃ keycap 1 blue-square numbers 1 +2๏ธโƒฃ keycap 2 numbers 2 prime blue-square +3๏ธโƒฃ keycap 3 3 numbers prime blue-square +4๏ธโƒฃ keycap 4 4 numbers blue-square +5๏ธโƒฃ keycap 5 5 numbers blue-square prime +6๏ธโƒฃ keycap 6 6 numbers blue-square +7๏ธโƒฃ keycap 7 7 numbers blue-square prime +8๏ธโƒฃ keycap 8 8 blue-square numbers +9๏ธโƒฃ keycap 9 blue-square numbers 9 +๐Ÿ”Ÿ keycap 10 numbers 10 blue-square +๐Ÿ”  input latin uppercase alphabet words blue-square +๐Ÿ”ก input latin lowercase blue-square alphabet +๐Ÿ”ข input numbers numbers blue-square +๐Ÿ”ฃ input symbols blue-square music note ampersand percent glyphs characters +๐Ÿ”ค input latin letters blue-square alphabet +๐Ÿ…ฐ๏ธ a button red-square alphabet letter +๐Ÿ†Ž ab button red-square alphabet +๐Ÿ…ฑ๏ธ b button red-square alphabet letter +๐Ÿ†‘ cl button alphabet words red-square +๐Ÿ†’ cool button words blue-square +๐Ÿ†“ free button blue-square words +โ„น๏ธ information blue-square alphabet letter +๐Ÿ†” id button purple-square words +โ“‚๏ธ circled m alphabet blue-circle letter +๐Ÿ†• new button blue-square words start +๐Ÿ†– ng button blue-square words shape icon +๐Ÿ…พ๏ธ o button alphabet red-square letter +๐Ÿ†— ok button good agree yes blue-square +๐Ÿ…ฟ๏ธ p button cars blue-square alphabet letter +๐Ÿ†˜ sos button help red-square words emergency 911 +๐Ÿ†™ up button blue-square above high +๐Ÿ†š vs button words orange-square +๐Ÿˆ japanese here button blue-square here katakana japanese destination +๐Ÿˆ‚๏ธ japanese service charge button japanese blue-square katakana +๐Ÿˆท๏ธ japanese monthly amount button chinese month moon japanese orange-square kanji +๐Ÿˆถ japanese not free of charge button orange-square chinese have kanji +๐Ÿˆฏ japanese reserved button chinese point green-square kanji +๐Ÿ‰ japanese bargain button chinese kanji obtain get circle +๐Ÿˆน japanese discount button cut divide chinese kanji pink-square +๐Ÿˆš japanese free of charge button nothing chinese kanji japanese orange-square +๐Ÿˆฒ japanese prohibited button kanji japanese chinese forbidden limit restricted red-square +๐Ÿ‰‘ japanese acceptable button ok good chinese kanji agree yes orange-circle +๐Ÿˆธ japanese application button chinese japanese kanji orange-square +๐Ÿˆด japanese passing grade button japanese chinese join kanji red-square +๐Ÿˆณ japanese vacancy button kanji japanese chinese empty sky blue-square +ใŠ—๏ธ japanese congratulations button chinese kanji japanese red-circle +ใŠ™๏ธ japanese secret button privacy chinese sshh kanji red-circle +๐Ÿˆบ japanese open for business button japanese opening hours orange-square +๐Ÿˆต japanese no vacancy button full chinese japanese red-square kanji +๐Ÿ”ด red circle shape error danger +๐ŸŸ  orange circle round +๐ŸŸก yellow circle round +๐ŸŸข green circle round +๐Ÿ”ต blue circle shape icon button +๐ŸŸฃ purple circle round +๐ŸŸค brown circle round +โšซ black circle shape button round +โšช white circle shape round +๐ŸŸฅ red square +๐ŸŸง orange square +๐ŸŸจ yellow square +๐ŸŸฉ green square +๐ŸŸฆ blue square +๐ŸŸช purple square +๐ŸŸซ brown square +โฌ› black large square shape icon button +โฌœ white large square shape icon stone button +โ—ผ๏ธ black medium square shape button icon +โ—ป๏ธ white medium square shape stone icon +โ—พ black medium small square icon shape button +โ—ฝ white medium small square shape stone icon button +โ–ช๏ธ black small square shape icon +โ–ซ๏ธ white small square shape icon +๐Ÿ”ถ large orange diamond shape jewel gem +๐Ÿ”ท large blue diamond shape jewel gem +๐Ÿ”ธ small orange diamond shape jewel gem +๐Ÿ”น small blue diamond shape jewel gem +๐Ÿ”บ red triangle pointed up shape direction up top +๐Ÿ”ป red triangle pointed down shape direction bottom +๐Ÿ’  diamond with a dot jewel blue gem crystal fancy +๐Ÿ”˜ radio button input old music circle +๐Ÿ”ณ white square button shape input +๐Ÿ”ฒ black square button shape input frame +๐Ÿ chequered flag contest finishline race gokart +๐Ÿšฉ triangular flag mark milestone place +๐ŸŽŒ crossed flags japanese nation country border +๐Ÿด black flag pirate +๐Ÿณ๏ธ white flag losing loser lost surrender give up fail +๐Ÿณ๏ธโ€๐ŸŒˆ rainbow flag flag rainbow pride gay lgbt glbt queer homosexual lesbian bisexual transgender +๐Ÿดโ€โ˜ ๏ธ pirate flag skull crossbones flag banner +๐Ÿ‡ฆ๐Ÿ‡จ flag ascension island +๐Ÿ‡ฆ๐Ÿ‡ฉ flag andorra ad flag nation country banner andorra +๐Ÿ‡ฆ๐Ÿ‡ช flag united arab emirates united arab emirates flag nation country banner united arab emirates +๐Ÿ‡ฆ๐Ÿ‡ซ flag afghanistan af flag nation country banner afghanistan +๐Ÿ‡ฆ๐Ÿ‡ฌ flag antigua barbuda antigua barbuda flag nation country banner antigua barbuda +๐Ÿ‡ฆ๐Ÿ‡ฎ flag anguilla ai flag nation country banner anguilla +๐Ÿ‡ฆ๐Ÿ‡ฑ flag albania al flag nation country banner albania +๐Ÿ‡ฆ๐Ÿ‡ฒ flag armenia am flag nation country banner armenia +๐Ÿ‡ฆ๐Ÿ‡ด flag angola ao flag nation country banner angola +๐Ÿ‡ฆ๐Ÿ‡ถ flag antarctica aq flag nation country banner antarctica +๐Ÿ‡ฆ๐Ÿ‡ท flag argentina ar flag nation country banner argentina +๐Ÿ‡ฆ๐Ÿ‡ธ flag american samoa american ws flag nation country banner american samoa +๐Ÿ‡ฆ๐Ÿ‡น flag austria at flag nation country banner austria +๐Ÿ‡ฆ๐Ÿ‡บ flag australia au flag nation country banner australia +๐Ÿ‡ฆ๐Ÿ‡ผ flag aruba aw flag nation country banner aruba +๐Ÿ‡ฆ๐Ÿ‡ฝ flag aland islands ร…land islands flag nation country banner aland islands +๐Ÿ‡ฆ๐Ÿ‡ฟ flag azerbaijan az flag nation country banner azerbaijan +๐Ÿ‡ง๐Ÿ‡ฆ flag bosnia herzegovina bosnia herzegovina flag nation country banner bosnia herzegovina +๐Ÿ‡ง๐Ÿ‡ง flag barbados bb flag nation country banner barbados +๐Ÿ‡ง๐Ÿ‡ฉ flag bangladesh bd flag nation country banner bangladesh +๐Ÿ‡ง๐Ÿ‡ช flag belgium be flag nation country banner belgium +๐Ÿ‡ง๐Ÿ‡ซ flag burkina faso burkina faso flag nation country banner burkina faso +๐Ÿ‡ง๐Ÿ‡ฌ flag bulgaria bg flag nation country banner bulgaria +๐Ÿ‡ง๐Ÿ‡ญ flag bahrain bh flag nation country banner bahrain +๐Ÿ‡ง๐Ÿ‡ฎ flag burundi bi flag nation country banner burundi +๐Ÿ‡ง๐Ÿ‡ฏ flag benin bj flag nation country banner benin +๐Ÿ‡ง๐Ÿ‡ฑ flag st barthelemy saint barthรฉlemy flag nation country banner st barthelemy +๐Ÿ‡ง๐Ÿ‡ฒ flag bermuda bm flag nation country banner bermuda +๐Ÿ‡ง๐Ÿ‡ณ flag brunei bn darussalam flag nation country banner brunei +๐Ÿ‡ง๐Ÿ‡ด flag bolivia bo flag nation country banner bolivia +๐Ÿ‡ง๐Ÿ‡ถ flag caribbean netherlands bonaire flag nation country banner caribbean netherlands +๐Ÿ‡ง๐Ÿ‡ท flag brazil br flag nation country banner brazil +๐Ÿ‡ง๐Ÿ‡ธ flag bahamas bs flag nation country banner bahamas +๐Ÿ‡ง๐Ÿ‡น flag bhutan bt flag nation country banner bhutan +๐Ÿ‡ง๐Ÿ‡ป flag bouvet island norway +๐Ÿ‡ง๐Ÿ‡ผ flag botswana bw flag nation country banner botswana +๐Ÿ‡ง๐Ÿ‡พ flag belarus by flag nation country banner belarus +๐Ÿ‡ง๐Ÿ‡ฟ flag belize bz flag nation country banner belize +๐Ÿ‡จ๐Ÿ‡ฆ flag canada ca flag nation country banner canada +๐Ÿ‡จ๐Ÿ‡จ flag cocos islands cocos keeling islands flag nation country banner cocos islands +๐Ÿ‡จ๐Ÿ‡ฉ flag congo kinshasa congo democratic republic flag nation country banner congo kinshasa +๐Ÿ‡จ๐Ÿ‡ซ flag central african republic central african republic flag nation country banner central african republic +๐Ÿ‡จ๐Ÿ‡ฌ flag congo brazzaville congo flag nation country banner congo brazzaville +๐Ÿ‡จ๐Ÿ‡ญ flag switzerland ch flag nation country banner switzerland +๐Ÿ‡จ๐Ÿ‡ฎ flag cote d ivoire ivory coast flag nation country banner cote d ivoire +๐Ÿ‡จ๐Ÿ‡ฐ flag cook islands cook islands flag nation country banner cook islands +๐Ÿ‡จ๐Ÿ‡ฑ flag chile flag nation country banner chile +๐Ÿ‡จ๐Ÿ‡ฒ flag cameroon cm flag nation country banner cameroon +๐Ÿ‡จ๐Ÿ‡ณ flag china china chinese prc flag country nation banner china +๐Ÿ‡จ๐Ÿ‡ด flag colombia co flag nation country banner colombia +๐Ÿ‡จ๐Ÿ‡ต flag clipperton island +๐Ÿ‡จ๐Ÿ‡ท flag costa rica costa rica flag nation country banner costa rica +๐Ÿ‡จ๐Ÿ‡บ flag cuba cu flag nation country banner cuba +๐Ÿ‡จ๐Ÿ‡ป flag cape verde cabo verde flag nation country banner cape verde +๐Ÿ‡จ๐Ÿ‡ผ flag curacao curaรงao flag nation country banner curacao +๐Ÿ‡จ๐Ÿ‡ฝ flag christmas island christmas island flag nation country banner christmas island +๐Ÿ‡จ๐Ÿ‡พ flag cyprus cy flag nation country banner cyprus +๐Ÿ‡จ๐Ÿ‡ฟ flag czechia cz flag nation country banner czechia +๐Ÿ‡ฉ๐Ÿ‡ช flag germany german nation flag country banner germany +๐Ÿ‡ฉ๐Ÿ‡ฌ flag diego garcia +๐Ÿ‡ฉ๐Ÿ‡ฏ flag djibouti dj flag nation country banner djibouti +๐Ÿ‡ฉ๐Ÿ‡ฐ flag denmark dk flag nation country banner denmark +๐Ÿ‡ฉ๐Ÿ‡ฒ flag dominica dm flag nation country banner dominica +๐Ÿ‡ฉ๐Ÿ‡ด flag dominican republic dominican republic flag nation country banner dominican republic +๐Ÿ‡ฉ๐Ÿ‡ฟ flag algeria dz flag nation country banner algeria +๐Ÿ‡ช๐Ÿ‡ฆ flag ceuta melilla +๐Ÿ‡ช๐Ÿ‡จ flag ecuador ec flag nation country banner ecuador +๐Ÿ‡ช๐Ÿ‡ช flag estonia ee flag nation country banner estonia +๐Ÿ‡ช๐Ÿ‡ฌ flag egypt eg flag nation country banner egypt +๐Ÿ‡ช๐Ÿ‡ญ flag western sahara western sahara flag nation country banner western sahara +๐Ÿ‡ช๐Ÿ‡ท flag eritrea er flag nation country banner eritrea +๐Ÿ‡ช๐Ÿ‡ธ flag spain spain flag nation country banner spain +๐Ÿ‡ช๐Ÿ‡น flag ethiopia et flag nation country banner ethiopia +๐Ÿ‡ช๐Ÿ‡บ flag european union european union flag banner +๐Ÿ‡ซ๐Ÿ‡ฎ flag finland fi flag nation country banner finland +๐Ÿ‡ซ๐Ÿ‡ฏ flag fiji fj flag nation country banner fiji +๐Ÿ‡ซ๐Ÿ‡ฐ flag falkland islands falkland islands malvinas flag nation country banner falkland islands +๐Ÿ‡ซ๐Ÿ‡ฒ flag micronesia micronesia federated states flag nation country banner micronesia +๐Ÿ‡ซ๐Ÿ‡ด flag faroe islands faroe islands flag nation country banner faroe islands +๐Ÿ‡ซ๐Ÿ‡ท flag france banner flag nation france french country france +๐Ÿ‡ฌ๐Ÿ‡ฆ flag gabon ga flag nation country banner gabon +๐Ÿ‡ฌ๐Ÿ‡ง flag united kingdom united kingdom great britain northern ireland flag nation country banner british UK english england union jack united kingdom +๐Ÿ‡ฌ๐Ÿ‡ฉ flag grenada gd flag nation country banner grenada +๐Ÿ‡ฌ๐Ÿ‡ช flag georgia ge flag nation country banner georgia +๐Ÿ‡ฌ๐Ÿ‡ซ flag french guiana french guiana flag nation country banner french guiana +๐Ÿ‡ฌ๐Ÿ‡ฌ flag guernsey gg flag nation country banner guernsey +๐Ÿ‡ฌ๐Ÿ‡ญ flag ghana gh flag nation country banner ghana +๐Ÿ‡ฌ๐Ÿ‡ฎ flag gibraltar gi flag nation country banner gibraltar +๐Ÿ‡ฌ๐Ÿ‡ฑ flag greenland gl flag nation country banner greenland +๐Ÿ‡ฌ๐Ÿ‡ฒ flag gambia gm flag nation country banner gambia +๐Ÿ‡ฌ๐Ÿ‡ณ flag guinea gn flag nation country banner guinea +๐Ÿ‡ฌ๐Ÿ‡ต flag guadeloupe gp flag nation country banner guadeloupe +๐Ÿ‡ฌ๐Ÿ‡ถ flag equatorial guinea equatorial gn flag nation country banner equatorial guinea +๐Ÿ‡ฌ๐Ÿ‡ท flag greece gr flag nation country banner greece +๐Ÿ‡ฌ๐Ÿ‡ธ flag south georgia south sandwich islands south georgia sandwich islands flag nation country banner south georgia south sandwich islands +๐Ÿ‡ฌ๐Ÿ‡น flag guatemala gt flag nation country banner guatemala +๐Ÿ‡ฌ๐Ÿ‡บ flag guam gu flag nation country banner guam +๐Ÿ‡ฌ๐Ÿ‡ผ flag guinea bissau gw bissau flag nation country banner guinea bissau +๐Ÿ‡ฌ๐Ÿ‡พ flag guyana gy flag nation country banner guyana +๐Ÿ‡ญ๐Ÿ‡ฐ flag hong kong sar china hong kong flag nation country banner hong kong sar china +๐Ÿ‡ญ๐Ÿ‡ฒ flag heard mcdonald islands +๐Ÿ‡ญ๐Ÿ‡ณ flag honduras hn flag nation country banner honduras +๐Ÿ‡ญ๐Ÿ‡ท flag croatia hr flag nation country banner croatia +๐Ÿ‡ญ๐Ÿ‡น flag haiti ht flag nation country banner haiti +๐Ÿ‡ญ๐Ÿ‡บ flag hungary hu flag nation country banner hungary +๐Ÿ‡ฎ๐Ÿ‡จ flag canary islands canary islands flag nation country banner canary islands +๐Ÿ‡ฎ๐Ÿ‡ฉ flag indonesia flag nation country banner indonesia +๐Ÿ‡ฎ๐Ÿ‡ช flag ireland ie flag nation country banner ireland +๐Ÿ‡ฎ๐Ÿ‡ฑ flag israel il flag nation country banner israel +๐Ÿ‡ฎ๐Ÿ‡ฒ flag isle of man isle man flag nation country banner isle of man +๐Ÿ‡ฎ๐Ÿ‡ณ flag india in flag nation country banner india +๐Ÿ‡ฎ๐Ÿ‡ด flag british indian ocean territory british indian ocean territory flag nation country banner british indian ocean territory +๐Ÿ‡ฎ๐Ÿ‡ถ flag iraq iq flag nation country banner iraq +๐Ÿ‡ฎ๐Ÿ‡ท flag iran iran islamic republic flag nation country banner iran +๐Ÿ‡ฎ๐Ÿ‡ธ flag iceland is flag nation country banner iceland +๐Ÿ‡ฎ๐Ÿ‡น flag italy italy flag nation country banner italy +๐Ÿ‡ฏ๐Ÿ‡ช flag jersey je flag nation country banner jersey +๐Ÿ‡ฏ๐Ÿ‡ฒ flag jamaica jm flag nation country banner jamaica +๐Ÿ‡ฏ๐Ÿ‡ด flag jordan jo flag nation country banner jordan +๐Ÿ‡ฏ๐Ÿ‡ต flag japan japanese nation flag country banner japan +๐Ÿ‡ฐ๐Ÿ‡ช flag kenya ke flag nation country banner kenya +๐Ÿ‡ฐ๐Ÿ‡ฌ flag kyrgyzstan kg flag nation country banner kyrgyzstan +๐Ÿ‡ฐ๐Ÿ‡ญ flag cambodia kh flag nation country banner cambodia +๐Ÿ‡ฐ๐Ÿ‡ฎ flag kiribati ki flag nation country banner kiribati +๐Ÿ‡ฐ๐Ÿ‡ฒ flag comoros km flag nation country banner comoros +๐Ÿ‡ฐ๐Ÿ‡ณ flag st kitts nevis saint kitts nevis flag nation country banner st kitts nevis +๐Ÿ‡ฐ๐Ÿ‡ต flag north korea north korea nation flag country banner north korea +๐Ÿ‡ฐ๐Ÿ‡ท flag south korea south korea nation flag country banner south korea +๐Ÿ‡ฐ๐Ÿ‡ผ flag kuwait kw flag nation country banner kuwait +๐Ÿ‡ฐ๐Ÿ‡พ flag cayman islands cayman islands flag nation country banner cayman islands +๐Ÿ‡ฐ๐Ÿ‡ฟ flag kazakhstan kz flag nation country banner kazakhstan +๐Ÿ‡ฑ๐Ÿ‡ฆ flag laos lao democratic republic flag nation country banner laos +๐Ÿ‡ฑ๐Ÿ‡ง flag lebanon lb flag nation country banner lebanon +๐Ÿ‡ฑ๐Ÿ‡จ flag st lucia saint lucia flag nation country banner st lucia +๐Ÿ‡ฑ๐Ÿ‡ฎ flag liechtenstein li flag nation country banner liechtenstein +๐Ÿ‡ฑ๐Ÿ‡ฐ flag sri lanka sri lanka flag nation country banner sri lanka +๐Ÿ‡ฑ๐Ÿ‡ท flag liberia lr flag nation country banner liberia +๐Ÿ‡ฑ๐Ÿ‡ธ flag lesotho ls flag nation country banner lesotho +๐Ÿ‡ฑ๐Ÿ‡น flag lithuania lt flag nation country banner lithuania +๐Ÿ‡ฑ๐Ÿ‡บ flag luxembourg lu flag nation country banner luxembourg +๐Ÿ‡ฑ๐Ÿ‡ป flag latvia lv flag nation country banner latvia +๐Ÿ‡ฑ๐Ÿ‡พ flag libya ly flag nation country banner libya +๐Ÿ‡ฒ๐Ÿ‡ฆ flag morocco ma flag nation country banner morocco +๐Ÿ‡ฒ๐Ÿ‡จ flag monaco mc flag nation country banner monaco +๐Ÿ‡ฒ๐Ÿ‡ฉ flag moldova moldova republic flag nation country banner moldova +๐Ÿ‡ฒ๐Ÿ‡ช flag montenegro me flag nation country banner montenegro +๐Ÿ‡ฒ๐Ÿ‡ซ flag st martin +๐Ÿ‡ฒ๐Ÿ‡ฌ flag madagascar mg flag nation country banner madagascar +๐Ÿ‡ฒ๐Ÿ‡ญ flag marshall islands marshall islands flag nation country banner marshall islands +๐Ÿ‡ฒ๐Ÿ‡ฐ flag north macedonia macedonia flag nation country banner north macedonia +๐Ÿ‡ฒ๐Ÿ‡ฑ flag mali ml flag nation country banner mali +๐Ÿ‡ฒ๐Ÿ‡ฒ flag myanmar mm flag nation country banner myanmar +๐Ÿ‡ฒ๐Ÿ‡ณ flag mongolia mn flag nation country banner mongolia +๐Ÿ‡ฒ๐Ÿ‡ด flag macao sar china macao flag nation country banner macao sar china +๐Ÿ‡ฒ๐Ÿ‡ต flag northern mariana islands northern mariana islands flag nation country banner northern mariana islands +๐Ÿ‡ฒ๐Ÿ‡ถ flag martinique mq flag nation country banner martinique +๐Ÿ‡ฒ๐Ÿ‡ท flag mauritania mr flag nation country banner mauritania +๐Ÿ‡ฒ๐Ÿ‡ธ flag montserrat ms flag nation country banner montserrat +๐Ÿ‡ฒ๐Ÿ‡น flag malta mt flag nation country banner malta +๐Ÿ‡ฒ๐Ÿ‡บ flag mauritius mu flag nation country banner mauritius +๐Ÿ‡ฒ๐Ÿ‡ป flag maldives mv flag nation country banner maldives +๐Ÿ‡ฒ๐Ÿ‡ผ flag malawi mw flag nation country banner malawi +๐Ÿ‡ฒ๐Ÿ‡ฝ flag mexico mx flag nation country banner mexico +๐Ÿ‡ฒ๐Ÿ‡พ flag malaysia my flag nation country banner malaysia +๐Ÿ‡ฒ๐Ÿ‡ฟ flag mozambique mz flag nation country banner mozambique +๐Ÿ‡ณ๐Ÿ‡ฆ flag namibia na flag nation country banner namibia +๐Ÿ‡ณ๐Ÿ‡จ flag new caledonia new caledonia flag nation country banner new caledonia +๐Ÿ‡ณ๐Ÿ‡ช flag niger ne flag nation country banner niger +๐Ÿ‡ณ๐Ÿ‡ซ flag norfolk island norfolk island flag nation country banner norfolk island +๐Ÿ‡ณ๐Ÿ‡ฌ flag nigeria flag nation country banner nigeria +๐Ÿ‡ณ๐Ÿ‡ฎ flag nicaragua ni flag nation country banner nicaragua +๐Ÿ‡ณ๐Ÿ‡ฑ flag netherlands nl flag nation country banner netherlands +๐Ÿ‡ณ๐Ÿ‡ด flag norway no flag nation country banner norway +๐Ÿ‡ณ๐Ÿ‡ต flag nepal np flag nation country banner nepal +๐Ÿ‡ณ๐Ÿ‡ท flag nauru nr flag nation country banner nauru +๐Ÿ‡ณ๐Ÿ‡บ flag niue nu flag nation country banner niue +๐Ÿ‡ณ๐Ÿ‡ฟ flag new zealand new zealand flag nation country banner new zealand +๐Ÿ‡ด๐Ÿ‡ฒ flag oman om symbol flag nation country banner oman +๐Ÿ‡ต๐Ÿ‡ฆ flag panama pa flag nation country banner panama +๐Ÿ‡ต๐Ÿ‡ช flag peru pe flag nation country banner peru +๐Ÿ‡ต๐Ÿ‡ซ flag french polynesia french polynesia flag nation country banner french polynesia +๐Ÿ‡ต๐Ÿ‡ฌ flag papua new guinea papua new guinea flag nation country banner papua new guinea +๐Ÿ‡ต๐Ÿ‡ญ flag philippines ph flag nation country banner philippines +๐Ÿ‡ต๐Ÿ‡ฐ flag pakistan pk flag nation country banner pakistan +๐Ÿ‡ต๐Ÿ‡ฑ flag poland pl flag nation country banner poland +๐Ÿ‡ต๐Ÿ‡ฒ flag st pierre miquelon saint pierre miquelon flag nation country banner st pierre miquelon +๐Ÿ‡ต๐Ÿ‡ณ flag pitcairn islands pitcairn flag nation country banner pitcairn islands +๐Ÿ‡ต๐Ÿ‡ท flag puerto rico puerto rico flag nation country banner puerto rico +๐Ÿ‡ต๐Ÿ‡ธ flag palestinian territories palestine palestinian territories flag nation country banner palestinian territories +๐Ÿ‡ต๐Ÿ‡น flag portugal pt flag nation country banner portugal +๐Ÿ‡ต๐Ÿ‡ผ flag palau pw flag nation country banner palau +๐Ÿ‡ต๐Ÿ‡พ flag paraguay py flag nation country banner paraguay +๐Ÿ‡ถ๐Ÿ‡ฆ flag qatar qa flag nation country banner qatar +๐Ÿ‡ท๐Ÿ‡ช flag reunion rรฉunion flag nation country banner reunion +๐Ÿ‡ท๐Ÿ‡ด flag romania ro flag nation country banner romania +๐Ÿ‡ท๐Ÿ‡ธ flag serbia rs flag nation country banner serbia +๐Ÿ‡ท๐Ÿ‡บ flag russia russian federation flag nation country banner russia +๐Ÿ‡ท๐Ÿ‡ผ flag rwanda rw flag nation country banner rwanda +๐Ÿ‡ธ๐Ÿ‡ฆ flag saudi arabia flag nation country banner saudi arabia +๐Ÿ‡ธ๐Ÿ‡ง flag solomon islands solomon islands flag nation country banner solomon islands +๐Ÿ‡ธ๐Ÿ‡จ flag seychelles sc flag nation country banner seychelles +๐Ÿ‡ธ๐Ÿ‡ฉ flag sudan sd flag nation country banner sudan +๐Ÿ‡ธ๐Ÿ‡ช flag sweden se flag nation country banner sweden +๐Ÿ‡ธ๐Ÿ‡ฌ flag singapore sg flag nation country banner singapore +๐Ÿ‡ธ๐Ÿ‡ญ flag st helena saint helena ascension tristan cunha flag nation country banner st helena +๐Ÿ‡ธ๐Ÿ‡ฎ flag slovenia si flag nation country banner slovenia +๐Ÿ‡ธ๐Ÿ‡ฏ flag svalbard jan mayen +๐Ÿ‡ธ๐Ÿ‡ฐ flag slovakia sk flag nation country banner slovakia +๐Ÿ‡ธ๐Ÿ‡ฑ flag sierra leone sierra leone flag nation country banner sierra leone +๐Ÿ‡ธ๐Ÿ‡ฒ flag san marino san marino flag nation country banner san marino +๐Ÿ‡ธ๐Ÿ‡ณ flag senegal sn flag nation country banner senegal +๐Ÿ‡ธ๐Ÿ‡ด flag somalia so flag nation country banner somalia +๐Ÿ‡ธ๐Ÿ‡ท flag suriname sr flag nation country banner suriname +๐Ÿ‡ธ๐Ÿ‡ธ flag south sudan south sd flag nation country banner south sudan +๐Ÿ‡ธ๐Ÿ‡น flag sao tome principe sao tome principe flag nation country banner sao tome principe +๐Ÿ‡ธ๐Ÿ‡ป flag el salvador el salvador flag nation country banner el salvador +๐Ÿ‡ธ๐Ÿ‡ฝ flag sint maarten sint maarten dutch flag nation country banner sint maarten +๐Ÿ‡ธ๐Ÿ‡พ flag syria syrian arab republic flag nation country banner syria +๐Ÿ‡ธ๐Ÿ‡ฟ flag eswatini sz flag nation country banner eswatini +๐Ÿ‡น๐Ÿ‡ฆ flag tristan da cunha +๐Ÿ‡น๐Ÿ‡จ flag turks caicos islands turks caicos islands flag nation country banner turks caicos islands +๐Ÿ‡น๐Ÿ‡ฉ flag chad td flag nation country banner chad +๐Ÿ‡น๐Ÿ‡ซ flag french southern territories french southern territories flag nation country banner french southern territories +๐Ÿ‡น๐Ÿ‡ฌ flag togo tg flag nation country banner togo +๐Ÿ‡น๐Ÿ‡ญ flag thailand th flag nation country banner thailand +๐Ÿ‡น๐Ÿ‡ฏ flag tajikistan tj flag nation country banner tajikistan +๐Ÿ‡น๐Ÿ‡ฐ flag tokelau tk flag nation country banner tokelau +๐Ÿ‡น๐Ÿ‡ฑ flag timor leste timor leste flag nation country banner timor leste +๐Ÿ‡น๐Ÿ‡ฒ flag turkmenistan flag nation country banner turkmenistan +๐Ÿ‡น๐Ÿ‡ณ flag tunisia tn flag nation country banner tunisia +๐Ÿ‡น๐Ÿ‡ด flag tonga to flag nation country banner tonga +๐Ÿ‡น๐Ÿ‡ท flag turkey turkey flag nation country banner turkey +๐Ÿ‡น๐Ÿ‡น flag trinidad tobago trinidad tobago flag nation country banner trinidad tobago +๐Ÿ‡น๐Ÿ‡ป flag tuvalu flag nation country banner tuvalu +๐Ÿ‡น๐Ÿ‡ผ flag taiwan tw flag nation country banner taiwan +๐Ÿ‡น๐Ÿ‡ฟ flag tanzania tanzania united republic flag nation country banner tanzania +๐Ÿ‡บ๐Ÿ‡ฆ flag ukraine ua flag nation country banner ukraine +๐Ÿ‡บ๐Ÿ‡ฌ flag uganda ug flag nation country banner uganda +๐Ÿ‡บ๐Ÿ‡ฒ flag u s outlying islands +๐Ÿ‡บ๐Ÿ‡ณ flag united nations un flag banner +๐Ÿ‡บ๐Ÿ‡ธ flag united states united states america flag nation country banner united states +๐Ÿ‡บ๐Ÿ‡พ flag uruguay uy flag nation country banner uruguay +๐Ÿ‡บ๐Ÿ‡ฟ flag uzbekistan uz flag nation country banner uzbekistan +๐Ÿ‡ป๐Ÿ‡ฆ flag vatican city vatican city flag nation country banner vatican city +๐Ÿ‡ป๐Ÿ‡จ flag st vincent grenadines saint vincent grenadines flag nation country banner st vincent grenadines +๐Ÿ‡ป๐Ÿ‡ช flag venezuela ve bolivarian republic flag nation country banner venezuela +๐Ÿ‡ป๐Ÿ‡ฌ flag british virgin islands british virgin islands bvi flag nation country banner british virgin islands +๐Ÿ‡ป๐Ÿ‡ฎ flag u s virgin islands virgin islands us flag nation country banner u s virgin islands +๐Ÿ‡ป๐Ÿ‡ณ flag vietnam viet nam flag nation country banner vietnam +๐Ÿ‡ป๐Ÿ‡บ flag vanuatu vu flag nation country banner vanuatu +๐Ÿ‡ผ๐Ÿ‡ซ flag wallis futuna wallis futuna flag nation country banner wallis futuna +๐Ÿ‡ผ๐Ÿ‡ธ flag samoa ws flag nation country banner samoa +๐Ÿ‡ฝ๐Ÿ‡ฐ flag kosovo xk flag nation country banner kosovo +๐Ÿ‡พ๐Ÿ‡ช flag yemen ye flag nation country banner yemen +๐Ÿ‡พ๐Ÿ‡น flag mayotte yt flag nation country banner mayotte +๐Ÿ‡ฟ๐Ÿ‡ฆ flag south africa south africa flag nation country banner south africa +๐Ÿ‡ฟ๐Ÿ‡ฒ flag zambia zm flag nation country banner zambia +๐Ÿ‡ฟ๐Ÿ‡ผ flag zimbabwe zw flag nation country banner zimbabwe +๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ flag england flag english +๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ flag scotland flag scottish +๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ flag wales flag welsh +๐Ÿฅฒ smiling face with tear sad cry pretend +๐Ÿฅธ disguised face pretent brows glasses moustache +๐ŸคŒ pinched fingers size tiny small +๐Ÿซ€ anatomical heart health heartbeat +๐Ÿซ lungs breathe +๐Ÿฅท ninja ninjutsu skills japanese +๐Ÿคตโ€โ™‚๏ธ man in tuxedo formal fashion +๐Ÿคตโ€โ™€๏ธ woman in tuxedo formal fashion +๐Ÿ‘ฐโ€โ™‚๏ธ man with veil wedding marriage +๐Ÿ‘ฐโ€โ™€๏ธ woman with veil wedding marriage +๐Ÿ‘ฉโ€๐Ÿผ woman feeding baby birth food +๐Ÿ‘จโ€๐Ÿผ man feeding baby birth food +๐Ÿง‘โ€๐Ÿผ person feeding baby birth food +๐Ÿง‘โ€๐ŸŽ„ mx claus christmas +๐Ÿซ‚ people hugging care +๐Ÿˆโ€โฌ› black cat superstition luck +๐Ÿฆฌ bison ox +๐Ÿฆฃ mammoth elephant tusks +๐Ÿฆซ beaver animal rodent +๐Ÿปโ€โ„๏ธ polar bear animal arctic +๐Ÿฆค dodo animal bird +๐Ÿชถ feather bird fly +๐Ÿฆญ seal animal creature sea +๐Ÿชฒ beetle insect +๐Ÿชณ cockroach insect pests +๐Ÿชฐ fly insect +๐Ÿชฑ worm animal +๐Ÿชด potted plant greenery house +๐Ÿซ blueberries fruit +๐Ÿซ’ olive fruit +๐Ÿซ‘ bell pepper fruit plant +๐Ÿซ“ flatbread flour food +๐Ÿซ” tamale food masa +๐Ÿซ• fondue cheese pot food +๐Ÿซ– teapot drink hot +๐Ÿง‹ bubble tea taiwan boba milk tea straw +๐Ÿชจ rock stone +๐Ÿชต wood nature timber trunk +๐Ÿ›– hut house structure +๐Ÿ›ป pickup truck car transportation +๐Ÿ›ผ roller skate footwear sports +๐Ÿช„ magic wand supernature power +๐Ÿช… pinata mexico candy celebration +๐Ÿช† nesting dolls matryoshka toy +๐Ÿชก sewing needle stitches +๐Ÿชข knot rope scout +๐Ÿฉด thong sandal footwear summer +๐Ÿช– military helmet army protection +๐Ÿช— accordion music +๐Ÿช˜ long drum music +๐Ÿช™ coin money currency +๐Ÿชƒ boomerang weapon +๐Ÿชš carpentry saw cut chop +๐Ÿช› screwdriver tools +๐Ÿช hook tools +๐Ÿชœ ladder tools +๐Ÿ›— elevator lift +๐Ÿชž mirror reflection +๐ŸชŸ window scenery +๐Ÿช  plunger toilet +๐Ÿชค mouse trap cheese +๐Ÿชฃ bucket water container +๐Ÿชฅ toothbrush hygiene dental +๐Ÿชฆ headstone death rip grave +๐Ÿชง placard announcement +โšง๏ธ transgender symbol lgbtq +๐Ÿณ๏ธโ€โšง๏ธ transgender flag lgbtq +๐Ÿ˜ถโ€๐ŸŒซ๏ธ face in clouds shower steam dream +๐Ÿ˜ฎโ€๐Ÿ’จ face exhaling relieve relief tired sigh +๐Ÿ˜ตโ€๐Ÿ’ซ face with spiral eyes sick ill confused nauseous nausea +โค๏ธโ€๐Ÿ”ฅ heart on fire passionate enthusiastic +โค๏ธโ€๐Ÿฉน mending heart broken heart bandage wounded +๐Ÿง”โ€โ™‚๏ธ man beard facial hair +๐Ÿง”โ€โ™€๏ธ woman beard facial hair +๐Ÿซ  melting face hot heat +๐Ÿซข face with open eyes and hand over mouth silence secret shock surprise +๐Ÿซฃ face with peeking eye scared frightening embarrassing +๐Ÿซก saluting face respect salute +๐Ÿซฅ dotted line face invisible lonely isolation depression +๐Ÿซค face with diagonal mouth skeptic confuse frustrated indifferent +๐Ÿฅน face holding back tears touched gratitude +๐Ÿซฑ rightwards hand palm offer +๐Ÿซฒ leftwards hand palm offer +๐Ÿซณ palm down hand palm drop +๐Ÿซด palm up hand lift offer demand +๐Ÿซฐ hand with index finger and thumb crossed heart love money expensive +๐Ÿซต index pointing at the viewer you recruit +๐Ÿซถ heart hands love appreciation support +๐Ÿซฆ biting lip flirt sexy pain worry +๐Ÿซ… person with crown royalty power +๐Ÿซƒ pregnant man baby belly +๐Ÿซ„ pregnant person baby belly +๐ŸงŒ troll mystical monster +๐Ÿชธ coral ocean sea reef +๐Ÿชท lotus flower calm meditation +๐Ÿชน empty nest bird +๐Ÿชบ nest with eggs bird +๐Ÿซ˜ beans food +๐Ÿซ— pouring liquid cup water +๐Ÿซ™ jar container sauce +๐Ÿ› playground slide fun park +๐Ÿ›ž wheel car transport +๐Ÿ›Ÿ ring buoy life saver life preserver +๐Ÿชฌ hamsa religion protection +๐Ÿชฉ mirror ball disco dance party +๐Ÿชซ low battery drained dead +๐Ÿฉผ crutch accessibility assist +๐Ÿฉป x-ray skeleton medicine +๐Ÿซง bubbles soap fun carbonation sparkling +๐Ÿชช identification card document +๐ŸŸฐ heavy equals sign math \ No newline at end of file diff --git a/hypr/scripts/RofiSearch.sh b/hypr/scripts/RofiSearch.sh new file mode 100755 index 0000000..4218bed --- /dev/null +++ b/hypr/scripts/RofiSearch.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# For Searching via web browsers + +# Define the path to the config file +config_file=$HOME/.config/hypr/UserConfigs/01-UserDefaults.conf + +# Check if the config file exists +if [[ ! -f "$config_file" ]]; then + echo "Error: Configuration file not found!" + exit 1 +fi + +# Process the config file in memory, removing the $ and fixing spaces +config_content=$(sed 's/\$//g' "$config_file" | sed 's/ = /=/') + +# Source the modified content directly from the variable +eval "$config_content" + +# Check if $term is set correctly +if [[ -z "$Search_Engine" ]]; then + echo "Error: \$Search_Engine is not set in the configuration file!" + exit 1 +fi + +# Rofi theme and message +rofi_theme="$HOME/.config/rofi/config-search.rasi" +msg='โ€ผ๏ธ **note** โ€ผ๏ธ search via default web browser' + +# Kill Rofi if already running before execution +if pgrep -x "rofi" >/dev/null; then + pkill rofi +fi + +# Open Rofi and pass the selected query to xdg-open for Google search +echo "" | rofi -dmenu -config "$rofi_theme" -mesg "$msg" | xargs -I{} xdg-open $Search_Engine \ No newline at end of file diff --git a/hypr/scripts/RofiThemeSelector-modified.sh b/hypr/scripts/RofiThemeSelector-modified.sh new file mode 100755 index 0000000..2cfc2d2 --- /dev/null +++ b/hypr/scripts/RofiThemeSelector-modified.sh @@ -0,0 +1,229 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# A modified version of Rofi-Theme-Selector, concentrating only on ~/.local and also, applying only 10 @themes in ~/.config/rofi/config.rasi +# as opposed to continous adding of //@theme + +# This code is released in public domain by Dave Davenport + +iDIR="$HOME/.config/swaync/images" + + +OS="linux" + +ROFI=$(command -v rofi) +SED=$(command -v sed) +MKTEMP=$(command -v mktemp) +NOTIFY_SEND=$(command -v notify-send) + +if [ -z "${SED}" ] +then + echo "Did not find 'sed', script cannot continue." + exit 1 +fi +if [ -z "${MKTEMP}" ] +then + echo "Did not find 'mktemp', script cannot continue." + exit 1 +fi +if [ -z "${ROFI}" ] +then + echo "Did not find rofi, there is no point to continue." + exit 1 +fi +if [ -z "${NOTIFY_SEND}" ] +then + echo "Did not find 'notify-send', notifications won't work." +fi + +TMP_CONFIG_FILE=$(${MKTEMP}).rasi +#rofi_theme_dir="${HOME}/.local/share/rofi/themes" +rofi_config_file="${XDG_CONFIG_HOME:-${HOME}/.config}/rofi/config.rasi" + +## +# Array with parts to the found themes. +# And array with the printable name. +## +declare -a themes +declare -a theme_names + +## +# Function that tries to find all installed rofi themes. +# This fills in #themes array and formats a displayable string #theme_names +## +# Find themes in defined directories +find_themes() { + directories=("$HOME/.local/share/rofi/themes" "$HOME/.config/rofi/themes") + + for TD in "${directories[@]}"; do + if [ -d "$TD" ]; then + echo "Checking themes in: $TD" + for file in "$TD"/*.rasi; do + if [ -f "$file" ] && [ ! -L "$file" ]; then + themes+=("$file") + theme_names+=("$(basename "${file%.*}")") + else + echo "Skipping symlink: $file" + fi + done + else + echo "Directory does not exist: $TD" + fi + done +} + +## +# Function to add or update theme in the config.rasi +## +add_theme_to_config() { + local theme_name="$1" + local theme_path + + # Determine the correct path for the theme + if [[ -f "$HOME/.local/share/rofi/themes/$theme_name.rasi" ]]; then + theme_path="$HOME/.local/share/rofi/themes/$theme_name.rasi" + elif [[ -f "$HOME/.config/rofi/themes/$theme_name.rasi" ]]; then + theme_path="$HOME/.config/rofi/themes/$theme_name.rasi" + else + echo "Theme not found: $theme_name" + return 1 + fi + + # Resolve symlinks if present + if [[ -L "$theme_path" ]]; then + theme_path=$(readlink -f "$theme_path") + fi + + # Convert path to use ~ for home directory + theme_path_with_tilde="~${theme_path#$HOME}" + + # Add or update @theme line in config + if ! grep -q '^\s*@theme' "$rofi_config_file"; then + echo -e "\n\n@theme \"$theme_path_with_tilde\"" >> "$rofi_config_file" + echo "Added @theme \"$theme_path_with_tilde\" to $rofi_config_file" + else + $SED -i "s/^\(\s*@theme.*\)/\/\/\1/" "$rofi_config_file" + echo -e "@theme \"$theme_path_with_tilde\"" >> "$rofi_config_file" + echo "Updated @theme line to $theme_path_with_tilde" + fi + + # Limit the number of @theme lines to a maximum of 9 + max_lines=9 + total_lines=$(grep -c '^\s*//@theme' "$rofi_config_file") + + if [ "$total_lines" -gt "$max_lines" ]; then + excess=$((total_lines - max_lines)) + for i in $(seq 1 "$excess"); do + $SED -i '0,/^\s*\/\/@theme/ { /^\s*\/\/@theme/ {d; q; }}' "$rofi_config_file" + done + echo "Removed excess //@theme lines" + fi +} + +## +# Create a copy of rofi config +## +create_config_copy() +{ + ${ROFI} -dump-config > "${TMP_CONFIG_FILE}" + # remove theme entry. + ${SED} -i 's/^\s*theme:\s\+".*"\s*;//g' "${TMP_CONFIG_FILE}" +} + +### +# Print the list out so it can be displayed by rofi. +## +create_theme_list() +{ + OLDIFS=${IFS} + IFS='|' + for themen in ${theme_names[@]} + do + echo "${themen}" + done + IFS=${OLDIFS} +} + +## +# Thee indicate what entry is selected. +## +declare -i SELECTED + +select_theme() +{ + local MORE_FLAGS=(-dmenu -format i -no-custom -p "Theme" -markup -config "${TMP_CONFIG_FILE}" -i) + MORE_FLAGS+=(-kb-custom-1 "Alt-a") + MORE_FLAGS+=(-u 2,3 -a 4,5 ) + local CUR="default" + while true + do + declare -i RTR + declare -i RES + local MESG="""You can preview themes by hitting Enter. +Alt-a to accept the new theme. +Escape to cancel +Current theme: ${CUR} +When setting a new theme this will override previous theme settings. +Please update your config file if you have local modifications.""" + THEME_FLAG= + if [ -n "${SELECTED}" ] + then + THEME_FLAG="-theme ${themes[${SELECTED}]}" + fi + RES=$( create_theme_list | ${ROFI} ${THEME_FLAG} ${MORE_FLAGS[@]} -cycle -selected-row "${SELECTED}" -mesg "${MESG}") + RTR=$? + if [ "${RTR}" = 10 ] + then + return 0; + elif [ "${RTR}" = 1 ] + then + return 1; + elif [ "${RTR}" = 65 ] + then + return 1; + fi + CUR=${theme_names[${RES}]} + SELECTED=${RES} + done +} + +############################################################################################################ +# Actual program execution +########################################################################################################### +## +# Find all themes +## +find_themes + +## +# Do check if there are themes. +## +if [ ${#themes[@]} = 0 ] +then + ${ROFI} -e "No themes found." + exit 0 +fi + +## +# Create copy of config to play with in preview +## +create_config_copy + +## +# Show the themes to user. +## +if select_theme && [ -n "${SELECTED}" ] +then + # Apply the selected theme + add_theme_to_config "${theme_names[${SELECTED}]}" + + # Send notification with the selected theme name + selection="${theme_names[${SELECTED}]}" + if [ -n "$NOTIFY_SEND" ]; then + notify-send -u low -i "$iDIR/ja.png" "Rofi Theme applied:" "$selection" + fi +fi + +## +# Remove temp. config. +## +rm -- "${TMP_CONFIG_FILE}" diff --git a/hypr/scripts/RofiThemeSelector.sh b/hypr/scripts/RofiThemeSelector.sh new file mode 100755 index 0000000..8b2fcb7 --- /dev/null +++ b/hypr/scripts/RofiThemeSelector.sh @@ -0,0 +1,154 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ย  # +# Rofi Themes - Script to preview and apply themes by live-reloading the config. + +# --- Configuration --- +ROFI_THEMES_DIR_CONFIG="$HOME/.config/rofi/themes" +ROFI_THEMES_DIR_LOCAL="$HOME/.local/share/rofi/themes" +ROFI_CONFIG_FILE="$HOME/.config/rofi/config.rasi" +ROFI_THEME_FOR_THIS_SCRIPT="$HOME/.config/rofi/config-rofi-theme.rasi" # A separate rofi theme for the picker itself +IDIR="$HOME/.config/swaync/images" # For notifications + +# --- Helper Functions --- + +# Function to send a notification +notify_user() { + notify-send -u low -i "$1" "$2" "$3" +} + +# Function to apply the selected rofi theme to the main config file +apply_rofi_theme_to_config() { + local theme_name_to_apply="$1" + + # Find the full path of the theme file + local theme_path + if [[ -f "$ROFI_THEMES_DIR_CONFIG/$theme_name_to_apply" ]]; then + theme_path="$ROFI_THEMES_DIR_CONFIG/$theme_name_to_apply" + elif [[ -f "$ROFI_THEMES_DIR_LOCAL/$theme_name_to_apply" ]]; then + theme_path="$ROFI_THEMES_DIR_LOCAL/$theme_name_to_apply" + else + notify_user "$IDIR/error.png" "Error" "Theme file not found: $theme_name_to_apply" + return 1 + fi + + # Use ~ for the home directory in the config path + local theme_path_with_tilde="~${theme_path#$HOME}" + + # Create a temporary file to safely edit the config + local temp_rofi_config_file + temp_rofi_config_file=$(mktemp) + cp "$ROFI_CONFIG_FILE" "$temp_rofi_config_file" + + # Comment out any existing @theme entry + sed -i -E 's/^(\s*@theme)/\\/\\/\1/' "$temp_rofi_config_file" + + # Add the new @theme entry at the end of the file + echo "@theme \"$theme_path_with_tilde\"" >>"$temp_rofi_config_file" + + # Overwrite the original config file + cp "$temp_rofi_config_file" "$ROFI_CONFIG_FILE" + rm "$temp_rofi_config_file" + + # Prune old commented-out theme lines to prevent clutter + local max_lines=10 + local total_lines=$(grep -c '^//\s*@theme' "$ROFI_CONFIG_FILE") + if [ "$total_lines" -gt "$max_lines" ]; then + local excess=$((total_lines - max_lines)) + for ((i = 1; i <= excess; i++)); do + sed -i '0,/^\s*\/\/@theme/s///' "$ROFI_CONFIG_FILE" + done + fi + + return 0 +} + +# --- Main Script Execution --- + +# Check for required directories and files +if [ ! -d "$ROFI_THEMES_DIR_CONFIG" ] && [ ! -d "$ROFI_THEMES_DIR_LOCAL" ]; then + notify_user "$IDIR/error.png" "E-R-R-O-R" "No Rofi themes directory found." + exit 1 +fi + +if [ ! -f "$ROFI_CONFIG_FILE" ]; then + notify_user "$IDIR/error.png" "E-R-R-O-R" "Rofi config file not found: $ROFI_CONFIG_FILE" + exit 1 +fi + +# Backup the original config content +original_rofi_config_content_backup=$(cat "$ROFI_CONFIG_FILE") + +# Generate a sorted list of available theme file names +mapfile -t available_theme_names < <(( + find "$ROFI_THEMES_DIR_CONFIG" -maxdepth 1 -name "*.rasi" -type f -printf "%f\n" 2>/dev/null + find "$ROFI_THEMES_DIR_LOCAL" -maxdepth 1 -name "*.rasi" -type f -printf "%f\n" 2>/dev/null +) | sort -V -u) + +if [ ${#available_theme_names[@]} -eq 0 ]; then + notify_user "$IDIR/error.png" "No Rofi Themes" "No .rasi files found in theme directories." + exit 1 +fi + +# Find the currently active theme to set as the initial selection +current_selection_index=0 +current_active_theme_path=$(grep -oP '^\s*@theme\s*"\K[^"]+' "$ROFI_CONFIG_FILE" | tail -n 1) +if [ -n "$current_active_theme_path" ]; then + current_active_theme_name=$(basename "$current_active_theme_path") + for i in "${!available_theme_names[@]}"; do + if [[ "${available_theme_names[$i]}" == "$current_active_theme_name" ]]; then + current_selection_index=$i + break + fi + done +fi + +# Main preview loop +while true; do + theme_to_preview_now="${available_theme_names[$current_selection_index]}" + + # Apply the theme for preview + if ! apply_rofi_theme_to_config "$theme_to_preview_now"; then + echo "$original_rofi_config_content_backup" >"$ROFI_CONFIG_FILE" + notify_user "$IDIR/error.png" "Preview Error" "Failed to apply $theme_to_preview_now. Reverted." + exit 1 + fi + + # Prepare theme list for Rofi + rofi_input_list="" + for theme_name_in_list in "${available_theme_names[@]}"; do + rofi_input_list+="$(basename "$theme_name_in_list" .rasi)\n" + done + rofi_input_list_trimmed="${rofi_input_list%\\n}" + + # Launch Rofi and get user's choice + chosen_index_from_rofi=$(echo -e "$rofi_input_list_trimmed" | + rofi -dmenu -i \ + -format 'i' \ + -p "Rofi Theme" \ + -mesg "โ€ผ๏ธ **note** โ€ผ๏ธ Enter: Preview || Ctrl+S: Apply & Exit || Esc: Cancel" \ + -config "$ROFI_THEME_FOR_THIS_SCRIPT" \ + -selected-row "$current_selection_index" \ + -kb-custom-1 "Control+s") + + rofi_exit_code=$? + + # Handle Rofi's exit code + if [ $rofi_exit_code -eq 0 ]; then # Enter + if [[ "$chosen_index_from_rofi" =~ ^[0-9]+$ ]] && [ "$chosen_index_from_rofi" -lt "${#available_theme_names[@]}" ]; then + current_selection_index="$chosen_index_from_rofi" + fi + elif [ $rofi_exit_code -eq 1 ]; then # Escape + notify_user "$IDIR/note.png" "Rofi Theme" "Selection cancelled. Reverting to original theme." + echo "$original_rofi_config_content_backup" >"$ROFI_CONFIG_FILE" + break + elif [ $rofi_exit_code -eq 10 ]; then # Custom bind 1 (Ctrl+S) + notify_user "$IDIR/ja.png" "Rofi Theme Applied" "$(basename "$theme_to_preview_now" .rasi)" + break + else # Error or unexpected exit code + notify_user "$IDIR/error.png" "Rofi Error" "Unexpected Rofi exit ($rofi_exit_code). Reverting." + echo "$original_rofi_config_content_backup" >"$ROFI_CONFIG_FILE" + break + fi +done + +exit 0 diff --git a/hypr/scripts/ScreenShot.sh b/hypr/scripts/ScreenShot.sh new file mode 100755 index 0000000..0a37c7e --- /dev/null +++ b/hypr/scripts/ScreenShot.sh @@ -0,0 +1,164 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Screenshots scripts + +# variables +time=$(date "+%d-%b_%H-%M-%S") +dir="$(xdg-user-dir PICTURES)/Screenshots" +file="Screenshot_${time}_${RANDOM}.png" + +iDIR="$HOME/.config/swaync/icons" +iDoR="$HOME/.config/swaync/images" +sDIR="$HOME/.config/hypr/scripts" + +active_window_class=$(hyprctl -j activewindow | jq -r '(.class)') +active_window_file="Screenshot_${time}_${active_window_class}.png" +active_window_path="${dir}/${active_window_file}" + +notify_cmd_base="notify-send -t 10000 -A action1=Open -A action2=Delete -h string:x-canonical-private-synchronous:shot-notify" +notify_cmd_shot="${notify_cmd_base} -i ${iDIR}/picture.png " +notify_cmd_shot_win="${notify_cmd_base} -i ${iDIR}/picture.png " +notify_cmd_NOT="notify-send -u low -i ${iDoR}/note.png " + +# notify and view screenshot +notify_view() { + if [[ "$1" == "active" ]]; then + if [[ -e "${active_window_path}" ]]; then + "${sDIR}/Sounds.sh" --screenshot + resp=$(timeout 5 ${notify_cmd_shot_win} " Screenshot of:" " ${active_window_class} Saved.") + case "$resp" in + action1) + xdg-open "${active_window_path}" & + ;; + action2) + rm "${active_window_path}" & + ;; + esac + else + ${notify_cmd_NOT} " Screenshot of:" " ${active_window_class} NOT Saved." + "${sDIR}/Sounds.sh" --error + fi + + elif [[ "$1" == "swappy" ]]; then + "${sDIR}/Sounds.sh" --screenshot + resp=$(${notify_cmd_shot} " Screenshot:" " Captured by Swappy") + case "$resp" in + action1) + swappy -f - <"$tmpfile" + ;; + action2) + rm "$tmpfile" + ;; + esac + + else + local check_file="${dir}/${file}" + if [[ -e "$check_file" ]]; then + "${sDIR}/Sounds.sh" --screenshot + resp=$(timeout 5 ${notify_cmd_shot} " Screenshot" " Saved") + case "$resp" in + action1) + xdg-open "${check_file}" & + ;; + action2) + rm "${check_file}" & + ;; + esac + else + ${notify_cmd_NOT} " Screenshot" " NOT Saved" + "${sDIR}/Sounds.sh" --error + fi + fi +} + +# countdown +countdown() { + for sec in $(seq $1 -1 1); do + notify-send -h string:x-canonical-private-synchronous:shot-notify -t 1000 -i "$iDIR"/timer.png " Taking shot" " in: $sec secs" + sleep 1 + done +} + +# take shots +shotnow() { + cd ${dir} && grim - | tee "$file" | wl-copy + sleep 2 + notify_view +} + +shot5() { + countdown '5' + sleep 1 && cd ${dir} && grim - | tee "$file" | wl-copy + sleep 1 + notify_view +} + +shot10() { + countdown '10' + sleep 1 && cd ${dir} && grim - | tee "$file" | wl-copy + notify_view +} + +shotwin() { + w_pos=$(hyprctl activewindow | grep 'at:' | cut -d':' -f2 | tr -d ' ' | tail -n1) + w_size=$(hyprctl activewindow | grep 'size:' | cut -d':' -f2 | tr -d ' ' | tail -n1 | sed s/,/x/g) + cd ${dir} && grim -g "$w_pos $w_size" - | tee "$file" | wl-copy + notify_view +} + +shotarea() { + tmpfile=$(mktemp) + grim -g "$(slurp)" - >"$tmpfile" + + # Copy with saving + if [[ -s "$tmpfile" ]]; then + wl-copy <"$tmpfile" + mv "$tmpfile" "$dir/$file" + fi + notify_view +} + +shotactive() { + active_window_class=$(hyprctl -j activewindow | jq -r '(.class)') + active_window_file="Screenshot_${time}_${active_window_class}.png" + active_window_path="${dir}/${active_window_file}" + + hyprctl -j activewindow | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | grim -g - "${active_window_path}" + sleep 1 + notify_view "active" +} + +shotswappy() { + tmpfile=$(mktemp) + grim -g "$(slurp)" - >"$tmpfile" + + # Copy without saving + if [[ -s "$tmpfile" ]]; then + wl-copy <"$tmpfile" + notify_view "swappy" + fi +} + +if [[ ! -d "$dir" ]]; then + mkdir -p "$dir" +fi + +if [[ "$1" == "--now" ]]; then + shotnow +elif [[ "$1" == "--in5" ]]; then + shot5 +elif [[ "$1" == "--in10" ]]; then + shot10 +elif [[ "$1" == "--win" ]]; then + shotwin +elif [[ "$1" == "--area" ]]; then + shotarea +elif [[ "$1" == "--active" ]]; then + shotactive +elif [[ "$1" == "--swappy" ]]; then + shotswappy +else + echo -e "Available Options : --now --in5 --in10 --win --area --active --swappy" +fi + +exit 0 diff --git a/hypr/scripts/Sounds.sh b/hypr/scripts/Sounds.sh new file mode 100755 index 0000000..8b2cc76 --- /dev/null +++ b/hypr/scripts/Sounds.sh @@ -0,0 +1,77 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# This script is used to play system sounds. +# Script is used by Volume.Sh and ScreenShots.sh + +theme="freedesktop" # Set the theme for the system sounds. +mute=false # Set to true to mute the system sounds. + +# Mute individual sounds here. +muteScreenshots=false +muteVolume=false + +# Exit if the system sounds are muted. +if [[ "$mute" = true ]]; then + exit 0 +fi + +# Choose the sound to play. +if [[ "$1" == "--screenshot" ]]; then + if [[ "$muteScreenshots" = true ]]; then + exit 0 + fi + soundoption="screen-capture.*" +elif [[ "$1" == "--volume" ]]; then + if [[ "$muteVolume" = true ]]; then + exit 0 + fi + soundoption="audio-volume-change.*" +elif [[ "$1" == "--error" ]]; then + if [[ "$muteScreenshots" = true ]]; then + exit 0 + fi + soundoption="dialog-error.*" +else + echo -e "Available sounds: --screenshot, --volume, --error" + exit 0 +fi + +# Set the directory defaults for system sounds. +if [ -d "/run/current-system/sw/share/sounds" ]; then + systemDIR="/run/current-system/sw/share/sounds" # NixOS +else + systemDIR="/usr/share/sounds" +fi +userDIR="$HOME/.local/share/sounds" +defaultTheme="freedesktop" + +# Prefer the user's theme, but use the system's if it doesn't exist. +sDIR="$systemDIR/$defaultTheme" +if [ -d "$userDIR/$theme" ]; then + sDIR="$userDIR/$theme" +elif [ -d "$systemDIR/$theme" ]; then + sDIR="$systemDIR/$theme" +fi + +# Get the theme that it inherits. +iTheme=$(cat "$sDIR/index.theme" | grep -i "inherits" | cut -d "=" -f 2) +iDIR="$sDIR/../$iTheme" + +# Find the sound file and play it. +sound_file=$(find -L $sDIR/stereo -name "$soundoption" -print -quit) +if ! test -f "$sound_file"; then + sound_file=$(find -L $iDIR/stereo -name "$soundoption" -print -quit) + if ! test -f "$sound_file"; then + sound_file=$(find -L $userDIR/$defaultTheme/stereo -name "$soundoption" -print -quit) + if ! test -f "$sound_file"; then + sound_file=$(find -L $systemDIR/$defaultTheme/stereo -name "$soundoption" -print -quit) + if ! test -f "$sound_file"; then + echo "Error: Sound file not found." + exit 1 + fi + fi + fi +fi + +# pipewire priority, fallback pulseaudio +pw-play "$sound_file" || pa-play "$sound_file" \ No newline at end of file diff --git a/hypr/scripts/SwitchKeyboardLayout.sh b/hypr/scripts/SwitchKeyboardLayout.sh new file mode 100755 index 0000000..f505fa6 --- /dev/null +++ b/hypr/scripts/SwitchKeyboardLayout.sh @@ -0,0 +1,104 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# This is for changing kb_layouts. Set kb_layouts in $settings_file + +layout_file="$HOME/.cache/kb_layout" +settings_file="$HOME/.config/hypr/UserConfigs/UserSettings.conf" +notif_icon="$HOME/.config/swaync/images/ja.png" + +# Refined ignore list with patterns or specific device names +ignore_patterns=( + "--(avrcp)" + "Bluetooth Speaker" + "Other Device + Name" + ) + + +# Create layout file with default layout if it does not exist +if [ ! -f "$layout_file" ]; then + echo "Creating layout file..." + default_layout=$(grep 'kb_layout = ' "$settings_file" | cut -d '=' -f 2 | tr -d '[:space:]' | cut -d ',' -f 1 2>/dev/null) + default_layout=${default_layout:-"us"} # Default to 'us' layout + echo "$default_layout" > "$layout_file" + echo "Default layout set to $default_layout" +fi + +current_layout=$(cat "$layout_file") +echo "Current layout: $current_layout" + +# Read available layouts from settings file +if [ -f "$settings_file" ]; then + kb_layout_line=$(grep 'kb_layout = ' "$settings_file" | cut -d '=' -f 2) + # Remove leading and trailing spaces around each layout + kb_layout_line=$(echo "$kb_layout_line" | tr -d '[:space:]') + IFS=',' read -r -a layout_mapping <<< "$kb_layout_line" +else + echo "Settings file not found!" + exit 1 +fi + +layout_count=${#layout_mapping[@]} +echo "Number of layouts: $layout_count" + +# Find current layout index and calculate next layout +for ((i = 0; i < layout_count; i++)); do + if [ "$current_layout" == "${layout_mapping[i]}" ]; then + current_index=$i + break + fi +done + +next_index=$(( (current_index + 1) % layout_count )) +new_layout="${layout_mapping[next_index]}" +echo "Next layout: $new_layout" + +# Function to get keyboard names +get_keyboard_names() { + hyprctl devices -j | jq -r '.keyboards[].name' +} + +# Function to check if a device matches any ignore pattern +is_ignored() { + local device_name=$1 + for pattern in "${ignore_patterns[@]}"; do + if [[ "$device_name" == *"$pattern"* ]]; then + return 0 # Device matches ignore pattern + fi + done + return 1 # Device does not match any ignore pattern +} + +# Function to change keyboard layout +change_layout() { + local error_found=false + + while read -r name; do + if is_ignored "$name"; then + echo "Skipping ignored device: $name" + continue + fi + + echo "Switching layout for $name to $new_layout..." + hyprctl switchxkblayout "$name" "$next_index" + if [ $? -ne 0 ]; then + echo "Error while switching layout for $name." >&2 + error_found=true + fi + done <<< "$(get_keyboard_names)" + + $error_found && return 1 + return 0 +} + +# Execute layout change and notify +if ! change_layout; then + notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed" + echo "Layout change failed." >&2 + exit 1 +else + notify-send -u low -i "$notif_icon" " kb_layout: $new_layout" + echo "Layout change notification sent." +fi + +echo "$new_layout" > "$layout_file" diff --git a/hypr/scripts/Tak0-Autodispatch.sh b/hypr/scripts/Tak0-Autodispatch.sh new file mode 100755 index 0000000..a1f7212 --- /dev/null +++ b/hypr/scripts/Tak0-Autodispatch.sh @@ -0,0 +1,90 @@ +#!/bin/bash +# USAGE / ะ†ะะกะขะ ะฃะšะฆะ†ะฏ: +# 1) Run from terminal: +# ./dispatch.sh +# Example: +# ./dispatch.sh discord 2 +# +# 2) Call from Hyprland config (in hyprland.conf file): +# exec-once = /path/to/dispatch.sh +# +# Logs are saved in dispatch.log file next to the script. +# If the window doesn't appear or is dispatched incorrectly โ€” info will be there. +# +# Notes: +# - Script waits about ~9 seconds (30 iterations of 0.3 sec) for window to appear. +# - Uses hyprctl and jq, so these tools must be installed. +# +# USAGE / ะ†ะะกะขะ ะฃะšะฆะ†ะฏ: +# 1) ะ—ะฐะฟัƒัะบ ะท ั‚ะตั€ะผั–ะฝะฐะปัƒ: +# ./dispatch.sh +# ะะฐะฟั€ะธะบะปะฐะด: +# ./dispatch.sh discord 2 +# +# 2) ะ’ะธะบะปะธะบ ะท ะบะพะฝั„ั–ะณัƒั€ะฐั†ั–ั— Hyprland (ัƒ ั„ะฐะนะปั– hyprland.conf): +# exec-once = /path/to/dispatch.sh +# +# ะ›ะพะณะธ ะทะฑะตั€ั–ะณะฐัŽั‚ัŒัั ัƒ ั„ะฐะนะปั– dispatch.log ะฟะพั€ัƒั‡ ะทั– ัะบั€ะธะฟั‚ะพะผ. +# ะฏะบั‰ะพ ะฒั–ะบะฝะพ ะฝะต ะท'ัะฒะธะปะพััŒ ะฐะฑะพ ะฝะตะฟั€ะฐะฒะธะปัŒะฝะพ ะดะธัะฟะฐั‚ั‡ะธะปะพััŒ โ€” ั–ะฝั„ะพั€ะผะฐั†ั–ั ั‚ะฐะผ. +# +# ะŸั€ะธะผั–ั‚ะบะธ: +# - ะกะบั€ะธะฟั‚ ั‡ะตะบะฐั” ะดะพ ~9 ัะตะบัƒะฝะด (30 ั–ั‚ะตั€ะฐั†ั–ะน ะฟะพ 0.3 ัะตะบ) ะฟะพะบะธ ะฒั–ะบะฝะพ ะท'ัะฒะธั‚ัŒัั. +# - ะ’ะธะบะพั€ะธัั‚ะพะฒัƒั” hyprctl ั– jq, ั‚ะพะผัƒ ั†ั– ั–ะฝัั‚ั€ัƒะผะตะฝั‚ะธ ะผะฐัŽั‚ัŒ ะฑัƒั‚ะธ ะฒัั‚ะฐะฝะพะฒะปะตะฝั–. + +LOGFILE="$(dirname "$0")/dispatch.log" +# Log file path located next to the script. +# ะคะฐะนะป ะปะพะณั–ะฒ ั€ะพะทั‚ะฐัˆะพะฒะฐะฝะธะน ะฟะพั€ัƒั‡ ะทั– ัะบั€ะธะฟั‚ะพะผ. + +APP=$1 +# The application command or window class to launch or match. +# ะšะพะผะฐะฝะดะฐ ะดะปั ะทะฐะฟัƒัะบัƒ ะฐะฟะปั–ะบะฐั†ั–ั— ะฐะฑะพ ะบะปะฐั ะฒั–ะบะฝะฐ ะดะปั ะฟะพัˆัƒะบัƒ. + +TARGET_WORKSPACE=$2 +# The target workspace number where the window should be moved. +# ะฆั–ะปัŒะพะฒะธะน ะฝะพะผะตั€ ะฒะพั€ะบัะฟะตะนััƒ, ะบัƒะดะธ ะฟะพั‚ั€ั–ะฑะฝะพ ะฟะตั€ะตะผั–ัั‚ะธั‚ะธ ะฒั–ะบะฝะพ. + +# Check if required arguments are provided. +# ะŸะตั€ะตะฒั–ั€ะบะฐ ะฝะฐัะฒะฝะพัั‚ั– ะฝะตะพะฑั…ั–ะดะฝะธั… ะฟะฐั€ะฐะผะตั‚ั€ั–ะฒ. +if [[ -z "$APP" || -z "$TARGET_WORKSPACE" ]]; then + echo "Usage: $0 " >> "$LOGFILE" 2>&1 + exit 1 +fi + +echo "Starting dispatch of '$APP' to workspace $TARGET_WORKSPACE at $(date)" >> "$LOGFILE" +# Starting the dispatch process and logging the event. +# ะŸะพั‡ะฐั‚ะพะบ ะฟั€ะพั†ะตััƒ ะดะธัะฟะฐั‚ั‡ัƒ, ะทะฐะฟะธั ัƒ ะปะพะณ. + +# Avoid early workspace focus issues by switching workspace first. +# ะฃะฝะธะบะฐั”ะผะพ ะฟั€ะพะฑะปะตะผ ะท ั€ะฐะฝะฝั–ะผ ั„ะพะบัƒัะพะผ, ัะฟะพั‡ะฐั‚ะบัƒ ะฟะตั€ะตะบะปัŽั‡ะฐั”ะผะพ ะฒะพั€ะบัะฟะตะนั. +hyprctl dispatch workspace "$TARGET_WORKSPACE" >> "$LOGFILE" 2>&1 +sleep 0.4 + +# Launch the application in the background and disown it. +# ะ—ะฐะฟัƒัะบะฐั”ะผะพ ะฐะฟะปั–ะบะฐั†ั–ัŽ ัƒ ั„ะพะฝะพะฒะพะผัƒ ั€ะตะถะธะผั– ั‚ะฐ ะฒั–ะดะฒโ€™ัะทัƒั”ะผะพ ะฒั–ะด ั‚ะตั€ะผั–ะฝะฐะปัƒ. +$APP & disown +pid=$! + +echo "Launched '$APP' with PID $pid" >> "$LOGFILE" +# Log the launched process ID. +# ะ›ะพะณ ะฟั€ะพั†ะตััƒ ะทะฐะฟัƒัะบัƒ ะท PID. + +# Wait for the application window to appear (matching window class). +# ะงะตะบะฐั”ะผะพ ะฟะพัะฒะธ ะฒั–ะบะฝะฐ ะฐะฟะปั–ะบะฐั†ั–ั— (ะทะฐ ะบะปะฐัะพะผ ะฒั–ะบะฝะฐ). +for i in {1..30}; do + win=$(hyprctl clients -j | jq -r --arg APP "$APP" ' + .[] | select(.class | test($APP;"i")) | .address' 2>>"$LOGFILE") + + if [[ -n "$win" ]]; then + echo "Found window $win for app '$APP', moving to workspace $TARGET_WORKSPACE" >> "$LOGFILE" + # Move the window to the target workspace. + # ะŸะตั€ะตะผั–ั‰ะฐั”ะผะพ ะฒั–ะบะฝะพ ะฝะฐ ั†ั–ะปัŒะพะฒะธะน ะฒะพั€ะบัะฟะตะนั. + hyprctl dispatch movetoworkspace "$TARGET_WORKSPACE,address:$win" >> "$LOGFILE" 2>&1 + exit 0 + fi + sleep 0.3 +done + +echo "ERROR: Window for '$APP' was NOT found or dispatched properly to workspace $TARGET_WORKSPACE at $(date)" >> "$LOGFILE" +# Log error if window was not found or dispatched correctly. +# ะ—ะฐะฟะธั ะฟะพะผะธะปะบะธ, ัะบั‰ะพ ะฒั–ะบะฝะพ ะฝะต ะทะฝะฐะนะดะตะฝะพ ะฐะฑะพ ะฝะตะฟั€ะฐะฒะธะปัŒะฝะพ ะดะธัะฟะฐั‚ั‡ะตะฝะพ. +exit 1 diff --git a/hypr/scripts/Tak0-Per-Window-Switch.sh b/hypr/scripts/Tak0-Per-Window-Switch.sh new file mode 100755 index 0000000..76b6ad2 --- /dev/null +++ b/hypr/scripts/Tak0-Per-Window-Switch.sh @@ -0,0 +1,123 @@ +################################################################## +# # +# # +# TAK_0'S Per-Window-Switch # +# # +# # +# # +# Just a little script that I made to switch keyboard layouts # +# per-window instead of global switching for the more # +# smooth and comfortable workflow. # +# # +################################################################## + + + + + + + + +# This is for changing kb_layouts. Set kb_layouts in + +MAP_FILE="$HOME/.cache/kb_layout_per_window" +CFG_FILE="$HOME/.config/hypr/UserConfigs/UserSettings.conf" +ICON="$HOME/.config/swaync/images/ja.png" +SCRIPT_NAME="$(basename "$0")" + +# Ensure map file exists +touch "$MAP_FILE" + +# Read layouts from config +if ! grep -q 'kb_layout' "$CFG_FILE"; then + echo "Error: cannot find kb_layout in $CFG_FILE" >&2 + exit 1 +fi +kb_layouts=($(grep 'kb_layout' "$CFG_FILE" | cut -d '=' -f2 | tr -d '[:space:]' | tr ',' ' ')) +count=${#kb_layouts[@]} + +# Get current active window ID +get_win() { + hyprctl activewindow -j | jq -r '.address // .id' +} + +# Get available keyboards +get_keyboards() { + hyprctl devices -j | jq -r '.keyboards[].name' +} + +# Save window-specific layout +save_map() { + local W=$1 L=$2 + grep -v "^${W}:" "$MAP_FILE" > "$MAP_FILE.tmp" + echo "${W}:${L}" >> "$MAP_FILE.tmp" + mv "$MAP_FILE.tmp" "$MAP_FILE" +} + +# Load layout for window (fallback to default) +load_map() { + local W=$1 + local E + E=$(grep "^${W}:" "$MAP_FILE") + [[ -n "$E" ]] && echo "${E#*:}" || echo "${kb_layouts[0]}" +} + +# Switch layout for all keyboards to layout index +do_switch() { + local IDX=$1 + for kb in $(get_keyboards); do + hyprctl switchxkblayout "$kb" "$IDX" 2>/dev/null + done +} + +# Toggle layout for current window only +cmd_toggle() { + local W=$(get_win) + [[ -z "$W" ]] && return + local CUR=$(load_map "$W") + local i NEXT + for idx in "${!kb_layouts[@]}"; do + if [[ "${kb_layouts[idx]}" == "$CUR" ]]; then + i=$idx + break + fi + done + NEXT=$(( (i+1) % count )) + do_switch "$NEXT" + save_map "$W" "${kb_layouts[NEXT]}" + notify-send -u low -i "$ICON" "kb_layout: ${kb_layouts[NEXT]}" +} + +# Restore layout on focus +cmd_restore() { + local W=$(get_win) + [[ -z "$W" ]] && return + local LAY=$(load_map "$W") + for idx in "${!kb_layouts[@]}"; do + if [[ "${kb_layouts[idx]}" == "$LAY" ]]; then + do_switch "$idx" + break + fi + done +} + +# Listen to focus events and restore window-specific layouts +subscribe() { + local SOCKET2="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" + [[ -S "$SOCKET2" ]] || { echo "Error: Hyprland socket not found." >&2; exit 1; } + + socat -u UNIX-CONNECT:"$SOCKET2" - | while read -r line; do + [[ "$line" =~ ^activewindow ]] && cmd_restore + done +} + +# Ensure only one listener +if ! pgrep -f "$SCRIPT_NAME.*--listener" >/dev/null; then + subscribe --listener & +fi + +# CLI +case "$1" in + toggle|"") cmd_toggle ;; + *) echo "Usage: $SCRIPT_NAME [toggle]" >&2; exit 1 ;; +esac diff --git a/hypr/scripts/TouchPad.sh b/hypr/scripts/TouchPad.sh new file mode 100755 index 0000000..8509d79 --- /dev/null +++ b/hypr/scripts/TouchPad.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# For disabling touchpad. +# Edit the Touchpad_Device on ~/.config/hypr/UserConfigs/Laptops.conf according to your system +# use hyprctl devices to get your system touchpad device name +# source https://github.com/hyprwm/Hyprland/discussions/4283?sort=new#discussioncomment-8648109 + +notif="$HOME/.config/swaync/images/ja.png" + +export STATUS_FILE="$XDG_RUNTIME_DIR/touchpad.status" + +enable_touchpad() { + printf "true" >"$STATUS_FILE" + notify-send -u low -i $notif " Enabling" " touchpad" + hyprctl keyword '$TOUCHPAD_ENABLED' "true" -r +} + +disable_touchpad() { + printf "false" >"$STATUS_FILE" + notify-send -u low -i $notif " Disabling" " touchpad" + hyprctl keyword '$TOUCHPAD_ENABLED' "false" -r +} + +if ! [ -f "$STATUS_FILE" ]; then + enable_touchpad +else + if [ $(cat "$STATUS_FILE") = "true" ]; then + disable_touchpad + elif [ $(cat "$STATUS_FILE") = "false" ]; then + enable_touchpad + fi +fi diff --git a/hypr/scripts/UptimeNixOS.sh b/hypr/scripts/UptimeNixOS.sh new file mode 100755 index 0000000..654ae2c --- /dev/null +++ b/hypr/scripts/UptimeNixOS.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# Script parses /proc/uptime to get the system uptime +# and prints it in a human-readable format +# This is a workaround for system where `uptime` command is taken from coreutils +# where `uptime -p` is not supported + +if [[ -r /proc/uptime ]]; then + s=$(< /proc/uptime) + s=${s/.*} +else + echo "Error UptimeNixOS.sh: Uptime could not be determined." >&2 + exit 1 +fi + +d="$((s / 60 / 60 / 24)) days" +h="$((s / 60 / 60 % 24)) hours" +m="$((s / 60 % 60)) minutes" + +# Remove plural if < 2. +((${d/ *} == 1)) && d=${d/s} +((${h/ *} == 1)) && h=${h/s} +((${m/ *} == 1)) && m=${m/s} + +# Hide empty fields. +((${d/ *} == 0)) && unset d +((${h/ *} == 0)) && unset h +((${m/ *} == 0)) && unset m + +uptime=${d:+$d, }${h:+$h, }$m +uptime=${uptime%', '} +uptime=${uptime:-$s seconds} + +echo "up $uptime" diff --git a/hypr/scripts/Volume.sh b/hypr/scripts/Volume.sh new file mode 100755 index 0000000..8efdb55 --- /dev/null +++ b/hypr/scripts/Volume.sh @@ -0,0 +1,143 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Scripts for volume controls for audio and mic + +iDIR="$HOME/.config/swaync/icons" +sDIR="$HOME/.config/hypr/scripts" + +# Get Volume +get_volume() { + volume=$(pamixer --get-volume) + if [[ "$volume" -eq "0" ]]; then + echo "Muted" + else + echo "$volume %" + fi +} + +# Get icons +get_icon() { + current=$(get_volume) + if [[ "$current" == "Muted" ]]; then + echo "$iDIR/volume-mute.png" + elif [[ "${current%\%}" -le 30 ]]; then + echo "$iDIR/volume-low.png" + elif [[ "${current%\%}" -le 60 ]]; then + echo "$iDIR/volume-mid.png" + else + echo "$iDIR/volume-high.png" + fi +} + +# Notify +notify_user() { + if [[ "$(get_volume)" == "Muted" ]]; then + notify-send -e -h string:x-canonical-private-synchronous:volume_notif -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$(get_icon)" " Volume:" " Muted" + else + notify-send -e -h int:value:"$(get_volume | sed 's/%//')" -h string:x-canonical-private-synchronous:volume_notif -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$(get_icon)" " Volume Level:" " $(get_volume)" && + "$sDIR/Sounds.sh" --volume + fi +} + +# Increase Volume +inc_volume() { + if [ "$(pamixer --get-mute)" == "true" ]; then + toggle_mute + else + pamixer -i 5 --allow-boost --set-limit 150 && notify_user + fi +} + +# Decrease Volume +dec_volume() { + if [ "$(pamixer --get-mute)" == "true" ]; then + toggle_mute + else + pamixer -d 5 && notify_user + fi +} + +# Toggle Mute +toggle_mute() { + if [ "$(pamixer --get-mute)" == "false" ]; then + pamixer -m && notify-send -e -u low -h boolean:SWAYNC_BYPASS_DND:true -i "$iDIR/volume-mute.png" " Mute" + elif [ "$(pamixer --get-mute)" == "true" ]; then + pamixer -u && notify-send -e -u low -h boolean:SWAYNC_BYPASS_DND:true -i "$(get_icon)" " Volume:" " Switched ON" + fi +} + +# Toggle Mic +toggle_mic() { + if [ "$(pamixer --default-source --get-mute)" == "false" ]; then + pamixer --default-source -m && notify-send -e -u low -h boolean:SWAYNC_BYPASS_DND:true -i "$iDIR/microphone-mute.png" " Microphone:" " Switched OFF" + elif [ "$(pamixer --default-source --get-mute)" == "true" ]; then + pamixer -u --default-source u && notify-send -e -u low -h boolean:SWAYNC_BYPASS_DND:true -i "$iDIR/microphone.png" " Microphone:" " Switched ON" + fi +} +# Get Mic Icon +get_mic_icon() { + current=$(pamixer --default-source --get-volume) + if [[ "$current" -eq "0" ]]; then + echo "$iDIR/microphone-mute.png" + else + echo "$iDIR/microphone.png" + fi +} + +# Get Microphone Volume +get_mic_volume() { + volume=$(pamixer --default-source --get-volume) + if [[ "$volume" -eq "0" ]]; then + echo "Muted" + else + echo "$volume %" + fi +} + +# Notify for Microphone +notify_mic_user() { + volume=$(get_mic_volume) + icon=$(get_mic_icon) + notify-send -e -h int:value:"$volume" -h "string:x-canonical-private-synchronous:volume_notif" -h boolean:SWAYNC_BYPASS_DND:true -u low -i "$icon" " Mic Level:" " $volume" +} + +# Increase MIC Volume +inc_mic_volume() { + if [ "$(pamixer --default-source --get-mute)" == "true" ]; then + toggle_mic + else + pamixer --default-source -i 5 && notify_mic_user + fi +} + +# Decrease MIC Volume +dec_mic_volume() { + if [ "$(pamixer --default-source --get-mute)" == "true" ]; then + toggle-mic + else + pamixer --default-source -d 5 && notify_mic_user + fi +} + +# Execute accordingly +if [[ "$1" == "--get" ]]; then + get_volume +elif [[ "$1" == "--inc" ]]; then + inc_volume +elif [[ "$1" == "--dec" ]]; then + dec_volume +elif [[ "$1" == "--toggle" ]]; then + toggle_mute +elif [[ "$1" == "--toggle-mic" ]]; then + toggle_mic +elif [[ "$1" == "--get-icon" ]]; then + get_icon +elif [[ "$1" == "--get-mic-icon" ]]; then + get_mic_icon +elif [[ "$1" == "--mic-inc" ]]; then + inc_mic_volume +elif [[ "$1" == "--mic-dec" ]]; then + dec_mic_volume +else + get_volume +fi \ No newline at end of file diff --git a/hypr/scripts/WallustSwww.sh b/hypr/scripts/WallustSwww.sh new file mode 100755 index 0000000..5e0148e --- /dev/null +++ b/hypr/scripts/WallustSwww.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Wallust: derive colors from the current wallpaper and update templates +# Usage: WallustSwww.sh [absolute_path_to_wallpaper] + +set -euo pipefail + +# Inputs and paths +passed_path="${1:-}" +cache_dir="$HOME/.cache/swww/" +rofi_link="$HOME/.config/rofi/.current_wallpaper" +wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current" + +# Helper: get focused monitor name (prefer JSON) +get_focused_monitor() { + if command -v jq >/dev/null 2>&1; then + hyprctl monitors -j | jq -r '.[] | select(.focused) | .name' + else + hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}' + fi +} + +# Determine wallpaper_path +wallpaper_path="" +if [[ -n "$passed_path" && -f "$passed_path" ]]; then + wallpaper_path="$passed_path" +else + # Try to read from swww cache for the focused monitor, with a short retry loop + current_monitor="$(get_focused_monitor)" + cache_file="$cache_dir$current_monitor" + + # Wait briefly for swww to write its cache after an image change + for i in {1..10}; do + if [[ -f "$cache_file" ]]; then + break + fi + sleep 0.1 + done + + if [[ -f "$cache_file" ]]; then + # The first non-filter line is the original wallpaper path + # wallpaper_path="$(grep -v 'Lanczos3' "$cache_file" | head -n 1)" + wallpaper_path=$(swww query | grep $current_monitor | awk '{print $9}') + fi +fi + +if [[ -z "${wallpaper_path:-}" || ! -f "$wallpaper_path" ]]; then + # Nothing to do; avoid failing loudly so callers can continue + exit 0 +fi + +# Update helpers that depend on the path +ln -sf "$wallpaper_path" "$rofi_link" || true +mkdir -p "$(dirname "$wallpaper_current")" +cp -f "$wallpaper_path" "$wallpaper_current" || true + +# Run wallust (silent) to regenerate templates defined in ~/.config/wallust/wallust.toml +# -s is used in this repo to keep things quiet and avoid extra prompts +wallust run -s "$wallpaper_path" || true diff --git a/hypr/scripts/WaybarCava.sh b/hypr/scripts/WaybarCava.sh new file mode 100755 index 0000000..6809e60 --- /dev/null +++ b/hypr/scripts/WaybarCava.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +# WaybarCava.sh โ€” safer single-instance handling, cleanup, and robustness +# Original concept by JaKooLit; this variant focuses on lifecycle hardening. + +set -euo pipefail + +# Ensure cava exists +if ! command -v cava >/dev/null 2>&1; then + echo "cava not found in PATH" >&2 + exit 1 +fi + +# 0..7 โ†’ โ–โ–‚โ–ƒโ–„โ–…โ–†โ–‡โ–ˆ +bar="โ–โ–‚โ–ƒโ–„โ–…โ–†โ–‡โ–ˆ" +dict="s/;//g" +bar_length=${#bar} +for ((i = 0; i < bar_length; i++)); do + dict+=";s/$i/${bar:$i:1}/g" +done + +# Single-instance guard (only kill our previous instance if itโ€™s still alive) +RUNTIME_DIR="${XDG_RUNTIME_DIR:-/tmp}" +pidfile="$RUNTIME_DIR/waybar-cava.pid" +if [[ -f "$pidfile" ]]; then + oldpid="$(cat "$pidfile" || true)" + if [[ -n "$oldpid" ]] && kill -0 "$oldpid" 2>/dev/null; then + kill "$oldpid" 2>/dev/null || true + sleep 0.1 || true + fi +fi +printf '%d' $$ >"$pidfile" + +# Unique temp config + cleanup on exit +config_file="$(mktemp "$RUNTIME_DIR/waybar-cava.XXXXXX.conf")" +cleanup() { rm -f "$config_file" "$pidfile"; } +trap cleanup EXIT INT TERM + +cat >"$config_file" </dev/null; then + pkill rofi + #exit 0 +fi + +main diff --git a/hypr/scripts/WaybarScripts.sh b/hypr/scripts/WaybarScripts.sh new file mode 100755 index 0000000..7b3aaba --- /dev/null +++ b/hypr/scripts/WaybarScripts.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ # +# This file used on waybar modules sourcing defaults set in $HOME/.config/hypr/UserConfigs/01-UserDefaults.conf + +# Define the path to the config file +config_file=$HOME/.config/hypr/UserConfigs/01-UserDefaults.conf + +# Check if the config file exists +if [[ ! -f "$config_file" ]]; then + echo "Error: Configuration file not found!" + exit 1 +fi + +# Process the config file in memory, removing the $ and fixing spaces +config_content=$(sed 's/\$//g' "$config_file" | sed 's/ = /=/') + +# Source the modified content directly from the variable +eval "$config_content" + +# Check if $term is set correctly +if [[ -z "$term" ]]; then + echo "Error: \$term is not set in the configuration file!" + exit 1 +fi + +# Execute accordingly based on the passed argument +if [[ "$1" == "--btop" ]]; then + $term --title btop sh -c 'btop' +elif [[ "$1" == "--nvtop" ]]; then + $term --title nvtop sh -c 'nvtop' +elif [[ "$1" == "--nmtui" ]]; then + $term nmtui +elif [[ "$1" == "--term" ]]; then + $term & +elif [[ "$1" == "--files" ]]; then + $files & +else + echo "Usage: $0 [--btop | --nvtop | --nmtui | --term]" + echo "--btop : Open btop in a new term" + echo "--nvtop : Open nvtop in a new term" + echo "--nmtui : Open nmtui in a new term" + echo "--term : Launch a term window" + echo "--files : Launch a file manager" +fi \ No newline at end of file diff --git a/hypr/scripts/WaybarStyles.sh b/hypr/scripts/WaybarStyles.sh new file mode 100755 index 0000000..a439f8e --- /dev/null +++ b/hypr/scripts/WaybarStyles.sh @@ -0,0 +1,64 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# Script for waybar styles + +IFS=$'\n\t' + +# Define directories +waybar_styles="$HOME/.config/waybar/style" +waybar_style="$HOME/.config/waybar/style.css" +SCRIPTSDIR="$HOME/.config/hypr/scripts" +rofi_config="$HOME/.config/rofi/config-waybar-style.rasi" +msg=' ๐ŸŽŒ NOTE: Some waybar STYLES NOT fully compatible with some LAYOUTS' + +# Apply selected style +apply_style() { + ln -sf "$waybar_styles/$1.css" "$waybar_style" + "${SCRIPTSDIR}/Refresh.sh" & +} + +main() { + # resolve current symlink and strip .css + current_target=$(readlink -f "$waybar_style") + current_name=$(basename "$current_target" .css) + + # gather all style names (without .css) into an array + mapfile -t options < <( + find -L "$waybar_styles" -maxdepth 1 -type f -name '*.css' \ + -exec basename {} .css \; \ + | sort + ) + + # mark the active style and record its index + default_row=0 + MARKER="๐Ÿ‘‰" + for i in "${!options[@]}"; do + if [[ "${options[i]}" == "$current_name" ]]; then + options[i]="$MARKER ${options[i]}" + default_row=$i + break + fi + done + + # launch rofi with the annotated list and preโ€‘selected row + choice=$(printf '%s\n' "${options[@]}" \ + | rofi -i -dmenu \ + -config "$rofi_config" \ + -mesg "$msg" \ + -selected-row "$default_row" + ) + + [[ -z "$choice" ]] && { echo "No option selected. Exiting."; exit 0; } + + # remove annotation and apply + choice=${choice# $MARKER} + apply_style "$choice" +} + +# Kill Rofi if already running before execution +if pgrep -x "rofi" >/dev/null; then + pkill rofi + #exit 0 +fi + +main diff --git a/hypr/scripts/Wlogout.sh b/hypr/scripts/Wlogout.sh new file mode 100755 index 0000000..f552b83 --- /dev/null +++ b/hypr/scripts/Wlogout.sh @@ -0,0 +1,57 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ ## +# wlogout (Power, Screen Lock, Suspend, etc) + +# Set variables for parameters. First numbers corresponts to Monitor Resolution +# i.e 2160 means 2160p +A_2160=600 +B_2160=600 +A_1600=400 +B_1600=400 +A_1440=400 +B_1440=400 +A_1080=200 +B_1080=200 +A_720=50 +B_720=50 + +# Check if wlogout is already running +if pgrep -x "wlogout" > /dev/null; then + pkill -x "wlogout" + exit 0 +fi + +# Detect monitor resolution and scaling factor +resolution=$(hyprctl -j monitors | jq -r '.[] | select(.focused==true) | .height / .scale' | awk -F'.' '{print $1}') +hypr_scale=$(hyprctl -j monitors | jq -r '.[] | select(.focused==true) | .scale') + +# Set parameters based on screen resolution and scaling factor +if ((resolution >= 2160)); then + T_val=$(awk "BEGIN {printf \"%.0f\", $A_2160 * 2160 * $hypr_scale / $resolution}") + B_val=$(awk "BEGIN {printf \"%.0f\", $B_2160 * 2160 * $hypr_scale / $resolution}") + echo "Setting parameters for resolution >= 4k" + wlogout --protocol layer-shell -b 6 -T $T_val -B $B_val & +elif ((resolution >= 1600 && resolution < 2160)); then + T_val=$(awk "BEGIN {printf \"%.0f\", $A_1600 * 1600 * $hypr_scale / $resolution}") + B_val=$(awk "BEGIN {printf \"%.0f\", $B_1600 * 1600 * $hypr_scale / $resolution}") + echo "Setting parameters for resolution >= 2.5k and < 4k" + wlogout --protocol layer-shell -b 6 -T $T_val -B $B_val & +elif ((resolution >= 1440 && resolution < 1600)); then + T_val=$(awk "BEGIN {printf \"%.0f\", $A_1440 * 1440 * $hypr_scale / $resolution}") + B_val=$(awk "BEGIN {printf \"%.0f\", $B_1440 * 1440 * $hypr_scale / $resolution}") + echo "Setting parameters for resolution >= 2k and < 2.5k" + wlogout --protocol layer-shell -b 6 -T $T_val -B $B_val & +elif ((resolution >= 1080 && resolution < 1440)); then + T_val=$(awk "BEGIN {printf \"%.0f\", $A_1080 * 1080 * $hypr_scale / $resolution}") + B_val=$(awk "BEGIN {printf \"%.0f\", $B_1080 * 1080 * $hypr_scale / $resolution}") + echo "Setting parameters for resolution >= 1080p and < 2k" + wlogout --protocol layer-shell -b 6 -T $T_val -B $B_val & +elif ((resolution >= 720 && resolution < 1080)); then + T_val=$(awk "BEGIN {printf \"%.0f\", $A_720 * 720 * $hypr_scale / $resolution}") + B_val=$(awk "BEGIN {printf \"%.0f\", $B_720 * 720 * $hypr_scale / $resolution}") + echo "Setting parameters for resolution >= 720p and < 1080p" + wlogout --protocol layer-shell -b 3 -T $T_val -B $B_val & +else + echo "Setting default parameters" + wlogout & +fi diff --git a/hypr/scripts/sddm_wallpaper.sh b/hypr/scripts/sddm_wallpaper.sh new file mode 100755 index 0000000..9487188 --- /dev/null +++ b/hypr/scripts/sddm_wallpaper.sh @@ -0,0 +1,95 @@ +#!/bin/bash +# /* ---- ๐Ÿ’ซ https://github.com/JaKooLit ๐Ÿ’ซ ---- */ +# SDDM Wallpaper and Wallust Colors Setter + +# for the upcoming changes on the simple_sddm_theme + +# variables +terminal=kitty +wallDIR="$HOME/Pictures/wallpapers" +SCRIPTSDIR="$HOME/.config/hypr/scripts" +wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current" +wallpaper_modified="$HOME/.config/hypr/wallpaper_effects/.wallpaper_modified" +# Resolve SDDM themes directory (standard paths and NixOS path) +sddm_themes_dir="/usr/share/sddm/themes" +if [ ! -d "$sddm_themes_dir" ] && [ -d "/run/current-system/sw/share/sddm/themes" ]; then + sddm_themes_dir="/run/current-system/sw/share/sddm/themes" +fi +sddm_simple="$sddm_themes_dir/simple_sddm_2" + +# rofi-wallust-sddm colors path +rofi_wallust="$HOME/.config/rofi/wallust/colors-rofi.rasi" +sddm_theme_conf="$sddm_simple/theme.conf" + +# Directory for swaync +iDIR="$HOME/.config/swaync/images" +iDIRi="$HOME/.config/swaync/icons" + +# Parse arguments +mode="effects" # default +if [[ "$1" == "--normal" ]]; then + mode="normal" +elif [[ "$1" == "--effects" ]]; then + mode="effects" +fi + +# Extract colors from rofi wallust config + +color0=$(grep -oP 'color1:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") +color1=$(grep -oP 'color0:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") +color7=$(grep -oP 'color14:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") +color10=$(grep -oP 'color10:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") +color12=$(grep -oP 'color12:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") +color13=$(grep -oP 'color13:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") +foreground=$(grep -oP 'foreground:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") +#background-color=$(grep -oP 'background:\s*\K#[A-Fa-f0-9]+' "$rofi_wallust") + +# wallpaper to use +if [[ "$mode" == "normal" ]]; then + wallpaper_path="$wallpaper_current" +else + wallpaper_path="$wallpaper_modified" +fi + +# Abort on NixOS where this repo doesn't manage SDDM and themes are typically read-only +if hostnamectl 2>/dev/null | grep -q 'Operating System: NixOS'; then + notify-send -i "$iDIR/error.png" "SDDM" "NixOS detected: skipping SDDM background change." + exit 0 +fi + +# Launch terminal and apply changes +$terminal -e bash -c " +echo 'Enter your password to update SDDM wallpapers and colors'; + +# Update the colors in the SDDM config +sudo sed -i \"s/HeaderTextColor=\\\"#.*\\\"/HeaderTextColor=\\\"$color13\\\"/\" \"$sddm_theme_conf\" +sudo sed -i \"s/DateTextColor=\\\"#.*\\\"/DateTextColor=\\\"$color13\\\"/\" \"$sddm_theme_conf\" +sudo sed -i \"s/TimeTextColor=\\\"#.*\\\"/TimeTextColor=\\\"$color13\\\"/\" \"$sddm_theme_conf\" +sudo sed -i \"s/DropdownSelectedBackgroundColor=\\\"#.*\\\"/DropdownSelectedBackgroundColor=\\\"$color13\\\"/\" \"$sddm_theme_conf\" +sudo sed -i \"s/SystemButtonsIconsColor=\\\"#.*\\\"/SystemButtonsIconsColor=\\\"$color13\\\"/\" \"$sddm_theme_conf\" +sudo sed -i \"s/SessionButtonTextColor=\\\"#.*\\\"/SessionButtonTextColor=\\\"$color13\\\"/\" \"$sddm_theme_conf\" +sudo sed -i \"s/VirtualKeyboardButtonTextColor=\\\"#.*\\\"/VirtualKeyboardButtonTextColor=\\\"$color13\\\"/\" \"$sddm_theme_conf\" +sudo sed -i \"s/HighlightBackgroundColor=\\\"#.*\\\"/HighlightBackgroundColor=\\\"$color12\\\"/\" \"$sddm_theme_conf\" +sudo sed -i \"s/LoginFieldTextColor=\\\"#.*\\\"/LoginFieldTextColor=\\\"$color12\\\"/\" \"$sddm_theme_conf\" +sudo sed -i \"s/PasswordFieldTextColor=\\\"#.*\\\"/PasswordFieldTextColor=\\\"$color12\\\"/\" \"$sddm_theme_conf\" + +sudo sed -i \"s/DropdownBackgroundColor=\\\"#.*\\\"/DropdownBackgroundColor=\\\"$color1\\\"/\" \"$sddm_theme_conf\" +sudo sed -i \"s/HighlightTextColor=\\\"#.*\\\"/HighlightTextColor=\\\"$color10\\\"/\" \"$sddm_theme_conf\" + +sudo sed -i \"s/PlaceholderTextColor=\\\"#.*\\\"/PlaceholderTextColor=\\\"$color7\\\"/\" \"$sddm_theme_conf\" +sudo sed -i \"s/UserIconColor=\\\"#.*\\\"/UserIconColor=\\\"$color7\\\"/\" \"$sddm_theme_conf\" +sudo sed -i \"s/PasswordIconColor=\\\"#.*\\\"/PasswordIconColor=\\\"$color7\\\"/\" \"$sddm_theme_conf\" + +# Copy wallpaper to SDDM theme +# Primary: set Backgrounds/default (no extension) for simple_sddm_2 +sudo cp -f \"$wallpaper_path\" \"$sddm_simple/Backgrounds/default\" || true +# Fallbacks: if theme ships default.jpg or default.png, update those too +if [ -e \"$sddm_simple/Backgrounds/default.jpg\" ]; then + sudo cp -f \"$wallpaper_path\" \"$sddm_simple/Backgrounds/default.jpg\" +fi +if [ -e \"$sddm_simple/Backgrounds/default.png\" ]; then + sudo cp -f \"$wallpaper_path\" \"$sddm_simple/Backgrounds/default.png\" +fi + +notify-send -i \"$iDIR/ja.png\" \"SDDM\" \"Background SET\" +" \ No newline at end of file diff --git a/hypr/v2.3.17 b/hypr/v2.3.17 new file mode 100644 index 0000000..31b3414 --- /dev/null +++ b/hypr/v2.3.17 @@ -0,0 +1,5 @@ +### https://github.com/JaKooLit ### +## https://github.com/JaKooLit/Hyprland-Dots +## This is to have a reference of which version would be + +## note that this will always be higher than the released versions \ No newline at end of file diff --git a/hypr/wallpaper_effects/.wallpaper_current b/hypr/wallpaper_effects/.wallpaper_current new file mode 100644 index 0000000000000000000000000000000000000000..696ba1ba31bf74a1939031a759ca7558a38b46d9 GIT binary patch literal 824309 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 z%0D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