Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ set(IMGUI_SOURCES
set(WAYLAND_PROTOCOLS
src/wayland/protocols/wlr-layer-shell-unstable-v1-client-protocol.c
src/wayland/protocols/xdg-shell-client-protocol.c
src/wayland/protocols/hyprland-toplevel-export-v1-client-protocol.c
)

# INIH
Expand Down Expand Up @@ -100,6 +101,7 @@ add_executable(hyprwat
src/hyprland/ipc.cpp
src/wayland/wayland.cpp
src/wayland/display.cpp
src/wayland/shm.cpp
src/wayland/layer_surface.cpp
src/wayland/input.cpp
src/renderer/egl_context.cpp
Expand All @@ -109,11 +111,13 @@ add_executable(hyprwat
src/frames/text.cpp
src/frames/custom.cpp
src/frames/images.cpp
src/frames/overview.cpp
src/flows/simple_flows.cpp
src/flows/wifi_flow.cpp
src/flows/audio_flow.cpp
src/flows/custom_flow.cpp
src/flows/wallpaper_flow.cpp
src/flows/overview_flow.cpp
src/net/network_manager.cpp
src/audio/audio.cpp
src/wallpaper/thumbnail.cpp
Expand Down Expand Up @@ -170,7 +174,7 @@ install(FILES man/hyprwat.6
include(InstallRequiredSystemLibraries)

set(CPACK_PACKAGE_NAME "hyprwat")
set(CPACK_PACKAGE_VERSION "0.9.2")
set(CPACK_PACKAGE_VERSION "0.10.0")
set(CPACK_PACKAGE_CONTACT "zack@bartel.com")
set(CPACK_GENERATOR "DEB;RPM;TGZ")

Expand Down
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ run-custom: debug
run-wallpaper: debug
./build/debug/hyprwat --wallpaper ~/.local/share/wallpapers

run-overview: debug
./build/debug/hyprwat --overview

reset-wifi:
sudo nmcli device disconnect wlan0
sudo nmcli device connect wlan0
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ hyprwat creates a popup menu at your cursor position where you can select from a
- **WiFi selector**: Built-in support for selecting WiFi networks (via dbus and NetworkManager
- **Audio selector**: Built-in support for selecting audio input/output devices (via Pipewire)
- **Wallpaper selection**: Easily select a wallpaper from a directory of images (hyprpaper only)
- **Workspace overview**: Preview all open workspaces and their windows with a dynamic expose-like overview
- **Custom menus**: Define your own menus using simple YAML configuration files
- **Theming**: Customize the appearance with a configuration file

Expand Down Expand Up @@ -67,6 +68,7 @@ If no arguments are provided, hyprwat will read from stdin, expecting one item p
- `--password <hint>`: Show a password input prompt (masked input) with optional hint text
- `--audio`: Show audio input/output device selector (requires pipewire)
- `--wifi`: Show WiFi network selection
- `--overview`: Show a visual workspace overview and selector
- `--custom <file>`: Load a custom menu from a YAML configuration file
- `--wallpaper <dir>`: Select a wallpaper from the specified directory (for hyprpaper)

Expand Down Expand Up @@ -98,6 +100,9 @@ hyprwat --custom ~/.config/hyprwat/menus/powermenu.yaml
# Wallpaper selection from a directory
hyprwat --wallpaper ~/.local/share/wallpapers

# Visual workspace overview and navigation
hyprwat --overview

```
See the [examples](examples) directory for more.

Expand Down
19 changes: 18 additions & 1 deletion man/hyprwat.6
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.TH HYPRWAT 6 "November 2025" "hyprwat 0.9.2" "User Commands"
.TH HYPRWAT 6 "March 2026" "hyprwat 0.10.0" "User Commands"
.SH NAME
hyprwat \- A Hyprland menu utility to present selectable options with a customizable interface
.SH SYNOPSIS
Expand All @@ -18,6 +18,9 @@ hyprwat \- A Hyprland menu utility to present selectable options with a customiz
--audio
.br
.B hyprwat
--overview
.br
.B hyprwat
--custom \fIconfig.yaml\fR
.br
.B hyprwat
Expand Down Expand Up @@ -91,6 +94,12 @@ Select an image file from the specified directory to set as the desktop wallpape
$ hyprwat --wallpaper ~/.local/share/wallpapers
.EE
.TP
.B OVERVIEW MODE
Show a visual overview of all workspaces and their windows, allowing you to easily browse and switch to a selected workspace.
.EX
$ hyprwat --overview
.EE
.TP
.B CUSTOM MODE
Render a fully custom menu from a YAML configuration file. Custom menus
support multiple widget types (buttons, inputs, sliders, checkboxes, color
Expand All @@ -116,6 +125,9 @@ Show Wi-Fi network selection mode.
.BR --audio
Show audio input/output device selection mode.
.TP
.BR --overview
Show a visual workspace overview and selector.
.TP
.BR --wallpaper
Select an image file from the specified directory to set as the desktop wallpaper.
.TP
Expand Down Expand Up @@ -267,6 +279,11 @@ $ hyprwat --wifi
$ hyprwat --audio
.EE
.TP
Show the workspace overview:
.EX
$ hyprwat --overview
.EE
.TP
Launch a custom control panel:
.EX
$ hyprwat --custom ~/.config/hyprwat/control-panel.yaml
Expand Down
31 changes: 31 additions & 0 deletions src/flows/overview_flow.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#include "overview_flow.hpp"
#include "../frames/overview.hpp"
#include "../wayland/display.hpp"

OverviewFlow::OverviewFlow(hyprland::Control& hyprctl, wl::Display& wlDisplay, int logicalWidth, int logicalHeight)
: hyprctl(hyprctl), logicalWidth(logicalWidth), logicalHeight(logicalHeight) {
mainFrame = std::make_unique<OverviewFrame>(hyprctl, wlDisplay, logicalWidth, logicalHeight);
}

OverviewFlow::~OverviewFlow() = default;

Frame* OverviewFlow::getCurrentFrame() { return mainFrame.get(); }

bool OverviewFlow::handleResult(const FrameResult& result) {
if (result.action == FrameResult::Action::SUBMIT) {
finalResult = result.value;
done = true;

// dispatch to selected workspace
int workspaceId = std::stoi(finalResult);
hyprctl.dispatchWorkspace(workspaceId);
} else if (result.action == FrameResult::Action::CANCEL) {
done = true;
}

return !done;
}

bool OverviewFlow::isDone() const { return done; }

std::string OverviewFlow::getResult() const { return finalResult; }
28 changes: 28 additions & 0 deletions src/flows/overview_flow.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#pragma once

#include "../hyprland/ipc.hpp"
#include "../ui.hpp"
#include "flow.hpp"

namespace wl {
class Display;
}

class OverviewFlow : public Flow {
public:
OverviewFlow(hyprland::Control& hyprctl, wl::Display& wlDisplay, int logicalWidth, int logicalHeight);
~OverviewFlow() override;

Frame* getCurrentFrame() override;
bool handleResult(const FrameResult& result) override;
bool isDone() const override;
std::string getResult() const override;

private:
hyprland::Control& hyprctl;
int logicalWidth;
int logicalHeight;
std::unique_ptr<Frame> mainFrame;
bool done = false;
std::string finalResult;
};
Loading
Loading