Skip to content

Commit

Permalink
Merge branch 'master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
benvonh authored Dec 24, 2024
2 parents b6ca883 + f26ea6c commit ea15ce5
Show file tree
Hide file tree
Showing 23 changed files with 188 additions and 78 deletions.
3 changes: 1 addition & 2 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
pkgs.glib
pkgs.bluez-tools
pkgs.grimblast
pkgs.gpu-screen-recorder
pkgs.brightnessctl
pkgs.gnome-bluetooth
(pkgs.python3.withPackages (python-pkgs: with python-pkgs; [
Expand All @@ -67,7 +66,7 @@
pkgs.gvfs
pkgs.swww
pkgs.pywal
];
] ++ (nixpkgs.lib.optionals (system == "x86_64-linux") [pkgs.gpu-screen-recorder]);
};
});

Expand Down
9 changes: 7 additions & 2 deletions scripts/checkUpdates.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,19 @@
check_arch_updates() {
official_updates=0
aur_updates=0
if command -v paru &> /dev/null; then
aur_helper="paru"
else
aur_helper="yay"
fi

if [ "$1" = "-y" ]; then
aur_updates=$(yay -Qum 2>/dev/null | wc -l)
aur_updates=$($aur_helper -Qum 2>/dev/null | wc -l)
elif [ "$1" = "-p" ]; then
official_updates=$(checkupdates 2>/dev/null | wc -l)
else
official_updates=$(checkupdates 2>/dev/null | wc -l)
aur_updates=$(yay -Qum 2>/dev/null | wc -l)
aur_updates=$($aur_helper -Qum 2>/dev/null | wc -l)
fi

total_updates=$((official_updates + aur_updates))
Expand Down
8 changes: 5 additions & 3 deletions src/components/bar/modules/netstat/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ const {
rateUnit,
dynamicIcon,
icon,
networkInLabel,
networkOutLabel,
round,
leftClick,
rightClick,
Expand Down Expand Up @@ -47,11 +49,11 @@ export const Netstat = (): BarBoxChild => {
const renderNetworkLabel = (lblType: NetstatLabelType, networkService: NetworkResourceData): string => {
switch (lblType) {
case 'in':
return ` ${networkService.in}`;
return `${networkInLabel.get()} ${networkService.in}`;
case 'out':
return ` ${networkService.out}`;
return `${networkOutLabel.get()} ${networkService.out}`;
default:
return ` ${networkService.in} ${networkService.out}`;
return `${networkInLabel.get()} ${networkService.in} ${networkOutLabel.get()} ${networkService.out}`;
}
};

Expand Down
8 changes: 8 additions & 0 deletions src/components/bar/modules/updates/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ const {
updateCommand,
label,
padZero,
autoHide,
pollingInterval,
icon,
leftClick,
Expand All @@ -21,6 +22,7 @@ const {

const pendingUpdates: Variable<string> = Variable('0');
const postInputUpdater = Variable(true);
const isVis = Variable(!autoHide.get());

const processUpdateCount = (updateCount: string): string => {
if (!padZero.get()) return updateCount;
Expand All @@ -37,9 +39,14 @@ const updatesPoller = new BashPoller<string, []>(

updatesPoller.initialize('updates');

Variable.derive([bind(autoHide)], (autoHideModule) => {
isVis.set(!autoHideModule || (autoHideModule && parseFloat(pendingUpdates.get()) > 0));
});

const updatesIcon = Variable.derive(
[bind(icon.pending), bind(icon.updated), bind(pendingUpdates)],
(pendingIcon, updatedIcon, pUpdates) => {
isVis.set(!autoHide.get() || (autoHide.get() && parseFloat(pUpdates) > 0));
return parseFloat(pUpdates) === 0 ? updatedIcon : pendingIcon;
},
);
Expand All @@ -49,6 +56,7 @@ export const Updates = (): BarBoxChild => {
textIcon: updatesIcon(),
tooltipText: bind(pendingUpdates).as((v) => `${v} updates available`),
boxClass: 'updates',
isVis: isVis,
label: bind(pendingUpdates),
showLabelBinding: bind(label),
props: {
Expand Down
2 changes: 1 addition & 1 deletion src/components/bar/modules/workspaces/helpers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ const navigateWorkspace = (
while (attempts < workspacesList.length) {
const targetWS = workspacesList[newIndex];
if (!isWorkspaceIgnored(ignoredWorkspaces, targetWS)) {
hyprlandService.message_async(`dispatch workspace ${targetWS}`);
hyprlandService.dispatch('workspace', targetWS.toString());
return;
}
newIndex = (newIndex + step + workspacesList.length) % workspacesList.length;
Expand Down
25 changes: 15 additions & 10 deletions src/components/bar/modules/workspaces/index.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import options from 'src/options';
import { createThrottledScrollHandlers, getCurrentMonitorWorkspaces } from './helpers';
import { BarBoxChild, SelfButton } from 'src/lib/types/bar';
import { BarBoxChild } from 'src/lib/types/bar';
import { WorkspaceModule } from './workspaces';
import { bind, Variable } from 'astal';
import { GtkWidget } from 'src/lib/types/widget';
import { Gdk } from 'astal/gtk3';
import { Astal, Gdk } from 'astal/gtk3';
import { isScrollDown, isScrollUp } from 'src/lib/utils';

const { workspaces, scroll_speed } = options.bar.workspaces;

Expand All @@ -27,23 +28,27 @@ const Workspaces = (monitor = -1): BarBoxChild => {
boxClass: 'workspaces',
isBox: true,
props: {
setup: (self: SelfButton): void => {
setup: (self: Astal.EventBox): void => {
let scrollHandlers: number;
Variable.derive([bind(scroll_speed)], (scroll_speed) => {
if (scrollHandlers) {
self.disconnect(scrollHandlers);
}

const { throttledScrollUp, throttledScrollDown } = createThrottledScrollHandlers(
scroll_speed,
currentMonitorWorkspaces,
);

const scrollHandlers = self.connect('scroll-event', (_: GtkWidget, event: Gdk.Event) => {
const eventDirection = event.get_scroll_direction()[1];
if (eventDirection === Gdk.ScrollDirection.UP) {
throttledScrollUp();
} else if (eventDirection === Gdk.ScrollDirection.DOWN) {
scrollHandlers = self.connect('scroll-event', (_: GtkWidget, event: Gdk.Event) => {
if (isScrollUp(event)) {
throttledScrollDown();
}
});

self.disconnect(scrollHandlers);
if (isScrollDown(event)) {
throttledScrollUp();
}
});
});
},
},
Expand Down
14 changes: 13 additions & 1 deletion src/components/bar/settings/config.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,12 @@ export const CustomModuleSettings = (): JSX.Element => {
/>
<Option opt={options.bar.customModules.netstat.icon} title="Netstat Icon" type="string" />
<Option opt={options.bar.customModules.netstat.label} title="Show Label" type="boolean" />
<Option opt={options.bar.customModules.netstat.networkInLabel} title="Network In Label" type="string" />
<Option
opt={options.bar.customModules.netstat.networkOutLabel}
title="Network Out Label"
type="string"
/>
<Option
opt={options.bar.customModules.netstat.rateUnit}
title="Rate Unit"
Expand All @@ -170,7 +176,7 @@ export const CustomModuleSettings = (): JSX.Element => {
<Option opt={options.bar.customModules.netstat.round} title="Round" type="boolean" />
<Option
opt={options.bar.customModules.netstat.pollingInterval}
title="Polling Interval"
title="Polling Interval (ms)"
type="number"
min={100}
max={60 * 24 * 1000}
Expand Down Expand Up @@ -221,6 +227,12 @@ export const CustomModuleSettings = (): JSX.Element => {
/>
<Option opt={options.bar.customModules.updates.icon.updated} title="No Updates Icon" type="string" />
<Option opt={options.bar.customModules.updates.label} title="Show Label" type="boolean" />
<Option
opt={options.bar.customModules.updates.autoHide}
title="Auto Hide"
subtitle="Hides module when no updates are available."
type="boolean"
/>
<Option opt={options.bar.customModules.updates.padZero} title="Pad with 0" type="boolean" />
<Option opt={options.theme.bar.buttons.modules.updates.spacing} title="Spacing" type="string" />
<Option
Expand Down
3 changes: 2 additions & 1 deletion src/components/bar/shared/Module.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ export const Module = ({
label,
tooltipText,
boxClass,
isVis,
props = {},
showLabelBinding = bind(undefinedVar),
showLabel,
Expand Down Expand Up @@ -86,7 +87,7 @@ export const Module = ({
return {
component,
tooltip_text: tooltipText,
isVisible: true,
isVis: isVis,
boxClass,
props,
};
Expand Down
6 changes: 3 additions & 3 deletions src/components/bar/shared/WidgetContainer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ export const WidgetContainer = (child: BarBoxChild): JSX.Element => {

if (child.isBox) {
return (
<box className={buttonClassName} visible={computeVisible(child)}>
{child.component}
</box>
<eventbox visible={computeVisible(child)} {...child.props}>
<box className={buttonClassName}>{child.component}</box>
</eventbox>
);
}

Expand Down
2 changes: 1 addition & 1 deletion src/components/menus/audio/active/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const Header = (): JSX.Element => (
<box className={'menu-label-container volume selected'} halign={Gtk.Align.FILL}>
<label className={'menu-label audio volume'} halign={Gtk.Align.START} hexpand label={'Volume'} />
<button
className={'menu-label slider-toggle'}
className={'menu-icon-button menu-label slider-toggle volume'}
onClick={(_, event) => {
if (!isPrimaryClick(event)) {
return;
Expand Down
17 changes: 8 additions & 9 deletions src/components/menus/audio/active/sliderItem/Slider.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { bind } from 'astal';
import { Gdk, Gtk } from 'astal/gtk3';
import AstalWp from 'gi://AstalWp?version=0.1';
import { capitalizeFirstLetter } from 'src/lib/utils';
import { capitalizeFirstLetter, isScrollDown, isScrollUp } from 'src/lib/utils';
import options from 'src/options';

const { raiseMaximumVolume } = options.menus.volume;
Expand Down Expand Up @@ -34,16 +34,15 @@ export const Slider = ({ device, type }: SliderProps): JSX.Element => {
}}
setup={(self) => {
self.connect('scroll-event', (_, event: Gdk.Event) => {
const [directionSuccess, direction] = event.get_scroll_direction();
const [deltasSuccess, , yScroll] = event.get_scroll_deltas();

if (directionSuccess) {
const newVolume = device.volume + (direction === Gdk.ScrollDirection.DOWN ? 0.05 : -0.05);
device.set_volume(Math.min(newVolume, 1));
} else if (deltasSuccess) {
const newVolume = device.volume - yScroll / 100;
if (isScrollUp(event)) {
const newVolume = device.volume + 0.05;
device.set_volume(Math.min(newVolume, 1));
}

if (isScrollDown(event)) {
const newVolume = device.volume - 0.05;
device.set_volume(newVolume);
}
});
}}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { isDiscovering } from './helper';

export const DiscoverButton = (): JSX.Element => (
<button
className="menu-icon-button search"
className="menu-icon-button search bluetooth"
valign={Gtk.Align.CENTER}
onClick={(_, self) => {
if (!isPrimaryClick(self)) {
Expand Down
11 changes: 5 additions & 6 deletions src/components/menus/dashboard/profile/Profile.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { bind, exec } from 'astal';
import GdkPixbuf from 'gi://GdkPixbuf';
import { Gtk } from 'astal/gtk3';
import options from 'src/options.js';
import { normalizePath, isAnImage } from 'src/lib/utils.js';

const { image, name } = options.menus.dashboard.powermenu.avatar;

Expand All @@ -11,12 +11,11 @@ const ProfilePicture = (): JSX.Element => {
className={'profile-picture'}
halign={Gtk.Align.CENTER}
css={bind(image).as((img) => {
try {
GdkPixbuf.Pixbuf.new_from_file(img);
return `background-image: url("${img}")`;
} catch {
return `background-image: url("${SRC_DIR}/assets/hyprpanel.png")`;
if (isAnImage(img)) {
return `background-image: url("${normalizePath(img)}")`;
}

return `background-image: url("${SRC_DIR}/assets/hyprpanel.png")`;
})}
/>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,36 +24,60 @@ const ShortcutButton = ({ shortcut, ...props }: ShortcutButtonProps): JSX.Elemen
};

export const LeftShortcut1 = (): JSX.Element => {
if (!hasCommand(left.shortcut1)) {
return <box />;
}

return (
<ShortcutButton
shortcut={left.shortcut1}
className={`dashboard-button top-button ${hasCommand(left.shortcut1) ? 'paired' : ''}`}
className={`dashboard-button top-button ${hasCommand(left.shortcut2) ? 'paired' : ''}`}
/>
);
};

export const LeftShortcut2 = (): JSX.Element => {
if (!hasCommand(left.shortcut2)) {
return <box />;
}

return <ShortcutButton shortcut={left.shortcut2} className={`dashboard-button`} />;
};

export const LeftShortcut3 = (): JSX.Element => {
if (!hasCommand(left.shortcut3)) {
return <box />;
}

return (
<ShortcutButton
shortcut={left.shortcut3}
className={`dashboard-button top-button ${hasCommand(left.shortcut3) ? 'paired' : ''}`}
className={`dashboard-button top-button ${hasCommand(left.shortcut4) ? 'paired' : ''}`}
/>
);
};

export const LeftShortcut4 = (): JSX.Element => {
if (!hasCommand(left.shortcut4)) {
return <box />;
}

return <ShortcutButton shortcut={left.shortcut4} className={`dashboard-button `} />;
};

export const RightShortcut1 = (): JSX.Element => {
if (!hasCommand(right.shortcut1)) {
return <box />;
}

return <ShortcutButton shortcut={right.shortcut1} className={`dashboard-button top-button paired`} />;
};

export const RightShortcut3 = (): JSX.Element => {
if (!hasCommand(right.shortcut3)) {
return <box />;
}

return <ShortcutButton shortcut={right.shortcut3} className={`dashboard-button top-button paired`} />;
};

Expand Down
8 changes: 4 additions & 4 deletions src/components/menus/dashboard/shortcuts/sections/Column.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { BindableChild } from 'astal/gtk3/astalify';

export const LeftColumn = ({ visibleClass, children }: LeftColumnProps): JSX.Element => {
export const LeftColumn = ({ isVisible, children }: LeftColumnProps): JSX.Element => {
return (
<box className={`card-button-section-container ${visibleClass ? 'visible' : ''}`}>
{visibleClass ? (
<box className={`card-button-section-container ${isVisible ? 'visible' : ''}`}>
{isVisible ? (
<box vertical hexpand vexpand>
{children}
</box>
Expand All @@ -25,7 +25,7 @@ export const RightColumn = ({ children }: RightColumnProps): JSX.Element => {
};

interface LeftColumnProps {
visibleClass?: boolean;
isVisible?: boolean;
children?: BindableChild | BindableChild[];
}

Expand Down
Loading

0 comments on commit ea15ce5

Please sign in to comment.