better structure

This commit is contained in:
Uyanide committed 2025-10-19 00:14:19 +02:00
1 parent 057afc086e
commit 8733656ed9
630 files changed
+81 -137

No files matched your search

+280
View 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
View 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
View 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
View 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
View 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
View 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);
}
}
@@ -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
View 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
View 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
View File
@@ -0,0 +1,5 @@
--password-store=gnome-libsecret
--enable-features=UseOzonePlatform
--ozone-platform=wayland
--use-gl=desktop
--enable-wayland-ime
+174
View 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
View 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
View 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/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/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
View 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
View 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
View File
@@ -0,0 +1,2 @@
#!/bin/sh
+270
View 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
View 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))
Binary file not shown.

After

Width:  |  Height:  |  Size: 919 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="512" height="512" fill="none" viewBox="0 0 512 512"><rect width="512" height="512" fill="url(#pattern0)" rx="15"/><g style="mix-blend-mode:soft-light"><path fill="#BB9AF7" d="M298.917 277.458C284.694 277.458 273.167 288.986 273.167 303.208C273.167 317.431 284.694 328.958 298.917 328.958C313.139 328.958 324.667 317.431 324.667 303.208C324.667 288.986 313.139 277.458 298.917 277.458Z"/><path fill="#BB9AF7" d="M195.917 286.042C181.694 286.042 170.167 297.569 170.167 311.792C170.167 326.014 181.694 337.542 195.917 337.542C210.139 337.542 221.667 326.014 221.667 311.792C221.667 297.569 210.139 286.042 195.917 286.042Z"/><path fill="#FF007C" d="M307.5 180.419L221.667 199.075V237.7L307.5 219.044V180.419Z"/><path fill="#BB9AF7" d="M314.259 174.656L211.259 197.041C207.315 197.904 204.5 201.393 204.5 205.431V311.792H221.667V217.375L307.5 198.719V303.208H324.667V183.046C324.667 177.57 319.611 173.493 314.259 174.656Z"/></g><defs><pattern id="pattern0" width="1" height="1" patternContentUnits="objectBoundingBox"><use transform="scale(0.00217391)" xlink:href="#image0_3_2"/></pattern><image id="image0_3_2" width="460" height="460" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcwAAAHMCAYAAABY25iGAAAgAElEQVR4Xsy9ic9uy3Letd9z/1nmGcQgBgECRAQIBAgEAgQCgQAl2IlxBuPghASHOMQhDolJjO98fSffwXc45+wBvau7qp566qnuXt+3j8mVzt3fu4Zevdaqrl9N3evxu3/07/nwJv3v8YY2vHnz5uFHjH3x+/l3Pn7s8+Pmzg/tOXZ81ya1N68f19zv/+AHn17rTl+e92rHq77M/dAH7nt6Xv6k9XONY/k95Ldov/Jzt63Y9uG7/bC4N9nn+89aywj0b/ZhPAP1jvBe+v0sw8dtXSfWZ7duj8/J762OJ/UeHz7krr66uM0/HvNZz3/fwL/jkT3PiWPTtsd8lngubnue9nje87zuddz4+wP8rY65rvM8BvvH56d+wf1c50Hf5n1c10x9fbzR9zOv/Xxf1g9/ds9t9hz1vVwyhveXzrVniv/a8THGkojmgXspSNcD9odte/5utz3eXPoM98Pf3u48xnWf+B3tXA86tev77DzrPx1Xzxtt+XY+b/6W91CuNfvVtMH3Wn4/u1Ge1ZQx9XzhHQUz4Fk/RSoDk5VnVcpVAXfKt4HOLcW7U4DRv1tA/pD7fKZA8Vr4XO4q0KncpvLtwbYDJj5fDcux9V47++c4731pCH0x7+3q28LwwL4fQzDBd2MUHAJza0TS69JGDR4EkDQAXK9hD0xX/AgmO7eF1ZSbBJUOTAEeh9AKqi+GbMA3A3LKN4G0NQrAgIhj1P3atgDvACCCfL4je46+D/SDDQX2Qmz8IOwMJghXAaxLvgAEW4AyXOVvaBP7dgd+F/ADmBLeTV8Q0Nch13UrMJdQFAbHS4EpDZoBzL+XX+UlBQwRU774LrPn2QAyeafrYwbVlbK9493sjt0pxd35DKHd8Xr/eI4Hz4yeSahRFQlgcGaoqnfKfVDvvjco6N6WEEWDYyMHW5kJK/GlkAyo7d4fvG94FzsjqxtDyuC0tyYHoj0Lf2TgbZKizp5fVvTZQ9ReY3hiACeCK3t4wwsDT7L1Cg021eMLT67z9ppz2NPc9jX6YPDL/QdwelsATvAy4/yAqOsufFfZQRnPCl80KnkHxTwEYSqO+zCBcp3Gxy5+t94dgpjhQ78lsBPcwWvF+zoApt/PhGYAdHqu0N6ZVzlHmPcPDG/zmHfvZTbx+N0/xsAkL1Mo7F7JdsD7OJBJ13Uv8WN6M9j/A88RQoT3Q3XnIOV3mUPiGZIxFpUHOu/JD8I+fKx3h+9ag00/qx6iOziNAbUD325/7Xe5Lr3veC8nMsjPN//Ob5Hfi41WeEbFY8yKmz2s4hlNT08dxyFMDr1e7+/ZldPwbAnJTmAfhVYjFDygj6HU6vXe7tsE496gMCOjevYecjbI4su8XlmMA9slQ36dh6RAyl7gHAMIzrNwLIRPvc37YVUdwq3Q7GEN4VMJ60WfEKAYhsVnVJ4h6CY0LvwFkdESwPz7tGE7X3Le2SkGAcRjb+Ouot55Jw30PqpCjWscKfPrYTfPLoWHV8/C3uTKs1SQ7KIF1cPVAJh9Ku/zDoDwedH7K/DewUfvT3lkzw+pYw8MoS4nfSjT4znmd9F5lmsDp2heswsiHLvLrV35R1byCDzhTRpEKK85YLQGVoIaQlnC9WW50Ctfyp6t5RxTmNmMCJ0PHe1kQ0Nvs1xqfo7puWJuOYVmsyl0/UoKmozY5KXNczehRh2SrXnJZZ6SQBNe3QzVzn4fAy95uH0bOhRbPUmPPvLzEb+TR6rymA5PNOj5vSyBqRXteF2rHBift1dGx54YKFJWKhlS+2seFeW4XG/aszj94viqME/yvMLoiPFChVZZkTYWDxy0jhqc5KWPDINtUc4CnPg8Kaqxen99vybQF22t5aop5rpxj8oAWY0n1KXx8miMocdiMCxAnAUoBQa1iEYX1tS83c6jbD27RVGPA4eP8X7v86YOuIW3m/umwtHC4zWjIRU7LbxMP96G6kKnuuEllLSDBuQX4LOCwVGoVYCvg1b2VkUY0+5jQmtVcDSuQV7djfNz2xnAt8OyCaKUJ6VBmCIBz1f75f/p7/d30If6FtBMYSqt9FmpHUPzFGKrysVDr6D3CHYeD0Ig/u6MDeVR3PU+xgtbGTkroBI8l54QvPdDULQAm+A6Aq/yxltD5YYX6fegir6690jGztJ77WWhjgFhjHbv1G/RvEV7v+DtKYXtYVNd8Zm8tFT5qipMz/Oao2LWjp/3qTzThdfZerPlHMifSi9zPjy4PnvJYziR50z9b3OWE+7x6nKBFo7EpIvRylV5TPKMlh6WOlbA6Lo+gOsMlKIi16J1x6AcTwGrclMIt/Vuc242h5jX0JSGhb0AlQ/GgkJ4NwKY/0ByUPTAFoO7Lcz4CNB8EeQ+RojwsBBnU6yTnmECRQbq2pBQxzKQeTiywub9+Iyavrg03PHc5zuf92pXXRU18TO6U9XqBtcLwux3Km1bw+7QeNDPAcYHPOs4Nhs76Q0COK/trbLGytV5YIGnykFSyPFWSJYgC/lGDtO+aooKeHxcsMM5Tp46kqa+lP41RVJ4PYMo/JuNjvm2vBhrgoKM0kGPeLMJBFzAswwpUlXqITgRJtuq1tnXrirXC49UUdDqXKqoTYDbtYXtGujuhq3xHbhxER6wvx2c/nN5mL/wDyZgjgP7uZjJQ8KXThCJ/vQe2skxe4/sBYrdnwb17QYsTrzkO9MLVCFVHlfKo2QAMiDtN3uVGZZepg7PhZ+79AzL81p44wSHbXXrFkpkIAnDpN4DPkOwUD1ffxhNKF7mZi4yP9fyLOp76t5kKjDBvJma2oDAm0p+PKbGm4J9tcBGzYmk0K2Yr/lRKm8PPMc2d5qA180lFV4qwbGA0b1oMEhMB1qlcPsS547i6dR8poMkQUJUi3be48p7MwWTKkXv5xtHH9cFPl1VbYBSXFf2T3mdUBCE5xAUjwwT4WkiIB9f/oV/SAAzFKoClgKdAsjpcVIZE9TOPJIMgn3uUoBjdd1r3x7Qd0C5zhFz/7JibV4cDNMM2erRDkHXcBTPcmlQ3DE+4FgIkyp5WVVG5/tZh06XHiyFe4+83cWzGPdBcLa3MsGefhYPZGcIYdgPvEKGIit9+j30nApZGgSUp0rbyrxKBR+udF15sjfylgsYHoPankmq5M0QVLAsz86Hi/W/G7sxPM8UeKRfugrYUg2boLGBydKbW+cc+/5EvnMPSiiuucBN15z3Uq5l449hD/d+/fk8zj3I+eznNjZGXP/YGE0O4Tj38eVf/IeXwAwlVgVAekUvzvFkBbNVnqmK99Az8OfVKLNFmLmfStO1Fc+rgqoPjVZlawNMeYn7QRnDc+EFFSUu7gmOaQ0c4eXx/fiAGOJX5vtGyHRvmERb6lgMr6icpZCZ1P9NiL+5V2UA+QBrvWaWlXhrqylEvnCByXXxKKFd4W1GwQ8DYlX0o/KbWO268NZSbjNAfS+02q0ApELM6FFanhKva/ettsW+WkkLVbPCy/eQM77GKe+2SU0rWQEUlXspoEmAnIBgEPox4cV2ENLh17ywQXiGOs/ofWz7QaDEeziF5jyn5DbV87BjYd/1J4A3/XYAgR748ObN4yu/+I/EeE4vuIYAT6opXSC+kBAtKtk1kLTXdBeUr6turfBj6PEz7our9HMtI5I27D3MnNNbPN9diDQB9QxG6fkkL6/CyoseEmhBBhL0G0CapSkNIxwYygATAD2oLine truncated

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

+40
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View File
@@ -0,0 +1,4 @@
#!/bin/bash
POS=$(playerctl -p spotify position)
python -c "print(float($POS*1000000))"
+43
View 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
View 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
View 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
View 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
View 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
View 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
View File
@@ -0,0 +1,2 @@
(include "./Main/eww.yuck")
(include "./Lyrics/eww.yuck")
+13
View 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
View 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
View 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
View File
@@ -0,0 +1,2 @@
[?25l[?80l[?8452lP0;1;0q"1;1;240;360#0;2;14;12;14#1;2;14;16;20#2;2;15;18;22#3;2;16;18;23#4;2;16;19;23#5;2;16;20;23#6;2;23;11;12#7;2;23;15;16#8;2;21;19;21#9;2;24;25;29#10;2;34;15;16#11;2;37;23;23#12;2;45;21;17#13;2;61;23;22#14;2;31;32;35#15;2;43;34;34#16;2;57;32;14#17;2;56;37;32#18;2;45;39;39#19;2;59;41;29#20;2;51;45;46#21;2;56;53;55#22;2;65;39;20#23;2;72;47;23#24;2;68;51;41#25;2;80;51;16#26;2;72;56;51#27;2;81;56;25#28;2;87;56;58#29;2;87;58;60#30;2;70;61;55#31;2;67;64;70#32;2;81;62;41#33;2;80;67;71#34;2;87;62;30#35;2;89;63;65#36;2;88;63;69#37;2;89;66;70#38;2;78;68;71#39;2;80;68;70#40;2;75;70;74#41;2;76;76;83#42;2;90;69;40#43;2;92;75;32#44;2;87;72;76#45;2;87;76;79#46;2;95;71;43#47;2;96;74;32#48;2;96;76;31#49;2;98;76;81#50;2;96;76;31#51;2;99;77;80#52;2;98;77;81#53;2;99;77;80#54;2;97;78;45#55;2;99;77;80#56;2;98;78;81#57;2;99;77;82#58;2;99;78;83#59;2;99;78;83#60;2;90;80;56#61;2;96;81;41#62;2;89;82;85#63;2;97;83;85#64;2;98;82;61#65;2;98;84;84#66;2;98;85;86#67;2;98;86;87#68;2;99;81;83#69;2;99;87;87#70;2;99;87;87#71;2;91;85;89#72;2;98;86;88#73;2;99;87;87#74;2;97;88;53#75;2;97;88;88#76;2;97;88;89#77;2;100;89;89#78;2;98;88;90#79;2;99;88;90#80;2;100;88;90#81;2;96;88;91#82;2;99;88;91#83;2;99;88;91#84;2;100;89;90#85;2;99;90;57#86;2;98;91;89#87;2;98;91;90#88;2;99;92;90#89;2;94;91;94#90;2;98;92;93#91;2;99;92;93#92;2;99;93;93#93;2;98;93;93#94;2;99;93;91#95;2;98;95;95#96;2;98;96;97#97;2;98;97;97#98;2;99;98;99#99;2;99;99;99#100;2;100;100;100#101;2;93;93;93#102;2;71;22;37#103;2;33;33;36#104;2;50;22;19#105;2;62;24;21#106;2;37;20;17#107;2;34;26;27#108;2;77;50;49#109;2;81;52;56#110;2;35;15;17#111;2;36;17;18#112;2;42;31;30#113;2;44;36;35#114;2;81;56;20#115;2;82;56;62#116;2;65;46;31#117;2;74;47;15#118;2;63;38;17#119;2;65;43;23#120;2;23;21;23#121;2;25;26;29#122;2;81;67;70#123;2;80;67;70#124;2;73;61;61#125;2;76;61;50#126;2;92;80;47#127;2;87;80;82#128;2;55;50;50#129;2;57;55;56#130;2;89;69;36#131;2;87;69;72#132;2;20;11;12#133;2;22;12;13#134;2;59;41;23#135;2;59;41;44#136;2;87;56;59#137;2;88;57;56#138;2;86;58;58#139;2;88;58;59#140;2;87;63;27#141;2;88;61;61#142;2;77;73;76#143;2;77;76;81#144;2;70;50;33#145;2;67;51;54#146;2;96;81;39#147;2;96;81;82#148;2;87;62;68#149;2;89;65;69#150;2;13;16;20#151;2;16;16;19#152;2;14;11;13#153;2;13;13;16#154;2;16;18;22#155;2;16;18;23#156;2;50;45;47#157;2;60;45;43#158;2;88;61;65#159;2;90;65;65#160;2;58;31;10#161;2;55;33;38#162;2;65;61;69#163;2;71;65;70#164;2;19;18;23#165;2;23;19;20#166;2;81;61;35#167;2;81;63;66#168;2;85;76;79#169;2;91;76;78#170;2;71;56;45#171;2;70;56;60#172;2;87;66;70#173;2;90;66;70#174;2;45;20;21#175;2;46;25;18#176;2;45;40;41#177;2;54;40;39#178;2;92;75;30#179;2;88;72;72#180;2;95;72;40#181;2;97;72;76#182;2;16;20;23#183;2;56;37;23#184;2;56;37;39#185;2;96;82;85#186;2;97;85;85#187;2;15;19;23#188;2;16;19;23#189;2;80;66;70#190;2;80;67;71#191;2;80;68;70#192;2;80;68;71#193;2;94;92;93#194;2;96;91;93#195;2;14;18;22#196;2;15;18;23#197;2;90;70;75#198;2;87;73;77#199;2;96;74;30#200;2;98;74;79#201;2;87;82;85#202;2;94;82;85#203;2;97;88;51#204;2;99;88;86#205;2;98;94;95#206;2;99;95;95#207;2;99;87;87#208;2;96;88;89#209;2;99;89;89#210;2;99;89;54#211;2;99;90;87#212;2;98;90;92#213;2;98;92;93#214;2;98;76;81#215;2;99;77;81#216;2;99;77;81#217;2;99;78;83#218;2;98;82;53#219;2;98;82;82#220;2;98;84;86#221;2;98;86;86#222;2;99;87;89#223;2;99;87;87#224;2;100;89;89#225;2;100;88;90#226;2;16;19;23#227;2;98;83;84#228;2;98;85;84#229;2;98;90;89#230;2;99;91;89#231;2;98;97;96#232;2;98;98;98#233;2;20;15;16#234;2;26;15;15#235;2;98;76;75#236;2;98;76;78#237;2;97;78;81#238;2;98;78;81#239;2;98;85;88#240;2;98;87;88#241;2;96;88;88#242;2;99;88;88#243;2;99;88;91#244;2;99;89;91#245;2;99;89;91#0!240?$#21!46?_$#129!44?__?__-#18!31?_!18?C$#20!58?O?_$#21!35?O!18?@$#38!33?G!6?AG$#40!51?G$#62!30?O???_!14?G!7?C!5?_$#71!38?A!9?G$#76!46?@$#81!29?O?G???A!18?A!5?G$#87!42?@!6?@$#96!39?O$#97!36?_!13?OO$#98!40?O??_!12?__$#99!37?!4_o_Oo___oo__o___$#124!41?A!10?G$#127!37?O!12?G$#128!34?G!4?G???A!5?A!4?G!5?O$#129!33?A!24?A???G!20?__$#135!32?O!5?G??C??A???A$#142!32?C!26?G$#143!29?G!7?@$#145!37?C!12?A!4?C??G???_$#156!36?@$#161!53?C$#163!27?O???C??A?S!16?@???A?_!5?_$#168!35?C???A??G!10?A??O???C$#171!31?O?_!6?G?A!8?A?G???O$#176!43?C!5?C!9?O?_$#177!30?_?_OOGGGCCC?C?CEEEC??CC?CGGG$#189!29?_!22?A$#190!56?C$#192!61?O$#193!26?_!11?P@!15?O??_$#194!27?_O!12?@???GGG!7?AA??C?G?O_$#201!43?G$#202!32?G$#205!35?_$#208!28?_?G??C??A???@???H@??@???@$#212!50?@@!6?C$#232!42?O??OOO!5?OO$#241!34?C??A$#245!43?@???@!14?O-#18!90?CCC$#20!27?C??@!31?@@?C!4?CC???CCC!9?CC!12?G$#21!16?CC??A!78?@!5?AAA!6?CC!5?O??_$#38!13?_!58?A!16?A!4?O?G!4?C!4?G?_!5?O???_$#40!28?C!38?O$#44!71?A$#62!15?O!48?G??G??A!24?A!23?_$#66!37?CCGK!4C$#71!12?_!5?G!6?A?G??A?@!58?G!9?O?C??_???G!5?O$#72!31?_??_???O$#73!43?I?A$#77!43?!4owooo?G??ooo$#78!33?G!4?A!9?A!14?O_!4?_!7?!4_$#79!36?___?o!7?C!14?_$#81!17?G?CC_?A!6?O?G!4?A!4?@@@!7?A!8?G???O??_!4?_!9?_!13?AAA?AA?C!13?OO___$#82!50?C!19?___?_!6?_$#84!39?_!10?GG!4?G?o$#86!53?_$#87!54?G?C!17?!4@!8?___?_$#88!51?_$#89!15?G$#90!58?C!5?O!27?__$#91!55?C$#93!36?A!18?AA???C!3Line truncated
[?25h
+19
View File
@@ -0,0 +1,19 @@
[?25l ▂▃▅▆▅▃▃▃▃▃▂▁ 
▆▇┈▁┎┊▁▁▁▁▁▁▁▇▅▃ ▁▁  
▃▄▄▗▎▌┈▝▗╴▇▇▉▆▗▄▂▁┈▇▄  
▁▁╷▁▚╱▏╶▍▋▏ ▆▏▝▗▊▂▂┊▝▂ 
▇▗▁▋▄▉▄▅▅▉▅▄▄▃▁▊▁▆▂▅▄▃┈▎
┊╴┈▇▘╵▗╹╷ ┊ ▇▇▅▂▍▂▂▁▄ 
╻┊╹▅─┌╹┊╴▄▄┈╱▁▉▏ ▇╿╷▇┊▍ 
╴┌▏▁╱╴▂▂╸▇╶╱┊╵╻▌▃╴│└▏╵▌ 
▝▊▃▄▅▉━▏▁┗┈╷╌▁▁╸╶▏┃▊▝▅▉▖
╴▏▌▇▝▉▇▇▇▆╵▝▖▃▗┻▖▁╸╴▆▇▅▇
╶╴▝▃▃▘▇▁▂▁▘▎╺▆▌▇╏╱┈▘▝┌▉▅
▝╻▂▂▏╷┌───┊┋▁▅▅┌╴╸╴▝▊╹▉ 
╴┎╸╍▇ ┈┈╶┹╲▁▁┊┊▅▍ 
╼╴╷▄┈ ┈╶▁▂▉╶▖▍ 
▍▗▏ ╷┎━━▂╷╷▃╺━╾╷ ▝▆▂▃▄  
▍▌▎╌╺╴ ┍▉▍▊┃▉▏ ╵┈╵┕╴▅▃▂ 
▝▋▝┈▁┊ ┊▅▅▄▄▆ ▉▎▂╶╸▝
╺┊┙▇╷▇╶╴ ▁╷┈▂▎▅▂▃▄
[?25h
Binary file not shown.

After

Width:  |  Height:  |  Size: 736 KiB

+2
View File
@@ -0,0 +1,2 @@
[?25l[?80l[?8452lP0;1;0q"1;1;200;258#0;2;0;0;0#1;2;0;7;20#2;2;18;8;4#3;2;7;22;36#4;2;26;23;21#5;2;40;22;7#6;2;43;27;10#7;2;28;37;43#8;2;47;33;17#9;2;50;33;16#10;2;52;43;33#11;2;57;39;24#12;2;59;43;28#13;2;61;46;30#14;2;65;47;32#15;2;53;50;46#16;2;66;50;34#17;2;67;49;34#18;2;67;51;35#19;2;69;50;34#20;2;69;51;35#21;2;69;52;35#22;2;69;52;37#23;2;71;52;36#24;2;71;53;36#25;2;72;52;36#26;2;71;53;36#27;2;57;53;49#28;2;70;53;36#29;2;70;54;36#30;2;70;54;37#31;2;70;53;36#32;2;70;54;37#33;2;71;53;36#34;2;70;54;36#35;2;71;54;36#36;2;71;54;37#37;2;71;53;36#38;2;71;54;36#39;2;72;53;36#40;2;71;54;37#41;2;71;54;37#42;2;72;53;36#43;2;72;53;36#44;2;72;54;37#45;2;72;53;36#46;2;72;54;37#47;2;49;54;58#48;2;58;66;73#49;2;71;54;37#50;2;71;62;52#51;2;72;55;38#52;2;72;56;39#53;2;73;71;71#54;2;74;74;75#55;2;76;58;43#56;2;80;63;46#57;2;82;69;52#58;2;90;70;56#59;2;74;74;74#60;2;75;75;74#61;2;82;75;63#62;2;94;74;58#63;2;96;73;59#64;2;98;75;61#65;2;99;76;61#66;2;98;76;61#67;2;99;76;61#68;2;99;76;61#69;2;99;76;62#70;2;99;76;61#71;2;100;76;62#72;2;76;80;82#73;2;93;81;58#74;2;96;79;61#75;2;95;82;59#76;2;100;76;62#77;2;86;88;88#78;2;96;86;70#79;2;98;87;68#80;2;99;91;67#81;2;100;92;68#82;2;100;92;68#83;2;100;92;68#84;2;100;92;67#85;2;100;92;67#86;2;96;92;77#87;2;100;92;69#88;2;100;93;67#89;2;97;93;76#90;2;100;93;67#91;2;99;94;74#92;2;93;93;93#93;2;57;74;93#94;2;71;54;37#95;2;53;57;61#96;2;54;68;82#97;2;5;9;16#98;2;27;11;3#99;2;47;30;13#100;2;47;39;31#101;2;73;57;40#102;2;73;63;47#103;2;49;36;25#104;2;51;34;17#105;2;0;0;0#106;2;0;8;22#107;2;74;74;73#108;2;76;59;41#109;2;76;75;75#110;2;79;75;70#111;2;92;72;61#112;2;74;74;74#113;2;24;18;15#114;2;21;26;32#115;2;52;36;19#116;2;52;41;27#117;2;40;27;16#118;2;45;27;10#119;2;82;66;50#120;2;82;69;54#121;2;10;21;32#122;2;9;27;43#123;2;87;69;53#124;2;92;71;57#125;2;39;20;5#126;2;41;24;9#127;2;21;35;47#128;2;43;36;27#129;2;94;74;58#130;2;96;73;59#131;2;57;38;23#132;2;57;40;25#133;2;77;79;83#134;2;91;80;58#135;2;92;73;57#136;2;94;74;59#137;2;96;80;65#138;2;93;85;71#139;2;57;43;26#140;2;60;43;26#141;2;98;79;63#142;2;100;76;62#143;2;78;62;44#144;2;82;63;50#145;2;0;0;0#146;2;70;52;36#147;2;69;52;37#148;2;65;47;31#149;2;65;48;33#150;2;66;49;34#151;2;66;50;34#152;2;71;52;36#153;2;71;52;36#154;2;74;73;74#155;2;74;74;75#156;2;95;83;60#157;2;96;85;66#158;2;72;53;36#159;2;72;53;37#160;2;70;53;36#161;2;70;54;36#162;2;67;49;34#163;2;67;50;34#164;2;69;52;35#165;2;70;52;35#166;2;52;53;54#167;2;70;53;36#168;2;99;91;68#169;2;60;46;31#170;2;62;47;32#171;2;67;50;35#172;2;67;52;35#173;2;71;53;36#174;2;42;54;64#175;2;70;54;37#176;2;98;90;69#177;2;99;91;68#178;2;51;51;50#179;2;65;50;34#180;2;71;52;36#181;2;71;52;36#182;2;70;53;36#183;2;70;54;37#184;2;71;54;36#185;2;71;54;37#186;2;72;53;36#187;2;72;53;36#188;2;72;55;39#189;2;73;56;39#190;2;99;76;61#191;2;99;76;62#192;2;94;81;57#193;2;94;82;58#194;2;97;87;74#195;2;98;88;65#196;2;69;50;34#197;2;69;50;34#198;2;71;53;36#199;2;72;52;36#200;2;71;53;36#201;2;70;53;36#202;2;70;53;36#203;2;70;54;37#204;2;71;53;36#205;2;71;54;37#206;2;72;54;36#207;2;72;54;37#208;2;72;53;36#209;2;72;54;37#210;2;71;54;37#211;2;71;55;37#212;2;71;65;58#213;2;72;55;38#214;2;75;74;75#215;2;75;75;74#216;2;97;75;61#217;2;98;75;61#218;2;99;76;61#219;2;99;76;62#220;2;93;80;56#221;2;93;81;56#222;2;100;92;67#223;2;100;92;67#224;2;100;92;67#225;2;99;93;69#226;2;93;95;97#227;2;69;51;34#228;2;69;51;36#229;2;72;53;36#230;2;96;80;60#231;2;96;79;61#232;2;100;92;67#233;2;100;92;68#234;2;100;93;67#235;2;96;93;81#236;2;96;93;81#0!200?$#4!45?_!6?O!37?OO$#10!47?_!9?!4O!24?_!13?_$#13!87?_$#15!48?_!19?O$#50!66?OO$#57!91?__?_$#82!60?!5_$#100!56?O$#101!51?_!36?_!8?_$#102!63?O!6?_!18?_!5?__$#113!92?OOO!6?_$#117!53?O!18?_!11?_!15?_$#119!52?_!11?OO!24?_$#120!93?_$#128!46?_!7?OO!13?O$#134!53?_!15?_$#147!98?_$#156!55?_!12?_$#169!61?O!24?_$#175!49?__!11?O$#177!67?_$#179!71?_$#195!56?_$#221!54?_$#222!58?__$#223!57?_$#225!65?__-#4!38?A??@!32?@!35?A!11?_$#10!30?_???G!74?A$#57!33?O!73?A$#75!78?C$#80!48?@!55?A!7?G???O??_$#81!43?_$#82!39?G_??G???OGgw???@!5?D??@@!4?@!5?O??Oo_?WAaqSSE?`@ACBQAA?__aqE??C!5?O??O$#87!34?___o???c[O[W[?OO?C!10?@!17?C?E[[CGGGB!6?[OQW[O$#88!48?A??A???_``p!4_?CC?D!7?G!5?O!14?@!10?CK?W$#90!35?OO??OO!16?O?O!4?O!15?O!30?G??O$#100!75?A!5?@$#102!35?G!8?@!31?CC?A???@!19?@!4?A??C???G??O$#113!29?_?O!74?@$#116!116?G??O$#117!78?A$#119!74?A$#120!38?C??A???@!34?A!21?@!11?G$#123!72?@$#128!36?C??A??@!62?@!7?C$#134!31?_!4?G!9?@!37?@!16?@!4?A???C!6?O??_$#156!42?A!32?C!24?@!12?G$#157!34?O!4?C!7?@!57?A$#169!32?O!7?A??@!60?@$#172!37?C$#175!82?@!38?_$#176!109?C$#177!32?_!7?C!38?C!6?@$#179!73?@!38?C$#195!43?A!27?@?A!7?A???@!13?@$#222!38?o_???C_a_KcDFx\|[CCCANADECaqqOw{}}{{w_oog??_?_???ao{[{|z{k__`AA??WW[G??!4_O??__$#223!44?A??a!4?AAaAAIK??A???@LGAA??A!7?GG_!4?@!9?@!8?owoW?O$#225!33?_???GG$#232!63?A!6?@!10?C!6?@!15?C$#233!42?_??C!22?@!16?G!4?AA!5?KKC?KK$#234!40?GW!4?A??A??_??XW???WWWwGG?aC!5?C?GG?G!6?a!8?@!7?___!7?___??_-#4!24?C$#8!131?O$#10!26?A?@$#15!22?O$#56!88?A$#57!83?C$#61!29?@$#73!57?___!29?A$#75!56?_???__$#80!51?_!27?G!10?C!12Line truncated
[?25h
+14
View File
@@ -0,0 +1,14 @@
[?25l ▂▄▆▆▆▅▆▆▅▄▃▁ 
▄▆▖╼┌┊┊▇┊▆▅▖▃┈▅▖ 
▄┏▘╴▎┫┊╈╴▘┈▇▘▇▄┈▝  
▌▘╵▏╶▃▆▏┈╻┎┊▝┊▋▝┈▝  
┈╻┊▂▄▄▄▏▎▅▋╹╵╹╴╻▌╴▋ 
┖┊╴▂▂▁▇▏▖▖╴▊┊▝▂▌▊▏▊ 
▄▚▗▅▇╹┈╹╴▎▘▅▏▏▍▋▌▏▋ 
▏▋▇╾▄ ▃▇▉▁▇▆▊╴┊▗▘▊▍ 
┊▎ ┈ ┈ ╶▅╴▘▏▎╶╷┊▗  
╽┊▉ ┈ ╴╴┊▅▇┉╻╴┈▘ 
▋╴╴┈ ┈ ┊▗▘╴┈▗╽╴▘ 
▋┊╶▁▂╺┈╴▆▃╷▅┏▘▉▗  
▗▆▆▖▉╴╵▅▅▆┃▉▍┇▗  
[?25h
+2
View File
@@ -0,0 +1,2 @@
[?25l[?80l[?8452lP0;1;0q"1;1;280;420#0;2;0;0;0#1;2;0;1;6#2;2;17;7;7#3;2;15;16;18#4;2;10;24;37#5;2;33;18;6#6;2;33;23;14#7;2;7;28;43#8;2;34;30;22#9;2;43;28;10#10;2;43;36;26#11;2;51;33;18#12;2;53;38;18#13;2;53;42;28#14;2;61;44;29#15;2;47;49;50#16;2;63;47;32#17;2;64;47;32#18;2;65;49;34#19;2;67;49;34#20;2;67;50;34#21;2;67;51;34#22;2;67;51;36#23;2;69;51;35#24;2;70;52;35#25;2;70;52;36#26;2;72;52;36#27;2;70;53;36#28;2;72;53;36#29;2;52;54;55#30;2;70;54;36#31;2;70;53;36#32;2;70;54;37#33;2;71;53;36#34;2;70;54;36#35;2;71;54;36#36;2;71;54;36#37;2;71;54;37#38;2;72;53;36#39;2;71;53;36#40;2;71;54;37#41;2;72;53;36#42;2;72;54;37#43;2;72;54;37#44;2;72;54;38#45;2;72;54;39#46;2;53;55;56#47;2;71;55;37#48;2;72;55;37#49;2;72;56;39#50;2;63;61;54#51;2;72;59;41#52;2;58;73;89#53;2;72;73;74#54;2;75;57;41#55;2;79;61;46#56;2;81;65;49#57;2;83;69;53#58;2;74;74;74#59;2;74;75;75#60;2;76;75;75#61;2;86;75;58#62;2;94;72;58#63;2;96;73;59#64;2;96;75;60#65;2;99;75;61#66;2;98;76;61#67;2;99;76;61#68;2;100;76;62#69;2;98;76;61#70;2;99;76;62#71;2;73;78;82#72;2;91;78;56#73;2;92;79;56#74;2;92;80;56#75;2;100;76;62#76;2;99;76;62#77;2;96;79;62#78;2;100;77;63#79;2;84;87;89#80;2;94;83;59#81;2;96;83;62#82;2;98;88;72#83;2;100;90;67#84;2;100;92;68#85;2;100;92;68#86;2;100;92;67#87;2;100;92;67#88;2;94;92;83#89;2;100;92;69#90;2;100;93;67#91;2;97;93;77#92;2;100;93;67#93;2;99;94;75#94;2;93;93;93#95;2;39;25;11#96;2;10;27;41#97;2;26;20;18#98;2;37;18;3#99;2;74;58;41#100;2;74;57;40#101;2;1;2;5#102;2;14;7;5#103;2;100;93;68#104;2;91;94;96#105;2;54;63;74#106;2;67;60;44#107;2;35;38;40#108;2;43;28;12#109;2;44;31;14#110;2;43;37;31#111;2;15;20;24#112;2;12;25;36#113;2;82;74;59#114;2;87;75;57#115;2;45;39;32#116;2;51;34;19#117;2;0;0;0#118;2;0;1;9#119;2;77;72;70#120;2;74;74;74#121;2;14;16;23#122;2;16;18;19#123;2;28;27;22#124;2;27;31;36#125;2;79;63;46#126;2;81;65;47#127;2;56;41;23#128;2;54;42;29#129;2;70;79;90#130;2;80;78;73#131;2;76;58;43#132;2;77;61;43#133;2;90;73;55#134;2;94;71;58#135;2;100;77;63#136;2;84;88;90#137;2;93;80;57#138;2;99;76;62#139;2;96;79;60#140;2;94;81;59#141;2;100;77;63#142;2;55;43;32#143;2;61;45;30#144;2;96;83;62#145;2;98;86;71#146;2;34;22;9#147;2;41;23;7#148;2;51;38;21#149;2;55;38;21#150;2;71;70;71#151;2;73;72;73#152;2;63;47;33#153;2;64;47;32#154;2;67;51;36#155;2;67;52;36#156;2;49;53;60#157;2;69;53;36#158;2;98;89;74#159;2;100;89;67#160;2;0;0;0#161;2;75;75;75#162;2;76;75;74#163;2;65;48;33#164;2;65;49;34#165;2;70;52;34#166;2;70;52;36#167;2;72;55;38#168;2;72;55;39#169;2;62;46;31#170;2;63;47;32#171;2;69;50;35#172;2;69;51;35#173;2;82;68;54#174;2;85;69;53#175;2;74;74;74#176;2;74;74;75#177;2;94;82;58#178;2;94;82;58#179;2;67;50;34#180;2;67;52;33#181;2;70;54;36#182;2;94;74;58#183;2;96;75;61#184;2;55;47;36#185;2;61;47;32#186;2;66;49;35#187;2;67;49;34#188;2;71;54;37#189;2;72;53;36#190;2;72;54;38#191;2;72;54;38#192;2;50;55;60#193;2;69;55;37#194;2;70;55;37#195;2;71;54;37#196;2;56;73;93#197;2;70;70;70#198;2;98;75;61#199;2;99;76;61#200;2;92;79;56#201;2;92;80;55#202;2;100;92;69#203;2;100;92;67#204;2;100;92;69#205;2;100;93;67#206;2;69;52;36#207;2;71;52;36#208;2;71;54;37#209;2;71;54;37#210;2;71;54;37#211;2;72;53;36#212;2;99;76;62#213;2;98;76;61#214;2;90;78;56#215;2;91;78;56#216;2;100;92;68#217;2;67;49;33#218;2;67;50;34#219;2;71;52;36#220;2;72;52;36#221;2;70;53;36#222;2;72;53;36#223;2;72;53;36#224;2;70;53;36#225;2;70;54;36#226;2;70;54;37#227;2;70;54;36#228;2;72;53;36#229;2;71;55;37#230;2;72;58;41#231;2;70;67;64#232;2;94;72;59#233;2;96;73;59#234;2;98;76;61#235;2;98;76;61#236;2;99;76;62#237;2;91;79;57#238;2;92;78;56#239;2;94;83;59#240;2;94;83;59#0!255?!25?-#8!62?O???G!6?C!15?AA!14?G?O!19?C!12?C!10?O!4?_$#10!74?C!16?A!24?_??O!12?!8C!5?G!9?_$#13!120?O!4?G!24?O???_$#14!126?G$#18!99?C!49?O$#29!98?A$#51!84?CCC!18?O!46?_$#56!63?_!24?C!33?O!6?G$#57!76?G!12?C!40?GG!5?G!13?_$#61!90?C!44?GG$#81!65?_!4?O!8?G!20?G??O!16?_$#83!71?O!33?_!19?O!14?OOO!6?_$#84!66?_!6?!6O_!5?O!5?_oo??OO?__???_!17?_!5?_!9?o$#85!99?O??O!28?__$#86!69?__!11?WO!13?_!41?__$#87!78?_OOO??O!7?G!5?O$#89!72?O!13?O??GWW??WO!4?OO!28?_??oO$#92!83?G!57?_??_$#97!65?G!18?A!36?G!4?C!19?G!5?O$#103!84?GG!51?_!4?_$#106!67?O!4?GG!7?CCC!56?GGG!4?OO$#110!59?_!39?A!22?G$#113!97?C!20?_$#114!106?_!25?GGG!10?O$#115!60?_??O???GGG!22?A!35?C?CC$#123!72?C!12?!4A!26?_??O$#125!102?G!25?G!10?G!6?O$#126!75?G$#128!75?CC!31?_!20?C$#132!74?G!12?C!10?C$#140!96?C!47?O$#142!64?O!35?C!23?G!19?G$#144!94?CC!54?_$#155!62?_!8?G!8?C!22?G!17?O$#159!80?G!18?G!21?_??O?OO!15?O$#164!107?_$#173!68?O!69?G$#174!104?O$#184!61?_!8?G!6?CCC!13?!5A???CC?G?O!16?G!19?G$#185!65?O!87?_$#193!66?O!50?_!9?G$#202!98?G!30?_$#203!71?__?!4_???g!8_!4?___?_???__!21?___!6?__$#204!67?__!17?GWW!6?GGG!25?__!4?!4O??OOO!7?!4_$#205!73?_!6?_!8?O_??G!7?_!37?O???_$#214!69?O!7?G!13?C!31?O$#216!128?O!7?_$#237!64?_!27?C!8?G$#239!93?C!25?_$#240!78?G-#6!170?G$#8!51?C!4?@!56?@$#10!47?O!6?A??@!108?C$#13!109?@!59?G??O$#18!158?@??A$#51!168?G??O$#56!108?@!64?_$#57!113?A?@!47?C!6?O$#61!57?A??@!98?A$#81!111?C!42?@!17?_$#83!112?C!4?@!43?C$#84!51?O!12?!4_MKkKkk!10?@@@F@!4?@!15?OO?OOSO?A?k``_?AQqaA?W_cdEE@XX!Line truncated
[?25h
+22
View File
@@ -0,0 +1,22 @@
[?25l  ▁▃▄▅▅▅▄▃▄▅▄▄▃▁  
▃▆▂▃▄▅▅▅▃▄▄▃▁╾▁┈▇▅▃  
▄▇▄▚▆▄╺▇┈▚ ╶▎▆┊┈▄┓▄▁▋▆▄  
▗▘▅▘┌╴▎▁ ┊┈┊▃▅━┈╴▝▎▝▅▖▏▝▖ 
▏▘▘╶▘▗┳┓▁▃▌▇╴▖╶▆╷▇▇▋▝┓▝┈┈▖  
▊▘╶╴▇╴▗┈╴▇▎╴╴▝━━╶▏▖┗▋▝▖▖▖▆▝ 
┊▁╹▎╷▁▄▄▄▄▎▉▏▆┵▋┍┈╻▄▇╴▚▝▏╴┊▎
▍▉▏▉▘ ┈▇▆▅╿┧╻▆╺╸╹▖╵▏╸▘▋▏▍▏┊▌
▆▊▗▁╼▄▇▆▖ ▋▍▝┈▘╻▄╿╷━╺▆▊▎▌▎▍▍
▗▉▚▘▘▆▇▋▇ ▋┈ ┖╻▏┈▌┨▃▋╼▊▏▚┈▌▏
┲┉╹▉▂━▂▏▅▁▇▄ ▝╺▆▅╽┕▏▏╴▝▝┊╴▊ 
┈╴▏╿╴╻┈▆ ▖▝▗▆▆▋▋▉▏▃╴╱╸╺▋▘ 
▗┚ ▗▗▇ ┈┈  ╺▃▂▘▘▃▎┈╴╱┈┊▗  
╶▏ ▌▍ ┊╵▇▇▗▘┊╴╴╶┊▖▉▘ 
╹╸╶┊▝ ┈ ▋▋╴▘┊╵▉┈╱╵▘▋▘ 
▎▝┐╵╸▁▂ ▁┈▁▂▘┄╴▅╴▚▎▏▁▌ 
▊┊┊╺┒▁▂╷╸▆┌▇╴▝▋╽▆╴┏▊╺▉▗▍ 
╴▃▅▄▂▇▇▎┊╴┊▅▃▄▊▁▃▊▘╶▋▗  
▖▍▉╴╷▖▗┈╱▆▄▅▁▁╶▘▗▌▏│▊▍   
▝▋▗▌▏┊▖╴┈▃▂▌▁▇╶┕┈▊▌└┊▌   
┉▝▉▌▎▖▋▝╺┊╷╸▇▅▄┊▊╱▊▊▏╴▖   
[?25h
Binary file not shown.

After

Width:  |  Height:  |  Size: 645 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 738 KiB

+2
View File
@@ -0,0 +1,2 @@
[?25lP0;1;0q"1;1;288;308#0;2;1;2;3#1;2;2;4;7#2;2;0;3;14#3;2;5;6;5#4;2;4;7;9#5;2;3;9;14#6;2;4;10;20#7;2;0;9;28#8;2;4;13;19#9;2;3;16;25#10;2;2;15;34#11;2;2;19;38#12;2;5;22;17#13;2;4;20;28#14;2;4;22;31#15;2;4;25;43#16;2;7;9;9#17;2;8;10;14#18;2;11;12;11#19;2;10;13;16#20;2;9;15;21#21;2;9;16;26#22;2;7;16;34#23;2;11;19;23#24;2;9;20;28#25;2;10;22;32#26;2;7;22;42#27;2;10;25;21#28;2;9;26;32#29;2;10;27;40#30;2;12;10;10#31;2;14;15;16#32;2;14;17;20#33;2;13;18;25#34;2;14;19;17#35;2;15;19;22#36;2;15;21;27#37;2;15;22;31#38;2;16;25;29#39;2;16;26;33#40;2;16;29;39#41;2;14;26;47#42;2;15;32;26#43;2;16;32;40#44;2;17;33;45#45;2;16;34;53#46;2;15;38;44#47;2;20;21;22#48;2;20;23;27#49;2;19;24;31#50;2;21;25;21#51;2;21;25;29#52;2;22;28;33#53;2;21;29;38#54;2;24;30;45#55;2;20;31;29#56;2;23;33;35#57;2;21;32;40#58;2;21;34;45#59;2;20;34;53#60;2;24;35;56#61;2;25;37;35#62;2;27;41;39#63;2;22;38;49#64;2;22;40;60#65;2;22;42;66#66;2;23;43;70#67;2;21;45;50#68;2;25;42;63#69;2;22;44;66#70;2;25;23;23#71;2;27;27;23#72;2;27;27;29#73;2;25;29;32#74;2;25;30;37#75;2;30;32;29#76;2;28;32;34#77;2;28;34;39#78;2;27;35;45#79;2;29;38;45#80;2;28;40;52#81;2;27;41;59#82;2;30;44;41#83;2;27;44;53#84;2;27;44;65#85;2;26;44;70#86;2;31;48;76#87;2;30;55;60#88;2;30;51;75#89;2;29;61;69#90;2;33;34;34#91;2;33;36;38#92;2;34;41;35#93;2;34;38;40#94;2;35;40;45#95;2;35;41;51#96;2;35;47;45#97;2;35;44;52#98;2;33;47;58#99;2;35;49;72#100;2;35;52;50#101;2;32;52;60#102;2;38;55;63#103;2;35;54;73#104;2;35;54;78#105;2;34;59;66#106;2;34;58;71#107;2;33;63;68#108;2;35;65;73#109;2;38;36;35#110;2;40;41;36#111;2;39;40;41#112;2;39;42;45#113;2;43;44;32#114;2;40;44;40#115;2;41;45;47#116;2;41;46;52#117;2;42;48;57#118;2;38;48;65#119;2;41;50;42#120;2;39;50;49#121;2;40;52;51#122;2;40;52;60#123;2;40;53;72#124;2;39;54;77#125;2;38;54;81#126;2;41;56;54#127;2;40;58;66#128;2;39;60;70#129;2;40;61;77#130;2;40;64;70#131;2;40;65;80#132;2;43;69;72#133;2;41;72;83#134;2;43;75;85#135;2;42;80;90#136;2;44;42;41#137;2;45;45;41#138;2;46;47;47#139;2;46;49;51#140;2;49;51;43#141;2;47;52;48#142;2;47;51;52#143;2;47;52;58#144;2;46;55;64#145;2;45;54;73#146;2;47;59;57#147;2;47;58;66#148;2;45;58;71#149;2;48;64;63#150;2;45;65;72#151;2;47;68;83#152;2;47;71;77#153;2;47;78;85#154;2;46;79;90#155;2;46;81;93#156;2;50;50;49#157;2;52;52;53#158;2;52;54;57#159;2;50;55;63#160;2;54;57;54#161;2;53;57;59#162;2;53;59;65#163;2;54;61;70#164;2;52;63;60#165;2;53;66;65#166;2;52;64;73#167;2;54;69;67#168;2;52;72;79#169;2;53;72;90#170;2;52;77;85#171;2;52;78;90#172;2;54;78;94#173;2;50;81;92#174;2;56;50;48#175;2;57;56;56#176;2;58;59;59#177;2;58;61;64#178;2;58;63;60#179;2;59;64;65#180;2;60;65;71#181;2;59;67;75#182;2;58;70;65#183;2;60;71;70#184;2;60;70;76#185;2;57;76;83#186;2;58;81;90#187;2;58;83;98#188;2;63;61;61#189;2;63;64;61#190;2;64;65;65#191;2;64;67;70#192;2;65;72;65#193;2;66;69;72#194;2;66;71;77#195;2;65;73;82#196;2;66;76;66#197;2;63;76;69#198;2;67;75;79#199;2;67;76;85#200;2;67;79;89#201;2;68;81;91#202;2;69;68;67#203;2;70;72;67#204;2;71;71;72#205;2;70;73;77#206;2;69;74;82#207;2;72;77;61#208;2;71;77;66#209;2;73;77;70#210;2;71;76;79#211;2;72;78;85#212;2;71;79;89#213;2;72;80;95#214;2;74;81;85#215;2;72;82;92#216;2;73;83;94#217;2;75;74;63#218;2;75;74;73#219;2;76;77;65#220;2;77;77;72#221;2;77;78;78#222;2;76;80;84#223;2;76;80;89#224;2;80;81;77#225;2;78;82;85#226;2;78;84;91#227;2;78;86;95#228;2;80;87;93#229;2;80;88;96#230;2;85;76;71#231;2;83;79;78#232;2;83;82;80#233;2;86;84;74#234;2;83;84;85#235;2;83;86;90#236;2;87;87;87#237;2;84;89;91#238;2;84;90;96#239;2;83;94;92#240;2;86;94;98#241;2;93;83;78#242;2;90;85;84#243;2;90;89;79#244;2;91;89;85#245;2;90;90;91#246;2;89;92;96#247;2;94;93;94#248;2;91;95;99#249;2;98;87;85#250;2;97;89;85#251;2;97;91;90#252;2;97;94;86#253;2;99;96;92#254;2;96;98;98#0!255?!33?----#175!182?_???_$#221!185?_$#232!184?_$#234!183?_-#0!184?G?C$#1!184?C$#16!183?A??AO$#17!187?_$#18!185?A$#32!186?G$#34!180?O$#35!184?O$#47!181?C$#50!183?C$#70!183?@$#75!183?G$#76!181?G$#82!187?G$#90!181?A$#111!185?@$#138!178?_$#139!186?@$#143!179?_$#156!186?O$#157!188?g$#165!180?G$#175!187?@$#176!185?C??O$#177!184?A??A$#188!180?C$#189!187?C$#190!180?A$#202!179?O$#205!180?_$#214!183?_$#218!181?O$#222!182?O$#223!182?_$#224!181?@$#225!185?W_$#234!185?_$#235!181?_??_$#236!183?O$#237!184?@$#247!182?@$#248!182?G$#254!182?E-#0!82?O!105?A$#1!177?GA$#3!89?_$#16!82?G?G_??O!100?O$#17!81?__!106?G$#27!188?C$#31!87?G$#32!176?_$#34!84?C!91?O$#35!188?@$#50!190?_$#56!178?C$#76!177?C!9?@$#92!175?_$#93!85?O!103?_$#94!177?O$#109!189?C$#111!179?@$#116!83?_$#136!83?A!92?G$#141!90?_$#142!178?@$#157!80?O???O??O!102?O$#158!188?G$#160!176?C$#165!88?_$#174!80?_$#175!83?C$#176!82?A$#179!175?O$#180!189?A$#184!186?_$#188!85?A$#189!81?S$#190!88?G$#191!185?O$#202!86?G??O$#203!191?_$#204!177?A!9?A$#205!179?A$#210!186?O$#214!86?_!94?C??@???O$#215!179?_$#216!178?_?OQ?kQ$#218!83?O??C!103?G$#222!180?@$#223!179?S??D?_a$#224!82?C$#225!183?@C$#226!178?GGe`wO$#227!185?@$#228!183?A?GC$#229!180?G!5?A$#232!85?G$#234!84?A$#235!177?_???GA?GC$#237!187?G$#238!178?O!7?G_$#239!87?_$#245!186?@$#246!187?O_$#247!83Line truncated
[?25h
+12
View File
@@ -0,0 +1,12 @@
[?25l  
 ▗▄▂ ▗▆  
 ▋╻╲▆▄▂▂▃┈╺▝  
 ▋╴╴▄╵┊▅╌▏▉▏▝  
 ▗▏╴╹▏▇╵╴╵╻▇╸▝▖ 
  ╼╴╷▁▁╴╺▁▁▂▏▆┊╴▊  
 ▍╴╵▊▃▎ ▋▄▇╸╱╲╹▂▆  
  ▃▖╴┈╵▆╵╶▗▖╴▄▆▄╾╼▌ 
  ▋╷┈┊╴╷╷▂╴╴▅▝▁▁▃▊▇▎ 
▄▃▁╶╼▅▅▅▄▄▄▄▅▅▅▁▁▁▂╸▆▆ 
  ▇  
[?25h
+2
View File
@@ -0,0 +1,2 @@
[?25lP0;1;0q"1;1;280;300#0;2;1;2;3#1;2;1;4;7#2;2;1;4;13#3;2;5;7;5#4;2;4;7;9#5;2;3;8;14#6;2;2;9;19#7;2;1;13;33#8;2;3;13;11#9;2;4;13;20#10;2;5;16;26#11;2;5;15;36#12;2;7;19;20#13;2;4;20;29#14;2;7;9;9#15;2;8;10;14#16;2;6;11;22#17;2;9;13;10#18;2;10;13;16#19;2;9;15;20#20;2;9;16;25#21;2;12;18;23#22;2;10;20;27#23;2;9;22;32#24;2;10;21;41#25;2;10;26;25#26;2;10;26;33#27;2;10;27;45#28;2;11;31;33#29;2;12;10;10#30;2;14;15;16#31;2;14;17;20#32;2;15;19;16#33;2;15;20;22#34;2;15;21;27#35;2;15;23;32#36;2;17;24;40#37;2;14;30;25#38;2;17;25;29#39;2;16;27;34#40;2;14;28;39#41;2;15;28;47#42;2;16;32;41#43;2;17;33;46#44;2;13;32;51#45;2;14;38;46#46;2;18;37;56#47;2;20;19;17#48;2;20;21;22#49;2;20;23;27#50;2;19;23;31#51;2;22;25;23#52;2;22;25;29#53;2;22;28;33#54;2;21;29;39#55;2;22;33;33#56;2;21;33;40#57;2;21;34;45#58;2;21;38;34#59;2;21;39;47#60;2;22;40;52#61;2;22;40;60#62;2;22;42;66#63;2;23;43;70#64;2;23;44;61#65;2;22;43;66#66;2;25;24;23#67;2;27;27;28#68;2;25;29;32#69;2;29;32;33#70;2;29;34;39#71;2;28;35;46#72;2;28;40;39#73;2;29;38;45#74;2;27;40;52#75;2;26;41;59#76;2;25;41;64#77;2;27;44;41#78;2;29;46;47#79;2;27;44;52#80;2;28;46;58#81;2;26;45;65#82;2;26;44;70#83;2;30;49;76#84;2;29;52;54#85;2;30;51;61#86;2;30;55;69#87;2;29;61;69#88;2;31;30;29#89;2;33;34;34#90;2;33;36;39#91;2;32;35;44#92;2;37;37;30#93;2;38;37;36#94;2;34;38;41#95;2;34;40;45#96;2;34;41;52#97;2;32;44;60#98;2;33;44;42#99;2;35;47;46#100;2;36;45;54#101;2;34;46;58#102;2;35;48;70#103;2;37;51;49#104;2;33;52;62#105;2;34;54;76#106;2;32;57;59#107;2;34;60;66#108;2;34;59;71#109;2;38;63;67#110;2;35;65;73#111;2;39;40;41#112;2;40;42;44#113;2;41;45;47#114;2;41;47;52#115;2;41;49;59#116;2;39;47;63#117;2;40;52;51#118;2;41;51;59#119;2;38;53;65#120;2;40;53;72#121;2;39;54;77#122;2;38;54;81#123;2;43;57;54#124;2;41;58;60#125;2;40;58;66#126;2;40;59;70#127;2;43;55;74#128;2;39;64;73#129;2;41;67;83#130;2;43;70;72#131;2;42;72;83#132;2;43;80;91#133;2;46;44;42#134;2;46;47;47#135;2;45;49;51#136;2;49;51;41#137;2;49;50;48#138;2;47;51;53#139;2;47;52;58#140;2;48;54;63#141;2;46;58;58#142;2;48;57;65#143;2;45;58;71#144;2;48;63;60#145;2;45;65;70#146;2;45;66;77#147;2;47;72;77#148;2;47;74;89#149;2;47;78;86#150;2;46;79;91#151;2;45;80;93#152;2;51;83;95#153;2;52;53;46#154;2;52;52;53#155;2;51;54;58#156;2;50;58;55#157;2;54;57;60#158;2;53;59;64#159;2;53;61;70#160;2;53;64;61#161;2;53;67;65#162;2;54;63;70#163;2;52;65;77#164;2;54;69;67#165;2;52;71;78#166;2;52;73;83#167;2;52;74;90#168;2;52;78;85#169;2;52;78;91#170;2;55;83;92#171;2;57;52;52#172;2;58;58;54#173;2;58;59;60#174;2;58;61;64#175;2;59;64;61#176;2;59;64;65#177;2;60;65;71#178;2;59;67;76#179;2;58;70;65#180;2;60;70;70#181;2;61;69;76#182;2;60;75;69#183;2;58;75;78#184;2;58;77;85#185;2;57;79;90#186;2;63;62;61#187;2;65;65;65#188;2;64;67;70#189;2;67;70;61#190;2;65;71;65#191;2;66;70;72#192;2;66;72;77#193;2;66;73;82#194;2;66;76;66#195;2;64;76;70#196;2;67;76;80#197;2;67;76;85#198;2;67;79;89#199;2;68;81;92#200;2;69;67;67#201;2;70;72;66#202;2;71;72;72#203;2;70;74;77#204;2;69;74;82#205;2;72;77;61#206;2;71;77;65#207;2;73;76;70#208;2;72;76;78#209;2;72;78;85#210;2;71;79;89#211;2;72;80;95#212;2;70;82;80#213;2;73;81;85#214;2;72;82;92#215;2;73;83;94#216;2;75;88;88#217;2;76;76;65#218;2;76;74;74#219;2;77;77;71#220;2;77;78;78#221;2;76;80;83#222;2;76;80;89#223;2;79;81;77#224;2;78;82;85#225;2;78;84;91#226;2;78;86;95#227;2;80;88;92#228;2;80;88;96#229;2;86;78;72#230;2;82;80;78#231;2;82;82;72#232;2;85;83;79#233;2;83;84;85#234;2;83;86;90#235;2;82;87;94#236;2;87;87;87#237;2;84;89;91#238;2;84;90;96#239;2;86;94;98#240;2;92;80;77#241;2;89;87;78#242;2;90;85;84#243;2;91;89;85#244;2;90;90;91#245;2;89;92;96#246;2;94;93;94#247;2;91;95;99#248;2;96;84;80#249;2;98;87;84#250;2;97;89;85#251;2;97;91;90#252;2;96;94;87#253;2;99;96;92#254;2;96;98;98#0!255?!25?----#137!178?_$#156!180?_$#202!176?_$#233!181?_$#246!177?_$#253!179?_-#0!180?@CO$#1!178?@C$#3!181?A$#4!181?@$#5!182?_$#14!179?G$#18!178?A$#21!178?C$#29!179?A$#33!175?G!6?G$#66!176?A$#67!181?G$#89!176?C$#94!174?_!8?_$#112!180?A$#154!176?@$#155!174?O$#157!175?C$#158!173?_$#175!175?@$#180!174?G$#187!175?A!6?C$#188!175?O$#195!176?G$#210!178?O$#218!181?O$#219!179?@??A$#221!178?GO$#222!178?_$#224!176?_o$#226!179?_$#232!183?O$#233!175?_$#234!177?G$#235!180?_$#236!181?_$#237!180?O$#238!176?O$#242!180?C$#246!177?C$#247!177?@??G$#254!177?A-#0!183?@$#1!80?O!91?C@$#3!184?G$#4!80?G!89?_!12?A$#17!82?C$#19!184?O$#29!185?_$#30!80?C!90?G$#33!171?O$#34!183?C$#47!184?C$#48!82?GO$#49!81?A!5?_$#55!88?_$#66!87?O$#67!85?GG$#68!86?O!86?A$#69!81?@??C$#89!79?O$#91!172?G$#94!172?A$#111!79?G$#113!85?C!84?O$#123!181?_$#134!80?_$#137!184?_$#138!171?C!10?@$#158!171?_$#160!78?O$#172!87?G$#175!82?A!102?G$#176!84?A$#177!78?_!101?G$#186!185?O$#187!83?G$#188!82?O$#191!174?@$#196!183?GA$#202!79?_?O!90?@$#203!79?A$#207!81?C!102?@$#210!179?CO$#211!173?O?O$#213!81?_!98?@$#214!173?_C?_H?_$#215!175?G??_$#216!175?_?_DG$#218!80?A$#219!78?G$#221!82?_$#222!174?G?H?OO$#224!85?_!89?A$#225!83?_??_!86?CO@ACA?_$#226!177?OG$#227!172?o???O$#228!174?_!6?O$#232!80?@$#233!84?G$#234!173?G??C??B?C$#235!174?A??A??EA$#2Line truncated
[?25h
+16
View File
@@ -0,0 +1,16 @@
[?25l  
  ▁ ▗▖ 
 ▋▇▅▂  ▗┊▝  
 ▊▁┕╴▆▃▂▂▂╹▇│▝ 
 ▊▏┎╲▃┊┈└╶╴╴┊┈▖ 
 ▉▎┊┈╴▗╸╴▇▗┈╴┌▇▖ 
 ▌▏┈▉╺ ▉╵╴┈╲▎┊╶┈▌ 
  ╼╴▃┊┈╴╷╶╴╵╴▖▆┊┊┊╶▅  
 ▍▏┊▅▆▌▇ ▊▆▅▘┈╺▏╹╴▝▖ 
 ▗▏╵┈┊▇▇▖╷▇▄▘╌▁▏▄▁▆▆▅  
 ▇▖▌▅▇▁▂▃▆┈╺┪╺▉▅▄▆▄▃╶  
 ▗▘▁╷▂╷▁▁▁▁▁┏▃▖▝▄▃┊╴▉  
─▄▄▅▆▅▁▂▂▂▃▁▁▁▋▌▂▂╴▂▆▆▅▖▃▄ ━
▅▃▂━  ▝▄▃▄▅▇ 
 
[?25h
+2
View File
@@ -0,0 +1,2 @@
[?25lP0;1;0q"1;1;384;420#0;2;1;2;3#1;2;1;4;8#2;2;1;4;14#3;2;3;6;5#4;2;4;7;9#5;2;3;9;14#6;2;2;9;20#7;2;1;10;30#8;2;4;13;14#9;2;4;14;21#10;2;3;15;26#11;2;1;16;35#12;2;5;16;36#13;2;4;20;20#14;2;4;20;29#15;2;2;21;40#16;2;7;5;5#17;2;7;9;9#18;2;8;10;14#19;2;7;11;20#20;2;6;12;4#21;2;10;13;10#22;2;9;13;15#23;2;9;15;21#24;2;10;16;26#25;2;9;19;17#26;2;11;19;22#27;2;10;20;27#28;2;10;22;32#29;2;9;22;41#30;2;9;25;20#31;2;10;30;36#32;2;9;25;34#33;2;10;27;45#34;2;13;12;10#35;2;14;15;16#36;2;14;17;20#37;2;13;18;25#38;2;14;19;16#39;2;16;19;22#40;2;15;21;27#41;2;15;22;32#42;2;13;22;38#43;2;17;25;29#44;2;16;26;33#45;2;16;28;40#46;2;13;29;48#47;2;17;32;30#48;2;16;34;41#49;2;14;32;52#50;2;19;38;46#51;2;18;17;18#52;2;20;20;16#53;2;20;21;22#54;2;20;23;27#55;2;19;24;32#56;2;24;26;23#57;2;21;25;29#58;2;22;28;33#59;2;22;29;39#60;2;21;32;41#61;2;20;30;52#62;2;22;33;32#63;2;21;35;45#64;2;22;36;57#65;2;23;40;37#66;2;23;40;51#67;2;23;40;59#68;2;22;43;66#69;2;23;43;70#70;2;22;45;52#71;2;25;42;63#72;2;25;50;56#73;2;25;23;22#74;2;26;27;28#75;2;25;29;32#76;2;29;32;29#77;2;29;32;34#78;2;28;34;39#79;2;28;35;45#80;2;27;40;38#81;2;29;38;46#82;2;27;40;53#83;2;25;41;59#84;2;28;44;41#85;2;31;44;44#86;2;28;45;54#87;2;28;46;59#88;2;27;45;65#89;2;26;44;70#90;2;29;49;74#91;2;29;50;61#92;2;33;57;60#93;2;29;61;69#94;2;32;29;27#95;2;33;34;34#96;2;33;36;39#97;2;34;39;36#98;2;34;38;40#99;2;34;40;45#100;2;35;41;51#101;2;34;42;59#102;2;34;47;46#103;2;35;45;53#104;2;33;46;60#105;2;33;47;69#106;2;36;52;50#107;2;34;53;61#108;2;36;53;72#109;2;34;53;77#110;2;34;59;68#111;2;38;54;78#112;2;39;63;67#113;2;35;65;74#114;2;36;69;77#115;2;38;36;36#116;2;39;40;41#117;2;39;42;45#118;2;40;44;42#119;2;41;45;47#120;2;41;47;52#121;2;40;48;58#122;2;40;49;65#123;2;38;50;48#124;2;40;52;51#125;2;41;51;59#126;2;40;54;65#127;2;40;53;72#128;2;44;58;54#129;2;40;58;65#130;2;40;60;70#131;2;38;62;78#132;2;40;64;72#133;2;40;67;82#134;2;43;70;72#135;2;41;72;81#136;2;44;75;81#137;2;42;80;91#138;2;45;44;41#139;2;47;48;37#140;2;45;46;47#141;2;46;49;52#142;2;48;50;48#143;2;47;51;53#144;2;47;53;58#145;2;47;54;64#146;2;44;54;71#147;2;45;57;73#148;2;47;59;58#149;2;48;57;65#150;2;48;63;60#151;2;48;65;66#152;2;46;65;72#153;2;47;66;78#154;2;47;72;77#155;2;45;73;85#156;2;46;78;86#157;2;46;79;91#158;2;45;81;93#159;2;52;52;48#160;2;52;52;53#161;2;52;54;58#162;2;56;58;47#163;2;53;58;53#164;2;54;57;59#165;2;53;59;64#166;2;54;61;70#167;2;52;64;61#168;2;53;67;65#169;2;53;63;71#170;2;58;70;65#171;2;54;69;67#172;2;51;72;77#173;2;52;71;85#174;2;53;77;85#175;2;52;78;91#176;2;52;82;90#177;2;52;83;96#178;2;57;56;54#179;2;58;59;59#180;2;58;61;63#181;2;59;64;59#182;2;59;64;65#183;2;60;65;71#184;2;60;67;76#185;2;60;70;70#186;2;60;70;78#187;2;56;74;92#188;2;62;75;70#189;2;57;78;86#190;2;60;80;97#191;2;57;85;94#192;2;63;62;61#193;2;65;65;66#194;2;64;67;70#195;2;65;71;64#196;2;66;70;72#197;2;66;72;77#198;2;66;73;82#199;2;66;76;66#200;2;67;76;79#201;2;67;76;85#202;2;67;79;89#203;2;69;81;80#204;2;68;81;92#205;2;70;67;66#206;2;70;72;65#207;2;71;72;72#208;2;70;73;77#209;2;69;74;82#210;2;71;77;65#211;2;72;76;70#212;2;72;76;78#213;2;72;78;85#214;2;71;79;89#215;2;72;80;94#216;2;73;81;85#217;2;72;82;92#218;2;73;83;94#219;2;77;72;64#220;2;75;74;73#221;2;76;77;65#222;2;77;78;71#223;2;77;78;78#224;2;76;80;83#225;2;76;80;88#226;2;83;83;77#227;2;81;80;79#228;2;78;82;85#229;2;78;84;91#230;2;78;86;95#231;2;77;88;87#232;2;80;87;93#233;2;80;88;96#234;2;84;80;72#235;2;83;84;85#236;2;83;86;90#237;2;87;87;87#238;2;84;89;91#239;2;84;90;96#240;2;86;94;97#241;2;89;80;79#242;2;92;84;78#243;2;89;86;83#244;2;91;89;85#245;2;90;90;91#246;2;89;92;96#247;2;94;93;94#248;2;91;95;99#249;2;97;86;85#250;2;97;89;85#251;2;97;91;90#252;2;97;94;87#253;2;99;96;92#254;2;96;98;98#0!255?!129?------#1!247?_$#34!248?_$#52!245?_$#94!244?_$#138!247?O$#142!240?_$#143!248?O$#161!241?O??O$#164!245?O$#192!241?_!4?_$#220!249?O$#223!243?G$#226!248?G$#227!249?_$#238!242?_$#243!242?O$#244!246?O$#248!247?G$#251!243?O$#254!243?_GGG-#0!245?M??A$#2!240?O$#3!249?C$#5!241?C$#16!249?G_$#17!241?B$#20!248?@O$#21!247?@$#34!245?@$#39!250?O$#53!249?A$#56!241?G$#57!246?G$#58!249?_$#73!246?A$#74!248?C$#75!246?C$#76!244?@$#96!244?A$#119!244?C$#124!248?G$#140!239?_G$#141!250?G$#160!246?@$#161!249?@$#163!238?O$#165!246?O$#178!251?O$#193!239?O??@$#194!240?_$#195!251?_$#196!241?O$#208!240?C!6?A$#212!245?O$#213!240?@$#216!242?O$#223!239?G??A?G!5?C$#225!243?_??_$#226!240?A$#227!250?A$#228!238?_??_G?_???O$#229!243?O$#232!245?_$#235!242?C!4?_$#236!242?_G???C$#238!247?O_$#245!244?O$#247!243?@$#253!243?A$#254!243?C???G-#0!252?_$#1!113?_!124?A!12?C$#2!236?O$#3!250?@$#4!117?_!119?C$#16!251?A$#17!110?_!141?O$#18!235?_$#22!236?_$#35!112?G!138?G$#36!237?G$#38!252?G$#39!238?@$#40!250?A$#51!111?CO$#53!110?O!5?O$#77!236?G$#78!238?C$#95!113?O!137?O$#96!251?@$#116!237?A$#117!116?_$#118!112?C$#119!253?_$#138!116?G!135?C$#140!111?A_!122?O!17?G$#141!237?O$#142!110?A$#144!239?@$#160!119?_$#163!117?O$#164!109?C?G!141?O$#165!247?_$#178!109?_???A$#179!107?_G???A??O!134?C$#182!251?_A$#183!249?@$#185!235?G???A$Line truncated
[?25h
+16
View File
@@ -0,0 +1,16 @@
[?25l  
  ▁  ▄  
 ▊▇▆▄▁ ▗▘▉▝  
 ▊▉▏┐▇▅▃▂▂▂▘╵╴┊▌ 
 ▊▎╴╴╺╴▇┈┖╺┊╴╷╴▝▖ 
  ▏╵▄┌╴╺╸╴╴╵▖▇╵╶▇▄  
 ▗┈▂┎╻▌ ╴╷┒┈╵▏▉┊╷▂▝  
  ┌╼▇╴╶┊╵╲┈╱╴┊┊▁▏▆▉┊┊▇▅  
 ▍▏╸▄▆▆┑▇ ▊▆▘┕╱╴▚╴│╻▇▄  
 ▗▏┕┈╶┊▅╵╴▁┈▘╵╲╼▁▁▖▂▆▆▝▖ 
 ▆▖▋╵▆┈▁▃▅▅┈╺▋┊╵▌▅▄▅▄▄▃▌  
 ▗▘▁▂╴▂╷▁▁▁▁▁┊▅▝▁▝▄▃╴▂▇▋ 
─▄▄▅▆▆▅▁▂▂▂▂▁▁▁▁▁▊▂▂▂▂╴▆▆▅▄▃▃▃━━
▇▄▂▂━   ▃▄▃▄▄▆ 
 
[?25h
+2
View File
@@ -0,0 +1,2 @@
[?25lP0;1;0q"1;1;420;460#0;2;1;2;3#1;2;1;4;7#2;2;1;4;13#3;2;3;7;4#4;2;4;7;9#5;2;3;9;14#6;2;3;10;20#7;2;0;10;30#8;2;4;13;15#9;2;4;14;21#10;2;3;15;26#11;2;1;14;34#12;2;6;20;16#13;2;4;20;27#14;2;1;20;39#15;2;7;5;5#16;2;7;9;9#17;2;8;10;14#18;2;7;11;19#19;2;12;13;10#20;2;10;13;15#21;2;9;15;21#22;2;9;16;26#23;2;9;17;34#24;2;11;19;23#25;2;9;20;27#26;2;9;22;32#27;2;7;20;39#28;2;9;26;44#29;2;8;25;20#30;2;10;26;32#31;2;13;32;51#32;2;13;10;10#33;2;14;15;16#34;2;14;17;20#35;2;13;18;25#36;2;15;19;17#37;2;16;19;22#38;2;15;21;27#39;2;15;22;31#40;2;12;22;41#41;2;16;26;29#42;2;16;26;33#43;2;15;28;39#44;2;13;25;45#45;2;15;30;51#46;2;16;32;30#47;2;16;32;41#48;2;17;36;45#49;2;20;35;54#50;2;19;18;17#51;2;20;21;22#52;2;20;23;27#53;2;18;23;31#54;2;22;25;22#55;2;21;25;29#56;2;22;28;33#57;2;21;29;39#58;2;21;29;45#59;2;21;31;28#60;2;23;33;33#61;2;22;32;40#62;2;21;34;45#63;2;23;40;35#64;2;22;40;49#65;2;22;40;60#66;2;22;43;66#67;2;23;43;70#68;2;23;44;45#69;2;22;48;55#70;2;25;25;23#71;2;27;27;28#72;2;25;29;32#73;2;26;30;38#74;2;30;32;29#75;2;28;32;34#76;2;28;34;39#77;2;27;35;45#78;2;28;36;52#79;2;27;38;35#80;2;28;41;40#81;2;30;38;47#82;2;27;40;52#83;2;26;41;58#84;2;26;42;64#85;2;29;45;42#86;2;27;46;55#87;2;27;45;65#88;2;26;44;70#89;2;30;49;76#90;2;29;52;57#91;2;29;50;65#92;2;29;61;69#93;2;31;29;29#94;2;33;34;34#95;2;33;36;39#96;2;34;39;36#97;2;35;38;40#98;2;34;40;45#99;2;34;42;51#100;2;34;42;58#101;2;32;45;42#102;2;35;47;46#103;2;35;44;52#104;2;34;47;58#105;2;32;45;65#106;2;35;49;72#107;2;36;52;50#108;2;34;52;63#109;2;35;52;73#110;2;34;53;78#111;2;38;54;78#112;2;34;58;65#113;2;35;58;70#114;2;38;58;77#115;2;35;65;74#116;2;38;37;36#117;2;40;40;41#118;2;39;42;45#119;2;44;43;42#120;2;41;45;47#121;2;41;47;52#122;2;40;48;57#123;2;39;48;63#124;2;40;51;50#125;2;40;52;59#126;2;40;53;65#127;2;40;53;72#128;2;41;57;55#129;2;40;57;65#130;2;40;60;70#131;2;40;64;71#132;2;40;65;77#133;2;42;67;83#134;2;41;69;72#135;2;41;72;81#136;2;42;80;90#137;2;46;46;47#138;2;45;48;51#139;2;50;52;45#140;2;48;50;49#141;2;47;51;53#142;2;47;53;58#143;2;46;54;63#144;2;44;54;72#145;2;46;58;56#146;2;46;58;65#147;2;45;58;72#148;2;48;63;62#149;2;46;65;72#150;2;48;66;79#151;2;46;70;73#152;2;47;72;77#153;2;46;72;85#154;2;47;78;86#155;2;46;79;90#156;2;46;81;93#157;2;52;52;53#158;2;52;55;58#159;2;50;55;63#160;2;53;56;54#161;2;54;57;59#162;2;53;59;64#163;2;55;61;70#164;2;53;64;60#165;2;53;67;65#166;2;54;64;71#167;2;57;69;61#168;2;54;69;67#169;2;51;72;78#170;2;53;73;86#171;2;56;76;81#172;2;52;77;85#173;2;52;78;91#174;2;52;82;93#175;2;57;56;54#176;2;58;59;59#177;2;58;61;64#178;2;58;64;60#179;2;59;64;65#180;2;60;65;71#181;2;61;67;76#182;2;58;70;66#183;2;60;71;70#184;2;61;69;78#185;2;60;75;69#186;2;57;81;90#187;2;59;82;96#188;2;63;61;61#189;2;64;65;60#190;2;64;65;65#191;2;64;67;70#192;2;65;71;64#193;2;66;69;72#194;2;66;72;77#195;2;66;73;82#196;2;66;76;66#197;2;64;76;69#198;2;67;76;78#199;2;67;76;85#200;2;67;79;89#201;2;68;81;92#202;2;70;67;66#203;2;72;76;61#204;2;69;72;66#205;2;70;71;72#206;2;70;73;77#207;2;69;74;82#208;2;71;77;65#209;2;72;77;70#210;2;72;76;79#211;2;72;78;85#212;2;71;79;89#213;2;72;80;94#214;2;73;81;85#215;2;72;82;92#216;2;73;83;94#217;2;74;88;94#218;2;79;71;66#219;2;76;74;74#220;2;76;77;65#221;2;77;78;71#222;2;77;78;78#223;2;76;80;83#224;2;75;80;89#225;2;81;82;72#226;2;82;82;79#227;2;78;82;85#228;2;78;84;90#229;2;78;86;95#230;2;81;87;93#231;2;80;88;96#232;2;84;78;71#233;2;83;79;79#234;2;83;84;85#235;2;83;86;90#236;2;88;88;80#237;2;86;87;87#238;2;84;88;91#239;2;84;90;96#240;2;86;94;98#241;2;90;82;78#242;2;90;85;84#243;2;91;89;85#244;2;90;90;91#245;2;89;92;96#246;2;94;93;94#247;2;91;95;99#248;2;96;83;79#249;2;97;86;84#250;2;97;89;85#251;2;97;91;90#252;2;97;94;86#253;2;99;96;92#254;2;96;98;98#0!255?!165?-------#0!255?!9?O???_??_$#4!255?!16?G$#5!255?!17?_$#15!255?!9?_!6?O$#16!255?!13?O$#20!255?!15?G$#34!255?!13?G$#36!255?!14?_$#50!255?!16?C$#51!255?!12?G$#55!255?!17?O$#70!255?!12?O??O$#74!255?!12?_$#94!255?!12?C$#116!255?!15?C?G$#117!255?!8?o!4?C$#141!255?!10?A!7?C$#160!255?!14?O$#175!255?!9?G$#176!255?!8?G!9?O$#177!255?!15?_$#178!255?!18?G$#179!255?!17?A$#188!255?!14?G!4?_$#190!255?!18?_$#202!255?!17?C$#210!255?!16?A$#226!255?!9?C$#227!255?!10?O$#238!255?!12?A$#244!255?!11?A?AC$#245!255?!10?G_$#246!255?!10?_W$#251!255?!11?C???A$#254!255?!10?C???A-#0!255?!13?@???@$#1!255?!13?A$#3!255?!18?G_$#4!255?!19?O$#15!255?!18?C$#19!255?!17?A$#24!255?!6?O$#33!255?!9?@!4?A???O$#51!255?!7?G$#55!255?!5?_??C!5?@$#56!255?!6?_$#71!255?!18?A$#72!255?!17?C?G$#74!255?!8?A$#76!255?!8?@???@$#94!255?!16?@???_$#95!255?!18?_$#97!255?!14?C$#119!255?!9?A$#139!255?!18?@$#140!255?!17?G$#142!255?!13?C$#157!255?!4?_$#175!255?!7?@$#176!255?!7?C$#177!255?!5?O$#178!255?!5?G$#182!255?!16?A$#188!255?!12?A$#191!255?!20?O$#193!255?!6?C$#202!255?!8?G$#204!255?!20?G$#206!255?!9?C$#209!255?!17?O$#210!255?!6?G???C$#211!255?!11?O$#212!255?!9?O$#215!255?!11?_$#216!255?!13?O$#222!255?!14?G$#223!255?!15?@???C$#224!255?!14?O$#227!255?!8?o?G?G_?A$#228!255?!7?O?__G_?__$#229!255?!15?G_$#230!255?!15?O$#234!255?!10?O!4Line truncated
[?25h
+21
View File
@@ -0,0 +1,21 @@
[?25l  
   
 ▗▄▂ ▗▆▝  
 ▌▆╶▆▃▂ ▗▏▅╷▝ 
 ▌▉▏┄▏▇▅▃ ▗▇┈╺┉╴▍ 
 ▋╶┊┊╻▁╴┈▇╶▇▇╴┈┊▂▉▏▝▖ 
 ▋╴╷╸▇╵▇▏▅▅▇▄┊╴▂╴╴▏▌▝  
 ▉╴╴▅▅╻┊▊▝▘▉┊┈╺┒▂▂╵┉╴▝▖ 
  ▘▏ ┈╶╹▄ ▇▇▊┊▁▅╴┈▍▝┈┊▁┈▝  
  ▃╴▄▖╷┊╷╻ ▂╷╵┈╻┈┊┊▝▃▃┊╎╴▉▅▄  
  ▅▅▏╵▇▁▂▃▃▖┊╺╴┊▃▃▃▁╴▁▁╶▏▉┄╸▝  
 ▌╷▍╾▅▇╹▚┈▏ ▉▏▇╹▇▏╴┊╵▏╺╴╷▉▇▖ 
  ▘╱╲╺┊▏╵▃┈┊▝━╍╲▃╵▁╴╴▆┌╱╱╷▂▆▃▝▃ 
 ▝▂┕┄│╶╵▆▇▇▇▇╴┊╴▁▗▏▏▏▃▂┯▁┛▄▃▃▄▋ 
  ▅▘╵▂▄▄▄▆▆ ▝▇▄╴┈┈▍▖▗▅▇▆╴▇▇▅▃ 
 ▊▘╻▁┈┈▃▃╷▂┊▁▁▁▁▁╴┊╾▝▖▆▆▅▄┊▇▃▘▉ 
▃▃▃▄▅▅▅▄▘╴▍▖╴▁▁▁▁▁▁▌╴╱▎▁▁▃╴┈┊▆▅▆▄▃┈▃▂▂━──
▆▆▆▅▂┊╵▄▂▁ ▇▇ ▆▆▆▆▆▆▆▆   ▍╸▇▁▁┊▁▃▘ 
  ▇▅▅▇▇  ▇▇▇▇▇  
 
[?25h
Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

+2
View File
@@ -0,0 +1,2 @@
fish_variables
fish_plugins
+11
View 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
View 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
View 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
View 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
View 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
View File
@@ -0,0 +1,5 @@
*
!.gitignore
!fetch.fish
!fetch.fish.template
!sshs.fish
+38
View 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
View 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
View File
@@ -0,0 +1,6 @@
*
!.gitignore
!prompt.fish
!theme.fish
!alias.fish
!env.fish
+54
View 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
View 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
View 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
View 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
@@ -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
View 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
@@ -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
View 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
View 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
View 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
View File
@@ -0,0 +1 @@
shaders
+21
View 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
View 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
View File
@@ -0,0 +1 @@
shaders
+21
View 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
View 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
View File
@@ -0,0 +1,2 @@
shaders
wallpaper*
+25
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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 ''
Loaded 100 of 630 files, more files were not shown because too many files have changed in this diff. Show more