From 3f7f5e17c802098c48b318b68a19c203a594a6c7 Mon Sep 17 00:00:00 2001 From: casualhonk Date: Sat, 31 May 2025 22:22:31 +1000 Subject: [PATCH] add config folders --- cava/config | 282 +++++++++ cava/shaders/bar_spectrum.frag | 79 +++ cava/shaders/northern_lights.frag | 34 ++ cava/shaders/pass_through.vert | 14 + cava/shaders/spectrogram.frag | 53 ++ cava/shaders/winamp_line_style_spectrum.frag | 112 ++++ posh/termconfig.json | 68 +++ term/settings.json | 104 ++++ yasb/config.yaml | 467 ++++++++++++++ yasb/notes.json | 1 + yasb/styles.css | 601 +++++++++++++++++++ yasb/yasb.log | 137 +++++ 12 files changed, 1952 insertions(+) create mode 100644 cava/config create mode 100644 cava/shaders/bar_spectrum.frag create mode 100644 cava/shaders/northern_lights.frag create mode 100644 cava/shaders/pass_through.vert create mode 100644 cava/shaders/spectrogram.frag create mode 100644 cava/shaders/winamp_line_style_spectrum.frag create mode 100644 posh/termconfig.json create mode 100644 term/settings.json create mode 100644 yasb/config.yaml create mode 100644 yasb/notes.json create mode 100644 yasb/styles.css create mode 100644 yasb/yasb.log diff --git a/cava/config b/cava/config new file mode 100644 index 0000000..ec5aea4 --- /dev/null +++ b/cava/config @@ -0,0 +1,282 @@ +## Configuration file for CAVA. +# Remove the ; to change parameters. + + +[general] + +# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0 +; mode = normal + +# Accepts only non-negative values. +; framerate = 60 + +# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off +# new as of 0.6.0 autosens of low values (dynamic range) +# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0 +; autosens = 1 +; overshoot = 20 + +# Manual sensitivity in %. If autosens is enabled, this will only be the initial value. +# 200 means double height. Accepts only non-negative values. +; sensitivity = 100 + +# The number of bars (0-512). 0 sets it to auto (fill up console). +# Bars' width and space between bars in number of characters. +; bars = 0 +; bar_width = 2 +; bar_spacing = 1 +# bar_height is only used for output in "noritake" format +; bar_height = 32 + +# For SDL width and space between bars is in pixels, defaults are: +; bar_width = 20 +; bar_spacing = 5 + +# sdl_glsl have these default values, they are only used to calculate max number of bars. +; bar_width = 1 +; bar_spacing = 0 + + +# Lower and higher cutoff frequencies for lowest and highest bars +# the bandwidth of the visualizer. +# Note: there is a minimum total bandwidth of 43Mhz x number of bars. +# Cava will automatically increase the higher cutoff if a too low band is specified. +; lower_cutoff_freq = 50 +; higher_cutoff_freq = 10000 + + +# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and +# only check for input once per second. Cava will wake up once input is detected. 0 = disable. +; sleep_timer = 0 + + +[input] + +# Audio capturing method. Possible methods are: 'fifo', 'portaudio', 'pipewire', 'alsa', 'pulse', 'sndio', 'oss', 'jack' or 'shmem' +# Defaults to 'oss', 'pipewire', 'sndio', 'jack', 'pulse', 'alsa', 'portaudio' or 'fifo', in that order, dependent on what support cava was built with. +# On Mac it defaults to 'portaudio' or 'fifo' +# On windows this is automatic and no input settings are needed. +# +# All input methods uses the same config variable 'source' +# to define where it should get the audio. +# +# For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink +# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them). +# +# For pipewire 'source' will be the object name or object.serial of the device to capture from. +# Both input and output devices are supported. +# +# For alsa 'source' will be the capture device. +# For fifo 'source' will be the path to fifo-file. +# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address +# +# For sndio 'source' will be a raw recording audio descriptor or a monitoring sub-device, e.g. 'rsnd/2' or 'snd/1'. Default: 'default'. +# README.md contains further information on how to setup CAVA for sndio. +# +# For oss 'source' will be the path to a audio device, e.g. '/dev/dsp2'. Default: '/dev/dsp', i.e. the default audio device. +# README.md contains further information on how to setup CAVA for OSS on FreeBSD. +# +# For jack 'source' will be the name of the JACK server to connect to, e.g. 'foobar'. Default: 'default'. +# README.md contains further information on how to setup CAVA for JACK. +# +; method = pulse +; source = auto + +; method = pipewire +; source = auto + +; method = alsa +; source = hw:Loopback,1 + +; method = fifo +; source = /tmp/mpd.fifo + +; method = shmem +; source = /squeezelite-AA:BB:CC:DD:EE:FF + +; method = portaudio +; source = auto + +; method = sndio +; source = default + +; method = oss +; source = /dev/dsp + +; method = jack +; source = default + +# The options 'sample_rate', 'sample_bits', 'channels' and 'autoconnect' can be configured for some input methods: +# sample_rate: fifo, pipewire, sndio, oss +# sample_bits: fifo, pipewire, sndio, oss +# channels: sndio, oss, jack +# autoconnect: jack +# Other methods ignore these settings. +# +# For 'sndio' and 'oss' they are only preferred values, i.e. if the values are not supported +# by the chosen audio device, the device will use other supported values instead. +# Example: 48000, 32 and 2, but the device only supports 44100, 16 and 1, then it +# will use 44100, 16 and 1. +# +; sample_rate = 44100 +; sample_bits = 16 +; channels = 2 +; autoconnect = 2 + + +[output] + +# Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl' +# or 'sdl_glsl'. +# 'noncurses' (default) uses a buffer and cursor movements to only print +# changes from frame to frame in the terminal. Uses less resources and is less +# prone to tearing (vsync issues) than 'ncurses'. +# +# 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data +# stream of the bar heights that can be used to send to other applications. +# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above. +# +# 'noritake' outputs a bitmap in the format expected by a Noritake VFD display +# in graphic mode. It only support the 3000 series graphical VFDs for now. +# +# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context. +# 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or +# use one of the predefined ones. +; method = noncurses + +# Orientation of the visualization. Can be 'bottom', 'top', 'left', 'right' or +# 'horizontal'. Default is 'bottom'. 'left and 'right' are only supported on sdl +# and ncruses output. 'horizontal' (bars go up and down from center) is only supported +# on noncurses output. +# Note: many fonts have weird or missing glyphs for characters used in orientations +# other than 'bottom', which can make output not look right. +; orientation = bottom + +# Visual channels. Can be 'stereo' or 'mono'. +# 'stereo' mirrors both channels with low frequencies in center. +# 'mono' outputs left to right lowest to highest frequencies. +# 'mono_option' set mono to either take input from 'left', 'right' or 'average'. +# set 'reverse' to 1 to display frequencies the other way around. +; channels = stereo +; mono_option = average +; reverse = 0 + +# Raw output target. +# On Linux, a fifo will be created if target does not exist. +# On Windows, a named pipe will be created if target does not exist. +; raw_target = /dev/stdout + +# Raw data format. Can be 'binary' or 'ascii'. +; data_format = binary + +# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530). +; bit_format = 16bit + +# Ascii max value. In 'ascii' mode range will run from 0 to value specified here +; ascii_max_range = 1000 + +# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters. +# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)). +; bar_delimiter = 59 +; frame_delimiter = 10 + +# sdl window size and position. -1,-1 is centered. +; sdl_width = 1000 +; sdl_height = 500 +; sdl_x = -1 +; sdl_y= -1 +; sdl_full_screen = 0 + +# set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none' +# 'frequency' displays the lower cut off frequency of the bar above. +# Only supported on ncurses and noncurses output. +; xaxis = none + +# enable synchronized sync. 1 = on, 0 = off +# removes flickering in alacritty terminal emulator. +# defaults to off since the behaviour in other terminal emulators is unknown +; synchronized_sync = 0 + +# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders +; vertex_shader = pass_through.vert +; fragment_shader = bar_spectrum.frag + +; for glsl output mode, keep rendering even if no audio +; continuous_rendering = 0 + +# disable console blank (screen saver) in tty +# (Not supported on FreeBSD) +; disable_blanking = 0 + +# show a flat bar at the bottom of the screen when idle, 1 = on, 0 = off +; show_idle_bar_heads = 1 + +# show waveform instead of frequency spectrum, 1 = on, 0 = off +; waveform = 0 + +[color] + +# Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow. +# Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires +# a terminal that can change color definitions such as Gnome-terminal or rxvt. +# default is to keep current terminal color +; background = default +; foreground = default + +# SDL and sdl_glsl only support hex code colors, these are the default: +; background = '#111111' +; foreground = '#33ffff' + + +# Gradient mode, only hex defined colors are supported, +# background must also be defined in hex or remain commented out. 1 = on, 0 = off. +# You can define as many as 8 different colors. They range from bottom to top of screen +; gradient = 0 +; 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' + + + +[smoothing] + +# Percentage value for integral smoothing. Takes values from 0 - 100. +# Higher values means smoother, but less precise. 0 to disable. +# DEPRECATED as of 0.8.0, use noise_reduction instead +; integral = 77 + +# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable. +; monstercat = 0 +; waves = 0 + +# Set gravity percentage for "drop off". Higher values means bars will drop faster. +# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off". +# DEPRECATED as of 0.8.0, use noise_reduction instead +; gravity = 100 + + +# In bar height, bars that would have been lower that this will not be drawn. +# DEPRECATED as of 0.8.0 +; ignore = 0 + +# Noise reduction, int 0 - 100. default 77 +# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth +# 100 will be very slow and smooth, 0 will be fast but noisy. +; noise_reduction = 77 + + +[eq] + +# This one is tricky. You can have as much keys as you want. +# Remember to uncomment more than one key! More keys = more precision. +# Look at readme.md on github for further explanations and examples. +; 1 = 1 # bass +; 2 = 1 +; 3 = 1 # midtone +; 4 = 1 +; 5 = 1 # treble diff --git a/cava/shaders/bar_spectrum.frag b/cava/shaders/bar_spectrum.frag new file mode 100644 index 0000000..b078913 --- /dev/null +++ b/cava/shaders/bar_spectrum.frag @@ -0,0 +1,79 @@ +#version 330 + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) +uniform int bar_width; // bar width (configurable), not used here +uniform int bar_spacing; // space bewteen bars (configurable) + +uniform vec3 u_resolution; // window resolution + +//colors, configurable in cava config file (r,g,b) (0.0 - 1.0) +uniform vec3 bg_color; // background color +uniform vec3 fg_color; // foreground color + +uniform int gradient_count; +uniform vec3 gradient_colors[8]; // gradient colors + +vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max) +{ + //create color based on fraction of this color and next color + float yr = (y - y_min) / (y_max - y_min); + return col_1 * (1.0 - yr) + col_2 * yr; +} + +void main() +{ + // find which bar to use based on where we are on the x axis + float x = u_resolution.x * fragCoord.x; + int bar = int(bars_count * fragCoord.x); + + //calculate a bar size + float bar_size = u_resolution.x / bars_count; + + //the y coordinate and bar values are the same + float y = bars[bar]; + + // make sure there is a thin line at bottom + if (y * u_resolution.y < 1.0) + { + y = 1.0 / u_resolution.y; + } + + //draw the bar up to current height + if (y > fragCoord.y) + { + //make some space between bars basen on settings + if (x > (bar + 1) * (bar_size) - bar_spacing) + { + fragColor = vec4(bg_color,1.0); + } + else + { + if (gradient_count == 0) + { + fragColor = vec4(fg_color,1.0); + } + else + { + //find which color in the configured gradient we are at + int color = int((gradient_count - 1) * fragCoord.y); + + //find where on y this and next color is supposed to be + float y_min = color / (gradient_count - 1.0); + float y_max = (color + 1.0) / (gradient_count - 1.0); + + //make color + fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0); + } + } + } + else + { + fragColor = vec4(bg_color,1.0); + } +} \ No newline at end of file diff --git a/cava/shaders/northern_lights.frag b/cava/shaders/northern_lights.frag new file mode 100644 index 0000000..ecd859a --- /dev/null +++ b/cava/shaders/northern_lights.frag @@ -0,0 +1,34 @@ +#version 330 + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) + +uniform vec3 u_resolution; // window resolution, not used here + +//colors, configurable in cava config file +uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here +uniform vec3 fg_color; // foreground color, not used here + +void main() +{ + // find which bar to use based on where we are on the x axis + int bar = int(bars_count * fragCoord.x); + + float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0; + float y = (bars[bar]) * bar_y; + + float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count; + float bar_r = 1.0 - abs((bar_x - 0.5)) * 2; + + bar_r = bar_r * bar_r * 2; + + // set color + fragColor.r = fg_color.x * y * bar_r; + fragColor.g = fg_color.y * y * bar_r; + fragColor.b = fg_color.z * y * bar_r; +} diff --git a/cava/shaders/pass_through.vert b/cava/shaders/pass_through.vert new file mode 100644 index 0000000..a4f20e5 --- /dev/null +++ b/cava/shaders/pass_through.vert @@ -0,0 +1,14 @@ +#version 330 + + +// Input vertex data, different for all executions of this shader. +layout(location = 0) in vec3 vertexPosition_modelspace; + +// Output data ; will be interpolated for each fragment. +out vec2 fragCoord; + +void main() +{ + gl_Position = vec4(vertexPosition_modelspace,1); + fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0; +} diff --git a/cava/shaders/spectrogram.frag b/cava/shaders/spectrogram.frag new file mode 100644 index 0000000..ccb79ae --- /dev/null +++ b/cava/shaders/spectrogram.frag @@ -0,0 +1,53 @@ +#version 330 + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high +// to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) +uniform int bar_width; // bar width (configurable), not used here +uniform int bar_spacing; // space bewteen bars (configurable) + +uniform vec3 u_resolution; // window resolution + +// colors, configurable in cava config file (r,g,b) (0.0 - 1.0) +uniform vec3 bg_color; // background color +uniform vec3 fg_color; // foreground color + +uniform int gradient_count; +uniform vec3 gradient_colors[8]; // gradient colors + +uniform sampler2D inputTexture; // Texture from the first render pass + +vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) { + // create color based on fraction of this color and next color + float yr = (y - y_min) / (y_max - y_min); + return col_1 * (1.0 - yr) + col_2 * yr; +} + +void main() { + // find which bar to use based on where we are on the y axis + int bar = int(bars_count * fragCoord.y); + float y = bars[bar]; + float band_size = 1.0 / float(bars_count); + float current_band_min = bar * band_size; + float current_band_max = (bar + 1) * band_size; + + int hist_length = 512; + float win_size = 1.0 / hist_length; + + if (fragCoord.x > 1.0 - win_size) { + + if (fragCoord.y > current_band_min && fragCoord.y < current_band_max) { + + fragColor = vec4(fg_color * y, 1.0); + } + } else { + vec2 offsetCoord = fragCoord; + offsetCoord.x += float(win_size); + fragColor = texture(inputTexture, offsetCoord); + } +} \ No newline at end of file diff --git a/cava/shaders/winamp_line_style_spectrum.frag b/cava/shaders/winamp_line_style_spectrum.frag new file mode 100644 index 0000000..375ff27 --- /dev/null +++ b/cava/shaders/winamp_line_style_spectrum.frag @@ -0,0 +1,112 @@ +#version 330 + +// Emulate the "line style" spectrum analyzer from Winamp 2. +// Try this config for a demonstration: + +/* +[general] +bar_width = 2 +bar_spacing = 0 +higher_cutoff_freq = 22000 + +[output] +method = sdl_glsl +channels = mono +fragment_shader = winamp_line_style_spectrum.frag + +[color] +background = '#000000' +gradient = 1 +gradient_color_1 = '#319C08' +gradient_color_2 = '#29CE10' +gradient_color_3 = '#BDDE29' +gradient_color_4 = '#DEA518' +gradient_color_5 = '#D66600' +gradient_color_6 = '#CE2910' + +[smoothing] +noise_reduction = 10 +*/ + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) +uniform int bar_width; // bar width (configurable), not used here +uniform int bar_spacing; // space bewteen bars (configurable) + +uniform vec3 u_resolution; // window resolution + +//colors, configurable in cava config file (r,g,b) (0.0 - 1.0) +uniform vec3 bg_color; // background color +uniform vec3 fg_color; // foreground color + +uniform int gradient_count; +uniform vec3 gradient_colors[8]; // gradient colors + +vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max) +{ + //create color based on fraction of this color and next color + float yr = (y - y_min) / (y_max - y_min); + return col_1 * (1.0 - yr) + col_2 * yr; +} + +void main() +{ + // find which bar to use based on where we are on the x axis + float x = u_resolution.x * fragCoord.x; + int bar = int(bars_count * fragCoord.x); + + //calculate a bar size + float bar_size = u_resolution.x / bars_count; + + //the y coordinate is stretched by 4X to resemble Winamp + float y = min(bars[bar] * 4.0, 1.0); + + // make sure there is a thin line at bottom + if (y * u_resolution.y < 1.0) + { + y = 1.0 / u_resolution.y; + } + + vec4 bar_color; + + if (gradient_count == 0) + { + bar_color = vec4(fg_color,1.0); + } + else + { + //find color in the configured gradient for the top of the bar + int color = int((gradient_count - 1) * y); + + //find where on y this and next color is supposed to be + float y_min = float(color) / (gradient_count - 1.0); + float y_max = float(color + 1) / (gradient_count - 1.0); + + //make a solid color for the entire bar + bar_color = vec4(normalize_C(y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0); + } + + + //draw the bar up to current height + if (y > fragCoord.y) + { + //make some space between bars based on settings + if (x > (bar + 1) * (bar_size) - bar_spacing) + { + fragColor = vec4(bg_color,1.0); + } + else + { + fragColor = bar_color; + } + } + else + { + fragColor = vec4(bg_color,1.0); + } +} \ No newline at end of file diff --git a/posh/termconfig.json b/posh/termconfig.json new file mode 100644 index 0000000..eacb151 --- /dev/null +++ b/posh/termconfig.json @@ -0,0 +1,68 @@ +{ + "$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json", + "palette": { + "os": "#ACB0BE", + "closer": "p:os", + "pink": "#F4B8E4", + "lavender": "#BABBF1", + "blue": "#8CAAEE" + }, + "blocks": [ + { + "alignment": "left", + "segments": [ + { + "foreground": "p:os", + "style": "plain", + "template": "{{.Icon}} ", + "type": "os" + }, + { + "foreground": "p:blue", + "style": "plain", + "template": "{{ .UserName }}@{{ .HostName }} ", + "type": "session" + }, + { + "foreground": "p:pink", + "properties": { + "folder_icon": "..\ue5fe..", + "home_icon": "~", + "style": "agnoster_short" + }, + "style": "plain", + "template": "{{ .Path }} ", + "type": "path" + }, + { + "foreground": "p:lavender", + "properties": { + "branch_icon": "\ue725 ", + "cherry_pick_icon": "\ue29b ", + "commit_icon": "\uf417 ", + "fetch_status": false, + "fetch_upstream_icon": false, + "merge_icon": "\ue727 ", + "no_commits_icon": "\uf0c3 ", + "rebase_icon": "\ue728 ", + "revert_icon": "\uf0e2 ", + "tag_icon": "\uf412 " + }, + "template": "{{ .HEAD }} ", + "style": "plain", + "type": "git" + }, + { + "style": "plain", + "foreground": "p:closer", + "template": "\uf105", + "type": "text" + } + ], + "type": "prompt" + } + ], + "final_space": true, + "version": 3 + } + \ No newline at end of file diff --git a/term/settings.json b/term/settings.json new file mode 100644 index 0000000..fb293b8 --- /dev/null +++ b/term/settings.json @@ -0,0 +1,104 @@ +{ + "$help": "https://aka.ms/terminal-documentation", + "$schema": "https://aka.ms/terminal-profiles-schema", + "actions": + [ + { + "command": + { + "action": "copy", + "singleLine": false + }, + "id": "User.copy.644BA8F2" + }, + { + "command": "paste", + "id": "User.paste" + }, + { + "command": + { + "action": "splitPane", + "split": "auto", + "splitMode": "duplicate" + }, + "id": "User.splitPane.A6751878" + }, + { + "command": "find", + "id": "User.find" + } + ], + "copyFormatting": "none", + "copyOnSelect": false, + "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", + "keybindings": + [ + { + "id": "User.copy.644BA8F2", + "keys": "ctrl+c" + }, + { + "id": "User.find", + "keys": "ctrl+shift+f" + }, + { + "id": "User.paste", + "keys": "ctrl+v" + }, + { + "id": "User.splitPane.A6751878", + "keys": "alt+shift+d" + } + ], + "newTabMenu": + [ + { + "type": "remainingProfiles" + } + ], + "profiles": + { + "defaults": { + "font": + { + "face": "MesloLGM Nerd Font" + } + }, + "list": + [ + { + "commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", + "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", + "hidden": false, + "name": "Windows PowerShell" + }, + { + "commandline": "%SystemRoot%\\System32\\cmd.exe", + "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}", + "hidden": false, + "name": "Command Prompt" + }, + { + "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}", + "hidden": false, + "name": "Azure Cloud Shell", + "source": "Windows.Terminal.Azure" + }, + { + "guid": "{2ece5bfe-50ed-5f3a-ab87-5cd4baafed2b}", + "hidden": false, + "name": "Git Bash", + "source": "Git" + }, + { + "guid": "{58ad8b0c-3ef8-5f4d-bc6f-13e4c00f2530}", + "hidden": false, + "name": "Debian", + "source": "Windows.Terminal.Wsl" + } + ] + }, + "schemes": [], + "themes": [] +} \ No newline at end of file diff --git a/yasb/config.yaml b/yasb/config.yaml new file mode 100644 index 0000000..2c99a00 --- /dev/null +++ b/yasb/config.yaml @@ -0,0 +1,467 @@ +# Changes made from the base config, make sure to read the docs provided in the third comment to modify according to one's liking +# This is solely meant for GlazeWM users as I haven't touched Komorebi for I love GlazeWM's simplicity. +# UPDATE: Done modifying with Komorebi! +# For more information about configuration options, please visit the Wiki https://github.com/amnweb/yasb/wiki +watch_stylesheet: true +watch_config: true +debug: false +bars: + primary-bar: + enabled: true + screens: ["*"] + class_name: "yasb-bar" + alignment: + position: "top" + center: false + animation: + enabled: true + duration: 1000 + blur_effect: + enabled: True + acrylic: True + dark_mode: True + round_corners: True + round_corners_type: "normal" + border_color: "System" + window_flags: + always_on_top: false + windows_app_bar: true # This interferes with apps in full-screen. Notably while watching videos in full screen + dimensions: + width: "100%" + height: 30 + padding: + top: 10 + left: 12 + bottom: 0 + right: 12 + widgets: + left: [ + "home", + "komorebi_control", + "komorebi_workspaces", + "notes", + "media" + ] + center: [ + "clock" + ] + right: [ + "systray", + "disk", + "memory", + "cpu", + "battery", + "wifi", + "volume", + "weather", + "wallpapers", + "notifications", + "power_menu" + ] +widgets: + komorebi_workspaces: + type: "komorebi.workspaces.WorkspaceWidget" + options: + label_offline: "Komorebi Offline" + label_workspace_btn: "" + label_workspace_active_btn: "" + label_workspace_populated_btn: "" + label_default_name: "" + label_zero_index: false + hide_empty_workspaces: true + hide_if_offline: false + animation: true + container_padding: + top: 0 + left: 12 + bottom: 0 + right: 12 + btn_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + komorebi_control: + type: "komorebi.control.KomorebiControlWidget" + options: + label: "\udb84\udc47" + icons: + start: "\uead3" + stop: "\uead7" + reload: "\uead2" + run_ahk: false + run_whkd: true + show_version: false + komorebi_menu: + blur: True + round_corners: True + round_corners_type: 'normal' + border_color: 'System' + alignment: 'left' + direction: 'down' + offset_top: 6 + offset_left: -32 + label_shadow: + enabled: true + color: "black" + radius: 3 + offset: [ 1, 1 ] + notes: + type: "yasb.notes.NotesWidget" + options: + label: "\udb82\udd0c {count}" + label_alt: "{count} notes" + container_padding: + top: 0 + left: 0 + bottom: 0 + right: 0 + menu: + blur: true + round_corners: true + round_corners_type: "normal" + border_color: "System" + alignment: "right" + direction: "down" + offset_top: 6 + offset_left: 220 + max_title_size: 150 + show_date_time: true + icons: + note: "\udb82\udd0c" + delete: "\ue20d" + callbacks: + on_left: "toggle_menu" + on_middle: "do_nothing" + on_right: "toggle_label" + label_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + home: + type: "yasb.home.HomeWidget" + options: + label: "\ue62a" + menu_list: + - { title: "User Home", path: "~" } + - { title: "Download", path: "D:\\Downloads" } + - { title: "Documents", path: "C:\\Users\\amn\\Documents" } + - { title: "Pictures", path: "C:\\Users\\amn\\Pictures" } + system_menu: true + power_menu: false + blur: true + round_corners: true + round_corners_type: "normal" + border_color: "System" + offset_top: 6 + offset_left: 0 + container_padding: + top: 0 + left: 0 + bottom: 0 + right: 0 + alignment: "left" + direction: "down" + menu_labels: + shutdown: "Shutdown" + restart: "Restart" + logout: "Logout" + lock: "Lock" + sleep: "Sleep" + system: "System Settings" + about: "About This PC" + task_manager: "Task Manager" + label_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + notifications: + type: "yasb.notifications.NotificationsWidget" + options: + label: "\uf476" + label_alt: "{count} notifications" + hide_empty: true + tooltip: true + callbacks: + on_left: "toggle_notification" + container_padding: + top: 0 + left: 0 + bottom: 0 + right: 0 + label_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + memory: + type: "yasb.memory.MemoryWidget" + options: + label: "\uefc5 {virtual_mem_percent}%" + label_alt: "\uefc5 SWAP: {swap_mem_percent}%" + update_interval: 5000 + callbacks: + on_left: "toggle_label" + on_middle: "do_nothing" + on_right: "do_nothing" + memory_thresholds: + low: 25 + medium: 50 + high: 90 + label_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + cpu: + type: "yasb.cpu.CpuWidget" + options: + label: "\uf4bc {info[percent][total]:.0f}%" + label_alt: "\uf437 {info[histograms][cpu_percent]}" + update_interval: 2000 + histogram_icons: + - '\u2581' # 0% + - '\u2581' # 10% + - '\u2582' # 20% + - '\u2583' # 30% + - '\u2584' # 40% + - '\u2585' # 50% + - '\u2586' # 60% + - '\u2587' # 70% + - '\u2588' # 80%+ + histogram_num_columns: 8 + callbacks: + on_right: "exec cmd /c Taskmgr" + label_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + wallpapers: + type: "yasb.wallpapers.WallpapersWidget" + options: + label: "\udb83\ude09" + image_path: "C:\\Users\\Lone\\Pictures\\Wallpapers" + change_automatically: false + update_interval: 60 + gallery: + enabled: true + blur: true + image_width: 296 + image_per_page: 6 + show_buttons: false + orientation: "portrait" + image_spacing: 10 + lazy_load: true + lazy_load_delay: 10 + lazy_load_fadein: 200 + image_corner_radius: 20 + enable_cache: true + label_shadow: + enabled: true + color: "black" + radius: 3 + offset: [ 1, 1 ] + disk: + type: "yasb.disk.DiskWidget" + options: + label: "\uf473" + # label_alt: "\uf473" + label_alt: "{volume_label}:{space[used][percent]}" + volume_label: "C" + update_interval: 60 + group_label: + volume_labels: ["C", "D", "E", "O"] + show_label_name: true + blur: True + round_corners: true + round_corners_type: "normal" + border_color: "System" + alignment: "right" + direction: "down" + offset_top: 6 + offset_left: 120 + callbacks: + on_left: "toggle_group" + on_right: "toggle_label" + label_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + systray: + type: "yasb.systray.SystrayWidget" + options: + class_name: "systray" + label_collapsed: "\udb80\udf5e" + label_expanded: "\udb80\udf5f" + label_position: "right" # Can be "left" or "right" + icon_size: 15 # Can be any integer between 8 and 64 + pin_click_modifier: "alt" # Can be "ctrl", "alt" or "shift" + show_unpinned: false + show_unpinned_button: true + show_battery: false + show_volume: false + show_network: false + glazewm_workspaces: + type: "glazewm.workspaces.GlazewmWorkspacesWidget" + options: + offline_label: "GlazeWM Offline" + hide_empty_workspaces: true + hide_if_offline: true + media: + type: "yasb.media.MediaWidget" + options: + label: "{title}" + label_alt: "{title} - {artist}" + max_field_size: + label: 24 + label_alt: 24 + show_thumbnail: true + controls_only: false + controls_left: true + hide_empty: true + thumbnail_alpha: 255 + thumbnail_padding: 30 + thumbnail_corner_radius: 0 + icons: + prev_track: "\ue892" + next_track: "\ue893" + play: "\ue768" + pause: "\ue769" + label_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + container_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + clock: + type: "yasb.clock.ClockWidget" + options: + label: "\ue0b2 {%H:%M} \ue0b0" + label_alt: "\ue0c2{%A %d %B %Y %H:%M}\ue0c0" + timezones: [] + calendar: + blur: True + round_corners: true + offset_top: 10 + offset_left: 200 + weather: + type: "yasb.weather.WeatherWidget" + options: + label: "{icon} {temp}" + label_alt: "{location}: Min {min_temp}, Max {max_temp}, Humidity {humidity}" + api_key: "3bf4cf9a7c3f40d6b31174128242807" + update_interval: 600 + hide_decimal: true + location: "Tuticorin" + callbacks: + on_left: "toggle_card" + weather_card: + blur: true + round_corners: true + round_corners_type: "normal" + border_color: "System" + alignment: "right" + direction: "down" + icon_size: 64 + offset_top: 6 + offset_left: 74 + label_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + wifi: + type: "yasb.wifi.WifiWidget" + options: + label: "{wifi_icon}" + label_alt: "{wifi_name} {wifi_strength}%" + update_interval: 5000 + callbacks: + on_left: "exec cmd.exe /c start ms-settings:network" + on_right: "toggle_label" + wifi_icons: [ + "\udb82\udd2e", # 0% strength icon + "\udb82\udd1f", # 1-20% strength + "\udb82\udd22", # 21-40% strength + "\udb82\udd25", # 41-80% strength + "\udb82\udd28" # 81-100% strength + ] + label_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + volume: + type: "yasb.volume.VolumeWidget" + options: + label: "{icon} {level}" + label_alt: "{volume}" + volume_icons: + - "\ueee8" # Icon for muted + - "\uf026" # Icon for 0-10% volume + - "\uf027" # Icon for 11-30% volume + - "\uf027" # Icon for 31-60% volume + - "\uf028" # Icon for 61-100% volume + audio_menu: + blur: True + round_corners: True + round_corners_type: 'normal' + border_color: 'System' + alignment: 'right' + direction: 'down' + offset_top: 6 + offset_left: 80 + callbacks: + on_left: "toggle_volume_menu" + on_right: "toggle_mute" + label_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + battery: + type: "yasb.battery.BatteryWidget" + options: + label: "{icon}{percent}%" + label_alt: "time: {time_remaining}" + charging_options: + icon_format: "{charging_icon}" + status_thresholds: + critical: 10 + low: 25 + medium: 75 + high: 95 + full: 100 + label_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] + power_menu: + type: "yasb.power_menu.PowerMenuWidget" + options: + label: "\uf011" + uptime: True + blur: False + blur_background: True + animation_duration: 100 + button_row: 4 + buttons: + shutdown: ["\uf011", "Shut Down"] + restart: ["\uead2", "Restart"] + signout: ["\udb80\udf43", "Sign out"] + sleep: ["\u23fe", "Sleep"] + cancel: ["", "Cancel"] + label_shadow: + enabled: true + color: "black" + radius: 6 + offset: [ 1, 1 ] diff --git a/yasb/notes.json b/yasb/notes.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/yasb/notes.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/yasb/styles.css b/yasb/styles.css new file mode 100644 index 0000000..4b4855d --- /dev/null +++ b/yasb/styles.css @@ -0,0 +1,601 @@ +/* +Base Configuration, modified from i3-style with a new look. I missed transparency :) +For more information about configuration options, please visit the Wiki https://github.com/amnweb/yasb/wiki +*/ +:root { + --red: #ff4d4d; + --maroon: #eba0ac; + --peach: #fab387; + --yellow: #f9e2af; + --green: #a6e3a1; + --teal: #94e2d5; + --sky: #89dceb; + --sapphire: #74c7ec; + --blue: #89b4fa; + --text: #c3c3c3; +} +/* Global styles for ToolTip */ +QToolTip { + padding: 6px; + color: #ffffff; + font-size: 12px; + background-color: #3939397d; + border: 0px solid #9f9f9f; + border-radius: 6px; +} + +/* COMMON YASB ELEMENTS */ +* { + font-size: 14px; + color: var(--text); + font-weight: 600; + font-family: "JetBrainsMono NFP"; + margin: 0; + padding: 0; +} +.yasb-bar { + padding: 0; + margin: 0; + background-color: rgba(0, 0, 0, 0.45); + border-radius: 0px; +} +.widget { + padding: 0 3px; + margin: 0; +} +.icon { + font-size: 15px; +} +.widget .label { + padding: 0px 2px; +} + +/* WIDGETS */ +/* Power Menu */ +.power-menu-widget .label { + color: #ff1100; + font-size: 15px; + padding: 0px 10px 0px 3px; +} +.power-menu-popup { + background-color: transparent; +} +.power-menu-popup .button { + padding: 0; + width: 180px; + height: 230px; + border-radius: 8px; + background-color:rgba(61, 61, 61, 0.4); + color: black; + border-left: 2px solid rgb(61, 61, 61); + border-right:2px solid rgb(61, 61, 61); + border-top: 2px solid rgb(61, 61, 61); + border-bottom: 2px solid rgb(61, 61, 61); + margin: 0px; +} +.power-menu-popup .button.hover { + background-color: rgba(97, 97, 97, 0.5); + color: black; + border-left: 2px solid rgba(130, 130, 130, 0.65); + border-right: 2px solid rgba(130, 130, 130, 0.65); + border-top: 2px solid rgba(130, 130, 130, 0.65); + border-bottom: 2px solid rgba(130, 130, 130, 0.65); +} +.power-menu-popup .button .label { + margin-bottom: 8px; + font-size: 16px; + font-weight: 500; + color:rgba(197, 197, 197, 0.85); +} +.power-menu-popup .button .icon { + font-size: 64px; + padding-top: 32px; + color:rgba(116, 116, 116, 0.85); +} +.power-menu-popup .button.cancel .icon { + padding: 0; + margin: 0; +} +.power-menu-popup .button.cancel .label { + color: var(--red); + margin: 0; +} +.power-menu-popup .button.cancel { + height: 32px; + border-radius: 4px; +} +.uptime { + font-size: 26px; + margin-bottom: 10px; + color: white; + font-weight: 600; + margin-bottom: 40px; +} + +/* GlazeWM */ +.glazewm-workspaces { + margin: 0; + padding: 0; +} +.glazewm-workspaces .ws-btn { + font-size: 15px; + background-color: transparent; + border: none; + padding: 4px 8px; /* Increased padding */ + margin: 0; /* Remove margin between buttons */ + color: black; +} +.glazewm-workspaces .ws-btn.active_populated, +.glazewm-workspaces .ws-btn.active_empty, +.glazewm-workspaces .ws-btn:hover { + background-color: #ffffff; + border-radius: 0px; /* Optional: Add slight rounding */ +} +/* Keep existing populated/empty state colors */ +.glazewm-workspaces .ws-btn.populated { + color: #ffffff; +} +.glazewm-workspaces .ws-btn.empty { + color: #7D8B9D; +} +.glazewm-workspaces .ws-btn:hover, +.glazewm-workspaces .ws-btn.populated:hover, +.glazewm-workspaces .ws-btn.empty:hover { + background: grey; + margin: 0; + display: flex; + align-items: center; + justify-content: center; +} + +/* Komorebi */ +/* Control Part */ +.komorebi-control-widget .label { + font-size: 14px; + color: #cdd6f4; + font-weight: 600; +} +.komorebi-control-menu { + background-color: rgba(17, 17, 27, 0.2); +} +.komorebi-control-menu .button { + color: rgba(102, 102, 102, 0.4); + padding: 8px 16px; + font-size: 32px; + border-radius: 8px; + background-color: rgba(255, 255, 255, 0.04); +} +.komorebi-control-menu .button:hover { + color: rgba(255, 255, 255, 0.4); + background-color: rgba(100, 100, 100, 0.04); +} +.komorebi-control-menu .button.active:hover { + color: rgba(255, 255, 255, 0.4); + background-color: rgba(100, 100, 100, 0.04); +} +.komorebi-control-menu .button.active { + color: rgb(228, 228, 228); + background-color: rgba(255, 255, 255, 0.04); +} +.komorebi-control-menu .button:disabled, +.komorebi-control-menu .button.active:disabled { + background-color: rgba(255, 255, 255, 0.01); + color: rgba(255, 255, 255, 0.2); +} +.komorebi-control-menu .footer .text { + font-size: 12px; + color: #6c7086; +} + +.volume-widget .icon { + color: var(--blue); + margin: 1px 2px 0 0; +} + +/* Workspace Part */ +.komorebi-workspaces .widget-container{ + background-color: rgba(0, 0, 0, 0.4); + border-radius: 0px; + margin: 0px 4px; +} +.komorebi-workspaces{ + margin: 0; + padding: 0; +} +.komorebi-workspaces .offline-status{ + font-size: 14px; + padding: 0 2px; + font-weight: 600; +} +.komorebi-workspaces .ws-btn{ + color: rgba(128, 128, 128, 0.5); + width: 10px; + height: 10px; + padding: 0 4px 0 4px; + border-radius: 5px; + margin: 0 2px; + font-size: 14px; +} +.komorebi-workspaces .ws-btn:hover{ + color: var(--text); +} +.komorebi-workspaces .ws-btn.populated{ + width: 10px; + height: 10px; + border-radius: 5px; + margin: 0 2px; + font-size: 14px; +} +.komorebi-workspaces .ws-btn.active{ + color: white; + width: 10px; + height: 10px; + border-radius: 5px; +} + +.weather-widget, +.volume-widget { + padding: 0 4px; +} +.weather-widget .icon { + font-size: 18px; + margin: 0 2px 1px 0; + color: var(--yellow); +} + +/* Media */ +.media-widget { + padding: 0; + margin: 0; + border-radius: 0; +} +.media-widget .label { + color: #d4eced; + background-color: rgba(0, 0, 0, 0.236); + padding: 0px; + padding-right: 4px; + font-size: 12px; +} +.media-widget .label.maintext { + padding-top: 3px; +} +.media-widget .btn { + color: #989caa; + padding: 0 4px; + margin: 0; + font-family: Segoe Fluent Icons; + font-weight: 400; +} +.media-widget .btn:hover { + color: #babfd3; +} +.media-widget .btn.play { + font-size: 16px; +} +.media-widget .btn.disabled:hover, +.media-widget .btn.disabled { + color: #939496; + font-size: 12px; + background-color: rgba(0, 0, 0, 0); +} + +/* System Tray */ +.systray { + background: transparent; + border: None; + margin: 0; +} +.systray .unpinned-container { + background: transparent; + border-radius: 8px; +} +.systray .pinned-container { + background: transparent; +} +.systray .pinned-container[forceshow=true] { + background: red; +} +.systray .button { + border-radius: 10px; + padding: 3px 3px; +} +.systray .button:hover { + background: #727272; +} +.systray .button[dragging=true] { + background: orange; + border-color: #FF8800; +} +.systray .unpinned-visibility-btn { + border-radius: 4px; + height: 20px; + width: 16px; +} +.systray .unpinned-visibility-btn:checked { + background: transparent; +} +.systray .unpinned-visibility-btn:hover { + border: 1px solid #AAAAAA; + border-radius: 4px; + border-color: #AAAAAA; +} + +/* Wi-Fi */ +.wifi-widget .widget-container .icon { + color:lightgray; + background: transparent; + padding: 3px 0px; +} + +/* Battery */ +.battery-widget .widget-container .icon { + padding: 0px 3px; +} +.battery-widget .widget-container .icon.status-low { + color: red; + background: transparent; +} +.battery-widget .widget-container .icon.status-medium { + color: yellow; + background: transparent; +} +.battery-widget .widget-container .icon.status-charging { + color: rgb(128, 0, 255); + background: transparent; +} + +/* Wallpaper */ +.wallpapers-widget { + padding: 0 6px 0 6px; + color: rgb(128, 0, 255); +} +.wallpapers-gallery-window { + background-color: rgba(85, 42, 240, 0.01); + border: 0; + margin: 0; +} +.wallpapers-gallery-buttons { + background-color:rgba(255, 255, 255, 0); + color: rgb(255, 255, 255); + border: none; + font-size: 14px; + padding: 8px 0; + border-radius: 8px; + margin:0 8px 8px 8px; + width: 600px; +} +.wallpapers-gallery-buttons:hover { + background-color:rgba(255, 255, 255, 0.1) +} +.wallpapers-gallery-image { + border: 4px solid transparent; + border-radius: 10px; +} +.wallpapers-gallery-image:hover { + border: 4px solid rgb(80, 80, 80); +} +.wallpapers-gallery-image.focused { + border: 4px solid #ffffff; +} + +/* Clock & Calendar */ +.clock-widget .label { + font-size: 16px; + font-weight: 900; + background-color: rgba(197, 197, 197, 0.5); + margin: 0; + padding: 0; + color:rgba(22, 22, 22, 0.6); +} +.clock-widget .icon { + font-size: 25px; + margin: 0 -1px; + padding: 0; + font-weight: 600; + color:rgba(197, 197, 197, 0.5); +} +.clock-widget { + border-top-left-radius: 24px; + border-bottom-right-radius: 24px; + padding: 0 20px; +} +.clock-widget .widget-container .label { + padding: 0px 0px 2px; +} +.calendar { + background-color: rgba(21, 21, 21, 0.4); +} +.calendar .calendar-table, +.calendar .calendar-table::item { + background-color: rgba(33, 33, 33, 0.736); + color: rgba(197, 197, 197, 0.85); + font-family: 'Segoe UI'; + margin: 0; + padding: 0; + border: none; + outline: none; +} +.calendar .calendar-table::item:selected { + color: rgb(255, 255, 255); +} +.calendar .day-label { + margin-top: 20px; +} +.calendar .day-label, +.calendar .month-label, +.calendar .date-label { + font-family: 'Segoe UI'; + font-size: 16px; + color: #fff; + font-weight: 700; + min-width: 180px; + max-width: 180px; +} +.calendar .month-label { + font-weight: normal; +} +.calendar .date-label { + font-size: 88px; + font-weight: 900; + color: rgb(255, 255, 255); + margin-top: -20px; +} + +/* Memory */ +.memory-widget .icon { + color:rgb(163, 255, 76); + padding: 0px 3px; +} + +/* CPU */ +.cpu-widget .widget-container .icon { + color:rgb(240, 224, 99); + padding: 0px 3px; +} + +/* Notifications */ +.notification-widget { + padding: 0 3px 0 3px; +} +.notification-widget .widget-container { + background: transparent; + margin: 3px 0 3px 0; + border-radius: 12px; +} +.notification-widget .icon { + font-size: 14px; +} +.notification-widget .icon.new-notification { + color: #9089fa; +} +.notification-widget .label.new-notification { + color: #9089fa; +} + +/* Disk */ +.disk-widget { + padding: 0 6px 0 6px; +} +.disk-group { + background-color:rgba(17, 17, 27, 0.15); + border: 1px solid rgb(94, 94, 94); +} + +/* Home */ +.home-widget { + padding: 0 6px 0 12px; +} +.home-widget .icon { + color: #b4befe; + font-size: 18px; +} +.home-widget .icon:hover { + color: #cdd6f4; +} +.home-menu { + background-color:rgba(0, 0, 0, 0.5); +} +.home-menu .menu-item { + padding: 6px 48px 7px 16px; + font-size: 12px; + font-family: 'Segoe UI'; + color: rgb(208, 208, 208); + font-weight: 600; +} +.home-menu .menu-item:hover { + background-color:rgba(0, 0, 0, 0.15); + color: #fff; +} +.home-menu .separator { + max-height: 1px; + background-color:rgba(192, 192, 192, 0.3); +} + +/* Notes */ +.notes-widget { + padding: 0 6px 0 8px; +} +.notes-widget .label { + font-size: 14px; + color: #dbfeb4;; +} +.notes-widget .icon { + font-size: 16px; + color: #dbfeb4; +} +.notes-menu { + min-width: 400px; + max-width: 400px; + background-color: rgba(0, 0, 0, 0.4); +} +.notes-menu .note-item { + background-color:transparent; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); +} +.notes-menu .note-item:hover { + background-color: rgba(255, 255, 255, 0.1); +} +.notes-menu .note-item .icon { + font-size: 16px; + padding: 0 4px; +} +.notes-menu .delete-button { + color: #ff6b6b; + background: transparent; + border: none; + font-size: 8px; + padding: 7px 8px; + border-radius: 3px; +} +.notes-menu .delete-button:hover { + background-color: rgba(128, 128, 128, 0.5); +} +.notes-menu .note-item .title { + font-size: 13px; + font-family: 'Segoe UI'; +} +.notes-menu .note-item .date { + font-size: 12px; + font-family: 'Segoe UI'; + color: rgba(255, 255, 255, 0.4); +} +.notes-menu .empty-list { + font-family: 'Segoe UI'; + color: rgba(255, 255, 255, 0.2); + font-size: 24px; + font-weight: 600; + padding: 10px 0 20px 0; +} +.notes-menu .add-button, +.notes-menu .cancel-button { + padding: 8px; + background-color: rgba(255, 255, 255, 0.1); + border: none; + border-radius: 4px; + color: white; + font-family: 'Segoe UI'; +} +.notes-menu .cancel-button { + margin-left: 4px; +} +.notes-menu .add-button:hover, +.notes-menu .cancel-button:hover { + background-color: rgba(255, 255, 255, 0.2); +} +.notes-menu .scroll-area { + background: transparent; + border: none; + border-radius:0; +} +.notes-menu .note-input { + background-color:rgba(17, 17, 27, 0.2); + border: 1px solid rgba(255, 255, 255, 0.1); + font-family: 'Segoe UI'; + font-size: 14px; + max-height: 30px; + padding: 4px; + border-radius: 6px; +} +.note-input:focus { + border: 1px solid #717171; +} diff --git a/yasb/yasb.log b/yasb/yasb.log new file mode 100644 index 0000000..df91114 --- /dev/null +++ b/yasb/yasb.log @@ -0,0 +1,137 @@ +2025-05-31 01:03:30,731 [INFO] [MainThread] [root/log.py:59]: Yasb v1.7.4 +2025-05-31 01:03:30,732 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:212]: CLI server started v1.1.1 +2025-05-31 01:03:30,732 [INFO] [MainThread] [cli_server/cli_server.py:104]: Log pipe server started +2025-05-31 01:03:30,777 [INFO] [MainThread] [root/config.py:61]: Created default config file at C:\Users\rhys1\.config\yasb\config.yaml +2025-05-31 01:03:30,810 [INFO] [MainThread] [root/config.py:75]: Created default stylesheet at C:\Users\rhys1\.config\yasb\styles.css +2025-05-31 01:04:14,319 [DEBUG] [MainThread] [tzlocal/win32.py:55]: Looking up time zone info from registry +2025-05-31 01:04:16,223 [ERROR] [MainThread] [root/weather.py:168]: API key or location is missing. Please provide a valid API key and location. +2025-05-31 01:04:16,260 [DEBUG] [MainThread] [comtypes/__init__.py:149]: CoInitializeEx(None, 2) +2025-05-31 01:04:17,746 [INFO] [MainThread] [root/watcher.py:55]: Created file watcher for path C:\Users\rhys1\.config\yasb +2025-05-31 01:04:17,762 [INFO] [Dummy-5] [root/event_listener.py:53]: Created named pipe yasb-5bacd2ed-3d67-11f0-bf05-f87fc25336c0 +2025-05-31 01:04:17,793 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:213]: Starting (proactor: <_IocpProactor overlapped#=0 result#=0>)... +2025-05-31 01:04:17,795 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:192]: Thread started +2025-05-31 01:14:45,000 [INFO] [MainThread] [root/controller.py:12]: Reloading Application from tray... +2025-05-31 01:14:45,101 [INFO] [MainThread] [cli_server/cli_server.py:112]: Log pipe server stopped +2025-05-31 01:14:45,101 [DEBUG] [MainThread] [cli_server/cli_server.py:206]: CLI server stopped +2025-05-31 01:14:45,124 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:218]: Stopping worker thread... +2025-05-31 01:14:45,147 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:201]: Exiting thread +2025-05-31 01:14:45,149 [DEBUG] [MainThread] [qasync._windows._IocpProactor/_windows.py:75]: Closing +2025-05-31 01:14:45,640 [INFO] [MainThread] [root/log.py:59]: Yasb v1.7.4 +2025-05-31 01:14:45,640 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:212]: CLI server started v1.1.1 +2025-05-31 01:14:45,640 [INFO] [MainThread] [cli_server/cli_server.py:104]: Log pipe server started +2025-05-31 01:14:45,857 [DEBUG] [MainThread] [tzlocal/win32.py:55]: Looking up time zone info from registry +2025-05-31 01:14:46,054 [ERROR] [MainThread] [root/weather.py:168]: API key or location is missing. Please provide a valid API key and location. +2025-05-31 01:14:46,081 [DEBUG] [MainThread] [comtypes/__init__.py:149]: CoInitializeEx(None, 2) +2025-05-31 01:14:46,710 [INFO] [MainThread] [root/watcher.py:55]: Created file watcher for path C:\Users\rhys1\.config\yasb +2025-05-31 01:14:46,740 [INFO] [Dummy-5] [root/event_listener.py:53]: Created named pipe yasb-d2911cfb-3d68-11f0-a167-f87fc25336c0 +2025-05-31 01:14:46,764 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:213]: Starting (proactor: <_IocpProactor overlapped#=0 result#=0>)... +2025-05-31 01:14:46,767 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:192]: Thread started +2025-05-31 01:20:33,539 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:249]: CLI server received command: stop +2025-05-31 01:20:33,539 [INFO] [Thread-1 (_run_server)] [root/controller.py:27]: Exiting Application from CLI... +2025-05-31 01:20:33,653 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:112]: Log pipe server stopped +2025-05-31 01:20:33,653 [DEBUG] [Thread-1 (_run_server)] [cli_server/cli_server.py:206]: CLI server stopped +2025-05-31 01:20:33,653 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:218]: Stopping worker thread... +2025-05-31 01:20:33,669 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:201]: Exiting thread +2025-05-31 01:20:33,670 [DEBUG] [MainThread] [qasync._windows._IocpProactor/_windows.py:75]: Closing +2025-05-31 01:20:34,567 [INFO] [MainThread] [root/log.py:59]: Yasb v1.7.4 +2025-05-31 01:20:34,568 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:212]: CLI server started v1.1.1 +2025-05-31 01:20:34,568 [INFO] [MainThread] [cli_server/cli_server.py:104]: Log pipe server started +2025-05-31 01:20:35,555 [DEBUG] [MainThread] [tzlocal/win32.py:55]: Looking up time zone info from registry +2025-05-31 01:20:35,638 [DEBUG] [MainThread] [comtypes/__init__.py:149]: CoInitializeEx(None, 2) +2025-05-31 01:20:36,466 [INFO] [MainThread] [root/watcher.py:55]: Created file watcher for path C:\Users\rhys1\.config\yasb +2025-05-31 01:20:36,516 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:213]: Starting (proactor: <_IocpProactor overlapped#=0 result#=0>)... +2025-05-31 01:20:36,517 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:192]: Thread started +2025-05-31 01:20:36,858 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 01:20:36.858324 +2025-05-31 01:20:42,219 [DEBUG] [MainThread] [root/blurWindow.py:116]: Failed to apply settings: invalid literal for int() with base 16: '' +2025-05-31 01:22:06,617 [INFO] [MainThread] [root/controller.py:12]: Reloading Application from tray... +2025-05-31 01:22:06,720 [INFO] [MainThread] [cli_server/cli_server.py:112]: Log pipe server stopped +2025-05-31 01:22:06,720 [DEBUG] [MainThread] [cli_server/cli_server.py:206]: CLI server stopped +2025-05-31 01:22:06,731 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:218]: Stopping worker thread... +2025-05-31 01:22:06,736 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:201]: Exiting thread +2025-05-31 01:22:06,737 [DEBUG] [MainThread] [qasync._windows._IocpProactor/_windows.py:75]: Closing +2025-05-31 01:22:07,318 [INFO] [MainThread] [root/log.py:59]: Yasb v1.7.4 +2025-05-31 01:22:07,318 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:212]: CLI server started v1.1.1 +2025-05-31 01:22:07,318 [INFO] [MainThread] [cli_server/cli_server.py:104]: Log pipe server started +2025-05-31 01:22:08,185 [DEBUG] [MainThread] [tzlocal/win32.py:55]: Looking up time zone info from registry +2025-05-31 01:22:08,268 [DEBUG] [MainThread] [comtypes/__init__.py:149]: CoInitializeEx(None, 2) +2025-05-31 01:22:09,251 [INFO] [MainThread] [root/watcher.py:55]: Created file watcher for path C:\Users\rhys1\.config\yasb +2025-05-31 01:22:09,334 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:213]: Starting (proactor: <_IocpProactor overlapped#=0 result#=0>)... +2025-05-31 01:22:09,336 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:192]: Thread started +2025-05-31 01:22:09,688 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 01:22:09.688615 +2025-05-31 01:23:30,946 [INFO] [MainThread] [root/controller.py:12]: Reloading Application from tray... +2025-05-31 01:23:31,048 [INFO] [MainThread] [cli_server/cli_server.py:112]: Log pipe server stopped +2025-05-31 01:23:31,048 [DEBUG] [MainThread] [cli_server/cli_server.py:206]: CLI server stopped +2025-05-31 01:23:31,081 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:218]: Stopping worker thread... +2025-05-31 01:23:31,094 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:201]: Exiting thread +2025-05-31 01:23:31,095 [DEBUG] [MainThread] [qasync._windows._IocpProactor/_windows.py:75]: Closing +2025-05-31 01:23:31,141 [ERROR] [Dummy-9] [root/event_service.py:30]: Failed to emit signal . Removing link to WinEvent.EventObjectNameChange. +2025-05-31 01:23:31,501 [INFO] [MainThread] [root/log.py:59]: Yasb v1.7.4 +2025-05-31 01:23:31,502 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:212]: CLI server started v1.1.1 +2025-05-31 01:23:31,502 [INFO] [MainThread] [cli_server/cli_server.py:104]: Log pipe server started +2025-05-31 01:23:32,392 [DEBUG] [MainThread] [tzlocal/win32.py:55]: Looking up time zone info from registry +2025-05-31 01:23:32,483 [DEBUG] [MainThread] [comtypes/__init__.py:149]: CoInitializeEx(None, 2) +2025-05-31 01:23:33,318 [INFO] [MainThread] [root/watcher.py:55]: Created file watcher for path C:\Users\rhys1\.config\yasb +2025-05-31 01:23:33,515 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:213]: Starting (proactor: <_IocpProactor overlapped#=0 result#=0>)... +2025-05-31 01:23:33,521 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:192]: Thread started +2025-05-31 01:23:34,317 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 01:23:34.317593 +2025-05-31 01:23:56,284 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:249]: CLI server received command: stop +2025-05-31 01:23:56,284 [INFO] [Thread-1 (_run_server)] [root/controller.py:27]: Exiting Application from CLI... +2025-05-31 01:23:56,390 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:112]: Log pipe server stopped +2025-05-31 01:23:56,390 [DEBUG] [Thread-1 (_run_server)] [cli_server/cli_server.py:206]: CLI server stopped +2025-05-31 01:23:56,390 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:218]: Stopping worker thread... +2025-05-31 01:23:56,404 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:201]: Exiting thread +2025-05-31 01:23:56,405 [DEBUG] [MainThread] [qasync._windows._IocpProactor/_windows.py:75]: Closing +2025-05-31 01:23:57,636 [INFO] [MainThread] [root/log.py:59]: Yasb v1.7.4 +2025-05-31 01:23:57,636 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:212]: CLI server started v1.1.1 +2025-05-31 01:23:57,636 [INFO] [MainThread] [cli_server/cli_server.py:104]: Log pipe server started +2025-05-31 01:23:58,521 [DEBUG] [MainThread] [comtypes/__init__.py:149]: CoInitializeEx(None, 2) +2025-05-31 01:23:58,610 [DEBUG] [MainThread] [tzlocal/win32.py:55]: Looking up time zone info from registry +2025-05-31 01:23:59,004 [INFO] [MainThread] [root/watcher.py:55]: Created file watcher for path C:\Users\rhys1\.config\yasb +2025-05-31 01:23:59,029 [INFO] [Dummy-5] [root/event_listener.py:53]: Created named pipe yasb-1bc27ee0-3d6a-11f0-99b8-f87fc25336c0 +2025-05-31 01:23:59,074 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:213]: Starting (proactor: <_IocpProactor overlapped#=0 result#=0>)... +2025-05-31 01:23:59,077 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:192]: Thread started +2025-05-31 01:23:59,636 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 01:23:59.636701 +2025-05-31 01:24:16,992 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:249]: CLI server received command: stop +2025-05-31 01:24:16,992 [INFO] [Thread-1 (_run_server)] [root/controller.py:27]: Exiting Application from CLI... +2025-05-31 01:24:17,093 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:112]: Log pipe server stopped +2025-05-31 01:24:17,093 [DEBUG] [Thread-1 (_run_server)] [cli_server/cli_server.py:206]: CLI server stopped +2025-05-31 01:24:17,093 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:218]: Stopping worker thread... +2025-05-31 01:24:17,109 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:201]: Exiting thread +2025-05-31 01:24:17,110 [DEBUG] [MainThread] [qasync._windows._IocpProactor/_windows.py:75]: Closing +2025-05-31 01:24:17,120 [ERROR] [Dummy-16] [root/event_service.py:30]: Failed to emit signal . Removing link to WinEvent.EventObjectDestroy. +2025-05-31 01:24:18,662 [INFO] [MainThread] [root/log.py:59]: Yasb v1.7.4 +2025-05-31 01:24:18,663 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:212]: CLI server started v1.1.1 +2025-05-31 01:24:18,663 [INFO] [MainThread] [cli_server/cli_server.py:104]: Log pipe server started +2025-05-31 01:24:18,866 [DEBUG] [MainThread] [tzlocal/win32.py:55]: Looking up time zone info from registry +2025-05-31 01:24:19,270 [DEBUG] [MainThread] [comtypes/__init__.py:149]: CoInitializeEx(None, 2) +2025-05-31 01:24:19,865 [INFO] [MainThread] [root/watcher.py:55]: Created file watcher for path C:\Users\rhys1\.config\yasb +2025-05-31 01:24:19,894 [INFO] [Dummy-5] [root/event_listener.py:53]: Created named pipe yasb-283191e2-3d6a-11f0-b992-f87fc25336c0 +2025-05-31 01:24:19,948 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:213]: Starting (proactor: <_IocpProactor overlapped#=0 result#=0>)... +2025-05-31 01:24:19,949 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:192]: Thread started +2025-05-31 01:24:20,864 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 01:24:20.864101 +2025-05-31 01:34:19,710 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 01:34:19.710442 +2025-05-31 01:35:43,548 [INFO] [MainThread] [root/controller.py:12]: Reloading Application from tray... +2025-05-31 01:35:43,658 [INFO] [MainThread] [cli_server/cli_server.py:112]: Log pipe server stopped +2025-05-31 01:35:43,658 [DEBUG] [MainThread] [cli_server/cli_server.py:206]: CLI server stopped +2025-05-31 01:35:43,671 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:218]: Stopping worker thread... +2025-05-31 01:35:43,674 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:201]: Exiting thread +2025-05-31 01:35:43,675 [DEBUG] [MainThread] [qasync._windows._IocpProactor/_windows.py:75]: Closing +2025-05-31 01:35:43,984 [INFO] [MainThread] [root/log.py:59]: Yasb v1.7.4 +2025-05-31 01:35:43,984 [INFO] [Thread-1 (_run_server)] [cli_server/cli_server.py:212]: CLI server started v1.1.1 +2025-05-31 01:35:43,986 [INFO] [MainThread] [cli_server/cli_server.py:104]: Log pipe server started +2025-05-31 01:35:44,190 [DEBUG] [MainThread] [tzlocal/win32.py:55]: Looking up time zone info from registry +2025-05-31 01:35:44,669 [DEBUG] [MainThread] [comtypes/__init__.py:149]: CoInitializeEx(None, 2) +2025-05-31 01:35:45,326 [INFO] [Dummy-3] [root/event_listener.py:53]: Created named pipe yasb-c0c277ff-3d6b-11f0-a929-f87fc25336c0 +2025-05-31 01:35:45,327 [INFO] [MainThread] [root/watcher.py:55]: Created file watcher for path C:\Users\rhys1\.config\yasb +2025-05-31 01:35:45,392 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:213]: Starting (proactor: <_IocpProactor overlapped#=0 result#=0>)... +2025-05-31 01:35:45,394 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:192]: Thread started +2025-05-31 01:35:45,627 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 01:35:45.627876 +2025-05-31 01:45:45,127 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 01:45:45.125769 +2025-05-31 01:55:45,126 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 01:55:45.125409 +2025-05-31 02:05:45,121 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 02:05:45.120696 +2025-05-31 02:15:45,139 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 02:15:45.139117 +2025-05-31 02:25:45,134 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 02:25:45.134568 +2025-05-31 02:35:45,140 [INFO] [MainThread] [root/weather.py:67]: Fetching new weather data at 2025-05-31 02:35:45.140032 +2025-05-31 02:40:09,235 [DEBUG] [MainThread] [qasync._windows._EventPoller/_windows.py:218]: Stopping worker thread... +2025-05-31 02:40:09,248 [DEBUG] [Dummy-8] [qasync._windows._EventWorker/_windows.py:201]: Exiting thread +2025-05-31 02:40:09,251 [DEBUG] [MainThread] [qasync._windows._IocpProactor/_windows.py:75]: Closing