up su Gitea
@@ -0,0 +1,291 @@
|
|||||||
|
# ┳┳┓┏┓┏┳┓┳┳┏┓┏┓┳┓ ┏┓┏┓┓┏┏┓
|
||||||
|
# ┃┃┃┣┫ ┃ ┃┃┃┓┣ ┃┃━━┃ ┣┫┃┃┣┫
|
||||||
|
# ┛ ┗┛┗ ┻ ┗┛┗┛┗┛┛┗ ┗┛┛┗┗┛┛┗
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 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 calulate 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' or 'right'.
|
||||||
|
# Default is 'bottom'. Other orientations are only supported on sdl and ncruses
|
||||||
|
# output. Note: many fonts have weird glyphs for 'top' and 'right' characters,
|
||||||
|
# which can make ncurses not look right.
|
||||||
|
; orientation = bottom
|
||||||
|
|
||||||
|
# Visual channels. Can be 'stereo' or 'mono'.
|
||||||
|
# 'stereo' mirrors both channels with low frequencies in center.
|
||||||
|
# 'mono' outputs left to right lowest to highest frequencies.
|
||||||
|
# 'mono_option' set mono to either take input from 'left', 'right' or 'average'.
|
||||||
|
# set 'reverse' to 1 to display frequencies the other way around.
|
||||||
|
; channels = stereo
|
||||||
|
; mono_option = average
|
||||||
|
; reverse = 0
|
||||||
|
|
||||||
|
# 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 alacritty synchronized updates. 1 = on, 0 = off
|
||||||
|
# removes flickering in alacritty terminal emulator.
|
||||||
|
# defaults to off since the behaviour in other terminal emulators is unknown
|
||||||
|
; alacritty_sync = 0
|
||||||
|
|
||||||
|
# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders
|
||||||
|
; vertex_shader = pass_through.vert
|
||||||
|
; fragment_shader = bar_spectrum.frag
|
||||||
|
|
||||||
|
; for glsl output mode, keep rendering even if no audio
|
||||||
|
; continuous_rendering = 0
|
||||||
|
|
||||||
|
# disable console blank (screen saver) in tty
|
||||||
|
# (Not supported on FreeBSD)
|
||||||
|
; disable_blanking = 0
|
||||||
|
|
||||||
|
# show a flat bar at the bottom of the screen when idle, 1 = on, 0 = off
|
||||||
|
; show_idle_bar_heads = 1
|
||||||
|
|
||||||
|
# show waveform instead of frequency spectrum, 1 = on, 0 = off
|
||||||
|
; waveform = 0
|
||||||
|
|
||||||
|
[color]
|
||||||
|
|
||||||
|
# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
|
||||||
|
# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires
|
||||||
|
# a terminal that can change color definitions such as Gnome-terminal or rxvt.
|
||||||
|
# default is to keep current terminal color
|
||||||
|
; background = default
|
||||||
|
; foreground = default
|
||||||
|
|
||||||
|
# SDL and sdl_glsl only support hex code colors, these are the default:
|
||||||
|
; background = '#111111'
|
||||||
|
; foreground = '#33ffff'
|
||||||
|
|
||||||
|
# these are default
|
||||||
|
# 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 = 0
|
||||||
|
; gradient_count = 8
|
||||||
|
; gradient_color_1 = '#59cc33'
|
||||||
|
; gradient_color_2 = '#80cc33'
|
||||||
|
; gradient_color_3 = '#a6cc33'
|
||||||
|
; gradient_color_4 = '#cccc33'
|
||||||
|
; gradient_color_5 = '#cca633'
|
||||||
|
; gradient_color_6 = '#cc8033'
|
||||||
|
; gradient_color_7 = '#cc5933'
|
||||||
|
; gradient_color_8 = '#cc3333'
|
||||||
|
|
||||||
|
# for matugen
|
||||||
|
gradient = 1
|
||||||
|
gradient_count = 2
|
||||||
|
gradient_color_1 = '#3b383e'
|
||||||
|
gradient_color_2 = '#d4bbfc'
|
||||||
|
|
||||||
|
[smoothing]
|
||||||
|
|
||||||
|
# Percentage value for integral smoothing. Takes values from 0 - 100.
|
||||||
|
# Higher values means smoother, but less precise. 0 to disable.
|
||||||
|
# DEPRECATED as of 0.8.0, use noise_reduction instead
|
||||||
|
; integral = 77
|
||||||
|
|
||||||
|
# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable.
|
||||||
|
; monstercat = 0
|
||||||
|
; waves = 0
|
||||||
|
|
||||||
|
# Set gravity percentage for "drop off". Higher values means bars will drop faster.
|
||||||
|
# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off".
|
||||||
|
# DEPRECATED as of 0.8.0, use noise_reduction instead
|
||||||
|
; gravity = 100
|
||||||
|
|
||||||
|
|
||||||
|
# In bar height, bars that would have been lower that this will not be drawn.
|
||||||
|
# DEPRECATED as of 0.8.0
|
||||||
|
; ignore = 0
|
||||||
|
|
||||||
|
# Noise reduction, int 0 - 100. default 77
|
||||||
|
# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth
|
||||||
|
# 100 will be very slow and smooth, 0 will be fast but noisy.
|
||||||
|
; noise_reduction = 77
|
||||||
|
|
||||||
|
|
||||||
|
[eq]
|
||||||
|
|
||||||
|
# This one is tricky. You can have as much keys as you want.
|
||||||
|
# Remember to uncomment more than one key! More keys = more precision.
|
||||||
|
# Look at readme.md on github for further explanations and examples.
|
||||||
|
; 1 = 1 # bass
|
||||||
|
; 2 = 1
|
||||||
|
; 3 = 1 # midtone
|
||||||
|
; 4 = 1
|
||||||
|
; 5 = 1 # treble
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
// bar values. defaults to left channels first (low to high), then right (high to low).
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||||
|
uniform int bar_width; // bar width (configurable), not used here
|
||||||
|
uniform int bar_spacing; // space between bars (configurable)
|
||||||
|
|
||||||
|
uniform vec3 u_resolution; // window resolution
|
||||||
|
|
||||||
|
// colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
|
||||||
|
uniform vec3 bg_color; // background color
|
||||||
|
uniform vec3 fg_color; // foreground color
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8]; // gradient colors
|
||||||
|
|
||||||
|
uniform float shader_time; // shader execution time s (not used here)
|
||||||
|
|
||||||
|
uniform sampler2D inputTexture; // Texture from the last render pass (not used here)
|
||||||
|
|
||||||
|
vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
|
||||||
|
// create color based on fraction of this color and next color
|
||||||
|
float yr = (y - y_min) / (y_max - y_min);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
// find which bar to use based on where we are on the x axis
|
||||||
|
float x = u_resolution.x * fragCoord.x;
|
||||||
|
int bar = int(bars_count * fragCoord.x);
|
||||||
|
|
||||||
|
// calculate a bar size
|
||||||
|
float bar_size = u_resolution.x / bars_count;
|
||||||
|
|
||||||
|
// the y coordinate and bar values are the same
|
||||||
|
float y = bars[bar];
|
||||||
|
|
||||||
|
// make sure there is a thin line at bottom
|
||||||
|
if (y * u_resolution.y < 1.0) {
|
||||||
|
y = 1.0 / u_resolution.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw the bar up to current height
|
||||||
|
if (y > fragCoord.y) {
|
||||||
|
// make some space between bars basen on settings
|
||||||
|
if (x > (bar + 1) * (bar_size)-bar_spacing) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
} else {
|
||||||
|
if (gradient_count == 0) {
|
||||||
|
fragColor = vec4(fg_color, 1.0);
|
||||||
|
} else {
|
||||||
|
// find which color in the configured gradient we are at
|
||||||
|
int color = int((gradient_count - 1) * fragCoord.y);
|
||||||
|
|
||||||
|
// find where on y this and next color is supposed to be
|
||||||
|
float y_min = color / (gradient_count - 1.0);
|
||||||
|
float y_max = (color + 1.0) / (gradient_count - 1.0);
|
||||||
|
|
||||||
|
// make color
|
||||||
|
fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color],
|
||||||
|
gradient_colors[color + 1], y_min, y_max),
|
||||||
|
1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,117 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
// this shader was stolen from shadertoy user ChunderFPV
|
||||||
|
|
||||||
|
#define SCALE 8.0
|
||||||
|
#define PI radians(180.0)
|
||||||
|
#define TAU (PI * 2.0)
|
||||||
|
#define CS(a) vec2(cos(a), sin(a))
|
||||||
|
#define PT(u, r) smoothstep(0.0, r, r - length(u))
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||||
|
uniform float shader_time; // shader execution time s
|
||||||
|
uniform int bar_width; // bar width (configurable), not used here
|
||||||
|
uniform int bar_spacing; // space between bars (configurable)
|
||||||
|
|
||||||
|
uniform vec3 u_resolution; // window resolution
|
||||||
|
|
||||||
|
// colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
|
||||||
|
uniform vec3 bg_color; // background color
|
||||||
|
uniform vec3 fg_color; // foreground color
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8]; // gradient colors
|
||||||
|
|
||||||
|
// gradient map ( color, equation, time, width, shadow, reciprocal )
|
||||||
|
vec3 gm(vec3 c, float n, float t, float w, float d, bool i) {
|
||||||
|
float g = min(abs(n), 1.0 / abs(n));
|
||||||
|
float s = abs(sin(n * PI - t));
|
||||||
|
if (i)
|
||||||
|
s = min(s, abs(sin(PI / n + t)));
|
||||||
|
return (1.0 - pow(abs(s), w)) * c * pow(g, d) * 6.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// denominator spiral, use 1/n for numerator
|
||||||
|
// ( screen xy, spiral exponent, decimal, line width, hardness, rotation )
|
||||||
|
float ds(vec2 u, float e, float n, float w, float h, float ro) {
|
||||||
|
float ur = length(u); // unit radius
|
||||||
|
float sr = pow(ur, e); // spiral radius
|
||||||
|
float a = round(sr) * n * TAU; // arc
|
||||||
|
vec2 xy = CS(a + ro) * ur; // xy coords
|
||||||
|
float l = PT(u - xy, w); // line
|
||||||
|
float s = mod(sr + 0.5, 1.0); // gradient smooth
|
||||||
|
s = min(s, 1.0 - s); // darken filter
|
||||||
|
return l * s * h;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
float t = shader_time / PI * 2.0;
|
||||||
|
vec4 m = vec4(0, 0, 0, 0); // iMouse;
|
||||||
|
m.xy = m.xy * 2.0 / u_resolution.xy - 1.0; // ±1x, ±1y
|
||||||
|
if (m.z > 0.0)
|
||||||
|
t += m.y * SCALE; // move time with mouse y
|
||||||
|
float z = (m.z > 0.0) ? pow(1.0 - abs(m.y), sign(m.y)) : 1.0; // zoom (+)
|
||||||
|
float e = (m.z > 0.0) ? pow(1.0 - abs(m.x), -sign(m.x))
|
||||||
|
: 1.0; // screen exponent (+)
|
||||||
|
float se = (m.z > 0.0) ? e * -sign(m.y) : 1.0; // spiral exponent
|
||||||
|
vec3 bg = vec3(0); // black background
|
||||||
|
|
||||||
|
float aa = 3.0; // anti-aliasing
|
||||||
|
|
||||||
|
for (float j = 0.0; j < aa; j++)
|
||||||
|
for (float k = 0.0; k < aa; k++) {
|
||||||
|
vec3 c = vec3(0);
|
||||||
|
vec2 o = vec2(j, k) / aa;
|
||||||
|
vec2 uv = (fragCoord * u_resolution.xy - 0.5 * u_resolution.xy + o) /
|
||||||
|
u_resolution.y * SCALE * z; // apply cartesian, scale and zoom
|
||||||
|
if (m.z > 0.0)
|
||||||
|
uv =
|
||||||
|
exp(log(abs(uv)) * e) * sign(uv); // warp screen space with exponent
|
||||||
|
|
||||||
|
float px = length(fwidth(uv)); // pixel width
|
||||||
|
float x = uv.x; // every pixel on x
|
||||||
|
float y = uv.y; // every pixel on y
|
||||||
|
float l = length(uv); // hypot of xy: sqrt(x*x+y*y)
|
||||||
|
|
||||||
|
float mc = (x * x + y * y - 1.0) / y; // metallic circle at xy
|
||||||
|
float g = min(abs(mc), 1.0 / abs(mc)); // gradient
|
||||||
|
vec3 gold = vec3(1.0, 0.6, 0.0) * g * l;
|
||||||
|
vec3 blue = vec3(0.3, 0.5, 0.9) * (1.0 - g);
|
||||||
|
vec3 rgb = max(gold, blue);
|
||||||
|
|
||||||
|
float w = 0.1; // line width
|
||||||
|
float d = 0.4; // shadow depth
|
||||||
|
c = max(c, gm(rgb, mc, -t, w * bars[0], d, false)); // metallic
|
||||||
|
c = max(c, gm(rgb, abs(y / x) * sign(y), -t, w * bars[1], d,
|
||||||
|
false)); // tangent
|
||||||
|
c = max(c, gm(rgb, (x * x) / (y * y) * sign(y), -t, w * bars[2], d,
|
||||||
|
false)); // sqrt cotangent
|
||||||
|
c = max(c, gm(rgb, (x * x) + (y * y), t, w * bars[3], d,
|
||||||
|
true)); // sqrt circles
|
||||||
|
|
||||||
|
c += rgb * ds(uv, se, t / TAU, px * 2.0 * bars[4], 2.0, 0.0); // spiral 1a
|
||||||
|
c += rgb * ds(uv, se, t / TAU, px * 2.0 * bars[5], 2.0, PI); // spiral 1b
|
||||||
|
c +=
|
||||||
|
rgb * ds(uv, -se, t / TAU, px * 2.0 * bars[6], 2.0, 0.0); // spiral 2a
|
||||||
|
c += rgb * ds(uv, -se, t / TAU, px * 2.0 * bars[7], 2.0, PI); // spiral 2b
|
||||||
|
c = max(c, 0.0); // clear negative color
|
||||||
|
|
||||||
|
c += pow(max(1.0 - l, 0.0), 3.0 / z); // center glow
|
||||||
|
|
||||||
|
if (m.z > 0.0) // display grid on click
|
||||||
|
{
|
||||||
|
vec2 xyg = abs(fract(uv + 0.5) - 0.5) / px; // xy grid
|
||||||
|
c.gb += 0.2 * (1.0 - min(min(xyg.x, xyg.y), 1.0));
|
||||||
|
}
|
||||||
|
bg += c;
|
||||||
|
}
|
||||||
|
bg /= aa * aa;
|
||||||
|
bg *= sqrt(bg) * 1.5;
|
||||||
|
|
||||||
|
fragColor = vec4(bg, 1.0);
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
// SPDX-FileCopyrightText: 2026 rezky_nightky <with.rezky@gmail.com>
|
||||||
|
|
||||||
|
// Static Orion (non-rotating)
|
||||||
|
|
||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count;
|
||||||
|
uniform int bar_width;
|
||||||
|
uniform int bar_spacing;
|
||||||
|
|
||||||
|
uniform vec3 u_resolution;
|
||||||
|
|
||||||
|
uniform vec3 bg_color;
|
||||||
|
uniform vec3 fg_color;
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8];
|
||||||
|
|
||||||
|
vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
|
||||||
|
const float EPS = 0.0001;
|
||||||
|
float yr = (y - y_min) / max(y_max - y_min, EPS);
|
||||||
|
yr = clamp(yr, 0.0, 1.0);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 p = fragCoord - vec2(0.5);
|
||||||
|
p.x *= u_resolution.x / u_resolution.y;
|
||||||
|
|
||||||
|
float base_radius = 0.35;
|
||||||
|
float max_len = 0.15;
|
||||||
|
float pad = 2.0 / u_resolution.y;
|
||||||
|
float min_r = max(base_radius - pad, 0.0);
|
||||||
|
float max_r = base_radius + max_len + pad;
|
||||||
|
|
||||||
|
float r2 = dot(p, p);
|
||||||
|
if (r2 < min_r * min_r || r2 > max_r * max_r) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float r = sqrt(r2);
|
||||||
|
|
||||||
|
float theta = atan(p.y, p.x);
|
||||||
|
|
||||||
|
float pi = radians(180.0);
|
||||||
|
float tau = pi * 2.0;
|
||||||
|
|
||||||
|
float a = (theta + pi) / tau;
|
||||||
|
a = fract(a);
|
||||||
|
|
||||||
|
int bc = min(bars_count, 512);
|
||||||
|
if (bc <= 0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float cell = a * float(bc);
|
||||||
|
int bar = int(floor(cell));
|
||||||
|
bar = clamp(bar, 0, bc - 1);
|
||||||
|
int bar_next = bar + 1;
|
||||||
|
if (bar_next >= bc) {
|
||||||
|
bar_next = 0;
|
||||||
|
}
|
||||||
|
float f = fract(cell);
|
||||||
|
|
||||||
|
float fill = float(bar_width) / max(float(bar_width + bar_spacing), 1.0);
|
||||||
|
float angular = abs(f - 0.5);
|
||||||
|
float px = max(length(dFdx(p)), length(dFdy(p)));
|
||||||
|
float df = 0.35 * (float(bc) * px) / (tau * max(r, px));
|
||||||
|
float gap_half = (1.0 - fill) * 0.5;
|
||||||
|
float eps = 1.0 / (float(bc) * 2048.0);
|
||||||
|
float gap_cap = max(gap_half - eps, 0.0);
|
||||||
|
float df_cap = min(gap_cap, fill * 0.15);
|
||||||
|
df = min(df, max(df_cap, 1e-6));
|
||||||
|
float angular_alpha = 1.0 - smoothstep(fill * 0.5 - df, fill * 0.5 + df, angular);
|
||||||
|
angular_alpha *= step(angular, fill * 0.5 + df);
|
||||||
|
angular_alpha *= step(0.01, angular_alpha);
|
||||||
|
|
||||||
|
float y0 = clamp(bars[bar], 0.0, 1.0);
|
||||||
|
float y1 = clamp(bars[bar_next], 0.0, 1.0);
|
||||||
|
float y = mix(y0, y1, f);
|
||||||
|
|
||||||
|
float amp = y * (1.0 + 0.8 * (1.0 - y));
|
||||||
|
|
||||||
|
float min_len = 1.0 / u_resolution.y;
|
||||||
|
float max_len_cap = max(max_len - min_len, min_len);
|
||||||
|
float len = min(max(amp * max_len, min_len), max_len_cap);
|
||||||
|
float act = smoothstep(0.0, min_len / max_len, amp);
|
||||||
|
|
||||||
|
float dr = clamp(px, min_len, 2.0 * min_len);
|
||||||
|
float inner = smoothstep(base_radius - dr, base_radius + dr, r);
|
||||||
|
float outer = 1.0 - smoothstep(base_radius + len - dr, base_radius + len + dr, r);
|
||||||
|
float radial_alpha = inner * outer * act;
|
||||||
|
float outer_cap = 1.0 - smoothstep(base_radius + max_len - dr, base_radius + max_len + dr, r);
|
||||||
|
radial_alpha *= outer_cap;
|
||||||
|
|
||||||
|
float alpha = angular_alpha * radial_alpha;
|
||||||
|
alpha *= step(0.0035, alpha);
|
||||||
|
|
||||||
|
if (alpha == 0.0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 col;
|
||||||
|
if (gradient_count == 0) {
|
||||||
|
col = fg_color;
|
||||||
|
} else {
|
||||||
|
if (gradient_count == 1) {
|
||||||
|
col = gradient_colors[0];
|
||||||
|
} else {
|
||||||
|
int color = int(floor((gradient_count - 1) * amp));
|
||||||
|
color = clamp(color, 0, gradient_count - 2);
|
||||||
|
float y_min = float(color) / (gradient_count - 1.0);
|
||||||
|
float y_max = float(color + 1) / (gradient_count - 1.0);
|
||||||
|
col =
|
||||||
|
normalize_C(amp, gradient_colors[color], gradient_colors[color + 1], y_min, y_max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fragColor = vec4(mix(bg_color, col, alpha), 1.0);
|
||||||
|
}
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
// SPDX-FileCopyrightText: 2026 rezky_nightky <with.rezky@gmail.com>
|
||||||
|
|
||||||
|
// Rotate Orion
|
||||||
|
|
||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count;
|
||||||
|
uniform int bar_width;
|
||||||
|
uniform int bar_spacing;
|
||||||
|
|
||||||
|
uniform vec3 u_resolution;
|
||||||
|
|
||||||
|
uniform vec3 bg_color;
|
||||||
|
uniform vec3 fg_color;
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8];
|
||||||
|
|
||||||
|
uniform float shader_time;
|
||||||
|
|
||||||
|
vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
|
||||||
|
const float EPS = 0.0001;
|
||||||
|
float yr = (y - y_min) / max(y_max - y_min, EPS);
|
||||||
|
yr = clamp(yr, 0.0, 1.0);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 p = fragCoord - vec2(0.5);
|
||||||
|
p.x *= u_resolution.x / u_resolution.y;
|
||||||
|
|
||||||
|
float base_radius = 0.35;
|
||||||
|
float max_len = 0.15;
|
||||||
|
float pad = 2.0 / u_resolution.y;
|
||||||
|
float min_r = max(base_radius - pad, 0.0);
|
||||||
|
float max_r = base_radius + max_len + pad;
|
||||||
|
|
||||||
|
float r2 = dot(p, p);
|
||||||
|
if (r2 < min_r * min_r || r2 > max_r * max_r) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float r = sqrt(r2);
|
||||||
|
|
||||||
|
float theta = atan(p.y, p.x);
|
||||||
|
|
||||||
|
float pi = radians(180.0);
|
||||||
|
float tau = pi * 2.0;
|
||||||
|
|
||||||
|
float a = (theta + pi) / tau;
|
||||||
|
a = fract(a);
|
||||||
|
|
||||||
|
int bc = min(bars_count, 512);
|
||||||
|
if (bc <= 0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Note: rotation is achieved by phase-shifting bar sampling, not by rotating geometry.
|
||||||
|
float rotate_speed = 0.10;
|
||||||
|
float t = fract(shader_time * 0.1);
|
||||||
|
float phase = fract(t * (rotate_speed / 0.1));
|
||||||
|
|
||||||
|
float sweep_speed = 0.12;
|
||||||
|
float sweep_pos = fract(t * (sweep_speed / 0.1));
|
||||||
|
float da = abs(a - sweep_pos);
|
||||||
|
da = min(da, 1.0 - da);
|
||||||
|
float sweep = 1.0 - smoothstep(0.0, 0.08 + fwidth(a), da);
|
||||||
|
|
||||||
|
float a_sample = fract(a + phase);
|
||||||
|
|
||||||
|
float cell = a_sample * float(bc);
|
||||||
|
int bar = int(floor(cell));
|
||||||
|
bar = clamp(bar, 0, bc - 1);
|
||||||
|
int bar_next = bar + 1;
|
||||||
|
if (bar_next >= bc) {
|
||||||
|
bar_next = 0;
|
||||||
|
}
|
||||||
|
float f = fract(cell);
|
||||||
|
|
||||||
|
float fill = float(bar_width) / max(float(bar_width + bar_spacing), 1.0);
|
||||||
|
float angular = abs(f - 0.5);
|
||||||
|
float px = max(length(dFdx(p)), length(dFdy(p)));
|
||||||
|
float df = 0.35 * (float(bc) * px) / (tau * max(r, px));
|
||||||
|
float gap_half = (1.0 - fill) * 0.5;
|
||||||
|
float eps = 1.0 / (float(bc) * 2048.0);
|
||||||
|
float gap_cap = max(gap_half - eps, 0.0);
|
||||||
|
float df_cap = min(gap_cap, fill * 0.15);
|
||||||
|
df = min(df, max(df_cap, 1e-6));
|
||||||
|
float angular_alpha = 1.0 - smoothstep(fill * 0.5 - df, fill * 0.5 + df, angular);
|
||||||
|
angular_alpha *= step(angular, fill * 0.5 + df);
|
||||||
|
angular_alpha *= step(0.01, angular_alpha);
|
||||||
|
|
||||||
|
float y0 = clamp(bars[bar], 0.0, 1.0);
|
||||||
|
float y1 = clamp(bars[bar_next], 0.0, 1.0);
|
||||||
|
float y = mix(y0, y1, f);
|
||||||
|
|
||||||
|
float amp = y * (1.0 + 0.8 * (1.0 - y));
|
||||||
|
|
||||||
|
float min_len = 1.0 / u_resolution.y;
|
||||||
|
float max_len_cap = max(max_len - min_len, min_len);
|
||||||
|
float len = min(max(amp * max_len, min_len), max_len_cap);
|
||||||
|
float act = smoothstep(0.0, min_len / max_len, amp);
|
||||||
|
|
||||||
|
float dr = clamp(px, min_len, 2.0 * min_len);
|
||||||
|
float inner = smoothstep(base_radius - dr, base_radius + dr, r);
|
||||||
|
float outer = 1.0 - smoothstep(base_radius + len - dr, base_radius + len + dr, r);
|
||||||
|
float radial_alpha = inner * outer * act;
|
||||||
|
float outer_cap = 1.0 - smoothstep(base_radius + max_len - dr, base_radius + max_len + dr, r);
|
||||||
|
radial_alpha *= outer_cap;
|
||||||
|
|
||||||
|
float alpha = angular_alpha * radial_alpha;
|
||||||
|
alpha *= step(0.0035, alpha);
|
||||||
|
|
||||||
|
if (alpha == 0.0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 col;
|
||||||
|
if (gradient_count == 0) {
|
||||||
|
col = fg_color;
|
||||||
|
} else {
|
||||||
|
if (gradient_count == 1) {
|
||||||
|
col = gradient_colors[0];
|
||||||
|
} else {
|
||||||
|
int color = int(floor((gradient_count - 1) * amp));
|
||||||
|
color = clamp(color, 0, gradient_count - 2);
|
||||||
|
float y_min = float(color) / (gradient_count - 1.0);
|
||||||
|
float y_max = float(color + 1) / (gradient_count - 1.0);
|
||||||
|
col = normalize_C(amp, gradient_colors[color], gradient_colors[color + 1], y_min, y_max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
col = min(col * (1.0 + 0.35 * sweep * alpha), vec3(1.0));
|
||||||
|
|
||||||
|
fragColor = vec4(mix(bg_color, col, alpha), 1.0);
|
||||||
|
}
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
// SPDX-FileCopyrightText: 2026 rezky_nightky <with.rezky@gmail.com>
|
||||||
|
|
||||||
|
// Orion Saturn core
|
||||||
|
|
||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count;
|
||||||
|
uniform int bar_width;
|
||||||
|
uniform int bar_spacing;
|
||||||
|
|
||||||
|
uniform vec3 u_resolution;
|
||||||
|
|
||||||
|
uniform vec3 bg_color;
|
||||||
|
uniform vec3 fg_color;
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8];
|
||||||
|
|
||||||
|
vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
|
||||||
|
const float EPS = 0.0001;
|
||||||
|
float yr = (y - y_min) / max(y_max - y_min, EPS);
|
||||||
|
yr = clamp(yr, 0.0, 1.0);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 gradient_map(float amp) {
|
||||||
|
if (gradient_count == 0) {
|
||||||
|
return fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gradient_count == 1) {
|
||||||
|
return gradient_colors[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
int color = int(floor((gradient_count - 1) * amp));
|
||||||
|
color = clamp(color, 0, gradient_count - 2);
|
||||||
|
float y_min = float(color) / (gradient_count - 1.0);
|
||||||
|
float y_max = float(color + 1) / (gradient_count - 1.0);
|
||||||
|
return normalize_C(amp, gradient_colors[color], gradient_colors[color + 1], y_min, y_max);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 p = fragCoord - vec2(0.5);
|
||||||
|
p.x *= u_resolution.x / u_resolution.y;
|
||||||
|
|
||||||
|
float base_radius = 0.35;
|
||||||
|
float max_len = 0.15;
|
||||||
|
float pad = 2.0 / u_resolution.y;
|
||||||
|
|
||||||
|
float max_r = base_radius + max_len + pad;
|
||||||
|
|
||||||
|
float r2 = dot(p, p);
|
||||||
|
if (r2 > max_r * max_r) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bc = min(bars_count, 512);
|
||||||
|
if (bc <= 0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float r = sqrt(r2);
|
||||||
|
|
||||||
|
float pi = radians(180.0);
|
||||||
|
float tau = pi * 2.0;
|
||||||
|
|
||||||
|
float theta = atan(p.y, p.x);
|
||||||
|
float a = fract((theta + pi) / tau);
|
||||||
|
|
||||||
|
float cell = a * float(bc);
|
||||||
|
int bar = int(floor(cell));
|
||||||
|
bar = clamp(bar, 0, bc - 1);
|
||||||
|
int bar_next = bar + 1;
|
||||||
|
if (bar_next >= bc) {
|
||||||
|
bar_next = 0;
|
||||||
|
}
|
||||||
|
float f = fract(cell);
|
||||||
|
|
||||||
|
float fill = float(bar_width) / max(float(bar_width + bar_spacing), 1.0);
|
||||||
|
float angular = abs(f - 0.5);
|
||||||
|
float px_ang = max(length(dFdx(p)), length(dFdy(p)));
|
||||||
|
float df = 0.35 * (float(bc) * px_ang) / (tau * max(r, px_ang));
|
||||||
|
float gap_half = (1.0 - fill) * 0.5;
|
||||||
|
float eps = 1.0 / (float(bc) * 2048.0);
|
||||||
|
float gap_cap = max(gap_half - eps, 0.0);
|
||||||
|
float df_cap = min(gap_cap, fill * 0.15);
|
||||||
|
df = min(df, max(df_cap, 1e-6));
|
||||||
|
float angular_alpha = 1.0 - smoothstep(fill * 0.5 - df, fill * 0.5 + df, angular);
|
||||||
|
angular_alpha *= step(angular, fill * 0.5 + df);
|
||||||
|
angular_alpha *= step(0.01, angular_alpha);
|
||||||
|
|
||||||
|
float y0 = clamp(bars[bar], 0.0, 1.0);
|
||||||
|
float y1 = clamp(bars[bar_next], 0.0, 1.0);
|
||||||
|
float y = mix(y0, y1, f);
|
||||||
|
float amp = y * (1.0 + 0.8 * (1.0 - y));
|
||||||
|
|
||||||
|
float min_len = 1.0 / u_resolution.y;
|
||||||
|
float max_len_cap = max(max_len - min_len, min_len);
|
||||||
|
float len = min(max(amp * max_len, min_len), max_len_cap);
|
||||||
|
float act = smoothstep(0.0, min_len / max_len, amp);
|
||||||
|
|
||||||
|
float dr = clamp(px_ang, min_len, 2.0 * min_len);
|
||||||
|
float inner = smoothstep(base_radius - dr, base_radius + dr, r);
|
||||||
|
float outer = 1.0 - smoothstep(base_radius + len - dr, base_radius + len + dr, r);
|
||||||
|
float radial_alpha = inner * outer * act;
|
||||||
|
float outer_cap = 1.0 - smoothstep(base_radius + max_len - dr, base_radius + max_len + dr, r);
|
||||||
|
radial_alpha *= outer_cap;
|
||||||
|
|
||||||
|
float ring_alpha = angular_alpha * radial_alpha;
|
||||||
|
ring_alpha *= step(0.0035, ring_alpha);
|
||||||
|
|
||||||
|
float core_energy = 0.0;
|
||||||
|
int core_samples = 0;
|
||||||
|
|
||||||
|
int core_limit = min(bc, 64);
|
||||||
|
for (int i = 0; i < core_limit; i += 2) {
|
||||||
|
core_energy += clamp(bars[i], 0.0, 1.0);
|
||||||
|
core_samples++;
|
||||||
|
}
|
||||||
|
core_energy /= max(float(core_samples), 1.0);
|
||||||
|
|
||||||
|
float core_amp = core_energy * (1.0 + 0.8 * (1.0 - core_energy));
|
||||||
|
|
||||||
|
float core_radius = mix(0.07, 0.25, clamp(core_amp * 1.1, 0.0, 1.0));
|
||||||
|
|
||||||
|
float px = 1.0 / u_resolution.y;
|
||||||
|
float core_edge = max(px * 1.5, 0.003);
|
||||||
|
float core_act = smoothstep(0.0, 0.04, core_amp);
|
||||||
|
|
||||||
|
float core_feather = core_edge + dr;
|
||||||
|
float core_alpha = 1.0 - smoothstep(core_radius - core_feather, core_radius + core_feather, r);
|
||||||
|
core_alpha = clamp(core_alpha, 0.0, 1.0) * core_act;
|
||||||
|
|
||||||
|
if (ring_alpha == 0.0 && core_alpha == 0.0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 col_core = gradient_map(core_amp);
|
||||||
|
vec3 col_ring = gradient_map(amp);
|
||||||
|
|
||||||
|
vec3 col = mix(bg_color, col_core, core_alpha);
|
||||||
|
col = mix(col, col_ring, ring_alpha);
|
||||||
|
fragColor = vec4(col, 1.0);
|
||||||
|
}
|
||||||
@@ -0,0 +1,154 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
// SPDX-FileCopyrightText: 2026 rezky_nightky <with.rezky@gmail.com>
|
||||||
|
|
||||||
|
// Orion Saturn subring
|
||||||
|
|
||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count;
|
||||||
|
uniform int bar_width;
|
||||||
|
uniform int bar_spacing;
|
||||||
|
|
||||||
|
uniform vec3 u_resolution;
|
||||||
|
|
||||||
|
uniform vec3 bg_color;
|
||||||
|
uniform vec3 fg_color;
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8];
|
||||||
|
|
||||||
|
vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
|
||||||
|
const float EPS = 0.0001;
|
||||||
|
float yr = (y - y_min) / max(y_max - y_min, EPS);
|
||||||
|
yr = clamp(yr, 0.0, 1.0);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 gradient_map(float amp) {
|
||||||
|
if (gradient_count == 0) {
|
||||||
|
return fg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gradient_count == 1) {
|
||||||
|
return gradient_colors[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
int color = int(floor((gradient_count - 1) * amp));
|
||||||
|
color = clamp(color, 0, gradient_count - 2);
|
||||||
|
float y_min = float(color) / (gradient_count - 1.0);
|
||||||
|
float y_max = float(color + 1) / (gradient_count - 1.0);
|
||||||
|
return normalize_C(amp, gradient_colors[color], gradient_colors[color + 1], y_min, y_max);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 p = fragCoord - vec2(0.5);
|
||||||
|
p.x *= u_resolution.x / u_resolution.y;
|
||||||
|
|
||||||
|
float base_radius = 0.35;
|
||||||
|
float max_len = 0.15;
|
||||||
|
float pad = 2.0 / u_resolution.y;
|
||||||
|
|
||||||
|
float max_r = base_radius + max_len + pad;
|
||||||
|
|
||||||
|
float r2 = dot(p, p);
|
||||||
|
|
||||||
|
if (r2 > max_r * max_r) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bc = min(bars_count, 512);
|
||||||
|
if (bc <= 0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
float r = sqrt(r2);
|
||||||
|
|
||||||
|
float pi = radians(180.0);
|
||||||
|
float tau = pi * 2.0;
|
||||||
|
|
||||||
|
float theta = atan(p.y, p.x);
|
||||||
|
float a = fract((theta + pi) / tau);
|
||||||
|
|
||||||
|
float cell = a * float(bc);
|
||||||
|
int bar = int(floor(cell));
|
||||||
|
bar = clamp(bar, 0, bc - 1);
|
||||||
|
int bar_next = bar + 1;
|
||||||
|
if (bar_next >= bc) {
|
||||||
|
bar_next = 0;
|
||||||
|
}
|
||||||
|
float f = fract(cell);
|
||||||
|
|
||||||
|
float fill = float(bar_width) / max(float(bar_width + bar_spacing), 1.0);
|
||||||
|
float angular = abs(f - 0.5);
|
||||||
|
float px = max(length(dFdx(p)), length(dFdy(p)));
|
||||||
|
float df = 0.35 * (float(bc) * px) / (tau * max(r, px));
|
||||||
|
float gap_half = (1.0 - fill) * 0.5;
|
||||||
|
float eps = 1.0 / (float(bc) * 2048.0);
|
||||||
|
float gap_cap = max(gap_half - eps, 0.0);
|
||||||
|
float df_cap = min(gap_cap, fill * 0.15);
|
||||||
|
df = min(df, max(df_cap, 1e-6));
|
||||||
|
float angular_alpha = 1.0 - smoothstep(fill * 0.5 - df, fill * 0.5 + df, angular);
|
||||||
|
angular_alpha *= step(angular, fill * 0.5 + df);
|
||||||
|
angular_alpha *= step(0.01, angular_alpha);
|
||||||
|
|
||||||
|
float y0 = clamp(bars[bar], 0.0, 1.0);
|
||||||
|
float y1 = clamp(bars[bar_next], 0.0, 1.0);
|
||||||
|
float y = mix(y0, y1, f);
|
||||||
|
float amp = y * (1.0 + 0.8 * (1.0 - y));
|
||||||
|
|
||||||
|
float min_len = 1.0 / u_resolution.y;
|
||||||
|
float max_len_cap = max(max_len - min_len, min_len);
|
||||||
|
float len = min(max(amp * max_len, min_len), max_len_cap);
|
||||||
|
float act = smoothstep(0.0, min_len / max_len, amp);
|
||||||
|
|
||||||
|
float dr = clamp(px, min_len, 2.0 * min_len);
|
||||||
|
float inner = smoothstep(base_radius - dr, base_radius + dr, r);
|
||||||
|
float outer = 1.0 - smoothstep(base_radius + len - dr, base_radius + len + dr, r);
|
||||||
|
float radial_alpha = inner * outer * act;
|
||||||
|
float outer_cap = 1.0 - smoothstep(base_radius + max_len - dr, base_radius + max_len + dr, r);
|
||||||
|
radial_alpha *= outer_cap;
|
||||||
|
|
||||||
|
float ring_alpha = angular_alpha * radial_alpha;
|
||||||
|
ring_alpha *= step(0.0035, ring_alpha);
|
||||||
|
|
||||||
|
float core_energy = 0.0;
|
||||||
|
int core_samples = 0;
|
||||||
|
|
||||||
|
int core_limit = min(bc, 64);
|
||||||
|
for (int i = 0; i < core_limit; i += 4) {
|
||||||
|
core_energy += clamp(bars[i], 0.0, 1.0);
|
||||||
|
core_samples++;
|
||||||
|
}
|
||||||
|
core_energy /= max(float(core_samples), 1.0);
|
||||||
|
|
||||||
|
float core_amp = core_energy * (1.0 + 0.8 * (1.0 - core_energy));
|
||||||
|
float core_radius = mix(0.05, 0.18, clamp(core_amp * 1.2, 0.0, 1.0));
|
||||||
|
|
||||||
|
float core_act = smoothstep(0.0, 0.04, core_amp);
|
||||||
|
float core_half_thickness = 0.007;
|
||||||
|
|
||||||
|
float core = smoothstep(core_radius - core_half_thickness - dr,
|
||||||
|
core_radius - core_half_thickness + dr, r) -
|
||||||
|
smoothstep(core_radius + core_half_thickness - dr,
|
||||||
|
core_radius + core_half_thickness + dr, r);
|
||||||
|
float core_alpha = clamp(core, 0.0, 1.0) * core_act;
|
||||||
|
|
||||||
|
if (ring_alpha == 0.0 && core_alpha == 0.0) {
|
||||||
|
fragColor = vec4(bg_color, 1.0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 col_ring = gradient_map(amp);
|
||||||
|
vec3 col_core = gradient_map(core_amp);
|
||||||
|
|
||||||
|
vec3 col = mix(bg_color, col_ring, ring_alpha);
|
||||||
|
col = mix(col, col_core, core_alpha);
|
||||||
|
fragColor = vec4(col, 1.0);
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
// bar values. defaults to left channels first (low to high), then right (high
|
||||||
|
// to low).
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||||
|
uniform int bar_width; // bar width (configurable), not used here
|
||||||
|
uniform int bar_spacing; // space between bars (configurable)
|
||||||
|
|
||||||
|
uniform vec3 u_resolution; // window resolution
|
||||||
|
|
||||||
|
// colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
|
||||||
|
uniform vec3 bg_color; // background color
|
||||||
|
uniform vec3 fg_color; // foreground color
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8]; // gradient colors
|
||||||
|
|
||||||
|
uniform sampler2D inputTexture; // Texture from the last render pass
|
||||||
|
|
||||||
|
vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) {
|
||||||
|
// create color based on fraction of this color and next color
|
||||||
|
float yr = (y - y_min) / (y_max - y_min);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
// find which bar to use based on where we are on the y axis
|
||||||
|
int bar = int(bars_count * fragCoord.y);
|
||||||
|
float y = bars[bar];
|
||||||
|
float band_size = 1.0 / float(bars_count);
|
||||||
|
float current_band_min = bar * band_size;
|
||||||
|
float current_band_max = (bar + 1) * band_size;
|
||||||
|
|
||||||
|
int hist_length = 512;
|
||||||
|
float win_size = 1.0 / hist_length;
|
||||||
|
|
||||||
|
if (fragCoord.x > 1.0 - win_size) {
|
||||||
|
|
||||||
|
if (fragCoord.y > current_band_min && fragCoord.y < current_band_max) {
|
||||||
|
|
||||||
|
fragColor = vec4(fg_color * y, 1.0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
vec2 offsetCoord = fragCoord;
|
||||||
|
offsetCoord.x += float(win_size);
|
||||||
|
fragColor = texture(inputTexture, offsetCoord);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
#version 330
|
||||||
|
|
||||||
|
// Emulate the "line style" spectrum analyzer from Winamp 2.
|
||||||
|
// Try this config for a demonstration:
|
||||||
|
|
||||||
|
/*
|
||||||
|
[general]
|
||||||
|
bar_width = 2
|
||||||
|
bar_spacing = 0
|
||||||
|
higher_cutoff_freq = 22000
|
||||||
|
|
||||||
|
[output]
|
||||||
|
method = sdl_glsl
|
||||||
|
channels = mono
|
||||||
|
fragment_shader = winamp_line_style_spectrum.frag
|
||||||
|
|
||||||
|
[color]
|
||||||
|
background = '#000000'
|
||||||
|
gradient = 1
|
||||||
|
gradient_color_1 = '#319C08'
|
||||||
|
gradient_color_2 = '#29CE10'
|
||||||
|
gradient_color_3 = '#BDDE29'
|
||||||
|
gradient_color_4 = '#DEA518'
|
||||||
|
gradient_color_5 = '#D66600'
|
||||||
|
gradient_color_6 = '#CE2910'
|
||||||
|
|
||||||
|
[smoothing]
|
||||||
|
noise_reduction = 10
|
||||||
|
*/
|
||||||
|
|
||||||
|
in vec2 fragCoord;
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
// bar values. defaults to left channels first (low to high), then right (high to low).
|
||||||
|
uniform float bars[512];
|
||||||
|
|
||||||
|
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||||
|
uniform int bar_width; // bar width (configurable), not used here
|
||||||
|
uniform int bar_spacing; // space between bars (configurable)
|
||||||
|
|
||||||
|
uniform vec3 u_resolution; // window resolution
|
||||||
|
|
||||||
|
//colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
|
||||||
|
uniform vec3 bg_color; // background color
|
||||||
|
uniform vec3 fg_color; // foreground color
|
||||||
|
|
||||||
|
uniform int gradient_count;
|
||||||
|
uniform vec3 gradient_colors[8]; // gradient colors
|
||||||
|
|
||||||
|
vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max)
|
||||||
|
{
|
||||||
|
//create color based on fraction of this color and next color
|
||||||
|
float yr = (y - y_min) / (y_max - y_min);
|
||||||
|
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
// find which bar to use based on where we are on the x axis
|
||||||
|
float x = u_resolution.x * fragCoord.x;
|
||||||
|
int bar = int(bars_count * fragCoord.x);
|
||||||
|
|
||||||
|
//calculate a bar size
|
||||||
|
float bar_size = u_resolution.x / bars_count;
|
||||||
|
|
||||||
|
//the y coordinate is stretched by 4X to resemble Winamp
|
||||||
|
float y = min(bars[bar] * 4.0, 1.0);
|
||||||
|
|
||||||
|
// make sure there is a thin line at bottom
|
||||||
|
if (y * u_resolution.y < 1.0)
|
||||||
|
{
|
||||||
|
y = 1.0 / u_resolution.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 bar_color;
|
||||||
|
|
||||||
|
if (gradient_count == 0)
|
||||||
|
{
|
||||||
|
bar_color = vec4(fg_color,1.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//find color in the configured gradient for the top of the bar
|
||||||
|
int color = int((gradient_count - 1) * y);
|
||||||
|
|
||||||
|
//find where on y this and next color is supposed to be
|
||||||
|
float y_min = float(color) / (gradient_count - 1.0);
|
||||||
|
float y_max = float(color + 1) / (gradient_count - 1.0);
|
||||||
|
|
||||||
|
//make a solid color for the entire bar
|
||||||
|
bar_color = vec4(normalize_C(y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//draw the bar up to current height
|
||||||
|
if (y > fragCoord.y)
|
||||||
|
{
|
||||||
|
//make some space between bars based on settings
|
||||||
|
if (x > (bar + 1) * (bar_size) - bar_spacing)
|
||||||
|
{
|
||||||
|
fragColor = vec4(bg_color,1.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fragColor = bar_color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fragColor = vec4(bg_color,1.0);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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'
|
||||||
@@ -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'
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$background = rgba(151218ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$error = rgba(ffb4abff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$error_container = rgba(93000aff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$inverse_on_surface = rgba(322f35ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$inverse_primary = rgba(69548dff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$inverse_surface = rgba(e7e0e8ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_background = rgba(e7e0e8ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_error = rgba(690005ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_error_container = rgba(ffdad6ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_primary = rgba(3a255bff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_primary_container = rgba(ecdcffff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_primary_fixed = rgba(240e45ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_primary_fixed_variant = rgba(513c73ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_secondary = rgba(342d40ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_secondary_container = rgba(eadef7ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_secondary_fixed = rgba(1f182aff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_secondary_fixed_variant = rgba(4b4357ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_surface = rgba(e7e0e8ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_surface_variant = rgba(cbc4cfff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_tertiary = rgba(4a252fff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_tertiary_container = rgba(ffd9e0ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_tertiary_fixed = rgba(32101aff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$on_tertiary_fixed_variant = rgba(643b45ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$outline = rgba(958e99ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$outline_variant = rgba(49454eff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$primary = rgba(d4bbfcff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$primary_container = rgba(513c73ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$primary_fixed = rgba(ecdcffff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$primary_fixed_dim = rgba(d4bbfcff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$scrim = rgba(000000ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$secondary = rgba(cec2dbff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$secondary_container = rgba(4b4357ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$secondary_fixed = rgba(eadef7ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$secondary_fixed_dim = rgba(cec2dbff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$shadow = rgba(000000ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$source_color = rgba(533d78ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$surface = rgba(151218ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$surface_bright = rgba(3b383eff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$surface_container = rgba(211e24ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$surface_container_high = rgba(2c292fff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$surface_container_highest = rgba(37343aff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$surface_container_low = rgba(1d1a20ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$surface_container_lowest = rgba(0f0d12ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$surface_dim = rgba(151218ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$surface_tint = rgba(d4bbfcff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$surface_variant = rgba(49454eff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$tertiary = rgba(f1b7c3ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$tertiary_container = rgba(643b45ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$tertiary_fixed = rgba(ffd9e0ff)
|
||||||
|
|
||||||
|
$image = /home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
|
$tertiary_fixed_dim = rgba(f1b7c3ff)
|
||||||
|
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
|
||||||
|
animations {
|
||||||
|
enabled = yes
|
||||||
|
|
||||||
|
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||||
|
bezier = been, 0.24, 0.9, 0.25, 0.91
|
||||||
|
bezier = been2, 0,0.94,0.5,0.99
|
||||||
|
bezier = menu_decel, 0.1, 1, 0, 1
|
||||||
|
bezier = linear, 0.0, 0.0, 1.0, 1.0
|
||||||
|
bezier = wind, 0.05, 0.9, 0.1, 1.05
|
||||||
|
bezier = winIn, 0.1, 1.1, 0.1, 1.1
|
||||||
|
bezier = winOut, 0.3, -0.3, 0, 1
|
||||||
|
bezier = slow, 0, 0.85, 0.3, 1
|
||||||
|
bezier = overshot, 0.7, 0.6, 0.1, 1.1
|
||||||
|
bezier = bounce, 1.1, 1.6, 0.1, 0.85
|
||||||
|
bezier = sligshot, 1, -1, 0.15, 1.25
|
||||||
|
bezier = nice, 0, 6.9, 0.5, -4.20
|
||||||
|
|
||||||
|
animation = windowsIn, 1, 5, slow, popin
|
||||||
|
animation = windowsOut, 1, 7, been, popin 70%
|
||||||
|
animation = windowsMove, 1, 5, wind, slide
|
||||||
|
animation = border, 1, 1, linear
|
||||||
|
animation = fade, 1, 5, overshot
|
||||||
|
animation = workspaces, 1, 5, wind
|
||||||
|
animation = windows, 1, 5, bounce, popin
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
input {
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant =
|
||||||
|
kb_model =
|
||||||
|
kb_options =
|
||||||
|
kb_rules =
|
||||||
|
|
||||||
|
follow_mouse = 1
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
accel_profile=flat
|
||||||
|
follow_mouse=1
|
||||||
|
force_no_accel=1
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#gestures
|
||||||
|
gestures {
|
||||||
|
workspace_swipe = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Example per-device config
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
|
||||||
|
device {
|
||||||
|
name = epic-mouse-v1
|
||||||
|
sensitivity = -0.5
|
||||||
|
}
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
###################
|
||||||
|
### KEYBINDINGS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/
|
||||||
|
$mainMod = SUPER # Sets "Windows" key as main modifier
|
||||||
|
|
||||||
|
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||||
|
bind = $mainMod, Return, exec, $terminal
|
||||||
|
bind = $mainMod SHIFT, RETURN, exec, [float; size 800 550] $terminal
|
||||||
|
bind = $mainMod, Q, killactive,
|
||||||
|
bind = CTRL ALT, Delete, exec, hyprctl dispatch exit 0 # exit Hyprland
|
||||||
|
bind = $mainMod, E, exec, $fileManager
|
||||||
|
bind = $mainMod, Space, togglefloating,
|
||||||
|
bind = $mainMod, D, exec, $menu
|
||||||
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
|
bind = $mainMod, J, togglesplit, # dwindle
|
||||||
|
bind = $mainMod, R, exec, ~/.config/hypr/scripts/wbrestart.sh
|
||||||
|
bind = $mainMod, B, exec, xdg-open "https://" # default browser
|
||||||
|
bind = $mainMod, L, exec, ~/.config/hypr/scripts/hyprlock.sh
|
||||||
|
bind = $mainMod SHIFT, F, fullscreen
|
||||||
|
bind = $mainMod SHIFT, S, exec, ~/.config/hypr/scripts/screenshot.sh
|
||||||
|
bind = $mainMod, W, exec, ~/.config/hypr/scripts/wppicker.sh
|
||||||
|
bind = $mainMod SHIFT, Q, exec, ~/.config/hypr/scripts/KillActiveProcess.sh # Kill active process
|
||||||
|
bind = $mainMod, C, exec, hyprpicker -a
|
||||||
|
bind = $mainMod CTRL, B, exec, ~/.config/hypr/scripts/WaybarStyles.sh # Waybar Styles Menu
|
||||||
|
bind = $mainMod ALT, B, exec, ~/.config/hypr/scripts/WaybarLayout.sh # Waybar Layout Menu
|
||||||
|
bind = $mainMod, H, exec, pkill -SIGUSR1 waybar # Hide Waybar
|
||||||
|
bind = $mainMod SHIFT, E, exec, kitty yazi # Yazi File Manager
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# Move Windows
|
||||||
|
bind = $mainMod CTRL, left, movewindow, l
|
||||||
|
bind = $mainMod CTRL, right, movewindow, r
|
||||||
|
bind = $mainMod CTRL, up, movewindow, u
|
||||||
|
bind = $mainMod CTRL, down, movewindow, d
|
||||||
|
|
||||||
|
# Resize windows
|
||||||
|
binde = $mainMod SHIFT, left, resizeactive,-50 0
|
||||||
|
binde = $mainMod SHIFT, right, resizeactive,50 0
|
||||||
|
binde = $mainMod SHIFT, up, resizeactive,0 -50
|
||||||
|
binde = $mainMod SHIFT, down, resizeactive,0 50
|
||||||
|
|
||||||
|
# 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, ~/.config/hypr/scripts/volume.sh --inc
|
||||||
|
bindel = ,XF86AudioLowerVolume, exec, ~/.config/hypr/scripts/volume.sh --dec
|
||||||
|
bindel = ,XF86AudioMute, exec, ~/.config/hypr/scripts/volume.sh --toggle
|
||||||
|
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||||
|
bindel = ,XF86MonBrightnessUp, exec, ~/.config/hypr/scripts/brightness.sh --inc
|
||||||
|
bindel = ,XF86MonBrightnessDown, exec, ~/.config/hypr/scripts/brightness.sh --dec
|
||||||
|
|
||||||
|
# Requires playerctl
|
||||||
|
bindl = , XF86AudioNext, exec, playerctl next
|
||||||
|
bindl = , XF86AudioPause, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioPrev, exec, playerctl previous
|
||||||
|
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
general {
|
||||||
|
gaps_in = 5
|
||||||
|
gaps_out = 10
|
||||||
|
|
||||||
|
border_size = 2
|
||||||
|
|
||||||
|
# col.active_border = $outline
|
||||||
|
col.active_border = $primary $secondary 45deg
|
||||||
|
col.inactive_border = $outline_variant
|
||||||
|
|
||||||
|
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||||
|
resize_on_border = true
|
||||||
|
|
||||||
|
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false
|
||||||
|
|
||||||
|
layout = dwindle
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/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 = false
|
||||||
|
range = 4
|
||||||
|
render_power = 3
|
||||||
|
color = rgba(1a1a1aee)
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
size = 5
|
||||||
|
passes = 3
|
||||||
|
ignore_opacity = true
|
||||||
|
new_optimizations = true
|
||||||
|
special = false
|
||||||
|
popups = true
|
||||||
|
xray = true
|
||||||
|
|
||||||
|
vibrancy = 0.1696
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
windowrule = match:class ^(mpv|vlc)$, tag +multimedia_video
|
||||||
|
windowrule = match:class ^(nm-applet|nm-connection-editor|blueman-manager|org.gnome.FileRoller)$, tag +settings
|
||||||
|
|
||||||
|
windowrule = match:class ^(org.gnome.DiskUtility|wihotspot(-gui)?)$, tag +settings
|
||||||
|
|
||||||
|
|
||||||
|
#windowrule = tag, +multimedia_video, class:(mpv|vlc)$
|
||||||
|
|
||||||
|
|
||||||
|
#windowrule = tag +settings, class:^(nm-applet|nm-connection-editor|blueman-manager|org.gnome.FileRoller)$
|
||||||
|
#windowrule = tag +settings, class:^(org.gnome.DiskUtility|wihotspot(-gui)?)$
|
||||||
|
#windowrule = tag +viewer, class:^(org.gnome.SystemMonitor)$ # system monitor
|
||||||
|
#windowrule = tag +viewer, class:^(org.gnome.Evince)$ # document viewer
|
||||||
|
#windowrule = tag +viewer, class:^(eog|org.gnome.Loupe)$ # image viewer
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# APPLICATIONS OPACITY
|
||||||
|
# windowrule = opacity 0.8 override, match:class ^(org.gnome.Nautilus)$
|
||||||
|
windowrule = opacity 0.9 override, match:class ^(gedit|org.gnome.TextEditor|mousepad)$
|
||||||
|
windowrule = opacity 0.9 override, match:class ^(org.pulseaudio.pavucontrol)$
|
||||||
|
windowrule = opacity 0.9 override, match:class ^(kitty)$
|
||||||
|
windowrule = opacity 0.85 override 0.7 override 1 override, match:class ^(discord|vesktop|org.telegram.desktop)$
|
||||||
|
windowrule = opacity 0.8 override 0.6 override 1 override, match:class ^(Spotify)$
|
||||||
|
windowrule = opacity 0.9 override 0.7 override 1 override, match:class ^(zen)$
|
||||||
|
|
||||||
|
windowrule = opacity 1.0 override 1 override 1 override, match:class ^(zen-twilight)$
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# FLOAT & SIZE
|
||||||
|
windowrule = size 900 506, float on, match:tag multimedia_video*
|
||||||
|
windowrule = float on, size 50% 60%, match:class ^(org.pulseaudio.pavucontrol)$
|
||||||
|
|
||||||
|
# Ignore maximize requests
|
||||||
|
windowrule = suppress_event maximize, match:class .*
|
||||||
|
|
||||||
|
## Fix XWayland dragging
|
||||||
|
#windowrule = no_focus on, match:class ^$,title ^$,xwayland 1,float 1,fullscreen 0,pin 0
|
||||||
|
#
|
||||||
|
## POP UPS AND DIALOGUES
|
||||||
|
#
|
||||||
|
#windowrulev2 = size 50%% 60%%, float, center, title:^(Save As|Save a File|Pick Files)$
|
||||||
|
#windowrulev2 = size 70%% 60%%, float, initialTitle:^(Open Files)$
|
||||||
|
#
|
||||||
|
# WAYBAR
|
||||||
|
layerrule = blur on, ignore_alpha 0.5, match:namespace waybar
|
||||||
|
|
||||||
|
# NOTIFICATIONS
|
||||||
|
layerrule = ignore_alpha 0.5, match:namespace tag:notif*
|
||||||
|
|
||||||
|
# LOGOUT
|
||||||
|
layerrule = blur on, match:namespace logout_dialog
|
||||||
|
|
||||||
|
# SWAYNC
|
||||||
|
layerrule = blur on, ignore_alpha on, ignore_alpha 0.5, xray 0, match:namespace swaync-control-center
|
||||||
|
layerrule = blur on, ignore_alpha on, ignore_alpha 0.5, xray 0, match:namespace swaync-notification-window
|
||||||
|
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
# APPLIACTIONS BLUR
|
||||||
|
#windowrule = noblur , tag:multimedia_video*
|
||||||
|
#windowrule = opacity 1.0, tag:multimedia_video*
|
||||||
|
#windowrule = opacity 0.8, tag:settings*
|
||||||
|
windowrule = opacity 0.8, class: ^(org.gnome.Nautilus)$
|
||||||
|
windowrule = opacity 0.9, class:^(gedit|org.gnome.TextEditor|mousepad)$
|
||||||
|
windowrule = opacity 0.9, class:^(org.pulseaudio.pavucontrol)$
|
||||||
|
windowrule = opacity 0.9, class:^(kitty)$
|
||||||
|
windowrule = opacity 0.85 override 0.7 override 1 override, class:^(discord|vesktop|org.telegram.desktop)$
|
||||||
|
windowrule = opacity 0.8 override 0.6 override 1 override, class:^(Spotify)$
|
||||||
|
windowrule = opacity 0.9 override 0.7 override 1 override, class:^(zen)$
|
||||||
|
#windowrule = opacity 0.8 override 0.6 override 1 override, tag:viewer*
|
||||||
|
|
||||||
|
# LAYER RULES
|
||||||
|
#layerrule = blur, rofi
|
||||||
|
#layerrule = ignorezero, rofi
|
||||||
|
#layerrule = ignorealpha 0.5, rofi
|
||||||
|
#layerrule = dimaround, rofi
|
||||||
|
#layerrule = animation popin 10%, rofi
|
||||||
|
#layerrule = blur, notifications
|
||||||
|
#layerrule = ignorezero, notifications
|
||||||
|
layerrule = blur, waybar
|
||||||
|
#layerrule = ignorezero, waybar
|
||||||
|
layerrule = ignorealpha 0.5, waybar
|
||||||
|
layerrule = ignorealpha 0.5, tag:notif*
|
||||||
|
layerrule = blur, logout_dialog
|
||||||
|
|
||||||
|
# SWAYNC BLUR & XRAY
|
||||||
|
layerrule = blur, swaync-control-center
|
||||||
|
layerrule = blur, swaync-notification-window
|
||||||
|
layerrule = ignorezero, swaync-control-center
|
||||||
|
layerrule = ignorezero, swaync-notification-window
|
||||||
|
layerrule = ignorealpha 0.5, swaync-control-center
|
||||||
|
layerrule = ignorealpha 0.5, swaync-notification-window
|
||||||
|
layerrule = xray 0, swaync-control-center
|
||||||
|
layerrule = xray 0, swaync-notification-window
|
||||||
|
|
||||||
|
#FLOAT
|
||||||
|
#windowrule = float, tag:settings*
|
||||||
|
#windowrule = float, tag:viewer*
|
||||||
|
#windowrule = float, tag:multimedia_video*
|
||||||
|
windowrule = size 900 506, tag:multimedia_video*
|
||||||
|
windowrule = float, class:^(org.pulseaudio.pavucontrol)$
|
||||||
|
windowrule = size 50% 60%, class:^(org.pulseaudio.pavucontrol)$
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# POP UPS AND DIALOGUES
|
||||||
|
windowrule = float, title:^(Save As|Save a File|Pick Files)$
|
||||||
|
windowrule = size 50% 60%, title:^(Save As|Save a File|Pick Files)$
|
||||||
|
windowrule = center, title:^(Save As|Save a File|Pick Files)$
|
||||||
|
|
||||||
|
windowrule = float, initialTitle:(Open Files)
|
||||||
|
windowrule = size 70% 60%, initialTitle:(Open Files)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/home/sinsa/Pictures/wallpapers/viola-casa.jpg
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
general {
|
||||||
|
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances.
|
||||||
|
before_sleep_cmd = loginctl lock-session # lock before suspend.
|
||||||
|
after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display.
|
||||||
|
# unlock_cmd = /home/sinsa/.local/bin/eduroamcondizionale
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 150 # 2.5min.
|
||||||
|
on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||||
|
on-resume = brightnessctl -r # monitor backlight restore.
|
||||||
|
}
|
||||||
|
|
||||||
|
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
|
||||||
|
listener {
|
||||||
|
timeout = 150 # 2.5min.
|
||||||
|
on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
|
||||||
|
on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 300 # 5min
|
||||||
|
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 330 # 5.5min
|
||||||
|
on-timeout = hyprctl dispatch dpms off # screen off when timeout has passed
|
||||||
|
on-resume = hyprctl dispatch dpms on && brightnessctl -r # screen on when activity is detected after timeout has fired.
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 1800 # 30min
|
||||||
|
on-timeout = systemctl suspend # suspend pc
|
||||||
|
}
|
||||||
@@ -0,0 +1,450 @@
|
|||||||
|
# #######################################################################################
|
||||||
|
# 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
|
||||||
|
source = colors.conf
|
||||||
|
|
||||||
|
################
|
||||||
|
### MONITORS ###
|
||||||
|
################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Monitors/
|
||||||
|
monitor= eDP-1, 3072x1920@60, auto, auto
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### MY PROGRAMS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Keywords/
|
||||||
|
|
||||||
|
# Set programs that you use
|
||||||
|
$terminal = kitty
|
||||||
|
$fileManager = nautilus
|
||||||
|
# $menu = hyprlauncher
|
||||||
|
$menu = rofi -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
|
||||||
|
# exec-once = nm-applet
|
||||||
|
exec-once = awww-daemon
|
||||||
|
# exec-once = blueman-applet
|
||||||
|
exec-once = swaync
|
||||||
|
# exec-once = hyprpanel
|
||||||
|
# exec-once = hyprpaper
|
||||||
|
# exec-once = ashell & hyprpaper
|
||||||
|
exec-once = systemctl --user start hyprpolkitagent
|
||||||
|
#exec-once = nextcloud
|
||||||
|
exec-once =/usr/bin/nextcloud --background
|
||||||
|
exec-once = hypridle
|
||||||
|
exec-once = /home/sinsa/.local/bin/eduroamcondizionale
|
||||||
|
exec-once = sleep 0.5 ; waybar -c /home/sinsa/.config/waybar/configs/default -s /home/sinsa/.config/waybar/style/islands.css >> $HOME/.local/log/waybar.log
|
||||||
|
exec-once = wl-paste --type text --watch cliphist store
|
||||||
|
exec-once = wl-paste --type image --watch cliphist store
|
||||||
|
exec-once = vorta -d
|
||||||
|
exec-once = syncthing
|
||||||
|
#############################
|
||||||
|
### 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 ###
|
||||||
|
#####################
|
||||||
|
|
||||||
|
source= ~/.config/hypr/configs/looknfeel.conf
|
||||||
|
|
||||||
|
|
||||||
|
# ANIMATION
|
||||||
|
source= ~/.config/hypr/configs/UserAnimations.conf
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 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 {
|
||||||
|
# name = no-gaps-wtv1
|
||||||
|
# match:float = false
|
||||||
|
# match:workspace = w[tv1]
|
||||||
|
#
|
||||||
|
# border_size = 0
|
||||||
|
# rounding = 0
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# windowrule {
|
||||||
|
# name = no-gaps-f1
|
||||||
|
# match:float = false
|
||||||
|
# match:workspace = f[1]
|
||||||
|
#
|
||||||
|
# border_size = 0
|
||||||
|
# rounding = 0
|
||||||
|
# }
|
||||||
|
|
||||||
|
# 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 = true # If true disables the random hyprland logo / anime girl background. :(
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = royuan-rt100-wired-system-control
|
||||||
|
kb_layout = us
|
||||||
|
}
|
||||||
|
|
||||||
|
#############
|
||||||
|
### INPUT ###
|
||||||
|
#############
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#input
|
||||||
|
input {
|
||||||
|
kb_layout = it
|
||||||
|
# kb_variant = intl
|
||||||
|
# kb_model =
|
||||||
|
# kb_options =
|
||||||
|
# kb_rules =
|
||||||
|
follow_mouse = 1
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
clickfinger_behavior = 0
|
||||||
|
natural_scroll = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = royuan-rt100-wired-system-control
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant = intl,
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = royuan-rt100-wired-keyboard
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant = intl
|
||||||
|
}
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = royuan-rt100-wired-consumer-control
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant = intl
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = royuan-rt100-wired
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant = intl
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = at-translated-set-2-keyboard
|
||||||
|
kb_layout = it
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#input {
|
||||||
|
# kb_layout = us
|
||||||
|
# kb_variant = intl
|
||||||
|
# device = royuan-rt100-wired-keyboard
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Gestures
|
||||||
|
|
||||||
|
# -------- GESTURES ---------
|
||||||
|
|
||||||
|
# gesture = 3, horizontal, workspace
|
||||||
|
gesture = 3, swipe, move
|
||||||
|
gesture = 4, vertical, fullscreen, maximize
|
||||||
|
gesture = 4, horizontal, workspace
|
||||||
|
gesture = 3, pinchout, float
|
||||||
|
gesture = 3, pinchin, float
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 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 = SUPER # 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, exec, command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit
|
||||||
|
bind = $mainMod, E, exec, $fileManager
|
||||||
|
bind = $mainMod, V, togglefloating,
|
||||||
|
bind = $mainMod, RETURN, exec, export PATH="$HOME/.local/bin:$PATH" && $menu
|
||||||
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
|
# bind = $mainMod, J, layoutmsg # dwindle
|
||||||
|
bind = $mainMod, J, layoutmsg, togglesplit
|
||||||
|
bind = $mainMod, N, exec, $HOME/.local/bin/hyprltm-net
|
||||||
|
bind = $mainMod, W, exec, /home/sinsa/.config/hypr/scripts/rw.sh
|
||||||
|
bind = $mainMod, O, exec, pkill waybar
|
||||||
|
bind = $mainMod SHIFT, O, exec, waybar -c $HOME/.config/waybar/configs/default -s $HOME/.config/waybar/style/islands.css
|
||||||
|
#OPEN COPY PASTE HYSTORY
|
||||||
|
|
||||||
|
bind = $mainMod SHIFT, V, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy
|
||||||
|
|
||||||
|
|
||||||
|
# CONNECT AUTOMATICALLY TO EDUROAM
|
||||||
|
|
||||||
|
bind = $mainMod, L, exec, $HOME/.local/bin/eduroam
|
||||||
|
|
||||||
|
|
||||||
|
# SWITCH KEYBOARD LAYOUT
|
||||||
|
# WIP!!!
|
||||||
|
# bind = $mainMod, space,
|
||||||
|
|
||||||
|
|
||||||
|
bind = $mainMod, Z, exec, $HOME/.local/bin/zen-twilight
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
binde = SUPER SHIFT, 201, exec, notify-send hello
|
||||||
|
|
||||||
|
|
||||||
|
# Fullscreen window
|
||||||
|
|
||||||
|
bind = $mainMod SHIFT, F, fullscreen, 0
|
||||||
|
bind = $mainMod , F, fullscreen, 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
bind = $mainMod CTRL, left, workspace, r-1
|
||||||
|
|
||||||
|
bind = $mainMod CTRL, right, workspace, r+1
|
||||||
|
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
bind = $mainMod CTRL SHIFT, left, movetoworkspace, r-1
|
||||||
|
bind = $mainMod CTRL SHIFT, right, movetoworkspace, r+1
|
||||||
|
|
||||||
|
# Move window
|
||||||
|
bind = $mainMod SHIFT, left, movewindow, l
|
||||||
|
bind = $mainMod SHIFT, right, movewindow,r
|
||||||
|
bind = $mainMod SHIFT, up, movewindow, u
|
||||||
|
bind = $mainMod SHIFT, down, movewindow, d
|
||||||
|
|
||||||
|
|
||||||
|
# Resize window
|
||||||
|
|
||||||
|
binde = $mainMod ALT, right, resizeactive, 10 0
|
||||||
|
binde = $mainMod ALT, left, resizeactive, -10 0
|
||||||
|
binde = $mainMod ALT, up, resizeactive, 0 -10
|
||||||
|
binde = $mainMod ALT, down, resizeactive, 0 10
|
||||||
|
|
||||||
|
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
|
||||||
|
bindm = $mainMod SHIFT, mouse:272, resizewindow
|
||||||
|
|
||||||
|
|
||||||
|
bind = , Print, exec, hyprshot -m region -o /home/sinsa/Pictures/Screenshots/
|
||||||
|
bind = $mainMod ,Print, exec, hyprshot -zm region --clipboard-only -o /home/sinsa/Pictures/Screenshots/
|
||||||
|
|
||||||
|
# Laptop multimedia keys for volume and LCD brightness
|
||||||
|
|
||||||
|
bindel = ,XF86AudioRaiseVolume, exec, $HOME/.config/hypr/scripts/volume.sh --inc
|
||||||
|
bindel = ,XF86AudioLowerVolume, exec, $HOME/.config/hypr/scripts/volume.sh --dec
|
||||||
|
bindel = ,XF86AudioMute, exec, $HOME/.config/hypr/scripts/volume.sh --toggle
|
||||||
|
bindel = ,XF86AudioMicMute, exec, $HOME/.config/hypr/scripts/volume.sh --toggle-mic
|
||||||
|
bindel = ,XF86MonBrightnessUp, exec, $HOME/.config/hypr/scripts/brightness.sh --inc
|
||||||
|
bindel = ,XF86MonBrightnessDown, exec, $HOME/.config/hypr/scripts/brightness.sh --dec
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
|
||||||
|
# Lock
|
||||||
|
bindl=,switch:Lid Switch, exec, hyprlock
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##############################
|
||||||
|
### WINDOWS AND WORKSPACES ###
|
||||||
|
##############################
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Window-Rules/ for more
|
||||||
|
# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### TAGS ###
|
||||||
|
source= ~/.config/hypr/configs/tags.conf
|
||||||
|
|
||||||
|
# Example windowrules that are useful
|
||||||
|
|
||||||
|
### WINDOWRULES AND LAYERRULES ###
|
||||||
|
source = ~/.config/hypr/configs/windowrules.conf
|
||||||
|
|
||||||
|
#windowrule {
|
||||||
|
# # Ignore maximize requests from all apps. You'll probably like this.
|
||||||
|
# name = suppress-maximize-events
|
||||||
|
# match:class = .*
|
||||||
|
#
|
||||||
|
# suppress_event = maximize
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
#windowrule {
|
||||||
|
# # Fix some dragging issues with XWayland
|
||||||
|
# name = fix-xwayland-drags
|
||||||
|
# match:class = ^$
|
||||||
|
# match:title = ^$
|
||||||
|
# match:xwayland = true
|
||||||
|
# match:float = true
|
||||||
|
# match:fullscreen = false
|
||||||
|
# match:pin = false
|
||||||
|
#
|
||||||
|
# no_focus = true
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
## Hyprland-run windowrule
|
||||||
|
#windowrule {
|
||||||
|
# name = move-hyprland-run
|
||||||
|
#
|
||||||
|
# match:class = hyprland-run
|
||||||
|
#
|
||||||
|
# move = 20 monitor_h-120
|
||||||
|
# float = yes
|
||||||
|
#}
|
||||||
@@ -0,0 +1,480 @@
|
|||||||
|
# #######################################################################################
|
||||||
|
# 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= DP-1, 3072x1920@140, auto, auto
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### MY PROGRAMS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Keywords/
|
||||||
|
|
||||||
|
# Set programs that you use
|
||||||
|
$terminal = kitty
|
||||||
|
$fileManager = nautilus
|
||||||
|
# $menu = hyprlauncher
|
||||||
|
$menu = rofi -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
|
||||||
|
# exec-once = nm-applet
|
||||||
|
exec-once = waybar -c /home/sinsa/.config/waybar/configs/default -s /home/sinsa/.config/waybar/style/islands.css
|
||||||
|
exec-once = swww-daemon
|
||||||
|
exec-once = blueman-applet
|
||||||
|
exec-once = swaync
|
||||||
|
# exec-once = hyprpanel
|
||||||
|
# exec-once = hyprpaper
|
||||||
|
# exec-once = ashell & hyprpaper
|
||||||
|
exec-once = systemctl --user start hyprpolkitagent
|
||||||
|
exec-once = nextcloud
|
||||||
|
exec-once = hypridle
|
||||||
|
exec-once = /home/sinsa/.local/bin/eduroamcondizionale
|
||||||
|
#############################
|
||||||
|
### 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
|
||||||
|
|
||||||
|
# CIANO TO BLU
|
||||||
|
# col.active_border = rgba(00ffffff) rgba(57a7e6ff) 45deg
|
||||||
|
|
||||||
|
|
||||||
|
col.active_border = rgba(00bbffff) rgba(57a7e6ff) 45deg
|
||||||
|
col.inactive_border = rgba(595959aa)
|
||||||
|
|
||||||
|
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||||
|
resize_on_border = true
|
||||||
|
|
||||||
|
# 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 {
|
||||||
|
# name = no-gaps-wtv1
|
||||||
|
# match:float = false
|
||||||
|
# match:workspace = w[tv1]
|
||||||
|
#
|
||||||
|
# border_size = 0
|
||||||
|
# rounding = 0
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# windowrule {
|
||||||
|
# name = no-gaps-f1
|
||||||
|
# match:float = false
|
||||||
|
# match:workspace = f[1]
|
||||||
|
#
|
||||||
|
# border_size = 0
|
||||||
|
# rounding = 0
|
||||||
|
# }
|
||||||
|
|
||||||
|
# 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 = true # If true disables the random hyprland logo / anime girl background. :(
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = royuan-rt100-wired-system-control
|
||||||
|
kb_layout = us
|
||||||
|
}
|
||||||
|
|
||||||
|
#############
|
||||||
|
### INPUT ###
|
||||||
|
#############
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#input
|
||||||
|
input {
|
||||||
|
kb_layout = it
|
||||||
|
# kb_variant = intl
|
||||||
|
# kb_model =
|
||||||
|
# kb_options =
|
||||||
|
# kb_rules =
|
||||||
|
follow_mouse = 1
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
clickfinger_behavior = 0
|
||||||
|
natural_scroll = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = royuan-rt100-wired-system-control
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant = intl,
|
||||||
|
|
||||||
|
kb_options = altwin:swap_alt_win, nodeadkeys
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = royuan-rt100-wired-keyboard
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant = intl
|
||||||
|
kb_options = altwin:swap_alt_win, nodeadkeys
|
||||||
|
}
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = royuan-rt100-wired-consumer-control
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant = intl
|
||||||
|
kb_options = altwin:swap_alt_win, nodeadkeys
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = royuan-rt100-wired
|
||||||
|
kb_layout = us
|
||||||
|
kb_variant = intl
|
||||||
|
kb_options = altwin:swap_alt_win, nodeadkeys
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
device {
|
||||||
|
name = at-translated-set-2-keyboard
|
||||||
|
kb_layout = it
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#input {
|
||||||
|
# kb_layout = us
|
||||||
|
# kb_variant = intl
|
||||||
|
# device = royuan-rt100-wired-keyboard
|
||||||
|
#}
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# See https://wiki.hypr.land/Configuring/Gestures
|
||||||
|
|
||||||
|
# -------- GESTURES ---------
|
||||||
|
|
||||||
|
# gesture = 3, horizontal, workspace
|
||||||
|
gesture = 3, swipe, move
|
||||||
|
gesture = 4, vertical, fullscreen, maximize
|
||||||
|
gesture = 4, horizontal, workspace
|
||||||
|
gesture = 3, pinchout, float
|
||||||
|
gesture = 3, pinchin, float
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 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 = SUPER # 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, exec, command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit
|
||||||
|
bind = $mainMod, E, exec, $fileManager
|
||||||
|
bind = $mainMod, V, togglefloating,
|
||||||
|
bind = $mainMod, RETURN, exec, $menu
|
||||||
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
|
bind = $mainMod, J, layoutmsg # dwindle
|
||||||
|
bind = $mainMod, N, exec, $HOME/.local/bin/hyprltm-net
|
||||||
|
bind = $mainMod, W, exec, /home/sinsa/.config/hypr/scripts/rw.sh
|
||||||
|
|
||||||
|
# CONNECT AUTOMATICALLY TO EDUROAM
|
||||||
|
|
||||||
|
bind = $mainMod, L, exec, $HOME/.local/bin/eduroam
|
||||||
|
|
||||||
|
|
||||||
|
# SWITCH KEYBOARD LAYOUT
|
||||||
|
# WIP!!!
|
||||||
|
# bind = $mainMod, space,
|
||||||
|
|
||||||
|
|
||||||
|
bind = $mainMod, Z, exec, /home/sinsa/.local/bin/zen-twilight
|
||||||
|
|
||||||
|
|
||||||
|
# Fullscreen window
|
||||||
|
|
||||||
|
bind = $mainMod SHIFT, F, fullscreen, 0
|
||||||
|
bind = $mainMod , F, fullscreen, 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 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 CTRL, 1, movetoworkspace, 1
|
||||||
|
bind = $mainMod CTRL, 2, movetoworkspace, 2
|
||||||
|
bind = $mainMod CTRL, 3, movetoworkspace, 3
|
||||||
|
bind = $mainMod CTRL, 4, movetoworkspace, 4
|
||||||
|
bind = $mainMod CTRL, 5, movetoworkspace, 5
|
||||||
|
bind = $mainMod CTRL, 6, movetoworkspace, 6
|
||||||
|
bind = $mainMod CTRL, 7, movetoworkspace, 7
|
||||||
|
bind = $mainMod CTRL, 8, movetoworkspace, 8
|
||||||
|
bind = $mainMod CTRL, 9, movetoworkspace, 9
|
||||||
|
bind = $mainMod CTRL, 0, movetoworkspace, 10
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Move window
|
||||||
|
bind = $mainMod SHIFT, left, movewindow, l
|
||||||
|
bind = $mainMod SHIFT, right, movewindow,r
|
||||||
|
bind = $mainMod SHIFT, up, movewindow, u
|
||||||
|
bind = $mainMod SHIFT, down, movewindow, d
|
||||||
|
|
||||||
|
|
||||||
|
# Resize window
|
||||||
|
|
||||||
|
bind = $mainMod ALT, right, resizeactive, 10 0
|
||||||
|
bind = $mainMod ALT, left, resizeactive, -10 0
|
||||||
|
bind = $mainMod ALT, up, resizeactive, 0 -10
|
||||||
|
bind = $mainMod ALT, down, resizeactive, 0 10
|
||||||
|
|
||||||
|
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
|
||||||
|
bindm = $mainMod SHIFT, mouse:272, 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
|
||||||
|
|
||||||
|
|
||||||
|
# Lock
|
||||||
|
bindl=,switch:Lid Switch, exec, hyprlock
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
##############################
|
||||||
|
### 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 windowrules that are useful
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
# Ignore maximize requests from all apps. You'll probably like this.
|
||||||
|
name = suppress-maximize-events
|
||||||
|
match:class = .*
|
||||||
|
|
||||||
|
suppress_event = maximize
|
||||||
|
}
|
||||||
|
|
||||||
|
windowrule {
|
||||||
|
# Fix some dragging issues with XWayland
|
||||||
|
name = fix-xwayland-drags
|
||||||
|
match:class = ^$
|
||||||
|
match:title = ^$
|
||||||
|
match:xwayland = true
|
||||||
|
match:float = true
|
||||||
|
match:fullscreen = false
|
||||||
|
match:pin = false
|
||||||
|
|
||||||
|
no_focus = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# Hyprland-run windowrule
|
||||||
|
windowrule {
|
||||||
|
name = move-hyprland-run
|
||||||
|
|
||||||
|
match:class = hyprland-run
|
||||||
|
|
||||||
|
move = 20 monitor_h-120
|
||||||
|
float = yes
|
||||||
|
}
|
||||||
@@ -0,0 +1,148 @@
|
|||||||
|
source = colors.conf
|
||||||
|
$Scripts = $HOME/.config/hypr/scripts
|
||||||
|
|
||||||
|
auth {
|
||||||
|
pam {
|
||||||
|
enabled = true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fingerprint {
|
||||||
|
enabled = true
|
||||||
|
ready_message = "Scan fingerprint to unlock"
|
||||||
|
present_message = "Scanning"
|
||||||
|
retry_delay = 250
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
general {
|
||||||
|
grace = 1
|
||||||
|
fractional_scaling = 2
|
||||||
|
immediate_render = true
|
||||||
|
}
|
||||||
|
|
||||||
|
background {
|
||||||
|
monitor =
|
||||||
|
# NOTE: use only 1 path
|
||||||
|
# path = screenshot # screenshot of your desktop
|
||||||
|
#path = $HOME/.config/hypr/wallpaper_effects/.wallpaper_modified # by wallpaper effects
|
||||||
|
path = ~/.config/hypr/current_wallpaper # CURRENT WALLPAPER
|
||||||
|
|
||||||
|
color = rgb(0,0,0) # color will be rendered initially until path is available
|
||||||
|
|
||||||
|
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
|
||||||
|
blur_size = 3
|
||||||
|
blur_passes = 2 # 0 disables blurring
|
||||||
|
noise = 0.0117
|
||||||
|
contrast = 1.3000 # Vibrant!!!
|
||||||
|
brightness = 0.6000
|
||||||
|
vibrancy = 0.2100
|
||||||
|
vibrancy_darkness = 0.0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Hours
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo "<b><big> $(date +"%H") </big></b>"
|
||||||
|
color = $on_secondary_container
|
||||||
|
font_size = 112
|
||||||
|
font_family = Adwaita Sans
|
||||||
|
shadow_passes = 0
|
||||||
|
shadow_size = 0
|
||||||
|
|
||||||
|
position = 0, 220
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# Minutes
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo "<b><big> $(date +"%M") </big></b>"
|
||||||
|
color = $on_secondary_container
|
||||||
|
font_size = 112
|
||||||
|
font_family = Adwaita Sans
|
||||||
|
shadow_passes = 0
|
||||||
|
shadow_size = 0
|
||||||
|
|
||||||
|
position = 0, 80
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# Today
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:18000000] echo "<b><big> "$(date +'%A')" </big></b>"
|
||||||
|
color = $secondary
|
||||||
|
font_size = 18
|
||||||
|
font_family = JetBrainsMono NFM
|
||||||
|
|
||||||
|
position = 0, -15
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# Week
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:18000000] echo "<b> "$(date +'%d %b')" </b>"
|
||||||
|
color = $secondary
|
||||||
|
font_size = 14
|
||||||
|
font_family = JetBrainsMono Nerd Font 10
|
||||||
|
|
||||||
|
position = 0, -40
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# Degrees
|
||||||
|
#label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:18000000] echo "<b>Feels like<big> $(curl -s 'wttr.in?format=%t' | tr -d '+') </big></b>"
|
||||||
|
color = $color8
|
||||||
|
font_size = 14
|
||||||
|
font_family = JetBrainsMono NFM
|
||||||
|
|
||||||
|
position = 0, 40
|
||||||
|
halign = center
|
||||||
|
valign = bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
# USER
|
||||||
|
#label {
|
||||||
|
monitor =
|
||||||
|
text = $USER
|
||||||
|
color = $color8
|
||||||
|
font_size = 14
|
||||||
|
font_family = JetBrainsMono NFM Bold
|
||||||
|
position = 0, 200
|
||||||
|
halign = center
|
||||||
|
valign = bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
input-field {
|
||||||
|
monitor =
|
||||||
|
size = 250, 50
|
||||||
|
outline_thickness = 3
|
||||||
|
|
||||||
|
dots_size = 0.26 # Scale of input-field height, 0.2 - 0.8
|
||||||
|
dots_spacing = 0.64 # Scale of dots' absolute size, 0.0 - 1.0
|
||||||
|
dots_center = true
|
||||||
|
dots_rouding = -1
|
||||||
|
|
||||||
|
rounding = 22
|
||||||
|
outer_color = $source_color
|
||||||
|
inner_color = rgba(255, 255, 255, 0.1)
|
||||||
|
font_color = $secondary
|
||||||
|
fade_on_empty = true
|
||||||
|
placeholder_text = <i>Password...</i> # Text rendered in the input box when it's empty.
|
||||||
|
|
||||||
|
position = 0, 120
|
||||||
|
halign = center
|
||||||
|
valign = bottom
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
|
||||||
|
auth {
|
||||||
|
pam {
|
||||||
|
enabled = true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fingerprint {
|
||||||
|
enabled = true
|
||||||
|
ready_message = "Scan fingerprint to unlock"
|
||||||
|
present_message = "Scanning"
|
||||||
|
retry_delay = 250
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
background {
|
||||||
|
monitor =
|
||||||
|
path = ~/Pictures/Sfondi/4.jpg
|
||||||
|
blur_passes = 3
|
||||||
|
contrast = 0.8916
|
||||||
|
brightness = 0.8172
|
||||||
|
vibrancy = 0.1696
|
||||||
|
vibrancy_darkness = 0.0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Date display
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo -e "$(LC_TIME=en_US.UTF-8 date +"%A, %B %d")"
|
||||||
|
color = rgba(216, 222, 233, 0.90)
|
||||||
|
font_size = 25
|
||||||
|
font_family = SF Pro Display Semibold
|
||||||
|
position = 0, 350
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# Time display
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:1000] echo "<span>$(date +"%H:%M")</span>"
|
||||||
|
color = rgba(216, 222, 233, 0.90)
|
||||||
|
font_size = 120
|
||||||
|
font_family = SF Pro Display Bold
|
||||||
|
position = 0, 230
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
input-field {
|
||||||
|
monitor =
|
||||||
|
size = 280, 55
|
||||||
|
outline_thickness = 2
|
||||||
|
dots_size = 0.2
|
||||||
|
dots_spacing = 0.2
|
||||||
|
dots_center = true
|
||||||
|
outer_color = rgba(0, 0, 0, 0)
|
||||||
|
inner_color = rgba(255, 255, 255, 0.1)
|
||||||
|
font_color = rgb(200, 200, 200)
|
||||||
|
fade_on_empty = false
|
||||||
|
font_family = SF Pro Display Bold
|
||||||
|
placeholder_text = <i><span foreground="##ffffff99"> Hi Sinsa :)</span></i>
|
||||||
|
hide_input = false
|
||||||
|
position = 0, -210
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
preload=/home/sinsa/Pictures/hypr5.jpg
|
||||||
|
splash = false
|
||||||
|
# wallpaper {
|
||||||
|
# monitor =
|
||||||
|
# path = /home/sinsa/Pictures/Sfondi/6.jpg
|
||||||
|
# fit_mode = cover
|
||||||
|
# }
|
||||||
|
|
||||||
|
wallpaper {
|
||||||
|
monitor =
|
||||||
|
path = /home/sinsa/.config/hypr/current_wallpaper
|
||||||
|
fit_mode = cover
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
||||||
|
# Airplane Mode. Turning on or off all wifi using rfkill.
|
||||||
|
|
||||||
|
notif="$HOME/.config/swaync/images/airplane.png"
|
||||||
|
|
||||||
|
# Check if any wireless device is blocked
|
||||||
|
wifi_blocked=$(rfkill list wifi | grep -o "Soft blocked: yes")
|
||||||
|
|
||||||
|
if [ -n "$wifi_blocked" ]; then
|
||||||
|
rfkill unblock wifi
|
||||||
|
notify-send -u low -i "$notif" " Airplane" " mode: OFF"
|
||||||
|
else
|
||||||
|
rfkill block wifi
|
||||||
|
notify-send -u low -i "$notif" " Airplane" " mode: ON"
|
||||||
|
fi
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
||||||
|
|
||||||
|
# Copied from Discord post. Thanks to @Zorg
|
||||||
|
|
||||||
|
|
||||||
|
# Get id of an active window
|
||||||
|
active_pid=$(hyprctl activewindow | grep -o 'pid: [0-9]*' | cut -d' ' -f2)
|
||||||
|
|
||||||
|
# Close active window
|
||||||
|
kill $active_pid
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
||||||
|
# Script for waybar layout or configs
|
||||||
|
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
# Define directories
|
||||||
|
waybar_layouts="$HOME/.config/waybar/configs"
|
||||||
|
waybar_config="$HOME/.config/waybar/config"
|
||||||
|
SCRIPTSDIR="$HOME/.config/hypr/scripts"
|
||||||
|
rofi_config="$HOME/.config/rofi/config.rasi"
|
||||||
|
msg=' Choose Waybar Layout '
|
||||||
|
|
||||||
|
# Function to display menu options
|
||||||
|
menu() {
|
||||||
|
options=()
|
||||||
|
while IFS= read -r file; do
|
||||||
|
options+=("$(basename "$file")")
|
||||||
|
done < <(find -L "$waybar_layouts" -maxdepth 1 -type f -exec basename {} \; | sort )
|
||||||
|
|
||||||
|
printf '%s\n' "${options[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Apply selected configuration
|
||||||
|
apply_config() {
|
||||||
|
ln -sf "$waybar_layouts/$1" "$waybar_config"
|
||||||
|
"${SCRIPTSDIR}/wbrestart.sh" &
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main function
|
||||||
|
main() {
|
||||||
|
choice=$(menu | rofi -i -dmenu -config "$rofi_config" -mesg "$msg")
|
||||||
|
|
||||||
|
if [[ -z "$choice" ]]; then
|
||||||
|
echo "No option selected. Exiting."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $choice in
|
||||||
|
"no panel")
|
||||||
|
pgrep -x "waybar" && pkill waybar || true
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
apply_config "$choice"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Kill Rofi if already running before execution
|
||||||
|
if pgrep -x "rofi" >/dev/null; then
|
||||||
|
pkill rofi
|
||||||
|
#exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
main
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
||||||
|
# Script for waybar styles
|
||||||
|
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
# Define directories
|
||||||
|
waybar_styles="$HOME/.config/waybar/style"
|
||||||
|
waybar_style="$HOME/.config/waybar/style.css"
|
||||||
|
SCRIPTSDIR="$HOME/.config/hypr/scripts"
|
||||||
|
rofi_config="$HOME/.config/rofi/config.rasi"
|
||||||
|
msg=' Choose Waybar Style'
|
||||||
|
|
||||||
|
# Function to display menu options
|
||||||
|
menu() {
|
||||||
|
options=()
|
||||||
|
while IFS= read -r file; do
|
||||||
|
if [ -f "$waybar_styles/$file" ]; then
|
||||||
|
options+=("$(basename "$file" .css)")
|
||||||
|
fi
|
||||||
|
done < <(find -L "$waybar_styles" -maxdepth 1 -type f -name '*.css' -exec basename {} \; | sort )
|
||||||
|
|
||||||
|
printf '%s\n' "${options[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Apply selected style
|
||||||
|
apply_style() {
|
||||||
|
ln -sf "$waybar_styles/$1.css" "$waybar_style"
|
||||||
|
"${SCRIPTSDIR}/wbrestart.sh" &
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main function
|
||||||
|
main() {
|
||||||
|
choice=$(menu | rofi -i -dmenu -config "$rofi_config" -mesg "$msg")
|
||||||
|
|
||||||
|
if [[ -z "$choice" ]]; then
|
||||||
|
echo "No option selected. Exiting."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
apply_style "$choice"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Kill Rofi if already running before execution
|
||||||
|
if pgrep -x "rofi" >/dev/null; then
|
||||||
|
pkill rofi
|
||||||
|
#exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
main
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
wlogout
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
||||||
|
# Script for Monitor backlights (if supported) using brightnessctl
|
||||||
|
|
||||||
|
iDIR="$HOME/.config/swaync/icons"
|
||||||
|
notification_timeout=1000
|
||||||
|
step=5 # INCREASE/DECREASE BY THIS VALUE
|
||||||
|
|
||||||
|
# Get brightness
|
||||||
|
get_backlight() {
|
||||||
|
brightnessctl -m | cut -d, -f4 | sed 's/%//'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get icons
|
||||||
|
get_icon() {
|
||||||
|
current=$(get_backlight)
|
||||||
|
if [ "$current" -le "20" ]; then
|
||||||
|
icon="$iDIR/brightness-20.png"
|
||||||
|
elif [ "$current" -le "40" ]; then
|
||||||
|
icon="$iDIR/brightness-40.png"
|
||||||
|
elif [ "$current" -le "60" ]; then
|
||||||
|
icon="$iDIR/brightness-60.png"
|
||||||
|
elif [ "$current" -le "80" ]; then
|
||||||
|
icon="$iDIR/brightness-80.png"
|
||||||
|
else
|
||||||
|
icon="$iDIR/brightness-100.png"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Notify
|
||||||
|
notify_user() {
|
||||||
|
notify-send -e -h string:x-canonical-private-synchronous:brightness_notif -h int:value:$current -u low -i $icon "Screen" "Brightness:$current%"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Change brightness
|
||||||
|
change_backlight() {
|
||||||
|
local current_brightness
|
||||||
|
current_brightness=$(get_backlight)
|
||||||
|
|
||||||
|
# Calculate new brightness
|
||||||
|
if [[ "$1" == "+${step}%" ]]; then
|
||||||
|
new_brightness=$((current_brightness + step))
|
||||||
|
elif [[ "$1" == "${step}%-" ]]; then
|
||||||
|
new_brightness=$((current_brightness - step))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure new brightness is within valid range
|
||||||
|
if ((new_brightness < 5)); then
|
||||||
|
new_brightness=5
|
||||||
|
elif ((new_brightness > 100)); then
|
||||||
|
new_brightness=100
|
||||||
|
fi
|
||||||
|
|
||||||
|
brightnessctl set "${new_brightness}%"
|
||||||
|
get_icon
|
||||||
|
current=$new_brightness
|
||||||
|
notify_user
|
||||||
|
}
|
||||||
|
|
||||||
|
# Execute accordingly
|
||||||
|
case "$1" in
|
||||||
|
"--get")
|
||||||
|
get_backlight
|
||||||
|
;;
|
||||||
|
"--inc")
|
||||||
|
change_backlight "+${step}%"
|
||||||
|
;;
|
||||||
|
"--dec")
|
||||||
|
change_backlight "${step}%-"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
get_backlight
|
||||||
|
;;
|
||||||
|
esac
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
hyprlock
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
pkill waybar
|
||||||
|
waybar -c /home/sinsa/.config/waybar/configs/default -s /home/sinsa/.config/waybar/style/islands.css
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
!#/bin/zsh
|
||||||
|
grim -g "$(slurp)" &
|
||||||
@@ -0,0 +1,144 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
||||||
|
# Scripts for volume controls for audio and mic
|
||||||
|
|
||||||
|
iDIR="$HOME/.config/swaync/icons"
|
||||||
|
sDIR="$HOME/.config/hypr/scripts"
|
||||||
|
|
||||||
|
# Get Volume
|
||||||
|
get_volume() {
|
||||||
|
volume=$(pamixer --get-volume)
|
||||||
|
if [[ "$volume" -eq "0" ]]; then
|
||||||
|
echo "Muted"
|
||||||
|
else
|
||||||
|
echo "$volume %"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get icons
|
||||||
|
get_icon() {
|
||||||
|
current=$(get_volume)
|
||||||
|
if [[ "$current" == "Muted" ]]; then
|
||||||
|
echo "$iDIR/volume-mute.png"
|
||||||
|
elif [[ "${current%\%}" -le 30 ]]; then
|
||||||
|
echo "$iDIR/volume-low.png"
|
||||||
|
elif [[ "${current%\%}" -le 60 ]]; then
|
||||||
|
echo "$iDIR/volume-mid.png"
|
||||||
|
else
|
||||||
|
echo "$iDIR/volume-high.png"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Notify
|
||||||
|
notify_user() {
|
||||||
|
if [[ "$(get_volume)" == "Muted" ]]; then
|
||||||
|
notify-send -e -h string:x-canonical-private-synchronous:volume_notif -u low -i "$(get_icon)" " Volume:" " Muted"
|
||||||
|
else
|
||||||
|
notify-send -e -h int:value:"$(get_volume | sed 's/%//')" -h string:x-canonical-private-synchronous:volume_notif -u low -i "$(get_icon)" " Volume Level:" " $(get_volume)" &&
|
||||||
|
"$sDIR/Sounds.sh" --volume
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Increase Volume
|
||||||
|
inc_volume() {
|
||||||
|
if [ "$(pamixer --get-mute)" == "true" ]; then
|
||||||
|
toggle_mute
|
||||||
|
else
|
||||||
|
pamixer -i 5 --allow-boost --set-limit 150 && notify_user
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Decrease Volume
|
||||||
|
dec_volume() {
|
||||||
|
if [ "$(pamixer --get-mute)" == "true" ]; then
|
||||||
|
toggle_mute
|
||||||
|
else
|
||||||
|
pamixer -d 5 && notify_user
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Toggle Mute
|
||||||
|
toggle_mute() {
|
||||||
|
if [ "$(pamixer --get-mute)" == "false" ]; then
|
||||||
|
pamixer -m && notify-send -e -u low -i "$iDIR/volume-mute.png" " Mute"
|
||||||
|
elif [ "$(pamixer --get-mute)" == "true" ]; then
|
||||||
|
pamixer -u && notify-send -e -u low -i "$(get_icon)" " Volume:" " Switched ON"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Toggle Mic
|
||||||
|
toggle_mic() {
|
||||||
|
if [ "$(pamixer --default-source --get-mute)" == "false" ]; then
|
||||||
|
pamixer --default-source -m && notify-send -e -u low -i "$iDIR/microphone-mute.png" " Microphone:" " Switched OFF"
|
||||||
|
elif [ "$(pamixer --default-source --get-mute)" == "true" ]; then
|
||||||
|
pamixer -u --default-source u && notify-send -e -u low -i "$iDIR/microphone.png" " Microphone:" " Switched ON"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
# Get Mic Icon
|
||||||
|
get_mic_icon() {
|
||||||
|
current=$(pamixer --default-source --get-volume)
|
||||||
|
if [[ "$current" -eq "0" ]]; then
|
||||||
|
echo "$iDIR/microphone-mute.png"
|
||||||
|
else
|
||||||
|
echo "$iDIR/microphone.png"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get Microphone Volume
|
||||||
|
get_mic_volume() {
|
||||||
|
volume=$(pamixer --default-source --get-volume)
|
||||||
|
if [[ "$volume" -eq "0" ]]; then
|
||||||
|
echo "Muted"
|
||||||
|
else
|
||||||
|
echo "$volume %"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Notify for Microphone
|
||||||
|
notify_mic_user() {
|
||||||
|
volume=$(get_mic_volume)
|
||||||
|
icon=$(get_mic_icon)
|
||||||
|
notify-send -e -h int:value:"$volume" -h "string:x-canonical-private-synchronous:volume_notif" -u low -i "$icon" " Mic Level:" " $volume"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Increase MIC Volume
|
||||||
|
inc_mic_volume() {
|
||||||
|
if [ "$(pamixer --default-source --get-mute)" == "true" ]; then
|
||||||
|
toggle_mic
|
||||||
|
else
|
||||||
|
pamixer --default-source -i 5 && notify_mic_user
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Decrease MIC Volume
|
||||||
|
dec_mic_volume() {
|
||||||
|
if [ "$(pamixer --default-source --get-mute)" == "true" ]; then
|
||||||
|
toggle-mic
|
||||||
|
else
|
||||||
|
pamixer --default-source -d 5 && notify_mic_user
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Execute accordingly
|
||||||
|
if [[ "$1" == "--get" ]]; then
|
||||||
|
get_volume
|
||||||
|
elif [[ "$1" == "--inc" ]]; then
|
||||||
|
inc_volume
|
||||||
|
elif [[ "$1" == "--dec" ]]; then
|
||||||
|
dec_volume
|
||||||
|
elif [[ "$1" == "--toggle" ]]; then
|
||||||
|
toggle_mute
|
||||||
|
elif [[ "$1" == "--toggle-mic" ]]; then
|
||||||
|
toggle_mic
|
||||||
|
elif [[ "$1" == "--get-icon" ]]; then
|
||||||
|
get_icon
|
||||||
|
elif [[ "$1" == "--get-mic-icon" ]]; then
|
||||||
|
get_mic_icon
|
||||||
|
elif [[ "$1" == "--mic-inc" ]]; then
|
||||||
|
inc_mic_volume
|
||||||
|
elif [[ "$1" == "--mic-dec" ]]; then
|
||||||
|
dec_mic_volume
|
||||||
|
else
|
||||||
|
get_volume
|
||||||
|
fi
|
||||||
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
ICON_CONN=""
|
||||||
|
ICON_DISCONN=""
|
||||||
|
|
||||||
|
a=$(nmcli connection show --active | grep "casa")
|
||||||
|
|
||||||
|
if [ $(nmcli connection show --active | grep "casa") ]; then
|
||||||
|
TEXT="$ICON_CONN"
|
||||||
|
else
|
||||||
|
TEXT="$ICON_DISCONN"
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '{"text":"%s"}\n' "$TEXT"
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# /* ---- 💫 https://github.com/JaKooLit 💫 ---- */ ##
|
||||||
|
# Not my own work. This was added through Github PR. Credit to original author
|
||||||
|
|
||||||
|
#----- Optimized bars animation without much CPU usage increase --------
|
||||||
|
bar="▁▂▃▄▅▆▇█"
|
||||||
|
dict="s/;//g"
|
||||||
|
|
||||||
|
# Calculate the length of the bar outside the loop
|
||||||
|
bar_length=${#bar}
|
||||||
|
|
||||||
|
# Create dictionary to replace char with bar
|
||||||
|
for ((i = 0; i < bar_length; i++)); do
|
||||||
|
dict+=";s/$i/${bar:$i:1}/g"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Create cava config
|
||||||
|
config_file="/tmp/bar_cava_config"
|
||||||
|
cat >"$config_file" <<EOF
|
||||||
|
[general]
|
||||||
|
# Older systems show significant CPU use with default framerate
|
||||||
|
# Setting maximum framerate to 30
|
||||||
|
# You can increase the value if you wish
|
||||||
|
framerate = 30
|
||||||
|
bars = 10
|
||||||
|
|
||||||
|
[input]
|
||||||
|
method = pulse
|
||||||
|
source = auto
|
||||||
|
|
||||||
|
[output]
|
||||||
|
method = raw
|
||||||
|
raw_target = /dev/stdout
|
||||||
|
data_format = ascii
|
||||||
|
ascii_max_range = 7
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Kill cava if it's already running
|
||||||
|
pkill -f "cava -p $config_file"
|
||||||
|
|
||||||
|
# Read stdout from cava and perform substitution in a single sed command
|
||||||
|
cava -p "$config_file" | sed -u "$dict"
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
killall -9 swaync
|
||||||
|
killall -9 waybar
|
||||||
|
|
||||||
|
swaync &
|
||||||
|
waybar &
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# === CONFIG ===
|
||||||
|
WALLPAPER_DIR="$HOME/Pictures/wallpapers"
|
||||||
|
SYMLINK_PATH="$HOME/.config/hypr/current_wallpaper"
|
||||||
|
|
||||||
|
cd "$WALLPAPER_DIR" || exit 1
|
||||||
|
|
||||||
|
# === handle spaces name
|
||||||
|
IFS=$'\n'
|
||||||
|
|
||||||
|
# === ICON-PREVIEW SELECTION WITH ROFI, SORTED BY NEWEST ===
|
||||||
|
SELECTED_WALL=$(for a in $(ls -t *.jpg *.png *.gif *.jpeg 2>/dev/null); do echo -en "$a\0icon\x1f$a\n"; done | rofi -dmenu -p "")
|
||||||
|
[ -z "$SELECTED_WALL" ] && exit 1
|
||||||
|
SELECTED_PATH="$WALLPAPER_DIR/$SELECTED_WALL"
|
||||||
|
|
||||||
|
# === SET WALLPAPER ===
|
||||||
|
matugen image "$SELECTED_PATH"
|
||||||
|
|
||||||
|
# === CREATE SYMLINK ===
|
||||||
|
mkdir -p "$(dirname "$SYMLINK_PATH")"
|
||||||
|
ln -sf "$SELECTED_PATH" "$SYMLINK_PATH"
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# Core Colors
|
||||||
|
background #151218
|
||||||
|
foreground #e7e0e8
|
||||||
|
selection_foreground #d4bbfc
|
||||||
|
selection_background #3a255b
|
||||||
|
cursor #d4bbfc
|
||||||
|
cursor_text_color #151218
|
||||||
|
|
||||||
|
# Regular Colors
|
||||||
|
color0 #151218
|
||||||
|
color1 #ffb4ab
|
||||||
|
color2 #d4bbfc
|
||||||
|
color3 #f1b7c3
|
||||||
|
color4 #ecdcff
|
||||||
|
color5 #eadef7
|
||||||
|
color6 #cec2db
|
||||||
|
color7 #e7e0e8
|
||||||
|
|
||||||
|
# Bright Colors
|
||||||
|
color8 #3b383e
|
||||||
|
color9 #ffb4ab
|
||||||
|
color10 #d4bbfc
|
||||||
|
color11 #f1b7c3
|
||||||
|
color12 #ecdcff
|
||||||
|
color13 #eadef7
|
||||||
|
color14 #cec2db
|
||||||
|
color15 #e7e0e8
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
# vim:ft=kitty
|
||||||
|
|
||||||
|
## name: Catppuccin-Mocha
|
||||||
|
## author: Pocco81 (https://github.com/Pocco81)
|
||||||
|
## license: MIT
|
||||||
|
## upstream: https://github.com/catppuccin/kitty/blob/main/themes/mocha.conf
|
||||||
|
## blurb: Soothing pastel theme for the high-spirited!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# The basic colors
|
||||||
|
foreground #CDD6F4
|
||||||
|
background #1E1E2E
|
||||||
|
selection_foreground #1E1E2E
|
||||||
|
selection_background #F5E0DC
|
||||||
|
|
||||||
|
# Cursor colors
|
||||||
|
cursor #F5E0DC
|
||||||
|
cursor_text_color #1E1E2E
|
||||||
|
|
||||||
|
# URL underline color when hovering with mouse
|
||||||
|
url_color #F5E0DC
|
||||||
|
|
||||||
|
# Kitty window border colors
|
||||||
|
active_border_color #B4BEFE
|
||||||
|
inactive_border_color #6C7086
|
||||||
|
bell_border_color #F9E2AF
|
||||||
|
|
||||||
|
# OS Window titlebar colors
|
||||||
|
wayland_titlebar_color system
|
||||||
|
macos_titlebar_color system
|
||||||
|
|
||||||
|
# Tab bar colors
|
||||||
|
active_tab_foreground #11111B
|
||||||
|
active_tab_background #CBA6F7
|
||||||
|
inactive_tab_foreground #CDD6F4
|
||||||
|
inactive_tab_background #181825
|
||||||
|
tab_bar_background #11111B
|
||||||
|
|
||||||
|
# Colors for marks (marked text in the terminal)
|
||||||
|
mark1_foreground #1E1E2E
|
||||||
|
mark1_background #B4BEFE
|
||||||
|
mark2_foreground #1E1E2E
|
||||||
|
mark2_background #CBA6F7
|
||||||
|
mark3_foreground #1E1E2E
|
||||||
|
mark3_background #74C7EC
|
||||||
|
|
||||||
|
# The 16 terminal colors
|
||||||
|
|
||||||
|
# black
|
||||||
|
color0 #45475A
|
||||||
|
color8 #585B70
|
||||||
|
|
||||||
|
# red
|
||||||
|
color1 #F38BA8
|
||||||
|
color9 #F38BA8
|
||||||
|
|
||||||
|
# green
|
||||||
|
color2 #A6E3A1
|
||||||
|
color10 #A6E3A1
|
||||||
|
|
||||||
|
# yellow
|
||||||
|
color3 #F9E2AF
|
||||||
|
color11 #F9E2AF
|
||||||
|
|
||||||
|
# blue
|
||||||
|
color4 #89B4FA
|
||||||
|
color12 #89B4FA
|
||||||
|
|
||||||
|
# magenta
|
||||||
|
color5 #F5C2E7
|
||||||
|
color13 #F5C2E7
|
||||||
|
|
||||||
|
# cyan
|
||||||
|
color6 #94E2D5
|
||||||
|
color14 #94E2D5
|
||||||
|
|
||||||
|
# white
|
||||||
|
color7 #BAC2DE
|
||||||
|
color15 #A6ADC8
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
# vim:ft=kitty
|
||||||
|
|
||||||
|
## name: Catppuccin-Mocha
|
||||||
|
## author: Pocco81 (https://github.com/Pocco81)
|
||||||
|
## license: MIT
|
||||||
|
## upstream: https://github.com/catppuccin/kitty/blob/main/themes/mocha.conf
|
||||||
|
## blurb: Soothing pastel theme for the high-spirited!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# The basic colors
|
||||||
|
foreground #CDD6F4
|
||||||
|
background #1E1E2E
|
||||||
|
selection_foreground #1E1E2E
|
||||||
|
selection_background #F5E0DC
|
||||||
|
|
||||||
|
# Cursor colors
|
||||||
|
cursor #F5E0DC
|
||||||
|
cursor_text_color #1E1E2E
|
||||||
|
|
||||||
|
# URL underline color when hovering with mouse
|
||||||
|
url_color #F5E0DC
|
||||||
|
|
||||||
|
# Kitty window border colors
|
||||||
|
active_border_color #B4BEFE
|
||||||
|
inactive_border_color #6C7086
|
||||||
|
bell_border_color #F9E2AF
|
||||||
|
|
||||||
|
# OS Window titlebar colors
|
||||||
|
wayland_titlebar_color system
|
||||||
|
macos_titlebar_color system
|
||||||
|
|
||||||
|
# Tab bar colors
|
||||||
|
active_tab_foreground #11111B
|
||||||
|
active_tab_background #CBA6F7
|
||||||
|
inactive_tab_foreground #CDD6F4
|
||||||
|
inactive_tab_background #181825
|
||||||
|
tab_bar_background #11111B
|
||||||
|
|
||||||
|
# Colors for marks (marked text in the terminal)
|
||||||
|
mark1_foreground #1E1E2E
|
||||||
|
mark1_background #B4BEFE
|
||||||
|
mark2_foreground #1E1E2E
|
||||||
|
mark2_background #CBA6F7
|
||||||
|
mark3_foreground #1E1E2E
|
||||||
|
mark3_background #74C7EC
|
||||||
|
|
||||||
|
# The 16 terminal colors
|
||||||
|
|
||||||
|
# black
|
||||||
|
color0 #45475A
|
||||||
|
color8 #585B70
|
||||||
|
|
||||||
|
# red
|
||||||
|
color1 #F38BA8
|
||||||
|
color9 #F38BA8
|
||||||
|
|
||||||
|
# green
|
||||||
|
color2 #A6E3A1
|
||||||
|
color10 #A6E3A1
|
||||||
|
|
||||||
|
# yellow
|
||||||
|
color3 #F9E2AF
|
||||||
|
color11 #F9E2AF
|
||||||
|
|
||||||
|
# blue
|
||||||
|
color4 #89B4FA
|
||||||
|
color12 #89B4FA
|
||||||
|
|
||||||
|
# magenta
|
||||||
|
color5 #F5C2E7
|
||||||
|
color13 #F5C2E7
|
||||||
|
|
||||||
|
# cyan
|
||||||
|
color6 #94E2D5
|
||||||
|
color14 #94E2D5
|
||||||
|
|
||||||
|
# white
|
||||||
|
color7 #BAC2DE
|
||||||
|
color15 #A6ADC8
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
[config.wallpaper]
|
||||||
|
command = "awww"
|
||||||
|
arguments = ["img", "--transition-type", "any", "--transition-fps", "60"]
|
||||||
|
set = true
|
||||||
|
|
||||||
|
[templates.waybar]
|
||||||
|
input_path = '~/.config/matugen/templates/colors.css'
|
||||||
|
output_path = '~/.config/waybar/colors.css'
|
||||||
|
post_hook = 'pkill -SIGUSR2 waybar'
|
||||||
|
|
||||||
|
[templates.kitty]
|
||||||
|
input_path = '~/.config/matugen/templates/kitty-colors.conf'
|
||||||
|
output_path = '~/.config/kitty/colors.conf'
|
||||||
|
post_hook = "kill -SIGUSR1 $(pidof kitty)"
|
||||||
|
|
||||||
|
[templates.hyprland]
|
||||||
|
input_path = '~/.config/matugen/templates/hyprland-colors.conf'
|
||||||
|
output_path = '~/.config/hypr/colors.conf'
|
||||||
|
post_hook = 'hyprctl reload'
|
||||||
|
|
||||||
|
[templates.gtk3]
|
||||||
|
input_path = '~/.config/matugen/templates/gtk-colors.css'
|
||||||
|
output_path = '~/.config/gtk-3.0/colors.css'
|
||||||
|
|
||||||
|
[templates.gtk4]
|
||||||
|
input_path = '~/.config/matugen/templates/gtk-colors.css'
|
||||||
|
output_path = '~/.config/gtk-4.0/colors.css'
|
||||||
|
|
||||||
|
[templates.rofi]
|
||||||
|
input_path = '~/.config/matugen/templates/rofi-colors.rasi'
|
||||||
|
output_path = '~/.config/rofi/colors.rasi'
|
||||||
|
|
||||||
|
[templates.cava]
|
||||||
|
input_path = '~/.config/matugen/templates/matugen-cava'
|
||||||
|
output_path = '~/.config/cava/config'
|
||||||
|
post_hook = "pkill -USR1 cava"
|
||||||
|
|
||||||
|
[templates.spicetify]
|
||||||
|
input_path = '~/.config/matugen/templates/spotify-colors.ini'
|
||||||
|
output_path = '~/.config/spicetify/Themes/text/color.ini'
|
||||||
|
|
||||||
|
[templates.vesktop]
|
||||||
|
input_path = '~/.config/matugen/templates/midnight-discord.css'
|
||||||
|
output_path = '~/.config/vesktop/themes/matugen.css'
|
||||||
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
/*
|
||||||
|
* Css Colors
|
||||||
|
* Generated with Matugen
|
||||||
|
*/
|
||||||
|
<* for name, value in colors *>
|
||||||
|
@define-color {{name}} {{value.default.hex}};
|
||||||
|
<* endfor *>
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* GTK Colors
|
||||||
|
* Generated with Matugen
|
||||||
|
*/
|
||||||
|
|
||||||
|
@define-color accent_color {{colors.primary_fixed_dim.default.hex}};
|
||||||
|
@define-color accent_fg_color {{colors.on_primary_fixed.default.hex}};
|
||||||
|
@define-color accent_bg_color {{colors.primary_fixed_dim.default.hex}};
|
||||||
|
@define-color window_bg_color {{colors.surface_dim.default.hex}};
|
||||||
|
@define-color window_fg_color {{colors.on_surface.default.hex}};
|
||||||
|
@define-color headerbar_bg_color {{colors.surface_dim.default.hex}};
|
||||||
|
@define-color headerbar_fg_color {{colors.on_surface.default.hex}};
|
||||||
|
@define-color popover_bg_color {{colors.surface_dim.default.hex}};
|
||||||
|
@define-color popover_fg_color {{colors.on_surface.default.hex}};
|
||||||
|
@define-color view_bg_color {{colors.surface.default.hex}};
|
||||||
|
@define-color view_fg_color {{colors.on_surface.default.hex}};
|
||||||
|
@define-color card_bg_color {{colors.surface.default.hex}};
|
||||||
|
@define-color card_fg_color {{colors.on_surface.default.hex}};
|
||||||
|
@define-color sidebar_bg_color @window_bg_color;
|
||||||
|
@define-color sidebar_fg_color @window_fg_color;
|
||||||
|
@define-color sidebar_border_color @window_bg_color;
|
||||||
|
@define-color sidebar_backdrop_color @window_bg_color;
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<* for name, value in colors *>
|
||||||
|
$image = {{image}}
|
||||||
|
${{name}} = rgba({{value.default.hex_stripped}}ff)
|
||||||
|
<* endfor *>
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# Core Colors
|
||||||
|
background {{ colors.background.default.hex }}
|
||||||
|
foreground {{ colors.on_surface.default.hex }}
|
||||||
|
selection_foreground {{ colors.primary.default.hex }}
|
||||||
|
selection_background {{ colors.on_primary.default.hex }}
|
||||||
|
cursor {{ colors.primary.default.hex }}
|
||||||
|
cursor_text_color {{ colors.surface.default.hex }}
|
||||||
|
|
||||||
|
# Regular Colors
|
||||||
|
color0 {{ colors.surface.default.hex }}
|
||||||
|
color1 {{ colors.error.default.hex }}
|
||||||
|
color2 {{ colors.primary.default.hex }}
|
||||||
|
color3 {{ colors.tertiary.default.hex }}
|
||||||
|
color4 {{ colors.on_primary_container.default.hex }}
|
||||||
|
color5 {{ colors.on_secondary_container.default.hex }}
|
||||||
|
color6 {{ colors.secondary.default.hex }}
|
||||||
|
color7 {{ colors.on_surface.default.hex }}
|
||||||
|
|
||||||
|
# Bright Colors
|
||||||
|
color8 {{ colors.surface_bright.default.hex }}
|
||||||
|
color9 {{ colors.error.default.hex }}
|
||||||
|
color10 {{ colors.primary.default.hex }}
|
||||||
|
color11 {{ colors.tertiary.default.hex }}
|
||||||
|
color12 {{ colors.on_primary_container.default.hex }}
|
||||||
|
color13 {{ colors.on_secondary_container.default.hex }}
|
||||||
|
color14 {{ colors.secondary.default.hex }}
|
||||||
|
color15 {{ colors.on_surface.default.hex }}
|
||||||
@@ -0,0 +1,291 @@
|
|||||||
|
# ┳┳┓┏┓┏┳┓┳┳┏┓┏┓┳┓ ┏┓┏┓┓┏┏┓
|
||||||
|
# ┃┃┃┣┫ ┃ ┃┃┃┓┣ ┃┃━━┃ ┣┫┃┃┣┫
|
||||||
|
# ┛ ┗┛┗ ┻ ┗┛┗┛┗┛┛┗ ┗┛┛┗┗┛┛┗
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 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 calulate 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' or 'right'.
|
||||||
|
# Default is 'bottom'. Other orientations are only supported on sdl and ncruses
|
||||||
|
# output. Note: many fonts have weird glyphs for 'top' and 'right' characters,
|
||||||
|
# which can make ncurses not look right.
|
||||||
|
; orientation = bottom
|
||||||
|
|
||||||
|
# Visual channels. Can be 'stereo' or 'mono'.
|
||||||
|
# 'stereo' mirrors both channels with low frequencies in center.
|
||||||
|
# 'mono' outputs left to right lowest to highest frequencies.
|
||||||
|
# 'mono_option' set mono to either take input from 'left', 'right' or 'average'.
|
||||||
|
# set 'reverse' to 1 to display frequencies the other way around.
|
||||||
|
; channels = stereo
|
||||||
|
; mono_option = average
|
||||||
|
; reverse = 0
|
||||||
|
|
||||||
|
# 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 alacritty synchronized updates. 1 = on, 0 = off
|
||||||
|
# removes flickering in alacritty terminal emulator.
|
||||||
|
# defaults to off since the behaviour in other terminal emulators is unknown
|
||||||
|
; alacritty_sync = 0
|
||||||
|
|
||||||
|
# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders
|
||||||
|
; vertex_shader = pass_through.vert
|
||||||
|
; fragment_shader = bar_spectrum.frag
|
||||||
|
|
||||||
|
; for glsl output mode, keep rendering even if no audio
|
||||||
|
; continuous_rendering = 0
|
||||||
|
|
||||||
|
# disable console blank (screen saver) in tty
|
||||||
|
# (Not supported on FreeBSD)
|
||||||
|
; disable_blanking = 0
|
||||||
|
|
||||||
|
# show a flat bar at the bottom of the screen when idle, 1 = on, 0 = off
|
||||||
|
; show_idle_bar_heads = 1
|
||||||
|
|
||||||
|
# show waveform instead of frequency spectrum, 1 = on, 0 = off
|
||||||
|
; waveform = 0
|
||||||
|
|
||||||
|
[color]
|
||||||
|
|
||||||
|
# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
|
||||||
|
# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires
|
||||||
|
# a terminal that can change color definitions such as Gnome-terminal or rxvt.
|
||||||
|
# default is to keep current terminal color
|
||||||
|
; background = default
|
||||||
|
; foreground = default
|
||||||
|
|
||||||
|
# SDL and sdl_glsl only support hex code colors, these are the default:
|
||||||
|
; background = '#111111'
|
||||||
|
; foreground = '#33ffff'
|
||||||
|
|
||||||
|
# these are default
|
||||||
|
# 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 = 0
|
||||||
|
; gradient_count = 8
|
||||||
|
; gradient_color_1 = '#59cc33'
|
||||||
|
; gradient_color_2 = '#80cc33'
|
||||||
|
; gradient_color_3 = '#a6cc33'
|
||||||
|
; gradient_color_4 = '#cccc33'
|
||||||
|
; gradient_color_5 = '#cca633'
|
||||||
|
; gradient_color_6 = '#cc8033'
|
||||||
|
; gradient_color_7 = '#cc5933'
|
||||||
|
; gradient_color_8 = '#cc3333'
|
||||||
|
|
||||||
|
# for matugen
|
||||||
|
gradient = 1
|
||||||
|
gradient_count = 2
|
||||||
|
gradient_color_1 = '{{colors.surface_bright.default.hex}}'
|
||||||
|
gradient_color_2 = '{{colors.primary.default.hex}}'
|
||||||
|
|
||||||
|
[smoothing]
|
||||||
|
|
||||||
|
# Percentage value for integral smoothing. Takes values from 0 - 100.
|
||||||
|
# Higher values means smoother, but less precise. 0 to disable.
|
||||||
|
# DEPRECATED as of 0.8.0, use noise_reduction instead
|
||||||
|
; integral = 77
|
||||||
|
|
||||||
|
# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable.
|
||||||
|
; monstercat = 0
|
||||||
|
; waves = 0
|
||||||
|
|
||||||
|
# Set gravity percentage for "drop off". Higher values means bars will drop faster.
|
||||||
|
# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off".
|
||||||
|
# DEPRECATED as of 0.8.0, use noise_reduction instead
|
||||||
|
; gravity = 100
|
||||||
|
|
||||||
|
|
||||||
|
# In bar height, bars that would have been lower that this will not be drawn.
|
||||||
|
# DEPRECATED as of 0.8.0
|
||||||
|
; ignore = 0
|
||||||
|
|
||||||
|
# Noise reduction, int 0 - 100. default 77
|
||||||
|
# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth
|
||||||
|
# 100 will be very slow and smooth, 0 will be fast but noisy.
|
||||||
|
; noise_reduction = 77
|
||||||
|
|
||||||
|
|
||||||
|
[eq]
|
||||||
|
|
||||||
|
# This one is tricky. You can have as much keys as you want.
|
||||||
|
# Remember to uncomment more than one key! More keys = more precision.
|
||||||
|
# Look at readme.md on github for further explanations and examples.
|
||||||
|
; 1 = 1 # bass
|
||||||
|
; 2 = 1
|
||||||
|
; 3 = 1 # midtone
|
||||||
|
; 4 = 1
|
||||||
|
; 5 = 1 # treble
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
/**
|
||||||
|
* @name midnight
|
||||||
|
* @description A dark, rounded discord theme.
|
||||||
|
* @author refact0r
|
||||||
|
* @version 1.6.2
|
||||||
|
* @invite nz87hXyvcy
|
||||||
|
* @website https://github.com/refact0r/midnight-discord
|
||||||
|
* @source https://github.com/refact0r/midnight-discord/blob/master/midnight.theme.css
|
||||||
|
* @authorId 508863359777505290
|
||||||
|
* @authorLink https://www.refact0r.dev
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* IMPORTANT: make sure to enable dark mode in discord settings for the theme to apply properly!!! */
|
||||||
|
|
||||||
|
@import url('https://raw.githubusercontent.com/refact0r/midnight-discord/refs/heads/master/themes/midnight.theme.css');
|
||||||
|
|
||||||
|
/* customize things here */
|
||||||
|
:root {
|
||||||
|
/* font, change to 'gg sans' for default discord font*/
|
||||||
|
--font: 'figtree';
|
||||||
|
|
||||||
|
/* top left corner text */
|
||||||
|
--corner-text: 'Midnight';
|
||||||
|
|
||||||
|
/* color of status indicators and window controls */
|
||||||
|
--online-indicator: {{colors.inverse_primary.default.hex}}; /* change to #23a55a for default green */
|
||||||
|
--dnd-indicator: {{colors.error.default.hex}}; /* change to #f13f43 for default red */
|
||||||
|
--idle-indicator: {{colors.tertiary_container.default.hex}}; /* change to #f0b232 for default yellow */
|
||||||
|
--streaming-indicator: {{colors.on_primary.default.hex}}; /* change to #593695 for default purple */
|
||||||
|
|
||||||
|
/* accent colors */
|
||||||
|
--accent-1: {{colors.tertiary.default.hex}}; /* links */
|
||||||
|
--accent-2: {{colors.primary.default.hex}}; /* general unread/mention elements, some icons when active */
|
||||||
|
--accent-3: {{colors.primary.default.hex}}; /* accent buttons */
|
||||||
|
--accent-4: {{colors.surface_bright.default.hex}}; /* accent buttons when hovered */
|
||||||
|
--accent-5: {{colors.primary_fixed_dim.default.hex}}; /* accent buttons when clicked */
|
||||||
|
--mention: {{colors.surface.default.hex}}; /* mentions & mention messages */
|
||||||
|
--mention-hover: {{colors.surface_bright.default.hex}}; /* mentions & mention messages when hovered */
|
||||||
|
|
||||||
|
/* text colors */
|
||||||
|
--text-0: {{colors.surface.default.hex}}; /* text on colored elements */
|
||||||
|
--text-1: {{colors.on_surface.default.hex}}; /* other normally white text */
|
||||||
|
--text-2: {{colors.on_surface.default.hex}}; /* headings and important text */
|
||||||
|
--text-3: {{colors.on_surface_variant.default.hex}}; /* normal text */
|
||||||
|
--text-4: {{colors.on_surface_variant.default.hex}}; /* icon buttons and channels */
|
||||||
|
--text-5: {{colors.outline.default.hex}}; /* muted channels/chats and timestamps */
|
||||||
|
|
||||||
|
/* background and dark colors */
|
||||||
|
--bg-1: {{colors.primary.default.hex}}; /* dark buttons when clicked */
|
||||||
|
--bg-2: {{colors.surface_container_high.default.hex}}; /* dark buttons */
|
||||||
|
--bg-3: {{colors.surface_container_low.default.hex}}; /* spacing, secondary elements */
|
||||||
|
--bg-4: {{colors.surface.default.hex}}; /* main background color */
|
||||||
|
--hover: {{colors.surface_bright.default.hex}}; /* channels and buttons when hovered */
|
||||||
|
--active: {{colors.surface_bright.default.hex}}; /* channels and buttons when clicked or selected */
|
||||||
|
--message-hover: {{colors.surface_bright.default.hex}}; /* messages when hovered */
|
||||||
|
|
||||||
|
/* amount of spacing and padding */
|
||||||
|
--spacing: 12px;
|
||||||
|
|
||||||
|
/* animations */
|
||||||
|
/* ALL ANIMATIONS CAN BE DISABLED WITH REDUCED MOTION IN DISCORD SETTINGS */
|
||||||
|
--list-item-transition: 0.2s ease; /* channels/members/settings hover transition */
|
||||||
|
--unread-bar-transition: 0.2s ease; /* unread bar moving into view transition */
|
||||||
|
--moon-spin-transition: 0.4s ease; /* moon icon spin */
|
||||||
|
--icon-spin-transition: 1s ease; /* round icon button spin (settings, emoji, etc.) */
|
||||||
|
|
||||||
|
/* corner roundness (border-radius) */
|
||||||
|
--roundness-xl: 22px; /* roundness of big panel outer corners */
|
||||||
|
--roundness-l: 20px; /* popout panels */
|
||||||
|
--roundness-m: 16px; /* smaller panels, images, embeds */
|
||||||
|
--roundness-s: 12px; /* members, settings inputs */
|
||||||
|
--roundness-xs: 10px; /* channels, buttons */
|
||||||
|
--roundness-xxs: 8px; /* searchbar, small elements */
|
||||||
|
|
||||||
|
/* direct messages moon icon */
|
||||||
|
/* change to block to show, none to hide */
|
||||||
|
--discord-icon: none; /* discord icon */
|
||||||
|
--moon-icon: block; /* moon icon */
|
||||||
|
--moon-icon-url: url('https://upload.wikimedia.org/wikipedia/commons/c/c4/Font_Awesome_5_solid_moon.svg'); /* custom icon url */
|
||||||
|
--moon-icon-size: auto;
|
||||||
|
|
||||||
|
/* filter uncolorable elements to fit theme */
|
||||||
|
/* (just set to none, they're too much work to configure) */
|
||||||
|
--login-bg-filter: saturate(0.3) hue-rotate(-15deg) brightness(0.4); /* login background artwork */
|
||||||
|
--green-to-accent-3-filter: hue-rotate(56deg) saturate(1.43); /* add friend page explore icon */
|
||||||
|
--blurple-to-accent-3-filter: hue-rotate(304deg) saturate(0.84) brightness(1.2); /* add friend page school icon */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Selected chat/friend text */
|
||||||
|
.selected_f5eb4b,
|
||||||
|
.selected_f6f816 .link_d8bfb3 {
|
||||||
|
color: var(--text-0) !important;
|
||||||
|
background: var(--accent-3) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.selected_f6f816 .link_d8bfb3 * {
|
||||||
|
color: var(--text-0) !important;
|
||||||
|
fill: var(--text-0) !important;
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
* {
|
||||||
|
primary: {{colors.primary.default.hex}};
|
||||||
|
primary-fixed: {{colors.primary_fixed.default.hex}};
|
||||||
|
primary-fixed-dim: {{colors.primary_fixed_dim.default.hex}};
|
||||||
|
on-primary: {{colors.on_primary.default.hex}};
|
||||||
|
on-primary-fixed: {{colors.on_primary_fixed.default.hex}};
|
||||||
|
on-primary-fixed-variant: {{colors.on_primary_fixed_variant.default.hex}};
|
||||||
|
primary-container: {{colors.primary_container.default.hex}};
|
||||||
|
on-primary-container: {{colors.on_primary_container.default.hex}};
|
||||||
|
secondary: {{colors.secondary.default.hex}};
|
||||||
|
secondary-fixed: {{colors.secondary_fixed.default.hex}};
|
||||||
|
secondary-fixed-dim: {{colors.secondary_fixed_dim.default.hex}};
|
||||||
|
on-secondary: {{colors.on_secondary.default.hex}};
|
||||||
|
on-secondary-fixed: {{colors.on_secondary_fixed.default.hex}};
|
||||||
|
on-secondary-fixed-variant: {{colors.on_secondary_fixed_variant.default.hex}};
|
||||||
|
secondary-container: {{colors.secondary_container.default.hex}};
|
||||||
|
on-secondary-container: {{colors.on_secondary_container.default.hex}};
|
||||||
|
tertiary: {{colors.tertiary.default.hex}};
|
||||||
|
tertiary-fixed: {{colors.tertiary_fixed.default.hex}};
|
||||||
|
tertiary-fixed-dim: {{colors.tertiary_fixed_dim.default.hex}};
|
||||||
|
on-tertiary: {{colors.on_tertiary.default.hex}};
|
||||||
|
on-tertiary-fixed: {{colors.on_tertiary_fixed.default.hex}};
|
||||||
|
on-tertiary-fixed-variant: {{colors.on_tertiary_fixed_variant.default.hex}};
|
||||||
|
tertiary-container: {{colors.tertiary_container.default.hex}};
|
||||||
|
on-tertiary-container: {{colors.on_tertiary_container.default.hex}};
|
||||||
|
error: {{colors.error.default.hex}};
|
||||||
|
on-error: {{colors.on_error.default.hex}};
|
||||||
|
error-container: {{colors.error_container.default.hex}};
|
||||||
|
on-error-container: {{colors.on_error_container.default.hex}};
|
||||||
|
surface: {{colors.surface.default.hex}};
|
||||||
|
on-surface: {{colors.on_surface.default.hex}};
|
||||||
|
on-surface-variant: {{colors.on_surface_variant.default.hex}};
|
||||||
|
outline: {{colors.outline.default.hex}};
|
||||||
|
outline-variant: {{colors.outline_variant.default.hex}};
|
||||||
|
shadow: {{colors.shadow.default.hex}};
|
||||||
|
scrim: {{colors.scrim.default.hex}};
|
||||||
|
inverse-surface: {{colors.inverse_surface.default.hex}};
|
||||||
|
inverse-on-surface: {{colors.inverse_on_surface.default.hex}};
|
||||||
|
inverse-primary: {{colors.inverse_primary.default.hex}};
|
||||||
|
surface-dim: {{colors.surface_dim.default.hex}};
|
||||||
|
surface-bright: {{colors.surface_bright.default.hex}};
|
||||||
|
surface-container-lowest: {{colors.surface_container_lowest.default.hex}};
|
||||||
|
surface-container-low: {{colors.surface_container_low.default.hex}};
|
||||||
|
surface-container: {{colors.surface_container.default.hex}};
|
||||||
|
surface-container-high: {{colors.surface_container_high.default.hex}};
|
||||||
|
surface-container-highest: {{colors.surface_container_highest.default.hex}};
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
[Spicetify]
|
||||||
|
accent = {{ colors.on_surface.default.hex_stripped }}
|
||||||
|
accent-active = {{ colors.primary.default.hex_stripped }}
|
||||||
|
accent-inactive = {{ colors.surface.default.hex_stripped }}
|
||||||
|
banner = {{ colors.primary.default.hex_stripped }}
|
||||||
|
border-active = {{ colors.outline.default.hex_stripped }}
|
||||||
|
border-inactive = {{ colors.outline_variant.default.hex_stripped }}
|
||||||
|
header = {{ colors.on_surface.default.hex_stripped }}
|
||||||
|
highlight = {{ colors.surface_container_low.default.hex_stripped }}
|
||||||
|
main = {{ colors.surface.default.hex_stripped }}
|
||||||
|
notification = {{ colors.tertiary.default.hex_stripped }}
|
||||||
|
notification-error = {{ colors.error.default.hex_stripped }}
|
||||||
|
subtext = {{ colors.on_surface_variant.default.hex_stripped }}
|
||||||
|
text = {{ colors.on_surface.default.hex_stripped }}
|
||||||
@@ -0,0 +1,673 @@
|
|||||||
|
// This config is in the KDL format: https://kdl.dev
|
||||||
|
// "/-" comments out the following node.
|
||||||
|
// Check the wiki for a full description of the configuration:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Introduction
|
||||||
|
|
||||||
|
// Input device configuration.
|
||||||
|
// Find the full list of options on the wiki:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Input
|
||||||
|
input {
|
||||||
|
keyboard {
|
||||||
|
xkb {
|
||||||
|
// You can set rules, model, layout, variant and options.
|
||||||
|
// For more information, see xkeyboard-config(7).
|
||||||
|
|
||||||
|
// For example:
|
||||||
|
layout "it,us"
|
||||||
|
// options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
|
||||||
|
|
||||||
|
// If this section is empty, niri will fetch xkb settings
|
||||||
|
// from org.freedesktop.locale1. You can control these using
|
||||||
|
// localectl set-x11-keymap.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enable numlock on startup, omitting this setting disables it.
|
||||||
|
numlock
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next sections include libinput settings.
|
||||||
|
// Omitting settings disables them, or leaves them at their default values.
|
||||||
|
// All commented-out settings here are examples, not defaults.
|
||||||
|
touchpad {
|
||||||
|
// off
|
||||||
|
tap
|
||||||
|
// dwt
|
||||||
|
// dwtp
|
||||||
|
// drag false
|
||||||
|
// drag-lock
|
||||||
|
natural-scroll
|
||||||
|
// acel-speed 0.2
|
||||||
|
// accel-profile "flat"
|
||||||
|
// scroll-method "two-finger"
|
||||||
|
// disabled-on-external-mouse
|
||||||
|
}
|
||||||
|
|
||||||
|
mouse {
|
||||||
|
// off
|
||||||
|
// natural-scroll
|
||||||
|
// accel-speed 0.2
|
||||||
|
// accel-profile "flat"
|
||||||
|
// scroll-method "no-scroll"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
trackpoint {
|
||||||
|
// off
|
||||||
|
// natural-scroll
|
||||||
|
// accel-speed 0.2
|
||||||
|
// accel-profile "flat"
|
||||||
|
// scroll-method "on-button-down"
|
||||||
|
// scroll-button 273
|
||||||
|
// scroll-button-lock
|
||||||
|
// middle-emulation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uncomment this to make the mouse warp to the center of newly focused windows.
|
||||||
|
// warp-mouse-to-focus
|
||||||
|
|
||||||
|
// Focus windows and outputs automatically when moving the mouse into them.
|
||||||
|
// Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
|
||||||
|
focus-follows-mouse max-scroll-amount="0%"
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can configure outputs by their name, which you can find
|
||||||
|
// by running `niri msg outputs` while inside a niri instance.
|
||||||
|
// The built-in laptop monitor is usually called "eDP-1".
|
||||||
|
// Find more information on the wiki:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Outputs
|
||||||
|
// Remember to uncomment the node by removing "/-"!
|
||||||
|
output "eDP-1" {
|
||||||
|
// Uncomment this line to disable this output.
|
||||||
|
// off
|
||||||
|
|
||||||
|
// Resolution and, optionally, refresh rate of the output.
|
||||||
|
// The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
|
||||||
|
// If the refresh rate is omitted, niri will pick the highest refresh rate
|
||||||
|
// for the resolution.
|
||||||
|
// If the mode is omitted altogether or is invalid, niri will pick one automatically.
|
||||||
|
// Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
|
||||||
|
mode "3072x1920@120.000"
|
||||||
|
|
||||||
|
// You can use integer or fractional scale, for example use 1.5 for 150% scale.
|
||||||
|
scale 2
|
||||||
|
|
||||||
|
// Transform allows to rotate the output counter-clockwise, valid values are:
|
||||||
|
// normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
|
||||||
|
transform "normal"
|
||||||
|
|
||||||
|
// Position of the output in the global coordinate space.
|
||||||
|
// This affects directional monitor actions like "focus-monitor-left", and cursor movement.
|
||||||
|
// The cursor can only move between directly adjacent outputs.
|
||||||
|
// Output scale and rotation has to be taken into account for positioning:
|
||||||
|
// outputs are sized in logical, or scaled, pixels.
|
||||||
|
// For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
|
||||||
|
// so to put another output directly adjacent to it on the right, set its x to 1920.
|
||||||
|
// If the position is unset or results in an overlap, the output is instead placed
|
||||||
|
// automatically.
|
||||||
|
position x=1280 y=0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Settings that influence how windows are positioned and sized.
|
||||||
|
// Find more information on the wiki:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Layout
|
||||||
|
layout {
|
||||||
|
// Set gaps around windows in logical pixels.
|
||||||
|
gaps 16
|
||||||
|
|
||||||
|
// When to center a column when changing focus, options are:
|
||||||
|
// - "never", default behavior, focusing an off-screen column will keep at the left
|
||||||
|
// or right edge of the screen.
|
||||||
|
// - "always", the focused column will always be centered.
|
||||||
|
// - "on-overflow", focusing a column will center it if it doesn't fit
|
||||||
|
// together with the previously focused column.
|
||||||
|
center-focused-column "never"
|
||||||
|
|
||||||
|
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
|
||||||
|
preset-column-widths {
|
||||||
|
// Proportion sets the width as a fraction of the output width, taking gaps into account.
|
||||||
|
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
|
||||||
|
// The default preset widths are 1/3, 1/2 and 2/3 of the output.
|
||||||
|
proportion 0.33333
|
||||||
|
proportion 0.5
|
||||||
|
proportion 0.66667
|
||||||
|
|
||||||
|
// Fixed sets the width in logical pixels exactly.
|
||||||
|
// fixed 1920
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
|
||||||
|
// preset-window-heights { }
|
||||||
|
|
||||||
|
// You can change the default width of the new windows.
|
||||||
|
default-column-width { proportion 0.5; }
|
||||||
|
// If you leave the brackets empty, the windows themselves will decide their initial width.
|
||||||
|
// default-column-width {}
|
||||||
|
|
||||||
|
// By default focus ring and border are rendered as a solid background rectangle
|
||||||
|
// behind windows. That is, they will show up through semitransparent windows.
|
||||||
|
// This is because windows using client-side decorations can have an arbitrary shape.
|
||||||
|
//
|
||||||
|
// If you don't like that, you should uncomment `prefer-no-csd` below.
|
||||||
|
// prefer-no-csd
|
||||||
|
// Niri will draw focus ring and border *around* windows that agree to omit their
|
||||||
|
// client-side decorations.
|
||||||
|
//
|
||||||
|
// Alternatively, you can override it with a window rule called
|
||||||
|
// draw-border-with-background
|
||||||
|
|
||||||
|
// You can change how the focus ring looks.
|
||||||
|
focus-ring {
|
||||||
|
// Uncomment this line to disable the focus ring.
|
||||||
|
// off
|
||||||
|
// How many logical pixels the ring extends out from the windows.
|
||||||
|
width 2
|
||||||
|
|
||||||
|
// Colors can be set in a variety of ways:
|
||||||
|
// - CSS named colors: "red"
|
||||||
|
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
|
||||||
|
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
|
||||||
|
|
||||||
|
// Color of the ring on the active monitor.
|
||||||
|
active-color "#7fc8ff"
|
||||||
|
|
||||||
|
// Color of the ring on inactive monitors.
|
||||||
|
//
|
||||||
|
// The focus ring only draws around the active window, so the only place
|
||||||
|
// where you can see its inactive-color is on other monitors.
|
||||||
|
inactive-color "#505050"
|
||||||
|
|
||||||
|
// You can also use gradients. They take precedence over solid colors.
|
||||||
|
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
|
||||||
|
// The angle is the same as in linear-gradient, and is optional,
|
||||||
|
// defaulting to 180 (top-to-bottom gradient).
|
||||||
|
// You can use any CSS linear-gradient tool on the web to set these up.
|
||||||
|
// Changing the color space is also supported, check the wiki for more info.
|
||||||
|
//
|
||||||
|
// active-gradient from="#80c8ff" to="#c7ff7f" angle=45
|
||||||
|
|
||||||
|
// You can also color the gradient relative to the entire view
|
||||||
|
// of the workspace, rather than relative to just the window itself.
|
||||||
|
// To do that, set relative-to="workspace-view".
|
||||||
|
//
|
||||||
|
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can also add a border. It's similar to the focus ring, but always visible.
|
||||||
|
border {
|
||||||
|
// The settings are the same as for the focus ring.
|
||||||
|
// If you enable the border, you probably want to disable the focus ring.
|
||||||
|
off
|
||||||
|
|
||||||
|
width 4
|
||||||
|
active-color "#ffc87f"
|
||||||
|
inactive-color "#505050"
|
||||||
|
|
||||||
|
// Color of the border around windows that request your attention.
|
||||||
|
urgent-color "#9b0000"
|
||||||
|
|
||||||
|
// Gradients can use a few different interpolation color spaces.
|
||||||
|
// For example, this is a pastel rainbow gradient via in="oklch longer hue".
|
||||||
|
//
|
||||||
|
// active-gradient from="#e5989b" to="#ffb4a2" angle=45 relative-to="workspace-view" in="oklch longer hue"
|
||||||
|
|
||||||
|
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can enable drop shadows for windows.
|
||||||
|
shadow {
|
||||||
|
// Uncomment the next line to enable shadows.
|
||||||
|
// on
|
||||||
|
|
||||||
|
// By default, the shadow draws only around its window, and not behind it.
|
||||||
|
// Uncomment this setting to make the shadow draw behind its window.
|
||||||
|
//
|
||||||
|
// Note that niri has no way of knowing about the CSD window corner
|
||||||
|
// radius. It has to assume that windows have square corners, leading to
|
||||||
|
// shadow artifacts inside the CSD rounded corners. This setting fixes
|
||||||
|
// those artifacts.
|
||||||
|
//
|
||||||
|
// However, instead you may want to set prefer-no-csd and/or
|
||||||
|
// geometry-corner-radius. Then, niri will know the corner radius and
|
||||||
|
// draw the shadow correctly, without having to draw it behind the
|
||||||
|
// window. These will also remove client-side shadows if the window
|
||||||
|
// draws any.
|
||||||
|
//
|
||||||
|
// draw-behind-window true
|
||||||
|
|
||||||
|
// You can change how shadows look. The values below are in logical
|
||||||
|
// pixels and match the CSS box-shadow properties.
|
||||||
|
|
||||||
|
// Softness controls the shadow blur radius.
|
||||||
|
softness 30
|
||||||
|
|
||||||
|
// Spread expands the shadow.
|
||||||
|
spread 5
|
||||||
|
|
||||||
|
// Offset moves the shadow relative to the window.
|
||||||
|
offset x=0 y=5
|
||||||
|
|
||||||
|
// You can also change the shadow color and opacity.
|
||||||
|
color "#0007"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
|
||||||
|
// You can think of them as a kind of outer gaps. They are set in logical pixels.
|
||||||
|
// Left and right struts will cause the next window to the side to always be visible.
|
||||||
|
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
|
||||||
|
// layer-shell panels and regular gaps.
|
||||||
|
struts {
|
||||||
|
// left 64
|
||||||
|
// right 64
|
||||||
|
// top 64
|
||||||
|
// bottom 64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add lines like this to spawn processes at startup.
|
||||||
|
// Note that running niri as a session supports xdg-desktop-autostart,
|
||||||
|
// which may be more convenient to use.
|
||||||
|
// See the binds section below for more spawn examples.
|
||||||
|
|
||||||
|
// This line starts waybar, a commonly used bar for Wayland compositors.
|
||||||
|
// spawn-at-startup "waybar" "-c /home/sinsa/.config/waybar/configs/defaultNIRI" "-s /home/sinsa/.config/waybar/style/islands.css"
|
||||||
|
|
||||||
|
//spawn-sh-at-startup "waybar -c /home/sinsa/.config/waybar/configs/defaultNIRI -s /home/sinsa/.config/waybar/style/islands.css"
|
||||||
|
//spawn-sh-at-startup "awww-daemon"
|
||||||
|
//spawn-sh-at-startup "awww-daemon -n overlay"
|
||||||
|
//spawn-sh-at-startup "awww img /home/sinsa/.config/hypr/current_wallpaper"
|
||||||
|
//spawn-sh-at-startup "awww img -n overlay /home/sinsa/.config/hypr/current_wallpaper"
|
||||||
|
spawn-at-startup "/usr/lib/hyprpolkitagent/hyprpolkitagent"
|
||||||
|
spawn-at-startup "kitty"
|
||||||
|
spawn-sh-at-startup "qs -c noctalia-shell"
|
||||||
|
|
||||||
|
prefer-no-csd
|
||||||
|
|
||||||
|
// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup:
|
||||||
|
// spawn-sh-at-startup "qs -c ~/source/qs/MyAwesomeShell"
|
||||||
|
|
||||||
|
hotkey-overlay {
|
||||||
|
// Uncomment this line to disable the "Important Hotkeys" pop-up at startup.
|
||||||
|
// skip-at-startup
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
|
||||||
|
// If the client will specifically ask for CSD, the request will be honored.
|
||||||
|
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
|
||||||
|
// This option will also fix border/focus ring drawing behind some semitransparent windows.
|
||||||
|
// After enabling or disabling this, you need to restart the apps for this to take effect.
|
||||||
|
// prefer-no-csd
|
||||||
|
|
||||||
|
// You can change the path where screenshots are saved.
|
||||||
|
// A ~ at the front will be expanded to the home directory.
|
||||||
|
// The path is formatted with strftime(3) to give you the screenshot date and time.
|
||||||
|
screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
|
||||||
|
|
||||||
|
// You can also set this to null to disable saving screenshots to disk.
|
||||||
|
// screenshot-path null
|
||||||
|
|
||||||
|
// Animation settings.
|
||||||
|
// The wiki explains how to configure individual animations:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Animations
|
||||||
|
animations {
|
||||||
|
// Uncomment to turn off all animations.
|
||||||
|
// off
|
||||||
|
|
||||||
|
// Slow down all animations by this factor. Values below 1 speed them up instead.
|
||||||
|
// slowdown 3.0
|
||||||
|
}
|
||||||
|
|
||||||
|
// layer-rule {
|
||||||
|
|
||||||
|
// This is for swww; change for other wallpaper tools.
|
||||||
|
|
||||||
|
// Find the right namespace by running niri msg layers.
|
||||||
|
|
||||||
|
//match namespace="^awww-daemonoverlay$"
|
||||||
|
|
||||||
|
//place-within-backdrop true
|
||||||
|
|
||||||
|
//}
|
||||||
|
|
||||||
|
layer-rule {
|
||||||
|
match namespace="^noctalia-overview*"
|
||||||
|
place-within-backdrop true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/- window-rule {
|
||||||
|
open-maximized true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
window-rule {
|
||||||
|
geometry-corner-radius 12
|
||||||
|
}
|
||||||
|
// Window rules let you adjust behavior for individual windows.
|
||||||
|
// Find more information on the wiki:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Window-Rules
|
||||||
|
|
||||||
|
// Work around WezTerm's initial configure bug
|
||||||
|
// by setting an empty default-column-width.
|
||||||
|
window-rule {
|
||||||
|
// This regular expression is intentionally made as specific as possible,
|
||||||
|
// since this is the default config, and we want no false positives.
|
||||||
|
// You can get away with just app-id="wezterm" if you want.
|
||||||
|
//matchatch app-id=r#"^org\.wezfurlong\.wezterm$"#
|
||||||
|
// default-column-width {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open the Firefox picture-in-picture player as floating by default.
|
||||||
|
window-rule {
|
||||||
|
// This app-id regular expression will work for both:
|
||||||
|
// - host Firefox (app-id is "firefox")
|
||||||
|
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
|
||||||
|
// match app-id=r#"firefox$"# title="^Picture-in-Picture$"
|
||||||
|
// open-floating true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example: block out two password managers from screen capture.
|
||||||
|
// (This example rule is commented out with a "/-" in front.)
|
||||||
|
/-window-rule {
|
||||||
|
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
|
||||||
|
match app-id=r#"^org\.gnome\.World\.Secrets$"#
|
||||||
|
|
||||||
|
block-out-from "screen-capture"
|
||||||
|
|
||||||
|
// Use this instead if you want them visible on third-party screenshot tools.
|
||||||
|
// block-out-from "screencast"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example: enable rounded corners for all windows.
|
||||||
|
// (This example rule is commented out with a "/-" in front.)
|
||||||
|
window-rule {
|
||||||
|
geometry-corner-radius 12
|
||||||
|
clip-to-geometry true
|
||||||
|
}
|
||||||
|
|
||||||
|
switch-events {
|
||||||
|
lid-close {
|
||||||
|
spawn "qs" "-c" "noctalia-shell" "ipc" "call" "sessionMenu" "lockAndSuspend"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
binds {
|
||||||
|
// Keys consist of modifiers separated by + signs, followed by an XKB key name
|
||||||
|
// in the end. To find an XKB name for a particular key, you may use a program
|
||||||
|
// like wev.
|
||||||
|
//
|
||||||
|
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
|
||||||
|
// when running as a winit window.
|
||||||
|
//
|
||||||
|
// Most actions that you can bind here can also be invoked programmatically with
|
||||||
|
// `niri msg action do-something`.
|
||||||
|
|
||||||
|
// Mod-Shift-/, which is usually the same as Mod-?,
|
||||||
|
// shows a list of important hotkeys.
|
||||||
|
Mod+Shift+Slash { show-hotkey-overlay; }
|
||||||
|
|
||||||
|
// Suggested binds for running programs: terminal, app launcher, screen locker.
|
||||||
|
Mod+Q hotkey-overlay-title="Open a Terminal: kitty" { spawn "kitty"; }
|
||||||
|
Mod+D hotkey-overlay-title="Run an Application: fuzzel" { spawn "fuzzel"; }
|
||||||
|
Super+Alt+L hotkey-overlay-title="Lock the Screen: swaylock" { spawn "swaylock"; }
|
||||||
|
|
||||||
|
// Use spawn-sh to run a shell command. Do this if you need pipes, multiple commands, etc.
|
||||||
|
// Note: the entire command goes as a single argument. It's passed verbatim to `sh -c`.
|
||||||
|
// For example, this is a standard bind to toggle the screen reader (orca).
|
||||||
|
Super+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; }
|
||||||
|
|
||||||
|
// Example volume keys mappings for PipeWire & WirePlumber.
|
||||||
|
// The allow-when-locked=true property makes them work even when the session is locked.
|
||||||
|
// Using spawn-sh allows to pass multiple arguments together with the command.
|
||||||
|
// "-l 1.0" limits the volume to 100%.
|
||||||
|
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+ -l 1.0"; }
|
||||||
|
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; }
|
||||||
|
XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
|
||||||
|
XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
|
||||||
|
|
||||||
|
// Example media keys mapping using playerctl.
|
||||||
|
// This will work with any MPRIS-enabled media player.
|
||||||
|
XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; }
|
||||||
|
XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; }
|
||||||
|
XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; }
|
||||||
|
XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; }
|
||||||
|
|
||||||
|
// Example brightness key mappings for brightnessctl.
|
||||||
|
// You can use regular spawn with multiple arguments too (to avoid going through "sh"),
|
||||||
|
// but you need to manually put each argument in separate "" quotes.
|
||||||
|
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; }
|
||||||
|
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; }
|
||||||
|
|
||||||
|
// Open/close the Overview: a zoomed-out view of workspaces and windows.
|
||||||
|
// You can also move the mouse into the top-left hot corner,
|
||||||
|
// or do a four-finger swipe up on a touchpad.
|
||||||
|
Mod+O repeat=false { toggle-overview; }
|
||||||
|
|
||||||
|
Mod+C repeat=false { close-window; }
|
||||||
|
Mod+return { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; }
|
||||||
|
Mod+Left { focus-column-left; }
|
||||||
|
Mod+Down { focus-window-down; }
|
||||||
|
Mod+Up { focus-window-up; }
|
||||||
|
Mod+Right { focus-column-right; }
|
||||||
|
Mod+H { focus-column-left; }
|
||||||
|
Mod+J { focus-window-down; }
|
||||||
|
Mod+K { focus-window-up; }
|
||||||
|
Mod+L { focus-column-right; }
|
||||||
|
|
||||||
|
Mod+Shift+Left { move-column-left-or-to-monitor-left; }
|
||||||
|
Mod+Shift+Down { move-window-down; }
|
||||||
|
Mod+Shift+Up { move-window-up; }
|
||||||
|
Mod+Shift+Right { move-column-right-or-to-monitor-right; }
|
||||||
|
Mod+Shift+H { move-column-left; }
|
||||||
|
Mod+Shift+J { move-window-down; }
|
||||||
|
Mod+Shift+K { move-window-up; }
|
||||||
|
Mod+Shift+L { move-column-right-or-to-monitor-right; }
|
||||||
|
|
||||||
|
// Alternative commands that move across workspaces when reaching
|
||||||
|
// the first or last window in a column.
|
||||||
|
// Mod+J { focus-window-or-workspace-down; }
|
||||||
|
// Mod+K { focus-window-or-workspace-up; }
|
||||||
|
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
|
||||||
|
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
|
||||||
|
|
||||||
|
Mod+Home { focus-column-first; }
|
||||||
|
Mod+End { focus-column-last; }
|
||||||
|
Mod+Ctrl+Home { move-column-to-first; }
|
||||||
|
Mod+Ctrl+End { move-column-to-last; }
|
||||||
|
|
||||||
|
Mod+Ctrl+Left { focus-monitor-left; }
|
||||||
|
//Mod+Alt+Ctrl+Down { focus-monitor-down; }
|
||||||
|
//Mod+Alt+Ctrl+Up { focus-monitor-up; }
|
||||||
|
Mod+Ctrl+Right { focus-monitor-right; }
|
||||||
|
//Mod+Alt+Ctrl+H { focus-monitor-left; }
|
||||||
|
//Mod+Alt+Ctrl+J { focus-monitor-down; }
|
||||||
|
//Mod+Alt+Ctrl+K { focus-monitor-up; }
|
||||||
|
//Mod+Alt+Ctrl+L { focus-monitor-right; }
|
||||||
|
Mod+Shift+Page_Up {move-column-to-monitor-left; }
|
||||||
|
Mod+Shift+Page_Down {move-column-to-monitor-right; }
|
||||||
|
//Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
|
||||||
|
//Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
|
||||||
|
//Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
|
||||||
|
//Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
|
||||||
|
//Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
|
||||||
|
//Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
|
||||||
|
//Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
|
||||||
|
//Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
|
||||||
|
|
||||||
|
// Alternatively, there are commands to move just a single window:
|
||||||
|
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
|
||||||
|
// ...
|
||||||
|
|
||||||
|
// And you can also move a whole workspace to another monitor:
|
||||||
|
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
|
||||||
|
// ...
|
||||||
|
|
||||||
|
Mod+Ctrl+down { focus-workspace-down; }
|
||||||
|
Mod+Ctrl+up {focus-workspace-up; }
|
||||||
|
Mod+U { focus-workspace-down; }
|
||||||
|
Mod+I { focus-workspace-up; }
|
||||||
|
Mod+Ctrl+Shift+down { move-column-to-workspace-down; }
|
||||||
|
Mod+Ctrl+Shift+up { move-column-to-workspace-up; }
|
||||||
|
Mod+Ctrl+U { move-column-to-workspace-down; }
|
||||||
|
Mod+Ctrl+I { move-column-to-workspace-up; }
|
||||||
|
|
||||||
|
// Alternatively, there are commands to move just a single window:
|
||||||
|
// Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
|
||||||
|
// ...
|
||||||
|
|
||||||
|
//Mod+Shift+Page_Down { move-workspace-down; }
|
||||||
|
//Mod+Shift+Page_Up { move-workspace-up; }
|
||||||
|
Mod+Shift+U { move-workspace-down; }
|
||||||
|
Mod+Shift+I { move-workspace-up; }
|
||||||
|
|
||||||
|
// You can bind mouse wheel scroll ticks using the following syntax.
|
||||||
|
// These binds will change direction based on the natural-scroll setting.
|
||||||
|
//
|
||||||
|
// To avoid scrolling through workspaces really fast, you can use
|
||||||
|
// the cooldown-ms property. The bind will be rate-limited to this value.
|
||||||
|
// You can set a cooldown on any bind, but it's most useful for the wheel.
|
||||||
|
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
|
||||||
|
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
|
||||||
|
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
|
||||||
|
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
|
||||||
|
|
||||||
|
Mod+WheelScrollRight { focus-column-right; }
|
||||||
|
Mod+WheelScrollLeft { focus-column-left; }
|
||||||
|
Mod+Ctrl+WheelScrollRight { move-column-right; }
|
||||||
|
Mod+Ctrl+WheelScrollLeft { move-column-left; }
|
||||||
|
|
||||||
|
// Usually scrolling up and down with Shift in applications results in
|
||||||
|
// horizontal scrolling; these binds replicate that.
|
||||||
|
Mod+Shift+WheelScrollDown { focus-column-right; }
|
||||||
|
Mod+Shift+WheelScrollUp { focus-column-left; }
|
||||||
|
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
|
||||||
|
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
|
||||||
|
|
||||||
|
// Similarly, you can bind touchpad scroll "ticks".
|
||||||
|
// Touchpad scrolling is continuous, so for these binds it is split into
|
||||||
|
// discrete intervals.
|
||||||
|
// These binds are also affected by touchpad's natural-scroll, so these
|
||||||
|
// example binds are "inverted", since we have natural-scroll enabled for
|
||||||
|
// touchpads by default.
|
||||||
|
// Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; }
|
||||||
|
// Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; }
|
||||||
|
|
||||||
|
// You can refer to workspaces by index. However, keep in mind that
|
||||||
|
// niri is a dynamic workspace system, so these commands are kind of
|
||||||
|
// "best effort". Trying to refer to a workspace index bigger than
|
||||||
|
// the current workspace count will instead refer to the bottommost
|
||||||
|
// (empty) workspace.
|
||||||
|
//
|
||||||
|
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
|
||||||
|
// will all refer to the 3rd workspace.
|
||||||
|
Mod+1 { focus-workspace 1; }
|
||||||
|
Mod+2 { focus-workspace 2; }
|
||||||
|
Mod+3 { focus-workspace 3; }
|
||||||
|
Mod+4 { focus-workspace 4; }
|
||||||
|
Mod+5 { focus-workspace 5; }
|
||||||
|
Mod+6 { focus-workspace 6; }
|
||||||
|
Mod+7 { focus-workspace 7; }
|
||||||
|
Mod+8 { focus-workspace 8; }
|
||||||
|
Mod+9 { focus-workspace 9; }
|
||||||
|
Mod+Ctrl+1 { move-column-to-workspace 1; }
|
||||||
|
Mod+Ctrl+2 { move-column-to-workspace 2; }
|
||||||
|
Mod+Ctrl+3 { move-column-to-workspace 3; }
|
||||||
|
Mod+Ctrl+4 { move-column-to-workspace 4; }
|
||||||
|
Mod+Ctrl+5 { move-column-to-workspace 5; }
|
||||||
|
Mod+Ctrl+6 { move-column-to-workspace 6; }
|
||||||
|
Mod+Ctrl+7 { move-column-to-workspace 7; }
|
||||||
|
Mod+Ctrl+8 { move-column-to-workspace 8; }
|
||||||
|
Mod+Ctrl+9 { move-column-to-workspace 9; }
|
||||||
|
|
||||||
|
// Alternatively, there are commands to move just a single window:
|
||||||
|
// Mod+Ctrl+1 { move-window-to-workspace 1; }
|
||||||
|
|
||||||
|
// Switches focus between the current and the previous workspace.
|
||||||
|
// Mod+Tab { focus-workspace-previous; }
|
||||||
|
|
||||||
|
// The following binds move the focused window in and out of a column.
|
||||||
|
// If the window is alone, they will consume it into the nearby column to the side.
|
||||||
|
// If the window is already in a column, they will expel it out.
|
||||||
|
Mod+BracketLeft { consume-or-expel-window-left; }
|
||||||
|
Mod+BracketRight { consume-or-expel-window-right; }
|
||||||
|
|
||||||
|
// Consume one window from the right to the bottom of the focused column.
|
||||||
|
Mod+Comma { consume-window-into-column; }
|
||||||
|
// Expel the bottom window from the focused column to the right.
|
||||||
|
Mod+Period { expel-window-from-column; }
|
||||||
|
|
||||||
|
Mod+R { switch-preset-column-width; }
|
||||||
|
// Cycling through the presets in reverse order is also possible.
|
||||||
|
// Mod+R { switch-preset-column-width-back; }
|
||||||
|
Mod+Shift+R { switch-preset-window-height; }
|
||||||
|
Mod+Ctrl+R { reset-window-height; }
|
||||||
|
Mod+F { maximize-column; }
|
||||||
|
Mod+Shift+F { fullscreen-window; }
|
||||||
|
|
||||||
|
// Expand the focused column to space not taken up by other fully visible columns.
|
||||||
|
// Makes the column "fill the rest of the space".
|
||||||
|
Mod+Ctrl+F { expand-column-to-available-width; }
|
||||||
|
|
||||||
|
Mod+Shift+C { center-column; }
|
||||||
|
|
||||||
|
// Center all fully visible columns on screen.
|
||||||
|
Mod+Ctrl+C { center-visible-columns; }
|
||||||
|
|
||||||
|
// Finer width adjustments.
|
||||||
|
// This command can also:
|
||||||
|
// * set width in pixels: "1000"
|
||||||
|
// * adjust width in pixels: "-5" or "+5"
|
||||||
|
// * set width as a percentage of screen width: "25%"
|
||||||
|
// * adjust width as a percentage of screen width: "-10%" or "+10%"
|
||||||
|
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
|
||||||
|
// set-column-width "100" will make the column occupy 200 physical screen pixels.
|
||||||
|
Mod+Minus { set-column-width "-10%"; }
|
||||||
|
Mod+Equal { set-column-width "+10%"; }
|
||||||
|
|
||||||
|
// Finer height adjustments when in column with other windows.
|
||||||
|
Mod+Shift+Minus { set-window-height "-10%"; }
|
||||||
|
Mod+Shift+Equal { set-window-height "+10%"; }
|
||||||
|
|
||||||
|
// Move the focused window between the floating and the tiling layout.
|
||||||
|
Mod+V { toggle-window-floating; }
|
||||||
|
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
|
||||||
|
|
||||||
|
// Toggle tabbed column display mode.
|
||||||
|
// Windows in this column will appear as vertical tabs,
|
||||||
|
// rather than stacked on top of each other.
|
||||||
|
Mod+W { toggle-column-tabbed-display; }
|
||||||
|
|
||||||
|
// Actions to switch layouts.
|
||||||
|
// Note: if you uncomment these, make sure you do NOT have
|
||||||
|
// a matching layout switch hotkey configured in xkb options above.
|
||||||
|
// Having both at once on the same hotkey will break the switching,
|
||||||
|
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
|
||||||
|
// Mod+Space { switch-layout "next"; }
|
||||||
|
// Mod+Shift+Space { switch-layout "prev"; }
|
||||||
|
|
||||||
|
Print { screenshot; }
|
||||||
|
Ctrl+Print { screenshot-screen; }
|
||||||
|
Alt+Print { screenshot-window; }
|
||||||
|
|
||||||
|
// Applications such as remote-desktop clients and software KVM switches may
|
||||||
|
// request that niri stops processing the keyboard shortcuts defined here
|
||||||
|
// so they may, for example, forward the key presses as-is to a remote machine.
|
||||||
|
// It's a good idea to bind an escape hatch to toggle the inhibitor,
|
||||||
|
// so a buggy application can't hold your session hostage.
|
||||||
|
//
|
||||||
|
// The allow-inhibiting=false property can be applied to other binds as well,
|
||||||
|
// which ensures niri always processes them, even when an inhibitor is active.
|
||||||
|
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
|
||||||
|
|
||||||
|
// The quit action will show a confirmation dialog to avoid accidental exits.
|
||||||
|
Mod+Shift+E { quit; }
|
||||||
|
Ctrl+Alt+Delete { quit; }
|
||||||
|
|
||||||
|
// Powers off the monitors. To turn them back on, do any input like
|
||||||
|
// moving the mouse or pressing any other key.
|
||||||
|
Mod+Shift+P { power-off-monitors; }
|
||||||
|
}
|
||||||
|
|
||||||
|
include "./noctalia.kdl"
|
||||||
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
layout {
|
||||||
|
|
||||||
|
focus-ring {
|
||||||
|
active-color "#d5bbff"
|
||||||
|
inactive-color "#141316"
|
||||||
|
urgent-color "#ffb4ab"
|
||||||
|
}
|
||||||
|
|
||||||
|
border {
|
||||||
|
active-color "#d5bbff"
|
||||||
|
inactive-color "#141316"
|
||||||
|
urgent-color "#ffb4ab"
|
||||||
|
}
|
||||||
|
|
||||||
|
shadow {
|
||||||
|
color "#00000070"
|
||||||
|
}
|
||||||
|
|
||||||
|
tab-indicator {
|
||||||
|
active-color "#d5bbff"
|
||||||
|
inactive-color "#543587"
|
||||||
|
urgent-color "#ffb4ab"
|
||||||
|
}
|
||||||
|
|
||||||
|
insert-hint {
|
||||||
|
color "#d5bbff80"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
recent-windows {
|
||||||
|
highlight {
|
||||||
|
active-color "#d5bbff"
|
||||||
|
urgent-color "#ffb4ab"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"mPrimary": "#d5bbff",
|
||||||
|
"mOnPrimary": "#3d1c6f",
|
||||||
|
|
||||||
|
"mSecondary": "#cec2db",
|
||||||
|
"mOnSecondary": "#342d40",
|
||||||
|
|
||||||
|
"mTertiary": "#f1b7c3",
|
||||||
|
"mOnTertiary": "#4a252f",
|
||||||
|
|
||||||
|
"mError": "#ffb4ab",
|
||||||
|
"mOnError": "#690005",
|
||||||
|
|
||||||
|
"mSurface": "#141316",
|
||||||
|
"mOnSurface": "#e6e1e6",
|
||||||
|
|
||||||
|
"mSurfaceVariant": "#211f22",
|
||||||
|
"mOnSurfaceVariant": "#cbc4cf",
|
||||||
|
|
||||||
|
"mOutline": "#49454e",
|
||||||
|
"mShadow": "#000000",
|
||||||
|
|
||||||
|
"mHover": "#f1b7c3",
|
||||||
|
"mOnHover": "#4a252f"
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
{
|
||||||
|
"dark": {
|
||||||
|
"mPrimary": "#e8bcfb",
|
||||||
|
"mOnPrimary": "#8e0cc6",
|
||||||
|
"mSecondary": "#8e0cc6",
|
||||||
|
"mOnSecondary": "#e8bcfb",
|
||||||
|
"mTertiary": "#066f50",
|
||||||
|
"mOnTertiary": "#90f9d9",
|
||||||
|
"mError": "#e80e4f",
|
||||||
|
"mOnError": "#fee7ee",
|
||||||
|
"mSurface": "#300443",
|
||||||
|
"mOnSurface": "#fef7e7",
|
||||||
|
"mSurfaceVariant": "#50066f",
|
||||||
|
"mOnSurfaceVariant": "#e8bcfb",
|
||||||
|
"mOutline": "#8e0cc6",
|
||||||
|
"mShadow": "#110118",
|
||||||
|
"mHover": "#6f099a",
|
||||||
|
"mOnHover": "#fef7e7",
|
||||||
|
"terminal": {
|
||||||
|
"foreground": "#f7e7fe",
|
||||||
|
"background": "#110118",
|
||||||
|
"normal": {
|
||||||
|
"black": "#110118",
|
||||||
|
"red": "#e80e4f",
|
||||||
|
"green": "#cb62f8",
|
||||||
|
"yellow": "#e8a70e",
|
||||||
|
"blue": "#bc39f3",
|
||||||
|
"magenta": "#e80ebc",
|
||||||
|
"cyan": "#a70ee8",
|
||||||
|
"white": "#e8bcfb"
|
||||||
|
},
|
||||||
|
"bright": {
|
||||||
|
"black": "#310345",
|
||||||
|
"red": "#c73859",
|
||||||
|
"green": "#da8efa",
|
||||||
|
"yellow": "#f3bc39",
|
||||||
|
"blue": "#ca65f6",
|
||||||
|
"magenta": "#f339ce",
|
||||||
|
"cyan": "#bc39f3",
|
||||||
|
"white": "#f7e7fe"
|
||||||
|
},
|
||||||
|
"cursor": "#f7e7fe",
|
||||||
|
"cursorText": "#110118",
|
||||||
|
"selectionFg": "#f7e7fe",
|
||||||
|
"selectionBg": "#50066f"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"light": {
|
||||||
|
"mPrimary": "#8e0cc6",
|
||||||
|
"mOnPrimary": "#e8bcfb",
|
||||||
|
"mSecondary": "#ca65f6",
|
||||||
|
"mOnSecondary": "#a70ee8",
|
||||||
|
"mTertiary": "#bcfbe8",
|
||||||
|
"mOnTertiary": "#066f50",
|
||||||
|
"mError": "#f33971",
|
||||||
|
"mOnError": "#430417",
|
||||||
|
"mSurface": "#f7e7fe",
|
||||||
|
"mOnSurface": "#6f099a",
|
||||||
|
"mSurfaceVariant": "#e8bcfb",
|
||||||
|
"mOnSurfaceVariant": "#50066f",
|
||||||
|
"mOutline": "#ca65f6",
|
||||||
|
"mShadow": "#f7e7fe",
|
||||||
|
"mHover": "#d990f9",
|
||||||
|
"mOnHover": "#300443",
|
||||||
|
"terminal": {
|
||||||
|
"foreground": "#110118",
|
||||||
|
"background": "#f7e7fe",
|
||||||
|
"normal": {
|
||||||
|
"black": "#110118",
|
||||||
|
"red": "#e80e4f",
|
||||||
|
"green": "#cb62f8",
|
||||||
|
"yellow": "#e8a70e",
|
||||||
|
"blue": "#bc39f3",
|
||||||
|
"magenta": "#e80ebc",
|
||||||
|
"cyan": "#a70ee8",
|
||||||
|
"white": "#e8bcfb"
|
||||||
|
},
|
||||||
|
"bright": {
|
||||||
|
"black": "#310345",
|
||||||
|
"red": "#c73859",
|
||||||
|
"green": "#da8efa",
|
||||||
|
"yellow": "#f3bc39",
|
||||||
|
"blue": "#ca65f6",
|
||||||
|
"magenta": "#f339ce",
|
||||||
|
"cyan": "#bc39f3",
|
||||||
|
"white": "#f7e7fe"
|
||||||
|
},
|
||||||
|
"cursor": "#110118",
|
||||||
|
"cursorText": "#f7e7fe",
|
||||||
|
"selectionFg": "#50066f",
|
||||||
|
"selectionBg": "#e8bcfb"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"sources": [
|
||||||
|
{
|
||||||
|
"enabled": true,
|
||||||
|
"name": "Noctalia Plugins",
|
||||||
|
"url": "https://github.com/noctalia-dev/noctalia-plugins"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"states": {
|
||||||
|
"catwalk": {
|
||||||
|
"enabled": false,
|
||||||
|
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
|
||||||
|
},
|
||||||
|
"fancy-audiovisualizer": {
|
||||||
|
"enabled": true,
|
||||||
|
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
|
||||||
|
},
|
||||||
|
"file-search": {
|
||||||
|
"enabled": true,
|
||||||
|
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
|
||||||
|
},
|
||||||
|
"kde-connect": {
|
||||||
|
"enabled": true,
|
||||||
|
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
|
||||||
|
},
|
||||||
|
"slowbongo": {
|
||||||
|
"enabled": false,
|
||||||
|
"sourceUrl": "https://github.com/noctalia-dev/noctalia-plugins"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"version": 2
|
||||||
|
}
|
||||||
@@ -0,0 +1,193 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Effects
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Io
|
||||||
|
import qs.Commons
|
||||||
|
import qs.Modules.Bar.Extras
|
||||||
|
import qs.Services.UI
|
||||||
|
import qs.Widgets
|
||||||
|
import qs.Services.System
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property var pluginApi: null
|
||||||
|
property ShellScreen screen
|
||||||
|
property string widgetId: ""
|
||||||
|
property string section: ""
|
||||||
|
property int sectionWidgetIndex: -1
|
||||||
|
property int sectionWidgetsCount: 0
|
||||||
|
|
||||||
|
// Per-screen bar properties
|
||||||
|
readonly property string screenName: screen?.name ?? ""
|
||||||
|
readonly property string barPosition: Settings.getBarPositionForScreen(screenName)
|
||||||
|
readonly property bool barIsVertical: barPosition === "left" || barPosition === "right"
|
||||||
|
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
|
||||||
|
|
||||||
|
property url currentIconSource
|
||||||
|
|
||||||
|
property string tooltipText: {
|
||||||
|
if (!pluginApi) return "";
|
||||||
|
return root.isRunning ? (pluginApi.tr("tooltip.running") || "Running") : (pluginApi.tr("tooltip.sleeping") || "Sleeping");
|
||||||
|
}
|
||||||
|
|
||||||
|
property string tooltipDirection: BarService.getTooltipDirection()
|
||||||
|
property bool enabled: true
|
||||||
|
property bool allowClickWhenDisabled: false
|
||||||
|
property bool hovering: false
|
||||||
|
|
||||||
|
property color colorBg: Color.mSurfaceVariant
|
||||||
|
property color colorFg: Color.mPrimary
|
||||||
|
property color colorBgHover: Color.mHover
|
||||||
|
property color colorFgHover: Color.mOnHover
|
||||||
|
property color colorBorder: Color.mOutline
|
||||||
|
property color colorBorderHover: Color.mOutline
|
||||||
|
property real customRadius: Style.radiusL
|
||||||
|
|
||||||
|
signal entered
|
||||||
|
signal exited
|
||||||
|
signal clicked
|
||||||
|
signal rightClicked
|
||||||
|
signal middleClicked
|
||||||
|
signal wheel(int angleDelta)
|
||||||
|
|
||||||
|
readonly property real contentWidth: barIsVertical ? capsuleHeight : Math.round(capsuleHeight + Style.marginXS * 2)
|
||||||
|
readonly property real contentHeight: capsuleHeight
|
||||||
|
|
||||||
|
implicitWidth: contentWidth
|
||||||
|
implicitHeight: contentHeight
|
||||||
|
|
||||||
|
// --- Catwalk Specific Logic ---
|
||||||
|
property int frameIndex: 0
|
||||||
|
property int idleFrameIndex: 0
|
||||||
|
readonly property bool isRunning: root.pluginApi?.mainInstance?.isRunning ?? false
|
||||||
|
readonly property var icons: root.pluginApi?.mainInstance?.icons || []
|
||||||
|
readonly property var idleIcons: root.pluginApi?.mainInstance?.idleIcons || []
|
||||||
|
readonly property real cpuUsage: root.pluginApi?.mainInstance?.cpuUsage ?? 0
|
||||||
|
|
||||||
|
function openPanel() {
|
||||||
|
if (pluginApi) {
|
||||||
|
var result = pluginApi.openPanel(root.screen);
|
||||||
|
Logger.i("Catwalk", "OpenPanel result:", result);
|
||||||
|
} else {
|
||||||
|
Logger.e("Catwalk", "PluginAPI is null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function openExternalMonitor() {
|
||||||
|
Quickshell.execDetached(["sh", "-c", Settings.data.systemMonitor.externalMonitor]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
interval: Math.max(30, 200 - root.cpuUsage * 1.7)
|
||||||
|
running: root.isRunning
|
||||||
|
repeat: true
|
||||||
|
onTriggered: {
|
||||||
|
root.frameIndex = (root.frameIndex + 1) % root.icons.length
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
interval: 400
|
||||||
|
running: !root.isRunning
|
||||||
|
repeat: true
|
||||||
|
onTriggered: {
|
||||||
|
root.idleFrameIndex = (root.idleFrameIndex + 1) % root.idleIcons.length
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
currentIconSource: (root.icons && root.icons.length > 0 && root.idleIcons && root.idleIcons.length > 0)
|
||||||
|
? (root.isRunning
|
||||||
|
? Qt.resolvedUrl(root.icons[root.frameIndex % root.icons.length])
|
||||||
|
: Qt.resolvedUrl(root.idleIcons[root.idleFrameIndex % root.idleIcons.length]))
|
||||||
|
: ""
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: visualCapsule
|
||||||
|
x: Style.pixelAlignCenter(parent.width, width)
|
||||||
|
y: Style.pixelAlignCenter(parent.height, height)
|
||||||
|
width: root.contentWidth
|
||||||
|
height: root.contentHeight
|
||||||
|
opacity: root.enabled ? Style.opacityFull : Style.opacityMedium
|
||||||
|
color: mouseArea.containsMouse ? Color.mHover : Style.capsuleColor
|
||||||
|
radius: Math.min((customRadius >= 0 ? customRadius : Style.iRadiusL), width / 2)
|
||||||
|
border.color: Style.capsuleBorderColor
|
||||||
|
border.width: Style.capsuleBorderWidth
|
||||||
|
|
||||||
|
Behavior on color {
|
||||||
|
ColorAnimation {
|
||||||
|
duration: Style.animationNormal
|
||||||
|
easing.type: Easing.InOutQuad
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: iconImage
|
||||||
|
source: root.currentIconSource
|
||||||
|
x: Style.pixelAlignCenter(parent.width, width)
|
||||||
|
y: Style.pixelAlignCenter(parent.height, height)
|
||||||
|
|
||||||
|
width: Style.toOdd(visualCapsule.width - Style.marginXS * 2)
|
||||||
|
height: width
|
||||||
|
|
||||||
|
// Render SVG at exact target size for crisp output
|
||||||
|
sourceSize: Qt.size(width, height)
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
smooth: true
|
||||||
|
mipmap: false
|
||||||
|
|
||||||
|
// This enables the "mask" behavior to recolor the icon
|
||||||
|
layer.enabled: true
|
||||||
|
layer.effect: MultiEffect {
|
||||||
|
colorization: 1.0
|
||||||
|
colorizationColor: Settings.data.colorSchemes.darkMode ? "white" : "black"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MouseArea {
|
||||||
|
id: mouseArea
|
||||||
|
anchors.fill: parent
|
||||||
|
cursorShape: root.enabled ? Qt.PointingHandCursor : Qt.ArrowCursor
|
||||||
|
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
|
||||||
|
hoverEnabled: true
|
||||||
|
onEntered: {
|
||||||
|
root.hovering = true;
|
||||||
|
if (root.tooltipText) {
|
||||||
|
TooltipService.show(root, root.tooltipText, root.tooltipDirection);
|
||||||
|
}
|
||||||
|
root.entered();
|
||||||
|
}
|
||||||
|
onExited: {
|
||||||
|
root.hovering = false;
|
||||||
|
if (root.tooltipText) {
|
||||||
|
TooltipService.hide();
|
||||||
|
}
|
||||||
|
root.exited();
|
||||||
|
}
|
||||||
|
onClicked: function (mouse) {
|
||||||
|
if (root.tooltipText) {
|
||||||
|
TooltipService.hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
Logger.i("Catwalk", "Clicked! API:", !!pluginApi, "Screen:", root.screen ? root.screen.name : "null");
|
||||||
|
|
||||||
|
if (!root.enabled && !root.allowClickWhenDisabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Open Panel on left/right click
|
||||||
|
// Open external monitor on middle click
|
||||||
|
if (mouse.button === Qt.LeftButton) {
|
||||||
|
root.openPanel();
|
||||||
|
root.clicked();
|
||||||
|
} else if (mouse.button === Qt.RightButton) {
|
||||||
|
root.openPanel();
|
||||||
|
root.rightClicked();
|
||||||
|
} else if (mouse.button === Qt.MiddleButton) {
|
||||||
|
root.openExternalMonitor();
|
||||||
|
root.middleClicked();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onWheel: wheel => root.wheel(wheel.angleDelta.y)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import QtQuick.Effects
|
||||||
|
import Quickshell
|
||||||
|
import qs.Commons
|
||||||
|
import qs.Modules.DesktopWidgets
|
||||||
|
import qs.Widgets
|
||||||
|
import qs.Services.System
|
||||||
|
|
||||||
|
DraggableDesktopWidget {
|
||||||
|
id: root
|
||||||
|
property var pluginApi: null
|
||||||
|
|
||||||
|
implicitWidth: 200
|
||||||
|
implicitHeight: 80
|
||||||
|
|
||||||
|
showBackground: !(root.pluginApi?.mainInstance?.hideBackground ?? false)
|
||||||
|
|
||||||
|
property int frameIndex: 0
|
||||||
|
|
||||||
|
readonly property var icons: root.pluginApi?.mainInstance?.icons || []
|
||||||
|
|
||||||
|
property int idleFrameIndex: 0
|
||||||
|
readonly property var idleIcons: root.pluginApi?.mainInstance?.idleIcons || []
|
||||||
|
|
||||||
|
readonly property bool isRunning: root.pluginApi?.mainInstance?.isRunning ?? false
|
||||||
|
readonly property real cpuUsage: root.pluginApi?.mainInstance?.cpuUsage ?? 0
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
interval: Math.max(30, 200 - root.cpuUsage * 1.7)
|
||||||
|
running: root.isRunning
|
||||||
|
repeat: true
|
||||||
|
onTriggered: {
|
||||||
|
root.frameIndex = (root.frameIndex + 1) % root.icons.length
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
interval: 400
|
||||||
|
running: !root.isRunning
|
||||||
|
repeat: true
|
||||||
|
onTriggered: {
|
||||||
|
root.idleFrameIndex = (root.idleFrameIndex + 1) % root.idleIcons.length
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
property url currentIconSource: (root.icons && root.icons.length > 0 && root.idleIcons && root.idleIcons.length > 0)
|
||||||
|
? (root.isRunning
|
||||||
|
? Qt.resolvedUrl(root.icons[root.frameIndex % root.icons.length])
|
||||||
|
: Qt.resolvedUrl(root.idleIcons[root.idleFrameIndex % root.idleIcons.length]))
|
||||||
|
: ""
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
anchors.fill: parent
|
||||||
|
spacing: 5
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: iconImage
|
||||||
|
source: root.currentIconSource
|
||||||
|
Layout.fillHeight: true
|
||||||
|
Layout.preferredWidth: height
|
||||||
|
|
||||||
|
sourceSize.height: height
|
||||||
|
sourceSize.width: width
|
||||||
|
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
smooth: true
|
||||||
|
mipmap: false
|
||||||
|
|
||||||
|
layer.enabled: true
|
||||||
|
layer.effect: MultiEffect {
|
||||||
|
colorization: 1.0
|
||||||
|
colorizationColor: Settings.data.colorSchemes.darkMode ? "white" : "black"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: Math.round(root.cpuUsage) + "%"
|
||||||
|
color: Settings.data.colorSchemes.darkMode ? "white" : "black"
|
||||||
|
font.bold: true
|
||||||
|
font.pixelSize: 40
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import qs.Services.System
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property var pluginApi: null
|
||||||
|
|
||||||
|
readonly property real minimumThreshold: pluginApi?.pluginSettings?.minimumThreshold || 10
|
||||||
|
readonly property bool hideBackground: pluginApi?.pluginSettings?.hideBackground ?? false
|
||||||
|
|
||||||
|
property real cpuUsage: SystemStatService.cpuUsage
|
||||||
|
readonly property bool isRunning: cpuUsage >= minimumThreshold
|
||||||
|
|
||||||
|
readonly property var icons: ["icons/my-active-0-symbolic.svg", "icons/my-active-1-symbolic.svg", "icons/my-active-2-symbolic.svg", "icons/my-active-3-symbolic.svg", "icons/my-active-4-symbolic.svg"]
|
||||||
|
readonly property var idleIcons: ["icons/my-idle-0-symbolic.svg", "icons/my-idle-1-symbolic.svg", "icons/my-idle-2-symbolic.svg", "icons/my-idle-3-symbolic.svg"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Effects
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import qs.Commons
|
||||||
|
import qs.Services.System
|
||||||
|
import qs.Widgets
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
property var pluginApi: null
|
||||||
|
|
||||||
|
// SmartPanel properties
|
||||||
|
readonly property var geometryPlaceholder: panelContainer
|
||||||
|
readonly property bool allowAttach: true
|
||||||
|
property real contentPreferredWidth: 300 * Style.uiScaleRatio
|
||||||
|
property real contentPreferredHeight: 300 * Style.uiScaleRatio
|
||||||
|
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: panelContainer
|
||||||
|
anchors.fill: parent
|
||||||
|
color: "transparent"
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: Style.marginL
|
||||||
|
color: Color.mSurface
|
||||||
|
radius: Style.radiusL
|
||||||
|
border.color: Color.mOutline
|
||||||
|
border.width: Style.borderS
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
spacing: Style.marginL
|
||||||
|
|
||||||
|
// Big Cat
|
||||||
|
Item {
|
||||||
|
id: bigCatItem
|
||||||
|
Layout.preferredWidth: 128 * Style.uiScaleRatio
|
||||||
|
Layout.preferredHeight: 128 * Style.uiScaleRatio
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
|
||||||
|
property int frameIndex: 0
|
||||||
|
|
||||||
|
readonly property bool isRunning: root.pluginApi?.mainInstance?.isRunning ?? false
|
||||||
|
readonly property var icons: root.pluginApi?.mainInstance?.icons || []
|
||||||
|
|
||||||
|
property int idleFrameIndex: 0
|
||||||
|
readonly property var idleIcons: root.pluginApi?.mainInstance?.idleIcons || []
|
||||||
|
|
||||||
|
readonly property real cpuUsage: root.pluginApi?.mainInstance?.cpuUsage ?? 0
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
interval: Math.max(30, 200 - bigCatItem.cpuUsage * 1.7)
|
||||||
|
running: bigCatItem.isRunning
|
||||||
|
repeat: true
|
||||||
|
onTriggered: bigCatItem.frameIndex = (bigCatItem.frameIndex + 1) % bigCatItem.icons.length
|
||||||
|
}
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
interval: 400
|
||||||
|
running: !bigCatItem.isRunning
|
||||||
|
repeat: true
|
||||||
|
onTriggered: bigCatItem.idleFrameIndex = (bigCatItem.idleFrameIndex + 1) % bigCatItem.idleIcons.length
|
||||||
|
}
|
||||||
|
|
||||||
|
Image {
|
||||||
|
id: bigCatImage
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
source: (bigCatItem.icons && bigCatItem.icons.length > 0 && bigCatItem.idleIcons && bigCatItem.idleIcons.length > 0)
|
||||||
|
? (bigCatItem.isRunning
|
||||||
|
? Qt.resolvedUrl(bigCatItem.icons[bigCatItem.frameIndex % bigCatItem.icons.length])
|
||||||
|
: Qt.resolvedUrl(bigCatItem.idleIcons[bigCatItem.idleFrameIndex % bigCatItem.idleIcons.length]))
|
||||||
|
: ""
|
||||||
|
|
||||||
|
fillMode: Image.PreserveAspectFit
|
||||||
|
smooth: true
|
||||||
|
mipmap: true
|
||||||
|
|
||||||
|
// This handles the programmatic coloring
|
||||||
|
layer.enabled: true
|
||||||
|
layer.effect: MultiEffect {
|
||||||
|
colorization: 1.0
|
||||||
|
colorizationColor: Settings.data.colorSchemes.darkMode ? "white" : "black"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CPU Stats
|
||||||
|
Text {
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
text: (pluginApi?.tr("panel.cpuLabel") || "CPU: {usage}%").replace("{usage}", Math.round(root.pluginApi?.mainInstance?.cpuUsage ?? 0))
|
||||||
|
font.pointSize: Style.fontSizeXL
|
||||||
|
font.weight: Font.Bold
|
||||||
|
color: Settings.data.colorSchemes.darkMode ? "white" : "black"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# Catwalk Plugin for Noctalia
|
||||||
|
|
||||||
|
A cute animated cat for your Noctalia bar that reacts to your system's CPU usage.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Animated Cat**: The cat walks/runs on your bar based on CPU usage
|
||||||
|
- **CPU-Based Animation**:
|
||||||
|
- Below minimum threshold: Shows idle animation with "Zz" bubbles
|
||||||
|
- Above minimum threshold: Walks faster as CPU usage increases
|
||||||
|
- Speed scales continuously with CPU load
|
||||||
|
- **Popup Panel**: Click the cat to open a larger animated version with CPU stats
|
||||||
|
- **Theme Support**: Automatically switches between light/dark mode icons
|
||||||
|
- **Configurable Settings**: Adjust the minimum CPU threshold for running animation
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
This plugin is part of the `noctalia-plugins` repository.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Access the plugin settings in Noctalia to configure:
|
||||||
|
|
||||||
|
- **Minimum CPU Threshold**: Set the CPU usage percentage (5-25%) above which the cat starts running. Below this, it stays idle with "Zz" animation.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
- The cat icon appears on your bar
|
||||||
|
- It automatically animates based on your CPU usage
|
||||||
|
- Click to open the CPU stats panel
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- Noctalia 3.6.0 or later
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import qs.Widgets
|
||||||
|
import qs.Commons
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
// Plugin API (injected by the settings dialog system)
|
||||||
|
property var pluginApi: null
|
||||||
|
|
||||||
|
// Local state - track changes before saving
|
||||||
|
property real valueMinimumThreshold: pluginApi?.mainInstance?.minimumThreshold ?? (pluginApi?.pluginSettings?.minimumThreshold || 10)
|
||||||
|
property bool valueHideBackground: pluginApi?.mainInstance?.hideBackground ?? (pluginApi?.pluginSettings?.hideBackground ?? false)
|
||||||
|
|
||||||
|
spacing: Style.marginM
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
Logger.i("Catwalk", "Settings UI loaded");
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
spacing: Style.marginS
|
||||||
|
|
||||||
|
NLabel {
|
||||||
|
label: pluginApi?.tr("settings.minimumThreshold.label") || "Minimum CPU Threshold"
|
||||||
|
description: pluginApi?.tr("settings.minimumThreshold.description") || "CPU usage must be above this percentage for the cat to start running"
|
||||||
|
}
|
||||||
|
|
||||||
|
NSlider {
|
||||||
|
id: thresholdSlider
|
||||||
|
from: 5
|
||||||
|
to: 25
|
||||||
|
value: root.valueMinimumThreshold
|
||||||
|
stepSize: 1
|
||||||
|
onValueChanged: {
|
||||||
|
root.valueMinimumThreshold = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
text: (pluginApi?.tr("settings.currentThreshold") || "Current threshold: {value}%").replace("{value}", thresholdSlider.value)
|
||||||
|
color: Color.mOnSurfaceVariant
|
||||||
|
font.pointSize: Style.fontSizeS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NToggle {
|
||||||
|
label: pluginApi?.tr("settings.hideBackground.label") || "Hide Background"
|
||||||
|
description: pluginApi?.tr("settings.hideBackground.description") || "Hide the background of the desktop widget"
|
||||||
|
|
||||||
|
checked: root.valueHideBackground
|
||||||
|
onToggled: function(checked) {
|
||||||
|
root.valueHideBackground = checked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This function is called by the dialog to save settings
|
||||||
|
function saveSettings() {
|
||||||
|
if (!pluginApi) {
|
||||||
|
Logger.e("Catwalk", "Cannot save settings: pluginApi is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the plugin settings object
|
||||||
|
pluginApi.pluginSettings.minimumThreshold = root.valueMinimumThreshold;
|
||||||
|
pluginApi.pluginSettings.hideBackground = root.valueHideBackground;
|
||||||
|
|
||||||
|
// Save to disk
|
||||||
|
pluginApi.saveSettings();
|
||||||
|
|
||||||
|
Logger.i("Catwalk", "Settings saved successfully");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU: {usage}%",
|
||||||
|
"title": "Catwalk"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Aktuelle Schwelle: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Verstecke den Hintergrund des Desktop-Widgets",
|
||||||
|
"label": "Hintergrund ausblenden"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "Die CPU-Auslastung muss über diesem Prozentsatz liegen, damit die Katze zu laufen beginnt",
|
||||||
|
"label": "Minimale CPU-Schwelle"
|
||||||
|
},
|
||||||
|
"title": "Catwalk-Einstellungen"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "Katze läuft",
|
||||||
|
"sleeping": "Katze schläft"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU: {usage}%",
|
||||||
|
"title": "Catwalk"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Current threshold: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Hide the background of the desktop widget",
|
||||||
|
"label": "Hide Background"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "CPU usage must be above this percentage for the cat to start running",
|
||||||
|
"label": "Minimum CPU Threshold"
|
||||||
|
},
|
||||||
|
"title": "Catwalk Settings"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "Cat is running",
|
||||||
|
"sleeping": "Cat is sleeping"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU: {usage}%",
|
||||||
|
"title": "Catwalk"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Umbral actual: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Ocultar el fondo del widget de escritorio",
|
||||||
|
"label": "Ocultar fondo"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "El uso de CPU debe estar por encima de este porcentaje para que el gato empiece a correr",
|
||||||
|
"label": "Umbral mínimo de CPU"
|
||||||
|
},
|
||||||
|
"title": "Configuración de Catwalk"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "El gato está corriendo",
|
||||||
|
"sleeping": "El gato está durmiendo"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU : {usage}%",
|
||||||
|
"title": "Catwalk"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Seuil actuel : {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Masquer l'arrière-plan du widget de bureau",
|
||||||
|
"label": "Masquer l'arrière-plan"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "L'utilisation du CPU doit être supérieure à ce pourcentage pour que le chat commence à courir",
|
||||||
|
"label": "Seuil minimum CPU"
|
||||||
|
},
|
||||||
|
"title": "Paramètres Catwalk"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "Le chat court",
|
||||||
|
"sleeping": "Le chat dort"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU: {usage}%",
|
||||||
|
"title": "Sétasáv"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Aktuális küszöbérték: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Asztali widget hátterének elrejtése",
|
||||||
|
"label": "Háttér elrejtése"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "A processzorhasználatnak e fölött a százalék felett kell lennie, hogy a macska futni kezdjen",
|
||||||
|
"label": "Minimum CPU Küszöbérték"
|
||||||
|
},
|
||||||
|
"title": "Catwalk beállítások"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "A Noctalia fut.",
|
||||||
|
"sleeping": "A macska alszik"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU: {usage}%",
|
||||||
|
"title": "Catwalk"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Soglia attuale: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Nascondi lo sfondo del widget desktop",
|
||||||
|
"label": "Nascondi sfondo"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "L'utilizzo della CPU deve essere superiore a questa percentuale affinché il gatto inizi a correre",
|
||||||
|
"label": "Soglia minima CPU"
|
||||||
|
},
|
||||||
|
"title": "Impostazioni Catwalk"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "Il gatto sta correndo",
|
||||||
|
"sleeping": "Il gatto sta dormendo"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU: {usage}%",
|
||||||
|
"title": "Catwalk"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "現在のしきい値: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "デスクトップウィジェットの背景を隠す",
|
||||||
|
"label": "背景を隠す"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "猫が走り始めるにはCPU使用率がこの割合を超えている必要があります",
|
||||||
|
"label": "最小CPUしきい値"
|
||||||
|
},
|
||||||
|
"title": "Catwalk設定"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "猫が走っています",
|
||||||
|
"sleeping": "猫が寝ています"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU: {usage}%",
|
||||||
|
"title": "Rêwînga pisîkan"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Astana niha: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Paşxana wîceta sermaseyê veşêre",
|
||||||
|
"label": "Veşartina Paşxanê"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "Divê bikaranîna CPU ji vê rêjeyê bilindtir be da ku pisîk dest bi bezê bike",
|
||||||
|
"label": "Sînorê herî kêm ê CPU"
|
||||||
|
},
|
||||||
|
"title": "Mîhenên Catwalkê"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "Pisîk direve",
|
||||||
|
"sleeping": "Pisîk radizê."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU: {usage}%",
|
||||||
|
"title": "Catwalk"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Huidige drempelwaarde: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Verberg de achtergrond van de bureaubladwidget",
|
||||||
|
"label": "Achtergrond verbergen"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "CPU-gebruik moet boven dit percentage liggen voordat de kat begint te rennen.",
|
||||||
|
"label": "Minimale CPU-drempel"
|
||||||
|
},
|
||||||
|
"title": "Catwalk Instellingen"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "Kat rent",
|
||||||
|
"sleeping": "Kat slaapt"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU: {usage}%",
|
||||||
|
"title": "Wybieg"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Aktualny próg: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Ukryj tło widżetu pulpitu",
|
||||||
|
"label": "Ukryj tło"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "Użycie CPU musi przekraczać ten procent, aby kot zaczął biegać",
|
||||||
|
"label": "Minimalny próg użycia CPU"
|
||||||
|
},
|
||||||
|
"title": "Ustawienia Catwalk"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "Kot jest uruchomiony",
|
||||||
|
"sleeping": "Kot śpi"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU: {usage}%",
|
||||||
|
"title": "Catwalk"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Limite atual: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Ocultar o fundo do widget da área de trabalho",
|
||||||
|
"label": "Ocultar fundo"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "O uso da CPU deve estar acima desta porcentagem para o gato começar a correr",
|
||||||
|
"label": "Limite mínimo de CPU"
|
||||||
|
},
|
||||||
|
"title": "Configurações do Catwalk"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "O gato está correndo",
|
||||||
|
"sleeping": "O gato está dormindo"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU: {usage}%",
|
||||||
|
"title": "Catwalk"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Текущий порог: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Скрыть фон виджета рабочего стола",
|
||||||
|
"label": "Скрыть фон"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "Использование CPU должно быть выше этого процента, чтобы кот начал бежать",
|
||||||
|
"label": "Минимальный порог CPU"
|
||||||
|
},
|
||||||
|
"title": "Настройки Catwalk"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "Кот бежит",
|
||||||
|
"sleeping": "Кот спит"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU: {usage}%",
|
||||||
|
"title": "Podyum"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Mevcut eşik: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Masaüstü bileşeninin arka planını gizle",
|
||||||
|
"label": "Arka planı gizle"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "CPU kullanımı, kedinin koşmaya başlaması için bu yüzdeden yüksek olmalıdır.",
|
||||||
|
"label": "Minimum CPU Eşiği"
|
||||||
|
},
|
||||||
|
"title": "Podyum Ayarları"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "Kedi koşuyor.",
|
||||||
|
"sleeping": "Kedi uyuyor."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "ЦП: {usage}%",
|
||||||
|
"title": "Подіум"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "Поточний поріг: {value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "Приховати фон віджета робочого столу",
|
||||||
|
"label": "Приховати фон"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "Використання ЦП має бути вище цього відсотка, щоб кіт почав бігати.",
|
||||||
|
"label": "Мінімальний поріг ЦП"
|
||||||
|
},
|
||||||
|
"title": "Налаштування подіуму"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "Кіт біжить",
|
||||||
|
"sleeping": "Кіт спить"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"panel": {
|
||||||
|
"cpuLabel": "CPU:{usage}%",
|
||||||
|
"title": "猫步"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"currentThreshold": "当前阈值:{value}%",
|
||||||
|
"hideBackground": {
|
||||||
|
"description": "隐藏桌面小部件的背景",
|
||||||
|
"label": "隐藏背景"
|
||||||
|
},
|
||||||
|
"minimumThreshold": {
|
||||||
|
"description": "CPU 使用率必须高于此百分比,猫才能开始跑动。",
|
||||||
|
"label": "最低CPU阈值"
|
||||||
|
},
|
||||||
|
"title": "时装秀场布置"
|
||||||
|
},
|
||||||
|
"tooltip": {
|
||||||
|
"running": "猫在跑",
|
||||||
|
"sleeping": "猫在睡觉"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
height="388"
|
||||||
|
width="388"
|
||||||
|
>
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#ffffff
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title>RunCat: Frame 0</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<title>RunCat: Frame 0</title>
|
||||||
|
<path style="fill:currentColor"
|
||||||
|
d="m 321.24,116.28019 c -0.01,-13.464 1.661,-33.778997 -8.15,-35.162997 -9.811,-1.384 -25.074,26.578997 -25.074,26.578997 l -4.43,0.554 c 0,0 3.6,-26.025997 -8.86,-23.256997 -12.46,2.769 -27.687,41.810997 -27.687,41.810997 0,0 -5.538,4.429 -9.414,18.3 -3.876,13.871 -18.55,14.09 -42.915,11.045 -24.365,-3.045 -47.345,17.443 -47.345,17.443 -22.15,-0.831 -40.977,2.215 -55.374,7.752 -14.397,5.537 -32.117,23.811 -55.375,22.15 -23.258,-1.661 -34.332,2.492 -32.947,10.521 1.385,8.029 9.413,9.414 22.426,10.8 13.013,1.386 44.853,-7.476 65.342,-19.381 a 78.147,78.147 0 0 1 41.53,-10.143 c -2.768,24.19 6.646,21.218 5.538,45.029 -1.108,23.811 8.583,46.791 24.365,59.527 15.782,12.736 21.6,6.091 22.149,-1.661 0.549,-7.752 -15.781,-27.687 -16.335,-35.44 -0.554,-7.753 9.137,-1.384 10.244,0.554 1.107,1.938 16.889,17.166 29.9,20.489 13.011,3.323 7.2,-15.782 2.492,-27.134 -4.708,-11.352 3.6,-22.15 19.1,-24.641 15.5,-2.491 22.7,5.814 19.658,16.058 -3.042,10.244 -4.153,24.919 8.86,24.088 13.013,-0.831 34.332,-32.117 35.993,-50.668 1.661,-18.551 4.153,-28.794 16.059,-32.67 11.906,-3.876 33.5,-15.782 33.5,-37.932 0,-22.15 -23.25,-34.61 -23.25,-34.61 z m -46.722,1.107 c -1.592,6.091 -16.4,11.144 -16.4,11.144 0,0 1.873,-21.665 17.862,-26.28 a 43.462,43.462 0 0 1 -1.462,15.136 z m 16.182,39.385 c -5.433,0 -9.85,-5.237 -9.85,-11.673 0,-6.436 4.417,-11.671 9.85,-11.671 5.433,0 9.85,5.235 9.85,11.671 0,6.436 -4.418,11.673 -9.85,11.673 z m 21.311,-43.907 c -4.155,-2.006 -6.5,-3.074 -10.883,-3.517 0,0 2.808,-11.618997 11.345,-14.110997 a 36.68,36.68 0 0 1 -0.462,17.627997 z m 11.6,40.931 c -5.433,0 -9.85,-5.223 -9.85,-11.644 0,-6.421 4.419,-11.648 9.852,-11.648 5.433,0 9.847,5.225 9.847,11.646 0,6.421 -4.418,11.646 -9.847,11.646 z"
|
||||||
|
class="ColorScheme-Text"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
height="388"
|
||||||
|
width="388"
|
||||||
|
viewBox="0 0 388 388">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#ffffff
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title>RunCat: Frame 1</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<title>RunCat: Frame 1</title>
|
||||||
|
<path style="fill:currentColor"
|
||||||
|
d="m 327.054,197.34487 1.662,-4.153 c 35.162,-4.43 46.517,-27.359 44.671,-42.219 -1.938,-15.6 -17.815,-29.352 -23.629,-31.705 0,0 4.43,-34.885998 -5.261,-34.885998 -11.365,0 -26.856,26.578998 -26.856,26.578998 h -4.153 c 0,0 -0.277,-24.363998 -7.2,-24.086998 -14.939,0.6 -31.01,42.083998 -31.01,42.083998 -3.6,3.876 -4.43,13.29 -14.951,24.088 -10.521,10.798 -36.244,9.357 -56.733,9.08 -20.489,-0.277 -40.724,16.669 -40.724,16.669 -6.368,0 -24.088,-3.323 -39.316,-4.43 -15.228,-1.107 -47.345,0.831 -55.928,1.938 -8.583,1.107 -60.358,12.459 -57.312,23.811 3.046,11.352 24.364,4.153 50.113,0 25.749,-4.153 65.342,-4.43 74.756,-1.384 9.414,3.046 -1.385,20.488 -18.551,25.2 -17.166,4.712 -32.117,22.421 -39.592,30.452 -7.475,8.031 -14.4,23.257 1.938,24.088 16.338,0.831 32.117,-16.613 39.869,-19.381 7.752,-2.768 2.215,8.306 -0.554,15.227 -2.769,6.921 -6.368,28.518 4.984,29.349 11.352,0.831 28.8,-25.472 32.117,-30.179 3.317,-4.707 18,-11.352 21.319,-14.4 3.319,-3.048 12.183,-12.46 12.183,-12.46 0,0 32.394,-0.83 48.729,-3.876 16.335,-3.046 31.84,-15.5 40.146,-16.612 8.306,-1.112 19.935,7.2 22.981,9.414 3.046,2.214 25.749,15.781 37.1,18.55 11.351,2.769 12.46,-12.182 12.46,-12.182 0,0 9.967,4.983 15.5,-6.368 5.533,-11.351 -38.758,-38.207 -38.758,-38.207 z m -28.425,-72.171 c -2.492,3.415 -12,4.984 -12,4.984 0,0 6.46,-19.2 16.8,-23.35 1.753,9.414 -1.739,14.174 -4.8,18.366 z m 53.251,7.5 c 5.5,0 9.967,5.578 9.967,12.459 0,6.881 -4.462,12.459 -9.967,12.459 -5.505,0 -9.967,-5.578 -9.967,-12.459 0,-6.881 4.462,-12.451 9.967,-12.451 z m -11.014,-32.22 c 0.655,6.977 -2.275,14.593 -2.275,14.593 a 30.833,30.833 0 0 0 -8.971,-1.753 c 4.614,-9.183 7.863,-11.931 11.246,-12.84 z m -22.118,58.868 c -5.5,0 -9.967,-5.579 -9.967,-12.46 0,-6.881 4.462,-12.459 9.967,-12.459 5.505,0 9.968,5.578 9.968,12.459 0,6.881 -4.463,12.46 -9.968,12.46 z"
|
||||||
|
class="ColorScheme-Text"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.8 KiB |
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
height="388"
|
||||||
|
width="388"
|
||||||
|
viewBox="0 0 388 388">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#ffffff
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title>RunCat: Frame 2</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<title>RunCat: Frame 2</title>
|
||||||
|
<path style="fill:currentColor"
|
||||||
|
d="m 382.705,182.19956 c 4.43,-19.381 -18,-37.654 -18,-37.654 0,0 6.645,-31.148 0,-33.779 -11.665,-4.617 -30.733,22.427 -30.733,22.427 l -4.707,-0.831 c 5.123,-32.531999 -5.676,-26.3 -18.965,-14.4 -13.289,11.9 -25.334,36.27 -33.917,44.3 -8.583,8.03 -18.827,5.26 -38.208,-3.887 -19.381,-9.147 -42.085,-6.081 -50.668,-1.374 -8.583,4.707 -15.777,1.941 -15.777,1.941 0,0 -24.642,-17.443 -32.394,-20.765 -7.752,-3.322 -28.518,-12.736 -53.99,-13.29 -25.472,-0.554 -46.792,9.967 -46.792,9.967 -10.521,9.137 1.385,16.889 12.737,14.4 11.352,-2.489 38.208,-6.092 56.758,-1.939 18.55,4.153 46.791,25.2 46.238,31.287 -0.553,6.087 -12.09,16.8 -25.2,19.658 -12.9,2.815 -48.175,29.071 -49.283,42.638 -1.108,13.567 14.4,14.4 29.626,6.645 15.226,-7.755 26.856,-1.384 26.856,-1.384 -14.12,13.843 -15.5,30.732 -3.6,33.224 11.9,2.492 22.149,-9.69 37.1,-23.257 14.951,-13.567 29.9,-19.935 53.437,-17.166 23.537,2.769 60.911,-0.554 60.911,-0.554 9.968,9.691 42.915,30.179 55.1,35.993 12.185,5.814 25.749,2.492 27.41,-3.6 1.661,-6.092 -16.612,-20.765 -14.951,-24.641 1.661,-3.876 19.461,3.225 26.411,-7.1 6.4,-9.509 -26.134,-24.46 -31.4,-25.844 -5.266,-1.384 -2.215,-5.814 -2.215,-5.814 17.451,-1.667 33.787,-5.82 38.216,-25.201 z m -18.39,-23.248 c 5.561,0 10.069,5.279 10.069,11.79 0,6.511 -4.508,11.79 -10.069,11.79 -5.561,0 -10.068,-5.278 -10.068,-11.79 0,-6.512 4.508,-11.79 10.068,-11.79 z m -4.728,-35.033 c 0,0 1.28,6.61 -5.019,15.47 a 48.782,48.782 0 0 0 -9.056,-3.089 c 0,0 8.26,-11.689 14.075,-12.381 z m -47.207,20.627 c -3.2,2.628 -10.936,3.184 -10.936,3.184 0,0 5.587,-16.156 19.084,-21.763 -0.277,8.583 -1.872,13.422 -8.148,18.579 z m 19.566,35.506 c -6.015,0 -10.89,-5.608 -10.89,-12.526 0,-6.918 4.875,-12.526 10.89,-12.526 6.015,0 10.89,5.608 10.89,12.526 0,6.918 -4.876,12.526 -10.89,12.526 z"
|
||||||
|
class="ColorScheme-Text"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
height="388"
|
||||||
|
width="388"
|
||||||
|
viewBox="0 0 388 388">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#ffffff
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title>RunCat: Frame 3</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<title>RunCat: Frame 3</title>
|
||||||
|
<path style="fill:currentColor"
|
||||||
|
d="m 364.709,159.58645 c 0,0 13.013,-29.833 4.983,-32.117 -15.7,-4.465 -32.344,14.823 -32.344,14.823 l -4.018,-0.887 c 0,0 3.415,-14.766 2.861,-21.688 -0.554,-6.922 -18.55,0.83 -28.795,9.413 -10.245,8.583 -29.9,36.271 -41.807,41.531 -11.907,5.26 -25.472,-13.013 -43.746,-26.026 -18.274,-13.013 -44.576,-2.492 -44.576,-2.492 -4.43,-1.384 -11.075,-13.566 -24.088,-26.3 C 140.166,103.10945 126.6,93.137455 96.7,88.153455 c -29.9,-4.984 -44.166,4.789 -42.5,11.157 1.666,6.367995 4.3,6.147995 38.352,9.331995 39.125,3.658 50.114,23.534 59.528,34.886 9.414,11.352 -3.046,22.7 -13.844,38.208 -10.798,15.508 -6.922,26.3 -4.984,39.316 1.938,13.016 13.567,16.335 15.5,35.162 1.933,18.827 6.645,25.2 18.551,21.043 11.636,-4.06 6.876,-43.539 6.655,-45.322 0.112,0.294 1.322,0.967 13,-4.515 13.567,-6.368 26.857,3.322 44.3,7.752 17.443,4.43 30.179,-0.277 34.609,9.691 8.9,20.018 23.257,45.13 40.7,53.99 17.443,8.86 20.765,-8.86 14.674,-16.059 -6.091,-7.199 -7.2,-19.1 -7.2,-19.1 34.885,4.984 43.191,-1.661 44.3,-10.244 1.109,-8.583 -17.72,-13.29 -26.857,-18 -9.137,-4.71 -2.768,-12.182 -2.768,-12.182 29.071,-3.323 45.868,-11.352 48.452,-32.394 2.143,-17.453 -12.459,-31.288 -12.459,-31.288 z m -62.3,-8.029 c 0,0 10.429,-15.874 22.242,-19.012 0,0 -0.554,11.352 -5.907,15.69 -6.296,5.105 -16.331,3.324 -16.331,3.324 z m 26.026,37.008 c -5.811,0 -10.521,-5.33 -10.521,-11.905 0,-6.575 4.71,-11.906 10.521,-11.906 5.811,0 10.521,5.331 10.521,11.906 0,6.575 -4.707,11.905 -10.517,11.905 z m 34.516,-49.744 c 0.018,3.471 -4.4,12.116 -6.959,13.62 a 16.906,16.906 0 0 0 -7.883,-4.3 c 1.756,-2.193 8.571,-9.345 14.846,-9.32 z m -2.857,55.638 c -5.084,0 -9.206,-4.913 -9.206,-10.974 0,-6.061 4.122,-10.973 9.206,-10.973 5.084,0 9.207,4.913 9.207,10.973 0,6.06 -4.122,10.974 -9.207,10.974 z"
|
||||||
|
class="ColorScheme-Text"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.7 KiB |
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
height="388"
|
||||||
|
width="388"
|
||||||
|
viewBox="0 0 388 388">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#ffffff
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<metadata>
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||||
|
<dc:title>RunCat: Frame 4</dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<title>RunCat: Frame 4</title>
|
||||||
|
<path style="fill:currentColor"
|
||||||
|
d="m 328.854,134.31128 c 0,0 9.967,-30.872 0.692,-34.194 -9.275,-3.322 -29.487,19.1 -29.487,19.1 l -4.983,-1.107 c 2.907,-25.057 0.277,-27.411 -14.536,-16.474 -14.813,10.937 -26.58,30.871 -29.625,34.055 -3.045,3.184 -5.953,14.951 -33.5,1.246 -27.547,-13.705 -44.714,-5.814 -60.635,-1.938 -15.921,3.876 -50.113,22.565 -68.941,29.763 -18.828,7.198 -37.931,4.154 -42.084,3.461 -4.153,-0.693 -23.4,-15.228 -30.594,-7.337 -7.194,7.891 0.692,16.336 8.583,22.7 7.891,6.364 27.272,9 43.745,8.444 16.473,-0.556 65.9,-18.273 65.9,-18.273 2.815,3.922 0.877,2.722 1.984,15.274 1.107,12.552 15.874,24 19.75,28.61 3.876,4.61 0.923,9.783 1.661,21.6 0.738,11.817 12,11.444 21.781,11.444 9.781,0 13.29,5.537 15.136,9.783 1.846,4.246 5.168,10.152 15.5,10.152 10.332,0 12.182,-4.061 14.951,-8.122 2.769,-4.061 12,-8.122 16.243,-7.752 4.243,0.37 7.014,21.042 11.259,28.24 4.245,7.198 19.75,11.26 22.519,9.045 2.769,-2.215 6.091,-3.323 1.292,-19.012 -4.799,-15.689 -1.292,-39.685 0.185,-47.253 1.477,-7.568 3.137,-18.458 30.271,-23.626 27.134,-5.168 40.608,-18.458 40.608,-36.178 0,-17.72 -17.675,-31.651 -17.675,-31.651 z m -49.468,-5.584 a 15.8,15.8 0 0 1 -11.905,3.921 c 0,0 7.752,-15.827 18.92,-18.412 -0.001,0.001 0.83,7.523 -7.015,14.491 z m 15.644,37.847 c -5.709,0 -10.337,-5.131 -10.337,-11.46 0,-6.329 4.628,-11.46 10.337,-11.46 5.709,0 10.336,5.131 10.336,11.46 0,6.329 -4.628,11.46 -10.336,11.46 z m 16.7,-41.908 c 0,0 7.16,-9.46 11.52,-10.429 0.277,5.446 -0.807,10.106 -4.453,13.8 a 26.262,26.262 0 0 0 -7.07,-3.371 z m 16.9,47.077 c -5.1,0 -9.229,-4.787 -9.229,-10.693 0,-5.906 4.132,-10.693 9.229,-10.693 5.097,0 9.229,4.788 9.229,10.693 0,5.905 -4.139,10.698 -9.236,10.698 z"
|
||||||
|
class="ColorScheme-Text"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
height="388"
|
||||||
|
width="388">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#ffffff
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<path style="fill:currentColor"
|
||||||
|
d="M 365.652,223.08199 c 0,0 11.752,-20.337 9.131,-34.046 -1.842,-9.637 -31.391,18.589 -31.391,18.589 l -6.092,-1.557 c 0,0 8.033,-29.068 0.383,-30.981 -7.65,-1.913 -29.451,15.3 -41.308,30.981 0,0 -20.654,5.119 -29.068,31.437 -8.414,26.318 -45.515,-29.142 -58.52,-37.939 -13.005,-8.797 -28.685,-26.773 -70.376,-13.769 -41.690997,13.004 -54.688997,34.988 -54.693997,53.549 0,15.3 2.677,22.184 -1.53,28.686 0,0 -47.427,-4.972 -43.6,-43.6 3.827,-38.628 32.129,-32.511 36.718,-32.893 4.589,-0.382 14.152,-4.972 12.24,-16.447 -1.912,-11.475 -19.51,-16.832 -33.279,-11.477 -13.769,5.355 -43.6,19.124 -43.6,61.579 0,42.455 25.626,61.937 69.229,74.966 43.602997,13.029 104.413997,13.025 123.533997,13.025 19.12,0 125.453,2.27 132.72,-5.762 0,0 41.251,-12.68 41.251,-44.347 0.004,-25.239 -3.591,-31.012 -11.748,-39.991 z M 326.829,202.74698999999998 c 0,0 -5.915,-2.07 -14.787,0 0,0 10.942,-11.534 14.787,-11.534 3.845,0 0,11.534 0,11.534 z M 358.53700000000003,217.33299 c -1.774,-2.366 -6.323,-4.549 -6.323,-4.549 0,0 8.775,-7.195 9.366,-5.124 0.591,2.071 -3.042,9.673 -3.042,9.673 z"
|
||||||
|
class="ColorScheme-Text"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
height="388"
|
||||||
|
width="388">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#ffffff
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<path style="fill:currentColor"
|
||||||
|
d="M 365.652,223.08199 c 0,0 11.752,-20.337 9.131,-34.046 -1.842,-9.637 -31.391,18.589 -31.391,18.589 l -6.092,-1.557 c 0,0 8.033,-29.068 0.383,-30.981 -7.65,-1.913 -29.451,15.3 -41.308,30.981 0,0 -20.654,5.119 -29.068,31.437 -8.414,26.318 -45.515,-29.142 -58.52,-37.939 -13.005,-8.797 -28.685,-26.773 -70.376,-13.769 -41.690997,13.004 -54.688997,34.988 -54.693997,53.549 0,15.3 2.677,22.184 -1.53,28.686 0,0 -47.427,-4.972 -43.6,-43.6 3.827,-38.628 32.129,-32.511 36.718,-32.893 4.589,-0.382 14.152,-4.972 12.24,-16.447 -1.912,-11.475 -19.51,-16.832 -33.279,-11.477 -13.769,5.355 -43.6,19.124 -43.6,61.579 0,42.455 25.626,61.937 69.229,74.966 43.602997,13.029 104.413997,13.025 123.533997,13.025 19.12,0 125.453,2.27 132.72,-5.762 0,0 41.251,-12.68 41.251,-44.347 0.004,-25.239 -3.591,-31.012 -11.748,-39.991 z M 326.829,202.74698999999998 c 0,0 -5.915,-2.07 -14.787,0 0,0 10.942,-11.534 14.787,-11.534 3.845,0 0,11.534 0,11.534 z M 358.53700000000003,217.33299 c -1.774,-2.366 -6.323,-4.549 -6.323,-4.549 0,0 8.775,-7.195 9.366,-5.124 0.591,2.071 -3.042,9.673 -3.042,9.673 z M 269.042,141.19398999999999 v -7.225 h 30.575 v 7.383 l -18.971,19.281 h 19.645 v 7.289 h -32.6 v -6.915 l 19.168,-19.811 z"
|
||||||
|
class="ColorScheme-Text"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
height="388"
|
||||||
|
width="388">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#ffffff
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<path style="fill:currentColor"
|
||||||
|
d="M 365.652,223.08199 c 0,0 11.752,-20.337 9.131,-34.046 -1.842,-9.637 -31.391,18.589 -31.391,18.589 l -6.092,-1.557 c 0,0 8.033,-29.068 0.383,-30.981 -7.65,-1.913 -29.451,15.3 -41.308,30.981 0,0 -20.654,5.119 -29.068,31.437 -8.414,26.318 -45.515,-29.142 -58.52,-37.939 -13.005,-8.797 -28.685,-26.773 -70.376,-13.769 -41.690997,13.004 -54.688997,34.988 -54.693997,53.549 0,15.3 2.677,22.184 -1.53,28.686 0,0 -47.427,-4.972 -43.6,-43.6 3.827,-38.628 32.129,-32.511 36.718,-32.893 4.589,-0.382 14.152,-4.972 12.24,-16.447 -1.912,-11.475 -19.51,-16.832 -33.279,-11.477 -13.769,5.355 -43.6,19.124 -43.6,61.579 0,42.455 25.626,61.937 69.229,74.966 43.602997,13.029 104.413997,13.025 123.533997,13.025 19.12,0 125.453,2.27 132.72,-5.762 0,0 41.251,-12.68 41.251,-44.347 0.004,-25.239 -3.591,-31.012 -11.748,-39.991 z M 326.829,202.74698999999998 c 0,0 -5.915,-2.07 -14.787,0 0,0 10.942,-11.534 14.787,-11.534 3.845,0 0,11.534 0,11.534 z M 358.53700000000003,217.33299 c -1.774,-2.366 -6.323,-4.549 -6.323,-4.549 0,0 8.775,-7.195 9.366,-5.124 0.591,2.071 -3.042,9.673 -3.042,9.673 z M 269.042,141.19398999999999 v -7.225 h 30.575 v 7.383 l -18.971,19.281 h 19.645 v 7.289 h -32.6 v -6.915 l 19.168,-19.811 z M 218.504,85.393992 v -10.809 h 40.16 v 11.042 l -24.918,28.837998 h 25.8 v 10.9 h -42.812 v -10.341 l 25.172,-29.629998 z"
|
||||||
|
class="ColorScheme-Text"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
height="388"
|
||||||
|
width="388">
|
||||||
|
<defs id="defs3051">
|
||||||
|
<style type="text/css" id="current-color-scheme">
|
||||||
|
.ColorScheme-Text {
|
||||||
|
color:#ffffff
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</defs>
|
||||||
|
<path style="fill:currentColor"
|
||||||
|
d="M 365.652,223.08199 c 0,0 11.752,-20.337 9.131,-34.046 -1.842,-9.637 -31.391,18.589 -31.391,18.589 l -6.092,-1.557 c 0,0 8.033,-29.068 0.383,-30.981 -7.65,-1.913 -29.451,15.3 -41.308,30.981 0,0 -20.654,5.119 -29.068,31.437 -8.414,26.318 -45.515,-29.142 -58.52,-37.939 -13.005,-8.797 -28.685,-26.773 -70.376,-13.769 -41.690997,13.004 -54.688997,34.988 -54.693997,53.549 0,15.3 2.677,22.184 -1.53,28.686 0,0 -47.427,-4.972 -43.6,-43.6 3.827,-38.628 32.129,-32.511 36.718,-32.893 4.589,-0.382 14.152,-4.972 12.24,-16.447 -1.912,-11.475 -19.51,-16.832 -33.279,-11.477 -13.769,5.355 -43.6,19.124 -43.6,61.579 0,42.455 25.626,61.937 69.229,74.966 43.602997,13.029 104.413997,13.025 123.533997,13.025 19.12,0 125.453,2.27 132.72,-5.762 0,0 41.251,-12.68 41.251,-44.347 0.004,-25.239 -3.591,-31.012 -11.748,-39.991 z M 326.829,202.74698999999998 c 0,0 -5.915,-2.07 -14.787,0 0,0 10.942,-11.534 14.787,-11.534 3.845,0 0,11.534 0,11.534 z M 358.53700000000003,217.33299 c -1.774,-2.366 -6.323,-4.549 -6.323,-4.549 0,0 8.775,-7.195 9.366,-5.124 0.591,2.071 -3.042,9.673 -3.042,9.673 z M 218.504,85.393992 v -10.809 h 40.16 v 11.042 l -24.918,28.837998 h 25.8 v 10.9 h -42.812 v -10.341 l 25.172,-29.629998 z"
|
||||||
|
class="ColorScheme-Text"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"id": "catwalk",
|
||||||
|
"name": "Catwalk",
|
||||||
|
"version": "1.1.7",
|
||||||
|
"minNoctaliaVersion": "3.6.0",
|
||||||
|
"author": "MannuVilasara",
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": "https://github.com/noctalia-dev/noctalia-plugins",
|
||||||
|
"description": "A cute animated cat for your bar.",
|
||||||
|
"tags": [
|
||||||
|
"Bar",
|
||||||
|
"Desktop",
|
||||||
|
"Panel",
|
||||||
|
"Fun"
|
||||||
|
],
|
||||||
|
"entryPoints": {
|
||||||
|
"main": "Main.qml",
|
||||||
|
"barWidget": "BarWidget.qml",
|
||||||
|
"desktopWidget": "DesktopWidget.qml",
|
||||||
|
"panel": "Panel.qml",
|
||||||
|
"settings": "Settings.qml"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"plugins": []
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"defaultSettings": {
|
||||||
|
"minimumThreshold": 10,
|
||||||
|
"hideBackground": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 44 KiB |
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"minimumThreshold": 5,
|
||||||
|
"hideBackground": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import qs.Commons
|
||||||
|
import qs.Modules.DesktopWidgets
|
||||||
|
import qs.Services.Media
|
||||||
|
|
||||||
|
DraggableDesktopWidget {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property var pluginApi: null
|
||||||
|
|
||||||
|
implicitWidth: Math.round(300 * widgetScale)
|
||||||
|
implicitHeight: Math.round(300 * widgetScale)
|
||||||
|
|
||||||
|
showBackground: false
|
||||||
|
|
||||||
|
// Scaled dimensions
|
||||||
|
readonly property int scaledRadiusL: Math.round(Style.radiusL * widgetScale)
|
||||||
|
|
||||||
|
// Settings from plugin
|
||||||
|
readonly property real sensitivity: widgetData?.sensitivity ?? pluginApi?.pluginSettings?.sensitivity ?? pluginApi?.manifest?.metadata?.defaultSettings?.sensitivity
|
||||||
|
readonly property real rotationSpeed: widgetData?.rotationSpeed ?? pluginApi?.pluginSettings?.rotationSpeed ?? pluginApi?.manifest?.metadata?.defaultSettings?.rotationSpeed
|
||||||
|
readonly property real barWidth: widgetData?.barWidth ?? pluginApi?.pluginSettings?.barWidth ?? pluginApi?.manifest?.metadata?.defaultSettings?.barWidth
|
||||||
|
readonly property real ringOpacity: widgetData?.ringOpacity ?? pluginApi?.pluginSettings?.ringOpacity ?? pluginApi?.manifest?.metadata?.defaultSettings?.ringOpacity
|
||||||
|
readonly property real bloomIntensity: widgetData?.bloomIntensity ?? pluginApi.pluginSettings?.bloomIntensity ?? pluginApi?.manifest?.metadata?.defaultSettings?.bloomIntensity
|
||||||
|
readonly property int visualizationMode: widgetData?.visualizationMode ?? pluginApi?.pluginSettings?.visualizationMode ?? pluginApi?.manifest?.metadata?.defaultSettings?.visualizationMode ?? 3
|
||||||
|
readonly property real waveThickness: widgetData?.waveThickness ?? pluginApi?.pluginSettings?.waveThickness ?? pluginApi?.manifest?.metadata?.defaultSettings?.waveThickness ?? 1.0
|
||||||
|
readonly property real innerDiameter: widgetData?.innerDiameter ?? pluginApi?.pluginSettings?.innerDiameter ?? pluginApi?.manifest?.metadata?.defaultSettings?.innerDiameter ?? 0.7
|
||||||
|
readonly property bool fadeWhenIdle: widgetData?.fadeWhenIdle ?? pluginApi?.pluginSettings?.fadeWhenIdle ?? false
|
||||||
|
readonly property bool useCustomColors: widgetData?.useCustomColors ?? pluginApi?.pluginSettings?.useCustomColors ?? false
|
||||||
|
readonly property color customPrimaryColor: widgetData?.customPrimaryColor ?? pluginApi?.pluginSettings?.customPrimaryColor ?? "#6750A4"
|
||||||
|
readonly property color customSecondaryColor: widgetData?.customSecondaryColor ?? pluginApi?.pluginSettings?.customSecondaryColor ?? "#625B71"
|
||||||
|
|
||||||
|
// Animation time for shader (0 to 3600, 1 hour cycle)
|
||||||
|
property real shaderTime: 0
|
||||||
|
NumberAnimation on shaderTime {
|
||||||
|
loops: Animation.Infinite
|
||||||
|
from: 0
|
||||||
|
to: 3600
|
||||||
|
duration: 3600000
|
||||||
|
running: !SpectrumService.isIdle
|
||||||
|
}
|
||||||
|
|
||||||
|
// Hidden canvas that encodes audio data as a 32x1 texture
|
||||||
|
Canvas {
|
||||||
|
id: audioCanvas
|
||||||
|
width: 32
|
||||||
|
height: 1
|
||||||
|
visible: false
|
||||||
|
|
||||||
|
onPaint: {
|
||||||
|
var ctx = getContext("2d");
|
||||||
|
var values = SpectrumService.values;
|
||||||
|
if (!values || values.length === 0) {
|
||||||
|
ctx.fillStyle = "black";
|
||||||
|
ctx.fillRect(0, 0, 32, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (var i = 0; i < 32; i++) {
|
||||||
|
var v = values[i] || 0;
|
||||||
|
// Encode amplitude in grayscale (R=G=B=amplitude)
|
||||||
|
var c = Math.floor(v * 255);
|
||||||
|
ctx.fillStyle = "rgb(" + c + "," + c + "," + c + ")";
|
||||||
|
ctx.fillRect(i, 0, 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Trigger canvas repaint when audio data changes
|
||||||
|
Connections {
|
||||||
|
target: SpectrumService
|
||||||
|
function onValuesChanged() {
|
||||||
|
if (!SpectrumService.isIdle) {
|
||||||
|
audioCanvas.requestPaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unique instance ID for SpectrumService registration
|
||||||
|
// This prevents the old widget's destruction from unregistering the new widget
|
||||||
|
readonly property string spectrumInstanceId: "plugin:fancy-audiovisualizer:" + Date.now() + Math.random()
|
||||||
|
|
||||||
|
// Register with SpectrumService when pluginApi becomes available
|
||||||
|
onPluginApiChanged: {
|
||||||
|
if (pluginApi) {
|
||||||
|
SpectrumService.registerComponent(spectrumInstanceId);
|
||||||
|
audioCanvas.requestPaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onDestruction: {
|
||||||
|
SpectrumService.unregisterComponent(spectrumInstanceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Audio texture source (outside ShaderEffect to avoid 'source' property warning)
|
||||||
|
ShaderEffectSource {
|
||||||
|
id: audioTextureSource
|
||||||
|
sourceItem: audioCanvas
|
||||||
|
live: true
|
||||||
|
hideSource: true
|
||||||
|
}
|
||||||
|
|
||||||
|
// The shader effect visualization
|
||||||
|
ShaderEffect {
|
||||||
|
id: visualizer
|
||||||
|
anchors.fill: parent
|
||||||
|
visible: pluginApi !== null
|
||||||
|
opacity: (root.fadeWhenIdle && SpectrumService.isIdle) ? 0 : 1
|
||||||
|
|
||||||
|
Behavior on opacity {
|
||||||
|
NumberAnimation { duration: 500; easing.type: Easing.InOutQuad }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Audio texture - named 'source' to match ShaderEffectSource's property and avoid warning
|
||||||
|
property var source: audioTextureSource
|
||||||
|
|
||||||
|
// Uniforms passed to shader
|
||||||
|
property real time: root.shaderTime
|
||||||
|
property real itemWidth: visualizer.width
|
||||||
|
property real itemHeight: visualizer.height
|
||||||
|
property color primaryColor: root.useCustomColors ? root.customPrimaryColor : Color.mPrimary
|
||||||
|
property color secondaryColor: root.useCustomColors ? root.customSecondaryColor : Color.mSecondary
|
||||||
|
property real sensitivity: root.sensitivity
|
||||||
|
property real rotationSpeed: root.rotationSpeed
|
||||||
|
property real barWidth: root.barWidth
|
||||||
|
property real ringOpacity: root.ringOpacity
|
||||||
|
property real cornerRadius: scaledRadiusL
|
||||||
|
property real bloomIntensity: root.bloomIntensity
|
||||||
|
property real visualizationMode: root.visualizationMode
|
||||||
|
property real waveThickness: root.waveThickness
|
||||||
|
property real innerDiameter: root.innerDiameter
|
||||||
|
|
||||||
|
fragmentShader: pluginApi ? Qt.resolvedUrl(pluginApi.pluginDir + "/shaders/visualizer.frag.qsb") : ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback when shader not loaded
|
||||||
|
Rectangle {
|
||||||
|
anchors.fill: parent
|
||||||
|
color: Color.mSurface
|
||||||
|
radius: scaledRadiusL
|
||||||
|
visible: !visualizer.visible || visualizer.fragmentShader === ""
|
||||||
|
|
||||||
|
Text {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
text: "Loading..."
|
||||||
|
color: Color.mOnSurface
|
||||||
|
font.pointSize: Math.round(Style.fontSizeM * widgetScale)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,244 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import qs.Commons
|
||||||
|
import qs.Widgets
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property var pluginApi: null
|
||||||
|
property var widgetSettings: null
|
||||||
|
property var screen: null
|
||||||
|
|
||||||
|
spacing: Style.marginM
|
||||||
|
|
||||||
|
// Local state for editing
|
||||||
|
property real valueSensitivity: widgetSettings?.data?.sensitivity ?? pluginApi?.pluginSettings?.sensitivity ?? 1.5
|
||||||
|
property real valueRotationSpeed: widgetSettings?.data?.rotationSpeed ?? pluginApi?.pluginSettings?.rotationSpeed ?? 0.5
|
||||||
|
property real valueBarWidth: widgetSettings?.data?.barWidth ?? pluginApi?.pluginSettings?.barWidth ?? 0.6
|
||||||
|
property real valueRingOpacity: widgetSettings?.data?.ringOpacity ?? pluginApi?.pluginSettings?.ringOpacity ?? 0.8
|
||||||
|
property real valueBloomIntensity: widgetSettings?.data?.bloomIntensity ?? pluginApi?.pluginSettings?.bloomIntensity ?? 0.5
|
||||||
|
property int valueVisualizationMode: widgetSettings?.data?.visualizationMode ?? pluginApi?.pluginSettings?.visualizationMode ?? 3
|
||||||
|
property real valueWaveThickness: widgetSettings?.data?.waveThickness ?? pluginApi?.pluginSettings?.waveThickness ?? 1.0
|
||||||
|
property real valueInnerDiameter: widgetSettings?.data?.innerDiameter ?? pluginApi?.pluginSettings?.innerDiameter ?? 0.7
|
||||||
|
property bool valueFadeWhenIdle: widgetSettings?.data?.fadeWhenIdle ?? pluginApi?.pluginSettings?.fadeWhenIdle ?? true
|
||||||
|
property bool valueUseCustomColors: widgetSettings?.data?.useCustomColors ?? pluginApi?.pluginSettings?.useCustomColors ?? false
|
||||||
|
property color valueCustomPrimaryColor: widgetSettings?.data?.customPrimaryColor ?? pluginApi?.pluginSettings?.customPrimaryColor ?? "#6750A4"
|
||||||
|
property color valueCustomSecondaryColor: widgetSettings?.data?.customSecondaryColor ?? pluginApi?.pluginSettings?.customSecondaryColor ?? "#625B71"
|
||||||
|
|
||||||
|
// Mode helpers
|
||||||
|
readonly property bool modeHasBars: valueVisualizationMode === 0 || valueVisualizationMode === 3 || valueVisualizationMode === 5
|
||||||
|
readonly property bool modeHasWave: valueVisualizationMode === 1 || valueVisualizationMode === 4 || valueVisualizationMode === 5
|
||||||
|
readonly property bool modeHasRings: valueVisualizationMode >= 2
|
||||||
|
|
||||||
|
NHeader {
|
||||||
|
label: pluginApi?.tr("settings.title") ?? "Visualizer Settings"
|
||||||
|
description: pluginApi?.tr("settings.description") ?? "Configure the audio visualizer appearance"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Visualization mode selector
|
||||||
|
NComboBox {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
label: pluginApi?.tr("settings.visualizationMode") ?? "Visualization Mode"
|
||||||
|
description: pluginApi?.tr("settings.visualizationMode-description") ?? "Choose visualization style"
|
||||||
|
model: [
|
||||||
|
{"key": "0", "name": pluginApi?.tr("settings.mode.bars") ?? "Bars"},
|
||||||
|
{"key": "1", "name": pluginApi?.tr("settings.mode.wave") ?? "Wave"},
|
||||||
|
{"key": "2", "name": pluginApi?.tr("settings.mode.rings") ?? "Rings"},
|
||||||
|
{"key": "3", "name": pluginApi?.tr("settings.mode.barsRings") ?? "Bars + Rings"},
|
||||||
|
{"key": "4", "name": pluginApi?.tr("settings.mode.waveRings") ?? "Wave + Rings"},
|
||||||
|
{"key": "5", "name": pluginApi?.tr("settings.mode.all") ?? "All"}
|
||||||
|
]
|
||||||
|
currentKey: String(root.valueVisualizationMode)
|
||||||
|
onSelected: key => {
|
||||||
|
root.valueVisualizationMode = parseInt(key);
|
||||||
|
root.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wave thickness slider (shown when mode includes wave)
|
||||||
|
NValueSlider {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
visible: root.modeHasWave
|
||||||
|
label: pluginApi?.tr("settings.waveThickness") ?? "Wave Thickness"
|
||||||
|
value: root.valueWaveThickness
|
||||||
|
from: 0.3
|
||||||
|
to: 2.0
|
||||||
|
stepSize: 0.1
|
||||||
|
onMoved: value => {
|
||||||
|
root.valueWaveThickness = value;
|
||||||
|
root.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sensitivity slider
|
||||||
|
NValueSlider {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
label: pluginApi?.tr("settings.sensitivity") ?? "Sensitivity"
|
||||||
|
value: root.valueSensitivity
|
||||||
|
from: 0.5
|
||||||
|
to: 3.0
|
||||||
|
stepSize: 0.1
|
||||||
|
onMoved: value => {
|
||||||
|
root.valueSensitivity = value;
|
||||||
|
root.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rotation speed slider
|
||||||
|
NValueSlider {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
label: pluginApi?.tr("settings.rotationSpeed") ?? "Rotation Speed"
|
||||||
|
value: root.valueRotationSpeed
|
||||||
|
from: 0.0
|
||||||
|
to: 2.0
|
||||||
|
stepSize: 0.1
|
||||||
|
onMoved: value => {
|
||||||
|
root.valueRotationSpeed = value;
|
||||||
|
root.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bar width slider (shown when mode includes bars)
|
||||||
|
NValueSlider {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
visible: root.modeHasBars
|
||||||
|
label: pluginApi?.tr("settings.barWidth") ?? "Bar Width"
|
||||||
|
value: root.valueBarWidth
|
||||||
|
from: 0.2
|
||||||
|
to: 1.0
|
||||||
|
stepSize: 0.1
|
||||||
|
onMoved: value => {
|
||||||
|
root.valueBarWidth = value;
|
||||||
|
root.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ring opacity slider (shown when mode includes rings)
|
||||||
|
NValueSlider {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
visible: root.modeHasRings
|
||||||
|
label: pluginApi?.tr("settings.ringOpacity") ?? "Ring Opacity"
|
||||||
|
value: root.valueRingOpacity
|
||||||
|
from: 0.0
|
||||||
|
to: 1.0
|
||||||
|
stepSize: 0.1
|
||||||
|
onMoved: value => {
|
||||||
|
root.valueRingOpacity = value;
|
||||||
|
root.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Base diameter slider
|
||||||
|
NValueSlider {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
label: pluginApi?.tr("settings.innerDiameter") ?? "Inner Diameter"
|
||||||
|
value: root.valueInnerDiameter
|
||||||
|
from: 0
|
||||||
|
to: 1
|
||||||
|
stepSize: 0.05
|
||||||
|
onMoved: value => {
|
||||||
|
root.valueInnerDiameter = value;
|
||||||
|
root.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bloom intensity slider
|
||||||
|
NValueSlider {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
label: pluginApi?.tr("settings.bloomIntensity") ?? "Bloom Intensity"
|
||||||
|
value: root.valueBloomIntensity
|
||||||
|
from: 0.0
|
||||||
|
to: 1.0
|
||||||
|
stepSize: 0.05
|
||||||
|
onMoved: value => {
|
||||||
|
root.valueBloomIntensity = value;
|
||||||
|
root.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fade when idle toggle
|
||||||
|
NToggle {
|
||||||
|
label: pluginApi?.tr("settings.fadeWhenIdle") ?? "Fade When Idle"
|
||||||
|
description: pluginApi?.tr("settings.fadeWhenIdle-description") ?? "Fade out visualizer when no audio is playing"
|
||||||
|
checked: root.valueFadeWhenIdle
|
||||||
|
onToggled: checked => {
|
||||||
|
root.valueFadeWhenIdle = checked;
|
||||||
|
root.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use custom colors toggle
|
||||||
|
NToggle {
|
||||||
|
label: pluginApi?.tr("settings.useCustomColors") ?? "Use Custom Colors"
|
||||||
|
description: pluginApi?.tr("settings.useCustomColors-description") ?? "Override theme colors with custom colors"
|
||||||
|
checked: root.valueUseCustomColors
|
||||||
|
onToggled: checked => {
|
||||||
|
root.valueUseCustomColors = checked;
|
||||||
|
root.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Custom primary color picker
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
visible: root.valueUseCustomColors
|
||||||
|
spacing: Style.marginM
|
||||||
|
|
||||||
|
NText {
|
||||||
|
text: pluginApi?.tr("settings.customPrimaryColor") ?? "Primary Color"
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
|
||||||
|
NColorPicker {
|
||||||
|
screen: Screen
|
||||||
|
selectedColor: root.valueCustomPrimaryColor
|
||||||
|
onColorSelected: color => {
|
||||||
|
root.valueCustomPrimaryColor = color;
|
||||||
|
root.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Custom secondary color picker
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
visible: root.valueUseCustomColors
|
||||||
|
spacing: Style.marginM
|
||||||
|
|
||||||
|
NText {
|
||||||
|
text: pluginApi?.tr("settings.customSecondaryColor") ?? "Secondary Color"
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
|
||||||
|
NColorPicker {
|
||||||
|
screen: Screen
|
||||||
|
selectedColor: root.valueCustomSecondaryColor
|
||||||
|
onColorSelected: color => {
|
||||||
|
root.valueCustomSecondaryColor = color;
|
||||||
|
root.saveSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called when user clicks Apply/Save
|
||||||
|
function saveSettings() {
|
||||||
|
if (!widgetSettings)
|
||||||
|
return;
|
||||||
|
|
||||||
|
widgetSettings.data.sensitivity = root.valueSensitivity;
|
||||||
|
widgetSettings.data.rotationSpeed = root.valueRotationSpeed;
|
||||||
|
widgetSettings.data.barWidth = root.valueBarWidth;
|
||||||
|
widgetSettings.data.ringOpacity = root.valueRingOpacity;
|
||||||
|
widgetSettings.data.bloomIntensity = root.valueBloomIntensity;
|
||||||
|
widgetSettings.data.visualizationMode = root.valueVisualizationMode;
|
||||||
|
widgetSettings.data.waveThickness = root.valueWaveThickness;
|
||||||
|
widgetSettings.data.innerDiameter = root.valueInnerDiameter;
|
||||||
|
widgetSettings.data.fadeWhenIdle = root.valueFadeWhenIdle;
|
||||||
|
widgetSettings.data.useCustomColors = root.valueUseCustomColors;
|
||||||
|
widgetSettings.data.customPrimaryColor = root.valueCustomPrimaryColor.toString();
|
||||||
|
widgetSettings.data.customSecondaryColor = root.valueCustomSecondaryColor.toString();
|
||||||
|
|
||||||
|
widgetSettings.save();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# Fancy Audiovisualizer
|
||||||
|
|
||||||
|
A circular audio visualizer desktop widget for Noctalia Shell with shader-based rendering and multiple visualization modes.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Multiple Visualization Modes**: Bars, Wave, Rings, or combinations (Bars+Rings, Wave+Rings, All)
|
||||||
|
- **Shader-Based Rendering**: Smooth, GPU-accelerated visualization using custom fragment shaders
|
||||||
|
- **Theme Integration**: Automatically uses Noctalia theme colors, with optional custom color override
|
||||||
|
- **Configurable Appearance**: Adjust sensitivity, rotation speed, bar width, ring opacity, bloom intensity, and more
|
||||||
|
- **Idle Fade**: Optional fade-out when no audio is playing
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
This plugin is part of the `noctalia-plugins` repository.
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Access the plugin settings in Noctalia to configure the following options:
|
||||||
|
|
||||||
|
- **Visualization Mode**: Choose between Bars, Wave, Rings, Bars+Rings, Wave+Rings, or All
|
||||||
|
- **Wave Thickness**: Thickness of the wave visualization (when enabled)
|
||||||
|
- **Sensitivity**: Audio response sensitivity (0.5 - 3.0)
|
||||||
|
- **Rotation Speed**: Speed of visualization rotation (0.0 - 2.0)
|
||||||
|
- **Bar Width**: Width of audio bars (when enabled)
|
||||||
|
- **Ring Opacity**: Opacity of background rings (when enabled)
|
||||||
|
- **Inner Diameter**: Size of the inner empty area
|
||||||
|
- **Bloom Intensity**: Glow/bloom effect strength
|
||||||
|
- **Fade When Idle**: Fade out when no audio is playing
|
||||||
|
- **Custom Colors**: Override theme colors with custom primary and secondary colors
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Add the widget to your desktop via the Noctalia desktop widgets interface. The visualizer responds to system audio.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- Noctalia 3.7.2 or later
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"settings": {
|
||||||
|
"barWidth": "Balkenbreite",
|
||||||
|
"bloomIntensity": "Blütenintensität",
|
||||||
|
"customPrimaryColor": "Primärfarbe",
|
||||||
|
"customSecondaryColor": "Sekundärfarbe",
|
||||||
|
"description": "Audiovisualisierungsdarstellung konfigurieren",
|
||||||
|
"fadeWhenIdle": "Ausblenden bei Inaktivität",
|
||||||
|
"fadeWhenIdle-description": "Visualisierer ausblenden, wenn keine Audioausgabe erfolgt",
|
||||||
|
"innerDiameter": "Innendurchmesser",
|
||||||
|
"mode": {
|
||||||
|
"all": "Alle",
|
||||||
|
"bars": "Bars",
|
||||||
|
"barsRings": "Barren + Ringe",
|
||||||
|
"rings": "Ringe",
|
||||||
|
"wave": "Welle",
|
||||||
|
"waveRings": "Welle + Ringe"
|
||||||
|
},
|
||||||
|
"ringOpacity": "Ring-Opazität",
|
||||||
|
"rotationSpeed": "Drehzahl",
|
||||||
|
"sensitivity": "Empfindlichkeit",
|
||||||
|
"title": "Visualisierungseinstellungen",
|
||||||
|
"useCustomColors": "Benutzerdefinierte Farben verwenden",
|
||||||
|
"useCustomColors-description": "Themenfarben mit benutzerdefinierten Farben überschreiben",
|
||||||
|
"visualizationMode": "Visualisierungsmodus",
|
||||||
|
"visualizationMode-description": "Visualisierungsstil wählen",
|
||||||
|
"waveThickness": "Wellendicke"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"settings": {
|
||||||
|
"barWidth": "Bar Width",
|
||||||
|
"bloomIntensity": "Bloom Intensity",
|
||||||
|
"customPrimaryColor": "Primary Color",
|
||||||
|
"customSecondaryColor": "Secondary Color",
|
||||||
|
"description": "Configure the audio visualizer appearance",
|
||||||
|
"fadeWhenIdle": "Fade When Idle",
|
||||||
|
"fadeWhenIdle-description": "Fade out visualizer when no audio is playing",
|
||||||
|
"innerDiameter": "Inner Diameter",
|
||||||
|
"mode": {
|
||||||
|
"all": "All",
|
||||||
|
"bars": "Bars",
|
||||||
|
"barsRings": "Bars + Rings",
|
||||||
|
"rings": "Rings",
|
||||||
|
"wave": "Wave",
|
||||||
|
"waveRings": "Wave + Rings"
|
||||||
|
},
|
||||||
|
"ringOpacity": "Ring Opacity",
|
||||||
|
"rotationSpeed": "Rotation Speed",
|
||||||
|
"sensitivity": "Sensitivity",
|
||||||
|
"title": "Visualizer Settings",
|
||||||
|
"useCustomColors": "Use Custom Colors",
|
||||||
|
"useCustomColors-description": "Override theme colors with custom colors",
|
||||||
|
"visualizationMode": "Visualization Mode",
|
||||||
|
"visualizationMode-description": "Choose visualization style",
|
||||||
|
"waveThickness": "Wave Thickness"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"settings": {
|
||||||
|
"barWidth": "Ancho de barra",
|
||||||
|
"bloomIntensity": "Intensidad de floración",
|
||||||
|
"customPrimaryColor": "Color primario",
|
||||||
|
"customSecondaryColor": "Color secundario",
|
||||||
|
"description": "Configurar la apariencia del visualizador de audio",
|
||||||
|
"fadeWhenIdle": "Desvanecer al estar inactivo",
|
||||||
|
"fadeWhenIdle-description": "Atenuar el visualizador cuando no se reproduce audio.",
|
||||||
|
"innerDiameter": "Diámetro interior",
|
||||||
|
"mode": {
|
||||||
|
"all": "Todo",
|
||||||
|
"bars": "Barras",
|
||||||
|
"barsRings": "Barras + Anillas",
|
||||||
|
"rings": "Anillos",
|
||||||
|
"wave": "Ola",
|
||||||
|
"waveRings": "Onda + Anillos"
|
||||||
|
},
|
||||||
|
"ringOpacity": "Opacidad del anillo",
|
||||||
|
"rotationSpeed": "Velocidad de rotación",
|
||||||
|
"sensitivity": "Sensibilidad",
|
||||||
|
"title": "Ajustes del Visualizador",
|
||||||
|
"useCustomColors": "Usar colores personalizados",
|
||||||
|
"useCustomColors-description": "Anular los colores del tema con colores personalizados",
|
||||||
|
"visualizationMode": "Modo de visualización",
|
||||||
|
"visualizationMode-description": "Elegir estilo de visualización",
|
||||||
|
"waveThickness": "Espesor de la onda"
|
||||||
|
}
|
||||||
|
}
|
||||||