Compare commits
3
Commits
f3b2fb1c18
...
069a09e77b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
069a09e77b | ||
|
|
b77c7d399f | ||
|
|
96c3dc5ddb |
@@ -0,0 +1,57 @@
|
|||||||
|
# Cava Audio Visualizer Configuration Template
|
||||||
|
# Optimized for smooth and responsive visualization
|
||||||
|
|
||||||
|
[general]
|
||||||
|
# Number of bars (20-200) - fewer bars = better performance
|
||||||
|
bars = 64
|
||||||
|
# Framerate (1-144) - higher = smoother but more CPU intensive
|
||||||
|
framerate = 60
|
||||||
|
|
||||||
|
[input]
|
||||||
|
# Audio input method: pulse, alsa, fifo, or portaudio
|
||||||
|
method = pulse
|
||||||
|
# Audio device (leave as default for auto-detection)
|
||||||
|
source = auto
|
||||||
|
|
||||||
|
[output]
|
||||||
|
# Output method: ncurses, terminal, raw, or circle
|
||||||
|
method = ncurses
|
||||||
|
# Terminal color scheme
|
||||||
|
style = stereo
|
||||||
|
|
||||||
|
[color]
|
||||||
|
# Color gradient for bars using template variables
|
||||||
|
gradient = 1
|
||||||
|
gradient_count = 8
|
||||||
|
gradient_color_1 = '#ffdaa8'
|
||||||
|
gradient_color_2 = '#ffdb94'
|
||||||
|
gradient_color_3 = '#e1df87'
|
||||||
|
gradient_color_4 = '#b3d27e'
|
||||||
|
gradient_color_5 = '#ffa2bd'
|
||||||
|
gradient_color_6 = '#ffbcbb'
|
||||||
|
gradient_color_7 = '#ffac91'
|
||||||
|
gradient_color_8 = '#f6ae85'
|
||||||
|
|
||||||
|
[smoothing]
|
||||||
|
# Noise reduction (0-100) - higher = smoother but less responsive
|
||||||
|
# 77 is default, 85 provides good balance for smooth visualization
|
||||||
|
noise_reduction = 85
|
||||||
|
|
||||||
|
# Monstercat smoothing (0 or 1) - adds smoothing between adjacent bars
|
||||||
|
monstercat = 1
|
||||||
|
|
||||||
|
# Wave effect (0 or 1) - creates wave-like motion across bars
|
||||||
|
waves = 0
|
||||||
|
|
||||||
|
# Gravity (0-200) - controls how fast bars fall
|
||||||
|
# 100 = normal gravity, 150 = faster fall, 50 = slower fall
|
||||||
|
gravity = 120
|
||||||
|
|
||||||
|
[eq]
|
||||||
|
# Equalizer settings for frequency response
|
||||||
|
# Lower frequencies tend to be louder, so reduce them slightly
|
||||||
|
1 = 0.8
|
||||||
|
2 = 0.9
|
||||||
|
3 = 1.0
|
||||||
|
4 = 1.1
|
||||||
|
5 = 1.2
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
// bar values. defaults to left channels first (low to high), then right (high to low).
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||||
|
uniform int bar_width; // bar width (configurable), not used here
|
||||||
|
uniform int bar_spacing; // space bewteen bars (configurable)
|
||||||
|
|
||||||
|
uniform vec3 u_resolution; // window resolution
|
||||||
|
|
||||||
|
// colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
|
||||||
|
uniform vec3 bg_color; // background color
|
||||||
|
uniform vec3 fg_color; // foreground color
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8]; // gradient colors
|
||||||
|
|
||||||
|
uniform float shader_time; // shader execution time s (not used here)
|
||||||
|
|
||||||
|
uniform sampler2D inputTexture; // Texture from the last render pass (not used here)
|
||||||
|
|
||||||
|
vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
|
||||||
|
// create color based on fraction of this color and next color
|
||||||
|
float yr = (y - y_min) / (y_max - y_min);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
// find which bar to use based on where we are on the x axis
|
||||||
|
float x = u_resolution.x * fragCoord.x;
|
||||||
|
int bar = int(bars_count * fragCoord.x);
|
||||||
|
|
||||||
|
// calculate a bar size
|
||||||
|
float bar_size = u_resolution.x / bars_count;
|
||||||
|
|
||||||
|
// the y coordinate and bar values are the same
|
||||||
|
float y = bars[bar];
|
||||||
|
|
||||||
|
// make sure there is a thin line at bottom
|
||||||
|
if (y * u_resolution.y < 1.0) {
|
||||||
|
y = 1.0 / u_resolution.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw the bar up to current height
|
||||||
|
if (y > fragCoord.y) {
|
||||||
|
// make some space between bars basen on settings
|
||||||
|
if (x > (bar + 1) * (bar_size)-bar_spacing) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
} else {
|
||||||
|
if (gradient_count == 0) {
|
||||||
|
fragColor = vec4(fg_color, 1.0);
|
||||||
|
} else {
|
||||||
|
// find which color in the configured gradient we are at
|
||||||
|
int color = int((gradient_count - 1) * fragCoord.y);
|
||||||
|
|
||||||
|
// find where on y this and next color is supposed to be
|
||||||
|
float y_min = color / (gradient_count - 1.0);
|
||||||
|
float y_max = (color + 1.0) / (gradient_count - 1.0);
|
||||||
|
|
||||||
|
// make color
|
||||||
|
fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color],
|
||||||
|
gradient_colors[color + 1], y_min, y_max),
|
||||||
|
1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
// this shader was stolen from shadertoy user ChunderFPV
|
||||||
|
|
||||||
|
#define SCALE 8.0
|
||||||
|
#define PI radians(180.0)
|
||||||
|
#define TAU (PI * 2.0)
|
||||||
|
#define CS(a) vec2(cos(a), sin(a))
|
||||||
|
#define PT(u, r) smoothstep(0.0, r, r - length(u))
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||||
|
uniform float shader_time; // shader execution time s
|
||||||
|
uniform int bar_width; // bar width (configurable), not used here
|
||||||
|
uniform int bar_spacing; // space bewteen bars (configurable)
|
||||||
|
|
||||||
|
uniform vec3 u_resolution; // window resolution
|
||||||
|
|
||||||
|
// colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
|
||||||
|
uniform vec3 bg_color; // background color
|
||||||
|
uniform vec3 fg_color; // foreground color
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8]; // gradient colors
|
||||||
|
|
||||||
|
// gradient map ( color, equation, time, width, shadow, reciprocal )
|
||||||
|
vec3 gm(vec3 c, float n, float t, float w, float d, bool i) {
|
||||||
|
float g = min(abs(n), 1.0 / abs(n));
|
||||||
|
float s = abs(sin(n * PI - t));
|
||||||
|
if (i)
|
||||||
|
s = min(s, abs(sin(PI / n + t)));
|
||||||
|
return (1.0 - pow(abs(s), w)) * c * pow(g, d) * 6.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// denominator spiral, use 1/n for numerator
|
||||||
|
// ( screen xy, spiral exponent, decimal, line width, hardness, rotation )
|
||||||
|
float ds(vec2 u, float e, float n, float w, float h, float ro) {
|
||||||
|
float ur = length(u); // unit radius
|
||||||
|
float sr = pow(ur, e); // spiral radius
|
||||||
|
float a = round(sr) * n * TAU; // arc
|
||||||
|
vec2 xy = CS(a + ro) * ur; // xy coords
|
||||||
|
float l = PT(u - xy, w); // line
|
||||||
|
float s = mod(sr + 0.5, 1.0); // gradient smooth
|
||||||
|
s = min(s, 1.0 - s); // darken filter
|
||||||
|
return l * s * h;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
float t = shader_time / PI * 2.0;
|
||||||
|
vec4 m = vec4(0, 0, 0, 0); // iMouse;
|
||||||
|
m.xy = m.xy * 2.0 / u_resolution.xy - 1.0; // ±1x, ±1y
|
||||||
|
if (m.z > 0.0)
|
||||||
|
t += m.y * SCALE; // move time with mouse y
|
||||||
|
float z = (m.z > 0.0) ? pow(1.0 - abs(m.y), sign(m.y)) : 1.0; // zoom (+)
|
||||||
|
float e = (m.z > 0.0) ? pow(1.0 - abs(m.x), -sign(m.x))
|
||||||
|
: 1.0; // screen exponent (+)
|
||||||
|
float se = (m.z > 0.0) ? e * -sign(m.y) : 1.0; // spiral exponent
|
||||||
|
vec3 bg = vec3(0); // black background
|
||||||
|
|
||||||
|
float aa = 3.0; // anti-aliasing
|
||||||
|
|
||||||
|
for (float j = 0.0; j < aa; j++)
|
||||||
|
for (float k = 0.0; k < aa; k++) {
|
||||||
|
vec3 c = vec3(0);
|
||||||
|
vec2 o = vec2(j, k) / aa;
|
||||||
|
vec2 uv = (fragCoord * u_resolution.xy - 0.5 * u_resolution.xy + o) /
|
||||||
|
u_resolution.y * SCALE * z; // apply cartesian, scale and zoom
|
||||||
|
if (m.z > 0.0)
|
||||||
|
uv =
|
||||||
|
exp(log(abs(uv)) * e) * sign(uv); // warp screen space with exponent
|
||||||
|
|
||||||
|
float px = length(fwidth(uv)); // pixel width
|
||||||
|
float x = uv.x; // every pixel on x
|
||||||
|
float y = uv.y; // every pixel on y
|
||||||
|
float l = length(uv); // hypot of xy: sqrt(x*x+y*y)
|
||||||
|
|
||||||
|
float mc = (x * x + y * y - 1.0) / y; // metallic circle at xy
|
||||||
|
float g = min(abs(mc), 1.0 / abs(mc)); // gradient
|
||||||
|
vec3 gold = vec3(1.0, 0.6, 0.0) * g * l;
|
||||||
|
vec3 blue = vec3(0.3, 0.5, 0.9) * (1.0 - g);
|
||||||
|
vec3 rgb = max(gold, blue);
|
||||||
|
|
||||||
|
float w = 0.1; // line width
|
||||||
|
float d = 0.4; // shadow depth
|
||||||
|
c = max(c, gm(rgb, mc, -t, w * bars[0], d, false)); // metallic
|
||||||
|
c = max(c, gm(rgb, abs(y / x) * sign(y), -t, w * bars[1], d,
|
||||||
|
false)); // tangent
|
||||||
|
c = max(c, gm(rgb, (x * x) / (y * y) * sign(y), -t, w * bars[2], d,
|
||||||
|
false)); // sqrt cotangent
|
||||||
|
c = max(c, gm(rgb, (x * x) + (y * y), t, w * bars[3], d,
|
||||||
|
true)); // sqrt circles
|
||||||
|
|
||||||
|
c += rgb * ds(uv, se, t / TAU, px * 2.0 * bars[4], 2.0, 0.0); // spiral 1a
|
||||||
|
c += rgb * ds(uv, se, t / TAU, px * 2.0 * bars[5], 2.0, PI); // spiral 1b
|
||||||
|
c +=
|
||||||
|
rgb * ds(uv, -se, t / TAU, px * 2.0 * bars[6], 2.0, 0.0); // spiral 2a
|
||||||
|
c += rgb * ds(uv, -se, t / TAU, px * 2.0 * bars[7], 2.0, PI); // spiral 2b
|
||||||
|
c = max(c, 0.0); // clear negative color
|
||||||
|
|
||||||
|
c += pow(max(1.0 - l, 0.0), 3.0 / z); // center glow
|
||||||
|
|
||||||
|
if (m.z > 0.0) // display grid on click
|
||||||
|
{
|
||||||
|
vec2 xyg = abs(fract(uv + 0.5) - 0.5) / px; // xy grid
|
||||||
|
c.gb += 0.2 * (1.0 - min(min(xyg.x, xyg.y), 1.0));
|
||||||
|
}
|
||||||
|
bg += c;
|
||||||
|
}
|
||||||
|
bg /= aa * aa;
|
||||||
|
bg *= sqrt(bg) * 1.5;
|
||||||
|
|
||||||
|
fragColor = vec4(bg, 1.0);
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
// bar values. defaults to left channels first (low to high), then right (high to low).
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||||
|
|
||||||
|
uniform vec3 u_resolution; // window resolution, not used here
|
||||||
|
|
||||||
|
//colors, configurable in cava config file
|
||||||
|
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
|
||||||
|
uniform vec3 fg_color; // foreground color, not used here
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// find which bar to use based on where we are on the x axis
|
||||||
|
int bar = int(bars_count * fragCoord.x);
|
||||||
|
|
||||||
|
float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0;
|
||||||
|
float y = (bars[bar]) * bar_y;
|
||||||
|
|
||||||
|
float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count;
|
||||||
|
float bar_r = 1.0 - abs((bar_x - 0.5)) * 2;
|
||||||
|
|
||||||
|
bar_r = bar_r * bar_r * 2;
|
||||||
|
|
||||||
|
// set color
|
||||||
|
fragColor.r = fg_color.x * y * bar_r;
|
||||||
|
fragColor.g = fg_color.y * y * bar_r;
|
||||||
|
fragColor.b = fg_color.z * y * bar_r;
|
||||||
|
}
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
// SPDX-FileCopyrightText: 2026 rezky_nightky <with.rezky@gmail.com>
|
||||||
|
|
||||||
|
// Static Orion (non-rotating)
|
||||||
|
|
||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count;
|
||||||
|
uniform int bar_width;
|
||||||
|
uniform int bar_spacing;
|
||||||
|
|
||||||
|
uniform vec3 u_resolution;
|
||||||
|
|
||||||
|
uniform vec3 bg_color;
|
||||||
|
uniform vec3 fg_color;
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8];
|
||||||
|
|
||||||
|
vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
|
||||||
|
const float EPS = 0.0001;
|
||||||
|
float yr = (y - y_min) / max(y_max - y_min, EPS);
|
||||||
|
yr = clamp(yr, 0.0, 1.0);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 p = fragCoord - vec2(0.5);
|
||||||
|
p.x *= u_resolution.x / u_resolution.y;
|
||||||
|
|
||||||
|
float base_radius = 0.35;
|
||||||
|
float max_len = 0.15;
|
||||||
|
float pad = 2.0 / u_resolution.y;
|
||||||
|
float min_r = max(base_radius - pad, 0.0);
|
||||||
|
float max_r = base_radius + max_len + pad;
|
||||||
|
|
||||||
|
float r2 = dot(p, p);
|
||||||
|
if (r2 < min_r * min_r || r2 > max_r * max_r) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float r = sqrt(r2);
|
||||||
|
|
||||||
|
float theta = atan(p.y, p.x);
|
||||||
|
|
||||||
|
float pi = radians(180.0);
|
||||||
|
float tau = pi * 2.0;
|
||||||
|
|
||||||
|
float a = (theta + pi) / tau;
|
||||||
|
a = fract(a);
|
||||||
|
|
||||||
|
int bc = min(bars_count, 512);
|
||||||
|
if (bc <= 0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float cell = a * float(bc);
|
||||||
|
int bar = int(floor(cell));
|
||||||
|
bar = clamp(bar, 0, bc - 1);
|
||||||
|
int bar_next = bar + 1;
|
||||||
|
if (bar_next >= bc) {
|
||||||
|
bar_next = 0;
|
||||||
|
}
|
||||||
|
float f = fract(cell);
|
||||||
|
|
||||||
|
float fill = float(bar_width) / max(float(bar_width + bar_spacing), 1.0);
|
||||||
|
float angular = abs(f - 0.5);
|
||||||
|
float px = max(length(dFdx(p)), length(dFdy(p)));
|
||||||
|
float df = 0.35 * (float(bc) * px) / (tau * max(r, px));
|
||||||
|
float gap_half = (1.0 - fill) * 0.5;
|
||||||
|
float eps = 1.0 / (float(bc) * 2048.0);
|
||||||
|
float gap_cap = max(gap_half - eps, 0.0);
|
||||||
|
float df_cap = min(gap_cap, fill * 0.15);
|
||||||
|
df = min(df, max(df_cap, 1e-6));
|
||||||
|
float angular_alpha = 1.0 - smoothstep(fill * 0.5 - df, fill * 0.5 + df, angular);
|
||||||
|
angular_alpha *= step(angular, fill * 0.5 + df);
|
||||||
|
angular_alpha *= step(0.01, angular_alpha);
|
||||||
|
|
||||||
|
float y0 = clamp(bars[bar], 0.0, 1.0);
|
||||||
|
float y1 = clamp(bars[bar_next], 0.0, 1.0);
|
||||||
|
float y = mix(y0, y1, f);
|
||||||
|
|
||||||
|
float amp = y * (1.0 + 0.8 * (1.0 - y));
|
||||||
|
|
||||||
|
float min_len = 1.0 / u_resolution.y;
|
||||||
|
float max_len_cap = max(max_len - min_len, min_len);
|
||||||
|
float len = min(max(amp * max_len, min_len), max_len_cap);
|
||||||
|
float act = smoothstep(0.0, min_len / max_len, amp);
|
||||||
|
|
||||||
|
float dr = clamp(px, min_len, 2.0 * min_len);
|
||||||
|
float inner = smoothstep(base_radius - dr, base_radius + dr, r);
|
||||||
|
float outer = 1.0 - smoothstep(base_radius + len - dr, base_radius + len + dr, r);
|
||||||
|
float radial_alpha = inner * outer * act;
|
||||||
|
float outer_cap = 1.0 - smoothstep(base_radius + max_len - dr, base_radius + max_len + dr, r);
|
||||||
|
radial_alpha *= outer_cap;
|
||||||
|
|
||||||
|
float alpha = angular_alpha * radial_alpha;
|
||||||
|
alpha *= step(0.0035, alpha);
|
||||||
|
|
||||||
|
if (alpha == 0.0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 col;
|
||||||
|
if (gradient_count == 0) {
|
||||||
|
col = fg_color;
|
||||||
|
} else {
|
||||||
|
if (gradient_count == 1) {
|
||||||
|
col = gradient_colors[0];
|
||||||
|
} else {
|
||||||
|
int color = int(floor((gradient_count - 1) * amp));
|
||||||
|
color = clamp(color, 0, gradient_count - 2);
|
||||||
|
float y_min = float(color) / (gradient_count - 1.0);
|
||||||
|
float y_max = float(color + 1) / (gradient_count - 1.0);
|
||||||
|
col =
|
||||||
|
normalize_C(amp, gradient_colors[color], gradient_colors[color + 1], y_min, y_max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fragColor = vec4(mix(bg_color, col, alpha), 1.0);
|
||||||
|
}
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
// SPDX-FileCopyrightText: 2026 rezky_nightky <with.rezky@gmail.com>
|
||||||
|
|
||||||
|
// Rotate Orion
|
||||||
|
|
||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count;
|
||||||
|
uniform int bar_width;
|
||||||
|
uniform int bar_spacing;
|
||||||
|
|
||||||
|
uniform vec3 u_resolution;
|
||||||
|
|
||||||
|
uniform vec3 bg_color;
|
||||||
|
uniform vec3 fg_color;
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8];
|
||||||
|
|
||||||
|
uniform float shader_time;
|
||||||
|
|
||||||
|
vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
|
||||||
|
const float EPS = 0.0001;
|
||||||
|
float yr = (y - y_min) / max(y_max - y_min, EPS);
|
||||||
|
yr = clamp(yr, 0.0, 1.0);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 p = fragCoord - vec2(0.5);
|
||||||
|
p.x *= u_resolution.x / u_resolution.y;
|
||||||
|
|
||||||
|
float base_radius = 0.35;
|
||||||
|
float max_len = 0.15;
|
||||||
|
float pad = 2.0 / u_resolution.y;
|
||||||
|
float min_r = max(base_radius - pad, 0.0);
|
||||||
|
float max_r = base_radius + max_len + pad;
|
||||||
|
|
||||||
|
float r2 = dot(p, p);
|
||||||
|
if (r2 < min_r * min_r || r2 > max_r * max_r) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float r = sqrt(r2);
|
||||||
|
|
||||||
|
float theta = atan(p.y, p.x);
|
||||||
|
|
||||||
|
float pi = radians(180.0);
|
||||||
|
float tau = pi * 2.0;
|
||||||
|
|
||||||
|
float a = (theta + pi) / tau;
|
||||||
|
a = fract(a);
|
||||||
|
|
||||||
|
int bc = min(bars_count, 512);
|
||||||
|
if (bc <= 0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note: rotation is achieved by phase-shifting bar sampling, not by rotating geometry.
|
||||||
|
float rotate_speed = 0.10;
|
||||||
|
float t = fract(shader_time * 0.1);
|
||||||
|
float phase = fract(t * (rotate_speed / 0.1));
|
||||||
|
|
||||||
|
float sweep_speed = 0.12;
|
||||||
|
float sweep_pos = fract(t * (sweep_speed / 0.1));
|
||||||
|
float da = abs(a - sweep_pos);
|
||||||
|
da = min(da, 1.0 - da);
|
||||||
|
float sweep = 1.0 - smoothstep(0.0, 0.08 + fwidth(a), da);
|
||||||
|
|
||||||
|
float a_sample = fract(a + phase);
|
||||||
|
|
||||||
|
float cell = a_sample * float(bc);
|
||||||
|
int bar = int(floor(cell));
|
||||||
|
bar = clamp(bar, 0, bc - 1);
|
||||||
|
int bar_next = bar + 1;
|
||||||
|
if (bar_next >= bc) {
|
||||||
|
bar_next = 0;
|
||||||
|
}
|
||||||
|
float f = fract(cell);
|
||||||
|
|
||||||
|
float fill = float(bar_width) / max(float(bar_width + bar_spacing), 1.0);
|
||||||
|
float angular = abs(f - 0.5);
|
||||||
|
float px = max(length(dFdx(p)), length(dFdy(p)));
|
||||||
|
float df = 0.35 * (float(bc) * px) / (tau * max(r, px));
|
||||||
|
float gap_half = (1.0 - fill) * 0.5;
|
||||||
|
float eps = 1.0 / (float(bc) * 2048.0);
|
||||||
|
float gap_cap = max(gap_half - eps, 0.0);
|
||||||
|
float df_cap = min(gap_cap, fill * 0.15);
|
||||||
|
df = min(df, max(df_cap, 1e-6));
|
||||||
|
float angular_alpha = 1.0 - smoothstep(fill * 0.5 - df, fill * 0.5 + df, angular);
|
||||||
|
angular_alpha *= step(angular, fill * 0.5 + df);
|
||||||
|
angular_alpha *= step(0.01, angular_alpha);
|
||||||
|
|
||||||
|
float y0 = clamp(bars[bar], 0.0, 1.0);
|
||||||
|
float y1 = clamp(bars[bar_next], 0.0, 1.0);
|
||||||
|
float y = mix(y0, y1, f);
|
||||||
|
|
||||||
|
float amp = y * (1.0 + 0.8 * (1.0 - y));
|
||||||
|
|
||||||
|
float min_len = 1.0 / u_resolution.y;
|
||||||
|
float max_len_cap = max(max_len - min_len, min_len);
|
||||||
|
float len = min(max(amp * max_len, min_len), max_len_cap);
|
||||||
|
float act = smoothstep(0.0, min_len / max_len, amp);
|
||||||
|
|
||||||
|
float dr = clamp(px, min_len, 2.0 * min_len);
|
||||||
|
float inner = smoothstep(base_radius - dr, base_radius + dr, r);
|
||||||
|
float outer = 1.0 - smoothstep(base_radius + len - dr, base_radius + len + dr, r);
|
||||||
|
float radial_alpha = inner * outer * act;
|
||||||
|
float outer_cap = 1.0 - smoothstep(base_radius + max_len - dr, base_radius + max_len + dr, r);
|
||||||
|
radial_alpha *= outer_cap;
|
||||||
|
|
||||||
|
float alpha = angular_alpha * radial_alpha;
|
||||||
|
alpha *= step(0.0035, alpha);
|
||||||
|
|
||||||
|
if (alpha == 0.0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 col;
|
||||||
|
if (gradient_count == 0) {
|
||||||
|
col = fg_color;
|
||||||
|
} else {
|
||||||
|
if (gradient_count == 1) {
|
||||||
|
col = gradient_colors[0];
|
||||||
|
} else {
|
||||||
|
int color = int(floor((gradient_count - 1) * amp));
|
||||||
|
color = clamp(color, 0, gradient_count - 2);
|
||||||
|
float y_min = float(color) / (gradient_count - 1.0);
|
||||||
|
float y_max = float(color + 1) / (gradient_count - 1.0);
|
||||||
|
col = normalize_C(amp, gradient_colors[color], gradient_colors[color + 1], y_min, y_max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
col = min(col * (1.0 + 0.35 * sweep * alpha), vec3(1.0));
|
||||||
|
|
||||||
|
fragColor = vec4(mix(bg_color, col, alpha), 1.0);
|
||||||
|
}
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
// SPDX-FileCopyrightText: 2026 rezky_nightky <with.rezky@gmail.com>
|
||||||
|
|
||||||
|
// Orion Saturn core
|
||||||
|
|
||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count;
|
||||||
|
uniform int bar_width;
|
||||||
|
uniform int bar_spacing;
|
||||||
|
|
||||||
|
uniform vec3 u_resolution;
|
||||||
|
|
||||||
|
uniform vec3 bg_color;
|
||||||
|
uniform vec3 fg_color;
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8];
|
||||||
|
|
||||||
|
vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
|
||||||
|
const float EPS = 0.0001;
|
||||||
|
float yr = (y - y_min) / max(y_max - y_min, EPS);
|
||||||
|
yr = clamp(yr, 0.0, 1.0);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 gradient_map(float amp) {
|
||||||
|
if (gradient_count == 0) {
|
||||||
|
return fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gradient_count == 1) {
|
||||||
|
return gradient_colors[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
int color = int(floor((gradient_count - 1) * amp));
|
||||||
|
color = clamp(color, 0, gradient_count - 2);
|
||||||
|
float y_min = float(color) / (gradient_count - 1.0);
|
||||||
|
float y_max = float(color + 1) / (gradient_count - 1.0);
|
||||||
|
return normalize_C(amp, gradient_colors[color], gradient_colors[color + 1], y_min, y_max);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 p = fragCoord - vec2(0.5);
|
||||||
|
p.x *= u_resolution.x / u_resolution.y;
|
||||||
|
|
||||||
|
float base_radius = 0.35;
|
||||||
|
float max_len = 0.15;
|
||||||
|
float pad = 2.0 / u_resolution.y;
|
||||||
|
|
||||||
|
float max_r = base_radius + max_len + pad;
|
||||||
|
|
||||||
|
float r2 = dot(p, p);
|
||||||
|
if (r2 > max_r * max_r) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bc = min(bars_count, 512);
|
||||||
|
if (bc <= 0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float r = sqrt(r2);
|
||||||
|
|
||||||
|
float pi = radians(180.0);
|
||||||
|
float tau = pi * 2.0;
|
||||||
|
|
||||||
|
float theta = atan(p.y, p.x);
|
||||||
|
float a = fract((theta + pi) / tau);
|
||||||
|
|
||||||
|
float cell = a * float(bc);
|
||||||
|
int bar = int(floor(cell));
|
||||||
|
bar = clamp(bar, 0, bc - 1);
|
||||||
|
int bar_next = bar + 1;
|
||||||
|
if (bar_next >= bc) {
|
||||||
|
bar_next = 0;
|
||||||
|
}
|
||||||
|
float f = fract(cell);
|
||||||
|
|
||||||
|
float fill = float(bar_width) / max(float(bar_width + bar_spacing), 1.0);
|
||||||
|
float angular = abs(f - 0.5);
|
||||||
|
float px_ang = max(length(dFdx(p)), length(dFdy(p)));
|
||||||
|
float df = 0.35 * (float(bc) * px_ang) / (tau * max(r, px_ang));
|
||||||
|
float gap_half = (1.0 - fill) * 0.5;
|
||||||
|
float eps = 1.0 / (float(bc) * 2048.0);
|
||||||
|
float gap_cap = max(gap_half - eps, 0.0);
|
||||||
|
float df_cap = min(gap_cap, fill * 0.15);
|
||||||
|
df = min(df, max(df_cap, 1e-6));
|
||||||
|
float angular_alpha = 1.0 - smoothstep(fill * 0.5 - df, fill * 0.5 + df, angular);
|
||||||
|
angular_alpha *= step(angular, fill * 0.5 + df);
|
||||||
|
angular_alpha *= step(0.01, angular_alpha);
|
||||||
|
|
||||||
|
float y0 = clamp(bars[bar], 0.0, 1.0);
|
||||||
|
float y1 = clamp(bars[bar_next], 0.0, 1.0);
|
||||||
|
float y = mix(y0, y1, f);
|
||||||
|
float amp = y * (1.0 + 0.8 * (1.0 - y));
|
||||||
|
|
||||||
|
float min_len = 1.0 / u_resolution.y;
|
||||||
|
float max_len_cap = max(max_len - min_len, min_len);
|
||||||
|
float len = min(max(amp * max_len, min_len), max_len_cap);
|
||||||
|
float act = smoothstep(0.0, min_len / max_len, amp);
|
||||||
|
|
||||||
|
float dr = clamp(px_ang, min_len, 2.0 * min_len);
|
||||||
|
float inner = smoothstep(base_radius - dr, base_radius + dr, r);
|
||||||
|
float outer = 1.0 - smoothstep(base_radius + len - dr, base_radius + len + dr, r);
|
||||||
|
float radial_alpha = inner * outer * act;
|
||||||
|
float outer_cap = 1.0 - smoothstep(base_radius + max_len - dr, base_radius + max_len + dr, r);
|
||||||
|
radial_alpha *= outer_cap;
|
||||||
|
|
||||||
|
float ring_alpha = angular_alpha * radial_alpha;
|
||||||
|
ring_alpha *= step(0.0035, ring_alpha);
|
||||||
|
|
||||||
|
float core_energy = 0.0;
|
||||||
|
int core_samples = 0;
|
||||||
|
|
||||||
|
int core_limit = min(bc, 64);
|
||||||
|
for (int i = 0; i < core_limit; i += 2) {
|
||||||
|
core_energy += clamp(bars[i], 0.0, 1.0);
|
||||||
|
core_samples++;
|
||||||
|
}
|
||||||
|
core_energy /= max(float(core_samples), 1.0);
|
||||||
|
|
||||||
|
float core_amp = core_energy * (1.0 + 0.8 * (1.0 - core_energy));
|
||||||
|
|
||||||
|
float core_radius = mix(0.07, 0.25, clamp(core_amp * 1.1, 0.0, 1.0));
|
||||||
|
|
||||||
|
float px = 1.0 / u_resolution.y;
|
||||||
|
float core_edge = max(px * 1.5, 0.003);
|
||||||
|
float core_act = smoothstep(0.0, 0.04, core_amp);
|
||||||
|
|
||||||
|
float core_feather = core_edge + dr;
|
||||||
|
float core_alpha = 1.0 - smoothstep(core_radius - core_feather, core_radius + core_feather, r);
|
||||||
|
core_alpha = clamp(core_alpha, 0.0, 1.0) * core_act;
|
||||||
|
|
||||||
|
if (ring_alpha == 0.0 && core_alpha == 0.0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 col_core = gradient_map(core_amp);
|
||||||
|
vec3 col_ring = gradient_map(amp);
|
||||||
|
|
||||||
|
vec3 col = mix(bg_color, col_core, core_alpha);
|
||||||
|
col = mix(col, col_ring, ring_alpha);
|
||||||
|
fragColor = vec4(col, 1.0);
|
||||||
|
}
|
||||||
@@ -0,0 +1,154 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
// SPDX-FileCopyrightText: 2026 rezky_nightky <with.rezky@gmail.com>
|
||||||
|
|
||||||
|
// Orion Saturn subring
|
||||||
|
|
||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count;
|
||||||
|
uniform int bar_width;
|
||||||
|
uniform int bar_spacing;
|
||||||
|
|
||||||
|
uniform vec3 u_resolution;
|
||||||
|
|
||||||
|
uniform vec3 bg_color;
|
||||||
|
uniform vec3 fg_color;
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8];
|
||||||
|
|
||||||
|
vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
|
||||||
|
const float EPS = 0.0001;
|
||||||
|
float yr = (y - y_min) / max(y_max - y_min, EPS);
|
||||||
|
yr = clamp(yr, 0.0, 1.0);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 gradient_map(float amp) {
|
||||||
|
if (gradient_count == 0) {
|
||||||
|
return fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gradient_count == 1) {
|
||||||
|
return gradient_colors[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
int color = int(floor((gradient_count - 1) * amp));
|
||||||
|
color = clamp(color, 0, gradient_count - 2);
|
||||||
|
float y_min = float(color) / (gradient_count - 1.0);
|
||||||
|
float y_max = float(color + 1) / (gradient_count - 1.0);
|
||||||
|
return normalize_C(amp, gradient_colors[color], gradient_colors[color + 1], y_min, y_max);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 p = fragCoord - vec2(0.5);
|
||||||
|
p.x *= u_resolution.x / u_resolution.y;
|
||||||
|
|
||||||
|
float base_radius = 0.35;
|
||||||
|
float max_len = 0.15;
|
||||||
|
float pad = 2.0 / u_resolution.y;
|
||||||
|
|
||||||
|
float max_r = base_radius + max_len + pad;
|
||||||
|
|
||||||
|
float r2 = dot(p, p);
|
||||||
|
|
||||||
|
if (r2 > max_r * max_r) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bc = min(bars_count, 512);
|
||||||
|
if (bc <= 0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float r = sqrt(r2);
|
||||||
|
|
||||||
|
float pi = radians(180.0);
|
||||||
|
float tau = pi * 2.0;
|
||||||
|
|
||||||
|
float theta = atan(p.y, p.x);
|
||||||
|
float a = fract((theta + pi) / tau);
|
||||||
|
|
||||||
|
float cell = a * float(bc);
|
||||||
|
int bar = int(floor(cell));
|
||||||
|
bar = clamp(bar, 0, bc - 1);
|
||||||
|
int bar_next = bar + 1;
|
||||||
|
if (bar_next >= bc) {
|
||||||
|
bar_next = 0;
|
||||||
|
}
|
||||||
|
float f = fract(cell);
|
||||||
|
|
||||||
|
float fill = float(bar_width) / max(float(bar_width + bar_spacing), 1.0);
|
||||||
|
float angular = abs(f - 0.5);
|
||||||
|
float px = max(length(dFdx(p)), length(dFdy(p)));
|
||||||
|
float df = 0.35 * (float(bc) * px) / (tau * max(r, px));
|
||||||
|
float gap_half = (1.0 - fill) * 0.5;
|
||||||
|
float eps = 1.0 / (float(bc) * 2048.0);
|
||||||
|
float gap_cap = max(gap_half - eps, 0.0);
|
||||||
|
float df_cap = min(gap_cap, fill * 0.15);
|
||||||
|
df = min(df, max(df_cap, 1e-6));
|
||||||
|
float angular_alpha = 1.0 - smoothstep(fill * 0.5 - df, fill * 0.5 + df, angular);
|
||||||
|
angular_alpha *= step(angular, fill * 0.5 + df);
|
||||||
|
angular_alpha *= step(0.01, angular_alpha);
|
||||||
|
|
||||||
|
float y0 = clamp(bars[bar], 0.0, 1.0);
|
||||||
|
float y1 = clamp(bars[bar_next], 0.0, 1.0);
|
||||||
|
float y = mix(y0, y1, f);
|
||||||
|
float amp = y * (1.0 + 0.8 * (1.0 - y));
|
||||||
|
|
||||||
|
float min_len = 1.0 / u_resolution.y;
|
||||||
|
float max_len_cap = max(max_len - min_len, min_len);
|
||||||
|
float len = min(max(amp * max_len, min_len), max_len_cap);
|
||||||
|
float act = smoothstep(0.0, min_len / max_len, amp);
|
||||||
|
|
||||||
|
float dr = clamp(px, min_len, 2.0 * min_len);
|
||||||
|
float inner = smoothstep(base_radius - dr, base_radius + dr, r);
|
||||||
|
float outer = 1.0 - smoothstep(base_radius + len - dr, base_radius + len + dr, r);
|
||||||
|
float radial_alpha = inner * outer * act;
|
||||||
|
float outer_cap = 1.0 - smoothstep(base_radius + max_len - dr, base_radius + max_len + dr, r);
|
||||||
|
radial_alpha *= outer_cap;
|
||||||
|
|
||||||
|
float ring_alpha = angular_alpha * radial_alpha;
|
||||||
|
ring_alpha *= step(0.0035, ring_alpha);
|
||||||
|
|
||||||
|
float core_energy = 0.0;
|
||||||
|
int core_samples = 0;
|
||||||
|
|
||||||
|
int core_limit = min(bc, 64);
|
||||||
|
for (int i = 0; i < core_limit; i += 4) {
|
||||||
|
core_energy += clamp(bars[i], 0.0, 1.0);
|
||||||
|
core_samples++;
|
||||||
|
}
|
||||||
|
core_energy /= max(float(core_samples), 1.0);
|
||||||
|
|
||||||
|
float core_amp = core_energy * (1.0 + 0.8 * (1.0 - core_energy));
|
||||||
|
float core_radius = mix(0.05, 0.18, clamp(core_amp * 1.2, 0.0, 1.0));
|
||||||
|
|
||||||
|
float core_act = smoothstep(0.0, 0.04, core_amp);
|
||||||
|
float core_half_thickness = 0.007;
|
||||||
|
|
||||||
|
float core = smoothstep(core_radius - core_half_thickness - dr,
|
||||||
|
core_radius - core_half_thickness + dr, r) -
|
||||||
|
smoothstep(core_radius + core_half_thickness - dr,
|
||||||
|
core_radius + core_half_thickness + dr, r);
|
||||||
|
float core_alpha = clamp(core, 0.0, 1.0) * core_act;
|
||||||
|
|
||||||
|
if (ring_alpha == 0.0 && core_alpha == 0.0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 col_ring = gradient_map(amp);
|
||||||
|
vec3 col_core = gradient_map(core_amp);
|
||||||
|
|
||||||
|
vec3 col = mix(bg_color, col_ring, ring_alpha);
|
||||||
|
col = mix(col, col_core, core_alpha);
|
||||||
|
fragColor = vec4(col, 1.0);
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
|
||||||
|
// Input vertex data, different for all executions of this shader.
|
||||||
|
layout(location = 0) in vec3 vertexPosition_modelspace;
|
||||||
|
|
||||||
|
// Output data ; will be interpolated for each fragment.
|
||||||
|
out vec2 fragCoord;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
gl_Position = vec4(vertexPosition_modelspace,1);
|
||||||
|
fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
// bar values. defaults to left channels first (low to high), then right (high
|
||||||
|
// to low).
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||||
|
uniform int bar_width; // bar width (configurable), not used here
|
||||||
|
uniform int bar_spacing; // space bewteen bars (configurable)
|
||||||
|
|
||||||
|
uniform vec3 u_resolution; // window resolution
|
||||||
|
|
||||||
|
// colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
|
||||||
|
uniform vec3 bg_color; // background color
|
||||||
|
uniform vec3 fg_color; // foreground color
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8]; // gradient colors
|
||||||
|
|
||||||
|
uniform sampler2D inputTexture; // Texture from the last render pass
|
||||||
|
|
||||||
|
vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
|
||||||
|
// create color based on fraction of this color and next color
|
||||||
|
float yr = (y - y_min) / (y_max - y_min);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
// find which bar to use based on where we are on the y axis
|
||||||
|
int bar = int(bars_count * fragCoord.y);
|
||||||
|
float y = bars[bar];
|
||||||
|
float band_size = 1.0 / float(bars_count);
|
||||||
|
float current_band_min = bar * band_size;
|
||||||
|
float current_band_max = (bar + 1) * band_size;
|
||||||
|
|
||||||
|
int hist_length = 512;
|
||||||
|
float win_size = 1.0 / hist_length;
|
||||||
|
|
||||||
|
if (fragCoord.x > 1.0 - win_size) {
|
||||||
|
|
||||||
|
if (fragCoord.y > current_band_min && fragCoord.y < current_band_max) {
|
||||||
|
|
||||||
|
fragColor = vec4(fg_color * y, 1.0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
vec2 offsetCoord = fragCoord;
|
||||||
|
offsetCoord.x += float(win_size);
|
||||||
|
fragColor = texture(inputTexture, offsetCoord);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
// Emulate the "line style" spectrum analyzer from Winamp 2.
|
||||||
|
// Try this config for a demonstration:
|
||||||
|
|
||||||
|
/*
|
||||||
|
[general]
|
||||||
|
bar_width = 2
|
||||||
|
bar_spacing = 0
|
||||||
|
higher_cutoff_freq = 22000
|
||||||
|
|
||||||
|
[output]
|
||||||
|
method = sdl_glsl
|
||||||
|
channels = mono
|
||||||
|
fragment_shader = winamp_line_style_spectrum.frag
|
||||||
|
|
||||||
|
[color]
|
||||||
|
background = '#000000'
|
||||||
|
gradient = 1
|
||||||
|
gradient_color_1 = '#319C08'
|
||||||
|
gradient_color_2 = '#29CE10'
|
||||||
|
gradient_color_3 = '#BDDE29'
|
||||||
|
gradient_color_4 = '#DEA518'
|
||||||
|
gradient_color_5 = '#D66600'
|
||||||
|
gradient_color_6 = '#CE2910'
|
||||||
|
|
||||||
|
[smoothing]
|
||||||
|
noise_reduction = 10
|
||||||
|
*/
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
// bar values. defaults to left channels first (low to high), then right (high to low).
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||||
|
uniform int bar_width; // bar width (configurable), not used here
|
||||||
|
uniform int bar_spacing; // space bewteen bars (configurable)
|
||||||
|
|
||||||
|
uniform vec3 u_resolution; // window resolution
|
||||||
|
|
||||||
|
//colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
|
||||||
|
uniform vec3 bg_color; // background color
|
||||||
|
uniform vec3 fg_color; // foreground color
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8]; // gradient colors
|
||||||
|
|
||||||
|
vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max)
|
||||||
|
{
|
||||||
|
//create color based on fraction of this color and next color
|
||||||
|
float yr = (y - y_min) / (y_max - y_min);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// find which bar to use based on where we are on the x axis
|
||||||
|
float x = u_resolution.x * fragCoord.x;
|
||||||
|
int bar = int(bars_count * fragCoord.x);
|
||||||
|
|
||||||
|
//calculate a bar size
|
||||||
|
float bar_size = u_resolution.x / bars_count;
|
||||||
|
|
||||||
|
//the y coordinate is stretched by 4X to resemble Winamp
|
||||||
|
float y = min(bars[bar] * 4.0, 1.0);
|
||||||
|
|
||||||
|
// make sure there is a thin line at bottom
|
||||||
|
if (y * u_resolution.y < 1.0)
|
||||||
|
{
|
||||||
|
y = 1.0 / u_resolution.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 bar_color;
|
||||||
|
|
||||||
|
if (gradient_count == 0)
|
||||||
|
{
|
||||||
|
bar_color = vec4(fg_color,1.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//find color in the configured gradient for the top of the bar
|
||||||
|
int color = int((gradient_count - 1) * y);
|
||||||
|
|
||||||
|
//find where on y this and next color is supposed to be
|
||||||
|
float y_min = float(color) / (gradient_count - 1.0);
|
||||||
|
float y_max = float(color + 1) / (gradient_count - 1.0);
|
||||||
|
|
||||||
|
//make a solid color for the entire bar
|
||||||
|
bar_color = vec4(normalize_C(y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//draw the bar up to current height
|
||||||
|
if (y > fragCoord.y)
|
||||||
|
{
|
||||||
|
//make some space between bars based on settings
|
||||||
|
if (x > (bar + 1) * (bar_size) - bar_spacing)
|
||||||
|
{
|
||||||
|
fragColor = vec4(bg_color,1.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fragColor = bar_color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fragColor = vec4(bg_color,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
[color]
|
||||||
|
background = '#001e26'
|
||||||
|
foreground = '#708183'
|
||||||
|
|
||||||
|
gradient = 1
|
||||||
|
gradient_color_1 = '#268bd2'
|
||||||
|
gradient_color_2 = '#6c71c4'
|
||||||
|
gradient_color_3 = '#cb4b16'
|
||||||
|
|
||||||
|
horizontal_gradient = 1
|
||||||
|
horizontal_gradient_color_1 = '#586e75'
|
||||||
|
horizontal_gradient_color_2 = '#b58900'
|
||||||
|
horizontal_gradient_color_3 = '#839496'
|
||||||
|
|
||||||
|
blend_direction = 'up'
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
[color]
|
||||||
|
horizontal_gradient = 1
|
||||||
|
horizontal_gradient_color_1 = '#c45161'
|
||||||
|
horizontal_gradient_color_2 = '#e094a0'
|
||||||
|
horizontal_gradient_color_3 = '#f2b6c0'
|
||||||
|
horizontal_gradient_color_4 = '#f2dde1'
|
||||||
|
horizontal_gradient_color_5 = '#cbc7d8'
|
||||||
|
horizontal_gradient_color_6 = '#8db7d2'
|
||||||
|
horizontal_gradient_color_7 = '#5e62a9'
|
||||||
|
horizontal_gradient_color_8 = '#434279'
|
||||||
@@ -4,8 +4,9 @@
|
|||||||
-- ── Application shortcuts ─────────────────────────────────────
|
-- ── Application shortcuts ─────────────────────────────────────
|
||||||
terminal = "kitty"
|
terminal = "kitty"
|
||||||
filemanager = "nemo"
|
filemanager = "nemo"
|
||||||
applauncher = "vicinae toggle"
|
-- applauncher = "vicinae toggle"
|
||||||
dmenu = "vicinae dmenu --placeholder"
|
applauncher = "rofi -show run"
|
||||||
|
dmenu = "rofi -show drun -theme-str 'window {width: 100%;}'"
|
||||||
idlehandler = "hypridle" -- switched to hypridle; adjust if needed
|
idlehandler = "hypridle" -- switched to hypridle; adjust if needed
|
||||||
|
|
||||||
-- ── General ───────────────────────────────────────────────────
|
-- ── General ───────────────────────────────────────────────────
|
||||||
|
|||||||
@@ -0,0 +1,189 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
* Author : Aditya Shakya (adi1090x)
|
||||||
|
* Github : @adi1090x
|
||||||
|
*
|
||||||
|
* Configuration For Rofi Version: 1.7.3
|
||||||
|
**/
|
||||||
|
|
||||||
|
configuration {
|
||||||
|
/*---------- General setting ----------*/
|
||||||
|
modi: "drun,run,filebrowser,window";
|
||||||
|
case-sensitive: false;
|
||||||
|
cycle: true;
|
||||||
|
filter: "";
|
||||||
|
scroll-method: 0;
|
||||||
|
normalize-match: true;
|
||||||
|
show-icons: true;
|
||||||
|
icon-theme: "Papirus";
|
||||||
|
/* cache-dir: ;*/
|
||||||
|
steal-focus: false;
|
||||||
|
/* dpi: -1;*/
|
||||||
|
|
||||||
|
/*---------- Matching setting ----------*/
|
||||||
|
matching: "normal";
|
||||||
|
tokenize: true;
|
||||||
|
|
||||||
|
/*---------- SSH settings ----------*/
|
||||||
|
ssh-client: "ssh";
|
||||||
|
ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";
|
||||||
|
parse-hosts: true;
|
||||||
|
parse-known-hosts: true;
|
||||||
|
|
||||||
|
/*---------- Drun settings ----------*/
|
||||||
|
drun-categories: "";
|
||||||
|
drun-match-fields: "name,generic,exec,categories,keywords";
|
||||||
|
drun-display-format: "{name} [<span weight='light' size='small'><i>({generic})</i></span>]";
|
||||||
|
drun-show-actions: false;
|
||||||
|
drun-url-launcher: "xdg-open";
|
||||||
|
drun-use-desktop-cache: false;
|
||||||
|
drun-reload-desktop-cache: false;
|
||||||
|
drun {
|
||||||
|
/** Parse user desktop files. */
|
||||||
|
parse-user: true;
|
||||||
|
/** Parse system desktop files. */
|
||||||
|
parse-system: true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------- Run settings ----------*/
|
||||||
|
run-command: "{cmd}";
|
||||||
|
run-list-command: "";
|
||||||
|
run-shell-command: "{terminal} -e {cmd}";
|
||||||
|
|
||||||
|
/*---------- Fallback Icon ----------*/
|
||||||
|
run,drun {
|
||||||
|
fallback-icon: "application-x-addon";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------- Window switcher settings ----------*/
|
||||||
|
window-match-fields: "title,class,role,name,desktop";
|
||||||
|
window-command: "wmctrl -i -R {window}";
|
||||||
|
window-format: "{w} - {c} - {t:0}";
|
||||||
|
window-thumbnail: false;
|
||||||
|
|
||||||
|
/*---------- Combi settings ----------*/
|
||||||
|
/* combi-modi: "window,run";*/
|
||||||
|
/* combi-hide-mode-prefix: false;*/
|
||||||
|
/* combi-display-format: "{mode} {text}";*/
|
||||||
|
|
||||||
|
/*---------- History and Sorting ----------*/
|
||||||
|
disable-history: false;
|
||||||
|
sorting-method: "normal";
|
||||||
|
max-history-size: 25;
|
||||||
|
|
||||||
|
/*---------- Display setting ----------*/
|
||||||
|
display-window: "Windows";
|
||||||
|
display-windowcd: "Window CD";
|
||||||
|
display-run: "Run";
|
||||||
|
display-ssh: "SSH";
|
||||||
|
display-drun: "Apps";
|
||||||
|
display-combi: "Combi";
|
||||||
|
display-keys: "Keys";
|
||||||
|
display-filebrowser: "Files";
|
||||||
|
|
||||||
|
/*---------- Misc setting ----------*/
|
||||||
|
terminal: "rofi-sensible-terminal";
|
||||||
|
font: "Mono 12";
|
||||||
|
sort: false;
|
||||||
|
threads: 0;
|
||||||
|
click-to-exit: true;
|
||||||
|
/* ignored-prefixes: "";*/
|
||||||
|
/* pid: "/run/user/1000/rofi.pid";*/
|
||||||
|
|
||||||
|
/*---------- File browser settings ----------*/
|
||||||
|
filebrowser {
|
||||||
|
/* directory: "/home";*/
|
||||||
|
directories-first: true;
|
||||||
|
sorting-method: "name";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------- Other settings ----------*/
|
||||||
|
timeout {
|
||||||
|
action: "kb-cancel";
|
||||||
|
delay: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------- Keybindings ----------*/
|
||||||
|
/*
|
||||||
|
kb-primary-paste: "Control+V,Shift+Insert";
|
||||||
|
kb-secondary-paste: "Control+v,Insert";
|
||||||
|
kb-clear-line: "Control+w";
|
||||||
|
kb-move-front: "Control+a";
|
||||||
|
kb-move-end: "Control+e";
|
||||||
|
kb-move-word-back: "Alt+b,Control+Left";
|
||||||
|
kb-move-word-forward: "Alt+f,Control+Right";
|
||||||
|
kb-move-char-back: "Left,Control+b";
|
||||||
|
kb-move-char-forward: "Right,Control+f";
|
||||||
|
kb-remove-word-back: "Control+Alt+h,Control+BackSpace";
|
||||||
|
kb-remove-word-forward: "Control+Alt+d";
|
||||||
|
kb-remove-char-forward: "Delete,Control+d";
|
||||||
|
kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";
|
||||||
|
kb-remove-to-eol: "Control+k";
|
||||||
|
kb-remove-to-sol: "Control+u";
|
||||||
|
kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";
|
||||||
|
kb-accept-custom: "Control+Return";
|
||||||
|
kb-accept-custom-alt: "Control+Shift+Return";
|
||||||
|
kb-accept-alt: "Shift+Return";
|
||||||
|
kb-delete-entry: "Shift+Delete";
|
||||||
|
kb-mode-next: "Shift+Right,Control+Tab";
|
||||||
|
kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";
|
||||||
|
kb-mode-complete: "Control+l";
|
||||||
|
kb-row-left: "Control+Page_Up";
|
||||||
|
kb-row-right: "Control+Page_Down";
|
||||||
|
kb-row-down: "Down,Control+n";
|
||||||
|
kb-page-prev: "Page_Up";
|
||||||
|
kb-page-next: "Page_Down";
|
||||||
|
kb-row-first: "Home,KP_Home";
|
||||||
|
kb-row-last: "End,KP_End";
|
||||||
|
kb-row-select: "Control+space";
|
||||||
|
kb-screenshot: "Alt+S";
|
||||||
|
kb-ellipsize: "Alt+period";
|
||||||
|
kb-toggle-case-sensitivity: "grave,dead_grave";
|
||||||
|
kb-toggle-sort: "Alt+grave";
|
||||||
|
kb-cancel: "Escape,Control+g,Control+bracketleft";
|
||||||
|
kb-custom-1: "Alt+1";
|
||||||
|
kb-custom-2: "Alt+2";
|
||||||
|
kb-custom-3: "Alt+3";
|
||||||
|
kb-custom-4: "Alt+4";
|
||||||
|
kb-custom-5: "Alt+5";
|
||||||
|
kb-custom-6: "Alt+6";
|
||||||
|
kb-custom-7: "Alt+7";
|
||||||
|
kb-custom-8: "Alt+8";
|
||||||
|
kb-custom-9: "Alt+9";
|
||||||
|
kb-custom-10: "Alt+0";
|
||||||
|
kb-custom-11: "Alt+exclam";
|
||||||
|
kb-custom-12: "Alt+at";
|
||||||
|
kb-custom-13: "Alt+numbersign";
|
||||||
|
kb-custom-14: "Alt+dollar";
|
||||||
|
kb-custom-15: "Alt+percent";
|
||||||
|
kb-custom-16: "Alt+dead_circumflex";
|
||||||
|
kb-custom-17: "Alt+ampersand";
|
||||||
|
kb-custom-18: "Alt+asterisk";
|
||||||
|
kb-custom-19: "Alt+parenleft";
|
||||||
|
kb-select-1: "Super+1";
|
||||||
|
kb-select-2: "Super+2";
|
||||||
|
kb-select-3: "Super+3";
|
||||||
|
kb-select-4: "Super+4";
|
||||||
|
kb-select-5: "Super+5";
|
||||||
|
kb-select-6: "Super+6";
|
||||||
|
kb-select-7: "Super+7";
|
||||||
|
kb-select-8: "Super+8";
|
||||||
|
kb-select-9: "Super+9";
|
||||||
|
kb-select-10: "Super+0";
|
||||||
|
ml-row-left: "ScrollLeft";
|
||||||
|
ml-row-right: "ScrollRight";
|
||||||
|
ml-row-up: "ScrollUp";
|
||||||
|
ml-row-down: "ScrollDown";
|
||||||
|
me-select-entry: "MousePrimary";
|
||||||
|
me-accept-entry: "MouseDPrimary";
|
||||||
|
me-accept-custom: "Control+MouseDPrimary";
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
//@theme "/usr/share/rofi/themes/android_notification.rasi"
|
||||||
|
|
||||||
|
//@theme "/usr/share/rofi/themes/Adapta-Nokto.rasi"
|
||||||
|
|
||||||
|
//@theme "/usr/share/rofi/themes/Arc-Dark.rasi"
|
||||||
|
|
||||||
|
@theme "~/.config/rofi/current.rasi"
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
/**
|
||||||
|
* rofi -dump-theme output.
|
||||||
|
* Rofi version: 2.0.0
|
||||||
|
**/
|
||||||
|
* {
|
||||||
|
text-color: var(fg0);
|
||||||
|
padding: 0;
|
||||||
|
accent-color: rgba ( 240, 113, 120, 100 % );
|
||||||
|
fg0: rgba ( 238, 255, 255, 100 % );
|
||||||
|
background-color: transparent;
|
||||||
|
urgent-color: rgba ( 255, 203, 107, 50 % );
|
||||||
|
font: "FiraCode Nerd Font Medium 12";
|
||||||
|
margin: 0;
|
||||||
|
bg0: rgba ( 33, 33, 33, 50 % );
|
||||||
|
bg1: rgba ( 64, 64, 64, 50 % );
|
||||||
|
spacing: 0;
|
||||||
|
}
|
||||||
|
window {
|
||||||
|
width: 580;
|
||||||
|
background-color: var(bg0);
|
||||||
|
location: center;
|
||||||
|
}
|
||||||
|
inputbar {
|
||||||
|
padding: 8px ;
|
||||||
|
background-color: var(bg1);
|
||||||
|
spacing: 8px ;
|
||||||
|
}
|
||||||
|
prompt {
|
||||||
|
vertical-align: 0.50;
|
||||||
|
text-color: var(accent-color);
|
||||||
|
}
|
||||||
|
entry {
|
||||||
|
vertical-align: 0.50;
|
||||||
|
}
|
||||||
|
element-icon {
|
||||||
|
size: 0.8000em ;
|
||||||
|
vertical-align: 0.50;
|
||||||
|
}
|
||||||
|
element-text {
|
||||||
|
vertical-align: 0.50;
|
||||||
|
text-color: inherit;
|
||||||
|
}
|
||||||
|
textbox {
|
||||||
|
padding: 8px ;
|
||||||
|
background-color: var(bg1);
|
||||||
|
}
|
||||||
|
listview {
|
||||||
|
padding: 4px 0px ;
|
||||||
|
columns: 1;
|
||||||
|
lines: 8;
|
||||||
|
fixed-height: false;
|
||||||
|
}
|
||||||
|
element {
|
||||||
|
padding: 8px ;
|
||||||
|
spacing: 8px ;
|
||||||
|
}
|
||||||
|
element normal.normal {
|
||||||
|
text-color: var(fg0);
|
||||||
|
}
|
||||||
|
element normal.urgent {
|
||||||
|
text-color: var(urgent-color);
|
||||||
|
}
|
||||||
|
element normal.active {
|
||||||
|
text-color: var(accent-color);
|
||||||
|
}
|
||||||
|
element alternate.active {
|
||||||
|
text-color: var(accent-color);
|
||||||
|
}
|
||||||
|
element selected {
|
||||||
|
text-color: var(bg0);
|
||||||
|
}
|
||||||
|
element selected.normal {
|
||||||
|
background-color: var(accent-color);
|
||||||
|
}
|
||||||
|
element selected.active {
|
||||||
|
background-color: var(accent-color);
|
||||||
|
}
|
||||||
|
element selected.urgent {
|
||||||
|
background-color: var(urgent-color);
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
||||||
|
!.config/
|
||||||
|
!.config/hypr/
|
||||||
|
!.config/hypr/**
|
||||||
Reference in New Issue
Block a user