mirror of
https://github.com/mr0xb/dotfiles_chezmoi.git
synced 2026-08-28 20:04:56 -04:00
initial commit
This commit is contained in:
commit
f1374f54c4
46 changed files with 4121 additions and 0 deletions
170
dot_config/ghostty/shaders/custom/bling99_compat.glsl
Normal file
170
dot_config/ghostty/shaders/custom/bling99_compat.glsl
Normal file
|
|
@ -0,0 +1,170 @@
|
|||
#define PI 3.141592653589793
|
||||
|
||||
float spotlightBeam(vec2 uv, vec2 origin, float angle, float width, float lengthFade) {
|
||||
vec2 p = uv - origin;
|
||||
|
||||
float c = cos(angle);
|
||||
float s = sin(angle);
|
||||
|
||||
// Rotate into beam space
|
||||
vec2 q = vec2(
|
||||
c * p.x + s * p.y,
|
||||
-s * p.x + c * p.y
|
||||
);
|
||||
|
||||
// Beam extends along +Y in local space
|
||||
float across = abs(q.x);
|
||||
float along = q.y;
|
||||
|
||||
float beamCore = exp(-pow(across / width, 2.0));
|
||||
float beamLength = smoothstep(-0.05, 0.10, along) * (1.0 - smoothstep(lengthFade, 1.35, along));
|
||||
|
||||
return beamCore * beamLength;
|
||||
}
|
||||
|
||||
float hash12(vec2 p) {
|
||||
vec3 p3 = fract(vec3(p.xyx) * 0.1031);
|
||||
p3 += dot(p3, p3.yzx + 33.33);
|
||||
return fract((p3.x + p3.y) * p3.z);
|
||||
}
|
||||
|
||||
float sparkleGrid(vec2 uv, float scale, float threshold, float speed) {
|
||||
vec2 g = uv * vec2(scale, scale * 0.56);
|
||||
vec2 id = floor(g);
|
||||
vec2 f = fract(g) - 0.5;
|
||||
|
||||
float n = hash12(id);
|
||||
float gate = step(threshold, n);
|
||||
float twinkle = pow(max(0.0, sin(iTime * speed + n * 6.2831853)), 28.0);
|
||||
|
||||
float diamond = 1.0 - smoothstep(0.02, 0.13, abs(f.x) + abs(f.y));
|
||||
|
||||
float flareX = (1.0 - smoothstep(0.000, 0.016, abs(f.y))) *
|
||||
(1.0 - smoothstep(0.000, 0.42, abs(f.x)));
|
||||
float flareY = (1.0 - smoothstep(0.000, 0.016, abs(f.x))) *
|
||||
(1.0 - smoothstep(0.000, 0.42, abs(f.y)));
|
||||
|
||||
return gate * twinkle * (diamond + 0.35 * flareX + 0.35 * flareY);
|
||||
}
|
||||
|
||||
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
||||
vec2 uv = fragCoord.xy / iResolution.xy;
|
||||
vec2 px = 1.0 / iResolution.xy;
|
||||
|
||||
// Very light late-90s video wobble.
|
||||
float wobble = sin(uv.y * 90.0 + iTime * 2.0) * 0.0008
|
||||
+ sin(uv.y * 12.0 - iTime * 0.35) * 0.0010;
|
||||
|
||||
vec2 tUv = clamp(uv + vec2(wobble, 0.0), vec2(0.001), vec2(0.999));
|
||||
|
||||
// Tiny chromatic shift.
|
||||
vec3 src;
|
||||
src.r = texture(iChannel0, clamp(tUv + vec2(px.x * 1.1, 0.0), vec2(0.001), vec2(0.999))).r;
|
||||
src.g = texture(iChannel0, tUv).g;
|
||||
src.b = texture(iChannel0, clamp(tUv - vec2(px.x * 1.1, 0.0), vec2(0.001), vec2(0.999))).b;
|
||||
|
||||
float lum = dot(src, vec3(0.299, 0.587, 0.114));
|
||||
float glyph = smoothstep(0.06, 0.30, lum);
|
||||
|
||||
// Velvet / leather background.
|
||||
vec3 velvet = vec3(0.012, 0.007, 0.002);
|
||||
vec3 brown = vec3(0.075, 0.038, 0.010);
|
||||
vec3 bg = mix(velvet, brown, uv.y + 0.15 * sin(uv.x * 4.0 + iTime * 0.12));
|
||||
|
||||
// Cash Money gold.
|
||||
vec3 gold = vec3(1.00, 0.62, 0.10);
|
||||
vec3 paleGold = vec3(1.00, 0.88, 0.45);
|
||||
vec3 hotGold = mix(gold, paleGold, pow(lum, 0.65));
|
||||
|
||||
// Tint glyphs gold while preserving some original terminal color.
|
||||
vec3 col = mix(bg, src, glyph * 0.28);
|
||||
col = mix(col, hotGold + src * 0.28, glyph * 0.82);
|
||||
|
||||
// Chrome sweep, like jewelry-store lights / spinning rims.
|
||||
float sweep1 = pow(max(0.0, sin((uv.x * 1.8 + uv.y * 0.65) * PI * 2.0 - iTime * 0.55)), 22.0);
|
||||
float sweep2 = pow(max(0.0, sin((uv.x * -1.1 + uv.y * 1.20) * PI * 2.0 + iTime * 0.40)), 30.0);
|
||||
col += (sweep1 * 0.15 + sweep2 * 0.10) * vec3(1.0, 0.77, 0.32) * (0.35 + glyph);
|
||||
|
||||
// Independent moving spotlight trails
|
||||
float ray1 = spotlightBeam(
|
||||
uv,
|
||||
vec2(0.10, 1.10),
|
||||
-0.95 + 0.22 * sin(iTime * 0.63 + 0.3),
|
||||
0.045 + 0.008 * sin(iTime * 1.10 + 0.7),
|
||||
1.00
|
||||
);
|
||||
|
||||
float ray2 = spotlightBeam(
|
||||
uv,
|
||||
vec2(0.35, 1.12),
|
||||
-1.20 + 0.18 * sin(iTime * 0.47 + 1.7),
|
||||
0.055 + 0.006 * sin(iTime * 0.90 + 2.1),
|
||||
1.05
|
||||
);
|
||||
|
||||
float ray3 = spotlightBeam(
|
||||
uv,
|
||||
vec2(0.72, 1.08),
|
||||
-1.55 + 0.20 * sin(iTime * 0.71 + 2.8),
|
||||
0.050 + 0.010 * sin(iTime * 1.30 + 0.5),
|
||||
0.95
|
||||
);
|
||||
|
||||
float ray4 = spotlightBeam(
|
||||
uv,
|
||||
vec2(0.92, 1.15),
|
||||
-1.85 + 0.24 * sin(iTime * 0.58 + 4.0),
|
||||
0.060 + 0.007 * sin(iTime * 0.80 + 3.4),
|
||||
1.10
|
||||
);
|
||||
|
||||
// Optional faint upward beam from bottom-left for extra motion
|
||||
float ray5 = spotlightBeam(
|
||||
uv,
|
||||
vec2(-0.05, -0.05),
|
||||
0.70 + 0.15 * sin(iTime * 0.52 + 5.2),
|
||||
0.040 + 0.005 * sin(iTime * 1.00 + 1.3),
|
||||
0.90
|
||||
);
|
||||
|
||||
float rays = 0.0;
|
||||
rays += ray1 * (0.75 + 0.25 * sin(iTime * 0.90 + 0.2));
|
||||
rays += ray2 * (0.65 + 0.35 * sin(iTime * 0.70 + 1.9));
|
||||
rays += ray3 * (0.80 + 0.20 * sin(iTime * 1.10 + 2.6));
|
||||
rays += ray4 * (0.70 + 0.30 * sin(iTime * 0.85 + 4.3));
|
||||
rays += ray5 * (0.45 + 0.25 * sin(iTime * 0.95 + 3.1));
|
||||
|
||||
// Warm gold spotlight tint
|
||||
vec3 rayColorA = vec3(1.00, 0.74, 0.22);
|
||||
vec3 rayColorB = vec3(1.00, 0.86, 0.48);
|
||||
|
||||
// Mix two shades so it feels less flat
|
||||
vec3 spotlightColor = mix(rayColorA, rayColorB, 0.5 + 0.5 * sin(iTime * 0.33));
|
||||
|
||||
// Add trails mostly into background, not too hard on text
|
||||
col += rays * spotlightColor * (0.10 + 0.10 * (1.0 - glyph));
|
||||
|
||||
// Diamond glints.
|
||||
float spark = sparkleGrid(uv, 62.0, 0.978, 4.0);
|
||||
spark += 0.50 * sparkleGrid(uv + vec2(0.13, -0.09), 38.0, 0.965, 3.0);
|
||||
col += spark * vec3(1.0, 0.90, 0.55) * (0.8 + 0.5 * glyph);
|
||||
|
||||
// Gold frame around the terminal.
|
||||
float edgeD = min(min(uv.x, 1.0 - uv.x), min(uv.y, 1.0 - uv.y));
|
||||
float frame = 1.0 - smoothstep(0.000, 0.045, edgeD);
|
||||
float frameWave = pow(0.5 + 0.5 * sin((uv.x + uv.y) * 90.0 - iTime * 1.8), 8.0);
|
||||
col += frame * vec3(1.0, 0.72, 0.20) * (0.10 + 0.22 * frameWave);
|
||||
|
||||
// Scanline shimmer, not too heavy.
|
||||
float scan = 0.965 + 0.035 * sin(fragCoord.y * PI);
|
||||
col *= scan;
|
||||
|
||||
// Music-video vignette.
|
||||
float vig = 1.0 - smoothstep(0.22, 0.82, distance(uv, vec2(0.5)));
|
||||
col *= 0.78 + 0.22 * vig;
|
||||
|
||||
// Keep text readable.
|
||||
col = mix(col, src, glyph * 0.16);
|
||||
|
||||
fragColor = vec4(clamp(col, 0.0, 1.0), 1.0);
|
||||
}
|
||||
267
dot_config/ghostty/shaders/custom/cash_money_badge.glsl
Normal file
267
dot_config/ghostty/shaders/custom/cash_money_badge.glsl
Normal file
|
|
@ -0,0 +1,267 @@
|
|||
#define PI 3.141592653589793
|
||||
|
||||
float smin(float a, float b, float k) {
|
||||
float h = max(k - abs(a - b), 0.0) / k;
|
||||
return min(a, b) - h * h * h * k * (1.0 / 6.0);
|
||||
}
|
||||
|
||||
float rectSDF(vec2 p, vec2 b) {
|
||||
vec2 d = abs(p) - b;
|
||||
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
|
||||
}
|
||||
|
||||
float fill(float d, float aa) {
|
||||
return 1.0 - smoothstep(0.0, aa, d);
|
||||
}
|
||||
|
||||
float stroke(float d, float w, float aa) {
|
||||
return 1.0 - smoothstep(0.0, aa, abs(d) - w);
|
||||
}
|
||||
|
||||
float box01(vec2 uv, vec2 c, vec2 s, float aa) {
|
||||
return fill(rectSDF(uv - c, s), aa);
|
||||
}
|
||||
|
||||
float frame01(vec2 uv, vec2 c, vec2 s, float w, float aa) {
|
||||
return stroke(rectSDF(uv - c, s), w, aa);
|
||||
}
|
||||
|
||||
float in01(vec2 uv) {
|
||||
return step(0.0, uv.x) * step(0.0, uv.y) * step(uv.x, 1.0) * step(uv.y, 1.0);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// Very simple block-letter glyphs in a 0..1 local cell.
|
||||
// Not perfect typography, but close enough to read.
|
||||
// ------------------------------------------------------------------
|
||||
|
||||
float glyphC(vec2 uv, float aa) {
|
||||
float m = 0.0;
|
||||
m = max(m, box01(uv, vec2(0.22, 0.50), vec2(0.10, 0.42), aa));
|
||||
m = max(m, box01(uv, vec2(0.52, 0.84), vec2(0.30, 0.08), aa));
|
||||
m = max(m, box01(uv, vec2(0.52, 0.16), vec2(0.30, 0.08), aa));
|
||||
return m * in01(uv);
|
||||
}
|
||||
|
||||
float glyphA(vec2 uv, float aa) {
|
||||
float m = 0.0;
|
||||
m = max(m, box01(uv, vec2(0.22, 0.50), vec2(0.10, 0.42), aa));
|
||||
m = max(m, box01(uv, vec2(0.78, 0.50), vec2(0.10, 0.42), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.84), vec2(0.30, 0.08), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.50), vec2(0.30, 0.08), aa));
|
||||
return m * in01(uv);
|
||||
}
|
||||
|
||||
float glyphS(vec2 uv, float aa) {
|
||||
float m = 0.0;
|
||||
m = max(m, box01(uv, vec2(0.50, 0.84), vec2(0.30, 0.08), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.50), vec2(0.30, 0.08), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.16), vec2(0.30, 0.08), aa));
|
||||
m = max(m, box01(uv, vec2(0.22, 0.67), vec2(0.10, 0.17), aa));
|
||||
m = max(m, box01(uv, vec2(0.78, 0.33), vec2(0.10, 0.17), aa));
|
||||
return m * in01(uv);
|
||||
}
|
||||
|
||||
float glyphH(vec2 uv, float aa) {
|
||||
float m = 0.0;
|
||||
m = max(m, box01(uv, vec2(0.22, 0.50), vec2(0.10, 0.42), aa));
|
||||
m = max(m, box01(uv, vec2(0.78, 0.50), vec2(0.10, 0.42), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.50), vec2(0.30, 0.08), aa));
|
||||
return m * in01(uv);
|
||||
}
|
||||
|
||||
float glyphM(vec2 uv, float aa) {
|
||||
float m = 0.0;
|
||||
m = max(m, box01(uv, vec2(0.16, 0.50), vec2(0.09, 0.42), aa));
|
||||
m = max(m, box01(uv, vec2(0.84, 0.50), vec2(0.09, 0.42), aa));
|
||||
m = max(m, box01(uv, vec2(0.38, 0.65), vec2(0.08, 0.27), aa));
|
||||
m = max(m, box01(uv, vec2(0.62, 0.65), vec2(0.08, 0.27), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.84), vec2(0.25, 0.08), aa));
|
||||
return m * in01(uv);
|
||||
}
|
||||
|
||||
float glyphO(vec2 uv, float aa) {
|
||||
float outer = box01(uv, vec2(0.50, 0.50), vec2(0.34, 0.42), aa);
|
||||
float inner = box01(uv, vec2(0.50, 0.50), vec2(0.18, 0.24), aa);
|
||||
return max(0.0, outer - inner) * in01(uv);
|
||||
}
|
||||
|
||||
float glyphN(vec2 uv, float aa) {
|
||||
float m = 0.0;
|
||||
m = max(m, box01(uv, vec2(0.20, 0.50), vec2(0.10, 0.42), aa));
|
||||
m = max(m, box01(uv, vec2(0.80, 0.50), vec2(0.10, 0.42), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.50), vec2(0.08, 0.42), aa));
|
||||
return m * in01(uv);
|
||||
}
|
||||
|
||||
float glyphE(vec2 uv, float aa) {
|
||||
float m = 0.0;
|
||||
m = max(m, box01(uv, vec2(0.22, 0.50), vec2(0.10, 0.42), aa));
|
||||
m = max(m, box01(uv, vec2(0.52, 0.84), vec2(0.30, 0.08), aa));
|
||||
m = max(m, box01(uv, vec2(0.48, 0.50), vec2(0.26, 0.08), aa));
|
||||
m = max(m, box01(uv, vec2(0.52, 0.16), vec2(0.30, 0.08), aa));
|
||||
return m * in01(uv);
|
||||
}
|
||||
|
||||
float glyphY(vec2 uv, float aa) {
|
||||
float m = 0.0;
|
||||
m = max(m, box01(uv, vec2(0.22, 0.72), vec2(0.10, 0.20), aa));
|
||||
m = max(m, box01(uv, vec2(0.78, 0.72), vec2(0.10, 0.20), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.50), vec2(0.10, 0.12), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.20), vec2(0.10, 0.20), aa));
|
||||
return m * in01(uv);
|
||||
}
|
||||
|
||||
float glyphR(vec2 uv, float aa) {
|
||||
float m = 0.0;
|
||||
m = max(m, box01(uv, vec2(0.22, 0.50), vec2(0.10, 0.42), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.84), vec2(0.28, 0.08), aa));
|
||||
m = max(m, box01(uv, vec2(0.72, 0.68), vec2(0.10, 0.16), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.50), vec2(0.26, 0.08), aa));
|
||||
m = max(m, box01(uv, vec2(0.68, 0.24), vec2(0.10, 0.20), aa));
|
||||
return m * in01(uv);
|
||||
}
|
||||
|
||||
float glyphD(vec2 uv, float aa) {
|
||||
float m = 0.0;
|
||||
m = max(m, box01(uv, vec2(0.22, 0.50), vec2(0.10, 0.42), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.84), vec2(0.26, 0.08), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.16), vec2(0.26, 0.08), aa));
|
||||
m = max(m, box01(uv, vec2(0.74, 0.50), vec2(0.10, 0.34), aa));
|
||||
return m * in01(uv);
|
||||
}
|
||||
|
||||
float drawGlyph(int g, vec2 uv, float aa) {
|
||||
if (g == 0) return glyphC(uv, aa);
|
||||
if (g == 1) return glyphA(uv, aa);
|
||||
if (g == 2) return glyphS(uv, aa);
|
||||
if (g == 3) return glyphH(uv, aa);
|
||||
if (g == 4) return glyphM(uv, aa);
|
||||
if (g == 5) return glyphO(uv, aa);
|
||||
if (g == 6) return glyphN(uv, aa);
|
||||
if (g == 7) return glyphE(uv, aa);
|
||||
if (g == 8) return glyphY(uv, aa);
|
||||
if (g == 9) return glyphR(uv, aa);
|
||||
if (g == 10) return glyphD(uv, aa);
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
float placeGlyph(vec2 q, vec4 box, int glyphId, float aa) {
|
||||
vec2 uv = (q - box.xy) / (box.zw - box.xy);
|
||||
return drawGlyph(glyphId, uv, aa);
|
||||
}
|
||||
|
||||
float dollarMark(vec2 uv, float aa) {
|
||||
float m = 0.0;
|
||||
|
||||
// vertical bar
|
||||
m = max(m, box01(uv, vec2(0.50, 0.50), vec2(0.05, 0.42), aa));
|
||||
|
||||
// top/bottom heavy bars to make a chunky $
|
||||
m = max(m, box01(uv, vec2(0.50, 0.82), vec2(0.22, 0.10), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.50), vec2(0.22, 0.10), aa));
|
||||
m = max(m, box01(uv, vec2(0.50, 0.18), vec2(0.22, 0.10), aa));
|
||||
|
||||
// left upper / right lower chunks
|
||||
m = max(m, box01(uv, vec2(0.30, 0.66), vec2(0.10, 0.18), aa));
|
||||
m = max(m, box01(uv, vec2(0.70, 0.34), vec2(0.10, 0.18), aa));
|
||||
|
||||
return m * in01(uv);
|
||||
}
|
||||
|
||||
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
||||
vec2 uv = fragCoord.xy / iResolution.xy;
|
||||
vec4 base = texture(iChannel0, uv);
|
||||
vec3 col = base.rgb;
|
||||
|
||||
float aa = 1.6 / iResolution.y;
|
||||
|
||||
// ----------------------------------------------------------
|
||||
// Bouncing rectangular badge, DVD-logo style
|
||||
// ----------------------------------------------------------
|
||||
vec2 badgeSize = vec2(0.18, 0.44);
|
||||
vec2 minP = badgeSize * 0.5 + vec2(0.02, 0.03);
|
||||
vec2 maxP = vec2(1.0) - minP;
|
||||
|
||||
vec2 travel = maxP - minP;
|
||||
vec2 phase = fract(vec2(iTime * 0.060, iTime * 0.047) + vec2(0.21, 0.58));
|
||||
vec2 tri = abs(phase * 2.0 - 1.0);
|
||||
vec2 center = minP + travel * tri;
|
||||
|
||||
vec2 p = uv - center;
|
||||
p.x *= iResolution.x / iResolution.y;
|
||||
|
||||
vec2 halfSize = vec2(badgeSize.x * 0.5 * iResolution.x / iResolution.y, badgeSize.y * 0.5);
|
||||
|
||||
// q = normalized coordinates inside the badge
|
||||
vec2 q = p / halfSize;
|
||||
q = q * 0.5 + 0.5;
|
||||
|
||||
float outer = fill(rectSDF(p, halfSize), aa);
|
||||
float border = frame01(p, vec2(0.0), halfSize, 0.006, aa);
|
||||
|
||||
// shadow
|
||||
float shadow = fill(rectSDF(p - vec2(0.010, -0.012), halfSize), aa) * 0.18;
|
||||
col = mix(col, col * 0.80, shadow);
|
||||
|
||||
// white sticker body
|
||||
vec3 logoCol = vec3(0.0);
|
||||
logoCol += outer * vec3(0.96);
|
||||
logoCol = mix(logoCol, vec3(0.04), border);
|
||||
|
||||
// top word: CASH MONEY
|
||||
float top = 0.0;
|
||||
float y0 = 0.78;
|
||||
float y1 = 0.96;
|
||||
float w = 0.075;
|
||||
float gap = 0.010;
|
||||
|
||||
top = max(top, placeGlyph(q, vec4(0.04, y0, 0.04 + w, y1), 0, aa)); // C
|
||||
top = max(top, placeGlyph(q, vec4(0.04 + 1.0*(w+gap), y0, 0.04 + 1.0*(w+gap) + w, y1), 1, aa)); // A
|
||||
top = max(top, placeGlyph(q, vec4(0.04 + 2.0*(w+gap), y0, 0.04 + 2.0*(w+gap) + w, y1), 2, aa)); // S
|
||||
top = max(top, placeGlyph(q, vec4(0.04 + 3.0*(w+gap), y0, 0.04 + 3.0*(w+gap) + w, y1), 3, aa)); // H
|
||||
|
||||
float start2 = 0.40;
|
||||
top = max(top, placeGlyph(q, vec4(start2 + 0.0*(w+gap), y0, start2 + 0.0*(w+gap) + w, y1), 4, aa)); // M
|
||||
top = max(top, placeGlyph(q, vec4(start2 + 1.0*(w+gap), y0, start2 + 1.0*(w+gap) + w, y1), 5, aa)); // O
|
||||
top = max(top, placeGlyph(q, vec4(start2 + 2.0*(w+gap), y0, start2 + 2.0*(w+gap) + w, y1), 6, aa)); // N
|
||||
top = max(top, placeGlyph(q, vec4(start2 + 3.0*(w+gap), y0, start2 + 3.0*(w+gap) + w, y1), 7, aa)); // E
|
||||
top = max(top, placeGlyph(q, vec4(start2 + 4.0*(w+gap), y0, start2 + 4.0*(w+gap) + w, y1), 8, aa)); // Y
|
||||
|
||||
// bottom word: RECORDS
|
||||
float bottom = 0.0;
|
||||
float by0 = 0.03;
|
||||
float by1 = 0.19;
|
||||
float bw = 0.095;
|
||||
float bg = 0.012;
|
||||
float bstart = 0.10;
|
||||
|
||||
bottom = max(bottom, placeGlyph(q, vec4(bstart + 0.0*(bw+bg), by0, bstart + 0.0*(bw+bg) + bw, by1), 9, aa)); // R
|
||||
bottom = max(bottom, placeGlyph(q, vec4(bstart + 1.0*(bw+bg), by0, bstart + 1.0*(bw+bg) + bw, by1), 7, aa)); // E
|
||||
bottom = max(bottom, placeGlyph(q, vec4(bstart + 2.0*(bw+bg), by0, bstart + 2.0*(bw+bg) + bw, by1), 0, aa)); // C
|
||||
bottom = max(bottom, placeGlyph(q, vec4(bstart + 3.0*(bw+bg), by0, bstart + 3.0*(bw+bg) + bw, by1), 5, aa)); // O
|
||||
bottom = max(bottom, placeGlyph(q, vec4(bstart + 4.0*(bw+bg), by0, bstart + 4.0*(bw+bg) + bw, by1), 9, aa)); // R
|
||||
bottom = max(bottom, placeGlyph(q, vec4(bstart + 5.0*(bw+bg), by0, bstart + 5.0*(bw+bg) + bw, by1), 10, aa)); // D
|
||||
bottom = max(bottom, placeGlyph(q, vec4(bstart + 6.0*(bw+bg), by0, bstart + 6.0*(bw+bg) + bw, by1), 2, aa)); // S
|
||||
|
||||
// central $
|
||||
vec2 suv = (q - vec2(0.18, 0.23)) / vec2(0.64, 0.50);
|
||||
float dollar = dollarMark(suv, aa);
|
||||
|
||||
// black print
|
||||
float printMask = max(max(top, bottom), dollar);
|
||||
logoCol = mix(logoCol, vec3(0.03), printMask);
|
||||
|
||||
// small gold glint so it still fits the bling theme
|
||||
float glint = pow(max(0.0, sin((uv.x * 4.0 + uv.y * 2.0) * PI * 2.0 - iTime * 1.4)), 18.0);
|
||||
logoCol += outer * glint * vec3(1.0, 0.84, 0.35) * 0.12;
|
||||
|
||||
// subtle sticker highlight
|
||||
float shine = 1.0 - smoothstep(0.0, 0.25, abs(q.x - 0.25) + abs(q.y - 0.78));
|
||||
logoCol += outer * shine * vec3(1.0) * 0.08;
|
||||
|
||||
// composite behind text
|
||||
col = mix(col, col + logoCol, outer * 0.22);
|
||||
|
||||
fragColor = vec4(clamp(col, 0.0, 1.0), base.a);
|
||||
}
|
||||
142
dot_config/ghostty/shaders/custom/cash_money_dvd.glsl
Normal file
142
dot_config/ghostty/shaders/custom/cash_money_dvd.glsl
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
#define PI 3.141592653589793
|
||||
|
||||
float sdEllipse(vec2 p, vec2 r) {
|
||||
vec2 q = p / r;
|
||||
return (length(q) - 1.0) * min(r.x, r.y);
|
||||
}
|
||||
|
||||
float sdCircle(vec2 p, float r) {
|
||||
return length(p) - r;
|
||||
}
|
||||
|
||||
float sdBox(vec2 p, vec2 b) {
|
||||
vec2 d = abs(p) - b;
|
||||
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
|
||||
}
|
||||
|
||||
float opStroke(float d, float w) {
|
||||
return abs(d) - w;
|
||||
}
|
||||
|
||||
float fill(float d) {
|
||||
return 1.0 - smoothstep(0.0, 0.004, d);
|
||||
}
|
||||
|
||||
float stroke(float d, float w) {
|
||||
return 1.0 - smoothstep(0.0, 0.004, opStroke(d, w));
|
||||
}
|
||||
|
||||
// Simple dollar sign SDF-ish shape
|
||||
float dollarSign(vec2 p) {
|
||||
float s = 0.0;
|
||||
|
||||
// main vertical bar
|
||||
float bar = fill(sdBox(p, vec2(0.018, 0.18)));
|
||||
|
||||
// upper curve
|
||||
vec2 pu = p - vec2(0.02, 0.07);
|
||||
float upperOuter = stroke(sdCircle(pu, 0.11), 0.020);
|
||||
float upperCut = fill(sdBox(pu - vec2(-0.07, 0.00), vec2(0.08, 0.14)));
|
||||
float upper = upperOuter * (1.0 - upperCut);
|
||||
|
||||
// lower curve
|
||||
vec2 pl = p - vec2(-0.02, -0.07);
|
||||
float lowerOuter = stroke(sdCircle(pl, 0.11), 0.020);
|
||||
float lowerCut = fill(sdBox(pl - vec2(0.07, 0.00), vec2(0.08, 0.14)));
|
||||
float lower = lowerOuter * (1.0 - lowerCut);
|
||||
|
||||
s = max(bar, max(upper, lower));
|
||||
return s;
|
||||
}
|
||||
|
||||
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
||||
vec2 uv = fragCoord.xy / iResolution.xy;
|
||||
vec4 base = texture(iChannel0, uv);
|
||||
vec3 col = base.rgb;
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// Bouncing "DVD logo" style motion
|
||||
// ------------------------------------------------------------------
|
||||
vec2 logoSize = vec2(0.23, 0.13); // width/height of medallion in UV space
|
||||
vec2 minP = logoSize * 0.5 + vec2(0.03, 0.04);
|
||||
vec2 maxP = vec2(1.0) - minP;
|
||||
|
||||
// Ping-pong motion
|
||||
vec2 travel = maxP - minP;
|
||||
vec2 phase = fract(vec2(iTime * 0.070, iTime * 0.052) + vec2(0.17, 0.61));
|
||||
vec2 tri = abs(phase * 2.0 - 1.0);
|
||||
vec2 center = minP + travel * tri;
|
||||
|
||||
// Local coordinates around logo center
|
||||
vec2 p = uv - center;
|
||||
p.x *= iResolution.x / iResolution.y; // aspect correction
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// Cash Money inspired medallion
|
||||
// ------------------------------------------------------------------
|
||||
float outer = sdEllipse(p, vec2(0.17, 0.095));
|
||||
float inner = sdEllipse(p, vec2(0.145, 0.078));
|
||||
float core = sdEllipse(p, vec2(0.122, 0.060));
|
||||
|
||||
float outerFill = fill(outer);
|
||||
float innerRing = stroke(inner, 0.010);
|
||||
float coreFill = fill(core);
|
||||
|
||||
// Rim beading / jewelry vibe
|
||||
float angle = atan(p.y, p.x);
|
||||
float beads = pow(0.5 + 0.5 * sin(angle * 26.0 - iTime * 2.2), 8.0);
|
||||
beads *= stroke(sdEllipse(p, vec2(0.158, 0.086)), 0.008);
|
||||
|
||||
// Chrome/gold light sweep
|
||||
float sweep = pow(max(0.0, sin((uv.x * 4.0 + uv.y * 2.6) * PI * 2.0 - iTime * 1.7)), 18.0);
|
||||
|
||||
vec3 darkGold = vec3(0.28, 0.12, 0.02);
|
||||
vec3 gold = vec3(0.95, 0.67, 0.16);
|
||||
vec3 paleGold = vec3(1.00, 0.88, 0.52);
|
||||
vec3 diamond = vec3(1.00, 0.96, 0.85);
|
||||
|
||||
vec3 logoCol = vec3(0.0);
|
||||
|
||||
// outer medallion
|
||||
logoCol += outerFill * mix(darkGold, gold, 0.65);
|
||||
logoCol += innerRing * paleGold * 0.9;
|
||||
logoCol += beads * paleGold * 0.8;
|
||||
logoCol += coreFill * mix(gold, paleGold, 0.35);
|
||||
|
||||
// embossed center
|
||||
float emboss = 0.5 + 0.5 * sin(p.x * 28.0 + p.y * 12.0 - iTime * 0.6);
|
||||
logoCol += coreFill * emboss * vec3(0.10, 0.05, 0.01);
|
||||
|
||||
// dollar sign centerpiece
|
||||
float ds = dollarSign(p * 1.7);
|
||||
logoCol = mix(logoCol, diamond, ds * 0.9);
|
||||
logoCol += ds * paleGold * 0.35;
|
||||
|
||||
// little sparkle hits
|
||||
float sparkle1 = exp(-length((p - vec2(-0.07, 0.03)) * vec2(1.0, 1.2)) * 60.0);
|
||||
float sparkle2 = exp(-length((p - vec2(0.08, -0.01)) * vec2(1.0, 1.2)) * 80.0);
|
||||
float cross1 = (1.0 - smoothstep(0.0, 0.004, abs(p.x + 0.07))) * (1.0 - smoothstep(0.0, 0.05, abs(p.y - 0.03)));
|
||||
cross1 += (1.0 - smoothstep(0.0, 0.004, abs(p.y - 0.03))) * (1.0 - smoothstep(0.0, 0.05, abs(p.x + 0.07)));
|
||||
float cross2 = (1.0 - smoothstep(0.0, 0.003, abs(p.x - 0.08))) * (1.0 - smoothstep(0.0, 0.04, abs(p.y + 0.01)));
|
||||
cross2 += (1.0 - smoothstep(0.0, 0.003, abs(p.y + 0.01))) * (1.0 - smoothstep(0.0, 0.04, abs(p.x - 0.08)));
|
||||
|
||||
float twinkle = 0.65 + 0.35 * sin(iTime * 5.0);
|
||||
logoCol += (sparkle1 * cross1 + sparkle2 * cross2) * paleGold * twinkle * 0.9;
|
||||
|
||||
// moving light sweep across logo
|
||||
logoCol += outerFill * sweep * vec3(1.0, 0.92, 0.60) * 0.45;
|
||||
|
||||
// subtle shadow behind logo
|
||||
float shadow = fill(sdEllipse(p - vec2(0.010, -0.010), vec2(0.17, 0.095)));
|
||||
shadow *= 0.18;
|
||||
|
||||
// Logo mask
|
||||
float logoMask = outerFill;
|
||||
|
||||
// Keep it in background so text stays readable
|
||||
// Darken behind medallion slightly, then add logo
|
||||
col = mix(col, col * 0.82, shadow);
|
||||
col = mix(col, col + logoCol, logoMask * 0.32);
|
||||
|
||||
fragColor = vec4(clamp(col, 0.0, 1.0), base.a);
|
||||
}
|
||||
5
dot_config/ghostty/shaders/custom/probe_invert.glsl
Normal file
5
dot_config/ghostty/shaders/custom/probe_invert.glsl
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
||||
vec2 uv = fragCoord.xy / iResolution.xy;
|
||||
vec4 c = texture(iChannel0, uv);
|
||||
fragColor = vec4(1.0 - c.rgb, 1.0);
|
||||
}
|
||||
Loading…
Reference in a new issue