diff --git a/README.md b/README.md index 6f48177..fcfa799 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,40 @@ -# 🚧 Migrating to Astal and AGSv2 🚧 - -Hyprpanel is upgrading to AGSv2 and Astal - -🔧 No new features or most bugs will be worked on until migration is complete. - -

- - Hyprpanel logo - -

-
-

- wiki - discord chat -

-
- # HyprPanel 🚀 -A panel built for Hyprland with [AGS](https://github.com/Aylur/ags) +A panel built for Hyprland with [Astal](https://github.com/Aylur/astal) ![HyprPanel1](./assets/hp1.png) ![HyprPanel2](./assets/hp2.png) > NOTE: If you would like to support the project, please instead [donate to Aylur](https://ko-fi.com/aylur) who put in tremendous effort to build AGS. Hyprpanel likely wouldn't exist without it. -## Installation +## Information -The [HyprPanel Wiki](https://hyprpanel.com/getting_started/installation.html) contains in depth instructions for installing the panel and all of its dependencies. The instructions below are general instructions for installing the panel. +The [HyprPanel Wiki](https://hyprpanel.com/getting_started/installation.html) contains in depth instructions for configuring and installing the panel and all of its dependencies. The instructions below are just the general instructions for installing the panel. -## Requirements +## Arch -Bun - -```sh -curl -fsSL https://bun.sh/install | bash && \ - sudo ln -s $HOME/.bun/bin/bun /usr/local/bin/bun +```bash +yay -S ags-hyprpanel-git ``` +## From Source + ### Required ```sh -pipewire - -## Resource monitoring modules +aylurs-gtk-shell-git +wireplumber libgtop - -## Bluetooth menu utilities bluez bluez-utils - -## Copy/Paste utilities -wl-clipboard - -## Compiler for sass/scss -dart-sass - -## Brightness module for OSD -brightnessctl - -## AGS requirements networkmanager -gnome-bluetooth-3.0 +dart-sass +wl-clipboard +upower +gvfs ``` -::: warning -HyprPanel will not run without the required dependencies. -::: +**NOTE: HyprPanel will not run without the required dependencies.** ### Optional @@ -75,6 +43,9 @@ HyprPanel will not run without the required dependencies. python python-gpustat +## To control screen/keyboard brightness +brightnessctl + ## Only if a pywal hook from wallpaper changes applied through settings is desired pywal @@ -114,13 +85,13 @@ swww pacman: ```bash -sudo pacman -S pipewire libgtop bluez bluez-utils btop networkmanager dart-sass wl-clipboard brightnessctl swww python gnome-bluetooth-3.0 pacman-contrib power-profiles-daemon gvfs + sudo pacman -S --needed wireplumber libgtop bluez bluez-utils btop networkmanager dart-sass wl-clipboard brightnessctl swww python upower pacman-contrib power-profiles-daemon gvfs ``` AUR: ```bash -yay -S grimblast-git gpu-screen-recorder hyprpicker matugen-bin python-gpustat aylurs-gtk-shell-git hyprsunset-git hypridle-git +yay -S --needed aylurs-gtk-shell-git grimblast-git gpu-screen-recorder-git hyprpicker matugen-bin python-gpustat hyprsunset-git hypridle-git ``` ### Fedora @@ -135,14 +106,14 @@ sudo dnf config-manager --save --setopt=copr:copr.fedorainfracloud.org:heus-sueh DNF: -```bash -sudo dnf install pipewire libgtop2 bluez bluez-tools grimblast hyprpicker btop NetworkManager wl-clipboard swww brightnessctl gnome-bluetooth aylurs-gtk-shell power-profiles-daemon gvfs +```sh +sudo dnf install wireplumber upower libgtop2 bluez bluez-tools grimblast hyprpicker btop NetworkManager wl-clipboard swww brightnessctl gnome-bluetooth aylurs-gtk-shell power-profiles-daemon gvfs nodejs ``` -bun: +npm: ```bash -bun install -g sass +npm install -g sass ``` flatpak: @@ -163,41 +134,28 @@ sudo dnf install python python3-pip; pip install gpustat pywal For NixOS/Home-Manager, see [NixOS & Home-Manager instructions](#nixos--home-manager). -## Instructions +## Installation -### AGS - -Once everything is installed you need to put the contents of this repo in `~/.config/ags`. -If you already have something in `~/.config/ags`, it's recommended that you back it up with: +To install HyprPanel, you can run the following commands: ```bash -mv $HOME/.config/ags $HOME/.config/ags.bkup +git clone https://github.com/Jas-SinghFSU/HyprPanel.git +cd HyprPanel +meson setup build +meson compile -C build +meson install -C build ``` -Otherwise you can use this command to install the panel: +### Installing NerdFonts -```bash -git clone https://github.com/Jas-SinghFSU/HyprPanel.git && \ - ln -s $(pwd)/HyprPanel $HOME/.config/ags +HyprPanel uses [Nerdfonts](https://www.nerdfonts.com/) to display icons. You can install them using the following command from within the HyprPanel's `scripts` directory: + +```sh +# Installs the JetBrainsMono NerdFonts used for icons +./scripts/install_fonts.sh ``` -### Nerd Fonts - -Additionally, you need to ensure that you have a [Nerd Font](https://www.nerdfonts.com/font-downloads) installed for your icons to render properly. - -### Launch the panel - -Afterwards you can run the panel with the following command in your terminal: - -```bash -ags -``` - -Or you can add it to your Hyprland config (hyprland.conf) to auto-start with: - -```bash -exec-once = ags -``` +If you install the fonts after installing HyperPanel, you will need to restart HyperPanel for the changes to take effect. ### NixOS & Home-Manager @@ -263,97 +221,22 @@ wayland.windowManager.hyprland.settings.exec-once = [ ``` +### Launch the panel + +Afterwards you can run the panel with the following command in your terminal: + +```bash +hyprpanel +``` + +Or you can add it to your Hyprland config (hyprland.conf) to auto-start with: + +```bash +exec-once = hyprpanel +``` + ### Notifications HyprPanel handles notifications through the AGS built-in notification service. If you're already using a notification daemon such as Dunst or Mako, you may have to stop them to prevent conflicts with HyprPanel. > NOTE: If your system is in a language other than English, the resource monitor in the dashboard may not work properly. - -## Configuration - -The HyprPanel comes with a configuration menu which is available by opening the Dashboard menu (click the button in the bar with the default - Arch - icon) and then clicking the Gear icon. - -### Size - -The panel is automatically scaled based on your font size in `Configuration > General`. - -### Specifying bar layouts per monitor - -To specify layouts for each monitor you can create a JSON object such as: - -```JSON -{ - "0": { - "left": [ - "dashboard", - "workspaces", - "windowtitle" - ], - "middle": [ - "media" - ], - "right": [ - "volume", - "clock", - "notifications" - ] - }, - "1": { - "left": [ - "dashboard", - "workspaces", - "windowtitle" - ], - "middle": [ - "media" - ], - "right": [ - "volume", - "clock", - "notifications" - ] - }, - "2": { - "left": [ - "dashboard", - "workspaces", - "windowtitle" - ], - "middle": [ - "media" - ], - "right": [ - "volume", - "network", - "bluetooth", - "systray", - "clock", - "notifications" - ] - } -} -``` - -Where each monitor is defined by its index (0, 1, 2 in this case) and each section (left, middle, right) contains one or more of the following modules: - -```js -'battery'; -'dashboard'; -'workspaces'; -'windowtitle'; -'media'; -'notifications'; -'volume'; -'network'; -'bluetooth'; -'clock'; -'systray'; -``` - -Since the text-box in the options dialog isn't sufficient, it is recommended that you create this JSON configuration in a text editor elsewhere and paste it into the layout text-box under Configuration > Bar > "Bar Layouts for Monitors". - -### Additional Configuration - -#### GPU Tracking - -If you have an NVidia GPU, you can track your GPU usage in your Dashboard by going to your `Settings > Configuration > Dashboard Menu > Track GPU` and turning it on. diff --git a/src/components/bar/modules/systray/index.tsx b/src/components/bar/modules/systray/index.tsx index c2c6ba6..ad47277 100644 --- a/src/components/bar/modules/systray/index.tsx +++ b/src/components/bar/modules/systray/index.tsx @@ -33,7 +33,16 @@ const MenuDefaultIcon = ({ item }: MenuEntryProps): JSX.Element => { }; const MenuEntry = ({ item, child }: MenuEntryProps): JSX.Element => { - const menu = createMenu(item.menuModel, item.actionGroup); + let menu: Gtk.Menu; + + const entryBinding = Variable.derive( + [bind(item, 'menuModel'), bind(item, 'actionGroup')], + (menuModel, actionGroup) => { + if (menuModel && actionGroup) { + menu = createMenu(menuModel, actionGroup); + } + }, + ); return ( diff --git a/src/components/menus/bluetooth/devices/helpers.ts b/src/components/menus/bluetooth/devices/helpers.ts index d4e70f2..af2f296 100644 --- a/src/components/menus/bluetooth/devices/helpers.ts +++ b/src/components/menus/bluetooth/devices/helpers.ts @@ -11,7 +11,9 @@ import { bluetoothService } from 'src/lib/constants/services'; * @returns An array of available Bluetooth devices. */ export const getAvailableBluetoothDevices = (): AstalBluetooth.Device[] => { - const availableDevices = bluetoothService.devices + const bluetoothDevices = bluetoothService.get_devices() ?? []; + + const availableDevices = bluetoothDevices .filter((btDev) => btDev.name !== null) .sort((a, b) => { if (a.connected || a.paired) { diff --git a/src/components/menus/network/wifi/WirelessAPs/helpers.ts b/src/components/menus/network/wifi/WirelessAPs/helpers.ts index 3cad13f..5aa762c 100644 --- a/src/components/menus/network/wifi/WirelessAPs/helpers.ts +++ b/src/components/menus/network/wifi/WirelessAPs/helpers.ts @@ -69,7 +69,7 @@ const dedupeWAPs = (): AstalNetwork.AccessPoint[] => { return []; } - const WAPs = networkService.wifi.accessPoints; + const WAPs = networkService.wifi.get_access_points(); const dedupMap: Record = {}; WAPs.forEach((item: AstalNetwork.AccessPoint) => {