Initial commit
This commit is contained in:
15
.gitignore
vendored
Normal file
15
.gitignore
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
# Backup files
|
||||
*~
|
||||
*.bak
|
||||
*.swp
|
||||
|
||||
# Cache files
|
||||
.cache/
|
||||
*.cache
|
||||
|
||||
# Temporary files
|
||||
/tmp/
|
||||
*.tmp
|
||||
|
||||
# Waybar backup
|
||||
waybar_backup/
|
||||
0
.initial_startup_done
Normal file
0
.initial_startup_done
Normal file
14
Monitor_Profiles/README
Normal file
14
Monitor_Profiles/README
Normal file
@@ -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.
|
||||
|
||||
52
Monitor_Profiles/default.conf
Normal file
52
Monitor_Profiles/default.conf
Normal file
@@ -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
|
||||
|
||||
16
UserConfigs/00-Readme
Normal file
16
UserConfigs/00-Readme
Normal file
@@ -0,0 +1,16 @@
|
||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
||||
|
||||
KooL's Hyprland-Dots
|
||||
|
||||
1.) Suggest not to rename any files in this directory. As this is connected and being sourced from hyprland.conf in ~/.config/hypr
|
||||
|
||||
2.) This directory, along with UserScripts directory will NOT be touch when running upgrade.sh
|
||||
|
||||
3.) However, if hyprland has a big change in settings, i.e., blur section is moved into another group, you should managed the change yourself.
|
||||
|
||||
4.) Guidance on the keybinds. Suggest NOT to assign a keybind which I set on the default Keybinds. Else will conflict. Once Hyprland decided to have a global keybinds, then I will adjust.
|
||||
|
||||
5.) If you think that the default keybinds SHOULD be adjusted, open an issue on my github page and present me a valid argument. Like conflicting to GLOBAL keybinds, etc etc etc.
|
||||
|
||||
|
||||
I will update the Hyprland-Dots wiki for guidance. Make sure to check out changelogs as well
|
||||
18
UserConfigs/01-UserDefaults.conf
Normal file
18
UserConfigs/01-UserDefaults.conf
Normal file
@@ -0,0 +1,18 @@
|
||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
||||
|
||||
# This is a file where you put your own default apps, default search Engine etc
|
||||
|
||||
# Set your default editor here uncomment and reboot to take effect.
|
||||
# NOTE, this will be automatically uncommented if you select neovim or vim to your default editor
|
||||
#env = EDITOR,vim #default editor
|
||||
|
||||
# Define preferred text editor for the KooL Quick Settings Menu (SUPER SHIFT E)
|
||||
# script will take the default EDITOR and nano as fallback
|
||||
$edit=${EDITOR:-nano}
|
||||
|
||||
# These two are for UserKeybinds.conf & Waybar Modules
|
||||
$term = kitty # Terminal
|
||||
$files = thunar # File Manager
|
||||
|
||||
# Default Search Engine for ROFI Search (SUPER S)
|
||||
$Search_Engine = "https://www.google.com/search?q={}"
|
||||
89
UserConfigs/ENVariables.conf
Normal file
89
UserConfigs/ENVariables.conf
Normal file
@@ -0,0 +1,89 @@
|
||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
||||
# Environment variables. See https://wiki.hyprland.org/Configuring/Environment-variables/
|
||||
|
||||
# Set your defaults editor through ENV in ~/.config/hypr/UserConfigs/01-UserDefaults.conf
|
||||
|
||||
# environment-variables
|
||||
# Toolkit Backend Variables
|
||||
env = GDK_BACKEND,wayland,x11,*
|
||||
env = QT_QPA_PLATFORM,wayland;xcb
|
||||
env = CLUTTER_BACKEND,wayland
|
||||
|
||||
#Run SDL2 applications on Wayland.
|
||||
#Remove or set to x11 if games that provide older versions of SDL cause compatibility issues
|
||||
#env = SDL_VIDEODRIVER,wayland
|
||||
|
||||
# xdg Specifications
|
||||
env = XDG_CURRENT_DESKTOP,Hyprland
|
||||
env = XDG_SESSION_DESKTOP,Hyprland
|
||||
env = XDG_SESSION_TYPE,wayland
|
||||
|
||||
# QT Variables
|
||||
env = QT_AUTO_SCREEN_SCALE_FACTOR,1
|
||||
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
|
||||
env = QT_QPA_PLATFORMTHEME,qt5ct
|
||||
env = QT_QPA_PLATFORMTHEME,qt6ct
|
||||
|
||||
# hyprland-qt-support
|
||||
env = QT_QUICK_CONTROLS_STYLE,org.hyprland.style
|
||||
|
||||
# xwayland apps scale fix (useful if you are use monitor scaling).
|
||||
# Set same value if you use scaling in Monitors.conf
|
||||
# 1 is 100% 1.5 is 150%
|
||||
# see https://wiki.hyprland.org/Configuring/XWayland/
|
||||
env = GDK_SCALE,1
|
||||
env = QT_SCALE_FACTOR,1
|
||||
|
||||
# Bibata-Modern-Ice-Cursor
|
||||
# NOTE! You must have the hyprcursor version to activate this.
|
||||
# https://wiki.hyprland.org/Hypr-Ecosystem/hyprcursor/
|
||||
#env = HYPRCURSOR_THEME,Bibata-Modern-Ice
|
||||
#env = HYPRCURSOR_SIZE,24
|
||||
|
||||
# firefox
|
||||
env = MOZ_ENABLE_WAYLAND,1
|
||||
|
||||
# electron >28 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.
|
||||
4
UserConfigs/LaptopDisplay.conf
Normal file
4
UserConfigs/LaptopDisplay.conf
Normal file
@@ -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
|
||||
55
UserConfigs/Laptops.conf
Normal file
55
UserConfigs/Laptops.conf
Normal file
@@ -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
|
||||
#
|
||||
59
UserConfigs/Startup_Apps.conf
Normal file
59
UserConfigs/Startup_Apps.conf
Normal file
@@ -0,0 +1,59 @@
|
||||
# Based on: /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
||||
# Edited and adapted by /* ---- https://gitea.ramforth.net ----*/
|
||||
# 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 = waybar -c "/home/joe/.config/waybar/configs/[TOP] Default"
|
||||
#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 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
|
||||
26
UserConfigs/UserAnimations.conf
Normal file
26
UserConfigs/UserAnimations.conf
Normal file
@@ -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
|
||||
}
|
||||
58
UserConfigs/UserDecorations.conf
Normal file
58
UserConfigs/UserDecorations.conf
Normal file
@@ -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 = 0.9
|
||||
fullscreen_opacity = 1.0
|
||||
|
||||
dim_inactive = true
|
||||
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
|
||||
}
|
||||
}
|
||||
87
UserConfigs/UserKeybinds.conf
Normal file
87
UserConfigs/UserKeybinds.conf
Normal file
@@ -0,0 +1,87 @@
|
||||
# /* ---- 💫 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, D, exec, pkill rofi || true && rofi -show drun -modi drun,filebrowser,run,window # Main Menu (APP Launcher)
|
||||
bind = $mainMod, B, 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, E, exec, $files #file manager
|
||||
|
||||
|
||||
# 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 ALT, E, 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 ALT, 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, 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
|
||||
120
UserConfigs/UserSettings.conf
Normal file
120
UserConfigs/UserSettings.conf
Normal file
@@ -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 = no
|
||||
kb_variant =
|
||||
kb_model =
|
||||
kb_options =
|
||||
kb_rules =
|
||||
repeat_rate = 50
|
||||
repeat_delay = 300
|
||||
|
||||
sensitivity = 0 #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 = 1
|
||||
float_switch_override_focus = false
|
||||
|
||||
touchpad {
|
||||
disable_while_typing = true
|
||||
natural_scroll = true
|
||||
clickfinger_behavior = false
|
||||
middle_button_emulation = false
|
||||
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 = false
|
||||
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 = 2 # change to 1 if want to disable
|
||||
enable_hyprcursor = true
|
||||
warp_on_change_workspace = 2
|
||||
no_warps = true
|
||||
}
|
||||
206
UserConfigs/WindowRules-old.conf
Normal file
206
UserConfigs/WindowRules-old.conf
Normal file
@@ -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, <rofi>
|
||||
|
||||
#layerrule = ignorezero, overview
|
||||
#layerrule = blur, overview
|
||||
235
UserConfigs/WindowRules.conf
Normal file
235
UserConfigs/WindowRules.conf
Normal file
@@ -0,0 +1,235 @@
|
||||
# /* ---- 💫 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 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, <rofi>
|
||||
|
||||
#layerrule = ignorezero, overview
|
||||
#layerrule = blur, overview
|
||||
32
UserConfigs/WorkSpaceRules
Normal file
32
UserConfigs/WorkSpaceRules
Normal file
@@ -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
|
||||
5
UserScripts/00-Readme
Executable file
5
UserScripts/00-Readme
Executable file
@@ -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
|
||||
14
UserScripts/RainbowBorders.sh
Executable file
14
UserScripts/RainbowBorders.sh
Executable file
@@ -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
|
||||
153
UserScripts/RofiBeats.sh
Executable file
153
UserScripts/RofiBeats.sh
Executable file
@@ -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
|
||||
30
UserScripts/RofiCalc.sh
Executable file
30
UserScripts/RofiCalc.sh
Executable file
@@ -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
|
||||
90
UserScripts/Tak0-Autodispatch.sh
Executable file
90
UserScripts/Tak0-Autodispatch.sh
Executable file
@@ -0,0 +1,90 @@
|
||||
#!/bin/bash
|
||||
# USAGE / ІНСТРУКЦІЯ:
|
||||
# 1) Run from terminal:
|
||||
# ./dispatch.sh <application_command> <target_workspace_number>
|
||||
# Example:
|
||||
# ./dispatch.sh discord 2
|
||||
#
|
||||
# 2) Call from Hyprland config (in hyprland.conf file):
|
||||
# exec-once = /path/to/dispatch.sh <application_command> <target_workspace_number>
|
||||
#
|
||||
# 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 <application_command> <target_workspace_number>
|
||||
# Наприклад:
|
||||
# ./dispatch.sh discord 2
|
||||
#
|
||||
# 2) Виклик з конфігурації Hyprland (у файлі hyprland.conf):
|
||||
# exec-once = /path/to/dispatch.sh <application_command> <target_workspace_number>
|
||||
#
|
||||
# Логи зберігаються у файлі 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 <application_command> <target_workspace_number>" >> "$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
|
||||
42
UserScripts/WallpaperAutoChange.sh
Executable file
42
UserScripts/WallpaperAutoChange.sh
Executable file
@@ -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 <dir containing images>"
|
||||
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
|
||||
148
UserScripts/WallpaperEffects.sh
Executable file
148
UserScripts/WallpaperEffects.sh
Executable file
@@ -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
|
||||
30
UserScripts/WallpaperRandom.sh
Executable file
30
UserScripts/WallpaperRandom.sh
Executable file
@@ -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"
|
||||
|
||||
248
UserScripts/WallpaperSelect.sh
Executable file
248
UserScripts/WallpaperSelect.sh
Executable file
@@ -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
|
||||
544
UserScripts/Weather.py
Executable file
544
UserScripts/Weather.py
Executable file
@@ -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'<span size="xx-large">{esc(temp_str)}</span>',
|
||||
f"<big> {icon}</big>",
|
||||
f"<b>{esc(status)}</b>",
|
||||
esc(location_text),
|
||||
f"<small>{esc(feels_str)}</small>" if feels_str else "",
|
||||
f"<b>{esc(min_max)}</b>" if min_max else "",
|
||||
f"{esc(wind_text)}\t{esc(humidity_text)}",
|
||||
f"{esc(visibility_text)}\t{esc(aqi_text)}",
|
||||
f"<i> {esc(prediction)}</i>" 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()
|
||||
87
UserScripts/Weather.sh
Executable file
87
UserScripts/Weather.sh
Executable file
@@ -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"
|
||||
69
UserScripts/ZshChangeTheme.sh
Executable file
69
UserScripts/ZshChangeTheme.sh
Executable file
@@ -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
|
||||
26
animations/00-default.conf
Normal file
26
animations/00-default.conf
Normal file
@@ -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
|
||||
}
|
||||
27
animations/01-default - v2.conf
Normal file
27
animations/01-default - v2.conf
Normal file
@@ -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
|
||||
}
|
||||
5
animations/03- Disable Animation.conf
Normal file
5
animations/03- Disable Animation.conf
Normal file
@@ -0,0 +1,5 @@
|
||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ #
|
||||
|
||||
animations {
|
||||
enabled = no
|
||||
}
|
||||
40
animations/END-4.conf
Normal file
40
animations/END-4.conf
Normal file
@@ -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
|
||||
}
|
||||
34
animations/HYDE - Vertical.conf
Normal file
34
animations/HYDE - Vertical.conf
Normal file
@@ -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%
|
||||
}
|
||||
21
animations/HYDE - default.conf
Normal file
21
animations/HYDE - default.conf
Normal file
@@ -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
|
||||
}
|
||||
27
animations/HYDE - minimal-1.conf
Normal file
27
animations/HYDE - minimal-1.conf
Normal file
@@ -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
|
||||
}
|
||||
16
animations/HYDE - minimal-2.conf
Normal file
16
animations/HYDE - minimal-2.conf
Normal file
@@ -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
|
||||
}
|
||||
41
animations/HYDE - optimized.conf
Normal file
41
animations/HYDE - optimized.conf
Normal file
@@ -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%
|
||||
}
|
||||
15
animations/ML4W - classic.conf
Normal file
15
animations/ML4W - classic.conf
Normal file
@@ -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
|
||||
}
|
||||
20
animations/ML4W - dynamic.conf
Normal file
20
animations/ML4W - dynamic.conf
Normal file
@@ -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
|
||||
}
|
||||
24
animations/ML4W - fast.conf
Normal file
24
animations/ML4W - fast.conf
Normal file
@@ -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
|
||||
}
|
||||
20
animations/ML4W - high.conf
Normal file
20
animations/ML4W - high.conf
Normal file
@@ -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
|
||||
}
|
||||
20
animations/ML4W - moving.conf
Normal file
20
animations/ML4W - moving.conf
Normal file
@@ -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
|
||||
}
|
||||
15
animations/ML4W - standard.conf
Normal file
15
animations/ML4W - standard.conf
Normal file
@@ -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
|
||||
}
|
||||
55
animations/Mahaveer - me-1.conf
Normal file
55
animations/Mahaveer - me-1.conf
Normal file
@@ -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
|
||||
}
|
||||
|
||||
|
||||
30
animations/Mahaveer - me-2.conf
Normal file
30
animations/Mahaveer - me-2.conf
Normal file
@@ -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
|
||||
}
|
||||
8
application-style.conf
Normal file
8
application-style.conf
Normal file
@@ -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
|
||||
149
configs/Keybinds.conf
Normal file
149
configs/Keybinds.conf
Normal file
@@ -0,0 +1,149 @@
|
||||
# /* ---- 💫 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
|
||||
|
||||
# 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
|
||||
50
hypridle.conf
Normal file
50
hypridle.conf
Normal file
@@ -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.
|
||||
# }
|
||||
43
hyprland.conf
Normal file
43
hyprland.conf
Normal file
@@ -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
|
||||
183
hyprlock-1080p.conf
Normal file
183
hyprlock-1080p.conf
Normal file
@@ -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 "<b> "$(date +'%A, %-d %B')" </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 = <i><span foreground="##ffffff99">🔒 Type Password</span></i>
|
||||
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 "<b> "$(uptime -p || $Scripts/UptimeNixOS.sh)" </b>"
|
||||
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 "<b> "$($Scripts/Battery.sh)" </b>"
|
||||
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
|
||||
}
|
||||
184
hyprlock.conf
Normal file
184
hyprlock.conf
Normal file
@@ -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 "<b> "$(date +'%A, %-d %B')" </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 = <i><span foreground="##ffffff99">🔒 Type Password</span></i>
|
||||
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 "<b> "$(uptime -p || $Scripts/UptimeNixOS.sh)" </b>"
|
||||
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 "<b> "$($Scripts/Battery.sh)" </b>"
|
||||
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
|
||||
}
|
||||
66
initial-boot.sh
Executable file
66
initial-boot.sh
Executable file
@@ -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
|
||||
63
monitors.conf
Normal file
63
monitors.conf
Normal file
@@ -0,0 +1,63 @@
|
||||
# /* ---- 💫 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
|
||||
|
||||
monitor=DP-1,3840x2160@60,0x0,1
|
||||
monitor=HDMI-A-1,3840x2160@60,3840x0,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
|
||||
16
scripts/AirplaneMode.sh
Executable file
16
scripts/AirplaneMode.sh
Executable file
@@ -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
|
||||
31
scripts/Animations.sh
Executable file
31
scripts/Animations.sh
Executable file
@@ -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"
|
||||
9
scripts/Battery.sh
Normal file
9
scripts/Battery.sh
Normal file
@@ -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
|
||||
69
scripts/Brightness.sh
Executable file
69
scripts/Brightness.sh
Executable file
@@ -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
|
||||
51
scripts/BrightnessKbd.sh
Executable file
51
scripts/BrightnessKbd.sh
Executable file
@@ -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
|
||||
17
scripts/ChangeBlur.sh
Executable file
17
scripts/ChangeBlur.sh
Executable file
@@ -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
|
||||
30
scripts/ChangeLayout.sh
Executable file
30
scripts/ChangeLayout.sh
Executable file
@@ -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
|
||||
49
scripts/ClipManager.sh
Executable file
49
scripts/ClipManager.sh
Executable file
@@ -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
|
||||
|
||||
254
scripts/DarkLight.sh
Executable file
254
scripts/DarkLight.sh
Executable file
@@ -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
|
||||
|
||||
40
scripts/Distro_update.sh
Executable file
40
scripts/Distro_update.sh
Executable file
@@ -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
|
||||
380
scripts/Dropterminal.sh
Executable file
380
scripts/Dropterminal.sh
Executable file
@@ -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] <terminal_command>
|
||||
# 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] <terminal_command>"
|
||||
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
|
||||
34
scripts/GameMode.sh
Executable file
34
scripts/GameMode.sh
Executable file
@@ -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
|
||||
23
scripts/Hypridle.sh
Executable file
23
scripts/Hypridle.sh
Executable file
@@ -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
|
||||
99
scripts/Hyprsunset.sh
Executable file
99
scripts/Hyprsunset.sh
Executable file
@@ -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="<span size='18pt'>$(icon_on)</span>"
|
||||
cls="on"
|
||||
tip="Night light on @ ${TARGET_TEMP}K"
|
||||
else
|
||||
txt="<span size='16pt'>$(icon_off)</span>"
|
||||
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
|
||||
39
scripts/KeyBinds.sh
Executable file
39
scripts/KeyBinds.sh
Executable file
@@ -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"
|
||||
72
scripts/KeyHints.sh
Executable file
72
scripts/KeyHints.sh
Executable file
@@ -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" ""\
|
||||
11
scripts/KillActiveProcess.sh
Executable file
11
scripts/KillActiveProcess.sh
Executable file
@@ -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
|
||||
136
scripts/Kitty_themes.sh
Executable file
136
scripts/Kitty_themes.sh
Executable file
@@ -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
|
||||
73
scripts/KooLsDotsUpdate.sh
Executable file
73
scripts/KooLsDotsUpdate.sh
Executable file
@@ -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
|
||||
117
scripts/Kool_Quick_Settings.sh
Executable file
117
scripts/Kool_Quick_Settings.sh
Executable file
@@ -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 <<EOF
|
||||
view/edit User Defaults
|
||||
view/edit ENV variables
|
||||
view/edit Window Rules
|
||||
view/edit User Keybinds
|
||||
view/edit User Settings
|
||||
view/edit Startup Apps
|
||||
view/edit Decorations
|
||||
view/edit Animations
|
||||
view/edit Laptop Keybinds
|
||||
view/edit Default Keybinds
|
||||
Choose Kitty Terminal Theme
|
||||
Configure Monitors (nwg-displays)
|
||||
Configure Workspace Rules (nwg-displays)
|
||||
GTK Settings (nwg-look)
|
||||
QT Apps Settings (qt6ct)
|
||||
QT Apps Settings (qt5ct)
|
||||
Choose Hyprland Animations
|
||||
Choose Monitor Profiles
|
||||
Choose Rofi Themes
|
||||
Search for Keybinds
|
||||
Toggle Game Mode
|
||||
Switch Dark-Light Theme
|
||||
EOF
|
||||
}
|
||||
|
||||
# Main function to handle menu selection
|
||||
main() {
|
||||
choice=$(menu | rofi -i -dmenu -config $rofi_theme -mesg "$msg")
|
||||
|
||||
# Map choices to corresponding files
|
||||
case "$choice" in
|
||||
"view/edit User Defaults") file="$UserConfigs/01-UserDefaults.conf" ;;
|
||||
"view/edit ENV variables") file="$UserConfigs/ENVariables.conf" ;;
|
||||
"view/edit Window Rules") file="$UserConfigs/WindowRules.conf" ;;
|
||||
"view/edit User Keybinds") file="$UserConfigs/UserKeybinds.conf" ;;
|
||||
"view/edit User Settings") file="$UserConfigs/UserSettings.conf" ;;
|
||||
"view/edit Startup Apps") file="$UserConfigs/Startup_Apps.conf" ;;
|
||||
"view/edit Decorations") file="$UserConfigs/UserDecorations.conf" ;;
|
||||
"view/edit Animations") file="$UserConfigs/UserAnimations.conf" ;;
|
||||
"view/edit Laptop Keybinds") file="$UserConfigs/Laptops.conf" ;;
|
||||
"view/edit Default Keybinds") file="$configs/Keybinds.conf" ;;
|
||||
"Choose Kitty Terminal Theme") $scriptsDir/Kitty_themes.sh ;;
|
||||
"Configure Monitors (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 ;;
|
||||
"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
|
||||
7
scripts/LockScreen.sh
Executable file
7
scripts/LockScreen.sh
Executable file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
||||
|
||||
# For Hyprlock
|
||||
#pidof hyprlock || hyprlock -q
|
||||
|
||||
loginctl lock-session
|
||||
62
scripts/MediaCtrl.sh
Executable file
62
scripts/MediaCtrl.sh
Executable file
@@ -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
|
||||
42
scripts/MonitorProfiles.sh
Executable file
42
scripts/MonitorProfiles.sh
Executable file
@@ -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 &
|
||||
21
scripts/Polkit-NixOS.sh
Executable file
21
scripts/Polkit-NixOS.sh
Executable file
@@ -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."
|
||||
34
scripts/Polkit.sh
Executable file
34
scripts/Polkit.sh
Executable file
@@ -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
|
||||
16
scripts/PortalHyprland.sh
Executable file
16
scripts/PortalHyprland.sh
Executable file
@@ -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 &
|
||||
|
||||
55
scripts/Refresh.sh
Executable file
55
scripts/Refresh.sh
Executable file
@@ -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
|
||||
48
scripts/RefreshNoWaybar.sh
Executable file
48
scripts/RefreshNoWaybar.sh
Executable file
@@ -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
|
||||
1871
scripts/RofiEmoji.sh
Executable file
1871
scripts/RofiEmoji.sh
Executable file
File diff suppressed because it is too large
Load Diff
36
scripts/RofiSearch.sh
Executable file
36
scripts/RofiSearch.sh
Executable file
@@ -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
|
||||
229
scripts/RofiThemeSelector-modified.sh
Executable file
229
scripts/RofiThemeSelector-modified.sh
Executable file
@@ -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 <qball@gmpclient.org>
|
||||
|
||||
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 <b>Enter</b>.
|
||||
<b>Alt-a</b> to accept the new theme.
|
||||
<b>Escape</b> to cancel
|
||||
Current theme: <b>${CUR}</b>
|
||||
<span weight=\"bold\" size=\"xx-small\">When setting a new theme this will override previous theme settings.
|
||||
Please update your config file if you have local modifications.</span>"""
|
||||
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}"
|
||||
154
scripts/RofiThemeSelector.sh
Executable file
154
scripts/RofiThemeSelector.sh
Executable file
@@ -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
|
||||
164
scripts/ScreenShot.sh
Executable file
164
scripts/ScreenShot.sh
Executable file
@@ -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
|
||||
77
scripts/Sounds.sh
Executable file
77
scripts/Sounds.sh
Executable file
@@ -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"
|
||||
104
scripts/SwitchKeyboardLayout.sh
Executable file
104
scripts/SwitchKeyboardLayout.sh
Executable file
@@ -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"
|
||||
90
scripts/Tak0-Autodispatch.sh
Executable file
90
scripts/Tak0-Autodispatch.sh
Executable file
@@ -0,0 +1,90 @@
|
||||
#!/bin/bash
|
||||
# USAGE / ІНСТРУКЦІЯ:
|
||||
# 1) Run from terminal:
|
||||
# ./dispatch.sh <application_command> <target_workspace_number>
|
||||
# Example:
|
||||
# ./dispatch.sh discord 2
|
||||
#
|
||||
# 2) Call from Hyprland config (in hyprland.conf file):
|
||||
# exec-once = /path/to/dispatch.sh <application_command> <target_workspace_number>
|
||||
#
|
||||
# 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 <application_command> <target_workspace_number>
|
||||
# Наприклад:
|
||||
# ./dispatch.sh discord 2
|
||||
#
|
||||
# 2) Виклик з конфігурації Hyprland (у файлі hyprland.conf):
|
||||
# exec-once = /path/to/dispatch.sh <application_command> <target_workspace_number>
|
||||
#
|
||||
# Логи зберігаються у файлі 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 <application_command> <target_workspace_number>" >> "$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
|
||||
123
scripts/Tak0-Per-Window-Switch.sh
Executable file
123
scripts/Tak0-Per-Window-Switch.sh
Executable file
@@ -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
|
||||
32
scripts/TouchPad.sh
Executable file
32
scripts/TouchPad.sh
Executable file
@@ -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
|
||||
33
scripts/UptimeNixOS.sh
Executable file
33
scripts/UptimeNixOS.sh
Executable file
@@ -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"
|
||||
143
scripts/Volume.sh
Executable file
143
scripts/Volume.sh
Executable file
@@ -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
|
||||
59
scripts/WallustSwww.sh
Executable file
59
scripts/WallustSwww.sh
Executable file
@@ -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
|
||||
55
scripts/WaybarCava.sh
Executable file
55
scripts/WaybarCava.sh
Executable file
@@ -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" <<EOF
|
||||
[general]
|
||||
framerate = 30
|
||||
bars = 10
|
||||
|
||||
[input]
|
||||
method = pulse
|
||||
source = auto
|
||||
|
||||
[output]
|
||||
method = raw
|
||||
raw_target = /dev/stdout
|
||||
data_format = ascii
|
||||
ascii_max_range = 7
|
||||
EOF
|
||||
|
||||
# Stream cava output and translate digits 0..7 to bar glyphs
|
||||
exec cava -p "$config_file" | sed -u "$dict"
|
||||
71
scripts/WaybarLayout.sh
Executable file
71
scripts/WaybarLayout.sh
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
||||
# Script for waybar layout or configs
|
||||
|
||||
IFS=$'\n\t'
|
||||
|
||||
# Define directories
|
||||
waybar_layouts="$HOME/.config/waybar/configs"
|
||||
waybar_config="$HOME/.config/waybar/config"
|
||||
SCRIPTSDIR="$HOME/.config/hypr/scripts"
|
||||
rofi_config="$HOME/.config/rofi/config-waybar-layout.rasi"
|
||||
msg=' 🎌 NOTE: Some waybar LAYOUT NOT fully compatible with some STYLES'
|
||||
|
||||
# Apply selected configuration
|
||||
apply_config() {
|
||||
ln -sf "$waybar_layouts/$1" "$waybar_config"
|
||||
"${SCRIPTSDIR}/Refresh.sh" &
|
||||
}
|
||||
|
||||
main() {
|
||||
# Resolve current symlink target and basename
|
||||
current_target=$(readlink -f "$waybar_config")
|
||||
current_name=$(basename "$current_target")
|
||||
|
||||
# Build sorted list of available layouts
|
||||
mapfile -t options < <(
|
||||
find -L "$waybar_layouts" -maxdepth 1 -type f -printf '%f\n' | sort
|
||||
)
|
||||
|
||||
# Mark and locate the active layout
|
||||
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, pre‑selecting the active row
|
||||
choice=$(printf '%s\n' "${options[@]}" \
|
||||
| rofi -i -dmenu \
|
||||
-config "$rofi_config" \
|
||||
-mesg "$msg" \
|
||||
-selected-row "$default_row"
|
||||
)
|
||||
|
||||
# Exit if nothing chosen
|
||||
[[ -z "$choice" ]] && { echo "No option selected. Exiting."; exit 0; }
|
||||
|
||||
# Strip marker before applying
|
||||
choice=${choice# $MARKER}
|
||||
|
||||
case "$choice" in
|
||||
"no panel")
|
||||
pgrep -x "waybar" && pkill waybar || true
|
||||
;;
|
||||
*)
|
||||
apply_config "$choice"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Kill Rofi if already running before execution
|
||||
if pgrep -x "rofi" >/dev/null; then
|
||||
pkill rofi
|
||||
#exit 0
|
||||
fi
|
||||
|
||||
main
|
||||
44
scripts/WaybarScripts.sh
Executable file
44
scripts/WaybarScripts.sh
Executable file
@@ -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
|
||||
64
scripts/WaybarStyles.sh
Executable file
64
scripts/WaybarStyles.sh
Executable file
@@ -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"
|
||||
pkill waybar && waybar &
|
||||
}
|
||||
|
||||
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
|
||||
57
scripts/Wlogout.sh
Executable file
57
scripts/Wlogout.sh
Executable file
@@ -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
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user