Will make an issue for creating a nushell script that automatically patches new data into the repository.
+118
-594
Diff
round #0
+31
-68
config/hypr/hyprland.conf
+31
-68
config/hypr/hyprland.conf
···
1
-
2
-
# #######################################################################################
3
-
# AUTOGENERATED HYPRLAND CONFIG.
4
-
# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hyprland.conf AND EDIT IT,
5
-
# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
6
-
# #######################################################################################
7
-
8
-
autogenerated = 0 # remove this line to remove the warning
9
-
10
-
# This is an example Hyprland config file.
11
-
# Refer to the wiki for more information.
12
-
# https://wiki.hyprland.org/Configuring/
13
-
14
-
# Please note not all available settings / options are set here.
15
-
# For a full list, see the wiki
16
-
17
-
# You can split this configuration into multiple files
18
-
# Create your files separately and then link them to this file like this:
19
-
# source = ~/.config/hypr/myColors.conf
20
-
21
-
22
1
################
23
2
### MONITORS ###
24
3
################
···
32
11
###################
33
12
34
13
# See https://wiki.hyprland.org/Configuring/Keywords/
35
-
36
-
# Set programs that you use
37
14
$terminal = kgx
38
15
$fileManager = nautilus
39
16
$menu = wofi --show drun
···
43
20
### AUTOSTART ###
44
21
#################
45
22
46
-
# Autostart necessary processes (like notifications daemons, status bars, etc.)
47
-
# Or execute your favorite apps at launch like this:
48
-
49
-
# exec-once = $terminal
50
-
# exec-once = nm-applet &
51
-
exec-once = waybar & hyprpaper # hyprpanel & hyprpaper # waybar & hyprpaper
23
+
exec-once = discord & ironbar & hyprpaper & hyprsunset # waybar is the old top-bar
52
24
53
25
54
26
#############################
···
86
58
87
59
# https://wiki.hyprland.org/Configuring/Variables/#general
88
60
general {
89
-
gaps_in = 5
90
-
gaps_out = 10
61
+
gaps_in = 3 # 5
62
+
gaps_out = 6 # 10
91
63
92
64
border_size = 2
93
65
···
183
155
184
156
# https://wiki.hyprland.org/Configuring/Variables/#misc
185
157
misc {
186
-
force_default_wallpaper = 1 # Set to 0 or 1 to disable the anime mascot wallpapers
158
+
force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
187
159
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
188
160
}
189
161
···
209
181
}
210
182
}
211
183
212
-
# https://wiki.hyprland.org/Configuring/Variables/#gestures
213
-
gestures {
214
-
workspace_swipe = false
215
-
}
216
-
217
184
# Example per-device config
218
185
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
219
186
device {
···
227
194
###################
228
195
229
196
# See https://wiki.hyprland.org/Configuring/Keywords/
230
-
$mainMod = SUPER # Sets "Windows" key as main modifier
197
+
$mainMod = SUPER # Sets "Super" key as main modifier
231
198
232
199
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
200
+
bind = $mainMod, A, exec, $menu
201
+
bind = $mainMod, C, exec, cinny
202
+
bind = $mainMod, D, exec, discord
203
+
bind = $mainMod, E, exec, $fileManager
204
+
bind = $mainMod, F, exec, feishin
205
+
bind = $mainMod SHIFT, F, exec, fladder
206
+
bind = $mainMod, H, exec, helium
207
+
bind = $mainMod, L, exec, hyprlock
208
+
bind = $mainMod, M, exec, minecraft-launcher
209
+
bind = $mainMod, O, exec, obsidian
210
+
bind = $mainMod, P, pseudo, # dwindle
211
+
bind = $mainMod, Q, killactive,
212
+
bind = $mainMod, R, exec, revolt
213
+
bind = $mainMod SHIFT, R, exec, root
214
+
bind = $mainMod SHIFT, S, exec, hyprshot -m region -c -s -o ~/Pictures/Screenshots
215
+
bind = Alt+SHIFT, S, exec, hyprshot -zm region -o ~/Pictures/Screenshots -- pinta
216
+
bind = $mainMod, S, exec, steam
217
+
bind = $mainMod Alt, S, exec, signal-desktop --password-store="gnome-libsecret"
233
218
bind = $mainMod, T, exec, $terminal
234
-
bind = $mainMod, Q, killactive,
219
+
bind = $mainMod, V, exec, via
220
+
# bind = $mainMod, V, togglefloating,
235
221
bind = $mainMod, Z, exec, zen
236
-
bind = $mainMod, D, exec, discord
237
-
bind = $mainMod, M, exec, minecraft-launcher
238
-
bind = $mainMod, L, exec, hyprlock
239
222
bind = Ctrl+Alt, Backspace, exit,
240
223
bind = Ctrl+SHIFT+Alt, Backspace, exec, poweroff
241
-
bind = $mainMod SHIFT, S, exec, hyprshot -zm region -o ~/Pictures/Screenshots
242
-
bind = $mainMod, S, exec, steam
243
-
bind = $mainMod, E, exec, $fileManager
244
-
bind = $mainMod, V, togglefloating,
245
-
bind = $mainMod, R, exec, revolt
246
-
bind = $mainMod, P, pseudo, # dwindle
247
-
bind = $mainMod, J, togglesplit, # dwindle
224
+
bind = , F11, fullscreen,
248
225
249
226
# Move focus with mainMod + arrow keys
250
227
bind = $mainMod, left, movefocus, l
···
276
253
bind = $mainMod SHIFT, 9, movetoworkspace, 9
277
254
bind = $mainMod SHIFT, 0, movetoworkspace, 10
278
255
279
-
# Example special workspace (scratchpad)
280
-
# bind = $mainMod, S, togglespecialworkspace, magic
281
-
# bind = $mainMod SHIFT, S, movetoworkspace, special:magic
256
+
# Change position of currently active window
257
+
bind = $mainMod SHIFT, left, movewindow, l
258
+
bind = $mainMod SHIFT, right, movewindow, r
259
+
bind = $mainMod SHIFT, up, movewindow, u
260
+
bind = $mainMod SHIFT, down, movewindow, d
282
261
283
262
# Scroll through existing workspaces with mainMod + scroll
284
263
bind = $mainMod, mouse_down, workspace, e+1
···
301
280
bindl = , XF86AudioPause, exec, playerctl play-pause
302
281
bindl = , XF86AudioPlay, exec, playerctl play-pause
303
282
bindl = , XF86AudioPrev, exec, playerctl previous
304
-
305
-
##############################
306
-
### WINDOWS AND WORKSPACES ###
307
-
##############################
308
-
309
-
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
310
-
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
311
-
312
-
# Example windowrule
313
-
# windowrule = float,class:^(kitty)$,title:^(kitty)$
314
-
315
-
# Ignore maximize requests from apps. You'll probably like this.
316
-
windowrule = suppressevent maximize, class:.*
317
-
318
-
# Fix some dragging issues with XWayland
319
-
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
+27
-28
config/hypr/hyprlock.conf
+27
-28
config/hypr/hyprlock.conf
···
2
2
$entry_background_color = rgba(1E006011)
3
3
$entry_border_color = rgba(938E9F55)
4
4
$entry_color = rgba(E7DEFFFF)
5
-
$font_family = Rubik Light
6
-
$font_family_clock = Rubik Light
7
-
$font_material_symbols = Material Symbols Rounded
5
+
$font_family = Maple Mono NF
6
+
$font_family_clock = Maple Mono NF
7
+
$font_material_symbols = Maple Mono NF
8
8
9
9
background {
10
-
color = rgba(181818FF)
11
-
# path = {{ SWWW_WALL }}
12
-
10
+
# color = rgba(181818FF)
13
11
# path = screenshot
14
-
# blur_size = 15
15
-
# blur_passes = 4
12
+
path = /opt/backgrounds/orion_nebula_nasa_heic0601a.jpg
13
+
blur_size = 15
14
+
blur_passes = 4
16
15
}
17
16
input-field {
18
17
monitor =
···
23
22
outer_color = $entry_border_color
24
23
inner_color = $entry_background_color
25
24
font_color = $entry_color
25
+
font_family = $font_family
26
26
fade_on_empty = true
27
-
27
+
fail_color = rgba(fc4e59ff)
28
+
fail_text = <i><b>$FAIL ($ATTEMPTS)</b></i>
29
+
placeholder_text = <i><b>Enter Password...</b></i>
28
30
position = 0, 20
29
31
halign = center
30
32
valign = center
···
47
49
color = $text_color
48
50
font_size = 65
49
51
font_family = $font_family_clock
50
-
51
52
position = 0, 300
52
53
halign = center
53
54
valign = center
···
58
59
color = $text_color
59
60
font_size = 17
60
61
font_family = $font_family
61
-
62
62
position = 0, 240
63
63
halign = center
64
64
valign = center
65
65
}
66
66
67
-
label { # User
68
-
monitor =
69
-
text = ๏พ $USER
70
-
color = $text_color
71
-
shadow_passes = 1
72
-
shadow_boost = 0.35
73
-
outline_thickness = 2
74
-
dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
75
-
dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
76
-
dots_center = true
77
-
font_size = 20
78
-
font_family = $font_family
79
-
position = 0, 50
80
-
halign = center
81
-
valign = bottom
82
-
}
67
+
# label { # User
68
+
# monitor =
69
+
# text = $USER
70
+
# color = $text_color
71
+
# shadow_passes = 1
72
+
# shadow_boost = 0.35
73
+
# outline_thickness = 2
74
+
# dots_size = 0.2 # Scale of input-field height, 0.2 - 0.8
75
+
# dots_spacing = 0.2 # Scale of dots' absolute size, 0.0 - 1.0
76
+
# dots_center = true
77
+
# font_size = 20
78
+
# font_family = $font_family
79
+
# position = 0, 50
80
+
# halign = center
81
+
# valign = bottom
82
+
# }
83
83
84
84
label { # Status
85
85
monitor =
···
87
87
color = $text_color
88
88
font_size = 14
89
89
font_family = $font_family
90
-
91
90
position = 30, -30
92
91
halign = left
93
92
valign = top
+5
-2
config/hypr/hyprpaper.conf
+5
-2
config/hypr/hyprpaper.conf
+52
-494
config/hypr/shaders/crt.frag
+52
-494
config/hypr/shaders/crt.frag
···
1
-
#version 100
2
-
precision highp float;
3
-
varying highp vec2 v_texcoord;
4
-
varying highp vec3 v_pos;
5
-
uniform highp sampler2D tex;
6
-
uniform lowp float time;
7
-
8
-
#define BORDER_COLOR vec4(vec3(0.0, 0.0, 0.0), 1.0) // black border
9
-
#define BORDER_RADIUS 1.0 // larger vignette radius
10
-
#define BORDER_SIZE 0.01 // small border size
11
-
#define CHROMATIC_ABERRATION_STRENGTH 0.00
12
-
#define DENOISE_INTENSITY 0.0001 //
13
-
#define DISTORTION_AMOUNT 0.00 // moderate distortion amount
14
-
#define HDR_BLOOM 0.75 // bloom intensity
15
-
#define HDR_BRIGHTNESS 0.011 // brightness
16
-
#define HDR_CONTRAST 0.011 // contrast
17
-
#define HDR_SATURATION 1.0// saturation
18
-
#define LENS_DISTORTION_AMOUNT 0.0
19
-
#define NOISE_THRESHOLD 0.0001
20
-
#define PHOSPHOR_BLUR_AMOUNT 0.77 // Amount of blur for phosphor glow
21
-
#define PHOSPHOR_GLOW_AMOUNT 0.77 // Amount of phosphor glow
22
-
#define SAMPLING_RADIUS 0.0001
23
-
#define SCANLINE_FREQUENCY 540.0
24
-
#define SCANLINE_THICKNESS 0.0507
25
-
#define SCANLINE_TIME time * 471.24
26
-
#define SHARPNESS 0.25
27
-
#define SUPERSAMPLING_SAMPLES 16.0
28
-
#define VIGNETTE_RADIUS 0.0 // larger vignette radius
29
-
#define PI 3.14159265359
30
-
#define TWOPI 6.28318530718
31
-
32
-
vec2 applyBarrelDistortion(vec2 coord, float amt) {
33
-
vec2 p = coord.xy / vec2(1.0);
34
-
vec2 v = p * 2.0 - vec2(1.0);
35
-
float r = dot(v, v);
36
-
float k = 1.0 + pow(r, 2.0) * pow(amt, 2.0);
37
-
vec2 result = v * k;
38
-
return vec2(0.5, 0.5) + 0.5 * result.xy;
39
-
}
40
-
41
-
vec4 applyColorCorrection(vec4 color) {
42
-
color.rgb *= vec3(1.0, 0.79, 0.89);
43
-
return vec4(color.rgb, 1.0);
44
-
}
45
-
46
-
vec4 applyBorder(vec2 tc, vec4 color, float borderSize, vec4 borderColor) {
47
-
float dist_x = min(tc.x, 1.0 - tc.x);
48
-
float dist_y = min(tc.y, 1.0 - tc.y);
49
-
float dist = min(dist_x, dist_y) * -1.0;
50
-
float border = smoothstep(borderSize, 0.0, dist);
51
-
border += smoothstep(borderSize, 0.0, dist);
52
-
return mix(color, borderColor, border);
53
-
}
54
-
55
-
vec4 applyFakeHDR(vec4 color, float brightness, float contrast, float saturation, float bloom) {
56
-
color.rgb = (color.rgb - vec3(0.5)) * exp2(brightness) + vec3(0.5);
57
-
vec3 crtfactor = vec3(1.05, 0.92, 1.0);
58
-
color.rgb = pow(color.rgb, crtfactor);
59
-
// // NTSC
60
-
// vec3 lumCoeff = vec3(0.2125, 0.7154, 0.0721);
61
-
62
-
// // BT.709
63
-
// vec3 lumCoeff = vec3(0.299, 0.587, 0.114);
64
-
65
-
// BT.2020
66
-
vec3 lumCoeff = vec3(0.2627, 0.6780, 0.0593);
67
-
68
-
// // Warm NTSC
69
-
// vec3 lumCoeff = vec3(0.2125, 0.7010, 0.0865);
70
-
71
-
float luminance = dot(color.rgb, lumCoeff);
72
-
luminance = pow(luminance, 2.2);
73
-
color.rgb = mix(vec3(luminance), color.rgb, saturation);
74
-
color.rgb = mix(color.rgb, vec3(1.0), pow(max(0.0, luminance - 1.0 + bloom), 4.0));
75
-
return color;
76
-
}
77
-
78
-
vec4 applyVignette(vec4 color) {
79
-
vec2 center = vec2(0.5, 0.5); // center of screen
80
-
float radius = VIGNETTE_RADIUS; // radius of vignette effect
81
-
float softness = 1.0; // softness of vignette effect
82
-
float intensity = 0.7; // intensity of vignette effect
83
-
vec2 offset = v_texcoord - center; // offset from center of screen
84
-
float distance = length(offset); // distance from center of screen
85
-
float alpha = smoothstep(radius, radius - radius * softness, distance) * intensity; // calculate alpha value for vignette effect
86
-
return mix(vec4(0.0, 0.0, 0.0, alpha), color, alpha); // mix black with color using calculated alpha value
87
-
}
88
-
89
-
vec4 applyPhosphorGlow(vec2 tc, vec4 color, sampler2D tex) {
90
-
// Calculate average color value of the texture
91
-
vec4 texelColor = color;
92
-
float averageColor = (texelColor.r + texelColor.g + texelColor.b) / 3.0;
93
-
94
-
// Determine brightness-dependent color factor
95
-
float factor = mix(
96
-
mix(0.09,
97
-
mix(0.005, 0.0075, (averageColor - 0.1) / 0.1),
98
-
step(0.01, averageColor)), 0.0005,
99
-
step(0.02, averageColor));
100
-
// Apply phosphor glow effect
101
-
vec4 sum = vec4(0.0);
102
-
vec4 pixels[9];
103
-
pixels[0] = texture2D(tex, tc - vec2(0.001, 0.001));
104
-
pixels[1] = texture2D(tex, tc - vec2(0.001, 0.0));
105
-
pixels[2] = texture2D(tex, tc - vec2(0.001, -0.001));
106
-
pixels[3] = texture2D(tex, tc - vec2(0.0, 0.001));
107
-
pixels[4] = texture2D(tex, tc);
108
-
pixels[5] = texture2D(tex, tc + vec2(0.001, 0.001));
109
-
pixels[6] = texture2D(tex, tc + vec2(0.001, 0.0));
110
-
pixels[7] = texture2D(tex, tc + vec2(0.001, -0.001));
111
-
pixels[8] = texture2D(tex, tc + vec2(0.0, 0.001));
112
-
113
-
// Perform operations on input pixels in parallel
114
-
sum = pixels[0]
115
-
+ pixels[1]
116
-
+ pixels[2]
117
-
+ pixels[3]
118
-
+ pixels[4]
119
-
+ pixels[5]
120
-
+ pixels[6]
121
-
+ pixels[7]
122
-
+ pixels[8];
123
-
sum /= 9.0;
124
-
sum += texture2D(tex, tc - vec2(0.01, 0.01)) * 0.001;
125
-
sum += texture2D(tex, tc - vec2(0.0, 0.01)) * 0.001;
126
-
sum += texture2D(tex, tc - vec2(-0.01, 0.01)) * 0.001;
127
-
sum += texture2D(tex, tc - vec2(0.01, 0.0)) * 0.001;
128
-
sum += color * PHOSPHOR_BLUR_AMOUNT;
129
-
sum += texture2D(tex, tc - vec2(-0.01, 0.0)) * 0.001;
130
-
sum += texture2D(tex, tc - vec2(0.01, -0.01)) * 0.001;
131
-
sum += texture2D(tex, tc - vec2(0.0, -0.01)) * 0.001;
132
-
sum += texture2D(tex, tc - vec2(-0.01, -0.01)) * 0.001;
133
-
sum *= PHOSPHOR_GLOW_AMOUNT;
134
-
135
-
// Initialize sum_sum_factor to zero
136
-
vec4 sum_sum_factor = vec4(0.0);
137
-
// Compute sum_j for i = -1
138
-
vec4 sum_j = vec4(0.0);
139
-
sum_j += texture2D(tex, tc + vec2(-1, -1) * 0.01);
140
-
sum_j += texture2D(tex, tc + vec2(0, -1) * 0.01);
141
-
sum_j += texture2D(tex, tc + vec2(1, -1) * 0.01);
142
-
sum_j += texture2D(tex, tc + vec2(-1, 0) * 0.01);
143
-
sum_j += texture2D(tex, tc + vec2(0, 0) * 0.01);
144
-
sum_j += texture2D(tex, tc + vec2(1, 0) * 0.01);
145
-
sum_j += texture2D(tex, tc + vec2(-1, 1) * 0.01);
146
-
sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
147
-
sum_j += texture2D(tex, tc + vec2(1, 1) * 0.01);
148
-
sum_sum_factor += sum_j * vec4(0.011);
149
-
150
-
// Compute sum_j for i = 0
151
-
sum_j = vec4(0.0);
152
-
sum_j += texture2D(tex, tc + vec2(-1, 0) * 0.01);
153
-
sum_j += texture2D(tex, tc + vec2(0, 0) * 0.01);
154
-
sum_j += texture2D(tex, tc + vec2(1, 0) * 0.01);
155
-
sum_j += texture2D(tex, tc + vec2(-1, 1) * 0.01);
156
-
sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
157
-
sum_j += texture2D(tex, tc + vec2(1, 1) * 0.01);
158
-
sum_sum_factor += sum_j * vec4(0.011);
159
-
160
-
// Compute sum_j for i = 1
161
-
sum_j = vec4(0.0);
162
-
sum_j += texture2D(tex, tc + vec2(-1, 0) * 0.01);
163
-
sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
164
-
sum_j += texture2D(tex, tc + vec2(1, 0) * 0.01);
165
-
sum_j += texture2D(tex, tc + vec2(-1, 1) * 0.01);
166
-
sum_j += texture2D(tex, tc + vec2(0, 1) * 0.01);
167
-
sum_j += texture2D(tex, tc + vec2(1, 1) * 0.01);
168
-
sum_sum_factor += sum_j * vec4(0.011);
169
-
color += mix(sum_sum_factor * sum_sum_factor * vec4(factor), sum, 0.5);
170
-
return color;
171
-
}
172
-
173
-
vec4 applyAdaptiveSharpen(vec2 tc, vec4 color, sampler2D tex) {
174
-
vec4 color_tl = texture2D(tex, tc + vec2(-1.0, -1.0) * 0.5 / 2160.0);
175
-
vec4 color_tr = texture2D(tex, tc + vec2(1.0, -1.0) * 0.5 / 2160.0);
176
-
vec4 color_bl = texture2D(tex, tc + vec2(-1.0, 1.0) * 0.5 / 2160.0);
177
-
vec4 color_br = texture2D(tex, tc + vec2(1.0, 1.0) * 0.5 / 2160.0);
178
-
float sharpness = SHARPNESS;
179
-
vec3 color_no_alpha = color.rgb;
180
-
vec3 color_tl_no_alpha = color_tl.rgb;
181
-
vec3 color_tr_no_alpha = color_tr.rgb;
182
-
vec3 color_bl_no_alpha = color_bl.rgb;
183
-
vec3 color_br_no_alpha = color_br.rgb;
184
-
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));
185
-
vec3 sharp_color_no_alpha = color_no_alpha + min(vec3(0.0), vec3(delta * sharpness));
186
-
vec4 sharp_color = vec4(sharp_color_no_alpha, color.a);
187
-
return sharp_color;
188
-
}
189
-
190
-
vec4 applyScanlines(vec2 tc, vec4 color) {
191
-
float scanline = (cos(tc.y * SCANLINE_FREQUENCY + SCANLINE_TIME) *
192
-
sin(tc.y * SCANLINE_FREQUENCY + SCANLINE_TIME)) * SCANLINE_THICKNESS;
193
-
float alpha = clamp(1.0 - abs(scanline), 0.0, 1.0);
194
-
return vec4(color.rgb * alpha, color.a);
195
-
}
196
-
197
-
vec4 applyChromaticAberration(vec2 uv, vec4 color) {
198
-
vec2 center = vec2(0.5, 0.5); // center of the screen
199
-
vec2 offset = (uv - center) * CHROMATIC_ABERRATION_STRENGTH; // calculate the offset from the center
200
-
201
-
// apply lens distortion
202
-
float rSquared = dot(offset, offset);
203
-
float distortion = 1.0 + LENS_DISTORTION_AMOUNT * rSquared;
204
-
vec2 distortedOffset = offset * distortion;
205
-
206
-
// apply chromatic aberration
207
-
vec2 redOffset = vec2(distortedOffset.x * 1.00, distortedOffset.y * 1.00);
208
-
vec2 blueOffset = vec2(distortedOffset.x * 1.00, distortedOffset.y * 1.00);
209
-
210
-
vec4 redColor = texture2D(tex, uv + redOffset);
211
-
vec4 blueColor = texture2D(tex, uv + blueOffset);
212
-
213
-
vec4 result = vec4(redColor.r, color.g, blueColor.b, color.a);
214
-
215
-
return result;
216
-
}
217
-
218
-
vec4 reduceGlare(vec4 color) {
219
-
// Calculate the intensity of the color by taking the average of the RGB components
220
-
float intensity = (color.r + color.g + color.b) / 3.0;
221
-
// Set the maximum intensity that can be considered for glare
222
-
float maxIntensity = 0.98;
223
-
// Use smoothstep to create a smooth transition from no glare to full glare
224
-
// based on the intensity of the color and the maximum intensity
225
-
float glareIntensity = smoothstep(maxIntensity - 0.02, maxIntensity, intensity);
226
-
// Set the amount of glare to apply to the color
227
-
float glareAmount = 0.02;
228
-
// Mix the original color with the reduced color that has glare applied to it
229
-
vec3 reducedColor = mix(color.rgb, vec3(glareIntensity), glareAmount);
230
-
// Return the reduced color with the original alpha value
231
-
return vec4(reducedColor, color.a);
232
-
}
233
-
234
-
// Apply a fake HDR effect to the input color.
235
-
// Parameters:
236
-
// - inputColor: the color to apply the effect to.
237
-
// - brightness: the brightness of the image. Should be a value between 0 and 1.
238
-
// - contrast: the contrast of the image. Should be a value between 0 and 1.
239
-
// - saturation: the saturation of the image. Should be a value between 0 and 2.
240
-
// - bloom: the intensity of the bloom effect. Should be a value between 0 and 1.
241
-
vec4 applyFakeHDREffect(vec4 inputColor, float brightness, float contrast, float saturation, float bloom) {
242
-
const float minBrightness = 0.0;
243
-
const float maxBrightness = 1.0;
244
-
const float minContrast = 0.0;
245
-
const float maxContrast = 1.0;
246
-
const float minSaturation = 0.0;
247
-
const float maxSaturation = 2.0;
248
-
const float minBloom = 0.0;
249
-
const float maxBloom = 1.0;
250
-
251
-
// Check input parameters for validity
252
-
if (brightness < minBrightness || brightness > maxBrightness) {
253
-
return vec4(0.0, 0.0, 0.0, 1.0); // Return black with alpha of 1.0 to indicate error
254
-
}
255
-
if (contrast < minContrast || contrast > maxContrast) {
256
-
return vec4(0.0, 0.0, 0.0, 1.0);
257
-
}
258
-
if (saturation < minSaturation || saturation > maxSaturation) {
259
-
return vec4(0.0, 0.0, 0.0, 1.0);
260
-
}
261
-
if (bloom < minBloom || bloom > maxBloom) {
262
-
return vec4(0.0, 0.0, 0.0, 1.0);
263
-
}
264
-
265
-
// Apply brightness and contrast
266
-
vec3 color = inputColor.rgb;
267
-
color = (color - vec3(0.5)) * exp2(brightness * 10.0) + vec3(0.5);
268
-
color = mix(vec3(0.5), color, pow(contrast * 4.0 + 1.0, 2.0));
269
-
270
-
// // NTSC
271
-
// vec3 lumCoeff = vec3(0.2125, 0.7154, 0.0721);
272
-
273
-
// // BT.709
274
-
// vec3 lumCoeff = vec3(0.299, 0.587, 0.114);
275
-
276
-
// // BT.2020
277
-
// vec3 lumCoeff = vec3(0.2627, 0.6780, 0.0593);
278
-
279
-
// Warm NTSC
280
-
vec3 lumCoeff = vec3(0.2125, 0.7010, 0.0865);
1
+
#version 300 es
2
+
precision mediump float;
281
3
282
-
// Apply saturation
283
-
float luminance = dot(color, lumCoeff);
284
-
vec3 grey = vec3(luminance);
285
-
color = mix(grey, color, saturation);
4
+
in vec2 v_texcoord;
5
+
uniform sampler2D tex;
6
+
uniform float time;
7
+
out vec4 fragColor;
286
8
287
-
// Apply bloom effect
288
-
float threshold = 1.0 - bloom;
289
-
vec3 bloomColor = max(color - threshold, vec3(0.0));
290
-
bloomColor = pow(bloomColor, vec3(2.0));
291
-
bloomColor = mix(vec3(0.0), bloomColor, pow(min(luminance, threshold), 4.0));
292
-
color += bloomColor;
293
-
294
-
return vec4(color, inputColor.a);
295
-
}
296
-
297
-
vec4 bilateralFilter(sampler2D tex, vec2 uv, vec4 color, float sampleRadius, float noiseThreshold, float intensity) {
298
-
vec4 filteredColor = vec4(0.0);
299
-
float totalWeight = 0.0;
300
-
301
-
// Top-left pixel
302
-
vec4 sample = texture2D(tex, uv + vec2(-1.0, -1.0));
303
-
float dist = length(vec2(-1.0, -1.0));
304
-
float colorDist = length(sample - color);
305
-
float weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
306
-
filteredColor += sample * weight;
307
-
totalWeight += weight;
308
-
309
-
// Top pixel
310
-
sample = texture2D(tex, uv + vec2(0.0, -1.0));
311
-
dist = length(vec2(0.0, -1.0));
312
-
colorDist = length(sample - color);
313
-
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
314
-
filteredColor += sample * weight;
315
-
totalWeight += weight;
316
-
317
-
// Top-right pixel
318
-
sample = texture2D(tex, uv + vec2(1.0, -1.0));
319
-
dist = length(vec2(1.0, -1.0));
320
-
colorDist = length(sample - color);
321
-
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
322
-
filteredColor += sample * weight;
323
-
totalWeight += weight;
324
-
325
-
// Left pixel
326
-
sample = texture2D(tex, uv + vec2(-1.0, 0.0));
327
-
dist = length(vec2(-1.0, 0.0));
328
-
colorDist = length(sample - color);
329
-
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
330
-
filteredColor += sample * weight;
331
-
totalWeight += weight;
332
-
333
-
// Center pixel
334
-
sample = texture2D(tex, uv);
335
-
dist = 0.0;
336
-
colorDist = length(sample - color);
337
-
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
338
-
filteredColor += sample * weight;
339
-
totalWeight += weight;
340
-
341
-
// Right pixel
342
-
sample = texture2D(tex, uv + vec2(1.0, 0.0));
343
-
dist = length(vec2(1.0, 0.0));
344
-
colorDist = length(sample - color);
345
-
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
346
-
filteredColor += sample * weight;
347
-
totalWeight += weight;
348
-
349
-
// Bottom-left pixel
350
-
sample = texture2D(tex, uv + vec2(-1.0, 1.0));
351
-
dist = length(vec2(-1.0, 1.0));
352
-
colorDist = length(sample - color);
353
-
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
354
-
filteredColor += sample * weight;
355
-
totalWeight += weight;
356
-
357
-
// Bottom pixel
358
-
sample = texture2D(tex, uv + vec2(0.0, sampleRadius));
359
-
dist = length(vec2(0.0, sampleRadius));
360
-
colorDist = length(sample - color);
361
-
weight = exp(-0.5 * (dist * dist + colorDist * colorDist * intensity) / (sampleRadius * sampleRadius));
362
-
filteredColor += sample * weight;
363
-
totalWeight += weight;
364
-
365
-
filteredColor /= totalWeight;
366
-
return mix(color, filteredColor, step(noiseThreshold, length(filteredColor - color)));
367
-
}
368
-
369
-
vec4 supersample(sampler2D tex, vec2 uv, float sampleRadius, float noiseThreshold, float intensity) {
370
-
float radiusSq = sampleRadius * sampleRadius;
371
-
vec2 poissonDisk;
372
-
vec4 color = vec4(0.0);
373
-
374
-
float r1_0 = sqrt(0.0 / 16.0);
375
-
float r2_0 = fract(1.0 / 3.0);
376
-
float theta_0 = TWOPI * r2_0;
377
-
poissonDisk = vec2(r1_0 * cos(theta_0), r1_0 * sin(theta_0));
378
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
379
-
380
-
float r1_1 = sqrt(1.0 / 16.0);
381
-
float r2_1 = fract(2.0 / 3.0);
382
-
float theta_1 = TWOPI * r2_1;
383
-
poissonDisk = vec2(r1_1 * cos(theta_1), r1_1 * sin(theta_1));
384
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
385
-
386
-
float r1_2 = sqrt(2.0 / 16.0);
387
-
float r2_2 = fract(3.0 / 3.0);
388
-
float theta_2 = TWOPI * r2_2;
389
-
poissonDisk = vec2(r1_2 * cos(theta_2), r1_2 * sin(theta_2));
390
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
391
-
392
-
float r1_3 = sqrt(3.0 / 16.0);
393
-
float r2_3 = fract(4.0 / 3.0);
394
-
float theta_3 = TWOPI * r2_3;
395
-
poissonDisk = vec2(r1_3 * cos(theta_3), r1_3 * sin(theta_3));
396
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
397
-
398
-
float r1_4 = sqrt(4.0 / 16.0);
399
-
float r2_4 = fract(5.0 / 3.0);
400
-
float theta_4 = TWOPI * r2_4;
401
-
poissonDisk = vec2(r1_4 * cos(theta_4), r1_4 * sin(theta_4));
402
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
403
-
404
-
float r1_5 = sqrt(5.0 / 16.0);
405
-
float r2_5 = fract(6.0 / 3.0);
406
-
float theta_5 = TWOPI * r2_5;
407
-
poissonDisk = vec2(r1_5 * cos(theta_5), r1_5 * sin(theta_5));
408
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
409
-
410
-
float r1_6 = sqrt(6.0 / 16.0);
411
-
float r2_6 = fract(7.0 / 3.0);
412
-
float theta_6 = TWOPI * r2_6;
413
-
poissonDisk = vec2(r1_6 * cos(theta_6), r1_6 * sin(theta_6));
414
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
415
-
416
-
float r1_7 = sqrt(7.0 / 16.0);
417
-
float r2_7 = fract(8.0 / 3.0);
418
-
float theta_7 = TWOPI * r2_7;
419
-
poissonDisk = vec2(r1_7 * cos(theta_7), r1_7 * sin(theta_7));
420
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
421
-
422
-
float r1_8 = sqrt(8.0 / 16.0);
423
-
float r2_8 = fract(9.0 / 3.0);
424
-
float theta_8 = TWOPI * r2_8;
425
-
poissonDisk = vec2(r1_8 * cos(theta_8), r1_8 * sin(theta_8));
426
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
427
-
428
-
float r1_9 = sqrt(9.0 / 16.0);
429
-
float r2_9 = fract(10.0 / 3.0);
430
-
float theta_9 = TWOPI * r2_9;
431
-
poissonDisk = vec2(r1_9 * cos(theta_9), r1_9 * sin(theta_9));
432
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
433
-
434
-
float r1_10 = sqrt(10.0 / 16.0);
435
-
float r2_10 = fract(11.0 / 3.0);
436
-
float theta_10 = TWOPI * r2_10;
437
-
poissonDisk = vec2(r1_10 * cos(theta_10), r1_10 * sin(theta_10));
438
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
439
-
440
-
float r1_11 = sqrt(11.0 / 16.0);
441
-
float r2_11 = fract(12.0 / 3.0);
442
-
float theta_11 = TWOPI * r2_11;
443
-
poissonDisk = vec2(r1_11 * cos(theta_11), r1_11 * sin(theta_11));
444
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
445
-
446
-
float r1_12 = sqrt(12.0 / 16.0);
447
-
float r2_12 = fract(13.0 / 3.0);
448
-
float theta_12 = TWOPI * r2_12;
449
-
poissonDisk = vec2(r1_12 * cos(theta_12), r1_12 * sin(theta_12));
450
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
451
-
452
-
float r1_13 = sqrt(13.0 / 16.0);
453
-
float r2_13 = fract(14.0 / 3.0);
454
-
float theta_13 = TWOPI * r2_13;
455
-
poissonDisk = vec2(r1_13 * cos(theta_13), r1_13 * sin(theta_13));
456
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
457
-
458
-
float r1_14 = sqrt(14.0 / 16.0);
459
-
float r2_14 = fract(15.0 / 3.0);
460
-
float theta_14 = TWOPI * r2_14;
461
-
poissonDisk = vec2(r1_14 * cos(theta_14), r1_14 * sin(theta_14));
462
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
463
-
464
-
float r1_15 = sqrt(15.0 / 16.0);
465
-
float r2_15 = fract(16.0 / 3.0);
466
-
float theta_15 = TWOPI * r2_15;
467
-
poissonDisk = vec2(r1_15 * cos(theta_15), r1_15 * sin(theta_15));
468
-
color += texture2D(tex, uv + poissonDisk * sampleRadius);
469
-
470
-
return bilateralFilter(tex, uv, color, sampleRadius, noiseThreshold, intensity);
471
-
}
472
9
void main() {
473
-
vec2 tc_no_dist = v_texcoord;
474
-
475
-
vec2 tc = applyBarrelDistortion(tc_no_dist, DISTORTION_AMOUNT);
10
+
vec2 tc = vec2(v_texcoord.x, v_texcoord.y);
476
11
477
-
// [-1, 1]
478
-
vec2 tc_no_dist_symmetric = tc_no_dist * 2.0 - 1.0;
12
+
// Distance from the center
13
+
float dx = abs(0.5 - tc.x);
14
+
float dy = abs(0.5 - tc.y);
479
15
480
-
// [0,1]
481
-
vec2 tc_no_dist_normalized = (tc_no_dist_symmetric + 1.0) / 2.0;
16
+
// Square it to smooth the edges
17
+
dx *= dx;
18
+
dy *= dy;
482
19
483
-
// vec4 color = texture2D(tex, tc);
484
-
vec4 color = supersample(tex, tc, SAMPLING_RADIUS, NOISE_THRESHOLD, DENOISE_INTENSITY);
485
-
486
-
color = applyAdaptiveSharpen(tc, color, tex);
487
-
488
-
color = applyPhosphorGlow(tc, color, tex);
20
+
tc.x -= 0.5;
21
+
tc.x *= 1.0 + (dy * 0.03);
22
+
tc.x += 0.5;
489
23
490
-
color = reduceGlare(color);
24
+
tc.y -= 0.5;
25
+
tc.y *= 1.0 + (dx * 0.03);
26
+
tc.y += 0.5;
491
27
492
-
color = mix(applyFakeHDREffect(color, HDR_BRIGHTNESS, HDR_CONTRAST, HDR_SATURATION, HDR_BLOOM), color, 0.5);
28
+
// Add RGB offset for retro color separation effect
29
+
vec2 r_tc = tc + vec2(0.0001, 0.001);
30
+
vec2 g_tc = tc;
31
+
vec2 b_tc = tc - vec2(0.0001, 0.001);
493
32
494
-
color = applyColorCorrection(color);
33
+
vec4 color;
34
+
color.r = texture(tex, r_tc).r;
35
+
color.g = texture(tex, g_tc).g;
36
+
color.b = texture(tex, b_tc).b;
37
+
color.a = 1.0;
495
38
496
-
color /= SUPERSAMPLING_SAMPLES;
39
+
// Add scanlines
40
+
float scanline = sin(tc.y * 2000.0) * 0.02;
41
+
color.rgb += scanline;
497
42
498
-
color = mix(applyChromaticAberration(tc, color), color, 0.25);
43
+
// Add noise
44
+
float noise = (fract(sin(dot(tc.xy, vec2(12.9898, 78.233))) * 43758.5453) - 0.5) * 0.04;
45
+
color.rgb += noise;
499
46
500
-
color = mix(color, applyVignette(color), 0.37);
47
+
// Apply vignette effect
48
+
float vignette = smoothstep(0.8, 0.2, dx + dy);
49
+
color.rgb *= vignette;
501
50
502
-
color = applyBorder(tc_no_dist_normalized, color, 1.0 - BORDER_SIZE * BORDER_RADIUS, BORDER_COLOR);
51
+
// Vertical CRT lines with reduced intensity
52
+
float lines = sin(tc.y * 40.0) * 0.02;
53
+
color.rgb *= 1.0 - lines;
503
54
504
-
color = mix(applyBorder(tc, color, BORDER_SIZE, BORDER_COLOR), color, 0.05);
55
+
// Apply retro orange color transformation
56
+
vec3 retroColor = vec3(
57
+
color.r * 1.0, // Boost the red channel
58
+
color.g * 1.0, // Keep the green channel as is
59
+
color.b * 1.0 // Reduce the blue channel
60
+
);
61
+
color.rgb = retroColor;
505
62
506
-
color = applyScanlines(tc, color);
63
+
// Cutoff
64
+
if (tc.y > 1.0 || tc.x < 0.0 || tc.x > 1.0 || tc.y < 0.0)
65
+
color = vec4(0.0);
507
66
508
-
gl_FragColor = color;
509
-
gl_FragColor.a = 1.0;
67
+
// Apply
68
+
fragColor = color;
510
69
}
511
-
+1
config/ironbar/config.toml
+1
config/ironbar/config.toml
+1
-1
config/ironbar/style.css
+1
-1
config/ironbar/style.css
screenshots/hyprland/applications.png
screenshots/hyprland/applications.png
This is a binary file and will not be displayed.
screenshots/hyprland/idle.png
screenshots/hyprland/idle.png
This is a binary file and will not be displayed.
screenshots/hyprlock/idle.png
screenshots/hyprlock/idle.png
This is a binary file and will not be displayed.
screenshots/hyprlock/password-incorrect.png
screenshots/hyprlock/password-incorrect.png
This is a binary file and will not be displayed.
screenshots/hyprlock/password-input.png
screenshots/hyprlock/password-input.png
This is a binary file and will not be displayed.
screenshots/hyprlock/password-prompt.png
screenshots/hyprlock/password-prompt.png
This is a binary file and will not be displayed.
History
1 round
4 comments
autumn.bsky.gay
submitted
#0
expand 4 comments
good stuff
good stuff
okay some interesting things happening on the frontend/backend
closed without merging
good stuff