From fa63045ec096320e1daf039eddfa43db7462b700 Mon Sep 17 00:00:00 2001 From: Puechberty Arthur Date: Wed, 24 Jun 2026 20:46:55 +0200 Subject: [PATCH] add packages & dotfiles --- airootfs/root/.config/btop/btop.conf | 71 ++++ airootfs/root/.config/cava/config | 331 ++++++++++++++++++ .../.config/cava/shaders/bar_spectrum.frag | 73 ++++ .../root/.config/cava/shaders/eye_of_phi.frag | 117 +++++++ .../.config/cava/shaders/northern_lights.frag | 34 ++ .../.config/cava/shaders/pass_through.vert | 14 + .../.config/cava/shaders/spectrogram.frag | 53 +++ .../shaders/winamp_line_style_spectrum.frag | 112 ++++++ .../root/.config/cava/themes/solarized_dark | 15 + airootfs/root/.config/cava/themes/tricolor | 10 + airootfs/root/.config/ghostty/config | 24 ++ airootfs/root/.config/hypr/hyprland.lua | 33 +- airootfs/root/.config/obsidian/obsidian.css | 99 ++++++ .../root/.config/obsidian/user-flags.conf | 3 + airootfs/root/.config/waybar/style.css | 1 + airootfs/root/.install.sh | 25 ++ airootfs/root/backgrounds/1.png | Bin 0 -> 46937 bytes 17 files changed, 999 insertions(+), 16 deletions(-) create mode 100644 airootfs/root/.config/cava/config create mode 100644 airootfs/root/.config/cava/shaders/bar_spectrum.frag create mode 100644 airootfs/root/.config/cava/shaders/eye_of_phi.frag create mode 100644 airootfs/root/.config/cava/shaders/northern_lights.frag create mode 100644 airootfs/root/.config/cava/shaders/pass_through.vert create mode 100644 airootfs/root/.config/cava/shaders/spectrogram.frag create mode 100644 airootfs/root/.config/cava/shaders/winamp_line_style_spectrum.frag create mode 100644 airootfs/root/.config/cava/themes/solarized_dark create mode 100644 airootfs/root/.config/cava/themes/tricolor create mode 100644 airootfs/root/.config/obsidian/obsidian.css create mode 100644 airootfs/root/.config/obsidian/user-flags.conf create mode 100644 airootfs/root/backgrounds/1.png diff --git a/airootfs/root/.config/btop/btop.conf b/airootfs/root/.config/btop/btop.conf index b53509d..53e9d15 100644 --- a/airootfs/root/.config/btop/btop.conf +++ b/airootfs/root/.config/btop/btop.conf @@ -270,3 +270,74 @@ custom_gpu_name4 = "" #* Custom gpu5 model name, empty string to disable. custom_gpu_name5 = "" + + +# ──────────────────────────────────────────────────────────── +# BTOP THEME — Rainy Night City (matches your wallpaper) +# ──────────────────────────────────────────────────────────── + +# Transparent / dark night background +theme[main_bg]="#1e2030" + +# Main text – soft grey-blue (city lights) +theme[main_fg]="#cdd3e1" + +# Titles – light blue highlight (lamp glow) +theme[title]="#d6e7ff" + +# Highlight text – muted light grey-blue +theme[hi_fg]="#bfc6d4" + +# Selected row – deeper night shade +theme[selected_bg]="#14151f" + +# Selected row text – bright white-blue +theme[selected_fg]="#e8f1ff" + +# Inactive/dim text – distant-building grey +theme[inactive_fg]="#7d8291" + +# Misc text – light city grey +theme[proc_misc]="#bfc6d4" + +# Box outlines – subtle bluish-grey (window frame color) +theme[cpu_box]="#292b3b" +theme[mem_box]="#292b3b" +theme[net_box]="#292b3b" +theme[proc_box]="#292b3b" + +# Divider lines – same subtle outline tone +theme[div_line]="#292b3b" + +# Graph gradients – smooth blue-grey (rain & neon reflections) +theme[temp_start]="#4a4f65" +theme[temp_mid]="#8c92a3" +theme[temp_end]="#d6e7ff" + +theme[cpu_start]="#4a4f65" +theme[cpu_mid]="#8c92a3" +theme[cpu_end]="#d6e7ff" + +theme[free_start]="#4a4f65" +theme[free_mid]="#8c92a3" +theme[free_end]="#d6e7ff" + +theme[cached_start]="#4a4f65" +theme[cached_mid]="#8c92a3" +theme[cached_end]="#d6e7ff" + +theme[available_start]="#4a4f65" +theme[available_mid]="#8c92a3" +theme[available_end]="#d6e7ff" + +theme[used_start]="#4a4f65" +theme[used_mid]="#8c92a3" +theme[used_end]="#d6e7ff" + +theme[download_start]="#4a4f65" +theme[download_mid]="#8c92a3" +theme[download_end]="#d6e7ff" + +theme[upload_start]="#4a4f65" +theme[upload_mid]="#8c92a3" +theme[upload_end]="#d6e7ff" diff --git a/airootfs/root/.config/cava/config b/airootfs/root/.config/cava/config new file mode 100644 index 0000000..cde0112 --- /dev/null +++ b/airootfs/root/.config/cava/config @@ -0,0 +1,331 @@ +## Configuration file for CAVA. +# Remove the ; to change parameters. + + +[general] + +# Auto reload config if the configuration file has changed. 1 = on, 0 = off. +; live-config = 0 + +# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0 +; mode = normal + +# Accepts only non-negative values. +; framerate = 60 + +# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off +# new as of 0.6.0 autosens of low values (dynamic range) +# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0 +; autosens = 1 +; overshoot = 20 + +# Manual sensitivity in %. If autosens is enabled, this will only be the initial value. +# 200 means double height. Accepts only non-negative values. +; sensitivity = 100 + +# The number of bars (0-512). 0 sets it to auto (fill up console). +# Bars' width and space between bars in number of characters. +; bars = 0 +; bar_width = 2 +; bar_spacing = 1 +# bar_height is only used for output in "noritake" format +; bar_height = 32 + +# For SDL width and space between bars is in pixels, defaults are: +; bar_width = 20 +; bar_spacing = 5 + +# sdl_glsl have these default values, they are only used to calculate max number of bars. +; bar_width = 1 +; bar_spacing = 0 + +# ceter bars in terminal, if there is space. +; center_align = 1 + +# max height of bars in terminal, in percent of terminal height. +; max_height = 100 + + +# Lower and higher cutoff frequencies for lowest and highest bars +# the bandwidth of the visualizer. +# Note: there is a minimum total bandwidth of 43Mhz x number of bars. +# Cava will automatically increase the higher cutoff frequency if needed to satisfy the minimum bandwidth. +; lower_cutoff_freq = 50 +; higher_cutoff_freq = 10000 + + +# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and +# only check for input once per second. Cava will wake up once input is detected. 0 = disable. +; sleep_timer = 0 + + +[input] + +# Audio capturing method. Possible methods are: 'fifo', 'portaudio', 'pipewire', 'alsa', 'pulse', 'sndio', 'oss', 'jack' or 'shmem' +# Defaults to 'oss', 'pipewire', 'sndio', 'jack', 'pulse', 'alsa', 'portaudio' or 'fifo', in that order, dependent on what support cava was built with. +# On Mac it defaults to 'portaudio' or 'fifo' +# On windows this is automatic and no input settings are needed. +# +# All input methods uses the same config variable 'source' +# to define where it should get the audio. +# +# For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink +# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them). +# +# For pipewire 'source' will be the object name or object.serial of the device to capture from. +# Both input and output devices are supported. To capture the monitor source of a sink node, append '.monitor' to the sink's object name. +# +# For alsa 'source' will be the capture device. +# For fifo 'source' will be the path to fifo-file. +# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address +# +# For sndio 'source' will be a raw recording audio descriptor or a monitoring sub-device, e.g. 'rsnd/2' or 'snd/1'. Default: 'default'. +# README.md contains further information on how to setup CAVA for sndio. +# +# For oss 'source' will be the path to a audio device, e.g. '/dev/dsp2'. Default: '/dev/dsp', i.e. the default audio device. +# README.md contains further information on how to setup CAVA for OSS on FreeBSD. +# +# For jack 'source' will be the name of the JACK server to connect to, e.g. 'foobar'. Default: 'default'. +# README.md contains further information on how to setup CAVA for JACK. +# +; method = pulse +; source = auto + +; method = pipewire +; source = auto + +; method = alsa +; source = hw:Loopback,1 + +; method = fifo +; source = /tmp/mpd.fifo + +; method = shmem +; source = /squeezelite-AA:BB:CC:DD:EE:FF + +; method = portaudio +; source = auto + +; method = sndio +; source = default + +; method = oss +; source = /dev/dsp + +; method = jack +; source = default + +# The options 'sample_rate', 'sample_bits', 'channels' and 'autoconnect' can be configured for some input methods: +# sample_rate: fifo, pipewire, sndio, oss +# sample_bits: fifo, pipewire, sndio, oss +# channels: sndio, oss, jack +# autoconnect: jack +# Other methods ignore these settings. +# For pipewire, sample_rate will default to 48000, for all other input methods, sample_rate will default to 44100. +# +# For 'sndio' and 'oss' they are only preferred values, i.e. if the values are not supported +# by the chosen audio device, the device will use other supported values instead. +# Example: 48000, 32 and 2, but the device only supports 44100, 16 and 1, then it +# will use 44100, 16 and 1. +# +# +# The 'pipewire' input method has three options to control linking and mixing: +# active: Force the node to always process. Useful for monitoring sources when no other application is active. +# remix: Allow pipewire to remix audio channels to match cava's channel count. Useful for surround sound. +# virtual: Set the node to virtual, to avoid recording notifications from the DE. +# +; sample_rate = 44100 +; sample_bits = 16 +; channels = 2 +; autoconnect = 2 +; active = 1 +; remix = 1 +; virtual = 1 + + +[output] + +# Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl' +# or 'sdl_glsl'. +# 'noncurses' (default) uses a buffer and cursor movements to only print +# changes from frame to frame in the terminal. Uses less resources and is less +# prone to tearing (vsync issues) than 'ncurses'. +# +# 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data +# stream of the bar heights that can be used to send to other applications. +# 'raw' defaults to 1024 bars stereo (512 bars mono), which can be adjusted in the 'bars' option above. +# +# 'noritake' outputs a bitmap in the format expected by a Noritake VFD display +# in graphic mode. It only support the 3000 series graphical VFDs for now. +# +# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context. +# 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or +# use one of the predefined ones. +; method = noncurses + +# Orientation of the visualization. Can be 'bottom', 'top', 'left', 'right' or +# 'horizontal'. Default is 'bottom'. 'left and 'right' are only supported on sdl +# and ncruses output. 'horizontal' (bars go up and down from center) is only supported +# on noncurses output. +# Note: many fonts have weird or missing glyphs for characters used in orientations +# other than 'bottom', which can make output not look right. +; orientation = bottom + +# Visual channels. Can be 'stereo' or 'mono'. +# 'stereo' mirrors both channels with low frequencies in center. +# 'mono' outputs left to right lowest to highest frequencies. +# 'mono_option' set mono to either take input from 'left', 'right' or 'average'. +# set 'reverse' to 1 to display frequencies the other way around. +; channels = stereo +; mono_option = average +; reverse = 0 + +# Only valid if orientation is set to 'horizontal'. +# Set 'horizontal_stereo' to 1 to have left channel bars at top and right channel at bottom. +# Set 'left_bottom' to 0 to have right channel at top and left channel at bottom. +; horizontal_stereo = 0 +; left_bottom = 1 + +# Raw output target. +# On Linux, a fifo will be created if target does not exist. +# On Windows, a named pipe will be created if target does not exist. +; raw_target = /dev/stdout + +# Raw data format. Can be 'binary' or 'ascii'. +; data_format = binary + +# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530). +; bit_format = 16bit + +# Ascii max value. In 'ascii' mode range will run from 0 to value specified here +; ascii_max_range = 1000 + +# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters. +# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)). +; bar_delimiter = 59 +; frame_delimiter = 10 + +# sdl window size and position. -1,-1 is centered. +; sdl_width = 1024 +; sdl_height = 512 +; sdl_x = -1 +; sdl_y= -1 +; sdl_full_screen = 0 + +# set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none' +# 'frequency' displays the lower cut off frequency of the bar above. +# Only supported on ncurses and noncurses output. +; xaxis = none + +# enable synchronized sync. 1 = on, 0 = off +# removes flickering in alacritty terminal emulator. +# defaults to off since the behaviour in other terminal emulators is unknown +; synchronized_sync = 0 + +# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders +; vertex_shader = pass_through.vert +; fragment_shader = bar_spectrum.frag + +; for glsl output mode, keep rendering even if no audio +; continuous_rendering = 0 + +# disable console blank (screen saver) in tty +# (Not supported on FreeBSD) +; disable_blanking = 0 + +# show a flat bar at the bottom of the screen when idle, 1 = on, 0 = off +; show_idle_bar_heads = 1 + +# show waveform instead of frequency spectrum, 1 = on, 0 = off +; waveform = 0 + +[color] + +# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow. +# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires +# a terminal that can change color definitions such as Gnome-terminal or rxvt. +# default is to keep current terminal color +; background = default +; foreground = default + +# SDL and sdl_glsl only support hex code colors, these are the default: +; background = '#111111' +; foreground = '#33ffff' + + +# Gradient mode, only hex defined colors are supported, +# background must also be defined in hex or remain commented out. 1 = on, 0 = off. +# You can define as many as 8 different colors. They range from bottom to top of screen +gradient = 1 +gradient_count = 8 +gradient_color_1 = '#91e3e1' +gradient_color_2 = '#a7aaaf' +gradient_color_3 = '#d7d8db' +gradient_color_4 = '#e382d2' +gradient_color_5 = '#f6cbee' +gradient_color_6 = '#d9f7f6' +gradient_color_7 = '#f6cbee' +gradient_color_8 = '#91e3e1' + + +# Horizontal is only supported on noncurses output. +# Only one color will be calculated per bar. +; horizontal_gradient = 0 +; horizontal_gradient_color_1 = '#c45161' +; horizontal_gradient_color_2 = '#e094a0' +; horizontal_gradient_color_3 = '#f2b6c0' +; horizontal_gradient_color_4 = '#f2dde1' +; horizontal_gradient_color_5 = '#cbc7d8' +; horizontal_gradient_color_6 = '#8db7d2' +; horizontal_gradient_color_7 = '#5e62a9' +; horizontal_gradient_color_8 = '#434279' + + +# If both vertical and horizontal gradient is enabled, vertical will be blended in this direction. +# Can be 'up', 'down', 'left' or 'right'. 'up' means the vertical gradient will be blended in from +# bottom to top. I.e. the bottom will be only the horizontal +# and top will be only the color of the vertical gradient. +; blend_direction = 'up' + +# use theme file instead of defining colors in this file +# themes are located in $HOME/.config/cava/themes +; theme = 'none' + + +[smoothing] + +# Percentage value for integral smoothing. Takes values from 0 - 100. +# Higher values means smoother, but less precise. 0 to disable. +# DEPRECATED as of 0.8.0, use noise_reduction instead +; integral = 77 + +# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable. +; monstercat = 0 +; waves = 0 + +# Set gravity percentage for "drop off". Higher values means bars will drop faster. +# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off". +# DEPRECATED as of 0.8.0, use noise_reduction instead +; gravity = 100 + + +# In bar height, bars that would have been lower that this will not be drawn. +# DEPRECATED as of 0.8.0 +; ignore = 0 + +# Noise reduction, int 0 - 100. default 77 +# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth +# 100 will be very slow and smooth, 0 will be fast but noisy. +; noise_reduction = 77 + + +[eq] + +# This one is tricky. You can have as much keys as you want. +# Remember to uncomment more than one key! More keys = more precision. +# Look at readme.md on github for further explanations and examples. +; 1 = 1 # bass +; 2 = 1 +; 3 = 1 # midtone +; 4 = 1 +; 5 = 1 # treble diff --git a/airootfs/root/.config/cava/shaders/bar_spectrum.frag b/airootfs/root/.config/cava/shaders/bar_spectrum.frag new file mode 100644 index 0000000..473301c --- /dev/null +++ b/airootfs/root/.config/cava/shaders/bar_spectrum.frag @@ -0,0 +1,73 @@ +#version 330 + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) +uniform int bar_width; // bar width (configurable), not used here +uniform int bar_spacing; // space between bars (configurable) + +uniform vec3 u_resolution; // window resolution + +// colors, configurable in cava config file (r,g,b) (0.0 - 1.0) +uniform vec3 bg_color; // background color +uniform vec3 fg_color; // foreground color + +uniform int gradient_count; +uniform vec3 gradient_colors[8]; // gradient colors + +uniform float shader_time; // shader execution time s (not used here) + +uniform sampler2D inputTexture; // Texture from the last render pass (not used here) + +vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) { + // create color based on fraction of this color and next color + float yr = (y - y_min) / (y_max - y_min); + return col_1 * (1.0 - yr) + col_2 * yr; +} + +void main() { + // find which bar to use based on where we are on the x axis + float x = u_resolution.x * fragCoord.x; + int bar = int(bars_count * fragCoord.x); + + // calculate a bar size + float bar_size = u_resolution.x / bars_count; + + // the y coordinate and bar values are the same + float y = bars[bar]; + + // make sure there is a thin line at bottom + if (y * u_resolution.y < 1.0) { + y = 1.0 / u_resolution.y; + } + + // draw the bar up to current height + if (y > fragCoord.y) { + // make some space between bars basen on settings + if (x > (bar + 1) * (bar_size)-bar_spacing) { + fragColor = vec4(bg_color, 1.0); + } else { + if (gradient_count == 0) { + fragColor = vec4(fg_color, 1.0); + } else { + // find which color in the configured gradient we are at + int color = int((gradient_count - 1) * fragCoord.y); + + // find where on y this and next color is supposed to be + float y_min = color / (gradient_count - 1.0); + float y_max = (color + 1.0) / (gradient_count - 1.0); + + // make color + fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], + gradient_colors[color + 1], y_min, y_max), + 1.0); + } + } + } else { + fragColor = vec4(bg_color, 1.0); + } +} diff --git a/airootfs/root/.config/cava/shaders/eye_of_phi.frag b/airootfs/root/.config/cava/shaders/eye_of_phi.frag new file mode 100644 index 0000000..b66b607 --- /dev/null +++ b/airootfs/root/.config/cava/shaders/eye_of_phi.frag @@ -0,0 +1,117 @@ +#version 330 + +// this shader was stolen from shadertoy user ChunderFPV + +#define SCALE 8.0 +#define PI radians(180.0) +#define TAU (PI * 2.0) +#define CS(a) vec2(cos(a), sin(a)) +#define PT(u, r) smoothstep(0.0, r, r - length(u)) + +in vec2 fragCoord; +out vec4 fragColor; + +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) +uniform float shader_time; // shader execution time s +uniform int bar_width; // bar width (configurable), not used here +uniform int bar_spacing; // space between bars (configurable) + +uniform vec3 u_resolution; // window resolution + +// colors, configurable in cava config file (r,g,b) (0.0 - 1.0) +uniform vec3 bg_color; // background color +uniform vec3 fg_color; // foreground color + +uniform int gradient_count; +uniform vec3 gradient_colors[8]; // gradient colors + +// gradient map ( color, equation, time, width, shadow, reciprocal ) +vec3 gm(vec3 c, float n, float t, float w, float d, bool i) { + float g = min(abs(n), 1.0 / abs(n)); + float s = abs(sin(n * PI - t)); + if (i) + s = min(s, abs(sin(PI / n + t))); + return (1.0 - pow(abs(s), w)) * c * pow(g, d) * 6.0; +} + +// denominator spiral, use 1/n for numerator +// ( screen xy, spiral exponent, decimal, line width, hardness, rotation ) +float ds(vec2 u, float e, float n, float w, float h, float ro) { + float ur = length(u); // unit radius + float sr = pow(ur, e); // spiral radius + float a = round(sr) * n * TAU; // arc + vec2 xy = CS(a + ro) * ur; // xy coords + float l = PT(u - xy, w); // line + float s = mod(sr + 0.5, 1.0); // gradient smooth + s = min(s, 1.0 - s); // darken filter + return l * s * h; +} + +void main() { + float t = shader_time / PI * 2.0; + vec4 m = vec4(0, 0, 0, 0); // iMouse; + m.xy = m.xy * 2.0 / u_resolution.xy - 1.0; // ±1x, ±1y + if (m.z > 0.0) + t += m.y * SCALE; // move time with mouse y + float z = (m.z > 0.0) ? pow(1.0 - abs(m.y), sign(m.y)) : 1.0; // zoom (+) + float e = (m.z > 0.0) ? pow(1.0 - abs(m.x), -sign(m.x)) + : 1.0; // screen exponent (+) + float se = (m.z > 0.0) ? e * -sign(m.y) : 1.0; // spiral exponent + vec3 bg = vec3(0); // black background + + float aa = 3.0; // anti-aliasing + + for (float j = 0.0; j < aa; j++) + for (float k = 0.0; k < aa; k++) { + vec3 c = vec3(0); + vec2 o = vec2(j, k) / aa; + vec2 uv = (fragCoord * u_resolution.xy - 0.5 * u_resolution.xy + o) / + u_resolution.y * SCALE * z; // apply cartesian, scale and zoom + if (m.z > 0.0) + uv = + exp(log(abs(uv)) * e) * sign(uv); // warp screen space with exponent + + float px = length(fwidth(uv)); // pixel width + float x = uv.x; // every pixel on x + float y = uv.y; // every pixel on y + float l = length(uv); // hypot of xy: sqrt(x*x+y*y) + + float mc = (x * x + y * y - 1.0) / y; // metallic circle at xy + float g = min(abs(mc), 1.0 / abs(mc)); // gradient + vec3 gold = vec3(1.0, 0.6, 0.0) * g * l; + vec3 blue = vec3(0.3, 0.5, 0.9) * (1.0 - g); + vec3 rgb = max(gold, blue); + + float w = 0.1; // line width + float d = 0.4; // shadow depth + c = max(c, gm(rgb, mc, -t, w * bars[0], d, false)); // metallic + c = max(c, gm(rgb, abs(y / x) * sign(y), -t, w * bars[1], d, + false)); // tangent + c = max(c, gm(rgb, (x * x) / (y * y) * sign(y), -t, w * bars[2], d, + false)); // sqrt cotangent + c = max(c, gm(rgb, (x * x) + (y * y), t, w * bars[3], d, + true)); // sqrt circles + + c += rgb * ds(uv, se, t / TAU, px * 2.0 * bars[4], 2.0, 0.0); // spiral 1a + c += rgb * ds(uv, se, t / TAU, px * 2.0 * bars[5], 2.0, PI); // spiral 1b + c += + rgb * ds(uv, -se, t / TAU, px * 2.0 * bars[6], 2.0, 0.0); // spiral 2a + c += rgb * ds(uv, -se, t / TAU, px * 2.0 * bars[7], 2.0, PI); // spiral 2b + c = max(c, 0.0); // clear negative color + + c += pow(max(1.0 - l, 0.0), 3.0 / z); // center glow + + if (m.z > 0.0) // display grid on click + { + vec2 xyg = abs(fract(uv + 0.5) - 0.5) / px; // xy grid + c.gb += 0.2 * (1.0 - min(min(xyg.x, xyg.y), 1.0)); + } + bg += c; + } + bg /= aa * aa; + bg *= sqrt(bg) * 1.5; + + fragColor = vec4(bg, 1.0); +} diff --git a/airootfs/root/.config/cava/shaders/northern_lights.frag b/airootfs/root/.config/cava/shaders/northern_lights.frag new file mode 100644 index 0000000..ecd859a --- /dev/null +++ b/airootfs/root/.config/cava/shaders/northern_lights.frag @@ -0,0 +1,34 @@ +#version 330 + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) + +uniform vec3 u_resolution; // window resolution, not used here + +//colors, configurable in cava config file +uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here +uniform vec3 fg_color; // foreground color, not used here + +void main() +{ + // find which bar to use based on where we are on the x axis + int bar = int(bars_count * fragCoord.x); + + float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0; + float y = (bars[bar]) * bar_y; + + float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count; + float bar_r = 1.0 - abs((bar_x - 0.5)) * 2; + + bar_r = bar_r * bar_r * 2; + + // set color + fragColor.r = fg_color.x * y * bar_r; + fragColor.g = fg_color.y * y * bar_r; + fragColor.b = fg_color.z * y * bar_r; +} diff --git a/airootfs/root/.config/cava/shaders/pass_through.vert b/airootfs/root/.config/cava/shaders/pass_through.vert new file mode 100644 index 0000000..a4f20e5 --- /dev/null +++ b/airootfs/root/.config/cava/shaders/pass_through.vert @@ -0,0 +1,14 @@ +#version 330 + + +// Input vertex data, different for all executions of this shader. +layout(location = 0) in vec3 vertexPosition_modelspace; + +// Output data ; will be interpolated for each fragment. +out vec2 fragCoord; + +void main() +{ + gl_Position = vec4(vertexPosition_modelspace,1); + fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0; +} diff --git a/airootfs/root/.config/cava/shaders/spectrogram.frag b/airootfs/root/.config/cava/shaders/spectrogram.frag new file mode 100644 index 0000000..18afbe3 --- /dev/null +++ b/airootfs/root/.config/cava/shaders/spectrogram.frag @@ -0,0 +1,53 @@ +#version 330 + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high +// to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) +uniform int bar_width; // bar width (configurable), not used here +uniform int bar_spacing; // space between bars (configurable) + +uniform vec3 u_resolution; // window resolution + +// colors, configurable in cava config file (r,g,b) (0.0 - 1.0) +uniform vec3 bg_color; // background color +uniform vec3 fg_color; // foreground color + +uniform int gradient_count; +uniform vec3 gradient_colors[8]; // gradient colors + +uniform sampler2D inputTexture; // Texture from the last render pass + +vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) { + // create color based on fraction of this color and next color + float yr = (y - y_min) / (y_max - y_min); + return col_1 * (1.0 - yr) + col_2 * yr; +} + +void main() { + // find which bar to use based on where we are on the y axis + int bar = int(bars_count * fragCoord.y); + float y = bars[bar]; + float band_size = 1.0 / float(bars_count); + float current_band_min = bar * band_size; + float current_band_max = (bar + 1) * band_size; + + int hist_length = 512; + float win_size = 1.0 / hist_length; + + if (fragCoord.x > 1.0 - win_size) { + + if (fragCoord.y > current_band_min && fragCoord.y < current_band_max) { + + fragColor = vec4(fg_color * y, 1.0); + } + } else { + vec2 offsetCoord = fragCoord; + offsetCoord.x += float(win_size); + fragColor = texture(inputTexture, offsetCoord); + } +} diff --git a/airootfs/root/.config/cava/shaders/winamp_line_style_spectrum.frag b/airootfs/root/.config/cava/shaders/winamp_line_style_spectrum.frag new file mode 100644 index 0000000..3bcc24a --- /dev/null +++ b/airootfs/root/.config/cava/shaders/winamp_line_style_spectrum.frag @@ -0,0 +1,112 @@ +#version 330 + +// Emulate the "line style" spectrum analyzer from Winamp 2. +// Try this config for a demonstration: + +/* +[general] +bar_width = 2 +bar_spacing = 0 +higher_cutoff_freq = 22000 + +[output] +method = sdl_glsl +channels = mono +fragment_shader = winamp_line_style_spectrum.frag + +[color] +background = '#000000' +gradient = 1 +gradient_color_1 = '#319C08' +gradient_color_2 = '#29CE10' +gradient_color_3 = '#BDDE29' +gradient_color_4 = '#DEA518' +gradient_color_5 = '#D66600' +gradient_color_6 = '#CE2910' + +[smoothing] +noise_reduction = 10 +*/ + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) +uniform int bar_width; // bar width (configurable), not used here +uniform int bar_spacing; // space between bars (configurable) + +uniform vec3 u_resolution; // window resolution + +//colors, configurable in cava config file (r,g,b) (0.0 - 1.0) +uniform vec3 bg_color; // background color +uniform vec3 fg_color; // foreground color + +uniform int gradient_count; +uniform vec3 gradient_colors[8]; // gradient colors + +vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max) +{ + //create color based on fraction of this color and next color + float yr = (y - y_min) / (y_max - y_min); + return col_1 * (1.0 - yr) + col_2 * yr; +} + +void main() +{ + // find which bar to use based on where we are on the x axis + float x = u_resolution.x * fragCoord.x; + int bar = int(bars_count * fragCoord.x); + + //calculate a bar size + float bar_size = u_resolution.x / bars_count; + + //the y coordinate is stretched by 4X to resemble Winamp + float y = min(bars[bar] * 4.0, 1.0); + + // make sure there is a thin line at bottom + if (y * u_resolution.y < 1.0) + { + y = 1.0 / u_resolution.y; + } + + vec4 bar_color; + + if (gradient_count == 0) + { + bar_color = vec4(fg_color,1.0); + } + else + { + //find color in the configured gradient for the top of the bar + int color = int((gradient_count - 1) * y); + + //find where on y this and next color is supposed to be + float y_min = float(color) / (gradient_count - 1.0); + float y_max = float(color + 1) / (gradient_count - 1.0); + + //make a solid color for the entire bar + bar_color = vec4(normalize_C(y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0); + } + + + //draw the bar up to current height + if (y > fragCoord.y) + { + //make some space between bars based on settings + if (x > (bar + 1) * (bar_size) - bar_spacing) + { + fragColor = vec4(bg_color,1.0); + } + else + { + fragColor = bar_color; + } + } + else + { + fragColor = vec4(bg_color,1.0); + } +} diff --git a/airootfs/root/.config/cava/themes/solarized_dark b/airootfs/root/.config/cava/themes/solarized_dark new file mode 100644 index 0000000..200057c --- /dev/null +++ b/airootfs/root/.config/cava/themes/solarized_dark @@ -0,0 +1,15 @@ +[color] +background = '#001e26' +foreground = '#708183' + +gradient = 1 +gradient_color_1 = '#268bd2' +gradient_color_2 = '#6c71c4' +gradient_color_3 = '#cb4b16' + +horizontal_gradient = 1 +horizontal_gradient_color_1 = '#586e75' +horizontal_gradient_color_2 = '#b58900' +horizontal_gradient_color_3 = '#839496' + +blend_direction = 'up' \ No newline at end of file diff --git a/airootfs/root/.config/cava/themes/tricolor b/airootfs/root/.config/cava/themes/tricolor new file mode 100644 index 0000000..b908137 --- /dev/null +++ b/airootfs/root/.config/cava/themes/tricolor @@ -0,0 +1,10 @@ +[color] +horizontal_gradient = 1 +horizontal_gradient_color_1 = '#c45161' +horizontal_gradient_color_2 = '#e094a0' +horizontal_gradient_color_3 = '#f2b6c0' +horizontal_gradient_color_4 = '#f2dde1' +horizontal_gradient_color_5 = '#cbc7d8' +horizontal_gradient_color_6 = '#8db7d2' +horizontal_gradient_color_7 = '#5e62a9' +horizontal_gradient_color_8 = '#434279' \ No newline at end of file diff --git a/airootfs/root/.config/ghostty/config b/airootfs/root/.config/ghostty/config index db421c4..0d838ed 100644 --- a/airootfs/root/.config/ghostty/config +++ b/airootfs/root/.config/ghostty/config @@ -1,3 +1,27 @@ +# Background and foreground colors +background = #1e1e2e +foreground = #cdd6f4 + +# Standard colors +palette = 0=#45475a +palette = 1=#f38ba8 +palette = 2=#a6e3a1 +palette = 3=#f9e2af +palette = 4=#89b4fa +palette = 5=#cba6f7 +palette = 6=#94e2d5 +palette = 7=#bac2de + +# Bright colors +palette = 8=#585b70 +palette = 9=#f38ba8 +palette = 10=#a6e3a1 +palette = 11=#f9e2af +palette = 12=#89b4fa +palette = 13=#cba6f7 +palette = 14=#94e2d5 +palette = 15=#cdd6f4 + # Font font-family = "JetBrainsMono Nerd Font" font-style = Regular diff --git a/airootfs/root/.config/hypr/hyprland.lua b/airootfs/root/.config/hypr/hyprland.lua index 50320aa..8d154ea 100644 --- a/airootfs/root/.config/hypr/hyprland.lua +++ b/airootfs/root/.config/hypr/hyprland.lua @@ -29,7 +29,7 @@ hl.monitor({ -- Set programs that you use local terminal = "ghostty" local fileManager = "yazi" -local menu = "rofi" +local menu = "rofi -show drun" ------------------- @@ -83,14 +83,14 @@ hl.env("HYPRCURSOR_SIZE", "24") -- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/ hl.config({ general = { - gaps_in = 5, - gaps_out = 20, + gaps_in = 2, + gaps_out = 4, border_size = 2, col = { - active_border = { colors = {"rgba(33ccffee)", "rgba(00ff99ee)"}, angle = 45 }, - inactive_border = "rgba(595959aa)", + active_border = "rgb(303463)", + inactive_border = "rgb(1a1b26)", }, -- Set to true to enable resizing windows by clicking and dragging on borders and gaps @@ -103,25 +103,26 @@ hl.config({ }, decoration = { - rounding = 10, - rounding_power = 2, + rounding = 14, + rounding_power = 5, -- Change transparency of focused and unfocused windows - active_opacity = 1.0, - inactive_opacity = 1.0, + active_opacity = 0.93, + inactive_opacity = 0.92, + fullscreen_opacity = 1.0, shadow = { - enabled = true, - range = 4, - render_power = 3, + enabled = false, + range = 15, + render_power = 5, color = 0xee1a1a1a, }, blur = { enabled = true, - size = 3, - passes = 1, - vibrancy = 0.1696, + size = 1, + passes = 4, + vibrancy = 0.2, }, }, @@ -257,7 +258,7 @@ local closeWindowBind = hl.bind(mainMod .. " + W", hl.dsp.window.close()) -- closeWindowBind:set_enabled(false) hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'")) hl.bind(mainMod .. " + F", hl.dsp.exec_cmd(fileManager)) -hl.bind(mainMod .. " + V", hl.dsp.window.float({ action = "toggle" })) +hl.bind(mainMod .. " + T", hl.dsp.window.float({ action = "toggle" })) hl.bind(mainMod .. " + SPACE", hl.dsp.exec_cmd(menu)) hl.bind(mainMod .. " + P", hl.dsp.window.pseudo()) hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only diff --git a/airootfs/root/.config/obsidian/obsidian.css b/airootfs/root/.config/obsidian/obsidian.css new file mode 100644 index 0000000..e4010ac --- /dev/null +++ b/airootfs/root/.config/obsidian/obsidian.css @@ -0,0 +1,99 @@ +/* Theme for Obsidian */ + +.theme-dark, .theme-light { + /* Core colors */ + --background-primary: #1e1e2e; + --background-primary-alt: #1e1e2e; + --background-secondary: #1e1e2e; + --background-secondary-alt: #1e1e2e; + --text-normal: #cdd6f4; + + /* Selection colors */ + --text-selection: #292b3b; + + /* Border color */ + --background-modifier-border: #585b70; + + /* Semantic heading colors */ + --text-title-h1: #f38ba8; + --text-title-h2: #a6e3a1; + --text-title-h3: #f9e2af; + --text-title-h4: #89b4fa; + --text-title-h5: #cba6f7; + --text-title-h6: #cba6f7; + + /* Links and accents */ + --text-link: #89b4fa; + --text-accent: #89b4fa; + --text-accent-hover: #89b4fa; + --interactive-accent: #89b4fa; + --interactive-accent-hover: #89b4fa; + + /* Muted text */ + --text-muted: color-mix(in srgb, #cdd6f4 70%, transparent); + --text-faint: color-mix(in srgb, #cdd6f4 55%, transparent); + + /* Code */ + --code-normal: #94e2d5; + + /* Errors and success */ + --text-error: #f38ba8; + --text-error-hover: #f38ba8; + --text-success: #a6e3a1; + + /* Tags */ + --tag-color: #94e2d5; + --tag-background: #585b70; + + /* Graph */ + --graph-line: #585b70; + --graph-node: #89b4fa; + --graph-node-focused: #89b4fa; + --graph-node-tag: #94e2d5; + --graph-node-attachment: #a6e3a1; +} + +/* Headers */ +.cm-header-1, .markdown-rendered h1 { color: var(--text-title-h1); } +.cm-header-2, .markdown-rendered h2 { color: var(--text-title-h2); } +.cm-header-3, .markdown-rendered h3 { color: var(--text-title-h3); } +.cm-header-4, .markdown-rendered h4 { color: var(--text-title-h4); } +.cm-header-5, .markdown-rendered h5 { color: var(--text-title-h5); } +.cm-header-6, .markdown-rendered h6 { color: var(--text-title-h6); } + +/* Code blocks */ +.markdown-rendered code { + color: #94e2d5; +} + +/* Syntax highlighting */ +.cm-s-obsidian span.cm-keyword { color: #f38ba8; } +.cm-s-obsidian span.cm-string { color: #a6e3a1; } +.cm-s-obsidian span.cm-number { color: #f9e2af; } +.cm-s-obsidian span.cm-comment { color: #585b70; } +.cm-s-obsidian span.cm-operator { color: #89b4fa; } +.cm-s-obsidian span.cm-def { color: #89b4fa; } + +/* Links */ +.markdown-rendered a { + color: var(--text-link); +} + +/* Blockquotes */ +.markdown-rendered blockquote { + border-left-color: #89b4fa; +} + +/* Active elements */ +.workspace-leaf.mod-active .workspace-leaf-header-title { + color: var(--interactive-accent); +} + +.nav-file-title.is-active { + color: var(--interactive-accent); +} + +/* Search results */ +.search-result-file-title { + color: var(--interactive-accent); +} diff --git a/airootfs/root/.config/obsidian/user-flags.conf b/airootfs/root/.config/obsidian/user-flags.conf new file mode 100644 index 0000000..2f9cc08 --- /dev/null +++ b/airootfs/root/.config/obsidian/user-flags.conf @@ -0,0 +1,3 @@ +# Obsidian reads this file through the Arch package wrapper. +-disable-gpu +--enable-wayland-ime diff --git a/airootfs/root/.config/waybar/style.css b/airootfs/root/.config/waybar/style.css index 9c545ae..687a069 100644 --- a/airootfs/root/.config/waybar/style.css +++ b/airootfs/root/.config/waybar/style.css @@ -1,5 +1,6 @@ * { background-color: black; + color: white; border: none; border-radius: 0; min-height: 0; diff --git a/airootfs/root/.install.sh b/airootfs/root/.install.sh index e63b5dd..284b1c7 100755 --- a/airootfs/root/.install.sh +++ b/airootfs/root/.install.sh @@ -435,6 +435,31 @@ if [[ $(tty) == "/dev/tty1" ]]; then "bluetui" "btop" "cava" + "fastfetch" + "obsidian" + "obs-studio" + "visual-studio-code-bin" + "lazygit" + "docker" + "docker-buildx" + "docker-compose" + "lazydocker" + "mpv" + "prismlauncher" + "rust" + "localsend" + "chromium" + "bat" + "base-devel" + "cmake" + "nodejs" + "npm" + "pnpm" + "python" + "python-pip" + "curl" + "wget" + "unzip" ) arch-chroot /mnt pacman -S --noconfirm "${EXTRA_PACKAGES[@]}" diff --git a/airootfs/root/backgrounds/1.png b/airootfs/root/backgrounds/1.png new file mode 100644 index 0000000000000000000000000000000000000000..028b897fe2f3cc87dfbf2fb4c4a96ac20015314b GIT binary patch literal 46937 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 literal 0 HcmV?d00001