mirror of
https://github.com/mr0xb/dotfiles_chezmoi.git
synced 2026-08-27 19:34:57 -04:00
initial commit
This commit is contained in:
commit
f1374f54c4
46 changed files with 4121 additions and 0 deletions
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);
|
||||
}
|
||||
Loading…
Reference in a new issue