From f338147907df185da0b978b91b0cc6bb84bdda30 Mon Sep 17 00:00:00 2001 From: djairoh Date: Fri, 2 Oct 2026 02:06:46 +0200 Subject: [PATCH] moved hypr scripts --- modules/desktop/hypr-plugins.nix | 5 +- modules/desktop/hypr.nix | 3 +- modules/desktop/scripts/bg.fish | 66 ++++++++++++++++ modules/desktop/scripts/gamemode_hypr.sh | 15 ++++ modules/desktop/scripts/gamemode_power.sh | 25 +++++++ modules/desktop/scripts/keybinds.sh | 75 +++++++++++++++++++ modules/desktop/scripts/screenshot_float.sh | 25 +++++++ modules/desktop/scripts/shader_picker.sh | 43 +++++++++++ .../desktop/scripts/shader_picker_window.sh | 44 +++++++++++ .../desktop/scripts/toggle_focus_floating.sh | 14 ++++ modules/desktop/scripts/toggle_touchpad.sh | 28 +++++++ modules/desktop/scripts/waybar.sh | 16 ++++ modules/desktop/shaders/crt.frag | 66 ++++++++++++++++ modules/desktop/shaders/dim.frag | 22 ++++++ modules/desktop/shaders/grey.frag | 18 +++++ modules/desktop/shaders/horror.frag | 31 ++++++++ modules/desktop/shaders/invert.frag | 11 +++ modules/desktop/shaders/noblue.frag | 23 ++++++ modules/desktop/shaders/nogreen.frag | 23 ++++++ modules/desktop/shaders/nored.frag | 23 ++++++ modules/desktop/shaders/rainbow.frag | 25 +++++++ modules/desktop/shaders/rbinvert.frag | 14 ++++ 22 files changed, 610 insertions(+), 5 deletions(-) create mode 100755 modules/desktop/scripts/bg.fish create mode 100755 modules/desktop/scripts/gamemode_hypr.sh create mode 100755 modules/desktop/scripts/gamemode_power.sh create mode 100755 modules/desktop/scripts/keybinds.sh create mode 100755 modules/desktop/scripts/screenshot_float.sh create mode 100755 modules/desktop/scripts/shader_picker.sh create mode 100755 modules/desktop/scripts/shader_picker_window.sh create mode 100755 modules/desktop/scripts/toggle_focus_floating.sh create mode 100755 modules/desktop/scripts/toggle_touchpad.sh create mode 100755 modules/desktop/scripts/waybar.sh create mode 100644 modules/desktop/shaders/crt.frag create mode 100644 modules/desktop/shaders/dim.frag create mode 100644 modules/desktop/shaders/grey.frag create mode 100644 modules/desktop/shaders/horror.frag create mode 100644 modules/desktop/shaders/invert.frag create mode 100644 modules/desktop/shaders/noblue.frag create mode 100644 modules/desktop/shaders/nogreen.frag create mode 100644 modules/desktop/shaders/nored.frag create mode 100644 modules/desktop/shaders/rainbow.frag create mode 100644 modules/desktop/shaders/rbinvert.frag diff --git a/modules/desktop/hypr-plugins.nix b/modules/desktop/hypr-plugins.nix index dec56a8..3d45e7a 100644 --- a/modules/desktop/hypr-plugins.nix +++ b/modules/desktop/hypr-plugins.nix @@ -37,8 +37,5 @@ in ] ++ map (name: { match.tag = "shader/${name}"; "darkwindow:shade" = "${name}";}) shaders; }; - - - # TODO: symlink ./windowShaders into ~/.config/hypr/ - # TODO: symlink ./shaders into ~/.config/hypr/ <- should happen in desktop/hypr.nix prolly + home-manager.users."djai".home.file.".config/hypr/windowShaders".source = ./windowShaders; } diff --git a/modules/desktop/hypr.nix b/modules/desktop/hypr.nix index cb39122..14a1c60 100644 --- a/modules/desktop/hypr.nix +++ b/modules/desktop/hypr.nix @@ -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 = { enable = true; diff --git a/modules/desktop/scripts/bg.fish b/modules/desktop/scripts/bg.fish new file mode 100755 index 0000000..e3d8884 --- /dev/null +++ b/modules/desktop/scripts/bg.fish @@ -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 + + diff --git a/modules/desktop/scripts/gamemode_hypr.sh b/modules/desktop/scripts/gamemode_hypr.sh new file mode 100755 index 0000000..0158a5a --- /dev/null +++ b/modules/desktop/scripts/gamemode_hypr.sh @@ -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 diff --git a/modules/desktop/scripts/gamemode_power.sh b/modules/desktop/scripts/gamemode_power.sh new file mode 100755 index 0000000..a9e9861 --- /dev/null +++ b/modules/desktop/scripts/gamemode_power.sh @@ -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 diff --git a/modules/desktop/scripts/keybinds.sh b/modules/desktop/scripts/keybinds.sh new file mode 100755 index 0000000..a124243 --- /dev/null +++ b/modules/desktop/scripts/keybinds.sh @@ -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 diff --git a/modules/desktop/scripts/screenshot_float.sh b/modules/desktop/scripts/screenshot_float.sh new file mode 100755 index 0000000..77ed561 --- /dev/null +++ b/modules/desktop/scripts/screenshot_float.sh @@ -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 + diff --git a/modules/desktop/scripts/shader_picker.sh b/modules/desktop/scripts/shader_picker.sh new file mode 100755 index 0000000..171825d --- /dev/null +++ b/modules/desktop/scripts/shader_picker.sh @@ -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" + diff --git a/modules/desktop/scripts/shader_picker_window.sh b/modules/desktop/scripts/shader_picker_window.sh new file mode 100755 index 0000000..19dee9b --- /dev/null +++ b/modules/desktop/scripts/shader_picker_window.sh @@ -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" + diff --git a/modules/desktop/scripts/toggle_focus_floating.sh b/modules/desktop/scripts/toggle_focus_floating.sh new file mode 100755 index 0000000..80877c3 --- /dev/null +++ b/modules/desktop/scripts/toggle_focus_floating.sh @@ -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 diff --git a/modules/desktop/scripts/toggle_touchpad.sh b/modules/desktop/scripts/toggle_touchpad.sh new file mode 100755 index 0000000..eeed94e --- /dev/null +++ b/modules/desktop/scripts/toggle_touchpad.sh @@ -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" diff --git a/modules/desktop/scripts/waybar.sh b/modules/desktop/scripts/waybar.sh new file mode 100755 index 0000000..1b177fa --- /dev/null +++ b/modules/desktop/scripts/waybar.sh @@ -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 & diff --git a/modules/desktop/shaders/crt.frag b/modules/desktop/shaders/crt.frag new file mode 100644 index 0000000..853bce2 --- /dev/null +++ b/modules/desktop/shaders/crt.frag @@ -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; +} diff --git a/modules/desktop/shaders/dim.frag b/modules/desktop/shaders/dim.frag new file mode 100644 index 0000000..d561c73 --- /dev/null +++ b/modules/desktop/shaders/dim.frag @@ -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; +} diff --git a/modules/desktop/shaders/grey.frag b/modules/desktop/shaders/grey.frag new file mode 100644 index 0000000..a088715 --- /dev/null +++ b/modules/desktop/shaders/grey.frag @@ -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); +} diff --git a/modules/desktop/shaders/horror.frag b/modules/desktop/shaders/horror.frag new file mode 100644 index 0000000..d8e0c70 --- /dev/null +++ b/modules/desktop/shaders/horror.frag @@ -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; +} diff --git a/modules/desktop/shaders/invert.frag b/modules/desktop/shaders/invert.frag new file mode 100644 index 0000000..e6e6e84 --- /dev/null +++ b/modules/desktop/shaders/invert.frag @@ -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; +} diff --git a/modules/desktop/shaders/noblue.frag b/modules/desktop/shaders/noblue.frag new file mode 100644 index 0000000..adaf1bf --- /dev/null +++ b/modules/desktop/shaders/noblue.frag @@ -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); +} diff --git a/modules/desktop/shaders/nogreen.frag b/modules/desktop/shaders/nogreen.frag new file mode 100644 index 0000000..83b9b22 --- /dev/null +++ b/modules/desktop/shaders/nogreen.frag @@ -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); +} diff --git a/modules/desktop/shaders/nored.frag b/modules/desktop/shaders/nored.frag new file mode 100644 index 0000000..9bc96fb --- /dev/null +++ b/modules/desktop/shaders/nored.frag @@ -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); +} diff --git a/modules/desktop/shaders/rainbow.frag b/modules/desktop/shaders/rainbow.frag new file mode 100644 index 0000000..3439f9f --- /dev/null +++ b/modules/desktop/shaders/rainbow.frag @@ -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.)); +} diff --git a/modules/desktop/shaders/rbinvert.frag b/modules/desktop/shaders/rbinvert.frag new file mode 100644 index 0000000..7d928f6 --- /dev/null +++ b/modules/desktop/shaders/rbinvert.frag @@ -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); +}