This commit is contained in:
2026-02-07 21:05:41 -06:00
parent 3146fbcc65
commit 0603e0a691
181 changed files with 6295 additions and 3964 deletions
+1 -1
View File
@@ -1,2 +1,2 @@
[UserFeedback]
LastEncouragement=@DateTime(\0\0\0\x10\0\0\0\0\0\0%\x8dM\x3\xb0&\xf9\0)
LastEncouragement=@DateTime(\0\0\0\x10\0\0\0\0\0\0%\x8d\x8b\x2w/\x18\0)
-382
View File
@@ -1,382 +0,0 @@
### MangoHud configuration file
### Uncomment any options you wish to enable. Default options are left uncommented
### Use some_parameter=0 to disable a parameter (only works with on/off parameters)
### Everything below can be used / overridden with the environment variable MANGOHUD_CONFIG instead
################ INFORMATIONAL #################
## prints possible options on stdout
# help
################ PERFORMANCE #################
### Limit the application FPS. Comma-separated list of one or more FPS values (e.g. 0,30,60). 0 means unlimited (unless VSynced)
fps_limit=180
### early = wait before present, late = wait after present
# fps_limit_method=
### VSync [0-3] 0 = adaptive; 1 = off; 2 = mailbox; 3 = on
# vsync=-1
### OpenGL VSync [0-N] 0 = off; >=1 = wait for N v-blanks, N > 1 acts as a FPS limiter (FPS = display refresh rate / N)
# gl_vsync=-2
### Mip-map LoD bias. Negative values will increase texture sharpness (and aliasing)
## Positive values will increase texture blurriness (-16 to 16)
# picmip=-17
### Anisotropic filtering level. Improves sharpness of textures viewed at an angle (0 to 16)
# af=-1
### Force bicubic filtering
# bicubic
### Force trilinear filtering
# trilinear
### Disable linear texture filtering. Makes textures look blocky
# retro
################### VISUAL ###################
### Legacy layout
# legacy_layout=0
### pre defined presets
# -1 = default
# 0 = no display
# 1 = fps only
# 2 = horizontal view
# 3 = extended
# 4 = high detailed information
preset=0
### Enable most of the toggleable parameters (currently excludes `histogram`)
# full
### Show FPS only. ***Not meant to be used with other display params***
# fps_only
### Display custom centered text, useful for a header
# custom_text_center=
### Display the current system time
# time
## removes the time label
# time_no_label
### Time formatting examples
## %H:%M
## [ %T %F ]
## %X # locally formatted time, because of limited glyph range, missing characters may show as '?' (e.g. Japanese)
# time_format="%T"
### Display MangoHud version
# version
### Display the current GPU information
## Note: gpu_mem_clock and gpu_mem_temp also need "vram" to be enabled
gpu_stats
# gpu_temp
# gpu_junction_temp
# gpu_core_clock
# gpu_mem_temp
# gpu_mem_clock
# gpu_power
# gpu_text=
# gpu_load_change
# gpu_load_value=60,90
# gpu_load_color=39F900,FDFD09,B22222
## GPU fan in rpm on AMD, FAN in percent on NVIDIA
# gpu_fan
## gpu_voltage only works on AMD GPUs
# gpu_voltage
## Select list of GPUs to display
# gpu_list=0,1
### Display the current CPU information
cpu_stats
# cpu_temp
# cpu_power
# cpu_text=
# cpu_mhz
# cpu_load_change
# cpu_load_value=60,90
# cpu_load_color=39F900,FDFD09,B22222
### Display the current CPU load & frequency for each core
# core_load
# core_load_change
# core_bars
### Display IO read and write for the app (not system)
# io_read
# io_write
### Display system vram / ram / swap space usage
# vram
# ram
# swap
### Display per process memory usage
## Show resident memory and other types, if enabled
# procmem
# procmem_shared
# procmem_virt
### Display battery information
# battery
# battery_icon
# device_battery=gamepad,mouse
# device_battery_icon
# battery_watt
# battery_time
### Display FPS and frametime
fps
# fps_sampling_period=500
# fps_color_change
# fps_value=30,60
# fps_color=B22222,FDFD09,39F900
# fps_text=""
frametime
# frame_count
## fps_metrics takes a list of decimal values or the value avg
# fps_metrics=avg,0.01
### Display GPU throttling status based on Power, current, temp or "other"
## Only shows if throttling is currently happening
throttling_status
## Same as throttling_status but displays throttling on the frametime graph
#throttling_status_graph
### Display miscellaneous information
# engine_version
# engine_short_names
# gpu_name
# vulkan_driver
# wine
# exec_name
# winesync
# present_mode
### Display loaded MangoHud architecture
# arch
### Display the frametime line graph
frame_timing
# frame_timing_detailed
# dynamic_frame_timing
# histogram
### Display GameMode / vkBasalt running status
# gamemode
# vkbasalt
### Gamescope related options
## Display the status of FSR (only works in gamescope)
# fsr
## Hides the sharpness info for the `fsr` option (only available in gamescope)
# hide_fsr_sharpness
## Shows the graph of gamescope app frametimes and latency (only on gamescope obviously)
# debug
## Display the status of HDR (only works in gamescope)
# hdr
## Display the current refresh rate (only works in gamescope)
# refresh_rate
### graphs displays one or more graphs that you chose
## separated by ",", available graphs are
## gpu_load,cpu_load,gpu_core_clock,gpu_mem_clock,vram,ram,cpu_temp,gpu_temp
# graphs=
### mangoapp related options
## Enables mangoapp to be displayed above the Steam UI
# mangoapp_steam
### Steam Deck options
## Shows the Steam Deck fan rpm
# fan
### Display current FPS limit
# show_fps_limit
### Display the current resolution
# resolution
### Display current display session
# display_server
### Display temperature in fahrenheit
# temp_fahrenheit
### Display custom text
# custom_text=
### Display output of Bash command in next column
# exec=
### Display media player metadata
# media_player
## for example spotify
# media_player_name=
## Format metadata, lines are delimited by ; (wip)
## example: {title};{artist};{album}
## example: Track:;{title};By:;{artist};From:;{album}
# media_player_format=title,artist,album
### Network interface throughput
# network
## Network can take arguments but it's not required.
## without arguments it shows all interfaces
## arguments set which interfaces will be displayed
# network=eth0,wlo1
### Change the hud font size
# font_size=24
# font_scale=1.0
# font_size_text=24
# font_scale_media_player=0.55
# no_small_font
### Change default font (set location to TTF/OTF file)
## Set font for the whole hud
# font_file=
## Set font only for text like media player metadata
# font_file_text=
## Set font glyph ranges. Defaults to Latin-only. Don't forget to set font_file/font_file_text to font that supports these
## Probably don't enable all at once because of memory usage and hardware limits concerns
## If you experience crashes or text is just squares, reduce glyph range or reduce font size
# font_glyph_ranges=korean,chinese,chinese_simplified,japanese,cyrillic,thai,vietnamese,latin_ext_a,latin_ext_b
### Outline text
text_outline
# text_outline_color = 000000
# text_outline_thickness = 1.5
### Change the hud position
# position=top-left
### Change the corner roundness
# round_corners=0
### Remove margins around MangoHud
# hud_no_margin
### Display compact version of MangoHud
# hud_compact
### Display MangoHud in a horizontal position
# horizontal
# horizontal_stretch
### Disable / hide the hud by default
# no_display
### Show FEX-Emu statistics
## Only useful for Arm64 devices running applications under emulation
# fex_stats
### Hud position offset
# offset_x=0
# offset_y=0
### Hud dimensions
# width=0
# height=140
# table_columns=3
# cellpadding_y=-0.085
### Hud transparency / alpha
# background_alpha=0.5
# alpha=1.0
### FCAT overlay
### This enables an FCAT overlay to perform frametime analysis on the final image stream.
### Enable the overlay
# fcat
### Set the width of the FCAT overlay.
### 24 is a performance optimization on AMD GPUs that should not have adverse effects on nVidia GPUs.
### A minimum of 20 pixels is recommended by nVidia.
# fcat_overlay_width=24
### Set the screen edge, this can be useful for special displays that don't update from top edge to bottom. This goes from 0 (left side) to 3 (top edge), counter-clockwise.
# fcat_screen_edge=0
### Color customization
# text_color=FFFFFF
# gpu_color=2E9762
# cpu_color=2E97CB
# vram_color=AD64C1
# ram_color=C26693
# engine_color=EB5B5B
# io_color=A491D3
# frametime_color=00FF00
# background_color=020202
# media_player_color=FFFFFF
# wine_color=EB5B5B
# battery_color=FF9078
# network_color=E07B85
### Specify GPU with PCI bus ID
### Set to 'domain:bus:slot.function'
### Example:
### $ lspci | grep A770
### 03:00.0 VGA compatible controller: Intel Corporation DG2 [Arc A770] (rev 08)
# pci_dev=0000:03:00.0
### Blacklist
# blacklist=
### Control over socket
### Enable and set socket name, '%p' is replaced with process id
## example: mangohud
## example: mangohud-%p
# control = -1
################ WORKAROUNDS #################
### Options starting with "gl_*" are for OpenGL
### Specify what to use for getting display size. Options are "viewport", "scissorbox" or disabled. Defaults to using glXQueryDrawable
# gl_size_query=viewport
### (Re)bind given framebuffer before MangoHud gets drawn. Helps with Crusader Kings III
# gl_bind_framebuffer=0
### Don't swap origin if using GL_UPPER_LEFT. Helps with Ryujinx
# gl_dont_flip=1
################ INTERACTION #################
### Change toggle keybinds for the hud & logging
# toggle_hud=Shift_R+F12
# toggle_hud_position=Shift_R+F11
# toggle_preset=Shift_R+F10
# toggle_fps_limit=Shift_L+F1
# toggle_logging=Shift_L+F2
# reload_cfg=Shift_L+F4
# upload_log=Shift_L+F3
# reset_fps_metrics=Shift_R+f9
#################### LOG #####################
### Automatically start the log after X seconds
# autostart_log=
### Set amount of time in seconds that the logging will run for
# log_duration=
### Change the default log interval, 0 is default
# log_interval=0
### Set location of the output files (required for logging)
# output_folder=/home/<USERNAME>/mangologs
### Permit uploading logs directly to FlightlessMango.com
## set to 1 to enable
# permit_upload=0
### Define a '+'-separated list of percentiles shown in the benchmark results
### Use "AVG" to get a mean average. Default percentiles are 97+AVG+1+0.1
## example: ['97', 'AVG', '1', '0.1']
# benchmark_percentiles=97,AVG
## Adds more headers and information such as versioning to the log. This format is not supported on flightlessmango.com (yet)
# log_versioning
## Enable automatic uploads of logs to flightlessmango.com
# upload_logs
# output_file=""
+1 -1
View File
@@ -1,2 +1,2 @@
[Global]
LastNotificationTime=2025,12,16,22,11,34.91,UTC
LastNotificationTime=2026,2,7,23,52,37.581,UTC
+4
View File
@@ -13,6 +13,7 @@ alias gpu="inxi -Gxz"
alias box="SHELL=/usr/bin/fish toolbox enter"
alias reload="clear; source ~/.config/fish/config.fish"
alias exe="chmod +x"
alias py="python3"
# Directory Shortcuts
alias gosteam="cd ~/.local/share/Steam/steamapps/common/"
@@ -23,6 +24,8 @@ alias goentries="cd ~/.local/share/applications/"
alias aliasconf="nvim ~/dotfiles/.config/aliases"
alias fishconf="nvim ~/dotfiles/.config/fish/config.fish"
alias nvimconf="nvim ~/dotfiles/.config/nvim/init.lua"
alias kittyconf="nvim ~/dotfiles/.config/kitty/kitty.conf"
alias ghosttyconf="nvim ~/dotfiles/.config/ghostty/config"
# Toolbox Commands
alias in="sudo nala install -y"
@@ -30,4 +33,5 @@ alias up="sudo nala update"
alias upg="up && sudo nala upgrade"
alias se="nala search"
alias re="sudo nala remove"
alias purge="sudo nala purge"
alias rein="sudo nala reinstall"
+9
View File
@@ -0,0 +1,9 @@
[Adapters]
02:00:45:E6:E8:36_powered=false
50:C2:E8:EE:B5:3C_powered=false
[Devices]
connectedDevices=
[General]
launchState=enable
+9
View File
@@ -1,3 +1,6 @@
[ContextMenu]
ShowAddToPlaces=false
[General]
Version=202
ViewPropsTimestamp=2025,11,25,17,7,8.294
@@ -8,3 +11,9 @@ Places Icons Static Size=22
[MainWindow]
MenuBar=Disabled
[PreviewSettings]
Plugins=appimagethumbnail,opendocumentthumbnail,rawthumbnail,cursorthumbnail,imagethumbnail,ffmpegthumbs,exrthumbnail,windowsimagethumbnail,gsthumbnail,jpegthumbnail,mltpreview,blenderthumbnail,palathumbcreator,windowsexethumbnail,svgthumbnail,audiothumbnail,comicbookthumbnail,kraorathumbnail,fontthumbnail,djvuthumbnail,mobithumbnail,ebookthumbnail,directorythumbnail,gdk-pixbuf-thumbnailer,librsvg
[VersionControl]
enabledPlugins=Git
+8
View File
@@ -1,11 +1,19 @@
[EmbedSettings]
embed-application/json=false
embed-application/vnd.debian.binary-package=false
embed-application/vnd.microsoft.portable-executable=false
embed-application/x-blender=false
embed-application/x-docbook+xml=false
embed-application/x-msdownload=false
embed-application/x-msi=false
embed-application/x-nes-rom=false
embed-application/x-yaml=false
embed-application/x-zerosize=false
embed-application/zip=false
embed-text/markdown=false
embed-text/plain=false
embed-text/rust=false
embed-text/x-cmake=false
embed-x-scheme-handler/http=false
embed-x-scheme-handler/https=false
embed-x-scheme-handler/nxm=false
+1 -1
View File
@@ -6,7 +6,7 @@ if status is-interactive
end
fish_add_path ~/.spicetify
fish_add_path ~/.bin
fish_add_path ~/Scripts/
# Created by `pipx` on 2025-12-14 01:29:13
set PATH $PATH /home/cory/.local/bin
+1 -1
View File
@@ -33,4 +33,4 @@ SETUVAR fish_pager_color_description:yellow\x1e\x2di
SETUVAR fish_pager_color_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
SETUVAR fish_pager_color_selected_background:\x2dr
SETUVAR fish_user_paths:/home/cory/\x2ebin\x1e/var/home/cory/Scripts\x1e/home/cory/\x2espicetify
SETUVAR fish_user_paths:/home/cory/Scripts\x1e/home/cory/\x2ebin\x1e/var/home/cory/Scripts\x1e/home/cory/\x2espicetify
+14
View File
@@ -0,0 +1,14 @@
font-family = "CaskaydiaMonoNerdFont"
font-size = 16
window-padding-x = 4
background-opacity = 0.05
background-opacity = 0.5
background-blur = true
window-theme = light
cursor-color = red
command = fish
theme = Everforest Light Med
theme = Everforest Dark Hard
custom-shader = shaders/cursor_blaze.glsl
# custom-shader = shaders/cursor_sweep.glsl
custom-shader = shaders/ripple_rectangle_cursor.glsl
+20
View File
@@ -0,0 +1,20 @@
## Installation
Clone the repository:
```sh
git clone --depth 1 https://github.com/hackr-sh/ghostty-shaders
cd ghostty-shaders
```
Copy your preferred shader file to the Ghostty config directory:
```sh
cp <your-choice>.glsl ~/.config/ghostty/shaders/shader.glsl
```
Add the following line to your `~/.config/ghostty/config` file to enable the custom shader:
```ini
custom-shader = ~/.config/ghostty/shaders/shader.glsl
```
@@ -0,0 +1,40 @@
// credits: https://github.com/unkn0wncode
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
vec2 uv = fragCoord.xy / iResolution.xy;
// Create seamless gradient animation
float speed = 0.2;
float gradientFactor = (uv.x + uv.y) / 2.0;
// Use smoothstep and multiple sin waves for smoother transition
float t = sin(iTime * speed) * 0.5 + 0.5;
gradientFactor = smoothstep(0.0, 1.0, gradientFactor);
// Create smooth circular animation
float angle = iTime * speed;
vec3 color1 = vec3(0.1, 0.1, 0.5);
vec3 color2 = vec3(0.5, 0.1, 0.1);
vec3 color3 = vec3(0.1, 0.5, 0.1);
// Smooth interpolation between colors using multiple mix operations
vec3 gradientStartColor = mix(
mix(color1, color2, smoothstep(0.0, 1.0, sin(angle) * 0.5 + 0.5)),
color3,
smoothstep(0.0, 1.0, sin(angle + 2.0) * 0.5 + 0.5)
);
vec3 gradientEndColor = mix(
mix(color2, color3, smoothstep(0.0, 1.0, sin(angle + 1.0) * 0.5 + 0.5)),
color1,
smoothstep(0.0, 1.0, sin(angle + 3.0) * 0.5 + 0.5)
);
vec3 gradientColor = mix(gradientStartColor, gradientEndColor, gradientFactor);
vec4 terminalColor = texture(iChannel0, uv);
float mask = 1.0 - step(0.5, dot(terminalColor.rgb, vec3(1.0)));
vec3 blendedColor = mix(terminalColor.rgb, gradientColor, mask);
fragColor = vec4(blendedColor, terminalColor.a);
}
@@ -0,0 +1,64 @@
// Spotlight that follows the terminal caret (cursor) with correct bright-in/dark-out
// Fix: bright inside circle (=1.0), darkened outside by AMBIENT_LIGHT; fallback to random wander when no cursor
// ---------- Parameters ----------
const float SPOTLIGHT_RADIUS = 0.25; // Radius (normalized distance based on short edge)
const float EDGE_WIDTH = 0.020; // Edge transition width (0.01~0.04 for more natural effect)
const float AMBIENT_LIGHT = 0.50; // Minimum brightness outside circle (0=pure black, 1=no darkening)
const float FOLLOW_DURATION = 0.18; // Follow transition duration (seconds)
// --------------------------
float easeOutExpo(float t) {
return (t <= 0.0) ? 0.0 : 1.0 - pow(2.0, -10.0 * t);
}
vec2 fallbackWanderCenter() {
float t = iTime;
return vec2(
0.5 + 0.4 * sin(t * 1.0 + 0.0),
0.5 + 0.4 * sin(t * 1.3 + 3.14159265)
);
}
// Note: cursor rect in repo defines y as "top edge" → center y = y - h/2
vec2 rectCenterPx(vec4 r) { return vec2(r.x + 0.5*r.z, r.y - 0.5*r.w); }
// Returns UV center (0..1), or vec2(-1) if invalid
vec2 cursorCenterUV_smooth() {
vec4 cur = iCurrentCursor;
vec4 prv = iPreviousCursor;
bool usable = (cur.z > 0.0 && cur.w > 0.0);
if (!usable) return vec2(-1.0);
vec2 c0 = rectCenterPx(prv) / iResolution.xy;
vec2 c1 = rectCenterPx(cur) / iResolution.xy;
float t = clamp((iTime - iTimeCursorChange) / FOLLOW_DURATION, 0.0, 1.0);
float k = easeOutExpo(t);
vec2 c = mix(c0, c1, k);
return clamp(c, vec2(0.0), vec2(1.0));
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = fragCoord / iResolution.xy;
vec4 tex = texture(iChannel0, uv);
// Calculate center: prioritize cursor, otherwise random wander
vec2 center = cursorCenterUV_smooth();
if (center.x < 0.0) {
center = fallbackWanderCenter();
}
// "Circular distance" after aspect ratio correction
vec2 ratio = vec2(iResolution.x / iResolution.y, 1.0);
float d = length((uv - center) * ratio);
// Key fix: use canonical smoothstep order to get "inside circle mask" (center=1, outside=0)
// maskInside = 1 - smoothstep(R, R+W, d)
float maskInside = 1.0 - smoothstep(SPOTLIGHT_RADIUS, SPOTLIGHT_RADIUS + EDGE_WIDTH, d);
// Brightness: inside circle=1.0, outside=AMBIENT_LIGHT
float brightness = mix(AMBIENT_LIGHT, 1.0, maskInside);
fragColor = vec4(tex.rgb * brightness, tex.a);
}
+33
View File
@@ -0,0 +1,33 @@
// Original shader collected from: https://www.shadertoy.com/view/WsVSzV
// Licensed under Shadertoy's default since the original creator didn't provide any license. (CC BY NC SA 3.0)
// Slight modifications were made to give a green-ish effect.
// This shader was modified by April Hall (arithefirst)
// Sourced from https://github.com/m-ahdal/ghostty-shaders/blob/main/retro-terminal.glsl
// Changes made:
// - Removed tint
// - Made the boundaries match ghostty's background color
float warp = 0.25; // simulate curvature of CRT monitor
float scan = 0.50; // simulate darkness between scanlines
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
// squared distance from center
vec2 uv = fragCoord / iResolution.xy;
vec2 dc = abs(0.5 - uv);
dc *= dc;
// warp the fragment coordinates
uv.x -= 0.5; uv.x *= 1.0 + (dc.y * (0.3 * warp)); uv.x += 0.5;
uv.y -= 0.5; uv.y *= 1.0 + (dc.x * (0.4 * warp)); uv.y += 0.5;
// determine if we are drawing in a scanline
float apply = abs(sin(fragCoord.y) * 0.25 * scan);
// sample the texture
vec3 color = texture(iChannel0, uv).rgb;
// mix the sampled color with the scanline intensity
fragColor = vec4(mix(color, vec3(0.0), apply), 1.0);
}
+52
View File
@@ -0,0 +1,52 @@
// source: https://gist.github.com/qwerasd205/c3da6c610c8ffe17d6d2d3cc7068f17f
// credits: https://github.com/qwerasd205
// Golden spiral samples, [x, y, weight] weight is inverse of distance.
const vec3[24] samples = {
vec3(0.1693761725038636, 0.9855514761735895, 1),
vec3(-1.333070830962943, 0.4721463328627773, 0.7071067811865475),
vec3(-0.8464394909806497, -1.51113870578065, 0.5773502691896258),
vec3(1.554155680728463, -1.2588090085709776, 0.5),
vec3(1.681364377589461, 1.4741145918052656, 0.4472135954999579),
vec3(-1.2795157692199817, 2.088741103228784, 0.4082482904638631),
vec3(-2.4575847530631187, -0.9799373355024756, 0.3779644730092272),
vec3(0.5874641440200847, -2.7667464429345077, 0.35355339059327373),
vec3(2.997715703369726, 0.11704939884745152, 0.3333333333333333),
vec3(0.41360842451688395, 3.1351121305574803, 0.31622776601683794),
vec3(-3.167149933769243, 0.9844599011770256, 0.30151134457776363),
vec3(-1.5736713846521535, -3.0860263079123245, 0.2886751345948129),
vec3(2.888202648340422, -2.1583061557896213, 0.2773500981126146),
vec3(2.7150778983300325, 2.5745586041105715, 0.2672612419124244),
vec3(-2.1504069972377464, 3.2211410627650165, 0.2581988897471611),
vec3(-3.6548858794907493, -1.6253643308191343, 0.25),
vec3(1.0130775986052671, -3.9967078676335834, 0.24253562503633297),
vec3(4.229723673607257, 0.33081361055181563, 0.23570226039551587),
vec3(0.40107790291173834, 4.340407413572593, 0.22941573387056174),
vec3(-4.319124570236028, 1.159811599693438, 0.22360679774997896),
vec3(-1.9209044802827355, -4.160543952132907, 0.2182178902359924),
vec3(3.8639122286635708, -2.6589814382925123, 0.21320071635561041),
vec3(3.3486228404946234, 3.4331800232609, 0.20851441405707477),
vec3(-2.8769733643574344, 3.9652268864187157, 0.20412414523193154)
};
float lum(vec4 c) {
return 0.299 * c.r + 0.587 * c.g + 0.114 * c.b;
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = fragCoord.xy / iResolution.xy;
vec4 color = texture(iChannel0, uv);
vec2 step = vec2(1.414) / iResolution.xy;
for (int i = 0; i < 24; i++) {
vec3 s = samples[i];
vec4 c = texture(iChannel0, uv + s.xy * step);
float l = lum(c);
if (l > 0.2) {
color += l * s.z * c * 0.2;
}
}
fragColor = color;
}
@@ -0,0 +1,79 @@
// INFO: This shader is a port of https://www.shadertoy.com/view/3sySRK
// INFO: Change these variables to create some variation in the animation
#define BLACK_BLEND_THRESHOLD .4 // This is controls the dim of the screen
#define COLOR_SPEED 0.1 // This controls the speed at which the colors change
#define MOVEMENT_SPEED 0.1 // This controls the speed at which the balls move
float opSmoothUnion( float d1, float d2, float k )
{
float h = clamp( 0.5 + 0.5*(d2-d1)/k, 0.0, 1.0 );
return mix( d2, d1, h ) - k*h*(1.0-h);
}
float sdSphere( vec3 p, float s )
{
return length(p)-s;
}
float map(vec3 p)
{
float d = 2.0;
for (int i = 0; i < 16; i++) {
float fi = float(i);
float time = iTime * (fract(fi * 412.531 + 0.513) - 0.5) * 2.0;
d = opSmoothUnion(
sdSphere(p + sin(time*MOVEMENT_SPEED + fi * vec3(52.5126, 64.62744, 632.25)) * vec3(2.0, 2.0, 0.8), mix(0.5, 1.0, fract(fi * 412.531 + 0.5124))),
d,
0.4
);
}
return d;
}
vec3 calcNormal( in vec3 p )
{
const float h = 1e-5; // or some other value
const vec2 k = vec2(1,-1);
return normalize( k.xyy*map( p + k.xyy*h ) +
k.yyx*map( p + k.yyx*h ) +
k.yxy*map( p + k.yxy*h ) +
k.xxx*map( p + k.xxx*h ) );
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord/iResolution.xy;
vec3 rayOri = vec3((uv - 0.5) * vec2(iResolution.x/iResolution.y, 1.0) * 6.0, 3.0);
vec3 rayDir = vec3(0.0, 0.0, -1.0);
float depth = 0.0;
vec3 p;
for(int i = 0; i < 64; i++) {
p = rayOri + rayDir * depth;
float dist = map(p);
depth += dist;
if (dist < 1e-6) {
break;
}
}
depth = min(6.0, depth);
vec3 n = calcNormal(p);
float b = max(0.0, dot(n, vec3(0.577)));
vec3 col = (0.5 + 0.5 * cos((b + iTime*COLOR_SPEED * 3.0) + uv.xyx * 2.0 + vec3(0,2,4))) * (0.85 + b * 0.35);
col *= exp( -depth * 0.15 );
vec2 termUV = fragCoord.xy / iResolution.xy;
vec4 terminalColor = texture(iChannel0, termUV);
float alpha = step(length(terminalColor.rgb), BLACK_BLEND_THRESHOLD);
vec3 blendedColor = mix(terminalColor.rgb * 1.0, col.rgb * 0.3, alpha);
fragColor = vec4(blendedColor, terminalColor.a);
}
+310
View File
@@ -0,0 +1,310 @@
// source: https://gist.github.com/qwerasd205/c3da6c610c8ffe17d6d2d3cc7068f17f
// credits: https://github.com/qwerasd205
//==============================================================
//
// [CRTS] PUBLIC DOMAIN CRT-STYLED SCALAR by Timothy Lottes
//
// [+] Adapted with alterations for use in Ghostty by Qwerasd.
// For more information on changes, see comment below license.
//
//==============================================================
//
// LICENSE = UNLICENSE (aka PUBLIC DOMAIN)
//
//--------------------------------------------------------------
// This is free and unencumbered software released into the
// public domain.
//--------------------------------------------------------------
// Anyone is free to copy, modify, publish, use, compile, sell,
// or distribute this software, either in source code form or as
// a compiled binary, for any purpose, commercial or
// non-commercial, and by any means.
//--------------------------------------------------------------
// In jurisdictions that recognize copyright laws, the author or
// authors of this software dedicate any and all copyright
// interest in the software to the public domain. We make this
// dedication for the benefit of the public at large and to the
// detriment of our heirs and successors. We intend this
// dedication to be an overt act of relinquishment in perpetuity
// of all present and future rights to this software under
// copyright law.
//--------------------------------------------------------------
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
// KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//--------------------------------------------------------------
// For more information, please refer to
// <http://unlicense.org/>
//==============================================================
// This shader is a modified version of the excellent
// FixingPixelArtFast by Timothy Lottes on Shadertoy.
//
// The original shader can be found at:
// https://www.shadertoy.com/view/MtSfRK
//
// Modifications have been made to reduce the verbosity,
// and many of the comments have been removed / reworded.
// Additionally, the license has been moved to the top of
// the file, and can be read above. I (Qwerasd) choose to
// release the modified version under the same license.
// The appearance of this shader can be altered
// by adjusting the parameters defined below.
// "Scanlines" per real screen pixel.
// e.g. SCALE 0.5 means each scanline is 2 pixels.
// Recommended values:
// o High DPI displays: 0.33333333
// - Low DPI displays: 0.66666666
#define SCALE 0.33333333
// "Tube" warp
#define CRTS_WARP 1
// Darkness of vignette in corners after warping
// 0.0 = completely black
// 1.0 = no vignetting
#define MIN_VIN 0.5
// Try different masks
// #define CRTS_MASK_GRILLE 1
// #define CRTS_MASK_GRILLE_LITE 1
// #define CRTS_MASK_NONE 1
#define CRTS_MASK_SHADOW 1
// Scanline thinness
// 0.50 = fused scanlines
// 0.70 = recommended default
// 1.00 = thinner scanlines (too thin)
#define INPUT_THIN 0.75
// Horizonal scan blur
// -3.0 = pixely
// -2.5 = default
// -2.0 = smooth
// -1.0 = too blurry
#define INPUT_BLUR -2.75
// Shadow mask effect, ranges from,
// 0.25 = large amount of mask (not recommended, too dark)
// 0.50 = recommended default
// 1.00 = no shadow mask
#define INPUT_MASK 0.65
float FromSrgb1(float c) {
return (c <= 0.04045) ? c * (1.0 / 12.92) :
pow(c * (1.0 / 1.055) + (0.055 / 1.055), 2.4);
}
vec3 FromSrgb(vec3 c) {
return vec3(
FromSrgb1(c.r), FromSrgb1(c.g), FromSrgb1(c.b));
}
vec3 CrtsFetch(vec2 uv) {
return FromSrgb(texture(iChannel0, uv.xy).rgb);
}
#define CrtsRcpF1(x) (1.0/(x))
#define CrtsSatF1(x) clamp((x),0.0,1.0)
float CrtsMax3F1(float a, float b, float c) {
return max(a, max(b, c));
}
vec2 CrtsTone(
float thin,
float mask) {
#ifdef CRTS_MASK_NONE
mask = 1.0;
#endif
#ifdef CRTS_MASK_GRILLE_LITE
// Normal R mask is {1.0,mask,mask}
// LITE R mask is {mask,1.0,1.0}
mask = 0.5 + mask * 0.5;
#endif
vec2 ret;
float midOut = 0.18 / ((1.5 - thin) * (0.5 * mask + 0.5));
float pMidIn = 0.18;
ret.x = ((-pMidIn) + midOut) / ((1.0 - pMidIn) * midOut);
ret.y = ((-pMidIn) * midOut + pMidIn) / (midOut * (-pMidIn) + midOut);
return ret;
}
vec3 CrtsMask(vec2 pos, float dark) {
#ifdef CRTS_MASK_GRILLE
vec3 m = vec3(dark, dark, dark);
float x = fract(pos.x * (1.0 / 3.0));
if (x < (1.0 / 3.0)) m.r = 1.0;
else if (x < (2.0 / 3.0)) m.g = 1.0;
else m.b = 1.0;
return m;
#endif
#ifdef CRTS_MASK_GRILLE_LITE
vec3 m = vec3(1.0, 1.0, 1.0);
float x = fract(pos.x * (1.0 / 3.0));
if (x < (1.0 / 3.0)) m.r = dark;
else if (x < (2.0 / 3.0)) m.g = dark;
else m.b = dark;
return m;
#endif
#ifdef CRTS_MASK_NONE
return vec3(1.0, 1.0, 1.0);
#endif
#ifdef CRTS_MASK_SHADOW
pos.x += pos.y * 3.0;
vec3 m = vec3(dark, dark, dark);
float x = fract(pos.x * (1.0 / 6.0));
if (x < (1.0 / 3.0)) m.r = 1.0;
else if (x < (2.0 / 3.0)) m.g = 1.0;
else m.b = 1.0;
return m;
#endif
}
vec3 CrtsFilter(
vec2 ipos,
vec2 inputSizeDivOutputSize,
vec2 halfInputSize,
vec2 rcpInputSize,
vec2 rcpOutputSize,
vec2 twoDivOutputSize,
float inputHeight,
vec2 warp,
float thin,
float blur,
float mask,
vec2 tone
) {
// Optional apply warp
vec2 pos;
#ifdef CRTS_WARP
// Convert to {-1 to 1} range
pos = ipos * twoDivOutputSize - vec2(1.0, 1.0);
// Distort pushes image outside {-1 to 1} range
pos *= vec2(
1.0 + (pos.y * pos.y) * warp.x,
1.0 + (pos.x * pos.x) * warp.y);
// TODO: Vignette needs optimization
float vin = 1.0 - (
(1.0 - CrtsSatF1(pos.x * pos.x)) * (1.0 - CrtsSatF1(pos.y * pos.y)));
vin = CrtsSatF1((-vin) * inputHeight + inputHeight);
// Leave in {0 to inputSize}
pos = pos * halfInputSize + halfInputSize;
#else
pos = ipos * inputSizeDivOutputSize;
#endif
// Snap to center of first scanline
float y0 = floor(pos.y - 0.5) + 0.5;
// Snap to center of one of four pixels
float x0 = floor(pos.x - 1.5) + 0.5;
// Inital UV position
vec2 p = vec2(x0 * rcpInputSize.x, y0 * rcpInputSize.y);
// Fetch 4 nearest texels from 2 nearest scanlines
vec3 colA0 = CrtsFetch(p);
p.x += rcpInputSize.x;
vec3 colA1 = CrtsFetch(p);
p.x += rcpInputSize.x;
vec3 colA2 = CrtsFetch(p);
p.x += rcpInputSize.x;
vec3 colA3 = CrtsFetch(p);
p.y += rcpInputSize.y;
vec3 colB3 = CrtsFetch(p);
p.x -= rcpInputSize.x;
vec3 colB2 = CrtsFetch(p);
p.x -= rcpInputSize.x;
vec3 colB1 = CrtsFetch(p);
p.x -= rcpInputSize.x;
vec3 colB0 = CrtsFetch(p);
// Vertical filter
// Scanline intensity is using sine wave
// Easy filter window and integral used later in exposure
float off = pos.y - y0;
float pi2 = 6.28318530717958;
float hlf = 0.5;
float scanA = cos(min(0.5, off * thin) * pi2) * hlf + hlf;
float scanB = cos(min(0.5, (-off) * thin + thin) * pi2) * hlf + hlf;
// Horizontal kernel is simple gaussian filter
float off0 = pos.x - x0;
float off1 = off0 - 1.0;
float off2 = off0 - 2.0;
float off3 = off0 - 3.0;
float pix0 = exp2(blur * off0 * off0);
float pix1 = exp2(blur * off1 * off1);
float pix2 = exp2(blur * off2 * off2);
float pix3 = exp2(blur * off3 * off3);
float pixT = CrtsRcpF1(pix0 + pix1 + pix2 + pix3);
#ifdef CRTS_WARP
// Get rid of wrong pixels on edge
pixT *= max(MIN_VIN, vin);
#endif
scanA *= pixT;
scanB *= pixT;
// Apply horizontal and vertical filters
vec3 color =
(colA0 * pix0 + colA1 * pix1 + colA2 * pix2 + colA3 * pix3) * scanA +
(colB0 * pix0 + colB1 * pix1 + colB2 * pix2 + colB3 * pix3) * scanB;
// Apply phosphor mask
color *= CrtsMask(ipos, mask);
// Tonal control, start by protecting from /0
float peak = max(1.0 / (256.0 * 65536.0),
CrtsMax3F1(color.r, color.g, color.b));
// Compute the ratios of {R,G,B}
vec3 ratio = color * CrtsRcpF1(peak);
// Apply tonal curve to peak value
peak = peak * CrtsRcpF1(peak * tone.x + tone.y);
// Reconstruct color
return ratio * peak;
}
float ToSrgb1(float c) {
return (c < 0.0031308 ? c * 12.92 : 1.055 * pow(c, 0.41666) - 0.055);
}
vec3 ToSrgb(vec3 c) {
return vec3(
ToSrgb1(c.r), ToSrgb1(c.g), ToSrgb1(c.b));
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
float aspect = iResolution.x / iResolution.y;
fragColor.rgb = CrtsFilter(
fragCoord.xy,
vec2(1.0),
iResolution.xy * SCALE * 0.5,
1.0 / (iResolution.xy * SCALE),
1.0 / iResolution.xy,
2.0 / iResolution.xy,
iResolution.y,
vec2(1.0 / (50.0 * aspect), 1.0 / 50.0),
INPUT_THIN,
INPUT_BLUR,
INPUT_MASK,
CrtsTone(INPUT_THIN, INPUT_MASK)
);
// Linear to SRGB for output.
fragColor = vec4(ToSrgb(fragColor.rgb), 1.0);
}
+114
View File
@@ -0,0 +1,114 @@
// credits: https://github.com/rymdlego
const float speed = 0.2;
const float cube_size = 1.0;
const float cube_brightness = 1.0;
const float cube_rotation_speed = 2.8;
const float camera_rotation_speed = 0.1;
mat3 rotationMatrix(vec3 m,float a) {
m = normalize(m);
float c = cos(a),s=sin(a);
return mat3(c+(1.-c)*m.x*m.x,
(1.-c)*m.x*m.y-s*m.z,
(1.-c)*m.x*m.z+s*m.y,
(1.-c)*m.x*m.y+s*m.z,
c+(1.-c)*m.y*m.y,
(1.-c)*m.y*m.z-s*m.x,
(1.-c)*m.x*m.z-s*m.y,
(1.-c)*m.y*m.z+s*m.x,
c+(1.-c)*m.z*m.z);
}
float sphere(vec3 pos, float radius)
{
return length(pos) - radius;
}
float box(vec3 pos, vec3 size)
{
float t = iTime;
pos = pos * 0.9 * rotationMatrix(vec3(sin(t/4.0*speed)*10.,cos(t/4.0*speed)*12.,2.7), t*2.4/4.0*speed*cube_rotation_speed);
return length(max(abs(pos) - size, 0.0));
}
float distfunc(vec3 pos)
{
float t = iTime;
float size = 0.45 + 0.25*abs(16.0*sin(t*speed/4.0));
// float size = 2.3 + 1.8*tan((t-5.4)*6.549);
size = cube_size * 0.16 * clamp(size, 2.0, 4.0);
//pos = pos * rotationMatrix(vec3(0.,-3.,0.7), 3.3 * mod(t/30.0, 4.0));
vec3 q = mod(pos, 5.0) - 2.5;
float obj1 = box(q, vec3(size));
return obj1;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
float t = iTime;
vec2 screenPos = -1.0 + 2.0 * fragCoord.xy / iResolution.xy;
screenPos.x *= iResolution.x / iResolution.y;
vec3 cameraOrigin = vec3(t*1.0*speed, 0.0, 0.0);
// vec3 cameraOrigin = vec3(t*1.8*speed, 3.0+t*0.02*speed, 0.0);
vec3 cameraTarget = vec3(t*100., 0.0, 0.0);
cameraTarget = vec3(t*20.0,0.0,0.0) * rotationMatrix(vec3(0.0,0.0,1.0), t*speed*camera_rotation_speed);
vec3 upDirection = vec3(0.5, 1.0, 0.6);
vec3 cameraDir = normalize(cameraTarget - cameraOrigin);
vec3 cameraRight = normalize(cross(upDirection, cameraOrigin));
vec3 cameraUp = cross(cameraDir, cameraRight);
vec3 rayDir = normalize(cameraRight * screenPos.x + cameraUp * screenPos.y + cameraDir);
const int MAX_ITER = 64;
const float MAX_DIST = 48.0;
const float EPSILON = 0.001;
float totalDist = 0.0;
vec3 pos = cameraOrigin;
float dist = EPSILON;
for (int i = 0; i < MAX_ITER; i++)
{
if (dist < EPSILON || totalDist > MAX_DIST)
break;
dist = distfunc(pos);
totalDist += dist;
pos += dist*rayDir;
}
vec4 cubes;
if (dist < EPSILON)
{
// Lighting Code
vec2 eps = vec2(0.0, EPSILON);
vec3 normal = normalize(vec3(
distfunc(pos + eps.yxx) - distfunc(pos - eps.yxx),
distfunc(pos + eps.xyx) - distfunc(pos - eps.xyx),
distfunc(pos + eps.xxy) - distfunc(pos - eps.xxy)));
float diffuse = max(0., dot(-rayDir, normal));
float specular = pow(diffuse, 32.0);
vec3 color = vec3(diffuse + specular);
vec3 cubeColor = vec3(abs(screenPos),0.5+0.5*sin(t*2.0))*0.8;
cubeColor = mix(cubeColor.rgb, vec3(0.0,0.0,0.0), 1.0);
color += cubeColor;
cubes = vec4(color, 1.0) * vec4(1.0 - (totalDist/MAX_DIST));
cubes = vec4(cubes.rgb*0.02*cube_brightness, 0.1);
}
else {
cubes = vec4(0.0);
}
vec2 uv = fragCoord/iResolution.xy;
vec4 terminalColor = texture(iChannel0, uv);
vec3 blendedColor = terminalColor.rgb + cubes.rgb;
fragColor = vec4(blendedColor, terminalColor.a);
}
+142
View File
@@ -0,0 +1,142 @@
// Based on https://gist.github.com/chardskarth/95874c54e29da6b5a36ab7b50ae2d088
float ease(float x) {
return pow(1.0 - x, 10.0);
}
float sdBox(in vec2 p, in vec2 xy, in vec2 b)
{
vec2 d = abs(p - xy) - b;
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
}
float getSdfRectangle(in vec2 p, in vec2 xy, in vec2 b)
{
vec2 d = abs(p - xy) - b;
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
}
// Based on Inigo Quilez's 2D distance functions article: https://iquilezles.org/articles/distfunctions2d/
// Potencially optimized by eliminating conditionals and loops to enhance performance and reduce branching
float seg(in vec2 p, in vec2 a, in vec2 b, inout float s, float d) {
vec2 e = b - a;
vec2 w = p - a;
vec2 proj = a + e * clamp(dot(w, e) / dot(e, e), 0.0, 1.0);
float segd = dot(p - proj, p - proj);
d = min(d, segd);
float c0 = step(0.0, p.y - a.y);
float c1 = 1.0 - step(0.0, p.y - b.y);
float c2 = 1.0 - step(0.0, e.x * w.y - e.y * w.x);
float allCond = c0 * c1 * c2;
float noneCond = (1.0 - c0) * (1.0 - c1) * (1.0 - c2);
float flip = mix(1.0, -1.0, step(0.5, allCond + noneCond));
s *= flip;
return d;
}
float getSdfParallelogram(in vec2 p, in vec2 v0, in vec2 v1, in vec2 v2, in vec2 v3) {
float s = 1.0;
float d = dot(p - v0, p - v0);
d = seg(p, v0, v3, s, d);
d = seg(p, v1, v0, s, d);
d = seg(p, v2, v1, s, d);
d = seg(p, v3, v2, s, d);
return s * sqrt(d);
}
vec2 normalize(vec2 value, float isPosition) {
return (value * 2.0 - (iResolution.xy * isPosition)) / iResolution.y;
}
float blend(float t)
{
float sqr = t * t;
return sqr / (2.0 * (sqr - t) + 1.0);
}
float antialising(float distance) {
return 1. - smoothstep(0., normalize(vec2(2., 2.), 0.).x, distance);
}
float determineStartVertexFactor(vec2 a, vec2 b) {
// Conditions using step
float condition1 = step(b.x, a.x) * step(a.y, b.y); // a.x < b.x && a.y > b.y
float condition2 = step(a.x, b.x) * step(b.y, a.y); // a.x > b.x && a.y < b.y
// If neither condition is met, return 1 (else case)
return 1.0 - max(condition1, condition2);
}
vec2 getRectangleCenter(vec4 rectangle) {
return vec2(rectangle.x + (rectangle.z / 2.), rectangle.y - (rectangle.w / 2.));
}
const vec4 TRAIL_COLOR = vec4(1.0, 0.725, 0.161, 1.0); // yellow
const vec4 CURRENT_CURSOR_COLOR = TRAIL_COLOR;
const vec4 PREVIOUS_CURSOR_COLOR = TRAIL_COLOR;
const vec4 TRAIL_COLOR_ACCENT = vec4(1.0, 0., 0., 1.0); // red-orange
const float DURATION = .5;
const float OPACITY = .2;
// Don't draw trail within that distance * cursor size.
// This prevents trails from appearing when typing.
const float DRAW_THRESHOLD = 1.5;
// Don't draw trails within the same line: same line jumps are usually where
// people expect them.
const bool HIDE_TRAILS_ON_THE_SAME_LINE = false;
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
#if !defined(WEB)
fragColor = texture(iChannel0, fragCoord.xy / iResolution.xy);
#endif
//Normalization for fragCoord to a space of -1 to 1;
vec2 vu = normalize(fragCoord, 1.);
vec2 offsetFactor = vec2(-.5, 0.5);
//Normalization for cursor position and size;
//cursor xy has the postion in a space of -1 to 1;
//zw has the width and height
vec4 currentCursor = vec4(normalize(iCurrentCursor.xy, 1.), normalize(iCurrentCursor.zw, 0.));
vec4 previousCursor = vec4(normalize(iPreviousCursor.xy, 1.), normalize(iPreviousCursor.zw, 0.));
//When drawing a parellelogram between cursors for the trail i need to determine where to start at the top-left or top-right vertex of the cursor
float vertexFactor = determineStartVertexFactor(currentCursor.xy, previousCursor.xy);
float invertedVertexFactor = 1.0 - vertexFactor;
//Set every vertex of my parellogram
vec2 v0 = vec2(currentCursor.x + currentCursor.z * vertexFactor, currentCursor.y - currentCursor.w);
vec2 v1 = vec2(currentCursor.x + currentCursor.z * invertedVertexFactor, currentCursor.y);
vec2 v2 = vec2(previousCursor.x + currentCursor.z * invertedVertexFactor, previousCursor.y);
vec2 v3 = vec2(previousCursor.x + currentCursor.z * vertexFactor, previousCursor.y - previousCursor.w);
vec4 newColor = vec4(fragColor);
float progress = blend(clamp((iTime - iTimeCursorChange) / DURATION, 0.0, 1));
float easedProgress = ease(progress);
//Distance between cursors determine the total length of the parallelogram;
vec2 centerCC = getRectangleCenter(currentCursor);
vec2 centerCP = getRectangleCenter(previousCursor);
float cursorSize = max(currentCursor.z, currentCursor.w);
float trailThreshold = DRAW_THRESHOLD * cursorSize;
float lineLength = distance(centerCC, centerCP);
//
bool isFarEnough = lineLength > trailThreshold;
bool isOnSeparateLine = HIDE_TRAILS_ON_THE_SAME_LINE ? currentCursor.y != previousCursor.y : true;
if (isFarEnough && isOnSeparateLine) {
float distanceToEnd = distance(vu.xy, centerCC);
float alphaModifier = distanceToEnd / (lineLength * (easedProgress));
if (alphaModifier > 1.0) { // this change fixed it for me.
alphaModifier = 1.0;
}
float sdfCursor = getSdfRectangle(vu, currentCursor.xy - (currentCursor.zw * offsetFactor), currentCursor.zw * 0.5);
float sdfTrail = getSdfParallelogram(vu, v0, v1, v2, v3);
newColor = mix(newColor, TRAIL_COLOR_ACCENT, 1.0 - smoothstep(sdfTrail, -0.01, 0.001));
newColor = mix(newColor, TRAIL_COLOR, antialising(sdfTrail));
newColor = mix(fragColor, newColor, 1.0 - alphaModifier);
fragColor = mix(newColor, fragColor, step(sdfCursor, 0));
}
}
+216
View File
@@ -0,0 +1,216 @@
// -- CONFIGURATION ---
vec4 TRAIL_COLOR = iCurrentCursorColor; // can change to eg: vec4(0.2, 0.6, 1.0, 0.5);
const float DURATION = 0.2; // in seconds
const float TRAIL_LENGTH = 0.5;
const float BLUR = 2.0; // blur size in pixels (for antialiasing)
// --- CONSTANTS for easing functions ---
const float PI = 3.14159265359;
const float C1_BACK = 1.70158;
const float C2_BACK = C1_BACK * 1.525;
const float C3_BACK = C1_BACK + 1.0;
const float C4_ELASTIC = (2.0 * PI) / 3.0;
const float C5_ELASTIC = (2.0 * PI) / 4.5;
const float SPRING_STIFFNESS = 9.0;
const float SPRING_DAMPING = 0.9;
// --- EASING FUNCTIONS ---
// // Linear
// float ease(float x) {
// return x;
// }
// // EaseOutQuad
// float ease(float x) {
// return 1.0 - (1.0 - x) * (1.0 - x);
// }
// EaseOutCubic
float ease(float x) {
return 1.0 - pow(1.0 - x, 3.0);
}
// // EaseOutQuart
// float ease(float x) {
// return 1.0 - pow(1.0 - x, 4.0);
// }
// // EaseOutQuint
// float ease(float x) {
// return 1.0 - pow(1.0 - x, 5.0);
// }
// EaseOutSine
// float ease(float x) {
// return sin((x * PI) / 2.0);
// }
// // EaseOutExpo
// float ease(float x) {
// return x == 1.0 ? 1.0 : 1.0 - pow(2.0, -10.0 * x);
// }
// // EaseOutCirc
// float ease(float x) {
// return sqrt(1.0 - pow(x - 1.0, 2.0));
// }
// // EaseOutBack
// float ease(float x) {
// return 1.0 + C3_BACK * pow(x - 1.0, 3.0) + C1_BACK * pow(x - 1.0, 2.0);
// }
// // EaseOutElastic
// float ease(float x) {
// return x == 0.0 ? 0.0
// : x == 1.0 ? 1.0
// : pow(2.0, -10.0 * x) * sin((x * 10.0 - 0.75) * C4_ELASTIC) + 1.0;
// }
// Parametric Spring
// float ease(float x) {
// x = clamp(x, 0.0, 1.0);
// float decay = exp(-SPRING_DAMPING * SPRING_STIFFNESS * x);
// float freq = sqrt(SPRING_STIFFNESS * (1.0 - SPRING_DAMPING * SPRING_DAMPING));
// float osc = cos(freq * 6.283185 * x) + (SPRING_DAMPING * sqrt(SPRING_STIFFNESS) / freq) * sin(freq * 6.283185 * x);
// return 1.0 - decay * osc;
// }
float getSdfRectangle(in vec2 point, in vec2 center, in vec2 halfSize)
{
vec2 d = abs(point - center) - halfSize;
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
}
// Based on Inigo Quilez's 2D distance functions article: https://iquilezles.org/articles/distfunctions2d/
// Potencially optimized by eliminating conditionals and loops to enhance performance and reduce branching
float seg(in vec2 p, in vec2 a, in vec2 b, inout float s, float d) {
vec2 e = b - a;
vec2 w = p - a;
vec2 proj = a + e * clamp(dot(w, e) / dot(e, e), 0.0, 1.0);
float segd = dot(p - proj, p - proj);
d = min(d, segd);
float c0 = step(0.0, p.y - a.y);
float c1 = 1.0 - step(0.0, p.y - b.y);
float c2 = 1.0 - step(0.0, e.x * w.y - e.y * w.x);
float allCond = c0 * c1 * c2;
float noneCond = (1.0 - c0) * (1.0 - c1) * (1.0 - c2);
float flip = mix(1.0, -1.0, step(0.5, allCond + noneCond));
s *= flip;
return d;
}
float getSdfParallelogram(in vec2 p, in vec2 v0, in vec2 v1, in vec2 v2, in vec2 v3) {
float s = 1.0;
float d = dot(p - v0, p - v0);
d = seg(p, v0, v3, s, d);
d = seg(p, v1, v0, s, d);
d = seg(p, v2, v1, s, d);
d = seg(p, v3, v2, s, d);
return s * sqrt(d);
}
vec2 normalize(vec2 value, float isPosition) {
return (value * 2.0 - (iResolution.xy * isPosition)) / iResolution.y;
}
float antialising(float distance) {
return 1. - smoothstep(0., normalize(vec2(BLUR, BLUR), 0.).x, distance);
}
float getTopVertexFlag(vec2 a, vec2 b) {
float condition1 = step(b.x, a.x) * step(a.y, b.y); // a.x < b.x && a.y > b.y
float condition2 = step(a.x, b.x) * step(b.y, a.y); // a.x > b.x && a.y < b.y
// if neither condition is met, return 1 (else case)
return 1.0 - max(condition1, condition2);
}
vec2 getRectangleCenter(vec4 rectangle) {
return vec2(rectangle.x + (rectangle.z / 2.), rectangle.y - (rectangle.w / 2.));
}
void mainImage(out vec4 fragColor, in vec2 fragCoord){
#if !defined(WEB)
fragColor = texture(iChannel0, fragCoord.xy / iResolution.xy);
#endif
// normalization & setup(-1, 1 coords)
vec2 vu = normalize(fragCoord, 1.);
vec2 offsetFactor = vec2(-.5, 0.5);
vec4 currentCursor = vec4(normalize(iCurrentCursor.xy, 1.), normalize(iCurrentCursor.zw, 0.));
vec4 previousCursor = vec4(normalize(iPreviousCursor.xy, 1.), normalize(iPreviousCursor.zw, 0.));
vec2 centerCC = currentCursor.xy - (currentCursor.zw * offsetFactor);
vec2 centerCP = previousCursor.xy - (previousCursor.zw * offsetFactor);
float sdfCurrentCursor = getSdfRectangle(vu, centerCC, currentCursor.zw * 0.5);
float lineLength = distance(centerCC, centerCP);
vec4 newColor = vec4(fragColor);
float minDist = currentCursor.w * 1.5;
float progress = clamp((iTime - iTimeCursorChange) / DURATION, 0.0, 1.0);
if (lineLength > minDist) {
// --- Animation Logic ---
float shrinkFactor = ease(progress);
// detect straight moves
vec2 delta = abs(centerCC - centerCP);
float threshold = 0.001;
float isHorizontal = step(delta.y, threshold);
float isVertical = step(delta.x, threshold);
float isStraightMove = max(isHorizontal, isVertical);
// -- Making parallelogram sdf (diagonal moves) ---
float topVertexFlag = getTopVertexFlag(currentCursor.xy, previousCursor.xy);
float bottomVertexFlag = 1.0 - topVertexFlag;
vec2 v0 = vec2(currentCursor.x + currentCursor.z * topVertexFlag, currentCursor.y - currentCursor.w);
vec2 v1 = vec2(currentCursor.x + currentCursor.z * bottomVertexFlag, currentCursor.y);
vec2 v2_full = vec2(previousCursor.x + currentCursor.z * bottomVertexFlag, previousCursor.y);
vec2 v3_full = vec2(previousCursor.x + currentCursor.z * topVertexFlag, previousCursor.y - previousCursor.w);
vec2 v2_start = mix(v1, v2_full, TRAIL_LENGTH);
vec2 v3_start = mix(v0, v3_full, TRAIL_LENGTH);
vec2 v2_anim = mix(v2_start, v1, shrinkFactor);
vec2 v3_anim = mix(v3_start, v0, shrinkFactor);
float sdfTrail_diag = getSdfParallelogram(vu, v0, v1, v2_anim, v3_anim);
// --- Making rectangle sdf (straight moves) ---
vec2 min_center = min(centerCP, centerCC);
vec2 max_center = max(centerCP, centerCC);
vec2 bBoxSize_full = (max_center - min_center) + currentCursor.zw;
vec2 bBoxCenter_full = (min_center + max_center) * 0.5;
vec2 bBoxSize_start = mix(currentCursor.zw, bBoxSize_full, TRAIL_LENGTH);
vec2 bBoxCenter_start = mix(centerCC, bBoxCenter_full, TRAIL_LENGTH);
vec2 animSize = mix(bBoxSize_start, currentCursor.zw, shrinkFactor);
vec2 animCenter = mix(bBoxCenter_start, centerCC, shrinkFactor);
float sdfTrail_rect = getSdfRectangle(vu, animCenter, animSize * 0.5);
// -- Selecting and drawing the trail sdf --
float sdfTrail = mix(sdfTrail_diag, sdfTrail_rect, isStraightMove);
vec4 trail = TRAIL_COLOR;
float trailAlpha = antialising(sdfTrail);
newColor = mix(newColor, trail, trailAlpha);
// Punch hole
newColor = mix(newColor, fragColor, step(sdfCurrentCursor, 0.));
}
fragColor = newColor;
}
+30
View File
@@ -0,0 +1,30 @@
// Simple "dithering" effect
// (c) moni-dz (https://github.com/moni-dz)
// CC BY-NC-SA 4.0 (https://creativecommons.org/licenses/by-nc-sa/4.0/)
// Packed bayer pattern using bit manipulation
const float bayerPattern[4] = float[4](
0x0514, // Encoding 0,8,2,10
0xC4E6, // Encoding 12,4,14,6
0x3B19, // Encoding 3,11,1,9
0xF7D5 // Encoding 15,7,13,5
);
float getBayerFromPacked(int x, int y) {
int idx = (x & 3) + ((y & 3) << 2);
return float((int(bayerPattern[y & 3]) >> ((x & 3) << 2)) & 0xF) * (1.0 / 16.0);
}
#define LEVELS 2.0 // Available color steps per channel
#define INV_LEVELS (1.0 / LEVELS)
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
vec2 uv = fragCoord * (1.0 / iResolution.xy);
vec3 color = texture(iChannel0, uv).rgb;
float threshold = getBayerFromPacked(int(fragCoord.x), int(fragCoord.y));
vec3 dithered = floor(color * LEVELS + threshold) * INV_LEVELS;
fragColor = vec4(dithered, 1.0);
}
+68
View File
@@ -0,0 +1,68 @@
// Drunken stupor effect using fractal Brownian motion and Perlin noise
// (c) moni-dz (https://github.com/moni-dz)
// CC BY-NC-SA 4.0 (https://creativecommons.org/licenses/by-nc-sa/4.0/)
vec2 hash2(vec2 p) {
uvec2 q = uvec2(floatBitsToUint(p.x), floatBitsToUint(p.y));
q = (q * uvec2(1597334673U, 3812015801U)) ^ (q.yx * uvec2(2798796415U, 1979697793U));
return vec2(q) * (1.0/float(0xffffffffU)) * 2.0 - 1.0;
}
float perlin2d(vec2 p) {
vec2 i = floor(p);
vec2 f = fract(p);
vec2 u = f*f*(3.0-2.0*f);
return mix(mix(dot(hash2(i + vec2(0.0,0.0)), f - vec2(0.0,0.0)),
dot(hash2(i + vec2(1.0,0.0)), f - vec2(1.0,0.0)), u.x),
mix(dot(hash2(i + vec2(0.0,1.0)), f - vec2(0.0,1.0)),
dot(hash2(i + vec2(1.0,1.0)), f - vec2(1.0,1.0)), u.x), u.y);
}
#define OCTAVES 10 // How many passes of fractal Brownian motion to perform
#define GAIN 0.5 // How much should each pixel move
#define LACUNARITY 2.0 // How fast should each ripple be per pass
float fbm(vec2 p) {
float sum = 0.0;
float amp = 0.5;
float freq = 1.0;
for(int i = 0; i < OCTAVES; i++) {
sum += amp * perlin2d(p * freq);
freq *= LACUNARITY;
amp *= GAIN;
}
return sum;
}
#define NOISE_SCALE 1.0 // How distorted the image you want to be
#define NOISE_INTENSITY 0.05 // How strong the noise effect is
#define ABERRATION true // Chromatic aberration
#define ABERRATION_DELTA 0.1 // How strong the chromatic aberration effect is
#define ANIMATE true
#define SPEED 0.4 // Animation speed
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
vec2 uv = fragCoord/iResolution.xy;
float time = ANIMATE ? iTime * SPEED : 0.0;
vec2 noisePos = uv * NOISE_SCALE + vec2(time);
float noise = fbm(noisePos) * NOISE_INTENSITY;
vec3 col;
if (ABERRATION) {
col.r = texture(iChannel0, uv + vec2(noise * (1.0 + ABERRATION_DELTA))).r;
col.g = texture(iChannel0, uv + vec2(noise)).g;
col.b = texture(iChannel0, uv + vec2(noise * (1.0 - ABERRATION_DELTA))).b;
} else {
vec2 distortedUV = uv + vec2(noise);
col = texture(iChannel0, distortedUV).rgb;
}
fragColor = vec4(col, 1.0);
}
@@ -0,0 +1,109 @@
// This Ghostty shader is a lightly modified port of https://www.shadertoy.com/view/4dBGRw
#define BLACK_BLEND_THRESHOLD .4
//Creates a diagonal red-and-white striped pattern.
vec3 barberpole(vec2 pos, vec2 rocketpos) {
float d = (pos.x - rocketpos.x) + (pos.y - rocketpos.y);
vec3 col = vec3(1.0);
d = mod(d * 20., 2.0);
if (d > 1.0) {
col = vec3(1.0, 0.0, 0.0);
}
return col;
}
vec3 rocket(vec2 pos, vec2 rocketpos) {
vec3 col = vec3(0.0);
float f = 0.;
float absx = abs(rocketpos.x - pos.x);
float absy = abs(rocketpos.y - pos.y);
// Wooden stick
if (absx < 0.01 && absy < 0.22) {
col = vec3(1.0, 0.5, 0.5);
}
// Barberpole
if (absx < 0.05 && absy < 0.15) {
col = barberpole(pos, rocketpos);
}
// Rocket Point
float pointw = (rocketpos.y - pos.y - 0.25) * -0.7;
if ((rocketpos.y - pos.y) > 0.1) {
f = smoothstep(pointw - 0.001, pointw + 0.001, absx);
col = mix(vec3(1.0, 0.0, 0.0), col, f);
}
// Shadow
f = -.5 + smoothstep(-0.05, 0.05, (rocketpos.x - pos.x));
col *= 0.7 + f;
return col;
}
float rand(float val, float seed) {
return cos(val * sin(val * seed) * seed);
}
float distance2(in vec2 a, in vec2 b) {
return dot(a - b, a - b);
}
mat2 rr = mat2(cos(1.0), -sin(1.0), sin(1.0), cos(1.0));
vec3 drawParticles(vec2 pos, vec3 particolor, float time, vec2 cpos, float gravity, float seed, float timelength) {
vec3 col = vec3(0.0);
vec2 pp = vec2(1.0, 0.0);
for (float i = 1.0; i <= 128.0; i++) {
float d = rand(i, seed);
float fade = (i / 128.0) * time;
vec2 particpos = cpos + time * pp * d;
pp = rr * pp;
col = mix(particolor / fade, col, smoothstep(0.0, 0.0001, distance2(particpos, pos)));
}
col *= smoothstep(0.0, 1.0, (timelength - time) / timelength);
return col;
}
vec3 drawFireworks(float time, vec2 uv, vec3 particolor, float seed) {
float timeoffset = 2.0;
vec3 col = vec3(0.0);
if (time <= 0.) {
return col;
}
if (mod(time, 6.0) > timeoffset) {
col = drawParticles(uv, particolor, mod(time, 6.0) - timeoffset, vec2(rand(ceil(time / 6.0), seed), -0.5), 0.5, ceil(time / 6.0), seed);
} else {
col = rocket(uv * 3., vec2(3. * rand(ceil(time / 6.0), seed), 3. * (-0.5 + (timeoffset - mod(time, 6.0)))));
}
return col;
}
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
vec2 uv = 1.0 - 2.0 * fragCoord.xy / iResolution.xy;
uv.x *= iResolution.x / iResolution.y;
vec3 col = vec3(0.1, 0.1, 0.2);
// Flip the y-axis so that the rocket is drawn from the bottom of the screen
uv.y = -uv.y;
col += 0.1 * uv.y;
col += drawFireworks(iTime, uv, vec3(1.0, 0.1, 0.1), 1.);
col += drawFireworks(iTime - 2.0, uv, vec3(0.0, 1.0, 0.5), 2.);
col += drawFireworks(iTime - 4.0, uv, vec3(1.0, 1.0, 0.1), 3.);
vec2 termUV = fragCoord.xy / iResolution.xy;
vec4 terminalColor = texture(iChannel0, termUV);
float alpha = step(length(terminalColor.rgb), BLACK_BLEND_THRESHOLD);
vec3 blendedColor = mix(terminalColor.rgb * 1.0, col.rgb * 0.3, alpha);
fragColor = vec4(blendedColor, terminalColor.a);
}
+116
View File
@@ -0,0 +1,116 @@
// This Ghostty shader is a port of https://www.shadertoy.com/view/lscGRl
// "Fireworks" by Martijn Steinrucken aka BigWings - 2015
// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
// Email:countfrolic@gmail.com Twitter:@The_ArtOfCode
#define BLACK_BLEND_THRESHOLD .4
#define PI 3.141592653589793238
#define TWOPI 6.283185307179586
#define S(x,y,z) smoothstep(x,y,z)
#define B(x,y,z,w) S(x-z, x+z, w)*S(y+z, y-z, w)
#define saturate(x) clamp(x,0.,1.)
#define NUM_EXPLOSIONS 3.
#define NUM_PARTICLES 42.
// Noise functions by Dave Hoskins
#define MOD3 vec3(.1031,.11369,.13787)
vec3 hash31(float p) {
vec3 p3 = fract(vec3(p) * MOD3);
p3 += dot(p3, p3.yzx + 19.19);
return fract(vec3((p3.x + p3.y) * p3.z, (p3.x + p3.z) * p3.y, (p3.y + p3.z) * p3.x));
}
float hash12(vec2 p) {
vec3 p3 = fract(vec3(p.xyx) * MOD3);
p3 += dot(p3, p3.yzx + 19.19);
return fract((p3.x + p3.y) * p3.z);
}
float circ(vec2 uv, vec2 pos, float size) {
uv -= pos;
size *= size;
return S(size * 1.1, size, dot(uv, uv));
}
float light(vec2 uv, vec2 pos, float size) {
uv -= pos;
size *= size;
return size / dot(uv, uv);
}
vec3 explosion(vec2 uv, vec2 p, float seed, float t) {
vec3 col = vec3(0.);
vec3 en = hash31(seed);
vec3 baseCol = en;
for (float i = 0.; i < NUM_PARTICLES; i++) {
vec3 n = hash31(i) - .5;
vec2 startP = p - vec2(0., t * t * .1);
vec2 endP = startP + normalize(n.xy) * n.z - vec2(0., t * .2);
float pt = 1. - pow(t - 1., 2.);
vec2 pos = mix(p, endP, pt);
float size = mix(.01, .005, S(0., .1, pt));
size *= S(1., .1, pt);
float sparkle = (sin((pt + n.z) * 21.) * .5 + .5);
sparkle = pow(sparkle, pow(en.x, 3.) * 50.) * mix(0.01, .01, en.y * n.y);
//size += sparkle*B(.6, 1., .1, t);
size += sparkle * B(en.x, en.y, en.z, t);
col += baseCol * light(uv, pos, size);
}
return col;
}
vec3 Rainbow(vec3 c) {
float t = iTime;
float avg = (c.r + c.g + c.b) / 3.;
c = avg + (c - avg) * sin(vec3(0., .333, .666) + t);
c += sin(vec3(.4, .3, .3) * t + vec3(1.1244, 3.43215, 6.435)) * vec3(.4, .1, .5);
return c;
}
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
vec2 uv = fragCoord.xy / iResolution.xy;
uv.x -= .5;
uv.x *= iResolution.x / iResolution.y;
// Flip the y-axis so that the gravity is downwards
uv.y = -uv.y + 1.;
float n = hash12(uv + 10.);
float t = iTime * .5;
vec3 c = vec3(0.);
for (float i = 0.; i < NUM_EXPLOSIONS; i++) {
float et = t + i * 1234.45235;
float id = floor(et);
et -= id;
vec2 p = hash31(id).xy;
p.x -= .5;
p.x *= 1.6;
c += explosion(uv, p, id, et);
}
c = Rainbow(c);
vec2 termUV = fragCoord.xy / iResolution.xy;
vec4 terminalColor = texture(iChannel0, termUV);
float alpha = step(length(terminalColor.rgb), BLACK_BLEND_THRESHOLD);
vec3 blendedColor = mix(terminalColor.rgb * 1.0, c.rgb * 0.3, alpha);
fragColor = vec4(blendedColor, terminalColor.a);
}
+139
View File
@@ -0,0 +1,139 @@
float triangle(float x, float period) {
return 2.0 * abs(3.0* ((x / period) - floor((x / period) + 0.5))) - 1.0;
}
float field(in vec3 position) {
float strength = 7.0 + 0.03 * log(1.0e-6 + fract(sin(iTime) * 373.11));
float accumulated = 0.0;
float previousMagnitude = 0.0;
float totalWeight = 0.0;
for (int i = 0; i < 6; ++i) {
float magnitude = dot(position, position);
position = abs(position) / magnitude + vec3(-0.5, -0.8 + 0.1 * sin(-iTime * 0.1 + 2.0), -1.1 + 0.3 * cos(iTime * 0.3));
float weight = exp(-float(i) / 7.0);
accumulated += weight * exp(-strength * pow(abs(magnitude - previousMagnitude), 2.3));
totalWeight += weight;
previousMagnitude = magnitude;
}
return max(0.0, 5.0 * accumulated / totalWeight - 0.7);
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
const float baseSpeed = 0.02;
const int maxIterations = 16;
const float formulaParameter = 0.79;
const float volumeSteps = 7.0;
const float stepSize = 0.24;
const float zoomFactor = 0.1;
const float tilingFactor = 0.85;
const float baseBrightness = 0.0008;
const float darkMatter = 0.2;
const float distanceFading = 0.56;
const float colorSaturation = 0.9;
const float transverseMotion = 0.2;
const float cloudOpacity = 0.48;
const float zoomSpeed = 0.0002;
vec2 normalizedCoordinates = 2.0 * fragCoord.xy / vec2(512) - 1.0;
vec2 scaledCoordinates = normalizedCoordinates * vec2(512) / 512.0;
float timeElapsed = iTime;
float speedAdjustment = -baseSpeed;
float formulaAdjustment = formulaParameter;
speedAdjustment = zoomSpeed * cos(iTime * 0.02 + 3.1415926 / 4.0);
vec2 uvCoordinates = scaledCoordinates;
float rotationXZ = 0.9;
float rotationYZ = -0.6;
float rotationXY = 0.9 + iTime * 0.08;
mat2 rotationMatrixXZ = mat2(vec2(cos(rotationXZ), sin(rotationXZ)), vec2(-sin(rotationXZ), cos(rotationXZ)));
mat2 rotationMatrixYZ = mat2(vec2(cos(rotationYZ), sin(rotationYZ)), vec2(-sin(rotationYZ), cos(rotationYZ)));
mat2 rotationMatrixXY = mat2(vec2(cos(rotationXY), sin(rotationXY)), vec2(-sin(rotationXY), cos(rotationXY)));
vec2 canvasCenter = vec2(0.5, 0.5);
vec3 rayDirection = vec3(uvCoordinates * zoomFactor, 1.0);
vec3 cameraPosition = vec3(0.0, 0.0, 0.0);
cameraPosition.x -= 2.0 * (canvasCenter.x - 0.5);
cameraPosition.y -= 2.0 * (canvasCenter.y - 0.5);
vec3 forwardVector = vec3(0.0, 0.0, 1.0);
cameraPosition.x += transverseMotion * cos(0.01 * iTime) + 0.001 * iTime;
cameraPosition.y += transverseMotion * sin(0.01 * iTime) + 0.001 * iTime;
cameraPosition.z += 0.003 * iTime;
rayDirection.xz *= rotationMatrixXZ;
forwardVector.xz *= rotationMatrixXZ;
rayDirection.yz *= rotationMatrixYZ;
forwardVector.yz *= rotationMatrixYZ;
cameraPosition.xy *= -1.0 * rotationMatrixXY;
cameraPosition.xz *= rotationMatrixXZ;
cameraPosition.yz *= rotationMatrixYZ;
float zoomOffset = (timeElapsed - 3311.0) * speedAdjustment;
cameraPosition += forwardVector * zoomOffset;
float sampleOffset = mod(zoomOffset, stepSize);
float normalizedSampleOffset = sampleOffset / stepSize;
float stepDistance = 0.24;
float secondaryStepDistance = stepDistance + stepSize / 2.0;
vec3 accumulatedColor = vec3(0.0);
float fieldContribution = 0.0;
vec3 backgroundColor = vec3(0.0);
for (float stepIndex = 0.0; stepIndex < volumeSteps; ++stepIndex) {
vec3 primaryPosition = cameraPosition + (stepDistance + sampleOffset) * rayDirection;
vec3 secondaryPosition = cameraPosition + (secondaryStepDistance + sampleOffset) * rayDirection;
primaryPosition = abs(vec3(tilingFactor) - mod(primaryPosition, vec3(tilingFactor * 2.0)));
secondaryPosition = abs(vec3(tilingFactor) - mod(secondaryPosition, vec3(tilingFactor * 2.0)));
fieldContribution = field(secondaryPosition);
float particleAccumulator = 0.0, particleDistance = 0.0;
for (int i = 0; i < maxIterations; ++i) {
primaryPosition = abs(primaryPosition) / dot(primaryPosition, primaryPosition) - formulaAdjustment;
float distanceChange = abs(length(primaryPosition) - particleDistance);
particleAccumulator += i > 2 ? min(12.0, distanceChange) : distanceChange;
particleDistance = length(primaryPosition);
}
particleAccumulator *= particleAccumulator * particleAccumulator;
float fadeFactor = pow(distanceFading, max(0.0, float(stepIndex) - normalizedSampleOffset));
accumulatedColor += vec3(stepDistance, stepDistance * stepDistance, stepDistance * stepDistance * stepDistance * stepDistance)
* particleAccumulator * baseBrightness * fadeFactor;
backgroundColor += mix(0.4, 1.0, cloudOpacity) * vec3(1.8 * fieldContribution * fieldContribution * fieldContribution,
1.4 * fieldContribution * fieldContribution, fieldContribution) * fadeFactor;
stepDistance += stepSize;
secondaryStepDistance += stepSize;
}
accumulatedColor = mix(vec3(length(accumulatedColor)), accumulatedColor, colorSaturation);
vec4 foregroundColor = vec4(accumulatedColor * 0.01, 1.0);
backgroundColor *= cloudOpacity;
backgroundColor.b *= 1.8;
backgroundColor.r *= 0.05;
backgroundColor.b = 0.5 * mix(backgroundColor.g, backgroundColor.b, 0.8);
backgroundColor.g = 0.0;
backgroundColor.bg = mix(backgroundColor.gb, backgroundColor.bg, 0.5 * (cos(iTime * 0.01) + 1.0));
vec2 terminalUV = fragCoord.xy / iResolution.xy;
vec4 terminalColor = texture(iChannel0, terminalUV);
float brightnessThreshold = 0.1;
float terminalBrightness = dot(terminalColor.rgb, vec3(0.2126, 0.7152, 0.0722));
if (terminalBrightness < brightnessThreshold) {
fragColor = mix(terminalColor, vec4(foregroundColor.rgb + backgroundColor, 1.0), 0.24);
} else {
fragColor = terminalColor;
}
}
@@ -0,0 +1,377 @@
// sligltly modified version of https://www.shadertoy.com/view/DsVSDV
// The only changes are done in the mainImage function
// Ive added comments on what to modify
// works really well with most colorschemes
#define Rot(a) mat2(cos(a),-sin(a),sin(a),cos(a))
#define antialiasing(n) n/min(iResolution.y,iResolution.x)
#define S(d,b) smoothstep(antialiasing(3.0),b,d)
#define B(p,s) max(abs(p).x-s.x,abs(p).y-s.y)
#define deg45 .707
#define R45(p) (( p + vec2(p.y,-p.x) ) *deg45)
#define Tri(p,s) max(R45(p).x,max(R45(p).y,B(p,s)))
#define DF(a,b) length(a) * cos( mod( atan(a.y,a.x)+6.28/(b*8.0), 6.28/((b*8.0)*0.5))+(b-1.)*6.28/(b*8.0) + vec2(0,11) )
float random (vec2 p) {
return fract(sin(dot(p.xy, vec2(12.9898,78.233)))* 43758.5453123);
}
float innerGear(vec2 p, float dir){
p*=Rot(radians(-iTime*45.+45.)*dir);
vec2 prevP = p;
//p*=Rot(radians(iTime*45.+20.));
p = DF(p,7.);
p-=vec2(0.24);
p*=Rot(deg45);
float d = B(p,vec2(0.01,0.06));
p = prevP;
float d2 = abs(length(p)-0.42)-0.02;
d = min(d,d2);
d2 = abs(length(p)-0.578)-0.02;
d = min(d,d2);
d2 = abs(length(p)-0.499)-0.005;
d = min(d,d2);
p = DF(p,7.);
p-=vec2(0.43);
p*=Rot(deg45);
d2 = B(p,vec2(0.01,0.04));
d = min(d,d2);
return d;
}
vec3 pattern1(vec2 p, vec3 col, float dir){
vec2 prevP = p;
float size = 0.499;
float thick = 0.15;
p+=vec2(size);
float d = abs(length(p)-size)-thick;
d = max(d,innerGear(p,dir));
col = mix(col,vec3(1.),S(d,0.0));
p = prevP;
p-=vec2(size);
d = abs(length(p)-size)-thick;
d = max(d,innerGear(p,dir));
col = mix(col,vec3(1.),S(d,0.0));
return col;
}
vec3 pattern2(vec2 p, vec3 col, float dir){
vec2 prevP = p;
float size = 0.33;
float thick = 0.15;
float thift = 0.0;
float speed = 0.3;
p-=vec2(size,0.);
float d = B(p,vec2(size,thick));
p.x+=thift;
p.x-=iTime*speed*dir;
p.x=mod(p.x,0.08)-0.04;
d = max(d,B(p,vec2(0.011,thick)));
p = prevP;
d = max(-(abs(p.y)-0.1),d);
//d = min(B(p,vec2(1.,0.1)),d);
p.y=abs(p.y)-0.079;
d = min(B(p,vec2(1.,0.02)),d);
p = prevP;
p-=vec2(0.0,size);
float d2 = B(p,vec2(thick,size));
p.y+=thift;
p.y+=iTime*speed*dir;
p.y=mod(p.y,0.08)-0.04;
d2 = max(d2,B(p,vec2(thick,0.011)));
p = prevP;
d2 = max(-(abs(p.x)-0.1),d2);
d2 = min(B(p,vec2(0.005,1.)),d2);
p.x=abs(p.x)-0.079;
d2 = min(B(p,vec2(0.02,1.)),d2);
d = min(d,d2);
p = prevP;
p+=vec2(0.0,size);
d2 = B(p,vec2(thick,size));
p.y+=thift;
p.y-=iTime*speed*dir;
p.y=mod(p.y,0.08)-0.04;
d2 = max(d2,B(p,vec2(thick,0.011)));
p = prevP;
d2 = max(-(abs(p.x)-0.1),d2);
d2 = min(B(p,vec2(0.005,1.)),d2);
p.x=abs(p.x)-0.079;
d2 = min(B(p,vec2(0.02,1.)),d2);
d = min(d,d2);
p = prevP;
p+=vec2(size,0.0);
d2 = B(p,vec2(size,thick));
p.x+=thift;
p.x+=iTime*speed*dir;
p.x=mod(p.x,0.08)-0.04;
d2 = max(d2,B(p,vec2(0.011,thick)));
d = min(d,d2);
p = prevP;
d = max(-(abs(p.y)-0.1),d);
d = min(B(p,vec2(1.,0.005)),d);
p.y=abs(p.y)-0.079;
d = min(B(p,vec2(1.,0.02)),d);
p = prevP;
d2 = abs(B(p,vec2(size*0.3)))-0.05;
d = min(d,d2);
col = mix(col,vec3(1.),S(d,0.0));
d = B(p,vec2(0.08));
col = mix(col,vec3(0.),S(d,0.0));
p*=Rot(radians(60.*iTime*dir));
d = B(p,vec2(0.03));
col = mix(col,vec3(1.),S(d,0.0));
return col;
}
vec3 drawBelt(vec2 p, vec3 col, float size){
vec2 prevP = p;
p*=size;
vec2 id = floor(p);
vec2 gr = fract(p)-0.5;
float dir = mod(id.x+id.y,2.)*2.-1.;
float n = random(id);
if(n<0.5){
if(n<0.25){
gr.x*=-1.;
}
col = pattern1(gr,col,dir);
} else {
if(n>0.75){
gr.x*=-1.;
}
col = pattern2(gr,col,dir);
}
return col;
}
vec3 gear(vec2 p, vec3 col, float dir){
vec2 prevP = p;
p*=Rot(radians(iTime*45.+13.)*-dir);
p = DF(p,7.);
p-=vec2(0.23);
p*=Rot(deg45);
float d = B(p,vec2(0.01,0.04));
p = prevP;
float d2 = abs(length(p)-0.29)-0.02;
d = min(d,d2);
col = mix(col,vec3(1.),S(d,0.0));
p*=Rot(radians(iTime*30.-30.)*dir);
p = DF(p,6.);
p-=vec2(0.14);
p*=Rot(radians(45.));
d = B(p,vec2(0.01,0.03));
p = prevP;
d2 =abs( length(p)-0.1)-0.02;
p*=Rot(radians(iTime*25.+30.)*-dir);
d2 = max(-(abs(p.x)-0.05),d2);
d = min(d,d2);
col = mix(col,vec3(1.),S(d,0.0));
return col;
}
vec3 item0(vec2 p, vec3 col, float dir){
vec2 prevP = p;
p.x*=dir;
p*=Rot(radians(iTime*30.+30.));
float d = abs(length(p)-0.2)-0.05;
col = mix(col,vec3(0.3),S(d,0.0));
d = abs(length(p)-0.2)-0.05;
d = max(-p.x,d);
float a = clamp(atan(p.x,p.y)*0.5,0.3,1.);
col = mix(col,vec3(a),S(d,0.0));
return col;
}
vec3 item1(vec2 p, vec3 col, float dir){
p.x*=dir;
vec2 prevP = p;
p*=Rot(radians(iTime*30.+30.));
float d = abs(length(p)-0.25)-0.04;
d = abs(max((abs(p.y)-0.15),d))-0.005;
float d2 = abs(length(p)-0.25)-0.01;
d2 = max((abs(p.y)-0.12),d2);
d = min(d,d2);
d2 = abs(length(p)-0.27)-0.01;
d2 = max(-(abs(p.y)-0.22),d2);
d = min(d,d2);
d2 = B(p,vec2(0.01,0.32));
d2 = max(-(abs(p.y)-0.22),d2);
d = min(d,d2);
p = prevP;
p*=Rot(radians(iTime*-20.+30.));
p = DF(p,2.);
p-=vec2(0.105);
p*=Rot(radians(45.));
d2 = B(p,vec2(0.03,0.01));
d = min(d,d2);
p = prevP;
d2 = abs(length(p)-0.09)-0.005;
d2 = max(-(abs(p.x)-0.03),d2);
d2 = max(-(abs(p.y)-0.03),d2);
d = min(d,d2);
col = mix(col,vec3(0.6),S(d,0.0));
return col;
}
vec3 item2(vec2 p, vec3 col, float dir){
p.x*=dir;
p*=Rot(radians(iTime*50.-10.));
vec2 prevP = p;
float d = abs(length(p)-0.15)-0.005;
float d2 = abs(length(p)-0.2)-0.01;
d2 = max((abs(p.y)-0.15),d2);
d = min(d,d2);
p = DF(p,1.);
p-=vec2(0.13);
p*=Rot(radians(45.));
d2 = B(p,vec2(0.008,0.1));
d = min(d,d2);
p = prevP;
p = DF(p,4.);
p-=vec2(0.18);
p*=Rot(radians(45.));
d2 = B(p,vec2(0.005,0.02));
d = min(d,d2);
col = mix(col,vec3(0.6),S(d,0.0));
return col;
}
float needle(vec2 p){
p.y-=0.05;
p*=1.5;
vec2 prevP = p;
p.y-=0.3;
p.x*=6.;
float d = Tri(p,vec2(0.3));
p = prevP;
p.y+=0.1;
p.x*=2.;
p.y*=-1.;
float d2 = Tri(p,vec2(0.1));
d = min(d,d2);
return d;
}
vec3 item3(vec2 p, vec3 col, float dir){
p*=Rot(radians(sin(iTime*dir)*120.));
vec2 prevP = p;
p.y= abs(p.y)-0.05;
float d = needle(p);
p = prevP;
float d2 = abs(length(p)-0.1)-0.003;
d2 = max(-(abs(p.x)-0.05),d2);
d = min(d,d2);
d2 = abs(length(p)-0.2)-0.005;
d2 = max(-(abs(p.x)-0.08),d2);
d = min(d,d2);
p = DF(p,4.);
p-=vec2(0.18);
d2 = length(p)-0.01;
p = prevP;
d2 = max(-(abs(p.x)-0.03),d2);
d = min(d,d2);
col = mix(col,vec3(0.6),S(d,0.0));
return col;
}
vec3 drawGearsAndItems(vec2 p, vec3 col, float size){
vec2 prevP = p;
p*=size;
p+=vec2(0.5);
vec2 id = floor(p);
vec2 gr = fract(p)-0.5;
float n = random(id);
float dir = mod(id.x+id.y,2.)*2.-1.;
if(n<0.3){
col = gear(gr,col,dir);
} else if(n>=0.3 && n<0.5){
col = item0(gr,col,dir);
} else if(n>=0.5 && n<0.7){
col = item1(gr,col,dir);
} else if(n>=0.7 && n<0.8) {
col = item2(gr,col,dir);
} else if(n>=0.8){
col = item3(gr,col,dir);
}
return col;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 p = (fragCoord-0.5*iResolution.xy)/iResolution.y;
// set speed of downwards motion
p.y+=iTime*0.02;
float size = 4.;
vec3 col = vec3(0.);
// Modify the colors to be darker by multiplying with a small factor
vec3 darkFactor = vec3(.5); // This makes everything 50% as bright
// Get the original colors but make them darker
col = drawBelt(p, col, size) * darkFactor;
col = drawGearsAndItems(p, col, size) * darkFactor;
// Additional option: you can add a color tint to make it less stark white
vec3 tint = vec3(0.1, 0.12, 0.15); // Slight blue-ish dark tint
col = col * tint;
vec2 uv = fragCoord/iResolution.xy;
vec4 terminalColor = texture(iChannel0, uv);
// Blend with reduced opacity for the shader elements
vec3 blendedColor = terminalColor.rgb + col.rgb * 0.7; // Reduced blend factor
fragColor = vec4(blendedColor, terminalColor.a);
}
+117
View File
@@ -0,0 +1,117 @@
// modified version of https://www.shadertoy.com/view/wld3WN
// amount of seconds for which the glitch loop occurs
#define DURATION 10.
// percentage of the duration for which the glitch is triggered
#define AMT .1
#define SS(a, b, x) (smoothstep(a, b, x) * smoothstep(b, a, x))
#define UI0 1597334673U
#define UI1 3812015801U
#define UI2 uvec2(UI0, UI1)
#define UI3 uvec3(UI0, UI1, 2798796415U)
#define UIF (1. / float(0xffffffffU))
// Hash by David_Hoskins
vec3 hash33(vec3 p)
{
uvec3 q = uvec3(ivec3(p)) * UI3;
q = (q.x ^ q.y ^ q.z)*UI3;
return -1. + 2. * vec3(q) * UIF;
}
// Gradient noise by iq
float gnoise(vec3 x)
{
// grid
vec3 p = floor(x);
vec3 w = fract(x);
// quintic interpolant
vec3 u = w * w * w * (w * (w * 6. - 15.) + 10.);
// gradients
vec3 ga = hash33(p + vec3(0., 0., 0.));
vec3 gb = hash33(p + vec3(1., 0., 0.));
vec3 gc = hash33(p + vec3(0., 1., 0.));
vec3 gd = hash33(p + vec3(1., 1., 0.));
vec3 ge = hash33(p + vec3(0., 0., 1.));
vec3 gf = hash33(p + vec3(1., 0., 1.));
vec3 gg = hash33(p + vec3(0., 1., 1.));
vec3 gh = hash33(p + vec3(1., 1., 1.));
// projections
float va = dot(ga, w - vec3(0., 0., 0.));
float vb = dot(gb, w - vec3(1., 0., 0.));
float vc = dot(gc, w - vec3(0., 1., 0.));
float vd = dot(gd, w - vec3(1., 1., 0.));
float ve = dot(ge, w - vec3(0., 0., 1.));
float vf = dot(gf, w - vec3(1., 0., 1.));
float vg = dot(gg, w - vec3(0., 1., 1.));
float vh = dot(gh, w - vec3(1., 1., 1.));
// interpolation
float gNoise = va + u.x * (vb - va) +
u.y * (vc - va) +
u.z * (ve - va) +
u.x * u.y * (va - vb - vc + vd) +
u.y * u.z * (va - vc - ve + vg) +
u.z * u.x * (va - vb - ve + vf) +
u.x * u.y * u.z * (-va + vb + vc - vd + ve - vf - vg + vh);
return 2. * gNoise;
}
// gradient noise in range [0, 1]
float gnoise01(vec3 x)
{
return .5 + .5 * gnoise(x);
}
// warp uvs for the crt effect
vec2 crt(vec2 uv)
{
float tht = atan(uv.y, uv.x);
float r = length(uv);
// curve without distorting the center
r /= (1. - .1 * r * r);
uv.x = r * cos(tht);
uv.y = r * sin(tht);
return .5 * (uv + 1.);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord / iResolution.xy;
float t = iTime;
// smoothed interval for which the glitch gets triggered
float glitchAmount = SS(DURATION * .001, DURATION * AMT, mod(t, DURATION));
float displayNoise = 0.;
vec3 col = vec3(0.);
vec2 eps = vec2(5. / iResolution.x, 0.);
vec2 st = vec2(0.);
// analog distortion
float y = uv.y * iResolution.y;
float distortion = gnoise(vec3(0., y * .01, t * 500.)) * (glitchAmount * 4. + .1);
distortion *= gnoise(vec3(0., y * .02, t * 250.)) * (glitchAmount * 2. + .025);
++displayNoise;
distortion += smoothstep(.999, 1., sin((uv.y + t * 1.6) * 2.)) * .02;
distortion -= smoothstep(.999, 1., sin((uv.y + t) * 2.)) * .02;
st = uv + vec2(distortion, 0.);
// chromatic aberration
col.r += textureLod(iChannel0, st + eps + distortion, 0.).r;
col.g += textureLod(iChannel0, st, 0.).g;
col.b += textureLod(iChannel0, st - eps - distortion, 0.).b;
// white noise + scanlines
displayNoise = 0.2 * clamp(displayNoise, 0., 1.);
col += (.15 + .65 * glitchAmount) * (hash33(vec3(fragCoord, mod(float(iFrame),
1000.))).r) * displayNoise;
col -= (.25 + .75 * glitchAmount) * (sin(4. * t + uv.y * iResolution.y * 1.75))
* displayNoise;
fragColor = vec4(col, 1.0);
}
@@ -0,0 +1,144 @@
// First it does a "chromatic aberration" by splitting the rgb signals by a product of sin functions
// over time, then it does a glow effect in a perceptual color space
// Based on kalgynirae's Ghostty passable glow shader and NickWest's Chromatic Aberration shader demo
// Passable glow: https://github.com/kalgynirae/dotfiles/blob/main/ghostty/glow.glsl
// "Chromatic Aberration": https://www.shadertoy.com/view/Mds3zn
// sRGB linear -> nonlinear transform from https://bottosson.github.io/posts/colorwrong/
float f(float x) {
if (x >= 0.0031308) {
return 1.055 * pow(x, 1.0 / 2.4) - 0.055;
} else {
return 12.92 * x;
}
}
float f_inv(float x) {
if (x >= 0.04045) {
return pow((x + 0.055) / 1.055, 2.4);
} else {
return x / 12.92;
}
}
// Oklab <-> linear sRGB conversions from https://bottosson.github.io/posts/oklab/
vec4 toOklab(vec4 rgb) {
vec3 c = vec3(f_inv(rgb.r), f_inv(rgb.g), f_inv(rgb.b));
float l = 0.4122214708 * c.r + 0.5363325363 * c.g + 0.0514459929 * c.b;
float m = 0.2119034982 * c.r + 0.6806995451 * c.g + 0.1073969566 * c.b;
float s = 0.0883024619 * c.r + 0.2817188376 * c.g + 0.6299787005 * c.b;
float l_ = pow(l, 1.0 / 3.0);
float m_ = pow(m, 1.0 / 3.0);
float s_ = pow(s, 1.0 / 3.0);
return vec4(
0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_,
1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_,
0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_,
rgb.a
);
}
vec4 toRgb(vec4 oklab) {
vec3 c = oklab.rgb;
float l_ = c.r + 0.3963377774 * c.g + 0.2158037573 * c.b;
float m_ = c.r - 0.1055613458 * c.g - 0.0638541728 * c.b;
float s_ = c.r - 0.0894841775 * c.g - 1.2914855480 * c.b;
float l = l_ * l_ * l_;
float m = m_ * m_ * m_;
float s = s_ * s_ * s_;
vec3 linear_srgb = vec3(
4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
-0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s
);
return vec4(
clamp(f(linear_srgb.r), 0.0, 1.0),
clamp(f(linear_srgb.g), 0.0, 1.0),
clamp(f(linear_srgb.b), 0.0, 1.0),
oklab.a
);
}
// Bloom samples from https://gist.github.com/qwerasd205/c3da6c610c8ffe17d6d2d3cc7068f17f
const vec3[24] samples = {
vec3(0.1693761725038636, 0.9855514761735895, 1),
vec3(-1.333070830962943, 0.4721463328627773, 0.7071067811865475),
vec3(-0.8464394909806497, -1.51113870578065, 0.5773502691896258),
vec3(1.554155680728463, -1.2588090085709776, 0.5),
vec3(1.681364377589461, 1.4741145918052656, 0.4472135954999579),
vec3(-1.2795157692199817, 2.088741103228784, 0.4082482904638631),
vec3(-2.4575847530631187, -0.9799373355024756, 0.3779644730092272),
vec3(0.5874641440200847, -2.7667464429345077, 0.35355339059327373),
vec3(2.997715703369726, 0.11704939884745152, 0.3333333333333333),
vec3(0.41360842451688395, 3.1351121305574803, 0.31622776601683794),
vec3(-3.167149933769243, 0.9844599011770256, 0.30151134457776363),
vec3(-1.5736713846521535, -3.0860263079123245, 0.2886751345948129),
vec3(2.888202648340422, -2.1583061557896213, 0.2773500981126146),
vec3(2.7150778983300325, 2.5745586041105715, 0.2672612419124244),
vec3(-2.1504069972377464, 3.2211410627650165, 0.2581988897471611),
vec3(-3.6548858794907493, -1.6253643308191343, 0.25),
vec3(1.0130775986052671, -3.9967078676335834, 0.24253562503633297),
vec3(4.229723673607257, 0.33081361055181563, 0.23570226039551587),
vec3(0.40107790291173834, 4.340407413572593, 0.22941573387056174),
vec3(-4.319124570236028, 1.159811599693438, 0.22360679774997896),
vec3(-1.9209044802827355, -4.160543952132907, 0.2182178902359924),
vec3(3.8639122286635708, -2.6589814382925123, 0.21320071635561041),
vec3(3.3486228404946234, 3.4331800232609, 0.20851441405707477),
vec3(-2.8769733643574344, 3.9652268864187157, 0.20412414523193154)
};
float offsetFunction(float iTime) {
float amount = 1.0;
const float periods[4] = {6.0, 16.0, 19.0, 27.0};
for (int i = 0; i < 4; i++) {
amount *= 1.0 + 0.5 * sin(iTime*periods[i]);
}
//return amount;
return amount * periods[3];
}
const float DIM_CUTOFF = 0.35;
const float BRIGHT_CUTOFF = 0.65;
const float ABBERATION_FACTOR = 0.05;
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = fragCoord.xy / iResolution.xy;
float amount = offsetFunction(iTime);
vec3 col;
col.r = texture( iChannel0, vec2(uv.x-ABBERATION_FACTOR*amount / iResolution.x, uv.y) ).r;
col.g = texture( iChannel0, uv ).g;
col.b = texture( iChannel0, vec2(uv.x+ABBERATION_FACTOR*amount / iResolution.x, uv.y) ).b;
vec4 splittedColor = vec4(col, 1.0);
vec4 source = toOklab(splittedColor);
vec4 dest = source;
if (source.x > DIM_CUTOFF) {
dest.x *= 1.2;
// dest.x = 1.2;
} else {
vec2 step = vec2(1.414) / iResolution.xy;
vec3 glow = vec3(0.0);
for (int i = 0; i < 24; i++) {
vec3 s = samples[i];
float weight = s.z;
vec4 c = toOklab(texture(iChannel0, uv + s.xy * step));
if (c.x > DIM_CUTOFF) {
glow.yz += c.yz * weight * 0.3;
if (c.x <= BRIGHT_CUTOFF) {
glow.x += c.x * weight * 0.05;
} else {
glow.x += c.x * weight * 0.10;
}
}
}
// float lightness_diff = clamp(glow.x - dest.x, 0.0, 1.0);
// dest.x = lightness_diff;
// dest.yz = dest.yz * (1.0 - lightness_diff) + glow.yz * lightness_diff;
dest.xyz += glow.xyz;
}
fragColor = toRgb(dest);
}
@@ -0,0 +1,25 @@
// credits: https://github.com/unkn0wncode
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
// Normalize pixel coordinates (range from 0 to 1)
vec2 uv = fragCoord.xy / iResolution.xy;
// Create a gradient from bottom right to top left as a function (x + y)/2
float gradientFactor = (uv.x + uv.y) / 2.0;
// Define gradient colors (adjust to your preference)
vec3 gradientStartColor = vec3(0.1, 0.1, 0.5); // Start color (e.g., dark blue)
vec3 gradientEndColor = vec3(0.5, 0.1, 0.1); // End color (e.g., dark red)
vec3 gradientColor = mix(gradientStartColor, gradientEndColor, gradientFactor);
// Sample the terminal screen texture including alpha channel
vec4 terminalColor = texture(iChannel0, uv);
// Make a mask that is 1.0 where the terminal content is not black
float mask = 1 - step(0.5, dot(terminalColor.rgb, vec3(1.0)));
vec3 blendedColor = mix(terminalColor.rgb, gradientColor, mask);
// Apply terminal's alpha to control overall opacity
fragColor = vec4(blendedColor, terminalColor.a);
}
@@ -0,0 +1,157 @@
// In-game CRT shader
// Author: sarphiv
// License: CC BY-NC-SA 4.0
// Description:
// Cursor shader for Ghostty designed to be applied before the accompanying in-game CRT shader.
// Highlights the cursor whenever it changes (line/block) or moves, and draws a glowing trail for large movements.
// The glow is colored based on cursor colors with an override for white-grey colors.
// Settings:
// Minimum distance in UV coordinates before drawing trail
// [0, sqrt(2)]
#define TRAIL_MIN_DISTANCE 0.1
// Use override colors when color channel brightness standard deviation is below threshold
// [0, sqrt(2)/3]
#define GLOW_COLOR_OVERRIDE_THRESHOLD 0.1
// Override color for current cursor
// [0, 1]^3
#define GLOW_COLOR_OVERRIDE_CURRENT 0.2, 0.4, 1.0
// Override color for previous cursor
// [0, 1]^3
#define GLOW_COLOR_OVERRIDE_PREVIOUS 0.4, 0.1, 1.0
// Brightness offset for glow effect
// [0, 1]
#define GLOW_COLOR_OFFSET_BRIGHTNESS 0.5
// Time slowdown factor for animations
// x \in R : x > 0
#define TIME_DURATION_FACTOR 1.0
// Constants:
#define EPS 1e-9
// Functions:
float min_(float a, float b, float c) { return min(a, min(b, c)); }
float max_(float a, float b, float c) { return max(a, max(b, c)); }
float sdRectangle(vec2 p, vec2 topLeft, vec2 size) {
vec2 center = topLeft + vec2(size.x, -size.y) * 0.5;
vec2 d = abs(p - center) - size * 0.5;
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
}
float sdSeg(vec2 p, vec2 a)
{
vec2 c = a * clamp(dot(p, a) / (dot(a, a) + EPS), 0., 1.) - p;
return sqrt(dot(c, c));
}
float sdTriangle(vec2 p, vec2 a, vec2 b, vec2 c)
{
a -= p; b -= p; c -= p;
vec3 t = cross(vec3(a.x, b.x, c.x), vec3(a.y, b.y, c.y));
vec2 m = vec2(min_(t.x, t.y, t.z), max_(t.x, t.y, t.z));
float s = -1. + 2. * step(m.x, 0.) * step(0., m.y);
return s * min_(
sdSeg(a, a - b),
sdSeg(b, b - c),
sdSeg(c, c - a)
);
}
float sdTrail(vec2 p, vec2 currPos, vec2 currSize, vec2 prevPos, vec2 prevSize, float t) {
// Initialize points
vec2 currWidth = vec2(currSize.x, 0.0), currHeight = vec2(0.0, -currSize.y);
vec2 currTopLeft = currPos;
vec2 currTopRight = currTopLeft + currWidth;
vec2 currBottomLeft = currTopLeft + currHeight;
vec2 currBottomRight = currBottomLeft + currWidth;
vec2 currCenter = (currTopLeft + currBottomRight) * 0.5;
vec2 prevWidth = vec2(prevSize.x, 0.0), prevHeight = vec2(0.0, -prevSize.y);
vec2 prevTopLeft = prevPos;
vec2 prevTopRight = prevTopLeft + prevWidth;
vec2 prevBottomLeft = prevTopLeft + prevHeight;
vec2 prevBottomRight = prevBottomLeft + prevWidth;
vec2 prevCenter = (prevTopLeft + prevBottomRight) * 0.5;
// Check whether to only draw cursor
bool nearbyPrev = distance(currCenter, prevCenter) < TRAIL_MIN_DISTANCE;
bool insidePrev = (
currCenter.x >= prevTopLeft.x && currCenter.x <= prevTopRight.x &&
currCenter.y <= prevTopLeft.y && currCenter.y >= prevBottomLeft.y
);
float rectDist = max(sdRectangle(p, currTopLeft, currSize), 0.0);
if (nearbyPrev || insidePrev)
return rectDist;
// Draw trail and cursor
vec2[4] corners = { currTopLeft, currTopRight, currBottomRight, currBottomLeft };
vec2 triB = corners[0], triC = corners[0], dir = normalize(currCenter - prevCenter);
float minRel = 1/EPS, maxRel = -minRel;
for (int i = 0; i < 4; ++i) {
vec2 delta = corners[i] - prevCenter;
float rel = atan(dir.x * delta.y - dir.y * delta.x, dot(dir, delta));
if (rel < minRel)
minRel = rel, triB = corners[i];
if (rel > maxRel)
maxRel = rel, triC = corners[i];
}
float triDist = max(sdTriangle(p, prevCenter, triB, triC), 0.0);
return min(rectDist, mix(triDist, rectDist, t));
}
vec4 colorOverride(vec4 baseColor, vec4 overrideColor) {
if (sqrt(pow(distance(baseColor.rgb, vec3(dot(baseColor.rgb, vec3(1.0)) / 3.0)), 2) / 3.0) < GLOW_COLOR_OVERRIDE_THRESHOLD)
return overrideColor;
else
return baseColor;
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = fragCoord.xy / iResolution.xy;
fragColor = texture(iChannel0, uv);
vec2 currPos = iCurrentCursor.xy / iResolution.xy, currSize = iCurrentCursor.zw / iResolution.xy;
vec2 prevPos = iPreviousCursor.xy / iResolution.xy, prevSize = iPreviousCursor.zw / iResolution.xy;
vec2 currCenter = currPos + currSize * vec2(0.5, -0.5);
vec2 prevCenter = prevPos + prevSize * vec2(0.5, -0.5);
float dCenter = distance(currCenter, prevCenter);
float dSeg = dot(uv - prevCenter, currCenter - prevCenter) * pow(dCenter + EPS, -2);
bool nearbyPrev = dCenter < TRAIL_MIN_DISTANCE;
float tShape = 1.0 - pow(1.0 - clamp((iTime - iTimeCursorChange) / TIME_DURATION_FACTOR, 0.0, 1.0), 3);
float tVisible = exp(-(iTime - iTimeCursorChange) / TIME_DURATION_FACTOR * 50.0);
float dTrail = sdTrail(uv, currPos, currSize, prevPos, prevSize, tShape);
float dTip = nearbyPrev ? 0.0 : clamp(1.0 - abs(dSeg - 1.0), 0.0, 1.0);
vec4 currColor = colorOverride(iCurrentCursorColor, vec4(GLOW_COLOR_OVERRIDE_CURRENT, 1.0));
vec4 prevColor = colorOverride(iPreviousCursorColor, vec4(GLOW_COLOR_OVERRIDE_PREVIOUS, 1.0));
vec4 glowColor = mix(fragColor, mix(prevColor, currColor, dTip) + GLOW_COLOR_OFFSET_BRIGHTNESS, pow(dTip, 3));
glowColor = mix(glowColor, fragColor, pow(smoothstep(0.0, 0.3, dTrail), 0.1));
vec4 trailColor = mix(vec4(1.0), glowColor, pow(smoothstep(0.0, 0.01, dTrail), 0.2));
vec4 trail = mix(trailColor, fragColor, pow(smoothstep(0.0, nearbyPrev ? 0.01 : 0.1, dTrail), 0.2));
if (!nearbyPrev) {
trail = mix(trailColor, trail, pow(smoothstep(0.0, 6.0, dTip), 0.05));
trail = mix(trailColor, trail, pow(smoothstep(0.0, 8.0, dTip), 0.005));
}
fragColor = mix(fragColor, trail, tVisible);
}
+308
View File
@@ -0,0 +1,308 @@
// In-game CRT shader
// Author: sarphiv
// License: CC BY-NC-SA 4.0
// Description:
// Shader for Ghostty with a focus on being usable while looking like a stylized CRT terminal from a modern video game.
// Based on:
// 1. https://gist.github.com/mitchellh/39d62186910dcc27cad097fed16eb882 (forces the choice of license)
// 2. https://gist.github.com/qwerasd205/c3da6c610c8ffe17d6d2d3cc7068f17f
// 3. https://gist.github.com/seanwcom/0fbe6b270aaa5f28823e053d3dbb14ca
// 4. https://www.shadertoy.com/view/ltB3zD
// Settings:
// How straight the terminal is in each axis
// (x, y) \in R^2 : x, y > 0
#define CURVE 13.0, 11.0
// How far apart the different colors are from each other
// x \in R
#define COLOR_FRINGING_SPREAD 0.1
// How much the ghost images are spread out
// x \in R : x >= 0
#define GHOSTING_SPREAD 0.75
// How visible ghost images are
// x \in R : x >= 0
#define GHOSTING_STRENGTH 0.1
// How much of the non-linearly darkened colors are mixed in
// [0, 1]
#define DARKEN_MIX 0.4
// How far in the vignette spreads
// x \in R : x >= 0
#define VIGNETTE_SPREAD 0.4
// How bright the vignette is
// x \in R : x >= 0
#define VIGNETTE_BRIGHTNESS 20.0
// Tint all colors
// [0, 1]^3
#define TINT 0.93, 1.00, 0.96
// How visible the scan line effect is
// NOTE: Technically these are not scan lines, but rather the lack of them
// [0, 1]
#define SCAN_LINES_STRENGTH 0.20
// How bright the spaces between the lines are
// [0, 1]
#define SCAN_LINES_VARIANCE 0.35
// Pixels per scan line effect
// x \in R : x > 0
#define SCAN_LINES_PERIOD 4.0
// How visible the aperture grille is
// x \in R : x >= 0
#define APERTURE_GRILLE_STRENGTH 0.3
// Pixels per aperture grille
// x \in R : x > 0
#define APERTURE_GRILLE_PERIOD 2.0
// How much the screen flickers
// x \in R : x >= 0
#define FLICKER_STRENGTH 0.04
// How fast the screen flickers
// x \in R : x > 0
#define FLICKER_FREQUENCY 15.0
// How much noise is added to filled areas
// [0, 1]
#define NOISE_CONTENT_STRENGTH 0.25
// How much noise is added everywhere
// [0, 1]
#define NOISE_UNIFORM_STRENGTH 0.25
// How big the bloom is
// x \in R : x >= 0
#define BLOOM_SPREAD 8.0
// How visible the bloom is
// [0, 1]
#define BLOOM_STRENGTH 0.004
// Backgrond opacity
// [0, 1]
#define BACKGROUND_OPACITY 0.8
// Disabled values for when the settings are not defined
#ifndef COLOR_FRINGING_SPREAD
#define COLOR_FRINGING_SPREAD 0.0
#endif
#if !defined(GHOSTING_SPREAD) || !defined(GHOSTING_STRENGTH)
#undef GHOSTING_SPREAD
#undef GHOSTING_STRENGTH
#define GHOSTING_SPREAD 0.0
#define GHOSTING_STRENGTH 0.0
#endif
#ifndef DARKEN_MIX
#define DARKEN_MIX 0.0
#endif
#if !defined(VIGNETTE_SPREAD) || !defined(VIGNETTE_BRIGHTNESS)
#undef VIGNETTE_SPREAD
#undef VIGNETTE_BRIGHTNESS
#define VIGNETTE_SPREAD 0.0
#define VIGNETTE_BRIGHTNESS 1.0
#endif
#ifndef TINT
#define TINT 1.00, 1.00, 1.00
#endif
#if !defined(SCAN_LINES_STRENGTH) || !defined(SCAN_LINES_VARIANCE) || !defined(SCAN_LINES_PERIOD)
#undef SCAN_LINES_STRENGTH
#undef SCAN_LINES_VARIANCE
#undef SCAN_LINES_PERIOD
#define SCAN_LINES_STRENGTH 0.0
#define SCAN_LINES_VARIANCE 1.0
#define SCAN_LINES_PERIOD 1.0
#endif
#if !defined(APERTURE_GRILLE_STRENGTH) || !defined(APERTURE_GRILLE_PERIOD)
#undef APERTURE_GRILLE_STRENGTH
#undef APERTURE_GRILLE_PERIOD
#define APERTURE_GRILLE_STRENGTH 0.0
#define APERTURE_GRILLE_PERIOD 1.0
#endif
#if !defined(FLICKER_STRENGTH) || !defined(FLICKER_FREQUENCY)
#undef FLICKER_STRENGTH
#undef FLICKER_FREQUENCY
#define FLICKER_STRENGTH 0.0
#define FLICKER_FREQUENCY 1.0
#endif
#if !defined(NOISE_CONTENT_STRENGTH) || !defined(NOISE_UNIFORM_STRENGTH)
#undef NOISE_CONTENT_STRENGTH
#undef NOISE_UNIFORM_STRENGTH
#define NOISE_CONTENT_STRENGTH 0.0
#define NOISE_UNIFORM_STRENGTH 0.0
#endif
#if !defined(BLOOM_SPREAD) || !defined(BLOOM_STRENGTH)
#undef BLOOM_SPREAD
#undef BLOOM_STRENGTH
#define BLOOM_SPREAD 0.0
#define BLOOM_STRENGTH 0.0
#endif
#ifndef BACKGROUND_OPACITY
#define BACKGROUND_OPACITY 1.0
#endif
// Constants:
#define PI 3.1415926535897932384626433832795
#define PHI 1.61803398874989484820459
#ifdef BLOOM_SPREAD
// Golden spiral samples used for bloom.
// [x, y, weight] weight is inverse of distance.
const vec3[24] bloomSamples = {
vec3( 0.1693761725038636, 0.9855514761735895, 1),
vec3(-1.333070830962943, 0.4721463328627773, 0.7071067811865475),
vec3(-0.8464394909806497, -1.51113870578065, 0.5773502691896258),
vec3( 1.554155680728463, -1.2588090085709776, 0.5),
vec3( 1.681364377589461, 1.4741145918052656, 0.4472135954999579),
vec3(-1.2795157692199817, 2.088741103228784, 0.4082482904638631),
vec3(-2.4575847530631187, -0.9799373355024756, 0.3779644730092272),
vec3( 0.5874641440200847, -2.7667464429345077, 0.35355339059327373),
vec3( 2.997715703369726, 0.11704939884745152, 0.3333333333333333),
vec3( 0.41360842451688395, 3.1351121305574803, 0.31622776601683794),
vec3(-3.167149933769243, 0.9844599011770256, 0.30151134457776363),
vec3(-1.5736713846521535, -3.0860263079123245, 0.2886751345948129),
vec3( 2.888202648340422, -2.1583061557896213, 0.2773500981126146),
vec3( 2.7150778983300325, 2.5745586041105715, 0.2672612419124244),
vec3(-2.1504069972377464, 3.2211410627650165, 0.2581988897471611),
vec3(-3.6548858794907493, -1.6253643308191343, 0.25),
vec3( 1.0130775986052671, -3.9967078676335834, 0.24253562503633297),
vec3( 4.229723673607257, 0.33081361055181563, 0.23570226039551587),
vec3( 0.40107790291173834, 4.340407413572593, 0.22941573387056174),
vec3(-4.319124570236028, 1.159811599693438, 0.22360679774997896),
vec3(-1.9209044802827355, -4.160543952132907, 0.2182178902359924),
vec3( 3.8639122286635708, -2.6589814382925123, 0.21320071635561041),
vec3( 3.3486228404946234, 3.4331800232609, 0.20851441405707477),
vec3(-2.8769733643574344, 3.9652268864187157, 0.20412414523193154)
};
#endif
// Functions:
float gold_v2_noise(in vec2 xy, in float seed)
{
return fract(sin(distance(xy*PHI, xy)*seed)*xy.x*xy.y);
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
// Get texture coordinates
vec2 uv = fragCoord.xy / iResolution.xy;
#ifdef CURVE
// Curve texture coordinates to mimic non-flat CRT monior
uv = (uv - 0.5) * 2.0;
uv.xy *= 1.0 + pow((abs(vec2(uv.y, uv.x)) / vec2(CURVE)), vec2(2.0));
uv = (uv / 2.0) + 0.5;
#endif
// Retrieve colors from appropriate locations
fragColor.r = texture(iChannel0, vec2(uv.x + 0.0003 * COLOR_FRINGING_SPREAD, uv.y + 0.0003 * COLOR_FRINGING_SPREAD)).x;
fragColor.g = texture(iChannel0, vec2(uv.x + 0.0000 * COLOR_FRINGING_SPREAD, uv.y - 0.0006 * COLOR_FRINGING_SPREAD)).y;
fragColor.b = texture(iChannel0, vec2(uv.x - 0.0006 * COLOR_FRINGING_SPREAD, uv.y + 0.0000 * COLOR_FRINGING_SPREAD)).z;
fragColor.a = texture(iChannel0, uv).a;
// Add faint ghost images
fragColor.r += 0.04 * GHOSTING_STRENGTH * texture(iChannel0, GHOSTING_SPREAD * vec2(+0.025, -0.027) + uv.xy).x;
fragColor.g += 0.02 * GHOSTING_STRENGTH * texture(iChannel0, GHOSTING_SPREAD * vec2(-0.022, -0.020) + uv.xy).y;
fragColor.b += 0.04 * GHOSTING_STRENGTH * texture(iChannel0, GHOSTING_SPREAD * vec2(-0.020, -0.018) + uv.xy).z;
// Quadratically darken everything
fragColor.rgb = mix(fragColor.rgb, fragColor.rgb*fragColor.rgb, DARKEN_MIX);
// Vignette effect
// NOTE: Clamp necessary because of curve effect
fragColor.rgb *= VIGNETTE_BRIGHTNESS * pow(clamp(uv.x * uv.y * (1.0-uv.x) * (1.0-uv.y), 0.0, 1.0), VIGNETTE_SPREAD);
// Tint all colors
fragColor.rgb *= vec3(TINT);
// NOTE: At this point, RGB values may be above 1
// Add scan lines effect
fragColor.rgb *= mix(
1.0,
SCAN_LINES_VARIANCE/2.0*(1.0 + sin(2*PI* uv.y * iResolution.y/SCAN_LINES_PERIOD)),
SCAN_LINES_STRENGTH
);
// Add aperture grille
int apertureGrilleStep = int(8 * mod(fragCoord.x, APERTURE_GRILLE_PERIOD) / APERTURE_GRILLE_PERIOD);
float apertureGrilleMask;
if (apertureGrilleStep < 3)
apertureGrilleMask = 0.0;
else if (apertureGrilleStep < 4)
apertureGrilleMask = mod(8*fragCoord.x, APERTURE_GRILLE_PERIOD) / APERTURE_GRILLE_PERIOD;
else if (apertureGrilleStep < 7)
apertureGrilleMask = 1.0;
else if (apertureGrilleStep < 8)
apertureGrilleMask = mod(-8*fragCoord.x, APERTURE_GRILLE_PERIOD) / APERTURE_GRILLE_PERIOD;
fragColor.rgb *= 1.0 - APERTURE_GRILLE_STRENGTH*apertureGrilleMask;
// Add flicker
fragColor *= 1.0 - FLICKER_STRENGTH/2.0*(1.0 + sin(2*PI*FLICKER_FREQUENCY*iTime));
// Add noise
// NOTE: Hard-coded noise distributions
float noise = smoothstep(0.4, 0.6, gold_v2_noise(fragCoord.xy, fract(iTime*0.001)));
fragColor.rgb *= clamp(noise + 1.0 - NOISE_CONTENT_STRENGTH, 0.0, 1.0);
fragColor.rgb = clamp(fragColor.rgb + noise * NOISE_UNIFORM_STRENGTH / 100, 0.0, 1.0);
// NOTE: At this point, RGB values are again within [0, 1]
// Remove output outside of screen bounds
// if (uv.x < 0.0 || uv.x > 1.0)
// fragColor.rgb *= 0.0;
// if (uv.y < 0.0 || uv.y > 1.0)
// fragColor.rgb *= 0.0;
#ifdef BLOOM_SPREAD
// Add bloom
vec2 step = BLOOM_SPREAD * vec2(1.414) / iResolution.xy;
for (int i = 0; i < 24; i++) {
vec3 bloomSample = bloomSamples[i];
vec4 neighbor = texture(iChannel0, uv + bloomSample.xy * step);
float luminance = 0.299 * neighbor.r + 0.587 * neighbor.g + 0.114 * neighbor.b;
fragColor += luminance * bloomSample.z * neighbor * BLOOM_STRENGTH;
}
fragColor = clamp(fragColor, 0.0, 1.0);
#endif
// Set background opacity
fragColor = vec4(fragColor.rgb*fragColor.a, BACKGROUND_OPACITY);
}
@@ -0,0 +1,409 @@
/*
Feel free to do anything you want with this code.
This shader uses "runes" code by FabriceNeyret2 (https://www.shadertoy.com/view/4ltyDM)
which is based on "runes" by otaviogood (https://shadertoy.com/view/MsXSRn).
These random runes look good as matrix symbols and have acceptable performance.
@pkazmier modified this shader to work in Ghostty.
*/
const int ITERATIONS = 40; //use less value if you need more performance
const float SPEED = .5;
const float STRIP_CHARS_MIN = 7.;
const float STRIP_CHARS_MAX = 40.;
const float STRIP_CHAR_HEIGHT = 0.15;
const float STRIP_CHAR_WIDTH = 0.10;
const float ZCELL_SIZE = 1. * (STRIP_CHAR_HEIGHT * STRIP_CHARS_MAX); //the multiplier can't be less than 1.
const float XYCELL_SIZE = 12. * STRIP_CHAR_WIDTH; //the multiplier can't be less than 1.
const int BLOCK_SIZE = 10; //in cells
const int BLOCK_GAP = 2; //in cells
const float WALK_SPEED = 0.5 * XYCELL_SIZE;
const float BLOCKS_BEFORE_TURN = 3.;
const float PI = 3.14159265359;
// ---- random ----
float hash(float v) {
return fract(sin(v)*43758.5453123);
}
float hash(vec2 v) {
return hash(dot(v, vec2(5.3983, 5.4427)));
}
vec2 hash2(vec2 v)
{
v = vec2(v * mat2(127.1, 311.7, 269.5, 183.3));
return fract(sin(v)*43758.5453123);
}
vec4 hash4(vec2 v)
{
vec4 p = vec4(v * mat4x2( 127.1, 311.7,
269.5, 183.3,
113.5, 271.9,
246.1, 124.6 ));
return fract(sin(p)*43758.5453123);
}
vec4 hash4(vec3 v)
{
vec4 p = vec4(v * mat4x3( 127.1, 311.7, 74.7,
269.5, 183.3, 246.1,
113.5, 271.9, 124.6,
271.9, 269.5, 311.7 ) );
return fract(sin(p)*43758.5453123);
}
// ---- symbols ----
// Slightly modified version of "runes" by FabriceNeyret2 - https://www.shadertoy.com/view/4ltyDM
// Which is based on "runes" by otaviogood - https://shadertoy.com/view/MsXSRn
float rune_line(vec2 p, vec2 a, vec2 b) { // from https://www.shadertoy.com/view/4dcfW8
p -= a, b -= a;
float h = clamp(dot(p, b) / dot(b, b), 0., 1.); // proj coord on line
return length(p - b * h); // dist to segment
}
float rune(vec2 U, vec2 seed, float highlight)
{
float d = 1e5;
for (int i = 0; i < 4; i++) // number of strokes
{
vec4 pos = hash4(seed);
seed += 1.;
// each rune touches the edge of its box on all 4 sides
if (i == 0) pos.y = .0;
if (i == 1) pos.x = .999;
if (i == 2) pos.x = .0;
if (i == 3) pos.y = .999;
// snap the random line endpoints to a grid 2x3
vec4 snaps = vec4(2, 3, 2, 3);
pos = ( floor(pos * snaps) + .5) / snaps;
if (pos.xy != pos.zw) //filter out single points (when start and end are the same)
d = min(d, rune_line(U, pos.xy, pos.zw + .001) ); // closest line
}
return smoothstep(0.1, 0., d) + highlight*smoothstep(0.4, 0., d);
}
float random_char(vec2 outer, vec2 inner, float highlight) {
vec2 seed = vec2(dot(outer, vec2(269.5, 183.3)), dot(outer, vec2(113.5, 271.9)));
return rune(inner, seed, highlight);
}
// ---- digital rain ----
// xy - horizontal, z - vertical
vec3 rain(vec3 ro3, vec3 rd3, float time) {
vec4 result = vec4(0.);
// normalized 2d projection
vec2 ro2 = vec2(ro3);
vec2 rd2 = normalize(vec2(rd3));
// we use formulas `ro3 + rd3 * t3` and `ro2 + rd2 * t2`, `t3_to_t2` is a multiplier to convert t3 to t2
bool prefer_dx = abs(rd2.x) > abs(rd2.y);
float t3_to_t2 = prefer_dx ? rd3.x / rd2.x : rd3.y / rd2.y;
// at first, horizontal space (xy) is divided into cells (which are columns in 3D)
// then each xy-cell is divided into vertical cells (along z) - each of these cells contains one raindrop
ivec3 cell_side = ivec3(step(0., rd3)); //for positive rd.x use cell side with higher x (1) as the next side, for negative - with lower x (0), the same for y and z
ivec3 cell_shift = ivec3(sign(rd3)); //shift to move to the next cell
// move through xy-cells in the ray direction
float t2 = 0.; // the ray formula is: ro2 + rd2 * t2, where t2 is positive as the ray has a direction.
ivec2 next_cell = ivec2(floor(ro2/XYCELL_SIZE)); //first cell index where ray origin is located
for (int i=0; i<ITERATIONS; i++) {
ivec2 cell = next_cell; //save cell value before changing
float t2s = t2; //and t
// find the intersection with the nearest side of the current xy-cell (since we know the direction, we only need to check one vertical side and one horizontal side)
vec2 side = vec2(next_cell + cell_side.xy) * XYCELL_SIZE; //side.x is x coord of the y-axis side, side.y - y of the x-axis side
vec2 t2_side = (side - ro2) / rd2; // t2_side.x and t2_side.y are two candidates for the next value of t2, we need the nearest
if (t2_side.x < t2_side.y) {
t2 = t2_side.x;
next_cell.x += cell_shift.x; //cross through the y-axis side
} else {
t2 = t2_side.y;
next_cell.y += cell_shift.y; //cross through the x-axis side
}
//now t2 is the value of the end point in the current cell (and the same point is the start value in the next cell)
// gap cells
vec2 cell_in_block = fract(vec2(cell) / float(BLOCK_SIZE));
float gap = float(BLOCK_GAP) / float(BLOCK_SIZE);
if (cell_in_block.x < gap || cell_in_block.y < gap || (cell_in_block.x < (gap+0.1) && cell_in_block.y < (gap+0.1))) {
continue;
}
// return to 3d - we have start and end points of the ray segment inside the column (t3s and t3e)
float t3s = t2s / t3_to_t2;
// move through z-cells of the current column in the ray direction (don't need much to check, two nearest cells are enough)
float pos_z = ro3.z + rd3.z * t3s;
float xycell_hash = hash(vec2(cell));
float z_shift = xycell_hash*11. - time * (0.5 + xycell_hash * 1.0 + xycell_hash * xycell_hash * 1.0 + pow(xycell_hash, 16.) * 3.0); //a different z shift for each xy column
float char_z_shift = floor(z_shift / STRIP_CHAR_HEIGHT);
z_shift = char_z_shift * STRIP_CHAR_HEIGHT;
int zcell = int(floor((pos_z - z_shift)/ZCELL_SIZE)); //z-cell index
for (int j=0; j<2; j++) { //2 iterations is enough if camera doesn't look much up or down
// calcaulate coordinates of the target (raindrop)
vec4 cell_hash = hash4(vec3(ivec3(cell, zcell)));
vec4 cell_hash2 = fract(cell_hash * vec4(127.1, 311.7, 271.9, 124.6));
float chars_count = cell_hash.w * (STRIP_CHARS_MAX - STRIP_CHARS_MIN) + STRIP_CHARS_MIN;
float target_length = chars_count * STRIP_CHAR_HEIGHT;
float target_rad = STRIP_CHAR_WIDTH / 2.;
float target_z = (float(zcell)*ZCELL_SIZE + z_shift) + cell_hash.z * (ZCELL_SIZE - target_length);
vec2 target = vec2(cell) * XYCELL_SIZE + target_rad + cell_hash.xy * (XYCELL_SIZE - target_rad*2.);
// We have a line segment (t0,t). Now calculate the distance between line segment and cell target (it's easier in 2d)
vec2 s = target - ro2;
float tmin = dot(s, rd2); //tmin - point with minimal distance to target
if (tmin >= t2s && tmin <= t2) {
float u = s.x * rd2.y - s.y * rd2.x; //horizontal coord in the matrix strip
if (abs(u) < target_rad) {
u = (u/target_rad + 1.) / 2.;
float z = ro3.z + rd3.z * tmin/t3_to_t2;
float v = (z - target_z) / target_length; //vertical coord in the matrix strip
if (v >= 0.0 && v < 1.0) {
float c = floor(v * chars_count); //symbol index relative to the start of the strip, with addition of char_z_shift it becomes an index relative to the whole cell
float q = fract(v * chars_count);
vec2 char_hash = hash2(vec2(c+char_z_shift, cell_hash2.x));
if (char_hash.x >= 0.1 || c == 0.) { //10% of missed symbols
float time_factor = floor(c == 0. ? time : //first symbol is changed fast
time*(1.0*cell_hash2.z + //strips are changed sometime with different speed
cell_hash2.w*cell_hash2.w*4.*pow(char_hash.y, 4.))); //some symbols in some strips are changed relatively often
float a = random_char(vec2(char_hash.x, time_factor), vec2(u,q), max(1., 3. - c/2.)*0.2); //alpha
a *= clamp((chars_count - 0.5 - c) / 2., 0., 1.); //tail fade
if (a > 0.) {
float attenuation = 1. + pow(0.06*tmin/t3_to_t2, 2.);
vec3 col = (c == 0. ? vec3(0.67, 1.0, 0.82) : vec3(0.25, 0.80, 0.40)) / attenuation;
float a1 = result.a;
result.a = a1 + (1. - a1) * a;
result.xyz = (result.xyz * a1 + col * (1. - a1) * a) / result.a;
if (result.a > 0.98)
return result.xyz;
}
}
}
}
}
// not found in this cell - go to next vertical cell
zcell += cell_shift.z;
}
// go to next horizontal cell
}
return result.xyz * result.a;
}
// ---- main, camera ----
vec2 rotate(vec2 v, float a) {
float s = sin(a);
float c = cos(a);
mat2 m = mat2(c, -s, s, c);
return m * v;
}
vec3 rotateX(vec3 v, float a) {
float s = sin(a);
float c = cos(a);
return mat3(1.,0.,0.,0.,c,-s,0.,s,c) * v;
}
vec3 rotateY(vec3 v, float a) {
float s = sin(a);
float c = cos(a);
return mat3(c,0.,-s,0.,1.,0.,s,0.,c) * v;
}
vec3 rotateZ(vec3 v, float a) {
float s = sin(a);
float c = cos(a);
return mat3(c,-s,0.,s,c,0.,0.,0.,1.) * v;
}
float smoothstep1(float x) {
return smoothstep(0., 1., x);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
if (STRIP_CHAR_WIDTH > XYCELL_SIZE || STRIP_CHAR_HEIGHT * STRIP_CHARS_MAX > ZCELL_SIZE) {
// error
fragColor = vec4(1., 0., 0., 1.);
return;
}
vec2 uv = fragCoord.xy / iResolution.xy;
float time = mod(iTime, 300) * SPEED; //reset time every 5 minutes, as large values lead to the same (and eventually no) rune(s)
const float turn_rad = 0.25 / BLOCKS_BEFORE_TURN; //0 .. 0.5
const float turn_abs_time = (PI/2.*turn_rad) * 1.5; //multiplier different than 1 means a slow down on turns
const float turn_time = turn_abs_time / (1. - 2.*turn_rad + turn_abs_time); //0..1, but should be <= 0.5
float level1_size = float(BLOCK_SIZE) * BLOCKS_BEFORE_TURN * XYCELL_SIZE;
float level2_size = 4. * level1_size;
float gap_size = float(BLOCK_GAP) * XYCELL_SIZE;
vec3 ro = vec3(gap_size/2., gap_size/2., 0.);
vec3 rd = vec3(uv.x, 2.0, uv.y);
float tq = fract(time / (level2_size*4.) * WALK_SPEED); //the whole cycle time counter
float t8 = fract(tq*4.); //time counter while walking on one of the four big sides
float t1 = fract(t8*8.); //time counter while walking on one of the eight sides of the big side
vec2 prev;
vec2 dir;
if (tq < 0.25) {
prev = vec2(0.,0.);
dir = vec2(0.,1.);
} else if (tq < 0.5) {
prev = vec2(0.,1.);
dir = vec2(1.,0.);
} else if (tq < 0.75) {
prev = vec2(1.,1.);
dir = vec2(0.,-1.);
} else {
prev = vec2(1.,0.);
dir = vec2(-1.,0.);
}
float angle = floor(tq * 4.); //0..4 wich means 0..2*PI
prev *= 4.;
const float first_turn_look_angle = 0.4;
const float second_turn_drift_angle = 0.5;
const float fifth_turn_drift_angle = 0.25;
vec2 turn;
float turn_sign = 0.;
vec2 dirL = rotate(dir, -PI/2.);
vec2 dirR = -dirL;
float up_down = 0.;
float rotate_on_turns = 1.;
float roll_on_turns = 1.;
float add_angel = 0.;
if (t8 < 0.125) {
turn = dirL;
//dir = dir;
turn_sign = -1.;
angle -= first_turn_look_angle * (max(0., t1 - (1. - turn_time*2.)) / turn_time - max(0., t1 - (1. - turn_time)) / turn_time * 2.5);
roll_on_turns = 0.;
} else if (t8 < 0.250) {
prev += dir;
turn = dir;
dir = dirL;
angle -= 1.;
turn_sign = 1.;
add_angel += first_turn_look_angle*0.5 + (-first_turn_look_angle*0.5+1.0+second_turn_drift_angle)*t1;
rotate_on_turns = 0.;
roll_on_turns = 0.;
} else if (t8 < 0.375) {
prev += dir + dirL;
turn = dirR;
//dir = dir;
turn_sign = 1.;
add_angel += second_turn_drift_angle*sqrt(1.-t1);
//roll_on_turns = 0.;
} else if (t8 < 0.5) {
prev += dir + dir + dirL;
turn = dirR;
dir = dirR;
angle += 1.;
turn_sign = 0.;
up_down = sin(t1*PI) * 0.37;
} else if (t8 < 0.625) {
prev += dir + dir;
turn = dir;
dir = dirR;
angle += 1.;
turn_sign = -1.;
up_down = sin(-min(1., t1/(1.-turn_time))*PI) * 0.37;
} else if (t8 < 0.750) {
prev += dir + dir + dirR;
turn = dirL;
//dir = dir;
turn_sign = -1.;
add_angel -= (fifth_turn_drift_angle + 1.) * smoothstep1(t1);
rotate_on_turns = 0.;
roll_on_turns = 0.;
} else if (t8 < 0.875) {
prev += dir + dir + dir + dirR;
turn = dir;
dir = dirL;
angle -= 1.;
turn_sign = 1.;
add_angel -= fifth_turn_drift_angle - smoothstep1(t1) * (fifth_turn_drift_angle * 2. + 1.);
rotate_on_turns = 0.;
roll_on_turns = 0.;
} else {
prev += dir + dir + dir;
turn = dirR;
//dir = dir;
turn_sign = 1.;
angle += fifth_turn_drift_angle * (1.5*min(1., (1.-t1)/turn_time) - 0.5*smoothstep1(1. - min(1.,t1/(1.-turn_time))));
}
if (iMouse.x > 10. || iMouse.y > 10.) {
vec2 mouse = iMouse.xy / iResolution.xy * 2. - 1.;
up_down = -0.7 * mouse.y;
angle += mouse.x;
rotate_on_turns = 1.;
roll_on_turns = 0.;
} else {
angle += add_angel;
}
rd = rotateX(rd, up_down);
vec2 p;
if (turn_sign == 0.) {
// move forward
p = prev + dir * (turn_rad + 1. * t1);
}
else if (t1 > (1. - turn_time)) {
// turn
float tr = (t1 - (1. - turn_time)) / turn_time;
vec2 c = prev + dir * (1. - turn_rad) + turn * turn_rad;
p = c + turn_rad * rotate(dir, (tr - 1.) * turn_sign * PI/2.);
angle += tr * turn_sign * rotate_on_turns;
rd = rotateY(rd, sin(tr*turn_sign*PI) * 0.2 * roll_on_turns); //roll
} else {
// move forward
t1 /= (1. - turn_time);
p = prev + dir * (turn_rad + (1. - turn_rad*2.) * t1);
}
rd = rotateZ(rd, angle * PI/2.);
ro.xy += level1_size * p;
rd = normalize(rd);
ro += rd * 0.2;
// vec3 col = rain(ro, rd, time);
vec3 col = rain(ro, rd, time) * 0.25;
// Sample the terminal screen texture including alpha channel
vec4 terminalColor = texture(iChannel0, uv);
// Combine the matrix effect with the terminal color
// vec3 blendedColor = terminalColor.rgb + col;
// Make a mask that is 1.0 where the terminal content is not black
float mask = 1.2 - step(0.5, dot(terminalColor.rgb, vec3(1.0)));
vec3 blendedColor = mix(terminalColor.rgb * 1.2, col, mask);
fragColor = vec4(blendedColor, terminalColor.a);
}
+52
View File
@@ -0,0 +1,52 @@
// Copyright (c) 2013 Andrew Baldwin (twitter: baldand, www: http://thndl.com)
// License = Attribution-NonCommercial-ShareAlike (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_US)
// "Just snow"
// Simple (but not cheap) snow made from multiple parallax layers with randomly positioned
// flakes and directions. Also includes a DoF effect. Pan around with mouse.
#define LIGHT_SNOW // Comment this out for a blizzard
#ifdef LIGHT_SNOW
#define LAYERS 50
#define DEPTH .5
#define WIDTH .3
#define SPEED .6
#else // BLIZZARD
#define LAYERS 200
#define DEPTH .1
#define WIDTH .8
#define SPEED 1.5
#endif
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
const mat3 p = mat3(13.323122,23.5112,21.71123,21.1212,28.7312,11.9312,21.8112,14.7212,61.3934);
vec2 uv = fragCoord.xy / iResolution.xy;
vec3 acc = vec3(0.0);
float dof = 5.0 * sin(iTime * 0.1);
for (int i = 0; i < LAYERS; i++) {
float fi = float(i);
vec2 q =-uv*(1.0 + fi * DEPTH);
q += vec2(q.y * (WIDTH * mod(fi * 7.238917, 1.0) - WIDTH * 0.5), SPEED * iTime / (1.0 + fi * DEPTH * 0.03));
vec3 n = vec3(floor(q), 31.189 + fi);
vec3 m = floor(n) * 0.00001 + fract(n);
vec3 mp = (31415.9 + m) / fract(p * m);
vec3 r = fract(mp);
vec2 s = abs(mod(q, 1.0) - 0.5 + 0.9 * r.xy - 0.45);
s += 0.01 * abs(2.0 * fract(10.0 * q.yx) - 1.0);
float d = 0.6 * max(s.x - s.y, s.x + s.y) + max(s.x, s.y) - 0.01;
float edge = 0.005 + 0.05 * min(0.5 * abs(fi - 5.0 - dof), 1.0);
acc += vec3(smoothstep(edge, -edge, d) * (r.x / (1.0 + 0.02 * fi * DEPTH)));
}
// Sample the terminal screen texture including alpha channel
vec4 terminalColor = texture(iChannel0, uv);
// Combine the snow effect with the terminal color
vec3 blendedColor = terminalColor.rgb + acc;
// Use the terminal's original alpha
fragColor = vec4(blendedColor, terminalColor.a);
}
@@ -0,0 +1,40 @@
// based on the following Shader Toy entry
//
// [SH17A] Matrix rain. Created by Reinder Nijhoff 2017
// Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
// @reindernijhoff
//
// https://www.shadertoy.com/view/ldjBW1
//
#define SPEED_MULTIPLIER 1.
#define GREEN_ALPHA .33
#define BLACK_BLEND_THRESHOLD .4
#define R fract(1e2 * sin(p.x * 8. + p.y))
void mainImage(out vec4 fragColor, vec2 fragCoord) {
vec3 v = vec3(fragCoord, 1) / iResolution - .5;
// vec3 s = .5 / abs(v);
// scale?
vec3 s = .9 / abs(v);
s.z = min(s.y, s.x);
vec3 i = ceil( 8e2 * s.z * ( s.y < s.x ? v.xzz : v.zyz ) ) * .1;
vec3 j = fract(i);
i -= j;
vec3 p = vec3(9, int(iTime * SPEED_MULTIPLIER * (9. + 8. * sin(i).x)), 0) + i;
vec3 col = fragColor.rgb;
col.g = R / s.z;
p *= j;
col *= (R >.5 && j.x < .6 && j.y < .8) ? GREEN_ALPHA : 0.;
// Sample the terminal screen texture including alpha channel
vec2 uv = fragCoord.xy / iResolution.xy;
vec4 terminalColor = texture(iChannel0, uv);
float alpha = step(length(terminalColor.rgb), BLACK_BLEND_THRESHOLD);
vec3 blendedColor = mix(terminalColor.rgb * 1.2, col, alpha);
fragColor = vec4(blendedColor, terminalColor.a);
}
+119
View File
@@ -0,0 +1,119 @@
vec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
vec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
vec4 permute(vec4 x) { return mod289(((x * 34.0) + 10.0) * x); }
vec4 taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }
float snoise(vec3 v) {
const vec2 C = vec2(1.0 / 6.0, 1.0 / 3.0);
const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
// First corner
vec3 i = floor(v + dot(v, C.yyy));
vec3 x0 = v - i + dot(i, C.xxx);
// Other corners
vec3 g = step(x0.yzx, x0.xyz);
vec3 l = 1.0 - g;
vec3 i1 = min(g.xyz, l.zxy);
vec3 i2 = max(g.xyz, l.zxy);
// x0 = x0 - 0.0 + 0.0 * C.xxx;
// x1 = x0 - i1 + 1.0 * C.xxx;
// x2 = x0 - i2 + 2.0 * C.xxx;
// x3 = x0 - 1.0 + 3.0 * C.xxx;
vec3 x1 = x0 - i1 + C.xxx;
vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y
vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y
// Permutations
i = mod289(i);
vec4 p = permute(permute(permute(i.z + vec4(0.0, i1.z, i2.z, 1.0)) + i.y +
vec4(0.0, i1.y, i2.y, 1.0)) +
i.x + vec4(0.0, i1.x, i2.x, 1.0));
// Gradients: 7x7 points over a square, mapped onto an octahedron.
// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
float n_ = 0.142857142857; // 1.0/7.0
vec3 ns = n_ * D.wyz - D.xzx;
vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)
vec4 x_ = floor(j * ns.z);
vec4 y_ = floor(j - 7.0 * x_); // mod(j,N)
vec4 x = x_ * ns.x + ns.yyyy;
vec4 y = y_ * ns.x + ns.yyyy;
vec4 h = 1.0 - abs(x) - abs(y);
vec4 b0 = vec4(x.xy, y.xy);
vec4 b1 = vec4(x.zw, y.zw);
// vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;
// vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;
vec4 s0 = floor(b0) * 2.0 + 1.0;
vec4 s1 = floor(b1) * 2.0 + 1.0;
vec4 sh = -step(h, vec4(0.0));
vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy;
vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww;
vec3 p0 = vec3(a0.xy, h.x);
vec3 p1 = vec3(a0.zw, h.y);
vec3 p2 = vec3(a1.xy, h.z);
vec3 p3 = vec3(a1.zw, h.w);
// Normalise gradients
vec4 norm =
taylorInvSqrt(vec4(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));
p0 *= norm.x;
p1 *= norm.y;
p2 *= norm.z;
p3 *= norm.w;
// Mix final noise value
vec4 m =
max(0.5 - vec4(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), 0.0);
m = m * m;
return 105.0 *
dot(m * m, vec4(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));
}
float noise2D(vec2 uv) {
uvec2 pos = uvec2(floor(uv * 1000.));
return float((pos.x * 68657387u ^ pos.y * 361524851u + pos.x) % 890129u) *
(1.0 / 890128.0);
}
float roundRectSDF(vec2 center, vec2 size, float radius) {
return length(max(abs(center) - size + radius, 0.)) - radius;
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = fragCoord / iResolution.xy, sd = vec2(2.), sdh = vec2(1.);
vec4 ghosttyCol = texture(iChannel0, uv);
float ratio = iResolution.y / iResolution.x,
fw = max(fwidth(uv.x), fwidth(uv.y));
vec2 puv = floor(uv * vec2(60., 60. * ratio)) / 60.;
puv +=
(smoothstep(0., 0.7, noise2D(puv)) - 0.5) * 0.05 - vec2(0., iTime * 0.08);
uv = fract(vec2(uv.x, uv.y * ratio) * 10.);
float d = roundRectSDF((sd + 0.01) * (uv - .5), sdh, 0.075),
d2 = roundRectSDF((sd + 0.065) * (fract(uv * 6.) - .5), sdh, 0.2),
noiseTime = iTime * 0.03, noise = snoise(vec3(puv, noiseTime));
noise += snoise(vec3(puv * 1.1, noiseTime + 0.5)) + .1;
noise += snoise(vec3(puv * 2., noiseTime + 0.8));
noise = pow(noise, 2.);
vec3 col1 = vec3(0.), col2 = vec3(0.), col3 = vec3(0.07898),
col4 = vec3(0.089184),
fcol = mix(mix(mix(col1, col3, smoothstep(0.0, 0.3, noise)), col2,
smoothstep(0.0, 0.5, noise)),
col4, smoothstep(0.0, 1.0, noise));
fragColor = vec4(
ghosttyCol.rgb +
mix(col4, fcol, smoothstep(fw, -fw, d) * smoothstep(fw, -fw, d2)),
ghosttyCol.a);
}
+8
View File
@@ -0,0 +1,8 @@
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord/iResolution.xy;
vec4 color = texture(iChannel0, uv);
fragColor = vec4(1.0 - color.x, 1.0 - color.y, 1.0 - color.z, color.w);
}
@@ -0,0 +1,34 @@
// Original shader collected from: https://www.shadertoy.com/view/WsVSzV
// Licensed under Shadertoy's default since the original creator didn't provide any license. (CC BY NC SA 3.0)
// Slight modifications were made to give a green-ish effect.
float warp = 0.25; // simulate curvature of CRT monitor
float scan = 0.50; // simulate darkness between scanlines
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
// squared distance from center
vec2 uv = fragCoord / iResolution.xy;
vec2 dc = abs(0.5 - uv);
dc *= dc;
// warp the fragment coordinates
uv.x -= 0.5; uv.x *= 1.0 + (dc.y * (0.3 * warp)); uv.x += 0.5;
uv.y -= 0.5; uv.y *= 1.0 + (dc.x * (0.4 * warp)); uv.y += 0.5;
// sample inside boundaries, otherwise set to black
if (uv.y > 1.0 || uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0)
fragColor = vec4(0.0, 0.0, 0.0, 1.0);
else
{
// determine if we are drawing in a scanline
float apply = abs(sin(fragCoord.y) * 0.5 * scan);
// sample the texture and apply a teal tint
vec3 color = texture(iChannel0, uv).rgb;
vec3 tealTint = vec3(0.0, 0.8, 0.6); // teal color (slightly more green than blue)
// mix the sampled color with the teal tint based on scanline intensity
fragColor = vec4(mix(color * tealTint, vec3(0.0), apply), 1.0);
}
}
@@ -0,0 +1,138 @@
// CONFIGURATION
const float DURATION = 0.15; // How long the ripple animates (seconds)
const float MAX_SIZE = 0.05; // Max radius in normalized coords (0.5 = 1/4 screen height)
const float RING_THICKNESS = 0.02; // Ring width in normalized coords
const float CURSOR_WIDTH_CHANGE_THRESHOLD = 0.5; // Triggers ripple if cursor width changes by this fraction
vec4 COLOR = vec4(0.35, 0.36, 0.44, 1.0); // change to iCurrentCursorColor for your cursor's color
const float BLUR = 1.0; // Blur level in pixels
const float ANIMATION_START_OFFSET = 0.0; // Start the ripple slightly progressed (0.0 - 1.0)
// Easing functions
float easeOutQuad(float t) {
return 1.0 - (1.0 - t) * (1.0 - t);
}
float easeInOutQuad(float t) {
return t < 0.5 ? 2.0 * t * t : 1.0 - pow(-2.0 * t + 2.0, 2.0) / 2.0;
}
float easeOutCubic(float t) {
return 1.0 - pow(1.0 - t, 3.0);
}
float easeOutQuart(float t) {
return 1.0 - pow(1.0 - t, 4.0);
}
float easeOutQuint(float t) {
return 1.0 - pow(1.0 - t, 5.0);
}
float easeOutExpo(float t) {
return t == 1.0 ? 1.0 : 1.0 - pow(2.0, -10.0 * t);
}
float easeOutCirc(float t) {
return sqrt(1.0 - pow(t - 1.0, 2.0));
}
float easeOutSine(float t) {
return sin((t * 3.1415916) / 2.0);
}
float easeOutElastic(float t) {
const float c4 = (2.0 * 3.1415916) / 3.0;
return t == 0.0 ? 0.0 : t == 1.0 ? 1.0 : pow(2.0, -10.0 * t) * sin((t * 10.0 - 0.75) * c4) + 1.0;
}
float easeOutBounce(float t) {
const float n1 = 7.5625;
const float d1 = 2.75;
if (t < 1.0 / d1) {
return n1 * t * t;
} else if (t < 2.0 / d1) {
return n1 * (t -= 1.5 / d1) * t + 0.75;
} else if (t < 2.5 / d1) {
return n1 * (t -= 2.25 / d1) * t + 0.9375;
} else {
return n1 * (t -= 2.625 / d1) * t + 0.984375;
}
}
float easeOutBack(float t) {
const float c1 = 1.70158;
const float c3 = c1 + 1.0;
return 1.0 + c3 * pow(t - 1.0, 3.0) + c1 * pow(t - 1.0, 2.0);
}
// Pulse fade functions
float easeOutPulse(float t) {
return t * (2.0 - t);
}
float exponentialDecayPulse(float t) {
return exp(-3.0 * t) * sin(t * 3.1415916);
}
vec2 normalize(vec2 value, float isPosition) {
return (value * 2.0 - (iResolution.xy * isPosition)) / iResolution.y;
}
float getSdfRectangle(in vec2 p, in vec2 xy, in vec2 b){
vec2 d = abs(p - xy) - b;
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
}
void mainImage(out vec4 fragColor, in vec2 fragCoord){
#if !defined(WEB)
fragColor = texture(iChannel0, fragCoord.xy / iResolution.xy);
#endif
// Normalization & setup (-1 to 1 coords)
vec2 vu = normalize(fragCoord, 1.);
vec2 offsetFactor = vec2(-.5, 0.5);
vec4 currentCursor = vec4(normalize(iCurrentCursor.xy, 1.), normalize(iCurrentCursor.zw, 0.));
vec4 previousCursor = vec4(normalize(iPreviousCursor.xy, 1.), normalize(iPreviousCursor.zw, 0.));
vec2 centerCC = currentCursor.xy - (currentCursor.zw * offsetFactor);
float cellWidth = max(currentCursor.z, previousCursor.z); // width of the 'block' cursor
// check for significant width change
float widthChange = abs(currentCursor.z - previousCursor.z);
float widthThresholdNorm = cellWidth * CURSOR_WIDTH_CHANGE_THRESHOLD;
float isModeChange = step(widthThresholdNorm, widthChange);
// ANIMATION
float rippleProgress = (iTime - iTimeCursorChange) / DURATION + ANIMATION_START_OFFSET;
// don't clamp yet; we need to know if it's > 1.0 (finished)
float isAnimating = 1.0 - step(1.0, rippleProgress); // progress < 1.0 ? 1.0: 0.0
if (isModeChange > 0.0 && isAnimating > 0.0) {
// Apply easing to progress
// float easedProgress = rippleProgress;
// float easedProgress = easeOutQuad(rippleProgress);
// float easedProgress = easeInOutQuad(rippleProgress);
// float easedProgress = easeOutCubic(rippleProgress);
// float easedProgress = easeOutQuart(rippleProgress);
// float easedProgress = easeOutQuint(rippleProgress);
// float easedProgress = easeOutExpo(rippleProgress);
float easedProgress = easeOutCirc(rippleProgress);
// float easedProgress = easeOutSine(rippleProgress);
// float easedProgress = easeOutBack(rippleProgress);
// RIPPLE CALCULATION
float rippleExpansion = easedProgress * MAX_SIZE;
// float fade = 1.0; // no fade
// float fade = 1.0 - easedProgress; // linear fade
float fade = 1.0 - easeOutPulse(rippleProgress);
// float fade = 1.0 - exponentialDecayPulse(rippleProgress);
// Calculate distance from frag to cursor center
// float dist = distance(vu, centerCC);
// float sdfRing = abs(dist - rippleExpansion) - RING_THICKNESS * 0.5;
vec2 halfSizeCC = vec2(currentCursor.z, currentCursor.w) * 0.5 + vec2(rippleExpansion);
float sdfRectRing = abs(getSdfRectangle(vu, centerCC, halfSizeCC)) - RING_THICKNESS * 0.5;
// Antialias (1-pixel width in normalized coords)
float antiAliasSize = normalize(vec2(BLUR, BLUR), 0.0).x;
float ripple = (1.0 - smoothstep(-antiAliasSize, antiAliasSize, sdfRectRing)) * fade;
// Apply ripple effect
fragColor = mix(fragColor, COLOR, ripple * COLOR.a);
}
// else: do nothing, keep original fragColor
}
@@ -0,0 +1,28 @@
// Based on https://www.shadertoy.com/view/ms3cWn
float map(float value, float min1, float max1, float min2, float max2) {
return min2 + (value - min1) * (max2 - min2) / (max1 - min1);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord / iResolution.xy;
float d = length(uv - 0.5) * 2.0;
float t = d * d * 25.0 - iTime * 2.0;
vec3 col = 0.5 + 0.5 * cos(t / 20.0 + uv.xyx + vec3(0.0,2.0,4.0));
vec2 center = iResolution.xy * 0.5;
float distCentre = distance(fragCoord.xy, center);
float dCSin = sin(distCentre * 0.05);
vec2 anim = vec2(map(sin(iTime),-1.0,1.0,0.0,iResolution.x),map(sin(iTime*1.25),-1.0,1.0,0.0,iResolution.y));
float distMouse = distance(fragCoord.xy, anim);
float dMSin = sin(distMouse * 0.05);
float greycol = (((dMSin * dCSin) + 1.0) * 0.5);
greycol = greycol * map(d, 0.0, 1.4142135623730951, 0.5, 0.0);
vec4 terminalColor = texture(iChannel0, uv);
vec3 blendedColor = mix(terminalColor.rgb, vec3(greycol * col.x, greycol * col.y, greycol * col.z), 0.25);
fragColor = vec4(blendedColor, terminalColor.a);
}
@@ -0,0 +1,193 @@
// Settings for detection
#define TARGET_COLOR vec3(0.0, 0.0, 0.0) // RGB target pixels to transform
#define REPLACE_COLOR vec3(0.0, 0.0, 0.0) // Color to replace target pixels
#define COLOR_TOLERANCE 0.001 // Color matching tolerance
// Smoke effect settings
#define SMOKE_COLOR vec3(1., 1., 1.0) // Base color of smoke
#define SMOKE_RADIUS 0.011 // How far the smoke spreads
#define SMOKE_SPEED 0.5 // Speed of smoke movement
#define SMOKE_SCALE 25.0 // Scale of smoke detail
#define SMOKE_INTENSITY 0.2 // Intensity of the smoke effect
#define SMOKE_RISE_HEIGHT 0.14 // How high the smoke rises
#define ALPHA_MAX 0.5 // Maximum opacity for smoke
#define VERTICAL_BIAS 1.0
// Ghost face settings
#define FACE_COUNT 1 // Number of ghost faces
#define FACE_SCALE vec2(0.03, 0.05) // Size of faces, can be wider/elongated
#define FACE_DURATION 1.2 // How long faces last, can be wider/elongated
#define FACE_TRANSITION 1.5 // Face fade in/out duration
#define FACE_COLOR vec3(0.0, 0.0, 0.0)
#define GHOST_BG_COLOR vec3(1.0, 1.0, 1.0)
#define GHOST_BG_SCALE vec2(0.03, 0.06)
float random(vec2 st) {
return fract(sin(dot(st.xy, vec2(12.9898,78.233))) * 43758.5453123);
}
float random1(float n) {
return fract(sin(n) * 43758.5453123);
}
vec2 random2(float n) {
return vec2(
random1(n),
random1(n + 1234.5678)
);
}
float noise(vec2 st) {
vec2 i = floor(st);
vec2 f = fract(st);
float a = random(i);
float b = random(i + vec2(1.0, 0.0));
float c = random(i + vec2(0.0, 1.0));
float d = random(i + vec2(1.0, 1.0));
vec2 u = f * f * (3.0 - 2.0 * f);
return mix(a, b, u.x) + (c - a)* u.y * (1.0 - u.x) + (d - b) * u.x * u.y;
}
// Modified elongated ellipse for more cartoon-like shapes
float cartoonEllipse(vec2 uv, vec2 center, vec2 scale) {
vec2 d = (uv - center) / scale;
float len = length(d);
// Add cartoon-like falloff
return smoothstep(1.0, 0.8, len);
}
// Function to create ghost background shape
float ghostBackground(vec2 uv, vec2 center) {
vec2 d = (uv - center) / GHOST_BG_SCALE;
float baseShape = length(d * vec2(1.0, 0.8)); // Slightly oval
// Add wavy bottom
float wave = sin(d.x * 6.28 + iTime) * 0.2;
float bottomWave = smoothstep(0.0, -0.5, d.y + wave);
return smoothstep(1.0, 0.8, baseShape) + bottomWave;
}
float ghostFace(vec2 uv, vec2 center, float time, float seed) {
vec2 faceUV = (uv - center) / FACE_SCALE;
float eyeSize = 0.25 + random1(seed) * 0.05;
float eyeSpacing = 0.35;
vec2 leftEyePos = vec2(-eyeSpacing, 0.2);
vec2 rightEyePos = vec2(eyeSpacing, 0.2);
float leftEye = cartoonEllipse(faceUV, leftEyePos, vec2(eyeSize));
float rightEye = cartoonEllipse(faceUV, rightEyePos, vec2(eyeSize));
// Add simple eye highlights
float leftHighlight = cartoonEllipse(faceUV, leftEyePos + vec2(0.1, 0.1), vec2(eyeSize * 0.3));
float rightHighlight = cartoonEllipse(faceUV, rightEyePos + vec2(0.1, 0.1), vec2(eyeSize * 0.3));
vec2 mouthUV = faceUV - vec2(0.0, -0.9);
float mouthWidth = 0.5 + random1(seed + 3.0) * 0.1;
float mouthHeight = 0.8 + random1(seed + 7.0) * 0.1;
float mouth = cartoonEllipse(mouthUV, vec2(0.0), vec2(mouthWidth, mouthHeight));
// Combine features
float face = max(max(leftEye, rightEye), mouth);
face = max(face, max(leftHighlight, rightHighlight));
// Add border falloff
face *= smoothstep(1.2, 0.8, length(faceUV));
return face;
}
float calculateSmoke(vec2 uv, vec2 sourcePos) {
float verticalDisp = (uv.y - sourcePos.y) * VERTICAL_BIAS;
vec2 smokeUV = uv * SMOKE_SCALE;
smokeUV.y -= iTime * SMOKE_SPEED * (1.0 + verticalDisp);
smokeUV.x += sin(iTime * 0.5 + uv.y * 4.0) * 0.1;
float n = noise(smokeUV) * 0.5 + 0.5;
n += noise(smokeUV * 2.0 + iTime * 0.1) * 0.25;
float verticalFalloff = 1.0 - smoothstep(0.0, SMOKE_RISE_HEIGHT, verticalDisp);
return n * verticalFalloff;
}
float isTargetPixel(vec2 uv) {
vec4 color = texture(iChannel0, uv);
return float(all(lessThan(abs(color.rgb - TARGET_COLOR), vec3(COLOR_TOLERANCE))));
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = fragCoord/iResolution.xy;
vec4 originalColor = texture(iChannel0, uv);
// Calculate smoke effect
float smokeAccum = 0.0;
float targetInfluence = 0.0;
float stepSize = SMOKE_RADIUS / 4.0;
for (float x = -SMOKE_RADIUS; x <= SMOKE_RADIUS; x += stepSize) {
for (float y = -SMOKE_RADIUS; y <= 0.0; y += stepSize) {
vec2 offset = vec2(x, y);
vec2 sampleUV = uv + offset;
if (sampleUV.x >= 0.0 && sampleUV.x <= 1.0 &&
sampleUV.y >= 0.0 && sampleUV.y <= 1.0) {
float isTarget = isTargetPixel(sampleUV);
if (isTarget > 0.0) {
float dist = length(offset);
float falloff = 1.0 - smoothstep(0.0, SMOKE_RADIUS, dist);
float smoke = calculateSmoke(uv, sampleUV);
smokeAccum += smoke * falloff;
targetInfluence += falloff;
}
}
}
}
smokeAccum /= max(targetInfluence, 1.0);
targetInfluence = smoothstep(0.0, 1.0, targetInfluence);
float smokePresence = smokeAccum * targetInfluence;
// Calculate ghost faces with backgrounds
float faceAccum = 0.0;
float bgAccum = 0.0;
float timeBlock = floor(iTime / FACE_DURATION);
if (smokePresence > 0.2) {
for (int i = 0; i < FACE_COUNT; i++) {
vec2 facePos = random2(timeBlock + float(i) * 1234.5);
facePos = facePos * 0.8 + 0.1;
float faceTime = mod(iTime, FACE_DURATION);
float fadeFactor = smoothstep(0.0, FACE_TRANSITION, faceTime) *
(1.0 - smoothstep(FACE_DURATION - FACE_TRANSITION, FACE_DURATION, faceTime));
// Add ghost background
float ghostBg = ghostBackground(uv, facePos) * fadeFactor;
bgAccum = max(bgAccum, ghostBg);
// Add face features
float face = ghostFace(uv, facePos, iTime, timeBlock + float(i) * 100.0) * fadeFactor;
faceAccum = max(faceAccum, face);
}
bgAccum *= smoothstep(0.2, 0.4, smokePresence);
faceAccum *= smoothstep(0.2, 0.4, smokePresence);
}
// Combine all elements
bool isTarget = all(lessThan(abs(originalColor.rgb - TARGET_COLOR), vec3(COLOR_TOLERANCE)));
vec3 baseColor = isTarget ? REPLACE_COLOR : originalColor.rgb;
// Layer the effects: base -> smoke -> ghost background -> face features
vec3 smokeEffect = mix(baseColor, SMOKE_COLOR, smokeAccum * SMOKE_INTENSITY * targetInfluence * (1.0 - faceAccum));
vec3 withBackground = mix(smokeEffect, GHOST_BG_COLOR, bgAccum * 0.7);
vec3 finalColor = mix(withBackground, FACE_COLOR, faceAccum);
float alpha = mix(originalColor.a, ALPHA_MAX, max(smokePresence, max(bgAccum, faceAccum) * smokePresence));
fragColor = vec4(finalColor, alpha);
}
@@ -0,0 +1,242 @@
// adapted by Alex Sherwin for Ghstty from https://www.shadertoy.com/view/wl2Gzc
//Shader License: CC BY 3.0
//Author: Jan Mróz (jaszunio15)
#define SMOKE_INTENSITY_MULTIPLIER 0.9
#define PARTICLES_ALPHA_MOD 0.9
#define SMOKE_ALPHA_MOD 0.5
#define LAYERS_COUNT 8
#define BLACK_BLEND_THRESHOLD .4
#define VEC3_1 (vec3(1.0))
#define PI 3.1415927
#define TWO_PI 6.283185
#define ANIMATION_SPEED 1.0
#define MOVEMENT_SPEED .33
#define MOVEMENT_DIRECTION vec2(0.7, 1.0)
#define PARTICLE_SIZE 0.0025
#define PARTICLE_SCALE (vec2(0.5, 1.6))
#define PARTICLE_SCALE_VAR (vec2(0.25, 0.2))
#define PARTICLE_BLOOM_SCALE (vec2(0.5, 0.8))
#define PARTICLE_BLOOM_SCALE_VAR (vec2(0.3, 0.1))
#define SPARK_COLOR vec3(1.0, 0.4, 0.05) * 1.5
#define BLOOM_COLOR vec3(1.0, 0.4, 0.05) * 0.8
#define SMOKE_COLOR vec3(1.0, 0.43, 0.1) * 0.8
#define SIZE_MOD 1.05
float hash1_2(in vec2 x)
{
return fract(sin(dot(x, vec2(52.127, 61.2871))) * 521.582);
}
vec2 hash2_2(in vec2 x)
{
return fract(sin(x * mat2x2(20.52, 24.1994, 70.291, 80.171)) * 492.194);
}
//Simple interpolated noise
vec2 noise2_2(vec2 uv)
{
//vec2 f = fract(uv);
vec2 f = smoothstep(0.0, 1.0, fract(uv));
vec2 uv00 = floor(uv);
vec2 uv01 = uv00 + vec2(0,1);
vec2 uv10 = uv00 + vec2(1,0);
vec2 uv11 = uv00 + 1.0;
vec2 v00 = hash2_2(uv00);
vec2 v01 = hash2_2(uv01);
vec2 v10 = hash2_2(uv10);
vec2 v11 = hash2_2(uv11);
vec2 v0 = mix(v00, v01, f.y);
vec2 v1 = mix(v10, v11, f.y);
vec2 v = mix(v0, v1, f.x);
return v;
}
//Simple interpolated noise
float noise1_2(in vec2 uv)
{
// vec2 f = fract(uv);
vec2 f = smoothstep(0.0, 1.0, fract(uv));
vec2 uv00 = floor(uv);
vec2 uv01 = uv00 + vec2(0,1);
vec2 uv10 = uv00 + vec2(1,0);
vec2 uv11 = uv00 + 1.0;
float v00 = hash1_2(uv00);
float v01 = hash1_2(uv01);
float v10 = hash1_2(uv10);
float v11 = hash1_2(uv11);
float v0 = mix(v00, v01, f.y);
float v1 = mix(v10, v11, f.y);
float v = mix(v0, v1, f.x);
return v;
}
float layeredNoise1_2(in vec2 uv, in float sizeMod, in float alphaMod, in int layers, in float animation)
{
float noise = 0.0;
float alpha = 1.0;
float size = 1.0;
vec2 offset;
for (int i = 0; i < layers; i++)
{
offset += hash2_2(vec2(alpha, size)) * 10.0;
//Adding noise with movement
noise += noise1_2(uv * size + iTime * animation * 8.0 * MOVEMENT_DIRECTION * MOVEMENT_SPEED + offset) * alpha;
alpha *= alphaMod;
size *= sizeMod;
}
noise *= (1.0 - alphaMod)/(1.0 - pow(alphaMod, float(layers)));
return noise;
}
//Rotates point around 0,0
vec2 rotate(in vec2 point, in float deg)
{
float s = sin(deg);
float c = cos(deg);
return mat2x2(s, c, -c, s) * point;
}
//Cell center from point on the grid
vec2 voronoiPointFromRoot(in vec2 root, in float deg)
{
vec2 point = hash2_2(root) - 0.5;
float s = sin(deg);
float c = cos(deg);
point = mat2x2(s, c, -c, s) * point * 0.66;
point += root + 0.5;
return point;
}
//Voronoi cell point rotation degrees
float degFromRootUV(in vec2 uv)
{
return iTime * ANIMATION_SPEED * (hash1_2(uv) - 0.5) * 2.0;
}
vec2 randomAround2_2(in vec2 point, in vec2 range, in vec2 uv)
{
return point + (hash2_2(uv) - 0.5) * range;
}
vec3 fireParticles(in vec2 uv, in vec2 originalUV)
{
vec3 particles = vec3(0.0);
vec2 rootUV = floor(uv);
float deg = degFromRootUV(rootUV);
vec2 pointUV = voronoiPointFromRoot(rootUV, deg);
float dist = 2.0;
float distBloom = 0.0;
//UV manipulation for the faster particle movement
vec2 tempUV = uv + (noise2_2(uv * 2.0) - 0.5) * 0.1;
tempUV += -(noise2_2(uv * 3.0 + iTime) - 0.5) * 0.07;
//Sparks sdf
dist = length(rotate(tempUV - pointUV, 0.7) * randomAround2_2(PARTICLE_SCALE, PARTICLE_SCALE_VAR, rootUV));
//Bloom sdf
distBloom = length(rotate(tempUV - pointUV, 0.7) * randomAround2_2(PARTICLE_BLOOM_SCALE, PARTICLE_BLOOM_SCALE_VAR, rootUV));
//Add sparks
particles += (1.0 - smoothstep(PARTICLE_SIZE * 0.6, PARTICLE_SIZE * 3.0, dist)) * SPARK_COLOR;
//Add bloom
particles += pow((1.0 - smoothstep(0.0, PARTICLE_SIZE * 6.0, distBloom)) * 1.0, 3.0) * BLOOM_COLOR;
//Upper disappear curve randomization
float border = (hash1_2(rootUV) - 0.5) * 2.0;
float disappear = 1.0 - smoothstep(border, border + 0.5, originalUV.y);
//Lower appear curve randomization
border = (hash1_2(rootUV + 0.214) - 1.8) * 0.7;
float appear = smoothstep(border, border + 0.4, originalUV.y);
return particles * disappear * appear;
}
//Layering particles to imitate 3D view
vec3 layeredParticles(in vec2 uv, in float sizeMod, in float alphaMod, in int layers, in float smoke)
{
vec3 particles = vec3(0);
float size = 1.0;
// float alpha = 1.0;
float alpha = 1.0;
vec2 offset = vec2(0.0);
vec2 noiseOffset;
vec2 bokehUV;
for (int i = 0; i < layers; i++)
{
//Particle noise movement
noiseOffset = (noise2_2(uv * size * 2.0 + 0.5) - 0.5) * 0.15;
//UV with applied movement
bokehUV = (uv * size + iTime * MOVEMENT_DIRECTION * MOVEMENT_SPEED) + offset + noiseOffset;
//Adding particles if there is more smoke, remove smaller particles
particles += fireParticles(bokehUV, uv) * alpha * (1.0 - smoothstep(0.0, 1.0, smoke) * (float(i) / float(layers)));
//Moving uv origin to avoid generating the same particles
offset += hash2_2(vec2(alpha, alpha)) * 10.0;
alpha *= alphaMod;
size *= sizeMod;
}
return particles;
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = (2.0 * fragCoord - iResolution.xy) / iResolution.x;
// float vignette = 1.1 - smoothstep(0.4, 1.4, length(uv + vec2(0.0, 0.3)));
float vignette = 1.3 - smoothstep(0.4, 1.4, length(uv + vec2(0.0, 0.3)));
uv *= 2.5;
float smokeIntensity = layeredNoise1_2(uv * 10.0 + iTime * 4.0 * MOVEMENT_DIRECTION * MOVEMENT_SPEED, 1.7, 0.7, 6, 0.2);
smokeIntensity *= pow(smoothstep(-1.0, 1.6, uv.y), 2.0);
vec3 smoke = smokeIntensity * SMOKE_COLOR * vignette * SMOKE_INTENSITY_MULTIPLIER * SMOKE_ALPHA_MOD;
//Cutting holes in smoke
smoke *= pow(layeredNoise1_2(uv * 4.0 + iTime * 0.5 * MOVEMENT_DIRECTION * MOVEMENT_SPEED, 1.8, 0.5, 3, 0.2), 2.0) * 1.5;
vec3 particles = layeredParticles(uv, SIZE_MOD, PARTICLES_ALPHA_MOD, LAYERS_COUNT, smokeIntensity);
vec3 col = particles + smoke + SMOKE_COLOR * 0.02;
col *= vignette;
col = smoothstep(-0.08, 1.0, col);
vec2 termUV = fragCoord.xy / iResolution.xy;
vec4 terminalColor = texture(iChannel0, termUV);
float alpha = step(length(terminalColor.rgb), BLACK_BLEND_THRESHOLD);
vec3 blendedColor = mix(terminalColor.rgb, col, alpha);
fragColor = vec4(blendedColor, terminalColor.a);
}
+42
View File
@@ -0,0 +1,42 @@
// Created by Paul Robello
// Smooth oscillating function that varies over time
float smoothOscillation(float t, float frequency, float phase) {
return sin(t * frequency + phase);
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
// Resolution and UV coordinates
vec2 uv = fragCoord.xy / iResolution.xy;
// Used to fix distortion when calculating distance to circle center
vec2 ratio = vec2(iResolution.x / iResolution.y, 1.0);
// Get the texture from iChannel0
vec4 texColor = texture(iChannel0, uv);
// Spotlight center moving based on a smooth random pattern
float time = iTime * 1.0; // Control speed of motion
vec2 spotlightCenter = vec2(
0.5 + 0.4 * smoothOscillation(time, 1.0, 0.0), // Smooth X motion
0.5 + 0.4 * smoothOscillation(time, 1.3, 3.14159) // Smooth Y motion with different frequency and phase
);
// Distance from the spotlight center
float distanceToCenter = distance(uv * ratio, spotlightCenter);
// Spotlight intensity based on distance
float spotlightRadius = 0.25; // Spotlight radius
float softness = 20.0; // Spotlight edge softness. Higher values have sharper edge
float spotlightIntensity = smoothstep(spotlightRadius, spotlightRadius - (1.0 / softness), distanceToCenter);
// Ambient light level
float ambientLight = 0.5; // Controls the minimum brightness across the texture
// Combine the spotlight effect with the texture
vec3 spotlightEffect = texColor.rgb * mix(vec3(ambientLight), vec3(1.0), spotlightIntensity);
// Final color output
fragColor = vec4(spotlightEffect, texColor.a);
}
@@ -0,0 +1,158 @@
// transparent background
const bool transparent = false;
// terminal contents luminance threshold to be considered background (0.0 to 1.0)
const float threshold = 0.15;
// divisions of grid
const float repeats = 30.;
// number of layers
const float layers = 21.;
// star colours
const vec3 blue = vec3(51., 64., 195.) / 255.;
const vec3 cyan = vec3(117., 250., 254.) / 255.;
const vec3 white = vec3(255., 255., 255.) / 255.;
const vec3 yellow = vec3(251., 245., 44.) / 255.;
const vec3 red = vec3(247, 2., 20.) / 255.;
float luminance(vec3 color) {
return dot(color, vec3(0.2126, 0.7152, 0.0722));
}
// spectrum function
vec3 spectrum(vec2 pos) {
pos.x *= 4.;
vec3 outCol = vec3(0);
if (pos.x > 0.) {
outCol = mix(blue, cyan, fract(pos.x));
}
if (pos.x > 1.) {
outCol = mix(cyan, white, fract(pos.x));
}
if (pos.x > 2.) {
outCol = mix(white, yellow, fract(pos.x));
}
if (pos.x > 3.) {
outCol = mix(yellow, red, fract(pos.x));
}
return 1. - (pos.y * (1. - outCol));
}
float N21(vec2 p) {
p = fract(p * vec2(233.34, 851.73));
p += dot(p, p + 23.45);
return fract(p.x * p.y);
}
vec2 N22(vec2 p) {
float n = N21(p);
return vec2(n, N21(p + n));
}
mat2 scale(vec2 _scale) {
return mat2(_scale.x, 0.0,
0.0, _scale.y);
}
// 2D Noise based on Morgan McGuire
float noise(in vec2 st) {
vec2 i = floor(st);
vec2 f = fract(st);
// Four corners in 2D of a tile
float a = N21(i);
float b = N21(i + vec2(1.0, 0.0));
float c = N21(i + vec2(0.0, 1.0));
float d = N21(i + vec2(1.0, 1.0));
// Smooth Interpolation
vec2 u = f * f * (3.0 - 2.0 * f); // Cubic Hermite Curve
// Mix 4 corners percentages
return mix(a, b, u.x) +
(c - a) * u.y * (1.0 - u.x) +
(d - b) * u.x * u.y;
}
float perlin2(vec2 uv, int octaves, float pscale) {
float col = 1.;
float initScale = 4.;
for (int l; l < octaves; l++) {
float val = noise(uv * initScale);
if (col <= 0.01) {
col = 0.;
break;
}
val -= 0.01;
val *= 0.5;
col *= val;
initScale *= pscale;
}
return col;
}
vec3 stars(vec2 uv, float offset) {
float timeScale = -(iTime + offset) / layers;
float trans = fract(timeScale);
float newRnd = floor(timeScale);
vec3 col = vec3(0.);
// Translate uv then scale for center
uv -= vec2(0.5);
uv = scale(vec2(trans)) * uv;
uv += vec2(0.5);
// Create square aspect ratio
uv.x *= iResolution.x / iResolution.y;
// Create boxes
uv *= repeats;
// Get position
vec2 ipos = floor(uv);
// Return uv as 0 to 1
uv = fract(uv);
// Calculate random xy and size
vec2 rndXY = N22(newRnd + ipos * (offset + 1.)) * 0.9 + 0.05;
float rndSize = N21(ipos) * 100. + 200.;
vec2 j = (rndXY - uv) * rndSize;
float sparkle = 1. / dot(j, j);
// Set stars to be pure white
col += spectrum(fract(rndXY * newRnd * ipos)) * vec3(sparkle);
col *= smoothstep(1., 0.8, trans);
return col; // Return pure white stars only
}
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
// Normalized pixel coordinates (from 0 to 1)
vec2 uv = fragCoord / iResolution.xy;
vec3 col = vec3(0.);
for (float i = 0.; i < layers; i++) {
col += stars(uv, i);
}
// Sample the terminal screen texture including alpha channel
vec4 terminalColor = texture(iChannel0, uv);
if (transparent) {
col += terminalColor.rgb;
}
// Make a mask that is 1.0 where the terminal content is not black
float mask = 1 - step(threshold, luminance(terminalColor.rgb));
vec3 blendedColor = mix(terminalColor.rgb, col, mask);
// Apply terminal's alpha to control overall opacity
fragColor = vec4(blendedColor, terminalColor.a);
}
+135
View File
@@ -0,0 +1,135 @@
// transparent background
const bool transparent = false;
// terminal contents luminance threshold to be considered background (0.0 to 1.0)
const float threshold = 0.15;
// divisions of grid
const float repeats = 30.;
// number of layers
const float layers = 21.;
// star colors
const vec3 white = vec3(1.0); // Set star color to pure white
float luminance(vec3 color) {
return dot(color, vec3(0.2126, 0.7152, 0.0722));
}
float N21(vec2 p) {
p = fract(p * vec2(233.34, 851.73));
p += dot(p, p + 23.45);
return fract(p.x * p.y);
}
vec2 N22(vec2 p) {
float n = N21(p);
return vec2(n, N21(p + n));
}
mat2 scale(vec2 _scale) {
return mat2(_scale.x, 0.0,
0.0, _scale.y);
}
// 2D Noise based on Morgan McGuire
float noise(in vec2 st) {
vec2 i = floor(st);
vec2 f = fract(st);
// Four corners in 2D of a tile
float a = N21(i);
float b = N21(i + vec2(1.0, 0.0));
float c = N21(i + vec2(0.0, 1.0));
float d = N21(i + vec2(1.0, 1.0));
// Smooth Interpolation
vec2 u = f * f * (3.0 - 2.0 * f); // Cubic Hermite Curve
// Mix 4 corners percentages
return mix(a, b, u.x) +
(c - a) * u.y * (1.0 - u.x) +
(d - b) * u.x * u.y;
}
float perlin2(vec2 uv, int octaves, float pscale) {
float col = 1.;
float initScale = 4.;
for (int l; l < octaves; l++) {
float val = noise(uv * initScale);
if (col <= 0.01) {
col = 0.;
break;
}
val -= 0.01;
val *= 0.5;
col *= val;
initScale *= pscale;
}
return col;
}
vec3 stars(vec2 uv, float offset) {
float timeScale = -(iTime + offset) / layers;
float trans = fract(timeScale);
float newRnd = floor(timeScale);
vec3 col = vec3(0.);
// Translate uv then scale for center
uv -= vec2(0.5);
uv = scale(vec2(trans)) * uv;
uv += vec2(0.5);
// Create square aspect ratio
uv.x *= iResolution.x / iResolution.y;
// Create boxes
uv *= repeats;
// Get position
vec2 ipos = floor(uv);
// Return uv as 0 to 1
uv = fract(uv);
// Calculate random xy and size
vec2 rndXY = N22(newRnd + ipos * (offset + 1.)) * 0.9 + 0.05;
float rndSize = N21(ipos) * 100. + 200.;
vec2 j = (rndXY - uv) * rndSize;
float sparkle = 1. / dot(j, j);
// Set stars to be pure white
col += white * sparkle;
col *= smoothstep(1., 0.8, trans);
return col; // Return pure white stars only
}
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
// Normalized pixel coordinates (from 0 to 1)
vec2 uv = fragCoord / iResolution.xy;
vec3 col = vec3(0.);
for (float i = 0.; i < layers; i++) {
col += stars(uv, i);
}
// Sample the terminal screen texture including alpha channel
vec4 terminalColor = texture(iChannel0, uv);
if (transparent) {
col += terminalColor.rgb;
}
// Make a mask that is 1.0 where the terminal content is not black
float mask = 1 - step(threshold, luminance(terminalColor.rgb));
vec3 blendedColor = mix(terminalColor.rgb, col, mask);
// Apply terminal's alpha to control overall opacity
fragColor = vec4(blendedColor, terminalColor.a);
}
+23
View File
@@ -0,0 +1,23 @@
/** Size of TFT "pixels" */
float resolution = 4.0;
/** Strength of effect */
float strength = 0.5;
void _scanline(inout vec3 color, vec2 uv)
{
float scanline = step(1.2, mod(uv.y * iResolution.y, resolution));
float grille = step(1.2, mod(uv.x * iResolution.x, resolution));
color *= max(1.0 - strength, scanline * grille);
}
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
vec2 uv = fragCoord.xy / iResolution.xy;
vec3 color = texture(iChannel0, uv).rgb;
_scanline(color, uv);
fragColor.xyz = color;
fragColor.w = 1.0;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 790 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 987 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1003 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 608 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 892 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 MiB

+74
View File
@@ -0,0 +1,74 @@
// adapted by Alex Sherwin for Ghostty from https://www.shadertoy.com/view/lljGDt
#define BLACK_BLEND_THRESHOLD .4
float hash21(vec2 p) {
p = fract(p * vec2(233.34, 851.73));
p += dot(p, p + 23.45);
return fract(p.x * p.y);
}
float rayStrength(vec2 raySource, vec2 rayRefDirection, vec2 coord, float seedA, float seedB, float speed)
{
vec2 sourceToCoord = coord - raySource;
float cosAngle = dot(normalize(sourceToCoord), rayRefDirection);
// Add subtle dithering based on screen coordinates
float dither = hash21(coord) * 0.015 - 0.0075;
float ray = clamp(
(0.45 + 0.15 * sin(cosAngle * seedA + iTime * speed)) +
(0.3 + 0.2 * cos(-cosAngle * seedB + iTime * speed)) + dither,
0.0, 1.0);
// Smoothstep the distance falloff
float distFade = smoothstep(0.0, iResolution.x, iResolution.x - length(sourceToCoord));
return ray * mix(0.5, 1.0, distFade);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord.xy / iResolution.xy;
uv.y = 1.0 - uv.y;
vec2 coord = vec2(fragCoord.x, iResolution.y - fragCoord.y);
// Set the parameters of the sun rays
vec2 rayPos1 = vec2(iResolution.x * 0.7, iResolution.y * 1.1);
vec2 rayRefDir1 = normalize(vec2(1.0, 0.116));
float raySeedA1 = 36.2214;
float raySeedB1 = 21.11349;
float raySpeed1 = 1.1;
vec2 rayPos2 = vec2(iResolution.x * 0.8, iResolution.y * 1.2);
vec2 rayRefDir2 = normalize(vec2(1.0, -0.241));
const float raySeedA2 = 22.39910;
const float raySeedB2 = 18.0234;
const float raySpeed2 = 0.9;
// Calculate the colour of the sun rays on the current fragment
vec4 rays1 =
vec4(1.0, 1.0, 1.0, 0.0) *
rayStrength(rayPos1, rayRefDir1, coord, raySeedA1, raySeedB1, raySpeed1);
vec4 rays2 =
vec4(1.0, 1.0, 1.0, 0.0) *
rayStrength(rayPos2, rayRefDir2, coord, raySeedA2, raySeedB2, raySpeed2);
vec4 col = rays1 * 0.5 + rays2 * 0.4;
// Attenuate brightness towards the bottom, simulating light-loss due to depth.
// Give the whole thing a blue-green tinge as well.
float brightness = 1.0 - (coord.y / iResolution.y);
col.r *= 0.05 + (brightness * 0.8);
col.g *= 0.15 + (brightness * 0.6);
col.b *= 0.3 + (brightness * 0.5);
vec2 termUV = fragCoord.xy / iResolution.xy;
vec4 terminalColor = texture(iChannel0, termUV);
float alpha = step(length(terminalColor.rgb), BLACK_BLEND_THRESHOLD);
vec3 blendedColor = mix(terminalColor.rgb * 1.0, col.rgb * 0.3, alpha);
fragColor = vec4(blendedColor, terminalColor.a);
}
+35
View File
@@ -0,0 +1,35 @@
#define TAU 6.28318530718
#define MAX_ITER 6
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec3 water_color = vec3(1.0, 1.0, 1.0) * 0.5;
float time = iTime * 0.5+23.0;
vec2 uv = fragCoord.xy / iResolution.xy;
vec2 p = mod(uv*TAU, TAU)-250.0;
vec2 i = vec2(p);
float c = 1.0;
float inten = 0.005;
for (int n = 0; n < MAX_ITER; n++)
{
float t = time * (1.0 - (3.5 / float(n+1)));
i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(t + i.x));
c += 1.0/length(vec2(p.x / (sin(i.x+t)/inten),p.y / (cos(i.y+t)/inten)));
}
c /= float(MAX_ITER);
c = 1.17-pow(c, 1.4);
vec3 color = vec3(pow(abs(c), 15.0));
color = clamp((color + water_color)*1.2, 0.0, 1.0);
// perterb uv based on value of c from caustic calc above
vec2 tc = vec2(cos(c)-0.75,sin(c)-0.75)*0.04;
uv = clamp(uv + tc,0.0,1.0);
fragColor = texture(iChannel0, uv);
// give transparent pixels a color
if ( fragColor.a == 0.0 ) fragColor=vec4(1.0,1.0,1.0,1.0);
fragColor *= vec4(color, 1.0);
}
+1 -1
View File
@@ -1,4 +1,4 @@
# created by KDE Plasma, Tue Dec 16 00:23:11 2025
# created by KDE Plasma, Sat Feb 7 19:00:05 2026
#
include "/usr/share/themes/Breeze/gtk-2.0/gtkrc"
+1 -1
View File
@@ -1,4 +1,4 @@
# created by KDE Plasma, Tue Dec 16 00:23:11 2025
# created by KDE Plasma, Sat Feb 7 19:00:05 2026
#
gtk-alternative-button-order = 1
+24 -13
View File
@@ -1,22 +1,33 @@
[General]
LastUsedVersion=210800
SideBarPage=operations
[MainWindow]
MenuBar=Disabled
[Recent Files]
File1[$e]=$HOME/.local/share/Steam/steamapps/common/Half-Life/valve/models/player/gordon/gordon.bmp
File2[$e]=$HOME/Downloads/IMG_2205.jpg
File3[$e]=$HOME/Documents/krita/dbd2025/dbd2025.png
File4[$e]=$HOME/Documents/Blender/paper-boat.png
File5[$e]=mtp:/HD1901/Internal shared storage/DCIM/Snapchat/Snapchat-1004382467.mp4
File6[$e]=$HOME/Desktop/phone-backup/Pictures/.gs_fs0/.5.jpg
Name1[$e]=gordon.bmp
Name2[$e]=IMG_2205.jpg
Name3[$e]=dbd2025.png
Name4[$e]=paper-boat.png
Name5[$e]=Snapchat-1004382467.mp4
Name6[$e]=.5.jpg
File1[$e]=$HOME/Downloads/TG-63-19-1.jpg
File10[$e]=$HOME/Downloads/download20260101180443.png
File2[$e]=$HOME/Documents/Krita/mbd2026/mbd2026.png
File3[$e]=$HOME/Desktop/Ubunchu/cover.jpg
File4[$e]=$HOME/Pictures/Endfield/ENDFIELD_SHARE_1769117324.png
File5[$e]=$HOME/Desktop/preview.gif
File6[$e]=$HOME/Desktop/wp5746605.jpg
File7[$e]=$HOME/Desktop/2601189.jpg
File8[$e]=$HOME/Desktop/wp8254196-yellow-clouds-wallpapers.jpg
File9[$e]=$HOME/Downloads/download20260101171035.png
Name1[$e]=TG-63-19-1.jpg
Name10[$e]=download20260101180443.png
Name2[$e]=mbd2026.png
Name3[$e]=cover.jpg
Name4[$e]=ENDFIELD_SHARE_1769117324.png
Name5[$e]=preview.gif
Name6[$e]=wp5746605.jpg
Name7[$e]=2601189.jpg
Name8[$e]=wp8254196-yellow-clouds-wallpapers.jpg
Name9[$e]=download20260101171035.png
[SideBar]
InformationSplitterSizes=211,244
InformationSplitterSizes=220,255
IsVisible ViewMode=true
SideBarSplitterSizes=213,610
+12
View File
@@ -3,3 +3,15 @@ ordering=preferred://browser,applications:systemsettings.desktop,applications:or
[Favorites-org.kde.plasma.kickoff.favorites.instance-3-global]
ordering=preferred://browser,applications:systemsettings.desktop,applications:org.kde.dolphin.desktop,applications:org.kde.konsole.desktop,applications:org.kde.discover.desktop,applications:org.kde.plasma-systemmonitor.desktop,applications:org.kde.kate.desktop
[Favorites-org.kde.plasma.kickoff.favorites.instance-33-dc7cfc1e-da2d-4ff2-977f-a1a4449080f6]
ordering=applications:com.usebottles.bottles.desktop,applications:org.kde.discover.desktop,applications:org.kde.dolphin.desktop,applications:org.kde.kate.desktop,applications:org.kde.konsole.desktop,applications:org.kde.plasma-systemmonitor.desktop,applications:systemsettings.desktop,preferred://browser,applications:org.kde.korganizer.desktop,applications:org.kde.kdeconnect.app.desktop,applications:com.heroicgameslauncher.hgl.desktop
[Favorites-org.kde.plasma.kickoff.favorites.instance-33-global]
ordering=applications:com.usebottles.bottles.desktop,applications:org.kde.discover.desktop,applications:org.kde.dolphin.desktop,applications:org.kde.kate.desktop,applications:org.kde.konsole.desktop,applications:org.kde.plasma-systemmonitor.desktop,applications:systemsettings.desktop,preferred://browser,applications:org.kde.korganizer.desktop,applications:org.kde.kdeconnect.app.desktop,applications:com.heroicgameslauncher.hgl.desktop
[Favorites-org.kde.plasma.kickoff.favorites.instance-39-dc7cfc1e-da2d-4ff2-977f-a1a4449080f6]
ordering=applications:com.usebottles.bottles.desktop,applications:org.kde.discover.desktop,applications:org.kde.dolphin.desktop,applications:org.kde.kate.desktop,applications:org.kde.plasma-systemmonitor.desktop,applications:systemsettings.desktop,preferred://browser,applications:org.kde.korganizer.desktop,applications:org.kde.kdeconnect.app.desktop,applications:com.heroicgameslauncher.hgl.desktop
[Favorites-org.kde.plasma.kickoff.favorites.instance-39-global]
ordering=applications:com.usebottles.bottles.desktop,applications:org.kde.discover.desktop,applications:org.kde.dolphin.desktop,applications:org.kde.kate.desktop,applications:org.kde.plasma-systemmonitor.desktop,applications:systemsettings.desktop,preferred://browser,applications:org.kde.korganizer.desktop,applications:org.kde.kdeconnect.app.desktop,applications:com.heroicgameslauncher.hgl.desktop
+4
View File
@@ -1,5 +1,9 @@
[activities]
18f515e7-cf8b-4327-80ee-9f74afa20678=Work
dc7cfc1e-da2d-4ff2-977f-a1a4449080f6=Default
[activities-icons]
18f515e7-cf8b-4327-80ee-9f74afa20678=preferences-system-network-ldap
[main]
currentActivity=dc7cfc1e-da2d-4ff2-977f-a1a4449080f6
+25 -8
View File
@@ -1,7 +1,14 @@
[BuildConfig]
AllowedCommandLines=
AutoSwitchToOutput=true
BlockedCommandLines=
ShowBuildProgress=false
UseDiagnosticsOutput=true
[General]
Allow Tab Scrolling=true
Auto Hide Tabs=false
Close After Last=false
Close After Last=true
Close documents with window=true
Cycle To First Tab=true
Days Meta Infos=30
@@ -17,6 +24,8 @@ Mouse forward button action=0
Open New Tab To The Right Of Current=false
Output History Limit=100
Output With Date=false
Quickopen Filter Mode=0
Quickopen List Mode=true
Recent File List Entry Count=10
Restore Window Configuration=true
SDI Mode=false
@@ -26,7 +35,7 @@ Show Menu Bar=true
Show Status Bar=true
Show Symbol In Navigation Bar=true
Show Tab Bar=true
Show Tabs Close Button=true
Show Tabs Close Button=false
Show Url Nav Bar=true
Show output view for message type=1
Show text for left and right sidebar=false
@@ -83,8 +92,8 @@ Word Wrap Column=80
[KTextEditor Renderer]
Animate Bracket Matching=false
Auto Color Theme Selection=true
Color Theme=Breeze Light
Auto Color Theme Selection=false
Color Theme=gruvbox Light
Line Height Multiplier=1
Show Indentation Lines=false
Show Whole Bracket Expression=false
@@ -148,7 +157,7 @@ Smart Copy Cut=true
Statusbar Line Column Compact Mode=true
Text Drag And Drop=true
User Sets Of Chars To Enclose Selection=
Vi Input Mode Steal Keys=false
Vi Input Mode Steal Keys=true
Vi Relative Line Numbers=false
Word Completion=true
Word Completion Minimal Word Length=3
@@ -163,8 +172,16 @@ RunPrefix=
SetEditor=false
[MainWindow]
2560x1440 screen: Height=601
2560x1440 screen: Width=759
2560x1440 screen: Height=912
2560x1440 screen: Width=1284
[Shortcuts]
kate_mdi_focus_toolview_kate_plugin_katebuildplugin=;\s
kate_mdi_focus_toolview_kateprojectinfo=Alt+.
kate_mdi_toolview_kate_plugin_katebuildplugin=Alt+?
[UiSettings]
ColorScheme=Krita dark
[filetree]
editShade=48,203,229
@@ -178,7 +195,7 @@ sortRole=0
viewShade=162,201,252
[lspclient]
AllowedServerCommandLines=
AllowedServerCommandLines=/snap/bin/marksman server,/usr/bin/rust-analyzer
AutoHover=true
AutoImport=true
BlockedServerCommandLines=
+2 -2
View File
@@ -12,8 +12,8 @@ Map Leader=\\
Normal Mode Mapping Keys=
Normal Mode Mappings=
Normal Mode Mappings Recursion=
ViRegisterContents=something Im curious about or looking forward to\n\n,o,
ViRegisterFlags=1,0,0
ViRegisterContents=,,
ViRegisterFlags=0,0,0
ViRegisterNames=",-,^
Visual Mode Mapping Keys=
Visual Mode Mappings=
@@ -26,5 +26,6 @@ dataSourceCommonSettings\activeState=true
dataSourceCommonSettings\activeState=true
[UserFeedback]
ApplicationStartCount=40
ApplicationTime=39717
ApplicationStartCount=143
ApplicationTime=192245
LastEncouragement=@DateTime(\0\0\0\x10\0\0\0\0\0\0%\x8d\x8b\x2w/\x18\0)
@@ -26,5 +26,5 @@ dataSourceCommonSettings\activeState=true
dataSourceCommonSettings\activeState=true
[UserFeedback]
ApplicationStartCount=52
ApplicationTime=120089
ApplicationStartCount=367
ApplicationTime=1033838
@@ -17,5 +17,5 @@ dataSourceCommonSettings\activeState=true
dataSourceCommonSettings\activeState=true
[UserFeedback]
ApplicationStartCount=12
ApplicationTime=14164
ApplicationStartCount=78
ApplicationTime=93025
@@ -0,0 +1,24 @@
[Source-applicationVersion]
dataSourceCommonSettings\activeState=true
[Source-locale]
dataSourceCommonSettings\activeState=true
[Source-platform]
dataSourceCommonSettings\activeState=true
[Source-qtVersion]
dataSourceCommonSettings\activeState=true
[Source-screens]
dataSourceCommonSettings\activeState=true
[Source-startCount]
dataSourceCommonSettings\activeState=true
[Source-usageTime]
dataSourceCommonSettings\activeState=true
[UserFeedback]
ApplicationStartCount=2
ApplicationTime=147
@@ -0,0 +1,21 @@
[Source-applicationVersion]
dataSourceCommonSettings\activeState=true
[Source-platform]
dataSourceCommonSettings\activeState=true
[Source-qtVersion]
dataSourceCommonSettings\activeState=true
[Source-screens]
dataSourceCommonSettings\activeState=true
[Source-startCount]
dataSourceCommonSettings\activeState=true
[Source-usageTime]
dataSourceCommonSettings\activeState=true
[UserFeedback]
ApplicationStartCount=31
ApplicationTime=6613
@@ -26,5 +26,5 @@ dataSourceCommonSettings\activeState=true
dataSourceCommonSettings\activeState=true
[UserFeedback]
ApplicationStartCount=10
ApplicationTime=265163
ApplicationStartCount=113
ApplicationTime=2352883
+1 -1
View File
@@ -1,3 +1,3 @@
[General]
keyAlgorithm=EC
name=fedora
name=kubuntu
+2 -8
View File
@@ -1,11 +1,5 @@
[67985dbaf5484787a8f69626d4f8b113]
certificate=-----BEGIN CERTIFICATE-----\nMIIBizCCATGgAwIBAgIBATAKBggqhkjOPQQDBDBPMSkwJwYDVQQDDCA2Nzk4NWRi\nYWY1NDg0Nzg3YThmNjk2MjZkNGY4YjExMzEUMBIGA1UECwwLS0RFIENvbm5lY3Qx\nDDAKBgNVBAoMA0tERTAeFw0yNDEyMTUwNjAwMDBaFw0zNTEyMTUwNjAwMDBaME8x\nKTAnBgNVBAMMIDY3OTg1ZGJhZjU0ODQ3ODdhOGY2OTYyNmQ0ZjhiMTEzMRQwEgYD\nVQQLDAtLREUgQ29ubmVjdDEMMAoGA1UECgwDS0RFMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAE/rbwC0RnwSFOl0BKPVJEkx4rJHT9h/ih5I8ZGze9kMwB64H7fS95\nIiQd+XNpbaorAp1l1sRJOffRP31aKOi7+zAKBggqhkjOPQQDBANIADBFAiEAi6ae\ngHauXc5pfTXhEj9QQHgI2f+vlO3OMFdjzhV+uD8CIAXtndsCQ+512VbXEkUa4kzR\nCyiLOI1Vg+LIkrOpvg7G\n-----END CERTIFICATE-----\n
name=OnePlus 7T
protocolVersion=8
type=phone
[eb546ffd_efc1_48f1_929c_a3b2d918522c]
certificate="-----BEGIN CERTIFICATE-----\nMIIBkjCCATmgAwIBAgIBATAKBggqhkjOPQQDBDBTMS0wKwYDVQQDDCRlYjU0NmZm\nZF9lZmMxXzQ4ZjFfOTI5Y19hM2IyZDkxODUyMmMxFDASBgNVBAsMC0tERSBDb25u\nZWN0MQwwCgYDVQQKDANLREUwHhcNMjMxMjA1MDYwMDAwWhcNMzQxMjA1MDYwMDAw\nWjBTMS0wKwYDVQQDDCRlYjU0NmZmZF9lZmMxXzQ4ZjFfOTI5Y19hM2IyZDkxODUy\nMmMxFDASBgNVBAsMC0tERSBDb25uZWN0MQwwCgYDVQQKDANLREUwWTATBgcqhkjO\nPQIBBggqhkjOPQMBBwNCAAQop70yLtqkhYvdpvfo7jDibnO3gfSuj9CXZDpLc0i0\niC36+aMnSSeT7iRWTFxu1nyvWaHPWjJ2N7kwpvTHdANRMAoGCCqGSM49BAMEA0cA\nMEQCIB5aczt2NA5Dy9W6fWym4eJ/OLAB5BQFvD7Oa0OmwZcDAiBLHdcXA9iqEFwG\nDTKzrnh+koKomXCHooGkbbjdpmfMUA==\n-----END CERTIFICATE-----\n"
[48596f5997c34d2db1af4e7c7c1ae4ab]
certificate="-----BEGIN CERTIFICATE-----\nMIIBjDCCATGgAwIBAgIBATAKBggqhkjOPQQDBDBPMSkwJwYDVQQDDCA0ODU5NmY1\nOTk3YzM0ZDJkYjFhZjRlN2M3YzFhZTRhYjEUMBIGA1UECwwLS0RFIENvbm5lY3Qx\nDDAKBgNVBAoMA0tERTAeFw0yNDEyMjIwNjAwMDBaFw0zNTEyMjIwNjAwMDBaME8x\nKTAnBgNVBAMMIDQ4NTk2ZjU5OTdjMzRkMmRiMWFmNGU3YzdjMWFlNGFiMRQwEgYD\nVQQLDAtLREUgQ29ubmVjdDEMMAoGA1UECgwDS0RFMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEeCv5ADYuy0Ai1iXD7qlcT9Afa9Ky//Qtsnc7b0Xsd36eqX/o2/Se\nX9bAFzWSfPhck1X+I/sr57nGKTZDUO1bizAKBggqhkjOPQQDBANJADBGAiEAzK7W\nsgKQmSxyHHYhKmC5tQqGmxb0feYXiKH5qk4cUW0CIQDfkcjA/PtREzHDd/pJ3x89\nPrTmmdfjuY0Smd+tF3jTzw==\n-----END CERTIFICATE-----\n"
name=OnePlus 7T
protocolVersion=8
type=phone
+3
View File
@@ -1,2 +1,5 @@
[Module-browserintegrationreminder]
autoload=false
[Module-device_automounter]
autoload=false
+2 -2
View File
@@ -1,8 +1,8 @@
[General]
ColorScheme=LeafLight
ColorScheme=BreezeDark
[Icons]
Theme=breeze
Theme=breeze-dark
[KDE]
widgetStyle=Breeze
+1 -1
View File
@@ -1,3 +1,3 @@
[KSplash]
Engine=KSplashQML
Theme=org.kde.breeze.desktop
Theme=org.kde.breezedark.desktop
+1 -1
View File
@@ -1 +1 @@
org.kde.breeze.desktop
org.kde.breezedark.desktop
+45 -5
View File
@@ -44,10 +44,37 @@ ForegroundInactive=166,172,186
ForegroundLink=0,149,179
ForegroundNegative=218,68,83
ForegroundNeutral=255,255,127
ForegroundNormal[$d]
ForegroundPositive=0,170,127
ForegroundVisited[$d]
[Colors:Header]
BackgroundAlternate=211,214,206
BackgroundNormal[$d]
DecorationFocus[$d]
DecorationHover[$d]
ForegroundActive[$d]
ForegroundInactive[$d]
ForegroundLink[$d]
ForegroundNegative[$d]
ForegroundNeutral[$d]
ForegroundNormal[$d]
ForegroundPositive[$d]
ForegroundVisited[$d]
[Colors:Header][Inactive]
BackgroundAlternate[$d]
BackgroundNormal[$d]
DecorationFocus[$d]
DecorationHover[$d]
ForegroundActive[$d]
ForegroundInactive[$d]
ForegroundLink[$d]
ForegroundNegative[$d]
ForegroundNeutral[$d]
ForegroundNormal[$d]
ForegroundPositive[$d]
ForegroundVisited[$d]
[Colors:Selection]
BackgroundAlternate=128,175,136
@@ -106,21 +133,30 @@ ForegroundPositive=114,155,121
ForegroundVisited=61,111,171
[DirSelect Dialog]
DirSelectDialog Size=1280,720
History Items[$e]=file:$HOME/Games/Mod-Profiles/Morrowind,file:$HOME/Games/Mod-Profiles/SSE,file:$HOME/Games/Mod-Profiles/SSE,file:$HOME/Games/Mod-Profiles/SSE,file:$HOME/Programs/nsui,file:$HOME/.bottles,file:$HOME/.bottles,file:$HOME/Games/Roms/GBA,file:$HOME/Music,file:///mnt,file:$HOME,file:///media/cory/5d17c3cd-cd6b-4207-be1f-be40d0a86e2b/home-backups,file:$HOME/Desktop/test,file:///media/cory/5d17c3cd-cd6b-4207-be1f-be40d0a86e2b
DirSelectDialog Size=1514,975
History Items[$e]=file:$HOME/Games/Heroic/Prefixes/default/Fallout 3 Game of the Year Edition/drive_c/users/cory/Documents/My Games/Fallout3,file:$HOME/Games/Mod-Profiles/F3,file:$HOME/Games/Heroic/Fallout 3,file:$HOME/Games/Heroic/Fallout 3/Data,file:$HOME/Games/Heroic/Fallout 3,file:$HOME/Games/sse-mo2,file:$HOME/.config/VintagestoryData,file:$HOME/.local/share/Steam/steamapps/compatdata/4026215239/pfx/drive_c/Program Files/Punishing Gray Raven,file:$HOME/.local/share/Steam/steamapps/compatdata/4195709487/pfx/drive_c/users/steamuser/Pictures/ENDFIELD,file:$HOME/.local/share/Steam/steamapps/common,file:$HOME/Games/Mod-Profiles/Undertale,file:$HOME/Games/PGR,file:$HOME/Games/PGR,file:$HOME/Games/Mod-Profiles/FF7,file:$HOME/Games/Mod-Profiles/FNV,file:$HOME/Projects/Renpy,file:$HOME/Games/Mod-Profiles/MHW,file:$HOME/Games/Mod-Profiles/SSE,file:$HOME/Games/Mod-Profiles/RE2,file:$HOME/Games/Mod-Profiles/SSE,file:$HOME/Games/Mod-Profiles/SSE-MO2,file:$HOME/Games/Mod-Profiles/7thDeck,file:///media/cory/KOBOeReader,file:$HOME/Books,file:$HOME/Desktop/test-proj,file:$HOME/Games/Mod-Profiles/FF7,file:$HOME/Documents/ludusavi-backup,file:$HOME/Games/Mod-Profiles/SSE-MO2,file:$HOME/Games/Mod-Profiles/SSE,file:$HOME/Games/Mod-Profiles/SSE,file:$HOME/Games/Mod-Profiles/RE4,file:$HOME/Games/Mod-Profiles/MHW,file:$HOME/.local/share/Steam/steamapps/compatdata/489830/pfx/drive_c/users/steamuser/Documents/My Games/Skyrim Special Edition,file:$HOME/.local/share/Steam/steamapps/common/Skyrim Special Edition/Data,file:$HOME/Games/Mod-Profiles/SSE/35,file:$HOME/.local/share/Steam/steamapps/common/Skyrim Special Edition/Data,file:$HOME/.local/share/Steam/steamapps/common/Skyrim Special Edition/Data,file:$HOME/Games/Mod-Profiles/SSE,file:$HOME/.local/share/Steam/steamapps/common/Skyrim Special Edition,file:$HOME/.local/share/Steam/steamapps/common/Skyrim Special Edition/Data,file:$HOME/Games/Mod-Profiles/SSE1,file:$HOME/Games/Mod-Profiles/SSE1,file:$HOME/Games/Mod-Profiles/SSE1,file:$HOME/Games/Mod-Profiles/SSE1,file:$HOME/.local/share/Steam/steamapps/common/Skyrim Special Edition/Data,file:$HOME/.local/share/Steam/steamapps/common/Skyrim Special Edition/Data,file:$HOME/Games/Mod-Profiles/SSE,file:$HOME/Games/Mod-Profiles/SSE,file:$HOME/Games/Mod-Profiles/SSE1,file:$HOME/Games/Mod-Profiles/SSE
Splitter State=\x00\x00\x00\xff\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xb0\x00\x00\x02\x81\x00\xff\xff\xff\xff\x01\x00\x00\x00\x01\x00
[General]
AccentColor=0,0,0,0
ColorScheme=LeafLight
ColorSchemeHash=3c1fe2294ac4de052dbb549c48aa4c026ce1610c
LastUsedCustomAccentColor=61,174,233
UseSystemBell=true
accentColorFromWallpaper=false
[Icons]
Theme=breeze
[KDE]
LookAndFeelPackage=org.kde.breeze.desktop
LookAndFeelPackage=org.kde.breezedark.desktop
ShowDeleteCommand=false
widgetStyle=Breeze
[KFileDialog Settings]
Allow Expansion=false
Automatically select filename extension=true
Breadcrumb Navigation=true
Breadcrumb Navigation=false
Decoration position=2
LocationCombo Completionmode=5
PathCombo Completionmode=5
@@ -134,12 +170,16 @@ Sort by=Name
Sort directories first=true
Sort hidden files last=false
Sort reversed=false
Speedbar Width=140
Speedbar Width=158
View Style=DetailTree
[KShortcutsDialog Settings]
Dialog Size=1199,890
[PreviewSettings]
EnableRemoteFolderThumbnail=false
MaximumRemoteSize=0
[WM]
activeBackground=225,228,220
activeBlend=225,228,220
+14 -3
View File
@@ -1,5 +1,6 @@
[ActivityManager]
_k_friendly_name=Activity Manager
switch-to-activity-18f515e7-cf8b-4327-80ee-9f74afa20678=none,none,Switch to activity "Work"
switch-to-activity-dc7cfc1e-da2d-4ff2-977f-a1a4449080f6=none,none,Switch to activity "Default"
[KDE Keyboard Layout Switcher]
@@ -102,6 +103,7 @@ Switch to Screen to the Left=none,,Switch to Screen to the Left
Switch to Screen to the Right=none,,Switch to Screen to the Right
Toggle Night Color=none,none,Suspend/Resume Night Light
Toggle Window Raise/Lower=none,,Toggle Window Raise/Lower
ToggleMouseClick=Meta+*,Meta+*,Toggle Mouse Click Animation
Walk Through Windows=Meta+Tab\tAlt+Tab,Meta+Tab\tAlt+Tab,Walk Through Windows
Walk Through Windows (Reverse)=Meta+Shift+Tab\tAlt+Shift+Tab,Meta+Shift+Tab\tAlt+Shift+Tab,Walk Through Windows (Reverse)
Walk Through Windows Alternative=none,none,Walk Through Windows Alternative
@@ -117,7 +119,7 @@ Window Custom Quick Tile Bottom=none,,Custom Quick Tile Window to the Bottom
Window Custom Quick Tile Left=none,,Custom Quick Tile Window to the Left
Window Custom Quick Tile Right=none,,Custom Quick Tile Window to the Right
Window Custom Quick Tile Top=none,,Custom Quick Tile Window to the Top
Window Fullscreen=none,,Make Window Fullscreen
Window Fullscreen=Alt+Return,,Make Window Fullscreen
Window Grow Horizontal=none,,Expand Window Horizontally
Window Grow Vertical=none,,Expand Window Vertically
Window Lower=none,,Lower Window
@@ -234,7 +236,7 @@ activate task manager entry 6=Meta+6,Meta+6,Activate Task Manager Entry 6
activate task manager entry 7=Meta+7,Meta+7,Activate Task Manager Entry 7
activate task manager entry 8=Meta+8,Meta+8,Activate Task Manager Entry 8
activate task manager entry 9=Meta+9,Meta+9,Activate Task Manager Entry 9
activate widget 33=,none,Activate Application Launcher Widget
activate widget 35=none,none,Activate Application Launcher Widget
clear-history=none,,Clear Clipboard History
clipboard_action=Meta+Ctrl+X,Meta+Ctrl+X,Automatic Action Popup Menu
cycle-panels=Meta+Alt+P,Meta+Alt+P,Move keyboard focus between panels
@@ -254,7 +256,13 @@ switch to previous activity=none,,Switch to Previous Activity
toggle do not disturb=none,,Toggle do not disturb
[services][com.mitchellh.ghostty.desktop]
_launch=none
_launch=Alt+T
[services][kitty.desktop]
_launch=Alt+T
[services][neovide.desktop]
_launch=Meta+N
[services][net.local.disconnect-xboxcon.sh.desktop]
_launch=Meta+Ctrl+Alt+Shift+X
@@ -282,3 +290,6 @@ _launch=Meta+Ctrl+Alt+$
[services][net.local.python3.desktop]
_launch=Meta+Ctrl+Alt+!
[services][org.kde.konsole.desktop]
NewWindow=Alt+T
+1
View File
@@ -1,6 +1,7 @@
[Confirmations]
ConfirmDelete=true
ConfirmEmptyTrash=true
ConfirmTrash=false
[Executable scripts]
behaviourOnLaunch=execute
+12 -12
View File
@@ -1,40 +1,40 @@
# vim:ft=kitty
## name: Everforest Light Hard
## name: Everforest Light Medium
## author: Sainnhe Park
## license: MIT
## upstream: https://github.com/ewal/kitty-everforest/blob/master/themes/everforest_light_hard.conf
## upstream: https://github.com/ewal/kitty-everforest/blob/master/themes/everforest_light_medium.conf
## blurb: A green based color scheme designed to be warm and soft
foreground #5c6a72
background #fffbef
background #fdf6e3
selection_foreground #829181
selection_background #f0f2d4
selection_background #eaedc8
cursor #5c6a72
cursor_text_color #f8f5e4
cursor_text_color #f4f0d9
url_color #3a94c5
active_border_color #8da101
inactive_border_color #bec5b2
inactive_border_color #bdc3af
bell_border_color #f57d26
visual_bell_color none
wayland_titlebar_color system
macos_titlebar_color system
active_tab_background #fffbef
active_tab_background #fdf6e3
active_tab_foreground #5c6a72
inactive_tab_background #f2efdf
inactive_tab_background #fdf6e3
inactive_tab_foreground #939f91
tab_bar_background #f8f5e4
tab_bar_background #fdf6e3
tab_bar_margin_color none
mark1_foreground #fffbef
mark1_foreground #fdf6e3
mark1_background #3a94c5
mark2_foreground #fffbef
mark2_foreground #fdf6e3
mark2_background #d3c6aa
mark3_foreground #fffbef
mark3_foreground #fdf6e3
mark3_background #df69ba
#: black
+23
View File
@@ -0,0 +1,23 @@
tab_bar_edge top
tab_bar_style powerline
tab_powerline_style slanted
tab_bar_align left
tab_bar_min_tabs 2
tab_bar_margin_width 0.0
tab_bar_margin_height 2.5 1.5
tab_bar_margin_color #141218
tab_bar_background #141218
active_tab_foreground #381e72
active_tab_background #d0bcff
active_tab_font_style bold
inactive_tab_foreground #cac4cf
inactive_tab_background #141218
inactive_tab_font_style normal
tab_activity_symbol " ● "
tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title[:30]}{title[30:] and '…'} [{index}]"
active_tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title[:30]}{title[30:] and '…'} [{index}]"
+25
View File
@@ -0,0 +1,25 @@
cursor #e6e0e9
cursor_text_color #cac4cf
foreground #e6e0e9
background #141218
selection_foreground #381e72
selection_background #ccc2dc
url_color #d0bcff
color0 #141218
color1 #df5141
color2 #6ed675
color3 #dbd97b
color4 #926ce2
color5 #a397bf
color6 #D0BCFF
color7 #abb2bf
color8 #5c6370
color9 #e06a5f
color10 #86e08b
color11 #e8e697
color12 #dfc9ff
color13 #7c6acd
color14 #8b6ab5
color15 #ffffff
+4 -3
View File
@@ -1,17 +1,18 @@
# vim:fileencoding=utf-8:foldmethod=marker
background_opacity 1
background_opacity 0.05
background_blur 1
font_family CaskaydiaMonoNerdFont
font_size 16
shell /usr/bin/fish
cursor_trail 3
cursor_trail_decay 0.1 0.25
dynamic_background_opacity true
map f11 kitten focus_mode.py
# map f11 kitten focus_mode.py
# BEGIN_KITTY_THEME
# Everforest Light Hard
# Everforest Light Medium
include current-theme.conf
# END_KITTY_THEME
+10 -3
View File
@@ -1,11 +1,18 @@
# vim:fileencoding=utf-8:foldmethod=marker
background_opacity 0.85
font_size 14
background_opacity 0.3
background_blur 1
font_family CaskaydiaMonoNerdFont
font_size 16
shell /usr/bin/fish
cursor_trail 3
cursor_trail_decay 0.1 0.25
dynamic_background_opacity true
# map f11 kitten focus_mode.py
# BEGIN_KITTY_THEME
# Everforest Light Medium
# Everforest Dark Soft
include current-theme.conf
# END_KITTY_THEME
+49 -31
View File
File diff suppressed because one or more lines are too long
+5 -2
View File
@@ -1,3 +1,6 @@
[General]
FreeFloating=true
[Plugins]
baloosearchEnabled=false
browserhistoryEnabled=false
@@ -16,10 +19,10 @@ krunner_recentdocumentsEnabled=false
krunner_sessionsEnabled=false
krunner_shellEnabled=true
krunner_spellcheckEnabled=false
krunner_webshortcutsEnabled=false
krunner_webshortcutsEnabled=true
org.kde.datetimeEnabled=false
unitconverterEnabled=false
windowsEnabled=true
[Plugins][Favorites]
plugins=krunner_sessions,krunner_powerdevil,krunner_services,krunner_placesrunner,krunner_systemsettings
plugins=krunner_sessions,krunner_webshortcuts,krunner_powerdevil,krunner_services,krunner_placesrunner,krunner_systemsettings
+4
View File
@@ -3,3 +3,7 @@ Autolock=false
LockOnResume=false
RequirePassword=false
Timeout=0
[Greeter][Wallpaper][org.kde.image][General]
Image=/home/cory/Desktop/sunset between the clouds by exobiologyart.jpg
PreviewImage=/home/cory/Desktop/sunset between the clouds by exobiologyart.jpg
+3
View File
@@ -1,3 +1,6 @@
[General]
confirmLogout=false
[LegacySession: saved at previous logout]
count=0
+3 -3
View File
@@ -5,7 +5,7 @@
"allowDdcCi": true,
"allowSdrSoftwareBrightness": true,
"autoRotation": "InTabletMode",
"brightness": 0.6,
"brightness": 1,
"colorPowerTradeoff": "PreferEfficiency",
"colorProfileSource": "sRGB",
"connectorName": "DP-1",
@@ -25,8 +25,8 @@
"overscan": 0,
"rgbRange": "Automatic",
"scale": 1,
"sdrBrightness": 450,
"sdrGamutWideness": 0,
"sdrBrightness": 350,
"sdrGamutWideness": 0.5,
"transform": "Normal",
"uuid": "65840ce5-c6bf-4108-abe1-899510a19500",
"vrrPolicy": "Automatic",
+26 -5
View File
@@ -1,5 +1,6 @@
[Activities][LastVirtualDesktop]
dc7cfc1e-da2d-4ff2-977f-a1a4449080f6=f4bd76ec-75ca-4ce6-bfdc-a72a1e8178e1
18f515e7-cf8b-4327-80ee-9f74afa20678=cc557718-d230-4008-b457-5762574b13df
dc7cfc1e-da2d-4ff2-977f-a1a4449080f6=cc557718-d230-4008-b457-5762574b13df
[Desktops]
Id_1=cc557718-d230-4008-b457-5762574b13df
@@ -12,19 +13,30 @@ Rows=1
[Effect-fadedesktop]
AnimationDuration=100
[Effect-kwin6_effect_aura_glow]
Duration=400
[Effect-overview]
BorderActivate=9
[Effect-windowview]
BorderActivateAll=7
[ElectricBorders]
BottomLeft=ApplicationLauncher
[MouseBindings]
CommandAllKey=Alt
[Plugins]
blurEnabled=true
fadedesktopEnabled=true
shakecursorEnabled=false
magiclampEnabled=true
slideEnabled=false
squashEnabled=false
[TabBox]
DesktopMode=0
[TabBoxAlternative]
DesktopMode=0
[Tiling]
padding=4
@@ -53,9 +65,18 @@ tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"wi
[Tiling][f4bd76ec-75ca-4ce6-bfdc-a72a1e8178e1][65f001c2-d3c6-4d0c-be1c-d7e2820ac050]
tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
[Wayland]
InputMethod[$e]=/usr/share/applications/org.freedesktop.IBus.Panel.Wayland.Gtk3.desktop
VirtualKeyboardEnabled=false
[Windows]
ElectricBorderCooldown=200
ElectricBorderDelay=0
[Xwayland]
Scale=1
[org.kde.kdecoration2]
BorderSize=Normal
library=org.kde.breeze
theme=Breeze
+72 -8
View File
@@ -16,6 +16,10 @@ types=1
wmclass=spotify
wmclassmatch=1
[2739d8d4-b20f-48d2-9e33-a6d95fdbd228]
desktopsrule=3
skippagerrule=3
[5a3d3e7e-7075-410d-8951-691857124709]
Description=Settings for dolphin-emu
desktops=f4bd76ec-75ca-4ce6-bfdc-a72a1e8178e1
@@ -41,25 +45,69 @@ types=1
wmclass=google-chrome
wmclassmatch=1
[808f492f-47d2-404b-ba4d-6b332a5cd630]
[7cc84c7f-04f4-4a5c-852e-1f57a535b2e6]
Description=Settings for qemu-system-x86_64 Emulator
desktops=d92ab4bd-1818-437f-832f-743c12f16afe
desktopsrule=3
title=Android Emulator - Desktop:5554
wmclass=qemu-system-x86_64 Emulator
wmclasscomplete=true
wmclassmatch=1
[7f5b3fcb-8c8a-42b0-9214-24b05bf6e6a8]
Description=Sunamu Lyrics
acceptfocusrule=2
desktops=\\0
desktopsrule=3
fpplevel=4
fpplevelrule=2
fsplevel=4
fsplevelrule=2
layer=overlay
layerrule=2
position=0,948
positionrule=3
size=2577,648
sizerule=3
skippager=true
skippagerrule=3
skiptaskbar=true
skiptaskbarrule=3
wmclass=sunamu
wmclassmatch=1
[8b870cb0-cd7a-45fc-90a5-8e582b3ae63e]
Description=Window settings for LibreWolf
desktops=cc557718-d230-4008-b457-5762574b13df
desktopsrule=3
title=LibreWolf
titlematch=1
wmclass=librewolf
wmclassmatch=1
[96fa5e26-3cfb-4a9d-8160-d970188f5457]
above=true
aboverule=3
[General]
count=12
rules=f110a92a-8318-4694-bc7d-0965d0e6cd45,6b374827-d34e-4440-a2ac-588ac51864fb,25639534-b946-4898-a84b-f3cffaf09865,09896aad-7cf6-44f4-abf6-b4fb1078079a,76837bda-0f0b-44a4-a2d5-247bfcb409d3,5a3d3e7e-7075-410d-8951-691857124709,dc115368-7cd7-4c86-84a2-92506f94a7f7,8b870cb0-cd7a-45fc-90a5-8e582b3ae63e,dcbfa8c1-66dd-44a4-aaef-f79588fabb4c,7f5b3fcb-8c8a-42b0-9214-24b05bf6e6a8,7cc84c7f-04f4-4a5c-852e-1f57a535b2e6,c1265023-1942-47b0-91d3-eb147f0776bb
[c1265023-1942-47b0-91d3-eb147f0776bb]
Description=Window settings for Picture-in-Picture
desktops=\\0
desktopsrule=3
layer=overlay
layerrule=2
position=2029,0
position=2020,0
positionrule=3
size=531,299
size=540,303
sizerule=3
title=Picture-in-Picture
titlematch=2
titlematch=1
wmclass=app.zen_browser.zen
wmclassmatch=1
[General]
count=8
rules=f110a92a-8318-4694-bc7d-0965d0e6cd45,6b374827-d34e-4440-a2ac-588ac51864fb,25639534-b946-4898-a84b-f3cffaf09865,09896aad-7cf6-44f4-abf6-b4fb1078079a,808f492f-47d2-404b-ba4d-6b332a5cd630,76837bda-0f0b-44a4-a2d5-247bfcb409d3,5a3d3e7e-7075-410d-8951-691857124709,dc115368-7cd7-4c86-84a2-92506f94a7f7
[dc115368-7cd7-4c86-84a2-92506f94a7f7]
Description=Settings for Cornerpond
below=true
@@ -72,6 +120,22 @@ types=1
wmclass=Cornerpond
wmclassmatch=1
[dcbfa8c1-66dd-44a4-aaef-f79588fabb4c]
Description=Window settings for Picture-in-Picture
acceptfocusrule=2
desktops=\\0
desktopsrule=3
layer=overlay
layerrule=2
position=1891,0
positionrule=3
size=287,161
sizerule=3
title=Picture-in-Picture
titlematch=1
wmclass=librewolf
wmclassmatch=1
[f110a92a-8318-4694-bc7d-0965d0e6cd45]
Description=Settings for steam
desktops=f4bd76ec-75ca-4ce6-bfdc-a72a1e8178e1
+8 -8
View File
@@ -1,11 +1,11 @@
[file:///home/cory/Desktop/rogue-dawn/Rogue Dawn 1_21 Read Me.txt]
Checksum=1f3bde3c4e3e7992e13c8c396c458a20fd2b1b11
[file:///home/cory/Desktop/Hytale/Hytale/package/game/latest/Client/HytaleClient.exe]
Checksum=1415760fe3c8f28e7af4ec37af1ee23e0914332d
Encoding=ISO-8859-1
Time=2025,11,27,1,17,13.067,UTC
URL=file:///home/cory/Desktop/rogue-dawn/Rogue Dawn 1_21 Read Me.txt
Time=2026,1,16,5,18,15.487,UTC
URL=file:///home/cory/Desktop/Hytale/Hytale/package/game/latest/Client/HytaleClient.exe
[file:///home/cory/Downloads/jack_113773_linux_x64.run]
Checksum=86aa8e9a29118079cf9c1ac922c7a96b5f04e4fb
[file:///home/cory/Desktop/neovide.AppImage.zsync]
Checksum=96e235b5570d1e3f902d476dec703d437002fd80
Encoding=ISO-8859-1
Time=2025,11,30,20,59,59.821,UTC
URL=file:///home/cory/Downloads/jack_113773_linux_x64.run
Time=2026,1,26,19,0,30.444,UTC
URL=file:///home/cory/Desktop/neovide.AppImage.zsync
+46 -4
View File
@@ -34,6 +34,48 @@ Tab Double Click New Document=true
Tab Middle Click Close Document=true
Tabbar Tab Limit=0
[KTextEditor Document]
Allow End of Line Detection=true
Auto Detect Indent=true
Auto Reload If Any External Changes Occurs=false
Auto Reload If State Is In Version Control=true
Auto Save=false
Auto Save Interval=0
Auto Save On Focus Out=false
BOM=false
Backup Local=false
Backup Prefix=
Backup Remote=false
Backup Suffix=~
Camel Cursor=true
Encoding=UTF-8
End of Line=0
Indent On Backspace=true
Indent On Tab=true
Indent On Text Paste=true
Indentation Mode=normal
Indentation Width=4
Keep Extra Spaces=false
Line Length Limit=10000
Newline at End of File=true
On-The-Fly Spellcheck=false
Overwrite Mode=false
PageUp/PageDown Moves Cursor=false
Remove Spaces=1
ReplaceTabsDyn=true
Show Spaces=0
Show Tabs=true
Smart Home=true
Swap Directory=
Swap File Mode=1
Swap Sync Interval=15
Tab Handling=2
Tab Width=4
Trailing Marker Size=1
Use Editor Config=true
Word Wrap=false
Word Wrap Column=80
[KTextEditor Renderer]
Animate Bracket Matching=false
Auto Color Theme Selection=true
@@ -41,7 +83,7 @@ Color Theme=Breeze Light
Line Height Multiplier=1
Show Indentation Lines=false
Show Whole Bracket Expression=false
Text Font=Noto Sans Mono,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1
Text Font=Noto Sans Mono,14,-1,5,400,0,0,0,0,0,0,0,0,0,0,1
Text Font Features=
Word Wrap Marker=false
@@ -103,12 +145,12 @@ Smart Copy Cut=true
Statusbar Line Column Compact Mode=true
Text Drag And Drop=true
User Sets Of Chars To Enclose Selection=
Vi Input Mode Steal Keys=false
Vi Input Mode Steal Keys=true
Vi Relative Line Numbers=false
Word Completion=true
Word Completion Minimal Word Length=3
Word Completion Remove Tail=true
[MainWindow]
2560x1440 screen: Height=807
2560x1440 screen: Width=1302
2560x1440 screen: Height=626
2560x1440 screen: Width=955
+20 -4
View File
@@ -1,25 +1,41 @@
[Added Associations]
application/json=nvim_nvim.desktop;org.kde.kwrite.desktop;org.kde.kate.desktop;
application/vnd.debian.binary-package=org.kde.discover.desktop;
application/vnd.microsoft.portable-executable=com.usebottles.bottles.desktop;wine.desktop;winetricks.desktop;org.winehq.Wine.desktop;
application/x-blender=Blender.desktop;
application/x-docbook+xml=nvim_nvim.desktop;org.kde.kwrite.desktop;org.kde.kate.desktop;
application/x-msdownload=com.usebottles.bottles.desktop;wine.desktop;
application/x-msi=com.usebottles.bottles.desktop;wine.desktop;winetricks.desktop;
application/x-nes-rom=nestopia.desktop;
application/x-yaml=nvim_nvim.desktop;org.kde.kwrite.desktop;org.kde.kate.desktop;
application/x-zerosize=Neovim.desktop;
application/zip=org.kde.ark.desktop;
text/markdown=nvim_nvim.desktop;org.kde.kwrite.desktop;org.kde.kate.desktop;
text/plain=nvim_nvim.desktop;org.kde.kwrite.desktop;org.kde.kate.desktop;com.vscodium.codium.desktop;
text/rust=neovide.desktop;
x-scheme-handler/http=app.zen_browser.zen.desktop;
x-scheme-handler/https=app.zen_browser.zen.desktop;
text/x-cmake=nvim_nvim.desktop;org.kde.kwrite.desktop;org.kde.kate.desktop;
x-scheme-handler/http=librewolf.desktop;app.zen_browser.zen.desktop;
x-scheme-handler/https=librewolf.desktop;app.zen_browser.zen.desktop;
x-scheme-handler/nxm=io.github.limo_app.limo.desktop;
[Default Applications]
application/json=nvim_nvim.desktop;
application/vnd.debian.binary-package=org.kde.discover.desktop;
application/vnd.microsoft.portable-executable=com.usebottles.bottles.desktop;
application/x-blender=Blender.desktop;
application/x-docbook+xml=nvim_nvim.desktop;
application/x-msdownload=com.usebottles.bottles.desktop;
application/x-msi=com.usebottles.bottles.desktop;
application/x-nes-rom=nestopia.desktop;
application/x-yaml=nvim_nvim.desktop;
application/x-zerosize=Neovim.desktop;
application/zip=org.kde.ark.desktop;
text/markdown=nvim_nvim.desktop;
text/plain=nvim_nvim.desktop;
text/rust=neovide.desktop;
text/x-cmake=nvim_nvim.desktop;
x-scheme-handler/betterdiscord=discord.desktop
x-scheme-handler/discord-1361252452329848892=discord-1361252452329848892.desktop
x-scheme-handler/http=app.zen_browser.zen.desktop;
x-scheme-handler/https=app.zen_browser.zen.desktop;
x-scheme-handler/http=librewolf.desktop;
x-scheme-handler/https=librewolf.desktop;
x-scheme-handler/nxm=modorganizer2-nxm-handler.desktop
+9 -6
View File
@@ -3,18 +3,19 @@ vim.g.mapleader = '<space>'
vim.o.number = true
vim.o.relativenumber = false
vim.o.termguicolors = true
vim.o.background = light
vim.o.background = "light"
vim.o.background = "dark"
vim.o.wrap = true
vim.o.tabstop = 4
vim.o.shiftwidth = 4
vim.o.clipboard = 'unnamedplus'
vim.o.clipboard = 'unnamed'
vim.o.mouse = 'a'
vim.o.ignorecase = true
vim.o.smartcase = true
vim.o.smartindent = false
vim.o.undofile = true
vim.o.swapfile = true
vim.o.autochdir = false
vim.o.autochdir = true
vim.o.scrolloff = 15
--vim.o.winborder = "solid"
vim.o.cursorline = true
@@ -32,11 +33,13 @@ vim.api.nvim_set_hl(0, 'Pmenu', { bg = 'none' })
--Neovide Options
vim.o.guifont = "CaskaydiaMono Nerd Font:h18"
vim.g.neovide_window_blurred = false
vim.g.neovide_opacity = 1.0
vim.g.neovide_window_blurred = true
vim.g.neovide_opacity = 0.7
vim.g.neovide_normal_opacity = 1.0
vim.g.neovide_background_color = "orange"
vim.g.neovide_cursor_animation_length = 0.08
if vim.g.neovide then
vim.o.background = 'dark'
end
-- Autocompletion
vim.diagnostic.config({ virtual_text = { current_line = true } })
+31 -29
View File
@@ -1,40 +1,42 @@
{
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"alpha-nvim": { "branch": "main", "commit": "a35468cd72645dbd52c0624ceead5f301c566dff" },
"alpha-nvim": { "branch": "main", "commit": "3979b01cb05734331c7873049001d3f2bb8477f4" },
"base16-nvim": { "branch": "master", "commit": "5f140bdbb07c0767f0785c71407330c8c96e9bcf" },
"blink-cmp-spell": { "branch": "master", "commit": "2bd0e0d5e7735c047e72b6918a0458f3e8fadaba" },
"blink.cmp": { "branch": "main", "commit": "022521a8910a5543b0251b21c9e1a1e989745796" },
"everforest-nvim": { "branch": "main", "commit": "2eb7c348f880ba93de4d98cae049c9441f5d4d49" },
"blink.cmp": { "branch": "main", "commit": "b19413d214068f316c78978b08264ed1c41830ec" },
"everforest-nvim": { "branch": "main", "commit": "557bce922401e247a596583679bc181d4d688554" },
"focus.nvim": { "branch": "main", "commit": "0f51cb7ff2640737858249015b6af0ea6cb28904" },
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
"fzf-lua": { "branch": "main", "commit": "ce5a5fa2902933e7b4563ca78210254169463cb6" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
"fzf-lua": { "branch": "main", "commit": "d59f857c76eb474ec00debcf043f14fd001805cc" },
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
"lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
"live-preview.nvim": { "branch": "main", "commit": "35ddc5a99499d1d2f4adefb7e92d0c537353fdec" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" },
"live-preview.nvim": { "branch": "main", "commit": "f056b4b859d54595afce53e67129f7684380d3ba" },
"lualine-macro-recording.nvim": { "branch": "main", "commit": "e2dcf63ba74e6111b53e1520a4f8a17a3d7427a1" },
"lualine.nvim": { "branch": "master", "commit": "0c6cca9f2c63dadeb9225c45bc92bb95a151d4af" },
"mason.nvim": { "branch": "main", "commit": "8024d64e1330b86044fed4c8494ef3dcd483a67c" },
"maximizer.nvim": { "branch": "main", "commit": "8e2e71ce705400b10ef02a25ef2528bb078514a2" },
"mini.icons": { "branch": "main", "commit": "397ed3807e96b59709ef3292f0a3e253d5c1dc0a" },
"mini.pick": { "branch": "main", "commit": "be6490ae9d7038b9f5185d95a8060054f9b23666" },
"mini.surround": { "branch": "main", "commit": "88c52297ed3e69ecf9f8652837888ecc727a28ee" },
"noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" },
"nui.nvim": { "branch": "main", "commit": "7cd18e73cfbd70e1546931b7268b3eebaeff9391" },
"nvim-autopairs": { "branch": "master", "commit": "4d74e75913832866aa7de35e4202463ddf6efd1b" },
"nvim-lint": { "branch": "master", "commit": "cc26ae6a620298bb3f33b0e0681f99a10ae57781" },
"nvim-lspconfig": { "branch": "master", "commit": "a182334ba933e58240c2c45e6ae2d9c7ae313e00" },
"lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
"mason.nvim": { "branch": "main", "commit": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65" },
"maximizer.nvim": { "branch": "main", "commit": "d565201bae4b6ca4328ecd693b21b77132bfe02f" },
"mini.icons": { "branch": "main", "commit": "efc85e42262cd0c9e1fdbf806c25cb0be6de115c" },
"mini.pick": { "branch": "main", "commit": "7c0a674f620ddc701903b887b2dade836b23ea79" },
"mini.surround": { "branch": "main", "commit": "f9358544ed06bc10197e698b7fc8dc5963be3f4b" },
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-autopairs": { "branch": "master", "commit": "c2a0dd0d931d0fb07665e1fedb1ea688da3b80b4" },
"nvim-lint": { "branch": "master", "commit": "ca6ea12daf0a4d92dc24c5c9ae22a1f0418ade37" },
"nvim-lspconfig": { "branch": "master", "commit": "4044b8544a6cea57179d5a29c203b6b65d2b6ac4" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" },
"nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" },
"oil.nvim": { "branch": "master", "commit": "08c2bce8b00fd780fb7999dbffdf7cd174e896fb" },
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
"nvim-ts-autotag": { "branch": "main", "commit": "db15f2e0df2f5db916e511e3fffb682ef2f6354f" },
"nvim-web-devicons": { "branch": "master", "commit": "803353450c374192393f5387b6a0176d0972b848" },
"oil.nvim": { "branch": "master", "commit": "f55b25e493a7df76371cfadd0ded5004cb9cd48a" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"project-cli-commands.nvim": { "branch": "main", "commit": "9a2a2fdfd38a3d71cc927e3a398ac0ddfa846b3d" },
"snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" },
"solarized.nvim": { "branch": "main", "commit": "c0dfe1cbfabd93b546baf5f1408f5df7e02e2050" },
"telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" },
"telescope.nvim": { "branch": "master", "commit": "ad7d9580338354ccc136e5b8f0aa4f880434dcdc" },
"toggleterm.nvim": { "branch": "main", "commit": "9a88eae817ef395952e08650b3283726786fb5fb" },
"tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" },
"twilight.nvim": { "branch": "main", "commit": "1584c0b0a979b71fd86b18d302ba84e9aba85b1b" },
"tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" },
"twilight.nvim": { "branch": "main", "commit": "664e752f4a219801265cc3fc18782b457b58c1e1" },
"vim-illuminate": { "branch": "master", "commit": "0d1e93684da00ab7c057410fecfc24f434698898" },
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" },
"yazi.nvim": { "branch": "main", "commit": "e2ddbaa88ec61d0b96e3d53ba851b0e7a0b36f14" }
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" },
"yazi.nvim": { "branch": "main", "commit": "8992f08270a008ab7638ccfb0cf07bb6e9e69f5e" }
}
+1 -1
View File
@@ -31,5 +31,5 @@ require("lazy").setup({
-- colorscheme that will be used when installing plugins.
install = { colorscheme = { "habamax" } },
-- automatically check for plugin updates
checker = { enabled = true },
checker = { enabled = true, notify = false },
})
+35 -13
View File
@@ -5,27 +5,49 @@ return {
'nvim-lua/plenary.nvim',
"nvim-telescope/telescope.nvim"
},
-- dashboard.section.header.val = {
-- " ",
-- " ███████████ █████ ██",
-- " ███████████ █████ ",
-- " ████████████████ ███████████ ███ ███████",
-- " ████████████████ ████████████ █████ ██████████████",
-- " █████████████████████████████ █████ █████ ████ █████",
-- " ██████████████████████████████████ █████ █████ ████ █████",
-- " ██████ ███ █████████████████ ████ █████ █████ ████ ██████",
-- " ██████ ██ ███████████████ ██ █████████████████"
-- }
config = function ()
-- local alpha = require("alpha")
-- local theta = require("alpha.themes.theta")
-- theta.header.val = {
-- "▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄",
-- "██ ▀██ ██ ▄▄▄██ ▄▄▄ ██ ███ █▄ ▄██ ▄▀▄ ██",
-- "██ █ █ ██ ▄▄▄██ ███ ███ █ ███ ███ █ █ ██",
-- "██ ██▄ ██ ▀▀▀██ ▀▀▀ ███▄▀▄██▀ ▀██ ███ ██",
-- "▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀"
-- }
-- theta.header.opts.hl = "Red"
-- alpha.setup(theta.config)
local alpha = require("alpha")
local dashboard = require("alpha.themes.dashboard")
dashboard.section.header.val = {
" ",
" ███╗ █████████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ",
" ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████ ████║ ",
" ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔██████",
" ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ",
" ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ",
" ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ",
" ",
"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄",
"██ ▀██ ██ ▄▄▄██ ▄▄▄ ██ ███ █▄ ▄██ ▄▀▄ ██",
"██ █ █ ██ ▄▄▄██ ███ ███ █ ███ ███ ███",
"██ ██▄ ██ ▀▀▀██ ▀▀▀ ███▄▀▄██▀ ▀██ ███ ██",
"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀"
}
dashboard.section.header.opts.hl = "Red"
dashboard.section.buttons.val = {
dashboard.button( "e", " > New file" , ":ene <BAR> startinsert <CR>"),
dashboard.button( "f", " > Find file", ":cd $HOME | Telescope find_files<CR>"),
dashboard.button( "r", " > Recent" , ":Telescope oldfiles<CR>"),
dashboard.button( "s", " > Settings" , ":e $MYVIMRC | :cd %:p:h<CR>"),
dashboard.button( "q", " > Quit NVIM", ":qa<CR>"),
dashboard.button("<A-o>", "󰊄 Recent files"),
dashboard.button("e", " New file", "<cmd>ene <CR>"),
dashboard.button(",", "󰈞 Find file"),
dashboard.button("Alt-,", "󰈬 Find word"),
}
alpha.setup(dashboard.opts)
end
+91
View File
@@ -0,0 +1,91 @@
return {
{
"RRethy/base16-nvim",
priority = 1000,
config = function()
require('base16-colorscheme').setup({
base00 = '#141218',
base01 = '#141218',
base02 = '#5c6370',
base03 = '#5c6370',
base04 = '#abb2bf',
base05 = '#ffffff',
base06 = '#ffffff',
base07 = '#ffffff',
base08 = '#e06a5f',
base09 = '#e06a5f',
base0A = '#dfc9ff',
base0B = '#86e08b',
base0C = '#8b6ab5',
base0D = '#dfc9ff',
base0E = '#7c6acd',
base0F = '#7c6acd',
})
vim.api.nvim_set_hl(0, 'Visual', {
bg = '#5c6370',
fg = '#ffffff',
bold = true
})
vim.api.nvim_set_hl(0, 'Statusline', {
bg = '#dfc9ff',
fg = '#141218',
})
vim.api.nvim_set_hl(0, 'LineNr', { fg = '#5c6370' })
vim.api.nvim_set_hl(0, 'CursorLineNr', { fg = '#8b6ab5', bold = true })
vim.api.nvim_set_hl(0, 'Statement', {
fg = '#7c6acd',
bold = true
})
vim.api.nvim_set_hl(0, 'Keyword', { link = 'Statement' })
vim.api.nvim_set_hl(0, 'Repeat', { link = 'Statement' })
vim.api.nvim_set_hl(0, 'Conditional', { link = 'Statement' })
vim.api.nvim_set_hl(0, 'Function', {
fg = '#dfc9ff',
bold = true
})
vim.api.nvim_set_hl(0, 'Macro', {
fg = '#dfc9ff',
italic = true
})
vim.api.nvim_set_hl(0, '@function.macro', { link = 'Macro' })
vim.api.nvim_set_hl(0, 'Type', {
fg = '#8b6ab5',
bold = true,
italic = true
})
vim.api.nvim_set_hl(0, 'Structure', { link = 'Type' })
vim.api.nvim_set_hl(0, 'String', {
fg = '#86e08b',
italic = true
})
vim.api.nvim_set_hl(0, 'Operator', { fg = '#abb2bf' })
vim.api.nvim_set_hl(0, 'Delimiter', { fg = '#abb2bf' })
vim.api.nvim_set_hl(0, '@punctuation.bracket', { link = 'Delimiter' })
vim.api.nvim_set_hl(0, '@punctuation.delimiter', { link = 'Delimiter' })
vim.api.nvim_set_hl(0, 'Comment', {
fg = '#5c6370',
italic = true
})
local current_file_path = vim.fn.stdpath("config") .. "/lua/plugins/dankcolors.lua"
if not _G._matugen_theme_watcher then
local uv = vim.uv or vim.loop
_G._matugen_theme_watcher = uv.new_fs_event()
_G._matugen_theme_watcher:start(current_file_path, {}, vim.schedule_wrap(function()
local new_spec = dofile(current_file_path)
if new_spec and new_spec[1] and new_spec[1].config then
new_spec[1].config()
print("Theme reload")
end
end))
end
end
}
}

Some files were not shown because too many files have changed in this diff Show More