Cava Module (#662)

* First version of the cava module

* Update cava stuff

* Update themes for cava

* Update themes

* Handle cava visibility when null

* Add bar characters in options

---------

Co-authored-by: Ed Bennett <ed@dodimead.com>
Co-authored-by: Jas Singh <jaskiratpal.singh@outlook.com>
This commit is contained in:
Ed Bennett
2025-01-03 06:45:37 +00:00
committed by GitHub
parent a071e4c17d
commit 6efcd60467
56 changed files with 3065 additions and 2605 deletions

View File

@@ -402,8 +402,11 @@ const main = async () => {
const themeFiles = (await fs.readdir(themesDir)).filter((file) => file.endsWith('.json'));
const specialKeyMappings = {
'theme.bar.menus.menu.bluetooth.scroller.color': 'theme.bar.menus.menu.bluetooth.label.color',
'theme.bar.menus.menu.network.scroller.color': 'theme.bar.menus.menu.network.label.color',
'theme.bar.buttons.modules.cava.text': 'theme.bar.buttons.modules.submap.text',
'theme.bar.buttons.modules.cava.background': 'theme.bar.buttons.modules.submap.background',
'theme.bar.buttons.modules.cava.icon_background': 'theme.bar.buttons.modules.submap.icon_background',
'theme.bar.buttons.modules.cava.icon': 'theme.bar.buttons.modules.submap.icon',
'theme.bar.buttons.modules.cava.border': 'theme.bar.buttons.modules.submap.border',
};
const queue = [...themeFiles].filter(
@@ -412,6 +415,7 @@ const main = async () => {
);
const processQueue = async () => {
const concurrencyLimit = 5;
while (queue.length > 0) {
const promises = [];
for (let i = 0; i < concurrencyLimit && queue.length > 0; i++) {

View File

@@ -23,6 +23,7 @@ import { Weather } from '../../components/bar/modules/weather/index';
import { Power } from '../../components/bar/modules/power/index';
import { Hyprsunset } from '../../components/bar/modules/hyprsunset/index';
import { Hypridle } from '../../components/bar/modules/hypridle/index';
import { Cava } from '../../components/bar/modules/cava/index';
export {
Menu,
@@ -50,4 +51,5 @@ export {
Power,
Hyprsunset,
Hypridle,
Cava,
};

View File

@@ -24,6 +24,7 @@ import {
Power,
Hyprsunset,
Hypridle,
Cava,
} from './exports';
import { WidgetContainer } from './shared/WidgetContainer';
@@ -62,6 +63,7 @@ const widget = {
power: (): JSX.Element => WidgetContainer(Power()),
hyprsunset: (): JSX.Element => WidgetContainer(Hyprsunset()),
hypridle: (): JSX.Element => WidgetContainer(Hypridle()),
cava: (): JSX.Element => WidgetContainer(Cava()),
};
export const Bar = (() => {

View File

@@ -0,0 +1,64 @@
import { bind, Variable } from 'astal';
import { cavaService, mprisService } from 'src/lib/constants/services';
import options from 'src/options';
const {
showActiveOnly,
bars,
autoSensitivity,
lowCutoff,
highCutoff,
noiseReduction,
stereo,
channels,
framerate,
samplerate,
} = options.bar.customModules.cava;
/**
* Initializes a visibility tracker that updates the visibility status based on the active state and the presence of players.
*
* @param isVis - A variable that holds the visibility status.
*/
export function initVisibilityTracker(isVis: Variable<boolean>): void {
Variable.derive([bind(showActiveOnly), bind(mprisService, 'players')], (showActive, players) => {
isVis.set(cavaService !== null && (!showActive || players?.length > 0));
});
}
/**
* Initializes a settings tracker that updates the CAVA service settings based on the provided options.
*/
export function initSettingsTracker(): void {
const cava = cavaService;
if (!cava) {
return;
}
Variable.derive(
[
bind(bars),
bind(channels),
bind(framerate),
bind(samplerate),
bind(autoSensitivity),
bind(lowCutoff),
bind(highCutoff),
bind(noiseReduction),
bind(stereo),
],
(bars, channels, framerate, samplerate, autoSens, lCutoff, hCutoff, noiseRed, isStereo) => {
cava.set_autosens(autoSens);
cava.set_low_cutoff(lCutoff);
cava.set_high_cutoff(hCutoff);
cava.set_noise_reduction(noiseRed);
cava.set_source('auto');
cava.set_stereo(isStereo);
cava.set_bars(bars);
cava.set_channels(channels);
cava.set_framerate(framerate);
cava.set_samplerate(samplerate);
},
);
}

View File

@@ -0,0 +1,77 @@
import { Variable, bind } from 'astal';
import { Astal } from 'astal/gtk3';
import { cavaService } from 'src/lib/constants/services';
import { BarBoxChild } from 'src/lib/types/bar';
import { Module } from '../../shared/Module';
import { inputHandler } from '../../utils/helpers';
import options from 'src/options';
import { initSettingsTracker, initVisibilityTracker } from './helpers';
const {
icon,
showIcon: label,
showActiveOnly,
barCharacters,
spaceCharacter,
leftClick,
rightClick,
middleClick,
scrollUp,
scrollDown,
} = options.bar.customModules.cava;
const isVis = Variable(!showActiveOnly.get());
initVisibilityTracker(isVis);
initSettingsTracker();
export const Cava = (): BarBoxChild => {
let labelBinding: Variable<string> = Variable('');
if (cavaService) {
labelBinding = Variable.derive(
[bind(cavaService, 'values'), bind(spaceCharacter), bind(barCharacters)],
(values, spacing, blockCharacters) => {
const valueMap = values
.map((v: number) => {
const index = Math.floor(v * blockCharacters.length);
return blockCharacters[Math.min(index, blockCharacters.length - 1)];
})
.join(spacing);
return valueMap;
},
);
}
return Module({
isVis,
label: labelBinding(),
showIconBinding: bind(label),
textIcon: bind(icon),
boxClass: 'cava',
props: {
setup: (self: Astal.Button) => {
inputHandler(self, {
onPrimaryClick: {
cmd: leftClick,
},
onSecondaryClick: {
cmd: rightClick,
},
onMiddleClick: {
cmd: middleClick,
},
onScrollUp: {
cmd: scrollUp,
},
onScrollDown: {
cmd: scrollDown,
},
});
},
onDestroy: () => {
labelBinding.drop();
},
},
});
};

View File

@@ -354,6 +354,43 @@ export const CustomModuleSettings = (): JSX.Element => {
<Option opt={options.bar.customModules.hypridle.scrollUp} title="Scroll Up" type="string" />
<Option opt={options.bar.customModules.hypridle.scrollDown} title="Scroll Down" type="string" />
{/* Cava Section */}
<Header title="Cava" />
<Option
opt={options.theme.bar.buttons.modules.cava.enableBorder}
title="Button Border"
type="boolean"
/>
<Option opt={options.bar.customModules.cava.icon} title="Icon" type="string" />
<Option opt={options.bar.customModules.cava.showIcon} title="Show Icon" type="boolean" />
<Option opt={options.theme.bar.buttons.modules.cava.spacing} title="Spacing" type="string" />
<Option opt={options.bar.customModules.cava.barCharacters} title="Bar Characters" type="object" />
<Option opt={options.bar.customModules.cava.spaceCharacter} title="Bar Separator" type="string" />
<Option
opt={options.bar.customModules.cava.showActiveOnly}
title="Auto Hide"
subtitle="Hide if no media detected."
type="boolean"
/>
<Option opt={options.bar.customModules.cava.bars} title="Bars" type="number" />
<Option opt={options.bar.customModules.cava.channels} title="Channels" type="number" />
<Option opt={options.bar.customModules.cava.framerate} title="Framerate" type="number" />
<Option opt={options.bar.customModules.cava.samplerate} title="Sample Rate" type="number" />
<Option
opt={options.bar.customModules.cava.autoSensitivity}
title="Automatic Sensitivity"
type="boolean"
/>
<Option opt={options.bar.customModules.cava.lowCutoff} title="Low Cutoff" type="number" />
<Option opt={options.bar.customModules.cava.highCutoff} title="High Cutoff" type="number" />
<Option opt={options.bar.customModules.cava.noiseReduction} title="Noise Reduction" type="float" />
<Option opt={options.bar.customModules.cava.stereo} title="Stereo" type="boolean" />
<Option opt={options.bar.customModules.cava.leftClick} title="Left Click" type="string" />
<Option opt={options.bar.customModules.cava.rightClick} title="Right Click" type="string" />
<Option opt={options.bar.customModules.cava.middleClick} title="Middle Click" type="string" />
<Option opt={options.bar.customModules.cava.scrollUp} title="Scroll Up" type="string" />
<Option opt={options.bar.customModules.cava.scrollDown} title="Scroll Down" type="string" />
{/* Power Section */}
<Header title="Power" />
<Option

View File

@@ -193,6 +193,19 @@ export const CustomModuleTheme = (): JSX.Element => {
/>
<Option opt={options.theme.bar.buttons.modules.hypridle.border} title="Border" type="color" />
{/* Cava Module Section */}
<Header title="Cava" />
<Option opt={options.theme.bar.buttons.modules.cava.text} title="Bars" type="color" />
<Option opt={options.theme.bar.buttons.modules.cava.icon} title="Icon" type="color" />
<Option opt={options.theme.bar.buttons.modules.cava.background} title="Label Background" type="color" />
<Option
opt={options.theme.bar.buttons.modules.cava.icon_background}
title="Icon Background"
subtitle="Applies a background color to the icon section of the button.\nRequires 'split' button styling."
type="color"
/>
<Option opt={options.theme.bar.buttons.modules.cava.border} title="Border" type="color" />
{/* Power Module Section */}
<Header title="Power" />
<Option opt={options.theme.bar.buttons.modules.power.icon} title="Icon" type="color" />

View File

@@ -5,8 +5,6 @@ import options from 'src/options';
const { style } = options.theme.bar.buttons;
const undefinedVar = Variable(undefined);
export const Module = ({
icon,
textIcon,
@@ -16,7 +14,8 @@ export const Module = ({
boxClass,
isVis,
props = {},
showLabelBinding = bind(undefinedVar),
showLabelBinding = bind(Variable(true)),
showIconBinding = bind(Variable(true)),
showLabel,
labelHook,
hook,
@@ -48,12 +47,12 @@ export const Module = ({
);
const componentChildren = Variable.derive(
[showLabelBinding, useTextIcon],
(showLabel: boolean, forceTextIcon: boolean): JSX.Element[] => {
[showLabelBinding, showIconBinding, useTextIcon],
(showLabel: boolean, showIcon: boolean, forceTextIcon: boolean): JSX.Element[] => {
const childrenArray = [];
const iconWidget = getIconWidget(forceTextIcon);
if (iconWidget !== undefined) {
if (showIcon && iconWidget !== undefined) {
childrenArray.push(iconWidget);
}

View File

@@ -8,6 +8,7 @@ import options from 'src/options';
import { Gdk } from 'astal/gtk3';
import { GtkWidget } from 'src/lib/types/widget';
import { onMiddleClick, onPrimaryClick, onSecondaryClick } from 'src/lib/shared/eventHandlers';
import { isScrollDown, isScrollUp } from 'src/lib/utils';
const { scrollSpeed } = options.bar.customModules;
@@ -45,7 +46,7 @@ export const runAsyncCommand: RunAsyncCommand = (cmd, events, fn, postInputUpdat
return;
}
execAsync(`bash -c "${cmd}"`)
execAsync(['bash', '-c', cmd])
.then((output) => {
handlePostInputUpdater(postInputUpdater);
if (fn !== undefined) {
@@ -152,30 +153,19 @@ export const inputHandler = (
});
const id = self.connect('scroll-event', (self: GtkWidget, event: Gdk.Event) => {
const [directionSuccess, direction] = event.get_scroll_direction();
const [deltaSuccess, , yScroll] = event.get_scroll_deltas();
const handleScroll = (input?: { cmd: Variable<string>; fn: (output: string) => void }): void => {
if (input) {
throttledHandler(sanitizeInput(input.cmd), { clicked: self, event }, input.fn, postInputUpdater);
}
};
if (directionSuccess) {
if (direction === Gdk.ScrollDirection.UP) {
if (isScrollUp(event)) {
handleScroll(onScrollUpInput);
} else if (direction === Gdk.ScrollDirection.DOWN) {
handleScroll(onScrollDownInput);
}
}
if (deltaSuccess) {
if (yScroll > 0) {
handleScroll(onScrollUpInput);
} else if (yScroll < 0) {
if (isScrollDown(event)) {
handleScroll(onScrollDownInput);
}
}
});
return {

View File

@@ -32,3 +32,6 @@ export const brightnessService = Brightness.get_default();
import AstalPowerProfiles from 'gi://AstalPowerProfiles?version=0.1';
export const powerProfilesService = AstalPowerProfiles.get_default();
import AstalCava from 'gi://AstalCava';
export const cavaService = AstalCava.get_default();

View File

@@ -33,6 +33,7 @@ export type BarModule = {
props?: Widget.ButtonProps;
showLabel?: boolean;
showLabelBinding?: Binding;
showIconBinding?: Binding;
hook?: BoxHook;
connection?: Binding<Connectable>;
};

View File

@@ -47,7 +47,8 @@ export type BarModule =
| 'power'
| 'systray'
| 'hypridle'
| 'hyprsunset';
| 'hyprsunset'
| 'cava';
export type BarLayout = {
left: BarModule[];

View File

@@ -408,6 +408,15 @@ const options = mkOptions(CONFIG, {
icon_background: opt(colors.base2),
spacing: opt('0.45em'),
},
cava: {
enableBorder: opt(false),
border: opt(colors.teal),
background: opt(colors.base2),
text: opt(colors.teal),
icon: opt(colors.teal),
icon_background: opt(colors.base2),
spacing: opt('0.5em'),
},
},
},
menus: {
@@ -1172,6 +1181,27 @@ const options = mkOptions(CONFIG, {
scrollUp: opt(''),
scrollDown: opt(''),
},
cava: {
showIcon: opt(true),
icon: opt(''),
spaceCharacter: opt(''),
barCharacters: opt(['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█']),
showActiveOnly: opt(false),
bars: opt(10),
channels: opt(2),
framerate: opt(60),
samplerate: opt(44100),
autoSensitivity: opt(true),
lowCutoff: opt(50),
highCutoff: opt(10000),
noiseReduction: opt(0.77),
stereo: opt(false),
leftClick: opt(''),
rightClick: opt(''),
middleClick: opt(''),
scrollUp: opt(''),
scrollDown: opt(''),
},
},
},

View File

@@ -448,3 +448,30 @@
// custom font size
1.075em //
);
/*
* #################################
* # Cava Styling #
* #################################
*/
@include styleModule(
//
// class name
'cava',
// label color
$bar-buttons-modules-cava-text,
// icon color
$bar-buttons-modules-cava-icon,
// icon background if split style is used
$bar-buttons-modules-cava-icon_background,
// label background
$bar-buttons-modules-cava-background,
// inner spacing
$bar-buttons-modules-cava-spacing,
// if border enabled
$bar-buttons-modules-cava-enableBorder,
// border color
$bar-buttons-modules-cava-border,
// custom font size
1.2em //
);

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#e78284",
"theme.bar.buttons.modules.hypridle.border": "#e78284",
"theme.bar.menus.menu.network.scroller.color": "#ca9ee6",
"theme.bar.menus.menu.bluetooth.scroller.color": "#99d1db"
"theme.bar.menus.menu.bluetooth.scroller.color": "#99d1db",
"theme.bar.buttons.modules.cava.text": "#81c8be",
"theme.bar.buttons.modules.cava.background": "#303446",
"theme.bar.buttons.modules.cava.icon_background": "#303446",
"theme.bar.buttons.modules.cava.icon": "#81c8be",
"theme.bar.buttons.modules.cava.border": "#81c8be"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#e78284",
"theme.bar.buttons.modules.hypridle.border": "#e78284",
"theme.bar.menus.menu.network.scroller.color": "#ca9ee6",
"theme.bar.menus.menu.bluetooth.scroller.color": "#99d1db"
"theme.bar.menus.menu.bluetooth.scroller.color": "#99d1db",
"theme.bar.buttons.modules.cava.text": "#81c8be",
"theme.bar.buttons.modules.cava.background": "#303446",
"theme.bar.buttons.modules.cava.icon": "#181825",
"theme.bar.buttons.modules.cava.icon_background": "#81c8be",
"theme.bar.buttons.modules.cava.border": "#81c8be"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#303446",
"theme.bar.buttons.modules.hypridle.border": "#e78284",
"theme.bar.menus.menu.network.scroller.color": "#ca9ee6",
"theme.bar.menus.menu.bluetooth.scroller.color": "#99d1db"
"theme.bar.menus.menu.bluetooth.scroller.color": "#99d1db",
"theme.bar.buttons.modules.cava.background": "#81c8be",
"theme.bar.buttons.modules.cava.text": "#303446",
"theme.bar.buttons.modules.cava.icon": "#303446",
"theme.bar.buttons.modules.cava.icon_background": "#303446",
"theme.bar.buttons.modules.cava.border": "#81c8be"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#d20f39",
"theme.bar.buttons.modules.hypridle.border": "#d20f39",
"theme.bar.menus.menu.network.scroller.color": "#8839ef",
"theme.bar.menus.menu.bluetooth.scroller.color": "#04a5e5"
"theme.bar.menus.menu.bluetooth.scroller.color": "#04a5e5",
"theme.bar.buttons.modules.cava.text": "#179299",
"theme.bar.buttons.modules.cava.background": "#dcdfe8",
"theme.bar.buttons.modules.cava.icon_background": "#dcdfe8",
"theme.bar.buttons.modules.cava.icon": "#179299",
"theme.bar.buttons.modules.cava.border": "#179299"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#d20f39",
"theme.bar.buttons.modules.hypridle.border": "#d20f39",
"theme.bar.menus.menu.network.scroller.color": "#8839ef",
"theme.bar.menus.menu.bluetooth.scroller.color": "#04a5e5"
"theme.bar.menus.menu.bluetooth.scroller.color": "#04a5e5",
"theme.bar.buttons.modules.cava.text": "#179299",
"theme.bar.buttons.modules.cava.background": "#dcdfe8",
"theme.bar.buttons.modules.cava.icon": "#181825",
"theme.bar.buttons.modules.cava.icon_background": "#179299",
"theme.bar.buttons.modules.cava.border": "#179299"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#dcdfe8",
"theme.bar.buttons.modules.hypridle.border": "#d20f39",
"theme.bar.menus.menu.network.scroller.color": "#8839ef",
"theme.bar.menus.menu.bluetooth.scroller.color": "#04a5e5"
"theme.bar.menus.menu.bluetooth.scroller.color": "#04a5e5",
"theme.bar.buttons.modules.cava.background": "#179299",
"theme.bar.buttons.modules.cava.text": "#dcdfe8",
"theme.bar.buttons.modules.cava.icon": "#dcdfe8",
"theme.bar.buttons.modules.cava.icon_background": "#dcdfe8",
"theme.bar.buttons.modules.cava.border": "#179299"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#ed8796",
"theme.bar.buttons.modules.hypridle.border": "#ed8796",
"theme.bar.menus.menu.network.scroller.color": "#c6a0f6",
"theme.bar.menus.menu.bluetooth.scroller.color": "#91d7e3"
"theme.bar.menus.menu.bluetooth.scroller.color": "#91d7e3",
"theme.bar.buttons.modules.cava.text": "#8bd5ca",
"theme.bar.buttons.modules.cava.background": "#24273a",
"theme.bar.buttons.modules.cava.icon_background": "#24273a",
"theme.bar.buttons.modules.cava.icon": "#8bd5ca",
"theme.bar.buttons.modules.cava.border": "#8bd5ca"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#ed8796",
"theme.bar.buttons.modules.hypridle.border": "#ed8796",
"theme.bar.menus.menu.network.scroller.color": "#c6a0f6",
"theme.bar.menus.menu.bluetooth.scroller.color": "#91d7e3"
"theme.bar.menus.menu.bluetooth.scroller.color": "#91d7e3",
"theme.bar.buttons.modules.cava.text": "#8bd5ca",
"theme.bar.buttons.modules.cava.background": "#24273a",
"theme.bar.buttons.modules.cava.icon": "#181825",
"theme.bar.buttons.modules.cava.icon_background": "#8bd5ca",
"theme.bar.buttons.modules.cava.border": "#8bd5ca"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#24273a",
"theme.bar.buttons.modules.hypridle.border": "#ed8796",
"theme.bar.menus.menu.network.scroller.color": "#c6a0f6",
"theme.bar.menus.menu.bluetooth.scroller.color": "#91d7e3"
"theme.bar.menus.menu.bluetooth.scroller.color": "#91d7e3",
"theme.bar.buttons.modules.cava.background": "#8bd5ca",
"theme.bar.buttons.modules.cava.text": "#24273a",
"theme.bar.buttons.modules.cava.icon": "#24273a",
"theme.bar.buttons.modules.cava.icon_background": "#24273a",
"theme.bar.buttons.modules.cava.border": "#8bd5ca"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.background": "#242438",
"theme.bar.buttons.modules.hypridle.icon_background": "#f5c2e7",
"theme.bar.buttons.modules.hypridle.text": "#f5c2e7",
"theme.bar.buttons.modules.hypridle.border": "#f5c2e7"
"theme.bar.buttons.modules.hypridle.border": "#f5c2e7",
"theme.bar.buttons.modules.cava.text": "#94e2d5",
"theme.bar.buttons.modules.cava.background": "#242438",
"theme.bar.buttons.modules.cava.icon_background": "#242438",
"theme.bar.buttons.modules.cava.icon": "#94e2d5",
"theme.bar.buttons.modules.cava.border": "#94e2d5"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.background": "#242438",
"theme.bar.buttons.modules.hypridle.icon_background": "#f5c2e7",
"theme.bar.buttons.modules.hypridle.text": "#f5c2e7",
"theme.bar.buttons.modules.hypridle.border": "#f5c2e7"
"theme.bar.buttons.modules.hypridle.border": "#f5c2e7",
"theme.bar.buttons.modules.cava.text": "#94e2d5",
"theme.bar.buttons.modules.cava.background": "#242438",
"theme.bar.buttons.modules.cava.icon": "#242438",
"theme.bar.buttons.modules.cava.icon_background": "#94e2d5",
"theme.bar.buttons.modules.cava.border": "#94e2d5"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.background": "#f5c2e7",
"theme.bar.buttons.modules.hypridle.icon_background": "#f5c2e7",
"theme.bar.buttons.modules.hypridle.text": "#242438",
"theme.bar.buttons.modules.hypridle.border": "#f5c2e7"
"theme.bar.buttons.modules.hypridle.border": "#f5c2e7",
"theme.bar.buttons.modules.cava.background": "#94e2d5",
"theme.bar.buttons.modules.cava.text": "#242438",
"theme.bar.buttons.modules.cava.icon": "#242438",
"theme.bar.buttons.modules.cava.icon_background": "#94e2d5",
"theme.bar.buttons.modules.cava.border": "#94e2d5"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#FF4500",
"theme.bar.buttons.modules.hypridle.border": "#FF4500",
"theme.bar.menus.menu.network.scroller.color": "#FFD700",
"theme.bar.menus.menu.bluetooth.scroller.color": "#00FFFF"
"theme.bar.menus.menu.bluetooth.scroller.color": "#00FFFF",
"theme.bar.buttons.modules.cava.text": "#FF69B4",
"theme.bar.buttons.modules.cava.background": "#121212",
"theme.bar.buttons.modules.cava.icon_background": "#121212",
"theme.bar.buttons.modules.cava.icon": "#FF69B4",
"theme.bar.buttons.modules.cava.border": "#FF69B4"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#FF4500",
"theme.bar.buttons.modules.hypridle.border": "#FF4500",
"theme.bar.menus.menu.network.scroller.color": "#FFD700",
"theme.bar.menus.menu.bluetooth.scroller.color": "#00FFFF"
"theme.bar.menus.menu.bluetooth.scroller.color": "#00FFFF",
"theme.bar.buttons.modules.cava.text": "#FF69B4",
"theme.bar.buttons.modules.cava.background": "#121212",
"theme.bar.buttons.modules.cava.icon": "#121212",
"theme.bar.buttons.modules.cava.icon_background": "#FF69B4",
"theme.bar.buttons.modules.cava.border": "#FF69B4"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#121212",
"theme.bar.buttons.modules.hypridle.border": "#FF4500",
"theme.bar.menus.menu.network.scroller.color": "#FFD700",
"theme.bar.menus.menu.bluetooth.scroller.color": "#00FFFF"
"theme.bar.menus.menu.bluetooth.scroller.color": "#00FFFF",
"theme.bar.buttons.modules.cava.background": "#FF69B4",
"theme.bar.buttons.modules.cava.text": "#121212",
"theme.bar.buttons.modules.cava.icon": "#121212",
"theme.bar.buttons.modules.cava.icon_background": "#121212",
"theme.bar.buttons.modules.cava.border": "#FF69B4"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#bd93f9",
"theme.bar.buttons.modules.hypridle.border": "#bd93f9",
"theme.bar.menus.menu.network.scroller.color": "#bd93f9",
"theme.bar.menus.menu.bluetooth.scroller.color": "#8be9fd"
"theme.bar.menus.menu.bluetooth.scroller.color": "#8be9fd",
"theme.bar.buttons.modules.cava.text": "#8be9fd",
"theme.bar.buttons.modules.cava.background": "#44475a",
"theme.bar.buttons.modules.cava.icon_background": "#44475a",
"theme.bar.buttons.modules.cava.icon": "#8be9fd",
"theme.bar.buttons.modules.cava.border": "#8be9fd"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#bd93f9",
"theme.bar.buttons.modules.hypridle.border": "#bd93f9",
"theme.bar.menus.menu.network.scroller.color": "#bd93f9",
"theme.bar.menus.menu.bluetooth.scroller.color": "#8be9fd"
"theme.bar.menus.menu.bluetooth.scroller.color": "#8be9fd",
"theme.bar.buttons.modules.cava.text": "#8be9fd",
"theme.bar.buttons.modules.cava.background": "#44475a",
"theme.bar.buttons.modules.cava.icon": "#282936",
"theme.bar.buttons.modules.cava.icon_background": "#8be9fd",
"theme.bar.buttons.modules.cava.border": "#8be9fd"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#44475a",
"theme.bar.buttons.modules.hypridle.border": "#bd93f9",
"theme.bar.menus.menu.network.scroller.color": "#bd93f9",
"theme.bar.menus.menu.bluetooth.scroller.color": "#8be9fd"
"theme.bar.menus.menu.bluetooth.scroller.color": "#8be9fd",
"theme.bar.buttons.modules.cava.background": "#8be9fd",
"theme.bar.buttons.modules.cava.text": "#44475a",
"theme.bar.buttons.modules.cava.icon": "#44475a",
"theme.bar.buttons.modules.cava.icon_background": "#44475a",
"theme.bar.buttons.modules.cava.border": "#8be9fd"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#e67e80",
"theme.bar.buttons.modules.hypridle.border": "#e67e80",
"theme.bar.menus.menu.network.scroller.color": "#83c092",
"theme.bar.menus.menu.bluetooth.scroller.color": "#83c092"
"theme.bar.menus.menu.bluetooth.scroller.color": "#83c092",
"theme.bar.buttons.modules.cava.text": "#83c092",
"theme.bar.buttons.modules.cava.background": "#323d43",
"theme.bar.buttons.modules.cava.icon_background": "#323d43",
"theme.bar.buttons.modules.cava.icon": "#83c092",
"theme.bar.buttons.modules.cava.border": "#83c092"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#e67e80",
"theme.bar.buttons.modules.hypridle.border": "#e67e80",
"theme.bar.menus.menu.network.scroller.color": "#83c092",
"theme.bar.menus.menu.bluetooth.scroller.color": "#83c092"
"theme.bar.menus.menu.bluetooth.scroller.color": "#83c092",
"theme.bar.buttons.modules.cava.text": "#83c092",
"theme.bar.buttons.modules.cava.background": "#323d43",
"theme.bar.buttons.modules.cava.icon": "#21252b",
"theme.bar.buttons.modules.cava.icon_background": "#83c092",
"theme.bar.buttons.modules.cava.border": "#83c092"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#323d43",
"theme.bar.buttons.modules.hypridle.border": "#e67e80",
"theme.bar.menus.menu.network.scroller.color": "#83c092",
"theme.bar.menus.menu.bluetooth.scroller.color": "#83c092"
"theme.bar.menus.menu.bluetooth.scroller.color": "#83c092",
"theme.bar.buttons.modules.cava.background": "#83c092",
"theme.bar.buttons.modules.cava.text": "#323d43",
"theme.bar.buttons.modules.cava.icon": "#323d43",
"theme.bar.buttons.modules.cava.icon_background": "#323d43",
"theme.bar.buttons.modules.cava.border": "#83c092"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#83a598",
"theme.bar.buttons.modules.hypridle.border": "#83a598",
"theme.bar.menus.menu.network.scroller.color": "#b16286",
"theme.bar.menus.menu.bluetooth.scroller.color": "#83a598"
"theme.bar.menus.menu.bluetooth.scroller.color": "#83a598",
"theme.bar.buttons.modules.cava.text": "#8ec07c",
"theme.bar.buttons.modules.cava.background": "#282828",
"theme.bar.buttons.modules.cava.icon_background": "#282828",
"theme.bar.buttons.modules.cava.icon": "#8ec07c",
"theme.bar.buttons.modules.cava.border": "#8ec07c"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#83a598",
"theme.bar.buttons.modules.hypridle.border": "#83a598",
"theme.bar.menus.menu.network.scroller.color": "#b16286",
"theme.bar.menus.menu.bluetooth.scroller.color": "#83a598"
"theme.bar.menus.menu.bluetooth.scroller.color": "#83a598",
"theme.bar.buttons.modules.cava.text": "#8ec07c",
"theme.bar.buttons.modules.cava.background": "#282828",
"theme.bar.buttons.modules.cava.icon": "#21252b",
"theme.bar.buttons.modules.cava.icon_background": "#8ec07c",
"theme.bar.buttons.modules.cava.border": "#8ec07c"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#282828",
"theme.bar.buttons.modules.hypridle.border": "#83a598",
"theme.bar.menus.menu.network.scroller.color": "#b16286",
"theme.bar.menus.menu.bluetooth.scroller.color": "#83a598"
"theme.bar.menus.menu.bluetooth.scroller.color": "#83a598",
"theme.bar.buttons.modules.cava.background": "#8ec07c",
"theme.bar.buttons.modules.cava.text": "#282828",
"theme.bar.buttons.modules.cava.icon": "#282828",
"theme.bar.buttons.modules.cava.icon_background": "#282828",
"theme.bar.buttons.modules.cava.border": "#8ec07c"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#ffffff",
"theme.bar.buttons.modules.hypridle.border": "#ffffff",
"theme.bar.menus.menu.network.scroller.color": "#FFFFFF",
"theme.bar.menus.menu.bluetooth.scroller.color": "#ffffff"
"theme.bar.menus.menu.bluetooth.scroller.color": "#ffffff",
"theme.bar.buttons.modules.cava.text": "#FFFFFF",
"theme.bar.buttons.modules.cava.background": "#090909",
"theme.bar.buttons.modules.cava.icon_background": "#090909",
"theme.bar.buttons.modules.cava.icon": "#FFFFFF",
"theme.bar.buttons.modules.cava.border": "#FFFFFF"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#ffffff",
"theme.bar.buttons.modules.hypridle.border": "#ffffff",
"theme.bar.menus.menu.network.scroller.color": "#FFFFFF",
"theme.bar.menus.menu.bluetooth.scroller.color": "#ffffff"
"theme.bar.menus.menu.bluetooth.scroller.color": "#ffffff",
"theme.bar.buttons.modules.cava.text": "#FFFFFF",
"theme.bar.buttons.modules.cava.background": "#090909",
"theme.bar.buttons.modules.cava.icon": "#21252b",
"theme.bar.buttons.modules.cava.icon_background": "#FFFFFF",
"theme.bar.buttons.modules.cava.border": "#FFFFFF"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#090909",
"theme.bar.buttons.modules.hypridle.border": "#ffffff",
"theme.bar.menus.menu.network.scroller.color": "#FFFFFF",
"theme.bar.menus.menu.bluetooth.scroller.color": "#ffffff"
"theme.bar.menus.menu.bluetooth.scroller.color": "#ffffff",
"theme.bar.buttons.modules.cava.background": "#FFFFFF",
"theme.bar.buttons.modules.cava.text": "#090909",
"theme.bar.buttons.modules.cava.icon": "#090909",
"theme.bar.buttons.modules.cava.icon_background": "#090909",
"theme.bar.buttons.modules.cava.border": "#FFFFFF"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#8fbcbb",
"theme.bar.buttons.modules.hypridle.border": "#8fbcbb",
"theme.bar.menus.menu.network.scroller.color": "#88c0d0",
"theme.bar.menus.menu.bluetooth.scroller.color": "#88c0d0"
"theme.bar.menus.menu.bluetooth.scroller.color": "#88c0d0",
"theme.bar.buttons.modules.cava.text": "#8fbcbb",
"theme.bar.buttons.modules.cava.background": "#3b4252",
"theme.bar.buttons.modules.cava.icon_background": "#3b4252",
"theme.bar.buttons.modules.cava.icon": "#8fbcbb",
"theme.bar.buttons.modules.cava.border": "#8fbcbb"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#8fbcbb",
"theme.bar.buttons.modules.hypridle.border": "#8fbcbb",
"theme.bar.menus.menu.network.scroller.color": "#88c0d0",
"theme.bar.menus.menu.bluetooth.scroller.color": "#88c0d0"
"theme.bar.menus.menu.bluetooth.scroller.color": "#88c0d0",
"theme.bar.buttons.modules.cava.text": "#8fbcbb",
"theme.bar.buttons.modules.cava.background": "#3b4252",
"theme.bar.buttons.modules.cava.icon": "#21252b",
"theme.bar.buttons.modules.cava.icon_background": "#8fbcbb",
"theme.bar.buttons.modules.cava.border": "#8fbcbb"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#3b4252",
"theme.bar.buttons.modules.hypridle.border": "#8fbcbb",
"theme.bar.menus.menu.network.scroller.color": "#88c0d0",
"theme.bar.menus.menu.bluetooth.scroller.color": "#88c0d0"
"theme.bar.menus.menu.bluetooth.scroller.color": "#88c0d0",
"theme.bar.buttons.modules.cava.background": "#8fbcbb",
"theme.bar.buttons.modules.cava.text": "#3b4252",
"theme.bar.buttons.modules.cava.icon": "#3b4252",
"theme.bar.buttons.modules.cava.icon_background": "#3b4252",
"theme.bar.buttons.modules.cava.border": "#8fbcbb"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#e06c75",
"theme.bar.buttons.modules.hypridle.border": "#e06c75",
"theme.bar.menus.menu.network.scroller.color": "#c678dd",
"theme.bar.menus.menu.bluetooth.scroller.color": "#56b6c2"
"theme.bar.menus.menu.bluetooth.scroller.color": "#56b6c2",
"theme.bar.buttons.modules.cava.text": "#56b6c2",
"theme.bar.buttons.modules.cava.background": "#21252b",
"theme.bar.buttons.modules.cava.icon_background": "#21252b",
"theme.bar.buttons.modules.cava.icon": "#56b6c2",
"theme.bar.buttons.modules.cava.border": "#56b6c2"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#e06c75",
"theme.bar.buttons.modules.hypridle.border": "#e06c75",
"theme.bar.menus.menu.network.scroller.color": "#c678dd",
"theme.bar.menus.menu.bluetooth.scroller.color": "#56b6c2"
"theme.bar.menus.menu.bluetooth.scroller.color": "#56b6c2",
"theme.bar.buttons.modules.cava.text": "#56b6c2",
"theme.bar.buttons.modules.cava.background": "#21252b",
"theme.bar.buttons.modules.cava.icon": "#21252b",
"theme.bar.buttons.modules.cava.icon_background": "#56b6c2",
"theme.bar.buttons.modules.cava.border": "#56b6c2"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#21252b",
"theme.bar.buttons.modules.hypridle.border": "#e06c75",
"theme.bar.menus.menu.network.scroller.color": "#c678dd",
"theme.bar.menus.menu.bluetooth.scroller.color": "#56b6c2"
"theme.bar.menus.menu.bluetooth.scroller.color": "#56b6c2",
"theme.bar.buttons.modules.cava.background": "#56b6c2",
"theme.bar.buttons.modules.cava.text": "#21252b",
"theme.bar.buttons.modules.cava.icon": "#21252b",
"theme.bar.buttons.modules.cava.icon_background": "#21252b",
"theme.bar.buttons.modules.cava.border": "#56b6c2"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#eb6f92",
"theme.bar.buttons.modules.hypridle.border": "#eb6f92",
"theme.bar.menus.menu.network.scroller.color": "#c4a7e7",
"theme.bar.menus.menu.bluetooth.scroller.color": "#9ccfd8"
"theme.bar.menus.menu.bluetooth.scroller.color": "#9ccfd8",
"theme.bar.buttons.modules.cava.text": "#9ccfd8",
"theme.bar.buttons.modules.cava.background": "#21202e",
"theme.bar.buttons.modules.cava.icon_background": "#21202e",
"theme.bar.buttons.modules.cava.icon": "#9ccfd8",
"theme.bar.buttons.modules.cava.border": "#9ccfd8"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#eb6f92",
"theme.bar.buttons.modules.hypridle.border": "#eb6f92",
"theme.bar.menus.menu.network.scroller.color": "#c4a7e7",
"theme.bar.menus.menu.bluetooth.scroller.color": "#9ccfd8"
"theme.bar.menus.menu.bluetooth.scroller.color": "#9ccfd8",
"theme.bar.buttons.modules.cava.text": "#9ccfd8",
"theme.bar.buttons.modules.cava.background": "#2a283e",
"theme.bar.buttons.modules.cava.icon_background": "#2a283e",
"theme.bar.buttons.modules.cava.icon": "#9ccfd8",
"theme.bar.buttons.modules.cava.border": "#9ccfd8"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#eb6f92",
"theme.bar.buttons.modules.hypridle.border": "#eb6f92",
"theme.bar.menus.menu.network.scroller.color": "#c4a7e7",
"theme.bar.menus.menu.bluetooth.scroller.color": "#9ccfd8"
"theme.bar.menus.menu.bluetooth.scroller.color": "#9ccfd8",
"theme.bar.buttons.modules.cava.text": "#9ccfd8",
"theme.bar.buttons.modules.cava.background": "#2a283e",
"theme.bar.buttons.modules.cava.icon": "#181825",
"theme.bar.buttons.modules.cava.icon_background": "#9ccfd8",
"theme.bar.buttons.modules.cava.border": "#9ccfd8"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#2a283e",
"theme.bar.buttons.modules.hypridle.border": "#eb6f92",
"theme.bar.menus.menu.network.scroller.color": "#c4a7e7",
"theme.bar.menus.menu.bluetooth.scroller.color": "#9ccfd8"
"theme.bar.menus.menu.bluetooth.scroller.color": "#9ccfd8",
"theme.bar.buttons.modules.cava.background": "#9ccfd8",
"theme.bar.buttons.modules.cava.text": "#2a283e",
"theme.bar.buttons.modules.cava.icon": "#2a283e",
"theme.bar.buttons.modules.cava.icon_background": "#2a283e",
"theme.bar.buttons.modules.cava.border": "#9ccfd8"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#eb6f92",
"theme.bar.buttons.modules.hypridle.border": "#eb6f92",
"theme.bar.menus.menu.network.scroller.color": "#c4a7e7",
"theme.bar.menus.menu.bluetooth.scroller.color": "#9ccfd8"
"theme.bar.menus.menu.bluetooth.scroller.color": "#9ccfd8",
"theme.bar.buttons.modules.cava.text": "#9ccfd8",
"theme.bar.buttons.modules.cava.background": "#21202e",
"theme.bar.buttons.modules.cava.icon": "#181825",
"theme.bar.buttons.modules.cava.icon_background": "#9ccfd8",
"theme.bar.buttons.modules.cava.border": "#9ccfd8"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#21202e",
"theme.bar.buttons.modules.hypridle.border": "#eb6f92",
"theme.bar.menus.menu.network.scroller.color": "#c4a7e7",
"theme.bar.menus.menu.bluetooth.scroller.color": "#9ccfd8"
"theme.bar.menus.menu.bluetooth.scroller.color": "#9ccfd8",
"theme.bar.buttons.modules.cava.background": "#9ccfd8",
"theme.bar.buttons.modules.cava.text": "#21202e",
"theme.bar.buttons.modules.cava.icon": "#21202e",
"theme.bar.buttons.modules.cava.icon_background": "#21202e",
"theme.bar.buttons.modules.cava.border": "#9ccfd8"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#f7768e",
"theme.bar.buttons.modules.hypridle.border": "#f7768e",
"theme.bar.menus.menu.network.scroller.color": "#bb9af7",
"theme.bar.menus.menu.bluetooth.scroller.color": "#7dcfff"
"theme.bar.menus.menu.bluetooth.scroller.color": "#7dcfff",
"theme.bar.buttons.modules.cava.text": "#73daca",
"theme.bar.buttons.modules.cava.background": "#272a3d",
"theme.bar.buttons.modules.cava.icon_background": "#272a3d",
"theme.bar.buttons.modules.cava.icon": "#73daca",
"theme.bar.buttons.modules.cava.border": "#73daca"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#f7768e",
"theme.bar.buttons.modules.hypridle.border": "#f7768e",
"theme.bar.menus.menu.network.scroller.color": "#bb9af7",
"theme.bar.menus.menu.bluetooth.scroller.color": "#7dcfff"
"theme.bar.menus.menu.bluetooth.scroller.color": "#7dcfff",
"theme.bar.buttons.modules.cava.text": "#73daca",
"theme.bar.buttons.modules.cava.background": "#272a3d",
"theme.bar.buttons.modules.cava.icon": "#181825",
"theme.bar.buttons.modules.cava.icon_background": "#73daca",
"theme.bar.buttons.modules.cava.border": "#73daca"
}

View File

@@ -356,5 +356,10 @@
"theme.bar.buttons.modules.hypridle.text": "#272a3d",
"theme.bar.buttons.modules.hypridle.border": "#f7768e",
"theme.bar.menus.menu.network.scroller.color": "#bb9af7",
"theme.bar.menus.menu.bluetooth.scroller.color": "#7dcfff"
"theme.bar.menus.menu.bluetooth.scroller.color": "#7dcfff",
"theme.bar.buttons.modules.cava.background": "#73daca",
"theme.bar.buttons.modules.cava.text": "#272a3d",
"theme.bar.buttons.modules.cava.icon": "#272a3d",
"theme.bar.buttons.modules.cava.icon_background": "#272a3d",
"theme.bar.buttons.modules.cava.border": "#73daca"
}