better structure
280
config/cava/config
Normal file
@@ -0,0 +1,280 @@
|
||||
## Configuration file for CAVA.
|
||||
# Remove the ; to change parameters.
|
||||
|
||||
|
||||
[general]
|
||||
|
||||
# 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
|
||||
|
||||
|
||||
# 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 if a too low band is specified.
|
||||
; 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.
|
||||
#
|
||||
# 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 '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.
|
||||
#
|
||||
; sample_rate = 44100
|
||||
; sample_bits = 16
|
||||
; channels = 2
|
||||
; autoconnect = 2
|
||||
|
||||
|
||||
[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 200 bars, 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 = mono
|
||||
mono_option = average
|
||||
; reverse = 0
|
||||
|
||||
# Raw output target. A fifo 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 = 1000
|
||||
; sdl_height = 500
|
||||
; 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 = '#b4befe'
|
||||
|
||||
# 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_color_1 = '#94e2d5'
|
||||
gradient_color_2 = '#89dceb'
|
||||
gradient_color_3 = '#74c7ec'
|
||||
gradient_color_4 = '#89b4fa'
|
||||
gradient_color_5 = '#cba6f7'
|
||||
gradient_color_6 = '#f5c2e7'
|
||||
gradient_color_7 = '#eba0ac'
|
||||
gradient_color_8 = '#f38ba8'
|
||||
|
||||
|
||||
|
||||
[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.5 # bass
|
||||
2 = 1
|
||||
3 = 1 # midtone
|
||||
4 = 0.5
|
||||
5 = 0.5 # treble
|
||||
79
config/cava/shaders/bar_spectrum.frag
Normal file
@@ -0,0 +1,79 @@
|
||||
#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 bewteen 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 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);
|
||||
}
|
||||
}
|
||||
117
config/cava/shaders/eye_of_phi.frag
Normal file
@@ -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 bewteen 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);
|
||||
}
|
||||
34
config/cava/shaders/northern_lights.frag
Normal file
@@ -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;
|
||||
}
|
||||
14
config/cava/shaders/pass_through.vert
Normal file
@@ -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;
|
||||
}
|
||||
53
config/cava/shaders/spectrogram.frag
Normal file
@@ -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 bewteen 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 first 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);
|
||||
}
|
||||
}
|
||||
112
config/cava/shaders/winamp_line_style_spectrum.frag
Normal file
@@ -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 bewteen 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);
|
||||
}
|
||||
}
|
||||
15
config/cava/themes/solarized_dark
Normal file
@@ -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'
|
||||
10
config/cava/themes/tricolor
Normal file
@@ -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'
|
||||
5
config/code-flags.conf
Normal file
@@ -0,0 +1,5 @@
|
||||
--password-store=gnome-libsecret
|
||||
--enable-features=UseOzonePlatform
|
||||
--ozone-platform=wayland
|
||||
--use-gl=desktop
|
||||
--enable-wayland-ime
|
||||
174
config/eww/Lyrics/eww.scss
Normal file
@@ -0,0 +1,174 @@
|
||||
* {
|
||||
all: unset;
|
||||
transition: 200ms ease-out;
|
||||
}
|
||||
|
||||
.lyrics-window {
|
||||
background-color: $bg;
|
||||
border-radius: 14px;
|
||||
border: 2px solid $border;
|
||||
}
|
||||
|
||||
.lyrics-window-single {
|
||||
background-color: rgba(30, 30, 46);
|
||||
border-radius: 14px;
|
||||
border: 2px solid $border;
|
||||
}
|
||||
|
||||
.lyrics-box {
|
||||
margin: 20px 10px 0 20px;
|
||||
min-width: 500px;
|
||||
min-height: 70px;
|
||||
background-color: $gray-alt;
|
||||
border-radius: 15px;
|
||||
padding: 10px;
|
||||
box-shadow: 5px 5px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.lyrics-box-single {
|
||||
margin: 5px 0px 5px 10px;
|
||||
min-width: 735px;
|
||||
}
|
||||
|
||||
.lyrics-text {
|
||||
color: $fg;
|
||||
font-size: 15px;
|
||||
font-family: 'Maple Mono NF CN', 'Maple Mono CN', monospace;
|
||||
}
|
||||
|
||||
.lyrics-text-single {
|
||||
color: $fg;
|
||||
font-size: 15px;
|
||||
font-family: 'Maple Mono NF CN', 'Maple Mono CN', monospace;
|
||||
min-height: 28px;
|
||||
}
|
||||
|
||||
.control-box {
|
||||
margin: 20px 10px 0 0;
|
||||
padding: 6px;
|
||||
min-height: 90px;
|
||||
}
|
||||
|
||||
.offset-minus,
|
||||
.offset-reset,
|
||||
.offset-plus,
|
||||
.offset-clear {
|
||||
padding: 0px 6px;
|
||||
margin: 0px 4px 0px 4px;
|
||||
font-family: 'MesloLGM Nerd Font Mono';
|
||||
font-size: 25px;
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
.offset-minus-single,
|
||||
.offset-plus-single,
|
||||
.offset-reset-single,
|
||||
.info-single {
|
||||
padding: 0px 6px;
|
||||
margin: 0;
|
||||
font-family: 'MesloLGM Nerd Font Mono';
|
||||
font-size: 20px;
|
||||
min-width: 16px;
|
||||
}
|
||||
|
||||
.offset-minus,
|
||||
.offset-minus-single {
|
||||
color: $blue;
|
||||
}
|
||||
|
||||
.offset-plus,
|
||||
.offset-plus-single {
|
||||
color: $yellow;
|
||||
}
|
||||
|
||||
.offset-reset,
|
||||
.offset-reset-single {
|
||||
color: $green;
|
||||
}
|
||||
|
||||
.offset-clear {
|
||||
color: $red;
|
||||
}
|
||||
|
||||
.info-single {
|
||||
color: $cyan;
|
||||
}
|
||||
|
||||
.offset-minus:hover,
|
||||
.offset-reset:hover,
|
||||
.offset-plus:hover,
|
||||
.offset-clear:hover,
|
||||
.offset-minus-single:hover,
|
||||
.offset-plus-single:hover,
|
||||
.offset-reset-single:hover,
|
||||
.lyrics-info:hover,
|
||||
.info-single:hover,
|
||||
.player-prev:hover,
|
||||
.player-next:hover,
|
||||
.player-pp:hover {
|
||||
color: $fg;
|
||||
}
|
||||
|
||||
.player-music-slider-box {
|
||||
padding: 12px;
|
||||
margin: 10px 0 20px 20px;
|
||||
border-radius: 15px;
|
||||
background-color: $gray-alt;
|
||||
box-shadow: 5px 5px 8px rgba(0, 0, 0, 0.5);
|
||||
min-height: 16px;
|
||||
}
|
||||
|
||||
.player-music-slider trough {
|
||||
background-color: $gray;
|
||||
}
|
||||
|
||||
.player-music-slider highlight {
|
||||
background-color: $border;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.player-music-slider {
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
.player-controls-box {
|
||||
margin: 10px 0 20px 20px;
|
||||
}
|
||||
|
||||
.player-pp,
|
||||
.player-next,
|
||||
.player-prev,
|
||||
.lyrics-info {
|
||||
padding: 0px 6px;
|
||||
margin: 0px 4px 0px 4px;
|
||||
font-family: 'MesloLGM Nerd Font Mono';
|
||||
font-size: 25px;
|
||||
min-width: 16px;
|
||||
color: $fg-alt;
|
||||
}
|
||||
|
||||
.lyrics-info {
|
||||
color: $cyan;
|
||||
}
|
||||
|
||||
.offset-box {
|
||||
padding: 11px;
|
||||
margin: 10px 20px 20px 10px;
|
||||
border-radius: 15px;
|
||||
// background-color: $gray-alt;
|
||||
// box-shadow: 5px 5px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.offset-label {
|
||||
color: $fg-alt;
|
||||
font-size: 15px;
|
||||
font-family: 'Maple Mono NF CN', 'Maple Mono CN', monospace;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.offset-value {
|
||||
color: $fg;
|
||||
font-size: 15px;
|
||||
font-family: 'Maple Mono NF CN', 'Maple Mono CN', monospace;
|
||||
margin-right: 10px;
|
||||
}
|
||||
95
config/eww/Lyrics/eww.yuck
Normal file
@@ -0,0 +1,95 @@
|
||||
(defpoll lyriclines :interval "500ms" "spotify-lyrics print -l 3 -a 1 -f \"$HOME/.local/state/eww/lyrics/offset\" | Lyrics/scripts/colorize.sh 2")
|
||||
(deflisten lyricline "spotify-lyrics listen -l 1 -f \"$HOME/.local/state/eww/lyrics/offset\"")
|
||||
(defpoll position :interval "1s" "spotify-lyrics position")
|
||||
(defpoll length :interval "1s" "spotify-lyrics length")
|
||||
(defpoll offset :interval "1s" "cat $HOME/.local/state/eww/lyrics/offset")
|
||||
(defpoll play-button :interval "1s" "if spotify-lyrics status; then echo \"\"; else echo \"\"; fi")
|
||||
(defvar hover false)
|
||||
|
||||
(defwidget lyrics []
|
||||
(box :class "lyrics-window" :space-evenly "false" :orientation "v"
|
||||
(box :class "lyrics-container" :space-evenly "false" :orientation "h"
|
||||
(box :class "lyrics-box" :vexpand "false" :hexpand "false" :valign "center" :space-evenly "true" :orientation "v"
|
||||
(label :class "lyrics-text"
|
||||
:vexpand "false" :hexpand "false" :space-evenly "false"
|
||||
:halign "start"
|
||||
:unindent "false" :truncate "false" :truncate-left "false"
|
||||
:markup lyriclines
|
||||
)
|
||||
)
|
||||
(box :class "control-box" :vexpand "false" :hexpand "false" :space-evenly "true" :orientation "v"
|
||||
(box :class "control-row-1" :space-evenly "false" :orientation "h"
|
||||
(button :class "offset-plus" :onclick "Lyrics/scripts/lyric-offset.py +500" "")
|
||||
(button :class "offset-minus" :onclick "Lyrics/scripts/lyric-offset.py -500" "")
|
||||
)
|
||||
(box :class "control-row-1" :space-evenly "false" :orientation "h"
|
||||
(button :class "offset-reset" :onclick "Lyrics/scripts/lyric-offset.py" "")
|
||||
(button :class "offset-clear" :onclick "Lyrics/scripts/lyric-clear.sh $(spotify-lyrics trackid)" "")
|
||||
)
|
||||
)
|
||||
)
|
||||
(box :class "player-controls" :space-evenly "false" :orientation "h"
|
||||
(box :class "player-music-slider-box"
|
||||
:vexpand "false" :hexpand "false" :valign "center" :space-evenly "false" :orientation "h"
|
||||
(eventbox :onhover "eww update hover=true"
|
||||
:onhoverlost "eww update hover=false"
|
||||
:cursor "pointer"
|
||||
:space-evenly "false"
|
||||
(scale :orientation "h" :class "player-music-slider"
|
||||
:min 0 :max length :value position
|
||||
:onchange { hover ? "spotify-lyrics set-position {}" : "" })
|
||||
)
|
||||
)
|
||||
(box :class "player-controls-box"
|
||||
:vexpand "false" :hexpand "false" :valign "center" :space-evenly "false" :orientation "h"
|
||||
(button :class "player-prev" :onclick "playerctl previous --player=spotify" "")
|
||||
(button :class "player-pp" :onclick "playerctl play-pause --player=spotify" "${play-button}")
|
||||
(button :class "player-next" :onclick "playerctl next --player=spotify" "")
|
||||
(button :class "lyrics-info" :onclick "ghostty -e sh -c 'spotify-lyrics fetch | less' &" "")
|
||||
)
|
||||
(box :class "offset-box"
|
||||
:vexpand "false" :hexpand "true" :valign "center" :halign "center" :space-evenly "false" :orientation "h"
|
||||
(label :class "offset-label" :text "Offset (ms): ")
|
||||
(label :class "offset-value" :text offset)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defwidget lyrics-single []
|
||||
(box :class "lyrics-window-single" :space-evenly "false" :orientation "h"
|
||||
(box :class "lyrics-box-single"
|
||||
:vexpand "false" :hexpand "false"
|
||||
:valign "center" :space-evenly "false" :orientation "v"
|
||||
(label :class "lyrics-text-single"
|
||||
:vexpand "false" :hexpand "false" :space-evenly "false"
|
||||
:halign "start"
|
||||
:text lyricline
|
||||
)
|
||||
)
|
||||
(box :class "control-box-single" :vexpand "false" :hexpand "false" :space-evenly "true" :orientation "v"
|
||||
(box :class "control-row-1-single" :space-evenly "false" :orientation "h"
|
||||
(button :class "info-single" :onclick "ghostty -e sh -c 'spotify-lyrics fetch | less' &" "")
|
||||
(button :class "offset-plus-single" :onclick "Lyrics/scripts/lyric-offset.py +500" "")
|
||||
(button :class "offset-reset-single" :onclick "Lyrics/scripts/lyric-offset.py" "")
|
||||
(button :class "offset-minus-single" :onclick "Lyrics/scripts/lyric-offset.py -500" "")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defwindow lyrics
|
||||
:windowtype "normal"
|
||||
:wm-ignore true
|
||||
:monitor 0
|
||||
:geometry (geometry :anchor "top center")
|
||||
(lyrics)
|
||||
)
|
||||
|
||||
(defwindow lyrics-single
|
||||
:windowtype "normal"
|
||||
:wm-ignore true
|
||||
:monitor 0
|
||||
:geometry (geometry :x 1108 :y -45)
|
||||
(lyrics-single)
|
||||
)
|
||||
24
config/eww/Lyrics/scripts/colorize.sh
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
HIGHLIGHT_COLOR="#cdd6f4" # text
|
||||
NORMAL_COLOR="#7f849c" # overlay1
|
||||
TARGET_LINE=1
|
||||
[ -n "$1" ] && TARGET_LINE="$1"
|
||||
|
||||
mapfile -t lines
|
||||
|
||||
output=""
|
||||
for i in "${!lines[@]}"; do
|
||||
line_num=$((i + 1))
|
||||
escaped_line=$(echo "${lines[$i]}" | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
|
||||
|
||||
[[ $i -gt 0 ]] && output+=$'\n' # +="\n" is not properly displayed in eww
|
||||
|
||||
if [[ $line_num -eq $TARGET_LINE ]]; then
|
||||
output+="<span color=\"$HIGHLIGHT_COLOR\">$escaped_line</span>"
|
||||
else
|
||||
output+="<span color=\"$NORMAL_COLOR\">$escaped_line</span>"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "$output"
|
||||
9
config/eww/Lyrics/scripts/lyric-clear.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
"spotify-lyrics" clear
|
||||
notify-send -a "spotify-lyrics" "Cache Cleared" "Lyrics cache have been cleared."
|
||||
else
|
||||
"spotify-lyrics" clear "$1"
|
||||
notify-send -a "spotify-lyrics" "Cache Cleared" "Lyrics cache for track $1 have been cleared."
|
||||
fi
|
||||
45
config/eww/Lyrics/scripts/lyric-offset.py
Executable file
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
APP_NAME = "spotify-lyrics"
|
||||
STATE_DIR_NAME = "~/.local/state/eww/lyrics"
|
||||
STATE_FILE_NAME = "offset"
|
||||
|
||||
|
||||
def notify_send(title, message):
|
||||
import subprocess
|
||||
subprocess.run(["notify-send", "-t", "1000", "-a", APP_NAME, title, message], check=True)
|
||||
|
||||
|
||||
def main():
|
||||
import sys
|
||||
import os
|
||||
|
||||
state_dir = os.path.expanduser(STATE_DIR_NAME)
|
||||
if not os.path.exists(state_dir):
|
||||
os.makedirs(state_dir)
|
||||
|
||||
offset_file = os.path.join(state_dir, STATE_FILE_NAME)
|
||||
if not os.path.exists(offset_file):
|
||||
with open(offset_file, "w") as f:
|
||||
f.write("0")
|
||||
|
||||
if len(sys.argv) < 2:
|
||||
new_offset = 0
|
||||
else:
|
||||
try:
|
||||
increment = int(sys.argv[1])
|
||||
with open(offset_file, "r") as f:
|
||||
current_offset = int(f.read().strip())
|
||||
new_offset = current_offset + increment
|
||||
except ValueError:
|
||||
print("Invalid input. Please provide an integer value.")
|
||||
return
|
||||
|
||||
with open(offset_file, "w") as f:
|
||||
f.write(str(new_offset))
|
||||
|
||||
notify_send("Lyrics Speed Changed", f"The offset has been changed to {new_offset} ms.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
2
config/eww/Lyrics/scripts/lyric-show.sh
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
|
||||
270
config/eww/Main/eww.scss
Normal file
@@ -0,0 +1,270 @@
|
||||
* {
|
||||
all: unset;
|
||||
transition: 200ms ease-out;
|
||||
}
|
||||
|
||||
.main-window {
|
||||
background-color: $bg;
|
||||
font-family: 'Sour Gummy', 'MesloLGM Nerd Font Mono', 'Noto Sans';
|
||||
border-radius: 14px;
|
||||
border: 2px solid $border;
|
||||
}
|
||||
|
||||
.date-box {
|
||||
// background-color: $bg;
|
||||
margin: 20px 20px 0px 20px;
|
||||
min-width: 290px;
|
||||
padding: 20px 10px 20px 10px;
|
||||
border-radius: 15px;
|
||||
color: $fg;
|
||||
// box-shadow: 5px 5px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.time {
|
||||
font-family: 'Sour Gummy ExtraLight';
|
||||
font-weight: bold;
|
||||
font-size: 100px;
|
||||
margin-top: 24px;
|
||||
}
|
||||
|
||||
.date {
|
||||
font-size: 24px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.weather-box {
|
||||
background-color: $gray-alt;
|
||||
margin: 20px 20px 0px 0px;
|
||||
padding: 20px 10px 10px 20px;
|
||||
border-radius: 15px;
|
||||
box-shadow: 5px 5px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.weather-desc {
|
||||
color: $fg-alt;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.weather-temp {
|
||||
font-size: 36px;
|
||||
color: $fg;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.weather-icon {
|
||||
font-family: 'MesloLGM Nerd Font';
|
||||
font-size: 60px;
|
||||
margin-top: 5px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.weather-updatetime {
|
||||
color: $fg-alt;
|
||||
font-size: 16px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.stats-box {
|
||||
background-color: $gray-alt;
|
||||
margin: 20px 20px 0px 20px;
|
||||
padding: 20px 35px 20px 25px;
|
||||
border-radius: 15px;
|
||||
box-shadow: 5px 5px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.stats-header {
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
color: $gray;
|
||||
}
|
||||
|
||||
.volume-icon,
|
||||
.brightness-icon,
|
||||
.cpu-icon,
|
||||
.memory-icon {
|
||||
font-size: 20px;
|
||||
color: $fg;
|
||||
}
|
||||
|
||||
.volume-scale trough,
|
||||
.brightness-scale trough,
|
||||
.cpu-scale trough,
|
||||
.memory-scale trough {
|
||||
all: unset;
|
||||
background-color: $gray;
|
||||
min-height: 10px;
|
||||
border-radius: 15px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.volume-scale highlight {
|
||||
background-color: $sapphire;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.brightness-scale highlight {
|
||||
background-color: $teal;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.cpu-scale highlight {
|
||||
background-color: $yellow;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.memory-scale highlight {
|
||||
background-color: $peach;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.fortune-box {
|
||||
// background-color: $gray-alt;
|
||||
margin: 20px 20px 0px 0px;
|
||||
padding: 20px 35px 20px 25px;
|
||||
border-radius: 15px;
|
||||
// box-shadow: 5px 5px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.fortune-header {
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
color: $gray;
|
||||
}
|
||||
|
||||
.fortune-text {
|
||||
font-family: 'Noto Sans';
|
||||
font-size: 14px;
|
||||
color: $fg;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.music-art-box {
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
min-width: 455px;
|
||||
min-height: 240px;
|
||||
border-radius: 17px;
|
||||
background-position: center;
|
||||
margin: 20px 0px 0px 20px;
|
||||
box-shadow: 5px 5px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.music-title {
|
||||
margin: 20px 0px 0px 20px;
|
||||
font-size: 28px;
|
||||
font-weight: bold;
|
||||
color: $fg;
|
||||
}
|
||||
|
||||
.music-artist {
|
||||
margin: 10px 0px 0px 20px;
|
||||
font-size: 20px;
|
||||
color: $fg-alt;
|
||||
}
|
||||
|
||||
.music-length {
|
||||
margin: 90px 0px 0px 20px;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: $fg-alt;
|
||||
}
|
||||
|
||||
.music-stuff-box {
|
||||
border-radius: 15px;
|
||||
background: linear-gradient(to right, $bg-alt, transparent);
|
||||
min-height: 240px;
|
||||
}
|
||||
|
||||
.player-cover-box {
|
||||
background-size: 140px;
|
||||
min-height: 140px;
|
||||
min-width: 140px;
|
||||
border-radius: 20px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.player-box {
|
||||
margin: 40px 30px 30px 50px;
|
||||
}
|
||||
|
||||
.player-info-box {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.player-info-title,
|
||||
.player-info-artist {
|
||||
color: $border;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.player-info-album,
|
||||
.player-info-length {
|
||||
color: $fg-alt;
|
||||
}
|
||||
|
||||
.player-info-button {
|
||||
background-color: $gray-alt;
|
||||
padding: 15px;
|
||||
border-radius: 20px;
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.cavabar {
|
||||
font-family: 'Noto Sans';
|
||||
font-size: 14px;
|
||||
color: $border;
|
||||
}
|
||||
|
||||
.music-controls-box {
|
||||
margin: 20px 20px 0px 20px;
|
||||
// background-color: $gray-alt;
|
||||
padding: 0px 23px 0px 23px;
|
||||
border-radius: 15px;
|
||||
text-shadow: 0px 0px 10px rgba(0, 0, 0, 1);
|
||||
// box-shadow: 5px 5px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.music-next,
|
||||
.music-previous {
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
.music-pp {
|
||||
font-size: 44px;
|
||||
color: $fg;
|
||||
}
|
||||
|
||||
.music-next:hover,
|
||||
.music-previous:hover,
|
||||
.music-pp:hover {
|
||||
color: $orange;
|
||||
}
|
||||
|
||||
.profile-stuff-box {
|
||||
margin: 20px 20px 20px 20px;
|
||||
// background-color: $gray-alt;
|
||||
border-radius: 15px;
|
||||
padding: 15px 20px 15px 20px;
|
||||
// box-shadow: 5px 5px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.profile-img {
|
||||
border-radius: 10px;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
min-width: 90px;
|
||||
box-shadow: 5px 5px 8px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.profile-stuff {
|
||||
padding: 7px 0px 0px 30px;
|
||||
font-size: 20px;
|
||||
color: $fg;
|
||||
}
|
||||
|
||||
.profile-name {
|
||||
font-weight: bold;
|
||||
}
|
||||
116
config/eww/Main/eww.yuck
Normal file
@@ -0,0 +1,116 @@
|
||||
;; variables
|
||||
(defvar window false)
|
||||
(defpoll time :interval "1s" "date '+%H:%M'")
|
||||
(defpoll date :interval "1s" "date '+%A, %B %d'")
|
||||
(deflisten notifications-cards "Main/scripts/logger.zsh subscribe")
|
||||
(defpoll notifications-crits :interval "1s" "Main/scripts/logger.zsh crits")
|
||||
(defpoll weather-icon :interval "5m" "Main/scripts/weather --icon")
|
||||
(defpoll weather-temp :interval "5m" "Main/scripts/weather --temp")
|
||||
(defpoll weather-desc :interval "5m" "Main/scripts/weather --stat")
|
||||
(defpoll weather-updatetime :interval "5m" "Main/scripts/weather --updatetime")
|
||||
(deflisten weather-color :initial "#7aa2f7" "Main/scripts/weather --hex")
|
||||
(defpoll calendar-day :interval "20h" "+%d")
|
||||
(defpoll calendar-year :interval "20h" "+%Y")
|
||||
(defpoll calendar-month :interval "20h" "%+B")
|
||||
(defpoll cpu :interval "1s" "Main/scripts/system --cpu")
|
||||
(defpoll memory :interval "1s" "Main/scripts/system --mem")
|
||||
(defpoll profile-image :interval "10h" "Main/scripts/details --image")
|
||||
(defpoll profile-username :interval "1h" "whoami")
|
||||
(defpoll profile-name :interval "1h" "Main/scripts/details --name")
|
||||
(defpoll profile-kernel :interval "1h" "Main/scripts/details --kernel")
|
||||
(defpoll profile-os :interval "1h" "Main/scripts/details --os")
|
||||
(defpoll music-length :interval "1s" "Main/scripts/music-length")
|
||||
(defpoll music-title :interval "1s" "Main/scripts/music-title --status")
|
||||
(defpoll music-pp :interval "1s" "Main/scripts/music-title --icon")
|
||||
(defpoll music-artist :interval "1s" "Main/scripts/music-artist")
|
||||
(defpoll music-art :interval "1s" "Main/scripts/music-art")
|
||||
(defpoll music-art-blur :interval "1s" "Main/scripts/music-art-blur")
|
||||
(defpoll volume :interval "1s" "Main/scripts/system --vol")
|
||||
(defpoll brightness :interval "1s" "Main/scripts/system --bri")
|
||||
(defpoll fortune :interval "1h" "Main/scripts/fortune-split 32 6")
|
||||
(deflisten cava "Main/scripts/cava")
|
||||
(defpoll title :interval "1s" "Main/scripts/music-title --status")
|
||||
(defpoll artist :interval "1s" "Main/scripts/player --artist")
|
||||
(defpoll album :interval "1s" "Main/scripts/player --album")
|
||||
(defpoll length-info :interval "1s" "Main/scripts/player --length-info")
|
||||
(defvar volume-hover false)
|
||||
(defvar brightness-hover false)
|
||||
|
||||
;; widgets
|
||||
(defwidget main []
|
||||
(box :class "main-window" :space-evenly "false" :orientation "v"
|
||||
(box :class "top-row" :orientation "h" :space-evenly "false"
|
||||
(box :class "date-box" :space-evenly "false" :orientation "v" :hexpand "false" :vexpand "false"
|
||||
(label :class "time" :text time)
|
||||
(label :class "date" :text date))
|
||||
(box :class "weather-box" :space-evenly "false" :hexpand "true" :orientation "v"
|
||||
(label :class "weather-desc" :halign "start" :text weather-desc)
|
||||
(label :class "weather-temp" :halign "start" :text weather-temp)
|
||||
(label :class "weather-updatetime" :halign "start" :text weather-updatetime)
|
||||
(label :class "weather-icon" :halign "end" :valign "start" :text weather-icon :style "color: ${weather-color}")))
|
||||
(box :class "second-row" :orientation "h" :space-evenly "false"
|
||||
(box :class "stats-box" :space-evenly "false" :orientation "v" :spacing 8
|
||||
(label :class "stats-header" :halign "start" :text "Stats")
|
||||
(box :class "volume-stats" :hexpand "false" :vexpand "false" :space-evenly "false"
|
||||
(label :tooltip "${volume}%" :class "volume-icon" :text "")
|
||||
(eventbox :class "volume-eventbox"
|
||||
:onhover "eww update volume-hover=true"
|
||||
:onhoverlost "eww update volume-hover=false"
|
||||
:cursor "pointer"
|
||||
:space-evenly "false"
|
||||
(scale :min 0 :max 101 :class "volume-scale" :width 150
|
||||
:value {volume == "" ? 0 : volume}
|
||||
:round-digits 0
|
||||
:onchange { volume-hover ? "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ {}%" : "" }
|
||||
)))
|
||||
(box :class "brightness-stats" :hexpand "false" :vexpand "false" :space-evenly "false"
|
||||
(label :tooltip "${brightness}%" :class "brightness-icon" :text "")
|
||||
(eventbox :class "brightness-eventbox"
|
||||
:onhover "eww update brightness-hover=true"
|
||||
:onhoverlost "eww update brightness-hover=false"
|
||||
:cursor "pointer"
|
||||
:space-evenly "false"
|
||||
(scale :min 0 :max 101 :class "brightness-scale" :width 150
|
||||
:value {brightness == "" ? 0 : brightness}
|
||||
:round-digits 0
|
||||
:onchange { brightness-hover ? "brightnessctl set {}\% --class=backlight" : "" })))
|
||||
(box :class "cpu-stats" :hexpand "false" :vexpand "false" :space-evenly "false"
|
||||
(label :tooltip "${cpu}%" :class "cpu-icon" :text "")
|
||||
(scale :min 0 :max 101 :active false :value {cpu == "" ? 0 : cpu} :class "cpu-scale" :width 150))
|
||||
(box :class "memory-stats" :hexpand "false" :vexpand "false" :space-evenly "false"
|
||||
(label :tooltip "${memory}%" :class "memory-icon" :text "")
|
||||
(scale :min 0 :max 101 :active false :value {memory == "" ? 0 : memory} :class "memory-scale" :width 150)))
|
||||
(box :class "fortune-box" :space-evenly "false" :hexpand "true" :orientation "v"
|
||||
(label :class "fortune-header" :halign "start" :text "Fortune")
|
||||
(label :class "fortune-text" :halign "start" :text fortune :show-truncated true :wrap true)))
|
||||
(box :class "third-row" :orientation "h" :space-evenly "false"
|
||||
(box :class "music-art-box" :space-evenly "false" :orientation "v" :hexpand "false" :vexpand "false" :style "background-image: url(\"${music-art-blur}\");"
|
||||
(box :class "music-stuff-box" :space-evenly "false" :hexpand "false" :vexpand "false" :orientation "v"
|
||||
(box :class "player-box" :hexpand "false" :vexpand "false" :space-evenly "true"
|
||||
(box :class "player-info-box" :hexpand "false" :vexpand "false" :space-evenly "false" :orientation "v" :spacing 15
|
||||
(label :class "player-info-title" :text " Title: ${title}" :halign "start" :limit-width 30 :tooltip "${title}")
|
||||
(label :class "player-info-artist" :text " Artist: ${artist}" :halign "start" :limit-width 30 :tooltip "${artist}")
|
||||
(label :class "player-info-album" :text " Album: ${album}" :halign "start" :limit-width 30 :tooltip "${album}")
|
||||
(label :class "player-info-length" :text " Length: ${length-info}" :halign "start" :tooltip "${length-info}"))
|
||||
(box :class "player-cover-box" :hexpand "false" :halign "end" :vexpand "false" :space-evenly "false" :style "background-image: url(\"${music-art}\");"))
|
||||
(label :vexpand "true" :hexpand "false" :space-evenly "false" :valign "end"
|
||||
:class "cavabar"
|
||||
:text cava)))
|
||||
(box :class "music-controls-box" :space-evenly "true" :hexpand "true" :vexpand "false" :orientation "v"
|
||||
(button :class "music-previous" :halign "center" :onclick "playerctl previous" "")
|
||||
(button :class "music-pp" :halign "center" :onclick "playerctl play-pause" "${music-pp}")
|
||||
(button :class "music-next" :halign "center" :onclick "playerctl next" "")))
|
||||
(box :class "profile-stuff-box" :space-evenly "false" :hexpand "false" :vexpand "false" :orientation "h" :height 140
|
||||
(box :class "profile-img" :space-evenly "false" :hexpand "false" :vexpand "false" :orientation "v" :style "background-image: url(\"${profile-image}\");")
|
||||
(box :class "profile-stuff" :orientation "v" :space-evenly "false" :hexpand "false" :vexpand "false" :spacing 8
|
||||
(label :class "profile-name" :text profile-name :halign "start")
|
||||
(label :class "profile-os" :text profile-os :halign "start")
|
||||
(label :class "profile-kernel" :text profile-kernel :halign "start")))))
|
||||
|
||||
;; windows
|
||||
(defwindow main
|
||||
:windowtype "normal"
|
||||
:wm-ignore true
|
||||
:monitor 0
|
||||
:geometry (geometry :x 0 :y 0)
|
||||
(main))
|
||||
BIN
config/eww/Main/images/default-music-blur.png
Normal file
|
After Width: | Height: | Size: 919 KiB |
1
config/eww/Main/images/default-music.svg
Normal file
|
After Width: | Height: | Size: 148 KiB |
BIN
config/eww/Main/images/profile.png
Normal file
|
After Width: | Height: | Size: 182 KiB |
40
config/eww/Main/scripts/cava
Executable file
@@ -0,0 +1,40 @@
|
||||
#! /bin/bash
|
||||
|
||||
|
||||
bar="▁▂▃▄▅▆▇█"
|
||||
dict="s/;//g;"
|
||||
|
||||
# creating "dictionary" to replace char with bar
|
||||
i=0
|
||||
while [ $i -lt ${#bar} ]
|
||||
do
|
||||
dict="${dict}s/$i/${bar:$i:1}/g;"
|
||||
i=$((i=i+1))
|
||||
done
|
||||
|
||||
# make sure to clean pipe
|
||||
pipe="/tmp/cava.fifo"
|
||||
if [ -p $pipe ]; then
|
||||
unlink $pipe
|
||||
fi
|
||||
mkfifo $pipe
|
||||
|
||||
# write cava config
|
||||
config_file="/tmp/waybar_cava_config"
|
||||
echo "
|
||||
[general]
|
||||
bars = 30
|
||||
[output]
|
||||
method = raw
|
||||
raw_target = $pipe
|
||||
data_format = ascii
|
||||
ascii_max_range = 7
|
||||
" > $config_file
|
||||
|
||||
# run cava in the background
|
||||
cava -p $config_file &
|
||||
|
||||
# reading data from fifo
|
||||
while read -r cmd; do
|
||||
echo $cmd | sed $dict
|
||||
done < $pipe
|
||||
28
config/eww/Main/scripts/details
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ $1 == "--image" ]]; then
|
||||
FILE=$HOME/.face
|
||||
if [[ -f "$FILE" ]]; then
|
||||
echo "../../.face"
|
||||
else
|
||||
echo "Main/images/profile.png"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if [[ $1 == "--name" ]]; then
|
||||
fullname=$(getent passwd "$(whoami)" | cut -d ':' -f 5 | cut -d ',' -f 1 | tr -d "\n")
|
||||
if [ -z "$fullname" ]; then
|
||||
echo "$(whoami)@$(hostnamectl | awk 'FNR==1 {print $3}')"
|
||||
else
|
||||
echo "$fullname"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $1 == "--kernel" ]]; then
|
||||
echo "$(uname -r)"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--os" ]]; then
|
||||
echo "$(cat /etc/os-release | awk 'NR==1'| awk -F '"' '{print $2}')"
|
||||
fi
|
||||
92
config/eww/Main/scripts/fortune-split
Executable file
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import subprocess
|
||||
|
||||
|
||||
def wrap(text, width, height):
|
||||
lines = []
|
||||
|
||||
paragraphs = text.split('\n')
|
||||
|
||||
for paragraph in paragraphs:
|
||||
if len(lines) >= height:
|
||||
return []
|
||||
|
||||
# Skip empty paragraphs
|
||||
if not paragraph.strip():
|
||||
lines.append('')
|
||||
continue
|
||||
|
||||
current_line = ''
|
||||
words = paragraph.split()
|
||||
|
||||
for word in words:
|
||||
if current_line:
|
||||
test_line = current_line + ' ' + word
|
||||
else:
|
||||
test_line = word
|
||||
|
||||
if len(test_line) <= width:
|
||||
current_line = test_line
|
||||
else:
|
||||
if current_line:
|
||||
lines.append(current_line)
|
||||
current_line = word
|
||||
else:
|
||||
while len(word) > width:
|
||||
lines.append(word[:width])
|
||||
word = word[width:]
|
||||
current_line = word
|
||||
|
||||
if current_line:
|
||||
lines.append(current_line)
|
||||
|
||||
return lines
|
||||
|
||||
|
||||
RETRY_LIMIT = 10
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 3:
|
||||
print("Usage: fortune.py <width> <height>")
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
width = int(sys.argv[1])
|
||||
if width <= 0:
|
||||
raise ValueError()
|
||||
height = int(sys.argv[2])
|
||||
if height <= 0:
|
||||
raise ValueError()
|
||||
except ValueError:
|
||||
print("Invalid argument.")
|
||||
sys.exit(1)
|
||||
|
||||
i = 0
|
||||
while True:
|
||||
if i >= RETRY_LIMIT:
|
||||
print("Failed to get fortune after multiple attempts.")
|
||||
sys.exit(1)
|
||||
i += 1
|
||||
|
||||
try:
|
||||
buffer = subprocess.check_output(['fortune', '-s'], text=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"Error running fortune: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
lines = wrap(buffer, width, height)
|
||||
|
||||
if lines:
|
||||
break
|
||||
else:
|
||||
print("retrying...")
|
||||
|
||||
for line in lines:
|
||||
print(line)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
32
config/eww/Main/scripts/music-album
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Set the source audio player here.
|
||||
# Players supporting the MPRIS spec are supported.
|
||||
# Examples: spotify, vlc, chrome, mpv and others.
|
||||
# Use `playerctld` to always detect the latest player.
|
||||
# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
|
||||
PLAYER="playerctld"
|
||||
|
||||
# Format of the information displayed
|
||||
# Eg. {{ artist }} - {{ album }} - {{ title }}
|
||||
# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
|
||||
FORMAT="{{ album }}"
|
||||
|
||||
PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
|
||||
EXIT_CODE=$?
|
||||
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
STATUS=$PLAYERCTL_STATUS
|
||||
else
|
||||
STATUS="No Album"
|
||||
fi
|
||||
|
||||
if [ "$STATUS" = "Stopped" ]; then
|
||||
echo "No Album"
|
||||
elif [ "$STATUS" = "Paused" ]; then
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
elif [ "$STATUS" = "No Alnum" ]; then
|
||||
echo "$STATUS"
|
||||
else
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
fi
|
||||
45
config/eww/Main/scripts/music-art
Executable file
@@ -0,0 +1,45 @@
|
||||
#!/bin/bash
|
||||
|
||||
tmp_dir="$HOME/.cache/eww/music-art"
|
||||
art_path=$tmp_dir/temp.png
|
||||
art_blur_path="$tmp_dir/temp-blur.png"
|
||||
cache_path="$tmp_dir/cache.conf"
|
||||
cache_blur_path="$tmp_dir/cache-blur.conf"
|
||||
log_path="$tmp_dir/log.txt"
|
||||
default_path="$HOME/.config/eww/Main/images/default-music.svg"
|
||||
default_blur_path="$HOME/.config/eww/Main/images/default-music-blur.png"
|
||||
|
||||
mkdir -p "$tmp_dir"
|
||||
|
||||
artlink="$(playerctl metadata mpris:artUrl)"
|
||||
[ -f "$cache_path" ] && . "$cache_path"
|
||||
|
||||
# avoid unnecessary downloads
|
||||
if [ -z "$artlink" ]; then
|
||||
art_path="$default_path"
|
||||
art_blur_path="$default_blur_path"
|
||||
elif [[ "$cachedlink" != "$artlink" ]]; then
|
||||
echo "cachedlink=\"$artlink\"" > "$cache_path"
|
||||
echo "Updating music art: $artlink" >> "$log_path"
|
||||
|
||||
if [[ "$artlink" == "file://"* ]]; then
|
||||
# Handle local file URLs
|
||||
local_file_path="${artlink#file://}"
|
||||
if [[ -f "$local_file_path" ]]; then
|
||||
magick "$local_file_path" "$art_path" || exit 1
|
||||
fi
|
||||
magick "$art_path" -blur 0x8 "$art_blur_path"
|
||||
elif [[ "$artlink" =~ ^https?:// ]]; then
|
||||
# Handle HTTP/HTTPS URLs
|
||||
curl -s "$artlink" --output "$art_path"_orig || exit 1
|
||||
magick "$art_path"_orig "$art_path" || exit 1
|
||||
magick "$art_path" -blur 0x8 "$art_blur_path"
|
||||
else
|
||||
echo "Unknown art link format: $artlink" >> "$log_path"
|
||||
art_path="$default_path"
|
||||
art_blur_path="$default_blur_path"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "path=\"$art_blur_path\"" > "$cache_blur_path"
|
||||
echo "$art_path"
|
||||
8
config/eww/Main/scripts/music-art-blur
Executable file
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
tmp_dir="$HOME/.cache/eww/music-art"
|
||||
cache_blur_path="$tmp_dir/cache-blur.conf"
|
||||
|
||||
. "$cache_blur_path"
|
||||
|
||||
echo "$path"
|
||||
32
config/eww/Main/scripts/music-artist
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Set the source audio player here.
|
||||
# Players supporting the MPRIS spec are supported.
|
||||
# Examples: spotify, vlc, chrome, mpv and others.
|
||||
# Use `playerctld` to always detect the latest player.
|
||||
# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
|
||||
PLAYER="playerctld"
|
||||
|
||||
# Format of the information displayed
|
||||
# Eg. {{ artist }} - {{ album }} - {{ title }}
|
||||
# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
|
||||
FORMAT="{{ artist }}"
|
||||
|
||||
PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
|
||||
EXIT_CODE=$?
|
||||
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
STATUS=$PLAYERCTL_STATUS
|
||||
else
|
||||
STATUS="No Artist"
|
||||
fi
|
||||
|
||||
if [ "$STATUS" = "Stopped" ]; then
|
||||
echo "No Artist"
|
||||
elif [ "$STATUS" = "Paused" ]; then
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
elif [ "$STATUS" = "No Artist" ]; then
|
||||
echo "$STATUS"
|
||||
else
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
fi
|
||||
32
config/eww/Main/scripts/music-length
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Set the source audio player here.
|
||||
# Players supporting the MPRIS spec are supported.
|
||||
# Examples: spotify, vlc, chrome, mpv and others.
|
||||
# Use `playerctld` to always detect the latest player.
|
||||
# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
|
||||
PLAYER="playerctld"
|
||||
|
||||
# Format of the information displayed
|
||||
# Eg. {{ artist }} - {{ album }} - {{ title }}
|
||||
# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
|
||||
FORMAT="{{ duration(position) }} / {{ duration(mpris:length) }}"
|
||||
|
||||
PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
|
||||
EXIT_CODE=$?
|
||||
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
STATUS=$PLAYERCTL_STATUS
|
||||
else
|
||||
STATUS="--:-- / --:--"
|
||||
fi
|
||||
|
||||
if [ "$STATUS" = "Stopped" ]; then
|
||||
echo "--:-- / --:--"
|
||||
elif [ "$STATUS" = "Paused" ]; then
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
elif [ "$STATUS" = "--:-- / --:--" ]; then
|
||||
echo "$STATUS"
|
||||
else
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
fi
|
||||
32
config/eww/Main/scripts/music-length-info
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Set the source audio player here.
|
||||
# Players supporting the MPRIS spec are supported.
|
||||
# Examples: spotify, vlc, chrome, mpv and others.
|
||||
# Use `playerctld` to always detect the latest player.
|
||||
# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
|
||||
PLAYER="playerctld"
|
||||
|
||||
# Format of the information displayed
|
||||
# Eg. {{ artist }} - {{ album }} - {{ title }}
|
||||
# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
|
||||
FORMAT="{{ duration(mpris:length) }}"
|
||||
|
||||
PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
|
||||
EXIT_CODE=$?
|
||||
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
STATUS=$PLAYERCTL_STATUS
|
||||
else
|
||||
STATUS="--:--"
|
||||
fi
|
||||
|
||||
if [ "$STATUS" = "Stopped" ]; then
|
||||
echo "--:--"
|
||||
elif [ "$STATUS" = "Paused" ]; then
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
elif [ "$STATUS" = "--:--" ]; then
|
||||
echo "$STATUS"
|
||||
else
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
fi
|
||||
4
config/eww/Main/scripts/music-position
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
POS=$(playerctl -p spotify position)
|
||||
python -c "print(float($POS*1000000))"
|
||||
43
config/eww/Main/scripts/music-title
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Set the source audio player here.
|
||||
# Players supporting the MPRIS spec are supported.
|
||||
# Examples: spotify, vlc, chrome, mpv and others.
|
||||
# Use `playerctld` to always detect the latest player.
|
||||
# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
|
||||
PLAYER="playerctld"
|
||||
|
||||
# Format of the information displayed
|
||||
# Eg. {{ artist }} - {{ album }} - {{ title }}
|
||||
# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
|
||||
FORMAT="{{ title }}"
|
||||
|
||||
|
||||
PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
|
||||
EXIT_CODE=$?
|
||||
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
STATUS=$PLAYERCTL_STATUS
|
||||
else
|
||||
STATUS="Nothing is playing"
|
||||
fi
|
||||
|
||||
if [ "$1" == "--status" ]; then
|
||||
if [ "$STATUS" = "Stopped" ]; then
|
||||
echo "Nothing is playing"
|
||||
elif [ "$STATUS" = "Paused" ]; then
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
elif [ "$STATUS" = "Nothing is playing" ]; then
|
||||
echo "$STATUS"
|
||||
else
|
||||
playerctl --player=$PLAYER metadata --format "$FORMAT"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$1" == "--icon" ]; then
|
||||
if [[ $STATUS == "Playing" ]]; then
|
||||
echo ""
|
||||
else
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
57
config/eww/Main/scripts/player
Executable file
@@ -0,0 +1,57 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ $1 == "--length" ]]; then
|
||||
playerctl -p spotify metadata mpris:length
|
||||
fi
|
||||
|
||||
if [[ $1 == "--open" ]]; then
|
||||
URL=$(playerctl -p spotify metadata xesam:url)
|
||||
echo "$URL?go=1&utm_medium=desktop"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--artist" ]]; then
|
||||
"$HOME/.config/eww/Main/scripts/music-artist"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--length-time" ]]; then
|
||||
"$HOME/.config/eww/Main/scripts/music-length"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--length-info" ]]; then
|
||||
"$HOME/.config/eww/Main/scripts/music-length-info"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--cover" ]]; then
|
||||
"$HOME/.config/eww/Main/scripts/music-art"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--album" ]]; then
|
||||
"$HOME/.config/eww/Main/scripts/music-album"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--current-volume" ]]; then
|
||||
VOLUME=$(playerctl -p spotify volume)
|
||||
echo $(python -c "print(float("$VOLUME")*100)")
|
||||
fi
|
||||
|
||||
if [[ $1 == "--volume" ]]; then
|
||||
CURRENT_VOLUME=$2
|
||||
NOW_VOLUME=$(python -c "print(float($CURRENT_VOLUME)/100)")
|
||||
playerctl -p spotify volume "$NOW_VOLUME"
|
||||
fi
|
||||
|
||||
if [[ $1 == "--shuffle" ]]; then
|
||||
if [[ $(playerctl -p spotify shuffle) == "On" ]]; then
|
||||
playerctl -p spotify shuffle off
|
||||
else
|
||||
playerctl -p spotify shuffle On
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $1 == "--current-pos" ]]; then
|
||||
playerctl -p spotify position --format '{{ duration(position) }}'
|
||||
fi
|
||||
|
||||
if [[ $1 == "--launch-lyrics" ]]; then
|
||||
eww open --toggle lyrics
|
||||
fi
|
||||
70
config/eww/Main/scripts/system
Executable file
@@ -0,0 +1,70 @@
|
||||
#!/bin/bash
|
||||
|
||||
## Files and Data
|
||||
PREV_TOTAL=0
|
||||
PREV_IDLE=0
|
||||
cpuFile="/tmp/.cpu_usage"
|
||||
|
||||
## Get CPU usage
|
||||
get_cpu() {
|
||||
if [[ -f "${cpuFile}" ]]; then
|
||||
fileCont=$(cat "${cpuFile}")
|
||||
PREV_TOTAL=$(echo "${fileCont}" | head -n 1)
|
||||
PREV_IDLE=$(echo "${fileCont}" | tail -n 1)
|
||||
fi
|
||||
|
||||
CPU=(`cat /proc/stat | grep '^cpu '`) # Get the total CPU statistics.
|
||||
unset CPU[0] # Discard the "cpu" prefix.
|
||||
IDLE=${CPU[4]} # Get the idle CPU time.
|
||||
|
||||
# Calculate the total CPU time.
|
||||
TOTAL=0
|
||||
|
||||
for VALUE in "${CPU[@]:0:4}"; do
|
||||
let "TOTAL=$TOTAL+$VALUE"
|
||||
done
|
||||
|
||||
if [[ "${PREV_TOTAL}" != "" ]] && [[ "${PREV_IDLE}" != "" ]]; then
|
||||
# Calculate the CPU usage since we last checked.
|
||||
let "DIFF_IDLE=$IDLE-$PREV_IDLE"
|
||||
let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
|
||||
let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
|
||||
echo "${DIFF_USAGE}"
|
||||
else
|
||||
echo "?"
|
||||
fi
|
||||
|
||||
# Remember the total and idle CPU times for the next check.
|
||||
echo "${TOTAL}" > "${cpuFile}"
|
||||
echo "${IDLE}" >> "${cpuFile}"
|
||||
}
|
||||
|
||||
## Get Used memory
|
||||
get_mem() {
|
||||
printf "%.0f\n" "$(free -m | grep Mem | awk '{print ($3/$2)*100}')"
|
||||
}
|
||||
|
||||
## Get Volume
|
||||
get_vol() {
|
||||
pamixer --get-volume
|
||||
}
|
||||
|
||||
## Get Brightness
|
||||
get_brightness() {
|
||||
if [ -z "$DISPLAY_DEVICE" ]; then
|
||||
brightnessctl i --machine-readable | tr ',' ' ' | awk '{print $4}' | tr -d '%'
|
||||
else
|
||||
brightnessctl i -d $DISPLAY_DEVICE --machine-readable | tr ',' ' ' | awk '{print $4}' | tr -d '%'
|
||||
fi
|
||||
}
|
||||
|
||||
## Execute accordingly
|
||||
if [[ "$1" == "--cpu" ]]; then
|
||||
get_cpu
|
||||
elif [[ "$1" == "--mem" ]]; then
|
||||
get_mem
|
||||
elif [[ "$1" == "--vol" ]]; then
|
||||
get_vol
|
||||
elif [[ "$1" == "--bri" ]]; then
|
||||
get_brightness
|
||||
fi
|
||||
157
config/eww/Main/scripts/weather
Executable file
@@ -0,0 +1,157 @@
|
||||
#!/bin/bash
|
||||
|
||||
## Collect data
|
||||
cache_dir="$HOME/.cache/eww/weather"
|
||||
cache_weather_stat=${cache_dir}/weather-stat
|
||||
cache_weather_degree=${cache_dir}/weather-degree
|
||||
cache_weather_hex=${cache_dir}/weather-hex
|
||||
cache_weather_icon=${cache_dir}/weather-icon
|
||||
cache_weather_updatetime=${cache_dir}/weather-updatetime
|
||||
|
||||
if [[ -z "$OPENWEATHER_API_KEY" ]]; then
|
||||
echo "Please set the OPENWEATHER_API_KEY environment variable."
|
||||
exit 1
|
||||
fi
|
||||
if [[ -z "$OPENWEATHER_LAT" ]]; then
|
||||
echo "Please set the OPENWEATHER_LAT environment variable."
|
||||
exit 1
|
||||
fi
|
||||
if [[ -z "$OPENWEATHER_LON" ]]; then
|
||||
echo "Please set the OPENWEATHER_LON environment variable."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
## Weather data
|
||||
KEY=$OPENWEATHER_API_KEY
|
||||
LAT=$OPENWEATHER_LAT
|
||||
LON=$OPENWEATHER_LON
|
||||
UNITS=metric
|
||||
|
||||
## Make cache dir
|
||||
if [[ ! -d "$cache_dir" ]]; then
|
||||
mkdir -p "${cache_dir}"
|
||||
fi
|
||||
|
||||
## Get data
|
||||
get_weather_data() {
|
||||
weather=$(curl -sf "http://api.openweathermap.org/data/3.0/onecall?lat=${LAT}&lon=${LON}&exclude=minutely,hourly,daily&appid=${KEY}&units=${UNITS}")
|
||||
echo "${weather}" >&2
|
||||
weather=$(echo "$weather" | jq -r ".current")
|
||||
|
||||
if [ -n "$weather" ]; then
|
||||
weather_temp=$(echo "$weather" | jq ".temp" | cut -d "." -f 1)
|
||||
weather_icon_code=$(echo "$weather" | jq -r ".weather[].icon" | head -1)
|
||||
weather_description=$(echo "$weather" | jq -r ".weather[].description" | head -1 | sed -e "s/\b\(.\)/\u\1/g")
|
||||
|
||||
#Big long if statement of doom
|
||||
if [ "$weather_icon_code" == "50d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "50n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "01d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#e0af68"
|
||||
elif [ "$weather_icon_code" == "01n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#c0caf5"
|
||||
elif [ "$weather_icon_code" == "02d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "02n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "03d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "03n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "04d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "04n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7aa2f7"
|
||||
elif [ "$weather_icon_code" == "09d" ]; then
|
||||
weather_icon=""
|
||||
weather_hex="#7dcfff"
|
||||
elif [ "$weather_icon_code" == "09n" ]; then
|
||||
weather_icon=""
|
||||
weather_hex="#7dcfff"
|
||||
elif [ "$weather_icon_code" == "10d" ]; then
|
||||
weather_icon=""
|
||||
weather_hex="#7dcfff"
|
||||
elif [ "$weather_icon_code" == "10n" ]; then
|
||||
weather_icon=""
|
||||
weather_hex="#7dcfff"
|
||||
elif [ "$weather_icon_code" == "11d" ]; then
|
||||
weather_icon=""
|
||||
weather_hex="#ff9e64"
|
||||
elif [ "$weather_icon_code" == "11n" ]; then
|
||||
weather_icon=""
|
||||
weather_hex="#ff9e64"
|
||||
elif [ "$weather_icon_code" == "13d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#c0caf5"
|
||||
elif [ "$weather_icon_code" == "13n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#c0caf5"
|
||||
elif [ "$weather_icon_code" == "40d" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7dcfff"
|
||||
elif [ "$weather_icon_code" == "40n" ]; then
|
||||
weather_icon=" "
|
||||
weather_hex="#7dcfff"
|
||||
else
|
||||
weather_icon=" "
|
||||
weather_hex="#c0caf5"
|
||||
fi
|
||||
echo "$weather_icon" > "${cache_weather_icon}"
|
||||
echo "$weather_description" > "${cache_weather_stat}"
|
||||
echo "$weather_temp""°C" > "${cache_weather_degree}"
|
||||
echo "$weather_hex" > "${cache_weather_hex}"
|
||||
date "+%Y-%m-%d %H:%M:%S" | tee "${cache_weather_updatetime}" >/dev/null
|
||||
else
|
||||
echo "Weather Unavailable" > "${cache_weather_stat}"
|
||||
echo " " > "${cache_weather_icon}"
|
||||
echo "-" > "${cache_weather_degree}"
|
||||
echo "#adadff" > "${cache_weather_hex}"
|
||||
date "+%Y-%m-%d %H:%M:%S" | tee "${cache_weather_updatetime}" >/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
check_network() {
|
||||
local max=12
|
||||
local cnt=0
|
||||
|
||||
while [ $cnt -lt $max ]; do
|
||||
if ping -c1 8.8.8.8 &>/dev/null || ping -c1 1.1.1.1 &>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
echo "Waiting for network connection... (attempt: $((cnt + 1))/$max)" >&2
|
||||
sleep 5
|
||||
((cnt++))
|
||||
done
|
||||
|
||||
echo "Network connection failed after $max attempts." >&2
|
||||
return 1
|
||||
}
|
||||
|
||||
## Execute
|
||||
if [[ "$1" == "--getdata" ]]; then
|
||||
if check_network; then
|
||||
get_weather_data
|
||||
fi
|
||||
elif [[ "$1" == "--icon" ]]; then
|
||||
cat "${cache_weather_icon}"
|
||||
elif [[ "$1" == "--temp" ]]; then
|
||||
cat "${cache_weather_degree}"
|
||||
elif [[ "$1" == "--hex" ]]; then
|
||||
tail -F "${cache_weather_hex}"
|
||||
elif [[ "$1" == "--stat" ]]; then
|
||||
cat "${cache_weather_stat}"
|
||||
elif [[ "$1" == "--updatetime" ]]; then
|
||||
cat "${cache_weather_updatetime}"
|
||||
fi
|
||||
20
config/eww/apply-color
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
path=$(dirname "$(readlink -f "$0")")
|
||||
. "$path"/../../utils/apply-color-helper
|
||||
|
||||
file="$path"/eww.scss
|
||||
|
||||
sed -i "s|^\$border: #[0-9a-fA-F]\{6\};\$|\$border: #${colorHex};|" "$file" || {
|
||||
log_error "Failed to edit ${file}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if pgrep -x eww >/dev/null -u "$USER"; then
|
||||
eww reload || {
|
||||
log_error "Failed to reload eww, is it running?"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
log_success "eww"
|
||||
23
config/eww/eww.scss
Normal file
@@ -0,0 +1,23 @@
|
||||
/** Colors *******************************************/
|
||||
$bg: #1e1e2e;
|
||||
$bg-alt: #181825;
|
||||
$fg: #cdd6f4;
|
||||
$fg-alt: #a6adc8;
|
||||
$red: #f38ba8;
|
||||
$green: #a6e3a1;
|
||||
$yellow: #f9e2af;
|
||||
$orange: #fab387;
|
||||
$blue: #89b4fa;
|
||||
$purple: #cba6f7;
|
||||
$cyan: #89dceb;
|
||||
$gray: #585b70;
|
||||
$gray-alt: #292a3c;
|
||||
$lavender: #b4befe;
|
||||
$sapphire: #74c7ec;
|
||||
$teal: #94e2d5;
|
||||
$peach: #fab387;
|
||||
|
||||
$border: #89b4fa;
|
||||
|
||||
@import './Main/eww.scss';
|
||||
@import './Lyrics/eww.scss';
|
||||
2
config/eww/eww.yuck
Normal file
@@ -0,0 +1,2 @@
|
||||
(include "./Main/eww.yuck")
|
||||
(include "./Lyrics/eww.yuck")
|
||||
13
config/fastfetch/apply-color
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
path=$(dirname "$(readlink -f "$0")")
|
||||
. "$path"/../../utils/apply-color-helper
|
||||
|
||||
file="$path"/../fish/post.d/fetch.fish
|
||||
|
||||
sed -i -E "s/(set -g fetch_color\s+\"#)([0-9a-fA-F]{6})(\")/\1${colorHex}\3/" "$file" || {
|
||||
log_error "Failed to edit ${file}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
log_success "fastfetch"
|
||||
58
config/fastfetch/brief.jsonc
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||
"modules": [
|
||||
{
|
||||
"type": "title"
|
||||
},
|
||||
{
|
||||
"type": "separator"
|
||||
},
|
||||
{
|
||||
"key": " os",
|
||||
"type": "os"
|
||||
},
|
||||
{
|
||||
"key": "└ kernel",
|
||||
"type": "kernel"
|
||||
},
|
||||
{
|
||||
"type": "separator"
|
||||
},
|
||||
{
|
||||
"key": " host",
|
||||
"type": "host"
|
||||
},
|
||||
{
|
||||
"key": "├ gpu",
|
||||
"type": "gpu",
|
||||
"format": "{vendor} {name}"
|
||||
},
|
||||
{
|
||||
"key": "└ cpu",
|
||||
"type": "cpu",
|
||||
"format": "{name}"
|
||||
},
|
||||
{
|
||||
"type": "separator"
|
||||
},
|
||||
{
|
||||
"key": " shell",
|
||||
"type": "shell"
|
||||
},
|
||||
{
|
||||
"key": "├ wm",
|
||||
"type": "wm"
|
||||
},
|
||||
{
|
||||
"key": "├ de",
|
||||
"type": "de"
|
||||
},
|
||||
{
|
||||
"key": "└ up",
|
||||
"type": "uptime"
|
||||
},
|
||||
{
|
||||
"type": "break"
|
||||
}
|
||||
]
|
||||
}
|
||||
33
config/fastfetch/config.jsonc
Executable file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
|
||||
"display": {
|
||||
"key": {
|
||||
// "width": 14
|
||||
}
|
||||
},
|
||||
"modules": [
|
||||
{ "type": "title" },
|
||||
{ "type": "separator" },
|
||||
{ "key": " os", "type": "os" },
|
||||
{ "key": "┠ host", "type": "host" },
|
||||
{ "key": "┠ kernel", "type": "kernel" },
|
||||
{ "key": "┠ uptime", "type": "uptime" },
|
||||
{ "key": "┖ packages", "type": "packages" },
|
||||
{ "type": "break" },
|
||||
{ "key": " shell", "type": "shell" },
|
||||
{ "key": "┠ display", "type": "display" },
|
||||
{ "key": "┠ de", "type": "de" },
|
||||
{ "key": "┠ wm", "type": "wm" },
|
||||
{ "key": "┠ font", "type": "terminalfont" },
|
||||
{ "key": "┖ terminal", "type": "terminal" },
|
||||
{ "type": "break" },
|
||||
{ "key": " cpu", "type": "cpu" },
|
||||
{ "key": "┠ gpu", "type": "gpu" },
|
||||
{ "key": "┠ memory", "type": "memory" },
|
||||
{ "key": "┠ disk", "type": "disk" },
|
||||
{ "key": "┠ localip", "type": "localip" },
|
||||
{ "key": "┖ publicip", "type": "publicip" },
|
||||
{ "type": "break" },
|
||||
{ "type": "colors" }
|
||||
]
|
||||
}
|
||||
2
config/fastfetch/logo_gg/24x.sixel
Normal file
19
config/fastfetch/logo_gg/24x.symbols
Normal file
@@ -0,0 +1,19 @@
|
||||
[?25l[0m [38;2;173;156;161m▂[38;2;200;181;186m▃[38;2;226;206;210m▅[38;2;225;206;208m▆[38;2;235;217;220m▅[38;2;228;210;216m▃[38;2;232;214;217m▃[38;2;231;214;218m▃[38;2;224;209;213m▃[38;2;193;182;185m▃[38;2;208;189;197m▂[38;2;147;137;141m▁ [0m
|
||||
[38;2;248;230;234;48;2;185;166;173m▆[38;2;252;232;236;48;2;223;210;214m▇[38;2;254;225;230;48;2;252;224;229m┈[38;2;253;222;226;48;2;254;225;230m▁[38;2;202;152;165;48;2;242;207;214m┎[38;2;254;227;231;48;2;250;222;227m┊[38;2;120;107;109;48;2;253;227;230m▁[38;2;69;65;68;48;2;246;220;222m▁[38;2;130;127;128;48;2;243;218;220m▁[38;2;61;56;57;48;2;247;222;225m▁[38;2;72;63;65;48;2;246;221;224m▁[38;2;112;98;97;48;2;248;226;229m▁[38;2;225;206;205;48;2;248;230;231m▁[0m[38;2;238;225;227m▇[38;2;226;210;212m▅[38;2;200;186;189m▃[0m [38;2;189;171;178m▁[38;2;189;166;174m▁[0m [38;2;77;72;74m [0m
|
||||
[38;2;191;152;147;48;2;243;208;210m▃[38;2;174;135;129;48;2;237;200;202m▄[38;2;170;129;123;48;2;227;190;190m▄[38;2;95;79;83;48;2;219;182;181m▗[38;2;99;87;98;48;2;176;167;187m▎[38;2;138;135;149;48;2;71;74;82m▌[38;2;41;50;61;48;2;48;53;63m┈[38;2;172;170;178;48;2;61;66;78m▝[38;2;66;71;81;48;2;198;198;206m▗[38;2;41;49;60;48;2;46;51;61m╴[38;2;44;49;60;48;2;63;62;68m▇[38;2;45;50;60;48;2;73;68;72m▇[38;2;64;67;75;48;2;149;146;150m▉[38;2;234;229;236;48;2;166;152;155m▆[38;2;72;72;77;48;2;181;170;173m▗[38;2;91;87;92;48;2;236;215;219m▄[38;2;162;148;152;48;2;245;227;230m▂[38;2;218;180;187;48;2;250;228;231m▁[38;2;254;228;227;48;2;251;228;228m┈[38;2;238;219;222;48;2;130;116;121m▇[0m[38;2;170;156;161m▄[0m [38;2;0;0;0m [0m
|
||||
[38;2;177;142;142;48;2;146;103;98m▁[38;2;168;137;130;48;2;140;99;91m▁[38;2;140;124;128;48;2;141;113;110m╷[38;2;132;130;137;48;2;66;65;73m▁[38;2;72;77;85;48;2;166;164;168m▚[38;2;184;183;185;48;2;225;218;221m╱[38;2;176;173;174;48;2;42;48;57m▏[38;2;70;77;89;48;2;43;51;62m╶[38;2;109;114;130;48;2;222;221;231m▍[38;2;216;214;220;48;2;108;113;121m▋[38;2;40;49;59;48;2;41;49;60m▏ [38;2;55;62;74;48;2;201;200;205m▆[38;2;103;106;118;48;2;47;52;64m▏[38;2;70;72;82;48;2;45;51;61m▝[38;2;203;202;207;48;2;97;97;107m▗[38;2;123;102;111;48;2;233;201;206m▊[38;2;235;197;199;48;2;252;222;227m▂[38;2;238;204;205;48;2;253;225;229m▂[38;2;252;231;235;48;2;248;222;226m┊[0m[7m[38;2;215;199;203m▝[0m[38;2;142;136;139m▂ [0m
|
||||
[38;2;246;216;222;48;2;201;148;156m▇[38;2;93;81;88;48;2;214;185;190m▗[38;2;184;143;153;48;2;71;69;80m▁[38;2;177;170;176;48;2;125;109;115m▋[38;2;168;146;157;48;2;42;46;56m▄[38;2;189;183;190;48;2;143;129;130m▉[38;2;250;219;226;48;2;68;62;71m▄[38;2;240;210;217;48;2;53;51;60m▅[38;2;252;223;229;48;2;91;83;94m▅[38;2;216;191;200;48;2;185;161;169m▉[38;2;247;213;220;48;2;58;55;64m▅[38;2;249;217;224;48;2;65;61;70m▄[38;2;229;193;201;48;2;42;48;57m▄[38;2;219;174;185;48;2;43;50;59m▃[38;2;215;160;172;48;2;53;55;64m▁[38;2;43;49;60;48;2;115;119;133m▊[38;2;86;91;105;48;2;174;176;194m▁[38;2;66;72;82;48;2;143;138;142m▆[38;2;142;111;108;48;2;186;148;144m▂[38;2;162;119;113;48;2;208;172;169m▅[38;2;178;137;132;48;2;231;195;195m▄[38;2;214;176;172;48;2;246;213;215m▃[38;2;253;227;229;48;2;239;220;222m┈[0m[38;2;142;121;127m▎[0m
|
||||
[38;2;253;224;229;48;2;243;215;221m┊[38;2;194;142;155;48;2;223;183;193m╴[38;2;250;220;226;48;2;224;189;197m┈[38;2;215;185;196;48;2;169;163;180m▇[38;2;173;158;176;48;2;228;201;211m▘[38;2;199;179;185;48;2;235;209;216m╵[38;2;193;161;163;48;2;252;224;229m▗[38;2;137;114;117;48;2;224;191;194m╹[38;2;243;213;219;48;2;249;220;226m╷[48;2;254;225;230m [38;2;254;226;231;48;2;248;220;226m┊[48;2;254;225;230m [38;2;253;225;230;48;2;236;189;200m▇[38;2;225;190;198;48;2;141;106;116m▇[38;2;231;190;199;48;2;69;63;71m▅[38;2;196;149;160;48;2;62;63;73m▂[38;2;69;67;77;48;2;191;154;158m▍[38;2;203;153;160;48;2;146;103;96m▂[38;2;193;154;153;48;2;148;105;99m▂[38;2;214;184;191;48;2;183;149;145m▁[0m[7m[38;2;195;170;171m▄[0m [0m
|
||||
[38;2;184;136;147;48;2;236;198;207m╻[38;2;254;228;232;48;2;251;219;224m┊[38;2;198;151;164;48;2;235;191;200m╹[38;2;250;197;205;48;2;253;228;233m▅[38;2;230;174;184;48;2;253;209;216m─[38;2;177;139;144;48;2;227;186;193m┌[38;2;190;130;134;48;2;218;164;169m╹[38;2;242;200;209;48;2;207;159;167m┊[38;2;222;166;176;48;2;240;195;205m╴[38;2;253;199;210;48;2;254;223;230m▄[38;2;253;200;209;48;2;254;227;232m▄[38;2;251;221;228;48;2;248;211;218m┈[38;2;216;176;186;48;2;237;201;210m╱[38;2;233;206;212;48;2;252;232;236m▁[38;2;251;238;241;48;2;177;167;168m▉[38;2;131;103;104;48;2;233;193;200m▏[48;2;254;225;230m [38;2;252;222;227;48;2;239;192;202m▇[38;2;146;112;120;48;2;238;204;212m╿[38;2;210;184;190;48;2;249;220;226m╷[38;2;252;224;230;48;2;217;167;180m▇[38;2;253;240;243;48;2;245;227;231m┊[0m[38;2;143;133;137m▍ [0m
|
||||
[38;2;219;162;173;48;2;240;186;198m╴[38;2;205;140;153;48;2;237;176;187m┌[38;2;223;152;168;48;2;244;189;199m▏[38;2;150;108;114;48;2;238;181;191m▁[38;2;176;138;141;48;2;223;183;186m╱[38;2;254;238;230;48;2;230;204;201m╴[38;2;196;156;159;48;2;239;210;207m▂[38;2;196;130;140;48;2;220;165;173m▂[38;2;227;170;180;48;2;251;195;205m╸[38;2;253;196;204;48;2;253;198;211m▇[38;2;243;186;196;48;2;248;191;201m╶[38;2;208;146;160;48;2;233;174;186m╱[38;2;253;197;206;48;2;249;191;200m┊[38;2;238;191;200;48;2;246;194;202m╵[38;2;168;111;112;48;2;207;170;176m╻[38;2;207;146;154;48;2;250;208;217m▌[38;2;250;199;207;48;2;254;225;231m▃[38;2;217;190;197;48;2;243;220;225m╴[38;2;113;67;78;48;2;246;217;223m│[38;2;231;200;208;48;2;244;215;221m└[38;2;250;232;238;48;2;254;253;253m▏[38;2;252;247;249;48;2;253;253;253m╵[0m[38;2;215;207;211m▌ [0m
|
||||
[38;2;253;199;212;48;2;253;196;204m▝[38;2;229;164;174;48;2;196;128;139m▊[38;2;210;188;191;48;2;165;107;117m▃[38;2;222;208;203;48;2;81;48;52m▄[38;2;142;82;52;48;2;56;37;39m▅[38;2;103;61;56;48;2;146;99;104m▉[38;2;138;58;61;48;2;198;155;160m━[38;2;200;148;152;48;2;237;179;188m▏[38;2;235;188;195;48;2;253;196;203m▁[38;2;253;199;212;48;2;253;197;206m┗[38;2;253;199;213;48;2;252;198;207m┈[38;2;215;175;180;48;2;237;188;196m╷[38;2;170;129;132;48;2;199;157;161m╌[38;2;77;37;37;48;2;211;174;177m▁[38;2;146;102;102;48;2;232;187;183m▁[38;2;208;155;158;48;2;231;177;183m╸[38;2;162;126;126;48;2;217;168;173m╶[38;2;136;95;103;48;2;247;193;202m▏[38;2;176;124;138;48;2;252;203;212m┃[38;2;251;208;215;48;2;230;192;201m▊[38;2;253;249;251;48;2;251;214;221m▝[38;2;251;221;228;48;2;253;250;251m▅[38;2;229;212;217;48;2;138;128;133m▉[0m[38;2;134;122;127m▖[0m
|
||||
[38;2;253;196;203;48;2;253;197;205m╴[38;2;180;146;149;48;2;250;227;222m▏[38;2;247;239;236;48;2;189;138;64m▌[38;2;231;177;69;48;2;230;203;162m▇[38;2;215;146;46;48;2;237;189;76m▝[38;2;194;135;54;48;2;215;200;182m▉[38;2;253;241;242;48;2;230;213;220m▇[38;2;253;237;237;48;2;252;235;232m▇[48;2;183;165;162m▇[38;2;253;236;235;48;2;212;181;179m▆[38;2;216;189;187;48;2;243;223;222m╵[38;2;190;151;151;48;2;245;234;229m▝[38;2;235;222;210;48;2;146;86;65m▖[38;2;152;85;25;48;2;102;58;57m▃[38;2;179;159;169;48;2;94;60;60m▗[38;2;104;76;78;48;2;174;146;155m┻[38;2;127;59;60;48;2;199;147;148m▖[38;2;221;163;174;48;2;244;187;196m▁[38;2;205;148;163;48;2;237;181;193m╸[38;2;253;198;212;48;2;252;196;208m╴[38;2;253;199;212;48;2;253;197;207m▆[38;2;253;197;207;48;2;253;209;217m▇[38;2;252;200;209;48;2;252;221;227m▅[38;2;243;214;220;48;2;149;142;145m▇[0m
|
||||
[38;2;234;174;182;48;2;248;187;197m╶[38;2;222;174;182;48;2;230;186;186m╴[38;2;221;187;153;48;2;249;201;198m▝[38;2;246;202;195;48;2;238;207;116m▃[38;2;246;220;210;48;2;235;200;104m▃[38;2;208;173;117;48;2;250;237;234m▘[38;2;253;237;238;48;2;253;241;242m▇[38;2;253;237;235;48;2;253;237;238m▁[38;2;253;235;232m▂[38;2;253;236;235m▁[38;2;253;237;237;48;2;254;238;232m▘[38;2;228;210;191;48;2;217;169;76m▎[38;2;226;164;58;48;2;234;183;75m╺[38;2;237;185;69;48;2;203;129;38m▆[38;2;178;130;78;48;2;244;235;232m▌[38;2;251;241;243;48;2;228;212;222m▇[38;2;197;136;144;48;2;216;165;173m╏[38;2;184;123;136;48;2;229;169;181m╱[38;2;253;196;204;48;2;253;197;205m┈[38;2;253;198;206;48;2;252;199;211m▘[38;2;253;197;206;48;2;253;199;213m▝[38;2;161;130;137;48;2;233;189;199m┌[0m[38;2;214;197;202m▉[7m[38;2;220;181;186m▅[0m
|
||||
[38;2;254;192;197;48;2;236;162;175m▝[38;2;161;117;117;48;2;219;175;177m╻[38;2;207;189;191;48;2;246;207;204m▂[38;2;207;187;184;48;2;253;220;214m▂[38;2;244;219;210;48;2;252;231;223m▏[38;2;232;211;211;48;2;245;226;224m╷[38;2;228;207;209;48;2;249;230;231m┌[38;2;174;145;148;48;2;251;228;226m─[38;2;169;133;139;48;2;251;226;223m─[38;2;199;173;175;48;2;247;226;225m─[38;2;253;237;234;48;2;242;223;220m┊[38;2;207;180;152;48;2;234;213;192m┋[38;2;196;172;173;48;2;240;214;160m▁[38;2;249;218;212;48;2;220;187;114m▅[38;2;250;205;201;48;2;252;244;244m▅[38;2;140;90;91;48;2;230;184;184m┌[38;2;193;124;135;48;2;223;154;166m╴[38;2;222;151;165;48;2;241;179;189m╸[38;2;248;197;210;48;2;251;199;207m╴[38;2;253;199;213;48;2;253;197;207m▝[38;2;253;199;212m▊[38;2;159;117;126;48;2;214;170;180m╹[0m[38;2;195;188;189m▉ [0m
|
||||
[38;2;201;174;173;48;2;233;189;191m╴[38;2;185;128;136;48;2;230;192;194m┎[38;2;200;134;137;48;2;229;176;178m╸[38;2;202;137;141;48;2;235;183;184m╍[38;2;245;206;207;48;2;212;193;195m▇[48;2;253;221;222m [38;2;253;221;222;48;2;249;218;219m┈[48;2;241;210;211m┈[38;2;143;112;115;48;2;244;206;206m╶[38;2;175;112;117;48;2;231;187;190m┹[38;2;216;154;162;48;2;224;167;173m╲[38;2;178;151;151;48;2;224;165;175m▁[38;2;214;165;171;48;2;253;194;201m▁[38;2;253;195;204;48;2;252;195;202m┊[38;2;253;196;205;48;2;245;186;197m┊[38;2;236;192;201;48;2;209;153;165m▅[0m[38;2;197;191;193m▍ [0m
|
||||
[38;2;161;116;126;48;2;209;173;179m╼[38;2;172;108;116;48;2;210;156;160m╴[38;2;236;194;197;48;2;230;175;178m╷[38;2;253;220;220;48;2;247;184;183m▄[38;2;253;221;222;48;2;253;220;221m┈[48;2;253;221;222m [48;2;248;217;218m┈[38;2;210;174;181;48;2;238;208;209m╶[38;2;164;111;115;48;2;247;210;210m▁[38;2;197;135;144;48;2;228;187;187m▂[38;2;190;130;139;48;2;229;158;169m▉[38;2;206;177;186;48;2;219;170;180m╶[0m[7m[38;2;212;173;181m▖[0m[38;2;200;192;194m▍ [0m
|
||||
[38;2;204;173;180;48;2;198;172;181m▍[38;2;206;173;187;48;2;204;173;180m▗[38;2;205;172;184;48;2;250;219;221m▏[48;2;253;221;222m [38;2;207;167;169;48;2;238;203;205m╷[38;2;142;101;105;48;2;220;185;187m┎[38;2;101;49;54;48;2;234;202;203m━[38;2;164;119;124;48;2;236;204;205m━[38;2;194;141;149;48;2;251;219;220m▂[38;2;208;149;153;48;2;234;190;192m╷[38;2;213;153;158;48;2;233;189;191m╷[38;2;209;154;159;48;2;253;221;222m▃[38;2;148;102;106;48;2;244;211;212m╺[38;2;116;76;77;48;2;243;212;212m━[38;2;104;57;61;48;2;237;205;206m╾[38;2;206;167;170;48;2;232;197;198m╷[48;2;253;221;222m [38;2;193;134;141;48;2;239;213;213m▝[38;2;214;145;156;48;2;198;118;132m▆[0m[7m[38;2;217;162;174m▂[38;2;196;178;184m▃[38;2;150;146;148m▄[0m [38;2;0;0;0m [0m
|
||||
[38;2;204;173;179;48;2;199;172;181m▍[38;2;204;173;180;48;2;205;173;187m▌[38;2;214;180;192;48;2;252;220;222m▎[38;2;250;205;207;48;2;252;218;219m╌[38;2;251;211;212;48;2;252;220;221m╺[38;2;252;218;220;48;2;253;221;222m╴ [38;2;186;123;129;48;2;226;183;187m┍[38;2;220;149;145;48;2;192;122;125m▉[38;2;174;107;114;48;2;221;144;140m▍[38;2;227;145;139;48;2;222;147;140m▊[38;2;165;99;107;48;2;208;139;138m┃[38;2;221;151;149;48;2;189;131;138m▉[38;2;192;150;156;48;2;253;221;222m▏ [38;2;251;213;215;48;2;253;220;221m╵[38;2;253;221;224;48;2;252;219;220m┈[38;2;251;212;214m╵[38;2;171;139;143;48;2;230;198;200m┕[38;2;238;183;193;48;2;132;118;124m╴[0m[38;2;97;101;107m▅[38;2;111;115;119m▃[38;2;110;107;109m▂ [0m
|
||||
[38;2;200;172;181;48;2;204;173;179m▝[38;2;204;173;180;48;2;205;173;187m▋[38;2;249;217;219;48;2;210;177;186m▝[38;2;253;221;222;48;2;251;219;220m┈[38;2;174;142;140;48;2;253;221;222m▁[38;2;253;222;222;48;2;251;220;220m┊[48;2;253;221;222m [48;2;247;215;216m┊[38;2;242;209;213;48;2;194;135;140m▅[38;2;234;202;207;48;2;195;133;140m▅[38;2;241;209;212;48;2;197;145;151m▄[38;2;250;218;220;48;2;202;149;154m▄[38;2;250;218;219;48;2;205;152;157m▆[48;2;253;221;222m [38;2;253;221;222;48;2;251;233;234m▉[38;2;174;163;166;48;2;50;56;64m▎[38;2;217;216;220;48;2;56;65;74m▂[38;2;245;244;246;48;2;89;96;103m╶[38;2;190;190;194;48;2;107;101;110m╸[0m[7m[38;2;132;88;102m▝[0m
|
||||
[38;2;155;135;136;48;2;215;181;187m╺[38;2;205;180;179;48;2;217;194;192m┊[38;2;183;153;157;48;2;227;204;204m┙[38;2;246;229;224;48;2;196;168;171m▇[38;2;212;175;172;48;2;241;218;212m╷[38;2;244;219;212;48;2;189;158;154m▇[38;2;221;182;181;48;2;239;206;204m╶[38;2;254;222;222;48;2;248;216;217m╴[48;2;253;221;222m [38;2;198;155;160;48;2;249;216;218m▁[38;2;219;169;170;48;2;239;201;202m╷[38;2;252;224;225;48;2;242;214;214m┈[38;2;205;178;179;48;2;248;217;219m▂[38;2;204;186;194;48;2;100;101;113m▎[38;2;143;146;166;48;2;87;89;101m▅[38;2;98;105;115;48;2;193;193;205m▂[38;2;122;126;137;48;2;221;222;232m▃[38;2;137;138;145;48;2;215;210;212m▄[0m
|
||||
[?25h
|
||||
BIN
config/fastfetch/logo_gg/ButaNeko.png
Normal file
|
After Width: | Height: | Size: 736 KiB |
2
config/fastfetch/logo_mugi/24x.sixel
Normal file
14
config/fastfetch/logo_mugi/24x.symbols
Normal file
@@ -0,0 +1,14 @@
|
||||
[?25l[0m [38;2;215;199;148m▂[38;2;247;230;167m▄[38;2;232;214;157m▆[38;2;244;224;162m▆[38;2;248;229;167m▆[38;2;248;230;168m▅[38;2;233;214;156m▆[38;2;250;232;170m▆[38;2;249;231;168m▅[38;2;252;234;172m▄[38;2;222;206;150m▃[38;2;117;108;79m▁ [0m
|
||||
[38;2;189;175;129m▄[38;2;231;206;151;48;2;110;102;76m▆[38;2;184;148;101;48;2;229;204;149m▖[38;2;233;207;151;48;2;201;163;115m╼[38;2;166;122;81;48;2;184;138;95m┌[38;2;173;129;87;48;2;178;134;91m┊[38;2;176;132;88;48;2;181;137;93m┊[38;2;179;135;92;48;2;200;163;116m▇[38;2;184;137;94;48;2;185;138;95m┊[38;2;184;140;96;48;2;240;215;158m▆[38;2;184;138;95;48;2;232;206;149m▅[38;2;202;162;115;48;2;233;209;152m▖[38;2;201;165;116;48;2;248;227;167m▃[38;2;254;237;172;48;2;244;227;165m┈[0m[38;2;240;222;162m▅[38;2;167;154;112m▖ [0m
|
||||
[38;2;182;144;102;48;2;237;212;154m▄[38;2;240;217;158;48;2;189;155;109m┏[38;2;228;200;146;48;2;183;139;95m▘[38;2;159;119;79;48;2;177;132;90m╴[38;2;183;137;94;48;2;183;136;93m▎[38;2;182;137;93m┫[38;2;183;137;94;48;2;182;136;93m┊[38;2;174;130;89;48;2;182;136;95m╈[38;2;183;136;95;48;2;182;137;93m╴[38;2;182;137;93;48;2;183;136;93m▘[38;2;184;137;96;48;2;179;134;91m┈[38;2;177;134;90;48;2;192;149;104m▇[38;2;228;197;144;48;2;186;143;99m▘[38;2;180;137;93;48;2;209;180;130m▇[38;2;192;153;108;48;2;244;222;164m▄[38;2;254;237;173;48;2;250;231;169m┈[0m[7m[38;2;195;181;131m▝[0m [38;2;0;0;0m [0m
|
||||
[38;2;184;141;97;48;2;223;195;142m▌[38;2;212;179;128;48;2;179;135;91m▘[38;2;169;124;82;48;2;180;134;92m╵[38;2;182;137;93;48;2;183;137;93m▏[38;2;175;129;88;48;2;185;140;97m╶[38;2;249;192;154;48;2;187;141;100m▃[48;2;204;155;114m▆[38;2;203;153;117;48;2;180;135;93m▏[38;2;175;130;86;48;2;180;135;91m┈[38;2;182;136;92;48;2;183;136;92m╻[38;2;181;137;92;48;2;183;136;93m┎[38;2;182;138;95;48;2;177;132;89m┊[38;2;183;137;93;48;2;181;137;93m▝[38;2;182;138;93;48;2;183;137;93m┊[38;2;191;150;104;48;2;224;195;141m▋[38;2;239;214;158;48;2;191;155;108m▝[38;2;254;236;172;48;2;252;234;171m┈[0m[7m[38;2;246;229;166m▝[0m [38;2;95;88;63m [0m
|
||||
[38;2;181;137;93;48;2;183;140;95m┈[38;2;152;110;70;48;2;176;132;89m╻[38;2;183;136;93;48;2;182;136;93m┊[38;2;236;181;144;48;2;186;140;99m▂[38;2;198;151;115;48;2;244;188;148m▄[38;2;178;134;96;48;2;252;194;157m▄[38;2;200;153;116;48;2;250;192;156m▄[38;2;135;91;58;48;2;181;136;93m▏[38;2;159;116;80m▎[38;2;181;137;92;48;2;183;135;92m▅[38;2;183;135;92;48;2;180;137;92m▋[38;2;138;99;57;48;2;173;129;89m╹[38;2;151;108;67;48;2;177;132;90m╵[38;2;180;138;93;48;2;182;137;93m╹[38;2;182;138;93;48;2;182;138;94m╴[38;2;243;219;163;48;2;194;159;111m╻[38;2;199;159;113;48;2;250;229;169m▌[38;2;236;215;157;48;2;248;229;167m╴[0m[38;2;237;220;160m▋ [0m
|
||||
[38;2;181;137;92;48;2;181;137;93m┖[38;2;182;137;95;48;2;172;128;86m┊[38;2;194;144;106;48;2;209;158;122m╴[38;2;50;46;44;48;2;246;190;155m▂[38;2;46;47;49;48;2;238;183;150m▂[38;2;134;102;83;48;2;238;182;148m▁[38;2;253;194;158;48;2;162;121;89m▇[38;2;230;176;143;48;2;183;137;98m▏[38;2;252;195;154;48;2;194;147;107m▖[38;2;184;137;93;48;2;183;136;93m▖[38;2;181;137;93;48;2;182;137;94m╴[38;2;220;168;131;48;2;166;123;89m▊[38;2;182;137;95;48;2;176;132;89m┊[38;2;183;137;93;48;2;181;137;93m▝[48;2;182;137;93m▂[38;2;183;140;95;48;2;216;190;136m▌[38;2;183;142;98;48;2;247;227;166m▊[38;2;254;236;171;48;2;196;159;110m▏[0m[38;2;249;231;170m▊ [0m
|
||||
[38;2;180;137;92;48;2;182;136;93m▄[38;2;166;124;87;48;2;151;113;76m▚[38;2;80;85;89;48;2;173;168;167m▗[38;2;18;23;31;48;2;193;199;205m▅[38;2;32;34;36;48;2;182;188;194m▇[38;2;37;34;31;48;2;177;148;132m╹[38;2;254;195;159;48;2;253;194;158m┈[38;2;173;131;95;48;2;233;179;141m╹[38;2;254;195;160;48;2;251;193;156m╴[38;2;207;159;121;48;2;179;134;92m▎[38;2;179;135;93;48;2;229;175;140m▘[38;2;244;187;152;48;2;187;141;104m▅[38;2;120;82;47;48;2;168;126;86m▏[38;2;182;137;93;48;2;181;137;93m▏[38;2;181;137;93;48;2;183;136;93m▍[38;2;189;145;101;48;2;209;180;128m▋[38;2;181;138;97;48;2;218;193;138m▌[38;2;209;175;125;48;2;182;139;94m▏[0m[38;2;222;198;144m▋ [0m
|
||||
[38;2;182;137;95;48;2;182;136;93m▏[38;2;183;137;97;48;2;243;186;151m▋[38;2;232;184;155;48;2;135;129;130m▇[38;2;92;75;67;48;2;178;171;177m╾[38;2;242;186;152;48;2;99;96;98m▄[48;2;254;195;160m [38;2;254;196;160m▃[38;2;254;195;160;48;2;254;195;159m▇[38;2;254;195;159;48;2;254;195;158m▉[38;2;82;65;55;48;2;204;164;138m▁[38;2;103;100;99;48;2;251;193;158m▇[38;2;89;80;74;48;2;237;183;149m▆[38;2;225;172;136;48;2;181;135;99m▊[38;2;183;137;94;48;2;182;136;93m╴[38;2;182;137;92;48;2;182;137;93m┊[38;2;167;131;91;48;2;196;154;109m▗[38;2;202;173;124;48;2;183;139;95m▘[38;2;183;140;96;48;2;218;185;134m▊[0m[38;2;171;154;115m▍ [0m
|
||||
[38;2;184;137;95;48;2;182;136;94m┊[38;2;208;156;120;48;2;252;193;158m▎[48;2;254;195;159m [38;2;254;196;160;48;2;253;195;159m┈[48;2;254;196;160m [48;2;253;195;159m┈[48;2;254;196;160m [38;2;213;163;132;48;2;251;193;158m╶[38;2;115;121;134;48;2;31;33;46m▅[38;2;147;176;199;48;2;47;58;70m╴[38;2;76;81;85;48;2;180;170;167m▘[38;2;175;133;106;48;2;239;184;149m▏[38;2;153;112;78;48;2;182;137;94m▎[38;2;158;116;75;48;2;177;133;89m╶[38;2;155;115;75;48;2;166;124;82m╷[38;2;182;137;93;48;2;180;137;92m┊[0m[7m[38;2;195;162;117m▗[0m [38;2;0;0;0m [0m
|
||||
[38;2;134;99;66;48;2;193;145;108m╽[38;2;254;195;159;48;2;249;190;156m┊[38;2;254;195;160;48;2;254;196;160m▉ [38;2;254;196;160;48;2;253;195;159m┈[48;2;254;196;160m [48;2;253;195;159m╴[38;2;253;194;159;48;2;251;193;158m╴[38;2;250;204;178;48;2;246;194;162m┊[38;2;193;151;112;48;2;248;191;156m▅[38;2;179;136;93;48;2;192;148;110m▇[38;2;155;113;72;48;2;169;126;84m┉[38;2;155;114;75;48;2;172;129;87m╻[38;2;182;138;93;48;2;179;134;91m╴[38;2;198;156;111;48;2;187;147;104m┈[0m[38;2;142;127;97m▘ [0m
|
||||
[38;2;155;120;88;48;2;190;175;168m▋[38;2;216;169;141;48;2;229;179;149m╴[38;2;221;166;133;48;2;244;186;152m╴[38;2;254;195;160;48;2;253;195;159m┈[48;2;254;196;160m [38;2;254;196;160;48;2;253;195;159m┈[48;2;254;196;160m [38;2;254;195;160m┊[38;2;207;175;143;48;2;251;197;163m▗[38;2;217;181;152;48;2;165;123;85m▘[38;2;164;120;78;48;2;175;130;88m╴[38;2;183;133;91;48;2;178;132;89m┈[38;2;159;126;86;48;2;190;148;104m▗[38;2;150;108;70;48;2;174;130;88m╽[38;2;183;133;91;48;2;186;140;96m╴[0m[38;2;201;166;120m▘ [0m
|
||||
[38;2;162;125;91;48;2;192;191;190m▋[38;2;182;180;176;48;2;193;188;186m┊[38;2;190;155;135;48;2;211;183;166m╶[38;2;190;163;148;48;2;234;178;145m▁[38;2;180;176;175;48;2;238;182;149m▂[38;2;149;130;117;48;2;215;182;163m╺[38;2;191;191;187;48;2;204;184;171m┈[38;2;182;176;166;48;2;222;191;150m╴[38;2;242;212;150;48;2;227;195;157m▆[38;2;233;204;144;48;2;181;142;95m▃[38;2;114;75;43;48;2;158;117;79m╷[38;2;176;129;88;48;2;176;133;90m▅[38;2;227;196;141;48;2;183;144;99m┏[38;2;191;158;113;48;2;159;116;76m▘[38;2;164;123;82;48;2;198;160;111m▉[0m[7m[38;2;174;149;108m▗[0m [38;2;0;0;0m [0m
|
||||
[38;2;104;88;74;48;2;167;132;104m▗[38;2;33;66;98;48;2;164;165;168m▆[38;2;46;76;106;48;2;181;182;184m▆[38;2;57;86;114;48;2;179;179;181m▖[38;2;189;190;193;48;2;189;188;190m▉[38;2;188;188;189;48;2;186;183;180m╴[38;2;199;174;125;48;2;224;197;146m╵[38;2;240;208;144;48;2;241;211;150m▅[38;2;239;208;144;48;2;241;211;151m▅[48;2;240;211;150m▆[38;2;127;89;57;48;2;180;142;97m┃[38;2;172;127;87;48;2;177;132;91m▉[38;2;224;189;137;48;2;173;133;93m▍[38;2;127;89;57;48;2;167;122;84m┇[38;2;114;99;73;48;2;184;148;104m▗[0m [38;2;18;18;23m [0m
|
||||
[?25h
|
||||
2
config/fastfetch/logo_mugi/32x.sixel
Normal file
22
config/fastfetch/logo_mugi/32x.symbols
Normal file
@@ -0,0 +1,22 @@
|
||||
[?25l[0m [38;2;0;0;0m [38;2;161;148;109m▁[38;2;210;195;145m▃[38;2;236;219;162m▄[38;2;227;211;154m▅[38;2;244;227;165m▅[38;2;248;231;169m▅[38;2;246;228;166m▄[38;2;245;227;166m▃[38;2;250;232;171m▄[38;2;232;215;158m▅[38;2;252;234;173m▄[38;2;225;208;152m▄[38;2;213;197;145m▃[38;2;233;216;157m▁[0m [38;2;0;0;0m [0m
|
||||
[38;2;214;199;147m▃[38;2;242;225;167m▆[38;2;204;166;118;48;2;252;233;171m▂[38;2;188;143;99;48;2;249;230;166m▃[38;2;187;140;97;48;2;248;227;166m▄[38;2;187;142;98;48;2;253;236;172m▅[38;2;173;130;88;48;2;250;231;169m▅[38;2;179;136;94;48;2;253;235;171m▅[38;2;183;141;97;48;2;248;227;166m▃[38;2;183;140;96;48;2;245;223;164m▄[38;2;185;139;95;48;2;237;213;156m▄[38;2;202;162;116;48;2;251;232;170m▃[38;2;197;154;108;48;2;248;228;166m▁[38;2;219;197;140;48;2;246;225;164m╾[38;2;216;190;132;48;2;248;230;168m▁[38;2;254;236;175;48;2;253;235;173m┈[38;2;250;233;170;48;2;128;117;84m▇[0m[38;2;240;223;163m▅[38;2;183;169;123m▃[0m [38;2;0;0;0m [0m
|
||||
[38;2;205;189;139m▄[38;2;245;226;166;48;2;147;137;100m▇[38;2;196;156;111;48;2;248;228;168m▄[38;2;216;189;135;48;2;182;144;98m▚[38;2;221;194;139;48;2;173;135;93m▆[38;2;184;140;95;48;2;218;185;134m▄[38;2;165;121;80;48;2;184;138;94m╺[38;2;178;133;91;48;2;160;119;79m▇[38;2;181;138;93;48;2;182;137;93m┈[38;2;184;137;93;48;2;182;138;93m▚[48;2;181;138;93m [38;2;164;119;76;48;2;177;132;89m╶[38;2;185;138;95;48;2;184;137;93m▎[38;2;182;138;93;48;2;185;138;95m▆[38;2;177;133;89;48;2;181;136;93m┊[38;2;185;137;95;48;2;186;140;96m┈[38;2;191;146;101;48;2;230;203;147m▄[38;2;248;226;167;48;2;211;176;126m┓[38;2;186;146;101;48;2;245;222;164m▄[38;2;204;174;125;48;2;249;231;168m▁[38;2;254;236;174;48;2;254;236;172m▋[38;2;251;232;171;48;2;134;122;87m▆[0m[38;2;199;184;134m▄[0m [38;2;0;0;0m [0m
|
||||
[38;2;197;160;114;48;2;252;233;171m▗[38;2;223;192;137;48;2;170;129;89m▘[38;2;227;203;146;48;2;165;132;91m▅[38;2;245;223;165;48;2;196;153;107m▘[38;2;157;116;73;48;2;177;134;90m┌[38;2;159;119;80;48;2;176;132;89m╴[38;2;183;137;94;48;2;184;136;93m▎[38;2;183;136;93;48;2;182;137;93m▁[48;2;183;136;93m [48;2;182;136;93m┊[38;2;184;137;94;48;2;177;131;90m┈[38;2;183;137;95;48;2;178;133;91m┊[38;2;183;136;93;48;2;182;137;93m▃[48;2;181;137;93m▅[38;2;181;137;93;48;2;183;136;93m━[38;2;184;138;98;48;2;178;132;90m┈[38;2;163;118;76;48;2;177;133;89m╴[38;2;232;203;150;48;2;185;141;97m▝[38;2;225;191;140;48;2;185;143;98m▎[38;2;169;128;88;48;2;182;138;94m▝[38;2;173;132;89;48;2;233;207;153m▅[38;2;207;168;121;48;2;250;230;170m▖[38;2;254;236;174;48;2;254;236;173m▏[38;2;107;97;69;48;2;249;232;168m▝[0m[38;2;182;167;121m▖ [0m
|
||||
[38;2;185;147;104;48;2;175;132;91m▏[38;2;180;144;101;48;2;239;218;160m▘[38;2;227;196;142;48;2;184;139;95m▘[38;2;159;115;71;48;2;180;136;92m╶[38;2;152;110;71;48;2;181;137;93m▘[38;2;182;137;93;48;2;183;136;93m▗[38;2;181;137;93m┳[48;2;182;136;93m┓[38;2;191;145;107;48;2;181;136;93m▁[38;2;242;186;146;48;2;184;138;97m▃[38;2;226;174;134;48;2;177;132;93m▌[38;2;183;136;93;48;2;183;137;97m▇[38;2;184;136;93;48;2;181;137;92m╴[38;2;181;137;92;48;2;183;136;92m▖╶[38;2;183;136;93;48;2;182;137;93m▆[38;2;155;112;69;48;2;173;130;86m╷[38;2;182;137;93;48;2;184;138;95m▇[48;2;186;139;96m▇[38;2;183;137;93;48;2;182;138;94m▋[38;2;194;153;106;48;2;184;139;95m▝[38;2;246;223;165;48;2;196;158;111m┓[38;2;253;235;172;48;2;207;170;122m▝[38;2;254;236;174;48;2;254;236;173m┈[38;2;254;238;171;48;2;247;230;167m┈[0m[38;2;248;232;167m▖[0m [38;2;0;0;0m [0m
|
||||
[38;2;184;140;96;48;2;237;207;153m▊[38;2;230;201;148;48;2;183;140;96m▘[38;2;164;120;78;48;2;175;132;88m╶[38;2;174;130;86;48;2;180;134;91m╴[38;2;183;137;94;48;2;184;136;93m▇[38;2;183;136;93;48;2;182;136;93m╴[38;2;236;181;141;48;2;179;135;93m▗[38;2;253;195;154;48;2;219;166;127m┈[38;2;253;193;158;48;2;247;190;153m╴[38;2;251;193;157;48;2;253;195;155m▇[38;2;250;195;153;48;2;176;133;92m▎[38;2;180;137;93;48;2;182;137;93m╴[38;2;171;126;82;48;2;179;133;90m╴[38;2;182;136;92;48;2;183;135;92m▝[38;2;181;137;92m━[48;2;182;136;92m━[38;2;156;116;74;48;2;174;130;86m╶[38;2;183;136;96;48;2;182;136;92m▏[38;2;180;137;93;48;2;181;137;93m▖[38;2;184;136;93;48;2;182;137;93m┗[38;2;183;137;93;48;2;181;138;94m▋[38;2;245;224;165;48;2;192;153;107m▝[38;2;231;209;154;48;2;176;138;93m▖[38;2;185;144;98;48;2;239;214;158m▖[38;2;254;237;171;48;2;254;237;172m▖[38;2;254;237;172;48;2;254;238;170m▆[0m[7m[38;2;193;178;129m▝[0m[38;2;8;6;4m [0m
|
||||
[38;2;183;140;95;48;2;181;138;93m┊[38;2;182;136;93;48;2;180;137;92m▁[38;2;142;101;59;48;2;173;129;86m╹[38;2;183;137;94;48;2;182;136;93m▎[38;2;171;127;84;48;2;183;136;93m╷[38;2;250;192;156;48;2;192;145;107m▁[38;2;180;136;100;48;2;252;194;155m▄[38;2;171;130;89;48;2;251;193;156m▄[38;2;176;131;93;48;2;251;193;158m▄[38;2;194;147;109;48;2;252;194;159m▄[38;2;249;193;156;48;2;170;126;87m▎[38;2;177;133;91;48;2;139;93;62m▉[38;2;138;97;59;48;2;181;137;94m▏[38;2;181;137;93;48;2;183;135;92m▆[38;2;181;137;92;48;2;182;136;92m┵[38;2;183;135;92;48;2;180;137;92m▋[38;2;121;85;52;48;2;167;124;83m┍[38;2;183;136;92;48;2;182;136;93m┈[38;2;129;89;51;48;2;176;131;89m╻[38;2;183;137;94;48;2;180;137;93m▄[38;2;182;137;93;48;2;183;137;93m▇[38;2;182;138;93;48;2;182;138;94m╴[38;2;228;202;147;48;2;192;156;109m▚[38;2;204;165;118;48;2;180;137;93m▝[38;2;227;196;145;48;2;253;234;173m▏[38;2;227;203;146;48;2;246;227;165m╴[38;2;254;238;173;48;2;253;236;172m┊[0m[38;2;182;163;119m▎[0m
|
||||
[38;2;182;136;93;48;2;180;137;92m▍[38;2;181;135;92;48;2;145;101;56m▉[38;2;149;108;66;48;2;180;135;92m▏[38;2;183;137;95;48;2;204;154;117m▉[38;2;190;142;104;48;2;251;193;157m▘[48;2;253;195;159m [38;2;254;195;159m┈[38;2;252;193;157;48;2;173;128;93m▇[38;2;251;193;157;48;2;170;127;90m▆[38;2;254;195;159;48;2;172;129;93m▅[38;2;136;91;55;48;2;202;153;116m╿[38;2;165;121;82;48;2;208;158;116m┧[38;2;162;121;82;48;2;187;141;99m╻[38;2;183;136;93;48;2;181;137;93m▆[38;2;181;137;93;48;2;182;136;93m╺[38;2;181;137;92;48;2;182;137;93m╸[38;2;149;108;70;48;2;212;162;121m╹[38;2;182;135;101;48;2;177;133;91m▖[38;2;105;63;21;48;2;177;133;89m╵[38;2;180;138;92;48;2;183;137;93m▏[38;2;184;137;93;48;2;182;137;93m╸[38;2;183;137;93m▘[38;2;186;143;98;48;2;241;217;160m▋[38;2;227;206;150;48;2;173;135;90m▏[38;2;197;158;111;48;2;253;234;172m▍[38;2;251;231;172;48;2;194;157;109m▏[38;2;254;236;175;48;2;252;233;171m┊[0m[38;2;208;191;144m▌[0m
|
||||
[38;2;182;136;93;48;2;180;137;93m▆[38;2;180;136;93;48;2;133;93;49m▊[38;2;136;101;65;48;2;181;137;94m▗[38;2;109;93;83;48;2;205;155;122m▁[38;2;15;11;9;48;2;190;165;152m╼[38;2;188;194;199;48;2;100;77;63m▄[38;2;80;79;80;48;2;248;195;160m▇[38;2;54;51;49;48;2;224;173;142m▆[38;2;102;80;65;48;2;230;175;142m▖[48;2;254;195;159m [38;2;247;189;154;48;2;153;111;76m▋[38;2;174;129;90;48;2;249;192;150m▍[38;2;185;138;101;48;2;250;193;155m▝[38;2;172;129;85;48;2;180;135;93m┈[38;2;184;136;93;48;2;182;137;93m▘[38;2;168;124;88;48;2;182;136;96m╻[38;2;181;137;101;48;2;242;185;148m▄[38;2;123;81;46;48;2;188;143;103m╿[38;2;119;73;27;48;2;178;133;90m╷[38;2;183;136;93;48;2;180;137;92m━[38;2;183;137;94;48;2;181;137;93m╺[38;2;183;136;93m▆[38;2;184;140;96;48;2;240;212;154m▊[38;2;241;220;162;48;2;173;130;87m▎[38;2;176;137;90;48;2;246;226;164m▌[38;2;160;122;72;48;2;184;140;96m▎[38;2;196;155;108;48;2;252;233;172m▍[0m[38;2;204;184;135m▍[0m
|
||||
[38;2;180;137;92;48;2;182;136;93m▗[38;2;179;135;91;48;2;134;93;52m▉[38;2;167;126;91;48;2;146;108;72m▚[38;2;100;93;90;48;2;204;211;218m▘[38;2;173;182;190;48;2;15;20;28m▘[38;2;0;3;7;48;2;178;178;180m▆[38;2;13;14;17;48;2;80;80;81m▇[38;2;23;26;28;48;2;202;196;196m▋[38;2;231;181;150;48;2;105;79;65m▇[48;2;254;195;159m [38;2;250;192;156;48;2;178;131;95m▋[38;2;254;195;157;48;2;252;194;156m┈[48;2;254;195;159m [38;2;166;123;85;48;2;214;163;123m┖[38;2;175;130;90;48;2;189;143;100m╻[38;2;212;162;123;48;2;240;184;149m▏[38;2;253;195;159;48;2;244;187;153m┈[38;2;231;177;139;48;2;159;118;82m▌[38;2;139;97;62;48;2;172;129;87m┨[38;2;182;136;93;48;2;181;137;93m▃[38;2;180;137;93;48;2;182;136;93m▋[38;2;182;137;93;48;2;183;136;93m╼[38;2;188;144;100;48;2;243;219;162m▊[38;2;202;172;123;48;2;174;132;90m▏[38;2;191;157;107;48;2;237;215;157m▚[38;2;184;140;96;48;2;183;139;95m┈[38;2;188;147;101;48;2;247;227;168m▌[0m[38;2;154;135;100m▏[0m
|
||||
[38;2;182;136;92;48;2;181;137;93m┲[38;2;183;136;93;48;2;182;137;93m┉[38;2;130;91;60;48;2;215;163;126m╹[38;2;246;202;177;48;2;155;128;109m▉[38;2;220;168;135;48;2;81;94;109m▂[38;2;160;199;243;48;2;107;112;125m━[38;2;213;164;132;48;2;59;68;79m▂[38;2;151;115;94;48;2;236;182;150m▏[38;2;254;195;160;48;2;254;195;159m▅[38;2;254;196;160;48;2;254;195;160m▁[38;2;254;195;160;48;2;254;195;159m▇▄ [38;2;176;132;97;48;2;253;195;158m▝[38;2;10;6;5;48;2;199;168;148m╺[38;2;69;67;66;48;2;248;191;157m▆[38;2;58;53;51;48;2;231;178;145m▅[38;2;139;96;66;48;2;195;149;117m╽[38;2;159;113;77;48;2;219;168;129m┕[38;2;183;138;96;48;2;182;136;93m▏[38;2;183;136;93;48;2;180;137;92m▏[38;2;181;137;92;48;2;182;137;93m╴[38;2;227;194;144;48;2;194;152;106m▝[38;2;214;188;136;48;2;183;146;102m▝[38;2;183;138;94;48;2;183;141;96m┊[38;2;179;138;93;48;2;183;139;95m╴[0m[38;2;218;191;140m▊ [0m
|
||||
[38;2;183;137;93;48;2;183;137;94m┈[38;2;185;137;94;48;2;180;134;92m╴[38;2;199;148;114;48;2;250;191;156m▏[38;2;252;192;156;48;2;254;195;159m╿[38;2;251;192;156;48;2;253;194;159m╴[38;2;250;190;155;48;2;253;195;159m╻[38;2;254;195;160;48;2;254;195;159m┈[38;2;254;196;160;48;2;254;195;160m▆[48;2;254;196;160m [48;2;254;195;160m▖[38;2;254;195;159m▝[38;2;0;19;41;48;2;185;145;123m▗[38;2;5;11;20;48;2;150;149;151m▆[38;2;15;19;24;48;2;122;122;123m▆[38;2;32;36;41;48;2;198;205;213m▋[38;2;64;61;61;48;2;231;177;145m▋[38;2;251;192;157;48;2;193;140;109m▉[38;2;146;103;65;48;2;180;135;92m▏[38;2;181;137;92;48;2;183;136;93m▃[38;2;183;136;92;48;2;183;138;94m╴[38;2;105;70;35;48;2;172;129;88m╱[38;2;149;110;71;48;2;176;133;91m╸[38;2;181;137;93;48;2;183;137;93m╺[38;2;185;142;98;48;2;230;202;147m▋[0m[38;2;197;179;134m▘ [0m
|
||||
[38;2;185;137;97;48;2;183;137;94m▗[38;2;164;121;81;48;2;214;161;124m┚[48;2;254;195;159m [38;2;254;195;160m▗[38;2;254;196;160;48;2;254;195;160m▗▇[48;2;254;196;160m [48;2;253;195;159m┈[48;2;252;194;158m┈[48;2;254;196;160m [48;2;254;195;160m [38;2;18;17;18;48;2;168;141;128m╺[38;2;86;76;70;48;2;160;187;217m▃[38;2;181;180;184;48;2;22;50;78m▂[38;2;82;86;91;48;2;227;211;206m▘[38;2;128;122;120;48;2;242;186;152m▘[38;2;180;139;102;48;2;239;185;150m▃[38;2;139;97;58;48;2;180;135;94m▎[38;2;182;137;93;48;2;177;133;89m┈[38;2;154;111;68;48;2;171;128;85m╴[38;2;119;81;46;48;2;170;127;84m╱[38;2;179;137;93;48;2;180;137;92m┈[38;2;180;138;93;48;2;182;139;94m┊[0m[7m[38;2;199;171;127m▗[0m [38;2;0;0;0m [0m
|
||||
[38;2;133;97;62;48;2;170;127;86m╶[38;2;102;63;32;48;2;234;178;146m▏[48;2;254;195;159m [38;2;254;195;159;48;2;254;195;160m▌[38;2;254;195;160;48;2;254;196;160m▍ [48;2;253;195;159m┊[38;2;250;191;155m╵[38;2;253;195;159;48;2;253;200;167m▇[38;2;254;195;159;48;2;252;200;170m▇[38;2;188;152;116;48;2;249;193;158m▗[38;2;217;169;137;48;2;175;136;94m▘[38;2;184;136;93;48;2;181;137;93m┊[38;2;158;116;75;48;2;166;122;80m╴[38;2;155;113;68;48;2;173;128;86m╴[38;2;157;114;70;48;2;167;124;83m╶[38;2;183;137;94;48;2;180;135;92m┊[38;2;182;136;93;48;2;184;137;96m▖[38;2;198;161;115;48;2;151;137;103m▉[0m[38;2;100;90;70m▘ [0m
|
||||
[38;2;127;88;50;48;2;157;117;81m╹[38;2;172;137;120;48;2;218;172;146m╸[38;2;215;163;132;48;2;237;180;146m╶[38;2;254;195;159;48;2;248;190;155m┊[38;2;254;196;160;48;2;254;195;160m▝[48;2;254;196;160m [38;2;236;173;142;48;2;253;195;159m┈[48;2;254;196;160m [38;2;254;196;160;48;2;254;195;160m▋[38;2;254;195;160;48;2;254;195;159m▋[38;2;254;195;159;48;2;249;196;162m╴[38;2;247;196;162;48;2;178;138;106m▘[38;2;159;117;73;48;2;170;127;86m┊[38;2;184;137;94;48;2;183;136;93m╵[38;2;180;133;91;48;2;147;104;62m▉[38;2;183;135;93;48;2;174;129;88m┈[38;2;221;188;140;48;2;175;136;92m╱[38;2;143;103;62;48;2;168;124;81m╵[38;2;183;136;93;48;2;183;134;92m▘[38;2;186;139;96;48;2;204;170;122m▋[0m[38;2;199;177;133m▘ [0m
|
||||
[38;2;139;98;60;48;2;162;128;94m▎[38;2;185;167;155;48;2;195;193;193m▝[38;2;196;161;138;48;2;226;180;152m┐[38;2;226;169;137;48;2;240;181;146m╵[38;2;211;158;125;48;2;244;186;152m╸[38;2;225;171;141;48;2;253;195;160m▁[38;2;254;195;160;48;2;254;196;160m▂ [38;2;254;196;159m▁[38;2;254;196;160;48;2;253;196;161m┈[38;2;194;171;137;48;2;252;197;163m▁[38;2;176;140;95;48;2;243;196;164m▂[38;2;224;196;170;48;2;168;128;86m▘[38;2;152;113;72;48;2;162;120;80m┄[38;2;177;134;94;48;2;173;129;86m╴[38;2;174;133;88;48;2;182;133;90m▅[38;2;173;133;87;48;2;180;134;90m╴[38;2;174;134;91;48;2;217;186;135m▚[38;2;116;82;47;48;2;166;123;81m▎[38;2;141;100;62;48;2;176;131;89m▏[38;2;208;172;125;48;2;186;141;96m▁[0m[38;2;179;152;109m▌ [0m
|
||||
[38;2;172;128;89;48;2;128;103;81m▊[38;2;193;193;193;48;2;192;191;191m┊[38;2;194;192;191;48;2;190;189;187m┊[38;2;167;155;151;48;2;202;183;172m╺[38;2;172;141;123;48;2;234;186;156m┒[38;2;185;155;139;48;2;234;178;144m▁[38;2;173;160;155;48;2;237;180;147m▂[38;2;190;172;165;48;2;212;173;152m╷[38;2;131;115;99;48;2;189;170;158m╸[38;2;191;190;188;48;2;195;167;150m▆[38;2;187;173;139;48;2;194;181;164m┌[38;2;227;199;143;48;2;176;153;116m▇[38;2;243;214;153;48;2;244;213;150m╴[38;2;168;127;82;48;2;234;203;142m▝[38;2;192;156;106;48;2;132;92;55m▋[38;2;120;78;41;48;2;169;126;87m╽[38;2;177;129;88;48;2;175;133;91m▆[38;2;177;129;89;48;2;175;131;89m╴[38;2;242;214;157;48;2;197;162;113m┏[38;2;171;131;88;48;2;120;77;40m▊[38;2;145;104;68;48;2;161;117;77m╺[38;2;179;138;96;48;2;209;173;122m▉[0m[7m[38;2;186;161;118m▗[0m[38;2;59;54;53m▍ [0m
|
||||
[38;2;172;125;91;48;2;169;124;85m╴[38;2;72;79;91;48;2;173;172;172m▃[38;2;42;69;99;48;2;179;179;181m▅[38;2;51;78;107;48;2;178;179;180m▄[38;2;41;65;94;48;2;168;162;160m▂[38;2;189;190;192;48;2;173;162;157m▇[38;2;190;191;194;48;2;190;191;192m▇[38;2;190;190;192;48;2;190;189;189m▎[38;2;191;189;188;48;2;187;184;182m┊[38;2;190;170;134;48;2;207;186;147m╴[38;2;241;212;150;48;2;240;210;149m┊[38;2;241;210;146;48;2;241;211;152m▅[38;2;240;209;145m▃[38;2;241;209;145;48;2;240;211;151m▄[38;2;238;207;145;48;2;151;117;72m▊[38;2;141;104;65;48;2;157;114;77m▁[38;2;171;128;89;48;2;175;127;87m▃[38;2;179;134;93;48;2;237;203;150m▊[38;2;233;204;147;48;2;170;132;90m▘[38;2;138;96;61;48;2;156;113;76m╶[38;2;167;121;83;48;2;135;97;59m▋[38;2;131;112;84;48;2;222;187;136m▗[0m [38;2;44;46;58m [0m
|
||||
[38;2;222;169;138;48;2;168;122;86m▖[38;2;144;107;74;48;2;28;56;81m▍[38;2;23;58;91;48;2;15;38;73m▉[38;2;10;32;60;48;2;23;57;90m╴[38;2;7;31;70;48;2;28;66;101m╷[38;2;44;75;106;48;2;168;173;179m▖[38;2;186;186;189;48;2;189;190;192m▗[38;2;186;184;187;48;2;185;184;187m┈[38;2;147;129;94;48;2;202;185;153m╱[38;2;237;205;142;48;2;239;208;145m▆[38;2;236;205;142;48;2;239;208;144m▄[38;2;236;205;141;48;2;240;208;144m▅[38;2;220;189;131;48;2;238;206;142m▁[38;2;218;191;134;48;2;237;206;142m▁[38;2;225;194;132m╶[38;2;126;95;58;48;2;169;129;87m▘[38;2;166;124;85;48;2;168;125;86m▗[38;2;174;130;90;48;2;223;189;136m▌[38;2;127;93;49;48;2;163;121;84m▏[38;2;111;77;55;48;2;160;117;79m│[38;2;165;120;82;48;2;137;101;63m▊[0m[38;2;183;159;118m▍ [0m [38;2;0;0;0m [0m
|
||||
[38;2;170;123;94;48;2;209;159;128m▝[38;2;149;108;72;48;2;46;57;65m▋[38;2;16;36;65;48;2;16;57;90m▗[38;2;145;151;158;48;2;20;57;89m▌[38;2;1;6;35;48;2;19;54;90m▏[38;2;22;63;98;48;2;35;71;104m┊[38;2;99;117;135;48;2;180;178;178m▖[38;2;165;152;133;48;2;199;179;145m╴[38;2;234;201;144;48;2;233;201;143m┈[38;2;232;199;143;48;2;234;202;145m▃[38;2;231;198;142;48;2;234;202;143m▂[38;2;234;201;143;48;2;234;200;145m▌[38;2;196;171;127;48;2;232;198;142m▁[38;2;209;186;145;48;2;179;153;101m▇[38;2;146;134;117;48;2;201;182;150m╶[38;2;125;96;59;48;2;175;157;132m┕[38;2;164;121;83;48;2;164;122;83m┈[38;2;203;165;119;48;2;143;122;88m▊[38;2;194;172;140;48;2;151;115;79m▌[38;2;110;75;47;48;2;157;116;78m└[38;2;163;120;82;48;2;161;119;81m┊[0m[38;2;117;86;61m▌ [0m [38;2;31;35;43m [0m
|
||||
[38;2;171;124;95;48;2;190;143;114m┉[38;2;114;78;52;48;2;212;160;129m▝[38;2;42;54;74;48;2;160;164;169m▉[38;2;175;177;182;48;2;20;56;88m▌[38;2;6;34;69;48;2;17;59;93m▎[38;2;15;64;98;48;2;18;64;99m▖[38;2;32;68;97;48;2;203;175;124m▋[38;2;229;196;141;48;2;226;193;138m▝[38;2;185;157;106;48;2;217;187;131m╺[38;2;228;196;140;48;2;226;194;138m┊[38;2;182;165;134;48;2;211;184;138m╷[38;2;158;145;126;48;2;191;178;157m╸[38;2;176;175;175;48;2;169;157;136m▇[38;2;177;177;178;48;2;180;177;181m▅[38;2;177;175;178m▄[38;2;176;176;176;48;2;172;171;171m┊[38;2;145;107;76;48;2;172;132;91m▊[38;2;153;136;114;48;2;184;166;142m╱[38;2;174;172;171;48;2;129;114;99m▊[38;2;149;111;77;48;2;124;85;49m▊[38;2;151;113;76;48;2;157;115;80m▏[38;2;159;115;80;48;2;163;123;86m╴[0m[38;2;209;177;130m▖ [0m [38;2;25;27;35m [0m
|
||||
[?25h
|
||||
BIN
config/fastfetch/logo_mugi/mugi_1.png
Normal file
|
After Width: | Height: | Size: 645 KiB |
BIN
config/fastfetch/logo_mugi/mugi_2.png
Normal file
|
After Width: | Height: | Size: 724 KiB |
BIN
config/fastfetch/logo_mugi/mugi_3.png
Normal file
|
After Width: | Height: | Size: 738 KiB |
2
config/fastfetch/logo_ros/24x.sixel
Normal file
12
config/fastfetch/logo_ros/24x.symbols
Normal file
@@ -0,0 +1,12 @@
|
||||
[?25l[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [38;2;142;152;164m▗[38;2;174;191;209m▄[38;2;129;136;141m▂ [38;2;177;201;223m▗[38;2;175;191;208m▆[0m [38;2;70;74;76m [0m
|
||||
[38;2;0;0;0m [7m[38;2;154;171;187m▋[0m[38;2;168;180;191;48;2;192;214;235m╻[38;2;174;182;191;48;2;215;224;233m╲[0m[38;2;230;238;245m▆[38;2;187;193;197m▄[38;2;220;223;229m▂[38;2;209;213;216m▂[38;2;189;197;204m▃[38;2;224;237;245;48;2;208;224;235m┈[38;2;176;187;195;48;2;193;209;223m╺[0m[7m[38;2;201;212;221m▝[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [7m[38;2;154;157;161m▋[0m[38;2;239;247;254;48;2;227;237;244m╴[38;2;192;206;219;48;2;213;225;236m╴[38;2;227;241;250;48;2;196;204;211m▄[38;2;210;220;227;48;2;221;233;242m╵[38;2;236;245;254;48;2;232;241;250m┊[38;2;227;239;249;48;2;188;202;215m▅[38;2;179;192;207;48;2;208;221;232m╌[38;2;216;228;236;48;2;228;242;250m▏[38;2;210;224;236;48;2;178;188;196m▉[38;2;209;219;226;48;2;228;240;248m▏[0m[7m[38;2;153;157;160m▝[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [38;2;206;208;211m▗[38;2;216;220;222;48;2;234;241;247m▏[38;2;239;247;254;48;2;234;240;247m╴[38;2;177;181;185;48;2;226;232;238m╹[38;2;236;245;254;48;2;230;241;252m▏[38;2;231;241;253;48;2;243;250;254m▇[38;2;174;180;185;48;2;226;230;237m╵[38;2;239;245;254;48;2;232;242;249m╴[38;2;204;217;223;48;2;223;235;241m╵[38;2;229;246;253;48;2;238;246;254m╻[38;2;236;242;251;48;2;225;233;236m▇[38;2;221;228;234;48;2;229;236;243m╸[0m[7m[38;2;218;225;230m▝[0m[38;2;98;100;101m▖ [0m
|
||||
[38;2;0;0;0m [0m [38;2;161;161;162m╼[38;2;239;245;253;48;2;210;219;227m╴[38;2;205;216;225;48;2;233;242;252m╷[38;2;68;70;72;48;2;235;236;236m▁[38;2;55;66;64;48;2;223;226;229m▁[38;2;204;217;227;48;2;231;238;245m╴[38;2;195;199;199;48;2;230;234;238m╺[38;2;174;171;169;48;2;238;234;234m▁[38;2;46;57;60;48;2;229;231;233m▁[38;2;183;190;193;48;2;227;237;245m▂[38;2;216;227;233;48;2;230;244;253m▏[38;2;228;241;252;48;2;239;242;254m▆[38;2;230;242;252;48;2;220;231;239m┊[38;2;194;202;205;48;2;208;217;223m╴[0m[38;2;189;195;199m▊[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [7m[38;2;182;185;189m▍[0m[38;2;191;201;206;48;2;194;208;219m╴[38;2;127;137;149;48;2;177;190;203m╵[38;2;226;224;226;48;2;156;167;164m▊[38;2;198;205;180;48;2;134;164;158m▃[38;2;180;187;176;48;2;253;245;237m▎ [38;2;246;239;233;48;2;148;168;158m▋[38;2;180;195;177;48;2;120;152;149m▄[38;2;208;210;212;48;2;101;105;107m▇[38;2;207;215;219;48;2;230;241;247m╸[38;2;181;193;200;48;2;217;231;239m╱[38;2;189;204;217;48;2;209;223;233m╲[38;2;150;161;173;48;2;194;211;226m╹[38;2;98;131;176;48;2;211;222;228m▂[0m[38;2;139;150;167m▆[0m [38;2;31;32;33m [0m
|
||||
[38;2;0;0;0m [0m [7m[38;2;185;186;187m▃[0m[38;2;90;124;137;48;2;172;187;202m▖[38;2;160;169;181;48;2;211;220;225m╴[38;2;251;254;254;48;2;239;235;236m┈[38;2;245;243;240;48;2;251;250;249m╵[38;2;252;254;254;48;2;236;233;230m▆[38;2;247;243;239;48;2;248;250;248m╵[38;2;240;243;242;48;2;249;248;245m╶[38;2;122;150;166;48;2;235;223;217m▗[38;2;135;155;166;48;2;212;217;220m▖[38;2;161;169;174;48;2;224;232;242m╴[38;2;76;97;113;48;2;180;198;215m▄[38;2;87;113;129;48;2;152;167;187m▆[38;2;68;93;108;48;2;154;173;190m▄[38;2;106;180;211;48;2;70;109;149m╾[38;2;114;190;224;48;2;68;112;154m╼[0m[38;2;66;89;101m▌ [0m
|
||||
[38;2;0;0;0m [0m [7m[38;2;103;115;127m▋[0m[38;2;104;113;127;48;2;176;189;201m╷[38;2;254;254;254;48;2;238;239;239m┈[38;2;252;254;254;48;2;246;249;249m┊[38;2;249;254;254;48;2;247;253;253m╴[38;2;219;223;223;48;2;234;240;240m╷[38;2;215;218;219;48;2;237;243;243m╷[38;2;59;68;78;48;2;245;253;253m▂[38;2;246;254;254;48;2;226;233;235m╴[38;2;167;187;202;48;2;200;211;222m╴[38;2;186;211;233;48;2;226;239;247m▅[38;2;38;55;65;48;2;168;185;197m▝[38;2;116;131;142;48;2;46;63;77m▁[38;2;83;96;109;48;2;49;66;79m▁[38;2;43;57;68;48;2;62;75;85m▃[38;2;64;74;83;48;2;60;74;81m▊[38;2;55;67;76;48;2;59;66;73m▇[0m[38;2;61;62;65m▎ [0m
|
||||
[7m[38;2;119;127;135m▄[38;2;125;139;152m▃[0m[38;2;93;99;105;48;2;182;200;220m▁[0m[7m[38;2;169;186;204m╶[38;2;147;161;177m╼[38;2;108;122;137m▅[38;2;198;196;195m▅[38;2;214;215;215m▅[38;2;195;197;198m▄[38;2;210;210;211m▄[38;2;159;161;164m▄[38;2;54;64;74m▄[38;2;175;176;179m▅[38;2;186;180;178m▅[38;2;165;183;204m▅[0m[38;2;106;112;115;48;2;184;202;218m▁[38;2;117;119;122;48;2;186;204;220m▁[38;2;91;95;97;48;2;191;213;231m▁[0m[7m[38;2;174;193;209m▂[0m[38;2;103;110;114m╸[7m[38;2;44;51;58m▆[38;2;48;51;53m▆[0m [0m
|
||||
[38;2;0;0;0m [0m [7m[38;2;178;186;192m▇[0m [38;2;0;0;0m [0m
|
||||
[?25h
|
||||
2
config/fastfetch/logo_ros/28x.sixel
Normal file
16
config/fastfetch/logo_ros/28x.symbols
Normal file
@@ -0,0 +1,16 @@
|
||||
[?25l[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [0m [38;2;107;107;108m▁ [38;2;181;190;201m▗[38;2;127;132;136m▖ [0m
|
||||
[38;2;0;0;0m [7m[38;2;143;150;157m▋[0m[38;2;189;211;236;48;2;152;156;165m▇[0m[38;2;187;202;215m▅[38;2;182;188;194m▂[0m [38;2;0;0;0m [38;2;170;186;205m▗[38;2;187;211;237;48;2;181;205;230m┊[38;2;97;100;103;48;2;181;198;215m▝[0m [38;2;67;70;72m [0m
|
||||
[38;2;0;0;0m [7m[38;2;135;146;156m▊[0m[38;2;169;189;207;48;2;178;201;223m▁[38;2;177;185;194;48;2;208;221;231m┕[38;2;194;200;204;48;2;233;240;247m╴[38;2;229;236;244;48;2;105;107;108m▆[0m[38;2;194;201;203m▃[38;2;224;227;232m▂[38;2;206;209;212m▂[38;2;198;202;209m▂[38;2;185;195;202;48;2;209;222;232m╹[38;2;216;231;239;48;2;170;188;207m▇[38;2;142;153;163;48;2;202;216;227m│[0m[7m[38;2;174;182;189m▝[0m[38;2;23;23;23m [0m
|
||||
[38;2;0;0;0m [7m[38;2;147;150;152m▊[0m[38;2;192;200;208;48;2;227;237;246m▏[38;2;189;205;220;48;2;219;232;243m┎[38;2;176;184;190;48;2;208;218;226m╲[38;2;225;237;246;48;2;186;194;201m▃[38;2;234;243;252;48;2;219;230;239m┊[38;2;236;247;254;48;2;230;239;247m┈[38;2;179;195;211;48;2;210;221;230m└[38;2;184;196;204;48;2;199;213;227m╶[38;2;238;249;254;48;2;226;239;247m╴[38;2;227;239;253;48;2;215;230;243m╴[38;2;157;170;182;48;2;194;208;221m┊[38;2;232;244;253;48;2;223;234;242m┈[0m[38;2;118;124;125m▖ [0m
|
||||
[38;2;0;0;0m [7m[38;2;118;118;119m▉[0m[38;2;165;166;168;48;2;229;235;239m▎[38;2;234;245;253;48;2;230;239;248m┊[38;2;235;245;253;48;2;226;236;245m┈[38;2;200;208;211;48;2;226;236;244m╴[38;2;236;242;254;48;2;229;243;252m▗[38;2;248;254;254;48;2;237;243;253m╸[38;2;236;242;254;48;2;227;236;246m╴[38;2;233;244;251;48;2;209;223;234m▇[38;2;192;205;212;48;2;210;223;231m▗[38;2;239;250;254;48;2;235;246;252m┈[38;2;239;248;254;48;2;235;242;250m╴[38;2;212;219;223;48;2;227;235;241m┌[38;2;227;233;238;48;2;160;164;167m▇[0m[38;2;220;224;227m▖ [0m
|
||||
[38;2;0;0;0m [7m[38;2;174;177;180m▌[0m[38;2;220;224;228;48;2;235;242;248m▏[38;2;239;247;254;48;2;237;244;251m┈[38;2;225;226;229;48;2;146;148;150m▉[38;2;228;242;252;48;2;237;244;253m╺[48;2;228;241;252m [38;2;228;241;252;48;2;230;241;252m▉[38;2;172;175;177;48;2;224;226;231m╵[38;2;202;205;207;48;2;231;234;241m╴[38;2;239;247;254;48;2;235;245;253m┈[38;2;211;222;228;48;2;231;242;249m╲[38;2;229;245;253;48;2;238;242;254m▎[38;2;239;245;254;48;2;238;243;253m┊[38;2;212;223;228;48;2;225;232;239m╶[38;2;233;242;250;48;2;218;226;231m┈[0m[38;2;158;161;164m▌ [0m
|
||||
[38;2;0;0;0m [0m [38;2;177;177;178m╼[38;2;240;247;253;48;2;214;222;230m╴[38;2;229;241;252;48;2;233;242;253m▃[38;2;214;218;222;48;2;232;235;240m┊[38;2;253;252;247;48;2;240;240;236m┈[38;2;200;206;213;48;2;210;218;226m╴[38;2;227;231;239;48;2;230;239;248m╷[38;2;193;195;196;48;2;219;224;228m╶[38;2;224;221;221;48;2;237;233;233m╴[38;2;206;206;206;48;2;231;230;229m╵[38;2;239;246;254;48;2;231;239;246m╴[38;2;187;198;209;48;2;225;239;245m▖[38;2;228;242;252;48;2;234;243;253m▆[38;2;231;241;253;48;2;229;240;251m┊[38;2;229;243;252;48;2;220;232;240m┊[38;2;227;236;242;48;2;203;212;217m┊[38;2;146;153;153;48;2;200;207;211m╶[0m[7m[38;2;142;142;142m▅[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [7m[38;2;196;199;202m▍[0m[38;2;169;176;182;48;2;205;219;229m▏[38;2;218;235;247;48;2;184;199;213m┊[38;2;206;209;212;48;2;131;134;137m▅[38;2;145;169;165;48;2;69;79;78m▆[38;2;116;141;136;48;2;175;185;179m▌[38;2;253;245;237;48;2;254;246;242m▇[48;2;253;245;237m [38;2;240;233;229;48;2;119;138;132m▊[38;2;127;162;156;48;2;50;65;67m▆[38;2;179;193;192;48;2;121;127;129m▅[38;2;138;142;146;48;2;213;218;222m▘[38;2;227;239;245;48;2;232;246;253m┈[38;2;167;179;188;48;2;206;219;227m╺[38;2;204;216;224;48;2;225;240;248m▏[38;2;145;153;159;48;2;201;215;227m╹[38;2;192;206;215;48;2;218;231;240m╴[0m[7m[38;2;189;192;195m▝[0m[38;2;154;156;161m▖ [0m
|
||||
[38;2;0;0;0m [38;2;119;119;120m▗[38;2;117;117;117;48;2;170;172;176m▏[38;2;165;176;185;48;2;180;195;210m╵[38;2;227;242;248;48;2;192;206;217m┈[38;2;234;228;232;48;2;204;203;209m┊[38;2;236;227;221;48;2;170;187;175m▇[38;2;228;227;214;48;2;169;189;164m▇[38;2;241;238;235;48;2;251;244;238m▖[38;2;241;236;230;48;2;250;243;236m╷[38;2;245;237;230;48;2;215;215;205m▇[38;2;252;231;222;48;2;183;197;174m▄[38;2;184;191;181;48;2;222;217;214m▘[38;2;198;204;208;48;2;225;232;238m╌[38;2;203;209;219;48;2;226;236;245m▁[38;2;194;208;217;48;2;204;219;232m▏[38;2;131;148;169;48;2;187;200;215m▄[38;2;162;175;188;48;2;180;198;218m▁[38;2;82;121;173;48;2;199;212;219m▆[38;2;74;118;181;48;2;169;180;191m▆[0m[38;2;64;100;140m▅[0m [38;2;48;49;50m [0m
|
||||
[38;2;0;0;0m [7m[38;2;113;113;113m▇[38;2;123;129;131m▖[0m[38;2;96;123;135;48;2;162;179;194m▌[38;2;223;229;234;48;2;179;190;200m▅[38;2;247;249;249;48;2;198;204;209m▇[38;2;248;254;254;48;2;254;254;254m▁[48;2;253;254;254m▂[38;2;247;254;254;48;2;252;254;254m▃[38;2;246;254;254;48;2;254;253;252m▆[48;2;246;251;250m┈[38;2;118;140;153;48;2;231;231;232m╺[38;2;54;81;98;48;2;190;203;210m┪[38;2;196;205;214;48;2;222;231;237m╺[38;2;214;225;233;48;2;78;94;109m▉[38;2;38;57;74;48;2;120;156;182m▅[38;2;42;59;74;48;2;129;162;176m▄[38;2;63;85;100;48;2;150;173;186m▆[38;2;58;76;91;48;2;93;155;188m▄[38;2;60;76;88;48;2;96;160;194m▃[0m[7m[38;2;77;113;130m╶[0m [38;2;37;38;39m [0m
|
||||
[38;2;0;0;0m [38;2;113;123;136m▗[38;2;112;127;141;48;2;193;206;218m▘[38;2;165;165;164;48;2;251;253;253m▁[38;2;211;211;212;48;2;239;243;243m╷[38;2;254;254;254;48;2;247;254;254m▂[38;2;225;229;230;48;2;239;245;245m╷[38;2;142;144;144;48;2;243;250;250m▁[38;2;200;202;203;48;2;246;254;254m▁[38;2;164;169;170m▁[38;2;204;210;211;48;2;244;252;253m▁[38;2;159;162;167;48;2;197;212;224m▁[38;2;185;208;228;48;2;204;222;236m┏[38;2;188;210;227;48;2;224;239;246m▃[38;2;176;192;201;48;2;50;66;76m▖[38;2;56;73;85;48;2;43;60;74m▝[38;2;40;55;69;48;2;58;77;90m▄[38;2;43;57;67;48;2;62;76;88m▃[38;2;66;74;84;48;2;65;74;83m┊[38;2;66;76;80;48;2;61;74;81m╴[0m[38;2;54;62;70m▉[0m [38;2;0;0;0m [0m
|
||||
[38;2;126;126;126m─[38;2;154;162;172m▄[38;2;154;172;190m▄[38;2;180;201;224m▅[38;2;167;183;204m▆[38;2;145;162;182m▅[7m[38;2;158;177;200m▁[38;2;124;141;159m▂[38;2;194;192;191m▂[38;2;230;230;230m▂[38;2;253;254;254m▃[38;2;231;232;233m▁[38;2;233;234;233m▁[0m[38;2;66;67;68;48;2;174;176;179m▁[38;2;59;68;78;48;2;43;55;65m▋[38;2;64;72;80;48;2;196;196;197m▌[0m[7m[38;2;236;228;227m▂[38;2;166;174;184m▂[0m[38;2;185;209;236;48;2;167;190;211m╴[38;2;176;190;199;48;2;181;205;228m▂[38;2;184;204;220;48;2;62;80;92m▆[38;2;186;208;229;48;2;56;68;83m▆[38;2;201;221;240;48;2;47;64;75m▅[38;2;190;207;224;48;2;69;81;90m▖[0m[7m[38;2;59;69;76m▃[38;2;44;53;61m▄[0m [38;2;71;71;71m━[0m
|
||||
[7m[38;2;139;148;159m▅[38;2;194;215;234m▃[38;2;173;186;198m▂[0m[38;2;177;184;193m━[0m [38;2;43;43;43m [38;2;168;177;183m▝[7m[38;2;192;207;219m▄[38;2;172;183;196m▃[38;2;194;215;231m▄[38;2;184;205;220m▅[38;2;84;90;96m▇[0m[38;2;4;5;5m [0m
|
||||
[38;2;0;0;0m [0m
|
||||
[?25h
|
||||
2
config/fastfetch/logo_ros/32x.sixel
Normal file
16
config/fastfetch/logo_ros/32x.symbols
Normal file
@@ -0,0 +1,16 @@
|
||||
[?25l[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [0m [38;2;147;147;148m▁ [0m [38;2;167;175;184m▄[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [7m[38;2;130;133;136m▊[0m[38;2;189;211;235;48;2;171;176;186m▇[0m[38;2;182;200;217m▆[38;2;179;188;198m▄[38;2;138;140;140m▁ [38;2;105;111;118m▗[38;2;94;100;106;48;2;179;202;225m▘[38;2;181;203;227;48;2;167;184;202m▉[0m[7m[38;2;157;168;176m▝[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [7m[38;2;94;96;97m▊[0m[38;2;176;201;226;48;2;143;161;179m▉[38;2;162;176;185;48;2;209;225;236m▏[38;2;175;179;184;48;2;215;221;228m┐[38;2;236;246;253;48;2;201;206;209m▇[0m[38;2;227;233;239m▅[38;2;176;181;184m▃[38;2;227;229;235m▂[38;2;208;210;213m▂[38;2;187;192;196m▂[38;2;107;110;114;48;2;206;217;226m▘[38;2;207;221;228;48;2;221;236;245m╵[38;2;231;245;253;48;2;200;215;225m╴[38;2;222;236;248;48;2;198;211;222m┊[0m[38;2;159;164;169m▌ [0m
|
||||
[38;2;0;0;0m [7m[38;2;113;114;114m▊[0m[38;2;167;173;179;48;2;222;232;241m▎[38;2;232;245;254;48;2;222;235;245m╴[38;2;188;205;223;48;2;201;212;222m╴[38;2;170;178;186;48;2;213;222;229m╺[38;2;188;199;205;48;2;199;209;218m╴[38;2;230;241;249;48;2;214;222;227m▇[38;2;237;247;254;48;2;230;239;247m┈[38;2;187;200;212;48;2;213;224;233m┖[38;2;169;182;195;48;2;198;213;228m╺[38;2;234;245;253;48;2;219;231;240m┊[38;2;230;245;253;48;2;227;241;251m╴[38;2;194;207;219;48;2;201;216;231m╷[38;2;156;168;178;48;2;206;219;229m╴[38;2;146;150;154;48;2;229;241;249m▝[0m[38;2;85;89;89m▖ [0m
|
||||
[38;2;0;0;0m [0m [38;2;109;110;111;48;2;207;210;214m▏[38;2;213;223;229;48;2;228;237;244m╵[38;2;238;246;254;48;2;228;241;252m▄[38;2;148;154;156;48;2;223;234;241m┌[38;2;239;247;254;48;2;231;243;251m╴[38;2;241;247;254;48;2;232;242;253m╺[38;2;248;254;254;48;2;237;243;253m╸[38;2;237;242;254;48;2;226;235;244m╴[38;2;237;246;254;48;2;233;244;252m╴[38;2;175;190;205;48;2;210;224;232m╵[38;2;189;202;208;48;2;233;245;250m▖[38;2;238;248;254;48;2;232;245;253m▇[38;2;218;228;234;48;2;233;241;247m╵[38;2;210;216;221;48;2;226;234;240m╶[38;2;227;233;237;48;2;149;152;155m▇[0m[38;2;170;172;174m▄[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [38;2;220;223;228m▗[38;2;241;247;251;48;2;226;233;238m┈[38;2;239;245;254;48;2;239;247;254m▂[38;2;207;209;210;48;2;233;238;243m┎[38;2;180;181;184;48;2;227;229;234m╻[38;2;235;244;254;48;2;230;241;252m▌[48;2;228;241;252m [38;2;228;241;252;48;2;229;241;252m╴[38;2;161;163;163;48;2;225;227;232m╷[38;2;197;198;199;48;2;232;235;241m┒[38;2;239;245;254;48;2;234;244;251m┈[38;2;208;221;227;48;2;229;239;246m╵[38;2;235;244;250;48;2;233;245;253m▏[38;2;239;242;254;48;2;239;244;254m▉[38;2;239;244;253;48;2;236;241;251m┊[38;2;198;206;211;48;2;225;233;240m╷[38;2;201;208;213;48;2;227;235;241m▂[0m[7m[38;2;173;177;180m▝[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [0m [38;2;92;91;92m┌[38;2;185;184;185m╼[38;2;218;226;234;48;2;186;191;196m▇[38;2;229;240;253;48;2;231;242;252m╴[38;2;207;214;217;48;2;230;237;246m╶[38;2;253;250;247;48;2;241;240;238m┊[38;2;157;159;158;48;2;229;230;230m╵[38;2;191;200;207;48;2;215;226;236m╲[38;2;234;244;253;48;2;234;241;250m┈[38;2;171;175;177;48;2;221;226;229m╱[38;2;215;212;213;48;2;236;233;232m╴[38;2;231;229;225;48;2;235;232;230m┊[38;2;239;247;254;48;2;230;235;241m┊[38;2;182;191;195;48;2;219;230;238m▁[38;2;205;217;223;48;2;230;246;253m▏[38;2;228;241;252;48;2;237;242;254m▆[38;2;228;239;250;48;2;206;215;223m▉[38;2;229;243;252;48;2;222;234;243m┊[38;2;226;236;242;48;2;201;210;215m┊[38;2;217;227;232;48;2;173;177;179m▇[0m[7m[38;2;170;170;170m▅[0m [38;2;83;83;83m [0m
|
||||
[38;2;0;0;0m [7m[38;2;205;209;213m▍[0m[38;2;165;172;177;48;2;209;222;231m▏[38;2;186;199;217;48;2;201;217;232m╸[38;2;182;189;198;48;2;124;129;132m▄[38;2;196;203;203;48;2;90;92;93m▆[38;2;133;166;160;48;2;59;75;72m▆[38;2;129;144;138;48;2;202;208;201m┑[38;2;253;245;237;48;2;254;245;243m▇[48;2;253;245;237m [38;2;252;244;239;48;2;129;136;132m▊[38;2;125;160;152;48;2;51;65;67m▆[38;2;82;103;106;48;2;138;159;157m▘[38;2;153;153;157;48;2;192;193;196m┕[38;2;189;197;202;48;2;228;238;244m╱[38;2;232;247;253;48;2;227;242;250m╴[38;2;214;228;235;48;2;178;189;198m▚[38;2;229;246;253;48;2;225;239;248m╴[38;2;106;115;126;48;2;200;213;223m│[38;2;161;174;184;48;2;217;233;244m╻[38;2;212;216;220;48;2;128;130;132m▇[0m[38;2;166;168;173m▄[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [38;2;171;171;171m▗[38;2;140;140;141;48;2;174;176;180m▏[38;2;162;173;185;48;2;180;195;211m┕[38;2;220;234;240;48;2;197;211;221m┈[38;2;187;192;195;48;2;182;192;203m╶[38;2;253;240;240;48;2;238;226;226m┊[38;2;244;238;230;48;2;174;190;162m▅[38;2;173;175;160;48;2;232;231;221m╵[38;2;253;246;238;48;2;249;243;237m╴[38;2;237;235;231;48;2;251;243;236m▁[38;2;253;245;237;48;2;244;236;230m┈[38;2;178;193;173;48;2;229;222;208m▘[38;2;181;188;179;48;2;217;212;201m╵[38;2;204;207;210;48;2;214;218;221m╲[38;2;209;218;226;48;2;235;244;252m╼[38;2;171;180;192;48;2;219;230;239m▁[38;2;158;181;207;48;2;206;219;231m▁[38;2;113;129;148;48;2;171;187;205m▖[38;2;170;183;195;48;2;178;198;221m▂[38;2;95;129;172;48;2;201;215;223m▆[38;2;77;121;183;48;2;174;185;194m▆[38;2;55;63;76;48;2;82;123;176m▝[0m[38;2;73;107;137m▖ [0m
|
||||
[38;2;0;0;0m [7m[38;2;139;138;139m▆[38;2;125;133;135m▖[0m[38;2;98;125;136;48;2;170;187;203m▋[38;2;92;101;111;48;2;200;210;219m╵[38;2;247;248;249;48;2;187;197;205m▆[38;2;254;254;254;48;2;251;252;252m┈[38;2;248;254;254;48;2;253;254;254m▁[38;2;247;254;254;48;2;254;254;254m▃[38;2;248;254;254;48;2;253;254;254m▅[38;2;246;254;254;48;2;252;253;253m▅[48;2;247;251;251m┈[38;2;180;188;191;48;2;239;238;238m╺[38;2;154;169;180;48;2;79;100;112m▋[38;2;236;247;254;48;2;221;232;237m┊[38;2;154;163;170;48;2;217;226;235m╵[38;2;228;239;248;48;2;82;101;118m▌[38;2;39;58;74;48;2;108;149;175m▅[38;2;42;59;75;48;2;137;168;181m▄[38;2;51;69;84;48;2;149;173;185m▅[38;2;57;75;91;48;2;88;148;179m▄[38;2;63;83;97;48;2;100;166;202m▄[38;2;57;71;84;48;2;100;167;202m▃[0m[38;2;66;91;98m▌[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [38;2;119;130;144m▗[38;2;100;115;129;48;2;183;198;212m▘[38;2;176;176;176;48;2;251;253;254m▁[38;2;180;181;181;48;2;250;254;254m▂[38;2;254;254;254;48;2;248;252;252m╴[48;2;246;254;254m▂[38;2;209;213;213;48;2;232;239;239m╷[38;2;147;149;149;48;2;245;253;253m▁[38;2;193;195;196;48;2;246;254;254m▁[38;2;164;170;172m▁[38;2;207;212;213m▁[38;2;161;167;171;48;2;214;227;236m▁[38;2;211;226;240;48;2;193;207;220m┊[38;2;186;210;230;48;2;227;239;248m▅[38;2;146;157;162;48;2;213;229;240m▝[38;2;117;133;144;48;2;47;64;75m▁[38;2;57;73;86;48;2;44;60;75m▝[38;2;40;54;69;48;2;58;77;90m▄[38;2;40;54;65;48;2;60;77;88m▃[38;2;65;77;86;48;2;63;73;83m╴[38;2;61;73;82;48;2;64;75;82m▂[38;2;59;72;81;48;2;50;62;72m▇[0m[38;2;55;59;66m▋ [0m
|
||||
[38;2;117;117;118m─[38;2;153;159;166m▄[38;2;152;168;184m▄[38;2;157;176;196m▅[38;2;176;193;213m▆[38;2;163;179;199m▆[38;2;139;155;175m▅[7m[38;2;161;180;203m▁[38;2;133;152;172m▂[38;2;162;162;163m▂[38;2;231;230;230m▂[38;2;233;233;233m▂[38;2;225;227;228m▁[38;2;235;236;236m▁[38;2;232;233;233m▁[0m[38;2;72;72;74;48;2;164;166;169m▁[38;2;74;75;78;48;2;51;62;73m▁[38;2;61;70;78;48;2;198;200;201m▊[0m[7m[38;2;244;239;238m▂[38;2;192;188;188m▂[38;2;171;191;213m▂[0m[38;2;158;169;179;48;2;180;207;233m▂[38;2;179;203;230;48;2;179;199;217m╴[38;2;184;204;220;48;2;55;73;85m▆[38;2;185;207;228;48;2;60;72;86m▆[38;2;204;224;244;48;2;54;70;83m▅[38;2;189;206;222;48;2;53;69;81m▄[0m[7m[38;2;62;73;82m▃[38;2;50;60;68m▃[38;2;41;46;51m▃[0m[38;2;50;50;51m━[38;2;72;72;72m━[0m
|
||||
[7m[38;2;90;97;102m▇[38;2;180;196;212m▄[38;2;193;212;229m▂[38;2;156;166;177m▂[0m[38;2;175;181;189m━[0m [38;2;48;48;48m [0m [7m[38;2;158;167;172m▃[38;2;189;204;217m▄[38;2;172;184;196m▃[38;2;194;215;231m▄[38;2;171;192;205m▄[38;2;121;131;140m▆[0m[38;2;4;4;4m [0m
|
||||
[38;2;0;0;0m [0m
|
||||
[?25h
|
||||
2
config/fastfetch/logo_ros/42x.sixel
Normal file
21
config/fastfetch/logo_ros/42x.symbols
Normal file
@@ -0,0 +1,21 @@
|
||||
[?25l[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [0m [38;2;41;41;41m [0m
|
||||
[38;2;0;0;0m [38;2;115;118;121m▗[38;2;170;176;189m▄[38;2;99;102;107m▂ [38;2;132;145;156m▗[38;2;187;204;223;48;2;118;120;122m▆[0m[7m[38;2;149;159;167m▝[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [7m[38;2;155;164;172m▌[0m[38;2;188;212;239;48;2;189;209;237m▆[38;2;170;192;208;48;2;187;208;228m╶[0m[38;2;196;209;221m▆[38;2;204;212;221m▃[38;2;96;97;97m▂ [38;2;151;163;176m▗[38;2;143;153;166;48;2;175;197;220m▏[38;2;180;205;232;48;2;186;210;236m▅[38;2;92;106;122;48;2;181;199;218m╷[0m[7m[38;2;137;145;150m▝[0m[38;2;8;8;8m [0m
|
||||
[38;2;0;0;0m [7m[38;2;123;131;138m▌[0m[38;2;179;205;233;48;2;192;215;240m▉[38;2;122;141;159;48;2;195;213;226m▏[38;2;150;158;167;48;2;196;206;216m┄[38;2;189;195;201;48;2;228;234;241m▏[38;2;235;246;251;48;2;186;190;192m▇[0m[38;2;224;229;235m▅[38;2;157;161;162m▃[0m [38;2;160;165;167m▗[38;2;189;200;209;48;2;130;136;143m▇[38;2;229;243;252;48;2;219;234;242m┈[38;2;159;165;171;48;2;204;219;232m╺[38;2;145;155;163;48;2;181;194;206m┉[38;2;225;240;253;48;2;215;227;238m╴[0m[38;2;139;144;147m▍ [0m
|
||||
[38;2;0;0;0m [7m[38;2;103;109;115m▋[0m[38;2;186;200;205;48;2;190;208;224m╶[38;2;233;245;253;48;2;221;232;241m┊[38;2;236;247;253;48;2;214;225;233m┊[38;2;158;164;170;48;2;206;213;222m╻[38;2;188;195;201;48;2;220;228;236m▁[38;2;158;163;168;48;2;199;206;214m╴[38;2;219;229;235;48;2;206;215;221m┈[38;2;225;232;239;48;2;131;134;135m▇[38;2;149;154;158;48;2;235;240;246m╶[38;2;203;211;219;48;2;145;146;148m▇[38;2;200;213;223;48;2;105;106;107m▇[38;2;236;249;254;48;2;212;222;230m╴[38;2;228;241;252;48;2;229;243;252m┈[38;2;227;243;252;48;2;227;241;251m┊[38;2;188;204;224;48;2;220;236;248m▂[38;2;186;202;219;48;2;125;137;150m▉[38;2;141;153;164;48;2;225;238;248m▏[38;2;103;107;110;48;2;220;228;237m▝[0m[38;2;59;60;61m▖ [0m
|
||||
[38;2;0;0;0m [7m[38;2;150;152;153m▋[0m[38;2;199;204;208;48;2;226;233;239m╴[38;2;205;213;219;48;2;223;234;242m╷[38;2;171;185;197;48;2;211;225;239m╸[38;2;222;234;243;48;2;205;216;225m▇[38;2;191;201;210;48;2;213;225;234m╵[38;2;226;239;247;48;2;184;196;204m▇[38;2;227;241;250;48;2;230;244;253m▏[38;2;229;241;252;48;2;234;246;253m▅[38;2;231;241;253;48;2;238;247;254m▅[38;2;232;243;252;48;2;202;214;225m▇[38;2;230;244;251;48;2;189;206;224m▄[38;2;170;183;195;48;2;188;203;218m┊[38;2;158;170;180;48;2;214;226;233m╴[38;2;236;248;254;48;2;230;245;253m▂[38;2;228;246;253;48;2;221;235;245m╴[38;2;235;244;249;48;2;199;209;218m╴[38;2;207;216;221;48;2;226;239;247m▏[38;2;230;244;253;48;2;238;247;254m▌[0m[7m[38;2;164;169;173m▝[0m [38;2;59;60;61m [0m
|
||||
[38;2;0;0;0m [7m[38;2;139;139;140m▉[0m[38;2;152;153;154;48;2;201;204;207m╴[38;2;213;221;225;48;2;228;236;242m╴[38;2;239;246;254;48;2;230;242;252m▅[38;2;239;247;253;48;2;228;241;252m▅[38;2;101;104;107;48;2;213;222;228m╻[38;2;239;247;254;48;2;235;245;252m┊[38;2;228;242;252;48;2;232;242;253m▊[38;2;246;251;254;48;2;237;243;254m▝[38;2;244;251;254;48;2;238;243;253m▘[38;2;236;243;253;48;2;187;195;203m▉[38;2;238;246;254;48;2;227;235;243m┊[38;2;230;247;254;48;2;234;246;253m┈[38;2;183;194;201;48;2;210;225;233m╺[38;2;177;189;197;48;2;222;234;239m┒[38;2;236;246;254;48;2;239;249;254m▂[38;2;238;243;254;48;2;239;247;254m▂[38;2;215;225;229;48;2;234;241;247m╵[38;2;204;211;215;48;2;220;228;232m┉[38;2;206;212;217;48;2;234;241;247m╴[38;2;120;123;125;48;2;233;239;242m▝[0m[38;2;192;195;197m▖ [0m
|
||||
[38;2;0;0;0m [0m [7m[38;2;156;157;159m▘[0m[38;2;206;208;211;48;2;229;236;240m▏[48;2;239;247;254m [38;2;239;246;254m┈[38;2;201;200;201;48;2;219;222;225m╶[38;2;172;175;178;48;2;221;224;230m╹[38;2;230;242;253;48;2;236;246;254m▄[48;2;228;241;252m [38;2;228;241;252;48;2;229;241;252m▇[48;2;231;241;253m▇[38;2;234;240;249;48;2;157;158;160m▊[38;2;196;198;203;48;2;217;218;221m┊[38;2;212;215;221;48;2;238;244;252m▁[38;2;238;247;254;48;2;229;246;253m▅[48;2;224;236;243m╴[38;2;222;231;237;48;2;231;242;248m┈[38;2;230;245;253;48;2;238;242;254m▍[38;2;238;246;254;48;2;239;242;254m▝[38;2;238;243;254;48;2;237;242;251m┈[38;2;238;245;253;48;2;226;233;240m┊[38;2;204;210;215;48;2;225;234;240m▁[38;2;198;207;212;48;2;224;231;236m┈[0m[7m[38;2;130;133;135m▝[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [0m [38;2;181;182;185m▃[38;2;239;246;254;48;2;219;227;235m╴[38;2;233;243;253;48;2;238;245;253m▄[38;2;229;241;252;48;2;237;242;254m▖[38;2;190;192;194;48;2;227;230;235m╷[38;2;253;252;248;48;2;247;246;243m┊[38;2;137;138;139;48;2;229;230;232m╷[38;2;200;209;219;48;2;228;235;245m╻[48;2;229;241;252m [38;2;237;244;254;48;2;228;241;252m▂[38;2;184;191;193;48;2;217;227;235m╷[38;2;145;150;150;48;2;224;225;227m╵[38;2;251;246;246;48;2;246;241;240m┈[38;2;201;202;203;48;2;229;230;234m╻[38;2;239;247;254;48;2;237;244;252m┈[38;2;226;237;245;48;2;231;242;249m┊[38;2;236;248;253;48;2;229;242;248m┊[38;2;239;242;254;48;2;229;243;253m▝[38;2;228;241;252;48;2;238;242;254m▃▃[38;2;232;243;253;48;2;229;240;249m┊[38;2;151;159;161;48;2;201;210;214m╎[38;2;193;201;205;48;2;222;230;234m╴[38;2;222;228;231;48;2;163;166;167m▉[0m[38;2;144;144;145m▅[38;2;115;115;116m▄[0m [38;2;33;33;33m [0m
|
||||
[38;2;0;0;0m [0m [7m[38;2;128;127;128m▅[38;2;134;133;133m▅[0m[38;2;149;151;153;48;2;222;228;235m▏[38;2;129;141;151;48;2;208;220;230m╵[38;2;229;242;253;48;2;233;241;253m▇[38;2;148;155;158;48;2;225;235;243m▁[38;2;49;52;56;48;2;221;222;223m▂[38;2;77;83;82;48;2;244;242;238m▃[38;2;55;71;68;48;2;221;222;222m▃[38;2;142;150;151;48;2;208;218;226m▖[38;2;240;243;247;48;2;232;234;236m┊[38;2;219;216;218;48;2;246;244;247m╺[38;2;251;247;242;48;2;220;218;214m╴[38;2;252;244;242;48;2;241;234;232m┊[38;2;91;96;97;48;2;244;239;237m▃[38;2;62;75;77;48;2;216;215;215m▃[38;2;119;126;128;48;2;236;242;249m▃[38;2;66;69;71;48;2;186;194;202m▁[38;2;191;204;211;48;2;222;237;243m╴[38;2;231;244;253;48;2;228;243;252m▁[38;2;228;245;253;48;2;228;241;252m▁[38;2;206;218;227;48;2;218;231;240m╶[38;2;168;178;185;48;2;227;240;250m▏[38;2;221;233;240;48;2;161;169;175m▉[38;2;111;121;129;48;2;193;203;210m┄[38;2;158;173;188;48;2;215;230;239m╸[0m[7m[38;2;165;169;172m▝[0m [38;2;68;68;68m [0m
|
||||
[38;2;0;0;0m [7m[38;2;178;179;182m▌[0m[38;2;100;106;111;48;2;197;204;208m╷[38;2;227;242;248;48;2;187;203;218m▍[38;2;177;194;214;48;2;202;219;236m╾[38;2;149;160;173;48;2;85;91;96m▅[38;2;238;239;240;48;2;152;153;156m▇[38;2;101;118;116;48;2;153;171;169m╹[38;2;113;146;140;48;2;155;186;181m▚[38;2;101;125;118;48;2;149;167;159m┈[38;2;253;247;241;48;2;253;245;237m▏ [38;2;253;245;240;48;2;240;238;236m▉[38;2;94;98;94;48;2;122;153;145m▏[38;2;131;167;160;48;2;98;131;131m▇[38;2;96;116;115;48;2;140;161;159m╹[38;2;219;218;221;48;2;56;59;61m▇[38;2;117;118;122;48;2;204;210;214m▏[38;2;237;249;254;48;2;233;246;252m╴[38;2;230;247;254;48;2;221;237;244m┊[38;2;159;171;181;48;2;187;200;208m╵[38;2;189;203;210;48;2;229;244;252m▏[38;2;151;160;166;48;2;206;220;228m╺[38;2;142;154;167;48;2;183;198;213m╴[38;2;138;152;163;48;2;205;220;230m╷[38;2;235;243;249;48;2;60;63;66m▉[38;2;183;184;186;48;2;109;110;110m▇[0m[38;2;203;206;215m▖ [0m
|
||||
[38;2;0;0;0m [0m [7m[38;2;181;181;183m▘[0m[38;2;142;150;162;48;2;171;181;195m╱[38;2;120;129;137;48;2;189;203;215m╲[38;2;173;188;197;48;2;207;221;232m╺[38;2;191;205;224;48;2;178;191;206m┊[38;2;91;96;101;48;2;245;235;237m▏[38;2;158;164;160;48;2;228;220;217m╵[38;2;251;241;231;48;2;185;198;167m▃[38;2;237;232;211;48;2;208;210;193m┈[38;2;253;246;238;48;2;249;242;235m┊[38;2;253;245;233;48;2;253;245;238m▝[38;2;252;242;237;48;2;253;244;237m━[38;2;252;243;237;48;2;253;245;237m╍[38;2;159;156;144;48;2;210;213;199m╲[38;2;245;228;215;48;2;181;195;172m▃[38;2;159;167;161;48;2;207;207;199m╵[38;2;171;174;177;48;2;216;218;221m▁[38;2;238;248;254;48;2;224;233;239m╴[38;2;188;198;203;48;2;233;244;252m╴[38;2;224;237;246;48;2;187;199;205m▆[38;2;190;202;211;48;2;217;230;240m┌[38;2;116;126;139;48;2;179;192;206m╱[38;2;94;112;133;48;2;181;200;224m╱[38;2;175;192;207;48;2;188;206;225m╷[38;2;81;120;173;48;2;142;163;186m▂[38;2;84;122;177;48;2;210;221;226m▆[38;2;65;112;182;48;2;134;153;183m▃[0m[7m[38;2;63;92;127m▝[0m[38;2;55;64;73m▃ [0m
|
||||
[38;2;0;0;0m [38;2;217;217;217m▝[7m[38;2;198;197;199m▂[0m[38;2;114;121;126;48;2;146;163;168m┕[38;2;137;147;159;48;2;169;186;204m┄[38;2;113;124;133;48;2;182;195;205m│[38;2;145;152;158;48;2;199;208;215m╶[38;2;182;172;173;48;2;218;219;220m╵[38;2;254;254;254;48;2;251;236;236m▆[38;2;253;254;254;48;2;222;217;214m▇[38;2;254;254;254;48;2;247;246;245m▇[38;2;254;253;254;48;2;208;206;205m▇[38;2;250;253;252;48;2;227;222;220m▇[38;2;254;254;254;48;2;247;247;245m╴[38;2;241;237;234;48;2;249;247;245m┊[38;2;251;248;246;48;2;247;240;237m╴[38;2;115;137;150;48;2;212;200;199m▁[38;2;74;100;115;48;2;186;188;188m▗[38;2;175;181;182;48;2;235;242;248m▏[38;2;113;119;125;48;2;208;213;221m▏[38;2;172;179;188;48;2;224;233;243m▏[38;2;95;121;137;48;2;170;184;199m▃[38;2;37;64;86;48;2;141;173;199m▂[38;2;111;169;186;48;2;107;128;147m┯[38;2;63;76;88;48;2;152;171;185m▁[38;2;194;207;217;48;2;94;127;142m┛[38;2;101;167;194;48;2;58;102;156m▄[38;2;121;199;226;48;2;68;116;173m▃[38;2;118;206;237;48;2;60;108;167m▃[38;2;112;186;215;48;2;70;118;171m▄[0m[38;2;63;84;91m▋ [0m
|
||||
[38;2;0;0;0m [0m [38;2;54;65;76;48;2;77;117;128m▅[38;2;70;97;113;48;2;181;196;208m▘[38;2;192;197;201;48;2;228;235;238m╵[38;2;247;254;254;48;2;251;254;254m▂[48;2;254;254;254m▄▄▄[38;2;246;254;254;48;2;253;254;254m▆[48;2;252;254;254m▆[48;2;246;254;254m [38;2;254;254;254m▝[38;2;243;250;251;48;2;156;165;174m▇[38;2;188;202;213;48;2;54;75;89m▄[38;2;231;245;250;48;2;222;236;245m╴[38;2;239;247;254;48;2;230;240;248m┈[38;2;228;239;251;48;2;223;235;245m┈[38;2;203;215;221;48;2;49;63;76m▍[38;2;39;56;65;48;2;40;57;73m▖[38;2;50;66;78;48;2;41;58;73m▗[38;2;56;73;88;48;2;43;58;75m▅[38;2;58;76;89;48;2;53;68;85m▇[38;2;58;76;88;48;2;57;74;96m▆[38;2;59;77;86;48;2;61;77;91m╴[38;2;61;76;88;48;2;117;172;196m▇[38;2;55;69;79;48;2;66;117;138m▇[0m[38;2;50;60;68m▅[38;2;49;51;55m▃ [0m
|
||||
[38;2;0;0;0m [7m[38;2;80;85;87m▊[0m[38;2;40;50;59;48;2;151;167;189m▘[38;2;128;138;151;48;2;194;205;215m╻[38;2;155;155;153;48;2;251;252;252m▁[38;2;254;254;254;48;2;227;229;228m┈[48;2;237;238;238m┈[48;2;248;254;254m▃[48;2;246;254;254m▃[38;2;198;201;202;48;2;231;237;237m╷[38;2;118;122;122;48;2;245;253;253m▂[38;2;248;254;254;48;2;240;247;247m┊[38;2;135;138;139;48;2;246;253;253m▁[38;2;116;121;126;48;2;246;254;254m▁[38;2;128;133;136m▁[38;2;191;196;198;48;2;242;250;250m▁[38;2;147;150;153;48;2;200;216;229m▁[38;2;156;172;182;48;2;189;202;213m╴[38;2;191;214;236;48;2;186;209;229m┊[38;2;183;203;212;48;2;205;225;239m╾[38;2;119;131;138;48;2;215;231;241m▝[38;2;104;120;130;48;2;38;55;67m▖[38;2;42;59;73;48;2;52;67;83m▆[38;2;41;57;72;48;2;59;77;90m▆[38;2;39;53;67;48;2;58;77;90m▅[38;2;40;54;65;48;2;61;77;88m▄[38;2;65;74;87;48;2;60;71;81m┊[38;2;66;72;82;48;2;65;74;83m▇[38;2;58;73;81;48;2;65;76;80m▃[38;2;62;73;82;48;2;58;72;81m▘[0m[38;2;49;55;63m▉ [0m
|
||||
[38;2;157;158;160m▃[38;2;144;148;156m▃[38;2;151;166;178m▃[38;2;150;170;189m▄[38;2;172;188;206m▅[38;2;158;174;195m▅[38;2;165;180;203m▅[38;2;150;169;191m▄[38;2;100;107;115;48;2;177;198;225m▘[38;2;181;209;237;48;2;176;201;227m╴[38;2;160;182;202;48;2;55;63;76m▍[38;2;83;87;91;48;2;200;198;195m▖[38;2;240;236;235;48;2;225;223;222m╴[38;2;126;128;128;48;2;250;250;250m▁[38;2;86;88;89;48;2;253;253;253m▁[38;2;46;50;52;48;2;248;251;251m▁[38;2;103;104;106;48;2;251;251;252m▁[38;2;155;156;156;48;2;247;248;248m▁[38;2;110;112;112;48;2;238;239;239m▁[38;2;182;184;186;48;2;104;107;114m▌[38;2;64;68;81;48;2;57;68;78m╴[38;2;61;74;85;48;2;42;55;68m╱[38;2;73;80;87;48;2;229;229;230m▎[38;2;171;170;168;48;2;252;245;244m▁[38;2;89;86;86;48;2;211;202;199m▁[38;2;112;116;123;48;2;182;204;225m▃[38;2;184;210;238;48;2;181;208;235m╴[38;2;181;209;237;48;2;179;205;231m┈[38;2;187;211;232;48;2;181;205;226m┊[38;2;183;205;223;48;2;51;68;81m▆[38;2;181;204;222;48;2;59;75;88m▅[38;2;172;193;213;48;2;35;46;61m▆[38;2;205;225;244;48;2;50;66;79m▄[38;2;190;208;227;48;2;47;63;74m▃[38;2;47;62;73;48;2;67;79;90m┈[0m[7m[38;2;59;72;81m▃[38;2;49;60;69m▂[38;2;42;49;56m▂[0m[38;2;47;52;55m━[38;2;108;108;108m─[38;2;125;125;125m─[0m
|
||||
[7m[38;2;115;121;127m▆[38;2;177;192;211m▆[38;2;177;198;219m▆[38;2;143;160;177m▅[0m[38;2;78;82;85;48;2;193;210;231m▂[38;2;203;226;247;48;2;197;218;239m┊[38;2;163;180;197;48;2;186;206;225m╵[38;2;188;202;217;48;2;87;96;107m▄[0m[38;2;182;191;204m▂[38;2;114;116;118m▁[0m [7m[38;2;48;51;53m▇[38;2;153;152;150m▇[0m [7m[38;2;155;157;159m▆[38;2;166;168;169m▆[38;2;153;156;157m▆[38;2;137;138;138m▆[38;2;147;147;151m▆[38;2;55;61;70m▆[38;2;67;72;80m▆[38;2;106;110;110m▆[0m [38;2;0;0;0m [0m [7m[38;2;132;139;143m▍[0m[38;2;164;171;174;48;2;184;197;206m╸[38;2;194;209;220;48;2;117;131;141m▇[38;2;145;151;159;48;2;184;199;212m▁[38;2;181;192;202;48;2;191;210;227m▁[38;2;199;221;240;48;2;196;219;236m┊[38;2;80;86;87;48;2;196;218;236m▁[0m[7m[38;2;191;209;227m▃[0m[38;2;141;151;159m▘ [0m
|
||||
[38;2;0;0;0m [0m [7m[38;2;149;160;170m▇[38;2;184;197;208m▅[38;2;167;175;184m▅[38;2;197;206;218m▇[38;2;117;119;120m▇[0m[38;2;4;4;4m [0m [7m[38;2;121;129;133m▇[38;2;119;120;121m▇[38;2;128;131;135m▇[38;2;137;140;143m▇[38;2;80;83;85m▇[0m [38;2;0;0;0m [0m
|
||||
[38;2;0;0;0m [0m
|
||||
[?25h
|
||||
BIN
config/fastfetch/logo_ros/ros.png
Normal file
|
After Width: | Height: | Size: 226 KiB |
2
config/fish/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
fish_variables
|
||||
fish_plugins
|
||||
11
config/fish/apply-color-kvantum
Executable file
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
path=$(dirname "$(readlink -f "$0")")
|
||||
. "$path"/../../utils/apply-color-helper
|
||||
|
||||
kvantummanager --set catppuccin-mocha-"$colorName" || {
|
||||
log_error "Failed to set kvantum theme to catppuccin-mocha-${colorName}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
log_success "kvantum"
|
||||
60
config/fish/apply-color-omp
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/bin/bash
|
||||
|
||||
path=$(dirname "$(readlink -f "$0")")
|
||||
. "$path"/../../utils/apply-color-helper
|
||||
|
||||
file="$path"/../posh_theme.omp.json
|
||||
|
||||
targetTypes=("os" "session" "status")
|
||||
|
||||
if ! python3 - "$file" "$colorHex" "${targetTypes[@]}"; then {
|
||||
log_error "Failed to edit ${file}"
|
||||
exit 1
|
||||
} fi <<EOF
|
||||
import json
|
||||
import sys
|
||||
|
||||
data = None
|
||||
file = sys.argv[1]
|
||||
colorHex = sys.argv[2]
|
||||
targetTypes = sys.argv[3:]
|
||||
|
||||
with open(file, "r") as f:
|
||||
data = json.load(f)
|
||||
|
||||
def processSegments(segments):
|
||||
for segment in segments:
|
||||
if "type" in segment and segment["type"] in targetTypes:
|
||||
if "foreground" in segment:
|
||||
segment["foreground"] = f"#{colorHex}"
|
||||
|
||||
def processTransientPrompt(transientPrompt):
|
||||
if "foreground" in transientPrompt:
|
||||
transientPrompt["foreground"] = f"#{colorHex}"
|
||||
|
||||
def process(obj):
|
||||
if isinstance(obj, dict):
|
||||
for k, v in obj.items():
|
||||
if k == "segments" and isinstance(v, list):
|
||||
processSegments(v)
|
||||
elif k == "transient_prompt" and isinstance(v, dict):
|
||||
processTransientPrompt(v)
|
||||
else:
|
||||
process(v)
|
||||
elif isinstance(obj, list):
|
||||
for item in obj:
|
||||
process(item)
|
||||
|
||||
process(data)
|
||||
|
||||
if data is not None:
|
||||
with open(file, "w") as f:
|
||||
json.dump(data, f, indent=4)
|
||||
EOF
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
log_error "Failed to edit ${file}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "oh-my-posh"
|
||||
22
config/fish/config.fish
Executable file
@@ -0,0 +1,22 @@
|
||||
if not status is-interactive
|
||||
return
|
||||
end
|
||||
|
||||
# no greeting
|
||||
set fish_greeting
|
||||
|
||||
if test -d $HOME/.config/fish/prev.d
|
||||
for file in $HOME/.config/fish/prev.d/*.fish
|
||||
if test -f $file
|
||||
source $file
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if test -d $HOME/.config/fish/post.d
|
||||
for file in $HOME/.config/fish/post.d/*.fish
|
||||
if test -f $file
|
||||
source $file
|
||||
end
|
||||
end
|
||||
end
|
||||
137
config/fish/functions/__bass.py
Executable file
@@ -0,0 +1,137 @@
|
||||
from __future__ import print_function
|
||||
|
||||
import json
|
||||
import os
|
||||
import signal
|
||||
import subprocess
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
|
||||
BASH = 'bash'
|
||||
|
||||
FISH_READONLY = [
|
||||
'PWD', 'SHLVL', 'history', 'pipestatus', 'status', 'version',
|
||||
'FISH_VERSION', 'fish_pid', 'hostname', '_', 'fish_private_mode'
|
||||
]
|
||||
|
||||
IGNORED = [
|
||||
'PS1', 'XPC_SERVICE_NAME'
|
||||
]
|
||||
|
||||
|
||||
def ignored(name):
|
||||
if name == 'PWD': # this is read only, but has special handling
|
||||
return False
|
||||
# ignore other read only variables
|
||||
if name in FISH_READONLY:
|
||||
return True
|
||||
if name in IGNORED or name.startswith("BASH_FUNC"):
|
||||
return True
|
||||
if name.startswith('%'):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def escape(string):
|
||||
# use json.dumps to reliably escape quotes and backslashes
|
||||
return json.dumps(string).replace(r'$', r'\$')
|
||||
|
||||
|
||||
def escape_identifier(word):
|
||||
return escape(word.replace('?', '\\?'))
|
||||
|
||||
|
||||
def comment(string):
|
||||
return '\n'.join(['# ' + line for line in string.split('\n')])
|
||||
|
||||
|
||||
def gen_script():
|
||||
# Use the following instead of /usr/bin/env to read environment so we can
|
||||
# deal with multi-line environment variables (and other odd cases).
|
||||
env_reader = "%s -c 'import os,json; print(json.dumps({k:v for k,v in os.environ.items()}))'" % (sys.executable)
|
||||
args = [BASH, '-c', env_reader]
|
||||
output = subprocess.check_output(args, universal_newlines=True)
|
||||
old_env = output.strip()
|
||||
|
||||
pipe_r, pipe_w = os.pipe()
|
||||
if sys.version_info >= (3, 4):
|
||||
os.set_inheritable(pipe_w, True)
|
||||
command = 'eval $1 && ({}; alias) >&{}'.format(
|
||||
env_reader,
|
||||
pipe_w
|
||||
)
|
||||
args = [BASH, '-c', command, 'bass', ' '.join(sys.argv[1:])]
|
||||
p = subprocess.Popen(args, universal_newlines=True, close_fds=False)
|
||||
os.close(pipe_w)
|
||||
with os.fdopen(pipe_r) as f:
|
||||
new_env = f.readline()
|
||||
alias_str = f.read()
|
||||
if p.wait() != 0:
|
||||
raise subprocess.CalledProcessError(
|
||||
returncode=p.returncode,
|
||||
cmd=' '.join(sys.argv[1:]),
|
||||
output=new_env + alias_str
|
||||
)
|
||||
new_env = new_env.strip()
|
||||
|
||||
old_env = json.loads(old_env)
|
||||
new_env = json.loads(new_env)
|
||||
|
||||
script_lines = []
|
||||
|
||||
for k, v in new_env.items():
|
||||
if ignored(k):
|
||||
continue
|
||||
v1 = old_env.get(k)
|
||||
if not v1:
|
||||
script_lines.append(comment('adding %s=%s' % (k, v)))
|
||||
elif v1 != v:
|
||||
script_lines.append(comment('updating %s=%s -> %s' % (k, v1, v)))
|
||||
# process special variables
|
||||
if k == 'PWD':
|
||||
script_lines.append('cd %s' % escape(v))
|
||||
continue
|
||||
else:
|
||||
continue
|
||||
if k == 'PATH':
|
||||
value = ' '.join([escape(directory)
|
||||
for directory in v.split(':')])
|
||||
else:
|
||||
value = escape(v)
|
||||
script_lines.append('set -g -x %s %s' % (k, value))
|
||||
|
||||
for var in set(old_env.keys()) - set(new_env.keys()):
|
||||
script_lines.append(comment('removing %s' % var))
|
||||
script_lines.append('set -e %s' % var)
|
||||
|
||||
script = '\n'.join(script_lines)
|
||||
|
||||
alias_lines = []
|
||||
for line in alias_str.splitlines():
|
||||
_, rest = line.split(None, 1)
|
||||
k, v = rest.split("=", 1)
|
||||
alias_lines.append("alias " + escape_identifier(k) + "=" + v)
|
||||
alias = '\n'.join(alias_lines)
|
||||
|
||||
return script + '\n' + alias
|
||||
|
||||
|
||||
script_file = os.fdopen(3, 'w')
|
||||
|
||||
if not sys.argv[1:]:
|
||||
print('__bass_usage', file=script_file, end='')
|
||||
sys.exit(0)
|
||||
|
||||
try:
|
||||
script = gen_script()
|
||||
except subprocess.CalledProcessError as e:
|
||||
sys.exit(e.returncode)
|
||||
except Exception:
|
||||
print('Bass internal error!', file=sys.stderr)
|
||||
raise # traceback will output to stderr
|
||||
except KeyboardInterrupt:
|
||||
signal.signal(signal.SIGINT, signal.SIG_DFL)
|
||||
os.kill(os.getpid(), signal.SIGINT)
|
||||
else:
|
||||
script_file.write(script)
|
||||
29
config/fish/functions/bass.fish
Executable file
@@ -0,0 +1,29 @@
|
||||
function bass
|
||||
set -l bash_args $argv
|
||||
set -l bass_debug
|
||||
if test "$bash_args[1]_" = '-d_'
|
||||
set bass_debug true
|
||||
set -e bash_args[1]
|
||||
end
|
||||
|
||||
set -l script_file (mktemp)
|
||||
if command -v python3 >/dev/null 2>&1
|
||||
command python3 -sS (dirname (status -f))/__bass.py $bash_args 3>$script_file
|
||||
else
|
||||
command python -sS (dirname (status -f))/__bass.py $bash_args 3>$script_file
|
||||
end
|
||||
set -l bass_status $status
|
||||
if test $bass_status -ne 0
|
||||
return $bass_status
|
||||
end
|
||||
|
||||
if test -n "$bass_debug"
|
||||
cat $script_file
|
||||
end
|
||||
source $script_file
|
||||
command rm $script_file
|
||||
end
|
||||
|
||||
function __bass_usage
|
||||
echo "Usage: bass [-d] <bash-command>"
|
||||
end
|
||||
5
config/fish/post.d/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
*
|
||||
!.gitignore
|
||||
!fetch.fish
|
||||
!fetch.fish.template
|
||||
!sshs.fish
|
||||
38
config/fish/post.d/fetch.fish
Normal file
@@ -0,0 +1,38 @@
|
||||
if not set -q fetch_logo_type
|
||||
set -g fetch_logo_type "auto"
|
||||
end
|
||||
|
||||
if not set -q fetch_color
|
||||
set -g fetch_color "#89b4fa"
|
||||
end
|
||||
|
||||
if test "$fetch_logo_type" = "symbols"
|
||||
set -g fetch_args "--logo-type raw --logo-width 42 --logo \"$HOME/.config/fastfetch/logo_ros/42x.symbols\" --color \"$fetch_color\""
|
||||
set -g fetch_args_brief "--logo-type raw --logo-width 28 --logo \"$HOME/.config/fastfetch/logo_ros/28x.symbols\" --color \"$fetch_color\""
|
||||
else if test "$fetch_logo_type" = "logo"
|
||||
set -g fetch_args "--logo-type builtin"
|
||||
set -g fetch_args_brief "--logo-type small"
|
||||
else if test "$fetch_logo_type" = "sixel"
|
||||
set -g fetch_args "--logo-type raw --logo-width 42 --logo \"$HOME/.config/fastfetch/logo_ros/42x.sixel\" --color \"$fetch_color\""
|
||||
set -g fetch_args_brief "--logo-type raw --logo-width 28 --logo \"$HOME/.config/fastfetch/logo_ros/28x.sixel\" --color \"$fetch_color\""
|
||||
else # "kitty" or "auto" and others
|
||||
set -g fetch_args "--logo-type $fetch_logo_type --logo-width 42 --logo \"$HOME/.config/fastfetch/logo_ros/ros.png\" --color \"$fetch_color\""
|
||||
set -g fetch_args_brief "--logo-type $fetch_logo_type --logo-width 28 --logo \"$HOME/.config/fastfetch/logo_ros/ros.png\" --color \"$fetch_color\""
|
||||
end
|
||||
|
||||
if type -q fastfetch
|
||||
alias ff="fastfetch -c $HOME/.config/fastfetch/config.jsonc $fetch_args"
|
||||
|
||||
if test -f "$HOME/.config/fastfetch/brief.jsonc"
|
||||
alias ff-brief="fastfetch -c $HOME/.config/fastfetch/brief.jsonc $fetch_args_brief"
|
||||
else
|
||||
alias ff-brief=ff
|
||||
end
|
||||
end
|
||||
|
||||
# add 'set -g no_fetch' somewhere other than post.d to disable fetching
|
||||
if not set -q no_fetch
|
||||
if type -q ff-brief
|
||||
ff-brief
|
||||
end
|
||||
end
|
||||
14
config/fish/post.d/sshs.fish
Normal file
@@ -0,0 +1,14 @@
|
||||
# ssh with encrypted private keys
|
||||
# $ssh_keys should be set in advance or left empty to use default keys
|
||||
if type -q ssh
|
||||
bass $(ssh-init) > /dev/null 2>&1
|
||||
|
||||
# only need to input passphrase once per session
|
||||
function sshs
|
||||
# test if keys are added to ssh-agent
|
||||
if not ssh-add -l > /dev/null 2>&1
|
||||
ssh-add $ssh_keys
|
||||
end
|
||||
ssh $argv
|
||||
end
|
||||
end
|
||||
6
config/fish/prev.d/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
*
|
||||
!.gitignore
|
||||
!prompt.fish
|
||||
!theme.fish
|
||||
!alias.fish
|
||||
!env.fish
|
||||
54
config/fish/prev.d/alias.fish
Normal file
@@ -0,0 +1,54 @@
|
||||
# fzf
|
||||
if type -q fzf
|
||||
fzf --fish | source
|
||||
|
||||
if type -q wl-copy
|
||||
function fzc
|
||||
fzf $argv | string collect | wl-copy
|
||||
end
|
||||
end
|
||||
|
||||
if type -q bat
|
||||
alias fz="fzf --preview 'bat --style=numbers --color=always {}'"
|
||||
end
|
||||
end
|
||||
|
||||
# cd
|
||||
if type -q zoxide
|
||||
zoxide init fish | source
|
||||
alias cd=z
|
||||
end
|
||||
|
||||
# rm
|
||||
if type -q trash
|
||||
alias rm="echo \"use 'trash' instead :)\" && sh -c \"exit 42\" && echo why do you see this line :O"
|
||||
end
|
||||
|
||||
# ls
|
||||
if type -q eza
|
||||
alias ll="eza -lh --group-directories-first --icons=auto"
|
||||
alias la="eza -lh --group-directories-first --icons=auto --all"
|
||||
alias lt="eza --tree --level=2 --long --icons --git"
|
||||
else
|
||||
alias ll="ls -lh --group-directories-first --color=auto"
|
||||
alias la="ls -lah --group-directories-first --color=auto"
|
||||
end
|
||||
|
||||
# directories
|
||||
alias ..='cd ..'
|
||||
alias ...='cd ../..'
|
||||
alias ....='cd ../../..'
|
||||
|
||||
# grep
|
||||
alias grep="grep --color=auto"
|
||||
|
||||
# nvim
|
||||
if type -q nvim
|
||||
set -x -g EDITOR nvim
|
||||
set -x -g VISUAL nvim
|
||||
end
|
||||
|
||||
# others
|
||||
if type -q tty-clock
|
||||
alias clock="tty-clock -c -C 4"
|
||||
end
|
||||
11
config/fish/prev.d/env.fish
Normal file
@@ -0,0 +1,11 @@
|
||||
# PATH
|
||||
fish_add_path $HOME/.local/scripts
|
||||
fish_add_path $HOME/.local/bin
|
||||
fish_add_path $HOME/.cargo/bin
|
||||
fish_add_path $HOME/go/bin
|
||||
|
||||
# man
|
||||
if type -q bat
|
||||
set -x -g MANPAGER "sh -c 'col -bx | bat -l man -p'"
|
||||
set -x -g MANROFFOPT -c
|
||||
end
|
||||
12
config/fish/prev.d/prompt.fish
Normal file
@@ -0,0 +1,12 @@
|
||||
function fish_prompt -d "Write out the prompt"
|
||||
# This shows up as USER@HOST /home/user/ >, with the directory colored
|
||||
# $USER and $hostname are set by fish, so you can just use them
|
||||
# instead of using `whoami` and `hostname`
|
||||
printf '%s@%s %s%s%s > ' $USER $hostname \
|
||||
(set_color $fish_color_cwd) (prompt_pwd) (set_color normal)
|
||||
end
|
||||
|
||||
# oh-my-posh
|
||||
if test -f $HOME/.config/posh_theme.omp.json; and type -q oh-my-posh
|
||||
oh-my-posh init fish --config $HOME/.config/posh_theme.omp.json | source
|
||||
end
|
||||
6
config/fish/prev.d/theme.fish
Normal file
@@ -0,0 +1,6 @@
|
||||
set -l theme 'Catppuccin Mocha'
|
||||
|
||||
if not set -q fish_current_theme; or not string match -q "$theme" "$fish_current_theme"
|
||||
set -U fish_current_theme "$theme"
|
||||
fish_config theme save "$theme"
|
||||
end
|
||||
30
config/fish/themes/Catppuccin Frappe.theme
Normal file
@@ -0,0 +1,30 @@
|
||||
# name: 'Catppuccin Frappé'
|
||||
# url: 'https://github.com/catppuccin/fish'
|
||||
# preferred_background: 303446
|
||||
|
||||
fish_color_normal c6d0f5
|
||||
fish_color_command 8caaee
|
||||
fish_color_param eebebe
|
||||
fish_color_keyword e78284
|
||||
fish_color_quote a6d189
|
||||
fish_color_redirection f4b8e4
|
||||
fish_color_end ef9f76
|
||||
fish_color_comment 838ba7
|
||||
fish_color_error e78284
|
||||
fish_color_gray 737994
|
||||
fish_color_selection --background=414559
|
||||
fish_color_search_match --background=414559
|
||||
fish_color_option a6d189
|
||||
fish_color_operator f4b8e4
|
||||
fish_color_escape ea999c
|
||||
fish_color_autosuggestion 737994
|
||||
fish_color_cancel e78284
|
||||
fish_color_cwd e5c890
|
||||
fish_color_user 81c8be
|
||||
fish_color_host 8caaee
|
||||
fish_color_host_remote a6d189
|
||||
fish_color_status e78284
|
||||
fish_pager_color_progress 737994
|
||||
fish_pager_color_prefix f4b8e4
|
||||
fish_pager_color_completion c6d0f5
|
||||
fish_pager_color_description 737994
|
||||
30
config/fish/themes/Catppuccin Latte.theme
Normal file
@@ -0,0 +1,30 @@
|
||||
# name: 'Catppuccin Latte'
|
||||
# url: 'https://github.com/catppuccin/fish'
|
||||
# preferred_background: eff1f5
|
||||
|
||||
fish_color_normal 4c4f69
|
||||
fish_color_command 1e66f5
|
||||
fish_color_param dd7878
|
||||
fish_color_keyword d20f39
|
||||
fish_color_quote 40a02b
|
||||
fish_color_redirection ea76cb
|
||||
fish_color_end fe640b
|
||||
fish_color_comment 8c8fa1
|
||||
fish_color_error d20f39
|
||||
fish_color_gray 9ca0b0
|
||||
fish_color_selection --background=ccd0da
|
||||
fish_color_search_match --background=ccd0da
|
||||
fish_color_option 40a02b
|
||||
fish_color_operator ea76cb
|
||||
fish_color_escape e64553
|
||||
fish_color_autosuggestion 9ca0b0
|
||||
fish_color_cancel d20f39
|
||||
fish_color_cwd df8e1d
|
||||
fish_color_user 179299
|
||||
fish_color_host 1e66f5
|
||||
fish_color_host_remote 40a02b
|
||||
fish_color_status d20f39
|
||||
fish_pager_color_progress 9ca0b0
|
||||
fish_pager_color_prefix ea76cb
|
||||
fish_pager_color_completion 4c4f69
|
||||
fish_pager_color_description 9ca0b0
|
||||
30
config/fish/themes/Catppuccin Macchiato.theme
Normal file
@@ -0,0 +1,30 @@
|
||||
# name: 'Catppuccin Macchiato'
|
||||
# url: 'https://github.com/catppuccin/fish'
|
||||
# preferred_background: 24273a
|
||||
|
||||
fish_color_normal cad3f5
|
||||
fish_color_command 8aadf4
|
||||
fish_color_param f0c6c6
|
||||
fish_color_keyword ed8796
|
||||
fish_color_quote a6da95
|
||||
fish_color_redirection f5bde6
|
||||
fish_color_end f5a97f
|
||||
fish_color_comment 8087a2
|
||||
fish_color_error ed8796
|
||||
fish_color_gray 6e738d
|
||||
fish_color_selection --background=363a4f
|
||||
fish_color_search_match --background=363a4f
|
||||
fish_color_option a6da95
|
||||
fish_color_operator f5bde6
|
||||
fish_color_escape ee99a0
|
||||
fish_color_autosuggestion 6e738d
|
||||
fish_color_cancel ed8796
|
||||
fish_color_cwd eed49f
|
||||
fish_color_user 8bd5ca
|
||||
fish_color_host 8aadf4
|
||||
fish_color_host_remote a6da95
|
||||
fish_color_status ed8796
|
||||
fish_pager_color_progress 6e738d
|
||||
fish_pager_color_prefix f5bde6
|
||||
fish_pager_color_completion cad3f5
|
||||
fish_pager_color_description 6e738d
|
||||
30
config/fish/themes/Catppuccin Mocha.theme
Normal file
@@ -0,0 +1,30 @@
|
||||
# name: 'Catppuccin Mocha'
|
||||
# url: 'https://github.com/catppuccin/fish'
|
||||
# preferred_background: 1e1e2e
|
||||
|
||||
fish_color_normal cdd6f4
|
||||
fish_color_command 89b4fa
|
||||
fish_color_param f2cdcd
|
||||
fish_color_keyword f38ba8
|
||||
fish_color_quote a6e3a1
|
||||
fish_color_redirection f5c2e7
|
||||
fish_color_end fab387
|
||||
fish_color_comment 7f849c
|
||||
fish_color_error f38ba8
|
||||
fish_color_gray 6c7086
|
||||
fish_color_selection --background=313244
|
||||
fish_color_search_match --background=313244
|
||||
fish_color_option a6e3a1
|
||||
fish_color_operator f5c2e7
|
||||
fish_color_escape eba0ac
|
||||
fish_color_autosuggestion 6c7086
|
||||
fish_color_cancel f38ba8
|
||||
fish_color_cwd f9e2af
|
||||
fish_color_user 94e2d5
|
||||
fish_color_host 89b4fa
|
||||
fish_color_host_remote a6e3a1
|
||||
fish_color_status f38ba8
|
||||
fish_pager_color_progress 6c7086
|
||||
fish_pager_color_prefix f5c2e7
|
||||
fish_pager_color_completion cdd6f4
|
||||
fish_pager_color_description 6c7086
|
||||
22
config/fuzzel/apply-color
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
|
||||
path=$(dirname "$(readlink -f "$0")")
|
||||
. "$path"/../../utils/apply-color-helper
|
||||
|
||||
file="$path"/fuzzel.ini
|
||||
entries="match selection-match border"
|
||||
|
||||
if pgrep -x "fuzzel" -u "$USER" > /dev/null; then
|
||||
pkill -x fuzzel || log_error "Failed to kill fuzzel process"
|
||||
# and move on
|
||||
fi
|
||||
|
||||
for entry in $entries; do
|
||||
# Not very sure if alpha channels are neccessary here, but just in case
|
||||
sed -i -E "s/^($entry\s*=\s*)([0-9A-Fa-f]{6})([0-9A-Fa-f]{0,2})/\1${colorHex}\3/" "$file" || {
|
||||
log_error "Failed to edit ${file} for entry ${entry}"
|
||||
exit 1
|
||||
}
|
||||
done
|
||||
|
||||
log_success "fuzzel"
|
||||
24
config/fuzzel/fuzzel.ini
Normal file
@@ -0,0 +1,24 @@
|
||||
terminal=kitty -e
|
||||
prompt=">> "
|
||||
layer=overlay
|
||||
|
||||
[colors]
|
||||
background=1e1e2edd
|
||||
text=cdd6f4ff
|
||||
prompt=bac2deff
|
||||
placeholder=7f849cff
|
||||
input=cdd6f4ff
|
||||
match=89b4faff
|
||||
selection=585b70ff
|
||||
selection-text=cdd6f4ff
|
||||
selection-match=89b4faff
|
||||
counter=7f849cff
|
||||
border=89b4faff
|
||||
|
||||
|
||||
[border]
|
||||
radius=17
|
||||
width=2
|
||||
|
||||
[dmenu]
|
||||
exit-immediately-if-empty=yes
|
||||
1
config/ghostty-niri/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
shaders
|
||||
21
config/ghostty-niri/config
Normal file
@@ -0,0 +1,21 @@
|
||||
theme = Catppuccin Mocha
|
||||
|
||||
background-opacity = 0.95
|
||||
background-blur = true
|
||||
|
||||
window-padding-x = 10
|
||||
window-padding-y = 10
|
||||
|
||||
keybind = ctrl+shift+r=reload_config
|
||||
|
||||
command = exec fish
|
||||
|
||||
confirm-close-surface = false
|
||||
|
||||
font-family = Maple Mono NF CN
|
||||
font-size = 12
|
||||
|
||||
cursor-style = bar
|
||||
adjust-cursor-thickness = 3
|
||||
|
||||
custom-shader = cursor-shaders/cursor-smear.glsl
|
||||
120
config/ghostty-niri/cursor-shaders/cursor-smear.glsl
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
// https://github.com/KroneCorylus/ghostty-shader-playground/blob/main/shaders/cursor_smear.glsl
|
||||
|
||||
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 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.));
|
||||
}
|
||||
float ease(float x) {
|
||||
return pow(1.0 - x, 3.0);
|
||||
}
|
||||
vec4 saturate(vec4 color, float factor) {
|
||||
float gray = dot(color, vec4(0.299, 0.587, 0.114, 0.)); // luminance
|
||||
return mix(vec4(gray), color, factor);
|
||||
}
|
||||
|
||||
vec4 TRAIL_COLOR = iCurrentCursorColor;
|
||||
const float OPACITY = 0.6;
|
||||
const float DURATION = 0.3; //IN SECONDS
|
||||
|
||||
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);
|
||||
|
||||
float sdfCurrentCursor = getSdfRectangle(vu, currentCursor.xy - (currentCursor.zw * offsetFactor), currentCursor.zw * 0.5);
|
||||
float sdfTrail = getSdfParallelogram(vu, v0, v1, v2, v3);
|
||||
|
||||
float progress = clamp((iTime - iTimeCursorChange) / DURATION, 0.0, 1.0);
|
||||
float easedProgress = ease(progress);
|
||||
// Distance between cursors determine the total length of the parallelogram;
|
||||
vec2 centerCC = getRectangleCenter(currentCursor);
|
||||
vec2 centerCP = getRectangleCenter(previousCursor);
|
||||
float lineLength = distance(centerCC, centerCP);
|
||||
|
||||
vec4 newColor = vec4(fragColor);
|
||||
|
||||
vec4 trail = TRAIL_COLOR;
|
||||
trail = saturate(trail, 2.5);
|
||||
// Draw trail
|
||||
newColor = mix(newColor, trail, antialising(sdfTrail));
|
||||
// Draw current cursor
|
||||
newColor = mix(newColor, trail, antialising(sdfCurrentCursor));
|
||||
newColor = mix(newColor, fragColor, step(sdfCurrentCursor, 0.));
|
||||
// newColor = mix(fragColor, newColor, OPACITY);
|
||||
fragColor = mix(fragColor, newColor, step(sdfCurrentCursor, easedProgress * lineLength));
|
||||
}
|
||||
1
config/ghostty/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
shaders
|
||||
21
config/ghostty/config
Normal file
@@ -0,0 +1,21 @@
|
||||
theme = Catppuccin Mocha
|
||||
|
||||
background-opacity = 0.75
|
||||
background-blur = true
|
||||
|
||||
window-padding-x = 10
|
||||
window-padding-y = 10
|
||||
|
||||
keybind = ctrl+shift+r=reload_config
|
||||
|
||||
command = exec fish
|
||||
|
||||
confirm-close-surface = false
|
||||
|
||||
font-family = Maple Mono NF CN
|
||||
font-size = 12
|
||||
|
||||
cursor-style = bar
|
||||
adjust-cursor-thickness = 3
|
||||
|
||||
custom-shader = cursor-shaders/cursor-smear.glsl
|
||||
120
config/ghostty/cursor-shaders/cursor-smear.glsl
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
// https://github.com/KroneCorylus/ghostty-shader-playground/blob/main/shaders/cursor_smear.glsl
|
||||
|
||||
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 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.));
|
||||
}
|
||||
float ease(float x) {
|
||||
return pow(1.0 - x, 3.0);
|
||||
}
|
||||
vec4 saturate(vec4 color, float factor) {
|
||||
float gray = dot(color, vec4(0.299, 0.587, 0.114, 0.)); // luminance
|
||||
return mix(vec4(gray), color, factor);
|
||||
}
|
||||
|
||||
vec4 TRAIL_COLOR = iCurrentCursorColor;
|
||||
const float OPACITY = 0.6;
|
||||
const float DURATION = 0.3; //IN SECONDS
|
||||
|
||||
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);
|
||||
|
||||
float sdfCurrentCursor = getSdfRectangle(vu, currentCursor.xy - (currentCursor.zw * offsetFactor), currentCursor.zw * 0.5);
|
||||
float sdfTrail = getSdfParallelogram(vu, v0, v1, v2, v3);
|
||||
|
||||
float progress = clamp((iTime - iTimeCursorChange) / DURATION, 0.0, 1.0);
|
||||
float easedProgress = ease(progress);
|
||||
// Distance between cursors determine the total length of the parallelogram;
|
||||
vec2 centerCC = getRectangleCenter(currentCursor);
|
||||
vec2 centerCP = getRectangleCenter(previousCursor);
|
||||
float lineLength = distance(centerCC, centerCP);
|
||||
|
||||
vec4 newColor = vec4(fragColor);
|
||||
|
||||
vec4 trail = TRAIL_COLOR;
|
||||
trail = saturate(trail, 2.5);
|
||||
// Draw trail
|
||||
newColor = mix(newColor, trail, antialising(sdfTrail));
|
||||
// Draw current cursor
|
||||
newColor = mix(newColor, trail, antialising(sdfCurrentCursor));
|
||||
newColor = mix(newColor, fragColor, step(sdfCurrentCursor, 0.));
|
||||
// newColor = mix(fragColor, newColor, OPACITY);
|
||||
fragColor = mix(fragColor, newColor, step(sdfCurrentCursor, easedProgress * lineLength));
|
||||
}
|
||||
2
config/hypr/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
shaders
|
||||
wallpaper*
|
||||
25
config/hypr/apply-color
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
path=$(dirname "$(readlink -f "$0")")
|
||||
. "$path"/../../utils/apply-color-helper
|
||||
|
||||
file="$path"/hyprland/colors.conf
|
||||
|
||||
sed -i -E "s/^(\s*col\.active_border\s*=\s*rgba\()([0-9A-Fa-f]{6})([0-9A-Fa-f]{2}\))$/\1${colorHex}\3/" "$file" || {
|
||||
log_error "Failed to edit ${file} for entry col.active_border"
|
||||
exit 1
|
||||
}
|
||||
|
||||
sed -i -E "s/^(\s*col\.inactive_border\s*=\s*rgba\()([0-9A-Fa-f]{6})([0-9A-Fa-f]{2}\))$/\1${colorHex}\3/" "$file" || {
|
||||
log_error "Failed to edit ${file} for entry col.active_border"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if pgrep -x "hyprland" -u "$USER" > /dev/null; then
|
||||
hyprctl reload || {
|
||||
log_error "Failed to reload Hyprland"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
log_success "hyprland"
|
||||
23
config/hypr/hypridle.conf
Executable file
@@ -0,0 +1,23 @@
|
||||
$lock_cmd = pidof hyprlock || hyprlock
|
||||
$suspend_cmd = pidof steam || systemctl suspend || loginctl suspend # fuck nvidia
|
||||
|
||||
general {
|
||||
lock_cmd = $lock_cmd
|
||||
before_sleep_cmd = loginctl lock-session
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 180 # 3mins
|
||||
on-timeout = loginctl lock-session
|
||||
}
|
||||
|
||||
listener {
|
||||
timeout = 300 # 5mins
|
||||
on-timeout = hyprctl dispatch dpms off || niri msg action power-off-monitors
|
||||
on-resume = hyprctl dispatch dpms on || true
|
||||
}
|
||||
|
||||
#listener {
|
||||
# timeout = 540 # 9mins
|
||||
# on-timeout = $suspend_cmd
|
||||
#}
|
||||
7
config/hypr/hyprland.conf
Executable file
@@ -0,0 +1,7 @@
|
||||
source=~/.config/hypr/hyprland/env.conf
|
||||
source=~/.config/hypr/hyprland/execs.conf
|
||||
source=~/.config/hypr/hyprland/general.conf
|
||||
source=~/.config/hypr/hyprland/rules.conf
|
||||
source=~/.config/hypr/hyprland/colors.conf
|
||||
source=~/.config/hypr/hyprland/keybinds.conf
|
||||
source=~/.config/hypr/hyprland/monitors.conf
|
||||
12
config/hypr/hyprland/colors.conf
Executable file
@@ -0,0 +1,12 @@
|
||||
# exec = export SLURP_ARGS='-d -c BFE9F8BB -b 214C5844 -s 00000000'
|
||||
|
||||
general {
|
||||
col.active_border = rgba(89b4faff)
|
||||
col.inactive_border = rgba(89b4fa80)
|
||||
}
|
||||
|
||||
misc {
|
||||
background_color = rgba(181825FF)
|
||||
}
|
||||
|
||||
windowrulev2 = bordercolor rgba(00DCE3AA) rgba(00DCE377),pinned:1
|
||||
28
config/hypr/hyprland/env.conf
Executable file
@@ -0,0 +1,28 @@
|
||||
# ######### Input method ##########
|
||||
# See https://fcitx-im.org/wiki/Using_Fcitx_5_on_Wayland
|
||||
env = QT_IM_MODULE, fcitx
|
||||
env = XMODIFIERS, @im=fcitx
|
||||
# env = GTK_IM_MODULE, fcitx
|
||||
env = SDL_IM_MODULE, fcitx
|
||||
env = GLFW_IM_MODULE, ibus
|
||||
env = INPUT_METHOD, fcitx
|
||||
|
||||
# ############ Themes #############
|
||||
env = QT_QPA_PLATFORM, wayland
|
||||
env = QT_QPA_PLATFORMTHEME, kde
|
||||
env = QT_STYLE_OVERRIDE, kvantum
|
||||
# env = WLR_NO_HARDWARE_CURSORS, 1
|
||||
|
||||
# ######## Screen tearing #########
|
||||
# env = WLR_DRM_NO_ATOMIC, 1
|
||||
|
||||
# ############ nvidia #############
|
||||
env = LIBVA_DRIVER_NAME,nvidia
|
||||
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
|
||||
env = NVD_BACKEND,direct
|
||||
#env = AQ_DRM_DEVICES,$HYPR_AQ_DRM_DEVICES
|
||||
|
||||
# ############ others #############
|
||||
env = XCURSOR_SIZE,24
|
||||
env = HYPRCURSOR_SIZE,24
|
||||
env = ELECTRON_OZONE_PLATFORM_HINT,auto
|
||||
48
config/hypr/hyprland/execs.conf
Executable file
@@ -0,0 +1,48 @@
|
||||
# Switch configs
|
||||
exec-once = config-switch Hyprland
|
||||
|
||||
# Bar, wallpaper
|
||||
exec-once = waybar
|
||||
exec-once = wallpaper-daemon
|
||||
|
||||
# Input method
|
||||
exec-once = fcitx5
|
||||
|
||||
# Core components (authentication, lock screen, notification daemon)
|
||||
exec-once = gnome-keyring-daemon --start --components=secrets
|
||||
# exec-once = hyprpolkitagent
|
||||
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||
exec-once = hypridle
|
||||
exec-once = dbus-update-activation-environment --all
|
||||
exec-once = sleep 1 && dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP # Some fix idk
|
||||
exec-once = hyprpm reload
|
||||
exec-once = mako
|
||||
exec-once = nm-applet
|
||||
exec-once = blueman-applet
|
||||
exec-once = eww daemon
|
||||
|
||||
# Audio
|
||||
# exec-once = easyeffects --gapplication-service
|
||||
|
||||
# Clipboard: history
|
||||
# exec-once = wl-paste --watch cliphist store &
|
||||
exec-once = wl-paste --type text --watch cliphist store
|
||||
exec-once = wl-paste --type image --watch cliphist store
|
||||
|
||||
# Cursor
|
||||
exec-once = hyprctl setcursor Bibata-Modern-Ice 24
|
||||
|
||||
# Plugins
|
||||
exec-once = hyprctl plugin load "/usr/lib/libhyprexpo.so"
|
||||
|
||||
# dock
|
||||
# exec-once = nwg-dock-hyprland -d -i 32 -c "fuzzel" -ico "$HOME/.config/nwg-dock-hyprland/archlinux.png"
|
||||
|
||||
# Logitech Mouse
|
||||
exec-once = solaar -w hide
|
||||
|
||||
# Applications associations
|
||||
exec-once = kbuildsycoca6
|
||||
|
||||
# Sunshine
|
||||
exec-once = sunshine
|
||||
186
config/hypr/hyprland/general.conf
Executable file
@@ -0,0 +1,186 @@
|
||||
input {
|
||||
# Keyboard: Add a layout and uncomment kb_options for Win+Space switching shortcut
|
||||
kb_layout = de
|
||||
# kb_options = grp:win_space_toggle
|
||||
# kb_options = caps:swapescape
|
||||
numlock_by_default = true
|
||||
repeat_delay = 250
|
||||
repeat_rate = 35
|
||||
|
||||
touchpad {
|
||||
natural_scroll = yes
|
||||
disable_while_typing = true
|
||||
clickfinger_behavior = true
|
||||
scroll_factor = 0.5
|
||||
}
|
||||
special_fallthrough = true
|
||||
follow_mouse = 1
|
||||
|
||||
sensitivity = -0.25
|
||||
}
|
||||
|
||||
binds {
|
||||
# focus_window_on_workspace_c# For Auto-run stuff see execs.confhange = true
|
||||
scroll_event_delay = 0
|
||||
}
|
||||
|
||||
gesture = 4, horizontal, workspace
|
||||
gestures {
|
||||
workspace_swipe_distance = 700
|
||||
workspace_swipe_cancel_ratio = 0.2
|
||||
workspace_swipe_min_speed_to_force = 5
|
||||
workspace_swipe_direction_lock = true
|
||||
workspace_swipe_direction_lock_threshold = 10
|
||||
workspace_swipe_create_new = true
|
||||
}
|
||||
|
||||
general {
|
||||
# Gaps and border
|
||||
gaps_in = 2
|
||||
gaps_out = 0
|
||||
gaps_workspaces = 50
|
||||
border_size = 2
|
||||
|
||||
resize_on_border = true
|
||||
no_focus_fallback = true
|
||||
layout = master
|
||||
|
||||
#focus_to_other_workspaces = true # ahhhh i still haven't properly implemented this
|
||||
allow_tearing = true # This just allows the `immediate` window rule to work
|
||||
|
||||
snap {
|
||||
enabled = true
|
||||
}
|
||||
}
|
||||
|
||||
dwindle {
|
||||
preserve_split = true
|
||||
smart_split = false
|
||||
smart_resizing = false
|
||||
}
|
||||
|
||||
master {
|
||||
new_on_active = after
|
||||
mfact = 0.6
|
||||
orientation = right
|
||||
}
|
||||
|
||||
decoration {
|
||||
rounding = 14
|
||||
|
||||
blur {
|
||||
enabled = true
|
||||
xray = true
|
||||
special = false
|
||||
new_optimizations = true
|
||||
size = 14
|
||||
passes = 4
|
||||
brightness = 1
|
||||
noise = 0.01
|
||||
contrast = 1
|
||||
popups = true
|
||||
popups_ignorealpha = 0.6
|
||||
input_methods = true
|
||||
input_methods_ignorealpha = 0.8
|
||||
}
|
||||
|
||||
# Shadow
|
||||
shadow {
|
||||
enabled = true
|
||||
ignore_window = true
|
||||
range = 20
|
||||
offset = 0 2
|
||||
render_power = 4
|
||||
color = rgba(0000002A)
|
||||
}
|
||||
|
||||
# Dim
|
||||
dim_inactive = false
|
||||
dim_strength = 0.1
|
||||
dim_special = 0
|
||||
|
||||
active_opacity = 1
|
||||
inactive_opacity = 0.9
|
||||
}
|
||||
|
||||
animations {
|
||||
enabled = true
|
||||
# Animation curves
|
||||
|
||||
bezier = linear, 0, 0, 1, 1
|
||||
bezier = md3_standard, 0.2, 0, 0, 1
|
||||
bezier = md3_decel, 0.05, 0.7, 0.1, 1
|
||||
bezier = md3_accel, 0.3, 0, 0.8, 0.15
|
||||
bezier = overshot, 0.05, 0.9, 0.1, 1.1
|
||||
bezier = crazyshot, 0.1, 1.5, 0.76, 0.92
|
||||
bezier = hyprnostretch, 0.05, 0.9, 0.1, 1.0
|
||||
bezier = menu_decel, 0.1, 1, 0, 1
|
||||
bezier = menu_accel, 0.38, 0.04, 1, 0.07
|
||||
bezier = easeInOutCirc, 0.85, 0, 0.15, 1
|
||||
bezier = easeOutCirc, 0, 0.55, 0.45, 1
|
||||
bezier = easeOutExpo, 0.16, 1, 0.3, 1
|
||||
bezier = softAcDecel, 0.26, 0.26, 0.15, 1
|
||||
bezier = md2, 0.4, 0, 0.2, 1 # use with .2s duration
|
||||
# Animation configs
|
||||
animation = windows, 1, 3, md3_decel, popin 60%
|
||||
animation = windowsIn, 1, 3, md3_decel, popin 60%
|
||||
animation = windowsOut, 1, 3, md3_accel, popin 60%
|
||||
animation = border, 1, 10, default
|
||||
animation = fade, 1, 3, md3_decel
|
||||
# animation = layers, 1, 2, md3_decel, slide
|
||||
animation = layersIn, 1, 3, menu_decel, slide
|
||||
animation = layersOut, 1, 1.6, menu_accel
|
||||
animation = fadeLayersIn, 1, 2, menu_decel
|
||||
animation = fadeLayersOut, 1, 2, menu_accel
|
||||
animation = workspaces, 1, 7, menu_decel, slide
|
||||
# animation = workspaces, 1, 2.5, softAcDecel, slide
|
||||
# animation = workspaces, 1, 7, menu_decel, slidefade 15%
|
||||
# animation = specialWorkspace, 1, 3, md3_decel, slidefadevert 15%
|
||||
animation = specialWorkspace, 1, 3, md3_decel, slidevert
|
||||
}
|
||||
|
||||
misc {
|
||||
vfr = true
|
||||
mouse_move_enables_dpms = true
|
||||
key_press_enables_dpms = true
|
||||
animate_manual_resizes = false
|
||||
animate_mouse_windowdragging = false
|
||||
enable_swallow = false
|
||||
swallow_regex = (foot|kitty|allacritty|Alacritty)
|
||||
|
||||
disable_hyprland_logo = true
|
||||
force_default_wallpaper = 0
|
||||
new_window_takes_over_fullscreen = 2
|
||||
allow_session_lock_restore = true
|
||||
|
||||
initial_workspace_tracking = false
|
||||
# focus_on_activate = true
|
||||
|
||||
middle_click_paste = false
|
||||
}
|
||||
|
||||
plugin {
|
||||
hyprexpo {
|
||||
columns = 3
|
||||
gap_size = 5
|
||||
bg_col = rgb(181825)
|
||||
workspace_method = first 1 # [center/first] [workspace] e.g. first 1 or center m+1
|
||||
|
||||
enable_gesture = true # laptop touchpad, 4 fingers
|
||||
gesture_distance = 200 # how far is the "max"
|
||||
gesture_positive = false
|
||||
}
|
||||
}
|
||||
|
||||
xwayland {
|
||||
force_zero_scaling = true
|
||||
}
|
||||
|
||||
debug {
|
||||
# overlay = true
|
||||
disable_logs = false
|
||||
}
|
||||
|
||||
experimental {
|
||||
xx_color_management_v4 = true
|
||||
}
|
||||
175
config/hypr/hyprland/keybinds.conf
Executable file
@@ -0,0 +1,175 @@
|
||||
# Lines ending with `# [hidden]` won't be shown on cheatsheet
|
||||
# Lines starting with #! are section headings
|
||||
|
||||
#!
|
||||
##! Apps
|
||||
bind = Super, C, exec, code --password-store=gnome-libsecret # Launch VSCode (editor)
|
||||
bind = Super, E, exec, dolphin --new-window # Launch file manager
|
||||
bind = Super, W, exec, zen --new-window # Launch Browser
|
||||
bind = Super, X, exec, gnome-text-editor # Launch Text Editor
|
||||
bind = Super, B, exec, killall btop || ghostty -e btop # Launch btop (system monitor)
|
||||
bind = Super, Space, exec, eww open main --toggle # Launch dashboard (eww)
|
||||
bind = Super+Shift, V, exec, pavucontrol # Launch pavucontrol (volume mixer)
|
||||
bind = Super+Shift, K, exec, waybar-toggle # Toggle waybar
|
||||
bind = Super+Shift, L, exec, lyrics-widgets # Toggle lyrics player
|
||||
bind = Super+Shift, F, exec, coin # Flip a coin
|
||||
|
||||
#!
|
||||
##! Essentials
|
||||
bind = Super, T, exec, kitty # Launch kitty (terminal)
|
||||
bind = Super, Return, exec, kitty # [hidden]
|
||||
bind = Super+Shift, Return, exec, ghostty # [hidden]
|
||||
bind = Alt, Space, exec, pkill rofi || rofi -show drun # [hidden] Launch app launcher
|
||||
bind = Super, Super_L, exec, pkill rofi || rofi -show drun # [hidden] Launch app launcher
|
||||
bind = Super, R, exec, pkill rofi || rofi -show run # Launch command launcher
|
||||
bind = , mouse:277, exec, killall rofi || rofi -show drun
|
||||
|
||||
##! Actions
|
||||
# Screenshot, Record, OCR, Color picker, Clipboard history
|
||||
bind = Super, V, exec, pkill rofi || cliphist list | rofi -dmenu -config ~/.config/rofi/dmenu.rasi -display-columns 2 -i | cliphist decode | wl-copy # Clipboard history >> clipboard
|
||||
bind = Super, Period, exec, pkill rofi || rofi-emoji # Pick emoji >> clipboard
|
||||
bind = Ctrl+Alt, Delete, exec, pkill wlogout || wlogout -p layer-shell # [hidden]
|
||||
bind = Super+Shift, S, exec, screenshot area # Screen snip
|
||||
bind = Super+Ctrl+Shift, S, exec, screenshot window # Screen snip (window)
|
||||
bind = , Print, exec, screenshot full # Screen snip (whole screen)
|
||||
# Color picker
|
||||
bind = Super+Shift, C, exec, hyprpicker -a # Pick color (Hex) >> clipboard
|
||||
# Fullscreen screenshot
|
||||
# bindl=,Print,exec,grim - | wl-copy # Screenshot >> clipboard
|
||||
# bindl= Ctrl,Print, exec, mkdir -p ~/Pictures/Screenshots && ~/.config/ags/scripts/grimblast.sh copysave screen ~/Pictures/Screenshots/Screenshot_"$(date '+%Y-%m-%d_%H.%M.%S')".png # Screenshot >> clipboard & file
|
||||
# Recording stuff
|
||||
# bind = Super+Alt, R, exec, ~/.config/ags/scripts/record-script # Record region (no sound)
|
||||
# bind = Ctrl+Alt, R, exec, ~/.config/ags/scripts/record-script --fullscreen # [hidden] Record screen (no sound)
|
||||
bind = Super+Alt, R, exec, record-script --fullscreen-sound # Record screen (with sound)
|
||||
# wallpaper
|
||||
bind = Super+Shift, W, exec, wallpaper-chooser # Launch wallpaper chooser
|
||||
|
||||
##! Session
|
||||
# bind = Ctrl+Super, L, exec, ags run-js 'lock.lock()' # [hidden]
|
||||
bind = Super, L, exec, loginctl lock-session # Lock
|
||||
bindl = Ctrl+Shift+Alt+Super, L, exec, sleep 0.1 && systemctl suspend || loginctl suspend # Suspend system
|
||||
bind = Ctrl+Shift+Alt+Super, Delete, exec, systemctl poweroff || loginctl poweroff # [hidden] Power off
|
||||
|
||||
#!
|
||||
##! Media
|
||||
bindl= Super+Shift, N, exec, playerctl next # Next track
|
||||
bindl= ,XF86AudioNext, exec, playerctl next # [hidden]
|
||||
bindl= ,XF86AudioPrev, exec, playerctl previous # [hidden]
|
||||
bind = Super+Shift+Alt, mouse:275, exec, playerctl previous # [hidden]
|
||||
bind = Super+Shift+Alt, mouse:276, exec, playerctl next # [hidden]
|
||||
bindl= Super+Shift, B, exec, playerctl previous # Previous track
|
||||
bindl= Super+Shift, P, exec, playerctl play-pause # Play/pause media
|
||||
bindl= ,XF86AudioPlay, exec, playerctl play-pause # [hidden]
|
||||
bindl= ,XF86AudioPause, exec, playerctl play-pause # [hidden]
|
||||
|
||||
#!
|
||||
##! Sound & Brightness
|
||||
bindl = ,XF86AudioMute, exec, pamixer --toggle-mute # [hidden]
|
||||
bindl = Super+Shift, M, exec, pamixer --toggle-mute # [hidden]
|
||||
bindle=, XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ && wp-vol # [hidden]
|
||||
bindle=, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- && wp-vol # [hidden]
|
||||
|
||||
bindle=, XF86MonBrightnessUp, exec, brightnessctl -d $DISPLAY_DEVICE set 5%+ # [hidden]
|
||||
bindle=, XF86MonBrightnessDown, exec, brightnessctl -d $DISPLAY_DEVICE set 5%- # [hidden]
|
||||
|
||||
#!
|
||||
##! Window management
|
||||
# Focusing
|
||||
#/# bind = Super, ←/↑/→/↓,, # Move focus in direction
|
||||
bind = Super, Left, movefocus, l # [hidden]
|
||||
bind = Super, Right, movefocus, r # [hidden]
|
||||
bind = Super, Up, movefocus, u # [hidden]
|
||||
bind = Super, Down, movefocus, d # [hidden]
|
||||
bindm = Super, mouse:272, movewindow
|
||||
bindm = Super, mouse:273, resizewindow
|
||||
bind = Super, Q, killactive,
|
||||
bind = Super, mouse:274, killactive # [hidden] Kill active window
|
||||
bind = Super+Shift+Alt, Q, exec, hyprctl kill # Pick and kill a window
|
||||
|
||||
##! Window arrangement
|
||||
#/# bind = Super+Shift, ←/↑/→/↓,, # Window: move in direction
|
||||
bind = Super+Shift, Left, movewindow, l # [hidden]
|
||||
bind = Super+Shift, Right, movewindow, r # [hidden]
|
||||
bind = Super+Shift, Up, movewindow, u # [hidden]
|
||||
bind = Super+Shift, Down, movewindow, d # [hidden]
|
||||
# Window split ratio
|
||||
#/# binde = Super, +/-,, # Window: split ratio +/- 0.1
|
||||
binde = Super, udiaeresis, splitratio, -0.1 # [hidden]
|
||||
binde = Super, plus, splitratio, +0.1 # [hidden]
|
||||
# Positioning mode
|
||||
bind = Super+Alt, Space, togglefloating,
|
||||
bind = Super, mouse:276, togglefloating # [hidden]
|
||||
bind = Super+Alt, F, fullscreenstate, 0 3 # Toggle fake fullscreen
|
||||
bind = Super, F, fullscreen, 0
|
||||
bind = Super, D, fullscreen, 1
|
||||
bind = Super, J, togglesplit
|
||||
bind = Super, O, plugin:uyani:organize # https://github.com/Uyanide/hyprplug
|
||||
bind = Super, H, layoutmsg, orientationcycle left right
|
||||
|
||||
#!
|
||||
##! Workspace navigation
|
||||
# Switching
|
||||
#/# bind = Super, Hash,, # Focus workspace # (1, 2, 3, 4, ...)
|
||||
bind = Super, 1, workspace, 1 # [hidden]
|
||||
bind = Super, 2, workspace, 2 # [hidden]
|
||||
bind = Super, 3, workspace, 3 # [hidden]
|
||||
bind = Super, 4, workspace, 4 # [hidden]
|
||||
bind = Super, 5, workspace, 5 # [hidden]
|
||||
bind = Super, 6, workspace, 6 # [hidden]
|
||||
bind = Super, 7, workspace, 7 # [hidden]
|
||||
bind = Super, 8, workspace, 8 # [hidden]
|
||||
bind = Super, 9, workspace, 9 # [hidden]
|
||||
bind = Super, 0, workspace, 10 # [hidden]
|
||||
#/# bind = Ctrl+Super, ←/→,, # Workspace: focus left/right
|
||||
bind = Ctrl+Super, Right, workspace, +1 # [hidden]
|
||||
bind = Ctrl+Super, Left, workspace, -1 # [hidden]
|
||||
#/# bind = Super, Scroll ↑/↓,, # Workspace: focus left/right
|
||||
bind = Super, mouse_up, workspace, +1 # [hidden]
|
||||
bind = Super, mouse_down, workspace, -1 # [hidden]
|
||||
bind = Ctrl+Super, mouse_up, workspace, +1 # [hidden]
|
||||
bind = Ctrl+Super, mouse_down, workspace, -1 # [hidden]
|
||||
bind = Super, mouse_left, workspace, -1 # [hidden]
|
||||
bind = Super, mouse_right, workspace, +1 # [hidden]
|
||||
bind = Ctrl+Super, mouse_left, workspace, -1 # [hidden]
|
||||
bind = Ctrl+Super, mouse_right, workspace, +1 # [hidden]
|
||||
#/# bind = Super, Page_↑/↓,, # Workspace: focus left/right
|
||||
bind = Super, Page_Down, workspace, +1 # [hidden]
|
||||
bind = Super, Page_Up, workspace, -1 # [hidden]
|
||||
bind = Ctrl+Super, Page_Down, workspace, +1 # [hidden]
|
||||
bind = Ctrl+Super, Page_Up, workspace, -1 # [hidden]
|
||||
## Special
|
||||
bind = Super, S, togglespecialworkspace, s
|
||||
bind = Super, mouse:275, togglespecialworkspace, s # [hidden]
|
||||
|
||||
##! Workspace management
|
||||
# Move window to workspace Super + Alt + [0-9]
|
||||
#/# bind = Super+Alt, Hash,, # Window: move to workspace # (1, 2, 3, 4, ...)
|
||||
bind = Super+Alt, 1, movetoworkspacesilent, 1 # [hidden]
|
||||
bind = Super+Alt, 2, movetoworkspacesilent, 2 # [hidden]
|
||||
bind = Super+Alt, 3, movetoworkspacesilent, 3 # [hidden]
|
||||
bind = Super+Alt, 4, movetoworkspacesilent, 4 # [hidden]
|
||||
bind = Super+Alt, 5, movetoworkspacesilent, 5 # [hidden]
|
||||
bind = Super+Alt, 6, movetoworkspacesilent, 6 # [hidden]
|
||||
bind = Super+Alt, 7, movetoworkspacesilent, 7 # [hidden]
|
||||
bind = Super+Alt, 8, movetoworkspacesilent, 8 # [hidden]
|
||||
bind = Super+Alt, 9, movetoworkspacesilent, 9 # [hidden]
|
||||
bind = Super+Alt, 0, movetoworkspacesilent, 10 # [hidden]
|
||||
bind = Ctrl+Super+Shift, Right, movetoworkspace, +1 # [hidden]
|
||||
bind = Ctrl+Super+Shift, Left, movetoworkspace, -1 # [hidden]
|
||||
bind = Ctrl+Super, Up, workspace, -5 # [hidden]
|
||||
bind = Ctrl+Super, Down, workspace, +5 # [hidden]
|
||||
#/# bind = Super+Shift, Scroll ↑/↓,, # Window: move to workspace left/right
|
||||
bind = Super+Shift, mouse_down, movetoworkspace, -1 # [hidden]
|
||||
bind = Super+Shift, mouse_up, movetoworkspace, +1 # [hidden]
|
||||
bind = Super+Shift, mouse_left, movetoworkspace, -1 # [hidden]
|
||||
bind = Super+Shift, mouse_right, movetoworkspace, +1 # [
|
||||
#/# bind = Super+Shift, Page_↑/↓,, # Window: move to workspace left/right
|
||||
bind = Super+Shift, Page_Down, movetoworkspace, +1 # [hidden]
|
||||
bind = Super+Shift, Page_Up, movetoworkspace, -1 # [hidden]
|
||||
bind = Super+Alt, S, movetoworkspacesilent, special:s
|
||||
bind = Super, P, pin
|
||||
bind = Alt, Tab, cyclenext
|
||||
bind = Super, Tab, hyprexpo:expo, toggle # can be: toggle, select, off/disable or on/enable
|
||||
bind = Super+Ctrl, T, exec, workspace-new # Create new workspace
|
||||
|
||||
bind = Super, M, exit
|
||||
18
config/hypr/hyprland/monitors.conf
Normal file
@@ -0,0 +1,18 @@
|
||||
# MONITOR CONFIG
|
||||
monitor=,preferred,auto,1
|
||||
|
||||
# monitor=eDP-1,2560x1600@240,auto,1.25,bitdepth,10
|
||||
monitor=eDP-2,2560x1600@240,auto,1.25,bitdepth,10
|
||||
|
||||
monitorv2 {
|
||||
output = eDP-1
|
||||
mode = 2560x1600@240
|
||||
scale = 1.25
|
||||
bitdepth = 10
|
||||
|
||||
# # comment out following lines to disabled HDR
|
||||
# supports_wide_color = true
|
||||
# supports_hdr = true
|
||||
# cm = hdr
|
||||
# sdrbrightness = 1.4
|
||||
}
|
||||
93
config/hypr/hyprland/rules.conf
Executable file
@@ -0,0 +1,93 @@
|
||||
# ######## Window rules ########
|
||||
|
||||
# Uncomment to apply global transparency to all windows:
|
||||
# windowrulev2 = opacity 0.89 override 0.89 override, class:.*
|
||||
|
||||
# Disable blur for XWayland windows (or context menus with shadow would look weird)
|
||||
windowrulev2 = noblur, xwayland:1
|
||||
|
||||
# Disable transparency
|
||||
windowrulev2 = opacity 1 override 1 override, class:^(gimp)$
|
||||
|
||||
# Terminal(s)
|
||||
windowrulev2 = float, class:^(com.mitchellh.ghostty)$
|
||||
windowrulev2 = size 60%, class:^(com.mitchellh.ghostty)$
|
||||
windowrulev2 = opacity 1 override 0.8 override, class:^(com.mitchellh.ghostty)$
|
||||
windowrulev2 = opacity 1 override 0.8 override, class:^(kitty)$
|
||||
|
||||
# Floating
|
||||
windowrulev2 = float, class:^(blueberry\.py)$
|
||||
windowrulev2 = float, class:^(blueman-manager)$
|
||||
windowrulev2 = size 45%, class:^(blueman-manager)$
|
||||
windowrulev2 = float, class:^(pavucontrol)$
|
||||
windowrulev2 = size 45%, class:^(pavucontrol)$
|
||||
windowrulev2 = center, class:^(pavucontrol)$
|
||||
windowrulev2 = float, class:^(org.pulseaudio.pavucontrol)$
|
||||
windowrulev2 = size 45%, class:^(org.pulseaudio.pavucontrol)$
|
||||
windowrulev2 = center, class:^(org.pulseaudio.pavucontrol)$
|
||||
windowrulev2 = float, class:^(Waydroid)$
|
||||
windowrulev2 = float, class:^(org.kde.kcalc)$
|
||||
windowrulev2 = float, class:^(org.kde.kalk)$
|
||||
windowrulev2 = float, class:^(org.gnome.NautilusPreviewer)$ # Sushi in Nautilus
|
||||
windowrulev2 = float, class:^(coin)$
|
||||
windowrulev2 = noblur, class:^(coin)$
|
||||
windowrulev2 = bordersize 0, class:^(coin)$
|
||||
windowrulev2 = noshadow, class:^(coin)
|
||||
windowrulev2 = float, class:^(wallpaper-chooser)$
|
||||
windowrulev2 = float, class:^(be.alexandervanhee.gradia)$
|
||||
windowrulev2 = float, title:^(图片查看器)$ # QQ
|
||||
|
||||
# Picture-in-Picture
|
||||
windowrulev2 = float, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
|
||||
windowrulev2 = keepaspectratio, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
|
||||
windowrulev2 = move 73% 72%, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
|
||||
windowrulev2 = size 25%, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
|
||||
windowrulev2 = float, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
|
||||
windowrulev2 = pin, title:^([Pp]icture[-\s]?[Ii]n[-\s]?[Pp]icture)(.*)$
|
||||
|
||||
# Dialog windows – float+center these windows.
|
||||
windowrulev2 = center, title:^(Open File)(.*)$
|
||||
windowrulev2 = center, title:^(Select a File)(.*)$
|
||||
windowrulev2 = center, title:^(Choose wallpaper)(.*)$
|
||||
windowrulev2 = center, title:^(Open Folder)(.*)$
|
||||
windowrulev2 = center, title:^(Save As)(.*)$
|
||||
windowrulev2 = center, title:^(Library)(.*)$
|
||||
windowrulev2 = center, title:^(File Upload)(.*)$
|
||||
windowrulev2 = float, title:^(Open File)(.*)$
|
||||
windowrulev2 = float, title:^(Select a File)(.*)$
|
||||
windowrulev2 = float, title:^(Choose wallpaper)(.*)$
|
||||
windowrulev2 = float, title:^(Open Folder)(.*)$
|
||||
windowrulev2 = float, title:^(Save As)(.*)$
|
||||
windowrulev2 = float, title:^(Library)(.*)$
|
||||
windowrulev2 = float, title:^(File Upload)(.*)$
|
||||
|
||||
|
||||
# --- Tearing ---
|
||||
windowrulev2 = immediate, title:.*\.exe
|
||||
windowrulev2 = immediate, class:^(steam_app)
|
||||
|
||||
# No shadow for tiled windows (matches windows that are not floating).
|
||||
windowrulev2 = noshadow, floating:0
|
||||
|
||||
# ######## Workspace rules ########
|
||||
workspace = special:special, gapsout:30
|
||||
|
||||
# ######## Layer rules ########
|
||||
layerrule = xray 1, .*
|
||||
# layerrule = noanim, .*
|
||||
layerrule = noanim, walker
|
||||
layerrule = noanim, selection
|
||||
layerrule = noanim, overview
|
||||
layerrule = noanim, anyrun
|
||||
layerrule = noanim, indicator.*
|
||||
layerrule = noanim, osk
|
||||
layerrule = noanim, hyprpicker
|
||||
|
||||
layerrule = noanim, noanim
|
||||
layerrule = blur, gtk-layer-shell
|
||||
layerrule = ignorezero, gtk-layer-shell
|
||||
layerrule = blur, launcher
|
||||
layerrule = ignorealpha 0.5, launcher
|
||||
layerrule = blur, notifications
|
||||
layerrule = ignorealpha 0.69, notifications
|
||||
layerrule = blur, logout_dialog # wlogout
|
||||
319
config/hypr/hyprlandd.conf
Normal file
@@ -0,0 +1,319 @@
|
||||
|
||||
# #######################################################################################
|
||||
# AUTOGENERATED HYPRLAND CONFIG.
|
||||
# EDIT THIS CONFIG ACCORDING TO THE WIKI INSTRUCTIONS.
|
||||
# #######################################################################################
|
||||
|
||||
# This is an example Hyprland config file.
|
||||
# Refer to the wiki for more information.
|
||||
# https://wiki.hypr.land/Configuring/
|
||||
|
||||
# Please note not all available settings / options are set here.
|
||||
# For a full list, see the wiki
|
||||
|
||||
# You can split this configuration into multiple files
|
||||
# Create your files separately and then link them to this file like this:
|
||||
# source = ~/.config/hypr/myColors.conf
|
||||
|
||||
|
||||
################
|
||||
### MONITORS ###
|
||||
################
|
||||
|
||||
# See https://wiki.hypr.land/Configuring/Monitors/
|
||||
monitor=,preferred,auto,auto
|
||||
|
||||
|
||||
###################
|
||||
### MY PROGRAMS ###
|
||||
###################
|
||||
|
||||
# See https://wiki.hypr.land/Configuring/Keywords/
|
||||
|
||||
# Set programs that you use
|
||||
$terminal = kitty
|
||||
$fileManager = dolphin
|
||||
$menu = wofi --show drun
|
||||
|
||||
|
||||
#################
|
||||
### AUTOSTART ###
|
||||
#################
|
||||
|
||||
# Autostart necessary processes (like notifications daemons, status bars, etc.)
|
||||
# Or execute your favorite apps at launch like this:
|
||||
|
||||
# exec-once = $terminal
|
||||
# exec-once = nm-applet &
|
||||
# exec-once = waybar & hyprpaper & firefox
|
||||
|
||||
|
||||
#############################
|
||||
### ENVIRONMENT VARIABLES ###
|
||||
#############################
|
||||
|
||||
# See https://wiki.hypr.land/Configuring/Environment-variables/
|
||||
|
||||
env = XCURSOR_SIZE,24
|
||||
env = HYPRCURSOR_SIZE,24
|
||||
|
||||
|
||||
###################
|
||||
### PERMISSIONS ###
|
||||
###################
|
||||
|
||||
# See https://wiki.hypr.land/Configuring/Permissions/
|
||||
# Please note permission changes here require a Hyprland restart and are not applied on-the-fly
|
||||
# for security reasons
|
||||
|
||||
# ecosystem {
|
||||
# enforce_permissions = 1
|
||||
# }
|
||||
|
||||
# permission = /usr/(bin|local/bin)/grim, screencopy, allow
|
||||
# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
|
||||
# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow
|
||||
|
||||
|
||||
#####################
|
||||
### LOOK AND FEEL ###
|
||||
#####################
|
||||
|
||||
# Refer to https://wiki.hypr.land/Configuring/Variables/
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#general
|
||||
general {
|
||||
gaps_in = 5
|
||||
gaps_out = 20
|
||||
|
||||
border_size = 2
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#variable-types for info about colors
|
||||
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
|
||||
col.inactive_border = rgba(595959aa)
|
||||
|
||||
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||
resize_on_border = false
|
||||
|
||||
# Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on
|
||||
allow_tearing = false
|
||||
|
||||
layout = dwindle
|
||||
}
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#decoration
|
||||
decoration {
|
||||
rounding = 10
|
||||
rounding_power = 2
|
||||
|
||||
# Change transparency of focused and unfocused windows
|
||||
active_opacity = 1.0
|
||||
inactive_opacity = 1.0
|
||||
|
||||
shadow {
|
||||
enabled = true
|
||||
range = 4
|
||||
render_power = 3
|
||||
color = rgba(1a1a1aee)
|
||||
}
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#blur
|
||||
blur {
|
||||
enabled = true
|
||||
size = 3
|
||||
passes = 1
|
||||
|
||||
vibrancy = 0.1696
|
||||
}
|
||||
}
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#animations
|
||||
animations {
|
||||
enabled = yes, please :)
|
||||
|
||||
# Default curves, see https://wiki.hypr.land/Configuring/Animations/#curves
|
||||
# NAME, X0, Y0, X1, Y1
|
||||
bezier = easeOutQuint, 0.23, 1, 0.32, 1
|
||||
bezier = easeInOutCubic, 0.65, 0.05, 0.36, 1
|
||||
bezier = linear, 0, 0, 1, 1
|
||||
bezier = almostLinear, 0.5, 0.5, 0.75, 1
|
||||
bezier = quick, 0.15, 0, 0.1, 1
|
||||
|
||||
# Default animations, see https://wiki.hypr.land/Configuring/Animations/
|
||||
# NAME, ONOFF, SPEED, CURVE, [STYLE]
|
||||
animation = global, 1, 10, default
|
||||
animation = border, 1, 5.39, easeOutQuint
|
||||
animation = windows, 1, 4.79, easeOutQuint
|
||||
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
||||
animation = windowsOut, 1, 1.49, linear, popin 87%
|
||||
animation = fadeIn, 1, 1.73, almostLinear
|
||||
animation = fadeOut, 1, 1.46, almostLinear
|
||||
animation = fade, 1, 3.03, quick
|
||||
animation = layers, 1, 3.81, easeOutQuint
|
||||
animation = layersIn, 1, 4, easeOutQuint, fade
|
||||
animation = layersOut, 1, 1.5, linear, fade
|
||||
animation = fadeLayersIn, 1, 1.79, almostLinear
|
||||
animation = fadeLayersOut, 1, 1.39, almostLinear
|
||||
animation = workspaces, 1, 1.94, almostLinear, fade
|
||||
animation = workspacesIn, 1, 1.21, almostLinear, fade
|
||||
animation = workspacesOut, 1, 1.94, almostLinear, fade
|
||||
animation = zoomFactor, 1, 7, quick
|
||||
}
|
||||
|
||||
# Ref https://wiki.hypr.land/Configuring/Workspace-Rules/
|
||||
# "Smart gaps" / "No gaps when only"
|
||||
# uncomment all if you wish to use that.
|
||||
# workspace = w[tv1], gapsout:0, gapsin:0
|
||||
# workspace = f[1], gapsout:0, gapsin:0
|
||||
# windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
|
||||
# windowrule = rounding 0, floating:0, onworkspace:w[tv1]
|
||||
# windowrule = bordersize 0, floating:0, onworkspace:f[1]
|
||||
# windowrule = rounding 0, floating:0, onworkspace:f[1]
|
||||
|
||||
# See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more
|
||||
dwindle {
|
||||
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||
preserve_split = true # You probably want this
|
||||
}
|
||||
|
||||
# See https://wiki.hypr.land/Configuring/Master-Layout/ for more
|
||||
master {
|
||||
new_status = master
|
||||
}
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#misc
|
||||
misc {
|
||||
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
|
||||
}
|
||||
|
||||
|
||||
#############
|
||||
### INPUT ###
|
||||
#############
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#input
|
||||
input {
|
||||
kb_layout = de
|
||||
kb_variant =
|
||||
kb_model =
|
||||
kb_options =
|
||||
kb_rules =
|
||||
|
||||
follow_mouse = 1
|
||||
|
||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||
|
||||
touchpad {
|
||||
natural_scroll = false
|
||||
}
|
||||
}
|
||||
|
||||
# https://wiki.hypr.land/Configuring/Variables/#gestures
|
||||
gestures {
|
||||
workspace_swipe = false
|
||||
}
|
||||
|
||||
# Example per-device config
|
||||
# See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more
|
||||
device {
|
||||
name = epic-mouse-v1
|
||||
sensitivity = -0.5
|
||||
}
|
||||
|
||||
|
||||
###################
|
||||
### KEYBINDINGS ###
|
||||
###################
|
||||
|
||||
# See https://wiki.hypr.land/Configuring/Keywords/
|
||||
$mainMod = Alt # Sets "Windows" key as main modifier
|
||||
|
||||
# Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more
|
||||
bind = $mainMod, Q, exec, $terminal
|
||||
bind = $mainMod, C, killactive,
|
||||
bind = $mainMod, M, exit,
|
||||
bind = $mainMod, E, exec, $fileManager
|
||||
bind = $mainMod, V, togglefloating,
|
||||
bind = $mainMod, R, exec, $menu
|
||||
bind = $mainMod, P, pseudo, # dwindle
|
||||
bind = $mainMod, J, togglesplit, # dwindle
|
||||
|
||||
# Move focus with mainMod + arrow keys
|
||||
bind = $mainMod, left, movefocus, l
|
||||
bind = $mainMod, right, movefocus, r
|
||||
bind = $mainMod, up, movefocus, u
|
||||
bind = $mainMod, down, movefocus, d
|
||||
|
||||
# Switch workspaces with mainMod + [0-9]
|
||||
bind = $mainMod, 1, workspace, 1
|
||||
bind = $mainMod, 2, workspace, 2
|
||||
bind = $mainMod, 3, workspace, 3
|
||||
bind = $mainMod, 4, workspace, 4
|
||||
bind = $mainMod, 5, workspace, 5
|
||||
bind = $mainMod, 6, workspace, 6
|
||||
bind = $mainMod, 7, workspace, 7
|
||||
bind = $mainMod, 8, workspace, 8
|
||||
bind = $mainMod, 9, workspace, 9
|
||||
bind = $mainMod, 0, workspace, 10
|
||||
|
||||
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||
|
||||
# Example special workspace (scratchpad)
|
||||
bind = $mainMod, S, togglespecialworkspace, magic
|
||||
bind = $mainMod SHIFT, S, movetoworkspace, special:magic
|
||||
|
||||
# Scroll through existing workspaces with mainMod + scroll
|
||||
bind = $mainMod, mouse_down, workspace, e+1
|
||||
bind = $mainMod, mouse_up, workspace, e-1
|
||||
|
||||
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
bindm = $mainMod, mouse:272, movewindow
|
||||
bindm = $mainMod, mouse:273, resizewindow
|
||||
|
||||
# Laptop multimedia keys for volume and LCD brightness
|
||||
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
|
||||
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
|
||||
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
|
||||
|
||||
# Requires playerctl
|
||||
bindl = , XF86AudioNext, exec, playerctl next
|
||||
bindl = , XF86AudioPause, exec, playerctl play-pause
|
||||
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||
bindl = , XF86AudioPrev, exec, playerctl previous
|
||||
|
||||
##############################
|
||||
### WINDOWS AND WORKSPACES ###
|
||||
##############################
|
||||
|
||||
# See https://wiki.hypr.land/Configuring/Window-Rules/ for more
|
||||
# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules
|
||||
|
||||
# Example windowrule
|
||||
# windowrule = float,class:^(kitty)$,title:^(kitty)$
|
||||
|
||||
# Ignore maximize requests from apps. You'll probably like this.
|
||||
windowrule = suppressevent maximize, class:.*
|
||||
|
||||
# Fix some dragging issues with XWayland
|
||||
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
||||
|
||||
debug {
|
||||
disable_logs = false
|
||||
overlay = true
|
||||
disable_time = false
|
||||
enable_stdout_logs = true
|
||||
}
|
||||
108
config/hypr/hyprlock.conf
Executable file
@@ -0,0 +1,108 @@
|
||||
# $text_color = rgba(D7E5E6FF)
|
||||
# $entry_background_color = rgba(09151611)
|
||||
# $entry_border_color = rgba(82949555)
|
||||
# $entry_color = rgba(B8CACBFF)
|
||||
$text_color = rgba(FFFFFFFF)
|
||||
$entry_background_color = rgba(33333360)
|
||||
$entry_border_color = rgba(3B3B3B64)
|
||||
$entry_color = rgba(FFFFFFFF)
|
||||
$font_family = Noto Sans
|
||||
$font_family_clock = Font Awesome 6 Free
|
||||
$font_material_symbols = Material Symbols Rounded
|
||||
|
||||
# workaround: https://github.com/hyprwm/hyprlock/issues/825
|
||||
animation = fade, 0
|
||||
# another wierd bug that only happens in hybrid mode :/
|
||||
|
||||
background {
|
||||
# color = rgba(041011FF)
|
||||
# color = rgba(000000FF)
|
||||
# path = {{ SWWW_WALL }}
|
||||
path = ~/Pictures/backgrounds/miku-space.jpg
|
||||
# blur_size = 5
|
||||
# blur_passes = 4
|
||||
}
|
||||
input-field {
|
||||
monitor =
|
||||
size = 250, 50
|
||||
outline_thickness = 2
|
||||
dots_size = 0.1
|
||||
dots_spacing = 0.3
|
||||
outer_color = $entry_border_color
|
||||
inner_color = $entry_background_color
|
||||
font_color = $entry_color
|
||||
# fade_on_empty = true
|
||||
|
||||
position = 100, -80
|
||||
halign = left
|
||||
valign = center
|
||||
}
|
||||
|
||||
label { # Clock
|
||||
monitor =
|
||||
text = $TIME
|
||||
shadow_passes = 1
|
||||
shadow_size = 15
|
||||
shadow_boost = 0.5
|
||||
color = $text_color
|
||||
font_size = 100
|
||||
font_family = $font_family_clock
|
||||
|
||||
position = 100, 120
|
||||
halign = left
|
||||
valign = center
|
||||
}
|
||||
label { # Greeting
|
||||
monitor =
|
||||
text = Hi, $USER
|
||||
shadow_passes = 1
|
||||
shadow_size = 15
|
||||
shadow_boost = 0.5
|
||||
color = $text_color
|
||||
font_size = 24
|
||||
font_family = $font_family
|
||||
|
||||
position = 100, 0
|
||||
halign = left
|
||||
valign = center
|
||||
}
|
||||
label { # lock icon
|
||||
monitor =
|
||||
text = lock
|
||||
shadow_passes = 1
|
||||
shadow_boost = 0.5
|
||||
color = $text_color
|
||||
font_size = 21
|
||||
font_family = $font_material_symbols
|
||||
|
||||
position = 100, 100
|
||||
halign = left
|
||||
valign = bottom
|
||||
}
|
||||
label { # "locked" text
|
||||
monitor =
|
||||
text = locked
|
||||
shadow_passes = 1
|
||||
shadow_boost = 0.5
|
||||
color = $text_color
|
||||
font_size = 14
|
||||
font_family = $font_family
|
||||
|
||||
position = 140, 105
|
||||
halign = left
|
||||
valign = bottom
|
||||
}
|
||||
|
||||
label { # Status
|
||||
monitor =
|
||||
text = cmd[update:5000] ${XDG_CONFIG_HOME:-$HOME/.config}/hypr/hyprlock/status.sh
|
||||
shadow_passes = 1
|
||||
shadow_boost = 0.5
|
||||
color = $text_color
|
||||
font_size = 14
|
||||
font_family = $font_family
|
||||
|
||||
position = 100, -100
|
||||
halign = left
|
||||
valign = top
|
||||
}
|
||||
29
config/hypr/hyprlock/status.sh
Executable file
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
############ Variables ############
|
||||
enable_battery=false
|
||||
battery_charging=false
|
||||
|
||||
####### Check availability ########
|
||||
for battery in /sys/class/power_supply/*BAT*; do
|
||||
if [[ -f "$battery/uevent" ]]; then
|
||||
enable_battery=true
|
||||
if [[ $(cat /sys/class/power_supply/*/status | head -1) == "Charging" ]]; then
|
||||
battery_charging=true
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
############# Output #############
|
||||
if [[ $enable_battery == true ]]; then
|
||||
if [[ $battery_charging == true ]]; then
|
||||
echo -n "(+) "
|
||||
fi
|
||||
echo -n "$(cat /sys/class/power_supply/*/capacity | head -1)"%
|
||||
if [[ $battery_charging == false ]]; then
|
||||
echo -n " remaining"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ''
|
||||