hypr: accept all JaKooLit updates

This commit is contained in:
Petar Kapriš 2026-05-13 21:22:17 +02:00
parent a6e1cf7ed0
commit 68bc595c8b
137 changed files with 6281 additions and 1241 deletions

View file

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# default Monitor config # default Monitor config
# Monitor Configuration # Monitor Configuration

View file

@ -1,4 +1,9 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
KooL's Hyprland-Dots KooL's Hyprland-Dots

View file

@ -1,4 +1,9 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# This is a file where you put your own default apps, default search Engine etc # This is a file where you put your own default apps, default search Engine etc
@ -11,8 +16,8 @@
$edit=${EDITOR:-nano} $edit=${EDITOR:-nano}
# These two are for UserKeybinds.conf & Waybar Modules # These two are for UserKeybinds.conf & Waybar Modules
$term = foot # Terminal $term = kitty # Terminal
$files = nemo # File Manager $files = thunar # File Manager
# Default Search Engine for ROFI Search (SUPER S) # Default Search Engine for ROFI Search (SUPER S)
$Search_Engine = "https://www.google.com/search?q={}" $Search_Engine = "https://www.google.com/search?q={}"

View file

@ -1,4 +1,9 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Environment variables. See https://wiki.hyprland.org/Configuring/Environment-variables/ # Environment variables. See https://wiki.hyprland.org/Configuring/Environment-variables/
# Set your defaults editor through ENV in ~/.config/hypr/UserConfigs/01-UserDefaults.conf # Set your defaults editor through ENV in ~/.config/hypr/UserConfigs/01-UserDefaults.conf

View file

@ -1,3 +1,9 @@
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# NOTE, THIS FILE IS BEING USED by disabling Laptop display monitor behaviour when closing lid. # NOTE, THIS FILE IS BEING USED by disabling Laptop display monitor behaviour when closing lid.
# See notes on Laptops.conf # See notes on Laptops.conf

View file

@ -1,4 +1,9 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# See https://wiki.hyprland.org/Configuring/Keywords/ for more variable settings # See https://wiki.hyprland.org/Configuring/Keywords/ for more variable settings
# These configs are mostly for laptops. This is addemdum to Keybinds.conf # These configs are mostly for laptops. This is addemdum to Keybinds.conf

View file

@ -1,3 +1,8 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Commands and Apps to be executed at launch # Commands and Apps to be executed at launch

View file

@ -1,4 +1,9 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
animations { animations {
enabled = yes enabled = yes

View file

@ -1,4 +1,9 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Decoration Settings # Decoration Settings
# Hyprland Wiki Links # Hyprland Wiki Links
@ -37,13 +42,13 @@ decoration {
color_inactive = $color10 color_inactive = $color10
} }
blur { blur {
enabled = true enabled = true
size = 6 size = 6
passes = 2 passes = 3
ignore_opacity = true
new_optimizations = true new_optimizations = true
xray = true
ignore_opacity = true
special = true special = true
popups = true popups = true
} }

View file

@ -1,11 +1,15 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# This is where you put your own keybinds. Be Mindful to check as well ~/.config/hypr/configs/Keybinds.conf to avoid conflict # 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 # 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 https://wiki.hyprland.org/Configuring/Keywords/ for more settings and variables
# See also Laptops.conf for laptops keybinds # See also Laptops.conf for laptops keybinds
# /* ---- ✴️ Variables ✴️ ---- */ #
$mainMod = SUPER $mainMod = SUPER
$scriptsDir = $HOME/.config/hypr/scripts $scriptsDir = $HOME/.config/hypr/scripts
$UserScripts = $HOME/.config/hypr/UserScripts $UserScripts = $HOME/.config/hypr/UserScripts

View file

@ -1,4 +1,9 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# User Settings # User Settings
# This is where you put your own settings as this will not be touched during update # This is where you put your own settings as this will not be touched during update
# if the upgrade.sh is used. # if the upgrade.sh is used.

View file

@ -1,6 +1,18 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# For window rules and layerrules # For window rules and layerrules
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# This file is used to add or overwrite window rules # This file is used to add or overwrite window rules
# This file will not be modified during dotfiles updates # This file will not be modified during dotfiles updates
# Optional Layer rules
# To Resolve blurred corners in rofi Uncomment
# layerrule = blur on, ignore_alpha 0, match:namespace rofi

View file

@ -1,4 +1,9 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# NOTE: THIS IS NOT BEING SOURCED by hyprland # NOTE: THIS IS NOT BEING SOURCED by hyprland
# It is only here as a guide if you want to do it manually # It is only here as a guide if you want to do it manually

View file

@ -1,4 +1,9 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Place your new scripts here. # 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. # If you need to edit a script from main script (~/.config/hypr/scripts), copy it on this directory, and edit.

View file

@ -0,0 +1,237 @@
#!/usr/bin/env bash
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# RainbowBorders-low-cpu.sh — low-overhead animated rainbow border for Hyprland
#
# Goal
# Animate Hyprland's active border with a rotating rainbow gradient while
# minimizing CPU usage on older systems by:
# - Using a modest update rate (default 1.0s) and larger angle steps
# - Avoiding subshell-heavy work inside the loop
# - Using Hyprland's command socket via socat when available
# - Quoting/validating inputs and suppressing noisy output
# - Preventing multiple concurrent instances
# - Optionally restoring the previous border value on exit
#
# Credits
# Initial source/idea by: DemiGoD
# Adaptation and optimization for low-CPU usage by: Hyprland-Dots maintainers
#
# Usage
# You can customize behavior via environment variables when launching:
# RB_INTERVAL Float seconds between updates (default: 1.0)
# RB_STEP_DEG Integer degrees per tick (default: 10)
# RB_START_DEG Integer starting angle (default: 0)
# RB_TARGET Hypr option to update (default: general:col.active_border)
# RB_COLORS Space-separated color list (default: 10-color rainbow below)
# RB_RESTORE If "1", attempt to restore previous value on exit (loop mode; default: 1)
# RB_LOCKFILE Path to a PID lock file (loop mode; default: /tmp/hypr-rainbowborders.lock)
# RB_TRANSPORT auto|socat|hyprctl (default: auto)
# - socat: send each command via Hyprland's command socket
# using socat (one short-lived connection per tick)
# - hyprctl: spawn hyprctl each tick
# - auto: prefer socat if possible, otherwise hyprctl
# RB_ONCE 1 to apply once and exit (no animation; default: 0)
#
# Example (slower animation):
# RB_INTERVAL=1.5 RB_STEP_DEG=12 ~/.config/hypr/UserScripts/RainbowBorders-low-cpu.sh &
#
# Notes
# - This focuses on the active border only. Animating inactive borders too
# will increase updates and CPU usage.
# - Higher RB_INTERVAL (e.g., 1.02.0s) and larger RB_STEP_DEG (1020)
# reduce per-second work substantially.
set -u
# Defaults (can be overridden by env vars)
RB_INTERVAL="${RB_INTERVAL:-1.0}"
RB_STEP_DEG="${RB_STEP_DEG:-10}"
RB_START_DEG="${RB_START_DEG:-0}"
RB_TARGET="${RB_TARGET:-general:col.active_border}"
RB_COLORS_DEFAULT="0xffff0000 0xffff8000 0xffffff00 0xff80ff00 0xff00ff00 0xff00ff80 0xff00ffff 0xff0080ff 0xff0000ff 0xff8000ff"
RB_COLORS="${RB_COLORS:-$RB_COLORS_DEFAULT}"
RB_RESTORE="${RB_RESTORE:-1}"
RB_LOCKFILE="${RB_LOCKFILE:-/tmp/hypr-rainbowborders.lock}"
RB_TRANSPORT="${RB_TRANSPORT:-auto}"
RB_ONCE="${RB_ONCE:-0}"
# ---------- helpers ----------
log() { printf '[RainbowBorders-low-cpu] %s\n' "$*" >&2; }
die() { log "ERROR: $*"; exit 1; }
usage() {
cat <<'EOF'
Usage: RainbowBorders-low-cpu.sh [options]
Options:
-h, --help Show this help and exit
--once, --run-once, -1
Apply the current gradient once and exit (no animation).
In this mode, RB_RESTORE is ignored (the color persists).
Environment overrides:
RB_INTERVAL Seconds between updates (default: 1.0)
RB_STEP_DEG Degrees per tick (default: 10)
RB_START_DEG Starting angle (default: 0)
RB_TARGET Hypr option to update (default: general:col.active_border)
RB_COLORS Space-separated colors (default: 10-color rainbow)
RB_RESTORE 1 to restore previous value on exit (loop mode only; default: 1)
RB_LOCKFILE PID lock path (loop mode only; default: /tmp/hypr-rainbowborders.lock)
RB_TRANSPORT auto|socat|hyprctl (default: auto)
RB_ONCE 1 for one-shot mode (same as --once)
Examples:
Animate (light CPU):
RB_INTERVAL=1.5 RB_STEP_DEG=12 ./RainbowBorders-low-cpu.sh &
Set a static rainbow once (no animation):
./RainbowBorders-low-cpu.sh --once
EOF
}
is_float() { [[ "$1" =~ ^[0-9]+(\.[0-9]+)?$|^\.[0-9]+$ ]]; }
is_int() { [[ "$1" =~ ^[0-9]+$ ]]; }
# ---------- parse CLI flags ----------
while (( $# )); do
case "$1" in
-h|--help) usage; exit 0 ;;
--once|--run-once|-1) RB_ONCE=1 ;;
*) log "Unknown option: $1"; usage; exit 2 ;;
esac
shift
done
# ---------- validation ----------
if ! is_float "$RB_INTERVAL"; then
log "WARN: RB_INTERVAL='$RB_INTERVAL' invalid; defaulting to 1.0"
RB_INTERVAL="1.0"
fi
if ! is_int "$RB_STEP_DEG"; then
log "WARN: RB_STEP_DEG='$RB_STEP_DEG' invalid; defaulting to 10"
RB_STEP_DEG="10"
fi
if ! is_int "$RB_START_DEG"; then
log "WARN: RB_START_DEG='$RB_START_DEG' invalid; defaulting to 0"
RB_START_DEG="0"
fi
# ---------- single-instance lock (PID file) ----------
cleanup_lock() { [[ -f "$RB_LOCKFILE" ]] && rm -f "$RB_LOCKFILE"; }
if [[ "$RB_ONCE" != "1" ]]; then
if [[ -f "$RB_LOCKFILE" ]]; then
oldpid="$(cat "$RB_LOCKFILE" 2>/dev/null || true)"
if [[ -n "${oldpid:-}" ]] && kill -0 "$oldpid" 2>/dev/null; then
log "Another instance is running (pid=$oldpid). Exiting."
exit 0
else
# Stale lock
rm -f "$RB_LOCKFILE" || true
fi
fi
printf '%d' "$$" >"$RB_LOCKFILE" 2>/dev/null || die "Cannot write lockfile $RB_LOCKFILE"
fi
# ---------- transport (socat vs hyprctl) ----------
RB_MODE=""
RB_SOCK=""
open_transport() {
local want="$RB_TRANSPORT"
local uid; uid=$(id -u 2>/dev/null || echo 0)
local base="${XDG_RUNTIME_DIR:-/run/user/$uid}"
local sig="${HYPRLAND_INSTANCE_SIGNATURE:-}"
if [[ -n "$sig" ]]; then
RB_SOCK="$base/hypr/$sig/.socket.sock"
fi
# Prefer socat if requested/allowed and socket is available
if [[ "$want" == "socat" || "$want" == "auto" ]]; then
if command -v socat >/dev/null 2>&1 && [[ -n "$RB_SOCK" && -S "$RB_SOCK" ]]; then
RB_MODE="socat"
return 0
elif [[ "$want" == "socat" ]]; then
die "RB_TRANSPORT=socat requested but 'socat' or Hyprland socket is unavailable"
fi
fi
# Fallback to hyprctl: require presence and connectivity
command -v hyprctl >/dev/null 2>&1 || die "hyprctl not found and socat transport unavailable"
if ! hyprctl monitors >/dev/null 2>&1; then
die "hyprctl cannot reach a running Hyprland instance"
fi
RB_MODE="hyprctl"
return 0
}
open_transport || exit 1
log "Using transport: $RB_MODE"
# ---------- optional restore of previous border value ----------
PREV_VALUE=""
if [[ "$RB_RESTORE" == "1" && "$RB_ONCE" != "1" ]]; then
if command -v hyprctl >/dev/null 2>&1; then
# hyprctl getoption <opt> prints various formats; try common keys
PREV_VALUE="$(hyprctl getoption "$RB_TARGET" 2>/dev/null \
| sed -n 's/^.*str:[[:space:]]\+//p; s/^.*string:[[:space:]]\+//p; s/^.*value:[[:space:]]\+//p' \
| tail -n1)"
fi
fi
restore_previous() {
if [[ "$RB_RESTORE" == "1" && -n "${PREV_VALUE:-}" ]]; then
if [[ "$RB_MODE" == "socat" ]]; then
printf 'keyword %s %s\n' "$RB_TARGET" "$PREV_VALUE" | socat - "UNIX-CONNECT:$RB_SOCK" >/dev/null 2>&1 || true
else
hyprctl keyword "$RB_TARGET" "$PREV_VALUE" >/dev/null 2>&1 || true
fi
fi
}
on_exit() {
restore_previous
cleanup_lock
}
# In loop mode, set traps for cleanup/restore
if [[ "$RB_ONCE" != "1" ]]; then
trap on_exit INT TERM EXIT
fi
# ---------- main logic ----------
angle=$(( RB_START_DEG % 360 ))
STEP=$(( RB_STEP_DEG % 360 ))
(( STEP == 0 )) && STEP=10
write_border() {
local a="$1"
if [[ "$RB_MODE" == "socat" ]]; then
printf 'keyword %s %s %sdeg\n' "$RB_TARGET" "$RB_COLORS" "$a" | socat - "UNIX-CONNECT:$RB_SOCK" >/dev/null 2>&1 || true
else
hyprctl keyword "$RB_TARGET" "$RB_COLORS ${a}deg" >/dev/null 2>&1 || true
fi
}
if [[ "$RB_ONCE" == "1" ]]; then
# Single write and exit; do not restore previous (intended to persist)
write_border "$angle" || log "WARN: one-shot write failed"
exit 0
fi
# Prime first write (avoid waiting one interval)
write_border "$angle" || log "WARN: initial write failed"
while :; do
# Advance angle and write; failures are non-fatal to keep CPU use minimal
angle=$(( (angle + STEP) % 360 ))
write_border "$angle"
sleep "$RB_INTERVAL"
done

View file

@ -0,0 +1,94 @@
#!/usr/bin/env bash
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Smooth border cycling effect using Wallust palette or full rainbow
# Possible values: "wallust_random", "rainbow", "gradient_flow"
EFFECT_TYPE="gradient_flow"
WALLUST_COLORS_SOURCE="$HOME/.config/hypr/wallust/wallust-hyprland.conf"
WALLUST_COLORS=()
# ---------- LOAD WALLUST COLORS ----------
if [[ "$EFFECT_TYPE" == "wallust_random" || "$EFFECT_TYPE" == "gradient_flow" ]]; then
# Accept either hex (0xffRRGGBB) or rgb(r,g,b) and normalize to 0xffRRGGBB
mapfile -t WALLUST_COLORS < <(
grep -E '^\$color[0-9]+' "$WALLUST_COLORS_SOURCE" | awk '
function hex2(s){ return (length(s)==6 ? "0xff"s : ""); }
function rgb2(r,g,b){ return sprintf("0xff%02x%02x%02x", r, g, b); }
{
if (match($0, /0x([0-9a-fA-F]{8})/, m)) { print "0x" m[1]; next }
if (match($0, /#([0-9a-fA-F]{6})/, m)) { print hex2(m[1]); next }
if (match($0, /rgb\(([0-9]+),[ ]*([0-9]+),[ ]*([0-9]+)\)/, m)) {
print rgb2(m[1], m[2], m[3]); next
}
}'
)
if (( ${#WALLUST_COLORS[@]} == 0 )); then
# If wallust colors can't be loaded, fall back to random_hex
EFFECT_TYPE="rainbow"
fi
fi
# ---------- RANDOM WALLUST COLORS ----------
function wallust_random() {
echo "${WALLUST_COLORS[RANDOM % ${#WALLUST_COLORS[@]}]}"
}
# ---------- RAINBOW COLORS ----------
function random_hex() {
echo "0xff$(openssl rand -hex 3)"
}
# ---------- FLOW MODE ----------
BASE_COLOR="${WALLUST_COLORS[10]}"
GRAD1_COLOR="${WALLUST_COLORS[14]}"
GRAD2_COLOR="${WALLUST_COLORS[13]}"
GLOW_COLOR="${WALLUST_COLORS[15]}"
MAX_POS=10
GLOW_POS=0
function gradient_flow_color() {
local pos=$1
local d=$(( pos - GLOW_POS ))
# wrap distance (-9..9)
if (( d > MAX_POS/2 )); then d=$((d - MAX_POS)); fi
if (( d < -MAX_POS/2 )); then d=$((d + MAX_POS)); fi
case "${d#-}" in
0) echo "$GLOW_COLOR" ;;
1) echo "$GRAD1_COLOR" ;;
2) echo "$GRAD2_COLOR" ;;
*) echo "$BASE_COLOR" ;;
esac
if (( pos == MAX_POS - 1 )); then
GLOW_POS=$(( (GLOW_POS + 1) % MAX_POS ))
fi
}
# ---------- Main function ----------
function get_color() {
if [[ "$EFFECT_TYPE" == "wallust_random" && ${#WALLUST_COLORS[@]} -gt 0 ]]; then
wallust_random
elif [[ "$EFFECT_TYPE" == "gradient_flow" && ${#WALLUST_COLORS[@]} -ge 16 ]]; then
gradient_flow_color "$1"
else
random_hex
fi
}
# border effect for ACTIVE window
hyprctl keyword general:col.active_border $(get_color 0) $(get_color 1) $(get_color 2) $(get_color 3) $(get_color 4) $(get_color 5) $(get_color 6) $(get_color 7) $(get_color 8) $(get_color 9) 270deg
# border effect for INACTIVE windows
#hyprctl keyword general:col.inactive_border $(get_color 0) $(get_color 1) $(get_color 2) $(get_color 3) $(get_color 4) $(get_color 5) $(get_color 6) $(get_color 7) $(get_color 8) $(get_color 9) 270deg

View file

@ -1,14 +0,0 @@
#!/usr/bin/env 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

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# RofiBeats - unified, dynamic UI (add, remove, manage, play) # RofiBeats - unified, dynamic UI (add, remove, manage, play)
mDIR="$HOME/Music/" mDIR="$HOME/Music/"

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# /* Calculator (using qalculate) and rofi */ # /* Calculator (using qalculate) and rofi */
# /* Submitted by: https://github.com/JosephArmas */ # /* Submitted by: https://github.com/JosephArmas */

View file

@ -1,5 +1,11 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# USAGE / ІНСТРУКЦІЯ: # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# USAGE:
# 1) Run from terminal: # 1) Run from terminal:
# ./dispatch.sh <application_command> <target_workspace_number> # ./dispatch.sh <application_command> <target_workspace_number>
# Example: # Example:
@ -14,77 +20,49 @@
# Notes: # Notes:
# - Script waits about ~9 seconds (30 iterations of 0.3 sec) for window to appear. # - 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. # - 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" LOGFILE="$(dirname "$0")/dispatch.log"
# Log file path located next to the script. # Log file path located next to the script.
# Файл логів розташований поруч зі скриптом.
APP=$1 APP=$1
# The application command or window class to launch or match. # The application command or window class to launch or match.
# Команда для запуску аплікації або клас вікна для пошуку.
TARGET_WORKSPACE=$2 TARGET_WORKSPACE=$2
# The target workspace number where the window should be moved. # The target workspace number where the window should be moved.
# Цільовий номер воркспейсу, куди потрібно перемістити вікно.
# Check if required arguments are provided. # Check if required arguments are provided.
# Перевірка наявності необхідних параметрів.
if [[ -z "$APP" || -z "$TARGET_WORKSPACE" ]]; then if [[ -z "$APP" || -z "$TARGET_WORKSPACE" ]]; then
echo "Usage: $0 <application_command> <target_workspace_number>" >> "$LOGFILE" 2>&1 echo "Usage: $0 <application_command> <target_workspace_number>" >>"$LOGFILE" 2>&1
exit 1 exit 1
fi fi
echo "Starting dispatch of '$APP' to workspace $TARGET_WORKSPACE at $(date)" >> "$LOGFILE" echo "Starting dispatch of '$APP' to workspace $TARGET_WORKSPACE at $(date)" >>"$LOGFILE"
# Starting the dispatch process and logging the event. # Starting the dispatch process and logging the event.
# Початок процесу диспатчу, запис у лог.
# Avoid early workspace focus issues by switching workspace first. # Avoid early workspace focus issues by switching workspace first.
# Уникаємо проблем з раннім фокусом, спочатку переключаємо воркспейс. hyprctl dispatch workspace "$TARGET_WORKSPACE" >>"$LOGFILE" 2>&1
hyprctl dispatch workspace "$TARGET_WORKSPACE" >> "$LOGFILE" 2>&1
sleep 0.4 sleep 0.4
# Launch the application in the background and disown it. # Launch the application in the background and disown it.
# Запускаємо аплікацію у фоновому режимі та відв’язуємо від терміналу. $APP &
$APP & disown disown
pid=$! pid=$!
echo "Launched '$APP' with PID $pid" >> "$LOGFILE" echo "Launched '$APP' with PID $pid" >>"$LOGFILE"
# Log the launched process ID. # Log the launched process ID.
# Лог процесу запуску з PID.
# Wait for the application window to appear (matching window class). # Wait for the application window to appear (matching window class).
# Чекаємо появи вікна аплікації (за класом вікна).
for i in {1..30}; do for i in {1..30}; do
win=$(hyprctl clients -j | jq -r --arg APP "$APP" ' win=$(hyprctl clients -j | jq -r --arg APP "$APP" '
.[] | select(.class | test($APP;"i")) | .address' 2>>"$LOGFILE") .[] | select(.class | test($APP;"i")) | .address' 2>>"$LOGFILE")
if [[ -n "$win" ]]; then if [[ -n "$win" ]]; then
echo "Found window $win for app '$APP', moving to workspace $TARGET_WORKSPACE" >> "$LOGFILE" echo "Found window $win for app '$APP', moving to workspace $TARGET_WORKSPACE" >>"$LOGFILE"
# Move the window to the target workspace. # Move the window to the target workspace.
# Переміщаємо вікно на цільовий воркспейс. hyprctl dispatch movetoworkspace "$TARGET_WORKSPACE,address:$win" >>"$LOGFILE" 2>&1
hyprctl dispatch movetoworkspace "$TARGET_WORKSPACE,address:$win" >> "$LOGFILE" 2>&1 exit 0
exit 0 fi
fi sleep 0.3
sleep 0.3
done done
echo "ERROR: Window for '$APP' was NOT found or dispatched properly to workspace $TARGET_WORKSPACE at $(date)" >> "$LOGFILE" 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. # Log error if window was not found or dispatched correctly.
# Запис помилки, якщо вікно не знайдено або неправильно диспатчено.
exit 1 exit 1

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# source https://wiki.archlinux.org/title/Hyprland#Using_a_script_to_change_wallpaper_every_X_minutes # 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 # This script will randomly go through the files of a directory, setting it
@ -10,6 +15,11 @@
wallust_refresh=$HOME/.config/hypr/scripts/RefreshNoWaybar.sh wallust_refresh=$HOME/.config/hypr/scripts/RefreshNoWaybar.sh
focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}') focused_monitor=$(hyprctl monitors | awk '/^Monitor/{name=$2} /focused: yes/{print name}')
if command -v awww >/dev/null 2>&1; then
WWW="awww"
else
WWW="swww"
fi
if [[ $# -lt 1 ]] || [[ ! -d $1 ]]; then if [[ $# -lt 1 ]] || [[ ! -d $1 ]]; then
echo "Usage: echo "Usage:
@ -17,7 +27,7 @@ if [[ $# -lt 1 ]] || [[ ! -d $1 ]]; then
exit 1 exit 1
fi fi
# Edit below to control the images transition # Edit below to control the images transition (swww/awww)
export SWWW_TRANSITION_FPS=60 export SWWW_TRANSITION_FPS=60
export SWWW_TRANSITION_TYPE=simple export SWWW_TRANSITION_TYPE=simple
@ -31,7 +41,7 @@ while true; do
done \ done \
| sort -n | cut -d':' -f2- \ | sort -n | cut -d':' -f2- \
| while read -r img; do | while read -r img; do
swww img -o $focused_monitor "$img" $WWW img -o $focused_monitor "$img"
# Regenerate colors from the exact image path to avoid cache races # Regenerate colors from the exact image path to avoid cache races
$HOME/.config/hypr/scripts/WallustSwww.sh "$img" $HOME/.config/hypr/scripts/WallustSwww.sh "$img"
# Refresh UI components that depend on wallust output # Refresh UI components that depend on wallust output

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Wallpaper Effects using ImageMagick (SUPER SHIFT W) # Wallpaper Effects using ImageMagick (SUPER SHIFT W)
# Variables # Variables
@ -9,17 +14,26 @@ wallpaper_output="$HOME/.config/hypr/wallpaper_effects/.wallpaper_modified"
SCRIPTSDIR="$HOME/.config/hypr/scripts" SCRIPTSDIR="$HOME/.config/hypr/scripts"
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name') focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name')
rofi_theme="$HOME/.config/rofi/config-wallpaper-effect.rasi" rofi_theme="$HOME/.config/rofi/config-wallpaper-effect.rasi"
if command -v awww >/dev/null 2>&1; then
WWW="awww"
else
WWW="swww"
fi
# Directory for swaync # Directory for swaync
iDIR="$HOME/.config/swaync/images" iDIR="$HOME/.config/swaync/images"
iDIRi="$HOME/.config/swaync/icons" iDIRi="$HOME/.config/swaync/icons"
# swww transition config # swww/awww transition config
FPS=60 FPS=60
TYPE="wipe" TYPE="wipe"
DURATION=2 DURATION=2
BEZIER=".43,1.19,1,.4" BEZIER=".43,1.19,1,.4"
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER" if [[ "$WWW" == "swww" || "$WWW" == "awww" ]]; then
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
else
SWWW_PARAMS=""
fi
# Define ImageMagick effects # Define ImageMagick effects
declare -A effects=( declare -A effects=(
@ -45,7 +59,7 @@ declare -A effects=(
# Function to apply no effects # Function to apply no effects
no-effects() { no-effects() {
swww img -o "$focused_monitor" "$wallpaper_current" $SWWW_PARAMS && $WWW img -o "$focused_monitor" "$wallpaper_current" $SWWW_PARAMS &&
wait $! wait $!
wallust run "$wallpaper_current" -s && wallust run "$wallpaper_current" -s &&
wait $! wait $!
@ -83,7 +97,7 @@ main() {
done done
sleep 1 sleep 1
swww img -o "$focused_monitor" "$wallpaper_output" $SWWW_PARAMS & $WWW img -o "$focused_monitor" "$wallpaper_output" $SWWW_PARAMS &
sleep 2 sleep 2
@ -106,43 +120,3 @@ fi
main main
sleep 1 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

View file

@ -1,28 +1,42 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Script for Random Wallpaper ( CTRL ALT W) # Script for Random Wallpaper ( CTRL ALT W)
wallDIR="$HOME/Pictures/wallpapers" PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")"
wallDIR="$PICTURES_DIR/wallpapers"
SCRIPTSDIR="$HOME/.config/hypr/scripts" SCRIPTSDIR="$HOME/.config/hypr/scripts"
# shellcheck source=/dev/null
. "$SCRIPTSDIR/WallpaperCmd.sh"
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name') 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" \))) 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[@]} ]} RANDOMPICS=${PICS[ $RANDOM % ${#PICS[@]} ]}
# Transition config # Transition config (swww/awww)
FPS=30 FPS=30
TYPE="random" TYPE="random"
DURATION=1 DURATION=1
BEZIER=".43,1.19,1,.4" BEZIER=".43,1.19,1,.4"
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER" if [[ "$WWW_CMD" == "swww" || "$WWW_CMD" == "awww" ]]; then
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
else
SWWW_PARAMS=""
fi
if ! "$WWW_CMD" query >/dev/null 2>&1; then
"$WWW_DAEMON" "${WWW_DAEMON_ARGS[@]}" &
fi
"$WWW_CMD" img -o "$focused_monitor" "$RANDOMPICS" $SWWW_PARAMS
swww query || swww-daemon --format xrgb && swww img -o $focused_monitor ${RANDOMPICS} $SWWW_PARAMS
wait $! wait $!
"$SCRIPTSDIR/WallustSwww.sh" && "$SCRIPTSDIR/WallustSwww.sh" "$RANDOMPICS" &&
wait $! wait $!
sleep 2 sleep 2

View file

@ -1,23 +1,37 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# This script for selecting wallpapers (SUPER W) # This script for selecting wallpapers (SUPER W)
# WALLPAPERS PATH # WALLPAPERS PATH
terminal=kitty terminal=kitty
wallDIR="$HOME/Pictures/wallpapers" PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")"
wallDIR="$PICTURES_DIR/wallpapers"
SCRIPTSDIR="$HOME/.config/hypr/scripts" SCRIPTSDIR="$HOME/.config/hypr/scripts"
# shellcheck source=/dev/null
. "$SCRIPTSDIR/WallpaperCmd.sh"
wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current" wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current"
wallpaper_link="$HOME/.config/rofi/.current_wallpaper"
# Directory for swaync # Directory for swaync
iDIR="$HOME/.config/swaync/images" iDIR="$HOME/.config/swaync/images"
iDIRi="$HOME/.config/swaync/icons" iDIRi="$HOME/.config/swaync/icons"
# swww transition config # swww/awww transition config
FPS=60 FPS=60
TYPE="any" TYPE="any"
DURATION=2 DURATION=2
BEZIER=".43,1.19,1,.4" BEZIER=".43,1.19,1,.4"
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER" if [[ "$WWW_CMD" == "swww" || "$WWW_CMD" == "awww" ]]; then
SWWW_PARAMS="--transition-fps $FPS --transition-type $TYPE --transition-duration $DURATION --transition-bezier $BEZIER"
else
SWWW_PARAMS=""
fi
# Check if package bc exists # Check if package bc exists
if ! command -v bc &>/dev/null; then if ! command -v bc &>/dev/null; then
@ -29,6 +43,9 @@ fi
rofi_theme="$HOME/.config/rofi/config-wallpaper.rasi" rofi_theme="$HOME/.config/rofi/config-wallpaper.rasi"
focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name') focused_monitor=$(hyprctl monitors -j | jq -r '.[] | select(.focused) | .name')
per_monitor_wallpaper_current="$HOME/.config/hypr/wallpaper_effects/.wallpaper_current_${focused_monitor}"
per_monitor_wallpaper_link="$HOME/.config/rofi/.current_wallpaper_${focused_monitor}"
# Ensure focused_monitor is detected # Ensure focused_monitor is detected
if [[ -z "$focused_monitor" ]]; then if [[ -z "$focused_monitor" ]]; then
notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Could not detect focused monitor" notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Could not detect focused monitor"
@ -45,7 +62,7 @@ rofi_override="element-icon{size:${adjusted_icon_size}%;}"
# Kill existing wallpaper daemons for video # Kill existing wallpaper daemons for video
kill_wallpaper_for_video() { kill_wallpaper_for_video() {
swww kill 2>/dev/null "$WWW_CMD" kill 2>/dev/null
pkill mpvpaper 2>/dev/null pkill mpvpaper 2>/dev/null
pkill swaybg 2>/dev/null pkill swaybg 2>/dev/null
pkill hyprpaper 2>/dev/null pkill hyprpaper 2>/dev/null
@ -65,7 +82,19 @@ mapfile -d '' PICS < <(find -L "${wallDIR}" -type f \( \
-iname "*.mp4" -o -iname "*.mkv" -o -iname "*.mov" -o -iname "*.webm" \) -print0) -iname "*.mp4" -o -iname "*.mkv" -o -iname "*.mov" -o -iname "*.webm" \) -print0)
RANDOM_PIC="${PICS[$((RANDOM % ${#PICS[@]}))]}" RANDOM_PIC="${PICS[$((RANDOM % ${#PICS[@]}))]}"
RANDOM_PIC_NAME=". random" RANDOM_PIC_NAME="$(basename "$RANDOM_PIC")"
CURRENT_MON_PIC_PATH=$("$WWW_CMD" query 2>/dev/null | grep "$focused_monitor" | awk '{print $NF}')
if [[ -z "$CURRENT_MON_PIC_PATH" ]]; then
if [[ -L "$wallpaper_link" ]]; then
CURRENT_MON_PIC_PATH="$(readlink -f "$wallpaper_link")"
elif [[ -f "$wallpaper_link" ]]; then
CURRENT_MON_PIC_PATH="$wallpaper_link"
elif [[ -f "$wallpaper_current" ]]; then
CURRENT_MON_PIC_PATH="$wallpaper_current"
fi
fi
CURRENT_MON_PIC_NAME=$(basename "$CURRENT_MON_PIC_PATH")
# Rofi command # Rofi command
rofi_command="rofi -i -show -dmenu -config $rofi_theme -theme-str $rofi_override" rofi_command="rofi -i -show -dmenu -config $rofi_theme -theme-str $rofi_override"
@ -74,7 +103,10 @@ rofi_command="rofi -i -show -dmenu -config $rofi_theme -theme-str $rofi_override
menu() { menu() {
IFS=$'\n' sorted_options=($(sort <<<"${PICS[*]}")) IFS=$'\n' sorted_options=($(sort <<<"${PICS[*]}"))
printf "%s\x00icon\x1f%s\n" "$RANDOM_PIC_NAME" "$RANDOM_PIC" printf "%s\x00icon\x1f%s\n" "Random: $RANDOM_PIC_NAME" "$RANDOM_PIC"
if [[ -n "$CURRENT_MON_PIC_PATH" ]]; then
printf "%s\x00icon\x1f%s\n" "Current: $CURRENT_MON_PIC_NAME" "$CURRENT_MON_PIC_PATH"
fi
for pic_path in "${sorted_options[@]}"; do for pic_path in "${sorted_options[@]}"; do
pic_name=$(basename "$pic_path") pic_name=$(basename "$pic_path")
@ -98,49 +130,6 @@ menu() {
done 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() { modify_startup_config() {
local selected_file="$1" local selected_file="$1"
@ -149,6 +138,7 @@ modify_startup_config() {
# Check if it's a live wallpaper (video) # Check if it's a live wallpaper (video)
if [[ "$selected_file" =~ \.(mp4|mkv|mov|webm)$ ]]; then if [[ "$selected_file" =~ \.(mp4|mkv|mov|webm)$ ]]; then
# For video wallpapers: # For video wallpapers:
sed -i '/^\s*exec-once\s*=\s*\$scriptsDir\/WallpaperDaemon\.sh\s*$/s/^/\#/' "$startup_config"
sed -i '/^\s*exec-once\s*=\s*swww-daemon\s*--format\s*xrgb\s*$/s/^/\#/' "$startup_config" 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" sed -i '/^\s*#\s*exec-once\s*=\s*mpvpaper\s*.*$/s/^#\s*//;' "$startup_config"
@ -159,6 +149,7 @@ modify_startup_config() {
echo "Configured for live wallpaper (video)." echo "Configured for live wallpaper (video)."
else else
# For image wallpapers: # For image wallpapers:
sed -i '/^\s*#\s*exec-once\s*=\s*\$scriptsDir\/WallpaperDaemon\.sh\s*$/s/^\s*#\s*//;' "$startup_config"
sed -i '/^\s*#\s*exec-once\s*=\s*swww-daemon\s*--format\s*xrgb\s*$/s/^\s*#\s*//;' "$startup_config" 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" sed -i '/^\s*exec-once\s*=\s*mpvpaper\s*.*$/s/^/\#/' "$startup_config"
@ -173,12 +164,25 @@ apply_image_wallpaper() {
kill_wallpaper_for_image kill_wallpaper_for_image
if ! pgrep -x "swww-daemon" >/dev/null; then if ! pgrep -x "$WWW_DAEMON" >/dev/null; then
echo "Starting swww-daemon..." echo "Starting $WWW_DAEMON..."
swww-daemon --format xrgb & "$WWW_DAEMON" "${WWW_DAEMON_ARGS[@]}" &
fi fi
# Wait for daemon to be ready before applying
for _ in {1..20}; do
"$WWW_CMD" query >/dev/null 2>&1 && break
sleep 0.1
done
"$WWW_CMD" img -o "$focused_monitor" "$image_path" $SWWW_PARAMS || {
sleep 0.2
"$WWW_CMD" img -o "$focused_monitor" "$image_path" $SWWW_PARAMS
}
"$WWW_CMD" img -o "$focused_monitor" "$image_path" $SWWW_PARAMS
swww img -o "$focused_monitor" "$image_path" $SWWW_PARAMS # Persist per-monitor wallpaper selection
mkdir -p "$(dirname "$per_monitor_wallpaper_current")" "$(dirname "$per_monitor_wallpaper_link")"
ln -sf "$image_path" "$per_monitor_wallpaper_link" || true
cp -f "$image_path" "$per_monitor_wallpaper_current" || true
# Run additional scripts (pass the image path to avoid cache race conditions) # Run additional scripts (pass the image path to avoid cache race conditions)
"$SCRIPTSDIR/WallustSwww.sh" "$image_path" "$SCRIPTSDIR/WallustSwww.sh" "$image_path"
@ -186,7 +190,6 @@ apply_image_wallpaper() {
"$SCRIPTSDIR/Refresh.sh" "$SCRIPTSDIR/Refresh.sh"
sleep 1 sleep 1
set_sddm_wallpaper
} }
apply_video_wallpaper() { apply_video_wallpaper() {
@ -208,22 +211,33 @@ main() {
choice=$(menu | $rofi_command) choice=$(menu | $rofi_command)
choice=$(echo "$choice" | xargs) choice=$(echo "$choice" | xargs)
RANDOM_PIC_NAME=$(echo "$RANDOM_PIC_NAME" | xargs) RANDOM_PIC_NAME=$(echo "$RANDOM_PIC_NAME" | xargs)
raw_choice="$choice"
choice="${choice#Random: }"
choice="${choice#Current: }"
if [[ -z "$choice" ]]; then if [[ -z "$choice" ]]; then
echo "No choice selected. Exiting." echo "No choice selected. Exiting."
exit 0 exit 0
fi fi
# Handle random selection correctly # Resolve selection directly when using Random/Current entries
if [[ "$choice" == "$RANDOM_PIC_NAME" ]]; then if [[ "$raw_choice" == Random:\ * ]]; then
choice=$(basename "$RANDOM_PIC") selected_file="$RANDOM_PIC"
elif [[ "$raw_choice" == Current:\ * && -n "$CURRENT_MON_PIC_PATH" ]]; then
selected_file="$CURRENT_MON_PIC_PATH"
elif [[ -f "$choice" ]]; then
selected_file="$choice"
else
# Handle random selection by name when needed
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)
fi 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 if [[ -z "$selected_file" ]]; then
echo "File not found. Selected choice: $choice" echo "File not found. Selected choice: $choice"
exit 1 exit 1

View file

@ -1,5 +1,10 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Rewritten to use Open-Meteo APIs (worldwide, no API key) for robust weather data. # Rewritten to use Open-Meteo APIs (worldwide, no API key) for robust weather data.
# Outputs Waybar-compatible JSON and a simple text cache. # Outputs Waybar-compatible JSON and a simple text cache.

View file

@ -1,17 +1,56 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# weather info from wttr. https://github.com/chubin/wttr.in # weather info from wttr. https://github.com/chubin/wttr.in
# Remember to add city # Remember to add city
# Function to get current city from IP address with fallback
city="" # Get your current location with your IP adress
get_current_city() {
local city
# First try: ipinfo.io
local location_data=$(curl -fsS "https://ipinfo.io/json" 2>/dev/null)
if [ $? -eq 0 ] && [ -n "$location_data" ]; then
city=$(echo "$location_data" | grep -o '"city"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4)
if [ -n "$city" ]; then
echo "$city"
return 0
fi
fi
# if city is blank, use https://ipapi.co/json to get location from IP # Fallback: ipapi.co
if [ -z "$city" ]; then city=$(curl -fsS "https://ipapi.co/json" 2>/dev/null | grep -o '"city"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4)
city=$(curl -fsS https://ipapi.co/json | grep city | cut -f4 -d'"') if [ -n "$city" ]; then
echo "$city"
return 0
fi
# Last resort: ipwho.is
city=$(curl -fsS "https://ipwho.is/" 2>/dev/null | grep -o '"city"[[:space:]]*:[[:space:]]*"[^"]*"' | cut -d'"' -f4)
if [ -n "$city" ]; then
echo "$city"
return 0
fi
# If all fail
echo "Unknown" >&2
return 1
}
city=$(get_current_city)
# If city is empty, that means the IP check failed, which means, we should use manual setting
if [ -z "$city" ] || [ "$city" = "Unknown" ]; then
# SET YOUR MANUAL CITY HERE
city=" " # ← Change this to your preferred city
echo "Using manual city: $city" >&2
fi fi
# URL-encode city for safe use in URLs # URL-encode city for safe use in URLs
encoded_city="$city" encoded_city="$city"
if command -v python3 >/dev/null 2>&1; then if command -v python3 >/dev/null 2>&1; then

View file

@ -1,11 +1,40 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Weather entrypoint: prefer Python (OpenMeteo), fallback to legacy Bash (wttr.in) # Weather entrypoint: prefer Python (OpenMeteo), fallback to legacy Bash (wttr.in)
SCRIPT_DIR="$(dirname "$0")" SCRIPT_DIR="$(dirname "$0")"
PY_SCRIPT="$SCRIPT_DIR/Weather.py" PY_SCRIPT="$SCRIPT_DIR/Weather.py"
BASH_FALLBACK="$SCRIPT_DIR/Weather.sh" BASH_FALLBACK="$SCRIPT_DIR/Weather.sh"
# Function to check network connectivity
check_network() {
# Try multiple methods to check network
if ping -c1 -W1 8.8.8.8 >/dev/null 2>&1; then
return 0
fi
if ping -c1 -W1 1.1.1.1 >/dev/null 2>&1; then
return 0
fi
if curl -s --connect-timeout 2 "https://ipinfo.io" >/dev/null 2>&1; then
return 0
fi
return 1
}
# If no network, return offline status immediately
if ! check_network; then
echo '{"text":"󰖪", "alt":"Offline", "tooltip":"No network connection"}'
exit 0
fi
run_fallback() { run_fallback() {
if [ -f "$BASH_FALLBACK" ]; then if [ -f "$BASH_FALLBACK" ]; then
# Invoke via bash to avoid requiring +x and ensure consistent shell # Invoke via bash to avoid requiring +x and ensure consistent shell

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Script for Oh my ZSH theme ( CTRL SHIFT O) # Script for Oh my ZSH theme ( CTRL SHIFT O)
# preview of theme can be view here: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes # preview of theme can be view here: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
animations { animations {
enabled = yes enabled = yes

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# old animations # old animations

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
animations { animations {
enabled = no enabled = no

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# name "End-4" # name "End-4"
# credit https://github.com/end-4/dots-hyprland # credit https://github.com/end-4/dots-hyprland

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# name "Vertical" # name "Vertical"
# credit https://github.com/prasanthrangan/hyprdots # credit https://github.com/prasanthrangan/hyprdots

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# name "Default" # name "Default"
# credit https://github.com/prasanthrangan/hyprdots # credit https://github.com/prasanthrangan/hyprdots

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# # name "Minimal-1" # # name "Minimal-1"
# credit https://github.com/prasanthrangan/hyprdots- # credit https://github.com/prasanthrangan/hyprdots-

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# # name "Minimal-2" # # name "Minimal-2"
# credit https://github.com/prasanthrangan/hyprdots # credit https://github.com/prasanthrangan/hyprdots

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# name "Optimized" # name "Optimized"
# credit https://github.com/prasanthrangan/hyprdots # credit https://github.com/prasanthrangan/hyprdots

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# name "Classic" # name "Classic"
# credit https://github.com/mylinuxforwork/dotfiles # credit https://github.com/mylinuxforwork/dotfiles

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# name "Dynamic" # name "Dynamic"
# credit https://github.com/mylinuxforwork/dotfiles # credit https://github.com/mylinuxforwork/dotfiles

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# name "Fast" # name "Fast"
# credit https://github.com/mylinuxforwork/dotfiles # credit https://github.com/mylinuxforwork/dotfiles

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# name "High" # name "High"
# credit https://github.com/mylinuxforwork/dotfiles # credit https://github.com/mylinuxforwork/dotfiles

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# name "Moving" # name "Moving"
# credit https://github.com/mylinuxforwork/dotfiles # credit https://github.com/mylinuxforwork/dotfiles

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# name "Standard" # name "Standard"
# credit https://github.com/mylinuxforwork/dotfiles # credit https://github.com/mylinuxforwork/dotfiles

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# name "Me-1" # name "Me-1"
# credit https://github.com/mahaveergurjar # credit https://github.com/mahaveergurjar

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# #
# name "Me-2" # name "Me-2"
# credit https://github.com/mahaveergurjar # credit https://github.com/mahaveergurjar

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# as per Hyprland wiki: hyprland-qt-support provides a QML style for hypr* qt6 apps # as per Hyprland wiki: hyprland-qt-support provides a QML style for hypr* qt6 apps
roundess = 2 roundess = 2

View file

@ -1,11 +1,16 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Environment variables. See https://wiki.hyprland.org/Configuring/Environment-variables/ # Environment variables. See https://wiki.hyprland.org/Configuring/Environment-variables/
# Set your defaults editor through ENV in ~/.config/hypr/UserConfigs/01-UserDefaults.conf # Set your defaults editor through ENV in ~/.config/hypr/UserConfigs/01-UserDefaults.conf
# environment-variables # environment-variables
# Current Version of JakooLit Dotfiles: # Current Version of KoolDots:
env = DOTS_VERSION,2.3.18 env = DOTS_VERSION,2.3.23
### Toolkit Backend Variables ### ### Toolkit Backend Variables ###
env = GDK_BACKEND,wayland,x11,* env = GDK_BACKEND,wayland,x11,*
@ -24,8 +29,8 @@ env = XDG_SESSION_TYPE,wayland
### QT Variables ### ### QT Variables ###
env = QT_AUTO_SCREEN_SCALE_FACTOR,1 env = QT_AUTO_SCREEN_SCALE_FACTOR,1
env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1
env = QT_QPA_PLATFORMTHEME,qt5ct
env = QT_QPA_PLATFORMTHEME,qt6ct env = QT_QPA_PLATFORMTHEME,qt6ct
env = QT_STYLE_OVERRIDE,kvantum
### hyprland-qt-support ### ### hyprland-qt-support ###
env = QT_QUICK_CONTROLS_STYLE,org.hyprland.style env = QT_QUICK_CONTROLS_STYLE,org.hyprland.style

View file

@ -1,8 +1,12 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Default Keybinds # Default Keybinds
# visit https://wiki.hyprland.org/Configuring/Binds/ for more info # visit https://wiki.hyprland.org/Configuring/Binds/ for more info
# /* ---- ✴️ Variables ✴️ ---- */ #
$mainMod = SUPER $mainMod = SUPER
$scriptsDir = $HOME/.config/hypr/scripts $scriptsDir = $HOME/.config/hypr/scripts
$UserConfigs = $HOME/.config/hypr/UserConfigs $UserConfigs = $HOME/.config/hypr/UserConfigs
@ -11,7 +15,7 @@ $UserScripts = $HOME/.config/hypr/UserScripts
# settings for User defaults apps - set your default terminal and file manager on this file # settings for User defaults apps - set your default terminal and file manager on this file
source= $UserConfigs/01-UserDefaults.conf source= $UserConfigs/01-UserDefaults.conf
#### STANDAR #### #### STANDARD ####
# Common shortcuts # Common shortcuts
#bindr = $mainMod, $mainMod_L, exec, pkill rofi || rofi -show drun -modi drun,filebrowser,run,window # Super Key to Launch rofi menu #bindr = $mainMod, $mainMod_L, exec, pkill rofi || rofi -show drun -modi drun,filebrowser,run,window # Super Key to Launch rofi menu
bindd = $mainMod, D, app launcher, exec, pkill rofi || true && rofi -show drun -modi drun,filebrowser,run,window bindd = $mainMod, D, app launcher, exec, pkill rofi || true && rofi -show drun -modi drun,filebrowser,run,window
@ -21,8 +25,10 @@ bindd = $mainMod, A, desktop overview, exec, $scriptsDir/OverviewToggle.sh # tog
#bindd = $mainMod, A, Quickshell overview, global, quickshell:overviewToggle # desktop overview (if installed) #bindd = $mainMod, A, Quickshell overview, global, quickshell:overviewToggle # desktop overview (if installed)
bindd = $mainMod, Return, Open terminal, exec, $term bindd = $mainMod, Return, Open terminal, exec, $term
bindd = $mainMod, E, file manager, exec, $files bindd = $mainMod, E, file manager, exec, $files
bindd = $mainMod, C, SSH session manager, exec, $scriptsDir/rofi-ssh-menu.sh
# FEATURES / EXTRAS # FEATURES / EXTRAS
bindd = $mainMod, T, Global theme switcher using Wallust, exec, $scriptsDir/ThemeChanger.sh #Global theme switcher
bindd = $mainMod, H, help / cheat sheet, exec, $scriptsDir/KeyHints.sh bindd = $mainMod, H, help / cheat sheet, exec, $scriptsDir/KeyHints.sh
bindd = $mainMod ALT, R, refresh bar and menus, exec, $scriptsDir/Refresh.sh bindd = $mainMod ALT, R, refresh bar and menus, exec, $scriptsDir/Refresh.sh
bindd = $mainMod ALT, E, emoji menu, exec, $scriptsDir/RofiEmoji.sh bindd = $mainMod ALT, E, emoji menu, exec, $scriptsDir/RofiEmoji.sh
@ -30,15 +36,19 @@ bindd = $mainMod, S, web search, exec, $scriptsDir/RofiSearch.sh
bindd = $mainMod CTRL, S, window switcher, exec, rofi -show window bindd = $mainMod CTRL, S, window switcher, exec, rofi -show window
bindd = $mainMod ALT, O, toggle blur, exec, $scriptsDir/ChangeBlur.sh bindd = $mainMod ALT, O, toggle blur, exec, $scriptsDir/ChangeBlur.sh
bindd = $mainMod SHIFT, G, toggle game mode, exec, $scriptsDir/GameMode.sh bindd = $mainMod SHIFT, G, toggle game mode, exec, $scriptsDir/GameMode.sh
bindd = $mainMod ALT, L, toggle master/dwindle layout, exec, $scriptsDir/ChangeLayout.sh bindd = $mainMod ALT, L, toggle layouts, exec, $scriptsDir/ChangeLayout.sh toggle
bindd = $mainMod ALT, V, clipboard manager, exec, $scriptsDir/ClipManager.sh bindd = $mainMod ALT, V, clipboard manager, exec, $scriptsDir/ClipManager.sh
bindd = $mainMod CTRL, R, rofi theme selector, exec, $scriptsDir/RofiThemeSelector.sh bindd = $mainMod CTRL, R, rofi theme selector, exec, $scriptsDir/RofiThemeSelector.sh
bindd = $mainMod CTRL SHIFT, R, rofi theme selector (modified), exec, pkill rofi || true && $scriptsDir/RofiThemeSelector-modified.sh bindd = $mainMod CTRL SHIFT, R, rofi theme selector (modified), exec, pkill rofi || true && $scriptsDir/RofiThemeSelector-modified.sh
bindd = $mainMod CTRL, K, Kitty theme selector, exec, $scriptsDir/Kitty_themes.sh
bindd = $mainMod SHIFT, B, Set static Rainbow Border, exec, $UserScripts/RainbowBorders-low-cpu.sh --run-once
bindd = $mainMod SHIFT, H, Toggle Mute/Unmute for Active-Window, exec, $scriptsDir/Toggle-Active-Window-Audio.sh
bindd = ALT SHIFT, S, Hyprshot Screen Capture, exec, $scriptsDir/hyprshot.sh -m region -o $HOME/Pictures/Screenshots
bindd = $mainMod SHIFT, F, fullscreen, fullscreen bindd = $mainMod SHIFT, F, fullscreen, fullscreen
bindd = $mainMod CTRL, F, maximize window, fullscreen, 1 bindd = $mainMod CTRL, F, maximize window, fullscreen, 1
bindd = $mainMod, SPACE, Float current window, togglefloating, bindd = $mainMod, SPACE, Float current window, togglefloating,
bindd = $mainMod ALT, SPACE, Float all windows, exec, hyprctl dispatch workspaceopt allfloat bindd = $mainMod ALT, SPACE, Float all windows, exec, $scriptsDir/Float-all-Windows.sh
bindd = $mainMod SHIFT, Return, DropDown terminal, exec, $scriptsDir/Dropterminal.sh $term bindd = $mainMod SHIFT, Return, DropDown terminal, exec, $scriptsDir/Dropterminal.sh $term
# Desktop zooming or magnifier # Desktop zooming or magnifier
@ -58,7 +68,7 @@ bindd = $mainMod SHIFT, M, online music, exec, $UserScripts/RofiBeats.sh
bindd = $mainMod, W, select wallpaper, exec, $UserScripts/WallpaperSelect.sh bindd = $mainMod, W, select wallpaper, exec, $UserScripts/WallpaperSelect.sh
bindd = $mainMod SHIFT, W, wallpaper effects, exec, $UserScripts/WallpaperEffects.sh bindd = $mainMod SHIFT, W, wallpaper effects, exec, $UserScripts/WallpaperEffects.sh
bindd = CTRL ALT, W, random wallpaper, exec, $UserScripts/WallpaperRandom.sh bindd = CTRL ALT, W, random wallpaper, exec, $UserScripts/WallpaperRandom.sh
bindd = $mainMod CTRL, O, toggle active window opacity, exec, hyprctl setprop active opaque toggle bindd = $mainMod CTRL, O, toggle active window opacity, setprop, active opaque toggle
bindd = $mainMod SHIFT, K, search keybinds, exec, $scriptsDir/KeyBinds.sh bindd = $mainMod SHIFT, K, search keybinds, exec, $scriptsDir/KeyBinds.sh
bindd = $mainMod SHIFT, A, animations menu, exec, $scriptsDir/Animations.sh bindd = $mainMod SHIFT, A, animations menu, exec, $scriptsDir/Animations.sh
bindd = $mainMod SHIFT, O, change oh-my-zsh theme, exec, $UserScripts/ZshChangeTheme.sh bindd = $mainMod SHIFT, O, change oh-my-zsh theme, exec, $UserScripts/ZshChangeTheme.sh
@ -85,19 +95,38 @@ bindd = $mainMod SHIFT, E, Quick settings menu, exec, $scriptsDir/Kool_Quick_Set
# Master Layout # Master Layout
bindd = $mainMod CTRL, D, remove master, layoutmsg, removemaster bindd = $mainMod CTRL, D, remove master, layoutmsg, removemaster
bindd = $mainMod, I, add master, layoutmsg, addmaster bindd = $mainMod, I, add master, layoutmsg, addmaster
# NOTE: J/K bindings are set dynamically by scripts/KeybindsLayoutInit.sh and scripts/ChangeLayout.sh # j/k cycle windows globally
# (we intentionally do not bind them statically here to avoid conflicts across layouts) bindd = $mainMod, j, cycle next, layoutmsg, cyclenext
# bindd = $mainMod, J, cycle next, layoutmsg, cyclenext bindd = $mainMod, k, cycle previous, layoutmsg, cycleprev
# bindd = $mainMod, K, cycle previous, layoutmsg, cycleprev
bindd = $mainMod CTRL, Return, swap with master, layoutmsg, swapwithmaster bindd = $mainMod CTRL, Return, swap with master, layoutmsg, swapwithmaster
# Dwindle Layout # Dwindle Layout
bindd = $mainMod SHIFT, I, toggle split (dwindle), togglesplit bindd = $mainMod SHIFT, I, toggle split (dwindle), layoutmsg, togglesplit
bindd = $mainMod, P, toggle pseudo (dwindle), pseudo, bindd = $mainMod, P, toggle pseudo (dwindle), pseudo,
# Works on either layout (Master or Dwindle) # Works on either layout (Master or Dwindle)
bindd = $mainMod, M, set split ratio 0.3, exec, hyprctl dispatch splitratio 0.3 bindd = $mainMod, M, set split ratio 0.3, exec, hyprctl dispatch splitratio 0.3
# layout aware keybinds
exec-once = $scriptsDir/ChangeLayout.sh init
# Direct layout binds
bindd = $mainMod ALT, 1, layout dwindle, exec, $scriptsDir/ChangeLayout.sh dwindle
bindd = $mainMod ALT, 2, layout master, exec, $scriptsDir/ChangeLayout.sh master
bindd = $mainMod ALT, 3, layout scrolling, exec, $scriptsDir/ChangeLayout.sh scrolling
bindd = $mainMod ALT, 4, layout monocle, exec, $scriptsDir/ChangeLayout.sh monocle
# Scrolling Layout
bindd = $mainMod SHIFT, period, move to right column, layoutmsg, move +col
bindd = $mainMod SHIFT, comma, move to left column, layoutmsg, move -col
bindd = $mainMod ALT, comma, swap columns left, layoutmsg, swapcol l
bindd = $mainMod ALT, period, swap columns right, layoutmsg, swapcol r
# Set layout to Horizontal (Standard "Tape" style)
bindd = $mainMod ALT, H, Horizonal scroll right,exec, hyprctl keyword scrolling:direction right
# Set layout to Vertical (Stacked "Column" style)
bindd = $mainMod ALT, V, Vertical Scroll down,exec, hyprctl keyword scrolling:direction down
# Create a toggle bind (e.g., Mod + Shift + S)
bindd = $mainMod ALT, S, toggle scrolling V/H, exec, bash -c '[[ $(hyprctl getoption scrolling:direction -j | jq -r ".str") == "right" ]] && hyprctl keyword scrolling:direction down || hyprctl keyword scrolling:direction right'
# Cycle windows; if floating bring to top # Cycle windows; if floating bring to top
bindd = ALT, tab, cycle next window, cyclenext bindd = ALT, tab, cycle next window, cyclenext
@ -106,6 +135,8 @@ bindd = ALT, tab, bring active to top, bringactivetotop
# Special Keys / Hot Keys # Special Keys / Hot Keys
bindeld = , xf86audioraisevolume, volume up, exec, $scriptsDir/Volume.sh --inc bindeld = , xf86audioraisevolume, volume up, exec, $scriptsDir/Volume.sh --inc
bindeld = , xf86audiolowervolume, volume down, exec, $scriptsDir/Volume.sh --dec bindeld = , xf86audiolowervolume, volume down, exec, $scriptsDir/Volume.sh --dec
bindeld = ALT, xf86audioraisevolume, volume up precise, exec, $scriptsDir/Volume.sh --inc-precise
bindeld = ALT, xf86audiolowervolume, volume down precise, exec, $scriptsDir/Volume.sh --dec-precise
bindld = , xf86AudioMicMute, toggle mic mute, exec, $scriptsDir/Volume.sh --toggle-mic bindld = , xf86AudioMicMute, toggle mic mute, exec, $scriptsDir/Volume.sh --toggle-mic
bindld = , xf86audiomute, toggle mute, exec, $scriptsDir/Volume.sh --toggle bindld = , xf86audiomute, toggle mute, exec, $scriptsDir/Volume.sh --toggle
bindld = , xf86Sleep, sleep, exec, systemctl suspend bindld = , xf86Sleep, sleep, exec, systemctl suspend
@ -161,7 +192,7 @@ bindd = $mainMod CTRL, L, Move Right into group, moveintogroup, r # Move active
bindd = $mainMod CTRL, H, Move active out of group, moveoutofgroup # Move active window out of group bindd = $mainMod CTRL, H, Move active out of group, moveoutofgroup # Move active window out of group
# Try to dynamically move in grouped window and when ungrouped # Try to dynamically move in grouped window and when ungrouped
# Not working for me DW 11/26/25 PR: https://github.com/JaKooLit/Hyprland-Dots/pull/872 # Not working for me DW 11/26/25 PR: https://github.com/LinuxBeginnings/Hyprland-Dots/pull/872
#bindd = $mainMod, right, focus right, exec, bash -c 'if hyprctl activewindow -j | jq -e "((.grouped | type) == \"boolean\") or (.address == (.grouped[-1] // empty))" >/dev/null 2>&1; then hyprctl dispatch movefocus r; else hyprctl dispatch changegroupactive f; fi' #bindd = $mainMod, right, focus right, exec, bash -c 'if hyprctl activewindow -j | jq -e "((.grouped | type) == \"boolean\") or (.address == (.grouped[-1] // empty))" >/dev/null 2>&1; then hyprctl dispatch movefocus r; else hyprctl dispatch changegroupactive f; fi'
#bindd = $mainMod, left, focus left, exec, bash -c 'if hyprctl activewindow -j | jq -e "((.grouped | type) == \"boolean\") or (.address == (.grouped[0] // empty))" >/dev/null 2>&1; then hyprctl dispatch movefocus l; else hyprctl dispatch changegroupactive b; fi' #bindd = $mainMod, left, focus left, exec, bash -c 'if hyprctl activewindow -j | jq -e "((.grouped | type) == \"boolean\") or (.address == (.grouped[0] // empty))" >/dev/null 2>&1; then hyprctl dispatch movefocus l; else hyprctl dispatch changegroupactive b; fi'

View file

@ -1,4 +1,9 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# See https://wiki.hyprland.org/Configuring/Keywords/ for more variable settings # See https://wiki.hyprland.org/Configuring/Keywords/ for more variable settings
# These configs are mostly for laptops. This is addemdum to Keybinds.conf # These configs are mostly for laptops. This is addemdum to Keybinds.conf

View file

@ -1,60 +1,51 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Commands and Apps to be executed at launch (vendor defaults) # Commands and Apps to be executed at launch (vendor defaults)
$scriptsDir = $HOME/.config/hypr/scripts $scriptsDir = $HOME/.config/hypr/scripts
$UserScripts = $HOME/.config/hypr/UserScripts $UserScripts = $HOME/.config/hypr/UserScripts
$wallDIR=$HOME/Pictures/wallpapers
$lock = $scriptsDir/LockScreen.sh $lock = $scriptsDir/LockScreen.sh
$SwwwRandom = $UserScripts/WallpaperAutoChange.sh $SwwwRandom = $UserScripts/WallpaperAutoChange.sh
$livewallpaper="" $livewallpaper=""
$wallDIR = $HOME/Pictures/wallpapers # change path manually here if needed
### wallpaper stuff ### ### wallpaper stuff ###
exec-once = swww-daemon --format xrgb exec-once = $scriptsDir/WallpaperDaemon.sh
#exec-once = mpvpaper '*' -o "load-scripts=no no-audio --loop" $livewallpaper #exec-once = mpvpaper '*' -o "load-scripts=no no-audio --loop" $livewallpaper
# wallpaper random # wallpaper random
#exec-once = $SwwwRandom $wallDIR # random wallpaper switcher every 30 minutes #exec-once = $SwwwRandom $wallDIR # random wallpaper switcher every 30 minutes
### Startup ### ### Startup ###
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = $scriptsDir/KeybindsLayoutInit.sh exec-once = $HOME/.config/hypr/scripts/Dropterminal.sh "kitty --class kitty-dropterm" &
# 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 exec-once = $scriptsDir/Polkit.sh
# starup apps
exec-once = nm-applet --indicator exec-once = nm-applet --indicator
exec-once = nm-tray # For ubuntu exec-once = nm-tray # For ubuntu
exec-once = swaync exec-once = swaync
#exec-once = ags #exec-once = ags
#exec-once = blueman-applet #exec-once = blueman-applet
#exec-once = rog-control-center #exec-once = rog-control-center
exec-once = $scriptsDir/PortalHyprlandUbuntu.sh
exec-once = waybar exec-once = waybar
exec-once = qs -c overview # Quickshell Overview exec-once = qs -c overview # Quickshell Overview
exec-once = hypridle
exec-once = $scriptsDir/Hyprsunset.sh init
# Clipboard manager # Clipboard manager
exec-once = wl-paste --type text --watch cliphist store exec-once = wl-paste --type text --watch cliphist store
exec-once = wl-paste --type image --watch cliphist store exec-once = wl-paste --type image --watch cliphist store
# Rainbow borders # Rainbow borders (disabled by default; use quick settings menu)
exec-once = $UserScripts/RainbowBorders.sh #exec-once = $UserScripts/RainbowBorders.sh
# hypridle for hyprlock
exec-once = hypridle
# Resume Hyprsunset if state is "on" from previous session
exec-once = $scriptsDir/Hyprsunset.sh init
# Here are list of features available but disabled by default # Here are list of features available but disabled by default
# Persistent wallpaper # Persistent wallpaper
# exec-once = swww-daemon --format xrgb && swww img $HOME/Pictures/wallpapers/mecha-nostalgia.png # exec-once = sh -c '$HOME/.config/hypr/scripts/WallpaperDaemon.sh && (command -v awww >/dev/null 2>&1 && awww img "$wallDIR/mecha-nostalgia.png" || swww img "$wallDIR/mecha-nostalgia.png")'
# Gnome polkit for NixOS # Gnome polkit for NixOS
#exec-once = $scriptsDir/Polkit-NixOS.sh #exec-once = $scriptsDir/Polkit-NixOS.sh

View file

@ -1,4 +1,9 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Default settings # Default settings
# This is where you put your own settings as this will not be touched during update # This is where you put your own settings as this will not be touched during update
# if the upgrade.sh is used. # if the upgrade.sh is used.
@ -9,16 +14,41 @@
$scriptsDir = $HOME/.config/hypr/scripts $scriptsDir = $HOME/.config/hypr/scripts
dwindle { dwindle {
pseudotile = true preserve_split = true
preserve_split = true smart_resizing = true
#smart_split = true use_active_for_splits = true
smart_split = false
default_split_ratio = 1.0
split_bias = 0
precise_mouse_move = false
special_scale_factor = 0.8 special_scale_factor = 0.8
} }
master { master {
new_status = master new_status = slave
new_on_top = 1 new_on_top = false
mfact = 0.5 new_on_active = none
orientation = left
mfact = 0.55
slave_count_for_center_master = 2
center_master_fallback = left
smart_resizing = true
drop_at_cursor = true
always_keep_position = false
}
scrolling {
# Default width of new windows (0.1 - 1.0)
column_width = 0.80
# If only one window is open, should it span the whole screen?
fullscreen_on_one_column = true
# Direction: right, left, up, or down
direction = right
# Center the focused window automatically
follow_focus = true
}
monocle {
# I can't find any settings on the wiki
} }
general { general {
@ -34,7 +64,6 @@ input {
kb_rules = kb_rules =
repeat_rate = 50 repeat_rate = 50
repeat_delay = 300 repeat_delay = 300
sensitivity = 0 #mouse sensitivity sensitivity = 0 #mouse sensitivity
#accel_profile = # flat or adaptive or blank or EMPTY means libinputs default mode #accel_profile = # flat or adaptive or blank or EMPTY means libinputs default mode
numlock_by_default = true numlock_by_default = true
@ -63,26 +92,28 @@ input {
} }
} }
gestures { gestures {
gesture = 3, horizontal, workspace workspace_swipe_distance = 300
workspace_swipe_distance = 500 workspace_swipe_touch = false
workspace_swipe_invert = true workspace_swipe_invert = true
workspace_swipe_min_speed_to_force = 30 workspace_swipe_min_speed_to_force = 30
workspace_swipe_cancel_ratio = 0.5 workspace_swipe_cancel_ratio = 0.5
workspace_swipe_create_new = true workspace_swipe_create_new = true
workspace_swipe_forever = true workspace_swipe_direction_lock = true
#workspace_swipe_use_r = true #uncomment if wanted a forever create a new workspace with swipe right workspace_swipe_forever = false
workspace_swipe_use_r = false
close_max_timeout = 100
gesture = 4, up, dispatcher, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 1.5}')" gesture = 3, horizontal, workspace
gesture = 4, down, dispatcher, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 1.5}')" gesture = 3, up, dispatcher, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 1.5}')"
gesture = 3, up, dispatcher, exec, $scriptsDir/OverviewToggle.sh gesture = 3, down, dispatcher, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 1.5}')"
gesture = 4, up, dispatcher, exec, $scriptsDir/OverviewToggle.sh
gesture = 4, down, float
} }
misc { misc {
disable_hyprland_logo = true disable_hyprland_logo = true
disable_splash_rendering = true disable_splash_rendering = true
vfr = true
vrr = 2 vrr = 2
mouse_move_enables_dpms = true mouse_move_enables_dpms = true
enable_swallow = off enable_swallow = off
@ -93,6 +124,11 @@ misc {
enable_anr_dialog = true # Application not Responding (ANR) enable_anr_dialog = true # Application not Responding (ANR)
anr_missed_pings = 15 # ANR Threshold default 1 is too low anr_missed_pings = 15 # ANR Threshold default 1 is too low
allow_session_lock_restore = true # Prevent lockscreen crash when resume from suspend allow_session_lock_restore = true # Prevent lockscreen crash when resume from suspend
# This only works with HL v0.53+
on_focus_under_fullscreen = 1
# 0 - Default, no change
# 1 - New focused window takes over fullscreen (Windows-like Alt-Tab)
# 2 - New focused window stays behind the fullscreen one
} }
#opengl { #opengl {
@ -121,4 +157,16 @@ cursor {
enable_hyprcursor = true enable_hyprcursor = true
warp_on_change_workspace = 2 warp_on_change_workspace = 2
no_warps = true no_warps = true
no_break_fs_vrr = false
min_refresh_rate = 24
hotspot_padding = 1
inactive_timeout = 0
default_monitor =
zoom_factor = 1.0
zoom_rigid = false
zoom_detached_camera = true
hide_on_key_press = true
hide_on_touch = false
hide_on_tablet = false
use_cpu_buffer = false
} }

View file

@ -1,204 +1,470 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# For window rules and layerrules # KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Vendor defaults for window rules and layerrules
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# NOTES: This is only for Hyprland > 0.52.1 # NOTES: This is only for Hyprland >= 0.53
# note: This should NOT be implemented on Debian and Ubuntu
# Vendor defaults for window rules and layerrules
# windowrule - tags - add apps under appropriate tag to use the same settings # Some samples on hwo to start apps on specific workspaces
# windowrule = match:tag email*, workspace 1
# windowrule = match:tag browser*, workspace 2
# windowrule = match:tag projects*, workspace 3
# windowrule = match:tag screenshare*, workspace 4 silent
# windowrule = match:tag gamestore*, workspace 5
# windowrule = match:class ^(virt-manager)$, workspace 6 silent
# windowrule = match:class ^(.virt-manager-wrapped)$, workspace 6 silent
# windowrule = match:tag im*, workspace 7
# windowrule = match:class obsidian, workspace 8
# windowrule = match:tag games*, workspace 8
# windowrule = match:tag multimedia*, workspace 9 silent
# TAGS - add apps under appropriate tag to use the same settings
# browser tags
windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser
windowrule = match:class ^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$, tag +browser windowrule = match:class ^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$, tag +browser
windowrule = match:class ^(chrome-.+-Default)$ # Chrome PWAs, tag +browser windowrule = match:class ^(chrome-.+-Default)$, tag +browser
windowrule = match:class ^([Cc]hromium)$, tag +browser windowrule = match:class ^([Cc]hromium)$, tag +browser
windowrule = match:class ^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$, tag +browser windowrule = match:class ^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$, tag +browser
windowrule = match:class ^(Brave-browser(-beta|-dev|-unstable)?)$, tag +browser windowrule = match:class ^([Bb]rave-browser(-beta|-dev|-unstable)?)$, tag +browser
windowrule = match:class ^([Tt]horium-browser|[Cc]achy-browser)$, tag +browser windowrule = match:class ^([Tt]horium-browser|[Cc]achy-browser)$, tag +browser
windowrule = match:class ^(zen-alpha|zen)$, tag +browser windowrule = match:class ^(zen-alpha|zen)$, tag +browser
# notif tags
windowrule = match:class ^(swaync-control-center|swaync-notification-window|swaync-client|class)$, tag +notif windowrule = match:class ^(swaync-control-center|swaync-notification-window|swaync-client|class)$, tag +notif
# KooL settings tag
windowrule = match:title ^(KooL Quick Cheat Sheet)$, tag +KooL_Cheat windowrule = match:title ^(KooL Quick Cheat Sheet)$, tag +KooL_Cheat
windowrule = match:title ^(KooL Hyprland Settings)$, tag +KooL_Settings windowrule = match:title ^(KooL Hyprland Settings)$, tag +KooL_Settings
windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings
windowrule = match:class ^(Alacritty|kitty|kitty-dropterm)$, tag +terminal # terminal tags
windowrule = match:class ^(ghostty|wezterm|Alacritty|kitty|kitty-dropterm)$, tag +terminal
windowrule = match:class ^([Tt]hunderbird|org.gnome.Evolution)$, tag +email # email tags
windowrule = match:class ^([Tt]hunderbird|org.mozilla.Thunderbird)$, tag +email
windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email
windowrule = match:class ^(org.gnome.Evolution)$, tag +email
# project tags
windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects
windowrule = match:class ^(VSCode|code|code-url-handler)$, tag +projects windowrule = match:class ^(VSCode|code|code-url-handler)$, tag +projects
windowrule = match:class ^(jetbrains-.+)$ # JetBrains IDEs, tag +projects windowrule = match:class ^(jetbrains-.+)$, tag +projects
windowrule = match:class ^(dev.zed.Zed|antigravity)$, tag +projects
# screenshare tags
windowrule = match:class ^(com.obsproject.Studio)$, tag +screenshare windowrule = match:class ^(com.obsproject.Studio)$, tag +screenshare
# IM tags
windowrule = match:class ^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$, tag +im windowrule = match:class ^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$, tag +im
windowrule = match:class ^([Ff]erdium)$, tag +im windowrule = match:class ^([Ff]erdium)$, tag +im
windowrule = match:class ^([Ww]hatsapp-for-linux)$, tag +im windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, tag +im
windowrule = match:class ^(ZapZap|com.rtosta.zapzap)$, tag +im
windowrule = match:class ^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$, tag +im windowrule = match:class ^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$, tag +im
windowrule = match:class ^(teams-for-linux)$, tag +im windowrule = match:class ^(teams-for-linux)$, tag +im
windowrule = match:class ^(im.riot.Riot|Element)$ # Element Matrix client, tag +im windowrule = match:class ^(im.riot.Riot|Element)$, tag +im
# game tags
windowrule = match:class ^(gamescope)$, tag +games windowrule = match:class ^(gamescope)$, tag +games
windowrule = match:class ^(steam_app_\d+)$, tag +games windowrule = match:class ^(steam_app_\\d+)$, tag +games
windowrule = match:xdg_tag ^(proton-game)$, tag +games
# gamestore tags
windowrule = match:class ^([Ss]team)$, tag +gamestore windowrule = match:class ^([Ss]team)$, tag +gamestore
windowrule = match:title ^([Ll]utris)$, tag +gamestore windowrule = match:title ^([Ll]utris)$, tag +gamestore
windowrule = match:class ^(com.heroicgameslauncher.hgl)$, tag +gamestore windowrule = match:class ^(com.heroicgameslauncher.hgl)$, tag +gamestore
# file-manager tags
windowrule = match:class ^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$, tag +file-manager windowrule = match:class ^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$, tag +file-manager
windowrule = match:class ^(app.drey.Warp)$, tag +file-manager windowrule = match:class ^(app.drey.Warp)$, tag +file-manager
# wallpaper tags
windowrule = match:class ^([Ww]aytrogen)$, tag +wallpaper windowrule = match:class ^([Ww]aytrogen)$, tag +wallpaper
# multimedia tags
windowrule = match:class ^([Aa]udacious)$, tag +multimedia windowrule = match:class ^([Aa]udacious)$, tag +multimedia
# multimedia-video tags
windowrule = match:class ^([Mm]pv|vlc)$, tag +multimedia_video windowrule = match:class ^([Mm]pv|vlc)$, tag +multimedia_video
# settings tags
windowrule = match:title ^(ROG Control)$, tag +settings windowrule = match:title ^(ROG Control)$, tag +settings
windowrule = match:class ^(wihotspot(-gui)?)$ # wifi hotspot, tag +settings windowrule = match:class ^(wihotspot(-gui)?)$, tag +settings
windowrule = match:class ^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer, tag +settings windowrule = match:class ^([Bb]aobab|org.gnome.[Bb]aobab)$, tag +settings
windowrule = match:class ^(gnome-disks|wihotspot(-gui)?)$, tag +settings windowrule = match:class ^(gnome-disks|wihotspot(-gui)?)$, tag +settings
windowrule = match:title (Kvantum Manager), tag +settings windowrule = match:title (Kvantum Manager), tag +settings
windowrule = match:class ^(file-roller|org.gnome.FileRoller)$ # archive manager, tag +settings windowrule = match:class ^(file-roller|org.gnome.FileRoller)$, tag +settings
windowrule = match:class ^(nm-applet|nm-connection-editor|blueman-manager)$, tag +settings windowrule = match:class ^(nm-applet|nm-connection-editor|blueman-manager)$, tag +settings
windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, tag +settings windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, tag +settings
windowrule = match:class ^(qt5ct|qt6ct|[Yy]ad)$, tag +settings windowrule = match:class ^(qt5ct|qt6ct)$, tag +settings
windowrule = match:class (xdg-desktop-portal-gtk), tag +settings windowrule = match:class (xdg-desktop-portal-gtk), tag +settings
windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings
windowrule = match:class ^([Rr]ofi)$, tag +settings windowrule = match:class ^([Rr]ofi)$, tag +settings
windowrule = match:class ^(btrfs-assistant)$, tag +settings
windowrule = match:class ^(timeshift-gtk)$, tag +settings
windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor, tag +viewer # viewer tags
windowrule = match:class ^(evince)$ # document viewer, tag +viewer windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$, tag +viewer
windowrule = match:class ^(eog|org.gnome.Loupe)$ # image viewer, tag +viewer windowrule = match:class ^(evince)$, tag +viewer
windowrule = match:class ^(eog|org.gnome.Loupe)$, tag +viewer
windowrule = match:tag multimedia_video*, noblur # Some special override rules
windowrule = match:tag multimedia_video*, opacity 1.0 windowrule = match:tag multimedia, no_blur on
windowrule = match:tag multimedia, opacity 1.0
# POSITION
windowrule = match:tag KooL_Cheat*, center
windowrule = match:class ([Tt]hunar) title negative:(.*[Tt]hunar.*), center
windowrule = match:title ^(ROG Control)$, center
windowrule = match:tag KooL-Settings*, center
windowrule = match:title ^(Keybindings)$, center
windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center
windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, center
windowrule = match:class ^([Ff]erdium)$, center
windowrule = match:title ^(Picture-in-Picture)$, move 72% 7%
#windowrule = move 72% 7%,title:^(Firefox)$
# windowrule to avoid idle for fullscreen apps
#windowrule = idleinhibit fullscreen, class:^(*)$
#windowrule = idleinhibit fullscreen, title:^(*)$
windowrule = match:fullscreen 1, idleinhibit fullscreen
# 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 # FLOAT
windowrule = match:tag KooL_Cheat*, float windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on
windowrule = match:tag wallpaper*, float windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on
windowrule = match:tag settings*, float windowrule = match:class ^([Qq]alculate-gtk)$, float on
windowrule = match:tag viewer*, float
windowrule = match:tag KooL-Settings*, float
windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher)$, float
windowrule = match:class (org.gnome.Calculator) title (Calculator), float
windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float
windowrule = match:class ^([Qq]alculate-gtk)$, float
#windowrule = float, class:^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$
windowrule = match:class ^([Ff]erdium)$, float
windowrule = match:title ^(Picture-in-Picture)$, float
#windowrule = float, title:^(Firefox)$
# windowrule - ######### float popups and dialogue ####### # float popups and dialogue
windowrule = match:title ^(Authentication Required)$, float windowrule = match:title ^(Authentication Required)$, float on, center on
windowrule = match:title ^(Authentication Required)$, center windowrule = match:class ^(xfce-polkit|mate-polkit|polkit-mate-authentication-agent-1)$, match:title ^(Authentication required|Authentication Required)$, float on, center on, size (monitor_w*0.35) (monitor_h*0.35)
windowrule = match:class (codium|codium-url-handler|VSCodium) title negative:(.*codium.*|.*VSCodium.*), float windowrule = match:class (codium|codium-url-handler|VSCodium), match:title negative:(.*codium.*|.*VSCodium.*), float on
windowrule = match:class ^(com.heroicgameslauncher.hgl)$ title negative:(Heroic Games Launcher), float windowrule = match:class ^(com.heroicgameslauncher.hgl)$, match:title negative:(Heroic Games Launcher), float on
windowrule = match:class ^([Ss]team)$ title negative:^([Ss]team)$, float windowrule = match:class ^([Ss]team)$, match:title negative:^([Ss]team)$, float on
windowrule = match:class ([Tt]hunar) title negative:(.*[Tt]hunar.*), float windowrule = match:title ^(Add Folder to Workspace)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on
windowrule = match:title ^(Add Folder to Workspace)$, float windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on
windowrule = match:title ^(Add Folder to Workspace)$, size 70% 60% windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6)
windowrule = match:title ^(Add Folder to Workspace)$, center windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12)
windowrule = match:title ^(Save As)$, float windowrule = match:class ^(yad)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2)
windowrule = match:title ^(Save As)$, size 70% 60% windowrule = match:class ^(hyprland-donate-screen)$, float on, center on
windowrule = match:title ^(Save As)$, center
windowrule = match:initialTitle (Open Files), float
windowrule = match:initialTitle (Open Files), size 70% 60%
windowrule = match:title ^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background, float
windowrule = match:title ^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background, center
windowrule = match:title ^(SDDM Background)$ #KooL's Dots YAD for setting SDDM background, size 16% 12%
# END of float popups and dialogue #######
# OPACITY
windowrule = match:tag browser*, opacity 0.99 0.8
windowrule = match:tag projects*, opacity 0.9 0.8
windowrule = match:tag im*, opacity 0.94 0.86
windowrule = match:tag multimedia*, opacity 0.94 0.86
windowrule = match:tag file-manager*, opacity 0.9 0.8
windowrule = match:tag terminal*, opacity 0.9 0.7
windowrule = match:tag settings*, opacity 0.8 0.7
windowrule = match:tag viewer*, opacity 0.82 0.75
windowrule = match:tag wallpaper*, opacity 0.9 0.7
windowrule = match:class ^(gedit|org.gnome.TextEditor|mousepad)$, opacity 0.8 0.7
windowrule = match:class ^(deluge)$, opacity 0.9 0.8
windowrule = match:class ^(seahorse)$ # gnome-keyring gui, opacity 0.9 0.8
windowrule = match:title ^(Picture-in-Picture)$, opacity 0.95 0.75
# SIZE # SIZE
windowrule = match:tag KooL_Cheat*, size 65% 90%
windowrule = match:tag wallpaper*, size 70% 70%
windowrule = match:tag settings*, size 70% 70%
windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, size 60% 70%
windowrule = match:class ^([Ff]erdium)$, size 60% 70%
#windowrule = size 25% 25%, title:^(Picture-in-Picture)$ # POSITION
#windowrule = size 25% 25%, title:^(Firefox)$ windowrule = match:title ^(ROG Control)$, center on
windowrule = match:title ^(Keybindings)$, center on
windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on
windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, center on
windowrule = match:class ^(nm-connection-editor)$, center on
windowrule = match:class ^(nm-applet)$, match:title ^(Wi-Fi Network Authentication Required)$, center on
# PINNING # windowrule to avoid idle for fullscreen apps
windowrule = match:title ^(Picture-in-Picture)$, pin windowrule = match:fullscreen true, idle_inhibit fullscreen
#windowrule = pin,title:^(Firefox)$ windowrule = idle_inhibit fullscreen, match:fullscreen 1
windowrule = idle_inhibit fullscreen, match:class .*
windowrule = idle_inhibit fullscreen, match:title .*
# windowrule - extras # OPACITY
windowrule = match:title ^(Picture-in-Picture)$, keepaspectratio windowrule = match:tag browser, opacity 0.99 0.8
windowrule = match:tag projects, opacity 0.9 0.8
windowrule = match:tag im, opacity 0.94 0.86
windowrule = match:tag multimedia, opacity 0.94 0.86
windowrule = match:tag file-manager, opacity 0.9 0.8
windowrule = match:tag terminal, opacity 0.9 0.7
windowrule = match:class ^(gedit|org.gnome.TextEditor|mousepad)$, opacity 0.8 0.7
windowrule = match:class ^(deluge)$, opacity 0.9 0.8
windowrule = match:class ^(seahorse)$, opacity 0.9 0.8
# BLUR & FULLSCREEN # BLUR & FULLSCREEN
windowrule = match:tag games*, noblur
windowrule = match:tag games*, fullscreen
#This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products # This not gonna take the focus to the window that appears
windowrule = match:class ^(jetbrains-*), noinitialfocus # when hovering over some of the parts of the IntelliJ Products
windowrule = match:title ^(wind.*)$, noinitialfocus windowrule = match:class ^(jetbrains-.*)$, no_initial_focus on
windowrule = match:title ^(wind.*)$, no_initial_focus on
#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 # LAYER RULES
layerrule = blur, rofi layerrule = match:namespace rofi, blur on
layerrule = ignorezero, rofi layerrule = match:namespace notifications, blur on
layerrule = blur, notifications layerrule = match:namespace quickshell:overview, blur on
layerrule = ignorezero, notifications layerrule = match:namespace quickshell:overview, ignore_alpha 0.5
layerrule = blur, quickshell:overview
layerrule = ignorezero, quickshell:overview #
layerrule = ignorealpha 0.5, quickshell:overview layerrule = blur on, match:namespace wallpaper
layerrule = animation slide, match:namespace rofi
layerrule = animation slide, match:namespace notifications
# Optional Layer rules
# To Resolve blurred corners in rofi Add to User config
# SUPER SHIFT + E Edit User Window Rules
#layerrule = blur on, ignore_alpha 0, match:namespace rofi
#layerrule = blur on, match:namespace waybar
windowrule {
name = Picture-in-Picture
match:title = ^[Pp]icture-in-[Pp]icture$
float = on
move = 72% 7%
opacity = 0.95 0.75
pin = on
keep_aspect_ratio = on
size = (monitor_w*0.3) (monitor_h*0.3)
}
# Named rule for CachyOS Kernel Manager
windowrule {
name = CachyOS Kernel Manager
match:class = ^(org.cachyos.KernelManager)$
match:title = ^(CachyOS Kernel Manager)$
match:initial_class = ^(org.cachyos.KernelManager)$
match:initial_title = ^(CachyOS Kernel Manager)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for Mainline Kernels
windowrule {
name = Mainline Kernels
match:class = ^(mainline-gtk)$
match:title = ^(Mainline Kernels)$
match:initial_class = ^(mainline-gtk)$
match:initial_title = ^(Mainline Kernels)$
float = on
center = on
size = (monitor_w*0.45) (monitor_h*0.55)
}
# Named rule for Kwallet
windowrule {
name = Kwallet
match:class = ^(org.kde.kwalletmanager)$
match:title = ^(Wallet Manager)$
match:initial_class = ^(org.kde.kwalletmanager)$
match:initial_title = ^(Wallet Manager)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for NVIDIA Settings
windowrule {
name = NVIDIA Settings
match:class = ^(nvidia-settings)$
match:title = ^(NVIDIA Settings)$
match:initial_class = ^(nvidia-settings)$
match:initial_title = ^(NVIDIA Settings)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for CachyOS Package Installer
windowrule {
name = CachyOS Package Installer
match:class = ^(org.cachyos.cachyos-pi)$
match:title = ^(CachyOS Package Installer)$
match:initial_class = ^(org.cachyos.cachyos-pi)$
match:initial_title = ^(CachyOS Package Installer)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for Shelly
windowrule {
name = Shelly
match:class = ^(com.shellyorg.shelly)$
match:title = ^(Shelly)$
match:initial_class = ^(com.shellyorg.shelly)$
match:initial_title = ^(Shelly)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for CachyOS Hello
windowrule {
name = CachyOS Hello
match:class = ^(CachyOSHello)$
match:title = ^(CachyOS Hello)$
match:initial_class = ^(CachyOSHello)$
match:initial_title = ^(CachyOS Hello)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for Cache Cleaner - Octopi
windowrule {
name = Cache Cleaner - Octopi
match:class = ^(octopi-cachecleaner)$
match:title = ^(Cache Cleaner - Octopi)$
match:initial_class = ^(octopi-cachecleaner)$
match:initial_title = ^(Cache Cleaner - Octopi)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for Octopi Package Manager
windowrule {
name = Octopi Package Manager
match:class = ^(octopi)$
match:title = ^(Octopi)$
match:initial_class = ^(octopi)$
match:initial_title = ^(Octopi)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for Repository Editor - Octopi
windowrule {
name = Repository Editor - Octopi
match:class = ^(octopi-repoeditor)$
match:title = ^(Repository Editor - Octopi)$
match:initial_class = ^(octopi-repoeditor)$
match:initial_title = ^(Repository Editor - Octop)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for KooL Cheat (tag)
windowrule {
name = KooL Cheat (tag)
match:tag = KooL_Cheat
float = on
center = on
size = (monitor_w*0.65) (monitor_h*0.9)
}
# Named rule for Wallpaper (tag)
windowrule {
name = Wallpaper (tag)
match:tag = wallpaper
float = on
center = on
size = (monitor_w*0.7) (monitor_h*0.7)
opacity = 0.9 0.7
}
# Named rule for Settings (tag)
windowrule {
name = Settings (tag)
match:tag = settings
float = on
center = on
size = (monitor_w*0.7) (monitor_h*0.7)
opacity = 0.8 0.7
}
# Named rule for Viewer (tag)
windowrule {
name = Viewer (tag)
match:tag = viewer
float = on
center = on
opacity = 0.82 0.75
}
# Named rule for KooL Settings (tag)
windowrule {
name = KooL Settings (tag)
match:tag = KooL-Settings
float = on
center = on
}
# Named rule for Multimedia Video (tag)
windowrule {
name = Multimedia Video (tag)
match:tag = multimedia_video
no_blur = on
opacity = 1.0
}
# Named rule for Games (tag)
windowrule {
name = Games (tag)
match:tag = games
no_blur = on
fullscreen = 0
}
# Named rule for Ferdium
windowrule {
name = Ferdium
match:class = ^([Ff]erdium)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.7)
}
# Named rule for Calculators
windowrule {
name = Calculators
match:class = (org.gnome.Calculator|qalculate-gtk)
float = on
center = on
size = (monitor_w*0.55) (monitor_h*0.45)
}
# Named rule for Thunar Dialogs
windowrule {
name = Thunar Dialogs
match:class = ([Tt]hunar)
match:title = negative:(.*[Tt]hunar.*)
float = on
center = on
}
# Named rule for Bitwarden
windowrule {
name = Bitwarden
match:class = ^(Bitwarden)$
match:title = ^(Bitwarden)$
match:initial_class = ^(Bitwarden)$
match:initial_title = ^(Bitwarden)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for hyprpwcenter audio control panel
windowrule {
name = hyprland audio panel
match:class = ^(hyprpwcenter)$
match:initial_class = ^(hyprpwcenter)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for Garida Assistant
windowrule {
name = Garuda Assistant
match:class = ^(garuda-assistant)$
match:title = ^(Garuda Assistant)$
match:initial_class = ^(garuda-assistant)$
match:initial_title = ^(Garuda Assistant)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for HyprMod HL config GUI
windowrule {
name = HyprMod GUI
match:class = ^(com.github.hyprmod)$
match:title = ^(HyprMod)$
match:initial_class = ^(com.github.hyprmod)$
match:initial_title = ^(HyprMod)$
float = on
center = on
size = (monitor_w*0.7) (monitor_h*0.75)
}
# Named rule for easy effects
windowrule {
name = EasyEffects
match:class = ^(com.github.wwmm.easyeffects)$
match:title = ^(Easy Effects)$
match:initial_class = ^(com.github.wwmm.easyeffects)$
match:initial_title = ^(Easy Effects)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.65)
}
# Named rule for Mousam weather GUI
windowrule {
name = Mousam Weather
match:class = ^(io.github.amit9838.mousam)$
match:title = ^(Mousam)$
match:initial_class = ^(io.github.amit9838.mousam)$
match:initial_title = ^(Mousam)$
float = on
center = on
size = (monitor_w*0.7) (monitor_h*0.75)
}
#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

View file

@ -0,0 +1,234 @@
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Vendor defaults for window rules and layerrules
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# NOTES: This is only for Hyprland > 0.48
# 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|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.99 0.8, 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.9 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)$
# 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.*)$
#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

View file

@ -1,231 +1,471 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Vendor defaults for window rules and layerrules # Vendor defaults for window rules and layerrules
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# NOTES: This is only for Hyprland > 0.48 # NOTES: This is only for Hyprland >= 0.53
# note for ja: This should NOT be implemented on Debian and Ubuntu # Some samples on hwo to start apps on specific workspaces
# windowrule = match:tag email*, workspace 1
# windowrule = match:tag browser*, workspace 2
# windowrule = match:tag projects*, workspace 3
# windowrule = match:tag screenshare*, workspace 4 silent
# windowrule = match:tag gamestore*, workspace 5
# windowrule = match:class ^(virt-manager)$, workspace 6 silent
# windowrule = match:class ^(.virt-manager-wrapped)$, workspace 6 silent
# windowrule = match:tag im*, workspace 7
# windowrule = match:class obsidian, workspace 8
# windowrule = match:tag games*, workspace 8
# windowrule = match:tag multimedia*, workspace 9 silent
# windowrule - tags - add apps under appropriate tag to use the same settings # TAGS - add apps under appropriate tag to use the same settings
# browser tags # browser tags
windowrule = tag +browser, class:^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$ windowrule = match:class ^([Ff]irefox|org.mozilla.firefox|[Ff]irefox-esr|[Ff]irefox-bin)$, tag +browser
windowrule = tag +browser, class:^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$ windowrule = match:class ^([Gg]oogle-chrome(-beta|-dev|-unstable)?)$, tag +browser
windowrule = tag +browser, class:^(chrome-.+-Default)$ # Chrome PWAs windowrule = match:class ^(chrome-.+-Default)$, tag +browser
windowrule = tag +browser, class:^([Cc]hromium)$ windowrule = match:class ^([Cc]hromium)$, tag +browser
windowrule = tag +browser, class:^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$ windowrule = match:class ^([Mm]icrosoft-edge(-stable|-beta|-dev|-unstable))$, tag +browser
windowrule = tag +browser, class:^(Brave-browser(-beta|-dev|-unstable)?)$ windowrule = match:class ^([Bb]rave-browser(-beta|-dev|-unstable)?)$, tag +browser
windowrule = tag +browser, class:^([Tt]horium-browser|[Cc]achy-browser)$ windowrule = match:class ^([Tt]horium-browser|[Cc]achy-browser)$, tag +browser
windowrule = tag +browser, class:^(zen-alpha|zen)$ windowrule = match:class ^(zen-alpha|zen)$, tag +browser
# notif tags # notif tags
windowrule = tag +notif, class:^(swaync-control-center|swaync-notification-window|swaync-client|class)$ windowrule = match:class ^(swaync-control-center|swaync-notification-window|swaync-client|class)$, tag +notif
# KooL settings tag # KooL settings tag
windowrule = tag +KooL_Cheat, title:^(KooL Quick Cheat Sheet)$ windowrule = match:title ^(KooL Quick Cheat Sheet)$, tag +KooL_Cheat
windowrule = tag +KooL_Settings, title:^(KooL Hyprland Settings)$ windowrule = match:title ^(KooL Hyprland Settings)$, tag +KooL_Settings
windowrule = tag +KooL-Settings, class:^(nwg-displays|nwg-look)$ windowrule = match:class ^(nwg-displays|nwg-look)$, tag +KooL-Settings
# terminal tags # terminal tags
windowrule = tag +terminal, class:^(Alacritty|kitty|kitty-dropterm)$ windowrule = match:class ^(ghostty|wezterm|Alacritty|kitty|kitty-dropterm)$, tag +terminal
# email tags # email tags
windowrule = tag +email, class:^([Tt]hunderbird|org.gnome.Evolution)$ windowrule = match:class ^([Tt]hunderbird|org.mozilla.Thunderbird)$, tag +email
windowrule = tag +email, class:^(eu.betterbird.Betterbird)$ windowrule = match:class ^(eu.betterbird.Betterbird)$, tag +email
windowrule = match:class ^(org.gnome.Evolution)$, tag +email
# project tags # project tags
windowrule = tag +projects, class:^(codium|codium-url-handler|VSCodium)$ windowrule = match:class ^(codium|codium-url-handler|VSCodium)$, tag +projects
windowrule = tag +projects, class:^(VSCode|code|code-url-handler)$ windowrule = match:class ^(VSCode|code|code-url-handler)$, tag +projects
windowrule = tag +projects, class:^(jetbrains-.+)$ # JetBrains IDEs windowrule = match:class ^(jetbrains-.+)$, tag +projects
windowrule = match:class ^(dev.zed.Zed|antigravity)$, tag +projects
# screenshare tags # screenshare tags
windowrule = tag +screenshare, class:^(com.obsproject.Studio)$ windowrule = match:class ^(com.obsproject.Studio)$, tag +screenshare
# IM tags # IM tags
windowrule = tag +im, class:^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$ windowrule = match:class ^([Dd]iscord|[Ww]ebCord|[Vv]esktop)$, tag +im
windowrule = tag +im, class:^([Ff]erdium)$ windowrule = match:class ^([Ff]erdium)$, tag +im
windowrule = tag +im, class:^([Ww]hatsapp-for-linux)$ windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, tag +im
windowrule = tag +im, class:^(ZapZap|com.rtosta.zapzap)$ windowrule = match:class ^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$, tag +im
windowrule = tag +im, class:^(org.telegram.desktop|io.github.tdesktop_x64.TDesktop)$ windowrule = match:class ^(teams-for-linux)$, tag +im
windowrule = tag +im, class:^(teams-for-linux)$ windowrule = match:class ^(im.riot.Riot|Element)$, tag +im
windowrule = tag +im, class:^(im.riot.Riot|Element)$ # Element Matrix client
# game tags # game tags
windowrule = tag +games, class:^(gamescope)$ windowrule = match:class ^(gamescope)$, tag +games
windowrule = tag +games, class:^(steam_app_\d+)$ windowrule = match:class ^(steam_app_\\d+)$, tag +games
windowrule = match:xdg_tag ^(proton-game)$, tag +games
# gamestore tags # gamestore tags
windowrule = tag +gamestore, class:^([Ss]team)$ windowrule = match:class ^([Ss]team)$, tag +gamestore
windowrule = tag +gamestore, title:^([Ll]utris)$ windowrule = match:title ^([Ll]utris)$, tag +gamestore
windowrule = tag +gamestore, class:^(com.heroicgameslauncher.hgl)$ windowrule = match:class ^(com.heroicgameslauncher.hgl)$, tag +gamestore
# file-manager tags # file-manager tags
windowrule = tag +file-manager, class:^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$ windowrule = match:class ^([Tt]hunar|org.gnome.Nautilus|[Pp]cmanfm-qt)$, tag +file-manager
windowrule = tag +file-manager, class:^(app.drey.Warp)$ windowrule = match:class ^(app.drey.Warp)$, tag +file-manager
# wallpaper tags # wallpaper tags
windowrule = tag +wallpaper, class:^([Ww]aytrogen)$ windowrule = match:class ^([Ww]aytrogen)$, tag +wallpaper
# multimedia tags # multimedia tags
windowrule = tag +multimedia, class:^([Aa]udacious)$ windowrule = match:class ^([Aa]udacious)$, tag +multimedia
# multimedia-video tags # multimedia-video tags
windowrule = tag +multimedia_video, class:^([Mm]pv|vlc)$ windowrule = match:class ^([Mm]pv|vlc)$, tag +multimedia_video
# settings tags # settings tags
windowrule = tag +settings, title:^(ROG Control)$ windowrule = match:title ^(ROG Control)$, tag +settings
windowrule = tag +settings, class:^(wihotspot(-gui)?)$ # wifi hotspot windowrule = match:class ^(wihotspot(-gui)?)$, tag +settings
windowrule = tag +settings, class:^([Bb]aobab|org.gnome.[Bb]aobab)$ # Disk usage analyzer windowrule = match:class ^([Bb]aobab|org.gnome.[Bb]aobab)$, tag +settings
windowrule = tag +settings, class:^(gnome-disks|wihotspot(-gui)?)$ windowrule = match:class ^(gnome-disks|wihotspot(-gui)?)$, tag +settings
windowrule = tag +settings, title:(Kvantum Manager) windowrule = match:title (Kvantum Manager), tag +settings
windowrule = tag +settings, class:^(file-roller|org.gnome.FileRoller)$ # archive manager windowrule = match:class ^(file-roller|org.gnome.FileRoller)$, tag +settings
windowrule = tag +settings, class:^(nm-applet|nm-connection-editor|blueman-manager)$ windowrule = match:class ^(nm-applet|nm-connection-editor|blueman-manager)$, tag +settings
windowrule = tag +settings, class:^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$ windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, tag +settings
windowrule = tag +settings, class:^(qt5ct|qt6ct|[Yy]ad)$ windowrule = match:class ^(qt5ct|qt6ct)$, tag +settings
windowrule = tag +settings, class:(xdg-desktop-portal-gtk) windowrule = match:class (xdg-desktop-portal-gtk), tag +settings
windowrule = tag +settings, class:^(org.kde.polkit-kde-authentication-agent-1)$ windowrule = match:class ^(org.kde.polkit-kde-authentication-agent-1)$, tag +settings
windowrule = tag +settings, class:^([Rr]ofi)$ windowrule = match:class ^([Rr]ofi)$, tag +settings
windowrule = match:class ^(btrfs-assistant)$, tag +settings
windowrule = match:class ^(timeshift-gtk)$, tag +settings
# viewer tags # viewer tags
windowrule = tag +viewer, class:^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$ # system monitor windowrule = match:class ^(gnome-system-monitor|org.gnome.SystemMonitor|io.missioncenter.MissionCenter)$, tag +viewer
windowrule = tag +viewer, class:^(evince)$ # document viewer windowrule = match:class ^(evince)$, tag +viewer
windowrule = tag +viewer, class:^(eog|org.gnome.Loupe)$ # image viewer windowrule = match:class ^(eog|org.gnome.Loupe)$, tag +viewer
# Some special override rules # Some special override rules
windowrule = noblur, tag:multimedia_video* windowrule = match:tag multimedia, no_blur on
windowrule = opacity 1.0, tag:multimedia_video* windowrule = match:tag multimedia, opacity 1.0
# 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 # FLOAT
windowrule = float, tag:KooL_Cheat* windowrule = match:class ([Zz]oom|onedriver|onedriver-launcher), float on
windowrule = float, tag:wallpaper* windowrule = match:class ^(mpv|com.github.rafostar.Clapper)$, float on
windowrule = float, tag:settings* windowrule = match:class ^([Qq]alculate-gtk)$, float on
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 ####### # float popups and dialogue
windowrule = float, title:^(Authentication Required)$ windowrule = match:title ^(Authentication Required)$, float on, center on
windowrule = center, title:^(Authentication Required)$ windowrule = match:class ^(xfce-polkit|mate-polkit|polkit-mate-authentication-agent-1)$, match:title ^(Authentication required|Authentication Required)$, float on, center on, size (monitor_w*0.35) (monitor_h*0.35)
windowrule = float, class:(codium|codium-url-handler|VSCodium), title:negative:(.*codium.*|.*VSCodium.*) windowrule = match:class (codium|codium-url-handler|VSCodium), match:title negative:(.*codium.*|.*VSCodium.*), float on
windowrule = float, class:^(com.heroicgameslauncher.hgl)$, title:negative:(Heroic Games Launcher) windowrule = match:class ^(com.heroicgameslauncher.hgl)$, match:title negative:(Heroic Games Launcher), float on
windowrule = float, class:^([Ss]team)$, title:negative:^([Ss]team)$ windowrule = match:class ^([Ss]team)$, match:title negative:^([Ss]team)$, float on
windowrule = float, class:([Tt]hunar), title:negative:(.*[Tt]hunar.*) windowrule = match:title ^(Add Folder to Workspace)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on
windowrule = match:title ^(Save As)$, float on, size (monitor_w*0.7) (monitor_h*0.6), center on
windowrule = float, title:^(Add Folder to Workspace)$ windowrule = match:initial_title (Open Files), float on, size (monitor_w*0.7) (monitor_h*0.6)
windowrule = size 70% 60%, title:^(Add Folder to Workspace)$ windowrule = match:title ^(SDDM Background)$, float on, center on, size (monitor_w*0.16) (monitor_h*0.12)
windowrule = center, title:^(Add Folder to Workspace)$ windowrule = match:class ^(yad)$, float on, center on, size (monitor_w*0.2) (monitor_h*0.2)
windowrule = match:class ^(hyprland-donate-screen)$, float on, center on
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.99 0.8, 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.9 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)$
# SIZE # 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)$ # POSITION
#windowrule = size 25% 25%, title:^(Firefox)$ windowrule = match:title ^(ROG Control)$, center on
windowrule = match:title ^(Keybindings)$, center on
windowrule = match:class ^(pavucontrol|org.pulseaudio.pavucontrol|com.saivert.pwvucontrol)$, center on
windowrule = match:class ^([Ww]hatsapp-for-linux|ZapZap|com.rtosta.zapzap)$, center on
windowrule = match:class ^(nm-connection-editor)$, center on
windowrule = match:class ^(nm-applet)$, match:title ^(Wi-Fi Network Authentication Required)$, center on
# PINNING # windowrule to avoid idle for fullscreen apps
windowrule = pin, title:^(Picture-in-Picture)$ windowrule = match:fullscreen true, idle_inhibit fullscreen
#windowrule = pin,title:^(Firefox)$ windowrule = idle_inhibit fullscreen, match:fullscreen 1
windowrule = idle_inhibit fullscreen, match:class .*
windowrule = idle_inhibit fullscreen, match:title .*
# windowrule - extras # OPACITY
windowrule = keepaspectratio, title:^(Picture-in-Picture)$ windowrule = match:tag browser, opacity 0.99 0.8
windowrule = match:tag projects, opacity 0.9 0.8
windowrule = match:tag im, opacity 0.94 0.86
windowrule = match:tag multimedia, opacity 0.94 0.86
windowrule = match:tag file-manager, opacity 0.9 0.8
windowrule = match:tag terminal, opacity 0.9 0.7
windowrule = match:class ^(gedit|org.gnome.TextEditor|mousepad)$, opacity 0.8 0.7
windowrule = match:class ^(deluge)$, opacity 0.9 0.8
windowrule = match:class ^(seahorse)$, opacity 0.9 0.8
# BLUR & FULLSCREEN # BLUR & FULLSCREEN
windowrule = noblur, tag:games*
windowrule = fullscreen, tag:games*
# This not gonna take the focus to the window that appears
#This not gonna take the focus to the window that appears when hovering over some of the parts of the IntelliJ Products # when hovering over some of the parts of the IntelliJ Products
windowrule = noinitialfocus, class:^(jetbrains-*) windowrule = match:class ^(jetbrains-.*)$, no_initial_focus on
windowrule = noinitialfocus, title:^(wind.*)$ windowrule = match:title ^(wind.*)$, no_initial_focus on
#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 # LAYER RULES
layerrule = blur, rofi layerrule = match:namespace rofi, blur on
layerrule = ignorezero, rofi layerrule = match:namespace notifications, blur on
layerrule = blur, notifications layerrule = match:namespace quickshell:overview, blur on
layerrule = ignorezero, notifications layerrule = match:namespace quickshell:overview, ignore_alpha 0.5
layerrule = blur, quickshell:overview
layerrule = ignorezero, quickshell:overview
layerrule = ignorealpha 0.5, quickshell:overview
#layerrule = ignorealpha 0.5, tag:notif* #
layerrule = blur on, match:namespace wallpaper
layerrule = animation slide, match:namespace rofi
layerrule = animation slide, match:namespace notifications
# Optional Layer rules
# To Resolve blurred corners in rofi Add to User config
# SUPER SHIFT + E Edit User Window Rules
#layerrule = blur on, ignore_alpha 0, match:namespace rofi
#layerrule = blur on, match:namespace waybar
windowrule {
name = Picture-in-Picture
match:title = ^[Pp]icture-in-[Pp]icture$
float = on
move = 72% 7%
opacity = 0.95 0.75
pin = on
keep_aspect_ratio = on
size = (monitor_w*0.3) (monitor_h*0.3)
}
# Named rule for CachyOS Kernel Manager
windowrule {
name = CachyOS Kernel Manager
match:class = ^(org.cachyos.KernelManager)$
match:title = ^(CachyOS Kernel Manager)$
match:initial_class = ^(org.cachyos.KernelManager)$
match:initial_title = ^(CachyOS Kernel Manager)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for Mainline Kernels
windowrule {
name = Mainline Kernels
match:class = ^(mainline-gtk)$
match:title = ^(Mainline Kernels)$
match:initial_class = ^(mainline-gtk)$
match:initial_title = ^(Mainline Kernels)$
float = on
center = on
size = (monitor_w*0.45) (monitor_h*0.55)
}
# Named rule for Kwallet
windowrule {
name = Kwallet
match:class = ^(org.kde.kwalletmanager)$
match:title = ^(Wallet Manager)$
match:initial_class = ^(org.kde.kwalletmanager)$
match:initial_title = ^(Wallet Manager)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for NVIDIA Settings
windowrule {
name = NVIDIA Settings
match:class = ^(nvidia-settings)$
match:title = ^(NVIDIA Settings)$
match:initial_class = ^(nvidia-settings)$
match:initial_title = ^(NVIDIA Settings)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for CachyOS Package Installer
windowrule {
name = CachyOS Package Installer
match:class = ^(org.cachyos.cachyos-pi)$
match:title = ^(CachyOS Package Installer)$
match:initial_class = ^(org.cachyos.cachyos-pi)$
match:initial_title = ^(CachyOS Package Installer)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for Shelly
windowrule {
name = Shelly
match:class = ^(com.shellyorg.shelly)$
match:title = ^(Shelly)$
match:initial_class = ^(com.shellyorg.shelly)$
match:initial_title = ^(Shelly)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for CachyOS Hello
windowrule {
name = CachyOS Hello
match:class = ^(CachyOSHello)$
match:title = ^(CachyOS Hello)$
match:initial_class = ^(CachyOSHello)$
match:initial_title = ^(CachyOS Hello)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for Cache Cleaner - Octopi
windowrule {
name = Cache Cleaner - Octopi
match:class = ^(octopi-cachecleaner)$
match:title = ^(Cache Cleaner - Octopi)$
match:initial_class = ^(octopi-cachecleaner)$
match:initial_title = ^(Cache Cleaner - Octopi)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for Octopi Package Manager
windowrule {
name = Octopi Package Manager
match:class = ^(octopi)$
match:title = ^(Octopi)$
match:initial_class = ^(octopi)$
match:initial_title = ^(Octopi)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for Repository Editor - Octopi
windowrule {
name = Repository Editor - Octopi
match:class = ^(octopi-repoeditor)$
match:title = ^(Repository Editor - Octopi)$
match:initial_class = ^(octopi-repoeditor)$
match:initial_title = ^(Repository Editor - Octop)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for KooL Cheat (tag)
windowrule {
name = KooL Cheat (tag)
match:tag = KooL_Cheat
float = on
center = on
size = (monitor_w*0.65) (monitor_h*0.9)
}
# Named rule for Wallpaper (tag)
windowrule {
name = Wallpaper (tag)
match:tag = wallpaper
float = on
center = on
size = (monitor_w*0.7) (monitor_h*0.7)
opacity = 0.9 0.7
}
# Named rule for Settings (tag)
windowrule {
name = Settings (tag)
match:tag = settings
float = on
center = on
size = (monitor_w*0.7) (monitor_h*0.7)
opacity = 0.8 0.7
}
# Named rule for Viewer (tag)
windowrule {
name = Viewer (tag)
match:tag = viewer
float = on
center = on
opacity = 0.82 0.75
}
# Named rule for KooL Settings (tag)
windowrule {
name = KooL Settings (tag)
match:tag = KooL-Settings
float = on
center = on
}
# Named rule for Multimedia Video (tag)
windowrule {
name = Multimedia Video (tag)
match:tag = multimedia_video
no_blur = on
opacity = 1.0
}
# Named rule for Games (tag)
windowrule {
name = Games (tag)
match:tag = games
no_blur = on
fullscreen = 0
}
# Named rule for Ferdium
windowrule {
name = Ferdium
match:class = ^([Ff]erdium)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.7)
}
# Named rule for Calculators
windowrule {
name = Calculators
match:class = (org.gnome.Calculator|qalculate-gtk)
float = on
center = on
size = (monitor_w*0.55) (monitor_h*0.45)
}
# Named rule for Thunar Dialogs
windowrule {
name = Thunar Dialogs
match:class = ([Tt]hunar)
match:title = negative:(.*[Tt]hunar.*)
float = on
center = on
}
# Named rule for Bitwarden
windowrule {
name = Bitwarden
match:class = ^(Bitwarden)$
match:title = ^(Bitwarden)$
match:initial_class = ^(Bitwarden)$
match:initial_title = ^(Bitwarden)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for hyprpwcenter audio control panel
windowrule {
name = hyprland audio panel
match:class = ^(hyprpwcenter)$
match:initial_class = ^(hyprpwcenter)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for Garida Assistant
windowrule {
name = Garuda Assistant
match:class = ^(garuda-assistant)$
match:title = ^(Garuda Assistant)$
match:initial_class = ^(garuda-assistant)$
match:initial_title = ^(Garuda Assistant)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.6)
}
# Named rule for HyprMod HL config GUI
windowrule {
name = HyprMod GUI
match:class = ^(com.github.hyprmod)$
match:title = ^(HyprMod)$
match:initial_class = ^(com.github.hyprmod)$
match:initial_title = ^(HyprMod)$
float = on
center = on
size = (monitor_w*0.7) (monitor_h*0.75)
}
# Named rule for easy effects
windowrule {
name = EasyEffects
match:class = ^(com.github.wwmm.easyeffects)$
match:title = ^(Easy Effects)$
match:initial_class = ^(com.github.wwmm.easyeffects)$
match:initial_title = ^(Easy Effects)$
float = on
center = on
size = (monitor_w*0.6) (monitor_h*0.65)
}
# Named rule for Mousam weather GUI
windowrule {
name = Mousam Weather
match:class = ^(io.github.amit9838.mousam)$
match:title = ^(Mousam)$
match:initial_class = ^(io.github.amit9838.mousam)$
match:initial_title = ^(Mousam)$
float = on
center = on
size = (monitor_w*0.7) (monitor_h*0.75)
}
#layerrule = ignorezero, class:^([Rr]ofi)$
#layerrule = blur, class:^([Rr]ofi)$
#layerrule = unset,class:^([Rr]ofi)$
#layerrule = ignorezero, <rofi>
#layerrule = ignorezero, overview
#layerrule = blur, overview

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# Hypridle # Hypridle
# Original config submitted by https://github.com/SherLock707 # Original config submitted by https://github.com/SherLock707

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# Always refer to Hyprland wiki # Always refer to Hyprland wiki
# https://wiki.hyprland.org/ # https://wiki.hyprland.org/

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# Hyprlock config for < 1080p monitor resolutions # Hyprlock config for < 1080p monitor resolutions
# Original config submitted by https://github.com/SherLock707 # Original config submitted by https://github.com/SherLock707
@ -7,7 +7,6 @@ source = $HOME/.config/hypr/wallust/wallust-hyprland.conf
$Scripts = $HOME/.config/hypr/scripts $Scripts = $HOME/.config/hypr/scripts
general { general {
grace = 1
fractional_scaling = 2 fractional_scaling = 2
immediate_render = true immediate_render = true
} }
@ -72,7 +71,7 @@ label {
# } # }
# Seconds-Time # Seconds-Time
#label { # label {
# monitor = # monitor =
## text = cmd[update:1000] echo "$(date +"%S")" ## text = cmd[update:1000] echo "$(date +"%S")"
# text = cmd[update:1000] echo "$(date +"%S %p")" #AM/PM # text = cmd[update:1000] echo "$(date +"%S %p")" #AM/PM
@ -82,10 +81,10 @@ label {
# position = 0, -350 # position = 0, -350
# halign = center # halign = center
# valign = top # valign = top
#} # }
# Put a picture of choice here. Default is the current wallpaper # Put a picture of choice here. Default is the current wallpaper
#image { # image {
# monitor = # monitor =
# path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current # path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current
# size = 160 # size = 160
@ -97,7 +96,7 @@ label {
# position = 0, 280 # position = 0, 280
# halign = center # halign = center
# valign = bottom # valign = bottom
} # }
# USER # USER
label { label {
@ -170,7 +169,7 @@ label {
# weather edit the scripts for locations # weather edit the scripts for locations
# weather scripts are located in ~/.config/hypr/UserScripts Weather.sh and/or Weather.py # 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 # see https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/TIPS#%EF%B8%8F-weather-app-related-for-waybar-and-hyprlock
label { label {
monitor = monitor =
text = cmd[update:3600000] [ -f "$HOME/.cache/.weather_cache" ] && cat "$HOME/.cache/.weather_cache" text = cmd[update:3600000] [ -f "$HOME/.cache/.weather_cache" ] && cat "$HOME/.cache/.weather_cache"

View file

@ -0,0 +1,182 @@
# /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# 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 {
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 = 64
font_family = Victor Mono Bold Italic
position = 0, -20
halign = center
valign = center
}
# Hour-Time (single horizontal time like 1080p variant)
label {
monitor =
# text = cmd[update:1000] echo "$(date +"%H:%M")" # 24h option
text = cmd[update:1000] echo "$(date +"%I:%M %p")" # AM/PM
#color = rgba(255, 185, 0, .8)
color = $color8
font_size = 173
font_family = JetBrainsMono Nerd Font ExtraBold
position = 0, -133
halign = center
valign = top
}
# Minute-Time (disabled; kept for reference)
# 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 (disabled; kept for reference)
# 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 = $color9
font_size = 48
font_family = Victor Mono Bold Oblique
position = 0, 300
halign = center
valign = bottom
}
# INPUT FIELD
input-field {
monitor =
size = 306, 93
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 = $color8
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 = $color8
font_size = 19
font_family = Victor Mono Bold Oblique
position = 0, 53
halign = center
valign = bottom
}
# uptime
label {
monitor =
text = cmd[update:60000] echo "<b> "$(uptime -p || $Scripts/UptimeNixOS.sh)" </b>"
color = $color8
font_size = 32
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 = $color8
font_size = 21
font_family = Victor Mono Bold Oblique
position = 0, 40
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/LinuxBeginnings/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 = $color8
font_size = 19
font_family = Victor Mono Bold Oblique
position = 50, 0
halign = left
valign = bottom
}

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# Hyprlock config for => 2k monitor resolutions # Hyprlock config for => 2k monitor resolutions
# Original config submitted by https://github.com/SherLock707 # Original config submitted by https://github.com/SherLock707
@ -7,7 +7,6 @@ source = $HOME/.config/hypr/wallust/wallust-hyprland.conf
$Scripts = $HOME/.config/hypr/scripts $Scripts = $HOME/.config/hypr/scripts
general { general {
grace = 1
fractional_scaling = 2 fractional_scaling = 2
immediate_render = true immediate_render = true
} }
@ -85,7 +84,7 @@ label {
# } # }
# Put a picture of choice here. Default is the current wallpaper # Put a picture of choice here. Default is the current wallpaper
#image { # image {
# monitor = # monitor =
# #path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current # #path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_current
# size = 160 # size = 160
@ -97,7 +96,7 @@ label {
# position = 0, 400 # position = 0, 400
# halign = center # halign = center
# valign = bottom # valign = bottom
#} # }
# USER # USER
label { label {
@ -170,7 +169,7 @@ label {
# weather edit the scripts for locations # weather edit the scripts for locations
# weather scripts are located in ~/.config/hypr/UserScripts Weather.sh and/or Weather.py # 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 # see https://github.com/LinuxBeginnings/Hyprland-Dots/wiki/TIPS#%EF%B8%8F-weather-app-related-for-waybar-and-hyprlock
label { label {
monitor = monitor =
text = cmd[update:3600000] [ -f "$HOME/.cache/.weather_cache" ] && cat "$HOME/.cache/.weather_cache" text = cmd[update:3600000] [ -f "$HOME/.cache/.weather_cache" ] && cat "$HOME/.cache/.weather_cache"

View file

@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# A bash script designed to run only once dotfiles installed # 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 # THIS SCRIPT CAN BE DELETED ONCE SUCCESSFULLY BOOTED!! And also, edit ~/.config/hypr/configs/Settings.conf
@ -17,7 +17,14 @@ gtk_theme="Flat-Remix-GTK-Blue-Dark"
icon_theme="Flat-Remix-Blue-Dark" icon_theme="Flat-Remix-Blue-Dark"
cursor_theme="Bibata-Modern-Ice" cursor_theme="Bibata-Modern-Ice"
swww="swww img" if command -v awww >/dev/null 2>&1; then
WWW="awww"
DAEMON="awww-daemon"
else
WWW="swww"
DAEMON="swww-daemon"
fi
swww="$WWW img"
effect="--transition-bezier .43,1.19,1,.4 --transition-fps 30 --transition-type grow --transition-pos 0.925,0.977 --transition-duration 2" 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. # Check if a marker file exists.
@ -26,7 +33,7 @@ if [ ! -f "$HOME/.config/hypr/.initial_startup_done" ]; then
# Initialize wallust and wallpaper # Initialize wallust and wallpaper
if [ -f "$wallpaper" ]; then if [ -f "$wallpaper" ]; then
wallust run -s $wallpaper > /dev/null wallust run -s $wallpaper > /dev/null
swww query || swww-daemon && $swww $wallpaper $effect $WWW query || $DAEMON && $swww $wallpaper $effect
"$scriptsDir/WallustSwww.sh" > /dev/null 2>&1 & "$scriptsDir/WallustSwww.sh" > /dev/null 2>&1 &
fi fi
@ -49,9 +56,6 @@ if [ ! -f "$HOME/.config/hypr/.initial_startup_done" ]; then
# initiate kvantum theme # initiate kvantum theme
kvantummanager --set "$kvantum_theme" > /dev/null 2>&1 & 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 # waybar style
#if [ -L "$HOME/.config/waybar/config" ]; then #if [ -L "$HOME/.config/waybar/config" ]; then
## ln -sf "$waybar_style" "$HOME/.config/waybar/style.css" ## ln -sf "$waybar_style" "$HOME/.config/waybar/style.css"

View file

@ -1,4 +1,4 @@
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # /* ---- 💫 https://github.com/LinuxBeginnings 💫 ---- */ #
# default Monitor config # default Monitor config
# *********************************************************** # # *********************************************************** #
@ -36,7 +36,7 @@ monitor=,highres,auto,1
#monitor = HDMI-A-1, preferred,auto,1 #monitor = HDMI-A-1, preferred,auto,1
# QEMU-KVM, virtual box or vmware # QEMU-KVM, virtual box or vmware
#monitor = Virtual-1, 1920x1080@60,auto,1 monitor = Virtual-1, 1920x1080@60,auto,1
# to disable a monitor # to disable a monitor
#monitor=name,disable #monitor=name,disable

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Airplane Mode. Turning on or off all wifi using rfkill. # Airplane Mode. Turning on or off all wifi using rfkill.
notif="$HOME/.config/swaync/images/ja.png" notif="$HOME/.config/swaync/images/ja.png"

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# For applying Animations from different users # For applying Animations from different users
# Check if rofi is already running # Check if rofi is already running

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
for i in {0..3}; do for i in {0..3}; do
if [ -f /sys/class/power_supply/BAT$i/capacity ]; then if [ -f /sys/class/power_supply/BAT$i/capacity ]; then
battery_level=$(cat /sys/class/power_supply/BAT$i/status) battery_level=$(cat /sys/class/power_supply/BAT$i/status)

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Script for Monitor backlights (if supported) using brightnessctl # Script for Monitor backlights (if supported) using brightnessctl
iDIR="$HOME/.config/swaync/icons" iDIR="$HOME/.config/swaync/icons"

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Script for keyboard backlights (if supported) using brightnessctl # Script for keyboard backlights (if supported) using brightnessctl
iDIR="$HOME/.config/swaync/icons" iDIR="$HOME/.config/swaync/icons"

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Script for changing blurs on the fly # Script for changing blurs on the fly
notif="$HOME/.config/swaync/images" notif="$HOME/.config/swaync/images"

View file

@ -1,24 +1,110 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# for changing Hyprland Layouts (Master or Dwindle) on the fly # KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# for changing Hyprland Layouts (master, dwindle, scrolling, monocle) on the fly
notif="$HOME/.config/swaync/images/ja.png" notif="$HOME/.config/swaync/images/ja.png"
LAYOUT=$(hyprctl -j getoption general:layout | jq '.str' | sed 's/"//g') layouts=(master dwindle scrolling monocle)
case $LAYOUT in get_layout() {
"master") hyprctl -j getoption general:layout | jq -r '.str'
hyprctl keyword general:layout dwindle }
# SUPER+J/K are global and managed by KeybindsLayoutInit.sh; only manage SUPER+O here
hyprctl keyword bind SUPER,O,togglesplit
notify-send -e -u low -i "$notif" " Dwindle Layout"
;;
"dwindle")
hyprctl keyword general:layout master
# Drop togglesplit binding on SUPER+O when switching back to master
hyprctl keyword unbind SUPER,O
notify-send -e -u low -i "$notif" " Master Layout"
;;
*) ;;
next_layout() {
local current="$1"
local i
for i in "${!layouts[@]}"; do
if [[ "${layouts[i]}" == "$current" ]]; then
echo "${layouts[((i + 1) % ${#layouts[@]})]}"
return
fi
done
echo "${layouts[0]}"
}
set_layout() {
local target="$1"
hyprctl keyword general:layout "$target"
hyprctl keyword unbind SUPER,j
hyprctl keyword unbind SUPER,k
hyprctl keyword unbind SUPER,left
hyprctl keyword unbind SUPER,right
hyprctl keyword unbind SUPER,up
hyprctl keyword unbind SUPER,down
hyprctl keyword unbind SUPER,O
case "$target" in
"dwindle")
hyprctl keyword bind SUPER,j,cyclenext
hyprctl keyword bind SUPER,k,cyclenext,prev
hyprctl keyword bind SUPER,left,cyclenext,prev
hyprctl keyword bind SUPER,up,cyclenext,prev
hyprctl keyword bind SUPER,right,cyclenext
hyprctl keyword bind SUPER,down,cyclenext
hyprctl keyword bind SUPER,O,layoutmsg,togglesplit
notify-send -e -u low -i "$notif" " Dwindle Layout"
;;
"scrolling")
hyprctl keyword bind SUPER,j,cyclenext
hyprctl keyword bind SUPER,k,cyclenext,prev
hyprctl keyword bind SUPER,left,cyclenext,prev
hyprctl keyword bind SUPER,up,cyclenext,prev
hyprctl keyword bind SUPER,right,cyclenext
hyprctl keyword bind SUPER,down,cyclenext
notify-send -e -u low -i "$notif" " Scrolling Layout"
;;
"monocle")
hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
hyprctl keyword bind SUPER,left,layoutmsg,cycleprev
hyprctl keyword bind SUPER,up,layoutmsg,cycleprev
hyprctl keyword bind SUPER,right,layoutmsg,cyclenext
hyprctl keyword bind SUPER,down,layoutmsg,cyclenext
notify-send -e -u low -i "$notif" " Monocle Layout"
;;
"master")
hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
hyprctl keyword bind SUPER,left,movefocus,l
hyprctl keyword bind SUPER,right,movefocus,r
hyprctl keyword bind SUPER,up,movefocus,u
hyprctl keyword bind SUPER,down,movefocus,d
notify-send -e -u low -i "$notif" " Master Layout"
;;
*)
hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
hyprctl keyword bind SUPER,k,layoutmsg,cycleprev
hyprctl keyword bind SUPER,left,movefocus,l
hyprctl keyword bind SUPER,right,movefocus,r
hyprctl keyword bind SUPER,up,movefocus,u
hyprctl keyword bind SUPER,down,movefocus,d
echo "Unknown layout: $target" >&2
return 1
;;
esac
}
current="$(get_layout)"
arg="${1:-toggle}"
case "$arg" in
init)
set_layout "$current"
;;
toggle|next)
set_layout "$(next_layout "$current")"
;;
master|dwindle|scrolling|monocle)
set_layout "$arg"
;;
*)
echo "Usage: $(basename "$0") [toggle|next|init|master|dwindle|scrolling|monocle]" >&2
exit 1
;;
esac esac

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Clipboard Manager. This script uses cliphist, rofi, and wl-copy. # Clipboard Manager. This script uses cliphist, rofi, and wl-copy.
# Variables # Variables

View file

@ -1,16 +1,24 @@
#!/usr/bin/env bash #!/usr/bin/env bash
## /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# For Dark and Light switching # For Dark and Light switching
# Note: Scripts are looking for keywords Light or Dark except for wallpapers as the are in a separate directories # Note: Scripts are looking for keywords Light or Dark except for wallpapers as the are in a separate directories
# Paths # Paths
wallpaper_base_path="$HOME/Pictures/wallpapers/Dynamic-Wallpapers" PICTURES_DIR="$(xdg-user-dir PICTURES 2>/dev/null || echo "$HOME/Pictures")"
wallpaper_base_path="$PICTURES_DIR/wallpapers/Dynamic-Wallpapers"
dark_wallpapers="$wallpaper_base_path/Dark" dark_wallpapers="$wallpaper_base_path/Dark"
light_wallpapers="$wallpaper_base_path/Light" light_wallpapers="$wallpaper_base_path/Light"
hypr_config_path="$HOME/.config/hypr" hypr_config_path="$HOME/.config/hypr"
swaync_style="$HOME/.config/swaync/style.css" swaync_style="$HOME/.config/swaync/style.css"
ags_style="$HOME/.config/ags/user/style.css" ags_style="$HOME/.config/ags/user/style.css"
SCRIPTSDIR="$HOME/.config/hypr/scripts" SCRIPTSDIR="$HOME/.config/hypr/scripts"
# shellcheck source=/dev/null
. "$SCRIPTSDIR/WallpaperCmd.sh"
notif="$HOME/.config/swaync/images/bell.png" notif="$HOME/.config/swaync/images/bell.png"
wallust_rofi="$HOME/.config/wallust/templates/colors-rofi.rasi" wallust_rofi="$HOME/.config/wallust/templates/colors-rofi.rasi"
@ -19,6 +27,10 @@ kitty_conf="$HOME/.config/kitty/kitty.conf"
wallust_config="$HOME/.config/wallust/wallust.toml" wallust_config="$HOME/.config/wallust/wallust.toml"
pallete_dark="dark16" pallete_dark="dark16"
pallete_light="light16" pallete_light="light16"
qt5ct_dark="$HOME/.config/qt5ct/colors/Catppuccin-Mocha.conf"
qt5ct_light="$HOME/.config/qt5ct/colors/Catppuccin-Latte.conf"
qt6ct_dark="$HOME/.config/qt6ct/colors/Catppuccin-Mocha.conf"
qt6ct_light="$HOME/.config/qt6ct/colors/Catppuccin-Latte.conf"
# intial kill process # intial kill process
for pid in waybar rofi swaync ags swaybg; do for pid in waybar rofi swaync ags swaybg; do
@ -26,11 +38,11 @@ for pid in waybar rofi swaync ags swaybg; do
done done
# Initialize swww if needed # Initialize wallpaper daemon if needed
swww query || swww-daemon --format xrgb "$WWW_CMD" query || "$WWW_DAEMON" "${WWW_DAEMON_ARGS[@]}"
# Set swww options # Set swww options
swww="swww img" swww="$WWW_CMD img"
effect="--transition-bezier .43,1.19,1,.4 --transition-fps 60 --transition-type grow --transition-pos 0.925,0.977 --transition-duration 2" 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 # Determine current theme mode
@ -43,6 +55,14 @@ else
# Logic for Light mode # Logic for Light mode
wallpaper_path="$light_wallpapers" wallpaper_path="$light_wallpapers"
fi fi
# Select Qt color scheme templates for the upcoming mode
if [ "$next_mode" = "Dark" ]; then
qt5ct_color_scheme="$qt5ct_dark"
qt6ct_color_scheme="$qt6ct_dark"
else
qt5ct_color_scheme="$qt5ct_light"
qt6ct_color_scheme="$qt6ct_light"
fi
# Function to update theme mode for the next cycle # Function to update theme mode for the next cycle
update_theme_mode() { update_theme_mode() {

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Simple bash script to check and will try to update your system # Simple bash script to check and will try to update your system
# Local Paths # Local Paths
@ -15,23 +20,23 @@ fi
if command -v paru &> /dev/null || command -v yay &> /dev/null; then if command -v paru &> /dev/null || command -v yay &> /dev/null; then
# Arch-based # Arch-based
if command -v paru &> /dev/null; then if command -v paru &> /dev/null; then
kitty -T update paru -Syu kitty -T update -e paru -Syu
notify-send -i "$iDIR/ja.png" -u low 'Arch-based system' 'has been updated.' notify-send -i "$iDIR/ja.png" -u low 'Arch-based system' 'has been updated.'
else else
kitty -T update yay -Syu kitty -T update -e yay -Syu
notify-send -i "$iDIR/ja.png" -u low 'Arch-based system' 'has been updated.' notify-send -i "$iDIR/ja.png" -u low 'Arch-based system' 'has been updated.'
fi fi
elif command -v dnf &> /dev/null; then elif command -v dnf &> /dev/null; then
# Fedora-based # Fedora-based
kitty -T update sudo dnf update --refresh -y kitty -T update -e sudo dnf update --refresh -y
notify-send -i "$iDIR/ja.png" -u low 'Fedora system' 'has been updated.' notify-send -i "$iDIR/ja.png" -u low 'Fedora system' 'has been updated.'
elif command -v apt &> /dev/null; then elif command -v apt &> /dev/null; then
# Debian-based (Debian, Ubuntu, etc.) # Debian-based (Debian, Ubuntu, etc.)
kitty -T update sudo apt update && sudo apt upgrade -y kitty -T update -e bash -c "sudo apt update && sudo apt upgrade -y"
notify-send -i "$iDIR/ja.png" -u low 'Debian/Ubuntu system' 'has been updated.' notify-send -i "$iDIR/ja.png" -u low 'Debian/Ubuntu system' 'has been updated.'
elif command -v zypper &> /dev/null; then elif command -v zypper &> /dev/null; then
# openSUSE-based # openSUSE-based
kitty -T update sudo zypper dup -y kitty -T update -e sudo zypper dup -y
notify-send -i "$iDIR/ja.png" -u low 'openSUSE system' 'has been updated.' notify-send -i "$iDIR/ja.png" -u low 'openSUSE system' 'has been updated.'
else else
# Unsupported distro # Unsupported distro

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# #
# Made and brought to by Kiran George # Made and brought to by Kiran George
# /* -- ✨ https://github.com/SherLock707 ✨ -- */ ## # /* -- ✨ https://github.com/SherLock707 ✨ -- */ ##
@ -12,7 +17,13 @@
DEBUG=false DEBUG=false
SPECIAL_WS="special:scratchpad" SPECIAL_WS="special:scratchpad"
SPECIAL_NAME="${SPECIAL_WS#special:}"
ADDR_FILE="/tmp/dropdown_terminal_addr" ADDR_FILE="/tmp/dropdown_terminal_addr"
STATE_FILE="/tmp/dropdown_terminal_state"
LOCK_FILE="/tmp/dropdown_terminal_lock"
LAST_TOGGLE_FILE="/tmp/dropdown_terminal_last_toggle"
MIN_TOGGLE_INTERVAL_MS=250
DROPDOWN_KITTY_CLASS="kitty-dropterm"
# Dropdown size and position configuration (percentages) # Dropdown size and position configuration (percentages)
WIDTH_PERCENT=65 # Width as percentage of screen width WIDTH_PERCENT=65 # Width as percentage of screen width
@ -31,14 +42,65 @@ if [ "$1" = "-d" ]; then
fi fi
TERMINAL_CMD="$1" TERMINAL_CMD="$1"
if [[ "$TERMINAL_CMD" == kitty* ]] && [[ "$TERMINAL_CMD" != *"--class"* ]] && [[ "$TERMINAL_CMD" != *"--name"* ]] && [[ "$TERMINAL_CMD" != *"--app-id"* ]]; then
TERMINAL_CMD="$TERMINAL_CMD --class $DROPDOWN_KITTY_CLASS"
fi
# Ensure only one instance runs at a time (prevents overlapping animations)
exec 9>"$LOCK_FILE"
flock -n 9 || exit 0
# Debounce rapid toggles
now_ms=""
if date +%s%3N >/dev/null 2>&1; then
now_ms=$(date +%s%3N)
else
now_ms=$(( $(date +%s) * 1000 ))
fi
if [ -f "$LAST_TOGGLE_FILE" ]; then
last_ms=$(cat "$LAST_TOGGLE_FILE" 2>/dev/null || echo 0)
if [ -n "$last_ms" ] && [ "$last_ms" -ge 0 ] 2>/dev/null; then
delta_ms=$((now_ms - last_ms))
if [ "$delta_ms" -lt "$MIN_TOGGLE_INTERVAL_MS" ] 2>/dev/null; then
if [ "$DEBUG" = true ]; then
echo "Toggle debounced (${delta_ms}ms < ${MIN_TOGGLE_INTERVAL_MS}ms)" >&2
fi
exit 0
fi
fi
fi
echo "$now_ms" >"$LAST_TOGGLE_FILE"
# Debug echo function # Debug echo function
debug_echo() { debug_echo() {
if [ "$DEBUG" = true ]; then if [ "$DEBUG" = true ]; then
echo "$@" echo "$@" >&2
fi fi
} }
# Resolve terminal address, recovering by class if needed
resolve_terminal_address() {
local addr
addr=$(get_terminal_address)
if [ -n "$addr" ] && window_exists "$addr"; then
echo "$addr"
return 0
fi
local recovered
recovered=$(find_terminal_by_class)
if [ -n "$recovered" ] && [ "$recovered" != "null" ]; then
local mon_name
mon_name=$(get_monitor_info | awk '{print $6}')
echo "$recovered $mon_name" >"$ADDR_FILE"
echo "$recovered"
return 0
fi
rm -f "$ADDR_FILE"
return 1
}
# Validate input # Validate input
if [ -z "$TERMINAL_CMD" ]; then if [ -z "$TERMINAL_CMD" ]; then
echo "Missing terminal command. Usage: $0 [-d] <terminal_command>" echo "Missing terminal command. Usage: $0 [-d] <terminal_command>"
@ -62,6 +124,28 @@ get_window_geometry() {
hyprctl clients -j | jq -r --arg ADDR "$addr" '.[] | select(.address == $ADDR) | "\(.at[0]) \(.at[1]) \(.size[0]) \(.size[1])"' hyprctl clients -j | jq -r --arg ADDR "$addr" '.[] | select(.address == $ADDR) | "\(.at[0]) \(.at[1]) \(.size[0]) \(.size[1])"'
} }
# Function to check if window is currently hidden off-screen
window_is_hidden() {
local addr="$1"
local y
y=$(hyprctl clients -j 2>/dev/null | jq -r --arg ADDR "$addr" '.[] | select(.address == $ADDR) | .at[1]' 2>/dev/null)
if [[ "$y" =~ ^-?[0-9]+$ ]] && [ "$y" -lt 0 ]; then
return 0
fi
return 1
}
# State helpers
get_hidden_state() {
if [ -f "$STATE_FILE" ]; then
cat "$STATE_FILE" 2>/dev/null
fi
}
set_hidden_state() {
echo "$1" >"$STATE_FILE"
}
# Function to animate window slide down (show) # Function to animate window slide down (show)
animate_slide_down() { animate_slide_down() {
local addr="$1" local addr="$1"
@ -121,7 +205,30 @@ animate_slide_up() {
# Function to get monitor info including scale and name of focused monitor # Function to get monitor info including scale and name of focused monitor
get_monitor_info() { get_monitor_info() {
local monitor_data=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true) | "\(.x) \(.y) \(.width) \(.height) \(.scale) \(.name)"') local monitor_data
monitor_data=$(hyprctl monitors -j 2>/dev/null | jq -er 'map(select(.focused == true)) | .[0] | "\(.x) \(.y) \(.width) \(.height) \(.scale) \(.name)"' 2>/dev/null) || monitor_data=""
if [ -z "$monitor_data" ]; then
# Fallback for older Hyprland without -j support
monitor_data=$(hyprctl monitors 2>/dev/null | awk '
/^Monitor / {name=$2; sub(/\(.*/, "", name); x=y=w=h=scale=""; focused="no"}
/ at / {
# e.g. "1920x1080@74.97300 at 0x0"
split($1, res, "x"); w=res[1]; split(res[2], tmp, "@"); h=tmp[1]
split($4, pos, "x"); x=pos[1]; y=pos[2]
}
/scale:/ {scale=$2}
/focused:/ {focused=$2}
/^$/ {
if (focused=="yes" && x!="" && y!="" && w!="" && h!="" && scale!="" && name!="") {
print x, y, w, h, scale, name; exit
}
}
END {
if (focused=="yes" && x!="" && y!="" && w!="" && h!="" && scale!="" && name!="") {
print x, y, w, h, scale, name
}
}')
fi
if [ -z "$monitor_data" ] || [[ "$monitor_data" =~ ^null ]]; then if [ -z "$monitor_data" ] || [[ "$monitor_data" =~ ^null ]]; then
debug_echo "Error: Could not get focused monitor information" debug_echo "Error: Could not get focused monitor information"
return 1 return 1
@ -129,6 +236,7 @@ get_monitor_info() {
echo "$monitor_data" echo "$monitor_data"
} }
# Function to calculate dropdown position with proper scaling and centering # Function to calculate dropdown position with proper scaling and centering
calculate_dropdown_position() { calculate_dropdown_position() {
local monitor_info=$(get_monitor_info) local monitor_info=$(get_monitor_info)
@ -148,6 +256,13 @@ calculate_dropdown_position() {
debug_echo "Monitor info: x=$mon_x, y=$mon_y, width=$mon_width, height=$mon_height, scale=$mon_scale" debug_echo "Monitor info: x=$mon_x, y=$mon_y, width=$mon_width, height=$mon_height, scale=$mon_scale"
# Validate numeric fields
if ! [[ "$mon_x" =~ ^-?[0-9]+$ && "$mon_y" =~ ^-?[0-9]+$ && "$mon_width" =~ ^[0-9]+$ && "$mon_height" =~ ^[0-9]+$ ]]; then
debug_echo "Invalid monitor info format, using fallback values"
echo "100 100 800 600 fallback-monitor"
return 1
fi
# Validate scale value and provide fallback # Validate scale value and provide fallback
if [ -z "$mon_scale" ] || [ "$mon_scale" = "null" ] || [ "$mon_scale" = "0" ]; then if [ -z "$mon_scale" ] || [ "$mon_scale" = "null" ] || [ "$mon_scale" = "0" ]; then
debug_echo "Invalid scale value, using 1.0 as fallback" debug_echo "Invalid scale value, using 1.0 as fallback"
@ -207,6 +322,12 @@ get_terminal_address() {
fi fi
} }
# Try to find an existing dropdown terminal by class (kitty only)
find_terminal_by_class() {
hyprctl clients -j 2>/dev/null | jq -r --arg CLASS "$DROPDOWN_KITTY_CLASS" \
'.[] | select(.class == $CLASS) | .address' | head -1
}
# Function to get stored monitor name # Function to get stored monitor name
get_terminal_monitor() { get_terminal_monitor() {
if [ -f "$ADDR_FILE" ] && [ -s "$ADDR_FILE" ]; then if [ -f "$ADDR_FILE" ] && [ -s "$ADDR_FILE" ]; then
@ -218,22 +339,48 @@ get_terminal_monitor() {
terminal_exists() { terminal_exists() {
local addr=$(get_terminal_address) local addr=$(get_terminal_address)
if [ -n "$addr" ]; then if [ -n "$addr" ]; then
hyprctl clients -j | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR)' >/dev/null 2>&1 hyprctl clients -j 2>/dev/null | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR)' >/dev/null 2>&1
else else
return 1 return 1
fi fi
} }
# Function to check if terminal is in special workspace # Function to check if a window address exists
terminal_in_special() { window_exists() {
local addr=$(get_terminal_address) local addr="$1"
if [ -n "$addr" ]; then if [ -n "$addr" ]; then
hyprctl clients -j | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR and .workspace.name == "special:scratchpad")' >/dev/null 2>&1 hyprctl clients -j 2>/dev/null | jq -e --arg ADDR "$addr" 'any(.[]; .address == $ADDR)' >/dev/null 2>&1
else else
return 1 return 1
fi fi
} }
# Function to check if window is pinned
window_is_pinned() {
local addr="$1"
if [ -n "$addr" ]; then
hyprctl clients -j 2>/dev/null | jq -e --arg ADDR "$addr" '.[] | select(.address == $ADDR) | .pinned == true' >/dev/null 2>&1
else
return 1
fi
}
# Ensure pin state without toggling unexpectedly
ensure_pinned() {
local addr="$1"
if ! window_is_pinned "$addr"; then
hyprctl dispatch pin "address:$addr" >/dev/null 2>&1
fi
}
ensure_unpinned() {
local addr="$1"
if window_is_pinned "$addr"; then
hyprctl dispatch pin "address:$addr" >/dev/null 2>&1
fi
}
# Function to spawn terminal and capture its address # Function to spawn terminal and capture its address
spawn_terminal() { spawn_terminal() {
debug_echo "Creating new dropdown terminal with command: $TERMINAL_CMD" debug_echo "Creating new dropdown terminal with command: $TERMINAL_CMD"
@ -288,12 +435,13 @@ spawn_terminal() {
# Small delay to ensure it's properly in special workspace # Small delay to ensure it's properly in special workspace
sleep 0.2 sleep 0.2
# Move to current workspace but start hidden off-screen
# 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 movetoworkspacesilent "$CURRENT_WS,address:$new_addr"
hyprctl dispatch pin "address:$new_addr" ensure_pinned "$new_addr"
animate_slide_down "$new_addr" "$target_x" "$target_y" "$width" "$height" hyprctl dispatch resizewindowpixel "exact $width $height,address:$new_addr" >/dev/null 2>&1
local off_y=$((target_y - height - 200))
hyprctl dispatch movewindowpixel "exact $target_x $off_y,address:$new_addr" >/dev/null 2>&1
set_hidden_state "hidden"
return 0 return 0
fi fi
@ -303,8 +451,9 @@ spawn_terminal() {
} }
# Main logic # Main logic
if terminal_exists; then TERMINAL_ADDR=$(resolve_terminal_address)
TERMINAL_ADDR=$(get_terminal_address)
if [ -n "$TERMINAL_ADDR" ]; then
debug_echo "Found existing terminal: $TERMINAL_ADDR" debug_echo "Found existing terminal: $TERMINAL_ADDR"
focused_monitor=$(get_monitor_info | awk '{print $6}') focused_monitor=$(get_monitor_info | awk '{print $6}')
dropdown_monitor=$(get_terminal_monitor) dropdown_monitor=$(get_terminal_monitor)
@ -324,8 +473,9 @@ if terminal_exists; then
echo "$TERMINAL_ADDR $monitor_name" >"$ADDR_FILE" echo "$TERMINAL_ADDR $monitor_name" >"$ADDR_FILE"
fi fi
if terminal_in_special; then hidden_state=$(get_hidden_state)
debug_echo "Bringing terminal from scratchpad with slide down animation" if [ "$hidden_state" = "hidden" ] || [ -z "$hidden_state" ] || window_is_hidden "$TERMINAL_ADDR"; then
debug_echo "Bringing terminal from hidden position with slide down animation"
# Calculate target position # Calculate target position
pos_info=$(calculate_dropdown_position) pos_info=$(calculate_dropdown_position)
@ -334,17 +484,16 @@ if terminal_exists; then
width=$(echo $pos_info | cut -d' ' -f3) width=$(echo $pos_info | cut -d' ' -f3)
height=$(echo $pos_info | cut -d' ' -f4) height=$(echo $pos_info | cut -d' ' -f4)
# Use movetoworkspacesilent to avoid affecting workspace history ensure_pinned "$TERMINAL_ADDR"
hyprctl dispatch movetoworkspacesilent "$CURRENT_WS,address:$TERMINAL_ADDR"
hyprctl dispatch pin "address:$TERMINAL_ADDR"
# Set size and animate slide down # Set size and animate slide down
hyprctl dispatch resizewindowpixel "exact $width $height,address:$TERMINAL_ADDR" hyprctl dispatch resizewindowpixel "exact $width $height,address:$TERMINAL_ADDR"
animate_slide_down "$TERMINAL_ADDR" "$target_x" "$target_y" "$width" "$height" animate_slide_down "$TERMINAL_ADDR" "$target_x" "$target_y" "$width" "$height"
hyprctl dispatch focuswindow "address:$TERMINAL_ADDR" hyprctl dispatch focuswindow "address:$TERMINAL_ADDR"
set_hidden_state "shown"
else else
debug_echo "Hiding terminal to scratchpad with slide up animation" debug_echo "Hiding terminal off-screen with slide up animation"
# Get current geometry for animation # Get current geometry for animation
geometry=$(get_window_geometry "$TERMINAL_ADDR") geometry=$(get_window_geometry "$TERMINAL_ADDR")
@ -359,14 +508,16 @@ if terminal_exists; then
# Animate slide up first # Animate slide up first
animate_slide_up "$TERMINAL_ADDR" "$curr_x" "$curr_y" "$curr_width" "$curr_height" animate_slide_up "$TERMINAL_ADDR" "$curr_x" "$curr_y" "$curr_width" "$curr_height"
# Small delay then move to special workspace and unpin # Move off-screen after animation
sleep 0.1 off_y=$((curr_y - curr_height - 200))
hyprctl dispatch pin "address:$TERMINAL_ADDR" # Unpin (toggle) hyprctl dispatch movewindowpixel "exact $curr_x $off_y,address:$TERMINAL_ADDR" >/dev/null 2>&1
hyprctl dispatch movetoworkspacesilent "$SPECIAL_WS,address:$TERMINAL_ADDR" ensure_unpinned "$TERMINAL_ADDR"
set_hidden_state "hidden"
else else
debug_echo "Could not get window geometry, moving to scratchpad without animation" debug_echo "Could not get window geometry, moving off-screen without animation"
hyprctl dispatch pin "address:$TERMINAL_ADDR" hyprctl dispatch movewindowpixel "exact 0 -1000,address:$TERMINAL_ADDR" >/dev/null 2>&1
hyprctl dispatch movetoworkspacesilent "$SPECIAL_WS,address:$TERMINAL_ADDR" ensure_unpinned "$TERMINAL_ADDR"
set_hidden_state "hidden"
fi fi
fi fi
else else

View file

@ -0,0 +1,103 @@
#!/usr/bin/env bash
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# External monitor brightness via ddcutil
set -u
step=10
vcp_code=10
usage() {
cat <<'EOF'
Usage: ExternalBrightness.sh [--get|--inc|--dec|--set N] [--display N]
Env:
DDCUTIL_DISPLAY Optional display number passed to ddcutil --display
DDCUTIL_OPTS Extra options passed to ddcutil (e.g. "--sleep-multiplier 0.2")
EOF
}
ddcutil_cmd() {
local display_arg=()
local display="${DDCUTIL_DISPLAY:-}"
if [[ -n "${display}" ]]; then
display_arg+=(--display "${display}")
fi
ddcutil ${DDCUTIL_OPTS:-} "${display_arg[@]}" "$@"
}
get_brightness() {
# Example output: "VCP code 0x10 (Brightness): current value = 50, max value = 100"
local line
if ! line="$(ddcutil_cmd getvcp "${vcp_code}" 2>/dev/null | tail -n 1)"; then
return 1
fi
local current max
current="$(printf "%s" "${line}" | sed -n 's/.*current value = \([0-9]\+\).*/\1/p')"
max="$(printf "%s" "${line}" | sed -n 's/.*max value = \([0-9]\+\).*/\1/p')"
[[ -n "${current}" && -n "${max}" ]] || return 1
printf "%s %s\n" "${current}" "${max}"
}
set_brightness() {
local value="$1"
ddcutil_cmd setvcp "${vcp_code}" "${value}" >/dev/null 2>&1
}
json_output() {
local current max percent icon
if ! read -r current max < <(get_brightness); then
printf '{"text":"󰃜 N/A","tooltip":"External brightness unavailable (load i2c-dev, allow i2c access)","class":"brightness-external-off"}\n'
return 0
fi
percent=$(( current * 100 / max ))
if (( percent >= 80 )); then
icon="󰃠"
elif (( percent >= 60 )); then
icon="󰃟"
elif (( percent >= 40 )); then
icon="󰃞"
elif (( percent >= 20 )); then
icon="󰃝"
else
icon=""
fi
printf '{"text":"%s %s%%","tooltip":"External display brightness: %s%%","class":"brightness-external"}\n' "${icon}" "${percent}" "${percent}"
}
case "${1:-}" in
--get|"")
json_output
;;
--inc|--dec)
read -r current max < <(get_brightness) || exit 1
delta=$step
[[ "$1" == "--dec" ]] && delta=$(( -step ))
new=$(( current + delta ))
(( new < 5 )) && new=5
(( new > max )) && new="${max}"
set_brightness "${new}"
json_output
;;
--set)
[[ -n "${2:-}" ]] || { usage; exit 1; }
set_brightness "${2}"
json_output
;;
--display)
[[ -n "${2:-}" ]] || { usage; exit 1; }
DDCUTIL_DISPLAY="${2}" shift 2
"${0}" "${@:-"--get"}"
;;
-h|--help)
usage
;;
*)
usage
exit 1
;;
esac

View file

@ -0,0 +1,10 @@
#!/usr/bin/env bash
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
ws=$(hyprctl activeworkspace -j | jq -r .id)
hyprctl clients -j | jq -r --arg ws "$ws" '.[] | select(.workspace.id == ($ws|tonumber)) | .address' | xargs -r -I {} hyprctl dispatch togglefloating address:{}

View file

@ -1,9 +1,16 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Game Mode. Turning off all animations # Game Mode. Turning off all animations
notif="$HOME/.config/swaync/images/ja.png" notif="$HOME/.config/swaync/images/ja.png"
SCRIPTSDIR="$HOME/.config/hypr/scripts" SCRIPTSDIR="$HOME/.config/hypr/scripts"
# shellcheck source=/dev/null
. "$SCRIPTSDIR/WallpaperCmd.sh"
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}') HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
@ -17,13 +24,13 @@ if [ "$HYPRGAMEMODE" = 1 ] ; then
keyword general:border_size 1;\ keyword general:border_size 1;\
keyword decoration:rounding 0" keyword decoration:rounding 0"
hyprctl keyword "windowrule opacity 1 override 1 override 1 override, ^(.*)$" \thyprctl keyword "windowrule opacity 1 override 1 override 1 override, ^(.*)$"
swww kill "$WWW_CMD" kill
notify-send -e -u low -i "$notif" " Gamemode:" " enabled" notify-send -e -u low -i "$notif" " Gamemode:" " enabled"
sleep 0.1 sleep 0.1
exit exit
else else
swww-daemon --format xrgb && swww img "$HOME/.config/rofi/.current_wallpaper" & \t"$WWW_DAEMON" "${WWW_DAEMON_ARGS[@]}" && "$WWW_CMD" img "$HOME/.config/rofi/.current_wallpaper" &
sleep 0.1 sleep 0.1
${SCRIPTSDIR}/WallustSwww.sh ${SCRIPTSDIR}/WallustSwww.sh
sleep 0.5 sleep 0.5

View file

@ -0,0 +1,129 @@
#!/usr/bin/env bash
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Ghostty theme selector
config_file="$HOME/.config/ghostty/config"
iDIR="$HOME/.config/swaync/images"
rofi_theme_primary="$HOME/.config/rofi/config-ghostty-theme.rasi"
rofi_theme_fallback="$HOME/.config/rofi/config-edit.rasi"
notify_user() {
local icon="$1"
local title="$2"
local body="$3"
if [[ -n "$icon" && -f "$icon" ]]; then
notify-send -u low -i "$icon" "$title" "$body"
else
notify-send -u low "$title" "$body"
fi
}
if [[ ! -f "$config_file" ]]; then
notify_user "$iDIR/error.png" "Ghostty Theme" "Config not found: $config_file"
exit 1
fi
rofi_config_args=()
if [[ -f "$rofi_theme_primary" ]]; then
rofi_config_args=(-config "$rofi_theme_primary")
elif [[ -f "$rofi_theme_fallback" ]]; then
rofi_config_args=(-config "$rofi_theme_fallback")
fi
current_theme=$(
awk -F'=' '/^[[:space:]]*theme[[:space:]]*=/ {
val=$2
sub(/^[[:space:]]+/, "", val)
sub(/[[:space:]]+$/, "", val)
gsub(/^"|"$/, "", val)
print val
exit
}' "$config_file"
)
mapfile -t available_theme_names < <(
awk -F'=' '/^[[:space:]]*#[[:space:]]*theme[[:space:]]*=/ {
val=$2
sub(/^[[:space:]]+/, "", val)
sub(/[[:space:]]+$/, "", val)
gsub(/^"|"$/, "", val)
print val
}' "$config_file"
)
if [[ ${#available_theme_names[@]} -eq 0 ]]; then
notify_user "$iDIR/error.png" "Ghostty Theme" "No commented themes found in $config_file"
exit 1
fi
menu_entries=()
if [[ -n "$current_theme" ]]; then
menu_entries+=("Current: $current_theme")
fi
for t in "${available_theme_names[@]}"; do
menu_entries+=("$t")
done
choice=$(
printf "%s\n" "${menu_entries[@]}" |
rofi -i -dmenu -p "Ghostty Theme" "${rofi_config_args[@]}" -mesg "Select a theme to apply"
)
[[ -z "$choice" ]] && exit 0
if [[ "$choice" == "Current: "* ]]; then
exit 0
fi
selected_theme="$choice"
if [[ -n "$current_theme" && "$selected_theme" == "$current_theme" ]]; then
exit 0
fi
format_theme_value() {
if [[ "$1" =~ [[:space:]] ]]; then
printf "\"%s\"" "$1"
else
printf "%s" "$1"
fi
}
selected_formatted=$(format_theme_value "$selected_theme")
tmp_file=$(mktemp)
awk -v selected="$selected_theme" -v selected_formatted="$selected_formatted" '
function trim(s) { sub(/^[[:space:]]+/, "", s); sub(/[[:space:]]+$/, "", s); return s }
function strip_quotes(s) { gsub(/^"|"$/, "", s); return s }
{
line=$0
if ($0 ~ /^[[:space:]]*theme[[:space:]]*=/) {
sub(/^[[:space:]]*theme[[:space:]]*=/, "#theme =", line)
print line
next
}
if ($0 ~ /^[[:space:]]*#[[:space:]]*theme[[:space:]]*=/) {
val=$0
sub(/^[[:space:]]*#[[:space:]]*theme[[:space:]]*=[[:space:]]*/, "", val)
val=trim(val)
val=strip_quotes(val)
if (val == selected) {
print "theme = " selected_formatted
next
}
}
print $0
}' "$config_file" > "$tmp_file"
mv "$tmp_file" "$config_file"
pkill -SIGUSR2 ghostty >/dev/null 2>&1 || true
notify_user "$iDIR/ja.png" "Ghostty Theme Applied" "$selected_theme"
exit 0

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# This is for custom version of waybar idle_inhibitor which activates / deactivates hypridle instead # This is for custom version of waybar idle_inhibitor which activates / deactivates hypridle instead
PROCESS="hypridle" PROCESS="hypridle"
@ -15,7 +20,8 @@ elif [[ "$1" == "toggle" ]]; then
if pgrep -x "$PROCESS" >/dev/null; then if pgrep -x "$PROCESS" >/dev/null; then
pkill "$PROCESS" pkill "$PROCESS"
else else
"$PROCESS" "$PROCESS" >/dev/null 2>&1 &
disown
fi fi
else else
echo "Usage: $0 {status|toggle}" echo "Usage: $0 {status|toggle}"

View file

@ -1,4 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
set -euo pipefail set -euo pipefail
# Hyprsunset toggle + Waybar status helper # Hyprsunset toggle + Waybar status helper

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# searchable enabled keybinds using rofi (supports bindd descriptions) # searchable enabled keybinds using rofi (supports bindd descriptions)
# kill yad to not interfere with this binds # kill yad to not interfere with this binds
@ -21,135 +26,19 @@ msg='☣️ NOTE ☣️: Clicking with Mouse or Pressing ENTER will have NO func
files=("$keybinds_conf" "$user_keybinds_conf") files=("$keybinds_conf" "$user_keybinds_conf")
[[ -f "$laptop_conf" ]] && files+=("$laptop_conf") [[ -f "$laptop_conf" ]] && files+=("$laptop_conf")
# Parse binds/unbinds from files, detect overrides, and keep unique effective binds # Parse binds using the python script for speed
declare -A binding_map # combo -> bind line (effective) # The last argument must be the user config for override logic to work correctly
declare -A source_map # combo -> source file display_keybinds=$("$HOME/.config/hypr/scripts/keybinds_parser.py" "${files[@]}")
declare -A user_bind_map # combo -> user bind line
declare -A unbound_user # combo -> 1 if explicitly unbound in user file
declare -A seen_any_bind # combo -> 1 if any bind seen (for iteration)
declare -A default_seen # combo -> 1 if default bind exists
declare -a missing_unbind_suggestions_arr
normalize_combo() { echo "$1" | sed -E 's/[[:space:]]//g'; } # Check for suggestions file created by python script
if [[ -f "/tmp/hypr_keybind_suggestions_file" ]]; then
extract_combo() { suggestions_file=$(cat "/tmp/hypr_keybind_suggestions_file")
# arg: a bind/unbind line; returns "mods,key" via echo rm "/tmp/hypr_keybind_suggestions_file"
local s="$1" if [[ -n "$suggestions_file" && -f "$suggestions_file" ]]; then
s="$(echo "$s" | sed -E 's/[[:space:]]+#.*$//')" count=$(wc -l < "$suggestions_file")
if [[ "$s" =~ = ]]; then msg="$msg | Overrides missing unbind: $count (suggestions: $suggestions_file)"
local rhs="${s#*=}"
local mods="$(echo "$rhs" | awk -F',' '{gsub(/^[ \t]+|[ \t]+$/,"",$1); print $1}')"
local key="$(echo "$rhs" | awk -F',' '{gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2}')"
echo "${mods},${key}"
fi fi
}
for file in "${files[@]}"; do
[[ ! -f "$file" ]] && continue
while IFS= read -r line; do
[[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue
if [[ "$line" =~ ^[[:space:]]*bind[a-z]*[[:space:]]*= ]]; then
combo_raw="$(extract_combo "$line")"
[[ -z "$combo_raw" ]] && continue
combo="$(normalize_combo "$combo_raw")"
seen_any_bind["$combo"]=1
if [[ "$file" != "$user_keybinds_conf" ]]; then
default_seen["$combo"]=1
fi
# prefer user bind, else first seen
if [[ -z "${source_map[$combo]}" ]]; then
binding_map["$combo"]="$line"
source_map["$combo"]="$file"
fi
if [[ "$file" == "$user_keybinds_conf" ]]; then
user_bind_map["$combo"]="$line"
binding_map["$combo"]="$line"
source_map["$combo"]="$file"
fi
elif [[ "$line" =~ ^[[:space:]]*unbind[[:space:]]*= ]]; then
combo_raw="$(extract_combo "$line")"
[[ -z "$combo_raw" ]] && continue
combo="$(normalize_combo "$combo_raw")"
if [[ "$file" == "$user_keybinds_conf" ]]; then
unbound_user["$combo"]=1
fi
fi
done < "$file"
done
# Build raw_keybinds for display and collect missing unbind suggestions
raw_keybinds=""
for combo in "${!seen_any_bind[@]}"; do
eff_line="${binding_map[$combo]}"
src="${source_map[$combo]}"
[[ -z "$eff_line" ]] && continue
raw_keybinds+="$eff_line"$'\n'
# If user overrides a default but didn't unbind in user file, suggest unbind
if [[ "$src" == "$user_keybinds_conf" && -n "${default_seen[$combo]}" && -z "${unbound_user[$combo]}" ]]; then
suggest="$(echo "$eff_line" | sed -E 's/^[[:space:]]*bind[a-z]*/unbind/')"
missing_unbind_suggestions_arr+=("$suggest")
fi
done
# If there are missing unbinds, write suggestions to a temp file and note in message
if (( ${#missing_unbind_suggestions_arr[@]} > 0 )); then
suggestions_file="$(mktemp -t hypr-unbind-suggestions.XXXX.conf)"
printf '%s\n' "${missing_unbind_suggestions_arr[@]}" > "$suggestions_file"
msg="$msg | Overrides missing unbind: ${#missing_unbind_suggestions_arr[@]} (suggestions: $suggestions_file)"
fi fi
# check for any keybinds to display
if [[ -z "$raw_keybinds" ]]; then
echo "no keybinds found."
exit 1
fi
# transform into a readable list: MODS+KEY — DESCRIPTION (for bindd) or DISPATCHER [PARAMS] (for bind)
display_keybinds=$(echo "$raw_keybinds" | awk -F'=' '
function trim(s){ gsub(/^[ \t]+|[ \t]+$/,"",s); return s }
/^[[:space:]]*bind/ {
binder=$1; gsub(/[ \t]/, "", binder);
hasdesc = (index(binder, "d")>0);
rhs=$2; rhs=trim(rhs);
n=split(rhs, a, /[ \t]*,[ \t]*/);
mods=trim(a[1]); key=(n>=2?trim(a[2]):"");
desc=""; dispatcher=""; params="";
if (hasdesc) {
desc=(n>=3?trim(a[3]):"");
dispatcher=(n>=4?trim(a[4]):"");
start=5;
} else {
dispatcher=(n>=3?trim(a[3]):"");
start=4;
}
for(i=start;i<=n;i++){ if(length(a[i])){ p=trim(a[i]); if(p!="") params = (params?params", ":"") p } }
gsub(/\$mainMod/,"SUPER",mods);
gsub(/[ \t]+/,"+",mods);
combo = (mods && key) ? mods "+" key : (key?key:mods);
if (hasdesc && desc != "") {
print combo, " — ", desc;
} else {
if (dispatcher != "" && params != "")
print combo, " — ", dispatcher, " ", params;
else if (dispatcher != "")
print combo, " — ", dispatcher;
else
print combo;
}
}
')
# use rofi to display the keybinds # use rofi to display the keybinds
printf '%s\n' "$display_keybinds" | rofi -dmenu -i -config "$rofi_theme" -mesg "$msg" printf '%s\n' "$display_keybinds" | rofi -dmenu -i -config "$rofi_theme" -mesg "$msg"

View file

@ -1,72 +1,77 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# GDK BACKEND. Change to either wayland or x11 if having issues # GDK BACKEND. Change to either wayland or x11 if having issues
BACKEND=wayland BACKEND=wayland
# Check if rofi or yad is running and kill them if they are # Check if rofi or yad is running and kill them if they are
if pidof rofi > /dev/null; then if pidof rofi >/dev/null; then
pkill rofi pkill rofi
fi fi
if pidof yad > /dev/null; then if pidof yad >/dev/null; then
pkill yad pkill yad
fi fi
# Launch yad with calculated width and height # Launch yad with calculated width and height
GDK_BACKEND=$BACKEND yad \ GDK_BACKEND=$BACKEND yad \
--center \ --center \
--title="KooL Quick Cheat Sheet" \ --title="KooL Quick Cheat Sheet" \
--no-buttons \ --no-buttons \
--list \ --list \
--column=Key: \ --column=Key: \
--column=Description: \ --column=Description: \
--column=Command: \ --column=Comment: \
--timeout-indicator=bottom \ --timeout-indicator=bottom \
"ESC" "close this app" "" " = " "SUPER KEY (Windows Key Button)" "(SUPER KEY)" \ "ESC" "close this app" "" " = " "SUPER KEY (Windows Key Button)" "(SUPER KEY)" \
" SHIFT K" "Searchable Keybinds" "(Search all Keybinds via rofi)" \ " SHIFT K" "Searchable Keybinds" "(Search all Keybinds via rofi)" \
" SHIFT E" "KooL Hyprland Settings Menu" "" \ " SHIFT E" "KooL Hyprland Settings Menu" "WindowRules,themes,defaults, etc" \
"" "" "" \ " enter" "Terminal" "(Default:kitty)" \
" enter" "Terminal" "(kitty)" \ " SHIFT enter" "DropDown Terminal" " Q to close" \
" SHIFT enter" "DropDown Terminal" " Q to close" \ " B" "Launch Browser" "(Default browser)" \
" B" "Launch Browser" "(Default browser)" \ " A" "Desktop Overview" "Shows open apps in workspaces" \
" A" "Desktop Overview" "(AGS - if opted to install)" \ " D" "Application Launcher" "(rofi-wayland)" \
" D" "Application Launcher" "(rofi-wayland)" \ " E" "Open File Manager" "(Thunar)" \
" E" "Open File Manager" "(Thunar)" \ " S" "Google Search using rofi" "(rofi)" \
" S" "Google Search using rofi" "(rofi)" \ " T" "Global theme switcher" "(rofi)" \
" Q" "close active window" "(not kill)" \ " Q" "close active window" "(not kill)" \
" Shift Q " "kills an active window" "(kill)" \ " Shift Q " "kills an active window" "(kill)" \
" ALT mouse scroll up/down " "Desktop Zoom" "Desktop Magnifier" \ " ALT mouse scroll up/down " "Desktop Zoom" "Desktop Magnifier" \
" Alt V" "Clipboard Manager" "(cliphist)" \ " Alt V" "Clipboard Manager" "(cliphist)" \
" W" "Choose wallpaper" "(Wallpaper Menu)" \ " W" "Choose wallpaper" "(Wallpaper Menu)" \
" Shift W" "Choose wallpaper effects" "(imagemagick + swww)" \ " Shift W" "Choose wallpaper effects" "(imagemagick + awww)" \
"CTRL ALT W" "Random wallpaper" "(via swww)" \ "CTRL ALT W" "Random wallpaper" "(via awww)" \
" CTRL ALT B" "Hide/UnHide Waybar" "waybar" \ " CTRL ALT B" "Hide/UnHide Waybar" "waybar" \
" CTRL B" "Choose waybar styles" "(waybar styles)" \ " CTRL B" "Choose waybar styles" "(waybar styles)" \
" ALT B" "Choose waybar layout" "(waybar layout)" \ " ALT B" "Choose waybar layout" "(waybar layout)" \
" ALT R" "Reload Waybar swaync Rofi" "CHECK NOTIFICATION FIRST!!!" \ " ALT R" "Reload Waybar swaync Rofi" "CHECK NOTIFICATION FIRST!!!" \
" SHIFT N" "Launch Notification Panel" "swaync Notification Center" \ " SHIFT N" "Launch Notification Panel" "swaync Notification Center" \
" Print" "screenshot" "(grim)" \ " Print" "screenshot" "(grim)" \
" Shift Print" "screenshot region" "(grim + slurp)" \ " Shift Print" "screenshot region" "(grim + slurp)" \
" Shift S" "screenshot region" "(swappy)" \ " Shift S" "screenshot region" "(swappy)" \
" CTRL Print" "screenshot timer 5 secs " "(grim)" \ " CTRL Print" "screenshot timer 5 secs " "(grim)" \
" CTRL SHIFT Print" "screenshot timer 10 secs " "(grim)" \ " CTRL SHIFT Print" "screenshot timer 10 secs " "(grim)" \
"ALT Print" "Screenshot active window" "active window only" \ "ALT Print" "Screenshot active window" "active window only" \
"CTRL ALT P" "power-menu" "(wlogout)" \ "CTRL ALT P" "power-menu" "(wlogout)" \
"CTRL ALT L" "screen lock" "(hyprlock)" \ "CTRL ALT L" "screen lock" "(hyprlock)" \
"CTRL ALT Del" "Hyprland Exit" "(NOTE: Hyprland Will exit immediately)" \ "CTRL ALT Del" "Hyprland Exit" "(NOTE: Hyprland Will exit immediately)" \
" SHIFT F" "Fullscreen" "Toggles to full screen" \ " SHIFT F" "Fullscreen" "Toggles to full screen" \
" CTL F" "Fake Fullscreen" "Toggles to fake full screen" \ " CTL F" "Fake Fullscreen" "Toggles to fake full screen" \
" ALT L" "Toggle Dwindle | Master Layout" "Hyprland Layout" \ " ALT L" "Toggle Dwindle|Floating|Monocle|Master layouts" "Hyprland Layouts" \
" SPACEBAR" "Toggle float" "single window" \ " SPACEBAR" "Toggle float" "single window" \
" ALT SPACEBAR" "Toggle all windows to float" "all windows" \ " ALT SPACEBAR" "Toggle all windows to float" "all windows" \
" ALT O" "Toggle Blur" "normal or less blur" \ " ALT O" "Toggle Blur" "normal or less blur" \
" CTRL O" "Toggle Opaque ON or OFF" "on active window only" \ " CTRL O" "Toggle Opaque ON or OFF" "on active window only" \
" Shift A" "Animations Menu" "Choose Animations via rofi" \ " Shift A" "Animations Menu" "Choose Animations via rofi" \
" CTRL R" "Rofi Themes Menu" "Choose Rofi Themes 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)" \ " CTRL Shift R" "Rofi Themes Menu v2" "Choose Rofi Themes via Theme Selector (modified)" \
" SHIFT G" "Gamemode! All animations OFF or ON" "toggle" \ " SHIFT G" "Gamemode! All animations OFF or ON" "toggle" \
" ALT E" "Rofi Emoticons" "Emoticon" \ " ALT E" "Rofi Emoticons" "Emoticon" \
" H" "Launch this Quick Cheat Sheet" "" \ " H" "Launch this Quick Cheat Sheet" "" \
"" "" "" \ "" "" "" \
"More tips:" "https://github.com/JaKooLit/Hyprland-Dots/wiki" ""\ "More tips:" "https://github.com/LinuxBeginnings/Hyprland-Dots/wiki" ""

View file

@ -1,14 +1,19 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Initialize J/K keybinds so they always cycle windows globally (no layout-specific behavior) # Initialize J/K keybinds so they always cycle windows globally (no layout-specific behavior)
# This avoids double-actions when layouts change. # This avoids double-actions when layouts change.
set -euo pipefail set -euo pipefail
# Always reset and bind SUPER+J/K the same way on startup # Always reset and bind SUPER+J/K the same way on startup
hyprctl keyword unbind SUPER,J || true hyprctl keyword unbind SUPER,j || true
hyprctl keyword unbind SUPER,K || true hyprctl keyword unbind SUPER,k || true
# Cycle windows globally: J = next, K = previous # Cycle windows globally
hyprctl keyword bind SUPER,J,cyclenext hyprctl keyword bind SUPER,j,layoutmsg,cyclenext
hyprctl keyword bind SUPER,K,cyclenext,prev hyprctl keyword bind SUPER,k,layoutmsg,cycleprev

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# This is for changing kb_layouts. Set kb_layouts in "$HOME/.config/hypr/UserConfigs/UserSettings.conf" # This is for changing kb_layouts. Set kb_layouts in "$HOME/.config/hypr/UserConfigs/UserSettings.conf"
notif_icon="$HOME/.config/swaync/images/ja.png" notif_icon="$HOME/.config/swaync/images/ja.png"
@ -11,109 +16,109 @@ ignore_patterns=(
"Bluetooth Speaker" "Bluetooth Speaker"
"Other Device "Other Device
Name" Name"
) )
# Function to get keyboard names # Function to get keyboard names
get_keyboard_names() { get_keyboard_names() {
hyprctl devices -j | jq -r '.keyboards[].name' hyprctl devices -j | jq -r '.keyboards[].name'
} }
# Function to check if a device matches any ignore pattern # Function to check if a device matches any ignore pattern
is_ignored() { is_ignored() {
local device_name=$1 local device_name=$1
for pattern in "${ignore_patterns[@]}"; do for pattern in "${ignore_patterns[@]}"; do
if [[ "$device_name" == *"$pattern"* ]]; then if [[ "$device_name" == *"$pattern"* ]]; then
return 0 # Device matches ignore pattern return 0 # Device matches ignore pattern
fi fi
done done
return 1 # Device does not match any ignore pattern return 1 # Device does not match any ignore pattern
} }
# Function to get current layout info # Function to get current layout info
# Stores values in layout_mapping, variant_mapping and layout_index
get_current_layout_info() { get_current_layout_info() {
local found_kb=false local found_kb=false
# Read from the first non-ignored layout # Read from the first non-ignored layout
while read -r name; do while read -r name; do
if ! is_ignored "$name"; then if ! is_ignored "$name"; then
found_kb=true found_kb=true
local layout_mapping_str=$(hyprctl devices -j | local layout_mapping_str=$(hyprctl devices -j |
jq -r ".keyboards[] | select(.name==\"$name\").layout") jq -r --arg name "$name" '.keyboards[] | select(.name==$name).layout')
IFS="," read -r -a layout_mapping <<<"$layout_mapping_str" IFS="," read -r -a layout_mapping <<<"$layout_mapping_str"
local variant_mapping_str=$(hyprctl devices -j | local variant_mapping_str=$(hyprctl devices -j |
jq -r ".keyboards[] | select(.name==\"$name\").variant") jq -r --arg name "$name" '.keyboards[] | select(.name==$name).variant')
IFS="," read -r -a variant_mapping <<<"$variant_mapping_str" IFS="," read -r -a variant_mapping <<<"$variant_mapping_str"
layout_index=$(hyprctl devices -j | layout_index=$(hyprctl devices -j |
jq -r ".keyboards[] | select(.name==\"$name\").active_layout_index") jq -r --arg name "$name" '.keyboards[] | select(.name==$name).active_layout_index')
break break
fi fi
done <<< "$(get_keyboard_names)" done <<< "$(get_keyboard_names)"
$found_kb && return 0 $found_kb && return 0
return 1 return 1
} }
# Function to change keyboard layout # Function to change keyboard layout
change_layout() { change_layout() {
local error_found=false local error_found=false
while read -r name; do while read -r name; do
if is_ignored "$name"; then if is_ignored "$name"; then
echo "Skipping ignored device: $name" echo "Skipping ignored device: $name"
continue continue
fi fi
echo "Switching layout for $name to $new_layout..." echo "Switching layout for $name to $new_layout..."
hyprctl switchxkblayout "$name" "$next_index" hyprctl switchxkblayout "$name" "$next_index"
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "Error while switching layout for $name." >&2 echo "Error while switching layout for $name." >&2
error_found=true error_found=true
fi fi
done <<< "$(get_keyboard_names)" done <<<"$(get_keyboard_names)"
$error_found && return 1 $error_found && return 1
return 0 return 0
} }
# Stores values in layout_mapping, variant_mapping and layout_index # Stores values in layout_mapping, variant_mapping and layout_index
if ! get_current_layout_info; then if ! get_current_layout_info; then
echo "Could not get current layout information." >&2 echo "Could not get current layout information." >&2
echo "There might not be any keyboards available, \ echo "There might not be any keyboards available, \
or some were unnecessarily set as ignored." >&2 or some were unnecessarily set as ignored." >&2
notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed" notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed"
echo "Exiting $0 $@" >&2 echo "Exiting $0 $@" >&2
exit 1 exit 1
fi fi
current_layout=${layout_mapping[layout_index]} current_layout=${layout_mapping[$layout_index]}
current_variant=${variant_mapping[layout_index]} current_variant=${variant_mapping[$layout_index]}
if [[ "$1" == "status" ]]; then if [[ "$1" == "status" ]]; then
echo "$current_layout${current_variant:+($current_variant)}" echo "$current_layout${current_variant:+($current_variant)}"
elif [[ "$1" == "switch" ]]; then elif [[ "$1" == "switch" ]]; then
echo "Current layout: $current_layout($current_variant)" echo "Current layout: $current_layout($current_variant)"
layout_count=${#layout_mapping[@]} layout_count=${#layout_mapping[@]}
echo "Number of layouts: $layout_count" echo "Number of layouts: $layout_count"
next_index=$(( (layout_index + 1) % layout_count )) next_index=$(( (layout_index + 1) % layout_count ))
new_layout="${layout_mapping[next_index]}" new_layout="${layout_mapping[$next_index]}"
new_variant="${variant_mapping[next_index]}" new_variant="${variant_mapping[$next_index]}"
echo "Next layout: $new_layout" echo "Next layout: $new_layout"
# Execute layout change and notify # Execute layout change and notify
if ! change_layout; then if ! change_layout; then
notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed" notify-send -u low -t 2000 'kb_layout' " Error:" " Layout change failed"
echo "Layout change failed." >&2 echo "Layout change failed." >&2
exit 1 exit 1
else else
notify-send -u low -i "$notif_icon" " kb_layout: $new_layout${new_variant:+($new_variant)}" notify-send -u low -i "$notif_icon" " kb_layout: $new_layout${new_variant:+($new_variant)}"
echo "Layout change notification sent." echo "Layout change notification sent."
fi fi
else else
echo "Usage: $0 {status|switch}" echo "Usage: $0 {status|switch}"
fi fi

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Copied from Discord post. Thanks to @Zorg # Copied from Discord post. Thanks to @Zorg
@ -7,5 +12,10 @@
# Get id of an active window # Get id of an active window
active_pid=$(hyprctl activewindow | grep -o 'pid: [0-9]*' | cut -d' ' -f2) active_pid=$(hyprctl activewindow | grep -o 'pid: [0-9]*' | cut -d' ' -f2)
if [[ -z "$active_pid" || ! "$active_pid" =~ ^[0-9]+$ ]]; then
notify-send -u low -i "$HOME/.config/swaync/images/error.png" "Kill Active Window" "No active window PID found."
exit 1
fi
# Close active window # Close active window
kill $active_pid kill "$active_pid"

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */  # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Kitty Themes Source https://github.com/dexpota/kitty-themes # # Kitty Themes Source https://github.com/dexpota/kitty-themes #
# Define directories and variables # Define directories and variables
@ -16,14 +21,22 @@ notify_user() {
# Function to apply the selected kitty theme # Function to apply the selected kitty theme
apply_kitty_theme_to_config() { apply_kitty_theme_to_config() {
local theme_name_to_apply="$1" local theme_name_to_apply="$1"
local apply_mode="${2:-preview}"
if [ -z "$theme_name_to_apply" ]; then if [ -z "$theme_name_to_apply" ]; then
echo "Error: No theme name provided to apply_kitty_theme_to_config." >&2 echo "Error: No theme name provided to apply_kitty_theme_to_config." >&2
return 1 return 1
fi fi
local theme_file_path_to_apply
if [ "$theme_name_to_apply" = "Set by wallpaper" ]; then
theme_file_path_to_apply="$kitty_themes_DiR/01-Wallust.conf"
elif [ "$theme_name_to_apply" = "Default no color" ]; then
theme_file_path_to_apply="$kitty_themes_DiR/00-Default.conf"
else
theme_file_path_to_apply="$kitty_themes_DiR/$theme_name_to_apply.conf"
fi
local theme_file_path_to_apply="$kitty_themes_DiR/$theme_name_to_apply.conf"
if [ ! -f "$theme_file_path_to_apply" ]; then if [ ! -f "$theme_file_path_to_apply" ]; then
notify_user "$iDIR/error.png" "Error" "Theme file not found: $theme_name_to_apply.conf" notify_user "$iDIR/error.png" "Error" "Theme file not found: $(basename "$theme_file_path_to_apply")"
return 1 return 1
fi fi
@ -31,23 +44,31 @@ apply_kitty_theme_to_config() {
temp_kitty_config_file=$(mktemp) temp_kitty_config_file=$(mktemp)
cp "$kitty_config" "$temp_kitty_config_file" cp "$kitty_config" "$temp_kitty_config_file"
local include_target
include_target="include ./kitty-themes/$(basename "$theme_file_path_to_apply")"
if grep -q -E '^[#[:space:]]*include\s+\./kitty-themes/.*\.conf' "$temp_kitty_config_file"; then 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" sed -i -E "s|^([#[:space:]]*include\s+\./kitty-themes/).*\.conf|$include_target|g" "$temp_kitty_config_file"
else else
if [ -s "$temp_kitty_config_file" ] && [ "$(tail -c1 "$temp_kitty_config_file")" != "" ]; then if [ -s "$temp_kitty_config_file" ] && [ "$(tail -c1 "$temp_kitty_config_file")" != "" ]; then
echo >>"$temp_kitty_config_file" echo >>"$temp_kitty_config_file"
fi fi
echo "include ./kitty-themes/$theme_name_to_apply.conf" >>"$temp_kitty_config_file" echo "$include_target" >>"$temp_kitty_config_file"
fi fi
cp "$temp_kitty_config_file" "$kitty_config" cp "$temp_kitty_config_file" "$kitty_config"
rm "$temp_kitty_config_file" rm "$temp_kitty_config_file"
if pidof kitty >/dev/null 2>&1; then
for pid_kitty in $(pidof kitty); do if [ "$apply_mode" = "apply" ] && command -v kitty >/dev/null 2>&1; then
if [ -n "$pid_kitty" ]; then kitty @ load-config >/dev/null 2>&1
kill -SIGUSR1 "$pid_kitty" kitty @ set-colors --all --configured "$theme_file_path_to_apply" >/dev/null 2>&1
fi fi
done for pid_kitty in $(pidof kitty); do
if [ -n "$pid_kitty" ]; then
kill -SIGUSR1 "$pid_kitty"
fi
done
fi
return 0 return 0
} }
@ -65,7 +86,8 @@ fi
original_kitty_config_content_backup=$(cat "$kitty_config") 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) mapfile -t available_theme_names < <(find "$kitty_themes_DiR" -maxdepth 1 -name "*.conf" -type f -printf "%f\n" | sed 's/\.conf$//' | grep -v -E '^(00-Default|01-Wallust)$' | sort)
available_theme_names=("Set by wallpaper" "Default no color" "${available_theme_names[@]}")
if [ ${#available_theme_names[@]} -eq 0 ]; then if [ ${#available_theme_names[@]} -eq 0 ]; then
notify_user "$iDIR/error.png" "No Kitty Themes" "No .conf files found in $kitty_themes_DiR." notify_user "$iDIR/error.png" "No Kitty Themes" "No .conf files found in $kitty_themes_DiR."
@ -73,7 +95,12 @@ if [ ${#available_theme_names[@]} -eq 0 ]; then
fi fi
current_selection_index=0 current_selection_index=0
current_active_theme_name=$(awk -F'include ./kitty-themes/|\\.conf' '/^[[:space:]]*include \.\/kitty-themes\/.*\.conf/{print $2; exit}' "$kitty_config") current_active_theme_name=$(awk -F'include ./kitty-themes/|\\.conf' '/^[[:space:]]*include \\.\/kitty-themes\/.*\\.conf/{print $2; exit}' "$kitty_config")
if [ "$current_active_theme_name" = "01-Wallust" ]; then
current_active_theme_name="Set by wallpaper"
elif [ "$current_active_theme_name" = "00-Default" ]; then
current_active_theme_name="Default no color"
fi
if [ -n "$current_active_theme_name" ]; then if [ -n "$current_active_theme_name" ]; then
for i in "${!available_theme_names[@]}"; do for i in "${!available_theme_names[@]}"; do
@ -85,14 +112,6 @@ if [ -n "$current_active_theme_name" ]; then
fi fi
while true; do 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="" rofi_input_list=""
for theme_name_in_list in "${available_theme_names[@]}"; do for theme_name_in_list in "${available_theme_names[@]}"; do
@ -104,16 +123,24 @@ while true; do
rofi -dmenu -i \ rofi -dmenu -i \
-format 'i' \ -format 'i' \
-p "Kitty Theme" \ -p "Kitty Theme" \
-mesg "Preview: ${theme_to_preview_now} | Enter: Preview | Ctrl+S: Apply & Exit | Esc: Cancel" \ -mesg "Enter: Preview | Ctrl+S: Apply & Exit | Esc: Cancel" \
-config "$rofi_theme_for_this_script" \ -config "$rofi_theme_for_this_script" \
-selected-row "$current_selection_index" \ -selected-row "$current_selection_index" \
-kb-custom-1 "Control+s") # MODIFIED HERE: Changed to Control+s for custom action 1 -kb-custom-1 "Control+s")
rofi_exit_code=$? rofi_exit_code=$?
if [ $rofi_exit_code -eq 0 ]; then if [ $rofi_exit_code -eq 0 ]; then
if [[ "$chosen_index_from_rofi" =~ ^[0-9]+$ ]] && [ "$chosen_index_from_rofi" -lt "${#available_theme_names[@]}" ]; then if [[ "$chosen_index_from_rofi" =~ ^[0-9]+$ ]] && [ "$chosen_index_from_rofi" -lt "${#available_theme_names[@]}" ]; then
current_selection_index="$chosen_index_from_rofi" current_selection_index="$chosen_index_from_rofi"
theme_to_preview_now="${available_theme_names[$current_selection_index]}"
if ! apply_kitty_theme_to_config "$theme_to_preview_now" "preview"; 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
continue
else else
: :
fi fi
@ -123,6 +150,7 @@ while true; do
for pid_kitty in $(pidof kitty); do if [ -n "$pid_kitty" ]; then kill -SIGUSR1 "$pid_kitty"; fi; done for pid_kitty in $(pidof kitty); do if [ -n "$pid_kitty" ]; then kill -SIGUSR1 "$pid_kitty"; fi; done
break break
elif [ $rofi_exit_code -eq 10 ]; then # This is the exit code for -kb-custom-1 elif [ $rofi_exit_code -eq 10 ]; then # This is the exit code for -kb-custom-1
apply_kitty_theme_to_config "$theme_to_preview_now" "apply"
notify_user "$iDIR/ja.png" "Kitty Theme Applied" "$theme_to_preview_now" notify_user "$iDIR/ja.png" "Kitty Theme Applied" "$theme_to_preview_now"
break break
else else

View file

@ -1,28 +1,39 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# simple bash script to check if update is available by comparing local version and github version # simple bash script to check if update is available by comparing local version and github version
# Local Paths # Local Paths
local_dir="$HOME/.config/hypr" local_dir="$HOME/.config/hypr"
iDIR="$HOME/.config/swaync/images/" iDIR="$HOME/.config/swaync/images/"
local_version=$(ls $local_dir/v* 2>/dev/null | sort -V | tail -n 1 | sed 's/.*v\(.*\)/\1/') local_version=$(find "$local_dir" -maxdepth 1 -name 'v*' -printf '%f\n' 2>/dev/null | sort -V | tail -n 1 | sed 's/^v//')
KooL_Dots_DIR="$HOME/Hyprland-Dots" KooL_Dots_DIR="$HOME/Hyprland-Dots"
# exit if cannot find local version # exit if cannot find local version
if [ -z "$local_version" ]; then if [ -z "$local_version" ]; then
notify-send -i "$iDIR/error.png" "ERROR "!?!?!!"" "Unable to find KooL's dots version . exiting.... " notify-send -i "$iDIR/error.png" 'ERROR !?!?!!' "Unable to find KooL's dots version. Exiting."
exit 1 exit 1
fi fi
# GitHub URL - KooL's dots # GitHub URL - KooL's dots
branch="main" branch="main"
github_url="https://github.com/JaKooLit/Hyprland-Dots/tree/$branch/config/hypr/" github_url="https://github.com/LinuxBeginnings/Hyprland-Dots/tree/$branch/config/hypr/"
# Check for required tools (curl)
if ! command -v curl &> /dev/null; then
notify-send -i "$iDIR/error.png" "Need curl:" "curl not found. Please install curl."
exit 1
fi
# Fetch the version from GitHub URL - KooL's dots # 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//') github_version=$(curl -fsSL -A "Mozilla/5.0" "$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 # Cant find GitHub URL - KooL's dots version
if [ -z "$github_version" ]; then if [ -z "$github_version" ]; then
notify-send -i "$iDIR/error.png" 'KooL Hyprland:' "Unable to determine GitHub version."
exit 1 exit 1
fi fi
@ -39,13 +50,13 @@ else
case "$response" in case "$response" in
"action1") "action1")
if [ -d $KooL_Dots_DIR ]; then if [ -d "$KooL_Dots_DIR" ]; then
if ! command -v kitty &> /dev/null; 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." notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Kitty terminal not found. Please install Kitty terminal."
exit 1 exit 1
fi fi
kitty -e bash -c " kitty -e bash -c "
cd $KooL_Dots_DIR && cd \"$KooL_Dots_DIR\" &&
git stash && git stash &&
git pull && git pull &&
./copy.sh && ./copy.sh &&
@ -58,8 +69,8 @@ else
exit 1 exit 1
fi fi
kitty -e bash -c " kitty -e bash -c "
git clone --depth=1 https://github.com/JaKooLit/Hyprland-Dots.git $KooL_Dots_DIR && git clone --depth=1 https://github.com/LinuxBeginnings/Hyprland-Dots.git $KooL_Dots_DIR &&
cd $KooL_Dots_DIR && cd \"$KooL_Dots_DIR\" &&
chmod +x copy.sh && chmod +x copy.sh &&
./copy.sh && ./copy.sh &&
notify-send -u critical -i "$iDIR/ja.png" 'Update Completed:' 'Kindly log out and relogin to take effect' notify-send -u critical -i "$iDIR/ja.png" 'Update Completed:' 'Kindly log out and relogin to take effect'

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Rofi menu for KooL Hyprland Quick Settings (SUPER SHIFT E) # Rofi menu for KooL Hyprland Quick Settings (SUPER SHIFT E)
# Updated for UserConfigs/configs separation # Updated for UserConfigs/configs separation
@ -22,7 +27,154 @@ UserScripts="$HOME/.config/hypr/UserScripts"
# Function to show info notification # Function to show info notification
show_info() { show_info() {
notify-send -i "$iDIR/info.png" "Info" "$1" if [[ -f "$iDIR/info.png" ]]; then
notify-send -i "$iDIR/info.png" "Info" "$1"
else
notify-send "Info" "$1"
fi
}
# Function to toggle Rainbow Borders script availability and refresh UI components
toggle_rainbow_borders() {
local rainbow_script="$UserScripts/RainbowBorders.sh"
local disabled_sh_bak="${rainbow_script}.bak" # RainbowBorders.sh.bak
local disabled_bak_sh="$UserScripts/RainbowBorders.bak.sh" # RainbowBorders.bak.sh (created by copy.sh when disabled)
local refresh_script="$scriptsDir/Refresh.sh"
local status=""
# If both disabled variants exist, keep the newer one to avoid ambiguity
if [[ -f "$disabled_sh_bak" && -f "$disabled_bak_sh" ]]; then
if [[ "$disabled_sh_bak" -nt "$disabled_bak_sh" ]]; then
rm -f "$disabled_bak_sh"
else
rm -f "$disabled_sh_bak"
fi
fi
if [[ -f "$rainbow_script" ]]; then
# Currently enabled -> disable to canonical .sh.bak
if mv "$rainbow_script" "$disabled_sh_bak"; then
status="disabled"
if command -v hyprctl &>/dev/null; then
hyprctl reload >/dev/null 2>&1 || true
fi
fi
elif [[ -f "$disabled_sh_bak" ]]; then
# Disabled (.sh.bak) -> enable
if mv "$disabled_sh_bak" "$rainbow_script"; then
status="enabled"
fi
elif [[ -f "$disabled_bak_sh" ]]; then
# Disabled (.bak.sh) -> enable (normalize to .sh)
if mv "$disabled_bak_sh" "$rainbow_script"; then
status="enabled"
fi
else
show_info "RainbowBorders script not found in $UserScripts (checked .sh, .sh.bak, .bak.sh)."
return
fi
# Run refresh if available, otherwise apply borders directly
if [[ -x "$refresh_script" ]]; then
"$refresh_script" >/dev/null 2>&1 &
elif [[ "$current" != "disabled" && -x "$rainbow_script" ]]; then
"$rainbow_script" >/dev/null 2>&1 &
fi
if [[ -n "$status" ]]; then
show_info "Rainbow Borders ${status}."
fi
}
# Submenu to choose Rainbow Borders mode (disable, wallust_random, rainbow, gradient_flow)
rainbow_borders_menu() {
local rainbow_script="$UserScripts/RainbowBorders.sh"
local disabled_sh_bak="${rainbow_script}.bak"
local disabled_bak_sh="$UserScripts/RainbowBorders.bak.sh"
local refresh_script="$scriptsDir/Refresh.sh"
# Determine current mode/status (internal)
local current="disabled"
if [[ -f "$rainbow_script" ]]; then
current=$(grep -E '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null | sed -E 's/^EFFECT_TYPE="?([^"]*)"?/\1/')
[[ -z "$current" ]] && current="unknown"
fi
# Map internal mode to friendly display
local current_display="$current"
case "$current" in
wallust_random) current_display="Wallust Color" ;;
rainbow) current_display="Original Rainbow" ;;
gradient_flow) current_display="Gradient Flow" ;;
disabled) current_display="Disabled" ;;
esac
# Build options and prompt
local options="Disable Rainbow Borders\nWallust Color\nOriginal Rainbow\nGradient Flow"
local choice
choice=$(printf "%b" "$options" | rofi -i -dmenu -config "$rofi_theme" -mesg "Rainbow Borders: current = $current_display")
[[ -z "$choice" ]] && return
local previous="$current"
case "$choice" in
"Disable Rainbow Borders")
if [[ -f "$rainbow_script" ]]; then
mv "$rainbow_script" "$disabled_sh_bak"
fi
current="disabled"
if command -v hyprctl &>/dev/null; then
hyprctl reload >/dev/null 2>&1 || true
fi
;;
"Wallust Color"|"Original Rainbow"|"Gradient Flow")
local mode=""
case "$choice" in
"Wallust Color") mode="wallust_random" ;;
"Original Rainbow") mode="rainbow" ;;
"Gradient Flow") mode="gradient_flow" ;;
esac
# Ensure script is enabled
if [[ ! -f "$rainbow_script" ]]; then
if [[ -f "$disabled_sh_bak" ]]; then
mv "$disabled_sh_bak" "$rainbow_script"
elif [[ -f "$disabled_bak_sh" ]]; then
mv "$disabled_bak_sh" "$rainbow_script"
else
show_info "RainbowBorders script not found in $UserScripts."
return
fi
fi
# Update EFFECT_TYPE in place; insert if missing
if grep -q '^EFFECT_TYPE=' "$rainbow_script" 2>/dev/null; then
sed -i 's/^EFFECT_TYPE=.*/EFFECT_TYPE="'"$mode"'"/' "$rainbow_script"
else
if head -n1 "$rainbow_script" | grep -q '^#!'; then
sed -i '1a EFFECT_TYPE="'"$mode"'"' "$rainbow_script"
else
sed -i '1i EFFECT_TYPE="'"$mode"'"' "$rainbow_script"
fi
fi
# Set current to chosen mode
current="$mode"
;;
*)
return ;;
esac
# Run refresh if available
if [[ -x "$refresh_script" ]]; then
"$refresh_script" >/dev/null 2>&1 &
fi
# Apply mode immediately (in case refresh doesn't trigger it)
if [[ "$current" != "disabled" && -x "$rainbow_script" ]]; then
"$rainbow_script" >/dev/null 2>&1 &
fi
# No notifications; mode is shown in the menu
} }
# Function to display the menu options without numbers # Function to display the menu options without numbers
@ -44,7 +196,9 @@ Edit System Default Startup Apps
Edit System Default Window Rules Edit System Default Window Rules
Edit System Default Settings Edit System Default Settings
--- UTILITIES --- --- UTILITIES ---
Set SDDM Wallpaper
Choose Kitty Terminal Theme Choose Kitty Terminal Theme
Choose Ghostty Terminal Theme
Configure Monitors (nwg-displays) Configure Monitors (nwg-displays)
Configure Workspace Rules (nwg-displays) Configure Workspace Rules (nwg-displays)
GTK Settings (nwg-look) GTK Settings (nwg-look)
@ -54,8 +208,10 @@ Choose Hyprland Animations
Choose Monitor Profiles Choose Monitor Profiles
Choose Rofi Themes Choose Rofi Themes
Search for Keybinds Search for Keybinds
Toggle Waybar Weather units (C/F)
Toggle Game Mode Toggle Game Mode
Switch Dark-Light Theme Switch Dark-Light Theme
Rainbow Borders Mode
EOF EOF
} }
@ -78,7 +234,9 @@ main() {
"Edit System Default Startup Apps") file="$configs/Startup_Apps.conf" ;; "Edit System Default Startup Apps") file="$configs/Startup_Apps.conf" ;;
"Edit System Default Window Rules") file="$configs/WindowRules.conf" ;; "Edit System Default Window Rules") file="$configs/WindowRules.conf" ;;
"Edit System Default Settings") file="$configs/SystemSettings.conf" ;; "Edit System Default Settings") file="$configs/SystemSettings.conf" ;;
"Set SDDM Wallpaper") $scriptsDir/sddm_wallpaper.sh --normal ;;
"Choose Kitty Terminal Theme") $scriptsDir/Kitty_themes.sh ;; "Choose Kitty Terminal Theme") $scriptsDir/Kitty_themes.sh ;;
"Choose Ghostty Terminal Theme") $scriptsDir/Ghostty_themes.sh ;;
"Configure Monitors (nwg-displays)") "Configure Monitors (nwg-displays)")
if ! command -v nwg-displays &>/dev/null; then if ! command -v nwg-displays &>/dev/null; then
notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Install nwg-displays first" notify-send -i "$iDIR/error.png" "E-R-R-O-R" "Install nwg-displays first"
@ -113,8 +271,10 @@ main() {
"Choose Monitor Profiles") $scriptsDir/MonitorProfiles.sh ;; "Choose Monitor Profiles") $scriptsDir/MonitorProfiles.sh ;;
"Choose Rofi Themes") $scriptsDir/RofiThemeSelector.sh ;; "Choose Rofi Themes") $scriptsDir/RofiThemeSelector.sh ;;
"Search for Keybinds") $scriptsDir/KeyBinds.sh ;; "Search for Keybinds") $scriptsDir/KeyBinds.sh ;;
"Toggle Waybar Weather units (C/F)") $scriptsDir/Toggle-weather-waybar-units.sh ;;
"Toggle Game Mode") $scriptsDir/GameMode.sh ;; "Toggle Game Mode") $scriptsDir/GameMode.sh ;;
"Switch Dark-Light Theme") $scriptsDir/DarkLight.sh ;; "Switch Dark-Light Theme") $scriptsDir/DarkLight.sh ;;
"Rainbow Borders Mode") rainbow_borders_menu ;;
*) return ;; # Do nothing for invalid choices *) return ;; # Do nothing for invalid choices
esac esac

View file

@ -1,11 +1,16 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# For Hyprlock # For Hyprlock
#pidof hyprlock || hyprlock -q #pidof hyprlock || hyprlock -q
# Ensure weather cache is up-to-date before locking (Waybar/lockscreen readers) # Ensure weather cache is up-to-date before locking (Waybar/lockscreen readers)
bash "$HOME/.config/hypr/UserScripts/WeatherWrap.sh" >/dev/null 2>&1 bash "$HOME/.config/hypr/UserScripts/WeatherWrap.sh" >/dev/null 2>&1 &
loginctl lock-session loginctl lock-session

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Playerctl # Playerctl
music_icon="$HOME/.config/swaync/icons/music.png" music_icon="$HOME/.config/swaync/icons/music.png"

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# For applying Pre-configured Monitor Profiles # For applying Pre-configured Monitor Profiles
# Check if rofi is already running # Check if rofi is already running

View file

@ -1,11 +1,16 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ # # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Overview toggle wrapper - tries Quickshell first, falls back to AGS # Overview toggle wrapper - tries Quickshell first, falls back to AGS
set -euo pipefail set -euo pipefail
# 1) Try Quickshell via IPC (works if QS is running and listening) # 1) Try Quickshell via IPC (works if QS is running and listening)
if pgrep -x quickshell >/dev/null 2>&1; then if pgrep -x qs >/dev/null 2>&1; then
if qs ipc -c overview call overview toggle >/dev/null 2>&1; then if qs ipc -c overview call overview toggle >/dev/null 2>&1; then
exit 0 exit 0
fi fi

View file

@ -0,0 +1,521 @@
#!/usr/bin/env bash
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# 💫 https://github.com/LinuxBeginnings 💫 #
# Polkit Diagnostic & Triage Script #
# Default values
OUTFILE="$HOME/Downloads/Polkit-diag.txt"
DRY_RUN=0
INSTALL_OVERRIDE=0
FORCE_OVERRIDE=0
# Systemd override details for hyprpolkitagent
OVERRIDE_DIR="$HOME/.config/systemd/user/hyprpolkitagent.service.d"
OVERRIDE_FILE="$OVERRIDE_DIR/override.conf"
OVERRIDE_CONTENT="[Unit]
After=
After=dbus.service graphical-session.target
PartOf=graphical-session.target
[Install]
WantedBy=graphical-session.target"
print_help() {
cat << EOF
Usage: $(basename "$0") [OPTIONS]
Gather diagnostic information for polkit issues and optionally apply a systemd override.
This script is modular and extensible for different Linux distributions.
Options:
-h, --help Show this help message and exit
-d, --dry-run Run without making changes (output to stdout instead of file)
--install-override Install the systemd override for hyprpolkitagent if not already present
--force-override Overwrite the existing systemd override for hyprpolkitagent
-o, --output FILE Specify custom output file (default: $HOME/Downloads/Polkit-diag.txt)
EOF
}
setup_output() {
if [[ $DRY_RUN -eq 1 ]]; then
echo "================================================="
echo " [Dry Run] Diagnostics will be printed to stdout."
echo "================================================="
exec 3>&1
else
local outdir
outdir=$(dirname "$OUTFILE")
# Check and create directory if it doesn't exist
if [[ ! -d "$outdir" ]]; then
echo "Directory $outdir does not exist. Creating..."
mkdir -p "$outdir"
fi
# Backup existing file
if [[ -f "$OUTFILE" ]]; then
local backup_file="${OUTFILE}.bak.$(date +%Y%m%d%H%M%S)"
echo "Existing output file found. Backing up to: $backup_file"
mv "$OUTFILE" "$backup_file"
fi
echo "Diagnostics will be saved to: $OUTFILE"
exec 3> "$OUTFILE"
fi
}
apply_override() {
if [[ $INSTALL_OVERRIDE -eq 1 ]]; then
local msg="\n=== Systemd Override for hyprpolkitagent ==="
[[ $DRY_RUN -eq 0 ]] && echo -e "$msg" >&3
echo -e "$msg"
local out
if systemctl --user is-enabled hyprpolkitagent.service >/dev/null 2>&1; then
msg="[STATUS] hyprpolkitagent.service is currently enabled."
else
msg="[STATUS] hyprpolkitagent.service is NOT enabled. You may need to enable it."
fi
[[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3
echo "$msg"
if [[ -f "$OVERRIDE_FILE" && $FORCE_OVERRIDE -eq 0 ]]; then
msg="[INFO] Override already exists at $OVERRIDE_FILE."
[[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3; echo "$msg"
msg="[ACTION] Use --force-override to overwrite it."
[[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3; echo "$msg"
else
if [[ -f "$OVERRIDE_FILE" && $FORCE_OVERRIDE -eq 1 ]]; then
msg="[CONFIRM] Force override requested. Overwriting existing override..."
[[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3; echo "$msg"
fi
msg="[ACTION] Installing override to $OVERRIDE_FILE..."
[[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3; echo "$msg"
if [[ $DRY_RUN -eq 0 ]]; then
# Capture dir creation
if out=$(mkdir -p "$OVERRIDE_DIR" 2>&1); then
msg=" [OK] Created/verified directory $OVERRIDE_DIR."
else
msg=" [ERROR] Failed to create directory $OVERRIDE_DIR.\n Details: $out"
fi
echo -e "$msg" >&3; echo -e "$msg"
# Capture file write
if out=$(echo "$OVERRIDE_CONTENT" > "$OVERRIDE_FILE" 2>&1); then
msg=" [OK] Successfully wrote override file."
else
msg=" [ERROR] Failed to write override file.\n Details: $out"
fi
echo -e "$msg" >&3; echo -e "$msg"
# Capture daemon-reload
if out=$(systemctl --user daemon-reload 2>&1); then
msg=" [OK] Systemd daemon reloaded."
else
msg=" [ERROR] Failed to reload systemd daemon.\n Details: $out"
fi
echo -e "$msg" >&3; echo -e "$msg"
# Capture restart
if systemctl --user is-active --quiet hyprpolkitagent.service; then
msg="[ACTION] Restarting hyprpolkitagent.service..."
[[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3; echo "$msg"
if out=$(systemctl --user restart hyprpolkitagent.service 2>&1); then
msg=" [OK] Service restarted successfully."
else
msg=" [ERROR] Failed to restart service.\n Details: $out"
fi
echo -e "$msg" >&3; echo -e "$msg"
else
msg="[INFO] Service is not currently active, skipping restart step."
[[ $DRY_RUN -eq 0 ]] && echo "$msg" >&3; echo "$msg"
fi
else
msg="[Dry Run] Would create $OVERRIDE_FILE and reload systemd daemon."
echo "$msg"
fi
fi
fi
}
gather_general_info() {
echo -e "\n=======================================" >&3
echo -e " General System Information" >&3
echo -e "=======================================" >&3
echo "Date: $(date)" >&3
echo -e "\n--- Kernel ---" >&3
uname -a >&3
echo -e "\n--- OS Release ---" >&3
cat /etc/os-release >&3
echo -e "\n=======================================" >&3
echo -e " Polkit Service Status" >&3
echo -e "=======================================" >&3
echo -e "\n--- System Polkit Service ---" >&3
systemctl status polkit.service --no-pager >&3 2>&1 || true
echo -e "\n--- User Hyprpolkitagent Service ---" >&3
systemctl --user status hyprpolkitagent.service --no-pager >&3 2>&1 || true
echo -e "\n--- Running Polkit Processes ---" >&3
local polkit_procs
polkit_procs=$(ps aux | grep -i '[p]olkit')
if [[ -n "$polkit_procs" ]]; then
echo "$polkit_procs" >&3
# Check for conflicting agents
local kde_agent_running=0
local gnome_agent_running=0
local hypr_agent_running=0
if echo "$polkit_procs" | grep -q "polkit-kde-authentication-agent-1"; then
kde_agent_running=1
fi
if echo "$polkit_procs" | grep -q "polkit-gnome-authentication-agent-1"; then
gnome_agent_running=1
fi
if echo "$polkit_procs" | grep -q "hyprpolkitagent"; then
hypr_agent_running=1
fi
if [[ $hypr_agent_running -eq 1 && ($kde_agent_running -eq 1 || $gnome_agent_running -eq 1) ]]; then
echo -e "\n[!] CONFLICT DETECTED: Multiple polkit agents are running!" >&3
echo " Hyprpolkitagent is running alongside another desktop environment's agent." >&3
echo " Only ONE polkit agent can be registered at a time." >&3
if [[ $kde_agent_running -eq 1 ]]; then
echo " -> Found KDE polkit agent. You may need to disable it in Hyprland by adding 'NotShowIn=Hyprland;' to its autostart .desktop file." >&3
fi
if [[ $gnome_agent_running -eq 1 ]]; then
echo " -> Found GNOME polkit agent. You may need to disable it in Hyprland." >&3
fi
elif [[ $kde_agent_running -eq 1 && $hypr_agent_running -eq 0 ]]; then
echo -e "\n[!] WARNING: KDE polkit agent is running instead of hyprpolkitagent." >&3
echo " This can cause 'authentication agent already exists' errors if hyprpolkitagent tries to start later." >&3
fi
else
echo "No polkit processes found running." >&3
fi
echo -e "\n=======================================" >&3
echo -e " Recent Logs" >&3
echo -e "=======================================" >&3
echo -e "\n--- Journalctl (polkit.service) [Last 50 entries, warnings/errors] ---" >&3
journalctl -u polkit.service -n 50 --no-pager -p 4 >&3 2>&1 || echo "Could not fetch system polkit logs." >&3
echo -e "\n--- Journalctl (hyprpolkitagent.service) [Last 50 entries] ---" >&3
journalctl --user -u hyprpolkitagent.service -n 50 --no-pager >&3 2>&1 || echo "Could not fetch user hyprpolkitagent logs." >&3
}
# --- Modular Package Checking System ---
check_packages() {
local check_cmd="$1"
local install_msg="$2"
shift 2
local pkgs=("$@")
local missing_pkgs=()
for pkg in "${pkgs[@]}"; do
local out
if out=$(eval "$check_cmd \"$pkg\"" 2>/dev/null); then
# Print the first line of output as the installed info
echo "[INSTALLED] $(echo "$out" | head -n 1)" >&3
else
echo "[MISSING] $pkg" >&3
missing_pkgs+=("$pkg")
fi
done
if [[ ${#missing_pkgs[@]} -gt 0 ]]; then
echo -e "\nWARNING: The following packages are missing:" >&3
for mpkg in "${missing_pkgs[@]}"; do
echo " - $mpkg" >&3
done
echo "$install_msg ${missing_pkgs[*]}" >&3
return 1
fi
return 0
}
check_source_binaries() {
local bin_dir="$1"
shift
local bins=("$@")
local found_any=0
echo -e "\n--- Source Builds (${bin_dir}) ---" >&3
for bin in "${bins[@]}"; do
if [[ -x "${bin_dir}/${bin}" ]]; then
echo "[SOURCE] ${bin_dir}/${bin}" >&3
found_any=1
else
echo "[MISSING] ${bin_dir}/${bin}" >&3
fi
done
return $found_any
}
gather_arch_info() {
echo -e "\n=======================================" >&3
echo -e " Package Info (Arch Linux)" >&3
echo -e "=======================================" >&3
# Essential packages required for polkit & related UI
local pkgs=(
"qt5-declarative"
"qt5-quickcontrols2"
"qt6-declarative"
"hyprpolkitagent"
"polkit"
)
local aur_pkgs=(
"xfce-polkit"
)
local missing_any=0
echo -e "\n--- Official Repositories ---" >&3
check_packages "pacman -Q" "Install official packages by running: sudo pacman -S" "${pkgs[@]}" || missing_any=1
echo -e "\n--- AUR ---" >&3
check_packages "pacman -Q" "Install AUR packages by running: yay -S" "${aur_pkgs[@]}" || missing_any=1
if [[ $missing_any -eq 0 ]]; then
echo -e "\nSUCCESS: All expected packages are installed." >&3
fi
}
gather_ubuntu_info() {
echo -e "\n=======================================" >&3
echo -e " Package Info (Ubuntu/PPA)" >&3
echo -e "=======================================" >&3
# Essential packages required for polkit & related UI
local pkgs=(
"qml-module-qtqml"
"qml-module-qtquick2"
"qml-module-qtquick-controls"
"qml-module-qtquick-controls2"
"qml-module-qtquick-layouts"
"qml6-module-qtqml"
"qml6-module-qtquick"
"qml6-module-qtquick-controls"
"hyprpolkitagent"
"polkit"
)
local extra_pkgs=(
"xfce-polkit"
"polkit-kde-agent-1"
"mate-polkit"
)
local missing_any=0
echo -e "\n--- Official Repositories / PPA ---" >&3
check_packages "dpkg -s" "Install packages by running: sudo apt install" "${pkgs[@]}" || missing_any=1
echo -e "\n--- Extra/Alternative ---" >&3
check_packages "dpkg -s" "Install extra packages by running: sudo apt install" "${extra_pkgs[@]}" || missing_any=1
echo "[INFO] lxqt-polkit (optional) — large dependency set." >&3
if [[ $missing_any -eq 0 ]]; then
echo -e "\nSUCCESS: All expected packages are installed." >&3
fi
}
gather_debian_info() {
echo -e "\n=======================================" >&3
echo -e " Package Info (Debian/Ubuntu)" >&3
echo -e "=======================================" >&3
local source_bins=(
"hyprpolkitagent"
)
local source_found=0
if check_source_binaries "/usr/local/bin" "${source_bins[@]}"; then
source_found=1
fi
# Essential packages required for polkit & related UI
local pkgs=(
"qml-module-qtqml"
"qml-module-qtquick2"
"qml-module-qtquick-controls"
"qml-module-qtquick-controls2"
"qml-module-qtquick-layouts"
"qml6-module-qtqml"
"qml6-module-qtquick"
"qml6-module-qtquick-controls"
"polkit"
)
local extra_pkgs=(
"xfce4-polkit"
"lxqt-policykit"
"polkit-kde-agent-1"
"mate-polkit"
)
local missing_any=0
echo -e "\n--- Official Repositories ---" >&3
if [[ $source_found -eq 0 ]]; then
pkgs+=("hyprpolkitagent")
else
echo "[INFO] hyprpolkitagent found in /usr/local/bin (source build). Skipping dpkg check for it." >&3
fi
check_packages "dpkg -s" "Install packages by running: sudo apt install" "${pkgs[@]}" || missing_any=1
echo -e "\n--- Extra/Alternative ---" >&3
check_packages "dpkg -s" "Install extra packages by running: sudo apt install" "${extra_pkgs[@]}" || missing_any=1
if [[ $missing_any -eq 0 ]]; then
echo -e "\nSUCCESS: All expected packages are installed." >&3
fi
}
gather_fedora_info() {
echo -e "\n=======================================" >&3
echo -e " Package Info (Fedora)" >&3
echo -e "=======================================" >&3
# Essential packages required for polkit & related UI
local pkgs=(
"qt5-qtdeclarative"
"qt5-qtquickcontrols2"
"qt6-qtdeclarative"
"hyprpolkitagent"
"polkit"
)
local extra_pkgs=(
"xfce-polkit"
)
local missing_any=0
echo -e "\n--- Official Repositories ---" >&3
check_packages "rpm -q" "Install packages by running: sudo dnf install" "${pkgs[@]}" || missing_any=1
echo -e "\n--- Extra/Alternative ---" >&3
check_packages "rpm -q" "Install extra packages by running: sudo dnf install" "${extra_pkgs[@]}" || missing_any=1
if [[ $missing_any -eq 0 ]]; then
echo -e "\nSUCCESS: All expected packages are installed." >&3
fi
}
detect_os() {
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
else
OS="unknown"
fi
}
# ----------------------------------------------------------------------------
# Main Execution
# ----------------------------------------------------------------------------
# Parse arguments
while [[ "$#" -gt 0 ]]; do
case "$1" in
-h|--help)
print_help
exit 0
;;
-d|--dry-run)
DRY_RUN=1
;;
--install-override)
INSTALL_OVERRIDE=1
;;
--force-override)
FORCE_OVERRIDE=1
INSTALL_OVERRIDE=1
;;
-o|--output)
if [[ -n "$2" && "$2" != -* ]]; then
OUTFILE="$2"
shift
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
*)
echo "Unknown option: $1" >&2
print_help
exit 1
;;
esac
shift
done
setup_output
echo "Starting Polkit Diagnostic Script..." >&3
# Optional apply override logic
if [[ $INSTALL_OVERRIDE -eq 1 ]]; then
apply_override
fi
# Gather general info
gather_general_info
# Gather OS-specific package info
detect_os
case "$OS" in
arch|artix|manjaro|endeavouros|cachyos)
gather_arch_info
;;
debian)
gather_debian_info
;;
ubuntu|pop|linuxmint)
gather_ubuntu_info
;;
fedora)
gather_fedora_info
;;
opensuse*)
echo -e "\n=======================================" >&3
echo -e " Package Info ($OS)" >&3
echo -e "=======================================" >&3
echo "OpenSUSE package check is pending implementation." >&3
;;
nixos)
echo -e "\n=======================================" >&3
echo -e " Package Info ($OS)" >&3
echo -e "=======================================" >&3
echo "NixOS configuration check is pending implementation." >&3
;;
*)
echo -e "\n=======================================" >&3
echo -e " Package Info" >&3
echo -e "=======================================" >&3
echo "Unknown or unsupported OS: $OS. Skipping package checks." >&3
;;
esac
echo -e "\nDiagnostics completed at $(date)" >&3
if [[ $DRY_RUN -eq 0 ]]; then
echo "================================================="
echo " Diagnostic gathering complete!"
echo " Please review the output file: $OUTFILE"
echo "================================================="
fi

View file

@ -1,6 +1,26 @@
#!/usr/bin/env bash #!/usr/bin/env 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 # KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# For NixOS starting of polkit agents. Prefer xfce4-polkit, fallback to polkit-gnome.
# Find all xfce4-polkit executables in the Nix store
xfce_polkit_paths=$(find /nix/store -name 'xfce4-polkit' -type f 2>/dev/null)
for xfce_polkit_path in $xfce_polkit_paths; do
# Extract the directory containing the executable
xfce_polkit_dir=$(dirname "$xfce_polkit_path")
# Check if the executable is valid and exists
if [ -x "$xfce_polkit_dir/xfce4-polkit" ]; then
# Start the xfce4-polkit Authentication Agent
"$xfce_polkit_dir/xfce4-polkit" &
exit 0
fi
done
# Find all polkit-gnome executables in the Nix store # 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) polkit_gnome_paths=$(find /nix/store -name 'polkit-gnome-authentication-agent-1' -type f 2>/dev/null)
@ -18,4 +38,4 @@ for polkit_gnome_path in $polkit_gnome_paths; do
done done
# If no valid executable is found, report an error # If no valid executable is found, report an error
echo "No valid Polkit-GNOME Authentication Agent executable found." echo "No valid polkit authentication agent executable found."

View file

@ -1,19 +1,55 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# This script starts the first available Polkit agent from a list of possible locations # This script starts the first available Polkit agent from a list of possible locations
# Avoid duplicate agents (common with UWSM/session autostart)
if pgrep -u "$UID" -f 'xfce-polkit|polkit-gnome-authentication-agent-1|polkit-kde-authentication-agent-1|polkit-mate-authentication-agent-1|mate-polkit|hyprpolkitagent' >/dev/null 2>&1; then
echo "Polkit agent already running. Skipping start."
exit 0
fi
# List of potential Polkit agent file paths # Ensure Qt apps default to Wayland in a Wayland session
if [ -n "${WAYLAND_DISPLAY:-}" ] && [ -z "${QT_QPA_PLATFORM:-}" ]; then
export QT_QPA_PLATFORM=wayland
fi
# Avoid KDE polkit agent crashing if Kvantum QML module is missing
if [ -z "${QT_QUICK_CONTROLS_STYLE:-}" ]; then
export QT_QUICK_CONTROLS_STYLE=Basic
fi
# Check if kvantum is specified globally but the QML module is missing
if [[ "${QT_STYLE_OVERRIDE:-}" == "kvantum" ]] || [[ "${QT_STYLE_OVERRIDE:-}" == "kvantum-dark" ]]; then
# Check common Qt5/Qt6 QML directories for the Kvantum module
if ! find /usr/lib /usr/lib64 /usr/share -type d -path "*/qml/*/kvantum" -print -quit 2>/dev/null | grep -q .; then
echo "Kvantum QML module not found. Overriding QT_STYLE_OVERRIDE for Polkit to prevent crash."
export QT_STYLE_OVERRIDE=Fusion
fi
elif [ -z "${QT_STYLE_OVERRIDE:-}" ]; then
export QT_STYLE_OVERRIDE=Fusion
fi
# List of potential Polkit agent file paths (preferred order)
polkit=( polkit=(
"/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
"/usr/libexec/hyprpolkitagent" "/usr/libexec/hyprpolkitagent"
"/usr/lib/hyprpolkitagent" "/usr/lib/hyprpolkitagent"
"/usr/lib/hyprpolkitagent/hyprpolkitagent" "/usr/lib/hyprpolkitagent/hyprpolkitagent"
"/usr/lib/polkit-kde-authentication-agent-1" "/usr/bin/xfce-polkit"
"/usr/lib/xfce4/polkit-agent/xfce-polkit"
"/usr/libexec/xfce-polkit"
"/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1"
"/usr/lib/polkit-gnome-authentication-agent-1" "/usr/lib/polkit-gnome-authentication-agent-1"
"/usr/libexec/polkit-gnome-authentication-agent-1" "/usr/libexec/polkit-gnome-authentication-agent-1"
"/usr/libexec/polkit-mate-authentication-agent-1" "/usr/libexec/polkit-mate-authentication-agent-1"
"/usr/lib/x86_64-linux-gnu/libexec/polkit-kde-authentication-agent-1" "/usr/lib/polkit-mate/polkit-mate-authentication-agent-1"
"/usr/bin/polkit-mate-authentication-agent-1"
"/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1" "/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1"
"/usr/lib/polkit-kde-authentication-agent-1"
"/usr/libexec/polkit-kde-authentication-agent-1"
) )
executed=false executed=false

View file

@ -1,16 +1,45 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# For manually starting xdg-desktop-portal-hyprland # For manually starting xdg-desktop-portal-hyprland
sleep 1 set -euo pipefail
killall xdg-desktop-portal-hyprland
killall xdg-desktop-portal-wlr kill_quietly() {
killall xdg-desktop-portal-gnome killall -q "$1" 2>/dev/null || true
killall xdg-desktop-portal }
sleep 1
/usr/lib/xdg-desktop-portal-hyprland & start_portal_binary() {
/usr/libexec/xdg-desktop-portal-hyprland & local description="$1"
sleep 2 shift
/usr/lib/xdg-desktop-portal & for candidate in "$@"; do
/usr/libexec/xdg-desktop-portal & if [[ -x "$candidate" ]]; then
"$candidate" &
return 0
fi
done
echo "Warning: no $description binary found (checked: $*)" >&2
return 1
}
sleep 1
kill_quietly xdg-desktop-portal-hyprland
kill_quietly xdg-desktop-portal-wlr
kill_quietly xdg-desktop-portal-gnome
kill_quietly xdg-desktop-portal
sleep 1
start_portal_binary "xdg-desktop-portal-hyprland" \
/usr/lib/xdg-desktop-portal-hyprland \
/usr/libexec/xdg-desktop-portal-hyprland
sleep 2
start_portal_binary "xdg-desktop-portal" \
/usr/lib/xdg-desktop-portal \
/usr/libexec/xdg-desktop-portal

View file

@ -0,0 +1,24 @@
#!/usr/bin/env bash
# ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Ubuntu-based workaround: start portals manually before waybar.
set -euo pipefail
if [[ -r /etc/os-release ]]; then
# shellcheck disable=SC1091
. /etc/os-release
if [[ "${ID:-}" == "ubuntu" \
|| "${ID:-}" == "linuxmint" \
|| "${ID:-}" == "zorin" \
|| "${ID:-}" == "rhino" \
|| "${ID_LIKE:-}" == *ubuntu* ]]; then
if [[ -x "$HOME/.config/hypr/scripts/PortalHyprland.sh" ]]; then
"$HOME/.config/hypr/scripts/PortalHyprland.sh"
fi
fi
fi

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Scripts for refreshing ags, waybar, rofi, swaync, wallust # Scripts for refreshing ags, waybar, rofi, swaync, wallust
SCRIPTSDIR=$HOME/.config/hypr/scripts SCRIPTSDIR=$HOME/.config/hypr/scripts
@ -14,18 +19,17 @@ file_exists() {
fi fi
} }
# Kill already running processes # Kill already running processes (exclude waybar to avoid double reloads)
_ps=(waybar rofi swaync ags) _ps=(rofi swaync ags)
for _prs in "${_ps[@]}"; do for _prs in "${_ps[@]}"; do
if pidof "${_prs}" >/dev/null; then if pidof "${_prs}" >/dev/null; then
pkill "${_prs}" pkill "${_prs}"
fi fi
done done
# added since wallust sometimes not applying # Clean up any Waybar-spawned cava instances (unique temp conf names)
killall -SIGUSR2 waybar pkill -f 'waybar-cava\..*\.conf' 2>/dev/null || true
# Added sleep for GameMode causing multiple waybar
sleep 0.1
# quit ags & relaunch ags # quit ags & relaunch ags
#ags -q && ags & #ags -q && ags &
@ -33,15 +37,22 @@ sleep 0.1
# quit quickshell & relaunch quickshell # quit quickshell & relaunch quickshell
#pkill qs && qs & #pkill qs && qs &
# some process to kill # some process to kill (exclude waybar to avoid restart loops)
for pid in $(pidof waybar rofi swaync ags swaybg); do for pid in $(pidof rofi swaync ags swaybg); do
kill -SIGUSR1 "$pid" kill -SIGUSR1 "$pid"
sleep 0.1 sleep 0.1
done done
#Restart waybar # Reload or start waybar once
sleep 0.1 if pidof waybar >/dev/null; then
waybar & if command -v waybar-msg >/dev/null 2>&1; then
waybar-msg cmd reload >/dev/null 2>&1 || true
else
killall -SIGUSR2 waybar 2>/dev/null || true
fi
else
waybar &
fi
# relaunch swaync # relaunch swaync
sleep 0.3 sleep 0.3

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Modified version of Refresh.sh but waybar wont refresh # Modified version of Refresh.sh but waybar wont refresh
# Used by automatic wallpaper change # Used by automatic wallpaper change
@ -31,9 +36,6 @@ done
# quit quickshell & relaunch quickshell # quit quickshell & relaunch quickshell
#pkill qs && qs & #pkill qs && qs &
# Wallust refresh (synchronous to ensure colors are ready)
${SCRIPTSDIR}/WallustSwww.sh
sleep 0.2
# reload swaync # reload swaync
swaync-client --reload-config swaync-client --reload-config

View file

@ -1,5 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# Variables # Variables
rofi_theme="$HOME/.config/rofi/config-emoji.rasi" rofi_theme="$HOME/.config/rofi/config-emoji.rasi"

View file

@ -1,9 +1,18 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ## # ==================================================
# KoolDots (2026)
# Project URL: https://github.com/LinuxBeginnings
# License: GNU GPLv3
# SPDX-License-Identifier: GPL-3.0-or-later
# ==================================================
# For Searching via web browsers # For Searching via web browsers
# Define the path to the config file # Define the path to the config file
config_file=$HOME/.config/hypr/UserConfigs/01-UserDefaults.conf config_file=$HOME/.config/hypr/UserConfigs/01-UserDefaults.conf
if ! command -v jq >/dev/null 2>&1; then
notify-send -u low "Rofi Search" "jq is required for URL encoding. Please install jq."
exit 1
fi
# Check if the config file exists # Check if the config file exists
if [[ ! -f "$config_file" ]]; then if [[ ! -f "$config_file" ]]; then
@ -32,5 +41,12 @@ if pgrep -x "rofi" >/dev/null; then
pkill rofi pkill rofi
fi fi
# Open Rofi and pass the selected query to xdg-open for Google search # Open Rofi and pass the selected query to xdg-open for the configured search engine
echo "" | rofi -dmenu -config "$rofi_theme" -mesg "$msg" | xargs -I{} xdg-open $Search_Engine query=$(printf '' | rofi -dmenu -config "$rofi_theme" -mesg "$msg")
if [[ -z "$query" ]]; then
exit 0
fi
encoded_query=$(printf '%s' "$query" | jq -sRr @uri)
xdg-open "${Search_Engine}${encoded_query}" >/dev/null 2>&1 &

Some files were not shown because too many files have changed in this diff Show more