Merge branch 'Jas-SinghFSU:master' into master

This commit is contained in:
Ben
2025-01-10 21:51:31 +10:00
committed by GitHub
71 changed files with 3201 additions and 2669 deletions

12
flake.lock generated
View File

@@ -8,11 +8,11 @@
]
},
"locked": {
"lastModified": 1735485506,
"narHash": "sha256-7CWr3Q83KnGiLUn0oaboafLMOXQ0X9/fjFRVY1xopbM=",
"lastModified": 1736090999,
"narHash": "sha256-B5CJuHqfJrzPa7tObK0H9669/EClSHpa/P7B9EuvElU=",
"owner": "aylur",
"repo": "ags",
"rev": "251d39413543264361898b02035775aa3e46fe52",
"rev": "5527c3c07d92c11e04e7fd99d58429493dba7e3c",
"type": "github"
},
"original": {
@@ -44,11 +44,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1735291276,
"narHash": "sha256-NYVcA06+blsLG6wpAbSPTCyLvxD/92Hy4vlY9WxFI1M=",
"lastModified": 1736344531,
"narHash": "sha256-8YVQ9ZbSfuUk2bUf2KRj60NRraLPKPS0Q4QFTbc+c2c=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "634fd46801442d760e09493a794c4f15db2d0cbb",
"rev": "bffc22eb12172e6db3c5dde9e3e5628f8e3e7912",
"type": "github"
},
"original": {

View File

@@ -33,6 +33,7 @@
battery
bluetooth
mpris
cava
network
notifd
powerprofiles

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

@@ -11,11 +11,11 @@ import { Astal } from 'astal/gtk3';
const { rightClick, middleClick, scrollDown, scrollUp } = options.bar.bluetooth;
const Bluetooth = (): BarBoxChild => {
const btIcon = (isPowered: boolean): JSX.Element => (
const BluetoothIcon = ({ isPowered }: BluetoothIconProps): JSX.Element => (
<label className={'bar-button-icon bluetooth txt-icon bar'} label={isPowered ? '󰂯' : '󰂲'} />
);
const btText = (isPowered: boolean, devices: AstalBluetooth.Device[]): JSX.Element => {
const BluetoothLabel = ({ isPowered, devices }: BluetoothLabelProps): JSX.Element => {
const connectDevices = devices.filter((device) => device.connected);
const label =
@@ -39,11 +39,17 @@ const Bluetooth = (): BarBoxChild => {
const componentBinding = Variable.derive(
[bind(options.bar.bluetooth.label), bind(bluetoothService, 'isPowered'), bind(bluetoothService, 'devices')],
(showLabel: boolean, isPowered: boolean, devices: AstalBluetooth.Device[]): JSX.Element[] => {
(showLabel: boolean, isPowered: boolean, devices: AstalBluetooth.Device[]): JSX.Element => {
if (showLabel) {
return [btIcon(isPowered), btText(isPowered, devices)];
return (
<box>
<BluetoothIcon isPowered={isPowered} />
<BluetoothLabel isPowered={isPowered} devices={devices} />
</box>
);
}
return [btIcon(isPowered)];
return <BluetoothIcon isPowered={isPowered} />;
},
);
@@ -101,4 +107,13 @@ const Bluetooth = (): BarBoxChild => {
};
};
interface BluetoothIconProps {
isPowered: boolean;
}
interface BluetoothLabelProps {
isPowered: boolean;
devices: AstalBluetooth.Device[];
}
export { Bluetooth };

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

@@ -13,8 +13,8 @@ const { style } = options.theme.bar.buttons;
const time = Variable.derive([systemTime, format], (c, f) => c.format(f) || '');
const Clock = (): BarBoxChild => {
const clockTime = <label className={'bar-button-label clock bar'} label={bind(time)} />;
const clockIcon = <label className={'bar-button-icon clock txt-icon bar'} label={bind(icon)} />;
const ClockTime = (): JSX.Element => <label className={'bar-button-label clock bar'} label={bind(time)} />;
const ClockIcon = (): JSX.Element => <label className={'bar-button-icon clock txt-icon bar'} label={bind(icon)} />;
const componentClassName = Variable.derive(
[bind(style), bind(showIcon), bind(showTime)],
@@ -31,11 +31,16 @@ const Clock = (): BarBoxChild => {
const componentChildren = Variable.derive([bind(showIcon), bind(showTime)], (shIcn, shTm) => {
if (shIcn && !shTm) {
return [clockIcon];
return <ClockIcon />;
} else if (shTm && !shIcn) {
return [clockTime];
return <ClockTime />;
}
return [clockIcon, clockTime];
return (
<box>
<ClockIcon />
<ClockTime />
</box>
);
});
const component = (

View File

@@ -23,7 +23,7 @@ const Network = (): BarBoxChild => {
},
);
const networkIcon = <icon className={'bar-button-icon network-icon'} icon={iconBinding()} />;
const NetworkIcon = (): JSX.Element => <icon className={'bar-button-icon network-icon'} icon={iconBinding()} />;
const networkLabel = Variable.derive(
[
@@ -66,8 +66,6 @@ const Network = (): BarBoxChild => {
},
);
const componentChildren = [networkIcon, networkLabel()];
const component = (
<box
vexpand
@@ -79,7 +77,8 @@ const Network = (): BarBoxChild => {
componentClassName.drop();
}}
>
{componentChildren}
<NetworkIcon />
{networkLabel()}
</box>
);

View File

@@ -44,7 +44,7 @@ export const Notifications = (): BarBoxChild => {
) => {
const filteredNotifications = filterNotifications(notif, ignoredNotifs);
const notifIcon = (
const NotifIcon = (): JSX.Element => (
<label
halign={Gtk.Align.CENTER}
className={'bar-button-icon notifications txt-icon bar'}
@@ -52,7 +52,7 @@ export const Notifications = (): BarBoxChild => {
/>
);
const notifLabel = (
const NotifLabel = (): JSX.Element => (
<label
halign={Gtk.Align.CENTER}
className={'bar-button-label notifications'}
@@ -62,11 +62,16 @@ export const Notifications = (): BarBoxChild => {
if (showTotal) {
if (hideCountForZero && filteredNotifications.length === 0) {
return [notifIcon];
return <NotifIcon />;
}
return [notifIcon, notifLabel];
return (
<box>
<NotifIcon />
<NotifLabel />
</box>
);
}
return [notifIcon];
return <NotifIcon />;
},
);

View File

@@ -11,12 +11,12 @@ import { Astal } from 'astal/gtk3';
const { rightClick, middleClick, scrollUp, scrollDown } = options.bar.volume;
const Volume = (): BarBoxChild => {
const volumeIcon = (isMuted: boolean, vol: number): JSX.Element => {
return <label className={'bar-button-icon volume txt-icon bar'} label={getIcon(isMuted, vol)} />;
const VolumeIcon = ({ isMuted, volume }: VolumeIconProps): JSX.Element => {
return <label className={'bar-button-icon volume txt-icon bar'} label={getIcon(isMuted, volume)} />;
};
const volumeLabel = (vol: number): JSX.Element => {
return <label className={'bar-button-label volume'} label={`${Math.round(vol * 100)}%`} />;
const VolumeLabel = ({ volume }: VolumeLabelProps): JSX.Element => {
return <label className={'bar-button-label volume'} label={`${Math.round(volume * 100)}%`} />;
};
const componentTooltip = Variable.derive(
@@ -49,9 +49,15 @@ const Volume = (): BarBoxChild => {
],
(showLabel, vol, isMuted) => {
if (showLabel) {
return [volumeIcon(isMuted, vol), volumeLabel(vol)];
return (
<box>
<VolumeIcon isMuted={isMuted} volume={vol} />
<VolumeLabel volume={vol} />
</box>
);
}
return [volumeIcon(isMuted, vol)];
return <VolumeIcon isMuted={isMuted} volume={vol} />;
},
);
const component = (
@@ -117,4 +123,13 @@ const Volume = (): BarBoxChild => {
};
};
interface VolumeIconProps {
isMuted: boolean;
volume: number;
}
interface VolumeLabelProps {
volume: number;
}
export { Volume };

View File

@@ -36,7 +36,7 @@ export const getWindowMatch = (client: AstalHyprland.Client): Record<string, str
['opera', '', 'Opera'],
['vivaldi', '󰖟', 'Vivaldi'],
['waterfox', '󰖟', 'Waterfox'],
['thorium', '󰖟', 'Waterfox'],
['thorium', '󰖟', 'Thorium'],
['tor-browser', '', 'Tor Browser'],
['floorp', '󰈹', 'Floorp'],
@@ -49,6 +49,7 @@ export const getWindowMatch = (client: AstalHyprland.Client): Record<string, str
['tilix', '', 'Tilix'],
['xterm', '', 'XTerm'],
['urxvt', '', 'URxvt'],
['com.mitchellh.ghostty', '󰊠', 'Ghostty'],
['st', '', 'st Terminal'],
// Development Tools

View File

@@ -13,6 +13,26 @@ const { leftClick, rightClick, middleClick, scrollDown, scrollUp } = options.bar
const ClientTitle = (): BarBoxChild => {
const { custom_title, class_name, label, icon, truncation, truncation_size } = options.bar.windowtitle;
const ClientIcon = ({ client }: ClientIconProps): JSX.Element => {
return <label className={'bar-button-icon windowtitle txt-icon bar'} label={getWindowMatch(client).icon} />;
};
const ClientLabel = ({
client,
useCustomTitle,
useClassName,
showIcon,
truncate,
truncationSize,
}: ClientLabelProps): JSX.Element => {
return (
<label
className={`bar-button-label windowtitle ${showIcon ? '' : 'no-icon'}`}
label={truncateTitle(getTitle(client, useCustomTitle, useClassName), truncate ? truncationSize : -1)}
/>
);
};
const componentClassName = Variable.derive(
[bind(options.theme.bar.buttons.style), bind(label)],
(style: string, showLabel: boolean) => {
@@ -48,22 +68,18 @@ const ClientTitle = (): BarBoxChild => {
const children: JSX.Element[] = [];
if (showIcon) {
children.push(
<label
className={'bar-button-icon windowtitle txt-icon bar'}
label={getWindowMatch(client).icon}
/>,
);
children.push(<ClientIcon client={client} />);
}
if (showLabel) {
children.push(
<label
className={`bar-button-label windowtitle ${showIcon ? '' : 'no-icon'}`}
label={truncateTitle(
getTitle(client, useCustomTitle, useClassName),
truncate ? truncationSize : -1,
)}
<ClientLabel
client={client}
useCustomTitle={useCustomTitle}
useClassName={useClassName}
truncate={truncate}
truncationSize={truncationSize}
showIcon={showIcon}
/>,
);
}
@@ -122,4 +138,17 @@ const ClientTitle = (): BarBoxChild => {
};
};
interface ClientIconProps {
client: AstalHyprland.Client;
}
interface ClientLabelProps {
client: AstalHyprland.Client;
useCustomTitle: boolean;
useClassName: boolean;
showIcon: boolean;
truncate: boolean;
truncationSize: number;
}
export { ClientTitle };

View File

@@ -94,13 +94,15 @@ function isWorkspaceValidForMonitor(
});
const currentMonitorName = monitorNameMap[monitorId];
const currentMonitorWorkspaceRules = workspaceMonitorRules[currentMonitorName];
const currentMonitorWorkspaceRules = workspaceMonitorRules[currentMonitorName] ?? [];
const activeWorkspaceIds = new Set(allWorkspaceInstances.map((ws) => ws.id));
const filteredWorkspaceRules = currentMonitorWorkspaceRules.filter((ws) => !activeWorkspaceIds.has(ws));
if (currentMonitorWorkspaceRules === undefined) {
if (filteredWorkspaceRules === undefined) {
return false;
}
return currentMonitorWorkspaceRules.includes(workspaceId);
return filteredWorkspaceRules.includes(workspaceId);
}
/**
@@ -319,6 +321,12 @@ export function getWorkspacesToRender(
);
const activeWorkspacesForCurrentMonitor = activeWorkspaceIds.filter((workspaceId) => {
const metadataForWorkspace = allWorkspaceInstances.find((workspaceObj) => workspaceObj.id === workspaceId);
if (metadataForWorkspace) {
return metadataForWorkspace?.monitor?.id === monitorId;
}
if (
currentMonitorInstance &&
Object.hasOwnProperty.call(workspaceMonitorRules, currentMonitorInstance.name) &&
@@ -326,8 +334,6 @@ export function getWorkspacesToRender(
) {
return workspaceMonitorRules[currentMonitorInstance.name].includes(workspaceId);
}
const metadataForWorkspace = allWorkspaceInstances.find((workspaceObj) => workspaceObj.id === workspaceId);
return metadataForWorkspace?.monitor?.id === monitorId;
});
if (isMonitorSpecific) {

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

@@ -4,8 +4,8 @@ import { App, Gtk } from 'astal/gtk3';
import { bind } from 'astal';
export default (): JSX.Element => (
<PopupWindow name="verification" transition="crossfade">
<box className="verification">
<PopupWindow name="verification" transition="crossfade" layout={'center'}>
<box className="verification" expand={false}>
<box className="verification-content" expand vertical>
<box className="text-box" vertical>
<label className="title" label={bind(powermenu, 'title').as((t) => t.toUpperCase())} />

View File

@@ -57,8 +57,7 @@ const Layout: LayoutFunction = (name: string, child: GtkWidget, transition: Gtk.
'top-right': () => (
<box>
<Padding name={name} />
<box hexpand vertical>
<Padding name={name} opts={{ vexpand: false, className: 'event-top-padding' }} />
<box hexpand={false} vertical>
<PopupRevealer name={name} child={child} transition={transition} />
<Padding name={name} />
</box>
@@ -77,9 +76,7 @@ const Layout: LayoutFunction = (name: string, child: GtkWidget, transition: Gtk.
),
'top-left': () => (
<box>
<Padding name={name} />
<box hexpand={false} vertical>
<Padding name={name} opts={{ vexpand: false, className: 'event-top-padding' }} />
<PopupRevealer name={name} child={child} transition={transition} />
<Padding name={name} />
</box>

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

@@ -5,7 +5,6 @@
.bar-button-label.volume {
color: if($bar-buttons-monochrome, $bar-buttons-text, $bar-buttons-volume-text);
min-width: 2.2em;
margin-left: $bar-buttons-volume-spacing;
}

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

@@ -26,7 +26,7 @@ class Wallpaper extends GObject.Object {
'--transition-duration',
'1.5',
'--transition-fps',
'30',
'60',
'--transition-pos',
cursorPosition.replace(' ', ''),
WP,
@@ -100,7 +100,7 @@ class Wallpaper extends GObject.Object {
}
});
if (dependencies('swww') && options.wallpaper.enable.get()) {
if (options.wallpaper.enable.get() && dependencies('swww')) {
this.#isRunning = true;
monitorFile(WP, () => {

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"
}