update
@@ -1,2 +1,2 @@
|
|||||||
[UserFeedback]
|
[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)
|
||||||
|
|||||||
@@ -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,2 +1,2 @@
|
|||||||
[Global]
|
[Global]
|
||||||
LastNotificationTime=2025,12,16,22,11,34.91,UTC
|
LastNotificationTime=2026,2,7,23,52,37.581,UTC
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ alias gpu="inxi -Gxz"
|
|||||||
alias box="SHELL=/usr/bin/fish toolbox enter"
|
alias box="SHELL=/usr/bin/fish toolbox enter"
|
||||||
alias reload="clear; source ~/.config/fish/config.fish"
|
alias reload="clear; source ~/.config/fish/config.fish"
|
||||||
alias exe="chmod +x"
|
alias exe="chmod +x"
|
||||||
|
alias py="python3"
|
||||||
|
|
||||||
# Directory Shortcuts
|
# Directory Shortcuts
|
||||||
alias gosteam="cd ~/.local/share/Steam/steamapps/common/"
|
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 aliasconf="nvim ~/dotfiles/.config/aliases"
|
||||||
alias fishconf="nvim ~/dotfiles/.config/fish/config.fish"
|
alias fishconf="nvim ~/dotfiles/.config/fish/config.fish"
|
||||||
alias nvimconf="nvim ~/dotfiles/.config/nvim/init.lua"
|
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
|
# Toolbox Commands
|
||||||
alias in="sudo nala install -y"
|
alias in="sudo nala install -y"
|
||||||
@@ -30,4 +33,5 @@ alias up="sudo nala update"
|
|||||||
alias upg="up && sudo nala upgrade"
|
alias upg="up && sudo nala upgrade"
|
||||||
alias se="nala search"
|
alias se="nala search"
|
||||||
alias re="sudo nala remove"
|
alias re="sudo nala remove"
|
||||||
|
alias purge="sudo nala purge"
|
||||||
alias rein="sudo nala reinstall"
|
alias rein="sudo nala reinstall"
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -1,3 +1,6 @@
|
|||||||
|
[ContextMenu]
|
||||||
|
ShowAddToPlaces=false
|
||||||
|
|
||||||
[General]
|
[General]
|
||||||
Version=202
|
Version=202
|
||||||
ViewPropsTimestamp=2025,11,25,17,7,8.294
|
ViewPropsTimestamp=2025,11,25,17,7,8.294
|
||||||
@@ -8,3 +11,9 @@ Places Icons Static Size=22
|
|||||||
|
|
||||||
[MainWindow]
|
[MainWindow]
|
||||||
MenuBar=Disabled
|
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
|
||||||
|
|||||||
@@ -1,11 +1,19 @@
|
|||||||
[EmbedSettings]
|
[EmbedSettings]
|
||||||
|
embed-application/json=false
|
||||||
embed-application/vnd.debian.binary-package=false
|
embed-application/vnd.debian.binary-package=false
|
||||||
embed-application/vnd.microsoft.portable-executable=false
|
embed-application/vnd.microsoft.portable-executable=false
|
||||||
embed-application/x-blender=false
|
embed-application/x-blender=false
|
||||||
|
embed-application/x-docbook+xml=false
|
||||||
embed-application/x-msdownload=false
|
embed-application/x-msdownload=false
|
||||||
embed-application/x-msi=false
|
embed-application/x-msi=false
|
||||||
embed-application/x-nes-rom=false
|
embed-application/x-nes-rom=false
|
||||||
|
embed-application/x-yaml=false
|
||||||
|
embed-application/x-zerosize=false
|
||||||
embed-application/zip=false
|
embed-application/zip=false
|
||||||
|
embed-text/markdown=false
|
||||||
|
embed-text/plain=false
|
||||||
embed-text/rust=false
|
embed-text/rust=false
|
||||||
|
embed-text/x-cmake=false
|
||||||
embed-x-scheme-handler/http=false
|
embed-x-scheme-handler/http=false
|
||||||
embed-x-scheme-handler/https=false
|
embed-x-scheme-handler/https=false
|
||||||
|
embed-x-scheme-handler/nxm=false
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ if status is-interactive
|
|||||||
end
|
end
|
||||||
|
|
||||||
fish_add_path ~/.spicetify
|
fish_add_path ~/.spicetify
|
||||||
fish_add_path ~/.bin
|
fish_add_path ~/Scripts/
|
||||||
|
|
||||||
# Created by `pipx` on 2025-12-14 01:29:13
|
# Created by `pipx` on 2025-12-14 01:29:13
|
||||||
set PATH $PATH /home/cory/.local/bin
|
set PATH $PATH /home/cory/.local/bin
|
||||||
|
|||||||
@@ -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_prefix:normal\x1e\x2d\x2dbold\x1e\x2d\x2dunderline
|
||||||
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
|
SETUVAR fish_pager_color_progress:brwhite\x1e\x2d\x2dbackground\x3dcyan
|
||||||
SETUVAR fish_pager_color_selected_background:\x2dr
|
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
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 790 KiB |
|
After Width: | Height: | Size: 987 KiB |
|
After Width: | Height: | Size: 1003 KiB |
|
After Width: | Height: | Size: 5.1 MiB |
|
After Width: | Height: | Size: 610 KiB |
|
After Width: | Height: | Size: 304 KiB |
|
After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 359 KiB |
|
After Width: | Height: | Size: 608 KiB |
|
After Width: | Height: | Size: 892 KiB |
|
After Width: | Height: | Size: 6.6 MiB |
@@ -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);
|
||||||
|
}
|
||||||
@@ -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,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"
|
include "/usr/share/themes/Breeze/gtk-2.0/gtkrc"
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
gtk-alternative-button-order = 1
|
||||||
|
|||||||
@@ -1,22 +1,33 @@
|
|||||||
[General]
|
[General]
|
||||||
LastUsedVersion=210800
|
LastUsedVersion=210800
|
||||||
|
SideBarPage=operations
|
||||||
|
|
||||||
[MainWindow]
|
[MainWindow]
|
||||||
MenuBar=Disabled
|
MenuBar=Disabled
|
||||||
|
|
||||||
[Recent Files]
|
[Recent Files]
|
||||||
File1[$e]=$HOME/.local/share/Steam/steamapps/common/Half-Life/valve/models/player/gordon/gordon.bmp
|
File1[$e]=$HOME/Downloads/TG-63-19-1.jpg
|
||||||
File2[$e]=$HOME/Downloads/IMG_2205.jpg
|
File10[$e]=$HOME/Downloads/download20260101180443.png
|
||||||
File3[$e]=$HOME/Documents/krita/dbd2025/dbd2025.png
|
File2[$e]=$HOME/Documents/Krita/mbd2026/mbd2026.png
|
||||||
File4[$e]=$HOME/Documents/Blender/paper-boat.png
|
File3[$e]=$HOME/Desktop/Ubunchu/cover.jpg
|
||||||
File5[$e]=mtp:/HD1901/Internal shared storage/DCIM/Snapchat/Snapchat-1004382467.mp4
|
File4[$e]=$HOME/Pictures/Endfield/ENDFIELD_SHARE_1769117324.png
|
||||||
File6[$e]=$HOME/Desktop/phone-backup/Pictures/.gs_fs0/.5.jpg
|
File5[$e]=$HOME/Desktop/preview.gif
|
||||||
Name1[$e]=gordon.bmp
|
File6[$e]=$HOME/Desktop/wp5746605.jpg
|
||||||
Name2[$e]=IMG_2205.jpg
|
File7[$e]=$HOME/Desktop/2601189.jpg
|
||||||
Name3[$e]=dbd2025.png
|
File8[$e]=$HOME/Desktop/wp8254196-yellow-clouds-wallpapers.jpg
|
||||||
Name4[$e]=paper-boat.png
|
File9[$e]=$HOME/Downloads/download20260101171035.png
|
||||||
Name5[$e]=Snapchat-1004382467.mp4
|
Name1[$e]=TG-63-19-1.jpg
|
||||||
Name6[$e]=.5.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]
|
[SideBar]
|
||||||
InformationSplitterSizes=211,244
|
InformationSplitterSizes=220,255
|
||||||
|
IsVisible ViewMode=true
|
||||||
|
SideBarSplitterSizes=213,610
|
||||||
|
|||||||
@@ -3,3 +3,15 @@ ordering=preferred://browser,applications:systemsettings.desktop,applications:or
|
|||||||
|
|
||||||
[Favorites-org.kde.plasma.kickoff.favorites.instance-3-global]
|
[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
|
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
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
[activities]
|
[activities]
|
||||||
|
18f515e7-cf8b-4327-80ee-9f74afa20678=Work
|
||||||
dc7cfc1e-da2d-4ff2-977f-a1a4449080f6=Default
|
dc7cfc1e-da2d-4ff2-977f-a1a4449080f6=Default
|
||||||
|
|
||||||
|
[activities-icons]
|
||||||
|
18f515e7-cf8b-4327-80ee-9f74afa20678=preferences-system-network-ldap
|
||||||
|
|
||||||
[main]
|
[main]
|
||||||
currentActivity=dc7cfc1e-da2d-4ff2-977f-a1a4449080f6
|
currentActivity=dc7cfc1e-da2d-4ff2-977f-a1a4449080f6
|
||||||
|
|||||||
@@ -1,7 +1,14 @@
|
|||||||
|
[BuildConfig]
|
||||||
|
AllowedCommandLines=
|
||||||
|
AutoSwitchToOutput=true
|
||||||
|
BlockedCommandLines=
|
||||||
|
ShowBuildProgress=false
|
||||||
|
UseDiagnosticsOutput=true
|
||||||
|
|
||||||
[General]
|
[General]
|
||||||
Allow Tab Scrolling=true
|
Allow Tab Scrolling=true
|
||||||
Auto Hide Tabs=false
|
Auto Hide Tabs=false
|
||||||
Close After Last=false
|
Close After Last=true
|
||||||
Close documents with window=true
|
Close documents with window=true
|
||||||
Cycle To First Tab=true
|
Cycle To First Tab=true
|
||||||
Days Meta Infos=30
|
Days Meta Infos=30
|
||||||
@@ -17,6 +24,8 @@ Mouse forward button action=0
|
|||||||
Open New Tab To The Right Of Current=false
|
Open New Tab To The Right Of Current=false
|
||||||
Output History Limit=100
|
Output History Limit=100
|
||||||
Output With Date=false
|
Output With Date=false
|
||||||
|
Quickopen Filter Mode=0
|
||||||
|
Quickopen List Mode=true
|
||||||
Recent File List Entry Count=10
|
Recent File List Entry Count=10
|
||||||
Restore Window Configuration=true
|
Restore Window Configuration=true
|
||||||
SDI Mode=false
|
SDI Mode=false
|
||||||
@@ -26,7 +35,7 @@ Show Menu Bar=true
|
|||||||
Show Status Bar=true
|
Show Status Bar=true
|
||||||
Show Symbol In Navigation Bar=true
|
Show Symbol In Navigation Bar=true
|
||||||
Show Tab Bar=true
|
Show Tab Bar=true
|
||||||
Show Tabs Close Button=true
|
Show Tabs Close Button=false
|
||||||
Show Url Nav Bar=true
|
Show Url Nav Bar=true
|
||||||
Show output view for message type=1
|
Show output view for message type=1
|
||||||
Show text for left and right sidebar=false
|
Show text for left and right sidebar=false
|
||||||
@@ -83,8 +92,8 @@ Word Wrap Column=80
|
|||||||
|
|
||||||
[KTextEditor Renderer]
|
[KTextEditor Renderer]
|
||||||
Animate Bracket Matching=false
|
Animate Bracket Matching=false
|
||||||
Auto Color Theme Selection=true
|
Auto Color Theme Selection=false
|
||||||
Color Theme=Breeze Light
|
Color Theme=gruvbox Light
|
||||||
Line Height Multiplier=1
|
Line Height Multiplier=1
|
||||||
Show Indentation Lines=false
|
Show Indentation Lines=false
|
||||||
Show Whole Bracket Expression=false
|
Show Whole Bracket Expression=false
|
||||||
@@ -148,7 +157,7 @@ Smart Copy Cut=true
|
|||||||
Statusbar Line Column Compact Mode=true
|
Statusbar Line Column Compact Mode=true
|
||||||
Text Drag And Drop=true
|
Text Drag And Drop=true
|
||||||
User Sets Of Chars To Enclose Selection=
|
User Sets Of Chars To Enclose Selection=
|
||||||
Vi Input Mode Steal Keys=false
|
Vi Input Mode Steal Keys=true
|
||||||
Vi Relative Line Numbers=false
|
Vi Relative Line Numbers=false
|
||||||
Word Completion=true
|
Word Completion=true
|
||||||
Word Completion Minimal Word Length=3
|
Word Completion Minimal Word Length=3
|
||||||
@@ -163,8 +172,16 @@ RunPrefix=
|
|||||||
SetEditor=false
|
SetEditor=false
|
||||||
|
|
||||||
[MainWindow]
|
[MainWindow]
|
||||||
2560x1440 screen: Height=601
|
2560x1440 screen: Height=912
|
||||||
2560x1440 screen: Width=759
|
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]
|
[filetree]
|
||||||
editShade=48,203,229
|
editShade=48,203,229
|
||||||
@@ -178,7 +195,7 @@ sortRole=0
|
|||||||
viewShade=162,201,252
|
viewShade=162,201,252
|
||||||
|
|
||||||
[lspclient]
|
[lspclient]
|
||||||
AllowedServerCommandLines=
|
AllowedServerCommandLines=/snap/bin/marksman server,/usr/bin/rust-analyzer
|
||||||
AutoHover=true
|
AutoHover=true
|
||||||
AutoImport=true
|
AutoImport=true
|
||||||
BlockedServerCommandLines=
|
BlockedServerCommandLines=
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ Map Leader=\\
|
|||||||
Normal Mode Mapping Keys=
|
Normal Mode Mapping Keys=
|
||||||
Normal Mode Mappings=
|
Normal Mode Mappings=
|
||||||
Normal Mode Mappings Recursion=
|
Normal Mode Mappings Recursion=
|
||||||
ViRegisterContents=something Im curious about or looking forward to\n\n,o,
|
ViRegisterContents=,,
|
||||||
ViRegisterFlags=1,0,0
|
ViRegisterFlags=0,0,0
|
||||||
ViRegisterNames=",-,^
|
ViRegisterNames=",-,^
|
||||||
Visual Mode Mapping Keys=
|
Visual Mode Mapping Keys=
|
||||||
Visual Mode Mappings=
|
Visual Mode Mappings=
|
||||||
|
|||||||
@@ -26,5 +26,6 @@ dataSourceCommonSettings\activeState=true
|
|||||||
dataSourceCommonSettings\activeState=true
|
dataSourceCommonSettings\activeState=true
|
||||||
|
|
||||||
[UserFeedback]
|
[UserFeedback]
|
||||||
ApplicationStartCount=40
|
ApplicationStartCount=143
|
||||||
ApplicationTime=39717
|
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
|
dataSourceCommonSettings\activeState=true
|
||||||
|
|
||||||
[UserFeedback]
|
[UserFeedback]
|
||||||
ApplicationStartCount=52
|
ApplicationStartCount=367
|
||||||
ApplicationTime=120089
|
ApplicationTime=1033838
|
||||||
|
|||||||
@@ -17,5 +17,5 @@ dataSourceCommonSettings\activeState=true
|
|||||||
dataSourceCommonSettings\activeState=true
|
dataSourceCommonSettings\activeState=true
|
||||||
|
|
||||||
[UserFeedback]
|
[UserFeedback]
|
||||||
ApplicationStartCount=12
|
ApplicationStartCount=78
|
||||||
ApplicationTime=14164
|
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
|
dataSourceCommonSettings\activeState=true
|
||||||
|
|
||||||
[UserFeedback]
|
[UserFeedback]
|
||||||
ApplicationStartCount=10
|
ApplicationStartCount=113
|
||||||
ApplicationTime=265163
|
ApplicationTime=2352883
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
[General]
|
[General]
|
||||||
keyAlgorithm=EC
|
keyAlgorithm=EC
|
||||||
name=fedora
|
name=kubuntu
|
||||||
|
|||||||
@@ -1,11 +1,5 @@
|
|||||||
[67985dbaf5484787a8f69626d4f8b113]
|
[48596f5997c34d2db1af4e7c7c1ae4ab]
|
||||||
certificate=-----BEGIN CERTIFICATE-----\nMIIBizCCATGgAwIBAgIBATAKBggqhkjOPQQDBDBPMSkwJwYDVQQDDCA2Nzk4NWRi\nYWY1NDg0Nzg3YThmNjk2MjZkNGY4YjExMzEUMBIGA1UECwwLS0RFIENvbm5lY3Qx\nDDAKBgNVBAoMA0tERTAeFw0yNDEyMTUwNjAwMDBaFw0zNTEyMTUwNjAwMDBaME8x\nKTAnBgNVBAMMIDY3OTg1ZGJhZjU0ODQ3ODdhOGY2OTYyNmQ0ZjhiMTEzMRQwEgYD\nVQQLDAtLREUgQ29ubmVjdDEMMAoGA1UECgwDS0RFMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAE/rbwC0RnwSFOl0BKPVJEkx4rJHT9h/ih5I8ZGze9kMwB64H7fS95\nIiQd+XNpbaorAp1l1sRJOffRP31aKOi7+zAKBggqhkjOPQQDBANIADBFAiEAi6ae\ngHauXc5pfTXhEj9QQHgI2f+vlO3OMFdjzhV+uD8CIAXtndsCQ+512VbXEkUa4kzR\nCyiLOI1Vg+LIkrOpvg7G\n-----END CERTIFICATE-----\n
|
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
|
|
||||||
|
|
||||||
[eb546ffd_efc1_48f1_929c_a3b2d918522c]
|
|
||||||
certificate="-----BEGIN CERTIFICATE-----\nMIIBkjCCATmgAwIBAgIBATAKBggqhkjOPQQDBDBTMS0wKwYDVQQDDCRlYjU0NmZm\nZF9lZmMxXzQ4ZjFfOTI5Y19hM2IyZDkxODUyMmMxFDASBgNVBAsMC0tERSBDb25u\nZWN0MQwwCgYDVQQKDANLREUwHhcNMjMxMjA1MDYwMDAwWhcNMzQxMjA1MDYwMDAw\nWjBTMS0wKwYDVQQDDCRlYjU0NmZmZF9lZmMxXzQ4ZjFfOTI5Y19hM2IyZDkxODUy\nMmMxFDASBgNVBAsMC0tERSBDb25uZWN0MQwwCgYDVQQKDANLREUwWTATBgcqhkjO\nPQIBBggqhkjOPQMBBwNCAAQop70yLtqkhYvdpvfo7jDibnO3gfSuj9CXZDpLc0i0\niC36+aMnSSeT7iRWTFxu1nyvWaHPWjJ2N7kwpvTHdANRMAoGCCqGSM49BAMEA0cA\nMEQCIB5aczt2NA5Dy9W6fWym4eJ/OLAB5BQFvD7Oa0OmwZcDAiBLHdcXA9iqEFwG\nDTKzrnh+koKomXCHooGkbbjdpmfMUA==\n-----END CERTIFICATE-----\n"
|
|
||||||
name=OnePlus 7T
|
name=OnePlus 7T
|
||||||
protocolVersion=8
|
protocolVersion=8
|
||||||
type=phone
|
type=phone
|
||||||
|
|||||||
@@ -1,2 +1,5 @@
|
|||||||
|
[Module-browserintegrationreminder]
|
||||||
|
autoload=false
|
||||||
|
|
||||||
[Module-device_automounter]
|
[Module-device_automounter]
|
||||||
autoload=false
|
autoload=false
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
[General]
|
[General]
|
||||||
ColorScheme=LeafLight
|
ColorScheme=BreezeDark
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
Theme=breeze
|
Theme=breeze-dark
|
||||||
|
|
||||||
[KDE]
|
[KDE]
|
||||||
widgetStyle=Breeze
|
widgetStyle=Breeze
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
[KSplash]
|
[KSplash]
|
||||||
Engine=KSplashQML
|
Engine=KSplashQML
|
||||||
Theme=org.kde.breeze.desktop
|
Theme=org.kde.breezedark.desktop
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
org.kde.breeze.desktop
|
org.kde.breezedark.desktop
|
||||||
@@ -44,10 +44,37 @@ ForegroundInactive=166,172,186
|
|||||||
ForegroundLink=0,149,179
|
ForegroundLink=0,149,179
|
||||||
ForegroundNegative=218,68,83
|
ForegroundNegative=218,68,83
|
||||||
ForegroundNeutral=255,255,127
|
ForegroundNeutral=255,255,127
|
||||||
|
ForegroundNormal[$d]
|
||||||
ForegroundPositive=0,170,127
|
ForegroundPositive=0,170,127
|
||||||
|
ForegroundVisited[$d]
|
||||||
|
|
||||||
[Colors:Header]
|
[Colors:Header]
|
||||||
BackgroundAlternate=211,214,206
|
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]
|
[Colors:Selection]
|
||||||
BackgroundAlternate=128,175,136
|
BackgroundAlternate=128,175,136
|
||||||
@@ -106,21 +133,30 @@ ForegroundPositive=114,155,121
|
|||||||
ForegroundVisited=61,111,171
|
ForegroundVisited=61,111,171
|
||||||
|
|
||||||
[DirSelect Dialog]
|
[DirSelect Dialog]
|
||||||
DirSelectDialog Size=1280,720
|
DirSelectDialog Size=1514,975
|
||||||
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
|
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
|
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]
|
[General]
|
||||||
|
AccentColor=0,0,0,0
|
||||||
|
ColorScheme=LeafLight
|
||||||
ColorSchemeHash=3c1fe2294ac4de052dbb549c48aa4c026ce1610c
|
ColorSchemeHash=3c1fe2294ac4de052dbb549c48aa4c026ce1610c
|
||||||
|
LastUsedCustomAccentColor=61,174,233
|
||||||
UseSystemBell=true
|
UseSystemBell=true
|
||||||
|
accentColorFromWallpaper=false
|
||||||
|
|
||||||
|
[Icons]
|
||||||
|
Theme=breeze
|
||||||
|
|
||||||
[KDE]
|
[KDE]
|
||||||
LookAndFeelPackage=org.kde.breeze.desktop
|
LookAndFeelPackage=org.kde.breezedark.desktop
|
||||||
|
ShowDeleteCommand=false
|
||||||
|
widgetStyle=Breeze
|
||||||
|
|
||||||
[KFileDialog Settings]
|
[KFileDialog Settings]
|
||||||
Allow Expansion=false
|
Allow Expansion=false
|
||||||
Automatically select filename extension=true
|
Automatically select filename extension=true
|
||||||
Breadcrumb Navigation=true
|
Breadcrumb Navigation=false
|
||||||
Decoration position=2
|
Decoration position=2
|
||||||
LocationCombo Completionmode=5
|
LocationCombo Completionmode=5
|
||||||
PathCombo Completionmode=5
|
PathCombo Completionmode=5
|
||||||
@@ -134,12 +170,16 @@ Sort by=Name
|
|||||||
Sort directories first=true
|
Sort directories first=true
|
||||||
Sort hidden files last=false
|
Sort hidden files last=false
|
||||||
Sort reversed=false
|
Sort reversed=false
|
||||||
Speedbar Width=140
|
Speedbar Width=158
|
||||||
View Style=DetailTree
|
View Style=DetailTree
|
||||||
|
|
||||||
[KShortcutsDialog Settings]
|
[KShortcutsDialog Settings]
|
||||||
Dialog Size=1199,890
|
Dialog Size=1199,890
|
||||||
|
|
||||||
|
[PreviewSettings]
|
||||||
|
EnableRemoteFolderThumbnail=false
|
||||||
|
MaximumRemoteSize=0
|
||||||
|
|
||||||
[WM]
|
[WM]
|
||||||
activeBackground=225,228,220
|
activeBackground=225,228,220
|
||||||
activeBlend=225,228,220
|
activeBlend=225,228,220
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
[ActivityManager]
|
[ActivityManager]
|
||||||
_k_friendly_name=Activity Manager
|
_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"
|
switch-to-activity-dc7cfc1e-da2d-4ff2-977f-a1a4449080f6=none,none,Switch to activity "Default"
|
||||||
|
|
||||||
[KDE Keyboard Layout Switcher]
|
[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
|
Switch to Screen to the Right=none,,Switch to Screen to the Right
|
||||||
Toggle Night Color=none,none,Suspend/Resume Night Light
|
Toggle Night Color=none,none,Suspend/Resume Night Light
|
||||||
Toggle Window Raise/Lower=none,,Toggle Window Raise/Lower
|
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=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 (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
|
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 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 Right=none,,Custom Quick Tile Window to the Right
|
||||||
Window Custom Quick Tile Top=none,,Custom Quick Tile Window to the Top
|
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 Horizontal=none,,Expand Window Horizontally
|
||||||
Window Grow Vertical=none,,Expand Window Vertically
|
Window Grow Vertical=none,,Expand Window Vertically
|
||||||
Window Lower=none,,Lower Window
|
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 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 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 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
|
clear-history=none,,Clear Clipboard History
|
||||||
clipboard_action=Meta+Ctrl+X,Meta+Ctrl+X,Automatic Action Popup Menu
|
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
|
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
|
toggle do not disturb=none,,Toggle do not disturb
|
||||||
|
|
||||||
[services][com.mitchellh.ghostty.desktop]
|
[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]
|
[services][net.local.disconnect-xboxcon.sh.desktop]
|
||||||
_launch=Meta+Ctrl+Alt+Shift+X
|
_launch=Meta+Ctrl+Alt+Shift+X
|
||||||
@@ -282,3 +290,6 @@ _launch=Meta+Ctrl+Alt+$
|
|||||||
|
|
||||||
[services][net.local.python3.desktop]
|
[services][net.local.python3.desktop]
|
||||||
_launch=Meta+Ctrl+Alt+!
|
_launch=Meta+Ctrl+Alt+!
|
||||||
|
|
||||||
|
[services][org.kde.konsole.desktop]
|
||||||
|
NewWindow=Alt+T
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[Confirmations]
|
[Confirmations]
|
||||||
ConfirmDelete=true
|
ConfirmDelete=true
|
||||||
ConfirmEmptyTrash=true
|
ConfirmEmptyTrash=true
|
||||||
|
ConfirmTrash=false
|
||||||
|
|
||||||
[Executable scripts]
|
[Executable scripts]
|
||||||
behaviourOnLaunch=execute
|
behaviourOnLaunch=execute
|
||||||
|
|||||||
@@ -1,40 +1,40 @@
|
|||||||
# vim:ft=kitty
|
# vim:ft=kitty
|
||||||
## name: Everforest Light Hard
|
## name: Everforest Light Medium
|
||||||
## author: Sainnhe Park
|
## author: Sainnhe Park
|
||||||
## license: MIT
|
## 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
|
## blurb: A green based color scheme designed to be warm and soft
|
||||||
|
|
||||||
foreground #5c6a72
|
foreground #5c6a72
|
||||||
background #fffbef
|
background #fdf6e3
|
||||||
selection_foreground #829181
|
selection_foreground #829181
|
||||||
selection_background #f0f2d4
|
selection_background #eaedc8
|
||||||
|
|
||||||
cursor #5c6a72
|
cursor #5c6a72
|
||||||
cursor_text_color #f8f5e4
|
cursor_text_color #f4f0d9
|
||||||
|
|
||||||
url_color #3a94c5
|
url_color #3a94c5
|
||||||
|
|
||||||
active_border_color #8da101
|
active_border_color #8da101
|
||||||
inactive_border_color #bec5b2
|
inactive_border_color #bdc3af
|
||||||
bell_border_color #f57d26
|
bell_border_color #f57d26
|
||||||
visual_bell_color none
|
visual_bell_color none
|
||||||
|
|
||||||
wayland_titlebar_color system
|
wayland_titlebar_color system
|
||||||
macos_titlebar_color system
|
macos_titlebar_color system
|
||||||
|
|
||||||
active_tab_background #fffbef
|
active_tab_background #fdf6e3
|
||||||
active_tab_foreground #5c6a72
|
active_tab_foreground #5c6a72
|
||||||
inactive_tab_background #f2efdf
|
inactive_tab_background #fdf6e3
|
||||||
inactive_tab_foreground #939f91
|
inactive_tab_foreground #939f91
|
||||||
tab_bar_background #f8f5e4
|
tab_bar_background #fdf6e3
|
||||||
tab_bar_margin_color none
|
tab_bar_margin_color none
|
||||||
|
|
||||||
mark1_foreground #fffbef
|
mark1_foreground #fdf6e3
|
||||||
mark1_background #3a94c5
|
mark1_background #3a94c5
|
||||||
mark2_foreground #fffbef
|
mark2_foreground #fdf6e3
|
||||||
mark2_background #d3c6aa
|
mark2_background #d3c6aa
|
||||||
mark3_foreground #fffbef
|
mark3_foreground #fdf6e3
|
||||||
mark3_background #df69ba
|
mark3_background #df69ba
|
||||||
|
|
||||||
#: black
|
#: black
|
||||||
|
|||||||
@@ -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}]"
|
||||||
@@ -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
|
||||||
@@ -1,17 +1,18 @@
|
|||||||
# vim:fileencoding=utf-8:foldmethod=marker
|
# vim:fileencoding=utf-8:foldmethod=marker
|
||||||
background_opacity 1
|
background_opacity 0.05
|
||||||
|
background_blur 1
|
||||||
font_family CaskaydiaMonoNerdFont
|
font_family CaskaydiaMonoNerdFont
|
||||||
font_size 16
|
font_size 16
|
||||||
shell /usr/bin/fish
|
shell /usr/bin/fish
|
||||||
cursor_trail 3
|
cursor_trail 3
|
||||||
cursor_trail_decay 0.1 0.25
|
cursor_trail_decay 0.1 0.25
|
||||||
dynamic_background_opacity true
|
dynamic_background_opacity true
|
||||||
map f11 kitten focus_mode.py
|
# map f11 kitten focus_mode.py
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# BEGIN_KITTY_THEME
|
# BEGIN_KITTY_THEME
|
||||||
# Everforest Light Hard
|
# Everforest Light Medium
|
||||||
include current-theme.conf
|
include current-theme.conf
|
||||||
# END_KITTY_THEME
|
# END_KITTY_THEME
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,18 @@
|
|||||||
# vim:fileencoding=utf-8:foldmethod=marker
|
# vim:fileencoding=utf-8:foldmethod=marker
|
||||||
background_opacity 0.85
|
background_opacity 0.3
|
||||||
font_size 14
|
background_blur 1
|
||||||
|
font_family CaskaydiaMonoNerdFont
|
||||||
|
font_size 16
|
||||||
shell /usr/bin/fish
|
shell /usr/bin/fish
|
||||||
cursor_trail 3
|
cursor_trail 3
|
||||||
|
cursor_trail_decay 0.1 0.25
|
||||||
|
dynamic_background_opacity true
|
||||||
|
# map f11 kitten focus_mode.py
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# BEGIN_KITTY_THEME
|
# BEGIN_KITTY_THEME
|
||||||
# Everforest Light Medium
|
# Everforest Dark Soft
|
||||||
include current-theme.conf
|
include current-theme.conf
|
||||||
# END_KITTY_THEME
|
# END_KITTY_THEME
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
[General]
|
||||||
|
FreeFloating=true
|
||||||
|
|
||||||
[Plugins]
|
[Plugins]
|
||||||
baloosearchEnabled=false
|
baloosearchEnabled=false
|
||||||
browserhistoryEnabled=false
|
browserhistoryEnabled=false
|
||||||
@@ -16,10 +19,10 @@ krunner_recentdocumentsEnabled=false
|
|||||||
krunner_sessionsEnabled=false
|
krunner_sessionsEnabled=false
|
||||||
krunner_shellEnabled=true
|
krunner_shellEnabled=true
|
||||||
krunner_spellcheckEnabled=false
|
krunner_spellcheckEnabled=false
|
||||||
krunner_webshortcutsEnabled=false
|
krunner_webshortcutsEnabled=true
|
||||||
org.kde.datetimeEnabled=false
|
org.kde.datetimeEnabled=false
|
||||||
unitconverterEnabled=false
|
unitconverterEnabled=false
|
||||||
windowsEnabled=true
|
windowsEnabled=true
|
||||||
|
|
||||||
[Plugins][Favorites]
|
[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
|
||||||
|
|||||||
@@ -3,3 +3,7 @@ Autolock=false
|
|||||||
LockOnResume=false
|
LockOnResume=false
|
||||||
RequirePassword=false
|
RequirePassword=false
|
||||||
Timeout=0
|
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
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
[General]
|
||||||
|
confirmLogout=false
|
||||||
|
|
||||||
[LegacySession: saved at previous logout]
|
[LegacySession: saved at previous logout]
|
||||||
count=0
|
count=0
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
"allowDdcCi": true,
|
"allowDdcCi": true,
|
||||||
"allowSdrSoftwareBrightness": true,
|
"allowSdrSoftwareBrightness": true,
|
||||||
"autoRotation": "InTabletMode",
|
"autoRotation": "InTabletMode",
|
||||||
"brightness": 0.6,
|
"brightness": 1,
|
||||||
"colorPowerTradeoff": "PreferEfficiency",
|
"colorPowerTradeoff": "PreferEfficiency",
|
||||||
"colorProfileSource": "sRGB",
|
"colorProfileSource": "sRGB",
|
||||||
"connectorName": "DP-1",
|
"connectorName": "DP-1",
|
||||||
@@ -25,8 +25,8 @@
|
|||||||
"overscan": 0,
|
"overscan": 0,
|
||||||
"rgbRange": "Automatic",
|
"rgbRange": "Automatic",
|
||||||
"scale": 1,
|
"scale": 1,
|
||||||
"sdrBrightness": 450,
|
"sdrBrightness": 350,
|
||||||
"sdrGamutWideness": 0,
|
"sdrGamutWideness": 0.5,
|
||||||
"transform": "Normal",
|
"transform": "Normal",
|
||||||
"uuid": "65840ce5-c6bf-4108-abe1-899510a19500",
|
"uuid": "65840ce5-c6bf-4108-abe1-899510a19500",
|
||||||
"vrrPolicy": "Automatic",
|
"vrrPolicy": "Automatic",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
[Activities][LastVirtualDesktop]
|
[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]
|
[Desktops]
|
||||||
Id_1=cc557718-d230-4008-b457-5762574b13df
|
Id_1=cc557718-d230-4008-b457-5762574b13df
|
||||||
@@ -12,19 +13,30 @@ Rows=1
|
|||||||
[Effect-fadedesktop]
|
[Effect-fadedesktop]
|
||||||
AnimationDuration=100
|
AnimationDuration=100
|
||||||
|
|
||||||
|
[Effect-kwin6_effect_aura_glow]
|
||||||
|
Duration=400
|
||||||
|
|
||||||
[Effect-overview]
|
[Effect-overview]
|
||||||
BorderActivate=9
|
BorderActivate=9
|
||||||
|
|
||||||
|
[Effect-windowview]
|
||||||
|
BorderActivateAll=7
|
||||||
|
|
||||||
[ElectricBorders]
|
[ElectricBorders]
|
||||||
BottomLeft=ApplicationLauncher
|
BottomLeft=ApplicationLauncher
|
||||||
|
|
||||||
[MouseBindings]
|
|
||||||
CommandAllKey=Alt
|
|
||||||
|
|
||||||
[Plugins]
|
[Plugins]
|
||||||
|
blurEnabled=true
|
||||||
fadedesktopEnabled=true
|
fadedesktopEnabled=true
|
||||||
shakecursorEnabled=false
|
magiclampEnabled=true
|
||||||
slideEnabled=false
|
slideEnabled=false
|
||||||
|
squashEnabled=false
|
||||||
|
|
||||||
|
[TabBox]
|
||||||
|
DesktopMode=0
|
||||||
|
|
||||||
|
[TabBoxAlternative]
|
||||||
|
DesktopMode=0
|
||||||
|
|
||||||
[Tiling]
|
[Tiling]
|
||||||
padding=4
|
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]
|
[Tiling][f4bd76ec-75ca-4ce6-bfdc-a72a1e8178e1][65f001c2-d3c6-4d0c-be1c-d7e2820ac050]
|
||||||
tiles={"layoutDirection":"horizontal","tiles":[{"width":0.25},{"width":0.5},{"width":0.25}]}
|
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]
|
[Windows]
|
||||||
ElectricBorderCooldown=200
|
ElectricBorderCooldown=200
|
||||||
ElectricBorderDelay=0
|
ElectricBorderDelay=0
|
||||||
|
|
||||||
[Xwayland]
|
[Xwayland]
|
||||||
Scale=1
|
Scale=1
|
||||||
|
|
||||||
|
[org.kde.kdecoration2]
|
||||||
|
BorderSize=Normal
|
||||||
|
library=org.kde.breeze
|
||||||
|
theme=Breeze
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ types=1
|
|||||||
wmclass=spotify
|
wmclass=spotify
|
||||||
wmclassmatch=1
|
wmclassmatch=1
|
||||||
|
|
||||||
|
[2739d8d4-b20f-48d2-9e33-a6d95fdbd228]
|
||||||
|
desktopsrule=3
|
||||||
|
skippagerrule=3
|
||||||
|
|
||||||
[5a3d3e7e-7075-410d-8951-691857124709]
|
[5a3d3e7e-7075-410d-8951-691857124709]
|
||||||
Description=Settings for dolphin-emu
|
Description=Settings for dolphin-emu
|
||||||
desktops=f4bd76ec-75ca-4ce6-bfdc-a72a1e8178e1
|
desktops=f4bd76ec-75ca-4ce6-bfdc-a72a1e8178e1
|
||||||
@@ -41,25 +45,69 @@ types=1
|
|||||||
wmclass=google-chrome
|
wmclass=google-chrome
|
||||||
wmclassmatch=1
|
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
|
Description=Window settings for Picture-in-Picture
|
||||||
desktops=\\0
|
desktops=\\0
|
||||||
desktopsrule=3
|
desktopsrule=3
|
||||||
layer=overlay
|
layer=overlay
|
||||||
layerrule=2
|
layerrule=2
|
||||||
position=2029,0
|
position=2020,0
|
||||||
positionrule=3
|
positionrule=3
|
||||||
size=531,299
|
size=540,303
|
||||||
sizerule=3
|
sizerule=3
|
||||||
title=Picture-in-Picture
|
title=Picture-in-Picture
|
||||||
titlematch=2
|
titlematch=1
|
||||||
wmclass=app.zen_browser.zen
|
wmclass=app.zen_browser.zen
|
||||||
wmclassmatch=1
|
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]
|
[dc115368-7cd7-4c86-84a2-92506f94a7f7]
|
||||||
Description=Settings for Cornerpond
|
Description=Settings for Cornerpond
|
||||||
below=true
|
below=true
|
||||||
@@ -72,6 +120,22 @@ types=1
|
|||||||
wmclass=Cornerpond
|
wmclass=Cornerpond
|
||||||
wmclassmatch=1
|
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]
|
[f110a92a-8318-4694-bc7d-0965d0e6cd45]
|
||||||
Description=Settings for steam
|
Description=Settings for steam
|
||||||
desktops=f4bd76ec-75ca-4ce6-bfdc-a72a1e8178e1
|
desktops=f4bd76ec-75ca-4ce6-bfdc-a72a1e8178e1
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
[file:///home/cory/Desktop/rogue-dawn/Rogue Dawn 1_21 Read Me.txt]
|
[file:///home/cory/Desktop/Hytale/Hytale/package/game/latest/Client/HytaleClient.exe]
|
||||||
Checksum=1f3bde3c4e3e7992e13c8c396c458a20fd2b1b11
|
Checksum=1415760fe3c8f28e7af4ec37af1ee23e0914332d
|
||||||
Encoding=ISO-8859-1
|
Encoding=ISO-8859-1
|
||||||
Time=2025,11,27,1,17,13.067,UTC
|
Time=2026,1,16,5,18,15.487,UTC
|
||||||
URL=file:///home/cory/Desktop/rogue-dawn/Rogue Dawn 1_21 Read Me.txt
|
URL=file:///home/cory/Desktop/Hytale/Hytale/package/game/latest/Client/HytaleClient.exe
|
||||||
|
|
||||||
[file:///home/cory/Downloads/jack_113773_linux_x64.run]
|
[file:///home/cory/Desktop/neovide.AppImage.zsync]
|
||||||
Checksum=86aa8e9a29118079cf9c1ac922c7a96b5f04e4fb
|
Checksum=96e235b5570d1e3f902d476dec703d437002fd80
|
||||||
Encoding=ISO-8859-1
|
Encoding=ISO-8859-1
|
||||||
Time=2025,11,30,20,59,59.821,UTC
|
Time=2026,1,26,19,0,30.444,UTC
|
||||||
URL=file:///home/cory/Downloads/jack_113773_linux_x64.run
|
URL=file:///home/cory/Desktop/neovide.AppImage.zsync
|
||||||
|
|||||||
@@ -34,6 +34,48 @@ Tab Double Click New Document=true
|
|||||||
Tab Middle Click Close Document=true
|
Tab Middle Click Close Document=true
|
||||||
Tabbar Tab Limit=0
|
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]
|
[KTextEditor Renderer]
|
||||||
Animate Bracket Matching=false
|
Animate Bracket Matching=false
|
||||||
Auto Color Theme Selection=true
|
Auto Color Theme Selection=true
|
||||||
@@ -41,7 +83,7 @@ Color Theme=Breeze Light
|
|||||||
Line Height Multiplier=1
|
Line Height Multiplier=1
|
||||||
Show Indentation Lines=false
|
Show Indentation Lines=false
|
||||||
Show Whole Bracket Expression=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=
|
Text Font Features=
|
||||||
Word Wrap Marker=false
|
Word Wrap Marker=false
|
||||||
|
|
||||||
@@ -103,12 +145,12 @@ Smart Copy Cut=true
|
|||||||
Statusbar Line Column Compact Mode=true
|
Statusbar Line Column Compact Mode=true
|
||||||
Text Drag And Drop=true
|
Text Drag And Drop=true
|
||||||
User Sets Of Chars To Enclose Selection=
|
User Sets Of Chars To Enclose Selection=
|
||||||
Vi Input Mode Steal Keys=false
|
Vi Input Mode Steal Keys=true
|
||||||
Vi Relative Line Numbers=false
|
Vi Relative Line Numbers=false
|
||||||
Word Completion=true
|
Word Completion=true
|
||||||
Word Completion Minimal Word Length=3
|
Word Completion Minimal Word Length=3
|
||||||
Word Completion Remove Tail=true
|
Word Completion Remove Tail=true
|
||||||
|
|
||||||
[MainWindow]
|
[MainWindow]
|
||||||
2560x1440 screen: Height=807
|
2560x1440 screen: Height=626
|
||||||
2560x1440 screen: Width=1302
|
2560x1440 screen: Width=955
|
||||||
|
|||||||
@@ -1,25 +1,41 @@
|
|||||||
[Added Associations]
|
[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.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/vnd.microsoft.portable-executable=com.usebottles.bottles.desktop;wine.desktop;winetricks.desktop;org.winehq.Wine.desktop;
|
||||||
application/x-blender=Blender.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-msdownload=com.usebottles.bottles.desktop;wine.desktop;
|
||||||
application/x-msi=com.usebottles.bottles.desktop;wine.desktop;winetricks.desktop;
|
application/x-msi=com.usebottles.bottles.desktop;wine.desktop;winetricks.desktop;
|
||||||
application/x-nes-rom=nestopia.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;
|
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;
|
text/rust=neovide.desktop;
|
||||||
x-scheme-handler/http=app.zen_browser.zen.desktop;
|
text/x-cmake=nvim_nvim.desktop;org.kde.kwrite.desktop;org.kde.kate.desktop;
|
||||||
x-scheme-handler/https=app.zen_browser.zen.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]
|
[Default Applications]
|
||||||
|
application/json=nvim_nvim.desktop;
|
||||||
application/vnd.debian.binary-package=org.kde.discover.desktop;
|
application/vnd.debian.binary-package=org.kde.discover.desktop;
|
||||||
application/vnd.microsoft.portable-executable=com.usebottles.bottles.desktop;
|
application/vnd.microsoft.portable-executable=com.usebottles.bottles.desktop;
|
||||||
application/x-blender=Blender.desktop;
|
application/x-blender=Blender.desktop;
|
||||||
|
application/x-docbook+xml=nvim_nvim.desktop;
|
||||||
application/x-msdownload=com.usebottles.bottles.desktop;
|
application/x-msdownload=com.usebottles.bottles.desktop;
|
||||||
application/x-msi=com.usebottles.bottles.desktop;
|
application/x-msi=com.usebottles.bottles.desktop;
|
||||||
application/x-nes-rom=nestopia.desktop;
|
application/x-nes-rom=nestopia.desktop;
|
||||||
|
application/x-yaml=nvim_nvim.desktop;
|
||||||
|
application/x-zerosize=Neovim.desktop;
|
||||||
application/zip=org.kde.ark.desktop;
|
application/zip=org.kde.ark.desktop;
|
||||||
|
text/markdown=nvim_nvim.desktop;
|
||||||
|
text/plain=nvim_nvim.desktop;
|
||||||
text/rust=neovide.desktop;
|
text/rust=neovide.desktop;
|
||||||
|
text/x-cmake=nvim_nvim.desktop;
|
||||||
x-scheme-handler/betterdiscord=discord.desktop
|
x-scheme-handler/betterdiscord=discord.desktop
|
||||||
x-scheme-handler/discord-1361252452329848892=discord-1361252452329848892.desktop
|
x-scheme-handler/discord-1361252452329848892=discord-1361252452329848892.desktop
|
||||||
x-scheme-handler/http=app.zen_browser.zen.desktop;
|
x-scheme-handler/http=librewolf.desktop;
|
||||||
x-scheme-handler/https=app.zen_browser.zen.desktop;
|
x-scheme-handler/https=librewolf.desktop;
|
||||||
|
x-scheme-handler/nxm=modorganizer2-nxm-handler.desktop
|
||||||
|
|||||||
@@ -3,18 +3,19 @@ vim.g.mapleader = '<space>'
|
|||||||
vim.o.number = true
|
vim.o.number = true
|
||||||
vim.o.relativenumber = false
|
vim.o.relativenumber = false
|
||||||
vim.o.termguicolors = true
|
vim.o.termguicolors = true
|
||||||
vim.o.background = light
|
vim.o.background = "light"
|
||||||
|
vim.o.background = "dark"
|
||||||
vim.o.wrap = true
|
vim.o.wrap = true
|
||||||
vim.o.tabstop = 4
|
vim.o.tabstop = 4
|
||||||
vim.o.shiftwidth = 4
|
vim.o.shiftwidth = 4
|
||||||
vim.o.clipboard = 'unnamedplus'
|
vim.o.clipboard = 'unnamed'
|
||||||
vim.o.mouse = 'a'
|
vim.o.mouse = 'a'
|
||||||
vim.o.ignorecase = true
|
vim.o.ignorecase = true
|
||||||
vim.o.smartcase = true
|
vim.o.smartcase = true
|
||||||
vim.o.smartindent = false
|
vim.o.smartindent = false
|
||||||
vim.o.undofile = true
|
vim.o.undofile = true
|
||||||
vim.o.swapfile = true
|
vim.o.swapfile = true
|
||||||
vim.o.autochdir = false
|
vim.o.autochdir = true
|
||||||
vim.o.scrolloff = 15
|
vim.o.scrolloff = 15
|
||||||
--vim.o.winborder = "solid"
|
--vim.o.winborder = "solid"
|
||||||
vim.o.cursorline = true
|
vim.o.cursorline = true
|
||||||
@@ -32,11 +33,13 @@ vim.api.nvim_set_hl(0, 'Pmenu', { bg = 'none' })
|
|||||||
|
|
||||||
--Neovide Options
|
--Neovide Options
|
||||||
vim.o.guifont = "CaskaydiaMono Nerd Font:h18"
|
vim.o.guifont = "CaskaydiaMono Nerd Font:h18"
|
||||||
vim.g.neovide_window_blurred = false
|
vim.g.neovide_window_blurred = true
|
||||||
vim.g.neovide_opacity = 1.0
|
vim.g.neovide_opacity = 0.7
|
||||||
vim.g.neovide_normal_opacity = 1.0
|
vim.g.neovide_normal_opacity = 1.0
|
||||||
vim.g.neovide_background_color = "orange"
|
|
||||||
vim.g.neovide_cursor_animation_length = 0.08
|
vim.g.neovide_cursor_animation_length = 0.08
|
||||||
|
if vim.g.neovide then
|
||||||
|
vim.o.background = 'dark'
|
||||||
|
end
|
||||||
|
|
||||||
-- Autocompletion
|
-- Autocompletion
|
||||||
vim.diagnostic.config({ virtual_text = { current_line = true } })
|
vim.diagnostic.config({ virtual_text = { current_line = true } })
|
||||||
|
|||||||
@@ -1,40 +1,42 @@
|
|||||||
{
|
{
|
||||||
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
"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-spell": { "branch": "master", "commit": "2bd0e0d5e7735c047e72b6918a0458f3e8fadaba" },
|
||||||
"blink.cmp": { "branch": "main", "commit": "022521a8910a5543b0251b21c9e1a1e989745796" },
|
"blink.cmp": { "branch": "main", "commit": "b19413d214068f316c78978b08264ed1c41830ec" },
|
||||||
"everforest-nvim": { "branch": "main", "commit": "2eb7c348f880ba93de4d98cae049c9441f5d4d49" },
|
"everforest-nvim": { "branch": "main", "commit": "557bce922401e247a596583679bc181d4d688554" },
|
||||||
"focus.nvim": { "branch": "main", "commit": "0f51cb7ff2640737858249015b6af0ea6cb28904" },
|
"focus.nvim": { "branch": "main", "commit": "0f51cb7ff2640737858249015b6af0ea6cb28904" },
|
||||||
"friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
|
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
|
||||||
"fzf-lua": { "branch": "main", "commit": "ce5a5fa2902933e7b4563ca78210254169463cb6" },
|
"fzf-lua": { "branch": "main", "commit": "d59f857c76eb474ec00debcf043f14fd001805cc" },
|
||||||
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
|
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
|
||||||
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
|
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
||||||
"lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
|
"lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" },
|
||||||
"live-preview.nvim": { "branch": "main", "commit": "35ddc5a99499d1d2f4adefb7e92d0c537353fdec" },
|
"live-preview.nvim": { "branch": "main", "commit": "f056b4b859d54595afce53e67129f7684380d3ba" },
|
||||||
"lualine-macro-recording.nvim": { "branch": "main", "commit": "e2dcf63ba74e6111b53e1520a4f8a17a3d7427a1" },
|
"lualine-macro-recording.nvim": { "branch": "main", "commit": "e2dcf63ba74e6111b53e1520a4f8a17a3d7427a1" },
|
||||||
"lualine.nvim": { "branch": "master", "commit": "0c6cca9f2c63dadeb9225c45bc92bb95a151d4af" },
|
"lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
|
||||||
"mason.nvim": { "branch": "main", "commit": "8024d64e1330b86044fed4c8494ef3dcd483a67c" },
|
"mason.nvim": { "branch": "main", "commit": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65" },
|
||||||
"maximizer.nvim": { "branch": "main", "commit": "8e2e71ce705400b10ef02a25ef2528bb078514a2" },
|
"maximizer.nvim": { "branch": "main", "commit": "d565201bae4b6ca4328ecd693b21b77132bfe02f" },
|
||||||
"mini.icons": { "branch": "main", "commit": "397ed3807e96b59709ef3292f0a3e253d5c1dc0a" },
|
"mini.icons": { "branch": "main", "commit": "efc85e42262cd0c9e1fdbf806c25cb0be6de115c" },
|
||||||
"mini.pick": { "branch": "main", "commit": "be6490ae9d7038b9f5185d95a8060054f9b23666" },
|
"mini.pick": { "branch": "main", "commit": "7c0a674f620ddc701903b887b2dade836b23ea79" },
|
||||||
"mini.surround": { "branch": "main", "commit": "88c52297ed3e69ecf9f8652837888ecc727a28ee" },
|
"mini.surround": { "branch": "main", "commit": "f9358544ed06bc10197e698b7fc8dc5963be3f4b" },
|
||||||
"noice.nvim": { "branch": "main", "commit": "0427460c2d7f673ad60eb02b35f5e9926cf67c59" },
|
"noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" },
|
||||||
"nui.nvim": { "branch": "main", "commit": "7cd18e73cfbd70e1546931b7268b3eebaeff9391" },
|
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
|
||||||
"nvim-autopairs": { "branch": "master", "commit": "4d74e75913832866aa7de35e4202463ddf6efd1b" },
|
"nvim-autopairs": { "branch": "master", "commit": "c2a0dd0d931d0fb07665e1fedb1ea688da3b80b4" },
|
||||||
"nvim-lint": { "branch": "master", "commit": "cc26ae6a620298bb3f33b0e0681f99a10ae57781" },
|
"nvim-lint": { "branch": "master", "commit": "ca6ea12daf0a4d92dc24c5c9ae22a1f0418ade37" },
|
||||||
"nvim-lspconfig": { "branch": "master", "commit": "a182334ba933e58240c2c45e6ae2d9c7ae313e00" },
|
"nvim-lspconfig": { "branch": "master", "commit": "4044b8544a6cea57179d5a29c203b6b65d2b6ac4" },
|
||||||
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
|
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
|
||||||
"nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" },
|
"nvim-ts-autotag": { "branch": "main", "commit": "db15f2e0df2f5db916e511e3fffb682ef2f6354f" },
|
||||||
"nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" },
|
"nvim-web-devicons": { "branch": "master", "commit": "803353450c374192393f5387b6a0176d0972b848" },
|
||||||
"oil.nvim": { "branch": "master", "commit": "08c2bce8b00fd780fb7999dbffdf7cd174e896fb" },
|
"oil.nvim": { "branch": "master", "commit": "f55b25e493a7df76371cfadd0ded5004cb9cd48a" },
|
||||||
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
|
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
|
||||||
"snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
|
"project-cli-commands.nvim": { "branch": "main", "commit": "9a2a2fdfd38a3d71cc927e3a398ac0ddfa846b3d" },
|
||||||
|
"snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" },
|
||||||
"solarized.nvim": { "branch": "main", "commit": "c0dfe1cbfabd93b546baf5f1408f5df7e02e2050" },
|
"solarized.nvim": { "branch": "main", "commit": "c0dfe1cbfabd93b546baf5f1408f5df7e02e2050" },
|
||||||
"telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" },
|
"telescope.nvim": { "branch": "master", "commit": "ad7d9580338354ccc136e5b8f0aa4f880434dcdc" },
|
||||||
"toggleterm.nvim": { "branch": "main", "commit": "9a88eae817ef395952e08650b3283726786fb5fb" },
|
"toggleterm.nvim": { "branch": "main", "commit": "9a88eae817ef395952e08650b3283726786fb5fb" },
|
||||||
"tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" },
|
"tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" },
|
||||||
"twilight.nvim": { "branch": "main", "commit": "1584c0b0a979b71fd86b18d302ba84e9aba85b1b" },
|
"twilight.nvim": { "branch": "main", "commit": "664e752f4a219801265cc3fc18782b457b58c1e1" },
|
||||||
"vim-illuminate": { "branch": "master", "commit": "0d1e93684da00ab7c057410fecfc24f434698898" },
|
"vim-illuminate": { "branch": "master", "commit": "0d1e93684da00ab7c057410fecfc24f434698898" },
|
||||||
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" },
|
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" },
|
||||||
"yazi.nvim": { "branch": "main", "commit": "e2ddbaa88ec61d0b96e3d53ba851b0e7a0b36f14" }
|
"yazi.nvim": { "branch": "main", "commit": "8992f08270a008ab7638ccfb0cf07bb6e9e69f5e" }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,5 +31,5 @@ require("lazy").setup({
|
|||||||
-- colorscheme that will be used when installing plugins.
|
-- colorscheme that will be used when installing plugins.
|
||||||
install = { colorscheme = { "habamax" } },
|
install = { colorscheme = { "habamax" } },
|
||||||
-- automatically check for plugin updates
|
-- automatically check for plugin updates
|
||||||
checker = { enabled = true },
|
checker = { enabled = true, notify = false },
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -5,27 +5,49 @@ return {
|
|||||||
'nvim-lua/plenary.nvim',
|
'nvim-lua/plenary.nvim',
|
||||||
"nvim-telescope/telescope.nvim"
|
"nvim-telescope/telescope.nvim"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
-- dashboard.section.header.val = {
|
||||||
|
-- " ",
|
||||||
|
-- " ███████████ █████ ██",
|
||||||
|
-- " ███████████ █████ ",
|
||||||
|
-- " ████████████████ ███████████ ███ ███████",
|
||||||
|
-- " ████████████████ ████████████ █████ ██████████████",
|
||||||
|
-- " █████████████████████████████ █████ █████ ████ █████",
|
||||||
|
-- " ██████████████████████████████████ █████ █████ ████ █████",
|
||||||
|
-- " ██████ ███ █████████████████ ████ █████ █████ ████ ██████",
|
||||||
|
-- " ██████ ██ ███████████████ ██ █████████████████"
|
||||||
|
-- }
|
||||||
|
|
||||||
config = function ()
|
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 alpha = require("alpha")
|
||||||
local dashboard = require("alpha.themes.dashboard")
|
local dashboard = require("alpha.themes.dashboard")
|
||||||
|
|
||||||
dashboard.section.header.val = {
|
dashboard.section.header.val = {
|
||||||
" ",
|
"▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄",
|
||||||
" ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ",
|
"██ ▀██ ██ ▄▄▄██ ▄▄▄ ██ ███ █▄ ▄██ ▄▀▄ ██",
|
||||||
" ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ ",
|
"██ █ █ ██ ▄▄▄██ ███ ███ █ ███ ███ █ █ ██",
|
||||||
" ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ ",
|
"██ ██▄ ██ ▀▀▀██ ▀▀▀ ███▄▀▄██▀ ▀██ ███ ██",
|
||||||
" ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ ",
|
"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀"
|
||||||
" ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ ",
|
|
||||||
" ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ ",
|
|
||||||
" ",
|
|
||||||
}
|
}
|
||||||
dashboard.section.header.opts.hl = "Red"
|
dashboard.section.header.opts.hl = "Red"
|
||||||
|
|
||||||
dashboard.section.buttons.val = {
|
dashboard.section.buttons.val = {
|
||||||
dashboard.button( "e", " > New file" , ":ene <BAR> startinsert <CR>"),
|
dashboard.button("<A-o>", " Recent files"),
|
||||||
dashboard.button( "f", " > Find file", ":cd $HOME | Telescope find_files<CR>"),
|
dashboard.button("e", " New file", "<cmd>ene <CR>"),
|
||||||
dashboard.button( "r", " > Recent" , ":Telescope oldfiles<CR>"),
|
dashboard.button(",", " Find file"),
|
||||||
dashboard.button( "s", " > Settings" , ":e $MYVIMRC | :cd %:p:h<CR>"),
|
dashboard.button("Alt-,", " Find word"),
|
||||||
dashboard.button( "q", " > Quit NVIM", ":qa<CR>"),
|
|
||||||
}
|
}
|
||||||
alpha.setup(dashboard.opts)
|
alpha.setup(dashboard.opts)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||