moved hypr scripts

This commit is contained in:
djaidjai committed 2026-10-02 02:06:46 +02:00
1 parent 37fb63549e
commit f338147907
22 files changed
+610 -5

No files matched your search

+1 -4
View File
@@ -37,8 +37,5 @@ in
] ++ map (name: { match.tag = "shader/${name}"; "darkwindow:shade" = "${name}";}) shaders; ] ++ map (name: { match.tag = "shader/${name}"; "darkwindow:shade" = "${name}";}) shaders;
}; };
home-manager.users."djai".home.file.".config/hypr/windowShaders".source = ./windowShaders;
# TODO: symlink ./windowShaders into ~/.config/hypr/
# TODO: symlink ./shaders into ~/.config/hypr/ <- should happen in desktop/hypr.nix prolly
} }
+2 -1
View File
@@ -65,7 +65,8 @@ in
}; };
}; };
# TODO: symlink entire shellscript directory here. home-manager.users."djai".home.file.".config/hypr/scripts".source = ./scripts;
home-manager.users."djai".home.file.".config/hypr/shaders".source = ./shaders;
home-manager.users."djai".wayland.windowManager.hyprland = { home-manager.users."djai".wayland.windowManager.hyprland = {
enable = true; enable = true;
+66
View File
@@ -0,0 +1,66 @@
#!/usr/bin/env fish
# This script randomly switches the background (through fehbg) every 5 to 30 minutes.
# It selects a random image from the ~/Pictures/Wallpapers folder (including subdirectories)
# Any hidden files in this folder are excluded.
# in-place awk script
set awkcommand '
BEGIN {
FS=", "
width=1920
height=1080
}
NR == 1 {
x = $1
y = $2
if (x < 0) {
x = width + x
}
if (y < 0) {
y = height + y
}
print x "," y
}
'
# kill old instances
for i in (ps -C (basename (status filename)) | awk 'FNR>1 {print $1}')
if test $i -ne $fish_pid
kill $i
end
end
# set bg
swaybg -i $(find ~/Pictures/wallpapers -type f -regextype posix-extended -iregex "/(.*/)*[^\.]*\.(png|jpe?g|webp|gif)" | sort -R | head -n1)
while true
set rand (math "(floor $(random 300 1800) / 60) * 60")
# countdown
while test $rand -gt 0
set minutes (math "floor $rand / 60 ")
printf '\r\033[K%.2d:00' $minutes
sleep 60
set rand (math $rand - 60 )
end
# update wallpaper
swaybg -i $(find ~/Pictures/wallpapers -type f -regextype posix-extended -iregex "/(.*/)*[^\.]*\.(png|jpe?g|webp|gif)" | sort -R | head -n1)
set newpid $last_pid
sleep 0.2
for pid in (pgrep -x swaybg)
if test $pid -ne $last_pid
kill $pid
end
end
end
+15
View File
@@ -0,0 +1,15 @@
#!/usr/bin/env sh
HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}')
GAMING_PROFILE="GAMEINK"
if [ "$HYPRGAMEMODE" = "true" ] ; then
hyprctl eval 'hl.config({ animations = { enabled = false }, decoration = { blur = { enabled = false}, rounding = 0, shadow = { enabled = false }, fullscreen_opacity = 1}, general = { border_size = 1, gaps_in = 0, gaps_out = 0}})'
tailor profile set "$GAMING_PROFILE"
dunstify -r 55421 -t 2000 -u low -i ~/.icons/candy-icons/apps/scalable/teamspeak.svg "Gamemode on"
exit
else
dunstify -r 55421 -t 2000 -u low -i ~/.icons/candy-icons/apps/scalable/teamspeak.svg "Gamemode off"
hyprctl reload
exit 0
fi
+25
View File
@@ -0,0 +1,25 @@
#!/usr/bin/env bash
# Toggles the GAMING_PROFILE tuxedo power profile
GAMEMODE=$(tailor profile list | grep active | cut --fields 1 -d' ')
GAMING_PROFILE="GAMEINK"
DEFAULT_PROFILE="HOTHOTHOT"
function failure() {
dunstify -r 55422 -t 4000 -u normal -i ~/.icons/candy-icons/apps/scalable/teamspeak.svg "Failed to toggle power profile!"
exit 1
}
if [[ "$GAMEMODE" =~ "GAMEINK" ]] ; then
# Default profile
tailor profile set "$DEFAULT_PROFILE" || failure
dunstify -r 55422 -t 2000 -u low -i ~/.icons/candy-icons/apps/scalable/teamspeak.svg "Gaming power profile deactivated"
exit 0
else
# gaming profile
tailor profile set "$GAMING_PROFILE" || failure
dunstify -r 55422 -t 2000 -u low -i ~/.icons/candy-icons/apps/scalable/teamspeak.svg "Gaming power profile activated"
hyprctl reload
exit 0
fi
+75
View File
@@ -0,0 +1,75 @@
#!/usr/bin/env bash
# This script visualizes all keybindings in the hyprland config.
# It also executes the associated command, if a keybinding is selected.
# It uses an Awk script, column -t, and rofi-dmenu to do so.
# Furthermore, rofi-dmenu expects the file ~/.config/rofi/keybinds.rasi to exist for theming.
# Awk script used for parsing `hyprctl binds`
# Basically:
# $1 contains submap; if empty replace with Default; also replaces shutdown mode.
# $2 contains modmap; parsed and replaced with human-readable modifiers
# $3 contains key
# $4 contains description
awkcommand='
BEGIN {
FS="\t"
}
{
# submap
if ($1 == "") {
submap = "Default"
} else {
submap = $1
if (submap == "l e s h r ^s") {
submap = "Shutdown"
}
}
# modmap parse
modmap = $2
mods = "1"
if (modmap >= 64) {
mods = gensub(/1/, " 1", 1, mods)
modmap = modmap - 64
}
if (modmap >= 8) {
mods = gensub(/1/, "Alt 1", 1, mods)
modmap = modmap - 8
}
if (modmap >= 4) {
mods = gensub(/1/, "Ctrl 1", 1, mods)
modmap = modmap - 4
}
if (modmap >= 1) {
mods = gensub(/1/, "Shift 1", 1, mods)
modmap = modmap - 1
}
mods = gensub(/1/, "", 1, mods)
# output
printf "%s,%s%s,%s\n", submap, mods, $3, $4
}
'
# get binds
binds=$(hyprctl binds -j | jq -r '.[] | select(.description != "") | [.submap, .modmask, .key, .description, .dispatcher, .arg] | @tsv')
idx=$(printf "%s" "$binds" | awk -F'\t' "$awkcommand" | column -ts',' | rofi -i -dmenu -p "Keybinds" -config ~/.config/rofi/keybinds.rasi -format d)
exit
# This is permanently borked i think.
# Since hyprland0.55 (the lua update), hyprctl binds no longer provides the actual command
# Instead, a pointer to a lua fragment is printed instead, which we can't do anything with.
# exit if user does not make a selection.
if [[ $idx -eq 0 ]]; then
printf "No command selected.\nExiting..\n"
exit
fi
# get line
cmdline=$(printf "%s" "$binds" | awk -F'\t' "NR == $idx {printf \"%s %s\", \$5, \$6}")
# run hyprctl dispatch $5 $6 (< 5,6 of line not shell script)
hyprctl eval $cmdline
+25
View File
@@ -0,0 +1,25 @@
#!/usr/bin/env bash
# This script allows the user to make a screenshot (through slurp)
# and will then open said screenshot from the clipboard into feh
# it will also make the feh window floating, and move it to the original position of the selection
slop=$(slurp -f "%x,%y %wx%h" || exit 1)
# If the capture was cancelled, out will be empty
if [[ -n "$slop" ]]; then
# get x,y of selection
coords=$(echo "$slop" | awk -F' ' '{print $1}')
x=$(echo "$coords" | awk -F',' '{print $1}')
y=$(echo "$coords" | awk -F',' '{print $2}')
grim -g "$slop" - | wl-copy
grim -g "$slop" - | feh - -T notitle --class 'floatme' &
pid="$!"
while [[ -z $(wmctrl -lp | awk -vpid=$pid '$3==pid {print $1; exit}') ]]; do
sleep 0.05
done
hyprctl dispatch "hl.dsp.window.move({ x = \"$x\", y = \"$y\", relative = false})"
fi
+43
View File
@@ -0,0 +1,43 @@
#!/usr/bin/env bash
# This script allows toggling the active screen_shader used in hyprland.
# It automatically discovers shader files in the $SHADERDIR folder.
# And uses rofi for a graphical gui-- this uses the shaders.rasi configuration file.
# (Also dunst for notifications.)
SHADERDIR="$HOME/.config/hypr/shaders/"
function dunst() {
dunstify \
-r 2137 \
-t 2000 \
-u low \
-i ~/.icons/candy-icons/apps/scalable/applets-screenshooter.svg \
"${1/.*/}"
}
shaders="reset,
$(find "$SHADERDIR" -type f -regextype posix-extended -iregex '.*(frag|vert|glsl)$' | awk -F'[./]' '{printf "%s,%s.%s\n", $(NF-1), $(NF-1), $NF}')"
idx=$(printf "%s" "$shaders" | awk -F',' '{print $1}' | rofi -i -dmenu -P Shaders -config ~/.config/rofi/shaders.rasi -format d)
# apply selected shader (if any)
if [[ $idx -eq 0 ]]; then
printf "No shader selected.\nExiting..\n"
exit
fi
if [[ $idx -eq 1 ]]; then
# selected reset, which is a special case
hyprctl reload
dunst "Reset shader"
exit
fi
file=$(printf "%s" "$shaders" | awk -F',' "NR == $idx {printf \"%s\n\", \$2}")
hyprctl dispatch "hl.config({ decoration = { screen_shader = '$SHADERDIR/$file'}})"
dunst "Applied shader $file"
+44
View File
@@ -0,0 +1,44 @@
#!/usr/bin/env bash
# This script allows toggling the active screen_shader used in hyprland.
# It automatically discovers shader files in the $SHADERDIR folder.
# And uses rofi for a graphical gui-- this uses the shaders.rasi configuration file.
# (Also dunst for notifications.)
SHADERDIR="$HOME/.config/hypr/windowShaders/"
function dunst() {
dunstify \
-r 2137 \
-t 2000 \
-u low \
-i ~/.icons/candy-icons/apps/scalable/applets-screenshooter.svg \
"${1/.*/}"
}
shaders="reset,
$(find "$SHADERDIR" -type f,l -regextype posix-extended -iregex '.*(frag|vert|glsl)$' | awk -F'[./]' '{printf "%s,%s.%s\n", $(NF-1), $(NF-1), $NF}')"
idx=$(printf "%s" "$shaders" | awk -F',' '{print $1}' | rofi -i -dmenu -P Shaders -config ~/.config/rofi/shaders.rasi -format d)
# apply selected shader (if any)
if [[ $idx -eq 0 ]]; then
printf "No shader selected.\nExiting..\n"
exit
fi
if [[ $idx -eq 1 ]]; then
# selected reset, which is a special case
hyprctl dispatch 'hl.dsp.window.clear_tags()'
hyprctl reload
dunst "Reset shader"
exit
fi
name=$(printf "%s" "$shaders" | awk -F',' "NR == $idx {printf \"%s\n\", \$1}")
hyprctl dispatch "hl.dsp.window.tag({ tag = 'shader/$name'})"
dunst "Applied shader $file"
+14
View File
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
# toggles focus between floating and tiled windows.
# get floating state of active window
floating=$(hyprctl activewindow -j | jq ".floating")
if [ "$floating" = "true" ]; then
# focus tiled
hyprctl dispatch "hl.dsp.window.cycle_next({ tiled = true })"
else
# focus floating
hyprctl dispatch "hl.dsp.window.cycle_next({ floating = true })"
fi
+28
View File
@@ -0,0 +1,28 @@
#!/usr/bin/env bash
touchpad="uniw0001:00-093a:0255-touchpad"
statFile="/tmp/tpEnabled"
if [ ! -f "$statFile" ]; then
echo "false" > "$statFile"
fi
current=$(cat "$statFile")
if [[ "$current" = "true" ]]; then
newState="false"
msg="disabled"
else
newState="true"
msg="enabled"
fi
hyprctl eval "hl.device({ name = \"$touchpad\", enabled = $newState})"
echo "$newState" > "$statFile"
dunstify -u low \
-a Touchpad \
-i ~/.icons/candy-icons/apps/scalable/cs-desktop.svg \
-r 365 \
-t 1000 \
"Touchpad $msg"
+16
View File
@@ -0,0 +1,16 @@
#!/usr/bin/env nix-shell
#! nix-shell -i bash --packages killall envsubst waybar
#kill old instance
kill $(ps aux | grep '[w]aybar -c /tmp/waybar-config' | awk -F' ' '{print $2}')
while pgrep -u $UID -x waybar > /dev/null; do
sleep 1;
killall -q waybar
kill $(ps aux | grep '[w]aybar -c /tmp/waybar-config' | awk -F' ' '{print $2}')
done
IFS=$'\t\n'
MONITOR=$(hyprctl monitors -j | jq -r '.[] | select(.x==0 and .y==0) | .name') envsubst < ~/.config/waybar/config > /tmp/waybar-config
unset IFS
waybar -c /tmp/waybar-config &
+66
View File
@@ -0,0 +1,66 @@
//modified version of [this shader](https://github.com/wessles/GLSL-CRT/blob/master/shader.frag)
#version 300 es
precision mediump float;
in vec2 v_texcoord;
uniform sampler2D tex;
out vec4 FragColor;
const vec3 VIB_RGB_BALANCE = vec3(1.0, 1.0, 1.0);
const float VIB_VIBRANCE = 0.40;
const vec3 VIB_coeffVibrance = VIB_RGB_BALANCE * -VIB_VIBRANCE;
void main() {
vec2 tc = vec2(v_texcoord.x, v_texcoord.y);
// Distance from the center
float dx = abs(0.5-tc.x);
float dy = abs(0.5-tc.y);
// Square it to smooth the edges
dx *= dx;
dy *= dy;
tc.x -= 0.5;
tc.x *= 1.0 + (dy * 0.05);
tc.x += 0.5;
tc.y -= 0.5;
tc.y *= 1.0 + (dx * 0.18);
tc.y += 0.5;
// Get texel, and add in scanline if need be
vec4 cta = texture(tex, vec2(tc.x, tc.y));
cta.rgb += sin(tc.y * 1250.0) * 0.02;
// Cutoff
if(tc.y > 1.0 || tc.x < 0.0 || tc.x > 1.0 || tc.y < 0.0)
cta = vec4(0.0);
// RGB
vec3 color = vec3(cta[0], cta[1], cta[2]);
// vec3 VIB_coefLuma = vec3(0.333333, 0.333334, 0.333333); // was for `if VIB_LUMA == 1`
vec3 VIB_coefLuma = vec3(0.212656, 0.715158, 0.072186); // try both and see which one looks nicer.
float luma = dot(VIB_coefLuma, color);
float max_color = max(color[0], max(color[1], color[2]));
float min_color = min(color[0], min(color[1], color[2]));
float color_saturation = max_color - min_color;
vec3 p_col = vec3(vec3(vec3(vec3(sign(VIB_coeffVibrance) * color_saturation) - 1.0) * VIB_coeffVibrance) + 1.0);
cta[0] = mix(luma, color[0], p_col[0]);
cta[1] = mix(luma, color[1], p_col[1]);
cta[2] = mix(luma, color[2], p_col[2]);
// Apply
FragColor = cta;
}
+22
View File
@@ -0,0 +1,22 @@
// blue light filter shader
// values from https://reshade.me/forum/shader-discussion/3673-blue-light-filter-similar-to-f-lux
#version 300 es
precision mediump float;
in vec2 v_texcoord;
uniform sampler2D tex;
out vec4 FragColor;
void main() {
vec4 pixColor = texture(tex, v_texcoord);
// red
pixColor[0] *= 0.7;
// green
pixColor[1] *= 0.6;
// blue
pixColor[2] *= 0.5;
FragColor = pixColor;
}
+18
View File
@@ -0,0 +1,18 @@
#version 300 es
precision mediump float;
in vec2 v_texcoord;
uniform sampler2D tex;
out vec4 FragColor;
// Values obtained from: http://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
vec3 LumaFactors = vec3(0.299, 0.587, 0.114);
void main() {
vec4 c = texture(tex, v_texcoord);
// Desaturate to luma only
float luma = dot(vec3(c.r, c.g, c.b), LumaFactors);
FragColor = vec4(luma, luma, luma, c.a);
}
+31
View File
@@ -0,0 +1,31 @@
#version 300 es
precision mediump float;
in vec2 v_texcoord;
uniform sampler2D tex;
out vec4 FragColor;
uniform mediump float time;
const float display_framerate = 60.0;
const vec2 display_resolution = vec2(2520.0, 1680.0);
const float gamma = 1.0;
float rand(vec2 uv, float t) {
return fract(sin(dot(uv, vec2(1225.6548, 321.8942))) * 4251.4865 + t);
}
float Sigmoid(float x) { return 1.0 / (1.0 + (exp(-(x - 0.5) * 14.0))); }
void main() {
vec4 color = texture(tex, v_texcoord);
color = vec4(Sigmoid(color.r), Sigmoid(color.g), Sigmoid(color.b), 1.0);
color = pow(color, vec4(gamma));
color.a = 1.0;
FragColor = color;
}
+11
View File
@@ -0,0 +1,11 @@
#version 300 es
precision mediump float;
in vec2 v_texcoord;
uniform sampler2D tex;
out vec4 FragColor;
void main() {
vec4 pixColor = texture(tex, v_texcoord);
pixColor.rgb = 1.0 - pixColor.rgb;
FragColor = pixColor;
}
+23
View File
@@ -0,0 +1,23 @@
#version 300 es
precision mediump float;
in vec2 v_texcoord;
uniform sampler2D tex;
out vec4 FragColor;
// Values obtained from: http://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
vec3 LumaFactors = vec3(0.299, 0.587, 0.114);
void main() {
vec4 c = texture(tex, v_texcoord);
// average brightness
float luma = dot(vec3(c.r, c.g, c.b), LumaFactors);
if (c.r < c.g) {
FragColor = vec4(luma, c.g, luma, c.a);
} else {
FragColor = vec4(c.r, luma, luma, c.a);
}
// FragColor = vec4(c.r, c.g, luma, c.a);
}
+23
View File
@@ -0,0 +1,23 @@
#version 300 es
precision mediump float;
in vec2 v_texcoord;
uniform sampler2D tex;
out vec4 FragColor;
// Values obtained from: http://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
vec3 LumaFactors = vec3(0.299, 0.587, 0.114);
void main() {
vec4 c = texture(tex, v_texcoord);
// average brightness
float luma = dot(vec3(c.r, c.g, c.b), LumaFactors);
if (c.r < c.b) {
FragColor = vec4(luma, luma, c.b, c.a);
} else {
FragColor = vec4(c.r, luma, luma, c.a);
}
// FragColor = vec4(c.r, luma, c.b, c.a);
}
+23
View File
@@ -0,0 +1,23 @@
#version 300 es
precision mediump float;
in vec2 v_texcoord;
uniform sampler2D tex;
out vec4 FragColor;
// Values obtained from: http://en.wikipedia.org/wiki/Grayscale#Luma_coding_in_video_systems
vec3 LumaFactors = vec3(0.299, 0.587, 0.114);
void main() {
vec4 c = texture(tex, v_texcoord);
// average brightness
float luma = dot(vec3(c.r, c.g, c.b), LumaFactors);
if (c.g < c.b) {
FragColor = vec4(luma, luma, c.b, c.a);
} else {
FragColor = vec4(luma, c.g, luma, c.a);
}
// FragColor = vec4(luma, c.g, c.b, c.a);
}
+25
View File
@@ -0,0 +1,25 @@
//modified version of [this shader](https://github.com/wessles/GLSL-CRT/blob/master/shader.frag)
#version 300 es
precision mediump float;
in vec2 v_texcoord;
uniform sampler2D tex;
out vec4 FragColor;
const float scaleFactor = 0.7;
float clamp(float x, float min, float max) {
if (x > max) return max;
if (x < min) return min;
return x;
}
// [0,1]
void main() {
vec4 cta = texture(tex, v_texcoord);
// cta += vec4(cos(v_texcoord.x)/4., sin(v_texcoord.y)/4., 0., 1.);
cta += vec4(cos(v_texcoord.x)/4., cos(v_texcoord.y)/8., sin(v_texcoord.y)/4., 1.);
FragColor = vec4(clamp(cta.x, 0., 1.), clamp(cta.y, 0., 1.), clamp(cta.z, 0., 1.), clamp(cta.w, 0., 1.));
}
+14
View File
@@ -0,0 +1,14 @@
//modified version of [this shader](https://github.com/wessles/GLSL-CRT/blob/master/shader.frag)
#version 300 es
precision mediump float;
in vec2 v_texcoord;
uniform sampler2D tex;
out vec4 FragColor;
// [0,1]
void main() {
vec4 cta = texture(tex, v_texcoord);
FragColor = vec4(cta.z, cta.y, cta.x, cta.a);
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.