From c2c54ed574d00d96a772e096abdfa2da3b60fdd6 Mon Sep 17 00:00:00 2001
From: Yigit Sever
Date: Fri, 30 Aug 2024 11:06:19 +0200
Subject: hypr: start tracking

---
 .config/hypr/conf/autostart.conf                   |  39 ++
 .config/hypr/conf/keybinds.conf                    |  94 ++++
 .config/hypr/conf/monitor.conf                     |   5 +
 .../hypr/conf/sound_brightness_notifications.conf  |   9 +
 .config/hypr/conf/windowrules.conf                 |  67 +++
 .config/hypr/hyprland.conf                         | 122 +++++
 .config/hypr/hyprlock.conf                         |  88 ++++
 .config/hypr/hyprpaper.conf                        |   5 +
 .config/hypr/hyprshade.toml                        |   4 +
 .config/hypr/mocha.conf                            |  77 ++++
 .config/hypr/shaders/chromatic_abberation.frag     |  24 +
 .config/hypr/shaders/crt.frag                      | 511 +++++++++++++++++++++
 .config/hypr/shaders/drugs.frag                    |  42 ++
 .config/hypr/shaders/extradark.frag                |  21 +
 .config/hypr/shaders/invert.frag                   |  13 +
 .config/hypr/shaders/solarized.frag                |  41 ++
 16 files changed, 1162 insertions(+)
 create mode 100644 .config/hypr/conf/autostart.conf
 create mode 100644 .config/hypr/conf/keybinds.conf
 create mode 100644 .config/hypr/conf/monitor.conf
 create mode 100644 .config/hypr/conf/sound_brightness_notifications.conf
 create mode 100644 .config/hypr/conf/windowrules.conf
 create mode 100644 .config/hypr/hyprland.conf
 create mode 100644 .config/hypr/hyprlock.conf
 create mode 100644 .config/hypr/hyprpaper.conf
 create mode 100644 .config/hypr/hyprshade.toml
 create mode 100644 .config/hypr/mocha.conf
 create mode 100644 .config/hypr/shaders/chromatic_abberation.frag
 create mode 100644 .config/hypr/shaders/crt.frag
 create mode 100644 .config/hypr/shaders/drugs.frag
 create mode 100644 .config/hypr/shaders/extradark.frag
 create mode 100644 .config/hypr/shaders/invert.frag
 create mode 100644 .config/hypr/shaders/solarized.frag

diff --git a/.config/hypr/conf/autostart.conf b/.config/hypr/conf/autostart.conf
new file mode 100644
index 0000000..b8792f1
--- /dev/null
+++ b/.config/hypr/conf/autostart.conf
@@ -0,0 +1,39 @@
+# See https://wiki.hyprland.org/Configuring/Keywords/#executing
+# autostart
+
+# Setup XDG for screen sharing
+exec-once = ~/.local/bin/xdg.sh
+
+# Polkit
+exec-once = /usr/lib/polkit-kde-authentication-agent-1
+
+# Sway Notification Center
+exec-once = swaync
+
+# Polybar
+exec-once = waybar
+
+# Dropbox
+exec-once = nextcloud --background
+
+# Clipboard Manager
+exec-once = copyq --start-server
+
+# Wallpaper
+exec-once = hyprpaper
+
+# Daily Reminders
+exec-once = remind -z -k'notify-send --app-name="remind" --icon="fcitx-remind-active" "⏰ reminder!" "%s" &' ~/.reminders
+
+# Start playerctl daemon, spotify/youtube etc. binder
+exec-once = playerctld daemon
+
+# For hyprshade scheduling, f.lux
+exec-once = dbus-update-activation-environment --systemd HYPRLAND_INSTANCE_SIGNATURE
+exec-once = hyprshade auto
+
+# Network Manager Applet
+exec-once = nm-applet
+
+# Cursor
+exec-once = hyprctl setcursor capitaine-cursors-light 28
diff --git a/.config/hypr/conf/keybinds.conf b/.config/hypr/conf/keybinds.conf
new file mode 100644
index 0000000..3ea1a83
--- /dev/null
+++ b/.config/hypr/conf/keybinds.conf
@@ -0,0 +1,94 @@
+# Key bindings
+
+# See https://wiki.hyprland.org/Configuring/Keywords/
+$mainMod = SUPER
+$terminal = kitty
+$fileManager = thunar
+$menu = tofi-drun | xargs hyprctl dispatch exec --
+
+# Applications
+bind = $mainMod+SHIFT, code:41, exec, $fileManager # f
+bind = $mainMod, RETURN, exec, $terminal
+bind = $mainMod, code:71, exec, $HOME/.local/bin/mailsync # f5
+bind = ,code:118, exec, copyq menu # ins
+bind = $mainMod, 0, exec, swaync-client --hide-latest
+bind = $mainMod+SHIFT, 0, exec, swaync-client -t
+bindr = SUPER+SHIFT, escape, exec, $HOME/.local/bin/wpower.sh
+bindr = $mainMod, code:42, exec, $HOME/.local/bin/done # g
+bindr = $mainMod, code:30, exec, $HOME/.local/bin/bukuadd_c # u
+bindr = $mainMod, code:35, exec, $HOME/.local/bin/td # ]
+
+bind = $mainMod+SHIFT, code:24, killactive, # q
+bind = $mainMod, code:55, togglefloating, # v
+bind = $mainMod, code:40, exec, $menu # d
+bind = $mainMod, code:27, pseudo, # p, dwindle
+bind = $mainMod, code:26, togglesplit, # e, dwindle
+bind = $mainMod, code:41, fullscreen, 2 # f
+
+bindl = , XF86AudioPlay, exec, playerctl play-pause
+bindl = , XF86AudioNext, exec, playerctl next
+bindl = , XF86AudioPrev, exec, playerctl previous
+
+# Screenshots:
+# Super+P: Current window
+# Super+Shift+p: Select area
+# Super+Alt+p Current output
+# Super+Ctrl+p All outputs
+
+# Optionally, customize slurp's appearance
+env = SLURP_ARGS, -d -B F050F022 -b 10101022 -c ff00ff
+
+bind = ,Print, exec, ~/.local/bin/screenshot.sh
+bind = SHIFT, Print, exec, grimblast copy area
+
+# Move focus
+bind = $mainMod, code:43, movefocus, l
+bind = $mainMod, code:44, movefocus, d
+bind = $mainMod, code:45, movefocus, u
+bind = $mainMod, code:46, movefocus, r
+
+# Move window
+bind = $mainMod+SHIFT, code:43, movewindow, l
+bind = $mainMod+SHIFT, code:44, movewindow, d
+bind = $mainMod+SHIFT, code:45, movewindow, u
+bind = $mainMod+SHIFT, code:46, movewindow, r
+
+# Switch workspaces with mainMod + [0-9]
+bind = $mainMod, 1, workspace, 1
+bind = $mainMod, 2, workspace, 2
+bind = $mainMod, 3, workspace, 3
+bind = $mainMod, 4, workspace, 4
+bind = $mainMod, 5, workspace, 5
+bind = $mainMod, 6, workspace, 6
+bind = $mainMod, 7, workspace, 7
+bind = $mainMod, 8, workspace, 8
+bind = $mainMod, 9, workspace, 9
+bind = $mainMod, code:21, workspace, name:browser
+bind = $mainMod, code:49, workspace, name:zotero
+bind = $mainMod, code:60, workspace, name:desktop
+bind = $mainMod, code:59, workspace, name:console
+bind = $mainMod, code:58, workspace, name:music
+
+# Example special workspace (scratchpad)
+bind = $mainMod, code:20, togglespecialworkspace, magic # -
+bind = $mainMod SHIFT, code:20, movetoworkspace, special:magic
+
+# Move active window to a workspace with mainMod + SHIFT + [0-9]
+bind = $mainMod SHIFT, 1, movetoworkspace, 1
+bind = $mainMod SHIFT, 2, movetoworkspace, 2
+bind = $mainMod SHIFT, 3, movetoworkspace, 3
+bind = $mainMod SHIFT, 4, movetoworkspace, 4
+bind = $mainMod SHIFT, 5, movetoworkspace, 5
+bind = $mainMod SHIFT, 6, movetoworkspace, 6
+bind = $mainMod SHIFT, 7, movetoworkspace, 7
+bind = $mainMod SHIFT, 8, movetoworkspace, 8
+bind = $mainMod SHIFT, 9, movetoworkspace, 9
+bind = $mainMod SHIFT, code:21, movetoworkspace, name:browser
+bind = $mainMod SHIFT, code:49, movetoworkspace, name:zotero
+bind = $mainMod SHIFT, code:60, movetoworkspace, name:desktop
+bind = $mainMod SHIFT, code:59, movetoworkspace, name:console
+bind = $mainMod SHIFT, code:58, movetoworkspace, name:music
+
+# Move/resize windows with mainMod + LMB/RMB and dragging
+bindm = $mainMod, mouse:272, movewindow
+bindm = $mainMod, mouse:273, resizewindow
diff --git a/.config/hypr/conf/monitor.conf b/.config/hypr/conf/monitor.conf
new file mode 100644
index 0000000..e04dfb1
--- /dev/null
+++ b/.config/hypr/conf/monitor.conf
@@ -0,0 +1,5 @@
+# qualle monitor
+monitor=eDP-1,highres,auto,1
+
+# # autoconfig any additional monitor
+monitor=HDMI-A-1,highres,auto-up,1.25
diff --git a/.config/hypr/conf/sound_brightness_notifications.conf b/.config/hypr/conf/sound_brightness_notifications.conf
new file mode 100644
index 0000000..e198237
--- /dev/null
+++ b/.config/hypr/conf/sound_brightness_notifications.conf
@@ -0,0 +1,9 @@
+bind = , XF86MonBrightnessUp, exec, lightctl up
+bind = , XF86MonBrightnessDown, exec, lightctl down
+
+bindl =  , XF86AudioMicMute, exec, volumectl -m toggle-mute
+bindl =  , XF86AudioMute, exec, volumectl toggle-mute
+bindle = , XF86AudioRaiseVolume, exec, volumectl -u up
+bindle = , XF86AudioLowerVolume, exec, volumectl -u down
+
+exec-once = avizo-service
diff --git a/.config/hypr/conf/windowrules.conf b/.config/hypr/conf/windowrules.conf
new file mode 100644
index 0000000..178a1bc
--- /dev/null
+++ b/.config/hypr/conf/windowrules.conf
@@ -0,0 +1,67 @@
+# See https://wiki.hyprland.org/Configuring/Window-Rules/
+windowrulev2 = suppressevent maximize, class:.*
+
+# polkit auth agent
+windowrulev2 = float, class:org.kde.polkit-kde-authentication-agent-1
+
+# yad
+windowrulev2 = float, class:yad
+
+# Libre Office
+windowrulev2 = size 800 600, class:soffice,title:Export
+
+# Blueman
+windowrulev2 = float,class:^(blueman-manager)$
+
+# NetworkManager
+windowrulev2 = float,class:^(nm-connection-editor)$
+
+# Pavucontrol
+windowrulev2 = float,class:^(org.pulseaudio.pavucontrol)$
+windowrulev2 = size 800 600,class:^(org.pulseaudio.pavucontrol)$
+
+# copyq
+windowrulev2 = float, class:com.github.hluk.copyq
+windowrulev2 = noborder, class:com.github.hluk.copyq
+windowrulev2 = noblur, class:com.github.hluk.copyq
+windowrulev2 = dimaround, class:com.github.hluk.copyq
+windowrulev2 = move 70% 10%, class:com.github.hluk.copyq
+
+# Firefox
+windowrulev2 = workspace name:browser silent, class:firefox
+
+# Browser Picture in Picture
+windowrulev2 = float, title:^(Picture-in-Picture)$
+windowrulev2 = pin, title:^(Picture-in-Picture)$
+windowrulev2 = move 72% 40%, title:^(Picture-in-Picture)$
+windowrulev2 = size 520 390, title:^(Picture-in-Picture)$
+
+# Discord Popout
+windowrulev2 = float, title:^(Discord Popout)$
+windowrulev2 = pin, title:^(Discord Popout)$
+windowrulev2 = move 72% 40%, title:^(Discord Popout)$
+windowrulev2 = size 573 354, title:^(Discord Popout)$
+
+# Xwaylandvideobridge
+windowrulev2 = opacity 0.0 override,class:^(xwaylandvideobridge)$
+windowrulev2 = noanim,class:^(xwaylandvideobridge)$
+windowrulev2 = noinitialfocus,class:^(xwaylandvideobridge)$
+windowrulev2 = maxsize 1 1,class:^(xwaylandvideobridge)$
+windowrulev2 = noblur,class:^(xwaylandvideobridge)$
+
+# Zotero
+windowrulev2 = workspace name:zotero silent, class:Zotero
+
+windowrulev2 = float, class:^(Zotero)$,title:^(Progress)$
+windowrulev2 = noinitialfocus, class:^(Zotero)$,title:^(Progress)$
+windowrulev2 = move 1579 954, class:^(Zotero)$,title:^(Progress)$
+windowrulev2 = size 300 72, class:^(Zotero)$,title:^(Progress)$
+windowrulev2 = size 445 195, class:^(Zotero)$,title:^(New Collection)$
+
+# Thunar
+windowrulev2 = float, class:^(Thunar)$,title:^(File Operation Progress)$
+windowrulev2 = noinitialfocus, class:^(Thunar)$,title:^(File Operation Progress)$
+windowrulev2 = size 505 100, class:^(Thunar)$,title:^(File Operation Progress)$
+
+# Spotify
+windowrulev2 = workspace name:music silent, class:^(Spotify)$
diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf
new file mode 100644
index 0000000..be97aec
--- /dev/null
+++ b/.config/hypr/hyprland.conf
@@ -0,0 +1,122 @@
+# hyprland config
+# https://wiki.hyprland.org/
+
+source = ~/.config/hypr/conf/monitor.conf
+
+source = ~/.config/hypr/conf/autostart.conf
+
+source = ~/.config/hypr/conf/keybinds.conf
+
+source = ~/.config/hypr/conf/sound_brightness_notifications.conf
+
+source = ~/.config/hypr/conf/windowrules.conf
+
+# Some default env vars.
+env = GDK_BACKEND,wayland,x11,*
+env = QT_QPA_PLATFORM,wayland;xcb
+env = CLUTTER_BACKEND,wayland
+env = XDG_CURRENT_DESKTOP,Hyprland
+env = XDG_SESSION_TYPE,wayland
+env = XDG_SESSION_DESKTOP,Hyprland
+
+env = QT_AUTO_SCREEN_SCALE_FACTOR,1 - (From the Qt documentation) enables automatic scaling, based on the monitor’s pixel density
+env = QT_QPA_PLATFORM,wayland;xcb - Tell Qt applications to use the Wayland backend, and fall back to x11 if Wayland is unavailable
+env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 - Disables window decorations on Qt applications
+env = QT_QPA_PLATFORMTHEME,qt5ct - Tells Qt based applications to pick your theme from qt5ct, use with Kvantum.
+
+env = XCURSOR_SIZE,24
+env = QT_QPA_PLATFORMTHEME,qt6ct # change to qt6ct if you have that
+env = SEMESTER_THEME,you got this
+
+# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
+input {
+    kb_layout = us
+    kb_variant = colemak
+    kb_model =
+    kb_options =
+    kb_rules =
+    numlock_by_default = true
+
+    follow_mouse = 1
+
+    touchpad {
+        natural_scroll = true
+    }
+
+    sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
+}
+
+general {
+    # See https://wiki.hyprland.org/Configuring/Variables/
+
+    gaps_in = 3
+    gaps_out = 6
+    border_size = 2
+    col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
+    col.inactive_border = rgba(595959aa)
+
+    layout = dwindle
+
+    # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
+    allow_tearing = false
+}
+
+decoration {
+    # See https://wiki.hyprland.org/Configuring/Variables/
+
+    rounding = 0
+
+    blur {
+        enabled = true
+        size = 20
+        passes = 1
+    }
+
+    drop_shadow = yes
+    shadow_range = 4
+    shadow_render_power = 3
+    col.shadow = rgba(1a1a1aee)
+}
+
+animations {
+    enabled = yes
+
+    # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/
+
+    bezier = myBezier, 0.05, 0.9, 0.1, 1.05
+
+    animation = windows, 1, 7, myBezier
+    animation = windowsOut, 1, 7, default, popin 80%
+    animation = border, 1, 10, default
+    animation = borderangle, 1, 8, default
+    animation = fade, 1, 7, default
+    animation = workspaces, 1, 6, default
+}
+
+dwindle {
+    # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/
+    pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
+    preserve_split = yes # you probably want this
+}
+
+master {
+    # See https://wiki.hyprland.org/Configuring/Master-Layout/
+    new_status = master
+}
+
+gestures {
+    # See https://wiki.hyprland.org/Configuring/Variables/
+    workspace_swipe = on
+}
+
+misc {
+    # See https://wiki.hyprland.org/Configuring/Variables/
+    force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
+}
+
+binds {
+    workspace_back_and_forth = true
+}
+
+
+exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # https://gist.github.com/brunoanc/2dea6ddf6974ba4e5d26c3139ffb7580#editing-the-configuration-file
diff --git a/.config/hypr/hyprlock.conf b/.config/hypr/hyprlock.conf
new file mode 100644
index 0000000..9aa8ce1
--- /dev/null
+++ b/.config/hypr/hyprlock.conf
@@ -0,0 +1,88 @@
+source = $HOME/.config/hypr/mocha.conf
+
+$accent = $mauve
+$accentAlpha = $mauveAlpha
+$font = Iosevka Aile
+
+# GENERAL
+general {
+  disable_loading_bar = true
+  hide_cursor = true
+}
+
+# BACKGROUND
+background {
+  monitor =
+  path = $HOME/desk/pics/lockscreen.jpg
+  blur_passes = 0
+  color = $base
+}
+
+# TIME
+label {
+  monitor =
+  text = $TIME
+  color = $text
+  font_size = 90
+  font_family = $font
+  position = -30, 0
+  halign = right
+  valign = top
+}
+
+# DATE
+label {
+  monitor =
+  text = cmd[update:43200000] date +"%A, %d %B %Y"
+  color = $text
+  font_size = 25
+  font_family = $font
+  position = -30, -150
+  halign = right
+  valign = top
+}
+
+# USER AVATAR
+image {
+  monitor =
+  path = $HOME/desk/pics/big_cat_hi.jpeg
+  size = 100
+  border_color = $accent
+  position = 0, 75
+  halign = center
+  valign = center
+}
+
+# INPUT FIELD
+input-field {
+  monitor =
+  size = 300, 60
+  outline_thickness = 4
+  dots_size = 0.2
+  dots_spacing = 0.2
+  dots_center = true
+  outer_color = $accent
+  inner_color = $surface0
+  font_color = $text
+  fade_on_empty = false
+  placeholder_text = <span foreground="##$textAlpha"><i>󰌾 logged in as </i><span foreground="##$accentAlpha">$USER</span></span>
+  hide_input = false
+  check_color = $accent
+  fail_color = $red
+  fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i>
+  capslock_color = $yellow
+  position = 0, -47
+  halign = center
+  valign = center
+}
+
+label {
+    monitor =
+    text = no place like home
+    color = $text_color
+    font_size = 20
+    font_family = $font_family
+    position = 30, -30
+    halign = left
+    valign = top
+}
diff --git a/.config/hypr/hyprpaper.conf b/.config/hypr/hyprpaper.conf
new file mode 100644
index 0000000..dd3aa91
--- /dev/null
+++ b/.config/hypr/hyprpaper.conf
@@ -0,0 +1,5 @@
+preload = $HOME/desk/pics/vodka_fareler.jpg
+preload = /home/yigit/desk/pics/lightcircle.jpg
+wallpaper = eDP-1,$HOME/desk/pics/vodka_fareler.jpg
+wallpaper = HDMI-A-1,$HOME/desk/pics/lightcircle.jpg
+splash = false
diff --git a/.config/hypr/hyprshade.toml b/.config/hypr/hyprshade.toml
new file mode 100644
index 0000000..c8024e3
--- /dev/null
+++ b/.config/hypr/hyprshade.toml
@@ -0,0 +1,4 @@
+[[shades]]
+name = "blue-light-filter"
+start_time = 19:00:00
+end_time = 06:00:00
diff --git a/.config/hypr/mocha.conf b/.config/hypr/mocha.conf
new file mode 100644
index 0000000..2b80922
--- /dev/null
+++ b/.config/hypr/mocha.conf
@@ -0,0 +1,77 @@
+$rosewater = rgb(f5e0dc)
+$rosewaterAlpha = f5e0dc
+
+$flamingo = rgb(f2cdcd)
+$flamingoAlpha = f2cdcd
+
+$pink = rgb(f5c2e7)
+$pinkAlpha = f5c2e7
+
+$mauve = rgb(cba6f7)
+$mauveAlpha = cba6f7
+
+$red = rgb(f38ba8)
+$redAlpha = f38ba8
+
+$maroon = rgb(eba0ac)
+$maroonAlpha = eba0ac
+
+$peach = rgb(fab387)
+$peachAlpha = fab387
+
+$yellow = rgb(f9e2af)
+$yellowAlpha = f9e2af
+
+$green = rgb(a6e3a1)
+$greenAlpha = a6e3a1
+
+$teal = rgb(94e2d5)
+$tealAlpha = 94e2d5
+
+$sky = rgb(89dceb)
+$skyAlpha = 89dceb
+
+$sapphire = rgb(74c7ec)
+$sapphireAlpha = 74c7ec
+
+$blue = rgb(89b4fa)
+$blueAlpha = 89b4fa
+
+$lavender = rgb(b4befe)
+$lavenderAlpha = b4befe
+
+$text = rgb(cdd6f4)
+$textAlpha = cdd6f4
+
+$subtext1 = rgb(bac2de)
+$subtext1Alpha = bac2de
+
+$subtext0 = rgb(a6adc8)
+$subtext0Alpha = a6adc8
+
+$overlay2 = rgb(9399b2)
+$overlay2Alpha = 9399b2
+
+$overlay1 = rgb(7f849c)
+$overlay1Alpha = 7f849c
+
+$overlay0 = rgb(6c7086)
+$overlay0Alpha = 6c7086
+
+$surface2 = rgb(585b70)
+$surface2Alpha = 585b70
+
+$surface1 = rgb(45475a)
+$surface1Alpha = 45475a
+
+$surface0 = rgb(313244)
+$surface0Alpha = 313244
+
+$base = rgb(1e1e2e)
+$baseAlpha = 1e1e2e
+
+$mantle = rgb(181825)
+$mantleAlpha = 181825
+
+$crust = rgb(11111b)
+$crustAlpha = 11111b
diff --git a/.config/hypr/shaders/chromatic_abberation.frag b/.config/hypr/shaders/chromatic_abberation.frag
new file mode 100644
index 0000000..5389241
--- /dev/null
+++ b/.config/hypr/shaders/chromatic_abberation.frag
@@ -0,0 +1,24 @@
+// vim: set ft=glsl:
+
+precision highp float;
+varying highp vec2 v_texcoord;
+uniform highp sampler2D tex;
+
+#define STRENGTH 0.0027
+
+void main() {
+    vec2 center = vec2(0.5, 0.5);
+    vec2 offset = (v_texcoord - center) * STRENGTH;
+
+    float rSquared = dot(offset, offset);
+    float distortion = 1.0 + 1.0 * rSquared;
+    vec2 distortedOffset = offset * distortion;
+
+    vec2 redOffset = vec2(distortedOffset.x, distortedOffset.y);
+    vec2 blueOffset = vec2(distortedOffset.x, distortedOffset.y);
+
+    vec4 redColor = texture2D(tex, v_texcoord + redOffset);
+    vec4 blueColor = texture2D(tex, v_texcoord + blueOffset);
+
+    gl_FragColor = vec4(redColor.r, texture2D(tex, v_texcoord).g, blueColor.b, 1.0);
+}
diff --git a/.config/hypr/shaders/crt.frag b/.config/hypr/shaders/crt.frag
new file mode 100644
index 0000000..a37ff9f
--- /dev/null
+++ b/.config/hypr/shaders/crt.frag
@@ -0,0 +1,511 @@
+#version 100
+precision highp float;
+varying highp vec2 v_texcoord;
+varying highp vec3 v_pos;
+uniform highp sampler2D tex;
+uniform lowp float time;
+
+#define BORDER_COLOR vec4(vec3(0.0, 0.0, 0.0), 1.0) // black border
+#define BORDER_RADIUS 1.0 // larger vignette radius
+#define BORDER_SIZE 0.01 // small border size
+#define CHROMATIC_ABERRATION_STRENGTH 0.00
+#define DENOISE_INTENSITY 0.0001 //
+#define DISTORTION_AMOUNT 0.00 // moderate distortion amount
+#define HDR_BLOOM 0.75 // bloom intensity
+#define HDR_BRIGHTNESS 0.011 // brightness
+#define HDR_CONTRAST 0.011 // contrast
+#define HDR_SATURATION 1.0// saturation
+#define LENS_DISTORTION_AMOUNT 0.0
+#define NOISE_THRESHOLD 0.0001
+#define PHOSPHOR_BLUR_AMOUNT 0.77 // Amount of blur for phosphor glow
+#define PHOSPHOR_GLOW_AMOUNT 0.77 // Amount of phosphor glow
+#define SAMPLING_RADIUS 0.0001
+#define SCANLINE_FREQUENCY 540.0
+#define SCANLINE_THICKNESS 0.0507
+#define SCANLINE_TIME time * 471.24
+#define SHARPNESS 0.25
+#define SUPERSAMPLING_SAMPLES 16.0
+#define VIGNETTE_RADIUS 0.0 // larger vignette radius
+#define PI 3.14159265359
+#define TWOPI 6.28318530718
+
+vec2 applyBarrelDistortion(vec2 coord, float amt) {
+    vec2 p = coord.xy / vec2(1.0);
+    vec2 v = p * 2.0 - vec2(1.0);
+    float r = dot(v, v);
+    float k = 1.0 + pow(r, 2.0) * pow(amt, 2.0);
+    vec2 result = v * k;
+    return vec2(0.5, 0.5) + 0.5 * result.xy;
+}
+
+vec4 applyColorCorrection(vec4 color) {
+    color.rgb *= vec3(1.0, 0.79, 0.89);
+    return vec4(color.rgb, 1.0);
+}
+
+vec4 applyBorder(vec2 tc, vec4 color, float borderSize, vec4 borderColor) {
+    float dist_x = min(tc.x, 1.0 - tc.x);
+    float dist_y = min(tc.y, 1.0 - tc.y);
+    float dist = min(dist_x, dist_y) * -1.0;
+    float border = smoothstep(borderSize, 0.0, dist);
+    border += smoothstep(borderSize, 0.0, dist);
+    return mix(color, borderColor, border);
+}
+
+vec4 applyFakeHDR(vec4 color, float brightness, float contrast, float saturation, float bloom) {
+    color.rgb = (color.rgb - vec3(0.5)) * exp2(brightness) + vec3(0.5);
+    vec3 crtfactor = vec3(1.05, 0.92, 1.0);
+    color.rgb = pow(color.rgb, crtfactor);
+    // // NTSC
+    // vec3 lumCoeff = vec3(0.2125, 0.7154, 0.0721);
+
+    // // BT.709
+    // vec3 lumCoeff = vec3(0.299, 0.587, 0.114);
+
+    // BT.2020
+    vec3 lumCoeff = vec3(0.2627, 0.6780, 0.0593);
+
+    // // Warm NTSC
+    // vec3 lumCoeff = vec3(0.2125, 0.7010, 0.0865);
+
+    float luminance = dot(color.rgb, lumCoeff);
+    luminance = pow(luminance, 2.2);
+    color.rgb = mix(vec3(luminance), color.rgb, saturation);
+    color.rgb = mix(color.rgb, vec3(1.0), pow(max(0.0, luminance - 1.0 + bloom), 4.0));
+    return color;
+}
+
+vec4 applyVignette(vec4 color) {
+    vec2 center = vec2(0.5, 0.5); // center of screen
+    float radius = VIGNETTE_RADIUS; // radius of vignette effect
+    float softness = 1.0; // softness of vignette effect
+    float intensity = 0.7; // intensity of vignette effect
+    vec2 offset = v_texcoord - center; // offset from center of screen
+    float distance = length(offset); // distance from center of screen
+    float alpha = smoothstep(radius, radius - radius * softness, distance) * intensity; // calculate alpha value for vignette effect
+    return mix(vec4(0.0, 0.0, 0.0, alpha), color, alpha); // mix black with color using calculated alpha value
+}
+
+vec4 applyPhosphorGlow(vec2 tc, vec4 color, sampler2D tex) {
+    // Calculate average color value of the texture
+    vec4 texelColor = color;
+    float averageColor = (texelColor.r + texelColor.g + texelColor.b) / 3.0;
+
+    // Determine brightness-dependent color factor
+    float factor = mix(
+        mix(0.09,
+            mix(0.005, 0.0075, (averageColor - 0.1) / 0.1),
+            step(0.01, averageColor)), 0.0005,
+        step(0.02, averageColor));
+    // Apply phosphor glow effect
+    vec4 sum = vec4(0.0);
+    vec4 pixels[9];
+    pixels[0] = texture2D(tex, tc - vec2(0.001, 0.001));
+    pixels[1] = texture2D(tex, tc - vec2(0.001, 0.0));
+    pixels[2] = texture2D(tex, tc - vec2(0.001, -0.001));
+    pixels[3] = texture2D(tex, tc - vec2(0.0, 0.001));
+    pixels[4] = texture2D(tex, tc);
+    pixels[5] = texture2D(tex, tc + vec2(0.001, 0.001));
+    pixels[6] = texture2D(tex, tc + vec2(0.001, 0.0));
+    pixels[7] = texture2D(tex, tc + vec2(0.001, -0.001));
+    pixels[8] = texture2D(tex, tc + vec2(0.0, 0.001));
+
+// Perform operations on input pixels in parallel
+    sum = pixels[0]
+        + pixels[1]
+        + pixels[2]
+        + pixels[3]
+        + pixels[4]
+        + pixels[5]
+        + pixels[6]
+        + pixels[7]
+        + pixels[8];
+    sum /= 9.0;
+    sum += texture2D(tex, tc - vec2(0.01, 0.01)) * 0.001;
+    sum += texture2D(tex, tc - vec2(0.0, 0.01)) * 0.001;
+    sum += texture2D(tex, tc - vec2(-0.01, 0.01)) * 0.001;
+    sum += texture2D(tex, tc - vec2(0.01, 0.0)) * 0.001;
+    sum += color * PHOSPHOR_BLUR_AMOUNT;
+    sum += texture2D(tex, tc - vec2(-0.01, 0.0)) * 0.001;
+    sum += texture2D(tex, tc - vec2(0.01, -0.01)) * 0.001;
+    sum += texture2D(tex, tc - vec2(0.0, -0.01)) * 0.001;
+    sum += texture2D(tex, tc - vec2(-0.01, -0.01)) * 0.001;
+    sum *= PHOSPHOR_GLOW_AMOUNT;
+
+    // Initialize sum_sum_factor to zero
+    vec4 sum_sum_factor = vec4(0.0);
+    // Compute sum_j for i = -1
+    vec4 sum_j = vec4(0.0);
+    sum_j += texture2D(tex, tc + vec2(-1, -1) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(0, -1) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(1, -1) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(-1, 0) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(0, 0) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(1, 0) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(-1, 1) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(1, 1) * 0.01);
+    sum_sum_factor += sum_j * vec4(0.011);
+
+    // Compute sum_j for i = 0
+    sum_j = vec4(0.0);
+    sum_j += texture2D(tex, tc + vec2(-1, 0) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(0, 0) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(1, 0) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(-1, 1) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(1, 1) * 0.01);
+    sum_sum_factor += sum_j * vec4(0.011);
+
+    // Compute sum_j for i = 1
+    sum_j = vec4(0.0);
+    sum_j += texture2D(tex, tc + vec2(-1, 0) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(1, 0) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(-1, 1) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
+    sum_j += texture2D(tex, tc + vec2(1, 1) * 0.01);
+    sum_sum_factor += sum_j * vec4(0.011);
+    color += mix(sum_sum_factor * sum_sum_factor * vec4(factor), sum, 0.5);
+    return color;
+}
+
+vec4 applyAdaptiveSharpen(vec2 tc, vec4 color, sampler2D tex) {
+    vec4 color_tl = texture2D(tex, tc + vec2(-1.0, -1.0) * 0.5 / 2160.0);
+    vec4 color_tr = texture2D(tex, tc + vec2(1.0, -1.0) * 0.5 / 2160.0);
+    vec4 color_bl = texture2D(tex, tc + vec2(-1.0, 1.0) * 0.5 / 2160.0);
+    vec4 color_br = texture2D(tex, tc + vec2(1.0, 1.0) * 0.5 / 2160.0);
+    float sharpness = SHARPNESS;
+    vec3 color_no_alpha = color.rgb;
+    vec3 color_tl_no_alpha = color_tl.rgb;
+    vec3 color_tr_no_alpha = color_tr.rgb;
+    vec3 color_bl_no_alpha = color_bl.rgb;
+    vec3 color_br_no_alpha = color_br.rgb;
+    float delta = (dot(color_no_alpha, vec3(0.333333)) + dot(color_tl_no_alpha, vec3(0.333333)) + dot(color_tr_no_alpha, vec3(0.333333)) + dot(color_bl_no_alpha, vec3(0.333333)) + dot(color_br_no_alpha, vec3(0.333333))) * 0.2 - dot(color_no_alpha, vec3(0.333333));
+    vec3 sharp_color_no_alpha = color_no_alpha + min(vec3(0.0), vec3(delta * sharpness));
+    vec4 sharp_color = vec4(sharp_color_no_alpha, color.a);
+    return sharp_color;
+}
+
+vec4 applyScanlines(vec2 tc, vec4 color) {
+    float scanline = (cos(tc.y * SCANLINE_FREQUENCY + SCANLINE_TIME) *
+                      sin(tc.y * SCANLINE_FREQUENCY + SCANLINE_TIME)) * SCANLINE_THICKNESS;
+    float alpha = clamp(1.0 - abs(scanline), 0.0, 1.0);
+    return vec4(color.rgb * alpha, color.a);
+}
+
+vec4 applyChromaticAberration(vec2 uv, vec4 color) {
+    vec2 center = vec2(0.5, 0.5); // center of the screen
+    vec2 offset = (uv - center) * CHROMATIC_ABERRATION_STRENGTH; // calculate the offset from the center
+
+    // apply lens distortion
+    float rSquared = dot(offset, offset);
+    float distortion = 1.0 + LENS_DISTORTION_AMOUNT * rSquared;
+    vec2 distortedOffset = offset * distortion;
+
+    // apply chromatic aberration
+    vec2 redOffset = vec2(distortedOffset.x * 1.00, distortedOffset.y * 1.00);
+    vec2 blueOffset = vec2(distortedOffset.x * 1.00, distortedOffset.y * 1.00);
+
+    vec4 redColor = texture2D(tex, uv + redOffset);
+    vec4 blueColor = texture2D(tex, uv + blueOffset);
+
+    vec4 result = vec4(redColor.r, color.g, blueColor.b, color.a);
+
+    return result;
+}
+
+vec4 reduceGlare(vec4 color) {
+    // Calculate the intensity of the color by taking the average of the RGB components
+    float intensity = (color.r + color.g + color.b) / 3.0;
+    // Set the maximum intensity that can be considered for glare
+    float maxIntensity = 0.98;
+    // Use smoothstep to create a smooth transition from no glare to full glare
+    // based on the intensity of the color and the maximum intensity
+    float glareIntensity = smoothstep(maxIntensity - 0.02, maxIntensity, intensity);
+    // Set the amount of glare to apply to the color
+    float glareAmount = 0.02;
+    // Mix the original color with the reduced color that has glare applied to it
+    vec3 reducedColor = mix(color.rgb, vec3(glareIntensity), glareAmount);
+    // Return the reduced color with the original alpha value
+    return vec4(reducedColor, color.a);
+}
+
+// Apply a fake HDR effect to the input color.
+// Parameters:
+// - inputColor: the color to apply the effect to.
+// - brightness: the brightness of the image. Should be a value between 0 and 1.
+// - contrast: the contrast of the image. Should be a value between 0 and 1.
+// - saturation: the saturation of the image. Should be a value between 0 and 2.
+// - bloom: the intensity of the bloom effect. Should be a value between 0 and 1.
+vec4 applyFakeHDREffect(vec4 inputColor, float brightness, float contrast, float saturation, float bloom) {
+    const float minBrightness = 0.0;
+    const float maxBrightness = 1.0;
+    const float minContrast = 0.0;
+    const float maxContrast = 1.0;
+    const float minSaturation = 0.0;
+    const float maxSaturation = 2.0;
+    const float minBloom = 0.0;
+    const float maxBloom = 1.0;
+
+    // Check input parameters for validity
+    if (brightness < minBrightness || brightness > maxBrightness) {
+        return vec4(0.0, 0.0, 0.0, 1.0); // Return black with alpha of 1.0 to indicate error
+    }
+    if (contrast < minContrast || contrast > maxContrast) {
+        return vec4(0.0, 0.0, 0.0, 1.0);
+    }
+    if (saturation < minSaturation || saturation > maxSaturation) {
+        return vec4(0.0, 0.0, 0.0, 1.0);
+    }
+    if (bloom < minBloom || bloom > maxBloom) {
+        return vec4(0.0, 0.0, 0.0, 1.0);
+    }
+
+    // Apply brightness and contrast
+    vec3 color = inputColor.rgb;
+    color = (color - vec3(0.5)) * exp2(brightness * 10.0) + vec3(0.5);
+    color = mix(vec3(0.5), color, pow(contrast * 4.0 + 1.0, 2.0));
+
+    // // NTSC
+    // vec3 lumCoeff = vec3(0.2125, 0.7154, 0.0721);
+
+    // // BT.709
+    // vec3 lumCoeff = vec3(0.299, 0.587, 0.114);
+
+    // // BT.2020
+    // vec3 lumCoeff = vec3(0.2627, 0.6780, 0.0593);
+
+    // Warm NTSC
+    vec3 lumCoeff = vec3(0.2125, 0.7010, 0.0865);
+
+    // Apply saturation
+    float luminance = dot(color, lumCoeff);
+    vec3 grey = vec3(luminance);
+    color = mix(grey, color, saturation);
+
+    // Apply bloom effect
+    float threshold = 1.0 - bloom;
+    vec3 bloomColor = max(color - threshold, vec3(0.0));
+    bloomColor = pow(bloomColor, vec3(2.0));
+    bloomColor = mix(vec3(0.0), bloomColor, pow(min(luminance, threshold), 4.0));
+    color += bloomColor;
+
+    return vec4(color, inputColor.a);
+}
+
+vec4 bilateralFilter(sampler2D tex, vec2 uv, vec4 color, float sampleRadius, float noiseThreshold, float intensity) {
+    vec4 filteredColor = vec4(0.0);
+    float totalWeight = 0.0;
+
+    // Top-left pixel
+    vec4 sample = texture2D(tex, uv + vec2(-1.0, -1.0));
+    float dist = length(vec2(-1.0, -1.0));
+    float colorDist = length(sample - color);
+    float weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+    filteredColor += sample * weight;
+    totalWeight += weight;
+
+    // Top pixel
+    sample = texture2D(tex, uv + vec2(0.0, -1.0));
+    dist = length(vec2(0.0, -1.0));
+    colorDist = length(sample - color);
+    weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+    filteredColor += sample * weight;
+    totalWeight += weight;
+
+    // Top-right pixel
+    sample = texture2D(tex, uv + vec2(1.0, -1.0));
+    dist = length(vec2(1.0, -1.0));
+    colorDist = length(sample - color);
+    weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+    filteredColor += sample * weight;
+    totalWeight += weight;
+
+    // Left pixel
+    sample = texture2D(tex, uv + vec2(-1.0, 0.0));
+    dist = length(vec2(-1.0, 0.0));
+    colorDist = length(sample - color);
+    weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+    filteredColor += sample * weight;
+    totalWeight += weight;
+
+    // Center pixel
+    sample = texture2D(tex, uv);
+    dist = 0.0;
+    colorDist = length(sample - color);
+    weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+    filteredColor += sample * weight;
+    totalWeight += weight;
+
+    // Right pixel
+    sample = texture2D(tex, uv + vec2(1.0, 0.0));
+    dist = length(vec2(1.0, 0.0));
+    colorDist = length(sample - color);
+    weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+    filteredColor += sample * weight;
+    totalWeight += weight;
+
+    // Bottom-left pixel
+    sample = texture2D(tex, uv + vec2(-1.0, 1.0));
+    dist = length(vec2(-1.0, 1.0));
+    colorDist = length(sample - color);
+    weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+    filteredColor += sample * weight;
+    totalWeight += weight;
+
+// Bottom pixel
+    sample = texture2D(tex, uv + vec2(0.0, sampleRadius));
+    dist = length(vec2(0.0, sampleRadius));
+    colorDist = length(sample - color);
+    weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
+    filteredColor += sample * weight;
+    totalWeight += weight;
+
+    filteredColor /= totalWeight;
+    return mix(color, filteredColor, step(noiseThreshold, length(filteredColor - color)));
+}
+
+vec4 supersample(sampler2D tex, vec2 uv, float sampleRadius, float noiseThreshold, float intensity) {
+    float radiusSq = sampleRadius * sampleRadius;
+    vec2 poissonDisk;
+    vec4 color = vec4(0.0);
+
+    float r1_0 = sqrt(0.0 / 16.0);
+    float r2_0 = fract(1.0 / 3.0);
+    float theta_0 = TWOPI * r2_0;
+    poissonDisk = vec2(r1_0 * cos(theta_0), r1_0 * sin(theta_0));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_1 = sqrt(1.0 / 16.0);
+    float r2_1 = fract(2.0 / 3.0);
+    float theta_1 = TWOPI * r2_1;
+    poissonDisk = vec2(r1_1 * cos(theta_1), r1_1 * sin(theta_1));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_2 = sqrt(2.0 / 16.0);
+    float r2_2 = fract(3.0 / 3.0);
+    float theta_2 = TWOPI * r2_2;
+    poissonDisk = vec2(r1_2 * cos(theta_2), r1_2 * sin(theta_2));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_3 = sqrt(3.0 / 16.0);
+    float r2_3 = fract(4.0 / 3.0);
+    float theta_3 = TWOPI * r2_3;
+    poissonDisk = vec2(r1_3 * cos(theta_3), r1_3 * sin(theta_3));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_4 = sqrt(4.0 / 16.0);
+    float r2_4 = fract(5.0 / 3.0);
+    float theta_4 = TWOPI * r2_4;
+    poissonDisk = vec2(r1_4 * cos(theta_4), r1_4 * sin(theta_4));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_5 = sqrt(5.0 / 16.0);
+    float r2_5 = fract(6.0 / 3.0);
+    float theta_5 = TWOPI * r2_5;
+    poissonDisk = vec2(r1_5 * cos(theta_5), r1_5 * sin(theta_5));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_6 = sqrt(6.0 / 16.0);
+    float r2_6 = fract(7.0 / 3.0);
+    float theta_6 = TWOPI * r2_6;
+    poissonDisk = vec2(r1_6 * cos(theta_6), r1_6 * sin(theta_6));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_7 = sqrt(7.0 / 16.0);
+    float r2_7 = fract(8.0 / 3.0);
+    float theta_7 = TWOPI * r2_7;
+    poissonDisk = vec2(r1_7 * cos(theta_7), r1_7 * sin(theta_7));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_8 = sqrt(8.0 / 16.0);
+    float r2_8 = fract(9.0 / 3.0);
+    float theta_8 = TWOPI * r2_8;
+    poissonDisk = vec2(r1_8 * cos(theta_8), r1_8 * sin(theta_8));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_9 = sqrt(9.0 / 16.0);
+    float r2_9 = fract(10.0 / 3.0);
+    float theta_9 = TWOPI * r2_9;
+    poissonDisk = vec2(r1_9 * cos(theta_9), r1_9 * sin(theta_9));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_10 = sqrt(10.0 / 16.0);
+    float r2_10 = fract(11.0 / 3.0);
+    float theta_10 = TWOPI * r2_10;
+    poissonDisk = vec2(r1_10 * cos(theta_10), r1_10 * sin(theta_10));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_11 = sqrt(11.0 / 16.0);
+    float r2_11 = fract(12.0 / 3.0);
+    float theta_11 = TWOPI * r2_11;
+    poissonDisk = vec2(r1_11 * cos(theta_11), r1_11 * sin(theta_11));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_12 = sqrt(12.0 / 16.0);
+    float r2_12 = fract(13.0 / 3.0);
+    float theta_12 = TWOPI * r2_12;
+    poissonDisk = vec2(r1_12 * cos(theta_12), r1_12 * sin(theta_12));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_13 = sqrt(13.0 / 16.0);
+    float r2_13 = fract(14.0 / 3.0);
+    float theta_13 = TWOPI * r2_13;
+    poissonDisk = vec2(r1_13 * cos(theta_13), r1_13 * sin(theta_13));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_14 = sqrt(14.0 / 16.0);
+    float r2_14 = fract(15.0 / 3.0);
+    float theta_14 = TWOPI * r2_14;
+    poissonDisk = vec2(r1_14 * cos(theta_14), r1_14 * sin(theta_14));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    float r1_15 = sqrt(15.0 / 16.0);
+    float r2_15 = fract(16.0 / 3.0);
+    float theta_15 = TWOPI * r2_15;
+    poissonDisk = vec2(r1_15 * cos(theta_15), r1_15 * sin(theta_15));
+    color += texture2D(tex, uv + poissonDisk * sampleRadius);
+
+    return bilateralFilter(tex, uv, color, sampleRadius, noiseThreshold, intensity);
+}
+void main() {
+    vec2 tc_no_dist = v_texcoord;
+
+    vec2 tc = applyBarrelDistortion(tc_no_dist, DISTORTION_AMOUNT);
+
+    // [-1, 1]
+    vec2 tc_no_dist_symmetric = tc_no_dist * 2.0 - 1.0;
+
+    // [0,1]
+    vec2 tc_no_dist_normalized = (tc_no_dist_symmetric + 1.0) / 2.0;
+
+    // vec4 color = texture2D(tex, tc);
+    vec4 color = supersample(tex, tc, SAMPLING_RADIUS, NOISE_THRESHOLD, DENOISE_INTENSITY);
+
+    color = applyAdaptiveSharpen(tc, color, tex);
+
+    color = applyPhosphorGlow(tc, color, tex);
+
+    color = reduceGlare(color);
+
+    color = mix(applyFakeHDREffect(color, HDR_BRIGHTNESS, HDR_CONTRAST, HDR_SATURATION, HDR_BLOOM), color, 0.5);
+
+    color = applyColorCorrection(color);
+
+    color /= SUPERSAMPLING_SAMPLES;
+
+    color = mix(applyChromaticAberration(tc, color), color, 0.25);
+
+    color = mix(color, applyVignette(color), 0.37);
+
+    color = applyBorder(tc_no_dist_normalized, color, 1.0 - BORDER_SIZE * BORDER_RADIUS, BORDER_COLOR);
+
+    color = mix(applyBorder(tc, color, BORDER_SIZE, BORDER_COLOR), color, 0.05);
+
+    color = applyScanlines(tc, color);
+
+    gl_FragColor = color;
+    gl_FragColor.a = 1.0;
+}
+
diff --git a/.config/hypr/shaders/drugs.frag b/.config/hypr/shaders/drugs.frag
new file mode 100644
index 0000000..1190ed0
--- /dev/null
+++ b/.config/hypr/shaders/drugs.frag
@@ -0,0 +1,42 @@
+
+precision highp float;
+varying vec2 v_texcoord;
+uniform sampler2D tex;
+uniform float time;
+
+void warpco(inout vec2 tc) {
+    tc -= 0.5;
+    tc *= length(tc) * 2.0;
+    tc += 0.5;
+}
+
+float rand1d(float seed) {
+   return sin(seed*1454.0); 
+}
+
+float rand2d(vec2 co)
+{
+  return fract(sin(dot(co.xy, vec2(12.9898,78.233))) * 43758.5453);
+}
+
+vec3 rgb(in vec2 tc, float freq, float amp, inout vec4 centre) {
+    vec2 off = vec2(1.0/800.0, 0.0) * sin(tc.t * freq + time) * amp;
+    vec2 off2 = vec2(1.0/800.0, 0.0) * sin(tc.t * freq - time * 1.5) * amp;
+    centre = texture2D(tex, tc);
+    return vec3(texture2D(tex, tc-off).r, centre.g, texture2D(tex, tc+off2).b);
+}
+
+void main() {
+    // vec2 px = 1.0 / textureSize(tex, 0).st;
+    vec2 tc = v_texcoord;
+    warpco(tc);
+    tc = mix(v_texcoord, tc, sin(time * 2.0)*0.07);
+    tc.x += rand2d(floor(tc * 20.0 + floor(time * 2.5))) * 0.01;
+    tc.x += rand1d(floor(tc.x * 40.0)) * 0.005 * rand1d(time * 0.001);
+    tc.y += sin(tc.x + time) * 0.02;
+    vec4 centre;
+    vec3 bent = rgb(tc, 100.0, 5.0, centre);
+    vec3 col = mix(centre.rgb, bent, sin(time));
+    gl_FragColor = vec4(col, centre.a);
+    // gl_FragColor = vec4(texture2D(tex, v_texcoord));
+}
\ No newline at end of file
diff --git a/.config/hypr/shaders/extradark.frag b/.config/hypr/shaders/extradark.frag
new file mode 100644
index 0000000..089ee81
--- /dev/null
+++ b/.config/hypr/shaders/extradark.frag
@@ -0,0 +1,21 @@
+// vim: set ft=glsl:
+// blue light filter shader
+// values from https://reshade.me/forum/shader-discussion/3673-blue-light-filter-similar-to-f-lux
+
+precision mediump float;
+varying vec2 v_texcoord;
+uniform sampler2D tex;
+
+void main() {
+
+    vec4 pixColor = texture2D(tex, v_texcoord);
+
+    // red
+    pixColor[0] *= 0.7;
+    // green
+    pixColor[1] *= 0.6;
+    // blue
+    pixColor[2] *= 0.5;
+
+    gl_FragColor = pixColor;
+}
diff --git a/.config/hypr/shaders/invert.frag b/.config/hypr/shaders/invert.frag
new file mode 100644
index 0000000..864f718
--- /dev/null
+++ b/.config/hypr/shaders/invert.frag
@@ -0,0 +1,13 @@
+// vim: set ft=glsl:
+// blue light filter shader
+// values from https://reshade.me/forum/shader-discussion/3673-blue-light-filter-similar-to-f-lux
+
+precision mediump float;
+varying vec2 v_texcoord;
+uniform sampler2D tex;
+
+void main() {
+    vec4 pixColor = texture2D(tex, v_texcoord);
+    pixColor.rgb = 1.0 - pixColor.rgb;
+    gl_FragColor = pixColor;
+}
\ No newline at end of file
diff --git a/.config/hypr/shaders/solarized.frag b/.config/hypr/shaders/solarized.frag
new file mode 100644
index 0000000..1c37f2c
--- /dev/null
+++ b/.config/hypr/shaders/solarized.frag
@@ -0,0 +1,41 @@
+// -*- mode:c -*-
+precision lowp float;
+varying vec2 v_texcoord;
+uniform sampler2D tex;
+
+float distanceSquared(vec3 pixColor, vec3 solarizedColor) {
+	vec3 distanceVector = pixColor - solarizedColor;
+	return dot(distanceVector, distanceVector);
+}
+
+void main() {
+	vec3 solarized[16];
+	solarized[0]  = vec3(0.,0.169,0.212);
+	solarized[1]  = vec3(0.027,0.212,0.259);
+	solarized[2]  = vec3(0.345,0.431,0.459);
+	solarized[3]  = vec3(0.396,0.482,0.514);
+	solarized[4]  = vec3(0.514,0.58,0.588);
+	solarized[5]  = vec3(0.576,0.631,0.631);
+	solarized[6]  = vec3(0.933,0.91,0.835);
+	solarized[7]  = vec3(0.992,0.965,0.89);
+	solarized[8]  = vec3(0.71,0.537,0.);
+	solarized[9]  = vec3(0.796,0.294,0.086);
+	solarized[10] = vec3(0.863,0.196,0.184);
+	solarized[11] = vec3(0.827,0.212,0.51);
+	solarized[12] = vec3(0.424,0.443,0.769);
+	solarized[13] = vec3(0.149,0.545,0.824);
+	solarized[14] = vec3(0.165,0.631,0.596);
+	solarized[15] = vec3(0.522,0.6,0.);
+
+	vec3 pixColor = vec3(texture2D(tex, v_texcoord));
+	int closest = 0;
+	float closestDistanceSquared = distanceSquared(pixColor, solarized[0]);
+	for (int i = 1; i < 15; i++) {
+		float newDistanceSquared = distanceSquared(pixColor, solarized[i]);
+		if (newDistanceSquared < closestDistanceSquared) {
+			closest = i;
+			closestDistanceSquared = newDistanceSquared;
+		}
+	}
+	gl_FragColor = vec4(solarized[closest], 1.);
+}
-- 
cgit v1.2.3-70-g09d2