Full Code of hyprwm/Hyprland for AI

main b940b0d2c197 cached
704 files
4.4 MB
1.2M tokens
2382 symbols
1 requests
Download .txt
Showing preview only (4,782K chars total). Download the full file or copy to clipboard to get everything.
Repository: hyprwm/Hyprland
Branch: main
Commit: b940b0d2c197
Files: 704
Total size: 4.4 MB

Directory structure:
gitextract_i75a93nh/

├── .clang-format
├── .clang-format-ignore
├── .clang-tidy
├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   └── bug.yml
│   ├── actions/
│   │   └── setup_base/
│   │       └── action.yml
│   ├── labeler.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── ci.yaml
│       ├── clang-format-check.sh
│       ├── clang-format.yml
│       ├── close-issues.yml
│       ├── labeler.yml
│       ├── man-update.yaml
│       ├── new-pr-comment.yml
│       ├── nix-ci.yml
│       ├── nix-test.yml
│       ├── nix-update-inputs.yml
│       ├── nix.yml
│       ├── release.yaml
│       ├── security-checks.yml
│       └── translation-ai-check.yml
├── .gitignore
├── .gitmodules
├── CMakeLists.txt
├── CODE_OF_CONDUCT.md
├── LICENSE
├── Makefile
├── README.md
├── SECURITY.md
├── VERSION
├── assets/
│   └── hyprland-portals.conf
├── docs/
│   ├── Hyprland.1
│   ├── Hyprland.1.rst
│   ├── ISSUE_GUIDELINES.md
│   ├── hyprctl.1
│   └── hyprctl.1.rst
├── example/
│   ├── hyprland.conf
│   ├── hyprland.desktop.in
│   ├── hyprland.service
│   ├── launch.json
│   ├── screenShader.frag
│   └── swaybg@.service
├── flake.nix
├── hyprctl/
│   ├── CMakeLists.txt
│   ├── hw-protocols/
│   │   └── hyprpaper_core.xml
│   ├── hyprctl.bash
│   ├── hyprctl.fish
│   ├── hyprctl.usage
│   ├── hyprctl.zsh
│   └── src/
│       ├── Strings.hpp
│       ├── helpers/
│       │   └── Memory.hpp
│       ├── hyprpaper/
│       │   ├── Hyprpaper.cpp
│       │   └── Hyprpaper.hpp
│       └── main.cpp
├── hyprland.pc.in
├── hyprpm/
│   ├── CMakeLists.txt
│   ├── hyprpm.bash
│   ├── hyprpm.fish
│   ├── hyprpm.usage
│   ├── hyprpm.zsh
│   └── src/
│       ├── core/
│       │   ├── DataState.cpp
│       │   ├── DataState.hpp
│       │   ├── HyprlandSocket.cpp
│       │   ├── HyprlandSocket.hpp
│       │   ├── Manifest.cpp
│       │   ├── Manifest.hpp
│       │   ├── Plugin.cpp
│       │   ├── Plugin.hpp
│       │   ├── PluginManager.cpp
│       │   └── PluginManager.hpp
│       ├── helpers/
│       │   ├── Colors.hpp
│       │   ├── Die.hpp
│       │   ├── StringUtils.hpp
│       │   ├── Sys.cpp
│       │   └── Sys.hpp
│       ├── main.cpp
│       └── progress/
│           ├── CProgressBar.cpp
│           └── CProgressBar.hpp
├── hyprtester/
│   ├── CMakeLists.txt
│   ├── clients/
│   │   ├── child-window.cpp
│   │   ├── pointer-scroll.cpp
│   │   ├── pointer-warp.cpp
│   │   └── shortcut-inhibitor.cpp
│   ├── plugin/
│   │   ├── Makefile
│   │   ├── build.sh
│   │   └── src/
│   │       ├── globals.hpp
│   │       └── main.cpp
│   ├── protocols/
│   │   └── .gitignore
│   ├── src/
│   │   ├── Log.hpp
│   │   ├── hyprctlCompat.cpp
│   │   ├── hyprctlCompat.hpp
│   │   ├── main.cpp
│   │   ├── shared.hpp
│   │   └── tests/
│   │       ├── clients/
│   │       │   ├── .gitignore
│   │       │   ├── child-window.cpp
│   │       │   ├── pointer-scroll.cpp
│   │       │   ├── pointer-warp.cpp
│   │       │   ├── shortcut-inhibitor.cpp
│   │       │   └── tests.hpp
│   │       ├── main/
│   │       │   ├── animations.cpp
│   │       │   ├── colors.cpp
│   │       │   ├── dwindle.cpp
│   │       │   ├── exec.cpp
│   │       │   ├── gestures.cpp
│   │       │   ├── groups.cpp
│   │       │   ├── hyprctl.cpp
│   │       │   ├── keybinds.cpp
│   │       │   ├── layer.cpp
│   │       │   ├── layout.cpp
│   │       │   ├── master.cpp
│   │       │   ├── misc.cpp
│   │       │   ├── persistent.cpp
│   │       │   ├── scroll.cpp
│   │       │   ├── snap.cpp
│   │       │   ├── solitary.cpp
│   │       │   ├── tags.cpp
│   │       │   ├── tests.hpp
│   │       │   ├── window.cpp
│   │       │   └── workspaces.cpp
│   │       ├── plugin/
│   │       │   ├── plugin.cpp
│   │       │   └── plugin.hpp
│   │       ├── shared.cpp
│   │       └── shared.hpp
│   └── test.conf
├── nix/
│   ├── default.nix
│   ├── formatter.nix
│   ├── hm-module.nix
│   ├── lib.nix
│   ├── module.nix
│   ├── overlays.nix
│   ├── tests/
│   │   └── default.nix
│   └── update-inputs.sh
├── protocols/
│   ├── input-method-unstable-v2.xml
│   ├── kde-server-decoration.xml
│   ├── virtual-keyboard-unstable-v1.xml
│   ├── wayland-drm.xml
│   ├── wlr-data-control-unstable-v1.xml
│   ├── wlr-foreign-toplevel-management-unstable-v1.xml
│   ├── wlr-gamma-control-unstable-v1.xml
│   ├── wlr-layer-shell-unstable-v1.xml
│   ├── wlr-output-management-unstable-v1.xml
│   ├── wlr-output-power-management-unstable-v1.xml
│   ├── wlr-screencopy-unstable-v1.xml
│   └── wlr-virtual-pointer-unstable-v1.xml
├── scripts/
│   ├── generateShaderIncludes.sh
│   ├── hyprlandStaticAsan.diff
│   └── waylandStatic.diff
├── src/
│   ├── Compositor.cpp
│   ├── Compositor.hpp
│   ├── SharedDefs.hpp
│   ├── config/
│   │   ├── ConfigDataValues.hpp
│   │   ├── ConfigDescriptions.hpp
│   │   ├── ConfigManager.cpp
│   │   ├── ConfigManager.hpp
│   │   ├── ConfigValue.cpp
│   │   ├── ConfigValue.hpp
│   │   ├── ConfigWatcher.cpp
│   │   ├── ConfigWatcher.hpp
│   │   └── defaultConfig.hpp
│   ├── debug/
│   │   ├── HyprCtl.cpp
│   │   ├── HyprCtl.hpp
│   │   ├── HyprDebugOverlay.cpp
│   │   ├── HyprDebugOverlay.hpp
│   │   ├── HyprNotificationOverlay.cpp
│   │   ├── HyprNotificationOverlay.hpp
│   │   ├── TracyDefines.hpp
│   │   ├── crash/
│   │   │   ├── CrashReporter.cpp
│   │   │   ├── CrashReporter.hpp
│   │   │   ├── SignalSafe.cpp
│   │   │   └── SignalSafe.hpp
│   │   └── log/
│   │       ├── Logger.cpp
│   │       ├── Logger.hpp
│   │       └── RollingLogFollow.hpp
│   ├── defines.hpp
│   ├── desktop/
│   │   ├── DesktopTypes.hpp
│   │   ├── Workspace.cpp
│   │   ├── Workspace.hpp
│   │   ├── history/
│   │   │   ├── WindowHistoryTracker.cpp
│   │   │   ├── WindowHistoryTracker.hpp
│   │   │   ├── WorkspaceHistoryTracker.cpp
│   │   │   └── WorkspaceHistoryTracker.hpp
│   │   ├── reserved/
│   │   │   ├── ReservedArea.cpp
│   │   │   └── ReservedArea.hpp
│   │   ├── rule/
│   │   │   ├── Engine.cpp
│   │   │   ├── Engine.hpp
│   │   │   ├── Rule.cpp
│   │   │   ├── Rule.hpp
│   │   │   ├── effect/
│   │   │   │   └── EffectContainer.hpp
│   │   │   ├── layerRule/
│   │   │   │   ├── LayerRule.cpp
│   │   │   │   ├── LayerRule.hpp
│   │   │   │   ├── LayerRuleApplicator.cpp
│   │   │   │   ├── LayerRuleApplicator.hpp
│   │   │   │   ├── LayerRuleEffectContainer.cpp
│   │   │   │   └── LayerRuleEffectContainer.hpp
│   │   │   ├── matchEngine/
│   │   │   │   ├── BoolMatchEngine.cpp
│   │   │   │   ├── BoolMatchEngine.hpp
│   │   │   │   ├── IntMatchEngine.cpp
│   │   │   │   ├── IntMatchEngine.hpp
│   │   │   │   ├── MatchEngine.cpp
│   │   │   │   ├── MatchEngine.hpp
│   │   │   │   ├── RegexMatchEngine.cpp
│   │   │   │   ├── RegexMatchEngine.hpp
│   │   │   │   ├── TagMatchEngine.cpp
│   │   │   │   ├── TagMatchEngine.hpp
│   │   │   │   ├── WorkspaceMatchEngine.cpp
│   │   │   │   └── WorkspaceMatchEngine.hpp
│   │   │   ├── utils/
│   │   │   │   └── SetUtils.hpp
│   │   │   └── windowRule/
│   │   │       ├── WindowRule.cpp
│   │   │       ├── WindowRule.hpp
│   │   │       ├── WindowRuleApplicator.cpp
│   │   │       ├── WindowRuleApplicator.hpp
│   │   │       ├── WindowRuleEffectContainer.cpp
│   │   │       └── WindowRuleEffectContainer.hpp
│   │   ├── state/
│   │   │   ├── FocusState.cpp
│   │   │   └── FocusState.hpp
│   │   ├── types/
│   │   │   └── OverridableVar.hpp
│   │   └── view/
│   │       ├── GlobalViewMethods.cpp
│   │       ├── GlobalViewMethods.hpp
│   │       ├── Group.cpp
│   │       ├── Group.hpp
│   │       ├── LayerSurface.cpp
│   │       ├── LayerSurface.hpp
│   │       ├── Popup.cpp
│   │       ├── Popup.hpp
│   │       ├── SessionLock.cpp
│   │       ├── SessionLock.hpp
│   │       ├── Subsurface.cpp
│   │       ├── Subsurface.hpp
│   │       ├── View.cpp
│   │       ├── View.hpp
│   │       ├── WLSurface.cpp
│   │       ├── WLSurface.hpp
│   │       ├── Window.cpp
│   │       └── Window.hpp
│   ├── devices/
│   │   ├── IHID.cpp
│   │   ├── IHID.hpp
│   │   ├── IKeyboard.cpp
│   │   ├── IKeyboard.hpp
│   │   ├── IPointer.cpp
│   │   ├── IPointer.hpp
│   │   ├── ITouch.cpp
│   │   ├── ITouch.hpp
│   │   ├── Keyboard.cpp
│   │   ├── Keyboard.hpp
│   │   ├── Mouse.cpp
│   │   ├── Mouse.hpp
│   │   ├── Tablet.cpp
│   │   ├── Tablet.hpp
│   │   ├── TouchDevice.cpp
│   │   ├── TouchDevice.hpp
│   │   ├── VirtualKeyboard.cpp
│   │   ├── VirtualKeyboard.hpp
│   │   ├── VirtualPointer.cpp
│   │   └── VirtualPointer.hpp
│   ├── event/
│   │   ├── EventBus.cpp
│   │   └── EventBus.hpp
│   ├── helpers/
│   │   ├── AnimatedVariable.hpp
│   │   ├── AsyncDialogBox.cpp
│   │   ├── AsyncDialogBox.hpp
│   │   ├── ByteOperations.hpp
│   │   ├── CMType.cpp
│   │   ├── CMType.hpp
│   │   ├── Color.cpp
│   │   ├── Color.hpp
│   │   ├── CursorShapes.hpp
│   │   ├── DamageRing.cpp
│   │   ├── DamageRing.hpp
│   │   ├── Drm.cpp
│   │   ├── Drm.hpp
│   │   ├── Format.cpp
│   │   ├── Format.hpp
│   │   ├── MainLoopExecutor.cpp
│   │   ├── MainLoopExecutor.hpp
│   │   ├── MiscFunctions.cpp
│   │   ├── MiscFunctions.hpp
│   │   ├── Monitor.cpp
│   │   ├── Monitor.hpp
│   │   ├── MonitorFrameScheduler.cpp
│   │   ├── MonitorFrameScheduler.hpp
│   │   ├── MonitorZoomController.cpp
│   │   ├── MonitorZoomController.hpp
│   │   ├── SdDaemon.cpp
│   │   ├── SdDaemon.hpp
│   │   ├── Splashes.hpp
│   │   ├── TagKeeper.cpp
│   │   ├── TagKeeper.hpp
│   │   ├── TransferFunction.cpp
│   │   ├── TransferFunction.hpp
│   │   ├── WLClasses.cpp
│   │   ├── WLClasses.hpp
│   │   ├── cm/
│   │   │   ├── ColorManagement.cpp
│   │   │   ├── ColorManagement.hpp
│   │   │   └── ICC.cpp
│   │   ├── defer/
│   │   │   └── Promise.hpp
│   │   ├── env/
│   │   │   ├── Env.cpp
│   │   │   └── Env.hpp
│   │   ├── fs/
│   │   │   ├── FsUtils.cpp
│   │   │   └── FsUtils.hpp
│   │   ├── math/
│   │   │   ├── Direction.cpp
│   │   │   ├── Direction.hpp
│   │   │   ├── Expression.cpp
│   │   │   ├── Expression.hpp
│   │   │   ├── Math.cpp
│   │   │   └── Math.hpp
│   │   ├── memory/
│   │   │   └── Memory.hpp
│   │   ├── signal/
│   │   │   └── Signal.hpp
│   │   ├── sync/
│   │   │   ├── SyncReleaser.cpp
│   │   │   ├── SyncReleaser.hpp
│   │   │   ├── SyncTimeline.cpp
│   │   │   └── SyncTimeline.hpp
│   │   ├── time/
│   │   │   ├── Time.cpp
│   │   │   ├── Time.hpp
│   │   │   ├── Timer.cpp
│   │   │   └── Timer.hpp
│   │   └── varlist/
│   │       └── VarList.hpp
│   ├── hyprerror/
│   │   ├── HyprError.cpp
│   │   └── HyprError.hpp
│   ├── i18n/
│   │   ├── Engine.cpp
│   │   └── Engine.hpp
│   ├── includes.hpp
│   ├── init/
│   │   ├── initHelpers.cpp
│   │   └── initHelpers.hpp
│   ├── layout/
│   │   ├── LayoutManager.cpp
│   │   ├── LayoutManager.hpp
│   │   ├── algorithm/
│   │   │   ├── Algorithm.cpp
│   │   │   ├── Algorithm.hpp
│   │   │   ├── FloatingAlgorithm.cpp
│   │   │   ├── FloatingAlgorithm.hpp
│   │   │   ├── ModeAlgorithm.cpp
│   │   │   ├── ModeAlgorithm.hpp
│   │   │   ├── TiledAlgorithm.hpp
│   │   │   ├── floating/
│   │   │   │   └── default/
│   │   │   │       ├── DefaultFloatingAlgorithm.cpp
│   │   │   │       └── DefaultFloatingAlgorithm.hpp
│   │   │   └── tiled/
│   │   │       ├── dwindle/
│   │   │       │   ├── DwindleAlgorithm.cpp
│   │   │       │   └── DwindleAlgorithm.hpp
│   │   │       ├── master/
│   │   │       │   ├── MasterAlgorithm.cpp
│   │   │       │   └── MasterAlgorithm.hpp
│   │   │       ├── monocle/
│   │   │       │   ├── MonocleAlgorithm.cpp
│   │   │       │   └── MonocleAlgorithm.hpp
│   │   │       └── scrolling/
│   │   │           ├── ScrollTapeController.cpp
│   │   │           ├── ScrollTapeController.hpp
│   │   │           ├── ScrollingAlgorithm.cpp
│   │   │           └── ScrollingAlgorithm.hpp
│   │   ├── space/
│   │   │   ├── Space.cpp
│   │   │   └── Space.hpp
│   │   ├── supplementary/
│   │   │   ├── DragController.cpp
│   │   │   ├── DragController.hpp
│   │   │   ├── WorkspaceAlgoMatcher.cpp
│   │   │   └── WorkspaceAlgoMatcher.hpp
│   │   └── target/
│   │       ├── Target.cpp
│   │       ├── Target.hpp
│   │       ├── WindowGroupTarget.cpp
│   │       ├── WindowGroupTarget.hpp
│   │       ├── WindowTarget.cpp
│   │       └── WindowTarget.hpp
│   ├── macros.hpp
│   ├── main.cpp
│   ├── managers/
│   │   ├── ANRManager.cpp
│   │   ├── ANRManager.hpp
│   │   ├── CursorManager.cpp
│   │   ├── CursorManager.hpp
│   │   ├── DonationNagManager.cpp
│   │   ├── DonationNagManager.hpp
│   │   ├── EventManager.cpp
│   │   ├── EventManager.hpp
│   │   ├── KeybindManager.cpp
│   │   ├── KeybindManager.hpp
│   │   ├── PointerManager.cpp
│   │   ├── PointerManager.hpp
│   │   ├── ProtocolManager.cpp
│   │   ├── ProtocolManager.hpp
│   │   ├── SeatManager.cpp
│   │   ├── SeatManager.hpp
│   │   ├── SessionLockManager.cpp
│   │   ├── SessionLockManager.hpp
│   │   ├── TokenManager.cpp
│   │   ├── TokenManager.hpp
│   │   ├── VersionKeeperManager.cpp
│   │   ├── VersionKeeperManager.hpp
│   │   ├── WelcomeManager.cpp
│   │   ├── WelcomeManager.hpp
│   │   ├── XCursorManager.cpp
│   │   ├── XCursorManager.hpp
│   │   ├── XWaylandManager.cpp
│   │   ├── XWaylandManager.hpp
│   │   ├── animation/
│   │   │   ├── AnimationManager.cpp
│   │   │   ├── AnimationManager.hpp
│   │   │   ├── DesktopAnimationManager.cpp
│   │   │   └── DesktopAnimationManager.hpp
│   │   ├── cursor/
│   │   │   ├── CursorShapeOverrideController.cpp
│   │   │   └── CursorShapeOverrideController.hpp
│   │   ├── eventLoop/
│   │   │   ├── EventLoopManager.cpp
│   │   │   ├── EventLoopManager.hpp
│   │   │   ├── EventLoopTimer.cpp
│   │   │   └── EventLoopTimer.hpp
│   │   ├── input/
│   │   │   ├── IdleInhibitor.cpp
│   │   │   ├── InputManager.cpp
│   │   │   ├── InputManager.hpp
│   │   │   ├── InputMethodPopup.cpp
│   │   │   ├── InputMethodPopup.hpp
│   │   │   ├── InputMethodRelay.cpp
│   │   │   ├── InputMethodRelay.hpp
│   │   │   ├── Tablets.cpp
│   │   │   ├── TextInput.cpp
│   │   │   ├── TextInput.hpp
│   │   │   ├── Touch.cpp
│   │   │   ├── UnifiedWorkspaceSwipeGesture.cpp
│   │   │   ├── UnifiedWorkspaceSwipeGesture.hpp
│   │   │   └── trackpad/
│   │   │       ├── GestureTypes.hpp
│   │   │       ├── TrackpadGestures.cpp
│   │   │       ├── TrackpadGestures.hpp
│   │   │       └── gestures/
│   │   │           ├── CloseGesture.cpp
│   │   │           ├── CloseGesture.hpp
│   │   │           ├── CursorZoomGesture.cpp
│   │   │           ├── CursorZoomGesture.hpp
│   │   │           ├── DispatcherGesture.cpp
│   │   │           ├── DispatcherGesture.hpp
│   │   │           ├── FloatGesture.cpp
│   │   │           ├── FloatGesture.hpp
│   │   │           ├── FullscreenGesture.cpp
│   │   │           ├── FullscreenGesture.hpp
│   │   │           ├── ITrackpadGesture.cpp
│   │   │           ├── ITrackpadGesture.hpp
│   │   │           ├── MoveGesture.cpp
│   │   │           ├── MoveGesture.hpp
│   │   │           ├── ResizeGesture.cpp
│   │   │           ├── ResizeGesture.hpp
│   │   │           ├── SpecialWorkspaceGesture.cpp
│   │   │           ├── SpecialWorkspaceGesture.hpp
│   │   │           ├── WorkspaceSwipeGesture.cpp
│   │   │           └── WorkspaceSwipeGesture.hpp
│   │   ├── permissions/
│   │   │   ├── DynamicPermissionManager.cpp
│   │   │   └── DynamicPermissionManager.hpp
│   │   └── screenshare/
│   │       ├── CursorshareSession.cpp
│   │       ├── ScreenshareFrame.cpp
│   │       ├── ScreenshareManager.cpp
│   │       ├── ScreenshareManager.hpp
│   │       └── ScreenshareSession.cpp
│   ├── pch/
│   │   └── pch.hpp
│   ├── plugins/
│   │   ├── HookSystem.cpp
│   │   ├── HookSystem.hpp
│   │   ├── PluginAPI.cpp
│   │   ├── PluginAPI.hpp
│   │   ├── PluginSystem.cpp
│   │   └── PluginSystem.hpp
│   ├── protocols/
│   │   ├── AlphaModifier.cpp
│   │   ├── AlphaModifier.hpp
│   │   ├── CTMControl.cpp
│   │   ├── CTMControl.hpp
│   │   ├── ColorManagement.cpp
│   │   ├── ColorManagement.hpp
│   │   ├── CommitTiming.cpp
│   │   ├── CommitTiming.hpp
│   │   ├── ContentType.cpp
│   │   ├── ContentType.hpp
│   │   ├── CursorShape.cpp
│   │   ├── CursorShape.hpp
│   │   ├── DRMLease.cpp
│   │   ├── DRMLease.hpp
│   │   ├── DRMSyncobj.cpp
│   │   ├── DRMSyncobj.hpp
│   │   ├── DataDeviceWlr.cpp
│   │   ├── DataDeviceWlr.hpp
│   │   ├── ExtDataDevice.cpp
│   │   ├── ExtDataDevice.hpp
│   │   ├── ExtWorkspace.cpp
│   │   ├── ExtWorkspace.hpp
│   │   ├── Fifo.cpp
│   │   ├── Fifo.hpp
│   │   ├── FocusGrab.cpp
│   │   ├── FocusGrab.hpp
│   │   ├── ForeignToplevel.cpp
│   │   ├── ForeignToplevel.hpp
│   │   ├── ForeignToplevelWlr.cpp
│   │   ├── ForeignToplevelWlr.hpp
│   │   ├── FractionalScale.cpp
│   │   ├── FractionalScale.hpp
│   │   ├── GammaControl.cpp
│   │   ├── GammaControl.hpp
│   │   ├── GlobalShortcuts.cpp
│   │   ├── GlobalShortcuts.hpp
│   │   ├── HyprlandSurface.cpp
│   │   ├── HyprlandSurface.hpp
│   │   ├── IdleInhibit.cpp
│   │   ├── IdleInhibit.hpp
│   │   ├── IdleNotify.cpp
│   │   ├── IdleNotify.hpp
│   │   ├── ImageCaptureSource.cpp
│   │   ├── ImageCaptureSource.hpp
│   │   ├── ImageCopyCapture.cpp
│   │   ├── ImageCopyCapture.hpp
│   │   ├── InputMethodV2.cpp
│   │   ├── InputMethodV2.hpp
│   │   ├── LayerShell.cpp
│   │   ├── LayerShell.hpp
│   │   ├── LinuxDMABUF.cpp
│   │   ├── LinuxDMABUF.hpp
│   │   ├── LockNotify.cpp
│   │   ├── LockNotify.hpp
│   │   ├── MesaDRM.cpp
│   │   ├── MesaDRM.hpp
│   │   ├── OutputManagement.cpp
│   │   ├── OutputManagement.hpp
│   │   ├── OutputPower.cpp
│   │   ├── OutputPower.hpp
│   │   ├── PointerConstraints.cpp
│   │   ├── PointerConstraints.hpp
│   │   ├── PointerGestures.cpp
│   │   ├── PointerGestures.hpp
│   │   ├── PointerWarp.cpp
│   │   ├── PointerWarp.hpp
│   │   ├── PresentationTime.cpp
│   │   ├── PresentationTime.hpp
│   │   ├── PrimarySelection.cpp
│   │   ├── PrimarySelection.hpp
│   │   ├── RelativePointer.cpp
│   │   ├── RelativePointer.hpp
│   │   ├── Screencopy.cpp
│   │   ├── Screencopy.hpp
│   │   ├── SecurityContext.cpp
│   │   ├── SecurityContext.hpp
│   │   ├── ServerDecorationKDE.cpp
│   │   ├── ServerDecorationKDE.hpp
│   │   ├── SessionLock.cpp
│   │   ├── SessionLock.hpp
│   │   ├── ShortcutsInhibit.cpp
│   │   ├── ShortcutsInhibit.hpp
│   │   ├── SinglePixel.cpp
│   │   ├── SinglePixel.hpp
│   │   ├── Tablet.cpp
│   │   ├── Tablet.hpp
│   │   ├── TearingControl.cpp
│   │   ├── TearingControl.hpp
│   │   ├── TextInputV1.cpp
│   │   ├── TextInputV1.hpp
│   │   ├── TextInputV3.cpp
│   │   ├── TextInputV3.hpp
│   │   ├── ToplevelExport.cpp
│   │   ├── ToplevelExport.hpp
│   │   ├── ToplevelMapping.cpp
│   │   ├── ToplevelMapping.hpp
│   │   ├── Viewporter.cpp
│   │   ├── Viewporter.hpp
│   │   ├── VirtualKeyboard.cpp
│   │   ├── VirtualKeyboard.hpp
│   │   ├── VirtualPointer.cpp
│   │   ├── VirtualPointer.hpp
│   │   ├── WaylandProtocol.cpp
│   │   ├── WaylandProtocol.hpp
│   │   ├── XDGActivation.cpp
│   │   ├── XDGActivation.hpp
│   │   ├── XDGBell.cpp
│   │   ├── XDGBell.hpp
│   │   ├── XDGDecoration.cpp
│   │   ├── XDGDecoration.hpp
│   │   ├── XDGDialog.cpp
│   │   ├── XDGDialog.hpp
│   │   ├── XDGOutput.cpp
│   │   ├── XDGOutput.hpp
│   │   ├── XDGShell.cpp
│   │   ├── XDGShell.hpp
│   │   ├── XDGTag.cpp
│   │   ├── XDGTag.hpp
│   │   ├── XWaylandShell.cpp
│   │   ├── XWaylandShell.hpp
│   │   ├── core/
│   │   │   ├── Compositor.cpp
│   │   │   ├── Compositor.hpp
│   │   │   ├── DataDevice.cpp
│   │   │   ├── DataDevice.hpp
│   │   │   ├── Output.cpp
│   │   │   ├── Output.hpp
│   │   │   ├── Seat.cpp
│   │   │   ├── Seat.hpp
│   │   │   ├── Shm.cpp
│   │   │   ├── Shm.hpp
│   │   │   ├── Subcompositor.cpp
│   │   │   └── Subcompositor.hpp
│   │   └── types/
│   │       ├── Buffer.cpp
│   │       ├── Buffer.hpp
│   │       ├── ContentType.cpp
│   │       ├── ContentType.hpp
│   │       ├── DMABuffer.cpp
│   │       ├── DMABuffer.hpp
│   │       ├── DataDevice.cpp
│   │       ├── DataDevice.hpp
│   │       ├── SurfaceRole.hpp
│   │       ├── SurfaceState.cpp
│   │       ├── SurfaceState.hpp
│   │       ├── SurfaceStateQueue.cpp
│   │       ├── SurfaceStateQueue.hpp
│   │       ├── WLBuffer.cpp
│   │       └── WLBuffer.hpp
│   ├── render/
│   │   ├── AsyncResourceGatherer.hpp
│   │   ├── Framebuffer.cpp
│   │   ├── Framebuffer.hpp
│   │   ├── GLRenderer.cpp
│   │   ├── GLRenderer.hpp
│   │   ├── OpenGL.cpp
│   │   ├── OpenGL.hpp
│   │   ├── Renderbuffer.cpp
│   │   ├── Renderbuffer.hpp
│   │   ├── Renderer.cpp
│   │   ├── Renderer.hpp
│   │   ├── Shader.cpp
│   │   ├── Shader.hpp
│   │   ├── ShaderLoader.cpp
│   │   ├── ShaderLoader.hpp
│   │   ├── Texture.cpp
│   │   ├── Texture.hpp
│   │   ├── Transformer.cpp
│   │   ├── Transformer.hpp
│   │   ├── decorations/
│   │   │   ├── CHyprBorderDecoration.cpp
│   │   │   ├── CHyprBorderDecoration.hpp
│   │   │   ├── CHyprDropShadowDecoration.cpp
│   │   │   ├── CHyprDropShadowDecoration.hpp
│   │   │   ├── CHyprGroupBarDecoration.cpp
│   │   │   ├── CHyprGroupBarDecoration.hpp
│   │   │   ├── DecorationPositioner.cpp
│   │   │   ├── DecorationPositioner.hpp
│   │   │   ├── IHyprWindowDecoration.cpp
│   │   │   └── IHyprWindowDecoration.hpp
│   │   ├── gl/
│   │   │   ├── GLFramebuffer.cpp
│   │   │   ├── GLFramebuffer.hpp
│   │   │   ├── GLRenderbuffer.cpp
│   │   │   ├── GLRenderbuffer.hpp
│   │   │   ├── GLTexture.cpp
│   │   │   └── GLTexture.hpp
│   │   ├── pass/
│   │   │   ├── BorderPassElement.cpp
│   │   │   ├── BorderPassElement.hpp
│   │   │   ├── ClearPassElement.cpp
│   │   │   ├── ClearPassElement.hpp
│   │   │   ├── FramebufferElement.cpp
│   │   │   ├── FramebufferElement.hpp
│   │   │   ├── Pass.cpp
│   │   │   ├── Pass.hpp
│   │   │   ├── PassElement.cpp
│   │   │   ├── PassElement.hpp
│   │   │   ├── PreBlurElement.cpp
│   │   │   ├── PreBlurElement.hpp
│   │   │   ├── RectPassElement.cpp
│   │   │   ├── RectPassElement.hpp
│   │   │   ├── RendererHintsPassElement.cpp
│   │   │   ├── RendererHintsPassElement.hpp
│   │   │   ├── ShadowPassElement.cpp
│   │   │   ├── ShadowPassElement.hpp
│   │   │   ├── SurfacePassElement.cpp
│   │   │   ├── SurfacePassElement.hpp
│   │   │   ├── TexPassElement.cpp
│   │   │   ├── TexPassElement.hpp
│   │   │   ├── TextureMatteElement.cpp
│   │   │   └── TextureMatteElement.hpp
│   │   └── shaders/
│   │       └── glsl/
│   │           ├── CM.glsl
│   │           ├── blur1.frag
│   │           ├── blur1.glsl
│   │           ├── blur2.frag
│   │           ├── blur2.glsl
│   │           ├── blurFinish.glsl
│   │           ├── blurfinish.frag
│   │           ├── blurprepare.frag
│   │           ├── blurprepare.glsl
│   │           ├── border.frag
│   │           ├── border.glsl
│   │           ├── cm_helpers.glsl
│   │           ├── constants.h
│   │           ├── defines.h
│   │           ├── ext.frag
│   │           ├── gain.glsl
│   │           ├── glitch.frag
│   │           ├── passthru.frag
│   │           ├── quad.frag
│   │           ├── rgbamatte.frag
│   │           ├── rounding.glsl
│   │           ├── shadow.frag
│   │           ├── shadow.glsl
│   │           ├── surface.frag
│   │           ├── tex300.vert
│   │           ├── tex320.vert
│   │           └── tonemap.glsl
│   ├── version.h.in
│   └── xwayland/
│       ├── Dnd.cpp
│       ├── Dnd.hpp
│       ├── Server.cpp
│       ├── Server.hpp
│       ├── XDataSource.cpp
│       ├── XDataSource.hpp
│       ├── XSurface.cpp
│       ├── XSurface.hpp
│       ├── XWM.cpp
│       ├── XWM.hpp
│       ├── XWayland.cpp
│       └── XWayland.hpp
├── start/
│   ├── CMakeLists.txt
│   └── src/
│       ├── core/
│       │   ├── Instance.cpp
│       │   ├── Instance.hpp
│       │   └── State.hpp
│       ├── helpers/
│       │   ├── Logger.hpp
│       │   ├── Memory.hpp
│       │   ├── Nix.cpp
│       │   └── Nix.hpp
│       └── main.cpp
├── systemd/
│   └── hyprland-uwsm.desktop
└── tests/
    └── desktop/
        └── Reserved.cpp

================================================
FILE CONTENTS
================================================

================================================
FILE: .clang-format
================================================
---
Language: Cpp
BasedOnStyle: LLVM

AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: true
AlignConsecutiveAssignments: true
AlignEscapedNewlines: Right
AlignOperands: false
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: true
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: Yes
BreakBeforeBraces: Attach
BreakBeforeTernaryOperators: false
BreakConstructorInitializers: AfterColon
ColumnLimit: 180
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: false
IncludeBlocks: Preserve
IndentCaseLabels: true
IndentWidth: 4
PointerAlignment: Left
ReflowComments: false
SortIncludes: false
SortUsingDeclarations: false
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInContainerLiterals: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Auto
TabWidth: 4
UseTab: Never

AllowShortEnumsOnASingleLine: false

BraceWrapping:
  AfterEnum: false

AlignConsecutiveDeclarations: AcrossEmptyLines

NamespaceIndentation: All


================================================
FILE: .clang-format-ignore
================================================
subprojects/**/*


================================================
FILE: .clang-tidy
================================================
WarningsAsErrors: >
  -*,
  bugprone-*,
  -bugprone-multi-level-implicit-pointer-conversion,
  -bugprone-empty-catch,
  -bugprone-unused-return-value,
  -bugprone-reserved-identifier,
  -bugprone-switch-missing-default-case,
  -bugprone-unused-local-non-trivial-variable,
  -bugprone-easily-swappable-parameters,
  -bugprone-forward-declararion-namespace,
  -bugprone-forward-declararion-namespace,
  -bugprone-macro-parentheses,
  -bugprone-narrowing-conversions,
  -bugprone-branch-clone,
  -bugprone-assignment-in-if-condition,
  concurrency-*,
  -concurrency-mt-unsafe,
  cppcoreguidelines-*,
  -cppcoreguidelines-pro-type-const-cast,
  -cppcoreguidelines-owning-memory,
  -cppcoreguidelines-avoid-magic-numbers,
  -cppcoreguidelines-pro-bounds-constant-array-index,
  -cppcoreguidelines-avoid-const-or-ref-data-members,
  -cppcoreguidelines-non-private-member-variables-in-classes,
  -cppcoreguidelines-avoid-goto,
  -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
  -cppcoreguidelines-avoid-do-while,
  -cppcoreguidelines-avoid-non-const-global-variables,
  -cppcoreguidelines-special-member-functions,
  -cppcoreguidelines-explicit-virtual-functions,
  -cppcoreguidelines-avoid-c-arrays,
  -cppcoreguidelines-pro-bounds-pointer-arithmetic,
  -cppcoreguidelines-narrowing-conversions,
  -cppcoreguidelines-pro-type-union-access,
  -cppcoreguidelines-pro-type-member-init,
  -cppcoreguidelines-macro-usage,
  -cppcoreguidelines-macro-to-enum,
  -cppcoreguidelines-init-variables,
  -cppcoreguidelines-pro-type-cstyle-cast,
  -cppcoreguidelines-pro-type-vararg,
  -cppcoreguidelines-pro-type-reinterpret-cast,
  -google-global-names-in-headers,
  -google-readability-casting,
  google-runtime-operator,
  misc-*,
  -misc-use-internal-linkage,
  -misc-unused-parameters,
  -misc-no-recursion,
  -misc-non-private-member-variables-in-classes,
  -misc-include-cleaner,
  -misc-use-anonymous-namespace,
  -misc-const-correctness,
  modernize-*,
  -modernize-use-emplace,
  -modernize-redundant-void-arg,
  -modernize-use-starts-ends-with,
  -modernize-use-designated-initializers,
  -modernize-use-std-numbers,
  -modernize-return-braced-init-list,
  -modernize-use-trailing-return-type,
  -modernize-use-using,
  -modernize-use-override,
  -modernize-avoid-c-arrays,
  -modernize-macro-to-enum,
  -modernize-loop-convert,
  -modernize-use-nodiscard,
  -modernize-pass-by-value,
  -modernize-use-auto,
  performance-*,
  -performance-inefficient-vector-operation,
  -performance-inefficient-string-concatenation,
  -performance-enum-size,
  -performance-move-const-arg,
  -performance-avoid-endl,
  -performance-unnecessary-value-param,
  portability-std-allocator-const,
  readability-*,
  -readability-identifier-naming,
  -readability-use-std-min-max,
  -readability-math-missing-parentheses,
  -readability-simplify-boolean-expr,
  -readability-static-accessed-through-instance,
  -readability-use-anyofallof,
  -readability-enum-initial-value,
  -readability-redundant-inline-specifier,
  -readability-function-cognitive-complexity,
  -readability-function-size,
  -readability-identifier-length,
  -readability-magic-numbers,
  -readability-uppercase-literal-suffix,
  -readability-braces-around-statements,
  -readability-redundant-access-specifiers,
  -readability-else-after-return,
  -readability-container-data-pointer,
  -readability-implicit-bool-conversion,
  -readability-avoid-nested-conditional-operator,
  -readability-redundant-member-init,
  -readability-redundant-string-init,
  -readability-avoid-const-params-in-decls,
  -readability-named-parameter,
  -readability-convert-member-functions-to-static,
  -readability-qualified-auto,
  -readability-make-member-function-const,
  -readability-isolate-declaration,
  -readability-inconsistent-declaration-parameter-name,
  -clang-diagnostic-error,

HeaderFilterRegex: '.*\.hpp'
FormatStyle: file
Checks: >
  -*,
  bugprone-*,
  -bugprone-easily-swappable-parameters,
  -bugprone-forward-declararion-namespace,
  -bugprone-forward-declararion-namespace,
  -bugprone-macro-parentheses,
  -bugprone-narrowing-conversions,
  -bugprone-branch-clone,
  -bugprone-assignment-in-if-condition,
  concurrency-*,
  -concurrency-mt-unsafe,
  cppcoreguidelines-*,
  -cppcoreguidelines-owning-memory,
  -cppcoreguidelines-avoid-magic-numbers,
  -cppcoreguidelines-pro-bounds-constant-array-index,
  -cppcoreguidelines-avoid-const-or-ref-data-members,
  -cppcoreguidelines-non-private-member-variables-in-classes,
  -cppcoreguidelines-avoid-goto,
  -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
  -cppcoreguidelines-avoid-do-while,
  -cppcoreguidelines-avoid-non-const-global-variables,
  -cppcoreguidelines-special-member-functions,
  -cppcoreguidelines-explicit-virtual-functions,
  -cppcoreguidelines-avoid-c-arrays,
  -cppcoreguidelines-pro-bounds-pointer-arithmetic,
  -cppcoreguidelines-narrowing-conversions,
  -cppcoreguidelines-pro-type-union-access,
  -cppcoreguidelines-pro-type-member-init,
  -cppcoreguidelines-macro-usage,
  -cppcoreguidelines-macro-to-enum,
  -cppcoreguidelines-init-variables,
  -cppcoreguidelines-pro-type-cstyle-cast,
  -cppcoreguidelines-pro-type-vararg,
  -cppcoreguidelines-pro-type-reinterpret-cast,
  google-global-names-in-headers,
  -google-readability-casting,
  google-runtime-operator,
  misc-*,
  -misc-unused-parameters,
  -misc-no-recursion,
  -misc-non-private-member-variables-in-classes,
  -misc-include-cleaner,
  -misc-use-anonymous-namespace,
  -misc-const-correctness,
  modernize-*,
  -modernize-return-braced-init-list,
  -modernize-use-trailing-return-type,
  -modernize-use-using,
  -modernize-use-override,
  -modernize-avoid-c-arrays,
  -modernize-macro-to-enum,
  -modernize-loop-convert,
  -modernize-use-nodiscard,
  -modernize-pass-by-value,
  -modernize-use-auto,
  performance-*,
  -performance-avoid-endl,
  -performance-unnecessary-value-param,
  portability-std-allocator-const,
  readability-*,
  -readability-function-cognitive-complexity,
  -readability-function-size,
  -readability-identifier-length,
  -readability-magic-numbers,
  -readability-uppercase-literal-suffix,
  -readability-braces-around-statements,
  -readability-redundant-access-specifiers,
  -readability-else-after-return,
  -readability-container-data-pointer,
  -readability-implicit-bool-conversion,
  -readability-avoid-nested-conditional-operator,
  -readability-redundant-member-init,
  -readability-redundant-string-init,
  -readability-avoid-const-params-in-decls,
  -readability-named-parameter,
  -readability-convert-member-functions-to-static,
  -readability-qualified-auto,
  -readability-make-member-function-const,
  -readability-isolate-declaration,
  -readability-inconsistent-declaration-parameter-name,
  -clang-diagnostic-error,

CheckOptions:
  performance-for-range-copy.WarnOnAllAutoCopies: true
  performance-inefficient-string-concatenation.StrictMode: true
  readability-braces-around-statements.ShortStatementLines: 0
  readability-identifier-naming.ClassCase: CamelCase
  readability-identifier-naming.ClassIgnoredRegexp: I.*
  readability-identifier-naming.ClassPrefix: C # We can't use regex here?!?!?!?
  readability-identifier-naming.EnumCase: CamelCase
  readability-identifier-naming.EnumPrefix: e
  readability-identifier-naming.EnumConstantCase: UPPER_CASE
  readability-identifier-naming.FunctionCase: camelBack
  readability-identifier-naming.NamespaceCase: CamelCase
  readability-identifier-naming.NamespacePrefix: N
  readability-identifier-naming.StructPrefix: S
  readability-identifier-naming.StructCase: CamelCase


================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto


================================================
FILE: .github/FUNDING.yml
================================================
ko_fi: vaxry


================================================
FILE: .github/ISSUE_TEMPLATE/bug.yml
================================================
name: Do not open issues, go to discussions please!
description: Do not open an issue
body:
  - type: checkboxes
    attributes:
      label: Please close this issue.
      description: Users cannot open issues. I want my issue to be closed.
      options:
        - label: Yes, I want this issue to be closed.
          required: true

  - type: textarea
    id: body
    attributes:
      label: Issue body


================================================
FILE: .github/actions/setup_base/action.yml
================================================
name: "Setup base"

inputs:
  INSTALL_XORG_PKGS:
    description: 'Install xorg dependencies'
    required: false
    default: false

runs:
  using: "composite"
  steps:
    - name: Get required pacman pkgs
      shell: bash
      run: |
        sed -i 's/SigLevel    = Required DatabaseOptional/SigLevel    = Optional TrustAll/' /etc/pacman.conf
        pacman --noconfirm --noprogressbar -Syyu
        pacman --noconfirm --noprogressbar -Sy \
          base-devel \
          cairo \
          clang \
          cmake \
          git \
          glaze \
          glm \
          glslang \
          go \
          gtest \
          hyprlang \
          hyprcursor \
          jq \
          libc++ \
          libdisplay-info \
          libdrm \
          libepoxy \
          libfontenc \
          libglvnd \
          libinput \
          libjxl \
          libliftoff \
          libspng \
          libwebp \
          libxcursor \
          libxcvt \
          libxfont2 \
          libxkbcommon \
          libxkbfile \
          lld \
          meson \
          muparser \
          ninja \
          pango \
          pixman \
          pkgconf \
          pugixml \
          scdoc \
          seatd \
          systemd \
          tomlplusplus \
          wayland \
          wayland-protocols \
          xcb-util-errors \
          xcb-util-renderutil \
          xcb-util-wm \
          xcb-util \
          xcb-util-image \
          libzip \
          librsvg \
          re2

    - name: Get hyprwayland-scanner-git
      shell: bash
      run: |
        git clone https://github.com/hyprwm/hyprwayland-scanner --recursive
        cd hyprwayland-scanner
        cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
        cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
        cmake --install build

    - name: Get hyprwire-git
      shell: bash
      run: |
        git clone https://github.com/hyprwm/hyprwire --recursive
        cd hyprwire
        cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
        cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`
        cmake --install build

    - name: Get hyprutils-git
      shell: bash
      run: |
        git clone https://github.com/hyprwm/hyprutils && cd hyprutils && cmake -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -B build && cmake --build build --target hyprutils && cmake --install build

    - name: Get hyprgraphics-git
      shell: bash
      run: |
        git clone https://github.com/hyprwm/hyprgraphics && cd hyprgraphics && cmake -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -B build && cmake --build build --target hyprgraphics && cmake --install build

    - name: Get aquamarine-git
      shell: bash
      run: |
        git clone https://github.com/hyprwm/aquamarine && cd aquamarine && cmake -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -B build && cmake --build build --target aquamarine && cmake --install build

    - name: Get Xorg pacman pkgs
      shell: bash
      if: inputs.INSTALL_XORG_PKGS == 'true'
      run: |
        pacman --noconfirm --noprogressbar -Sy \
          xorg-fonts-encodings \
          xorg-server-common \
          xorg-setxkbmap \
          xorg-xkbcomp \
          xorg-xwayland

    - name: Checkout Hyprland
      uses: actions/checkout@v4
      with:
        submodules: recursive

    # Fix an issue with actions/checkout where the checkout repo is not mark as safe
    - name: Mark directory as safe for git
      shell: bash
      run: |
        git config --global --add safe.directory /__w/Hyprland/Hyprland


================================================
FILE: .github/labeler.yml
================================================
assets:
  - changed-files:
      - any-glob-to-any-file: "assets/**"

docs:
  - changed-files:
      - any-glob-to-any-file: "docs/**"

hyprctl:
  - changed-files:
      - any-glob-to-any-file: "hyprctl/**"

hyprpm:
  - changed-files:
      - any-glob-to-any-file: "hyprpm/**"

nix:
  - changed-files:
      - any-glob-to-any-file: "nix/**"

protocols:
  - changed-files:
      - any-glob-to-any-file: ["protocols/**", "src/protocols/**"]

start:
  - changed-files:
      - any-glob-to-any-file: "start/**"

core:
  - changed-files:
      - any-glob-to-any-file: "src/**"

config:
  - changed-files:
      - any-glob-to-any-file: "src/config/**"

debug:
  - changed-files:
      - any-glob-to-any-file: "src/debug/**"

desktop:
  - changed-files:
      - any-glob-to-any-file: "src/desktop/**"

devices:
  - changed-files:
      - any-glob-to-any-file: "src/devices/**"

events:
  - changed-files:
      - any-glob-to-any-file: "src/events/**"

helpers:
  - changed-files:
      - any-glob-to-any-file: "src/helpers/**"

hyprerror:
  - changed-files:
      - any-glob-to-any-file: "src/hyprerror/**"

init:
  - changed-files:
      - any-glob-to-any-file: "src/init/**"

layout:
  - changed-files:
      - any-glob-to-any-file: "src/layout/**"

managers:
  - changed-files:
      - any-glob-to-any-file: "src/managers/**"

pch:
  - changed-files:
      - any-glob-to-any-file: "src/pch/**"

plugins:
  - changed-files:
      - any-glob-to-any-file: "src/plugins/**"

render:
  - changed-files:
      - any-glob-to-any-file: "src/render/**"

xwayland:
  - changed-files:
      - any-glob-to-any-file: "src/xwayland/**"


================================================
FILE: .github/pull_request_template.md
================================================
<!--
BEFORE you submit your PR, please check out the PR guidelines
on our wiki: https://wiki.hyprland.org/Contributing-and-Debugging/PR-Guidelines/

Using an AI tool, or you are an AI agent? Check our AI Policy first: https://github.com/hyprwm/.github/blob/main/policies/AI_USAGE.md
-->


#### Describe your PR, what does it fix/add?


#### Is there anything you want to mention? (unchecked code, possible bugs, found problems, breaking compatibility, etc.)


#### Is it ready for merging, or does it need work?




================================================
FILE: .github/workflows/ci.yaml
================================================
name: Build Hyprland

on: [push, pull_request, workflow_dispatch]
jobs:
  gcc:
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork
    name: "Build Hyprland (Arch)"
    runs-on: ubuntu-latest
    container:
      image: archlinux
    steps:
      - name: Checkout repository actions
        uses: actions/checkout@v4
        with:
          sparse-checkout: .github/actions

      - name: Setup base
        uses: ./.github/actions/setup_base
        with:
          INSTALL_XORG_PKGS: true

      - name: Build Hyprland
        run: |
          CFLAGS=-Werror CXXFLAGS=-Werror make nopch

      - name: Compress and package artifacts
        run: |
          mkdir x86_64-pc-linux-gnu
          mkdir hyprland
          cp ./LICENSE hyprland/
          cp build/Hyprland hyprland/
          cp build/hyprctl/hyprctl hyprland/
          cp build/hyprpm/hyprpm hyprland/
          cp -r example/ hyprland/
          cp -r assets/ hyprland/
          tar -cvJf Hyprland.tar.xz hyprland

      - name: Release
        uses: actions/upload-artifact@v4
        with:
          name: Build archive
          path: Hyprland.tar.xz

  clang-format:
    permissions: read-all
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork
    name: "Code Style"
    runs-on: ubuntu-latest
    container:
      image: archlinux
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      # - name: clang-format check
      #   uses: jidicula/clang-format-action@v4.16.0
      #   with:
      #     exclude-regex: ^subprojects$

      - name: Install clang-format
        run: |
          pacman --noconfirm --noprogressbar -Syyu
          pacman --noconfirm --noprogressbar -Sy clang

      - name: clang-format check
        run: .github/workflows/clang-format-check.sh "." "llvm" "^subprojects$" ""

      - name: Save PR head commit SHA
        if: failure() && github.event_name == 'pull_request'
        shell: bash
        run: |
          SHA="${{ github.event.pull_request.head.sha }}"
          echo "SHA=$SHA" >> $GITHUB_ENV
      - name: Save latest commit SHA if not PR
        if: failure() && github.event_name != 'pull_request'
        shell: bash
        run: echo "SHA=${{ github.sha }}" >> $GITHUB_ENV

      - name: Report failure in job summary
        if: failure()
        run: |
          DEEPLINK="${{ github.server_url }}/${{ github.repository }}/commit/${{ env.SHA }}"
          echo -e "Format check failed on commit [${GITHUB_SHA:0:8}]($DEEPLINK) with files:\n$(<$GITHUB_WORKSPACE/failing-files.txt)" >> $GITHUB_STEP_SUMMARY


================================================
FILE: .github/workflows/clang-format-check.sh
================================================
#!/usr/bin/env bash
#
# Adapted from https://github.com/jidicula/clang-format-action

###############################################################################
#                                check.sh                                     #
###############################################################################
# USAGE: ./entrypoint.sh [<path>] [<fallback style>]
#
# Checks all C/C++/Protobuf/CUDA files (.h, .H, .hpp, .hh, .h++, .hxx and .c,
# .C, .cpp, .cc, .c++, .cxx, .proto, .cu) in the provided GitHub repository path
# (arg1) for conforming to clang-format. If no path is provided or provided path
# is not a directory, all C/C++/Protobuf/CUDA files are checked. If any files
# are incorrectly formatted, the script lists them and exits with 1.
#
# Define your own formatting rules in a .clang-format file at your repository
# root. Otherwise, the provided style guide (arg2) is used as a fallback.

# format_diff function
# Accepts a filepath argument. The filepath passed to this function must point
# to a C/C++/Protobuf/CUDA file.
format_diff() {
  local filepath="$1"

  # Invoke clang-format with dry run and formatting error output
  local_format="$(clang-format \
    --dry-run \
    --Werror \
    --style=file \
    --fallback-style="$FALLBACK_STYLE" \
    "${filepath}")"

  local format_status="$?"
  if [[ ${format_status} -ne 0 ]]; then
    # Append Markdown-bulleted monospaced filepath of failing file to
    # summary file.
    echo "* \`$filepath\`" >>failing-files.txt

    echo "Failed on file: $filepath" >&2
    echo "$local_format" >&2
    exit_code=1 # flip the global exit code
    return "${format_status}"
  fi
  return 0
}

CHECK_PATH="$1"
FALLBACK_STYLE="$2"
EXCLUDE_REGEX="$3"
INCLUDE_REGEX="$4"

# Set the regex to an empty string regex if nothing was provided
if [[ -z $EXCLUDE_REGEX ]]; then
  EXCLUDE_REGEX="^$"
fi

# Set the filetype regex if nothing was provided.
# Find all C/C++/Protobuf/CUDA files:
#   h, H, hpp, hh, h++, hxx
#   c, C, cpp, cc, c++, cxx
#   ino, pde
#   proto
#   cu
if [[ -z $INCLUDE_REGEX ]]; then
  INCLUDE_REGEX='^.*\.((((c|C)(c|pp|xx|\+\+)?$)|((h|H)h?(pp|xx|\+\+)?$))|(ino|pde|proto|cu))$'
fi

cd "$GITHUB_WORKSPACE" || exit 2

if [[ ! -d $CHECK_PATH ]]; then
  echo "Not a directory in the workspace, fallback to all files." >&2
  CHECK_PATH="."
fi

# initialize exit code
exit_code=0

# All files improperly formatted will be printed to the output.
src_files=$(find "$CHECK_PATH" -name .git -prune -o -regextype posix-egrep -regex "$INCLUDE_REGEX" -print)

# check formatting in each source file
IFS=$'\n' # Loop below should separate on new lines, not spaces.
for file in $src_files; do
  # Only check formatting if the path doesn't match the regex
  if ! [[ ${file} =~ $EXCLUDE_REGEX ]]; then
    format_diff "${file}"
  fi
done

# global exit code is flipped to nonzero if any invocation of `format_diff` has
# a formatting difference.
exit "$exit_code"


================================================
FILE: .github/workflows/clang-format.yml
================================================
name: clang-format
on: pull_request_target
jobs:
  clang-format:
    permissions: write-all
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork
    name: "Code Style"
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: clang-format check
        uses: jidicula/clang-format-action@v4.16.0
        with:
          exclude-regex: ^subprojects$

      - name: Create comment
        if: ${{ failure() && github.event_name == 'pull_request' }}
        run: |
          echo 'Please fix the formatting issues by running [`clang-format`](https://wiki.hyprland.org/Contributing-and-Debugging/PR-Guidelines/#code-style).' > clang-format.patch

      - name: Post comment
        if: ${{ failure() && github.event_name == 'pull_request' }}
        uses: mshick/add-pr-comment@v2
        with:
          message-path: |
            clang-format.patch


================================================
FILE: .github/workflows/close-issues.yml
================================================
name: Close Unauthorized Issues

on:
  workflow_dispatch:
  issues:
    types: [opened]

jobs:
  close-unauthorized-issues:
    runs-on: ubuntu-latest
    permissions:
      issues: write
    steps:
      # XXX: This *could* be done in Bash by abusing GitHub's own tool to interact with its API
      # but that's too much of a hack, and we'll be adding a layer of abstraction. github-script
      # is a workflow that eases interaction with GitHub API in the workflow run context.
      - name: "Close 'unauthorized' issues"
        uses: actions/github-script@v7
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const ALLOWED_USERS = ['vaxerski', 'fufexan', 'NotAShelf'];
            const CLOSING_COMMENT = 'Users are no longer allowed to open issues themselves, please open a discussion instead.\n\nPlease see the [wiki](https://wiki.hyprland.org/Contributing-and-Debugging/Issue-Guidelines/) on why this is the case.\n\nWe are volunteers, and we need your cooperation to make the best software we can. Thank you for understanding! ❤️\n\n[Open a discussion here](https://github.com/hyprwm/Hyprland/discussions)';

            async function closeUnauthorizedIssue(issueNumber, userName) {
              if (ALLOWED_USERS.includes(userName)) {
                console.log(`Issue #${issueNumber} - Created by authorized user ${userName}`);
                return;
              }

              console.log(`Issue #${issueNumber} - Unauthorized, closing`);

              await github.rest.issues.update({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: issueNumber,
                state: 'closed',
                state_reason: 'not_planned'
              });

              await github.rest.issues.createComment({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: issueNumber,
                body: CLOSING_COMMENT
              });
            }

            if (context.eventName === 'issues' && context.payload.action === 'opened') {
              // Direct access to the issue that triggered the workflow
              const issue = context.payload.issue;

              // Skip if this is a PR
              if (issue.pull_request) {
                console.log(`Issue #${issue.number} - Skipping, this is a pull request`);
                return;
              }

              // Process the single issue that triggered the workflow
              await closeUnauthorizedIssue(issue.number, issue.user.login);
            } else {
              // For manual runs, we need to handle pagination
              async function* fetchAllOpenIssues() {
                let page = 1;
                let hasNextPage = true;

                while (hasNextPage) {
                  const response = await github.rest.issues.listForRepo({
                    owner: context.repo.owner,
                    repo: context.repo.repo,
                    state: 'open',
                    per_page: 100,
                    page: page
                  });

                  if (response.data.length === 0) {
                    hasNextPage = false;
                  } else {
                    for (const issue of response.data) {
                      yield issue;
                    }
                    page++;
                  }
                }
              }

              // Process issues one by one
              for await (const issue of fetchAllOpenIssues()) {
                try {
                  // Skip pull requests
                  if (issue.pull_request) {
                    console.log(`Issue #${issue.number} - Skipping, this is a pull request`);
                    continue;
                  }

                  await closeUnauthorizedIssue(issue.number, issue.user.login);
                } catch (error) {
                  console.error(`Error processing issue #${issue.number}: ${error.message}`);
                }
              }
            }


================================================
FILE: .github/workflows/labeler.yml
================================================
name: "Pull Request Labeler"
on:
  - pull_request_target

jobs:
  labeler:
    permissions:
      contents: read
      pull-requests: write
    runs-on: ubuntu-latest
    steps:
      - uses: actions/labeler@v5


================================================
FILE: .github/workflows/man-update.yaml
================================================
name: Build man pages

on:
  workflow_dispatch:
  push:
    paths:
      - docs/**
    branches:
      - 'main'

jobs:
  main:
    name: Build man pages
    runs-on: ubuntu-latest
    steps:
    - name: Install deps
      run: sudo apt install pandoc

    - name: Clone repository
      uses: actions/checkout@v4
      with:
        token: ${{ secrets.PAT }}

    - name: Build man pages
      run: make man

    - uses: stefanzweifel/git-auto-commit-action@v5
      name: Commit
      with:
        commit_message: "[gha] build man pages"


================================================
FILE: .github/workflows/new-pr-comment.yml
================================================
name: "New MR welcome comment"

on:
  pull_request_target:
    types:
      - opened

jobs:
  comment:
    if: >
      github.event.pull_request.user.login != 'vaxerski' &&
      github.event.pull_request.user.login != 'fufexan' &&
      github.event.pull_request.user.login != 'gulafaran' &&
      github.event.pull_request.user.login != 'ujint34' &&
      github.event.pull_request.user.login != 'paideiadilemma' &&
      github.event.pull_request.user.login != 'notashelf'
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write

    env:
      PR_COMMENT: |
        Hello and thank you for making a PR to Hyprland!

        Please check the [PR Guidelines](https://wiki.hypr.land/Contributing-and-Debugging/PR-Guidelines/) and make sure your PR follows them.
        It will make the entire review process faster. :)

        If your code can be tested, please always add tests. See more [here](https://wiki.hypr.land/Contributing-and-Debugging/Tests/).

        _beep boop, I'm just a bot. A real human will review your PR soon._

    steps:
      - name: Add comment to PR
        uses: actions/github-script@v7
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const pr = context.payload.pull_request;

            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: pr.number,
              body: process.env.PR_COMMENT,
            });


================================================
FILE: .github/workflows/nix-ci.yml
================================================
name: Nix

on: [push, pull_request, workflow_dispatch]

jobs:
  update-inputs:
    if: (github.event_name == 'push' || github.event_name == 'workflow_dispatch')
    uses: ./.github/workflows/nix-update-inputs.yml
    secrets: inherit

  hyprland:
    if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork)
    uses: ./.github/workflows/nix.yml
    secrets: inherit
    with:
      command: nix build 'github:${{ github.repository }}?ref=${{ github.ref }}' -L --extra-substituters "https://hyprland.cachix.org"

  xdph:
    if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork)
    needs: hyprland
    uses: ./.github/workflows/nix.yml
    secrets: inherit
    with:
      command: nix build 'github:${{ github.repository }}?ref=${{ github.ref }}#xdg-desktop-portal-hyprland' -L --extra-substituters "https://hyprland.cachix.org"

  test:
    if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork)
    uses: ./.github/workflows/nix-test.yml
    secrets: inherit


================================================
FILE: .github/workflows/nix-test.yml
================================================
name: Nix (Test)

on:
  workflow_call:
    secrets:
      CACHIX_AUTH_TOKEN:
        required: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Install Nix
        uses: nixbuild/nix-quick-install-action@v31
        with:
          nix_conf: |
            keep-env-derivations = true
            keep-outputs = true

      - name: Restore and save Nix store
        uses: nix-community/cache-nix-action@v6
        with:
          # restore and save a cache using this key (per job)
          primary-key: nix-${{ runner.os }}-${{ github.job }}
          # if there's no cache hit, restore a cache by this prefix
          restore-prefixes-first-match: nix-${{ runner.os }}
          # collect garbage until the Nix store size (in bytes) is at most this number
          # before trying to save a new cache
          gc-max-store-size-linux: 5G

      - uses: cachix/cachix-action@v15
        with:
          name: hyprland
          authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"

      - name: Run test VM
        run: nix build 'github:${{ github.repository }}?ref=${{ github.ref }}#checks.x86_64-linux.tests' -L --extra-substituters "https://hyprland.cachix.org"

      - name: Check exit status
        run: grep 0 result/exit_status

      - name: Upload artifacts
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: logs
          path: result


================================================
FILE: .github/workflows/nix-update-inputs.yml
================================================
name: Nix (Update Inputs)

on:
  workflow_call:
    secrets:
      PAT:
        required: true

jobs:
  update:
    if: github.repository == 'hyprwm/Hyprland'
    name: inputs
    runs-on: ubuntu-latest
    steps:
      - name: Clone repository
        uses: actions/checkout@v4
        with:
          token: ${{ secrets.PAT }}

      - name: Install Nix
        uses: nixbuild/nix-quick-install-action@v31
        with:
          nix_conf: |
            keep-env-derivations = true
            keep-outputs = true

      - name: Restore and save Nix store
        uses: nix-community/cache-nix-action@v6
        with:
          # restore and save a cache using this key (per job)
          primary-key: nix-${{ runner.os }}-${{ github.job }}
          # if there's no cache hit, restore a cache by this prefix
          restore-prefixes-first-match: nix-${{ runner.os }}
          # collect garbage until the Nix store size (in bytes) is at most this number
          # before trying to save a new cache
          gc-max-store-size-linux: 5G

      - name: Update inputs
        run: nix/update-inputs.sh

      - name: Commit
        uses: stefanzweifel/git-auto-commit-action@v5
        with:
          commit_message: "[gha] Nix: update inputs"


================================================
FILE: .github/workflows/nix.yml
================================================
name: Build

on:
  workflow_call:
    inputs:
      command:
        required: true
        type: string
        description: Command to run
    secrets:
      CACHIX_AUTH_TOKEN:
        required: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Install Nix
        uses: nixbuild/nix-quick-install-action@v31
        with:
          nix_conf: |
            keep-env-derivations = true
            keep-outputs = true

      - name: Restore and save Nix store
        uses: nix-community/cache-nix-action@v6
        with:
          # restore and save a cache using this key (per job)
          primary-key: nix-${{ runner.os }}-${{ github.job }}
          # if there's no cache hit, restore a cache by this prefix
          restore-prefixes-first-match: nix-${{ runner.os }}
          # collect garbage until the Nix store size (in bytes) is at most this number
          # before trying to save a new cache
          gc-max-store-size-linux: 5G

      - uses: cachix/cachix-action@v15
        with:
          name: hyprland
          authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}"

      - run: ${{ inputs.command }}


================================================
FILE: .github/workflows/release.yaml
================================================
name: Release artifacts

on:
  release:
    types: [published]
  workflow_dispatch:

jobs:
  source-tarball:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v5
        with:
          fetch-depth: 0
          submodules: recursive

      - name: Populate git info in version.h.in
        run: |
          git fetch --tags --unshallow || true

          COMMIT_HASH=$(git rev-parse HEAD)
          BRANCH="${GITHUB_REF_NAME:-$(git rev-parse --abbrev-ref HEAD)}"
          COMMIT_MSG=$(git show -s --format=%s | sed 's/[&/]/\\&/g')
          COMMIT_DATE=$(git show -s --format=%cd --date=local)
          GIT_DIRTY=$(git diff-index --quiet HEAD -- && echo "clean" || echo "dirty")
          GIT_TAG=$(git describe --tags --always || echo "unknown")
          GIT_COMMITS=$(git rev-list --count HEAD)

          echo "Branch: $BRANCH"
          echo "Tag: $GIT_TAG"

          sed -i \
            -e "s|@GIT_COMMIT_HASH@|$COMMIT_HASH|" \
            -e "s|@GIT_BRANCH@|$BRANCH|" \
            -e "s|@GIT_COMMIT_MESSAGE@|$COMMIT_MSG|" \
            -e "s|@GIT_COMMIT_DATE@|$COMMIT_DATE|" \
            -e "s|@GIT_DIRTY@|$GIT_DIRTY|" \
            -e "s|@GIT_TAG@|$GIT_TAG|" \
            -e "s|@GIT_COMMITS@|$GIT_COMMITS|" \
            src/version.h.in

      - name: Create tarball with submodules
        id: tar
        run: |
          mkdir hyprland-source; mv ./* ./hyprland-source || tar -czv --owner=0 --group=0 --no-same-owner --no-same-permissions -f source.tar.gz *

      - id: whatrelease
        name: Get latest release
        uses: pozetroninc/github-action-get-latest-release@master
        with:
          owner: hyprwm
          repo: Hyprland
          excludes: prerelease, draft

      - name: Upload to release
        id: upload
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: source.tar.gz
          asset_name: source-${{ steps.whatrelease.outputs.release }}.tar.gz
          tag: ${{ steps.whatrelease.outputs.release }}
          overwrite: true


================================================
FILE: .github/workflows/security-checks.yml
================================================
name: Security Checks

on: [push, pull_request]

jobs:
  flawfinder:
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.fork
    name: Flawfinder Checks
    runs-on: ubuntu-latest
    permissions:
      actions: read
      contents: read
      security-events: write
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Scan with Flawfinder
        uses: david-a-wheeler/flawfinder@8e4a779ad59dbfaee5da586aa9210853b701959c
        with:
          arguments: '--sarif ./'
          output: 'flawfinder_results.sarif'

      - name: Upload analysis results to GitHub Security tab
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: ${{github.workspace}}/flawfinder_results.sarif


================================================
FILE: .github/workflows/translation-ai-check.yml
================================================
name: AI Translation Check

on:
  # pull_request_target:
  #   types:
  #     - opened
  issue_comment:
    types:
      - created

permissions:
  contents: read
  pull-requests: write
  issues: write

jobs:
  review:
    name: Review Translation
    if: ${{ github.event_name == 'pull_request_target' || (github.event_name == 'issue_comment' && github.event.action == 'created' && github.event.issue.pull_request != null && github.event.comment.user.login == 'vaxerski' && github.event.comment.body == 'ai, please recheck' ) }}
    runs-on: ubuntu-latest
    env:
      OPENAI_MODEL: gpt-5-mini
      SYSTEM_PROMPT: |
        You are a programmer and a translator. Your job is to review the attached patch for adding translation to a piece of software and make sure the submitted translation is not malicious, and that it makes sense. If the translation is not malicious, and doesn't contain obvious grammatical mistakes, say "Translation check OK". Otherwise, say "Translation check not ok" and list bad entries.
        Examples of bad translations include obvious trolling (slurs, etc) or nonsense sentences. Meaningful improvements may be suggested, but if there are only minor improvements, just reply with "Translation check OK". Do not provide anything but the result and (if applicable) the bad entries or improvements.

      AI_PROMPT: Translation patch below.

    steps:
      - name: Checkout source code
        uses: actions/checkout@v5

      - uses: dorny/paths-filter@v3
        id: changes
        with:
          filters: |
            i18n:
              - 'src/i18n/**'

      - name: Stop if i18n not changed
        if: steps.changes.outputs.i18n != 'true'
        run: echo "No i18n changes in this PR; skipping." && exit 0

      - name: Determine PR number
        id: pr
        run: |
          if [ "${{ github.event_name }}" = "pull_request_target" ]; then
            echo "number=${{ github.event.pull_request.number }}" >> "$GITHUB_OUTPUT"
          else
            echo "number=${{ github.event.issue.number }}" >> "$GITHUB_OUTPUT"
          fi

      - name: Download combined PR diff
        id: get_diff
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PR_NUMBER: ${{ steps.pr.outputs.number }}
        run: |
          # Get the combined diff for the entire PR
          curl -sSL \
            -H "Authorization: token $GITHUB_TOKEN" \
            -H "Accept: application/vnd.github.v3.diff" \
            "https://api.github.com/repos/${{ github.repository }}/pulls/$PR_NUMBER" \
            -o pr.diff

          # Compute character length
          LEN=$(wc -c < pr.diff | tr -d ' ')
          echo "len=$LEN" >> "$GITHUB_OUTPUT"
          if [ "$LEN" -gt 25000 ]; then
            echo "too_long=true" >> "$GITHUB_OUTPUT"
          else
            echo "too_long=false" >> "$GITHUB_OUTPUT"
          fi

          echo "got diff:"
          cat pr.diff

      - name: Comment when diff length exceeded
        if: steps.get_diff.outputs.too_long == 'true'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PR_NUMBER: ${{ steps.pr.outputs.number }}
        run: |
          jq -n --arg body "Diff length exceeded, can't query API" '{body: ("AI translation check result:\n\n" + $body)}' > body.json
          curl -sS -X POST \
            -H "Authorization: token $GITHUB_TOKEN" \
            -H "Content-Type: application/json" \
            "https://api.github.com/repos/${{ github.repository }}/issues/$PR_NUMBER/comments" \
            --data @body.json

      - name: Query OpenAI and post review
        if: steps.get_diff.outputs.too_long == 'false'
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          OPENAI_MODEL: ${{ env.OPENAI_MODEL }}
          SYSTEM_PROMPT: ${{ env.SYSTEM_PROMPT }}
          AI_PROMPT: ${{ env.AI_PROMPT }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PR_NUMBER: ${{ steps.pr.outputs.number }}
        run: |
          # Prepare OpenAI chat request payload (embed diff safely)
          jq -n \
            --arg model "$OPENAI_MODEL" \
            --arg sys "$SYSTEM_PROMPT" \
            --arg prompt "$AI_PROMPT" \
            --rawfile diff pr.diff \
            '{model:$model,
              messages:[
                {role:"system", content:$sys},
                {role:"user", content: ($prompt + "\n\n```diff\n" + $diff + "\n```")}
              ]
            }' > payload.json

          # Call OpenAI
          curl -sS https://api.openai.com/v1/chat/completions \
            -H "Authorization: Bearer $OPENAI_API_KEY" \
            -H "Content-Type: application/json" \
            -d @payload.json > response.json

          # Extract response text
          COMMENT=$(jq -r '.choices[0].message.content // empty' response.json)
          if [ -z "$COMMENT" ]; then
            COMMENT="AI did not return a response."
          fi

          # If failed, add a note
          ADDITIONAL_NOTE=""
          if [[ "$COMMENT" == *"not ok"* ]]; then
            ADDITIONAL_NOTE=$(echo -ne "\n\nPlease note this check is a guideline, not a hard requirement. It is here to help you translate. If you disagree with some points, just state that. Any typos should be fixed.")
          fi

          # Post the review as a PR comment
          jq -n --arg body "$COMMENT" --arg note "$ADDITIONAL_NOTE" '{body: ("AI translation check result:\n\n" + $body + $note)}' > body.json
          echo "CURLing https://api.github.com/repos/${{ github.repository }}/issues/$PR_NUMBER/comments"
          curl -sS -X POST \
            -H "Authorization: token $GITHUB_TOKEN" \
            -H "Content-Type: application/json" \
            "https://api.github.com/repos/${{ github.repository }}/issues/$PR_NUMBER/comments" \
            --data @body.json


================================================
FILE: .gitignore
================================================
CMakeLists.txt.user
CMakeCache.txt
CMakeFiles
CMakeScripts
Testing
cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake
CPackConfig.cmake
CPackSourceConfig.cmake
hyprland.pc
_deps

build/
result*
/.pre-commit-config.yaml
/.vscode/
/.idea/
.envrc
.cache
.direnv
/.cmake/
/.worktree/

*.o
protocols/*.c*
protocols/*.h*
.ccls-cache
*.so
src/render/shaders/*.inc
src/render/shaders/Shaders.hpp

hyprctl/hyprctl
hyprctl/hw-protocols/*.c*
hyprctl/hw-protocols/*.h*

gmon.out
*.out
*.tar.gz

PKGBUILD

src/version.h
hyprpm/Makefile
hyprctl/Makefile
example/hyprland.desktop

**/.#*.*
**/#*.*#


================================================
FILE: .gitmodules
================================================
[submodule "subprojects/hyprland-protocols"]
	path = subprojects/hyprland-protocols
	url = https://github.com/hyprwm/hyprland-protocols
[submodule "subprojects/udis86"]
	path = subprojects/udis86
	url = https://github.com/canihavesomecoffee/udis86
[submodule "subprojects/tracy"]
	path = subprojects/tracy
	url = https://github.com/wolfpld/tracy


================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.30)

# Get version
file(READ "${CMAKE_SOURCE_DIR}/VERSION" VER_RAW)
string(STRIP ${VER_RAW} VER)

project(
  Hyprland
  DESCRIPTION "A Modern C++ Wayland Compositor"
  VERSION ${VER})

include(CTest)
include(CheckIncludeFile)
include(GNUInstallDirs)

set(HYPRLAND_VERSION ${VER})
set(PREFIX ${CMAKE_INSTALL_PREFIX})
set(INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR})
set(BINDIR ${CMAKE_INSTALL_BINDIR})

set(CMAKE_MESSAGE_LOG_LEVEL "STATUS")

message(STATUS "Gathering git info")

# Make shader files includable
execute_process(COMMAND ./scripts/generateShaderIncludes.sh
                WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
                RESULT_VARIABLE HYPR_SHADER_GEN_RESULT)
if(NOT HYPR_SHADER_GEN_RESULT EQUAL 0)
  message(
    FATAL_ERROR
      "Failed to generate shader includes (scripts/generateShaderIncludes.sh), exit code: ${HYPR_SHADER_GEN_RESULT}"
  )
endif()

find_package(PkgConfig REQUIRED)

# Try to find canihavesomecoffee's udis86 using pkgconfig vmd/udis86 does not
# provide a .pc file and won't be detected this way
pkg_check_modules(udis_dep IMPORTED_TARGET udis86>=1.7.2)

# Find non-pkgconfig udis86, otherwise fallback to subproject
if(NOT udis_dep_FOUND)
  find_library(udis_nopc udis86)
  if(NOT("${udis_nopc}" MATCHES "udis_nopc-NOTFOUND"))
    message(STATUS "Found udis86 at ${udis_nopc}")
  else()
    add_subdirectory("subprojects/udis86")
    include_directories("subprojects/udis86")
    message(STATUS "udis86 dependency not found, falling back to subproject")
  endif()
endif()

find_library(librt rt)
if("${librt}" MATCHES "librt-NOTFOUND")
  unset(LIBRT)
else()
  set(LIBRT rt)
endif()

if(CMAKE_BUILD_TYPE)
  string(TOLOWER ${CMAKE_BUILD_TYPE} BUILDTYPE_LOWER)
  if(BUILDTYPE_LOWER STREQUAL "release")
    # Pass.
  elseif(BUILDTYPE_LOWER STREQUAL "debug")
    # Pass.
  elseif(BUILDTYPE_LOWER STREQUAL "relwithdebinfo")
    set(BUILDTYPE_LOWER "debugoptimized")
  elseif(BUILDTYPE_LOWER STREQUAL "minsizerel")
    set(BUILDTYPE_LOWER "minsize")
  elseif(BUILDTYPE_LOWER STREQUAL "none")
    set(BUILDTYPE_LOWER "plain")
  else()
    set(BUILDTYPE_LOWER "release")
  endif()
else()
  set(BUILDTYPE_LOWER "release")
endif()

pkg_get_variable(WAYLAND_PROTOCOLS_DIR wayland-protocols pkgdatadir)
message(STATUS "Found wayland-protocols at ${WAYLAND_PROTOCOLS_DIR}")
pkg_get_variable(WAYLAND_SCANNER_PKGDATA_DIR wayland-scanner pkgdatadir)
message(
  STATUS "Found wayland-scanner pkgdatadir at ${WAYLAND_SCANNER_PKGDATA_DIR}")

if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG)
  message(STATUS "Configuring Hyprland in Debug with CMake")
  add_compile_definitions(HYPRLAND_DEBUG)
  set(BUILD_TESTING ON)
else()
  add_compile_options(-O3)
  message(STATUS "Configuring Hyprland in Release with CMake")
  set(BUILD_TESTING OFF)
endif()

add_compile_definitions(HYPRLAND_VERSION="${HYPRLAND_VERSION}")

include_directories(. "src/" "protocols/")

set(CMAKE_CXX_STANDARD 26)
set(CXX_STANDARD_REQUIRED ON)
add_compile_options(
  -Wall
  -Wextra
  -Wpedantic
  -Wno-unused-parameter
  -Wno-unused-value
  -Wno-missing-field-initializers
  -Wno-gnu-zero-variadic-macro-arguments
  -Wno-narrowing
  -Wno-pointer-arith
  -Wno-clobbered
  -frtti
  -fmacro-prefix-map=${CMAKE_SOURCE_DIR}/=)

# disable lto as it may break plugins
add_compile_options(-fno-lto)

set(CMAKE_EXECUTABLE_ENABLE_EXPORTS TRUE)
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)

message(STATUS "Checking deps...")

find_package(Threads REQUIRED)

set(GLES_VERSION "GLES3")
find_package(OpenGL REQUIRED COMPONENTS ${GLES_VERSION})
find_package(glslang CONFIG REQUIRED)

set(AQUAMARINE_MINIMUM_VERSION 0.9.3)
set(HYPRLANG_MINIMUM_VERSION 0.6.7)
set(HYPRCURSOR_MINIMUM_VERSION 0.1.7)
set(HYPRUTILS_MINIMUM_VERSION 0.11.0)
set(HYPRGRAPHICS_MINIMUM_VERSION 0.1.6)

pkg_check_modules(aquamarine_dep REQUIRED IMPORTED_TARGET aquamarine>=${AQUAMARINE_MINIMUM_VERSION})
pkg_check_modules(hyprlang_dep REQUIRED IMPORTED_TARGET hyprlang>=${HYPRLANG_MINIMUM_VERSION})
pkg_check_modules(hyprcursor_dep REQUIRED IMPORTED_TARGET hyprcursor>=${HYPRCURSOR_MINIMUM_VERSION})
pkg_check_modules(hyprutils_dep REQUIRED IMPORTED_TARGET hyprutils>=${HYPRUTILS_MINIMUM_VERSION})
pkg_check_modules(hyprgraphics_dep REQUIRED IMPORTED_TARGET hyprgraphics>=${HYPRGRAPHICS_MINIMUM_VERSION})

string(REPLACE "." ";" AQ_VERSION_LIST ${aquamarine_dep_VERSION})
list(GET AQ_VERSION_LIST 0 AQ_VERSION_MAJOR)
list(GET AQ_VERSION_LIST 1 AQ_VERSION_MINOR)
list(GET AQ_VERSION_LIST 2 AQ_VERSION_PATCH)

set(AQUAMARINE_VERSION "${aquamarine_dep_VERSION}")
set(AQUAMARINE_VERSION_MAJOR "${AQ_VERSION_MAJOR}")
set(AQUAMARINE_VERSION_MINOR "${AQ_VERSION_MINOR}")
set(AQUAMARINE_VERSION_PATCH "${AQ_VERSION_PATCH}")
set(HYPRLANG_VERSION "${hyprlang_dep_VERSION}")
set(HYPRUTILS_VERSION "${hyprutils_dep_VERSION}")
set(HYPRCURSOR_VERSION "${hyprcursor_dep_VERSION}")
set(HYPRGRAPHICS_VERSION "${hyprgraphics_dep_VERSION}")


find_package(Git QUIET)

# Populate variables with env vars if present
set(GIT_COMMIT_HASH "$ENV{GIT_COMMIT_HASH}")
if(NOT GIT_COMMIT_HASH)
  set(GIT_COMMIT_HASH "unknown")
endif()

set(GIT_BRANCH "$ENV{GIT_BRANCH}")
if(NOT GIT_BRANCH)
  set(GIT_BRANCH "unknown")
endif()

set(GIT_COMMIT_MESSAGE "$ENV{GIT_COMMIT_MESSAGE}")
if(NOT GIT_COMMIT_MESSAGE)
  set(GIT_COMMIT_MESSAGE "unknown")
endif()

set(GIT_COMMIT_DATE "$ENV{GIT_COMMIT_DATE}")
if(NOT GIT_COMMIT_DATE)
  set(GIT_COMMIT_DATE "unknown")
endif()

set(GIT_DIRTY "$ENV{GIT_DIRTY}")
if(NOT GIT_DIRTY)
  set(GIT_DIRTY "unknown")
endif()

set(GIT_TAG "$ENV{GIT_TAG}")
if(NOT GIT_TAG)
  set(GIT_TAG "unknown")
endif()

set(GIT_COMMITS "$ENV{GIT_COMMITS}")
if(NOT GIT_COMMITS)
  set(GIT_COMMITS "0")
endif()

if(Git_FOUND)
  execute_process(
    COMMAND ${GIT_EXECUTABLE} rev-parse --show-toplevel
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
    OUTPUT_VARIABLE GIT_TOPLEVEL
    OUTPUT_STRIP_TRAILING_WHITESPACE
    ERROR_QUIET
    RESULT_VARIABLE GIT_TOPLEVEL_RESULT
  )

  if(GIT_TOPLEVEL_RESULT EQUAL 0)
    message(STATUS "Detected git repository root: ${GIT_TOPLEVEL}")

    execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
      WORKING_DIRECTORY ${GIT_TOPLEVEL}
      OUTPUT_VARIABLE GIT_COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE)
    execute_process(COMMAND ${GIT_EXECUTABLE} branch --show-current
      WORKING_DIRECTORY ${GIT_TOPLEVEL}
      OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE)
    execute_process(COMMAND sh "-c" "${GIT_EXECUTABLE} show -s --format=%s --no-show-signature | sed \"s/\\\"/\'/g\""
      WORKING_DIRECTORY ${GIT_TOPLEVEL}
      OUTPUT_VARIABLE GIT_COMMIT_MESSAGE OUTPUT_STRIP_TRAILING_WHITESPACE)
    execute_process(COMMAND ${GIT_EXECUTABLE} show -s --format=%cd --date=local --no-show-signature
      WORKING_DIRECTORY ${GIT_TOPLEVEL}
      OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE)
    execute_process(COMMAND ${GIT_EXECUTABLE} diff-index --quiet HEAD --
      WORKING_DIRECTORY ${GIT_TOPLEVEL}
      RESULT_VARIABLE GIT_DIRTY_RESULT)
    if(NOT GIT_DIRTY_RESULT EQUAL 0)
      set(GIT_DIRTY "dirty")
    else()
      set(GIT_DIRTY "clean")
    endif()
    execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags
      WORKING_DIRECTORY ${GIT_TOPLEVEL}
      OUTPUT_VARIABLE GIT_TAG OUTPUT_STRIP_TRAILING_WHITESPACE)
    execute_process(COMMAND ${GIT_EXECUTABLE} rev-list --count HEAD
      WORKING_DIRECTORY ${GIT_TOPLEVEL}
      OUTPUT_VARIABLE GIT_COMMITS OUTPUT_STRIP_TRAILING_WHITESPACE)
  else()
    message(WARNING "No Git repository detected in ${CMAKE_SOURCE_DIR}")
  endif()
endif()

configure_file(
    ${CMAKE_SOURCE_DIR}/src/version.h.in
    ${CMAKE_SOURCE_DIR}/src/version.h
    @ONLY
)

set_source_files_properties(${CMAKE_SOURCE_DIR}/src/version.h PROPERTIES GENERATED TRUE)

set(XKBCOMMON_MINIMUM_VERSION 1.11.0)
set(WAYLAND_SERVER_MINIMUM_VERSION 1.22.91)
set(WAYLAND_SERVER_PROTOCOLS_MINIMUM_VERSION 1.45)
set(LIBINPUT_MINIMUM_VERSION 1.28)

pkg_check_modules(
  deps
  REQUIRED
  IMPORTED_TARGET GLOBAL
  xkbcommon>=${XKBCOMMON_MINIMUM_VERSION}
  uuid
  wayland-server>=${WAYLAND_SERVER_MINIMUM_VERSION}
  wayland-protocols>=${WAYLAND_SERVER_PROTOCOLS_MINIMUM_VERSION}
  cairo
  pango
  pangocairo
  pixman-1
  xcursor
  libdrm
  libinput>=${LIBINPUT_MINIMUM_VERSION}
  gbm
  gio-2.0
  re2
  muparser
  lcms2)

find_package(hyprwayland-scanner 0.3.10 REQUIRED)

file(GLOB_RECURSE SRCFILES "src/*.cpp")
get_filename_component(FULL_MAIN_PATH ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp ABSOLUTE)
list(REMOVE_ITEM SRCFILES "${FULL_MAIN_PATH}")

set(TRACY_CPP_FILES "")
if(USE_TRACY)
  set(TRACY_CPP_FILES "subprojects/tracy/public/TracyClient.cpp")
  message(STATUS "Tracy enabled, TRACY_CPP_FILES: " ${TRACY_CPP_FILES})
endif()

add_library(hyprland_lib STATIC ${SRCFILES})
add_executable(Hyprland src/main.cpp ${TRACY_CPP_FILES})
target_link_libraries(Hyprland hyprland_lib)

target_include_directories(hyprland_lib PUBLIC ${deps_INCLUDE_DIRS})
target_include_directories(Hyprland PUBLIC ${deps_INCLUDE_DIRS})

set(USE_GPROF OFF)

if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG)
  message(STATUS "Setting debug flags")

  if(WITH_ASAN)
    message(STATUS "Enabling ASan")

    target_link_libraries(hyprland_lib PUBLIC asan)
    target_compile_options(hyprland_lib PUBLIC -fsanitize=address)
  endif()

  add_compile_options(-fno-pie -fno-builtin)
  add_link_options(-no-pie -fno-builtin)
  if(USE_GPROF)
    add_compile_options(-pg)
    add_link_options(-pg)
  endif()
endif()

if(USE_TRACY)
  message(STATUS "Tracy is turned on")

  option(TRACY_ENABLE "" ON)
  option(TRACY_ON_DEMAND "" ON)
  add_subdirectory(subprojects/tracy)

  add_compile_options(-fno-omit-frame-pointer)

  target_link_libraries(hyprland_lib PUBLIC Tracy::TracyClient)

  if(USE_TRACY_GPU)
    message(STATUS "Tracy GPU Profiling is turned on")
    add_compile_definitions(USE_TRACY_GPU)
  endif()
endif()

if(BUILT_WITH_NIX)
  add_compile_definitions(BUILT_WITH_NIX)
endif()

check_include_file("execinfo.h" EXECINFOH)
if(EXECINFOH)
  message(STATUS "Configuration supports execinfo")
  add_compile_definitions(HAS_EXECINFO)
endif()

include(CheckLibraryExists)
check_library_exists(execinfo backtrace "" HAVE_LIBEXECINFO)
if(HAVE_LIBEXECINFO)
  target_link_libraries(hyprland_lib PUBLIC execinfo)
endif()

check_include_file("sys/timerfd.h" HAS_TIMERFD)
pkg_check_modules(epoll IMPORTED_TARGET epoll-shim)
if(NOT HAS_TIMERFD AND epoll_FOUND)
  target_link_libraries(hyprland_lib PUBLIC PkgConfig::epoll)
endif()

check_include_file("sys/inotify.h" HAS_INOTIFY)
pkg_check_modules(inotify IMPORTED_TARGET libinotify)
if(NOT HAS_INOTIFY AND inotify_FOUND)
  target_link_libraries(hyprland_lib PUBLIC PkgConfig::inotify)
endif()

if(NO_XWAYLAND)
  message(STATUS "Using the NO_XWAYLAND flag, disabling XWayland!")
  add_compile_definitions(NO_XWAYLAND)
else()
  message(STATUS "XWAYLAND Enabled (NO_XWAYLAND not defined) checking deps...")
  set(XWAYLAND_DEPENDENCIES
    xcb
    xcb-render
    xcb-xfixes
    xcb-icccm
    xcb-composite
    xcb-res
    xcb-errors)

  pkg_check_modules(
    xdeps
    REQUIRED
    IMPORTED_TARGET
    ${XWAYLAND_DEPENDENCIES})

  string(JOIN ", " PKGCONFIG_XWAYLAND_DEPENDENCIES ${XWAYLAND_DEPENDENCIES})
  string(PREPEND PKGCONFIG_XWAYLAND_DEPENDENCIES ", ")

  target_link_libraries(hyprland_lib PUBLIC PkgConfig::xdeps)
endif()

configure_file(hyprland.pc.in hyprland.pc @ONLY)

if(NO_SYSTEMD)
  message(STATUS "SYSTEMD support is disabled...")
else()
  message(STATUS "SYSTEMD support is requested (NO_SYSTEMD not defined)...")
  add_compile_definitions(USES_SYSTEMD)

  # session file -uwsm
  if(NO_UWSM)
    message(STATUS "UWSM support is disabled...")
  else()
    message(STATUS "UWSM support is enabled (NO_UWSM not defined)...")
    install(FILES ${CMAKE_SOURCE_DIR}/systemd/hyprland-uwsm.desktop
            DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/wayland-sessions)
  endif()
endif()

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

if(CMAKE_DISABLE_PRECOMPILE_HEADERS)
  message(STATUS "Not using precompiled headers")
else()
  message(STATUS "Setting precompiled headers")
  target_precompile_headers(hyprland_lib PRIVATE
                            $<$<COMPILE_LANGUAGE:CXX>:src/pch/pch.hpp>)
endif()

message(STATUS "Setting link libraries")

target_link_libraries(
  hyprland_lib
  PUBLIC
  PkgConfig::aquamarine_dep
  PkgConfig::hyprlang_dep
  PkgConfig::hyprutils_dep
  PkgConfig::hyprcursor_dep
  PkgConfig::hyprgraphics_dep
  PkgConfig::deps
)

target_link_libraries(
  Hyprland
  ${LIBRT}
  hyprland_lib)
if(udis_dep_FOUND)
  target_link_libraries(hyprland_lib PUBLIC PkgConfig::udis_dep)
elseif(NOT("${udis_nopc}" MATCHES "udis_nopc-NOTFOUND"))
  target_link_libraries(hyprland_lib PUBLIC ${udis_nopc})
else()
  target_link_libraries(hyprland_lib PUBLIC libudis86)
endif()

# used by `make installheaders`, to ensure the headers are generated
add_custom_target(generate-protocol-headers)
set(PROTOCOL_SOURCES "")

function(protocolnew protoPath protoName external)
  if(external)
    set(path ${protoPath})
  else()
    set(path ${WAYLAND_PROTOCOLS_DIR}/${protoPath})
  endif()
  add_custom_command(
    OUTPUT ${CMAKE_SOURCE_DIR}/protocols/${protoName}.cpp
           ${CMAKE_SOURCE_DIR}/protocols/${protoName}.hpp
    COMMAND hyprwayland-scanner ${path}/${protoName}.xml
            ${CMAKE_SOURCE_DIR}/protocols/
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
  target_sources(hyprland_lib PRIVATE protocols/${protoName}.cpp
                                  protocols/${protoName}.hpp)
  target_sources(generate-protocol-headers
                 PRIVATE ${CMAKE_SOURCE_DIR}/protocols/${protoName}.hpp)

  list(APPEND PROTOCOL_SOURCES "${CMAKE_SOURCE_DIR}/protocols/${protoName}.cpp")
  set(PROTOCOL_SOURCES "${PROTOCOL_SOURCES}" PARENT_SCOPE)
  list(APPEND PROTOCOL_SOURCES "${CMAKE_SOURCE_DIR}/protocols/${protoName}.hpp")
  set(PROTOCOL_SOURCES "${PROTOCOL_SOURCES}" PARENT_SCOPE)
endfunction()
function(protocolWayland)
  add_custom_command(
    OUTPUT ${CMAKE_SOURCE_DIR}/protocols/wayland.cpp
           ${CMAKE_SOURCE_DIR}/protocols/wayland.hpp
    COMMAND
      hyprwayland-scanner --wayland-enums
      ${WAYLAND_SCANNER_PKGDATA_DIR}/wayland.xml ${CMAKE_SOURCE_DIR}/protocols/
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
  target_sources(hyprland_lib PRIVATE protocols/wayland.cpp protocols/wayland.hpp)
  target_sources(generate-protocol-headers
                 PRIVATE ${CMAKE_SOURCE_DIR}/protocols/wayland.hpp)

  list(APPEND PROTOCOL_SOURCES "${CMAKE_SOURCE_DIR}/protocols/wayland.hpp")
  set(PROTOCOL_SOURCES "${PROTOCOL_SOURCES}" PARENT_SCOPE)
  list(APPEND PROTOCOL_SOURCES "${CMAKE_SOURCE_DIR}/protocols/wayland.cpp")
  set(PROTOCOL_SOURCES "${PROTOCOL_SOURCES}" PARENT_SCOPE)
endfunction()

if(TARGET OpenGL::GL)
  target_link_libraries(hyprland_lib PUBLIC OpenGL::EGL OpenGL::GL glslang::glslang glslang::glslang-default-resource-limits glslang::SPIRV Threads::Threads)
else()
  target_link_libraries(hyprland_lib PUBLIC OpenGL::EGL OpenGL::GLES3 glslang::glslang glslang::glslang-default-resource-limits glslang::SPIRV Threads::Threads)
endif()

pkg_check_modules(hyprland_protocols_dep hyprland-protocols>=0.6.4)
if(hyprland_protocols_dep_FOUND)
  pkg_get_variable(HYPRLAND_PROTOCOLS hyprland-protocols pkgdatadir)
  message(STATUS "hyprland-protocols dependency set to ${HYPRLAND_PROTOCOLS}")
else()
  set(HYPRLAND_PROTOCOLS "subprojects/hyprland-protocols")
  message(STATUS "hyprland-protocols subproject set to ${HYPRLAND_PROTOCOLS}")
endif()

protocolnew("${HYPRLAND_PROTOCOLS}/protocols" "hyprland-global-shortcuts-v1"
            true)
protocolnew("unstable/text-input" "text-input-unstable-v1" false)
protocolnew("${HYPRLAND_PROTOCOLS}/protocols" "hyprland-toplevel-export-v1"
            true)
protocolnew("protocols" "wlr-screencopy-unstable-v1" true)
protocolnew("protocols" "wlr-gamma-control-unstable-v1" true)
protocolnew("protocols" "wlr-foreign-toplevel-management-unstable-v1" true)
protocolnew("protocols" "wlr-output-power-management-unstable-v1" true)
protocolnew("protocols" "virtual-keyboard-unstable-v1" true)
protocolnew("protocols" "wlr-virtual-pointer-unstable-v1" true)
protocolnew("protocols" "input-method-unstable-v2" true)
protocolnew("protocols" "wlr-output-management-unstable-v1" true)
protocolnew("protocols" "kde-server-decoration" true)
protocolnew("protocols" "wlr-data-control-unstable-v1" true)
protocolnew("${HYPRLAND_PROTOCOLS}/protocols" "hyprland-focus-grab-v1" true)
protocolnew("protocols" "wlr-layer-shell-unstable-v1" true)
protocolnew("protocols" "wayland-drm" true)
protocolnew("${HYPRLAND_PROTOCOLS}/protocols" "hyprland-ctm-control-v1" true)
protocolnew("${HYPRLAND_PROTOCOLS}/protocols" "hyprland-surface-v1" true)
protocolnew("${HYPRLAND_PROTOCOLS}/protocols" "hyprland-lock-notify-v1" true)
protocolnew("${HYPRLAND_PROTOCOLS}/protocols" "hyprland-toplevel-mapping-v1"
            true)

protocolnew("staging/tearing-control" "tearing-control-v1" false)
protocolnew("staging/fractional-scale" "fractional-scale-v1" false)
protocolnew("unstable/xdg-output" "xdg-output-unstable-v1" false)
protocolnew("staging/cursor-shape" "cursor-shape-v1" false)
protocolnew("unstable/idle-inhibit" "idle-inhibit-unstable-v1" false)
protocolnew("unstable/relative-pointer" "relative-pointer-unstable-v1" false)
protocolnew("unstable/xdg-decoration" "xdg-decoration-unstable-v1" false)
protocolnew("staging/alpha-modifier" "alpha-modifier-v1" false)
protocolnew("staging/ext-foreign-toplevel-list" "ext-foreign-toplevel-list-v1"
            false)
protocolnew("unstable/pointer-gestures" "pointer-gestures-unstable-v1" false)
protocolnew("unstable/keyboard-shortcuts-inhibit"
            "keyboard-shortcuts-inhibit-unstable-v1" false)
protocolnew("unstable/text-input" "text-input-unstable-v3" false)
protocolnew("unstable/pointer-constraints" "pointer-constraints-unstable-v1"
            false)
protocolnew("staging/xdg-activation" "xdg-activation-v1" false)
protocolnew("staging/ext-idle-notify" "ext-idle-notify-v1" false)
protocolnew("staging/ext-session-lock" "ext-session-lock-v1" false)
protocolnew("stable/tablet" "tablet-v2" false)
protocolnew("stable/presentation-time" "presentation-time" false)
protocolnew("stable/xdg-shell" "xdg-shell" false)
protocolnew("unstable/primary-selection" "primary-selection-unstable-v1" false)
protocolnew("staging/xwayland-shell" "xwayland-shell-v1" false)
protocolnew("stable/viewporter" "viewporter" false)
protocolnew("stable/linux-dmabuf" "linux-dmabuf-v1" false)
protocolnew("staging/drm-lease" "drm-lease-v1" false)
protocolnew("staging/linux-drm-syncobj" "linux-drm-syncobj-v1" false)
protocolnew("staging/xdg-dialog" "xdg-dialog-v1" false)
protocolnew("staging/single-pixel-buffer" "single-pixel-buffer-v1" false)
protocolnew("staging/security-context" "security-context-v1" false)
protocolnew("staging/content-type" "content-type-v1" false)
protocolnew("staging/color-management" "color-management-v1" false)
protocolnew("staging/xdg-toplevel-tag" "xdg-toplevel-tag-v1" false)
protocolnew("staging/xdg-system-bell" "xdg-system-bell-v1" false)
protocolnew("staging/ext-workspace" "ext-workspace-v1" false)
protocolnew("staging/ext-data-control" "ext-data-control-v1" false)
protocolnew("staging/pointer-warp" "pointer-warp-v1" false)
protocolnew("staging/fifo" "fifo-v1" false)
protocolnew("staging/commit-timing" "commit-timing-v1" false)
protocolnew("staging/ext-image-capture-source" "ext-image-capture-source-v1" false)
protocolnew("staging/ext-image-copy-capture" "ext-image-copy-capture-v1" false)

protocolwayland()

# tools
add_subdirectory(hyprctl)
add_subdirectory(start)

if(NO_HYPRPM)
  message(STATUS "hyprpm is disabled")
else()
  add_subdirectory(hyprpm)
  message(STATUS "hyprpm is enabled (NO_HYPRPM not defined)")
endif()

# binary and symlink
install(TARGETS Hyprland)

install(
  CODE "execute_process( \
        COMMAND ${CMAKE_COMMAND} -E create_symlink \
        ${CMAKE_INSTALL_FULL_BINDIR}/Hyprland \
        \"\$ENV{DESTDIR}${CMAKE_INSTALL_FULL_BINDIR}/hyprland\" \
        )")
# session file
configure_file(
    ${CMAKE_SOURCE_DIR}/example/hyprland.desktop.in
    ${CMAKE_SOURCE_DIR}/example/hyprland.desktop
    @ONLY
)
install(FILES ${CMAKE_SOURCE_DIR}/example/hyprland.desktop
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/wayland-sessions)

# allow Hyprland to find assets
add_compile_definitions(DATAROOTDIR="${CMAKE_INSTALL_FULL_DATAROOTDIR}")

# installable assets
file(GLOB_RECURSE INSTALLABLE_ASSETS "assets/install/*")
install(FILES ${INSTALLABLE_ASSETS}
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/hypr)

# default config
install(FILES ${CMAKE_SOURCE_DIR}/example/hyprland.conf
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/hypr)

# portal config
install(FILES ${CMAKE_SOURCE_DIR}/assets/hyprland-portals.conf
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/xdg-desktop-portal)

# man pages
file(GLOB_RECURSE MANPAGES "docs/*.1")
install(FILES ${MANPAGES} DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)

# pkgconfig entry
install(FILES ${CMAKE_BINARY_DIR}/hyprland.pc
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)

# protocol headers
set(HEADERS_PROTO "${CMAKE_CURRENT_SOURCE_DIR}/protocols")
install(
  DIRECTORY ${HEADERS_PROTO}
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hyprland
  FILES_MATCHING
  PATTERN "*.h*")

# hyprland headers
set(HEADERS_SRC "${CMAKE_CURRENT_SOURCE_DIR}/src")
install(
  DIRECTORY ${HEADERS_SRC}
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hyprland
  FILES_MATCHING
  PATTERN "*.h"
  PATTERN "*.hpp"
  PATTERN "*.inc")

if(BUILD_TESTING OR WITH_TESTS)
  message(STATUS "Building tests")

  # hyprtester
  add_subdirectory(hyprtester)

  # GTest
  find_package(GTest CONFIG REQUIRED)
  include(GoogleTest)
  file(GLOB_RECURSE TESTFILES "tests/*.cpp")
  add_executable(hyprland_gtests ${TESTFILES})
  target_compile_options(hyprland_gtests PRIVATE --coverage)
  target_link_options(hyprland_gtests PRIVATE --coverage)
  target_include_directories(
    hyprland_gtests
    PUBLIC "./include"
    PRIVATE "./src" "./src/include" "./protocols" "${CMAKE_BINARY_DIR}")

  target_link_libraries(hyprland_gtests hyprland_lib GTest::gtest_main)

  gtest_discover_tests(hyprland_gtests)

  # Enable coverage in main hyprland lib
  target_compile_options(hyprland_lib PRIVATE --coverage)
  target_link_options(hyprland_lib PRIVATE --coverage)
  target_link_libraries(hyprland_lib PUBLIC gcov)

  # Enable coverage in hyprland exe
  target_compile_options(Hyprland PRIVATE --coverage)
  target_link_options(Hyprland PRIVATE --coverage)
  target_link_libraries(Hyprland gcov)
endif()

if(BUILD_TESTING)
  message(STATUS "Testing is enabled")

  enable_testing()
  add_custom_target(tests)

  add_dependencies(tests hyprland_gtests)

else()
  message(STATUS "Testing is disabled")
endif()


================================================
FILE: CODE_OF_CONDUCT.md
================================================
## Goal

Our goal is to provide a space where it is safe for everyone to contribute to,
and get support for, open-source software in a respectful and cooperative
manner.

We value all contributions and want to make this organization and its
surrounding community a place for everyone.

As members, contributors, and everyone else who may participate in the
development, we strive to keep the entire experience civil.

## Standards

Our community standards exist in order to make sure everyone feels comfortable
contributing to the project(s) together.

Our standards are:
 - Do not harass, attack, or in any other way discriminate against anyone, including
for their protected traits, including, but not limited to, sex, religion, race,
appearance, gender, identity, nationality, sexuality, etc.
 - Do not go off-topic, do not post spam.
 - Treat everyone with respect.

Examples of breaking each rule respectively include:
 - Harassment, bullying or inappropriate jokes about another person.
 - Posting distasteful imagery, trolling, or posting things unrelated to the topic at hand.
 - Treating someone as worse because of their lack of understanding of an issue.

## Enforcement

Enforcement of this CoC is done by the members of the hyprwm organization.

We, as the organization, will strive our best to keep this community civil and
following the standards outlined above.

### Reporting incidents

If you believe an incident of breaking our standards has occurred, but nobody has
taken appropriate action, you can privately contact the people responsible for dealing
with such incidents in multiple ways:

***E-Mail***
 - `vaxry[at]vaxry.net`
 - `mihai[at]fufexan.net`

***Discord***
 - `@vaxry`
 - `@fufexan`

***Matrix***
 - `@vaxry:matrix.vaxry.net`
 - `@fufexan:matrix.org`
 
We, as members, guarantee your privacy and will not share those reports with anyone.

## Enforcement Strategy

Depending on the severity of the infraction, any action from the list below may be applied.
Please keep in mind cases are reviewed on a per-case basis and members are the ultimate
deciding factor in the type of punishment.

If the matter would benefit from an outside opinion, a member might reach for more opinions
from people unrelated to the organization, however, the final decision regarding the action
to be taken is still up to the member.

For example, if the matter at hand regards a representative of a marginalized group or minority,
the member might ask for a first-hand opinion from another representative of such group.

### Correction/Edit

If your message is found to be misleading or poorly worded, a member might
edit your message.

### Warning/Deletion

If your message is found inappropriate, a member might give you a public or private warning,
and/or delete your message.

### Mute

If your message is disruptive, or you have been repeatedly violating the standards,
a member might mute (or temporarily ban) you.

### Ban

If your message is hateful, very disruptive, or other, less serious infractions are repeated
ignoring previous punishments, a member might ban you permanently.

## Scope

This CoC shall apply to all projects ran under the `hyprwm` organization and all _official_ communities
outside of GitHub.

However, it is worth noting that official communities outside of GitHub might have their own,
additional sets of rules.


================================================
FILE: LICENSE
================================================
BSD 3-Clause License

Copyright (c) 2022-2026, vaxerski
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its
   contributors may be used to endorse or promote products derived from
   this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: Makefile
================================================
PREFIX = /usr/local

stub:
	@echo "Do not run $(MAKE) directly without any arguments. Please refer to the wiki on how to compile Hyprland."

release:
	cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:STRING=${PREFIX} -S . -B ./build
	cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`

debug:
	cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -DTESTS=true -DCMAKE_INSTALL_PREFIX:STRING=${PREFIX} -S . -B ./build
	cmake --build ./build --config Debug --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`

nopch:
	cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:STRING=${PREFIX} -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON -S . -B ./build
	cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf NPROCESSORS_CONF`

clear:
	rm -rf build
	rm -f ./protocols/*.h ./protocols/*.c ./protocols/*.cpp ./protocols/*.hpp
	rm -f ./hyprctl/hw-protocols/*.cpp ./hyprctl/hw-protocols/*.hpp

all:
	$(MAKE) clear
	$(MAKE) release

install:
	cmake --install ./build

uninstall:
	xargs rm < ./build/install_manifest.txt

pluginenv:
	@echo -en "$(MAKE) pluginenv has been deprecated.\nPlease run $(MAKE) all && sudo $(MAKE) installheaders\n"
	@exit 1

installheaders:
	@if [ ! -f ./src/version.h ]; then echo -en "You need to run $(MAKE) all first.\n" && exit 1; fi

	# remove previous headers from hyprpm's dir
	rm -fr ${PREFIX}/include/hyprland
	mkdir -p ${PREFIX}/include/hyprland
	mkdir -p ${PREFIX}/include/hyprland/protocols
	mkdir -p ${PREFIX}/share/pkgconfig

	cmake --build ./build --config Release --target generate-protocol-headers

	find src -type f \( -name '*.hpp' -o -name '*.h' -o -name '*.inc' \) -print0 | cpio --quiet -0dump ${PREFIX}/include/hyprland
	cp ./protocols/*.h* ${PREFIX}/include/hyprland/protocols
	cp ./build/hyprland.pc ${PREFIX}/share/pkgconfig
	if [ -d /usr/share/pkgconfig ]; then cp ./build/hyprland.pc /usr/share/pkgconfig 2>/dev/null || true; fi

	chmod -R 755 ${PREFIX}/include/hyprland
	chmod 755 ${PREFIX}/share/pkgconfig

man:
	pandoc ./docs/Hyprland.1.rst \
		--standalone \
		--variable=header:"Hyprland User Manual" \
		--variable=date:"${DATE}" \
		--variable=section:1 \
		--from rst \
		--to man > ./docs/Hyprland.1

	pandoc ./docs/hyprctl.1.rst \
		--standalone \
		--variable=header:"hyprctl User Manual" \
		--variable=date:"${DATE}" \
		--variable=section:1 \
		--from rst \
		--to man > ./docs/hyprctl.1

asan:
	@echo -en "!!WARNING!!\nOnly run this in the TTY.\n"
	@pidof Hyprland > /dev/null && echo -ne "Refusing to run with Hyprland running.\n" || echo ""
	@pidof Hyprland > /dev/null && exit 1 || echo ""

	rm -rf ./wayland
	#git reset --hard

	@echo -en "If you want to apply a patch, input its path (leave empty for none):\n"
	@read patchvar; \
	 if [ -n "$$patchvar" ]; then patch -p1 < "$$patchvar" || echo ""; else echo "No patch specified"; fi

	git clone --recursive https://gitlab.freedesktop.org/wayland/wayland
	cd wayland && patch -p1 < ../scripts/waylandStatic.diff && meson setup build --buildtype=debug -Db_sanitize=address -Ddocumentation=false && ninja -C build && cd ..
	cp ./wayland/build/src/libwayland-server.a .
	@echo "Wayland done"

	patch -p1 < ./scripts/hyprlandStaticAsan.diff
	cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Debug -DWITH_ASAN:STRING=True -DUSE_TRACY:STRING=False -DUSE_TRACY_GPU:STRING=False -S . -B ./build
	cmake --build ./build --config Debug --target all
	@echo "Hyprland done"

	ASAN_OPTIONS="detect_odr_violation=0,log_path=asan.log" HYPRLAND_NO_CRASHREPORTER=1 ./build/Hyprland -c ~/.config/hypr/hyprland.conf

test:
	$(MAKE) debug
	./build/hyprtester/hyprtester -c hyprtester/test.conf -b ./build/Hyprland -p hyprtester/plugin/hyprtestplugin.so


================================================
FILE: README.md
================================================
<div align = center>

<img src="https://raw.githubusercontent.com/hyprwm/Hyprland/main/assets/header.svg" width="750" height="300" alt="banner">

<br>

[![Badge Workflow]][Workflow]
[![Badge License]][License] 
![Badge Language] 
[![Badge Pull Requests]][Pull Requests] 
[![Badge Issues]][Issues] 
![Badge Hi Mom]<br>

<br>

Hyprland is a 100% independent, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.

It provides the latest Wayland features, is highly customizable, has all the eyecandy, the most powerful plugins,
easy IPC, much more QoL stuff than other compositors and more...
<br>
<br>

---

**[<kbd> <br> Install <br> </kbd>][Install]** 
**[<kbd> <br> Quick Start <br> </kbd>][Quick Start]** 
**[<kbd> <br> Configure <br> </kbd>][Configure]** 
**[<kbd> <br> Contribute <br> </kbd>][Contribute]**

---

<br>

</div>

# Features

- All of the eyecandy: gradient borders, blur, animations, shadows and much more
- A lot of customization
- 100% independent, no wlroots, no libweston, no kwin, no mutter.
- Custom bezier curves for the best animations
- Powerful plugin support
- Built-in plugin manager
- Tearing support for better gaming performance
- Easily expandable and readable codebase
- Fast and active development
- Not afraid to provide bleeding-edge features
- Config reloaded instantly upon saving
- Fully dynamic workspaces
- Two built-in layouts and more available as plugins
- Global keybinds passed to your apps of choice
- Tiling/pseudotiling/floating/fullscreen windows
- Special workspaces (scratchpads)
- Window groups (tabbed mode)
- Powerful window/monitor/layer rules
- Socket-based IPC
- Native IME and Input Panels Support
- and much more...

<br>
<br>

<div align = center>

# Gallery

<br>

![Preview A]

<br>

![Preview B]

<br>

![Preview C]

<br>
<br>

</div>

# Special Thanks

<br>

**[wlroots]** - *For powering Hyprland in the past*

**[tinywl]** - *For showing how 2 do stuff*

**[Sway]** - *For showing how 2 do stuff the overkill way*

**[Vivarium]** - *For showing how 2 do stuff the simple way*

**[dwl]** - *For showing how 2 do stuff the hacky way*

**[Wayfire]** - *For showing how 2 do some graphics stuff*


<!----------------------------------------------------------------------------->

[Configure]: https://wiki.hypr.land/Configuring/
[Stars]: https://starchart.cc/hyprwm/Hyprland
[Hypr]: https://github.com/hyprwm/Hypr

[Pull Requests]: https://github.com/hyprwm/Hyprland/pulls
[Issues]: https://github.com/hyprwm/Hyprland/issues
[Todo]: https://github.com/hyprwm/Hyprland/projects?type=beta

[Contribute]: https://wiki.hypr.land/Contributing-and-Debugging/
[Install]: https://wiki.hypr.land/Getting-Started/Installation/
[Quick Start]: https://wiki.hypr.land/Getting-Started/Master-Tutorial/
[Workflow]: https://github.com/hyprwm/Hyprland/actions/workflows/ci.yaml
[License]: LICENSE


<!----------------------------------{ Thanks }--------------------------------->

[Vivarium]: https://github.com/inclement/vivarium
[WlRoots]: https://gitlab.freedesktop.org/wlroots/wlroots
[Wayfire]: https://github.com/WayfireWM/wayfire
[TinyWl]: https://gitlab.freedesktop.org/wlroots/wlroots/-/blob/master/tinywl/tinywl.c
[Sway]: https://github.com/swaywm/sway
[DWL]: https://codeberg.org/dwl/dwl

<!----------------------------------{ Images }--------------------------------->

[Preview A]: https://i.ibb.co/XxFY75Mk/greerggergerhtrytghjnyhjn.png
[Preview B]: https://i.ibb.co/C1yTb0r/falf.png
[Preview C]: https://i.ibb.co/2Yc4q835/hyprland-preview-b.png


<!----------------------------------{ Badges }--------------------------------->

[Badge Workflow]: https://github.com/hyprwm/Hyprland/actions/workflows/ci.yaml/badge.svg

[Badge Issues]: https://img.shields.io/github/issues/hyprwm/Hyprland
[Badge Pull Requests]: https://img.shields.io/github/issues-pr/hyprwm/Hyprland
[Badge Language]: https://img.shields.io/github/languages/top/hyprwm/Hyprland
[Badge License]: https://img.shields.io/github/license/hyprwm/Hyprland
[Badge Lines]: https://img.shields.io/tokei/lines/github/hyprwm/Hyprland
[Badge Hi Mom]: https://img.shields.io/badge/Hi-mom!-ff69b4


================================================
FILE: SECURITY.md
================================================
# Hyprland Development Security Policy

If you have a bug that affects the security of your system, you may
want to privately disclose it instead of making it immediately public.

## Supported versions

_Only_ the most recent release on Github is supported. There are no LTS releases.

## What is not a security issue

Some examples of issues that should not be reported as security issues:

- An app can execute a command when ran outside of a sandbox
- An app can write / read hyprland sockets when ran outside of a sandbox
- Crashes
- Things that are protected via permissions when the permission system is disabled

## What is a security issue

Some examples of issues that should be reported as security issues:

- Sandboxed application executing arbitrary code via Hyprland
- Application being able to modify Hyprland's code on the fly
- Application being able to keylog / track user's activity beyond what the wayland protocols allow

## How to report security issues

Please report your security issues via either of these channels:
- Mail: `vaxry [at] vaxry [dot] net`
- Matrix: `@vaxry:matrix.vaxry.net`
- Discord: `@vaxry`


================================================
FILE: VERSION
================================================
0.54.0


================================================
FILE: assets/hyprland-portals.conf
================================================
[preferred]
default=hyprland;gtk

================================================
FILE: docs/Hyprland.1
================================================
.\" Automatically generated by Pandoc 3.1.3
.\"
.\" Define V font for inline verbatim, using C font in formats
.\" that render this, and otherwise B font.
.ie "\f[CB]x\f[]"x" \{\
. ftr V B
. ftr VI BI
. ftr VB B
. ftr VBI BI
.\}
.el \{\
. ftr V CR
. ftr VI CI
. ftr VB CB
. ftr VBI CBI
.\}
.TH "Hyprland" "1" "" "" "Hyprland User Manual"
.hy
.SH NAME
.PP
Hyprland - Dynamic tiling Wayland compositor
.SH SYNOPSIS
.PP
\f[B]Hyprland\f[R] [\f[I]arg [...]\f[R]].
.SH DESCRIPTION
.PP
\f[B]Hyprland\f[R] is an independent, highly customizable, dynamic
tiling Wayland compositor that doesn\[aq]t sacrifice on its looks.
.PP
You can launch Hyprland by either going into a TTY and executing
\f[B]Hyprland\f[R], or with a login manager.
.SH NOTICE
.PP
Hyprland is still in pretty early development compared to some other
Wayland compositors.
.PP
Although Hyprland is pretty stable, it may have some bugs.
.SH CONFIGURATION
.PP
For configuration information please see
<\f[I]https://github.com/hyprwm/Hyprland/wiki\f[R]>.
.SH OPTIONS
.TP
\f[B]-h\f[R], \f[B]--help\f[R]
Show command usage.
.TP
\f[B]-c\f[R], \f[B]--config\f[R]
Specify config file to use.
.TP
\f[B]--socket\f[R]
Sets the Wayland socket name (for Wayland socket handover)
.TP
\f[B]--wayland-fd\f[R]
Sets the Wayland socket file descriptor (for Wayland socket handover)
.SH BUGS
.TP
Submit bug reports and request features online at:
<\f[I]https://github.com/hyprwm/Hyprland/issues\f[R]>
.SH SEE ALSO
.PP
Sources at: <\f[I]https://github.com/hyprwm/Hyprland\f[R]>
.SH COPYRIGHT
.PP
Copyright (c) 2022, vaxerski
.SH AUTHORS
Vaxerski <\f[I]https://github.com/vaxerski\f[R]>.


================================================
FILE: docs/Hyprland.1.rst
================================================
:title: Hyprland
:author: Vaxerski <*https://github.com/vaxerski*>

NAME
====

Hyprland - Dynamic tiling Wayland compositor

SYNOPSIS
========

**Hyprland** [*arg [...]*].

DESCRIPTION
===========

**Hyprland** is an independent, highly customizable, 
dynamic tiling Wayland compositor that doesn't sacrifice on its looks. 

You can launch Hyprland by either going into a TTY and
executing **Hyprland**, or with a login manager.

NOTICE
======

Hyprland is still in pretty early development compared to some other Wayland compositors.

Although Hyprland is pretty stable, it may have some bugs.

CONFIGURATION
=============

For configuration information please see <*https://github.com/hyprwm/Hyprland/wiki*>.

OPTIONS
=======

**-h**, **--help**
    Show command usage.

**-c**, **--config**
    Specify config file to use.

**--socket**
    Sets the Wayland socket name (for Wayland socket handover)

**--wayland-fd**
    Sets the Wayland socket file descriptor (for Wayland socket handover)

BUGS
====

Submit bug reports and request features online at:
    <*https://github.com/hyprwm/Hyprland/issues*>

SEE ALSO
========

Sources at: <*https://github.com/hyprwm/Hyprland*>

COPYRIGHT
=========

Copyright (c) 2022, vaxerski


================================================
FILE: docs/ISSUE_GUIDELINES.md
================================================
# Issue Guidelines

First of all, please remember to:
- Check that your issue is not a duplicate
- Read the [FAQ](https://wiki.hypr.land/FAQ/)
- Read the [Configuring Page](https://wiki.hypr.land/Configuring/)

<br/>

# Reporting suggestions
Suggestions are welcome.

Many features can be implemented using bash scripts and Hyprland sockets, read up on those [Here](https://wiki.hypr.land/IPC). Please do not suggest features that can be implemented as such.

<br/>

# Reporting bugs

All bug reports should have the following:
- Steps to reproduce
- Expected outcome
- Noted outcome

If your bug is one that doesn't crash Hyprland, but feels like invalid behavior, that's all you need to say.

If your bug crashes Hyprland, append additionally:
- The Hyprland log
- Your config
- (v0.22.0beta and up) The Hyprland Crash Report
- (v0.21.0beta and below) Coredump / Coredump analysis (with a stacktrace)

**Important**: Please do NOT use any package for reporting bugs! Clone and compile from source.

## Obtaining the Hyprland log
If you are in a TTY, and the hyprland session that crashed was the last one you launched, the log will be printed with
```
cat $XDG_RUNTIME_DIR/hypr/$(ls -t $XDG_RUNTIME_DIR/hypr | head -n 1)/hyprland.log
```
feel free to send it to a file, save, copy, etc.

if you are in a Hyprland session, and you want the log of the last session, use
```
cat $XDG_RUNTIME_DIR/hypr/$(ls -t $XDG_RUNTIME_DIR/hypr | head -n 2 | tail -n 1)/hyprland.log
```

basically, directories in $XDG_RUNTIME_DIR/hypr are your sessions.

## Obtaining the Hyprland Crash Report (v0.22.0beta and up)

If you have `$XDG_CACHE_HOME` set, the crash report directory is `$XDG_CACHE_HOME/hyprland`. If not, it's `$HOME/.cache/hyprland`.

Go to the crash report directory and you should find a file named `hyprlandCrashReport[XXXX].txt` where `[XXXX]` is the PID of the process that crashed.

Attach that file to your issue.
## Obtaining the Hyprland coredump (v0.21.0beta and below)
If you are on systemd, you can simply use
```
coredumpctl
```
then go to the end (press END on your keyboard) and remember the PID of the last `Hyprland` occurrence. It's the first number after the time, for example `2891`.

exit coredumpctl (ctrl+c) and use
```
coredumpctl info [PID]
```
where `[PID]` is the PID you remembered.

## Obtaining the debug Hyprland coredump
A debug coredump provides more information for debugging and may speed up the process of fixing the bug.

Make sure you're on latest git. Run `git pull --recurse-submodules` to sync everything.

1. [Compile Hyprland with debug mode](http://wiki.hypr.land/Contributing-and-Debugging/#build-in-debug-mode)
> Note: The config file used will be `hyprlandd.conf` instead of `hyprland.conf`

2. `cd ~`
3. For your own convenience, launch Hyprland from a tty with the envvar `ASAN_OPTIONS="log_path=asan.log" ~/path/to/Hyprland`
4. Reproduce the crash. Hyprland should instantly close.
5. Check out your `~` and find a file called `asan.log.XXXXX` where `XXXXX` will be a number corresponding to the PID of the Hyprland instance that crashed.
6. That is your coredump. Attach it to your issue.


================================================
FILE: docs/hyprctl.1
================================================
.\" Automatically generated by Pandoc 3.1.3
.\"
.\" Define V font for inline verbatim, using C font in formats
.\" that render this, and otherwise B font.
.ie "\f[CB]x\f[]"x" \{\
. ftr V B
. ftr VI BI
. ftr VB B
. ftr VBI BI
.\}
.el \{\
. ftr V CR
. ftr VI CI
. ftr VB CB
. ftr VBI CBI
.\}
.TH "hyprctl" "1" "" "" "hyprctl User Manual"
.hy
.SH NAME
.PP
hyprctl - Utility for controlling parts of Hyprland from a CLI or a
script
.SH SYNOPSIS
.PP
\f[B]hyprctl\f[R] [\f[I](opt)flags\f[R]] [\f[B]command\f[R]]
[\f[I](opt)args\f[R]]
.SH DESCRIPTION
.PP
\f[B]hyprctl\f[R] is a utility for controlling some parts of the
compositor from a CLI or a script.
.SH CONTROL COMMANDS
.PP
\f[B]dispatch\f[R]
.RS
.PP
Call a dispatcher with an argument.
.PP
An argument must be present.
For dispatchers without parameters it can be anything.
.PP
Returns: \f[I]ok\f[R] on success, and an error message on failure.
.TP
Examples:
\f[B]hyprctl\f[R] \f[I]dispatch exec kitty\f[R]
.RS
.PP
\f[B]hyprctl\f[R] \f[I]dispatch pseudo x\f[R]
.RE
.RE
.PP
\f[B]keyword\f[R]
.RS
.PP
Set a config keyword dynamically.
.PP
Returns: \f[I]ok\f[R] on success, and an error message on failure.
.TP
Examples:
\f[B]hyprctl\f[R] \f[I]keyword bind SUPER,0,pseudo\f[R]
.RS
.PP
\f[B]hyprctl\f[R] \f[I]keyword general:border_size 10\f[R]
.RE
.RE
.PP
\f[B]reload\f[R]
.RS
.PP
Force a reload of the config file.
.RE
.PP
\f[B]kill\f[R]
.RS
.PP
Enter kill mode, where you can kill an app by clicking on it.
You can exit by pressing ESCAPE.
.RE
.SH INFO COMMANDS
.PP
\f[B]version\f[R]
.RS
.PP
Prints the Hyprland version, flags, commit and branch of build.
.RE
.PP
\f[B]monitors\f[R]
.RS
.PP
Lists all the outputs with their properties.
.RE
.PP
\f[B]workspaces\f[R]
.RS
.PP
Lists all workspaces with their properties.
.RE
.PP
\f[B]clients\f[R]
.RS
.PP
Lists all windows with their properties.
.RE
.PP
\f[B]devices\f[R]
.RS
.PP
Lists all connected input devices.
.RE
.PP
\f[B]activewindow\f[R]
.RS
.PP
Returns the active window name.
.RE
.PP
\f[B]layers\f[R]
.RS
.PP
Lists all the layers.
.RE
.PP
\f[B]splash\f[R]
.RS
.PP
Returns the current random splash.
.RE
.SH OPTIONS
.PP
\f[B]--batch\f[R]
.RS
.PP
Specify a batch of commands to execute.
.TP
Example:
\f[B]hyprctl\f[R] \f[I]--batch \[dq]keyword general:border_size 2 ;
keyword general:gaps_out 20\[dq]\f[R]
.RS
.PP
\f[I];\f[R] separates the commands.
.RE
.RE
.PP
\f[B]-j\f[R]
.RS
.PP
Outputs information in JSON.
.RE
.SH BUGS
.TP
Submit bug reports and request features online at:
<\f[I]https://github.com/hyprwm/Hyprland/issues\f[R]>
.SH SEE ALSO
.PP
Sources at: <\f[I]https://github.com/hyprwm/Hyprland\f[R]>
.SH COPYRIGHT
.PP
Copyright (c) 2022, vaxerski
.SH AUTHORS
Vaxerski <\f[I]https://github.com/vaxerski\f[R]>.


================================================
FILE: docs/hyprctl.1.rst
================================================
:title: hyprctl(1)
:author: Vaxerski <*https://github.com/vaxerski*>

NAME
====

hyprctl - Utility for controlling parts of Hyprland from a CLI or a script

SYNOPSIS
========

**hyprctl** [*(opt)flags*] [**command**] [*(opt)args*]

DESCRIPTION
===========

**hyprctl** is a utility for controlling some parts of the compositor from a CLI or a script.

CONTROL COMMANDS
================

**dispatch**

    Call a dispatcher with an argument.

    An argument must be present.
    For dispatchers without parameters it can be anything.

    Returns: *ok* on success, and an error message on failure.

    Examples:
        **hyprctl** *dispatch exec kitty*

        **hyprctl** *dispatch pseudo x*

**keyword**

    Set a config keyword dynamically.

    Returns: *ok* on success, and an error message on failure.

    Examples:
        **hyprctl** *keyword bind SUPER,0,pseudo*

        **hyprctl** *keyword general:border_size 10*

**reload**

    Force a reload of the config file.

**kill**

    Enter kill mode, where you can kill an app by clicking on it.
    You can exit by pressing ESCAPE.

INFO COMMANDS
=============

**version**

    Prints the Hyprland version, flags, commit and branch of build.

**monitors**

    Lists all the outputs with their properties.

**workspaces**

    Lists all workspaces with their properties.

**clients**

    Lists all windows with their properties.

**devices**

    Lists all connected input devices.

**activewindow**

    Returns the active window name.

**layers**

    Lists all the layers.

**splash**

    Returns the current random splash.

OPTIONS
=======

**--batch**

    Specify a batch of commands to execute.

    Example:
        **hyprctl** *--batch "keyword general:border_size 2 ; keyword general:gaps_out 20"*

        *;* separates the commands.

**-j**

    Outputs information in JSON.

BUGS
====

Submit bug reports and request features online at:
    <*https://github.com/hyprwm/Hyprland/issues*>

SEE ALSO
========

Sources at: <*https://github.com/hyprwm/Hyprland*>

COPYRIGHT
=========

Copyright (c) 2022, vaxerski


================================================
FILE: example/hyprland.conf
================================================
# This is an example Hyprland config file.
# Refer to the wiki for more information.
# https://wiki.hypr.land/Configuring/

# Please note not all available settings / options are set here.
# For a full list, see the wiki

# You can split this configuration into multiple files
# Create your files separately and then link them to this file like this:
# source = ~/.config/hypr/myColors.conf


################
### MONITORS ###
################

# See https://wiki.hypr.land/Configuring/Monitors/
monitor=,preferred,auto,auto


###################
### MY PROGRAMS ###
###################

# See https://wiki.hypr.land/Configuring/Keywords/

# Set programs that you use
$terminal = kitty
$fileManager = dolphin
$menu = hyprlauncher


#################
### AUTOSTART ###
#################

# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:

# exec-once = $terminal
# exec-once = nm-applet &
# exec-once = waybar & hyprpaper & firefox


#############################
### ENVIRONMENT VARIABLES ###
#############################

# See https://wiki.hypr.land/Configuring/Environment-variables/

env = XCURSOR_SIZE,24
env = HYPRCURSOR_SIZE,24


###################
### PERMISSIONS ###
###################

# See https://wiki.hypr.land/Configuring/Permissions/
# Please note permission changes here require a Hyprland restart and are not applied on-the-fly
# for security reasons

# ecosystem {
#   enforce_permissions = 1
# }

# permission = /usr/(bin|local/bin)/grim, screencopy, allow
# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow


#####################
### LOOK AND FEEL ###
#####################

# Refer to https://wiki.hypr.land/Configuring/Variables/

# https://wiki.hypr.land/Configuring/Variables/#general
general {
    gaps_in = 5
    gaps_out = 20

    border_size = 2

    # https://wiki.hypr.land/Configuring/Variables/#variable-types for info about colors
    col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
    col.inactive_border = rgba(595959aa)

    # Set to true enable resizing windows by clicking and dragging on borders and gaps
    resize_on_border = false

    # Please see https://wiki.hypr.land/Configuring/Tearing/ before you turn this on
    allow_tearing = false

    layout = dwindle
}

# https://wiki.hypr.land/Configuring/Variables/#decoration
decoration {
    rounding = 10
    rounding_power = 2

    # Change transparency of focused and unfocused windows
    active_opacity = 1.0
    inactive_opacity = 1.0

    shadow {
        enabled = true
        range = 4
        render_power = 3
        color = rgba(1a1a1aee)
    }

    # https://wiki.hypr.land/Configuring/Variables/#blur
    blur {
        enabled = true
        size = 3
        passes = 1

        vibrancy = 0.1696
    }
}

# https://wiki.hypr.land/Configuring/Variables/#animations
animations {
    enabled = yes, please :)

    # Default curves, see https://wiki.hypr.land/Configuring/Animations/#curves
    #        NAME,           X0,   Y0,   X1,   Y1
    bezier = easeOutQuint,   0.23, 1,    0.32, 1
    bezier = easeInOutCubic, 0.65, 0.05, 0.36, 1
    bezier = linear,         0,    0,    1,    1
    bezier = almostLinear,   0.5,  0.5,  0.75, 1
    bezier = quick,          0.15, 0,    0.1,  1

    # Default animations, see https://wiki.hypr.land/Configuring/Animations/
    #           NAME,          ONOFF, SPEED, CURVE,        [STYLE]
    animation = global,        1,     10,    default
    animation = border,        1,     5.39,  easeOutQuint
    animation = windows,       1,     4.79,  easeOutQuint
    animation = windowsIn,     1,     4.1,   easeOutQuint, popin 87%
    animation = windowsOut,    1,     1.49,  linear,       popin 87%
    animation = fadeIn,        1,     1.73,  almostLinear
    animation = fadeOut,       1,     1.46,  almostLinear
    animation = fade,          1,     3.03,  quick
    animation = layers,        1,     3.81,  easeOutQuint
    animation = layersIn,      1,     4,     easeOutQuint, fade
    animation = layersOut,     1,     1.5,   linear,       fade
    animation = fadeLayersIn,  1,     1.79,  almostLinear
    animation = fadeLayersOut, 1,     1.39,  almostLinear
    animation = workspaces,    1,     1.94,  almostLinear, fade
    animation = workspacesIn,  1,     1.21,  almostLinear, fade
    animation = workspacesOut, 1,     1.94,  almostLinear, fade
    animation = zoomFactor,    1,     7,     quick
}

# Ref https://wiki.hypr.land/Configuring/Workspace-Rules/
# "Smart gaps" / "No gaps when only"
# uncomment all if you wish to use that.
# workspace = w[tv1], gapsout:0, gapsin:0
# workspace = f[1], gapsout:0, gapsin:0
# windowrule {
#     name = no-gaps-wtv1
#     match:float = false
#     match:workspace = w[tv1]
#
#     border_size = 0
#     rounding = 0
# }
#
# windowrule {
#     name = no-gaps-f1
#     match:float = false
#     match:workspace = f[1]
#
#     border_size = 0
#     rounding = 0
# }

# See https://wiki.hypr.land/Configuring/Dwindle-Layout/ for more
dwindle {
    pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
    preserve_split = true # You probably want this
}

# See https://wiki.hypr.land/Configuring/Master-Layout/ for more
master {
    new_status = master
}

# https://wiki.hypr.land/Configuring/Variables/#misc
misc {
    force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
    disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
}


#############
### INPUT ###
#############

# https://wiki.hypr.land/Configuring/Variables/#input
input {
    kb_layout = us
    kb_variant =
    kb_model =
    kb_options =
    kb_rules =

    follow_mouse = 1

    sensitivity = 0 # -1.0 - 1.0, 0 means no modification.

    touchpad {
        natural_scroll = false
    }
}

# See https://wiki.hypr.land/Configuring/Gestures
gesture = 3, horizontal, workspace

# Example per-device config
# See https://wiki.hypr.land/Configuring/Keywords/#per-device-input-configs for more
device {
    name = epic-mouse-v1
    sensitivity = -0.5
}


###################
### KEYBINDINGS ###
###################

# See https://wiki.hypr.land/Configuring/Keywords/
$mainMod = SUPER # Sets "Windows" key as main modifier

# Example binds, see https://wiki.hypr.land/Configuring/Binds/ for more
bind = $mainMod, Q, exec, $terminal
bind = $mainMod, C, killactive,
bind = $mainMod, M, exec, command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit
bind = $mainMod, E, exec, $fileManager
bind = $mainMod, V, togglefloating,
bind = $mainMod, R, exec, $menu
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, layoutmsg, togglesplit # dwindle

# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d

# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 1
bind = $mainMod, 2, workspace, 2
bind = $mainMod, 3, workspace, 3
bind = $mainMod, 4, workspace, 4
bind = $mainMod, 5, workspace, 5
bind = $mainMod, 6, workspace, 6
bind = $mainMod, 7, workspace, 7
bind = $mainMod, 8, workspace, 8
bind = $mainMod, 9, workspace, 9
bind = $mainMod, 0, workspace, 10

# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 1
bind = $mainMod SHIFT, 2, movetoworkspace, 2
bind = $mainMod SHIFT, 3, movetoworkspace, 3
bind = $mainMod SHIFT, 4, movetoworkspace, 4
bind = $mainMod SHIFT, 5, movetoworkspace, 5
bind = $mainMod SHIFT, 6, movetoworkspace, 6
bind = $mainMod SHIFT, 7, movetoworkspace, 7
bind = $mainMod SHIFT, 8, movetoworkspace, 8
bind = $mainMod SHIFT, 9, movetoworkspace, 9
bind = $mainMod SHIFT, 0, movetoworkspace, 10

# Example special workspace (scratchpad)
bind = $mainMod, S, togglespecialworkspace, magic
bind = $mainMod SHIFT, S, movetoworkspace, special:magic

# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1

# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow

# Laptop multimedia keys for volume and LCD brightness
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-

# Requires playerctl
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86AudioPause, exec, playerctl play-pause
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioPrev, exec, playerctl previous

##############################
### WINDOWS AND WORKSPACES ###
##############################

# See https://wiki.hypr.land/Configuring/Window-Rules/ for more
# See https://wiki.hypr.land/Configuring/Workspace-Rules/ for workspace rules

# Example windowrules that are useful

windowrule {
    # Ignore maximize requests from all apps. You'll probably like this.
    name = suppress-maximize-events
    match:class = .*

    suppress_event = maximize
}

windowrule {
    # Fix some dragging issues with XWayland
    name = fix-xwayland-drags
    match:class = ^$
    match:title = ^$
    match:xwayland = true
    match:float = true
    match:fullscreen = false
    match:pin = false

    no_focus = true
}

# Hyprland-run windowrule
windowrule {
    name = move-hyprland-run

    match:class = hyprland-run

    move = 20 monitor_h-120
    float = yes
}


================================================
FILE: example/hyprland.desktop.in
================================================
[Desktop Entry]
Name=Hyprland
Comment=An intelligent dynamic tiling Wayland compositor
Exec=@PREFIX@/@CMAKE_INSTALL_BINDIR@/start-hyprland
Type=Application
DesktopNames=Hyprland
Keywords=tiling;wayland;compositor;


================================================
FILE: example/hyprland.service
================================================
; a primitive systemd --user example
[Unit]
Description = %p
BindsTo     = graphical-session.target
Upholds     = swaybg@333333.service

[Service]
Type            = notify
ExecStart       = /usr/bin/Hyprland

[Install]
WantedBy = default.target


================================================
FILE: example/launch.json
================================================
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/Hyprland",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        },
        
    ]
}

================================================
FILE: example/screenShader.frag
================================================
//
// Example blue light filter shader.
//

#version 300 es

precision mediump float;
in vec2 v_texcoord;
layout(location = 0) out vec4 fragColor;
uniform sampler2D tex;

void main() {

    vec4 pixColor = texture(tex, v_texcoord);

    pixColor[2] *= 0.8;

    fragColor = pixColor;
}


================================================
FILE: example/swaybg@.service
================================================
; a primitive systemd --user example
; see example/hyprland.service for more details
[Unit]
Description = %p
BindsTo     = hyprland.service
Wants       = hyprland.service
After       = hyprland.service

[Service]
ExecStart = /usr/bin/swaybg --color #%i

[Install]
WantedBy = default.target


================================================
FILE: flake.nix
================================================
{
  description = "Hyprland is a dynamic tiling Wayland compositor that doesn't sacrifice on its looks";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";

    # <https://github.com/nix-systems/nix-systems>
    systems.url = "github:nix-systems/default-linux";

    aquamarine = {
      url = "github:hyprwm/aquamarine";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.systems.follows = "systems";
      inputs.hyprutils.follows = "hyprutils";
      inputs.hyprwayland-scanner.follows = "hyprwayland-scanner";
    };

    hyprcursor = {
      url = "github:hyprwm/hyprcursor";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.systems.follows = "systems";
      inputs.hyprlang.follows = "hyprlang";
    };

    hyprgraphics = {
      url = "github:hyprwm/hyprgraphics";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.systems.follows = "systems";
      inputs.hyprutils.follows = "hyprutils";
    };

    hyprland-protocols = {
      url = "github:hyprwm/hyprland-protocols";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.systems.follows = "systems";
    };

    hyprland-guiutils = {
      url = "github:hyprwm/hyprland-guiutils";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.systems.follows = "systems";
      inputs.aquamarine.follows = "aquamarine";
      inputs.hyprgraphics.follows = "hyprgraphics";
      inputs.hyprutils.follows = "hyprutils";
      inputs.hyprlang.follows = "hyprlang";
      inputs.hyprwayland-scanner.follows = "hyprwayland-scanner";
    };

    hyprlang = {
      url = "github:hyprwm/hyprlang";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.systems.follows = "systems";
      inputs.hyprutils.follows = "hyprutils";
    };

    hyprutils = {
      url = "github:hyprwm/hyprutils";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.systems.follows = "systems";
    };

    hyprwayland-scanner = {
      url = "github:hyprwm/hyprwayland-scanner";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.systems.follows = "systems";
    };

    hyprwire = {
      url = "github:hyprwm/hyprwire";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.systems.follows = "systems";
      inputs.hyprutils.follows = "hyprutils";
    };

    xdph = {
      url = "github:hyprwm/xdg-desktop-portal-hyprland";
      inputs.nixpkgs.follows = "nixpkgs";
      inputs.systems.follows = "systems";
      inputs.hyprland-protocols.follows = "hyprland-protocols";
      inputs.hyprlang.follows = "hyprlang";
      inputs.hyprutils.follows = "hyprutils";
      inputs.hyprwayland-scanner.follows = "hyprwayland-scanner";
    };

    pre-commit-hooks = {
      url = "github:cachix/git-hooks.nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs =
    inputs@{
      self,
      nixpkgs,
      systems,
      ...
    }:
    let
      inherit (nixpkgs) lib;
      eachSystem = lib.genAttrs (import systems);
      pkgsFor = eachSystem (
        system:
        import nixpkgs {
          localSystem = system;
          overlays = with self.overlays; [
            hyprland-packages
            hyprland-extras
          ];
        }
      );
      pkgsCrossFor = eachSystem (
        system: crossSystem:
        import nixpkgs {
          localSystem = system;
          inherit crossSystem;
          overlays = with self.overlays; [
            hyprland-packages
            hyprland-extras
          ];
        }
      );
      pkgsDebugFor = eachSystem (
        system:
        import nixpkgs {
          localSystem = system;
          overlays = with self.overlays; [
            hyprland-debug
          ];
        }
      );
      pkgsDebugCrossFor = eachSystem (
        system: crossSystem:
        import nixpkgs {
          localSystem = system;
          inherit crossSystem;
          overlays = with self.overlays; [
            hyprland-debug
          ];
        }
      );
    in
    {
      overlays = import ./nix/overlays.nix { inherit self lib inputs; };

      checks = eachSystem (
        system:
        (lib.filterAttrs (
          n: _: (lib.hasPrefix "hyprland" n) && !(lib.hasSuffix "debug" n)
        ) self.packages.${system})
        // {
          inherit (self.packages.${system}) xdg-desktop-portal-hyprland;
          pre-commit-check = inputs.pre-commit-hooks.lib.${system}.run {
            src = ./.;
            hooks = {
              hyprland-treewide-formatter = {
                enable = true;
                entry = "${self.formatter.${system}}/bin/hyprland-treewide-formatter";
                pass_filenames = false;
                excludes = [ "subprojects" ];
                always_run = true;
              };
            };
          };
        }
        // (import ./nix/tests inputs pkgsFor.${system})
      );

      packages = eachSystem (system: {
        default = self.packages.${system}.hyprland;
        inherit (pkgsFor.${system})
          # hyprland-packages
          hyprland
          hyprland-unwrapped
          hyprland-with-tests
          # hyprland-extras
          xdg-desktop-portal-hyprland
          ;
        inherit (pkgsDebugFor.${system}) hyprland-debug;
        hyprland-cross = (pkgsCrossFor.${system} "aarch64-linux").hyprland;
        hyprland-debug-cross = (pkgsDebugCrossFor.${system} "aarch64-linux").hyprland-debug;
      });

      devShells = eachSystem (system: {
        default =
          pkgsFor.${system}.mkShell.override
            {
              inherit (self.packages.${system}.default) stdenv;
            }
            {
              name = "hyprland-shell";
              hardeningDisable = [ "fortify" ];
              inputsFrom = [ pkgsFor.${system}.hyprland ];
              packages = [ pkgsFor.${system}.clang-tools ];
              inherit (self.checks.${system}.pre-commit-check) shellHook;
            };
      });

      formatter = eachSystem (system: pkgsFor.${system}.callPackage ./nix/formatter.nix { });

      nixosModules.default = import ./nix/module.nix inputs;
      homeManagerModules.default = import ./nix/hm-module.nix self;

      # Hydra build jobs
      # Recent versions of Hydra can aggregate jobsets from 'hydraJobs' instead of a release.nix
      # or similar. Remember to filter large or incompatible attributes here. More eval jobs can
      # be added by merging, e.g., self.packages // self.devShells.
      hydraJobs = self.packages;
    };
}


================================================
FILE: hyprctl/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.19)

project(
    hyprctl
    DESCRIPTION "Control utility for Hyprland"
)

pkg_check_modules(hyprctl_deps REQUIRED IMPORTED_TARGET hyprutils>=0.2.4 hyprwire re2)

file(GLOB_RECURSE HYPRCTL_SRCFILES CONFIGURE_DEPENDS "src/*.cpp" "hw-protocols/*.cpp" "include/*.hpp")

add_executable(hyprctl ${HYPRCTL_SRCFILES})

target_link_libraries(hyprctl PUBLIC PkgConfig::hyprctl_deps)
target_include_directories(hyprctl PRIVATE "hw-protocols")

# Hyprwire

function(hyprprotocol protoPath protoName)
  set(path ${CMAKE_CURRENT_SOURCE_DIR}/${protoPath})
  add_custom_command(
    OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/hw-protocols/${protoName}-client.cpp
           ${CMAKE_CURRENT_SOURCE_DIR}/hw-protocols/${protoName}-client.hpp
           ${CMAKE_CURRENT_SOURCE_DIR}/hw-protocols/${protoName}-spec.hpp
    COMMAND hyprwire-scanner --client ${path}/${protoName}.xml
            ${CMAKE_CURRENT_SOURCE_DIR}/hw-protocols/
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
  target_sources(hyprctl PRIVATE hw-protocols/${protoName}-client.cpp
                                   hw-protocols/${protoName}-client.hpp
                                   hw-protocols/${protoName}-spec.hpp)
endfunction()

hyprprotocol(hw-protocols hyprpaper_core)

# binary
install(TARGETS hyprctl)

# shell completions
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/hyprctl.bash
        DESTINATION ${CMAKE_INSTALL_DATADIR}/bash-completion/completions
        RENAME hyprctl)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/hyprctl.fish
        DESTINATION ${CMAKE_INSTALL_DATADIR}/fish/vendor_completions.d)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/hyprctl.zsh
        DESTINATION ${CMAKE_INSTALL_DATADIR}/zsh/site-functions
        RENAME _hyprctl)


================================================
FILE: hyprctl/hw-protocols/hyprpaper_core.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<protocol name="hyprpaper_core" version="2">
  <copyright>
    BSD 3-Clause License

    Copyright (c) 2025, Hypr Development

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are met:

    1. Redistributions of source code must retain the above copyright notice, this
        list of conditions and the following disclaimer.

    2. Redistributions in binary form must reproduce the above copyright notice,
        this list of conditions and the following disclaimer in the documentation
        and/or other materials provided with the distribution.

    3. Neither the name of the copyright holder nor the names of its
        contributors may be used to endorse or promote products derived from
        this software without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  </copyright>

  <object name="hyprpaper_core_manager" version="2">
    <description summary="manager object">
      This is the core manager object for hyprpaper operations
    </description>

    <c2s name="get_wallpaper_object">
      <description summary="Get a wallpaper object">
        Creates a wallpaper object
      </description>
      <returns iface="hyprpaper_wallpaper"/>
    </c2s>

    <s2c name="add_monitor">
      <description summary="New monitor added">
        Emitted when a new monitor is added.
      </description>
      <arg name="monitor_name" type="varchar" summary="the monitor's name"/>
    </s2c>

    <s2c name="remove_monitor">
      <description summary="A monitor was removed">
        Emitted when a monitor is removed.
      </description>
      <arg name="monitor_name" type="varchar" summary="the monitor's name"/>
    </s2c>

    <c2s name="destroy" destructor="true">
      <description summary="Destroy this object">
        Destroys this object. Children remain alive until destroyed.
      </description>
    </c2s>

    <c2s name="get_status_object" since="2">
      <description summary="Get a status object">
        Creates a status object
      </description>
      <returns iface="hyprpaper_status"/>
    </c2s>
  </object>

  <enum name="wallpaper_fit_mode">
    <value idx="0" name="stretch"/>
    <value idx="1" name="cover"/>
    <value idx="2" name="contain"/>
    <value idx="3" name="tile"/>
  </enum>

  <enum name="wallpaper_errors">
    <value idx="0" name="inert_wallpaper_object" description="attempted to use an inert wallpaper object"/>
  </enum>

  <enum name="applying_error">
    <value idx="0" name="invalid_path" description="path provided was invalid"/>
    <value idx="1" name="invalid_monitor" description="monitor provided was invalid"/>
    <value idx="2" name="unknown_error" description="unknown error"/>
  </enum>

  <object name="hyprpaper_wallpaper" version="1">
    <description summary="wallpaper object">
      This is an object describing a wallpaper
    </description>

    <c2s name="path">
      <description summary="Set a path">
        Set a file path for the wallpaper. This has to be an absolute path from the fs root.
        This is required.
      </description>
      <arg name="wallpaper" type="varchar" summary="path"/>
    </c2s>

    <c2s name="fit_mode">
      <description summary="Set a fit mode">
        Set a fit mode for the wallpaper. This is set to cover by default.
      </description>
      <arg name="fit_mode" type="enum" interface="wallpaper_fit_mode" summary="path"/>
    </c2s>

    <c2s name="monitor_name">
      <description summary="Set the monitor name">
        Set a monitor for the wallpaper. Setting this to empty (or not setting at all) will
        treat this as a wildcard fallback.

        See hyprpaper_core_manager.add_monitor and hyprpaper_core_manager.remove_monitor
        for tracking monitor names.
      </description>
      <arg name="monitor_name" type="varchar" summary="monitor name"/>
    </c2s>

    <c2s name="apply">
      <description summary="Apply this wallpaper">
        Applies this object's state to the wallpaper state. Will emit .success on success,
        and .failed on failure.

        This object becomes inert after .succeess or .failed, the only valid operation
        is to destroy it afterwards.
      </description>
    </c2s>

    <s2c name="success">
      <description summary="Operation succeeded">
        Wallpaper was applied successfully.
      </description>
    </s2c>

    <s2c name="failed">
      <description summary="Operation failed">
        Wallpaper was not applied. See the error field for more information.
      </description>
      <arg name="error" type="enum" interface="hyprpaper_wallpaper_application_error" summary="path"/>
    </s2c>

    <c2s name="destroy" destructor="true">
      <description summary="Destroy this object">
        Destroys this object.
      </description>
    </c2s>
  </object>

  <object name="hyprpaper_status" version="2">
    <description summary="status object">
      This is an object which will emit various status updates.
    </description>
    
    <s2c name="active_wallpaper">
      <description summary="Active wallpaper state">
        Sends the active wallpaper for a given monitor. This will be emitted
        immediately after binding, and then every time the path changes.
      </description>
      <arg name="monitor" type="varchar" summary="monitor name"/>
      <arg name="path" type="varchar" summary="wallpaper path"/>
    </s2c>

    <c2s name="destroy" destructor="true">
      <description summary="Destroy this object">
        Destroys this object.
      </description>
    </c2s>
  </object>
</protocol>


================================================
FILE: hyprctl/hyprctl.bash
================================================
_hyprctl_cmd_1 () {
    hyprctl monitors | awk '/Monitor/{ print $2 }'
}

_hyprctl_cmd_3 () {
    hyprctl clients | awk '/class/{print $2}'
}

_hyprctl_cmd_2 () {
    hyprctl devices | sed -n '/Keyboard at/{n; s/^\s\+//; p}'
}

_hyprctl_cmd_0 () {
    hyprpm list | awk '/Plugin/{print $4}'
}

_hyprctl () {
    if [[ $(type -t _get_comp_words_by_ref) != function ]]; then
        echo _get_comp_words_by_ref: function not defined.  Make sure the bash-completions system package is installed
        return 1
    fi

    local words cword
    _get_comp_words_by_ref -n "$COMP_WORDBREAKS" words cword

    declare -a literals=(resizeactive 2 changegroupactive -r moveintogroup forceallowsinput 4 ::= systeminfo all layouts setprop animationstyle switchxkblayout create denywindowfromgroup headless activebordercolor exec setcursor wayland focusurgentorlast workspacerules movecurrentworkspacetomonitor movetoworkspacesilent hyprpaper alpha inactivebordercolor movegroupwindow movecursortocorner movewindowpixel prev movewindow globalshortcuts clients dimaround setignoregrouplock splash execr monitors 0 forcenoborder -q animations 1 nomaxsize splitratio moveactive pass swapnext devices layers rounding lockactivegroup 5 moveworkspacetomonitor -f -i --quiet forcenodim pin 0 1 forceopaque forcenoshadow setfloating minsize alphaoverride sendshortcut workspaces cyclenext alterzorder togglegroup lockgroups bordersize dpms focuscurrentorlast -1 --batch notify remove instances 1 3 moveoutofgroup killactive 2 movetoworkspace movecursor configerrors closewindow swapwindow tagwindow forcerendererreload centerwindow auto focuswindow seterror nofocus alphafullscreen binds version -h togglespecialworkspace fullscreen windowdancecompat 0 keyword toggleopaque 3 --instance togglefloating renameworkspace alphafullscreenoverride activeworkspace x11 kill forceopaqueoverriden output global dispatch reload forcenoblur -j event --help disable -1 activewindow keepaspectratio dismissnotify focusmonitor movefocus plugin exit workspace fullscreenstate getoption alphainactiveoverride alphainactive decorations settiled config-only descriptions resizewindowpixel fakefullscreen rollinglog swapactiveworkspaces submap next movewindoworgroup cursorpos forcenoanims focusworkspaceoncurrentmonitor maxsize sendkeystate)
    declare -A literal_transitions
    literal_transitions[0]="([120]=14 [43]=2 [125]=21 [81]=2 [3]=21 [51]=2 [50]=2 [128]=2 [89]=2 [58]=21 [8]=2 [10]=2 [11]=3 [130]=4 [13]=5 [97]=6 [101]=2 [102]=21 [133]=7 [100]=2 [137]=2 [22]=2 [19]=2 [140]=8 [25]=2 [143]=2 [107]=9 [146]=10 [69]=2 [33]=2 [34]=2 [78]=21 [114]=2 [37]=2 [151]=2 [116]=2 [121]=13 [123]=21 [39]=11 [42]=21 [79]=15 [118]=12)"
    literal_transitions[1]="([81]=2 [51]=2 [50]=2 [128]=2 [8]=2 [89]=2 [10]=2 [11]=3 [130]=4 [13]=5 [97]=6 [101]=2 [133]=7 [100]=2 [22]=2 [19]=2 [137]=2 [140]=8 [25]=2 [143]=2 [107]=9 [146]=10 [69]=2 [33]=2 [34]=2 [114]=2 [37]=2 [151]=2 [116]=2 [39]=11 [118]=12 [121]=13 [120]=14 [79]=15 [43]=2)"
    literal_transitions[3]="([139]=2 [63]=16 [64]=16 [45]=16 [105]=16 [27]=2 [26]=2 [52]=4 [5]=16 [66]=2 [67]=16 [129]=16 [113]=16 [12]=2 [74]=4 [99]=2 [35]=16 [152]=16 [98]=16 [59]=16 [117]=16 [41]=16 [17]=2 [138]=16 [154]=2 [122]=16)"
    literal_transitions[6]="([126]=2)"
    literal_transitions[10]="([56]=2)"
    literal_transitions[11]="([9]=2)"
    literal_transitions[12]="([14]=19 [80]=22)"
    literal_transitions[13]="([142]=2)"
    literal_transitions[14]="([0]=2 [84]=2 [2]=2 [85]=2 [4]=2 [87]=2 [88]=2 [90]=2 [91]=2 [92]=2 [93]=2 [94]=2 [96]=2 [15]=2 [18]=2 [103]=2 [21]=2 [104]=2 [23]=2 [24]=2 [28]=2 [29]=2 [30]=2 [108]=2 [111]=2 [32]=2 [112]=2 [36]=2 [38]=2 [119]=2 [124]=2 [46]=2 [47]=2 [48]=2 [49]=2 [53]=2 [55]=2 [131]=2 [132]=2 [134]=2 [135]=2 [60]=2 [136]=20 [141]=2 [65]=2 [144]=2 [145]=2 [68]=2 [147]=2 [70]=2 [71]=2 [72]=2 [73]=2 [148]=2 [75]=2 [76]=2 [150]=2 [153]=2)"
    literal_transitions[15]="([86]=4 [6]=4 [109]=4 [61]=4 [77]=4 [54]=4 [62]=4)"
    literal_transitions[16]="([40]=2 [44]=2)"
    literal_transitions[17]="([7]=23)"
    literal_transitions[18]="([31]=2 [149]=2)"
    literal_transitions[19]="([95]=2 [16]=2 [115]=2 [20]=2)"
    literal_transitions[20]="([106]=2 [82]=2 [127]=2 [1]=2 [83]=2)"
    literal_transitions[23]="([57]=21 [110]=21)"
    declare -A match_anything_transitions=([6]=17 [7]=2 [0]=1 [22]=2 [5]=18 [4]=2 [2]=17 [18]=2 [11]=17 [8]=2 [9]=2 [13]=17 [10]=17 [1]=1)
    declare -A subword_transitions

    local state=0
    local word_index=1
    while [[ $word_index -lt $cword ]]; do
        local word=${words[$word_index]}

        if [[ -v "literal_transitions[$state]" ]]; then
            declare -A state_transitions
            eval "state_transitions=${literal_transitions[$state]}"

            local word_matched=0
            for literal_id in $(seq 0 $((${#literals[@]} - 1))); do
                if [[ ${literals[$literal_id]} = "$word" ]]; then
                    if [[ -v "state_transitions[$literal_id]" ]]; then
                        state=${state_transitions[$literal_id]}
                        word_index=$((word_index + 1))
                        word_matched=1
                        break
                    fi
                fi
            done
            if [[ $word_matched -ne 0 ]]; then
                continue
            fi
        fi

        if [[ -v "match_anything_transitions[$state]" ]]; then
            state=${match_anything_transitions[$state]}
            word_index=$((word_index + 1))
            continue
        fi

        return 1
    done


    local -a matches=()

    local prefix="${words[$cword]}"
    if [[ -v "literal_transitions[$state]" ]]; then
        local state_transitions_initializer=${literal_transitions[$state]}
        declare -A state_transitions
        eval "state_transitions=$state_transitions_initializer"

        for literal_id in "${!state_transitions[@]}"; do
            local literal="${literals[$literal_id]}"
            if [[ $literal = "${prefix}"* ]]; then
                matches+=("$literal ")
            fi
        done
    fi
    declare -A commands
    commands=([7]=0 [22]=1 [8]=3 [5]=2)
    if [[ -v "commands[$state]" ]]; then
        local command_id=${commands[$state]}
        local completions=()
        readarray -t completions < <(_hyprctl_cmd_${command_id} "$prefix" | cut -f1)
        for item in "${completions[@]}"; do
            if [[ $item = "${prefix}"* ]]; then
                matches+=("$item")
            fi
        done
    fi


    local shortest_suffix="$prefix"
    for ((i=0; i < ${#COMP_WORDBREAKS}; i++)); do
        local char="${COMP_WORDBREAKS:$i:1}"
        local candidate=${prefix##*$char}
        if [[ ${#candidate} -lt ${#shortest_suffix} ]]; then
            shortest_suffix=$candidate
        fi
    done
    local superfluous_prefix=""
    if [[ "$shortest_suffix" != "$prefix" ]]; then
        local superfluous_prefix=${prefix%$shortest_suffix}
    fi
    COMPREPLY=("${matches[@]#$superfluous_prefix}")

    return 0
}

complete -o nospace -F _hyprctl hyprctl


================================================
FILE: hyprctl/hyprctl.fish
================================================
function _hyprctl_2
    set 1 $argv[1]
    hyprctl monitors | awk '/Monitor/{ print $2 }'
end

function _hyprctl_4
    set 1 $argv[1]
    hyprctl clients | awk '/class/{print $2}'
end

function _hyprctl_3
    set 1 $argv[1]
    hyprctl devices | sed -n '/Keyboard at/{n; s/^\s\+//; p}'
end

function _hyprctl_1
    set 1 $argv[1]
    hyprpm list | awk '/Plugin/{print $4}'
end

function _hyprctl
    set COMP_LINE (commandline --cut-at-cursor)

    set COMP_WORDS
    echo $COMP_LINE | read --tokenize --array COMP_WORDS
    if string match --quiet --regex '.*\s$' $COMP_LINE
        set COMP_CWORD (math (count $COMP_WORDS) + 1)
    else
        set COMP_CWORD (count $COMP_WORDS)
    end

    set literals "resizeactive" "2" "changegroupactive" "-r" "moveintogroup" "forceallowsinput" "4" "::=" "systeminfo" "all" "layouts" "setprop" "animationstyle" "switchxkblayout" "create" "denywindowfromgroup" "headless" "activebordercolor" "exec" "setcursor" "wayland" "focusurgentorlast" "workspacerules" "movecurrentworkspacetomonitor" "movetoworkspacesilent" "hyprpaper" "alpha" "inactivebordercolor" "movegroupwindow" "movecursortocorner" "movewindowpixel" "prev" "movewindow" "globalshortcuts" "clients" "dimaround" "setignoregrouplock" "splash" "execr" "monitors" "0" "forcenoborder" "-q" "animations" "1" "nomaxsize" "splitratio" "moveactive" "pass" "swapnext" "devices" "layers" "rounding" "lockactivegroup" "5" "moveworkspacetomonitor" "-f" "-i" "--quiet" "forcenodim" "pin" "0" "1" "forceopaque" "forcenoshadow" "setfloating" "minsize" "alphaoverride" "sendshortcut" "workspaces" "cyclenext" "alterzorder" "togglegroup" "lockgroups" "bordersize" "dpms" "focuscurrentorlast" "-1" "--batch" "notify" "remove" "instances" "1" "3" "moveoutofgroup" "killactive" "2" "movetoworkspace" "movecursor" "configerrors" "closewindow" "swapwindow" "tagwindow" "forcerendererreload" "centerwindow" "auto" "focuswindow" "seterror" "nofocus" "alphafullscreen" "binds" "version" "-h" "togglespecialworkspace" "fullscreen" "windowdancecompat" "0" "keyword" "toggleopaque" "3" "--instance" "togglefloating" "renameworkspace" "alphafullscreenoverride" "activeworkspace" "x11" "kill" "forceopaqueoverriden" "output" "global" "dispatch" "reload" "forcenoblur" "-j" "event" "--help" "disable" "-1" "activewindow" "keepaspectratio" "dismissnotify" "focusmonitor" "movefocus" "plugin" "exit" "workspace" "fullscreenstate" "getoption" "alphainactiveoverride" "alphainactive" "decorations" "settiled" "config-only" "descriptions" "resizewindowpixel" "fakefullscreen" "rollinglog" "swapactiveworkspaces" "submap" "next" "movewindoworgroup" "cursorpos" "forcenoanims" "focusworkspaceoncurrentmonitor" "maxsize" "sendkeystate"

    set descriptions
    set descriptions[1] "Resize the active window"
    set descriptions[2] "Fullscreen"
    set descriptions[3] "Switch to the next window in a group"
    set descriptions[4] "Refresh state after issuing the command"
    set descriptions[5] "Move the active window into a group"
    set descriptions[7] "CONFUSED"
    set descriptions[9] "Print system info"
    set descriptions[11] "List all layouts available (including plugin ones)"
    set descriptions[12] "Set a property of a window"
    set descriptions[14] "Set the xkb layout index for a keyboard"
    set descriptions[16] "Prohibit the active window from becoming or being inserted into group"
    set descriptions[19] "Execute a shell command"
    set descriptions[20] "Set the cursor theme and reloads the cursor manager"
    set descriptions[22] "Focus the urgent window or the last window"
    set descriptions[23] "Get the list of defined workspace rules"
    set descriptions[24] "Move the active workspace to a monitor"
    set descriptions[25] "Move window doesn't switch to the workspace"
    set descriptions[26] "Interact with hyprpaper if present"
    set descriptions[29] "Swap the active window with the next or previous in a group"
    set descriptions[30] "Move the cursor to the corner of the active window"
    set descriptions[31] "Move a selected window"
    set descriptions[33] "Move the active window in a direction or to a monitor"
    set descriptions[34] "Lists all global shortcuts"
    set descriptions[35] "List all windows with their properties"
    set descriptions[37] "Temporarily enable or disable binds:ignore_group_lock"
    set descriptions[38] "Print the current random splash"
    set descriptions[39] "Execute a raw shell command"
    set descriptions[40] "List active outputs with their properties"
    set descriptions[43] "Disable output"
    set descriptions[44] "Gets the current config info about animations and beziers"
    set descriptions[47] "Change the split ratio"
    set descriptions[48] "Move the active window"
    set descriptions[49] "Pass the key to a specified window"
    set descriptions[50] "Swap the focused window with the next window"
    set descriptions[51] "List all connected keyboards and mice"
    set descriptions[52] "List the layers"
    set descriptions[54] "Lock the focused group"
    set descriptions[55] "OK"
    set descriptions[56] "Move a workspace to a monitor"
    set descriptions[58] "Specify the Hyprland instance"
    set descriptions[59] "Disable output"
    set descriptions[61] "Pin a window"
    set descriptions[62] "WARNING"
    set descriptions[63] "INFO"
    set descriptions[66] "Set the current window's floating state to true"
    set descriptions[69] "On shortcut X sends shortcut Y to a specified window"
    set descriptions[70] "List all workspaces with their properties"
    set descriptions[71] "Focus the next window on a workspace"
    set descriptions[72] "Modify the window stack order of the active or specified window"
    set descriptions[73] "Toggle the current active window into a group"
    set descriptions[74] "Lock the groups"
    set descriptions[76] "Set all monitors' DPMS status"
    set descriptions[77] "Switch focus from current to previously focused window"
    set descriptions[78] "No Icon"
    set descriptions[79] "Execute a batch of commands separated by ;"
    set descriptions[80] "Send a notification using the built-in Hyprland notification system"
    set descriptions[82] "List all running Hyprland instances and their info"
    set descriptions[83] "Maximize no fullscreen"
    set descriptions[84] "Maximize and fullscreen"
    set descriptions[85] "Move the active window out of a group"
    set descriptions[86] "Close the active window"
    set descriptions[87] "HINT"
    set descriptions[88] "Move the focused window to a workspace"
    set descriptions[89] "Move the cursor to a specified position"
    set descriptions[90] "List all current config parsing errors"
    set descriptions[91] "Close a specified window"
    set descriptions[92] "Swap the active window with another window"
    set descriptions[93] "Apply a tag to the window"
    set descriptions[94] "Force the renderer to reload all resources and outputs"
    set descriptions[95] "Center the active window"
    set descriptions[97] "Focus the first window matching"
    set descriptions[98] "Set the hyprctl error string"
    set descriptions[101] "List all registered binds"
    set descriptions[102] "Print the Hyprland version: flags, commit and branch of build"
    set descriptions[103] "Prints the help message"
    set descriptions[104] "Toggle a special workspace on/off"
    set descriptions[105] "Toggle the focused window's fullscreen state"
    set descriptions[107] "None"
    set descriptions[108] "Issue a keyword to call a config keyword dynamically"
    set descriptions[109] "Toggle the current window to always be opaque"
    set descriptions[110] "ERROR"
    set descriptions[111] "Specify the Hyprland instance"
    set descriptions[112] "Toggle the current window's floating state"
    set descriptions[113] "Rename a workspace"
    set descriptions[115] "Get the active workspace name and its properties"
    set descriptions[117] "Get into a kill mode, where you can kill an app by clicking on it"
    set descriptions[119] "Allows adding/removing fake outputs to a specific backend"
    set descriptions[120] "Execute a Global Shortcut using the GlobalShortcuts portal"
    set descriptions[121] "Issue a dispatch to call a keybind dispatcher with an arg"
    set descriptions[122] "Force reload the config"
    set descriptions[124] "Output in JSON format"
    set descriptions[125] "Emits a custom event to socket2"
    set descriptions[126] "Prints the help message"
    set descriptions[128] "Current"
    set descriptions[129] "Get the active window name and its properties"
    set descriptions[131] "Dismiss all or up to amount of notifications"
    set descriptions[132] "Focus a monitor"
    set descriptions[133] "Move the focus in a direction"
    set descriptions[134] "Interact with a plugin"
    set descriptions[135] "Exit the compositor with no questions asked"
    set descriptions[136] "Change the workspace"
    set descriptions[137] "Sets the focused window’s fullscreen mode and the one sent to the client"
    set descriptions[138] "Get the config option status (values)"
    set descriptions[141] "List all decorations and their info"
    set descriptions[142] "Set the current window's floating state to false"
    set descriptions[144] "Return a parsable JSON with all the config options, descriptions, value types and ranges"
    set descriptions[145] "Resize a selected window"
    set descriptions[146] "Toggle the focused window's internal fullscreen state"
    set descriptions[147] "Print tail of the log"
    set descriptions[148] "Swap the active workspaces between two monitors"
    set descriptions[149] "Change the current mapping group"
    set descriptions[151] "Behave as moveintogroup"
    set descriptions[152] "Get the current cursor pos in global layout coordinates"
    set descriptions[154] "Focus the requested workspace"

    set literal_transitions
    set literal_transitions[1] "set inputs 121 44 126 82 4 52 51 129 90 59 9 11 12 131 14 98 102 103 134 101 138 23 20 141 26 144 108 147 70 34 35 79 115 38 152 117 122 124 40 43 80 119; set tos 15 3 22 3 22 3 3 3 3 22 3 3 4 5 6 7 3 22 8 3 3 3 3 9 3 3 10 11 3 3 3 22 3 3 3 3 14 22 12 22 16 13"
    set literal_transitions[2] "set inputs 82 52 51 129 9 90 11 12 131 14 98 102 134 101 23 20 138 141 26 144 108 147 70 34 35 115 38 152 117 40 119 122 121 80 44; set tos 3 3 3 3 3 3 3 4 5 6 7 3 8 3 3 3 3 9 3 3 10 11 3 3 3 3 3 3 3 12 13 14 15 16 3"
    set literal_transitions[4] "set inputs 140 64 65 46 106 28 27 53 6 67 68 130 114 13 75 100 36 153 99 60 118 42 18 139 155 123; set tos 3 17 17 17 17 3 3 5 17 3 17 17 17 3 5 3 17 17 17 17 17 17 3 17 3 17"
    set literal_transitions[7] "set inputs 127; set tos 3"
    set literal_transitions[11] "set inputs 57; set tos 3"
    set literal_transitions[12] "set inputs 10; set tos 3"
    set literal_transitions[13] "set inputs 15 81; set tos 20 23"
    set literal_transitions[14] "set inputs 143; set tos 3"
    set literal_transitions[15] "set inputs 1 85 3 86 5 88 89 91 92 93 94 95 97 16 19 104 22 105 24 25 29 30 31 109 112 33 113 37 39 120 125 47 48 49 50 54 56 132 133 135 136 61 137 142 66 145 146 69 148 71 72 73 74 149 76 77 151 154; set tos 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 21 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3"
    set literal_transitions[16] "set inputs 87 7 110 62 78 55 63; set tos 5 5 5 5 5 5 5"
    set literal_transitions[17] "set inputs 41 45; set tos 3 3"
    set literal_transitions[18] "set inputs 8; set tos 24"
    set literal_transitions[19] "set inputs 32 150; set tos 3 3"
    set literal_transitions[20] "set inputs 96 17 116 21; set tos 3 3 3 3"
    set literal_transitions[21] "set inputs 107 83 128 2 84; set tos 3 3 3 3 3"
    set literal_transitions[24] "set inputs 58 111; set tos 22 22"

    set match_anything_transitions_from 7 8 1 23 6 5 3 19 12 9 10 14 11 2
    set match_anything_transitions_to 18 3 2 3 19 3 18 3 18 3 3 18 18 2

    set state 1
    set word_index 2
    while test $word_index -lt $COMP_CWORD
        set -- word $COMP_WORDS[$word_index]

        if set --query literal_transitions[$state] && test -n $literal_transitions[$state]
            set --erase inputs
            set --erase tos
            eval $literal_transitions[$state]

            if contains -- $word $literals
                set literal_matched 0
                for literal_id in (seq 1 (count $literals))
                    if test $literals[$literal_id] = $word
                        set index (contains --index -- $literal_id $inputs)
                        set state $tos[$index]
                        set word_index (math $word_index + 1)
                        set literal_matched 1
                        break
                    end
                end
                if test $literal_matched -ne 0
                    continue
                end
            end
        end

        if set --query match_anything_transitions_from[$state] && test -n $match_anything_transitions_from[$state]
            set index (contains --index -- $state $match_anything_transitions_from)
            set state $match_anything_transitions_to[$index]
            set word_index (math $word_index + 1)
            continue
        end

        return 1
    end

    if set --query literal_transitions[$state] && test -n $literal_transitions[$state]
        set --erase inputs
        set --erase tos
        eval $literal_transitions[$state]
        for literal_id in $inputs
            if test -n $descriptions[$literal_id]
                printf '%s\t%s\n' $literals[$literal_id] $descriptions[$literal_id]
            else
                printf '%s\n' $literals[$literal_id]
            end
        end
    end

    set command_states 8 23 9 6
    set command_ids 1 2 4 3
    if contains $state $command_states
        set index (contains --index $state $command_states)
        set function_id $command_ids[$index]
        set function_name _hyprctl_$function_id
        set --erase inputs
        set --erase tos
        $function_name "$COMP_WORDS[$COMP_CWORD]"
    end

    return 0
end

complete --command hyprctl --no-files --arguments "(_hyprctl)"


================================================
FILE: hyprctl/hyprctl.usage
================================================
# This is a file fed to complgen to generate bash/fish/zsh completions
# Repo: https://github.com/adaszko/complgen
# Generate completion scripts: "complgen aot --bash-script hyprctl.bash --fish-script hyprctl.fish --zsh-script hyprctl.zsh ./hyprctl.usage"

hyprctl [<OPTIONS>]... <ARGUMENTS>

<OPTIONS>  ::=  (-i | --instance)                                     "Specify the Hyprland instance"
            |   (-j)                                                  "Output in JSON format"
            |   (-r)                                                  "Refresh state after issuing the command"
            |   (--batch)                                             "Execute a batch of commands separated by ;"
            |   (-q | --quiet)                                        "Disable output"
            |   (-h | --help)                                         "Prints the help message"
            ;

<WINDOWS> ::= {{{ hyprctl clients | awk '/class/{print $2}' }}};

<AVAILABLE_PLUGINS> ::= {{{ hyprpm list | awk '/Plugin/{print $4}' }}};

<MONITORS> ::= {{{ hyprctl monitors | awk '/Monitor/{ print $2 }' }}};

<KEYBOARDS> ::= {{{ hyprctl devices | sed -n '/Keyboard at/{n; s/^\s\+//; p}' }}};

<NOTIFICATION_TYPES> ::=  (0)   "WARNING"
                      |   (1)   "INFO"
                      |   (2)   "HINT"
                      |   (3)   "ERROR"
                      |   (4)   "CONFUSED"
                      |   (5)   "OK"
                      |   (-1)  "No Icon"
                      ;

<PROPS> ::=  (animationstyle)
         |   (rounding <NUM>)
         |   (bordersize <NUM>)
         |   (forcenoblur (0 | 1))
         |   (forceopaque (0 | 1))
         |   (forceopaqueoverriden (0 | 1))
         |   (forceallowsinput (0 | 1))
         |   (forcenoanims (0 | 1))
         |   (forcenoborder (0 | 1))
         |   (forcenodim (0 | 1))
         |   (forcenoshadow (0 | 1))
         |   (nofocus (0 | 1))
         |   (windowdancecompat (0 | 1))
         |   (nomaxsize (0 | 1))
         |   (minsize)
         |   (maxsize)
         |   (dimaround (0 | 1))
         |   (keepaspectratio (0 | 1))
         |   (alphaoverride (0 | 1))
         |   (alpha)
         |   (alphainactiveoverride (0 | 1))
         |   (alphainactive)
         |   (alphafullscreenoverride (0 | 1))
         |   (alphafullscreen)
         |   (activebordercolor)
         |   (inactivebordercolor)
         ;


<ARGUMENTS> ::= (activewindow)                                        "Get the active window name and its properties"
            |   (activeworkspace)                                     "Get the active workspace name and its properties"
            |   (animations)                                          "Gets the current config info about animations and beziers"
            |   (binds)                                               "List all registered binds"
            |   (clients)                                             "List all windows with their properties"
            |   (configerrors)                                        "List all current config parsing errors"
            |   (cursorpos)                                           "Get the current cursor pos in global layout coordinates"
            |   (decorations <WINDOWS>)                               "List all decorations and their info"
            |   (descriptions)                                        "Return a parsable JSON with all the config options, descriptions, value types and ranges"
            |   (devices)                                             "List all connected keyboards and mice"
            |   (dismissnotify <NUM>)                                 "Dismiss all or up to amount of notifications"
            |   (dispatch <DISPATCHERS>)                              "Issue a dispatch to call a keybind dispatcher with an arg"
            |   (getoption)                                           "Get the config option status (values)"
            |   (globalshortcuts)                                     "Lists all global shortcuts"
            |   (hyprpaper)                                           "Interact with hyprpaper if present"
            |   (instances)                                           "List all running Hyprland instances and their info"
            |   (keyword <KEYWORDS>)                                  "Issue a keyword to call a config keyword dynamically"
            |   (kill)                                                "Get into a kill mode, where you can kill an app by clicking on it"
            |   (layers)                                              "List the layers"
            |   (layouts)                                             "List all layouts available (including plugin ones)"
            |   (monitors [all])                                      "List active outputs with their properties"
            |   (notify <NOTIFICATION_TYPES> <NUM>)                   "Send a notification using the built-in Hyprland notification system"
            |   (output (create (wayland | x11 | headless | auto) | remove <MONITORS>)) "Allows adding/removing fake outputs to a specific backend"
            |   (plugin <AVAILABLE_PLUGINS>)                          "Interact with a plugin"
            |   (reload [config-only])                                "Force reload the config"
            |   (rollinglog [-f])                                     "Print tail of the log"
            |   (setcursor)                                           "Set the cursor theme and reloads the cursor manager"
            |   (seterror [disable])                                  "Set the hyprctl error string"
            |   (setprop <PROPS>)                                     "Set a property of a window"
            |   (splash)                                              "Print the current random splash"
            |   (switchxkblayout <KEYBOARDS> (next | prev | <NUM>))   "Set the xkb layout index for a keyboard"
            |   (systeminfo)                                          "Print system info"
            |   (version)                                             "Print the Hyprland version: flags, commit and branch of build"
            |   (workspacerules)                                      "Get the list of defined workspace rules"
            |   (workspaces)                                          "List all workspaces with their properties"
            ;

<WINDOW_STATE> ::=  (-1)    "Current"
                |   (0)     "None"
                |   (1)     "Maximize no fullscreen"
                |   (2)     "Fullscreen"
                |   (3)     "Maximize and fullscreen"
                ;

<DISPATCHERS> ::=  (exec)         	                                  "Execute a shell command"
                |  (execr)           	                              "Execute a raw shell command"
                |  (pass)            	                              "Pass the key to a specified window"
                |  (sendshortcut)            	                      "On shortcut X sends shortcut Y to a specified window"
                |  (sendkeystate)            	                      "Send a key with specific state (down/repeat/up) to a specified window (window must keep focus for events to continue)"
                |  (killactive)          	                          "Close the active window"
                |  (closewindow)         	                          "Close a specified window"
                |  (workspace)           	                          "Change the workspace"
                |  (movetoworkspace)         	                      "Move the focused window to a workspace"
                |  (movetoworkspacesilent)           	              "Move window doesn't switch to the workspace"
                |  (togglefloating)          	                      "Toggle the current window's floating state"
                |  (setfloating)         	                          "Set the current window's floating state to true"
                |  (settiled)            	                          "Set the current window's floating state to false"
                |  (fullscreen)          	                          "Toggle the focused window's fullscreen state"
                |  (fakefullscreen)          	                      "Toggle the focused window's internal fullscreen state"
                |  (fullscreenstate <WINDOW_STATE>)                   "Sets the focused window’s fullscreen mode and the one sent to the client"
                |  (dpms)            	                              "Set all monitors' DPMS status"
                |  (pin)         	                                  "Pin a window"
                |  (movefocus)           	                          "Move the focus in a direction"
                |  (movewindow)          	                          "Move the active window in a direction or to a monitor"
                |  (swapwindow)          	                          "Swap the active window with another window"
                |  (centerwindow)            	                      "Center the active window"
                |  (resizeactive)            	                      "Resize the active window"
                |  (moveactive)          	                          "Move the active window"
                |  (resizewindowpixel)           	                  "Resize a selected window"
                |  (movewindowpixel)         	                      "Move a selected window"
                |  (cyclenext)           	                          "Focus the next window on a workspace"
                |  (swapnext)            	                          "Swap the focused window with the next window"
                |  (tagwindow)           	                          "Apply a tag to the window"
                |  (focuswindow)         	                          "Focus the first window matching"
                |  (focusmonitor)            	                      "Focus a monitor"
                |  (splitratio)          	                          "Change the split ratio"
                |  (toggleopaque)            	                      "Toggle the current window to always be opaque"
                |  (movecursortocorner)          	                  "Move the cursor to the corner of the active window"
                |  (movecursor)          	                          "Move the cursor to a specified position"
                |  (renameworkspace)         	                      "Rename a workspace"
                |  (exit)            	                              "Exit the compositor with no questions asked"
                |  (forcerendererreload)         	                  "Force the renderer to reload all resources and outputs"
                |  (movecurrentworkspacetomonitor)           	      "Move the active workspace to a monitor"
                |  (focusworkspaceoncurrentmonitor)          	      "Focus the requested workspace"
                |  (moveworkspacetomonitor)          	              "Move a workspace to a monitor"
                |  (swapactiveworkspaces)            	              "Swap the active workspaces between two monitors"
                |  (alterzorder)         	                          "Modify the window stack order of the active or specified window"
                |  (togglespecialworkspace)          	              "Toggle a special workspace on/off"
                |  (focusurgentorlast)           	                  "Focus the urgent window or the last window"
                |  (togglegroup)         	                          "Toggle the current active window into a group"
                |  (changegroupactive)           	                  "Switch to the next window in a group"
                |  (focuscurrentorlast)          	                  "Switch focus from current to previously focused window"
                |  (lockgroups)          	                          "Lock the groups"
                |  (lockactivegroup)         	                      "Lock the focused group"
                |  (moveintogroup)           	                      "Move the active window into a group"
                |  (moveoutofgroup)          	                      "Move the active window out of a group"
                |  (movewindoworgroup)           	                  "Behave as moveintogroup"
                |  (movegroupwindow)         	                      "Swap the active window with the next or previous in a group"
                |  (denywindowfromgroup)         	                  "Prohibit the active window from becoming or being inserted into group"
                |  (setignoregrouplock)          	                  "Temporarily enable or disable binds:ignore_group_lock"
                |  (global)          	                              "Execute a Global Shortcut using the GlobalShortcuts portal"
                |  (submap)          	                              "Change the current mapping group"
                |  (event)                                            "Emits a custom event to socket2"
                ;


================================================
FILE: hyprctl/hyprctl.zsh
================================================
#compdef hyprctl

_hyprctl_cmd_1 () {
    hyprctl monitors | awk '/Monitor/{ print $2 }'
}

_hyprctl_cmd_3 () {
    hyprctl clients | awk '/class/{print $2}'
}

_hyprctl_cmd_2 () {
    hyprctl devices | sed -n '/Keyboard at/{n; s/^\s\+//; p}'
}

_hyprctl_cmd_0 () {
    hyprpm list | awk '/Plugin/{print $4}'
}

_hyprctl () {
    local -a literals=("resizeactive" "2" "changegroupactive" "-r" "moveintogroup" "forceallowsinput" "4" "::=" "systeminfo" "all" "layouts" "setprop" "animationstyle" "switchxkblayout" "create" "denywindowfromgroup" "headless" "activebordercolor" "exec" "setcursor" "wayland" "focusurgentorlast" "workspacerules" "movecurrentworkspacetomonitor" "movetoworkspacesilent" "hyprpaper" "alpha" "inactivebordercolor" "movegroupwindow" "movecursortocorner" "movewindowpixel" "prev" "movewindow" "globalshortcuts" "clients" "dimaround" "setignoregrouplock" "splash" "execr" "monitors" "0" "forcenoborder" "-q" "animations" "1" "nomaxsize" "splitratio" "moveactive" "pass" "swapnext" "devices" "layers" "rounding" "lockactivegroup" "5" "moveworkspacetomonitor" "-f" "-i" "--quiet" "forcenodim" "pin" "0" "1" "forceopaque" "forcenoshadow" "setfloating" "minsize" "alphaoverride" "sendshortcut" "workspaces" "cyclenext" "alterzorder" "togglegroup" "lockgroups" "bordersize" "dpms" "focuscurrentorlast" "-1" "--batch" "notify" "remove" "instances" "1" "3" "moveoutofgroup" "killactive" "2" "movetoworkspace" "movecursor" "configerrors" "closewindow" "swapwindow" "tagwindow" "forcerendererreload" "centerwindow" "auto" "focuswindow" "seterror" "nofocus" "alphafullscreen" "binds" "version" "-h" "togglespecialworkspace" "fullscreen" "windowdancecompat" "0" "keyword" "toggleopaque" "3" "--instance" "togglefloating" "renameworkspace" "alphafullscreenoverride" "activeworkspace" "x11" "kill" "forceopaqueoverriden" "output" "global" "dispatch" "reload" "forcenoblur" "-j" "event" "--help" "disable" "-1" "activewindow" "keepaspectratio" "dismissnotify" "focusmonitor" "movefocus" "plugin" "exit" "workspace" "fullscreenstate" "getoption" "alphainactiveoverride" "alphainactive" "decorations" "settiled" "config-only" "descriptions" "resizewindowpixel" "fakefullscreen" "rollinglog" "swapactiveworkspaces" "submap" "next" "movewindoworgroup" "cursorpos" "forcenoanims" "focusworkspaceoncurrentmonitor" "maxsize" "sendkeystate")

    local -A descriptions
    descriptions[1]="Resize the active window"
    descriptions[2]="Fullscreen"
    descriptions[3]="Switch to the next window in a group"
    descriptions[4]="Refresh state after issuing the command"
    descriptions[5]="Move the active window into a group"
    descriptions[7]="CONFUSED"
    descriptions[9]="Print system info"
    descriptions[11]="List all layouts available (including plugin ones)"
    descriptions[12]="Set a property of a window"
    descriptions[14]="Set the xkb layout index for a keyboard"
    descriptions[16]="Prohibit the active window from becoming or being inserted into group"
    descriptions[19]="Execute a shell command"
    descriptions[20]="Set the cursor theme and reloads the cursor manager"
    descriptions[22]="Focus the urgent window or the last window"
    descriptions[23]="Get the list of defined workspace rules"
    descriptions[24]="Move the active workspace to a monitor"
    descriptions[25]="Move window doesn't switch to the workspace"
    descriptions[26]="Interact with hyprpaper if present"
    descriptions[29]="Swap the active window with the next or previous in a group"
    descriptions[30]="Move the cursor to the corner of the active window"
    descriptions[31]="Move a selected window"
    descriptions[33]="Move the active window in a direction or to a monitor"
    descriptions[34]="Lists all global shortcuts"
    descriptions[35]="List all windows with their properties"
    descriptions[37]="Temporarily enable or disable binds:ignore_group_lock"
    descriptions[38]="Print the current random splash"
    descriptions[39]="Execute a raw shell command"
    descriptions[40]="List active outputs with their properties"
    descriptions[43]="Disable output"
    descriptions[44]="Gets the current config info about animations and beziers"
    descriptions[47]="Change the split ratio"
    descriptions[48]="Move the active window"
    descriptions[49]="Pass the key to a specified window"
    descriptions[50]="Swap the focused window with the next window"
    descriptions[51]="List all connected keyboards and mice"
    descriptions[52]="List the layers"
    descriptions[54]="Lock the focused group"
    descriptions[55]="OK"
    descriptions[56]="Move a workspace to a monitor"
    descriptions[58]="Specify the Hyprland instance"
    descriptions[59]="Disable output"
    descriptions[61]="Pin a window"
    descriptions[62]="WARNING"
    descriptions[63]="INFO"
    descriptions[66]="Set the current window's floating state to true"
    descriptions[69]="On shortcut X sends shortcut Y to a specified window"
    descriptions[70]="List all workspaces with their properties"
    descriptions[71]="Focus the next window on a workspace"
    descriptions[72]="Modify the window stack order of the active or specified window"
    descriptions[73]="Toggle the current active window into a group"
    descriptions[74]="Lock the groups"
    descriptions[76]="Set all monitors' DPMS status"
    descriptions[77]="Switch focus from current to previously focused window"
    descriptions[78]="No Icon"
    descriptions[79]="Execute a batch of commands separated by ;"
    descriptions[80]="Send a notification using the built-in Hyprland notification system"
    descriptions[82]="List all running Hyprland instances and their info"
    descriptions[83]="Maximize no fullscreen"
    descriptions[84]="Maximize and fullscreen"
    descriptions[85]="Move the active window out of a group"
    descriptions[86]="Close the active window"
    descriptions[87]="HINT"
    descriptions[88]="Move the focused window to a workspace"
    descriptions[89]="Move the cursor to a specified position"
    descriptions[90]="List all current config parsing errors"
    descriptions[91]="Close a specified window"
    descriptions[92]="Swap the active window with another window"
    descriptions[93]="Apply a tag to the window"
    descriptions[94]="Force the renderer to reload all resources and outputs"
    descriptions[95]="Center the active window"
    descriptions[97]="Focus the first window matching"
    descriptions[98]="Set the hyprctl error string"
    descriptions[101]="List all registered binds"
    descriptions[102]="Print the Hyprland version: flags, commit and branch of build"
    descriptions[103]="Prints the help message"
    descriptions[104]="Toggle a special workspace on/off"
    descriptions[105]="Toggle the focused window's fullscreen state"
    descriptions[107]="None"
    descriptions[108]="Issue a keyword to call a config keyword dynamically"
    descriptions[109]="Toggle the current window to always be opaque"
    descriptions[110]="ERROR"
    descriptions[111]="Specify the Hyprland instance"
    descriptions[112]="Toggle the current window's floating state"
    descriptions[113]="Rename a workspace"
    descriptions[115]="Get the active workspace name and its properties"
    descriptions[117]="Get into a kill mode, where you can kill an app by clicking on it"
    descriptions[119]="Allows adding/removing fake outputs to a specific backend"
    descriptions[120]="Execute a Global Shortcut using the GlobalShortcuts portal"
    descriptions[121]="Issue a dispatch to call a keybind dispatcher with an arg"
    descriptions[122]="Force reload the config"
    descriptions[124]="Output in JSON format"
    descriptions[125]="Emits a custom event to socket2"
    descriptions[126]="Prints the help message"
    descriptions[128]="Current"
    descriptions[129]="Get the active window name and its properties"
    descriptions[131]="Dismiss all or up to amount of notifications"
    descriptions[132]="Focus a monitor"
    descriptions[133]="Move the focus in a direction"
    descriptions[134]="Interact with a plugin"
    descriptions[135]="Exit the compositor with no questions asked"
    descriptions[136]="Change the workspace"
    descriptions[137]="Sets the focused window’s fullscreen mode and the one sent to the client"
    descriptions[138]="Get the config option status (values)"
    descriptions[141]="List all decorations and their info"
    descriptions[142]="Set the current window's floating state to false"
    descriptions[144]="Return a parsable JSON with all the config options, descriptions, value types and ranges"
    descriptions[145]="Resize a selected window"
    descriptions[146]="Toggle the focused window's internal fullscreen state"
    descriptions[147]="Print tail of the log"
    descriptions[148]="Swap the active workspaces between two monitors"
    descriptions[149]="Change the current mapping group"
    descriptions[151]="Behave as moveintogroup"
    descriptions[152]="Get the current cursor pos in global layout coordinates"
    descriptions[154]="Focus the requested workspace"

    local -A literal_transitions
    literal_transitions[1]="([121]=15 [44]=3 [126]=22 [82]=3 [4]=22 [52]=3 [51]=3 [129]=3 [90]=3 [59]=22 [9]=3 [11]=3 [12]=4 [131]=5 [14]=6 [98]=7 [102]=3 [103]=22 [134]=8 [101]=3 [138]=3 [23]=3 [20]=3 [141]=9 [26]=3 [144]=3 [108]=10 [147]=11 [70]=3 [34]=3 [35]=3 [79]=22 [115]=3 [38]=3 [152]=3 [117]=3 [122]=14 [124]=22 [40]=12 [43]=22 [80]=16 [119]=13)"
    literal_transitions[2]="([82]=3 [52]=3 [51]=3 [129]=3 [9]=3 [90]=3 [11]=3 [12]=4 [131]=5 [14]=6 [98]=7 [102]=3 [134]=8 [101]=3 [23]=3 [20]=3 [138]=3 [141]=9 [26]=3 [144]=3 [108]=10 [147]=11 [70]=3 [34]=3 [35]=3 [115]=3 [38]=3 [152]=3 [117]=3 [40]=12 [119]=13 [122]=14 [121]=15 [80]=16 [44]=3)"
    literal_transitions[4]="([140]=3 [64]=17 [65]=17 [46]=17 [106]=17 [28]=3 [27]=3 [53]=5 [6]=17 [67]=3 [68]=17 [130]=17 [114]=17 [13]=3 [75]=5 [100]=3 [36]=17 [153]=17 [99]=17 [60]=17 [118]=17 [42]=17 [18]=3 [139]=17 [155]=3 [123]=17)"
    literal_transitions[7]="([127]=3)"
    literal_transitions[11]="([57]=3)"
    literal_transitions[12]="([10]=3)"
    literal_transitions[13]="([15]=20 [81]=23)"
    literal_transitions[14]="([143]=3)"
    literal_transitions[15]="([1]=3 [85]=3 [3]=3 [86]=3 [5]=3 [88]=3 [89]=3 [91]=3 [92]=3 [93]=3 [94]=3 [95]=3 [97]=3 [16]=3 [19]=3 [104]=3 [22]=3 [105]=3 [24]=3 [25]=3 [29]=3 [30]=3 [31]=3 [109]=3 [112]=3 [33]=3 [113]=3 [37]=3 [39]=3 [120]=3 [125]=3 [47]=3 [48]=3 [49]=3 [50]=3 [54]=3 [56]=3 [132]=3 [133]=3 [135]=3 [136]=3 [61]=3 [137]=21 [142]=3 [66]=3 [145]=3 [146]=3 [69]=3 [148]=3 [71]=3 [72]=3 [73]=3 [74]=3 [149]=3 [76]=3 [77]=3 [151]=3 [154]=3)"
    literal_transitions[16]="([87]=5 [7]=5 [110]=5 [62]=5 [78]=5 [55]=5 [63]=5)"
    literal_transitions[17]="([41]=3 [45]=3)"
    literal_transitions[18]="([8]=24)"
    literal_transitions[19]="([32]=3 [150]=3)"
    literal_transitions[20]="([96]=3 [17]=3 [116]=3 [21]=3)"
    literal_transitions[21]="([107]=3 [83]=3 [128]=3 [2]=3 [84]=3)"
    literal_transitions[24]="([58]=22 [111]=22)"

    local -A match_anything_transitions
    match_anything_transitions=([7]=18 [8]=3 [1]=2 [23]=3 [6]=19 [5]=3 [3]=18 [19]=3 [12]=18 [9]=3 [10]=3 [14]=18 [11]=18 [2]=2)

    declare -A subword_transitions

    local state=1
    local word_index=2
    while [[ $word_index -lt $CURRENT ]]; do
        if [[ -v "literal_transitions[$state]" ]]; then
            local -A state_transitions
            eval "state_transitions=${literal_transitions[$state]}"

            local word=${words[$word_index]}
            local word_matched=0
            for ((literal_id = 1; literal_id <= $#literals; literal_id++)); do
                if [[ ${literals[$literal_id]} = "$word" ]]; then
                    if [[ -v "state_transitions[$literal_id]" ]]; then
                        state=${state_transitions[$literal_id]}
                        word_index=$((word_index + 1))
                        word_matched=1
                        break
                    fi
                fi
            done
            if [[ $word_matched -ne 0 ]]; then
                continue
            fi
        fi

        if [[ -v "match_anything_transitions[$state]" ]]; then
            state=${match_anything_transitions[$state]}
            word_index=$((word_index + 1))
            continue
        fi

        return 1
    done

    completions_no_description_trailing_space=()
    completions_no_description_no_trailing_space=()
    completions_trailing_space=()
    suffixes_trailing_space=()
    descriptions_trailing_space=()
    completions_no_trailing_space=()
    suffixes_no_trailing_space=()
    descriptions_no_trailing_space=()

    if [[ -v "literal_transitions[$state]" ]]; then
        local -A state_transitions
        eval "state_transitions=${literal_transitions[$state]}"

        for literal_id in ${(k)state_transitions}; do
            if [[ -v "descriptions[$literal_id]" ]]; then
                completions_trailing_space+=("${literals[$literal_id]}")
                suffixes_trailing_space+=("${literals[$literal_id]}")
                descriptions_trailing_space+=("${descriptions[$literal_id]}")
            else
                completions_no_description_trailing_space+=("${literals[$literal_id]}")
            fi
        done
    fi
    local -A commands=([8]=0 [23]=1 [9]=3 [6]=2)

    if [[ -v "commands[$state]" ]]; then
        local command_id=${commands[$state]}
        local output=$(_hyprctl_cmd_${command_id} "${words[$CURRENT]}")
        local -a command_completions=("${(@f)output}")
        for line in ${command_completions[@]}; do
            local parts=(${(@s:	:)line})
            if [[ -v "parts[2]" ]]; then
                completions_trailing_space+=("${parts[1]}")
                suffixes_trailing_space+=("${parts[1]}")
                descriptions_trailing_space+=("${parts[2]}")
            else
                completions_no_description_trailing_space+=("${parts[1]}")
            fi
        done
    fi

    local maxlen=0
    for suffix in ${suffixes_trailing_space[@]}; do
        if [[ ${#suffix} -gt $maxlen ]]; then
            maxlen=${#suffix}
        fi
    done
    for suffix in ${suffixes_no_trailing_space[@]}; do
        if [[ ${#suffix} -gt $maxlen ]]; then
            maxlen=${#suffix}
        fi
    done

    for ((i = 1; i <= $#suffixes_trailing_space; i++)); do
        if [[ -z ${descriptions_trailing_space[$i]} ]]; then
            descriptions_trailing_space[$i]="${(r($maxlen)( ))${suffixes_trailing_space[$i]}}"
        else
            descriptions_trailing_space[$i]="${(r($maxlen)( ))${suffixes_trailing_space[$i]}} -- ${descriptions_trailing_space[$i]}"
        fi
    done

    for ((i = 1; i <= $#suffixes_no_trailing_space; i++)); do
        if [[ -z ${descriptions_no_trailing_space[$i]} ]]; then
            descriptions_no_trailing_space[$i]="${(r($maxlen)( ))${suffixes_no_trailing_space[$i]}}"
        else
            descriptions_no_trailing_space[$i]="${(r($maxlen)( ))${suffixes_no_trailing_space[$i]}} -- ${descriptions_no_trailing_space[$i]}"
        fi
    done

    compadd -Q -a completions_no_description_trailing_space
    compadd -Q -S ' ' -a completions_no_description_no_trailing_space
    compadd -l -Q -a -d descriptions_trailing_space completions_trailing_space
    compadd -l -Q -S '' -a -d descriptions_no_trailing_space completions_no_trailing_space
    return 0
}

if [[ $ZSH_EVAL_CONTEXT =~ :file$ ]]; then
    compdef _hyprctl hyprctl
else
    _hyprctl
fi


================================================
FILE: hyprctl/src/Strings.hpp
================================================
#pragma once

#include <string_view>

const std::string_view USAGE = R"#(usage: hyprctl [flags] <command> [args...|--help]

commands:
    activewindow        → Gets the active window name and its properties
    activeworkspace     → Gets the active workspace and its properties
    animations          → Gets the current config'd info about animations
                          and beziers
    binds               → Lists all registered binds
    clients             → Lists all windows with their properties
    configerrors        → Lists all current config parsing errors
    cursorpos           → Gets the current cursor position in global layout
                          coordinates
    decorations <window_regex> → Lists all decorations and their info
    devices             → Lists all connected keyboards and mice
    dismissnotify [amount] → Dismisses all or up to AMOUNT notifications
    dispatch <dispatcher> [args] → Issue a dispatch to call a keybind
                          dispatcher with arguments
    getoption <option>  → Gets the config option status (values)
    globalshortcuts     → Lists all global shortcuts
    hyprpaper ...       → Issue a hyprpaper request
    hyprsunset ...      → Issue a hyprsunset request
    instances           → Lists all running instances of Hyprland with
                          their info
    keyword <name> <value> → Issue a keyword to call a config keyword
                          dynamically
    kill                → Issue a kill to get into a kill mode, where you can
                          kill an app by clicking on it. You can exit it
                          with ESCAPE
    layers              → Lists all the surface layers
    layouts             → Lists all layouts available (including plugin'd ones)
    monitors            → Lists active outputs with their properties,
                          'monitors all' lists active and inactive outputs
    notify ...          → Sends a notification using the built-in Hyprland
                          notification system
    output ...          → Allows you to add and remove fake outputs to your
                          preferred backend
    plugin ...          → Issue a plugin request
    reload [config-only] → Issue a reload to force reload the config. Pass
                          'config-only' to disable monitor reload
    rollinglog          → Prints tail of the log. Also supports -f/--follow
                          option
    setcursor <theme> <size> → Sets the cursor theme and reloads the cursor
                          manager
    seterror <color> <message...> → Sets the hyprctl error string. Color has
                          the same format as in colors in config. Will reset
                          when Hyprland's config is reloaded
    setprop ...         → Sets a window property
    getprop ...         → Gets a window property
    splash              → Get the current splash
    switchxkblayout ... → Sets the xkb layout index for a keyboard
    systeminfo          → Get system info
    version             → Prints the hyprland version, meaning flags, commit
                          and branch of build.
    workspacerules      → Lists all workspace rules
    workspaces          → Lists all workspaces with their properties

flags:
    -j                  → Output in JSON
    -r                  → Refresh state after issuing command (e.g. for
                          updating variables)
    --batch             → Execute a batch of commands, separated by ';'
    --instance (-i)     → use a specific instance. Can be either signature or
                          index in hyprctl instances (0, 1, etc)
    --quiet (-q)        → Disable the output of hyprctl

--help:
    Can be used to print command's arguments that did not fit into this page
    (three dots))#";

const std::string_view HYPRPAPER_HELP = R"#(usage: hyprctl [flags] hyprpaper <request>

requests:
    wallpaper       → Issue a wallpaper to call a config wallpaper dynamically.
                      Arguments are [mon],[path],[fit_mode]. Fit mode is optional.

flags:
    See 'hyprctl --help')#";

const std::string_view HYPRSUNSET_HELP = R"#(usage: hyprctl [flags] hyprsunset <request>

requests:
    temperature <temp> → Enable blue-light filter
    identity           → Disable blue-light filter
    gamma <gamma>      → Enable gamma filter

flags:
    See 'hyprctl --help')#";

const std::string_view NOTIFY_HELP = R"#(usage: hyprctl [flags] notify <icon> <time_ms> <color> <message...>

icon:
    Integer of value:
        0       → Warning
        1       → Info
        2       → Hint
        3       → Error
        4       → Confused
        5       → Ok
        6 or -1 → No icon

time_ms:
    Time to display notification in milliseconds

color:
    Notification color. Format is the same as for colors in hyprland.conf. Use
    0 for default color for icon

message:
    Notification message

flags:
    See 'hyprctl --help')#";

const std::string_view OUTPUT_HELP = R"#(usage: hyprctl [flags] output <create <backend> | remove <name>>

create <backend>:
    Creates new virtual output. Possible values for backend: wayland, x11,
    headless or auto.

remove <name>:
    Removes virtual output. Pass the output's name, as found in
    'hyprctl monitors'

flags:
    See 'hyprctl --help')#";

const std::string_view PLUGIN_HELP = R"#(usage: hyprctl [flags] plugin <request>

requests:
    load <path>     → Loads a plugin. Path must be absolute
    unload <path>   → Unloads a plugin. Path must be absolute
    list            → Lists all loaded plugins

flags:
    See 'hyprctl --help')#";

const std::string_view SETPROP_HELP = R"#(usage: hyprctl [flags] setprop <regex> <property> <value> [lock]

regex:
    Regular expression by which a window will be searched

property:
    See https://wiki.hypr.land/Configuring/Using-hyprctl/#setprop for list
    of properties

value:
    Property value

lock:
    Optional argument. If lock is not added, will be unlocked. Locking means a
    dynamic windowrule cannot override this setting.

flags:
    See 'hyprctl --help')#";

const std::string_view GETPROP_HELP = R"#(usage: hyprctl [flags] getprop <regex> <property>

regex:
    Regular expression by which a window will be searched

property:
    See https://wiki.hypr.land/Configuring/Using-hyprctl/#setprop for list
    of properties

flags:
    See 'hyprctl --help')#";

const std::string_view SWITCHXKBLAYOUT_HELP = R"#(usage: [flags] switchxkblayout <device> <cmd>

device:
    You can find the device using 'hyprctl devices' command

cmd:
    'next' for next, 'prev' for previous, or ID for a specific one. IDs are
    assigned based on their order in config file (keyboard_layout),
    starting from 0

flags:
    See 'hyprctl --help')#";


================================================
FILE: hyprctl/src/helpers/Memory.hpp
================================================
#pragma once

#include <hyprutils/memory/SharedPtr.hpp>
#include <hyprutils/memory/UniquePtr.hpp>
#include <hyprutils/memory/Atomic.hpp>

using namespace Hyprutils::Memory;

#define SP CSharedPointer
#define WP CWeakPointer
#define UP CUniquePointer


================================================
FILE: hyprctl/src/hyprpaper/Hyprpaper.cpp
================================================
#include "Hyprpaper.hpp"
#include "../helpers/Memory.hpp"

#include <optional>
#include <format>
#include <filesystem>
#include <print>

#include <hyprpaper_core-client.hpp>

#include <hyprutils/string/VarList2.hpp>
using namespace Hyprutils::String;

using namespace std::string_literals;

constexpr const char*          SOCKET_NAME = ".hyprpaper.sock";
static SP<CCHyprpaperCoreImpl> g_coreImpl;

constexpr const uint32_t       PROTOCOL_VERSION_SUPPORTED = 2;

//
static hyprpaperCoreWallpaperFitMode fitFromString(const std::string_view& sv) {
    if (sv == "contain")
        return HYPRPAPER_CORE_WALLPAPER_FIT_MODE_CONTAIN;
    if (sv == "fit" || sv == "stretch")
        return HYPRPAPER_CORE_WALLPAPER_FIT_MODE_STRETCH;
    if (sv == "tile")
        return HYPRPAPER_CORE_WALLPAPER_FIT_MODE_TILE;
    return HYPRPAPER_CORE_WALLPAPER_FIT_MODE_COVER;
}

static std::expected<std::string, std::string> resolvePath(const std::string_view& sv) {
    std::error_code ec;
    auto            can = std::filesystem::canonical(sv, ec);

    if (ec)
        return std::unexpected(std::format("invalid path: {}", ec.message()));

    return can;
}

static std::expected<std::string, std::string> getFullPath(const std::string_view& sv) {
    if (sv.empty())
        return std::unexpected("empty path");

    if (sv[0] == '~') {
        static auto HOME = getenv("HOME");
        if (!HOME || HOME[0] == '\0')
            return std::unexpected("home path but no $HOME");

        return resolvePath(std::string{HOME} + "/"s + std::string{sv.substr(1)});
    }

    return resolvePath(sv);
}

static std::expected<void, std::string> doWallpaper(const std::string_view& RHS) {
    CVarList2         args(std::string{RHS}, 0, ',');

    const std::string MONITOR  = std::string{args[0]};
    const auto&       PATH_RAW = args[1];
    const auto&       FIT      = args[2];

    if (PATH_RAW.empty())
        return std::unexpected("not enough args");

    const auto RTDIR = getenv("XDG_RUNTIME_DIR");

    if (!RTDIR || RTDIR[0] == '\0')
        return std::unexpected("can't send: no XDG_RUNTIME_DIR");

    const auto HIS = getenv("HYPRLAND_INSTANCE_SIGNATURE");

    if (!HIS || HIS[0] == '\0')
        return std::unexpected("can't send: no HYPRLAND_INSTANCE_SIGNATURE (not running under hyprland)");

    const auto PATH = getFullPath(PATH_RAW);

    if (!PATH)
        return std::unexpected(std::format("bad path: {}", PATH_RAW));

    auto socketPath = RTDIR + "/hypr/"s + HIS + "/"s + SOCKET_NAME;

    auto socket = Hyprwire::IClientSocket::open(socketPath);

    if (!socket)
        return std::unexpected("can't send: failed to connect to hyprpaper (is it running?)");

    g_coreImpl = makeShared<CCHyprpaperCoreImpl>(PROTOCOL_VERSION_SUPPORTED);

    socket->addImplementation(g_coreImpl);

    if (!socket->waitForHandshake())
        return std::unexpected("can't send: wire handshake failed");

    auto spec = socket->getSpec(g_coreImpl->protocol()->specName());

    if (!spec)
        return std::unexpected("can't send: hyprpaper doesn't have the spec?!");

    auto manager = makeShared<CCHyprpaperCoreManagerObject>(socket->bindProtocol(g_coreImpl->protocol(), std::min(PROTOCOL_VERSION_SUPPORTED, spec->specVer())));

    if (!manager)
        return std::unexpected("wire error: couldn't create manager");

    auto wallpaper = makeShared<CCHyprpaperWallpaperObject>(manager->sendGetWallpaperObject());

    if (!wallpaper)
        return std::unexpected("wire error: couldn't create wallpaper object");

    bool                       canExit = false;
    std::optional<std::string> err;

    wallpaper->setFailed([&canExit, &err](uint32_t code) {
        canExit = true;
        switch (code) {
            case HYPRPAPER_CORE_APPLYING_ERROR_INVALID_PATH: err = std::format("failed to set wallpaper: Invalid path", code); break;
            case HYPRPAPER_CORE_APPLYING_ERROR_INVALID_MONITOR: err = std::format("failed to set wallpaper: Invalid monitor", code); break;
            default: err = std::format("failed to set wallpaper: unknown error, code {}", code); break;
        }
    });
    wallpaper->setSuccess([&canExit]() { canExit = true; });

    wallpaper->sendPath(PATH->c_str());
    wallpaper->sendMonitorName(MONITOR.c_str());
    if (!FIT.empty())
        wallpaper->sendFitMode(fitFromString(FIT));

    wallpaper->sendApply();

    while (!canExit) {
        socket->dispatchEvents(true);
    }

    if (err)
        return std::unexpected(*err);

    return {};
}

static std::expected<void, std::string> doListActive() {
    const auto RTDIR = getenv("XDG_RUNTIME_DIR");

    if (!RTDIR || RTDIR[0] == '\0')
        return std::unexpected("can't send: no XDG_RUNTIME_DIR");

    const auto HIS = getenv("HYPRLAND_INSTANCE_SIGNATURE");

    if (!HIS || HIS[0] == '\0')
        return std::unexpected("can't send: no HYPRLAND_INSTANCE_SIGNATURE (not running under hyprland)");

    auto socketPath = RTDIR + "/hypr/"s + HIS + "/"s + SOCKET_NAME;

    auto socket = Hyprwire::IClientSocket::open(socketPath);

    if (!socket)
        return std::unexpected("can't send: failed to connect to hyprpaper (is it running?)");

    g_coreImpl = makeShared<CCHyprpaperCoreImpl>(PROTOCOL_VERSION_SUPPORTED);

    socket->addImplementation(g_coreImpl);

    if (!socket->waitForHandshake())
        return std::unexpected("can't send: wire handshake failed");

    auto spec = socket->getSpec(g_coreImpl->protocol()->specName());

    if (!spec)
        return std::unexpected("can't send: hyprpaper doesn't have the spec?!");

    if (spec->specVer() < 2)
        return std::unexpected("can't send: hyprpaper protocol version too low (hyprpaper too old)");

    auto manager = makeShared<CCHyprpaperCoreManagerObject>(socket->bindProtocol(g_coreImpl->protocol(), std::min(PROTOCOL_VERSION_SUPPORTED, spec->specVer())));

    if (!manager)
        return std::unexpected("wire error: couldn't create manager");

    auto status = makeShared<CCHyprpaperStatusObject>(manager->sendGetStatusObject());

    status->setActiveWallpaper([](const char* mon, const char* wp) { std::println("{}: {}", mon, wp); });

    socket->roundtrip();

    return {};
}

std::expected<void, std::string> Hyprpaper::makeHyprpaperRequest(const std::string_view& rq) {
    if (!rq.contains(' '))
        return std::unexpected("Invalid request");

    if (!rq.starts_with("/hyprpaper "))
        return std::unexpected("Invalid request");

    std::string_view LHS, RHS;
    auto             spacePos = rq.find(' ', 12);
    LHS                       = rq.substr(11, spacePos - 11);
    RHS                       = rq.substr(spacePos + 1);

    if (LHS == "wallpaper")
        return doWallpaper(RHS);
    else if (LHS == "listactive")
        return doListActive();
    else
        return std::unexpected("invalid hyprpaper request");

    return {};
}


================================================
FILE: hyprctl/src/hyprpaper/Hyprpaper.hpp
================================================
#pragma once

#include <expected>
#include <string>

namespace Hyprpaper {
    std::expected<void, std::string> makeHyprpaperRequest(const std::string_view& rq);
};

================================================
FILE: hyprctl/src/main.cpp
================================================
#include <re2/re2.h>

#include <cctype>
#include <netdb.h>
#include <netinet/in.h>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/un.h>
#include <pwd.h>
#include <unistd.h>
#include <algorithm>
#include <csignal>
#include <ranges>
#include <optional>
#include <charconv>

#include <iostream>
#include <string>
#include <print>
#include <fstream>
#include <vector>
#include <filesystem>
#include <cstdarg>
#include <hyprutils/string/String.hpp>
#include <hyprutils/memory/Casts.hpp>
using namespace Hyprutils::String;
using namespace Hyprutils::Memory;

#include "Strings.hpp"
#include "hyprpaper/Hyprpaper.hpp"

std::string instanceSignature;
bool        quiet = false;

struct SInstanceData {
    std::string id;
    uint64_t    time;
    uint64_t    pid;
    std::string wlSocket;
};

void log(const std::string_view str) {
    if (quiet)
        return;

    std::println("{}", str);
}

static int getUID() {
    const auto UID   = getuid();
    const auto PWUID = getpwuid(UID);
    return PWUID ? PWUID->pw_uid : UID;
}

std::string getRuntimeDir() {
    const auto XDG = getenv("XDG_RUNTIME_DIR");

    if (!XDG) {
        const std::string USERID = std::to_string(getUID());
        return "/run/user/" + USERID + "/hypr";
    }

    return std::string{XDG} + "/hypr";
}

static std::optional<uint64_t> toUInt64(const std::string_view str) {
    uint64_t value       = 0;
    const auto [ptr, ec] = std::from_chars(str.data(), str.data() + str.size(), value);
    if (ec != std::errc() || ptr != str.data() + str.size())
        return std::nullopt;
    return value;
}

static std::optional<SInstanceData> parseInstance(const std::filesystem::directory_entry& entry) {
    if (!entry.is_directory())
        return std::nullopt;

    const auto    lockPath = entry.path() / "hyprland.lock";
    std::ifstream ifs(lockPath);
    if (!ifs.is_open())
        return std::nullopt;

    SInstanceData data;
    data.id = entry.path().filename().string();

    const auto first = std::string_view{data.id}.find_first_of('_');
    const auto last  = std::string_view{data.id}.find_last_of('_');
    if (first == std::string_view::npos || last == std::string_view::npos || last <= first)
        return std::nullopt;

    auto time = toUInt64(std::string_view{data.id}.substr(first + 1, last - first - 1));
    if (!time)
        return std::nullopt;
    data.time = *time;

    std::string line;
    if (!std::getline(ifs, line))
        return std::nullopt;

    auto pid = toUInt64(std::string_view{line});
    if (!pid)
        return std::nullopt;
    data.pid = *pid;

    if (!std::getline(ifs, data.wlSocket))
        return std::nullopt;

    if (std::getline(ifs, line) && !line.empty())
        return std::nullopt; // more lines than expected

    return data;
}

std::vector<SInstanceData> instances() {
    std::vector<SInstanceData> result;

    std::error_code            ec;
    const auto                 runtimeDir = getRuntimeDir();
    if (!std::filesystem::exists(runtimeDir, ec) || ec)
        return result;

    std::filesystem::directory_iterator it(runtimeDir, std::filesystem::directory_options::skip_permission_denied, ec);
    if (ec)
        return result;

    for (const auto& el : it) {
        if (auto instance = parseInstance(el))
            result.emplace_back(std::move(*instance));
    }

    std::erase_if(result, [](const auto& el) { return kill(el.pid, 0) != 0 && errno == ESRCH; });

    std::ranges::sort(result, {}, &SInstanceData::time);

    return result;
}

static volatile bool sigintReceived = false;
void                 intHandler(int sig) {
    sigintReceived = true;
    std::println("[hyprctl] SIGINT received, closing connection");
}

int rollingRead(const int socket) {
    sigintReceived = false;
    signal(SIGINT, intHandler);

    constexpr size_t              BUFFER_SIZE = 8192;
    std::array<char, BUFFER_SIZE> buffer      = {0};
    long                          sizeWritten = 0;
    std::println("[hyprctl] reading from socket following up log:");
    while (!sigintReceived) {
        sizeWritten = read(socket, buffer.data(), BUFFER_SIZE);
        if (sizeWritten < 0 && errno != EAGAIN) {
            if (errno != EINTR)
                std::println("Couldn't read (5): {}: {}", strerror(errno), errno);
            close(socket);
            return 5;
        }

        if (sizeWritten == 0)
            break;

        if (sizeWritten > 0) {
            std::println("{}", std::string(buffer.data(), sizeWritten));
            buffer.fill('\0');
        }

        usleep(100000);
    }
    close(socket);
    return 0;
}

int request(std::string_view arg, int minArgs = 0, bool needRoll = false) {
    const auto SERVERSOCKET = socket(AF_UNIX, SOCK_STREAM, 0);

    if (SERVERSOCKET < 0) {
        log("Couldn't open a socket (1)");
        return 1;
    }

    auto t = timeval{.tv_sec = 5, .tv_usec = 0};
    if (setsockopt(SERVERSOCKET, SOL_SOCKET, SO_RCVTIMEO, &t, sizeof(struct timeval)) < 0) {
        log("Couldn't set socket timeout (2)");
        return 2;
    }

    const auto ARGS = std::count(arg.begin(), arg.end(), ' ');

    if (ARGS < minArgs) {
        log(std::format("Not enough arguments in '{}', expected at least {}", arg, minArgs));
        return -1;
    }

    if (instanceSignature.empty()) {
        log("HYPRLAND_INSTANCE_SIGNATURE was not set! (Is Hyprland running?) (3)");
        return 3;
    }

    sockaddr_un serverAddress = {0};
    serverAddress.sun_family  = AF_UNIX;

    std::string socketPath = getRuntimeDir() + "/" + instanceSignature + "/.socket.sock";

    strncpy(serverAddress.sun_path, socketPath.c_str(), sizeof(serverAddress.sun_path) - 1);

    if (connect(SERVERSOCKET, rc<sockaddr*>(&serverAddress), SUN_LEN(&serverAddress)) < 0) {
        log("Couldn't connect to " + socketPath + ". (4)");
        return 4;
    }

    auto sizeWritten = write(SERVERSOCKET, arg.data(), arg.size());

    if (sizeWritten < 0) {
        log("Couldn't write (5)");
        return 5;
    }

    if (needRoll)
        return rollingRead(SERVERSOCKET);

    std::string      reply               = "";
    constexpr size_t BUFFER_SIZE         = 8192;
    char             buffer[BUFFER_SIZE] = {0};

    // read all data until server closes the connection
    // this handles partial writes on the server side under high load
    while (true) {
        sizeWritten = read(SERVERSOCKET, buffer, BUFFER_SIZE);

        if (sizeWritten < 0) {
            if (errno == EWOULDBLOCK)
                log("Hyprland IPC didn't respond in time\n");
            log("Couldn't read (6)");
            return 6;
        }

        if (sizeWritten == 0) {
            // server closed connection, we're done
            break;
        }

        reply += std::string(buffer, sizeWritten);
    }

    close(SERVERSOCKET);

    log(reply);

    return 0;
}

int requestIPC(std::string_view filename, std::string_view arg) {
    const auto SERVERSOCKET = socket(AF_UNIX, SOCK_STREAM, 0);

    if (SERVERSOCKET < 0) {
        log("Couldn't open a socket (1)");
        return 1;
    }

    if (instanceSignature.empty()) {
        log("HYPRLAND_INSTANCE_SIGNATURE was not set! (Is Hyprland running?)");
        return 2;
    }

    sockaddr_un serverAddress = {0};
    serverAddress.sun_family  = AF_UNIX;

    std::string socketPath = getRuntimeDir() + "/" + instanceSignature + "/" + filename;

    strncpy(serverAddress.sun_path, socketPath.c_str(), sizeof(serverAddress.sun_path) - 1);

    if (connect(SERVERSOCKET, rc<sockaddr*>(&serverAddress), SUN_LEN(&serverAddress)) < 0) {
        log("Couldn't connect to " + socketPath + ". (3)");
        return 3;
    }

    arg = arg.substr(arg.find_first_of('/') + 1); // strip flags
    arg = arg.substr(arg.find_first_of(' ') + 1); // strip "hyprpaper"

    auto sizeWritten = write(SERVERSOCKET, arg.data(), arg.size());

    if (sizeWritten < 0) {
        log("Couldn't write (4)");
        return 4;
    }
    constexpr size_t BUFFER_SIZE         = 8192;
    char             buffer[BUFFER_SIZE] = {0};

    sizeWritten = read(SERVERSOCKET, buffer, BUFFER_SIZE);

    if (sizeWritten < 0) {
        log("Couldn't read (5)");
        return 5;
    }

    close(SERVERSOCKET);

    log(std::string(buffer));

    return 0;
}

int requestHyprsunset(std::string_view arg) {
    return requestIPC(".hyprsunset.sock", arg);
}

void batchRequest(std::string_view arg, bool json) {
    std::string commands(arg.substr(arg.find_first_of(' ') + 1));

    if (json) {
        RE2::GlobalReplace(&commands, ";\\s*", ";j/");
        commands.insert(0, "j/");
    }

    std::string rq = "[[BATCH]]" + commands;
    request(rq);
}

void instancesRequest(bool json) {
    std::string result = "";

    // gather instance data
    std::vector<SInstanceData> inst = instances();

    if (!json) {
        for (auto const& el : inst) {
            result += std::format("instance {}:\n\ttime: {}\n\tpid: {}\n\twl socket: {}\n\n", el.id, el.time, el.pid, el.wlSocket);
        }
    } else {
        result += '[';
        for (auto const& el : inst) {
            result += std::format(R"#(
{{
    "instance": "{}",
    "time": {},
    "pid": {},
    "wl_socket": "{}"
}},)#",
                                  el.id, el.time, el.pid, el.wlSocket);
        }

        result.pop_back();
        result += "\n]";
    }

    log(result + "\n");
}

std::vector<std::string> splitArgs(int argc, char** argv) {
    std::vector<std::string> result;

    for (auto i = 1 /* skip the executable */; i < argc; ++i)
        result.emplace_back(argv[i]);

    return result;
}

int main(int argc, char** argv) {
    bool parseArgs = true;

    if (argc < 2) {
        std::println("{}", USAGE);
        return 1;
    }

    std::string fullRequest      = "";
    std::string fullArgs         = "";
    const auto  ARGS             = splitArgs(argc, argv);
    bool        json             = false;
    bool        needRoll         = false;
    std::string overrideInstance = "";

    for (std::size_t i = 0; i < ARGS.size(); ++i) {
        if (ARGS[i] == "--") {
            // Stop parsing arguments after --
            parseArgs = false;
            continue;
        }
        if (parseArgs && (ARGS[i][0] == '-') && !(isNumber(ARGS[i], true) || isNumber(ARGS[i].substr(0, ARGS[i].length() - 1), true)) /* For stuff like -2 or -2, */) {
            // parse
            if (ARGS[i] == "-j" && !fullArgs.contains("j")) {
                fullArgs += "j";
                json = true;
            } else if (ARGS[i] == "-r" && !fullArgs.contains("r")) {
                fullArgs += "r";
            } else if (ARGS[i] == "-a" && !fullArgs.contains("a")) {
                fullArgs += "a";
            } else if ((ARGS[i] == "-c" || ARGS[i] == "--config") && !fullArgs.contains("c")) {
                fullArgs += "c";
            } else if ((ARGS[i] == "-f" || ARGS[i] == "--follow") && !fullArgs.contains("f")) {
                fullArgs += "f";
                needRoll = true;
            } else if (ARGS[i] == "--batch") {
                fullRequest = "--batch ";
            } else if (ARGS[i] == "--instance" || ARGS[i] == "-i") {
                ++i;

                if (i >= ARGS.size()) {
                    std::println("{}
Download .txt
gitextract_i75a93nh/

├── .clang-format
├── .clang-format-ignore
├── .clang-tidy
├── .gitattributes
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   └── bug.yml
│   ├── actions/
│   │   └── setup_base/
│   │       └── action.yml
│   ├── labeler.yml
│   ├── pull_request_template.md
│   └── workflows/
│       ├── ci.yaml
│       ├── clang-format-check.sh
│       ├── clang-format.yml
│       ├── close-issues.yml
│       ├── labeler.yml
│       ├── man-update.yaml
│       ├── new-pr-comment.yml
│       ├── nix-ci.yml
│       ├── nix-test.yml
│       ├── nix-update-inputs.yml
│       ├── nix.yml
│       ├── release.yaml
│       ├── security-checks.yml
│       └── translation-ai-check.yml
├── .gitignore
├── .gitmodules
├── CMakeLists.txt
├── CODE_OF_CONDUCT.md
├── LICENSE
├── Makefile
├── README.md
├── SECURITY.md
├── VERSION
├── assets/
│   └── hyprland-portals.conf
├── docs/
│   ├── Hyprland.1
│   ├── Hyprland.1.rst
│   ├── ISSUE_GUIDELINES.md
│   ├── hyprctl.1
│   └── hyprctl.1.rst
├── example/
│   ├── hyprland.conf
│   ├── hyprland.desktop.in
│   ├── hyprland.service
│   ├── launch.json
│   ├── screenShader.frag
│   └── swaybg@.service
├── flake.nix
├── hyprctl/
│   ├── CMakeLists.txt
│   ├── hw-protocols/
│   │   └── hyprpaper_core.xml
│   ├── hyprctl.bash
│   ├── hyprctl.fish
│   ├── hyprctl.usage
│   ├── hyprctl.zsh
│   └── src/
│       ├── Strings.hpp
│       ├── helpers/
│       │   └── Memory.hpp
│       ├── hyprpaper/
│       │   ├── Hyprpaper.cpp
│       │   └── Hyprpaper.hpp
│       └── main.cpp
├── hyprland.pc.in
├── hyprpm/
│   ├── CMakeLists.txt
│   ├── hyprpm.bash
│   ├── hyprpm.fish
│   ├── hyprpm.usage
│   ├── hyprpm.zsh
│   └── src/
│       ├── core/
│       │   ├── DataState.cpp
│       │   ├── DataState.hpp
│       │   ├── HyprlandSocket.cpp
│       │   ├── HyprlandSocket.hpp
│       │   ├── Manifest.cpp
│       │   ├── Manifest.hpp
│       │   ├── Plugin.cpp
│       │   ├── Plugin.hpp
│       │   ├── PluginManager.cpp
│       │   └── PluginManager.hpp
│       ├── helpers/
│       │   ├── Colors.hpp
│       │   ├── Die.hpp
│       │   ├── StringUtils.hpp
│       │   ├── Sys.cpp
│       │   └── Sys.hpp
│       ├── main.cpp
│       └── progress/
│           ├── CProgressBar.cpp
│           └── CProgressBar.hpp
├── hyprtester/
│   ├── CMakeLists.txt
│   ├── clients/
│   │   ├── child-window.cpp
│   │   ├── pointer-scroll.cpp
│   │   ├── pointer-warp.cpp
│   │   └── shortcut-inhibitor.cpp
│   ├── plugin/
│   │   ├── Makefile
│   │   ├── build.sh
│   │   └── src/
│   │       ├── globals.hpp
│   │       └── main.cpp
│   ├── protocols/
│   │   └── .gitignore
│   ├── src/
│   │   ├── Log.hpp
│   │   ├── hyprctlCompat.cpp
│   │   ├── hyprctlCompat.hpp
│   │   ├── main.cpp
│   │   ├── shared.hpp
│   │   └── tests/
│   │       ├── clients/
│   │       │   ├── .gitignore
│   │       │   ├── child-window.cpp
│   │       │   ├── pointer-scroll.cpp
│   │       │   ├── pointer-warp.cpp
│   │       │   ├── shortcut-inhibitor.cpp
│   │       │   └── tests.hpp
│   │       ├── main/
│   │       │   ├── animations.cpp
│   │       │   ├── colors.cpp
│   │       │   ├── dwindle.cpp
│   │       │   ├── exec.cpp
│   │       │   ├── gestures.cpp
│   │       │   ├── groups.cpp
│   │       │   ├── hyprctl.cpp
│   │       │   ├── keybinds.cpp
│   │       │   ├── layer.cpp
│   │       │   ├── layout.cpp
│   │       │   ├── master.cpp
│   │       │   ├── misc.cpp
│   │       │   ├── persistent.cpp
│   │       │   ├── scroll.cpp
│   │       │   ├── snap.cpp
│   │       │   ├── solitary.cpp
│   │       │   ├── tags.cpp
│   │       │   ├── tests.hpp
│   │       │   ├── window.cpp
│   │       │   └── workspaces.cpp
│   │       ├── plugin/
│   │       │   ├── plugin.cpp
│   │       │   └── plugin.hpp
│   │       ├── shared.cpp
│   │       └── shared.hpp
│   └── test.conf
├── nix/
│   ├── default.nix
│   ├── formatter.nix
│   ├── hm-module.nix
│   ├── lib.nix
│   ├── module.nix
│   ├── overlays.nix
│   ├── tests/
│   │   └── default.nix
│   └── update-inputs.sh
├── protocols/
│   ├── input-method-unstable-v2.xml
│   ├── kde-server-decoration.xml
│   ├── virtual-keyboard-unstable-v1.xml
│   ├── wayland-drm.xml
│   ├── wlr-data-control-unstable-v1.xml
│   ├── wlr-foreign-toplevel-management-unstable-v1.xml
│   ├── wlr-gamma-control-unstable-v1.xml
│   ├── wlr-layer-shell-unstable-v1.xml
│   ├── wlr-output-management-unstable-v1.xml
│   ├── wlr-output-power-management-unstable-v1.xml
│   ├── wlr-screencopy-unstable-v1.xml
│   └── wlr-virtual-pointer-unstable-v1.xml
├── scripts/
│   ├── generateShaderIncludes.sh
│   ├── hyprlandStaticAsan.diff
│   └── waylandStatic.diff
├── src/
│   ├── Compositor.cpp
│   ├── Compositor.hpp
│   ├── SharedDefs.hpp
│   ├── config/
│   │   ├── ConfigDataValues.hpp
│   │   ├── ConfigDescriptions.hpp
│   │   ├── ConfigManager.cpp
│   │   ├── ConfigManager.hpp
│   │   ├── ConfigValue.cpp
│   │   ├── ConfigValue.hpp
│   │   ├── ConfigWatcher.cpp
│   │   ├── ConfigWatcher.hpp
│   │   └── defaultConfig.hpp
│   ├── debug/
│   │   ├── HyprCtl.cpp
│   │   ├── HyprCtl.hpp
│   │   ├── HyprDebugOverlay.cpp
│   │   ├── HyprDebugOverlay.hpp
│   │   ├── HyprNotificationOverlay.cpp
│   │   ├── HyprNotificationOverlay.hpp
│   │   ├── TracyDefines.hpp
│   │   ├── crash/
│   │   │   ├── CrashReporter.cpp
│   │   │   ├── CrashReporter.hpp
│   │   │   ├── SignalSafe.cpp
│   │   │   └── SignalSafe.hpp
│   │   └── log/
│   │       ├── Logger.cpp
│   │       ├── Logger.hpp
│   │       └── RollingLogFollow.hpp
│   ├── defines.hpp
│   ├── desktop/
│   │   ├── DesktopTypes.hpp
│   │   ├── Workspace.cpp
│   │   ├── Workspace.hpp
│   │   ├── history/
│   │   │   ├── WindowHistoryTracker.cpp
│   │   │   ├── WindowHistoryTracker.hpp
│   │   │   ├── WorkspaceHistoryTracker.cpp
│   │   │   └── WorkspaceHistoryTracker.hpp
│   │   ├── reserved/
│   │   │   ├── ReservedArea.cpp
│   │   │   └── ReservedArea.hpp
│   │   ├── rule/
│   │   │   ├── Engine.cpp
│   │   │   ├── Engine.hpp
│   │   │   ├── Rule.cpp
│   │   │   ├── Rule.hpp
│   │   │   ├── effect/
│   │   │   │   └── EffectContainer.hpp
│   │   │   ├── layerRule/
│   │   │   │   ├── LayerRule.cpp
│   │   │   │   ├── LayerRule.hpp
│   │   │   │   ├── LayerRuleApplicator.cpp
│   │   │   │   ├── LayerRuleApplicator.hpp
│   │   │   │   ├── LayerRuleEffectContainer.cpp
│   │   │   │   └── LayerRuleEffectContainer.hpp
│   │   │   ├── matchEngine/
│   │   │   │   ├── BoolMatchEngine.cpp
│   │   │   │   ├── BoolMatchEngine.hpp
│   │   │   │   ├── IntMatchEngine.cpp
│   │   │   │   ├── IntMatchEngine.hpp
│   │   │   │   ├── MatchEngine.cpp
│   │   │   │   ├── MatchEngine.hpp
│   │   │   │   ├── RegexMatchEngine.cpp
│   │   │   │   ├── RegexMatchEngine.hpp
│   │   │   │   ├── TagMatchEngine.cpp
│   │   │   │   ├── TagMatchEngine.hpp
│   │   │   │   ├── WorkspaceMatchEngine.cpp
│   │   │   │   └── WorkspaceMatchEngine.hpp
│   │   │   ├── utils/
│   │   │   │   └── SetUtils.hpp
│   │   │   └── windowRule/
│   │   │       ├── WindowRule.cpp
│   │   │       ├── WindowRule.hpp
│   │   │       ├── WindowRuleApplicator.cpp
│   │   │       ├── WindowRuleApplicator.hpp
│   │   │       ├── WindowRuleEffectContainer.cpp
│   │   │       └── WindowRuleEffectContainer.hpp
│   │   ├── state/
│   │   │   ├── FocusState.cpp
│   │   │   └── FocusState.hpp
│   │   ├── types/
│   │   │   └── OverridableVar.hpp
│   │   └── view/
│   │       ├── GlobalViewMethods.cpp
│   │       ├── GlobalViewMethods.hpp
│   │       ├── Group.cpp
│   │       ├── Group.hpp
│   │       ├── LayerSurface.cpp
│   │       ├── LayerSurface.hpp
│   │       ├── Popup.cpp
│   │       ├── Popup.hpp
│   │       ├── SessionLock.cpp
│   │       ├── SessionLock.hpp
│   │       ├── Subsurface.cpp
│   │       ├── Subsurface.hpp
│   │       ├── View.cpp
│   │       ├── View.hpp
│   │       ├── WLSurface.cpp
│   │       ├── WLSurface.hpp
│   │       ├── Window.cpp
│   │       └── Window.hpp
│   ├── devices/
│   │   ├── IHID.cpp
│   │   ├── IHID.hpp
│   │   ├── IKeyboard.cpp
│   │   ├── IKeyboard.hpp
│   │   ├── IPointer.cpp
│   │   ├── IPointer.hpp
│   │   ├── ITouch.cpp
│   │   ├── ITouch.hpp
│   │   ├── Keyboard.cpp
│   │   ├── Keyboard.hpp
│   │   ├── Mouse.cpp
│   │   ├── Mouse.hpp
│   │   ├── Tablet.cpp
│   │   ├── Tablet.hpp
│   │   ├── TouchDevice.cpp
│   │   ├── TouchDevice.hpp
│   │   ├── VirtualKeyboard.cpp
│   │   ├── VirtualKeyboard.hpp
│   │   ├── VirtualPointer.cpp
│   │   └── VirtualPointer.hpp
│   ├── event/
│   │   ├── EventBus.cpp
│   │   └── EventBus.hpp
│   ├── helpers/
│   │   ├── AnimatedVariable.hpp
│   │   ├── AsyncDialogBox.cpp
│   │   ├── AsyncDialogBox.hpp
│   │   ├── ByteOperations.hpp
│   │   ├── CMType.cpp
│   │   ├── CMType.hpp
│   │   ├── Color.cpp
│   │   ├── Color.hpp
│   │   ├── CursorShapes.hpp
│   │   ├── DamageRing.cpp
│   │   ├── DamageRing.hpp
│   │   ├── Drm.cpp
│   │   ├── Drm.hpp
│   │   ├── Format.cpp
│   │   ├── Format.hpp
│   │   ├── MainLoopExecutor.cpp
│   │   ├── MainLoopExecutor.hpp
│   │   ├── MiscFunctions.cpp
│   │   ├── MiscFunctions.hpp
│   │   ├── Monitor.cpp
│   │   ├── Monitor.hpp
│   │   ├── MonitorFrameScheduler.cpp
│   │   ├── MonitorFrameScheduler.hpp
│   │   ├── MonitorZoomController.cpp
│   │   ├── MonitorZoomController.hpp
│   │   ├── SdDaemon.cpp
│   │   ├── SdDaemon.hpp
│   │   ├── Splashes.hpp
│   │   ├── TagKeeper.cpp
│   │   ├── TagKeeper.hpp
│   │   ├── TransferFunction.cpp
│   │   ├── TransferFunction.hpp
│   │   ├── WLClasses.cpp
│   │   ├── WLClasses.hpp
│   │   ├── cm/
│   │   │   ├── ColorManagement.cpp
│   │   │   ├── ColorManagement.hpp
│   │   │   └── ICC.cpp
│   │   ├── defer/
│   │   │   └── Promise.hpp
│   │   ├── env/
│   │   │   ├── Env.cpp
│   │   │   └── Env.hpp
│   │   ├── fs/
│   │   │   ├── FsUtils.cpp
│   │   │   └── FsUtils.hpp
│   │   ├── math/
│   │   │   ├── Direction.cpp
│   │   │   ├── Direction.hpp
│   │   │   ├── Expression.cpp
│   │   │   ├── Expression.hpp
│   │   │   ├── Math.cpp
│   │   │   └── Math.hpp
│   │   ├── memory/
│   │   │   └── Memory.hpp
│   │   ├── signal/
│   │   │   └── Signal.hpp
│   │   ├── sync/
│   │   │   ├── SyncReleaser.cpp
│   │   │   ├── SyncReleaser.hpp
│   │   │   ├── SyncTimeline.cpp
│   │   │   └── SyncTimeline.hpp
│   │   ├── time/
│   │   │   ├── Time.cpp
│   │   │   ├── Time.hpp
│   │   │   ├── Timer.cpp
│   │   │   └── Timer.hpp
│   │   └── varlist/
│   │       └── VarList.hpp
│   ├── hyprerror/
│   │   ├── HyprError.cpp
│   │   └── HyprError.hpp
│   ├── i18n/
│   │   ├── Engine.cpp
│   │   └── Engine.hpp
│   ├── includes.hpp
│   ├── init/
│   │   ├── initHelpers.cpp
│   │   └── initHelpers.hpp
│   ├── layout/
│   │   ├── LayoutManager.cpp
│   │   ├── LayoutManager.hpp
│   │   ├── algorithm/
│   │   │   ├── Algorithm.cpp
│   │   │   ├── Algorithm.hpp
│   │   │   ├── FloatingAlgorithm.cpp
│   │   │   ├── FloatingAlgorithm.hpp
│   │   │   ├── ModeAlgorithm.cpp
│   │   │   ├── ModeAlgorithm.hpp
│   │   │   ├── TiledAlgorithm.hpp
│   │   │   ├── floating/
│   │   │   │   └── default/
│   │   │   │       ├── DefaultFloatingAlgorithm.cpp
│   │   │   │       └── DefaultFloatingAlgorithm.hpp
│   │   │   └── tiled/
│   │   │       ├── dwindle/
│   │   │       │   ├── DwindleAlgorithm.cpp
│   │   │       │   └── DwindleAlgorithm.hpp
│   │   │       ├── master/
│   │   │       │   ├── MasterAlgorithm.cpp
│   │   │       │   └── MasterAlgorithm.hpp
│   │   │       ├── monocle/
│   │   │       │   ├── MonocleAlgorithm.cpp
│   │   │       │   └── MonocleAlgorithm.hpp
│   │   │       └── scrolling/
│   │   │           ├── ScrollTapeController.cpp
│   │   │           ├── ScrollTapeController.hpp
│   │   │           ├── ScrollingAlgorithm.cpp
│   │   │           └── ScrollingAlgorithm.hpp
│   │   ├── space/
│   │   │   ├── Space.cpp
│   │   │   └── Space.hpp
│   │   ├── supplementary/
│   │   │   ├── DragController.cpp
│   │   │   ├── DragController.hpp
│   │   │   ├── WorkspaceAlgoMatcher.cpp
│   │   │   └── WorkspaceAlgoMatcher.hpp
│   │   └── target/
│   │       ├── Target.cpp
│   │       ├── Target.hpp
│   │       ├── WindowGroupTarget.cpp
│   │       ├── WindowGroupTarget.hpp
│   │       ├── WindowTarget.cpp
│   │       └── WindowTarget.hpp
│   ├── macros.hpp
│   ├── main.cpp
│   ├── managers/
│   │   ├── ANRManager.cpp
│   │   ├── ANRManager.hpp
│   │   ├── CursorManager.cpp
│   │   ├── CursorManager.hpp
│   │   ├── DonationNagManager.cpp
│   │   ├── DonationNagManager.hpp
│   │   ├── EventManager.cpp
│   │   ├── EventManager.hpp
│   │   ├── KeybindManager.cpp
│   │   ├── KeybindManager.hpp
│   │   ├── PointerManager.cpp
│   │   ├── PointerManager.hpp
│   │   ├── ProtocolManager.cpp
│   │   ├── ProtocolManager.hpp
│   │   ├── SeatManager.cpp
│   │   ├── SeatManager.hpp
│   │   ├── SessionLockManager.cpp
│   │   ├── SessionLockManager.hpp
│   │   ├── TokenManager.cpp
│   │   ├── TokenManager.hpp
│   │   ├── VersionKeeperManager.cpp
│   │   ├── VersionKeeperManager.hpp
│   │   ├── WelcomeManager.cpp
│   │   ├── WelcomeManager.hpp
│   │   ├── XCursorManager.cpp
│   │   ├── XCursorManager.hpp
│   │   ├── XWaylandManager.cpp
│   │   ├── XWaylandManager.hpp
│   │   ├── animation/
│   │   │   ├── AnimationManager.cpp
│   │   │   ├── AnimationManager.hpp
│   │   │   ├── DesktopAnimationManager.cpp
│   │   │   └── DesktopAnimationManager.hpp
│   │   ├── cursor/
│   │   │   ├── CursorShapeOverrideController.cpp
│   │   │   └── CursorShapeOverrideController.hpp
│   │   ├── eventLoop/
│   │   │   ├── EventLoopManager.cpp
│   │   │   ├── EventLoopManager.hpp
│   │   │   ├── EventLoopTimer.cpp
│   │   │   └── EventLoopTimer.hpp
│   │   ├── input/
│   │   │   ├── IdleInhibitor.cpp
│   │   │   ├── InputManager.cpp
│   │   │   ├── InputManager.hpp
│   │   │   ├── InputMethodPopup.cpp
│   │   │   ├── InputMethodPopup.hpp
│   │   │   ├── InputMethodRelay.cpp
│   │   │   ├── InputMethodRelay.hpp
│   │   │   ├── Tablets.cpp
│   │   │   ├── TextInput.cpp
│   │   │   ├── TextInput.hpp
│   │   │   ├── Touch.cpp
│   │   │   ├── UnifiedWorkspaceSwipeGesture.cpp
│   │   │   ├── UnifiedWorkspaceSwipeGesture.hpp
│   │   │   └── trackpad/
│   │   │       ├── GestureTypes.hpp
│   │   │       ├── TrackpadGestures.cpp
│   │   │       ├── TrackpadGestures.hpp
│   │   │       └── gestures/
│   │   │           ├── CloseGesture.cpp
│   │   │           ├── CloseGesture.hpp
│   │   │           ├── CursorZoomGesture.cpp
│   │   │           ├── CursorZoomGesture.hpp
│   │   │           ├── DispatcherGesture.cpp
│   │   │           ├── DispatcherGesture.hpp
│   │   │           ├── FloatGesture.cpp
│   │   │           ├── FloatGesture.hpp
│   │   │           ├── FullscreenGesture.cpp
│   │   │           ├── FullscreenGesture.hpp
│   │   │           ├── ITrackpadGesture.cpp
│   │   │           ├── ITrackpadGesture.hpp
│   │   │           ├── MoveGesture.cpp
│   │   │           ├── MoveGesture.hpp
│   │   │           ├── ResizeGesture.cpp
│   │   │           ├── ResizeGesture.hpp
│   │   │           ├── SpecialWorkspaceGesture.cpp
│   │   │           ├── SpecialWorkspaceGesture.hpp
│   │   │           ├── WorkspaceSwipeGesture.cpp
│   │   │           └── WorkspaceSwipeGesture.hpp
│   │   ├── permissions/
│   │   │   ├── DynamicPermissionManager.cpp
│   │   │   └── DynamicPermissionManager.hpp
│   │   └── screenshare/
│   │       ├── CursorshareSession.cpp
│   │       ├── ScreenshareFrame.cpp
│   │       ├── ScreenshareManager.cpp
│   │       ├── ScreenshareManager.hpp
│   │       └── ScreenshareSession.cpp
│   ├── pch/
│   │   └── pch.hpp
│   ├── plugins/
│   │   ├── HookSystem.cpp
│   │   ├── HookSystem.hpp
│   │   ├── PluginAPI.cpp
│   │   ├── PluginAPI.hpp
│   │   ├── PluginSystem.cpp
│   │   └── PluginSystem.hpp
│   ├── protocols/
│   │   ├── AlphaModifier.cpp
│   │   ├── AlphaModifier.hpp
│   │   ├── CTMControl.cpp
│   │   ├── CTMControl.hpp
│   │   ├── ColorManagement.cpp
│   │   ├── ColorManagement.hpp
│   │   ├── CommitTiming.cpp
│   │   ├── CommitTiming.hpp
│   │   ├── ContentType.cpp
│   │   ├── ContentType.hpp
│   │   ├── CursorShape.cpp
│   │   ├── CursorShape.hpp
│   │   ├── DRMLease.cpp
│   │   ├── DRMLease.hpp
│   │   ├── DRMSyncobj.cpp
│   │   ├── DRMSyncobj.hpp
│   │   ├── DataDeviceWlr.cpp
│   │   ├── DataDeviceWlr.hpp
│   │   ├── ExtDataDevice.cpp
│   │   ├── ExtDataDevice.hpp
│   │   ├── ExtWorkspace.cpp
│   │   ├── ExtWorkspace.hpp
│   │   ├── Fifo.cpp
│   │   ├── Fifo.hpp
│   │   ├── FocusGrab.cpp
│   │   ├── FocusGrab.hpp
│   │   ├── ForeignToplevel.cpp
│   │   ├── ForeignToplevel.hpp
│   │   ├── ForeignToplevelWlr.cpp
│   │   ├── ForeignToplevelWlr.hpp
│   │   ├── FractionalScale.cpp
│   │   ├── FractionalScale.hpp
│   │   ├── GammaControl.cpp
│   │   ├── GammaControl.hpp
│   │   ├── GlobalShortcuts.cpp
│   │   ├── GlobalShortcuts.hpp
│   │   ├── HyprlandSurface.cpp
│   │   ├── HyprlandSurface.hpp
│   │   ├── IdleInhibit.cpp
│   │   ├── IdleInhibit.hpp
│   │   ├── IdleNotify.cpp
│   │   ├── IdleNotify.hpp
│   │   ├── ImageCaptureSource.cpp
│   │   ├── ImageCaptureSource.hpp
│   │   ├── ImageCopyCapture.cpp
│   │   ├── ImageCopyCapture.hpp
│   │   ├── InputMethodV2.cpp
│   │   ├── InputMethodV2.hpp
│   │   ├── LayerShell.cpp
│   │   ├── LayerShell.hpp
│   │   ├── LinuxDMABUF.cpp
│   │   ├── LinuxDMABUF.hpp
│   │   ├── LockNotify.cpp
│   │   ├── LockNotify.hpp
│   │   ├── MesaDRM.cpp
│   │   ├── MesaDRM.hpp
│   │   ├── OutputManagement.cpp
│   │   ├── OutputManagement.hpp
│   │   ├── OutputPower.cpp
│   │   ├── OutputPower.hpp
│   │   ├── PointerConstraints.cpp
│   │   ├── PointerConstraints.hpp
│   │   ├── PointerGestures.cpp
│   │   ├── PointerGestures.hpp
│   │   ├── PointerWarp.cpp
│   │   ├── PointerWarp.hpp
│   │   ├── PresentationTime.cpp
│   │   ├── PresentationTime.hpp
│   │   ├── PrimarySelection.cpp
│   │   ├── PrimarySelection.hpp
│   │   ├── RelativePointer.cpp
│   │   ├── RelativePointer.hpp
│   │   ├── Screencopy.cpp
│   │   ├── Screencopy.hpp
│   │   ├── SecurityContext.cpp
│   │   ├── SecurityContext.hpp
│   │   ├── ServerDecorationKDE.cpp
│   │   ├── ServerDecorationKDE.hpp
│   │   ├── SessionLock.cpp
│   │   ├── SessionLock.hpp
│   │   ├── ShortcutsInhibit.cpp
│   │   ├── ShortcutsInhibit.hpp
│   │   ├── SinglePixel.cpp
│   │   ├── SinglePixel.hpp
│   │   ├── Tablet.cpp
│   │   ├── Tablet.hpp
│   │   ├── TearingControl.cpp
│   │   ├── TearingControl.hpp
│   │   ├── TextInputV1.cpp
│   │   ├── TextInputV1.hpp
│   │   ├── TextInputV3.cpp
│   │   ├── TextInputV3.hpp
│   │   ├── ToplevelExport.cpp
│   │   ├── ToplevelExport.hpp
│   │   ├── ToplevelMapping.cpp
│   │   ├── ToplevelMapping.hpp
│   │   ├── Viewporter.cpp
│   │   ├── Viewporter.hpp
│   │   ├── VirtualKeyboard.cpp
│   │   ├── VirtualKeyboard.hpp
│   │   ├── VirtualPointer.cpp
│   │   ├── VirtualPointer.hpp
│   │   ├── WaylandProtocol.cpp
│   │   ├── WaylandProtocol.hpp
│   │   ├── XDGActivation.cpp
│   │   ├── XDGActivation.hpp
│   │   ├── XDGBell.cpp
│   │   ├── XDGBell.hpp
│   │   ├── XDGDecoration.cpp
│   │   ├── XDGDecoration.hpp
│   │   ├── XDGDialog.cpp
│   │   ├── XDGDialog.hpp
│   │   ├── XDGOutput.cpp
│   │   ├── XDGOutput.hpp
│   │   ├── XDGShell.cpp
│   │   ├── XDGShell.hpp
│   │   ├── XDGTag.cpp
│   │   ├── XDGTag.hpp
│   │   ├── XWaylandShell.cpp
│   │   ├── XWaylandShell.hpp
│   │   ├── core/
│   │   │   ├── Compositor.cpp
│   │   │   ├── Compositor.hpp
│   │   │   ├── DataDevice.cpp
│   │   │   ├── DataDevice.hpp
│   │   │   ├── Output.cpp
│   │   │   ├── Output.hpp
│   │   │   ├── Seat.cpp
│   │   │   ├── Seat.hpp
│   │   │   ├── Shm.cpp
│   │   │   ├── Shm.hpp
│   │   │   ├── Subcompositor.cpp
│   │   │   └── Subcompositor.hpp
│   │   └── types/
│   │       ├── Buffer.cpp
│   │       ├── Buffer.hpp
│   │       ├── ContentType.cpp
│   │       ├── ContentType.hpp
│   │       ├── DMABuffer.cpp
│   │       ├── DMABuffer.hpp
│   │       ├── DataDevice.cpp
│   │       ├── DataDevice.hpp
│   │       ├── SurfaceRole.hpp
│   │       ├── SurfaceState.cpp
│   │       ├── SurfaceState.hpp
│   │       ├── SurfaceStateQueue.cpp
│   │       ├── SurfaceStateQueue.hpp
│   │       ├── WLBuffer.cpp
│   │       └── WLBuffer.hpp
│   ├── render/
│   │   ├── AsyncResourceGatherer.hpp
│   │   ├── Framebuffer.cpp
│   │   ├── Framebuffer.hpp
│   │   ├── GLRenderer.cpp
│   │   ├── GLRenderer.hpp
│   │   ├── OpenGL.cpp
│   │   ├── OpenGL.hpp
│   │   ├── Renderbuffer.cpp
│   │   ├── Renderbuffer.hpp
│   │   ├── Renderer.cpp
│   │   ├── Renderer.hpp
│   │   ├── Shader.cpp
│   │   ├── Shader.hpp
│   │   ├── ShaderLoader.cpp
│   │   ├── ShaderLoader.hpp
│   │   ├── Texture.cpp
│   │   ├── Texture.hpp
│   │   ├── Transformer.cpp
│   │   ├── Transformer.hpp
│   │   ├── decorations/
│   │   │   ├── CHyprBorderDecoration.cpp
│   │   │   ├── CHyprBorderDecoration.hpp
│   │   │   ├── CHyprDropShadowDecoration.cpp
│   │   │   ├── CHyprDropShadowDecoration.hpp
│   │   │   ├── CHyprGroupBarDecoration.cpp
│   │   │   ├── CHyprGroupBarDecoration.hpp
│   │   │   ├── DecorationPositioner.cpp
│   │   │   ├── DecorationPositioner.hpp
│   │   │   ├── IHyprWindowDecoration.cpp
│   │   │   └── IHyprWindowDecoration.hpp
│   │   ├── gl/
│   │   │   ├── GLFramebuffer.cpp
│   │   │   ├── GLFramebuffer.hpp
│   │   │   ├── GLRenderbuffer.cpp
│   │   │   ├── GLRenderbuffer.hpp
│   │   │   ├── GLTexture.cpp
│   │   │   └── GLTexture.hpp
│   │   ├── pass/
│   │   │   ├── BorderPassElement.cpp
│   │   │   ├── BorderPassElement.hpp
│   │   │   ├── ClearPassElement.cpp
│   │   │   ├── ClearPassElement.hpp
│   │   │   ├── FramebufferElement.cpp
│   │   │   ├── FramebufferElement.hpp
│   │   │   ├── Pass.cpp
│   │   │   ├── Pass.hpp
│   │   │   ├── PassElement.cpp
│   │   │   ├── PassElement.hpp
│   │   │   ├── PreBlurElement.cpp
│   │   │   ├── PreBlurElement.hpp
│   │   │   ├── RectPassElement.cpp
│   │   │   ├── RectPassElement.hpp
│   │   │   ├── RendererHintsPassElement.cpp
│   │   │   ├── RendererHintsPassElement.hpp
│   │   │   ├── ShadowPassElement.cpp
│   │   │   ├── ShadowPassElement.hpp
│   │   │   ├── SurfacePassElement.cpp
│   │   │   ├── SurfacePassElement.hpp
│   │   │   ├── TexPassElement.cpp
│   │   │   ├── TexPassElement.hpp
│   │   │   ├── TextureMatteElement.cpp
│   │   │   └── TextureMatteElement.hpp
│   │   └── shaders/
│   │       └── glsl/
│   │           ├── CM.glsl
│   │           ├── blur1.frag
│   │           ├── blur1.glsl
│   │           ├── blur2.frag
│   │           ├── blur2.glsl
│   │           ├── blurFinish.glsl
│   │           ├── blurfinish.frag
│   │           ├── blurprepare.frag
│   │           ├── blurprepare.glsl
│   │           ├── border.frag
│   │           ├── border.glsl
│   │           ├── cm_helpers.glsl
│   │           ├── constants.h
│   │           ├── defines.h
│   │           ├── ext.frag
│   │           ├── gain.glsl
│   │           ├── glitch.frag
│   │           ├── passthru.frag
│   │           ├── quad.frag
│   │           ├── rgbamatte.frag
│   │           ├── rounding.glsl
│   │           ├── shadow.frag
│   │           ├── shadow.glsl
│   │           ├── surface.frag
│   │           ├── tex300.vert
│   │           ├── tex320.vert
│   │           └── tonemap.glsl
│   ├── version.h.in
│   └── xwayland/
│       ├── Dnd.cpp
│       ├── Dnd.hpp
│       ├── Server.cpp
│       ├── Server.hpp
│       ├── XDataSource.cpp
│       ├── XDataSource.hpp
│       ├── XSurface.cpp
│       ├── XSurface.hpp
│       ├── XWM.cpp
│       ├── XWM.hpp
│       ├── XWayland.cpp
│       └── XWayland.hpp
├── start/
│   ├── CMakeLists.txt
│   └── src/
│       ├── core/
│       │   ├── Instance.cpp
│       │   ├── Instance.hpp
│       │   └── State.hpp
│       ├── helpers/
│       │   ├── Logger.hpp
│       │   ├── Memory.hpp
│       │   ├── Nix.cpp
│       │   └── Nix.hpp
│       └── main.cpp
├── systemd/
│   └── hyprland-uwsm.desktop
└── tests/
    └── desktop/
        └── Reserved.cpp
Download .txt
Showing preview only (204K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2382 symbols across 457 files)

FILE: hyprctl/src/hyprpaper/Hyprpaper.cpp
  function hyprpaperCoreWallpaperFitMode (line 22) | static hyprpaperCoreWallpaperFitMode fitFromString(const std::string_vie...
  function resolvePath (line 32) | static std::expected<std::string, std::string> resolvePath(const std::st...
  function getFullPath (line 42) | static std::expected<std::string, std::string> getFullPath(const std::st...
  function doWallpaper (line 57) | static std::expected<void, std::string> doWallpaper(const std::string_vi...
  function doListActive (line 141) | static std::expected<void, std::string> doListActive() {

FILE: hyprctl/src/hyprpaper/Hyprpaper.hpp
  type Hyprpaper (line 6) | namespace Hyprpaper {

FILE: hyprctl/src/main.cpp
  type SInstanceData (line 39) | struct SInstanceData {
  function log (line 46) | void log(const std::string_view str) {
  function getUID (line 53) | static int getUID() {
  function getRuntimeDir (line 59) | std::string getRuntimeDir() {
  function toUInt64 (line 70) | static std::optional<uint64_t> toUInt64(const std::string_view str) {
  function parseInstance (line 78) | static std::optional<SInstanceData> parseInstance(const std::filesystem:...
  function instances (line 118) | std::vector<SInstanceData> instances() {
  function intHandler (line 143) | void                 intHandler(int sig) {
  function rollingRead (line 148) | int rollingRead(const int socket) {
  function request (line 179) | int request(std::string_view arg, int minArgs = 0, bool needRoll = false) {
  function requestIPC (line 258) | int requestIPC(std::string_view filename, std::string_view arg) {
  function requestHyprsunset (line 309) | int requestHyprsunset(std::string_view arg) {
  function batchRequest (line 313) | void batchRequest(std::string_view arg, bool json) {
  function instancesRequest (line 325) | void instancesRequest(bool json) {
  function splitArgs (line 355) | std::vector<std::string> splitArgs(int argc, char** argv) {
  function main (line 364) | int main(int argc, char** argv) {

FILE: hyprpm/src/core/DataState.cpp
  function getTempRoot (line 12) | static std::string getTempRoot() {
  function writeState (line 28) | static bool writeState(const std::string& str, const std::string& to) {
  function SGlobalState (line 199) | SGlobalState DataState::getGlobalState() {

FILE: hyprpm/src/core/DataState.hpp
  type SGlobalState (line 7) | struct SGlobalState {
  type DataState (line 12) | namespace DataState {

FILE: hyprpm/src/core/HyprlandSocket.cpp
  function getUID (line 13) | static int getUID() {
  function getRuntimeDir (line 19) | static std::string getRuntimeDir() {

FILE: hyprpm/src/core/HyprlandSocket.hpp
  type NHyprlandSocket (line 5) | namespace NHyprlandSocket {

FILE: hyprpm/src/core/Manifest.cpp
  function validManifestName (line 7) | static bool validManifestName(const std::string_view& n) {

FILE: hyprpm/src/core/Manifest.hpp
  type eManifestType (line 6) | enum eManifestType {
  class CManifest (line 11) | class CManifest {
    type SManifestPlugin (line 15) | struct SManifestPlugin {

FILE: hyprpm/src/core/Plugin.cpp
  function SPluginRepoIdentifier (line 3) | SPluginRepoIdentifier SPluginRepoIdentifier::fromUrl(const std::string& ...
  function SPluginRepoIdentifier (line 7) | SPluginRepoIdentifier SPluginRepoIdentifier::fromName(const std::string&...
  function SPluginRepoIdentifier (line 11) | SPluginRepoIdentifier SPluginRepoIdentifier::fromAuthorName(const std::s...
  function SPluginRepoIdentifier (line 15) | SPluginRepoIdentifier SPluginRepoIdentifier::fromString(const std::strin...

FILE: hyprpm/src/core/Plugin.hpp
  type SPlugin (line 6) | struct SPlugin {
  type SPluginRepository (line 13) | struct SPluginRepository {
  type ePluginRepoIdentifierType (line 22) | enum ePluginRepoIdentifierType {
  type SPluginRepoIdentifier (line 28) | struct SPluginRepoIdentifier {

FILE: hyprpm/src/core/PluginManager.cpp
  function execAndGet (line 35) | static std::string execAndGet(std::string cmd) {
  function getTempRoot (line 46) | static std::string getTempRoot() {
  function SHyprlandVersion (line 65) | SHyprlandVersion CPluginManager::getHyprlandVersion(bool running) {
  function eHeadersErrors (line 402) | eHeadersErrors CPluginManager::headersValid() {
  function ePluginLoadStateReturn (line 855) | ePluginLoadStateReturn CPluginManager::ensurePluginsLoadState(bool force...
  function getNixDevelopFromPath (line 1043) | static std::expected<std::string, std::string> getNixDevelopFromPath(con...
  function getNixDevelopFromProfile (line 1078) | static std::expected<std::string, std::string> getNixDevelopFromProfile() {

FILE: hyprpm/src/core/PluginManager.hpp
  type eHeadersErrors (line 10) | enum eHeadersErrors {
  type eNotifyIcons (line 20) | enum eNotifyIcons {
  type ePluginLoadStateReturn (line 30) | enum ePluginLoadStateReturn {
  type SHyprlandVersion (line 38) | struct SHyprlandVersion {
  class CPluginManager (line 47) | class CPluginManager {

FILE: hyprpm/src/helpers/Colors.hpp
  type Colors (line 3) | namespace Colors {

FILE: hyprpm/src/helpers/Die.hpp
  type Debug (line 7) | namespace Debug {
    function die (line 9) | void die(std::format_string<Args...> fmt, Args&&... args) {

FILE: hyprpm/src/helpers/StringUtils.hpp
  function statusString (line 8) | std::string statusString(const std::string_view emoji, const std::string...
  function successString (line 15) | std::string successString(const std::string_view fmt, Args&&... args) {
  function failureString (line 20) | std::string failureString(const std::string_view fmt, Args&&... args) {
  function verboseString (line 25) | std::string verboseString(const std::string_view fmt, Args&&... args) {
  function infoString (line 30) | std::string infoString(const std::string_view fmt, Args&&... args) {

FILE: hyprpm/src/helpers/Sys.cpp
  function validSubinsAsStr (line 25) | static std::string validSubinsAsStr() {
  function executableExistsInPath (line 37) | static bool executableExistsInPath(const std::string& exe) {
  function subin (line 65) | static std::string subin() {
  function verifyStringValid (line 87) | static bool verifyStringValid(const std::string& s) {

FILE: hyprpm/src/helpers/Sys.hpp
  type NSys (line 6) | namespace NSys {
    type root (line 13) | namespace root {

FILE: hyprpm/src/main.cpp
  function main (line 39) | int                        main(int argc, char** argv, char** envp) {

FILE: hyprpm/src/progress/CProgressBar.cpp
  function winsize (line 17) | static winsize getTerminalSize() {
  function clearCurrentLine (line 23) | static void clearCurrentLine() {

FILE: hyprpm/src/progress/CProgressBar.hpp
  class CProgressBar (line 5) | class CProgressBar {

FILE: hyprtester/clients/child-window.cpp
  type SWlState (line 18) | struct SWlState {
  function clientLog (line 51) | static void clientLog(std::format_string<Args...> fmt, Args&&... args) {
  function debugLog (line 59) | static void debugLog(std::format_string<Args...> fmt, Args&&... args) {
  function bindRegistry (line 67) | static bool bindRegistry(SWlState& state) {
  function createShm (line 98) | static bool createShm(SWlState& state, Vector2D geom) {
  function setupToplevel (line 148) | static bool setupToplevel(SWlState& state) {
  function setupSeat (line 202) | static bool setupSeat(SWlState& state) {
  type SChildWindow (line 219) | struct SChildWindow {
  function parseRequest (line 225) | static void parseRequest(SWlState& state, std::string str, SChildWindow&...
  function main (line 277) | int main(int argc, char** argv) {

FILE: hyprtester/clients/pointer-scroll.cpp
  type SWlState (line 23) | struct SWlState {
  function clientLog (line 61) | static void clientLog(std::format_string<Args...> fmt, Args&&... args) {
  function debugLog (line 70) | static void debugLog(std::format_string<Args...> fmt, Args&&... args) {
  function bindRegistry (line 79) | static bool bindRegistry(SWlState& state) {
  function createShm (line 110) | static bool createShm(SWlState& state, Vector2D geom) {
  function setupToplevel (line 161) | static bool setupToplevel(SWlState& state) {
  function setupSeat (line 215) | static bool setupSeat(SWlState& state) {
  function parseRequest (line 247) | static void parseRequest(SWlState& state, std::string req) {
  function main (line 258) | int main(int argc, char** argv) {

FILE: hyprtester/clients/pointer-warp.cpp
  type SWlState (line 22) | struct SWlState {
  function clientLog (line 55) | static void clientLog(std::format_string<Args...> fmt, Args&&... args) {
  function debugLog (line 62) | static void debugLog(std::format_string<Args...> fmt, Args&&... args) {
  function bindRegistry (line 69) | static bool bindRegistry(SWlState& state) {
  function createShm (line 103) | static bool createShm(SWlState& state, Vector2D geom) {
  function setupToplevel (line 154) | static bool setupToplevel(SWlState& state) {
  function setupSeat (line 208) | static bool setupSeat(SWlState& state) {
  function parseRequest (line 227) | static void parseRequest(SWlState& state, std::string req) {
  function main (line 261) | int main(int argc, char** argv) {

FILE: hyprtester/clients/shortcut-inhibitor.cpp
  type SWlState (line 17) | struct SWlState {
  function clientLog (line 53) | static void clientLog(std::format_string<Args...> fmt, Args&&... args) {
  function debugLog (line 61) | static void debugLog(std::format_string<Args...> fmt, Args&&... args) {
  function bindRegistry (line 69) | static bool bindRegistry(SWlState& state) {
  function createShm (line 104) | static bool createShm(SWlState& state, Vector2D geom) {
  function setupToplevel (line 155) | static bool setupToplevel(SWlState& state) {
  function setupSeat (line 209) | static bool setupSeat(SWlState& state) {
  function parseRequest (line 226) | static void parseRequest(SWlState& state, std::string req) {
  function main (line 240) | int main(int argc, char** argv) {

FILE: hyprtester/plugin/src/main.cpp
  function APICALL (line 29) | APICALL EXPORT std::string PLUGIN_API_VERSION() {
  function SDispatchResult (line 33) | static SDispatchResult test(std::string in) {
  function SDispatchResult (line 49) | static SDispatchResult snapMove(std::string in) {
  class CTestKeyboard (line 64) | class CTestKeyboard : public IKeyboard {
    method create (line 66) | static SP<CTestKeyboard> create(bool isVirtual) {
    method isVirtual (line 76) | virtual bool isVirtual() {
    method aq (line 80) | virtual SP<Aquamarine::IKeyboard> aq() {
    method sendKey (line 84) | void sendKey(uint32_t key, bool pressed) {
    method destroy (line 94) | void destroy() {
  class CTestMouse (line 102) | class CTestMouse : public IPointer {
    method create (line 104) | static SP<CTestMouse> create(bool isVirtual) {
    method isVirtual (line 113) | virtual bool isVirtual() {
    method aq (line 117) | virtual SP<Aquamarine::IPointer> aq() {
    method destroy (line 121) | void destroy() {
  function SDispatchResult (line 132) | static SDispatchResult pressAlt(std::string in) {
  function SDispatchResult (line 138) | static SDispatchResult simulateGesture(std::string in) {
  function SDispatchResult (line 167) | static SDispatchResult vkb(std::string in) {
  function SDispatchResult (line 214) | static SDispatchResult scroll(std::string in) {
  function SDispatchResult (line 231) | static SDispatchResult click(std::string in) {
  function SDispatchResult (line 253) | static SDispatchResult keybind(std::string in) {
  function SDispatchResult (line 280) | static SDispatchResult addWindowRule(std::string in) {
  function SDispatchResult (line 288) | static SDispatchResult checkWindowRule(std::string in) {
  function SDispatchResult (line 305) | static SDispatchResult                                       addLayerRul...
  function SDispatchResult (line 313) | static SDispatchResult checkLayerRule(std::string in) {
  function SDispatchResult (line 338) | static SDispatchResult floatingFocusOnFullscreen(std::string in) {
  function APICALL (line 356) | APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
  function APICALL (line 384) | APICALL EXPORT void PLUGIN_EXIT() {

FILE: hyprtester/src/Log.hpp
  type NLog (line 6) | namespace NLog {
    function log (line 9) | void log(std::format_string<Args...> fmt, Args&&... args) {

FILE: hyprtester/src/hyprctlCompat.cpp
  function getUID (line 20) | static int getUID() {
  function getRuntimeDir (line 26) | static std::string getRuntimeDir() {
  function instances (line 37) | std::vector<SInstanceData> instances() {
  function getFromSocket (line 82) | std::string getFromSocket(const std::string& cmd) {

FILE: hyprtester/src/hyprctlCompat.hpp
  type SInstanceData (line 7) | struct SInstanceData {

FILE: hyprtester/src/main.cpp
  function launchHyprland (line 49) | static bool launchHyprland(std::string configPath, std::string binaryPat...
  function hyprlandAlive (line 79) | static bool hyprlandAlive() {
  function help (line 85) | static void help() {
  function main (line 94) | int main(int argc, char** argv, char** envp) {

FILE: hyprtester/src/shared.hpp
  type Colors (line 11) | namespace Colors {

FILE: hyprtester/src/tests/clients/child-window.cpp
  type SClient (line 20) | struct SClient {
    type pollfd (line 24) | struct pollfd
  function waitForWindow (line 29) | static bool waitForWindow(SP<CProcess> proc, int windowsBefore) {
  function startClient (line 43) | static bool startClient(SClient& client) {
  function stopClient (line 79) | static void stopClient(SClient& client) {
  function createChild (line 87) | static bool createChild(SClient& client) {
  function test (line 103) | static bool test() {

FILE: hyprtester/src/tests/clients/pointer-scroll.cpp
  type SClient (line 20) | struct SClient {
    type pollfd (line 24) | struct pollfd
  function startClient (line 29) | static bool startClient(SClient& client) {
  function stopClient (line 93) | static void stopClient(SClient& client) {
  function getLastDelta (line 101) | static int getLastDelta(SClient& client) {
  function sendScroll (line 121) | static bool sendScroll(int delta) {
  function test (line 125) | static bool test() {

FILE: hyprtester/src/tests/clients/pointer-warp.cpp
  type SClient (line 20) | struct SClient {
    type pollfd (line 24) | struct pollfd
  function startClient (line 29) | static bool startClient(SClient& client) {
  function stopClient (line 93) | static void stopClient(SClient& client) {
  function sendWarp (line 103) | static bool sendWarp(SClient& client, int x, int y) {
  function isCursorPos (line 121) | static bool isCursorPos(int x, int y) {
  function test (line 150) | static bool test() {

FILE: hyprtester/src/tests/clients/shortcut-inhibitor.cpp
  type SClient (line 20) | struct SClient {
    type pollfd (line 24) | struct pollfd
  function startClient (line 29) | static bool startClient(SClient& client) {
  function stopClient (line 114) | static void stopClient(SClient& client) {
  function checkFlag (line 124) | static bool        checkFlag() {
  function attemptCheckFlag (line 130) | static bool attemptCheckFlag(int attempts, int intervalMs) {
  function test (line 141) | static bool test() {

FILE: hyprtester/src/tests/main/colors.cpp
  function test (line 8) | static bool test() {

FILE: hyprtester/src/tests/main/dwindle.cpp
  function testFloatClamp (line 8) | static void testFloatClamp() {
  function test13349 (line 41) | static void test13349() {
  function testSplit (line 84) | static void testSplit() {
  function testRotatesplit (line 138) | static void testRotatesplit() {
  function testForceSplitOnMoveToWorkspace (line 230) | static void testForceSplitOnMoveToWorkspace() {
  function test (line 252) | static bool test() {

FILE: hyprtester/src/tests/main/exec.cpp
  function test (line 21) | static bool       test() {

FILE: hyprtester/src/tests/main/gestures.cpp
  function waitForWindowCount (line 21) | static bool waitForWindowCount(int expectedWindowCnt, std::string_view e...
  function test (line 35) | static bool test() {

FILE: hyprtester/src/tests/main/groups.cpp
  function test (line 21) | static bool test() {

FILE: hyprtester/src/tests/main/hyprctl.cpp
  function getCommandStdOut (line 23) | static std::string getCommandStdOut(std::string command) {
  function testDevicesActiveLayoutIndex (line 34) | static bool testDevicesActiveLayoutIndex() {
  function testGetprop (line 52) | static bool testGetprop() {
  function test (line 176) | static bool test() {

FILE: hyprtester/src/tests/main/keybinds.cpp
  type eKeyboardModifierIndex (line 16) | enum eKeyboardModifierIndex : uint8_t {
  function clearFlag (line 27) | static void clearFlag() {
  function checkFlag (line 31) | static bool checkFlag() {
  function attemptCheckFlag (line 37) | static bool attemptCheckFlag(int attempts, int intervalMs) {
  function readKittyOutput (line 48) | static std::string readKittyOutput() {
  function awaitKittyPrompt (line 61) | static void awaitKittyPrompt() {
  function spawnRemoteControlKitty (line 74) | static CUniquePointer<CProcess> spawnRemoteControlKitty() {
  function testBind (line 83) | static void testBind() {
  function testBindKey (line 95) | static void testBindKey() {
  function testLongPress (line 107) | static void testLongPress() {
  function testKeyLongPress (line 124) | static void testKeyLongPress() {
  function testLongPressRelease (line 141) | static void testLongPressRelease() {
  function testLongPressOnlyKeyRelease (line 158) | static void testLongPressOnlyKeyRelease() {
  function testRepeat (line 176) | static void testRepeat() {
  function testKeyRepeat (line 196) | static void testKeyRepeat() {
  function testRepeatRelease (line 216) | static void testRepeatRelease() {
  function testRepeatOnlyKeyRelease (line 238) | static void testRepeatOnlyKeyRelease() {
  function testShortcutBind (line 261) | static void testShortcutBind() {
  function testShortcutBindKey (line 283) | static void testShortcutBindKey() {
  function testShortcutLongPress (line 306) | static void testShortcutLongPress() {
  function testShortcutLongPressKeyRelease (line 335) | static void testShortcutLongPressKeyRelease() {
  function testShortcutRepeat (line 362) | static void testShortcutRepeat() {
  function testShortcutRepeatKeyRelease (line 392) | static void testShortcutRepeatKeyRelease() {
  function testSubmap (line 424) | static void testSubmap() {
  function testBindsAfterScroll (line 459) | static void testBindsAfterScroll() {
  function testSubmapUniversal (line 488) | static void testSubmapUniversal() {
  function testPerDeviceKeybind (line 516) | static void testPerDeviceKeybind() {
  function test (line 544) | static bool test() {

FILE: hyprtester/src/tests/main/layer.cpp
  function spawnLayer (line 14) | static bool spawnLayer(const std::string& namespace_) {
  function test (line 23) | static bool test() {

FILE: hyprtester/src/tests/main/layout.cpp
  function swar (line 8) | static void swar() {
  function testCrashOnGeomUpdate (line 46) | static void testCrashOnGeomUpdate() {
  function testPosPreserve (line 64) | static void testPosPreserve() {
  function test (line 106) | static bool test() {

FILE: hyprtester/src/tests/main/master.cpp
  function testOrientations (line 9) | static void testOrientations() {
  function focusMasterPrevious (line 54) | static void focusMasterPrevious() {
  function testFsBehavior (line 100) | static void testFsBehavior() {
  function test (line 161) | static bool test() {

FILE: hyprtester/src/tests/main/misc.cpp
  function test (line 136) | static bool test() {

FILE: hyprtester/src/tests/main/persistent.cpp
  function test (line 21) | static bool test() {

FILE: hyprtester/src/tests/main/scroll.cpp
  function testFocusCycling (line 8) | static void testFocusCycling() {
  function testFocusWrapping (line 60) | static void testFocusWrapping() {
  function testSwapcolWrapping (line 115) | static void testSwapcolWrapping() {
  function testWindowRule (line 201) | static bool testWindowRule() {
  function test (line 229) | static bool test() {

FILE: hyprtester/src/tests/main/snap.cpp
  function spawnFloatingKitty (line 14) | static bool spawnFloatingKitty() {
  function expectSocket (line 24) | static void expectSocket(const std::string& CMD) {
  function expectSnapMove (line 35) | static void expectSnapMove(const Vector2D FROM, const Vector2D* TO) {
  function testWindowSnap (line 48) | static void testWindowSnap(const bool RESPECTGAPS) {
  function testMonitorSnap (line 73) | static void testMonitorSnap(const bool RESPECTGAPS, const bool OVERLAP) {
  function test (line 112) | static bool test() {

FILE: hyprtester/src/tests/main/solitary.cpp
  function test (line 18) | static bool test() {

FILE: hyprtester/src/tests/main/tags.cpp
  function testTags (line 8) | static bool testTags() {

FILE: hyprtester/src/tests/main/window.cpp
  function spawnKitty (line 19) | static bool spawnKitty(const std::string& class_, const std::vector<std:...
  function spawnKittyActivating (line 32) | static std::string spawnKittyActivating(const std::string& class_ = "kit...
  function getWindowAddress (line 50) | static std::string getWindowAddress(const std::string& winInfo) {
  function testSwapWindow (line 61) | static void testSwapWindow() {
  function testGroupRules (line 150) | static void testGroupRules() {
  function isActiveWindow (line 212) | static bool isActiveWindow(const std::string& class_, char fullscreen = ...
  function waitForActiveWindow (line 225) | static bool waitForActiveWindow(const std::string& class_, char fullscre...
  function testWindowFocusOnFullscreenConflict (line 239) | static bool testWindowFocusOnFullscreenConflict() {
  function testMaximizeSize (line 341) | static void testMaximizeSize() {
  function testFloatingFocusOnFullscreen (line 370) | static void testFloatingFocusOnFullscreen() {
  function testGroupFallbackFocus (line 390) | static void testGroupFallbackFocus() {
  function testBringActiveToTopMouseMovement (line 425) | static void testBringActiveToTopMouseMovement() {
  function testInitialFloatSize (line 464) | static void testInitialFloatSize() {
  function testWindowRuleFocusOnActivate (line 499) | static bool testWindowRuleFocusOnActivate() {
  function testPinnedWorkspacesValid (line 559) | static bool testPinnedWorkspacesValid() {
  function testWindowRuleWorkspaceEmpty (line 605) | static bool testWindowRuleWorkspaceEmpty() {
  function testContentRules (line 650) | static bool testContentRules() {
  function test (line 682) | static bool test() {

FILE: hyprtester/src/tests/main/workspaces.cpp
  function testSpecialWorkspaceFullscreen (line 23) | static bool testSpecialWorkspaceFullscreen() {
  function testAsymmetricGaps (line 108) | static bool testAsymmetricGaps() {
  function testMultimonBAF (line 196) | static void testMultimonBAF() {
  function testMultimonFocus (line 258) | static void testMultimonFocus() {
  function testDynamicWsEffects (line 378) | static void testDynamicWsEffects() {
  function test (line 396) | static bool test() {

FILE: hyprtester/src/tests/plugin/plugin.cpp
  function testPlugin (line 13) | bool testPlugin() {
  function testVkb (line 23) | bool testVkb() {

FILE: hyprtester/src/tests/shared.hpp
  type Tests (line 10) | namespace Tests {

FILE: src/Compositor.cpp
  function handleCritSignal (line 97) | static int handleCritSignal(int signo, void* data) {
  function handleUnrecoverableSignal (line 106) | static void handleUnrecoverableSignal(int sig) {
  function handleUserSignal (line 125) | static void handleUserSignal(int sig) {
  function filterGlobals (line 277) | static bool filterGlobals(const wl_client* client, const wl_global* glob...
  function PHLMONITOR (line 806) | PHLMONITOR CCompositor::getMonitorFromID(const MONITORID& id) {
  function PHLMONITOR (line 816) | PHLMONITOR CCompositor::getMonitorFromName(const std::string& name) {
  function PHLMONITOR (line 825) | PHLMONITOR CCompositor::getMonitorFromDesc(const std::string& desc) {
  function PHLMONITOR (line 833) | PHLMONITOR CCompositor::getMonitorFromCursor() {
  function PHLMONITOR (line 837) | PHLMONITOR CCompositor::getMonitorFromVector(const Vector2D& point) {
  function PHLWINDOW (line 888) | PHLWINDOW CCompositor::vectorToWindowUnified(const Vector2D& pos, uint8_...
  function Vector2D (line 1088) | Vector2D CCompositor::vectorToSurfaceLocal(const Vector2D& vec, PHLWINDO...
  function PHLMONITOR (line 1117) | PHLMONITOR CCompositor::getMonitorFromOutput(SP<Aquamarine::IOutput> out) {
  function PHLMONITOR (line 1127) | PHLMONITOR CCompositor::getRealMonitorFromOutput(SP<Aquamarine::IOutput>...
  function PHLWINDOW (line 1180) | PHLWINDOW CCompositor::getWindowFromSurface(SP<CWLSurfaceResource> pSurf...
  function PHLWINDOW (line 1192) | PHLWINDOW CCompositor::getWindowFromHandle(uint32_t handle) {
  function PHLWORKSPACE (line 1202) | PHLWORKSPACE CCompositor::getWorkspaceByID(const WORKSPACEID& id) {
  function PHLWINDOW (line 1211) | PHLWINDOW CCompositor::getUrgentWindow() {
  function PHLWINDOW (line 1381) | PHLWINDOW CCompositor::getWindowInDirection(PHLWINDOW pWindow, Math::eDi...
  function PHLWINDOW (line 1399) | PHLWINDOW CCompositor::getWindowInDirection(const CBox& box, PHLWORKSPAC...
  function isWorkspaceMatches (line 1559) | static bool isWorkspaceMatches(WINDOWPTR pWindow, const WINDOWPTR w, boo...
  function isFloatingMatches (line 1564) | static bool isFloatingMatches(WINDOWPTR w, std::optional<bool> floating) {
  function isWindowAvailableForCycle (line 1569) | static bool isWindowAvailableForCycle(WINDOWPTR pWindow, WINDOWPTR w, bo...
  function PHLWINDOW (line 1575) | static PHLWINDOW getWindowPred(Iterator cur, Iterator end, Iterator begi...
  function PHLWINDOW (line 1584) | static PHLWINDOW getWeakWindowPred(Iterator cur, Iterator end, Iterator ...
  function PHLWINDOW (line 1592) | PHLWINDOW CCompositor::getWindowCycleHist(PHLWINDOWREF cur, bool focusab...
  function PHLWINDOW (line 1600) | PHLWINDOW CCompositor::getWindowCycle(PHLWINDOW cur, bool focusableOnly,...
  function WORKSPACEID (line 1606) | WORKSPACEID CCompositor::getNextAvailableNamedWorkspace() {
  function PHLWORKSPACE (line 1624) | PHLWORKSPACE CCompositor::getWorkspaceByName(const std::string& name) {
  function PHLWORKSPACE (line 1633) | PHLWORKSPACE CCompositor::getWorkspaceByString(const std::string& str) {
  function PHLMONITOR (line 1679) | PHLMONITOR CCompositor::getMonitorInDirection(Math::eDirection dir) {
  function PHLMONITOR (line 1683) | PHLMONITOR CCompositor::getMonitorInDirection(PHLMONITOR pSourceMonitor,...
  function MONITORID (line 1755) | MONITORID CCompositor::getNextAvailableMonitorID(std::string const& name) {
  function PHLMONITOR (line 1866) | PHLMONITOR CCompositor::getMonitorFromString(const std::string& name) {
  function PHLWINDOW (line 2219) | PHLWINDOW CCompositor::getX11Parent(PHLWINDOW pWindow) {
  function PHLWINDOW (line 2247) | PHLWINDOW CCompositor::getWindowByRegex(const std::string& regexp_) {
  function PHLLS (line 2381) | PHLLS CCompositor::getLayerSurfaceFromSurface(SP<CWLSurfaceResource> pSu...
  function Vector2D (line 2408) | Vector2D CCompositor::parseWindowVectorArgsRelative(const std::string& a...
  function PHLWORKSPACE (line 2457) | PHLWORKSPACE CCompositor::createNewWorkspace(const WORKSPACEID& id, cons...
  function WORKSPACEID (line 2484) | WORKSPACEID CCompositor::getNewSpecialID() {
  function PHLWINDOW (line 2640) | PHLWINDOW CCompositor::getForceFocus() {
  function checkDefaultCursorWarp (line 2882) | static void checkDefaultCursorWarp(PHLMONITOR monitor) {
  function PImageDescription (line 2966) | PImageDescription CCompositor::getPreferredImageDescription() {
  function PImageDescription (line 2976) | PImageDescription CCompositor::getHDRImageDescription() {
  type vt_stat (line 3118) | struct vt_stat

FILE: src/Compositor.hpp
  class CWLSurfaceResource (line 17) | class CWLSurfaceResource
  type SWorkspaceRule (line 18) | struct SWorkspaceRule
  type eManagersInitStage (line 20) | enum eManagersInitStage : uint8_t {
  class CCompositor (line 26) | class CCompositor {
    method getWorkspaces (line 86) | auto getWorkspaces() {

FILE: src/SharedDefs.hpp
  type eIcons (line 10) | enum eIcons : uint8_t {
  type eRenderStage (line 20) | enum eRenderStage : uint8_t {
  type eInputType (line 33) | enum eInputType : uint8_t {
  type eHyprCtlOutputFormat (line 41) | enum eHyprCtlOutputFormat : uint8_t {
  type SHyprCtlCommand (line 46) | struct SHyprCtlCommand {
  type SDispatchResult (line 52) | struct SDispatchResult {

FILE: src/config/ConfigDataValues.hpp
  type eConfigValueDataTypes (line 7) | enum eConfigValueDataTypes : int8_t {
  class ICustomConfigValueData (line 14) | class ICustomConfigValueData {
  class CGradientValueData (line 23) | class CGradientValueData : public ICustomConfigValueData {
    method CGradientValueData (line 25) | CGradientValueData() = default;
    method CGradientValueData (line 26) | CGradientValueData(CHyprColor col) {
    method eConfigValueDataTypes (line 32) | virtual eConfigValueDataTypes getDataType() {
    method reset (line 36) | void reset(CHyprColor col) {
    method updateColorsOk (line 43) | void updateColorsOk() {
    method toString (line 75) | virtual std::string toString() {
  class CCssGapData (line 86) | class CCssGapData : public ICustomConfigValueData {
    method CCssGapData (line 88) | CCssGapData() : m_top(0), m_right(0), m_bottom(0), m_left(0) {}
    method CCssGapData (line 89) | CCssGapData(int64_t global) : m_top(global), m_right(global), m_bottom...
    method CCssGapData (line 90) | CCssGapData(int64_t vertical, int64_t horizontal) : m_top(vertical), m...
    method CCssGapData (line 91) | CCssGapData(int64_t top, int64_t horizontal, int64_t bottom) : m_top(t...
    method CCssGapData (line 92) | CCssGapData(int64_t top, int64_t right, int64_t bottom, int64_t left) ...
    method parseGapData (line 100) | void    parseGapData(CVarList2 varlist) {
    method reset (line 128) | void reset(int64_t global) {
    method eConfigValueDataTypes (line 135) | virtual eConfigValueDataTypes getDataType() {
    method toString (line 139) | virtual std::string toString() {
  class CFontWeightConfigValueData (line 144) | class CFontWeightConfigValueData : public ICustomConfigValueData {
    method CFontWeightConfigValueData (line 146) | CFontWeightConfigValueData() = default;
    method CFontWeightConfigValueData (line 147) | CFontWeightConfigValueData(const char* weight) {
    method eConfigValueDataTypes (line 153) | virtual eConfigValueDataTypes getDataType() {
    method toString (line 157) | virtual std::string toString() {
    method parseWeight (line 161) | void parseWeight(const std::string& strWeight) {

FILE: src/config/ConfigManager.cpp
  function configHandleGradientSet (line 77) | static Hyprlang::CParseResult configHandleGradientSet(const char* VALUE,...
  function configHandleGradientDestroy (line 137) | static void configHandleGradientDestroy(void** data) {
  function configHandleGapSet (line 142) | static Hyprlang::CParseResult configHandleGapSet(const char* VALUE, void...
  function configHandleGapDestroy (line 162) | static void configHandleGapDestroy(void** data) {
  function configHandleFontWeightSet (line 167) | static Hyprlang::CParseResult configHandleFontWeightSet(const char* VALU...
  function configHandleFontWeightDestroy (line 184) | static void configHandleFontWeightDestroy(void** data) {
  function handleExec (line 189) | static Hyprlang::CParseResult handleExec(const char* c, const char* v) {
  function handleRawExec (line 201) | static Hyprlang::CParseResult handleRawExec(const char* c, const char* v) {
  function handleExecOnce (line 213) | static Hyprlang::CParseResult handleExecOnce(const char* c, const char* ...
  function handleExecRawOnce (line 225) | static Hyprlang::CParseResult handleExecRawOnce(const char* c, const cha...
  function handleExecShutdown (line 237) | static Hyprlang::CParseResult handleExecShutdown(const char* c, const ch...
  function handleMonitor (line 249) | static Hyprlang::CParseResult handleMonitor(const char* c, const char* v) {
  function handleBezier (line 261) | static Hyprlang::CParseResult handleBezier(const char* c, const char* v) {
  function handleAnimation (line 273) | static Hyprlang::CParseResult handleAnimation(const char* c, const char*...
  function handleBind (line 285) | static Hyprlang::CParseResult handleBind(const char* c, const char* v) {
  function handleUnbind (line 297) | static Hyprlang::CParseResult handleUnbind(const char* c, const char* v) {
  function handleWorkspaceRules (line 309) | static Hyprlang::CParseResult handleWorkspaceRules(const char* c, const ...
  function handleSubmap (line 321) | static Hyprlang::CParseResult handleSubmap(const char* c, const char* v) {
  function handleSource (line 333) | static Hyprlang::CParseResult handleSource(const char* c, const char* v) {
  function handleEnv (line 345) | static Hyprlang::CParseResult handleEnv(const char* c, const char* v) {
  function handlePlugin (line 357) | static Hyprlang::CParseResult handlePlugin(const char* c, const char* v) {
  function handlePermission (line 369) | static Hyprlang::CParseResult handlePermission(const char* c, const char...
  function handleGesture (line 381) | static Hyprlang::CParseResult handleGesture(const char* c, const char* v) {
  function handleWindowrule (line 393) | static Hyprlang::CParseResult handleWindowrule(const char* c, const char...
  function handleWindowrulev2 (line 405) | static Hyprlang::CParseResult handleWindowrulev2(const char* c, const ch...
  function handleLayerrule (line 411) | static Hyprlang::CParseResult handleLayerrule(const char* c, const char*...
  function handleLayerrulev2 (line 423) | static Hyprlang::CParseResult handleLayerrulev2(const char* c, const cha...
  function exportHlVersionVars (line 1062) | static void exportHlVersionVars() {
  function clearHlVersionVars (line 1068) | static void clearHlVersionVars() {
  function Vector2D (line 1550) | Vector2D CConfigManager::getDeviceVec(const std::string& dev, const std:...
  function SMonitorRule (line 1564) | SMonitorRule CConfigManager::getMonitorRuleFor(const PHLMONITOR PMONITOR) {
  function SWorkspaceRule (line 1629) | SWorkspaceRule CConfigManager::getWorkspaceRuleFor(PHLWORKSPACE pWorkspa...
  function SWorkspaceRule (line 1641) | SWorkspaceRule CConfigManager::mergeWorkspaceRules(const SWorkspaceRule&...
  function PHLMONITOR (line 1915) | PHLMONITOR CConfigManager::getBoundMonitorForWS(const std::string& wsnam...
  function parseModeLine (line 2046) | static bool parseModeLine(const std::string& modeline, drmModeModeInfo& ...
  function SMonitorRule (line 2114) | SMonitorRule& CMonitorRuleParser::rule() {
  function SParsedKey (line 2516) | SParsedKey parseKey(const std::string& key) {

FILE: src/config/ConfigManager.hpp
  class CConfigManager (line 30) | class CConfigManager
  type SWorkspaceRule (line 32) | struct SWorkspaceRule {
  type SPluginKeyword (line 54) | struct SPluginKeyword {
  type SPluginVariable (line 60) | struct SPluginVariable {
  type eConfigOptionType (line 65) | enum eConfigOptionType : uint8_t {
  type eConfigOptionFlags (line 77) | enum eConfigOptionFlags : uint8_t {
  type SConfigOptionDescription (line 81) | struct SConfigOptionDescription {
    type SBoolData (line 83) | struct SBoolData {
    type SRangeData (line 87) | struct SRangeData {
    type SFloatData (line 91) | struct SFloatData {
    type SStringData (line 95) | struct SStringData {
    type SColorData (line 99) | struct SColorData {
    type SChoiceData (line 103) | struct SChoiceData {
    type SGradientData (line 108) | struct SGradientData {
    type SVectorData (line 112) | struct SVectorData {
  type SFirstExecRequest (line 129) | struct SFirstExecRequest {
  type SFloatCache (line 134) | struct SFloatCache {
    method SFloatCache (line 137) | SFloatCache(PHLWINDOW window, bool initial) {
  type std (line 156) | namespace std {
    type hash<SFloatCache> (line 158) | struct hash<SFloatCache> {
  class CMonitorRuleParser (line 165) | class CMonitorRuleParser {
  class CConfigManager (line 192) | class CConfigManager {

FILE: src/config/ConfigValue.cpp
  function local__configValuePopulate (line 5) | void local__configValuePopulate(void* const** p, const std::string& val) {
  function local__configValueTypeIdx (line 11) | std::type_index local__configValueTypeIdx(const std::string& val) {

FILE: src/config/ConfigValue.hpp
  class CConfigValue (line 14) | class CConfigValue {
    method CConfigValue (line 16) | CConfigValue(const std::string& val) {
    method T (line 31) | T* ptr() const {
    method T (line 35) | T operator*() const {

FILE: src/config/ConfigWatcher.cpp
  function CFileDescriptor (line 29) | CFileDescriptor& CConfigWatcher::getInotifyFD() {

FILE: src/config/ConfigWatcher.hpp
  class CConfigWatcher (line 8) | class CConfigWatcher {
    type SConfigWatchEvent (line 13) | struct SConfigWatchEvent {
    type SInotifyWatch (line 23) | struct SInotifyWatch {

FILE: src/debug/HyprCtl.cpp
  function trimTrailingComma (line 88) | static void trimTrailingComma(std::string& str) {
  function formatToString (line 93) | static std::string formatToString(uint32_t drmFormat) {
  function availableModesForOutput (line 105) | static std::string availableModesForOutput(PHLMONITOR pMonitor, eHyprCtl...
  function monitorsRequest (line 292) | static std::string monitorsRequest(eHyprCtlOutputFormat format, std::str...
  function getTagsData (line 325) | static std::string getTagsData(PHLWINDOW w, eHyprCtlOutputFormat format) {
  function getGroupedData (line 335) | static std::string getGroupedData(PHLWINDOW w, eHyprCtlOutputFormat form...
  function clientsRequest (line 424) | static std::string clientsRequest(eHyprCtlOutputFormat format, std::stri...
  function getWorkspaceRuleData (line 487) | static std::string getWorkspaceRuleData(const SWorkspaceRule& r, eHyprCt...
  function activeWorkspaceRequest (line 538) | static std::string activeWorkspaceRequest(eHyprCtlOutputFormat format, s...
  function workspacesRequest (line 551) | static std::string workspacesRequest(eHyprCtlOutputFormat format, std::s...
  function workspaceRulesRequest (line 572) | static std::string workspaceRulesRequest(eHyprCtlOutputFormat format, st...
  function activeWindowRequest (line 592) | static std::string activeWindowRequest(eHyprCtlOutputFormat format, std:...
  function layersRequest (line 606) | static std::string layersRequest(eHyprCtlOutputFormat format, std::strin...
  function configErrorsRequest (line 682) | static std::string configErrorsRequest(eHyprCtlOutputFormat format, std:...
  function devicesRequest (line 705) | static std::string devicesRequest(eHyprCtlOutputFormat format, std::stri...
  function animationsRequest (line 884) | static std::string animationsRequest(eHyprCtlOutputFormat format, std::s...
  function rollinglogRequest (line 944) | static std::string rollinglogRequest(eHyprCtlOutputFormat format, std::s...
  function globalShortcutsRequest (line 957) | static std::string globalShortcutsRequest(eHyprCtlOutputFormat format, s...
  function bindsRequest (line 983) | static std::string bindsRequest(eHyprCtlOutputFormat format, std::string...
  function versionRequest (line 1040) | std::string versionRequest(eHyprCtlOutputFormat format, std::string requ...
  function systemInfoRequest (line 1121) | std::string systemInfoRequest(eHyprCtlOutputFormat format, std::string r...
  function dispatchRequest (line 1235) | static std::string dispatchRequest(eHyprCtlOutputFormat format, std::str...
  function dispatchKeyword (line 1256) | static std::string dispatchKeyword(eHyprCtlOutputFormat format, std::str...
  function reloadRequest (line 1352) | static std::string reloadRequest(eHyprCtlOutputFormat format, std::strin...
  function killRequest (line 1364) | static std::string killRequest(eHyprCtlOutputFormat format, std::string ...
  function splashRequest (line 1370) | static std::string splashRequest(eHyprCtlOutputFormat format, std::strin...
  function cursorPosRequest (line 1374) | static std::string cursorPosRequest(eHyprCtlOutputFormat format, std::st...
  function dispatchBatch (line 1392) | static std::string dispatchBatch(eHyprCtlOutputFormat format, std::strin...
  function dispatchSetCursor (line 1418) | static std::string dispatchSetCursor(eHyprCtlOutputFormat format, std::s...
  function switchXKBLayoutRequest (line 1442) | static std::string switchXKBLayoutRequest(eHyprCtlOutputFormat format, s...
  function dispatchSeterror (line 1517) | static std::string dispatchSeterror(eHyprCtlOutputFormat format, std::st...
  function dispatchGetProp (line 1546) | static std::string dispatchGetProp(eHyprCtlOutputFormat format, std::str...
  function dispatchGetOption (line 1728) | static std::string dispatchGetOption(eHyprCtlOutputFormat format, std::s...
  function decorationRequest (line 1784) | static std::string decorationRequest(eHyprCtlOutputFormat format, std::s...
  function dispatchOutput (line 1810) | static std::string dispatchOutput(eHyprCtlOutputFormat format, std::stri...
  function dispatchPlugin (line 1865) | static std::string dispatchPlugin(eHyprCtlOutputFormat format, std::stri...
  function dispatchNotify (line 1942) | static std::string dispatchNotify(eHyprCtlOutputFormat format, std::stri...
  function dispatchDismissNotify (line 1997) | static std::string dispatchDismissNotify(eHyprCtlOutputFormat format, st...
  function getIsLocked (line 2017) | static std::string getIsLocked(eHyprCtlOutputFormat format, std::string ...
  function getDescriptions (line 2029) | static std::string getDescriptions(eHyprCtlOutputFormat format, std::str...
  function submapRequest (line 2044) | static std::string submapRequest(eHyprCtlOutputFormat format, std::strin...
  function reloadShaders (line 2052) | static std::string reloadShaders(eHyprCtlOutputFormat format, std::strin...
  function successWrite (line 2228) | static bool successWrite(int fd, const std::string& data, bool needLog =...
  function runWritingDebugLogThread (line 2263) | static void runWritingDebugLogThread(const int conn) {
  function isFollowUpRollingLogRequest (line 2286) | static bool isFollowUpRollingLogRequest(const std::string& request) {
  function hyprCtlFDTick (line 2290) | static int hyprCtlFDTick(int fd, uint32_t mask, void* data) {

FILE: src/debug/HyprCtl.hpp
  class CHyprCtl (line 15) | class CHyprCtl {

FILE: src/debug/HyprDebugOverlay.hpp
  class IHyprRenderer (line 9) | class IHyprRenderer
  class CHyprMonitorDebugOverlay (line 11) | class CHyprMonitorDebugOverlay {
  class CHyprDebugOverlay (line 31) | class CHyprDebugOverlay {

FILE: src/debug/HyprNotificationOverlay.cpp
  function iconBackendFromLayout (line 12) | static inline auto iconBackendFromLayout(PangoLayout* layout) {
  function CBox (line 67) | CBox CHyprNotificationOverlay::drawNotifications(PHLMONITOR pMonitor) {

FILE: src/debug/HyprNotificationOverlay.hpp
  type eIconBackend (line 12) | enum eIconBackend : uint8_t {
  type SNotification (line 29) | struct SNotification {
  class CHyprNotificationOverlay (line 38) | class CHyprNotificationOverlay {

FILE: src/debug/crash/CrashReporter.cpp
  function exitWithError (line 45) | [[noreturn]] static inline void exitWithError(char const* err) {
  type utsname (line 149) | struct utsname
  type link_map (line 217) | struct link_map

FILE: src/debug/crash/CrashReporter.hpp
  type CrashReporter (line 3) | namespace CrashReporter {

FILE: src/debug/crash/SignalSafe.hpp
  type SignalSafe (line 6) | namespace SignalSafe {
    class CMaxLengthCString (line 8) | class CMaxLengthCString {
      method CMaxLengthCString (line 10) | CMaxLengthCString() {
      method write (line 18) | void write(char const* data, size_t len) {
      method write (line 28) | void write(char c) {
      method writeNum (line 37) | void writeNum(size_t num) {
      method boundsExceeded (line 56) | bool boundsExceeded() {
    class CBufFileWriter (line 67) | class CBufFileWriter {
      method CBufFileWriter (line 69) | CBufFileWriter(int fd_) : m_fd(fd_) {
      method write (line 77) | void write(char const* data, size_t len) {
      method write (line 89) | void write(char c) {
      method writeNum (line 108) | void writeNum(size_t num) {
      method writeCmdOutput (line 123) | void writeCmdOutput(const char* cmd) {
      method flush (line 183) | void flush() {

FILE: src/debug/log/Logger.hpp
  type Log (line 8) | namespace Log {
    class CLogger (line 9) | class CLogger {
      method log (line 21) | void log(Hyprutils::CLI::eLogLevel level, std::format_string<Args......

FILE: src/debug/log/RollingLogFollow.hpp
  type Log (line 8) | namespace Log {
    type SRollingLogFollow (line 9) | struct SRollingLogFollow {
      method isEmpty (line 16) | bool isEmpty(int socket) {
      method debugInfo (line 21) | std::string debugInfo() {
      method getLog (line 26) | std::string getLog(int socket) {
      method addLog (line 35) | void addLog(const std::string_view& log) {
      method isRunning (line 45) | bool isRunning() {
      method stopFor (line 50) | void stopFor(int socket) {
      method startFor (line 57) | void startFor(int socket) {
      method SRollingLogFollow (line 63) | static SRollingLogFollow& get() {

FILE: src/desktop/DesktopTypes.hpp
  class CWorkspace (line 4) | class CWorkspace
  class CMonitor (line 5) | class CMonitor
  type Desktop::View (line 7) | namespace Desktop::View {
    class CWindow (line 8) | class CWindow
    class CLayerSurface (line 9) | class CLayerSurface

FILE: src/desktop/Workspace.cpp
  function PHLWORKSPACE (line 16) | PHLWORKSPACE CWorkspace::create(WORKSPACEID id, PHLMONITOR monitor, std:...
  function PHLWINDOW (line 77) | PHLWINDOW CWorkspace::getLastFocusedWindow() {
  function MONITORID (line 385) | MONITORID CWorkspace::monitorID() {
  function PHLWINDOW (line 389) | PHLWINDOW CWorkspace::getFullscreenWindow() {
  function PHLWINDOW (line 450) | PHLWINDOW CWorkspace::getFirstWindow() {
  function PHLWINDOW (line 459) | PHLWINDOW CWorkspace::getTopLeftWindow() {

FILE: src/desktop/Workspace.hpp
  type Layout (line 9) | namespace Layout {
    class CSpace (line 10) | class CSpace
  type eFullscreenMode (line 13) | enum eFullscreenMode : int8_t {
  class CWorkspace (line 20) | class CWorkspace {
  function valid (line 106) | inline bool valid(const PHLWORKSPACE& ref) {

FILE: src/desktop/history/WindowHistoryTracker.hpp
  type Desktop::History (line 7) | namespace Desktop::History {
    class CWindowHistoryTracker (line 8) | class CWindowHistoryTracker {
      method CWindowHistoryTracker (line 13) | CWindowHistoryTracker(const CWindowHistoryTracker&) = delete;
      method CWindowHistoryTracker (line 14) | CWindowHistoryTracker(CWindowHistoryTracker&)       = delete;
      method CWindowHistoryTracker (line 15) | CWindowHistoryTracker(CWindowHistoryTracker&&)      = delete;

FILE: src/desktop/history/WorkspaceHistoryTracker.cpp
  function SWorkspaceIDName (line 88) | SWorkspaceIDName CWorkspaceHistoryTracker::previousWorkspaceIDName(PHLWO...
  function SWorkspaceIDName (line 133) | SWorkspaceIDName CWorkspaceHistoryTracker::previousWorkspaceIDName(PHLWO...

FILE: src/desktop/history/WorkspaceHistoryTracker.hpp
  type Desktop::History (line 10) | namespace Desktop::History {
    class CWorkspaceHistoryTracker (line 11) | class CWorkspaceHistoryTracker {
      method CWorkspaceHistoryTracker (line 16) | CWorkspaceHistoryTracker(const CWorkspaceHistoryTracker&) = delete;
      method CWorkspaceHistoryTracker (line 17) | CWorkspaceHistoryTracker(CWorkspaceHistoryTracker&)       = delete;
      method CWorkspaceHistoryTracker (line 18) | CWorkspaceHistoryTracker(CWorkspaceHistoryTracker&&)      = delete;
      type SWorkspacePreviousData (line 20) | struct SWorkspacePreviousData {
      type SLastWorkspaceData (line 35) | struct SLastWorkspaceData {

FILE: src/desktop/reserved/ReservedArea.cpp
  function CBox (line 41) | CBox CReservedArea::apply(const CBox& other) const {

FILE: src/desktop/reserved/ReservedArea.hpp
  type Desktop (line 6) | namespace Desktop {
    type eReservedDynamicType (line 7) | enum eReservedDynamicType : uint8_t {
    class CReservedArea (line 14) | class CReservedArea {
      method CReservedArea (line 16) | CReservedArea() = default;
      type SDynamicData (line 42) | struct SDynamicData {

FILE: src/desktop/rule/Engine.hpp
  type Desktop::Rule (line 5) | namespace Desktop::Rule {
    class CRuleEngine (line 6) | class CRuleEngine {
      method CRuleEngine (line 8) | CRuleEngine()  = default;

FILE: src/desktop/rule/Rule.hpp
  type Desktop::Rule (line 11) | namespace Desktop::Rule {
    type eRuleProperty (line 12) | enum eRuleProperty : uint32_t {
    type eRuleType (line 38) | enum eRuleType : uint8_t {
    class IRule (line 47) | class IRule {

FILE: src/desktop/rule/effect/EffectContainer.hpp
  type Desktop::Rule (line 10) | namespace Desktop::Rule {
    class IEffectContainer (line 12) | class IEffectContainer {
      method IEffectContainer (line 23) | IEffectContainer(std::vector<std::string>&& defaultKeys) : m_keys(st...
      method storageType (line 28) | virtual storageType registerEffect(std::string&& name) {
      method unregisterEffect (line 37) | virtual void unregisterEffect(storageType id) {
      method unregisterEffect (line 44) | virtual void unregisterEffect(const std::string& name) {
      method get (line 60) | virtual std::optional<storageType> get(const std::string_view& s) {
      method isEffectDynamic (line 74) | virtual bool isEffectDynamic(storageType i) {

FILE: src/desktop/rule/layerRule/LayerRule.cpp
  function eRuleType (line 12) | eRuleType CLayerRule::type() {

FILE: src/desktop/rule/layerRule/LayerRule.hpp
  type Desktop::Rule (line 7) | namespace Desktop::Rule {
    class CLayerRule (line 8) | class CLayerRule : public IRule {

FILE: src/desktop/rule/layerRule/LayerRuleApplicator.hpp
  type Desktop::Rule (line 10) | namespace Desktop::Rule {
    class CLayerRule (line 11) | class CLayerRule
    class CLayerRuleApplicator (line 13) | class CLayerRuleApplicator {
      method CLayerRuleApplicator (line 18) | CLayerRuleApplicator(const CLayerRuleApplicator&) = delete;
      method CLayerRuleApplicator (line 19) | CLayerRuleApplicator(CLayerRuleApplicator&)       = delete;
      method CLayerRuleApplicator (line 20) | CLayerRuleApplicator(CLayerRuleApplicator&&)      = delete;
      type SCustomPropContainer (line 25) | struct SCustomPropContainer {

FILE: src/desktop/rule/layerRule/LayerRuleEffectContainer.hpp
  type Desktop::Rule (line 8) | namespace Desktop::Rule {
    type eLayerRuleEffect (line 9) | enum eLayerRuleEffect : uint8_t {
    class CLayerRuleEffectContainer (line 26) | class CLayerRuleEffectContainer : public IEffectContainer<eLayerRuleEf...

FILE: src/desktop/rule/matchEngine/BoolMatchEngine.hpp
  type Desktop::Rule (line 5) | namespace Desktop::Rule {
    class CBoolMatchEngine (line 6) | class CBoolMatchEngine : public IMatchEngine {

FILE: src/desktop/rule/matchEngine/IntMatchEngine.hpp
  type Desktop::Rule (line 5) | namespace Desktop::Rule {
    class CIntMatchEngine (line 6) | class CIntMatchEngine : public IMatchEngine {

FILE: src/desktop/rule/matchEngine/MatchEngine.hpp
  class CTagKeeper (line 5) | class CTagKeeper
  type Desktop::Rule (line 7) | namespace Desktop::Rule {
    type eRuleMatchEngine (line 8) | enum eRuleMatchEngine : uint8_t {
    class IMatchEngine (line 16) | class IMatchEngine {
      method IMatchEngine (line 26) | IMatchEngine() = default;

FILE: src/desktop/rule/matchEngine/RegexMatchEngine.hpp
  type re2 (line 7) | namespace re2 {
    class RE2 (line 8) | class RE2
  type Desktop::Rule (line 11) | namespace Desktop::Rule {
    class CRegexMatchEngine (line 12) | class CRegexMatchEngine : public IMatchEngine {

FILE: src/desktop/rule/matchEngine/TagMatchEngine.hpp
  type Desktop::Rule (line 6) | namespace Desktop::Rule {
    class CTagMatchEngine (line 7) | class CTagMatchEngine : public IMatchEngine {

FILE: src/desktop/rule/matchEngine/WorkspaceMatchEngine.hpp
  type Desktop::Rule (line 6) | namespace Desktop::Rule {
    class CWorkspaceMatchEngine (line 7) | class CWorkspaceMatchEngine : public IMatchEngine {

FILE: src/desktop/rule/utils/SetUtils.hpp
  type Desktop::Rule (line 5) | namespace Desktop::Rule {
    function setsIntersect (line 7) | bool setsIntersect(const std::unordered_set<T>& A, const std::unordere...

FILE: src/desktop/rule/windowRule/WindowRule.cpp
  function eRuleType (line 15) | eRuleType CWindowRule::type() {

FILE: src/desktop/rule/windowRule/WindowRule.hpp
  type Desktop::Rule (line 10) | namespace Desktop::Rule {
    class CWindowRule (line 13) | class CWindowRule : public IRule {

FILE: src/desktop/rule/windowRule/WindowRuleApplicator.hpp
  type Desktop::Rule (line 14) | namespace Desktop::Rule {
    class CWindowRule (line 15) | class CWindowRule
    type eIdleInhibitMode (line 17) | enum eIdleInhibitMode : uint8_t {
    class CWindowRuleApplicator (line 24) | class CWindowRuleApplicator {
      method CWindowRuleApplicator (line 29) | CWindowRuleApplicator(const CWindowRuleApplicator&) = delete;
      method CWindowRuleApplicator (line 30) | CWindowRuleApplicator(CWindowRuleApplicator&)       = delete;
      method CWindowRuleApplicator (line 31) | CWindowRuleApplicator(CWindowRuleApplicator&&)      = delete;
      type SCustomPropContainer (line 62) | struct SCustomPropContainer {
      method DEFINE_PROP (line 90) | DEFINE_PROP(Types::SAlphaValue, alpha, Types::SAlphaValue{}
      type SRuleResult (line 146) | struct SRuleResult {

FILE: src/desktop/rule/windowRule/WindowRuleEffectContainer.hpp
  type Desktop::Rule (line 8) | namespace Desktop::Rule {
    type eWindowRuleEffect (line 9) | enum eWindowRuleEffect : uint8_t {
    class CWindowRuleEffectContainer (line 73) | class CWindowRuleEffectContainer : public IEffectContainer<eWindowRule...

FILE: src/desktop/state/FocusState.cpp
  type SFullscreenWorkspaceFocusResult (line 26) | struct SFullscreenWorkspaceFocusResult {
  function SFullscreenWorkspaceFocusResult (line 30) | static SFullscreenWorkspaceFocusResult onFullscreenWorkspaceFocusWindow(...
  function PHLWINDOW (line 289) | PHLWINDOW CFocusState::window() {
  function PHLMONITOR (line 293) | PHLMONITOR CFocusState::monitor() {

FILE: src/desktop/state/FocusState.hpp
  class CWLSurfaceResource (line 6) | class CWLSurfaceResource
  type Desktop (line 8) | namespace Desktop {
    type eFocusReason (line 9) | enum eFocusReason : uint8_t {
    class CFocusState (line 22) | class CFocusState {
      method CFocusState (line 27) | CFocusState(CFocusState&&)      = delete;
      method CFocusState (line 28) | CFocusState(CFocusState&)       = delete;
      method CFocusState (line 29) | CFocusState(const CFocusState&) = delete;

FILE: src/desktop/types/OverridableVar.hpp
  type Desktop::Types (line 10) | namespace Desktop::Types {
    type SAlphaValue (line 12) | struct SAlphaValue {
      method applyAlpha (line 16) | float applyAlpha(float a) const {
    type eOverridePriority (line 24) | enum eOverridePriority : uint8_t {
    function T (line 34) | T clampOptional(T const& value, std::optional<T> const& min, std::opti...
    class COverridableVar (line 39) | class COverridableVar {
      method COverridableVar (line 41) | COverridableVar(T const& value, eOverridePriority priority) {
      method COverridableVar (line 45) | COverridableVar(T const& value) : m_defaultValue{value} {}
      method COverridableVar (line 46) | COverridableVar(T const& value, std::optional<T> const& min, std::op...
      method COverridableVar (line 47) | COverridableVar(std::string const& value)
      method COverridableVar (line 50) | COverridableVar(std::string const& value, std::optional<T> const& mi...
      method COverridableVar (line 54) | COverridableVar()  = default;
      method COverridableVar (line 57) | COverridableVar& operator=(COverridableVar<T> const& other) {
      method set (line 72) | void set(T value, eOverridePriority priority) {
      method unset (line 76) | void unset(eOverridePriority priority) {
      method hasValue (line 80) | bool hasValue() const {
      method T (line 84) | T value() const {
      method T (line 92) | T valueOr(T const& other) const {
      method T (line 99) | T valueOrDefault() const
      method T (line 110) | T valueOrDefault() const
      method eOverridePriority (line 121) | eOverridePriority getPriority() const {
      method increment (line 130) | void increment(T const& other, eOverridePriority priority) {
      method matchOptional (line 137) | void matchOptional(std::optional<T> const& optValue, eOverridePriori...

FILE: src/desktop/view/GlobalViewMethods.hpp
  type Desktop::View (line 9) | namespace Desktop::View {

FILE: src/desktop/view/Group.cpp
  function PHLWINDOW (line 236) | PHLWINDOW CGroup::head() const {
  function PHLWINDOW (line 240) | PHLWINDOW CGroup::tail() const {
  function PHLWINDOW (line 244) | PHLWINDOW CGroup::current() const {
  function PHLWINDOW (line 248) | PHLWINDOW CGroup::next() const {
  function PHLWINDOW (line 252) | PHLWINDOW CGroup::fromIndex(size_t idx) const {

FILE: src/desktop/view/Group.hpp
  type Layout (line 8) | namespace Layout {
    class CWindowGroupTarget (line 9) | class CWindowGroupTarget
  type Desktop::View (line 12) | namespace Desktop::View {
    class CGroup (line 13) | class CGroup {

FILE: src/desktop/view/LayerSurface.cpp
  function PHLLS (line 19) | PHLLS CLayerSurface::create(SP<CLayerShellResource> resource) {
  function PHLLS (line 59) | PHLLS CLayerSurface::fromView(SP<IView> v) {
  function eViewType (line 90) | eViewType CLayerSurface::type() const {
  function MONITORID (line 434) | MONITORID CLayerSurface::monitorID() {
  function pid_t (line 438) | pid_t CLayerSurface::getPID() {

FILE: src/desktop/view/LayerSurface.hpp
  class CLayerShellResource (line 11) | class CLayerShellResource
  type Desktop::View (line 13) | namespace Desktop::View {
    class CLayerSurface (line 15) | class CLayerSurface : public IView {
    function valid (line 89) | inline bool valid(PHLLS l) {
    function valid (line 93) | inline bool valid(PHLLSREF l) {
    function validMapped (line 97) | inline bool validMapped(PHLLS l) {
    function validMapped (line 103) | inline bool validMapped(PHLLSREF l) {

FILE: src/desktop/view/Popup.cpp
  function eViewType (line 67) | eViewType CPopup::type() const {
  function Vector2D (line 355) | Vector2D CPopup::coordsRelativeToParent() const {
  function Vector2D (line 375) | Vector2D CPopup::coordsGlobal() const {
  function Vector2D (line 379) | Vector2D CPopup::localToGlobal(const Vector2D& rel) const {
  function Vector2D (line 383) | Vector2D CPopup::t1ParentCoords() const {
  function Vector2D (line 420) | Vector2D CPopup::size() const {
  function PHLMONITOR (line 497) | PHLMONITOR CPopup::getMonitor() const {

FILE: src/desktop/view/Popup.hpp
  class CXDGPopupResource (line 11) | class CXDGPopupResource
  type Desktop::View (line 13) | namespace Desktop::View {
    class CPopup (line 15) | class CPopup : public IView {

FILE: src/desktop/view/SessionLock.cpp
  function eViewType (line 42) | eViewType View::CSessionLock::type() const {
  function PHLMONITOR (line 70) | PHLMONITOR View::CSessionLock::monitor() const {

FILE: src/desktop/view/SessionLock.hpp
  class CSessionLockSurface (line 8) | class CSessionLockSurface
  type Desktop::View (line 10) | namespace Desktop::View {
    class CSessionLock (line 11) | class CSessionLock : public IView {

FILE: src/desktop/view/Subsurface.cpp
  function eViewType (line 66) | eViewType CSubsurface::type() const {
  function Vector2D (line 235) | Vector2D CSubsurface::coordsRelativeToParent() const {
  function Vector2D (line 241) | Vector2D CSubsurface::coordsGlobal() const {
  function Vector2D (line 260) | Vector2D CSubsurface::size() {

FILE: src/desktop/view/Subsurface.hpp
  class CWLSubsurfaceResource (line 8) | class CWLSubsurfaceResource
  type Desktop::View (line 10) | namespace Desktop::View {
    class CPopup (line 11) | class CPopup
    class CSubsurface (line 12) | class CSubsurface : public IView {

FILE: src/desktop/view/View.hpp
  type Desktop::View (line 6) | namespace Desktop::View {
    type eViewType (line 7) | enum eViewType : uint8_t {
    class IView (line 15) | class IView {

FILE: src/desktop/view/WLSurface.cpp
  function Vector2D (line 53) | Vector2D CWLSurface::correctSmallVec() const {
  function Vector2D (line 64) | Vector2D CWLSurface::correctSmallVecBuf() const {
  function Vector2D (line 74) | Vector2D CWLSurface::getViewporterCorrectedSize() const {
  function CRegion (line 81) | CRegion CWLSurface::computeDamage() const {

FILE: src/desktop/view/WLSurface.hpp
  class CPointerConstraint (line 7) | class CPointerConstraint
  class CWLSurfaceResource (line 8) | class CWLSurfaceResource
  type Desktop::View (line 10) | namespace Desktop::View {
    class CSubsurface (line 11) | class CSubsurface
    class CPopup (line 12) | class CPopup
    class IView (line 13) | class IView
    class CWLSurface (line 15) | class CWLSurface {
      method create (line 17) | static SP<Desktop::View::CWLSurface> create() {
      method CWLSurface (line 29) | CWLSurface(const CWLSurface&)                       = delete;
      method CWLSurface (line 30) | CWLSurface(CWLSurface&&)                            = delete;
      method CWLSurface (line 31) | CWLSurface&            operator=(const CWLSurface&) = delete;
      method CWLSurface (line 32) | CWLSurface&            operator=(CWLSurface&&)      = delete;
      method CWLSurface (line 59) | CWLSurface& operator=(SP<CWLSurfaceResource> pSurface) {
      method CWLSurface (line 95) | CWLSurface() = default;

FILE: src/desktop/view/Window.cpp
  function PHLWINDOW (line 68) | PHLWINDOW CWindow::create(SP<CXWaylandSurface> surface) {
  function PHLWINDOW (line 95) | PHLWINDOW CWindow::create(SP<CXDGSurfaceResource> resource) {
  function eViewType (line 164) | eViewType CWindow::type() const {
  function SBoxExtents (line 184) | SBoxExtents CWindow::getFullWindowExtents() const {
  function CBox (line 242) | CBox CWindow::getFullWindowBoundingBox() const {
  function CBox (line 256) | CBox CWindow::getWindowIdealBoundingBoxIgnoreReserved() {
  function SBoxExtents (line 295) | SBoxExtents CWindow::getWindowExtentsUnified(uint64_t properties) {
  function CBox (line 307) | CBox CWindow::getWindowBoxUnified(uint64_t properties) {
  function SBoxExtents (line 323) | SBoxExtents CWindow::getFullWindowReservedArea() {
  function pid_t (line 405) | pid_t CWindow::getPID() {
  function IHyprWindowDecoration (line 422) | IHyprWindowDecoration* CWindow::getDecorationByType(eDecorationType type) {
  function PHLWINDOW (line 528) | PHLWINDOW CWindow::x11TransientFor() {
  function Vector2D (line 744) | Vector2D CWindow::middle() {
  function WORKSPACEID (line 953) | WORKSPACEID CWindow::workspaceID() {
  function MONITORID (line 957) | MONITORID CWindow::monitorID() {
  function PHLWINDOW (line 1262) | PHLWINDOW CWindow::getSwallower() {
  function Vector2D (line 1325) | Vector2D CWindow::realToReportSize() {
  function Vector2D (line 1341) | Vector2D CWindow::realToReportPosition() {
  function Vector2D (line 1348) | Vector2D CWindow::xwaylandSizeToReal(Vector2D size) {
  function Vector2D (line 1358) | Vector2D CWindow::xwaylandPositionToReal(Vector2D pos) {
  function PHLWINDOW (line 1445) | PHLWINDOW CWindow::parent() {
  function Vector2D (line 1501) | Vector2D CWindow::getReportedSize() {
  function setVector2DAnimToMove (line 1625) | static void setVector2DAnimToMove(WP<CBaseAnimatedVariable> pav) {

FILE: src/desktop/view/Window.hpp
  class CXDGSurfaceResource (line 24) | class CXDGSurfaceResource
  class CXWaylandSurface (line 25) | class CXWaylandSurface
  type SWorkspaceRule (line 26) | struct SWorkspaceRule
  class IWindowTransformer (line 28) | class IWindowTransformer
  type Layout (line 30) | namespace Layout {
    class ITarget (line 31) | class ITarget
    class CWindowTarget (line 32) | class CWindowTarget
  type Desktop (line 35) | namespace Desktop {
    type eFocusReason (line 36) | enum eFocusReason : uint8_t
  type Desktop::View (line 39) | namespace Desktop::View {
    class CGroup (line 41) | class CGroup
    type eGroupRules (line 43) | enum eGroupRules : uint8_t {
    type eGetWindowProperties (line 56) | enum eGetWindowProperties : uint8_t {
    type eSuppressEvents (line 68) | enum eSuppressEvents : uint8_t {
    type SWindowActiveEvent (line 77) | struct SWindowActiveEvent {
    type SInitialWorkspaceToken (line 82) | struct SInitialWorkspaceToken {
    type SFullscreenState (line 87) | struct SFullscreenState {
    class CWindow (line 92) | class CWindow : public IView {
      method CBox (line 354) | CBox                       getWindowMainSurfaceBox() const {
    function valid (line 397) | inline bool valid(PHLWINDOW w) {
    function valid (line 401) | inline bool valid(PHLWINDOWREF w) {
    function validMapped (line 405) | inline bool validMapped(PHLWINDOW w) {
    function validMapped (line 411) | inline bool validMapped(PHLWINDOWREF w) {
  type std::formatter<PHLWINDOW, CharT> (line 427) | struct std::formatter<PHLWINDOW, CharT> : std::formatter<CharT> {
    method format (line 440) | auto format(PHLWINDOW const& w, FormatContext& ctx) const {

FILE: src/devices/IHID.cpp
  function eHIDType (line 3) | eHIDType IHID::getType() {

FILE: src/devices/IHID.hpp
  type eHIDCapabilityType (line 7) | enum eHIDCapabilityType : uint8_t {
  type eHIDType (line 14) | enum eHIDType : uint8_t {
  class IHID (line 28) | class IHID {

FILE: src/devices/IKeyboard.cpp
  function eHIDType (line 26) | eHIDType IKeyboard::getType() {

FILE: src/devices/IKeyboard.hpp
  type eKeyboardModifiers (line 13) | enum eKeyboardModifiers {
  class IKeyboard (line 24) | class IKeyboard : public IHID {
    method wl_client (line 30) | virtual wl_client* getClient() {
    type SKeyEvent (line 35) | struct SKeyEvent {
    type SKeymapEvent (line 42) | struct SKeymapEvent {
    type SModifiersEvent (line 46) | struct SModifiersEvent {
    type SStringRuleNames (line 60) | struct SStringRuleNames {

FILE: src/devices/IPointer.cpp
  function eHIDType (line 7) | eHIDType IPointer::getType() {

FILE: src/devices/IPointer.hpp
  class IPointer (line 12) | class IPointer : public IHID {
    type SMotionEvent (line 19) | struct SMotionEvent {
    type SMotionAbsoluteEvent (line 26) | struct SMotionAbsoluteEvent {
    type SButtonEvent (line 32) | struct SButtonEvent {
    type SAxisEvent (line 39) | struct SAxisEvent {
    type SSwipeBeginEvent (line 49) | struct SSwipeBeginEvent {
    type SSwipeUpdateEvent (line 54) | struct SSwipeUpdateEvent {
    type SSwipeEndEvent (line 60) | struct SSwipeEndEvent {
    type SPinchBeginEvent (line 65) | struct SPinchBeginEvent {
    type SPinchUpdateEvent (line 70) | struct SPinchUpdateEvent {
    type SPinchEndEvent (line 77) | struct SPinchEndEvent {
    type SHoldBeginEvent (line 82) | struct SHoldBeginEvent {
    type SHoldEndEvent (line 87) | struct SHoldEndEvent {

FILE: src/devices/ITouch.cpp
  function eHIDType (line 7) | eHIDType ITouch::getType() {

FILE: src/devices/ITouch.hpp
  class ITouch (line 9) | class ITouch : public IHID {
    type SDownEvent (line 16) | struct SDownEvent {
    type SUpEvent (line 23) | struct SUpEvent {
    type SMotionEvent (line 28) | struct SMotionEvent {
    type SCancelEvent (line 34) | struct SCancelEvent {

FILE: src/devices/Keyboard.hpp
  class CKeyboard (line 5) | class CKeyboard : public IKeyboard {

FILE: src/devices/Mouse.hpp
  class CMouse (line 5) | class CMouse : public IPointer {

FILE: src/devices/Tablet.cpp
  function aqUpdateToHl (line 37) | static uint32_t aqUpdateToHl(uint32_t aq) {
  function eHIDType (line 131) | eHIDType CTablet::getType() {
  function eHIDType (line 143) | eHIDType CTabletPad::getType() {
  function eHIDType (line 205) | eHIDType CTabletTool::getType() {

FILE: src/devices/Tablet.hpp
  class CTabletTool (line 11) | class CTabletTool
    type eTabletToolType (line 175) | enum eTabletToolType : uint8_t {
    type eTabletToolCapabilities (line 186) | enum eTabletToolCapabilities : uint8_t {
  class CTabletPad (line 12) | class CTabletPad
    type SButtonEvent (line 122) | struct SButtonEvent {
    type SRingEvent (line 130) | struct SRingEvent {
    type SStripEvent (line 138) | struct SStripEvent {
  class CWLSurfaceResource (line 13) | class CWLSurfaceResource
  class CTablet (line 20) | class CTablet : public IHID {
    type eTabletToolAxes (line 29) | enum eTabletToolAxes : uint16_t {
    type SAxisEvent (line 41) | struct SAxisEvent {
    type SProximityEvent (line 57) | struct SProximityEvent {
    type STipEvent (line 66) | struct STipEvent {
    type SButtonEvent (line 75) | struct SButtonEvent {
  class CTabletPad (line 113) | class CTabletPad : public IHID {
    type SButtonEvent (line 122) | struct SButtonEvent {
    type SRingEvent (line 130) | struct SRingEvent {
    type SStripEvent (line 138) | struct SStripEvent {
  class CTabletTool (line 170) | class CTabletTool : public IHID {
    type eTabletToolType (line 175) | enum eTabletToolType : uint8_t {
    type eTabletToolCapabilities (line 186) | enum eTabletToolCapabilities : uint8_t {

FILE: src/devices/TouchDevice.hpp
  class CTouchDevice (line 5) | class CTouchDevice : public ITouch {

FILE: src/devices/VirtualKeyboard.cpp
  function wl_client (line 62) | wl_client* CVirtualKeyboard::getClient() {

FILE: src/devices/VirtualKeyboard.hpp
  class CVirtualKeyboardV1Resource (line 5) | class CVirtualKeyboardV1Resource
  class CVirtualKeyboard (line 7) | class CVirtualKeyboard : public IKeyboard {

FILE: src/devices/VirtualPointer.hpp
  class CVirtualPointerV1Resource (line 5) | class CVirtualPointerV1Resource
  class CVirtualPointer (line 7) | class CVirtualPointer : public IPointer {

FILE: src/event/EventBus.hpp
  type Desktop (line 16) | namespace Desktop {
    type eFocusReason (line 17) | enum eFocusReason : uint8_t
  type Event (line 19) | namespace Event {
    type SCallbackInfo (line 20) | struct SCallbackInfo {
    class CEventBus (line 24) | class CEventBus {
      method CEventBus (line 26) | CEventBus()  = default;

FILE: src/helpers/AnimatedVariable.hpp
  type eAVarDamagePolicy (line 9) | enum eAVarDamagePolicy : int8_t {
  type eAnimatedVarType (line 16) | enum eAnimatedVarType : int8_t {
  type STypeToAnimatedVarType_t (line 26) | struct STypeToAnimatedVarType_t {
  type STypeToAnimatedVarType_t<float> (line 31) | struct STypeToAnimatedVarType_t<float> {
  type STypeToAnimatedVarType_t<Vector2D> (line 36) | struct STypeToAnimatedVarType_t<Vector2D> {
  type STypeToAnimatedVarType_t<CHyprColor> (line 41) | struct STypeToAnimatedVarType_t<CHyprColor> {
  type SAnimationContext (line 58) | struct SAnimationContext {

FILE: src/helpers/AsyncDialogBox.cpp
  function onFdWrite (line 48) | static int onFdWrite(int fd, uint32_t mask, void* data) {
  function pid_t (line 155) | pid_t CAsyncDialogBox::getPID() const {

FILE: src/helpers/AsyncDialogBox.hpp
  type wl_event_source (line 13) | struct wl_event_source
  class CAsyncDialogBox (line 15) | class CAsyncDialogBox {
    method CAsyncDialogBox (line 21) | CAsyncDialogBox(const CAsyncDialogBox&)                     = delete;
    method CAsyncDialogBox (line 22) | CAsyncDialogBox(CAsyncDialogBox&&)                          = delete;
    method CAsyncDialogBox (line 23) | CAsyncDialogBox&          operator=(const CAsyncDialogBox&) = delete;
    method CAsyncDialogBox (line 24) | CAsyncDialogBox&          operator=(CAsyncDialogBox&&)      = delete;

FILE: src/helpers/ByteOperations.hpp
  function ULL (line 8) | constexpr ULL operator""_kB(const ULL BYTES) {
  function ULL (line 11) | constexpr ULL operator""_MB(const ULL BYTES) {
  function ULL (line 14) | constexpr ULL operator""_GB(const ULL BYTES) {
  function ULL (line 17) | constexpr ULL operator""_TB(const ULL BYTES) {
  function LD (line 20) | constexpr LD operator""_kB(const LD BYTES) {
  function LD (line 23) | constexpr LD operator""_MB(const LD BYTES) {
  function LD (line 26) | constexpr LD operator""_GB(const LD BYTES) {
  function LD (line 29) | constexpr LD operator""_TB(const LD BYTES) {
  function X (line 38) | constexpr X kBtoBytes(const X kB) {
  function X (line 42) | constexpr X MBtoBytes(const X MB) {
  function X (line 46) | constexpr X GBtoBytes(const X GB) {
  function X (line 50) | constexpr X TBtoBytes(const X TB) {

FILE: src/helpers/CMType.hpp
  type NCMType (line 5) | namespace NCMType {
    type eCMType (line 6) | enum eCMType : uint8_t {

FILE: src/helpers/Color.cpp
  function CHyprColor (line 43) | CHyprColor CHyprColor::stripA() const {
  function CHyprColor (line 47) | CHyprColor CHyprColor::modifyA(float newa) const {

FILE: src/helpers/Color.hpp
  class CHyprColor (line 7) | class CHyprColor {
    method CHyprColor (line 28) | CHyprColor operator-(const CHyprColor& c2) const {
    method CHyprColor (line 33) | CHyprColor operator+(const CHyprColor& c2) const {
    method CHyprColor (line 38) | CHyprColor operator*(const float& c2) const {
  type Colors (line 50) | namespace Colors {

FILE: src/helpers/DamageRing.cpp
  function CRegion (line 32) | CRegion CDamageRing::getBufferDamage(int age) {

FILE: src/helpers/DamageRing.hpp
  class CDamageRing (line 8) | class CDamageRing {

FILE: src/helpers/Drm.hpp
  type DRM (line 3) | namespace DRM {

FILE: src/helpers/Format.cpp
  function SHMFormat (line 226) | SHMFormat NFormatUtils::drmToShm(DRMFormat drm) {
  function DRMFormat (line 236) | DRMFormat NFormatUtils::shmToDRM(SHMFormat shm) {
  function SPixelFormat (line 246) | const SPixelFormat* NFormatUtils::getPixelFormatFromDRM(DRMFormat drm) {
  function SPixelFormat (line 255) | const SPixelFormat* NFormatUtils::getPixelFormatFromGL(uint32_t glFormat...
  function DRMFormat (line 322) | DRMFormat NFormatUtils::alphaFormat(DRMFormat prevFormat) {

FILE: src/helpers/Format.hpp
  type SPixelFormat (line 32) | struct SPixelFormat {
  type NFormatUtils (line 46) | namespace NFormatUtils {

FILE: src/helpers/MainLoopExecutor.cpp
  function onDataRead (line 6) | static int onDataRead(int fd, uint32_t mask, void* data) {

FILE: src/helpers/MainLoopExecutor.hpp
  class CMainLoopExecutor (line 7) | class CMainLoopExecutor {

FILE: src/helpers/MiscFunctions.cpp
  function absolutePath (line 58) | std::string absolutePath(const std::string& rawpath, const std::string& ...
  function escapeJSONStrings (line 82) | std::string escapeJSONStrings(const std::string& str) {
  function getPlusMinusKeywordResult (line 104) | std::optional<float> getPlusMinusKeywordResult(std::string source, float...
  function isDirection (line 113) | bool isDirection(const std::string& arg) {
  function isDirection (line 117) | bool isDirection(const char& arg) {
  function isAutoIDdWorkspace (line 121) | static bool isAutoIDdWorkspace(WORKSPACEID id) {
  function SWorkspaceIDName (line 125) | SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) {
  function cleanCmdForWorkspace (line 471) | std::optional<std::string> cleanCmdForWorkspace(const std::string& inWor...
  function vecToRectDistanceSquared (line 508) | float vecToRectDistanceSquared(const Vector2D& vec, const Vector2D& p1, ...
  function execAndGet (line 515) | std::string execAndGet(const char* cmd) {
  function logSystemInfo (line 524) | void logSystemInfo() {
  function getPPIDof (line 572) | int64_t getPPIDof(int64_t pid) {
  function configStringToInt (line 621) | std::expected<int64_t, std::string> configStringToInt(const std::string&...
  function Vector2D (line 708) | Vector2D configStringToVector2D(const std::string& VALUE) {
  function normalizeAngleRad (line 734) | double normalizeAngleRad(double ang) {
  function getBacktrace (line 750) | std::vector<SCallstackFrameInfo> getBacktrace() {
  function throwError (line 771) | void throwError(const std::string& err) {
  function openExclusiveShm (line 776) | std::pair<CFileDescriptor, std::string> openExclusiveShm() {
  function CFileDescriptor (line 789) | CFileDescriptor allocateSHMFile(size_t len) {
  function allocateSHMFilePair (line 808) | bool allocateSHMFilePair(size_t size, CFileDescriptor& rw_fd_ptr, CFileD...
  function stringToPercentage (line 842) | float stringToPercentage(const std::string& VALUE, const float REL) {
  function isNvidiaDriverVersionAtLeast (line 852) | bool isNvidiaDriverVersionAtLeast(int threshold) {
  function binaryNameForWlClient (line 884) | std::expected<std::string, std::string> binaryNameForWlClient(wl_client*...
  function binaryNameForPid (line 894) | std::expected<std::string, std::string> binaryNameForPid(pid_t pid) {
  function deviceNameToInternalString (line 929) | std::string deviceNameToInternalString(std::string in) {
  function getSystemLibraryVersion (line 940) | std::string getSystemLibraryVersion(const std::string& name) {
  function getBuiltSystemLibraryNames (line 965) | std::string getBuiltSystemLibraryNames() {
  function truthy (line 975) | bool truthy(const std::string& str) {

FILE: src/helpers/MiscFunctions.hpp
  type SCallstackFrameInfo (line 12) | struct SCallstackFrameInfo {
  type SWorkspaceIDName (line 17) | struct SWorkspaceIDName {
  function getFormat (line 51) | [[deprecated("use std::format instead")]] std::string getFormat(std::for...

FILE: src/helpers/Monitor.cpp
  function chooseTF (line 500) | static NColorManagement::eTransferFunction chooseTF(NTransferFunction::e...
  function WORKSPACEID (line 1150) | WORKSPACEID CMonitor::findAvailableDefaultWS() {
  function shouldWraparound (line 1322) | static bool shouldWraparound(const WORKSPACEID id1, const WORKSPACEID id...
  function Vector2D (line 1589) | Vector2D CMonitor::middle() {
  function Mat3x3 (line 1593) | const Mat3x3& CMonitor::getTransformMatrix() {
  function Mat3x3 (line 1597) | const Mat3x3& CMonitor::getScaleMatrix() {
  function WORKSPACEID (line 1609) | WORKSPACEID CMonitor::activeWorkspaceID() {
  function WORKSPACEID (line 1613) | WORKSPACEID CMonitor::activeSpecialWorkspaceID() {
  function CBox (line 1617) | CBox CMonitor::logicalBox() {
  function CBox (line 1621) | CBox CMonitor::logicalBoxMinusReserved() {
  function PHLWINDOW (line 2170) | PHLWINDOW CMonitor::getFullscreenWindow() {
  function resampleInterleavedToKms (line 2263) | static std::vector<uint16_t> resampleInterleavedToKms(const SVCGTTable16...

FILE: src/helpers/Monitor.hpp
  class CMonitorFrameScheduler (line 30) | class CMonitorFrameScheduler
  type eAutoDirs (line 33) | enum eAutoDirs : uint8_t {
  type SMonitorRule (line 45) | struct SMonitorRule {
  class CMonitor (line 77) | class CMonitor
    type eDSBlockReason (line 240) | enum eDSBlockReason : uint16_t {
    type eSolitaryCheck (line 261) | enum eSolitaryCheck : uint32_t {
    type eTearingCheck (line 286) | enum eTearingCheck : uint8_t {
  class CSyncTimeline (line 78) | class CSyncTimeline
  class CEGLSync (line 79) | class CEGLSync
  class CEventLoopTimer (line 80) | class CEventLoopTimer
  class CMonitorState (line 82) | class CMonitorState {
  class CMonitor (line 97) | class CMonitor {
    type eDSBlockReason (line 240) | enum eDSBlockReason : uint16_t {
    type eSolitaryCheck (line 261) | enum eSolitaryCheck : uint32_t {
    type eTearingCheck (line 286) | enum eTearingCheck : uint8_t {

FILE: src/helpers/MonitorFrameScheduler.hpp
  class CEGLSync (line 7) | class CEGLSync
  class CMonitorFrameScheduler (line 9) | class CMonitorFrameScheduler {
    method CMonitorFrameScheduler (line 15) | CMonitorFrameScheduler(const CMonitorFrameScheduler&)            = del...
    method CMonitorFrameScheduler (line 16) | CMonitorFrameScheduler(CMonitorFrameScheduler&&)                 = del...
    method CMonitorFrameScheduler (line 17) | CMonitorFrameScheduler& operator=(const CMonitorFrameScheduler&) = del...
    method CMonitorFrameScheduler (line 18) | CMonitorFrameScheduler& operator=(CMonitorFrameScheduler&&)      = del...

FILE: src/helpers/MonitorZoomController.hpp
  type SRenderData (line 5) | struct SRenderData
  class CMonitorZoomController (line 7) | class CMonitorZoomController {

FILE: src/helpers/SdDaemon.cpp
  type sockaddr_un (line 41) | struct sockaddr_un
  type sockaddr_un (line 50) | struct sockaddr_un

FILE: src/helpers/SdDaemon.hpp
  type NSystemd (line 3) | namespace NSystemd {

FILE: src/helpers/Splashes.hpp
  type NSplashes (line 6) | namespace NSplashes {

FILE: src/helpers/TagKeeper.hpp
  class CTagKeeper (line 6) | class CTagKeeper {

FILE: src/helpers/TransferFunction.cpp
  function eTF (line 14) | eTF                                               NTransferFunction::fro...
  function eTF (line 29) | eTF NTransferFunction::fromConfig(bool useICC) {

FILE: src/helpers/TransferFunction.hpp
  type NTransferFunction (line 6) | namespace NTransferFunction {
    type eTF (line 7) | enum eTF : uint8_t {

FILE: src/helpers/WLClasses.hpp
  class CMonitor (line 12) | class CMonitor
  class IPointer (line 13) | class IPointer
  class IKeyboard (line 14) | class IKeyboard
  class CWLSurfaceResource (line 15) | class CWLSurfaceResource
  type SSwitchDevice (line 19) | struct SSwitchDevice {

FILE: src/helpers/cm/ColorManagement.cpp
  type NColorManagement (line 9) | namespace NColorManagement {
  function SPCPRimaries (line 16) | const SPCPRimaries& NColorManagement::getPrimaries(ePrimaries name) {
  function SPCPRimaries (line 55) | const SPCPRimaries& CPrimaries::value() const {
  function uint (line 59) | uint CPrimaries::id() const {
  function PImageDescription (line 80) | PImageDescription CImageDescription::from(const SImageDescription& image...
  function PImageDescription (line 90) | PImageDescription CImageDescription::from(const uint32_t imageDescriptio...
  function PImageDescription (line 95) | PImageDescription CImageDescription::with(const SImageDescription::SPCLu...
  function SImageDescription (line 101) | const SImageDescription& CImageDescription::value() const {
  function uint (line 105) | uint CImageDescription::id() const {
  function Mat3x3 (line 113) | static Mat3x3 diag3(const std::array<float, 3>& s) {
  function invertMat3 (line 117) | static std::optional<Mat3x3> invertMat3(const Mat3x3& m) {
  function matByVec (line 152) | static std::array<float, 3> matByVec(const Mat3x3& M, const std::array<f...
  function Mat3x3 (line 177) | Mat3x3 NColorManagement::adaptBradford(Hyprgraphics::CColor::xy srcW, Hy...

FILE: src/helpers/cm/ColorManagement.hpp
  class ITexture (line 20) | class ITexture
  type NColorManagement (line 22) | namespace NColorManagement {
    type eNoShader (line 23) | enum eNoShader : uint8_t {
    type ePrimaries (line 30) | enum ePrimaries : uint8_t {
    type eTransferFunction (line 43) | enum eTransferFunction : uint8_t {
    function wpColorManagerV1Primaries (line 61) | inline wpColorManagerV1Primaries convertPrimaries(ePrimaries primaries) {
    function ePrimaries (line 64) | inline ePrimaries convertPrimaries(wpColorManagerV1Primaries primaries) {
    function wpColorManagerV1TransferFunction (line 67) | inline wpColorManagerV1TransferFunction convertTransferFunction(eTrans...
    function eTransferFunction (line 70) | inline eTransferFunction convertTransferFunction(wpColorManagerV1Trans...
    type NColorPrimaries (line 76) | namespace NColorPrimaries {
    type SVCGTTable16 (line 151) | struct SVCGTTable16 {
    class CPrimaries (line 162) | class CPrimaries {
    type SImageDescription (line 182) | struct SImageDescription {
      type SPCLuminances (line 201) | struct SPCLuminances {
      type SPCMasteringLuminances (line 209) | struct SPCMasteringLuminances {
      type SICCData (line 218) | struct SICCData {
      method SPCPRimaries (line 239) | const SPCPRimaries& getPrimaries() const {
      method getTFMinLuminance (line 245) | float getTFMinLuminance(float sdrMinLuminance = -1.0f) const {
      method getTFMaxLuminance (line 264) | float getTFMaxLuminance(int sdrMaxLuminance = -1) const {
      method getTFRefLuminance (line 284) | float getTFRefLuminance(int sdrRefLuminance = -1) const {
    class CImageDescription (line 304) | class CImageDescription {

FILE: src/helpers/cm/ICC.cpp
  function readBinary (line 17) | static std::vector<uint8_t> readBinary(const std::filesystem::path& file) {
  function bigEndianU16 (line 36) | static uint16_t bigEndianU16(const uint8_t* p) {
  function bigEndianU32 (line 40) | static uint32_t bigEndianU32(const uint8_t* p) {
  function cmsTagSignature (line 44) | static constexpr cmsTagSignature makeSig(char a, char b, char c, char d) {
  function readVCGT16 (line 52) | static std::expected<std::optional<SVCGTTable16>, std::string> readVCGT1...
  type CmsProfileDeleter (line 136) | struct CmsProfileDeleter {
  type CmsTransformDeleter (line 142) | struct CmsTransformDeleter {
  function UniqueProfile (line 152) | static UniqueProfile createLinearSRGBProfile() {
  function buildIcc3DLut (line 179) | static std::expected<void, std::string> buildIcc3DLut(cmsHPROFILE profil...

FILE: src/helpers/defer/Promise.hpp
  class CPromise (line 10) | class CPromise
    method CPromise (line 93) | CPromise(const CPromise&)                      = delete;
    method CPromise (line 94) | CPromise(CPromise&&)                           = delete;
    method CPromise (line 95) | CPromise&           operator=(const CPromise&) = delete;
    method CPromise (line 96) | CPromise&           operator=(CPromise&&)      = delete;
    method make (line 98) | static SP<CPromise> make(const std::function<void(SP<CPromiseResolver<...
    method then (line 104) | void then(std::function<void(SP<CPromiseResult<T>>)>&& fn) {
    method CPromise (line 111) | CPromise() = default;
  class CPromiseResult (line 12) | class CPromiseResult
    method hasError (line 57) | bool hasError() {
    method T (line 61) | T result() {
    method error (line 65) | std::string error() {
    method result (line 70) | static SP<CPromiseResult<T>> result(T result) {
    method err (line 76) | static SP<CPromiseResult<T>> err(std::string reason) {
  class CPromiseResolver (line 15) | class CPromiseResolver {
    method CPromiseResolver (line 17) | CPromiseResolver(const CPromiseResolver&)            = delete;
    method CPromiseResolver (line 18) | CPromiseResolver(CPromiseResolver&&)                 = delete;
    method CPromiseResolver (line 19) | CPromiseResolver& operator=(const CPromiseResolver&) = delete;
    method CPromiseResolver (line 20) | CPromiseResolver& operator=(CPromiseResolver&&)      = delete;
    method resolve (line 22) | void              resolve(T value) {
    method reject (line 34) | void reject(const std::string& reason) {
    method CPromiseResolver (line 47) | CPromiseResolver(SP<CPromise<T>> promise) : m_promise(promise) {}
  class CPromiseResult (line 55) | class CPromiseResult {
    method hasError (line 57) | bool hasError() {
    method T (line 61) | T result() {
    method error (line 65) | std::string error() {
    method result (line 70) | static SP<CPromiseResult<T>> result(T result) {
    method err (line 76) | static SP<CPromiseResult<T>> err(std::string reason) {
  class CPromise (line 91) | class CPromise {
    method CPromise (line 93) | CPromise(const CPromise&)                      = delete;
    method CPromise (line 94) | CPromise(CPromise&&)                           = delete;
    method CPromise (line 95) | CPromise&           operator=(const CPromise&) = delete;
    method CPromise (line 96) | CPromise&           operator=(CPromise&&)      = delete;
    method make (line 98) | static SP<CPromise> make(const std::function<void(SP<CPromiseResolver<...
    method then (line 104) | void then(std::function<void(SP<CPromiseResult<T>>)>&& fn) {
    method CPromise (line 111) | CPromise() = default;

FILE: src/helpers/env/Env.hpp
  type Env (line 5) | namespace Env {

FILE: src/helpers/fs/FsUtils.hpp
  type NFsUtils (line 5) | namespace NFsUtils {

FILE: src/helpers/math/Direction.hpp
  type Math (line 5) | namespace Math {
    type eDirection (line 6) | enum eDirection : int8_t {
    function eDirection (line 14) | inline eDirection fromChar(char x) {

FILE: src/helpers/math/Expression.hpp
  type mu (line 7) | namespace mu {
    class Parser (line 8) | class Parser
  type Math (line 11) | namespace Math {
    class CExpression (line 12) | class CExpression {
      method CExpression (line 17) | CExpression(const CExpression&) = delete;
      method CExpression (line 18) | CExpression(CExpression&)       = delete;
      method CExpression (line 19) | CExpression(CExpression&&)      = delete;

FILE: src/helpers/math/Math.cpp
  function eTransform (line 22) | eTransform Math::wlTransformToHyprutils(wl_output_transform t) {
  function wl_output_transform (line 37) | wl_output_transform Math::invertTransform(wl_output_transform tr) {
  function matEq (line 44) | static bool matEq(const Mat3x3& a, const Mat3x3& b) {
  function eTransform (line 53) | static eTransform composeInternal(eTransform a, eTransform b) {
  function eTransform (line 66) | eTransform Math::composeTransform(eTransform a, eTransform b) {

FILE: src/helpers/math/Math.hpp
  type Math (line 12) | namespace Math {

FILE: src/helpers/sync/SyncReleaser.cpp
  type sync_merge_data (line 9) | struct sync_merge_data {
  function CFileDescriptor (line 38) | static CFileDescriptor mergeSyncFds(const CFileDescriptor& fd1, const CF...

FILE: src/helpers/sync/SyncReleaser.hpp
  class CSyncTimeline (line 14) | class CSyncTimeline
  class CSyncReleaser (line 16) | class CSyncReleaser {

FILE: src/helpers/sync/SyncTimeline.cpp
  function CFileDescriptor (line 85) | CFileDescriptor CSyncTimeline::exportAsSyncFileFD(uint64_t src) {

FILE: src/helpers/sync/SyncTimeline.hpp
  type wl_event_source (line 15) | struct wl_event_source
  class CSyncTimeline (line 17) | class CSyncTimeline {
    method CSyncTimeline (line 40) | CSyncTimeline() = default;

FILE: src/helpers/time/Time.cpp
  function s_ns (line 8) | static s_ns timediff(const s_ns& a, const s_ns& b) {
  function s_ns (line 22) | static s_ns timeadd(const s_ns& a, const s_ns& b) {
  function s_ns (line 47) | s_ns Time::secNsec(const steady_tp& tp) {
  function s_ns (line 57) | s_ns Time::secNsec(const system_tp& tp) {
  type timespec (line 105) | struct timespec

FILE: src/helpers/time/Time.hpp
  type Time (line 9) | namespace Time {
    type timespec (line 19) | struct timespec

FILE: src/helpers/time/Timer.hpp
  class CTimer (line 5) | class CTimer {

FILE: src/hyprerror/HyprError.hpp
  class CHyprError (line 9) | class CHyprError {

FILE: src/i18n/Engine.hpp
  type I18n (line 8) | namespace I18n {
    type eI18nKeys (line 10) | enum eI18nKeys : uint8_t {
    class CI18nEngine (line 49) | class CI18nEngine {

FILE: src/init/initHelpers.cpp
  type sched_param (line 10) | struct sched_param
  type sched_param (line 25) | struct sched_param

FILE: src/init/initHelpers.hpp
  type NInit (line 5) | namespace NInit {

FILE: src/layout/LayoutManager.cpp
  function canSnap (line 168) | static inline bool canSnap(const double SIDEA, const double SIDEB, const...
  function snapMove (line 172) | static void snapMove(double& start, double& end, const double P) {
  function snapResize (line 177) | static void snapResize(double& start, double& end, const double P) {
  type SRange (line 202) | struct SRange {

FILE: src/layout/LayoutManager.hpp
  type eFullscreenMode (line 12) | enum eFullscreenMode : int8_t
  type Layout (line 14) | namespace Layout {
    class ITarget (line 15) | class ITarget
    class CSpace (line 16) | class CSpace
    type eRectCorner (line 18) | enum eRectCorner : uint8_t {
    function eRectCorner (line 26) | inline eRectCorner cornerFromBox(const CBox& box, const Vector2D& pos) {
    type eSnapEdge (line 34) | enum eSnapEdge : uint8_t {
    class CLayoutManager (line 42) | class CLayoutManager {

FILE: src/layout/algorithm/Algorithm.hpp
  type Layout (line 12) | namespace Layout {
    class ITarget (line 13) | class ITarget
    class IFloatingAlgorithm (line 14) | class IFloatingAlgorithm
    class ITiledAlgorithm (line 15) | class ITiledAlgorithm
    class CSpace (line 16) | class CSpace
    class CAlgorithm (line 18) | class CAlgorithm {

FILE: src/layout/algorithm/FloatingAlgorithm.hpp
  type Layout (line 8) | namespace Layout {
    class ITarget (line 10) | class ITarget
    class CAlgorithm (line 11) | class CAlgorithm
    class IFloatingAlgorithm (line 13) | class IFloatingAlgorithm : public IModeAlgorithm {
      method IFloatingAlgorithm (line 28) | IFloatingAlgorithm() = default;

FILE: src/layout/algorithm/ModeAlgorithm.hpp
  type Layout (line 11) | namespace Layout {
    class ITarget (line 13) | class ITarget
    class CAlgorithm (line 14) | class CAlgorithm
    class IModeAlgorithm (line 16) | class IModeAlgorithm {
      method IModeAlgorithm (line 51) | IModeAlgorithm() = default;

FILE: src/layout/algorithm/TiledAlgorithm.hpp
  type Layout (line 8) | namespace Layout {
    class ITarget (line 10) | class ITarget
    class CAlgorithm (line 11) | class CAlgorithm
    class ITiledAlgorithm (line 13) | class ITiledAlgorithm : public IModeAlgorithm {
      method ITiledAlgorithm (line 20) | ITiledAlgorithm() = default;

FILE: src/layout/algorithm/floating/default/DefaultFloatingAlgorithm.cpp
  function CBox (line 161) | CBox CDefaultFloatingAlgorithm::fitBoxInWorkArea(const CBox& box, SP<ITa...

FILE: src/layout/algorithm/floating/default/DefaultFloatingAlgorithm.hpp
  type Layout (line 5) | namespace Layout {
    class CAlgorithm (line 6) | class CAlgorithm
  type Layout::Floating (line 9) | namespace Layout::Floating {
    class CDefaultFloatingAlgorithm (line 10) | class CDefaultFloatingAlgorithm : public IFloatingAlgorithm {
      method CDefaultFloatingAlgorithm (line 12) | CDefaultFloatingAlgorithm()          = default;
      type SWindowData (line 34) | struct SWindowData {

FILE: src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp
  type Layout::Tiled::SDwindleNodeData (line 18) | struct Layout::Tiled::SDwindleNodeData {
    method recalcSizePosRecursive (line 35) | void recalcSizePosRecursive(bool force = false, bool horizontalOverrid...

FILE: src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.hpp
  type Layout (line 3) | namespace Layout {
    class CAlgorithm (line 4) | class CAlgorithm
  type Layout::Tiled (line 7) | namespace Layout::Tiled {
    type SDwindleNodeData (line 8) | struct SDwindleNodeData
    class CDwindleAlgorithm (line 10) | class CDwindleAlgorithm : public ITiledAlgorithm {
      method CDwindleAlgorithm (line 12) | CDwindleAlgorithm()          = default;

FILE: src/layout/algorithm/tiled/master/MasterAlgorithm.cpp
  type Layout::Tiled::SMasterNodeData (line 19) | struct Layout::Tiled::SMasterNodeData {
  function eOrientation (line 845) | eOrientation CMasterAlgorithm::defaultOrientation() {
  function eOrientation (line 905) | eOrientation CMasterAlgorithm::getDynamicOrientation() {

FILE: src/layout/algorithm/tiled/master/MasterAlgorithm.hpp
  type Layout (line 5) | namespace Layout {
    class CAlgorithm (line 6) | class CAlgorithm
  type Layout::Tiled (line 9) | namespace Layout::Tiled {
    type SMasterNodeData (line 10) | struct SMasterNodeData
    type eOrientation (line 13) | enum eOrientation : uint8_t {
    type SMasterWorkspaceData (line 21) | struct SMasterWorkspaceData {
    class CMasterAlgorithm (line 33) | class CMasterAlgorithm : public ITiledAlgorithm {
      method CMasterAlgorithm (line 35) | CMasterAlgorithm()          = default;

FILE: src/layout/algorithm/tiled/monocle/MonocleAlgorithm.hpp
  type Layout::Tiled (line 8) | namespace Layout::Tiled {
    type SMonocleTargetData (line 10) | struct SMonocleTargetData {
      method SMonocleTargetData (line 11) | SMonocleTargetData(SP<ITarget> t) : target(t) {
    class CMonocleAlgorithm (line 19) | class CMonocleAlgorithm : public ITiledAlgorithm {

FILE: src/layout/algorithm/tiled/scrolling/ScrollTapeController.cpp
  function eScrollDirection (line 16) | eScrollDirection CScrollTapeController::getDirection() const {
  function SStripData (line 32) | SStripData& CScrollTapeController::getStrip(size_t index) {
  function SStripData (line 36) | const SStripData& CScrollTapeController::getStrip(size_t index) const {
  function Vector2D (line 98) | Vector2D CScrollTapeController::makeVector(double primary, double second...
  function CBox (line 149) | CBox CScrollTapeController::calculateTargetBox(size_t stripIndex, size_t...
  function Vector2D (line 215) | Vector2D CScrollTapeController::getCameraTranslation(const CBox& usableA...

FILE: src/layout/algorithm/tiled/scrolling/ScrollTapeController.hpp
  type Layout::Tiled (line 7) | namespace Layout::Tiled {
    type SColumnData (line 9) | struct SColumnData
    type eScrollDirection (line 11) | enum eScrollDirection : uint8_t {
    type SStripData (line 18) | struct SStripData {
      method SStripData (line 23) | SStripData() = default;
    type STapeLayoutResult (line 26) | struct STapeLayoutResult {
    class CScrollTapeController (line 32) | class CScrollTapeController {

FILE: src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.cpp
  function eScrollDirection (line 1490) | eScrollDirection CScrollingAlgorithm::getDynamicDirection() {
  function CBox (line 1514) | CBox CScrollingAlgorithm::usableArea() {

FILE: src/layout/algorithm/tiled/scrolling/ScrollingAlgorithm.hpp
  type Layout::Tiled (line 10) | namespace Layout::Tiled {
    class CScrollingAlgorithm (line 11) | class CScrollingAlgorithm
      type eInputMode (line 114) | enum eInputMode : uint8_t {
    type SColumnData (line 12) | struct SColumnData
      method SColumnData (line 28) | SColumnData(SP<SScrollingData> data) : scrollingData(data) {
    type SScrollingData (line 13) | struct SScrollingData
    type SScrollingTargetData (line 15) | struct SScrollingTargetData {
      method SScrollingTargetData (line 16) | SScrollingTargetData(SP<ITarget> t, SP<SColumnData> col) : target(t)...
    type SColumnData (line 27) | struct SColumnData {
      method SColumnData (line 28) | SColumnData(SP<SScrollingData> data) : scrollingData(data) {
    type SScrollingData (line 64) | struct SScrollingData {
    class CScrollingAlgorithm (line 92) | class CScrollingAlgorithm : public ITiledAlgorithm {
      type eInputMode (line 114) | enum eInputMode : uint8_t {

FILE: src/layout/space/Space.cpp
  function CBox (line 107) | const CBox& CSpace::workArea(bool floating) const {
  function PHLWORKSPACE (line 111) | PHLWORKSPACE CSpace::workspace() const {
  function CBox (line 125) | CBox CSpace::targetPositionLocal(SP<ITarget> t) const {

FILE: src/layout/space/Space.hpp
  type Layout (line 14) | namespace Layout {
    class ITarget (line 15) | class ITarget
    class CAlgorithm (line 16) | class CAlgorithm
    class CSpace (line 18) | class CSpace {

FILE: src/layout/supplementary/DragController.cpp
  function eMouseBindMode (line 18) | eMouseBindMode CDragStateController::mode() const {

FILE: src/layout/supplementary/DragController.hpp
  type Layout (line 6) | namespace Layout {
    type eRectCorner (line 7) | enum eRectCorner : uint8_t
  type Layout::Supplementary (line 10) | namespace Layout::Supplementary {
    class CDragStateController (line 14) | class CDragStateController {
      method CDragStateController (line 16) | CDragStateController()  = default;

FILE: src/layout/supplementary/WorkspaceAlgoMatcher.hpp
  type Layout (line 10) | namespace Layout {
    class CAlgorithm (line 11) | class CAlgorithm
    class ITiledAlgorithm (line 12) | class ITiledAlgorithm
    class IFloatingAlgorithm (line 13) | class IFloatingAlgorithm
  type Layout::Supplementary (line 16) | namespace Layout::Supplementary {
    class CWorkspaceAlgoMatcher (line 17) | class CWorkspaceAlgoMatcher {

FILE: src/layout/target/Target.cpp
  function PHLWORKSPACE (line 57) | PHLWORKSPACE ITarget::workspace() const {
  function CBox (line 64) | CBox ITarget::position() const {
  function Vector2D (line 72) | Vector2D ITarget::lastFloatingSize() const {
  function Vector2D (line 99) | Vector2D ITarget::pseudoSize() {

FILE: src/layout/target/Target.hpp
  type Layout (line 10) | namespace Layout {
    type eTargetType (line 11) | enum eTargetType : uint8_t {
    type eGeometryFailure (line 16) | enum eGeometryFailure : uint8_t {
    class CSpace (line 21) | class CSpace
    type SGeometryRequested (line 23) | struct SGeometryRequested {
    type STargetBox (line 28) | struct STargetBox {
    class ITarget (line 33) | class ITarget {
      method ITarget (line 74) | ITarget() = default;

FILE: src/layout/target/WindowGroupTarget.cpp
  function eTargetType (line 22) | eTargetType CWindowGroupTarget::type() {
  function PHLWINDOW (line 59) | PHLWINDOW CWindowGroupTarget::window() const {
  function eFullscreenMode (line 63) | eFullscreenMode CWindowGroupTarget::fullscreenMode() {

FILE: src/layout/target/WindowGroupTarget.hpp
  type Layout (line 8) | namespace Layout {
    class CWindowGroupTarget (line 10) | class CWindowGroupTarget : public ITarget {

FILE: src/layout/target/WindowTarget.cpp
  function eTargetType (line 28) | eTargetType CWindowTarget::type() {
  function Vector2D (line 241) | Vector2D CWindowTarget::clampSizeForDesired(const Vector2D& size) const {
  function PHLWINDOW (line 341) | PHLWINDOW CWindowTarget::window() const {
  function eFullscreenMode (line 345) | eFullscreenMode CWindowTarget::fullscreenMode() {

FILE: src/layout/target/WindowTarget.hpp
  type Layout (line 7) | namespace Layout {
    class CWindowTarget (line 9) | class CWindowTarget : public ITarget {

FILE: src/main.cpp
  function help (line 27) | static void help() {
  function reapZombieChildrenAutomatically (line 43) | static void reapZombieChildrenAutomatically() {
  function main (line 54) | int main(int argc, char** argv) {

FILE: src/managers/ANRManager.cpp
  function pid_t (line 249) | pid_t CANRManager::SANRData::getPID() const {

FILE: src/managers/ANRManager.hpp
  class CXDGWMBase (line 13) | class CXDGWMBase
  class CXWaylandSurface (line 14) | class CXWaylandSurface
  class CANRManager (line 16) | class CANRManager {
    type SANRData (line 30) | struct SANRData {

FILE: src/managers/CursorManager.cpp
  function cursorAnimTimer (line 9) | static int cursorAnimTimer(SP<CEventLoopTimer> self, void* data) {
  function hcLogger (line 15) | static void hcLogger(enum eHyprcursorLogLevel level, char* message) {
  function SCursorImageData (line 261) | SCursorImageData CCursorManager::dataFor(const std::string& name) {

FILE: src/managers/CursorManager.hpp
  class CCursorBuffer (line 16) | class CCursorBuffer : public Aquamarine::IBuffer {
  class CCursorManager (line 37) | class CCursorManager {

FILE: src/managers/DonationNagManager.cpp
  type SNagDatePoint (line 21) | struct SNagDatePoint {

FILE: src/managers/DonationNagManager.hpp
  class CDonationNagManager (line 5) | class CDonationNagManager {
    type SStateData (line 13) | struct SStateData {

FILE: src/managers/EventManager.hpp
  type SHyprIPCEvent (line 7) | struct SHyprIPCEvent {
  class CEventManager (line 12) | class CEventManager {
    type SClient (line 28) | struct SClient {

FILE: src/managers/KeybindManager.cpp
  function getHyprlandLaunchEnv (line 59) | static std::vector<std::pair<std::string, std::string>> getHyprlandLaunc...
  function updateRelativeCursorCoords (line 338) | static void updateRelativeCursorCoords() {
  function eMultiKeyCase (line 615) | eMultiKeyCase CKeybindManager::mkKeysymSetMatches(const std::set<xkb_key...
  function eMultiKeyCase (line 634) | eMultiKeyCase CKeybindManager::mkBindMatches(const SP<SKeybind> keybind) {
  function SSubmap (line 641) | SSubmap CKeybindManager::getCurrentSubmap() {
  function SDispatchResult (line 645) | SDispatchResult CKeybindManager::handleKeybinds(const uint32_t modmask, ...
  function SDispatchResult (line 919) | SDispatchResult CKeybindManager::spawn(std::string args) {
  function SDispatchResult (line 962) | SDispatchResult CKeybindManager::spawnRaw(std::string args) {
  function SDispatchResult (line 1011) | SDispatchResult CKeybindManager::killActive(std::string args) {
  function SDispatchResult (line 1024) | SDispatchResult CKeybindManager::closeActive(std::string args) {
  function SDispatchResult (line 1033) | SDispatchResult CKeybindManager::closeWindow(std::string args) {
  function SDispatchResult (line 1049) | SDispatchResult CKeybindManager::killWindow(std::string args) {
  function SDispatchResult (line 1062) | SDispatchResult CKeybindManager::signalActive(std::string args) {
  function SDispatchResult (line 1083) | SDispatchResult CKeybindManager::signalWindow(std::string args) {
  function SDispatchResult (line 1116) | static SDispatchResult toggleActiveFloatingCore(std::string args, std::o...
  function SDispatchResult (line 1146) | SDispatchResult CKeybindManager::toggleActiveFloating(std::string args) {
  function SDispatchResult (line 1150) | SDispatchResult CKeybindManager::setActiveFloating(std::string args) {
  function SDispatchResult (line 1154) | SDispatchResult CKeybindManager::setActiveTiled(std::string args) {
  function SDispatchResult (line 1158) | SDispatchResult CKeybindManager::centerWindow(std::string args) {
  function SDispatchResult (line 1171) | SDispatchResult CKeybindManager::toggleActivePseudo(std::string args) {
  function SWorkspaceIDName (line 1187) | static SWorkspaceIDName getWorkspaceToChangeFromArgs(std::string args, P...
  function SDispatchResult (line 1208) | SDispatchResult CKeybindManager::changeworkspace(std::string args) {
  function SDispatchResult (line 1302) | SDispatchResult CKeybindManager::fullscreenActive(std::string args) {
  function SDispatchResult (line 1326) | SDispatchResult CKeybindManager::fullscreenStateActive(std::string args) {
  function SDispatchResult (line 1366) | SDispatchResult CKeybindManager::moveActiveToWorkspace(std::string args) {
  function SDispatchResult (line 1426) | SDispatchResult CKeybindManager::moveActiveToWorkspaceSilent(std::string...
  function SDispatchResult (line 1472) | SDispatchResult CKeybindManager::moveFocusTo(std::string args) {
  function SDispatchResult (line 1565) | SDispatchResult CKeybindManager::focusUrgentOrLast(std::string args) {
  function SDispatchResult (line 1578) | SDispatchResult CKeybindManager::focusCurrentOrLast(std::string args) {
  function SDispatchResult (line 1594) | SDispatchResult CKeybindManager::swapActive(std::string args) {
  function SDispatchResult (line 1623) | SDispatchResult CKeybindManager::moveActiveTo(std::string args) {
  function SDispatchResult (line 1664) | SDispatchResult CKeybindManager::toggleGroup(std::string args) {
  function SDispatchResult (line 1681) | SDispatchResult CKeybindManager::changeGroupActive(std::string args) {
  function SDispatchResult (line 1714) | SDispatchResult CKeybindManager::focusMonitor(std::string arg) {
  function SDispatchResult (line 1721) | SDispatchResult CKeybindManager::moveCursorToCorner(std::string arg) {
  function SDispatchResult (line 1762) | SDispatchResult CKeybindManager::moveCursor(std::string args) {
  function SDispatchResult (line 1793) | SDispatchResult CKeybindManager::workspaceOpt(std::string args) {
  function SDispatchResult (line 1797) | SDispatchResult CKeybindManager::renameWorkspace(std::string args) {
  function SDispatchResult (line 1819) | SDispatchResult CKeybindManager::exitHyprland(std::string argz) {
  function SDispatchResult (line 1829) | SDispatchResult CKeybindManager::moveCurrentWorkspaceToMonitor(std::stri...
  function SDispatchResult (line 1849) | SDispatchResult CKeybindManager::moveWorkspaceToMonitor(std::string args) {
  function SDispatchResult (line 1882) | SDispatchResult CKeybindManager::focusWorkspaceOnCurrentMonitor(std::str...
  function SDispatchResult (line 1936) | SDispatchResult CKeybindManager::toggleSpecialWorkspace(std::string args) {
  function SDispatchResult (line 1989) | SDispatchResult CKeybindManager::forceRendererReload(std::string args) {
  function SDispatchResult (line 2009) | SDispatchResult CKeybindManager::resizeActive(std::string args) {
  function SDispatchResult (line 2031) | SDispatchResult CKeybindManager::moveActive(std::string args) {
  function SDispatchResult (line 2047) | SDispatchResult CKeybindManager::moveWindow(std::string args) {
  function SDispatchResult (line 2069) | SDispatchResult CKeybindManager::resizeWindow(std::string args) {
  function SDispatchResult (line 2097) | SDispatchResult CKeybindManager::circleNext(std::string arg) {
  function SDispatchResult (line 2147) | SDispatchResult CKeybindManager::focusWindow(std::string regexp) {
  function SDispatchResult (line 2176) | SDispatchResult CKeybindManager::tagWindow(std::string args) {
  function SDispatchResult (line 2195) | SDispatchResult CKeybindManager::toggleSwallow(std::string args) {
  function SDispatchResult (line 2216) | SDispatchResult CKeybindManager::setSubmap(std::string submap) {
  function SDispatchResult (line 2239) | SDispatchResult CKeybindManager::pass(std::string regexp) {
  function SDispatchResult (line 2315) | SDispatchResult CKeybindManager::sendshortcut(std::string args) {
  function SDispatchResult (line 2470) | SDispatchResult CKeybindManager::layoutmsg(std::string msg) {
  function SDispatchResult (line 2477) | SDispatchResult CKeybindManager::dpms(std::string arg) {
  function SDispatchResult (line 2506) | SDispatchResult CKeybindManager::swapnext(std::string arg) {
  function SDispatchResult (line 2536) | SDispatchResult CKeybindManager::swapActiveWorkspaces(std::string args) {
  function SDispatchResult (line 2554) | SDispatchResult CKeybindManager::pinActive(std::string args) {
  function SDispatchResult (line 2597) | SDispatchResult CKeybindManager::mouse(std::string args) {
  function SDispatchResult (line 2618) | SDispatchResult CKeybindManager::changeMouseBindMode(const eMouseBindMod...
  function SDispatchResult (line 2645) | SDispatchResult CKeybindManager::bringActiveToTop(std::string args) {
  function SDispatchResult (line 2654) | SDispatchResult CKeybindManager::alterZOrder(std::string args) {
  function SDispatchResult (line 2681) | SDispatchResult CKeybindManager::lockGroups(std::string args) {
  function SDispatchResult (line 2695) | SDispatchResult CKeybindManager::lockActiveGroup(std::string args) {
  function SDispatchResult (line 2760) | SDispatchResult CKeybindManager::moveIntoGroup(std::string args) {
  function SDispatchResult (line 2793) | SDispatchResult CKeybindManager::moveOutOfGroup(std::string args) {
  function SDispatchResult (line 2817) | SDispatchResult CKeybindManager::moveWindowOrGroup(std::string args) {
  function SDispatchResult (line 2872) | SDispatchResult CKeybindManager::setIgnoreGroupLock(std::string args) {
  function SDispatchResult (line 2885) | SDispatchResult CKeybindManager::denyWindowFromGroup(std::string args) {
  function SDispatchResult (line 2900) | SDispatchResult CKeybindManager::global(std::string args) {
  function SDispatchResult (line 2915) | SDispatchResult CKeybindManager::moveGroupWindow(std::string args) {
  function SDispatchResult (line 2936) | SDispatchResult CKeybindManager::event(std::string args) {
  function parsePropTrivial (line 2945) | static void parsePropTrivial(Desktop::Types::COverridableVar<T>& prop, c...
  function SDispatchResult (line 2977) | SDispatchResult CKeybindManager::setProp(std::string args) {
  function SDispatchResult (line 3146) | SDispatchResult CKeybindManager::forceIdle(std::string args) {
  function SDispatchResult (line 3159) | SDispatchResult CKeybindManager::sendkeystate(std::string args) {

FILE: src/managers/KeybindManager.hpp
  class CInputManager (line 14) | class CInputManager
  class CConfigManager (line 15) | class CConfigManager
  class CPluginSystem (line 16) | class CPluginSystem
  class IKeyboard (line 17) | class IKeyboard
  type eMouseBindMode (line 19) | enum eMouseBindMode : int8_t
  type SSubmap (line 21) | struct SSubmap {
  type SKeybind (line 29) | struct SKeybind {
  type eFocusWindowMode (line 61) | enum eFocusWindowMode : uint8_t {
  type SPressedKeyWithMods (line 72) | struct SPressedKeyWithMods {
  type SParsedKey (line 82) | struct SParsedKey {
  type eMultiKeyCase (line 88) | enum eMultiKeyCase : uint8_t {
  class CKeybindManager (line 94) | class CKeybindManager {

FILE: src/managers/PointerManager.cpp
  function Vector2D (line 97) | Vector2D CPointerManager::position() {
  function Vector2D (line 101) | Vector2D CPointerManager::hotspot() {
  function Vector2D (line 660) | Vector2D CPointerManager::getCursorPosForMonitor(PHLMONITOR pMonitor) {
  function Vector2D (line 668) | Vector2D CPointerManager::transformedHotspot(PHLMONITOR pMonitor) {
  function CBox (line 678) | CBox CPointerManager::getCursorBoxLogicalForMonitor(PHLMONITOR pMonitor) {
  function CBox (line 682) | CBox CPointerManager::getCursorBoxGlobal() {
  function Vector2D (line 686) | Vector2D CPointerManager::closestValid(const Vector2D& pos) {
  function Vector2D (line 1131) | Vector2D CPointerManager::cursorSizeLogical() {

FILE: src/managers/PointerManager.hpp
  class CMonitor (line 13) | class CMonitor
  class IHID (line 14) | class IHID
  class ITexture (line 15) | class ITexture
  class CPointerManager (line 26) | class CPointerManager {
    type SCursorImage (line 72) | struct SCursorImage {
    type SPointerListener (line 111) | struct SPointerListener {
    type STouchListener (line 134) | struct STouchListener {
    type STabletListener (line 146) | struct STabletListener {
    type SMonitorPointerState (line 165) | struct SMonitorPointerState {
      method SMonitorPointerState (line 166) | SMonitorPointerState(const PHLMONITOR& m) : monitor(m) {}

FILE: src/managers/ProtocolManager.hpp
  class CProtocolManager (line 8) | class CProtocolManager {

FILE: src/managers/SeatManager.hpp
  class CWLSurfaceResource (line 12) | class CWLSurfaceResource
  class CWLSeatResource (line 13) | class CWLSeatResource
  class IPointer (line 14) | class IPointer
  class IKeyboard (line 15) | class IKeyboard
  class CSeatGrab (line 28) | class CSeatGrab {
  class CSeatManager (line 45) | class CSeatManager {
    type SSetCursorEvent (line 98) | struct SSetCursorEvent {
    type SSeatResourceContainer (line 131) | struct SSeatResourceContainer {

FILE: src/managers/SessionLockManager.hpp
  class CSessionLockSurface (line 11) | class CSessionLockSurface
  class CSessionLock (line 12) | class CSessionLock
  class CWLSurfaceResource (line 13) | class CWLSurfaceResource
  type SSessionLockSurface (line 15) | struct SSessionLockSurface {
  type SSessionLock (line 31) | struct SSessionLock {
  class CSessionLockManager (line 49) | class CSessionLockManager {

FILE: src/managers/TokenManager.hpp
  class CUUIDToken (line 10) | class CUUIDToken {
  class CTokenManager (line 25) | class CTokenManager {

FILE: src/managers/VersionKeeperManager.hpp
  class CVersionKeeperManager (line 5) | class CVersionKeeperManager {

FILE: src/managers/WelcomeManager.hpp
  class CWelcomeManager (line 5) | class CWelcomeManager {

FILE: src/managers/XCursorManager.hpp
  type SXCursorImage (line 11) | struct SXCursorImage {
  type SXCursors (line 18) | struct SXCursors {
  class CXCursorManager (line 23) | class CXCursorManager {

FILE: src/managers/XWaylandManager.cpp
  function CBox (line 80) | CBox CHyprXWaylandManager::getGeometryForWindow(PHLWINDOW pWindow) {
  function Vector2D (line 176) | Vector2D CHyprXWaylandManager::waylandToXWaylandCoords(const Vector2D& c...
  function Vector2D (line 206) | Vector2D CHyprXWaylandManager::xwaylandToWaylandCoords(const Vector2D& c...

FILE: src/managers/XWaylandManager.hpp
  class CWLSurfaceResource (line 7) | class CWLSurfaceResource
  class CHyprXWaylandManager (line 9) | class CHyprXWaylandManager {

FILE: src/managers/animation/AnimationManager.cpp
  function wlTick (line 19) | static int wlTick(SP<CEventLoopTimer> self, void* data) {
  function updateVariable (line 35) | static void updateVariable(CAnimatedVariable<VarType>& av, const float P...
  function updateColorVariable (line 45) | static void updateColorVariable(CAnimatedVariable<CHyprColor>& av, const...
  function handleUpdate (line 70) | static void handleUpdate(CAnimatedVariable<VarType>& av, bool warp) {

FILE: src/managers/animation/AnimationManager.hpp
  class CHyprAnimationManager (line 12) | class CHyprAnimationManager : public Hyprutils::Animation::CAnimationMan...
    method createAnimation (line 26) | void createAnimation(const VarType& v, PHLANIMVAR<VarType>& pav, SP<SA...
    method createAnimation (line 36) | void createAnimation(const VarType& v, PHLANIMVAR<VarType>& pav, SP<SA...
    method createAnimation (line 41) | void createAnimation(const VarType& v, PHLANIMVAR<VarType>& pav, SP<SA...
    method createAnimation (line 46) | void createAnimation(const VarType& v, PHLANIMVAR<VarType>& pav, SP<SA...

FILE: src/managers/animation/DesktopAnimationManager.hpp
  class CDesktopAnimationManager (line 8) | class CDesktopAnimationManager {
    type eAnimationType (line 10) | enum eAnimationType : uint8_t {

FILE: src/managers/cursor/CursorShapeOverrideController.hpp
  type Cursor (line 9) | namespace Cursor {
    type eCursorShapeOverrideGroup (line 10) | enum eCursorShapeOverrideGroup : uint8_t {
    class CShapeOverrideController (line 24) | class CShapeOverrideController {
      method CShapeOverrideController (line 26) | CShapeOverrideController()  = default;
      method CShapeOverrideController (line 29) | CShapeOverrideController(const CShapeOverrideController&) = delete;
      method CShapeOverrideController (line 30) | CShapeOverrideController(CShapeOverrideController&)       = delete;
      method CShapeOverrideController (line 31) | CShapeOverrideController(CShapeOverrideController&&)      = delete;

FILE: src/managers/eventLoop/EventLoopManager.cpp
  function timerWrite (line 39) | static int timerWrite(int fd, uint32_t mask, void* data) {
  function aquamarineFDWrite (line 51) | static int aquamarineFDWrite(int fd, uint32_t mask, void* data) {
  function configWatcherWrite (line 57) | static int configWatcherWrite(int fd, uint32_t mask, void* data) {
  function handleWaiterFD (line 62) | static int handleWaiterFD(int fd, uint32_t mask, void* data) {
  function timespecAddNs (line 153) | static void timespecAddNs(timespec* pTimespec, int64_t delta) {

FILE: src/managers/eventLoop/EventLoopManager.hpp
  type Aquamarine (line 13) | namespace Aquamarine {
    type SPollFD (line 14) | struct SPollFD
  class CEventLoopManager (line 17) | class CEventLoopManager {
    type SIdleData (line 36) | struct SIdleData {
    type SReadableWaiter (line 41) | struct SReadableWaiter {
      method SReadableWaiter (line 46) | SReadableWaiter(wl_event_source* src, Hyprutils::OS::CFileDescriptor...
      method SReadableWaiter (line 56) | SReadableWaiter(const SReadableWaiter&)            = delete;
      method SReadableWaiter (line 57) | SReadableWaiter& operator=(const SReadableWaiter&) = delete;
      method SReadableWaiter (line 60) | SReadableWaiter(SReadableWaiter&& other) noexcept            = default;
      method SReadableWaiter (line 61) | SReadableWaiter& operator=(SReadableWaiter&& other) noexcept = default;
    type SEventSourceData (line 75) | struct SEventSourceData {

FILE: src/managers/eventLoop/EventLoopTimer.hpp
  class CEventLoopTimer (line 10) | class CEventLoopTimer {

FILE: src/managers/input/InputManager.cpp
  function eClickBehaviorMode (line 734) | eClickBehaviorMode CInputManager::getClickMode() {
  function Vector2D (line 991) | Vector2D CInputManager::getMouseCoordsInternal() {
  type libinput_config_dwt_state (line 1330) | enum libinput_config_dwt_state
  function removeFromHIDs (line 1401) | static void removeFromHIDs(WP<IHID> hid) {

FILE: src/managers/input/InputManager.hpp
  class CPointerConstraint (line 18) | class CPointerConstraint
  class CIdleInhibitor (line 19) | class CIdleInhibitor
  class CVirtualKeyboardV1Resource (line 20) | class CVirtualKeyboardV1Resource
  class CVirtualPointerV1Resource (line 21) | class CVirtualPointerV1Resource
  class IKeyboard (line 22) | class IKeyboard
  type eClickBehaviorMode (line 32) | enum eClickBehaviorMode : uint8_t {
  type eMouseBindMode (line 37) | enum eMouseBindMode : int8_t {
  type eBorderIconDirection (line 45) | enum eBorderIconDirection : uint8_t {
  type STouchData (line 57) | struct STouchData {
  class CKeybindManager (line 83) | class CKeybindManager
  class CInputManager (line 85) | class CInputManager {
    type SIdleInhibitor (line 270) | struct SIdleInhibitor {

FILE: src/managers/input/InputMethodPopup.cpp
  function CBox (line 149) | CBox CInputPopup::globalBox() {

FILE: src/managers/input/InputMethodPopup.hpp
  class CInputMethodPopupV2 (line 8) | class CInputMethodPopupV2
  class CInputPopup (line 10) | class CInputPopup {

FILE: src/managers/input/InputMethodRelay.cpp
  function CTextInput (line 73) | CTextInput* CInputMethodRelay::getFocusedTextInput() {
  function CInputPopup (line 163) | CInputPopup* CInputMethodRelay::popupFromCoords(const Vector2D& point) {
  function CInputPopup (line 172) | CInputPopup* CInputMethodRelay::popupFromSurface(const SP<CWLSurfaceReso...

FILE: src/managers/input/InputMethodRelay.hpp
  class CInputManager (line 11) | class CInputManager
  class IHyprRenderer (line 12) | class IHyprRenderer
  class CTextInputV1 (line 13) | class CTextInputV1
  class CInputMethodV2 (line 14) | class CInputMethodV2
  class CInputMethodRelay (line 16) | class CInputMethodRelay {

FILE: src/managers/input/Tablets.cpp
  function unfocusTool (line 11) | static void unfocusTool(SP<CTabletTool> tool) {
  function focusTool (line 24) | static void focusTool(SP<CTabletTool> tool, SP<CTablet> tablet, SP<CWLSu...
  function refocusTablet (line 40) | static void refocusTablet(SP<CTablet> tab, SP<CTabletTool> tool, bool mo...
  function Vector2D (line 95) | static Vector2D transformToActiveRegion(const Vector2D pos, const CBox a...

FILE: src/managers/input/TextInput.cpp
  function wl_client (line 227) | wl_client* CTextInput::client() {
  function CBox (line 303) | CBox CTextInput::cursorBox() {

FILE: src/managers/input/TextInput.hpp
  type wl_client (line 7) | struct wl_client
  class CTextInputV1 (line 9) | class CTextInputV1
  class CTextInputV3 (line 10) | class CTextInputV3
  class CInputMethodV2 (line 11) | class CInputMethodV2
  class CWLSurfaceResource (line 12) | class CWLSurfaceResource
  class CTextInput (line 14) | class CTextInput {

FILE: src/managers/input/UnifiedWorkspaceSwipeGesture.hpp
  class CUnifiedWorkspaceSwipeGesture (line 6) | class CUnifiedWorkspaceSwipeGesture {

FILE: src/managers/input/trackpad/GestureTypes.hpp
  type eTrackpadGestureDirection (line 5) | enum eTrackpadGestureDirection : uint8_t {

FILE: src/managers/input/trackpad/TrackpadGestures.cpp
  function eTrackpadGestureDirection (line 13) | eTrackpadGestureDirection CTrackpadGestures::dirForString(const std::str...

FILE: src/managers/input/trackpad/TrackpadGestures.hpp
  class CTrackpadGestures (line 11) | class CTrackpadGestures {
    type SGestureData (line 30) | struct SGestureData {

FILE: src/managers/input/trackpad/gestures/CloseGesture.cpp
  function Vector2D (line 17) | static Vector2D lerpVal(const Vector2D& from, const Vector2D& to, const ...
  function lerpVal (line 24) | static float lerpVal(const float& from, const float& to, const float& t) {

FILE: src/managers/input/trackpad/gestures/CloseGesture.hpp
  class CCloseTrackpadGesture (line 7) | class CCloseTrackpadGesture : public ITrackpadGesture {
    method CCloseTrackpadGesture (line 9) | CCloseTrackpadGesture()          = default;

FILE: src/managers/input/trackpad/gestures/CursorZoomGesture.hpp
  class CCursorZoomTrackpadGesture (line 5) | class CCursorZoomTrackpadGesture : public ITrackpadGesture {
    type eMode (line 18) | enum eMode : uint8_t {

FILE: src/managers/input/trackpad/gestures/DispatcherGesture.hpp
  class CDispatcherTrackpadGesture (line 5) | class CDispatcherTrackpadGesture : public ITrackpadGesture {

FILE: src/managers/input/trackpad/gestures/FloatGesture.cpp
  function Vector2D (line 12) | static Vector2D lerpVal(const Vector2D& from, const Vector2D& to, const ...

FILE: src/managers/input/trackpad/gestures/FloatGesture.hpp
  class CFloatTrackpadGesture (line 7) | class CFloatTrackpadGesture : public ITrackpadGesture {
    type eMode (line 23) | enum eMode : uint8_t {

FILE: src/managers/input/trackpad/gestures/FullscreenGesture.cpp
  function Vector2D (line 11) | static Vector2D lerpVal(const Vector2D& from, const Vector2D& to, const ...
  function eFullscreenMode (line 90) | eFullscreenMode CFullscreenTrackpadGesture::fsModeForMode(eMode mode) {

FILE: src/managers/input/trackpad/gestures/FullscreenGesture.hpp
  class CFullscreenTrackpadGesture (line 8) | class CFullscreenTrackpadGesture : public ITrackpadGesture {
    type eMode (line 24) | enum eMode : uint8_t {

FILE: src/managers/input/trackpad/gestures/ITrackpadGesture.hpp
  class ITrackpadGesture (line 6) | class ITrackpadGesture {
    type STrackpadGestureBegin (line 10) | struct STrackpadGestureBegin {
    type STrackpadGestureUpdate (line 18) | struct STrackpadGestureUpdate {
    type STrackpadGestureEnd (line 25) | struct STrackpadGestureEnd {

FILE: src/managers/input/trackpad/gestures/MoveGesture.hpp
  class CMoveTrackpadGesture (line 7) | class CMoveTrackpadGesture : public ITrackpadGesture {
    method CMoveTrackpadGesture (line 9) | CMoveTrackpadGesture()          = default;

FILE: src/managers/input/trackpad/gestures/ResizeGesture.hpp
  class CResizeTrackpadGesture (line 7) | class CResizeTrackpadGesture : public ITrackpadGesture {
    method CResizeTrackpadGesture (line 9) | CResizeTrackpadGesture()          = default;

FILE: src/managers/input/trackpad/gestures/SpecialWorkspaceGesture.cpp
  function Vector2D (line 13) | static Vector2D lerpVal(const Vector2D& from, const Vector2D& to, const ...
  function lerpVal (line 20) | static float lerpVal(const float& from, const float& to, const float& t) {

FILE: src/managers/input/trackpad/gestures/SpecialWorkspaceGesture.hpp
  class CSpecialWorkspaceGesture (line 7) | class CSpecialWorkspaceGesture : public ITrackpadGesture {

FILE: src/managers/input/trackpad/gestures/WorkspaceSwipeGesture.hpp
  class CWorkspaceSwipeGesture (line 6) | class CWorkspaceSwipeGesture : public ITrackpadGesture {
    method CWorkspaceSwipeGesture (line 8) | CWorkspaceSwipeGesture()          = default;

FILE: src/managers/permissions/DynamicPermissionManager.cpp
  function clientDestroyInternal (line 17) | static void clientDestroyInternal(struct wl_listener* listener, void* da...
  function wl_client (line 46) | wl_client* CDynamicPermissionRule::client() const {
  function eDynamicPermissionAllowMode (line 77) | eDynamicPermissionAllowMode CDynamicPermissionManager::clientPermissionM...
  function eDynamicPermissionAllowMode (line 150) | eDynamicPermissionAllowMode CDynamicPermissionManager::clientPermissionM...

FILE: src/managers/permissions/DynamicPermissionManager.hpp
  type re2 (line 12) | namespace re2 {
    class RE2 (line 13) | class RE2
  type eDynamicPermissionType (line 16) | enum eDynamicPermissionType : uint8_t {
  type eDynamicPermissionRuleSource (line 24) | enum eDynamicPermissionRuleSource : uint8_t {
  type eDynamicPermissionAllowMode (line 30) | enum eDynamicPermissionAllowMode : uint8_t {
  type eSpecialPidTypes (line 39) | enum eSpecialPidTypes : int {
  class CDynamicPermissionRule (line 44) | class CDynamicPermissionRule
  type SDynamicPermissionRuleDestroyWrapper (line 46) | struct SDynamicPermissionRuleDestroyWrapper {
  class CDynamicPermissionRule (line 51) | class CDynamicPermissionRule {
  class CDynamicPermissionManager (line 81) | class CDynamicPermissionManager {

FILE: src/managers/screenshare/CursorshareSession.cpp
  function eScreenshareError (line 63) | eScreenshareError CCursorshareSession::share(PHLMONITOR monitor, SP<IHLB...
  function DRMFormat (line 222) | DRMFormat CCursorshareSession::format() const {
  function Vector2D (line 226) | Vector2D CCursorshareSession::bufferSize() const {
  function Vector2D (line 230) | Vector2D CCursorshareSession::hotspot() const {

FILE: src/managers/screenshare/ScreenshareFrame.cpp
  function eScreenshareError (line 62) | eScreenshareError CScreenshareFrame::share(SP<IHLBuffer> buffer, const C...
  function Vector2D (line 466) | Vector2D CScreenshareFrame::bufferSize() const {
  function wl_output_transform (line 470) | wl_output_transform CScreenshareFrame::transform() const {
  function CRegion (line 479) | const CRegion& CScreenshareFrame::damage() const {

FILE: src/managers/screenshare/ScreenshareManager.hpp
  class CWLPointerResource (line 12) | class CWLPointerResource
  type Screenshare (line 14) | namespace Screenshare {
    type eScreenshareType (line 15) | enum eScreenshareType : uint8_t {
    type eScreenshareError (line 22) | enum eScreenshareError : uint8_t {
    type eScreenshareResult (line 31) | enum eScreenshareResult : uint8_t {
    class CScreenshareSession (line 40) | class CScreenshareSession {
      method CScreenshareSession (line 42) | CScreenshareSession(const CScreenshareSession&) = delete;
      method CScreenshareSession (line 43) | CScreenshareSession(CScreenshareSession&&)      = delete;
    class CCursorshareSession (line 99) | class CCursorshareSession {
      method CCursorshareSession (line 101) | CCursorshareSession(const CCursorshareSession&) = delete;
      method CCursorshareSession (line 102) | CCursorshareSession(CCursorshareSession&&)      = delete;
    class CScreenshareFrame (line 154) | class CScreenshareFrame {
      method CScreenshareFrame (line 156) | CScreenshareFrame(const CScreenshareFrame&) = delete;
      method CScreenshareFrame (line 157) | CScreenshareFrame(CScreenshareFrame&&)      = delete;
    class CScreenshareManager (line 195) | class CScreenshareManager {
      type SManagedSession (line 217) | struct SManagedSession {
  type std::formatter<Screenshare::eScreenshareType> (line 241) | struct std::formatter<Screenshare::eScreenshareType> : std::formatter<st...
    method format (line 242) | auto format(const Screenshare::eScreenshareType& res, std::format_cont...

FILE: src/managers/screenshare/ScreenshareSession.cpp
  function Vector2D (line 154) | Vector2D CScreenshareSession::bufferSize() const {
  function PHLMONITOR (line 158) | PHLMONITOR CScreenshareSession::monitor() const {

FILE: src/plugins/HookSystem.cpp
  function CFunctionHook (line 276) | CFunctionHook* CHookSystem::initHook(HANDLE owner, void* source, void* d...
  function seekNewPageAddr (line 289) | static uintptr_t seekNewPageAddr() {

FILE: src/plugins/HookSystem.hpp
  class CFunctionHook (line 12) | class CFunctionHook {
    method CFunctionHook (line 20) | CFunctionHook(const CFunctionHook&)            = delete;
    method CFunctionHook (line 21) | CFunctionHook(CFunctionHook&&)                 = delete;
    method CFunctionHook (line 22) | CFunctionHook& operator=(const CFunctionHook&) = delete;
    method CFunctionHook (line 23) | CFunctionHook& operator=(CFunctionHook&&)      = delete;
    type SInstructionProbe (line 38) | struct SInstructionProbe {
    type SAssembly (line 44) | struct SAssembly {
  class CHookSystem (line 56) | class CHookSystem {
    type SAllocatedPage (line 68) | struct SAllocatedPage {

FILE: src/plugins/PluginAPI.cpp
  function APICALL (line 19) | APICALL const char* __hyprland_api_get_hash() {
  function APICALL (line 34) | APICALL SP<HOOK_CALLBACK_FN> HyprlandAPI::registerCallbackDynamic(HANDLE...
  function APICALL (line 45) | APICALL bool HyprlandAPI::unregisterCallback(HANDLE handle, SP<HOOK_CALL...
  function APICALL (line 57) | APICALL std::string HyprlandAPI::invokeHyprctlCommand(const std::string&...
  function APICALL (line 64) | APICALL bool HyprlandAPI::addLayout(HANDLE handle, const std::string& na...
  function APICALL (line 68) | APICALL bool HyprlandAPI::removeLayout(HANDLE handle, IHyprLayout* layou...
  function APICALL (line 72) | APICALL bool HyprlandAPI::addTiledAlgo(HANDLE handle, const std::string&...
  function APICALL (line 83) | APICALL bool HyprlandAPI::addFloatingAlgo(HANDLE handle, const std::stri...
  function APICALL (line 94) | APICALL bool HyprlandAPI::removeAlgo(HANDLE handle, const std::string& n...
  function APICALL (line 105) | APICALL bool HyprlandAPI::reloadConfig() {
  function APICALL (line 110) | APICALL bool HyprlandAPI::addNotification(HANDLE handle, const std::stri...
  function APICALL (line 121) | APICALL CFunctionHook* HyprlandAPI::createFunctionHook(HANDLE handle, co...
  function APICALL (line 130) | APICALL bool HyprlandAPI::removeFunctionHook(HANDLE handle, CFunctionHoo...
  function APICALL (line 139) | APICALL bool HyprlandAPI::addWindowDecoration(HANDLE handle, PHLWINDOW p...
  function APICALL (line 157) | APICALL bool HyprlandAPI::removeWindowDecoration(HANDLE handle, IHyprWin...
  function APICALL (line 175) | APICALL bool HyprlandAPI::addConfigValue(HANDLE handle, const std::strin...
  function APICALL (line 191) | APICALL bool HyprlandAPI::addConfigKeyword(HANDLE handle, const std::str...
  function APICALL (line 204) | APICALL Hyprlang::CConfigValue* HyprlandAPI::getConfigValue(HANDLE handl...
  function APICALL (line 216) | APICALL void* HyprlandAPI::getFunctionAddressFromSignature(HANDLE handle...
  function APICALL (line 225) | APICALL bool HyprlandAPI::addDispatcher(HANDLE handle, const std::string...
  function APICALL (line 241) | APICALL bool HyprlandAPI::addDispatcherV2(HANDLE handle, const std::stri...
  function APICALL (line 254) | APICALL bool HyprlandAPI::removeDispatcher(HANDLE handle, const std::str...
  function APICALL (line 266) | APICALL bool addNotificationV2(HANDLE handle, const std::unordered_map<s...
  function APICALL (line 314) | APICALL std::vector<SFunctionMatch> HyprlandAPI::findFunctionsByName(HAN...
  function APICALL (line 402) | APICALL SVersionInfo HyprlandAPI::getHyprlandVersion(HANDLE handle) {
  function APICALL (line 411) | APICALL SP<SHyprCtlCommand> HyprlandAPI::registerHyprCtlCommand(HANDLE h...
  function APICALL (line 422) | APICALL bool HyprlandAPI::unregisterHyprCtlCommand(HANDLE handle, SP<SHy...

FILE: src/plugins/PluginAPI.hpp
  type SFunctionMatch (line 42) | struct SFunctionMatch {
  type SVersionInfo (line 48) | struct SVersionInfo {
  class IHyprLayout (line 70) | class IHyprLayout
  class IHyprWindowDecoration (line 71) | class IHyprWindowDecoration
  type SConfigValue (line 72) | struct SConfigValue
  class Hypr_dummyClass (line 73) | class Hypr_dummyClass {}
  type Layout (line 75) | namespace Layout {
    class ITiledAlgorithm (line 76) | class ITiledAlgorithm
    class IFloatingAlgorithm (line 77) | class IFloatingAlgorithm
  type HyprlandAPI (line 122) | namespace HyprlandAPI {
  function APICALL (line 341) | APICALL inline EXPORT const char* __hyprland_api_get_client_hash() {

FILE: src/plugins/PluginSystem.cpp
  function CPlugin (line 241) | CPlugin* CPluginSystem::getPluginByPath(const std::string& path) {
  function CPlugin (line 250) | CPlugin* CPluginSystem::getPluginByHandle(HANDLE handle) {

FILE: src/plugins/PluginSystem.hpp
  class IHyprWindowDecoration (line 11) | class IHyprWindowDecoration
  class CPlugin (line 13) | class CPlugin {
  class CPluginSystem (line 33) | class CPluginSystem {

FILE: src/protocols/AlphaModifier.hpp
  class CWLSurfaceResource (line 9) | class CWLSurfaceResource
  class CAlphaModifierProtocol (line 10) | class CAlphaModifierProtocol
  class CAlphaModifier (line 12) | class CAlphaModifier {
  class CAlphaModifierProtocol (line 34) | class CAlphaModifierProtocol : public IWaylandProtocol {
  type PROTO (line 52) | namespace PROTO {

FILE: src/protocols/CTMControl.hpp
  class CMonitor (line 11) | class CMonitor
  class CHyprlandCTMControlResource (line 13) | class CHyprlandCTMControlResource {
  class CHyprlandCTMControlProtocol (line 28) | class CHyprlandCTMControlProtocol : public IWaylandProtocol {
    type SCTMData (line 45) | struct SCTMData {
  type PROTO (line 55) | namespace PROTO {

FILE: src/protocols/ColorManagement.cpp
  function wl_client (line 186) | wl_client* CColorManager::client() {
  function wl_client (line 228) | wl_client* CColorManagementOutput::client() {
  function wl_client (line 282) | wl_client* CColorManagementSurface::client() {
  function SImageDescription (line 286) | const SImageDescription& CColorManagementSurface::imageDescription() {
  function hdr_output_metadata (line 302) | const hdr_output_metadata& CColorManagementSurface::hdrMetadata() {
  function wl_client (line 410) | wl_client* CColorManagementFeedbackSurface::client() {
  function wl_client (line 466) | wl_client* CColorManagementIccCreator::client() {
  function wl_client (line 676) | wl_client* CColorManagementParametricCreator::client() {
  function wl_client (line 711) | wl_client* CColorManagementImageDescription::client() {
  function wl_client (line 777) | wl_client* CColorManagementImageDescriptionInfo::client() {

FILE: src/protocols/ColorManagement.hpp
  class CColorManager (line 12) | class CColorManager
  class CColorManagementOutput (line 13) | class CColorManagementOutput
  class CColorManagementImageDescription (line 14) | class CColorManagementImageDescription
  class CColorManagementProtocol (line 15) | class CColorManagementProtocol
  class CColorManager (line 17) | class CColorManager {
  class CColorManagementOutput (line 28) | class CColorManagementOutput {
  class CColorManagementSurface (line 47) | class CColorManagementSurface {
  class CColorManagementFeedbackSurface (line 76) | class CColorManagementFeedbackSurface {
  class CColorManagementIccCreator (line 102) | class CColorManagementIccCreator {
    type SIccFile (line 112) | struct SIccFile {
  class CColorManagementParametricCreator (line 126) | class CColorManagementParametricCreator {
    type eValuesSet (line 138) | enum eValuesSet : uint32_t { // NOLINT
  class CColorManagementImageDescription (line 154) | class CColorManagementImageDescription {
  class CColorManagementImageDescriptionInfo (line 174) | class CColorManagementImageDescriptionInfo {
  class CColorManagementProtocol (line 187) | class CColorManagementProtocol : public IWaylandProtocol {
  type PROTO (line 225) | namespace PROTO {

FILE: src/protocols/CommitTiming.hpp
  class CWLSurfaceResource (line 10) | class CWLSurfaceResource
  class CEventLoopTimer (line 11) | class CEventLoopTimer
  class CCommitTimerResource (line 13) | class CCommitTimerResource {
  class CCommitTimingManagerResource (line 31) | class CCommitTimingManagerResource {
  class CCommitTimingProtocol (line 42) | class CCommitTimingProtocol : public IWaylandProtocol {
  type PROTO (line 60) | namespace PROTO {

FILE: src/protocols/ContentType.cpp
  function wl_client (line 64) | wl_client* CContentType::client() {

FILE: src/protocols/ContentType.hpp
  class CContentTypeManager (line 8) | class CContentTypeManager {
  class CContentType (line 18) | class CContentType {
  class CContentTypeProtocol (line 38) | class CContentTypeProtocol : public IWaylandProtocol {
  type PROTO (line 57) | namespace PROTO {

FILE: src/protocols/CursorShape.hpp
  class CCursorShapeProtocol (line 8) | class CCursorShapeProtocol : public IWaylandProtocol {
    type SSetShapeEvent (line 14) | struct SSetShapeEvent {
  type PROTO (line 39) | namespace PROTO {

FILE: src/protocols/DRMLease.hpp
  class CDRMLeaseDeviceResource (line 17) | class CDRMLeaseDeviceResource
  class CMonitor (line 18) | class CMonitor
  class CDRMLeaseProtocol (line 19) | class CDRMLeaseProtocol
  class CDRMLeaseConnectorResource (line 20) | class CDRMLeaseConnectorResource
  class CDRMLeaseRequestResource (line 21) | class CDRMLeaseRequestResource
  class CDRMLeaseResource (line 23) | class CDRMLeaseResource {
  class CDRMLeaseRequestResource (line 42) | class CDRMLeaseRequestResource {
  class CDRMLeaseConnectorResource (line 56) | class CDRMLeaseConnectorResource {
  class CDRMLeaseDeviceResource (line 79) | class CDRMLeaseDeviceResource {
  class CDRMLeaseProtocol (line 97) | class CDRMLeaseProtocol : public IWaylandProtocol {
  type PROTO (line 132) | namespace PROTO {

FILE: src/protocols/DRMSyncobj.cpp
  function CFileDescriptor (line 39) | CFileDescriptor CDRMSyncPointState::exportAsFD() {

FILE: src/protocols/DRMSyncobj.hpp
  class CWLSurfaceResource (line 10) | class CWLSurfaceResource
  class CDRMSyncobjTimelineResource (line 11) | class CDRMSyncobjTimelineResource
  class CSyncTimeline (line 12) | class CSyncTimeline
  class CDRMSyncPointState (line 14) | class CDRMSyncPointState {
    method CDRMSyncPointState (line 16) | CDRMSyncPointState() = default;
  class CDRMSyncobjSurfaceResource (line 40) | class CDRMSyncobjSurfaceResource {
  class CDRMSyncobjTimelineResource (line 58) | class CDRMSyncobjTimelineResource {
  class CDRMSyncobjManagerResource (line 73) | class CDRMSyncobjManagerResource {
  class CDRMSyncobjProtocol (line 84) | class CDRMSyncobjProtocol : public IWaylandProtocol {
  type PROTO (line 109) | namespace PROTO {

FILE: src/protocols/DataDeviceWlr.cpp
  function wl_client (line 152) | wl_client* CWLRDataDevice::client() {

FILE: src/protocols/DataDeviceWlr.hpp
  class CWLRDataControlManagerResource (line 10) | class CWLRDataControlManagerResource
  class CWLRDataSource (line 11) | class CWLRDataSource
  class CWLRDataDevice (line 12) | class CWLRDataDevice
  class CWLRDataOffer (line 13) | class CWLRDataOffer
  class CWLRDataOffer (line 15) | class CWLRDataOffer {
  class CWLRDataSource (line 33) | class CWLRDataSource : public IDataSource {
  class CWLRDataDevice (line 55) | class CWLRDataDevice {
  class CWLRDataControlManagerResource (line 76) | class CWLRDataControlManagerResource {
  class CDataDeviceWLRProtocol (line 89) | class CDataDeviceWLRProtocol : public IWaylandProtocol {
  type PROTO (line 121) | namespace PROTO {

FILE: src/protocols/ExtDataDevice.cpp
  function wl_client (line 152) | wl_client* CExtDataDevice::client() {

FILE: src/protocols/ExtDataDevice.hpp
  class CExtDataControlManagerResource (line 10) | class CExtDataControlManagerResource
  class CExtDataSource (line 11) | class CExtDataSource
  class CExtDataDevice (line 12) | class CExtDataDevice
  class CExtDataOffer (line 13) | class CExtDataOffer
  class CExtDataOffer (line 15) | class CExtDataOffer {
  class CExtDataSource (line 33) | class CExtDataSource : public IDataSource {
  class CExtDataDevice (line 55) | class CExtDataDevice {
  class CExtDataControlManagerResource (line 76) | class CExtDataControlManagerResource {
  class CExtDataDeviceProtocol (line 89) | class CExtDataDeviceProtocol : public IWaylandProtocol {
  type PROTO (line 121) | namespace PROTO {

FILE: src/protocols/ExtWorkspace.hpp
  class CExtWorkspaceManagerResource (line 11) | class CExtWorkspaceManagerResource
  class CExtWorkspaceGroupResource (line 13) | class CExtWorkspaceGroupResource {
  class CExtWorkspaceResource (line 41) | class CExtWorkspaceResource {
  class CExtWorkspaceManagerResource (line 78) | class CExtWorkspaceManagerResource {
  class CExtWorkspaceProtocol (line 99) | class CExtWorkspaceProtocol : public IWaylandProtocol {
  type PROTO (line 117) | namespace PROTO {

FILE: src/protocols/Fifo.hpp
  class CWLSurfaceResource (line 10) | class CWLSurfaceResource
  class CFifoResource (line 12) | class CFifoResource {
  class CFifoManagerResource (line 35) | class CFifoManagerResource {
  class CFifoProtocol (line 46) | class CFifoProtocol : public IWaylandProtocol {
  type PROTO (line 66) | namespace PROTO {

FILE: src/protocols/FocusGrab.hpp
  class CFocusGrab (line 11) | class CFocusGrab
  class CSeatGrab (line 12) | class CSeatGrab
  class CWLSurfaceResource (line 13) | class CWLSurfaceResource
  class CFocusGrabSurfaceState (line 15) | class CFocusGrabSurfaceState {
    type State (line 20) | enum State {
  class CFocusGrab (line 32) | class CFocusGrab {
  class CFocusGrabProtocol (line 59) | class CFocusGrabProtocol : public IWaylandProtocol {
  type PROTO (line 76) | namespace PROTO {

FILE: src/protocols/ForeignToplevel.cpp
  function PHLWINDOW (line 19) | PHLWINDOW CForeignToplevelHandle::window() {
  function PHLWINDOW (line 177) | PHLWINDOW CForeignToplevelProtocol::windowFromHandleResource(wl_resource...

FILE: src/protocols/ForeignToplevel.hpp
  class CForeignToplevelHandle (line 9) | class CForeignToplevelHandle {
  class CForeignToplevelList (line 25) | class CForeignToplevelList {
  class CForeignToplevelProtocol (line 45) | class CForeignToplevelProtocol : public IWaylandProtocol {
  type PROTO (line 65) | namespace PROTO {

FILE: src/protocols/ForeignToplevelWlr.cpp
  function PHLWINDOW (line 142) | PHLWINDOW CForeignToplevelHandleWlr::window() {
  function wl_resource (line 146) | wl_resource* CForeignToplevelHandleWlr::res() {
  function PHLWINDOW (line 420) | PHLWINDOW CForeignToplevelWlrProtocol::windowFromHandleResource(wl_resou...

FILE: src/protocols/ForeignToplevelWlr.hpp
  class CMonitor (line 7) | class CMonitor
  class CForeignToplevelHandleWlr (line 9) | class CForeignToplevelHandleWlr {
  class CForeignToplevelWlrManager (line 29) | class CForeignToplevelWlrManager {
  class CForeignToplevelWlrProtocol (line 53) | class CForeignToplevelWlrProtocol : public IWaylandProtocol {
  type PROTO (line 74) | namespace PROTO {

FILE: src/protocols/FractionalScale.hpp
  class CFractionalScaleProtocol (line 7) | class CFractionalScaleProtocol
  class CWLSurfaceResource (line 8) | class CWLSurfaceResource
  class CFractionalScaleAddon (line 10) | class CFractionalScaleAddon {
  class CFractionalScaleProtocol (line 36) | class CFractionalScaleProtocol : public IWaylandProtocol {
  type PROTO (line 59) | namespace PROTO {

FILE: src/protocols/GammaControl.cpp
  function PHLMONITOR (line 162) | PHLMONITOR CGammaControl::getMonitor() {

FILE: src/protocols/GammaControl.hpp
  class CMonitor (line 9) | class CMonitor
  class CGammaControl (line 11) | class CGammaControl {
  class CGammaControlProtocol (line 35) | class CGammaControlProtocol : public IWaylandProtocol {
  type PROTO (line 55) | namespace PROTO {

FILE: src/protocols/GlobalShortcuts.hpp
  type SShortcut (line 7) | struct SShortcut {
  class CShortcutClient (line 13) | class CShortcutClient {
  class CGlobalShortcutsProtocol (line 26) | class CGlobalShortcutsProtocol : IWaylandProtocol {
  type PROTO (line 41) | namespace PROTO {

FILE: src/protocols/HyprlandSurface.hpp
  class CWLSurfaceResource (line 10) | class CWLSurfaceResource
  class CHyprlandSurfaceProtocol (line 11) | class CHyprlandSurfaceProtocol
  class CHyprlandSurface (line 13) | class CHyprlandSurface {
  class CHyprlandSurfaceProtocol (line 37) | class CHyprlandSurfaceProtocol : public IWaylandProtocol {
  type PROTO (line 54) | namespace PROTO {

FILE: src/protocols/IdleInhibit.hpp
  class CIdleInhibitorResource (line 8) | class CIdleInhibitorResource
  class CWLSurfaceResource (line 9) | class CWLSurfaceResource
  class CIdleInhibitor (line 11) | class CIdleInhibitor {
  class CIdleInhibitorResource (line 23) | class CIdleInhibitorResource {
  class CIdleInhibitProtocol (line 44) | class CIdleInhibitProtocol : public IWaylandProtocol {
  type PROTO (line 67) | namespace PROTO {

FILE: src/protocols/IdleNotify.cpp
  function onTimer (line 4) | static int onTimer(SP<CEventLoopTimer> self, void* data) {

FILE: src/protocols/IdleNotify.hpp
  class CEventLoopTimer (line 8) | class CEventLoopTimer
  class CExtIdleNotification (line 10) | class CExtIdleNotification {
  class CIdleNotifyProtocol (line 35) | class CIdleNotifyProtocol : public IWaylandProtocol {
  type PROTO (line 59) | namespace PROTO {

FILE: src/protocols/ImageCaptureSource.cpp
  function CBox (line 47) | CBox CImageCaptureSource::logicalBox() {

FILE: src/protocols/ImageCaptureSource.hpp
  class CImageCopyCaptureSession (line 10) | class CImageCopyCaptureSession
  class CImageCaptureSource (line 12) | class CImageCaptureSource {
  class COutputImageCaptureSourceProtocol (line 34) | class COutputImageCaptureSourceProtocol : public IWaylandProtocol {
  class CToplevelImageCaptureSourceProtocol (line 41) | class CToplevelImageCaptureSourceProtocol : public IWaylandProtocol {
  class CImageCaptureSourceProtocol (line 48) | class CImageCaptureSourceProtocol {
  type PROTO (line 71) | namespace PROTO {

FILE: src/protocols/ImageCopyCapture.cpp
  type wl_array (line 87) | struct wl_array
  type wl_array (line 299) | struct wl_array

FILE: src/protocols/ImageCopyCapture.hpp
  class IHLBuffer (line 12) | class IHLBuffer
  class CWLPointerResource (line 13) | class CWLPointerResource
  type Screenshare (line 14) | namespace Screenshare {
    class CCursorshareSession (line 15) | class CCursorshareSession
    class CScreenshareSession (line 16) | class CScreenshareSession
    class CScreenshareFrame (line 17) | class CScreenshareFrame
  class CImageCopyCaptureFrame (line 20) | class CImageCopyCaptureFrame {
  class CImageCopyCaptureSession (line 39) | class CImageCopyCaptureSession {
  class CImageCopyCaptureCursorSession (line 70) | class CImageCopyCaptureCursorSession {
  class CImageCopyCaptureProtocol (line 110) | class CImageCopyCaptureProtocol : public IWaylandProtocol {
  type PROTO (line 131) | namespace PROTO {

FILE: src/protocols/InputMethodV2.cpp
  function wl_client (line 79) | wl_client* CInputMethodKeyboardGrabV2::client() {
  function wl_client (line 266) | wl_client* CInputMethodV2::grabClient() {
  function wl_client (line 327) | wl_client* CInputMethodV2::client() {

FILE: src/protocols/InputMethodV2.hpp
  class CInputMethodKeyboardGrabV2 (line 11) | class CInputMethodKeyboardGrabV2
  class CInputMethodPopupV2 (line 12) | class CInputMethodPopupV2
  class IKeyboard (line 13) | class IKeyboard
  class CInputMethodV2 (line 15) | class CInputMethodV2 {
    type SState (line 26) | struct SState {
  class CInputMethodKeyboardGrabV2 (line 83) | class CInputMethodKeyboardGrabV2 {
  class CInputMethodPopupV2 (line 103) | class CInputMethodPopupV2 {
  class CInputMethodV2Protocol (line 132) | class CInputMethodV2Protocol : public IWaylandProtocol {
  type PROTO (line 161) | namespace PROTO {

FILE: src/protocols/LayerShell.hpp
  class CMonitor (line 12) | class CMonitor
  class CXDGPopupResource (line 13) | class CXDGPopupResource
  class CWLSurfaceResource (line 14) | class CWLSurfaceResource
  class CLayerShellResource (line 15) | class CLayerShellResource
    type eCommittedState (line 37) | enum eCommittedState : uint8_t {
    type SState (line 55) | struct SState {
  class CLayerShellRole (line 17) | class CLayerShellRole : public ISurfaceRole {
    method eSurfaceRole (line 21) | virtual eSurfaceRole role() {
  class CLayerShellResource (line 28) | class CLayerShellResource {
    type eCommittedState (line 37) | enum eCommittedState : uint8_t {
    type SState (line 55) | struct SState {
  class CLayerShellProtocol (line 92) | class CLayerShellProtocol : public IWaylandProtocol {
  type PROTO (line 110) | namespace PROTO {

FILE: src/protocols/LinuxDMABUF.cpp
  function devIDFromFD (line 20) | static std::optional<dev_t> devIDFromFD(int fd) {
  type wl_array (line 343) | struct wl_array
  type wl_array (line 364) | struct wl_array
  type wl_array (line 630) | struct wl_array
  function dev_t (line 646) | dev_t CLinuxDMABufV1Protocol::getMainDevice() {

FILE: src/protocols/LinuxDMABUF.hpp
  class CDMABuffer (line 14) | class CDMABuffer
  class CWLSurfaceResource (line 15) | class CWLSurfaceResource
  class CLinuxDMABuffer (line 17) | class CLinuxDMABuffer {
  type SDMABUFFormatTableEntry (line 35) | struct SDMABUFFormatTableEntry {
  type SDMABUFTranche (line 42) | struct SDMABUFTranche {
  class CDMABUFFormatTable (line 49) | class CDMABUFFormatTable {
  class CLinuxDMABUFParamsResource (line 60) | class CLinuxDMABUFParamsResource {
  class CLinuxDMABUFFeedbackResource (line 79) | class CLinuxDMABUFFeedbackResource {
  class CLinuxDMABUFResource (line 97) | class CLinuxDMABUFResource {
  class CLinuxDMABufV1Protocol (line 109) | class CLinuxDMABufV1Protocol : public IWaylandProtocol {
  type PROTO (line 142) | namespace PROTO {

FILE: src/protocols/LockNotify.cpp
  function UNLIKELY (line 65) | UNLIKELY (m_isLocked) {

FILE: src/protocols/LockNotify.hpp
  class CEventLoopTimer (line 9) | class CEventLoopTimer
  class CHyprlandLockNotification (line 11) | class CHyprlandLockNotification {
  class CLockNotifyProtocol (line 25) | class CLockNotifyProtocol : public IWaylandProtocol {
  type PROTO (line 48) | namespace PROTO {

FILE: src/protocols/MesaDRM.hpp
  class CMesaDRMBufferResource (line 10) | class CMesaDRMBufferResource {
  class CMesaDRMResource (line 27) | class CMesaDRMResource {
  class CMesaDRMProtocol (line 37) | class CMesaDRMProtocol : public IWaylandProtocol {
  type PROTO (line 57) | namespace PROTO {

FILE: src/protocols/OutputManagement.cpp
  function PHLMONITOR (line 230) | PHLMONITOR COutputHead::monitor() {

FILE: src/protocols/OutputManagement.hpp
  class CMonitor (line 11) | class CMonitor
  class COutputHead (line 13) | class COutputHead
  class COutputMode (line 14) | class COutputMode
  type SMonitorRule (line 16) | struct SMonitorRule
  type eWlrOutputCommittedProperties (line 18) | enum eWlrOutputCommittedProperties : uint32_t {
  type SWlrManagerOutputState (line 27) | struct SWlrManagerOutputState {
  type SWlrManagerSavedOutputState (line 42) | struct SWlrManagerSavedOutputState {
  class COutputManager (line 53) | class COutputManager {
  class COutputMode (line 76) | class COutputMode {
  class COutputHead (line 92) | class COutputHead {
  class COutputConfigurationHead (line 119) | class COutputConfigurationHead {
  class COutputConfiguration (line 134) | class COutputConfiguration {
  class COutputManagementProtocol (line 152) | class COutputManagementProtocol : public IWaylandProtocol {
  type PROTO (line 190) | namespace PROTO {

FILE: src/protocols/OutputPower.hpp
  class CMonitor (line 9) | class CMonitor
  class COutputPower (line 11) | class COutputPower {
  class COutputPowerProtocol (line 29) | class COutputPowerProtocol : public IWaylandProtocol {
  type PROTO (line 47) | namespace PROTO {

FILE: src/protocols/PointerConstraints.cpp
  function CRegion (line 166) | CRegion CPointerConstraint::logicConstraintRegion() {
  function Vector2D (line 185) | Vector2D CPointerConstraint::logicPositionHint() {

FILE: src/protocols/PointerConstraints.hpp
  class CWLSurfaceResource (line 13) | class CWLSurfaceResource
  class CPointerConstraint (line 15) | class CPointerConstraint {
  class CPointerConstraintsProtocol (line 56) | class CPointerConstraintsProtocol : public IWaylandProtocol {
  type PROTO (line 76) | namespace PROTO {

FILE: src/protocols/PointerGestures.hpp
  class CPointerGestureSwipe (line 8) | class CPointerGestureSwipe {
  class CPointerGesturePinch (line 20) | class CPointerGesturePinch {
  class CPointerGestureHold (line 32) | class CPointerGestureHold {
  class CPointerGesturesProtocol (line 44) | class CPointerGesturesProtocol : public IWaylandProtocol {
  type PROTO (line 81) | namespace PROTO {

FILE: src/protocols/PointerWarp.hpp
  class CPointerWarpProtocol (line 6) | class CPointerWarpProtocol : public IWaylandProtocol {
  type PROTO (line 19) | namespace PROTO {

FILE: src/protocols/PresentationTime.hpp
  class CMonitor (line 10) | class CMonitor
  class CWLSurfaceResource (line 11) | class CWLSurfaceResource
  class CQueuedPresentationData (line 13) | class CQueuedPresentationData {
  class CPresentationFeedback (line 35) | class CPresentationFeedback {
  class CPresentationProtocol (line 51) | class CPresentationProtocol : public IWaylandProtocol {
  type PROTO (line 73) | namespace PROTO {

FILE: src/protocols/PrimarySelection.cpp
  function wl_client (line 144) | wl_client* CPrimarySelectionDevice::client() {

FILE: src/protocols/PrimarySelection.hpp
  class CPrimarySelectionOffer (line 10) | class CPrimarySelectionOffer
  class CPrimarySelectionSource (line 11) | class CPrimarySelectionSource
  class CPrimarySelectionDevice (line 12) | class CPrimarySelectionDevice
  class CPrimarySelectionManager (line 13) | class CPrimarySelectionManager
  class CPrimarySelectionOffer (line 15) | class CPrimarySelectionOffer {
  class CPrimarySelectionSource (line 32) | class CPrimarySelectionSource : public IDataSource {
  class CPrimarySelectionDevice (line 55) | class CPrimarySelectionDevice {
  class CPrimarySelectionManager (line 74) | class CPrimarySelectionManager {
  class CPrimarySelectionProtocol (line 87) | class CPrimarySelectionProtocol : public IWaylandProtocol {
  type PROTO (line 125) | namespace PROTO {

FILE: src/protocols/RelativePointer.cpp
  function wl_client (line 20) | wl_client* CRelativePointer::client() {

FILE: src/protocols/RelativePointer.hpp
  class CRelativePointer (line 9) | class CRelativePointer {
  class CRelativePointerProtocol (line 23) | class CRelativePointerProtocol : public IWaylandProtocol {
  type PROTO (line 43) | namespace PROTO {

FILE: src/protocols/Screencopy.cpp
  function UNLIKELY (line 108) | UNLIKELY (m_buffer) {

FILE: src/protocols/Screencopy.hpp
  class CMonitor (line 12) | class CMonitor
  class IHLBuffer (line 13) | class IHLBuffer
  type Screenshare (line 14) | namespace Screenshare {
    class CScreenshareSession (line 15) | class CScreenshareSession
    class CScreenshareFrame (line 16) | class CScreenshareFrame
  class CScreencopyClient (line 19) | class CScreencopyClient {
  class CScreencopyFrame (line 36) | class CScreencopyFrame {
  class CScreencopyProtocol (line 61) | class CScreencopyProtocol : public IWaylandProtocol {
  type PROTO (line 77) | namespace PROTO {

FILE: src/protocols/SecurityContext.cpp
  function onListenFdEvent (line 6) | static int onListenFdEvent(int fd, uint32_t mask, void* data) {
  function onCloseFdEvent (line 12) | static int onCloseFdEvent(int fd, uint32_t mask, void* data) {
  function onSecurityContextClientDestroy (line 25) | static void onSecurityContextClientDestroy(wl_listener* l, void* d) {
  function UNLIKELY (line 72) | UNLIKELY (m_committed) {
  function UNLIKELY (line 87) | UNLIKELY (m_committed) {
  function UNLIKELY (line 102) | UNLIKELY (m_committed) {

FILE: src/protocols/SecurityContext.hpp
  class CSecurityContext (line 9) | class CSecurityContext {
  class CSecurityContextManagerResource (line 35) | class CSecurityContextManagerResource {
  class CSecurityContextSandboxedClient (line 45) | class CSecurityContextSandboxedClient
  type SCSecurityContextSandboxedClientDestroyWrapper (line 46) | struct SCSecurityContextSandboxedClientDestroyWrapper {
  class CSecurityContextSandboxedClient (line 51) | class CSecurityContextSandboxedClient {
  class CSecurityContextProtocol (line 70) | class CSecurityContextProtocol : public IWaylandProtocol {
  type PROTO (line 93) | namespace PROTO {

FILE: src/protocols/ServerDecorationKDE.hpp
  class CWLSurfaceResource (line 8) | class CWLSurfaceResource
  class CServerDecorationKDE (line 10) | class CServerDecorationKDE {
  class CServerDecorationKDEProtocol (line 31) | class CServerDecorationKDEProtocol : public IWaylandProtocol {
  type PROTO (line 52) | namespace PROTO {

FILE: src/protocols/SessionLock.cpp
  function PHLMONITOR (line 98) | PHLMONITOR CSessionLockSurface::monitor() {

FILE: src/protocols/SessionLock.hpp
  class CMonitor (line 9) | class CMonitor
  class CSessionLock (line 10) | class CSessionLock
  class CWLSurfaceResource (line 11) | class CWLSurfaceResource
  class CSessionLockSurface (line 13) | class CSessionLockSurface {
  class CSessionLock (line 47) | class CSessionLock {
  class CSessionLockProtocol (line 70) | class CSessionLockProtocol : public IWaylandProtocol {
  type PROTO (line 100) | namespace PROTO {

FILE: src/protocols/ShortcutsInhibit.hpp
  class CWLSurfaceResource (line 8) | class CWLSurfaceResource
  class CKeyboardShortcutsInhibitor (line 10) | class CKeyboardShortcutsInhibitor {
  class CKeyboardShortcutsInhibitProtocol (line 23) | class CKeyboardShortcutsInhibitProtocol : public IWaylandProtocol {
  type PROTO (line 43) | namespace PROTO {

FILE: src/protocols/SinglePixel.hpp
  class CSinglePixelBuffer (line 9) | class CSinglePixelBuffer : public IHLBuffer {
  class CSinglePixelBufferResource (line 29) | class CSinglePixelBufferResource {
  class CSinglePixelBufferManagerResource (line 44) | class CSinglePixelBufferManagerResource {
  class CSinglePixelProtocol (line 54) | class CSinglePixelProtocol : public IWaylandProtocol {
  type PROTO (line 72) | namespace PROTO {

FILE: src/protocols/Tablet.hpp
  class CTablet (line 10) | class CTablet
  class CTabletTool (line 11) | class CTabletTool
  class CTabletPad (line 12) | class CTabletPad
  class CEventLoopTimer (line 13) | class CEventLoopTimer
  class CTabletSeat (line 14) | class CTabletSeat
  class CWLSurfaceResource (line 15) | class CWLSurfaceResource
  class CTabletPadStripV2Resource (line 17) | class CTabletPadStripV2Resource {
  class CTabletPadRingV2Resource (line 33) | class CTabletPadRingV2Resource {
  class CTabletPadGroupV2Resource (line 49) | class CTabletPadGroupV2Resource {
  class CTabletPadV2Resource (line 66) | class CTabletPadV2Resource {
  class CTabletV2Resource (line 89) | class CTabletV2Resource {
  class CTabletToolV2Resource (line 108) | class CTabletToolV2Resource {
  class CTabletSeat (line 134) | class CTabletSeat {
  class CTabletV2Protocol (line 156) | class CTabletV2Protocol : public IWaylandProtocol {
  type PROTO (line 232) | namespace PROTO {

FILE: src/protocols/TearingControl.hpp
  class CTearingControlProtocol (line 6) | class CTearingControlProtocol
  class CWLSurfaceResource (line 7) | class CWLSurfaceResource
  class CTearingControl (line 9) | class CTearingControl {
  class CTearingControlProtocol (line 35) | class CTearingControlProtocol : public IWaylandProtocol {
  type PROTO (line 54) | namespace PROTO {

FILE: src/protocols/TextInputV1.cpp
  function wl_client (line 62) | wl_client* CTextInputV1::client() {

FILE: src/protocols/TextInputV1.hpp
  class CTextInput (line 10) | class CTextInput
  class CTextInputV1 (line 12) | class CTextInputV1 {
    type SPendingSurr (line 43) | struct SPendingSurr {
    type SPendingCT (line 50) | struct SPendingCT {
  class CTextInputV1Protocol (line 62) | class CTextInputV1Protocol : public IWaylandProtocol {
  type PROTO (line 81) | namespace PROTO {

FILE: src/protocols/TextInputV3.cpp
  function wl_client (line 104) | wl_client* CTextInputV3::client() {

FILE: src/protocols/TextInputV3.hpp
  class CWLSurfaceResource (line 11) | class CWLSurfaceResource
  class CTextInputV3 (line 13) | class CTextInputV3 {
    type SState (line 37) | struct SState {
  class CTextInputV3Protocol (line 76) | class CTextInputV3Protocol : public IWaylandProtocol {
  type PROTO (line 98) | namespace PROTO {

FILE: src/protocols/ToplevelExport.cpp
  function UNLIKELY (line 102) | UNLIKELY (m_buffer) {

FILE: src/protocols/ToplevelExport.hpp
  class CMonitor (line 12) | class CMonitor
  type Screenshare (line 13) | namespace Screenshare {
    class CScreenshareSession (line 14) | class CScreenshareSession
    class CScreenshareFrame (line 15) | class CScreenshareFrame
  class CToplevelExportClient (line 18) | class CToplevelExportClient {
  class CToplevelExportFrame (line 35) | class CToplevelExportFrame {
  class CToplevelExportProtocol (line 59) | class CToplevelExportProtocol : IWaylandProtocol {
  type PROTO (line 79) | namespace PROTO {

FILE: src/protocols/ToplevelMapping.hpp
  class CToplevelWindowMappingHandle (line 7) | class CToplevelWindowMappingHandle {
  class CToplevelMappingManager (line 18) | class CToplevelMappingManager {
  class CToplevelMappingProtocol (line 28) | class CToplevelMappingProtocol : IWaylandProtocol {
  type PROTO (line 44) | namespace PROTO {

FILE: src/protocols/Viewporter.hpp
  class CWLSurfaceResource (line 9) | class CWLSurfaceResource
  class CViewportResource (line 11) | class CViewportResource {
  class CViewporterResource (line 27) | class CViewporterResource {
  class CViewporterProtocol (line 37) | class CViewporterProtocol : public IWaylandProtocol {
  type PROTO (line 55) | namespace PROTO {

FILE: src/protocols/VirtualKeyboard.cpp
  function virtualKeyboardNameForWlClient (line 11) | static std::string virtualKeyboardNameForWlClient(wl_client* client) {
  function wl_client (line 121) | wl_client* CVirtualKeyboardV1Resource::client() {

FILE: src/protocols/VirtualKeyboard.hpp
  class CVirtualKeyboardV1Resource (line 12) | class CVirtualKeyboardV1Resource {
  class CVirtualKeyboardProtocol (line 40) | class CVirtualKeyboardProtocol : public IWaylandProtocol {
  type PROTO (line 62) | namespace PROTO {

FILE: src/protocols/VirtualPointer.cpp
  function wl_client (line 102) | wl_client* CVirtualPointerV1Resource::client() {

FILE: src/protocols/VirtualPointer.hpp
  class CVirtualPointerV1Resource (line 12) | class CVirtualPointerV1Resource {
  class CVirtualPointerProtocol (line 52) | class CVirtualPointerProtocol : public IWaylandProtocol {
  type PROTO (line 74) | namespace PROTO {

FILE: src/protocols/WaylandProtocol.cpp
  function bindManagerInternal (line 4) | static void bindManagerInternal(wl_client* client, void* data, uint32_t ...
  function displayDestroyInternal (line 8) | static void displayDestroyInternal(struct wl_listener* listener, void* d...
  function wl_global (line 48) | wl_global* IWaylandProtocol::getGlobal() {

FILE: src/protocols/WaylandProtocol.hpp
  class IWaylandProtocol (line 45) | class IWaylandProtocol
  type SIWaylandProtocolDestroyWrapper (line 46) | struct SIWaylandProtocolDestroyWrapper {
  class IWaylandProtocol (line 51) | class IWaylandProtocol {

FILE: src/protocols/XDGActivation.cpp
  function UNLIKELY (line 21) | UNLIKELY (m_committed) {

FILE: src/protocols/XDGActivation.hpp
  class CXDGActivationToken (line 8) | class CXDGActivationToken {
  class CXDGActivationProtocol (line 27) | class CXDGActivationProtocol : public IWaylandProtocol {
    type SSentToken (line 38) | struct SSentToken {
  type PROTO (line 51) | namespace PROTO {

FILE: src/protocols/XDGBell.hpp
  class CXDGSystemBellManagerResource (line 7) | class CXDGSystemBellManagerResource {
  class CXDGSystemBellProtocol (line 17) | class CXDGSystemBellProtocol : public IWaylandProtocol {
  type PROTO (line 32) | namespace PROTO {

FILE: src/protocols/XDGDecoration.cpp
  function zxdgToplevelDecorationV1Mode (line 39) | zxdgToplevelDecorationV1Mode CXDGDecoration::xdgDefaultModeCSD() {
  function zxdgToplevelDecorationV1Mode (line 43) | zxdgToplevelDecorationV1Mode CXDGDecoration::xdgModeOnRequestCSD(uint32_...
  function zxdgToplevelDecorationV1Mode (line 47) | zxdgToplevelDecorationV1Mode CXDGDecoration::xdgModeOnReleaseCSD() {
  function wl_resource (line 55) | wl_resource* CXDGDecoration::toplevelResource() {

FILE: src/protocols/XDGDecoration.hpp
  class CXDGDecoration (line 8) | class CXDGDecoration {
  class CXDGDecorationProtocol (line 27) | class CXDGDecorationProtocol : public IWaylandProtocol {
  type PROTO (line 45) | namespace PROTO {

FILE: src/protocols/XDGDialog.hpp
  class CXDGToplevelResource (line 8) | class CXDGToplevelResource
  class CXDGDialogV1Resource (line 10) | class CXDGDialogV1Resource {
  class CXDGWmDialogManagerResource (line 25) | class CXDGWmDialogManagerResource {
  class CXDGDialogProtocol (line 35) | class CXDGDialogProtocol : public IWaylandProtocol {
  type PROTO (line 54) | namespace PROTO {

FILE: src/protocols/XDGOutput.hpp
  class CMonitor (line 7) | class CMonitor
  class CXDGOutputProtocol (line 8) | class CXDGOutputProtocol
  class CWLOutputProtocol (line 9) | class CWLOutputProtocol
  class CXDGOutput (line 11) | class CXDGOutput {
  class CXDGOutputProtocol (line 28) | class CXDGOutputProtocol : public IWaylandProtocol {
  type PROTO (line 47) | namespace PROTO {

FILE: src/protocols/XDGShell.cpp
  function Vector2D (line 90) | Vector2D CXDGPopupResource::accumulateParentOffset() {
  function Vector2D (line 373) | Vector2D CXDGToplevelResource::layoutMinSize() {
  function Vector2D (line 382) | Vector2D CXDGToplevelResource::layoutMaxSize() {
  function onConfigure (line 537) | static void onConfigure(void* data) {
  function CBox (line 608) | CBox CXDGPositionerRules::getPosition(CBox constraint, const Vector2D& p...
  function wl_client (line 799) | wl_client* CXDGWMBase::client() {

FILE: src/protocols/XDGShell.hpp
  class CXDGWMBase (line 13) | class CXDGWMBase
  class CXDGPositionerResource (line 14) | class CXDGPositionerResource
  class CXDGSurfaceResource (line 15) | class CXDGSurfaceResource
  class CXDGToplevelResource (line 16) | class CXDGToplevelResource
  class CXDGPopupResource (line 17) | class CXDGPopupResource
  class CSeatGrab (line 18) | class CSeatGrab
  class CWLSurfaceResource (line 19) | class CWLSurfaceResource
  class CXDGDialogV1Resource (line 20) | class CXDGDialogV1Resource
  type SXDGPositionerState (line 22) | struct SXDGPositionerState {
  class CXDGPositionerRules (line 36) | class CXDGPositionerRules {
  class CXDGPopupResource (line 46) | class CXDGPopupResource {
  class CXDGToplevelResource (line 87) | class CXDGToplevelResource {
  class CXDGSurfaceRole (line 156) | class CXDGSurfaceRole : public ISurfaceRole {
    method eSurfaceRole (line 160) | virtual eSurfaceRole role() {
  class CXDGSurfaceResource (line 167) | class CXDGSurfaceResource {
  class CXDGPositionerResource (line 224) | class CXDGPositionerResource {
  class CXDGWMBase (line 241) | class CXDGWMBase {
  class CXDGShellProtocol (line 263) | class CXDGShellProtocol : public IWaylandProtocol {
  type PROTO (line 298) | namespace PROTO {

FILE: src/protocols/XDGTag.hpp
  class CXDGToplevelResource (line 7) | class CXDGToplevelResource
  class CXDGToplevelTagManagerResource (line 9) | class CXDGToplevelTagManagerResource {
  class CXDGToplevelTagProtocol (line 19) | class CXDGToplevelTagProtocol : public IWaylandProtocol {
  type PROTO (line 34) | namespace PROTO {

FILE: src/protocols/XWaylandShell.cpp
  function wl_client (line 34) | wl_client* CXWaylandSurfaceResource::client() {

FILE: src/protocols/XWaylandShell.hpp
  class CWLSurfaceResource (line 9) | class CWLSurfaceResource
  class CXWaylandSurfaceResource (line 11) | class CXWaylandSurfaceResource {
  class CXWaylandShellResource (line 33) | class CXWaylandShellResource {
  class CXWaylandShellProtocol (line 43) | class CXWaylandShellProtocol : public IWaylandProtocol {
  type PROTO (line 65) | namespace PROTO {

FILE: src/protocols/core/Compositor.cpp
  class CDefaultSurfaceRole (line 23) | class CDefaultSurfaceRole : public ISurfaceRole {
    method eSurfaceRole (line 25) | virtual eSurfaceRole role() {
  function wl_client (line 270) | wl_client* CWLSurfaceResource::client() {
  function CBox (line 488) | CBox CWLSurfaceResource::extends() {
  function PImageDescription (line 579) | PImageDescription CWLSurfaceResource::getPreferredImageDescription() {

FILE: src/protocols/core/Compositor.hpp
  class CWLOutputResource (line 27) | class CWLOutputResource
  class CMonitor (line 28) | class CMonitor
  class CWLSurfaceResource (line 29) | class CWLSurfaceResource
  class CWLSubsurfaceResource (line 30) | class CWLSubsurfaceResource
  class CViewportResource (line 31) | class CViewportResource
  class CDRMSyncobjSurfaceResource (line 32) | class CDRMSyncobjSurfaceResource
  class CFifoResource (line 33) | class CFifoResource
  class CCommitTimerResource (line 34) | class CCommitTimerResource
  class CColorManagementSurface (line 35) | class CColorManagementSurface
  class CContentType (line 36) | class CContentType
  class CWLCallbackResource (line 38) | class CWLCallbackResource {
    method CWLCallbackResource (line 43) | CWLCallbackResource(const CWLCallbackResource&)            = delete;
    method CWLCallbackResource (line 44) | CWLCallbackResource& operator=(const CWLCallbackResource&) = delete;
    method CWLCallbackResource (line 47) | CWLCallbackResource(CWLCallbackResource&&) noexcept            = default;
    method CWLCallbackResource (line 48) | CWLCallbackResource& operator=(CWLCallbackResource&&) noexcept = default;
  class CWLRegionResource (line 57) | class CWLRegionResource {
  class CWLSurfaceResource (line 71) | class CWLSurfaceResource {
  class CWLCompositorResource (line 152) | class CWLCompositorResource {
  class CWLCompositorProtocol (line 162) | class CWLCompositorProtocol : public IWaylandProtocol {
  type PROTO (line 190) | namespace PROTO {

FILE: src/protocols/core/DataDevice.cpp
  function eDataSourceType (line 115) | eDataSourceType CWLDataOfferResource::type() {
  function eDataSourceType (line 235) | eDataSourceType CWLDataSourceResource::type() {
  function wl_client (line 286) | wl_client* CWLDataDeviceResource::client() {
  function eDataSourceType (line 330) | eDataSourceType CWLDataDeviceResource::type() {

FILE: src/protocols/core/DataDevice.hpp
  class CWLDataDeviceResource (line 22) | class CWLDataDeviceResource
  class CWLDataDeviceManagerResource (line 23) | class CWLDataDeviceManagerResource
  class CWLDataSourceResource (line 24) | class CWLDataSourceResource
  class CWLDataOfferResource (line 25) | class CWLDataOfferResource
  class CWLSurfaceResource (line 27) | class CWLSurfaceResource
  class CMonitor (line 28) | class CMonitor
  class CWLDataOfferResource (line 30) | class CWLDataOfferResource : public IDataOffer {
  class CWLDataSourceResource (line 56) | class CWLDataSourceResource : public IDataSource {
  class CWLDataDeviceResource (line 94) | class CWLDataDeviceResource : public IDataDevice {
  class CWLDataDeviceManagerResource (line 122) | class CWLDataDeviceManagerResource {
  class CWLDataDeviceProtocol (line 135) | class CWLDataDeviceProtocol : public IWaylandProtocol {
  type PROTO (line 211) | namespace PROTO {

FILE: src/protocols/core/Output.cpp
  function wl_client (line 62) | wl_client* CWLOutputResource::client() {

FILE: src/protocols/core/Output.hpp
  class CMonitor (line 9) | class CMonitor
  class CWLOutputProtocol (line 10) | class CWLOutputProtocol
  class CWLOutputResource (line 12) | class CWLOutputResource {
  class CWLOutputProtocol (line 33) | class CWLOutputProtocol : public IWaylandProtocol {
  type PROTO (line 68) | namespace PROTO {

FILE: src/protocols/core/Seat.cpp
  function Vector2D (line 310) | Vector2D CWLPointerResource::fixPosWithWlFixed(const Vector2D& pos) {
  function wl_client (line 519) | wl_client* CWLSeatResource::client() {

FILE: src/protocols/core/Seat.hpp
  class IKeyboard (line 23) | class IKeyboard
  class CWLSurfaceResource (line 24) | class CWLSurfaceResource
  class CWLPointerResource (line 26) | class CWLPointerResource
  class CWLKeyboardResource (line 27) | class CWLKeyboardResource
  class CWLTouchResource (line 28) | class CWLTouchResource
  class CWLSeatResource (line 29) | class CWLSeatResource
  class CCursorSurfaceRole (line 31) | class CCursorSurfaceRole : public ISurfaceRole {
    method eSurfaceRole (line 33) | virtual eSurfaceRole role() {
  class CWLTouchResource (line 45) | class CWLTouchResource {
  class CWLPointerResource (line 71) | class CWLPointerResource {
  class CWLKeyboardResource (line 115) | class CWLKeyboardResource {
  class CWLSeatResource (line 142) | class CWLSeatResource {
  class CWLSeatProtocol (line 167) | class CWLSeatProtocol : public IWaylandProtocol {
  type PROTO (line 205) | namespace PROTO {

FILE: src/protocols/core/Shm.cpp
  function shmIsSizeValid (line 100) | static int shmIsSizeValid(CFileDescriptor& fd, size_t size) {

FILE: src/protocols/core/Shm.hpp
  class CWLSHMPoolResource (line 19) | class CWLSHMPoolResource
  class CSHMPool (line 21) | class CSHMPool {
    method CSHMPool (line 23) | CSHMPool() = delete;
  class CWLSHMBuffer (line 34) | class CWLSHMBuffer : public IHLBuffer {
  class CWLSHMPoolResource (line 60) | class CWLSHMPoolResource {
  class CWLSHMResource (line 76) | class CWLSHMResource {
  class CWLSHMProtocol (line 86) | class CWLSHMProtocol : public IWaylandProtocol {
  type PROTO (line 110) | namespace PROTO {

FILE: src/protocols/core/Subcompositor.cpp
  function Vector2D (line 108) | Vector2D CWLSubsurfaceResource::posRelativeToParent() {

FILE: src/protocols/core/Subcompositor.hpp
  class CWLSurfaceResource (line 17) | class CWLSurfaceResource
  class CWLSubsurfaceResource (line 18) | class CWLSubsurfaceResource
  class CSubsurfaceRole (line 20) | class CSubsurfaceRole : public ISurfaceRole {
    method eSurfaceRole (line 24) | virtual eSurfaceRole role() {
  class CWLSubsurfaceResource (line 31) | class CWLSubsurfaceResource {
  class CWLSubcompositorResource (line 64) | class CWLSubcompositorResource {
  class CWLSubcompositorProtocol (line 74) | class CWLSubcompositorProtocol : public IWaylandProtocol {
  type PROTO (line 92) | namespace PROTO {

FILE: src/protocols/types/Buffer.cpp
  function CHLBufferReference (line 76) | CHLBufferReference& CHLBufferReference::operator=(const CHLBufferReferen...
  function CHLBufferReference (line 88) | CHLBufferReference& CHLBufferReference::operator=(CHLBufferReference&& o...

FILE: src/protocols/types/Buffer.hpp
  class CSyncReleaser (line 10) | class CSyncReleaser
  class CHLBufferReference (line 11) | class CHLBufferReference
  class IHLBuffer (line 13) | class IHLBuffer : public Aquamarine::IBuffer {
  class CHLBufferReference (line 48) | class CHLBufferReference {

FILE: src/protocols/types/ContentType.cpp
  type NContentType (line 7) | namespace NContentType {
    function eContentType (line 11) | eContentType fromString(const std::string name) {
    function toString (line 26) | std::string toString(eContentType type) {
    function eContentType (line 34) | eContentType fromWP(wpContentTypeV1Type contentType) {
    function toDRM (line 44) | uint16_t toDRM(eContentType contentType) {

FILE: src/protocols/types/ContentType.hpp
  type NContentType (line 6) | namespace NContentType {
    type eContentType (line 8) | enum eContentType : uint8_t {

FILE: src/protocols/types/DMABuffer.cpp
  function doIoctl (line 93) | static int doIoctl(int fd, unsigned long request, void* arg) {
  function CFileDescriptor (line 104) | CFileDescriptor CDMABuffer::exportSyncFile() {

FILE: src/protocols/types/DMABuffer.hpp
  class CDMABuffer (line 6) | class CDMABuffer : public IHLBuffer {

FILE: src/protocols/types/DataDevice.cpp
  function eDataSourceType (line 19) | eDataSourceType IDataSource::type() {

FILE: src/protocols/types/DataDevice.hpp
  class CWLDataOfferResource (line 12) | class CWLDataOfferResource
  class CX11DataOffer (line 13) | class CX11DataOffer
  class CX11DataDevice (line 14) | class CX11DataDevice
  class CWLDataDeviceResource (line 15) | class CWLDataDeviceResource
  class CWLSurfaceResource (line 16) | class CWLSurfaceResource
  type eDataSourceType (line 18) | enum eDataSourceType : uint8_t {
  class IDataSource (line 23) | class IDataSource {
    method IDataSource (line 25) | IDataSource()          = default;
  class IDataOffer (line 51) | class IDataOffer {
    method IDataOffer (line 53) | IDataOffer()          = default;
  class IDataDevice (line 63) | class IDataDevice {
    method IDataDevice (line 65) | IDataDevice()          = default;

FILE: src/protocols/types/SurfaceRole.hpp
  type eSurfaceRole (line 3) | enum eSurfaceRole : uint8_t {
  class ISurfaceRole (line 12) | class ISurfaceRole {

FILE: src/protocols/types/SurfaceState.cpp
  function Vector2D (line 7) | Vector2D SSurfaceState::sourceSize() {
  function CRegion (line 18) | CRegion SSurfaceState::accumulateBufferDamage() {

FILE: src/protocols/types/SurfaceState.hpp
  class ITexture (line 9) | class ITexture
  class CDRMSyncPointState (line 10) | class CDRMSyncPointState
  class CWLCallbackResource (line 11) | class CWLCallbackResource
  type eLockReason (line 13) | enum eLockReason : uint8_t {
  function eLockReason (line 20) | inline eLockReason operator|(eLockReason a, eLockReason b) {
  function eLockReason (line 23) | inline eLockReason operator&(eLockReason a, eLockReason b) {
  function eLockReason (line 26) | inline eLockReason& operator|=(eLockReason& a, eLockReason b) {
  function eLockReason (line 30) | inline eLockReason& operator&=(eLockReason& a, eLockReason b) {
  function eLockReason (line 34) | inline eLockReason operator~(eLockReason a) {
  type SSurfaceState (line 38) | struct SSurfaceState {

FILE: src/protocols/types/SurfaceStateQueue.hpp
  class CWLSurfaceResource (line 7) | class CWLSurfaceResource
  class CSurfaceStateQueue (line 9) | class CSurfaceStateQueue {
    method CSurfaceStateQueue (line 11) | CSurfaceStateQueue() = default;

FILE: src/protocols/types/WLBuffer.cpp
  function wl_resource (line 34) | wl_resource* CWLBufferResource::getResource() {

FILE: src/protocols/types/WLBuffer.hpp
  class IHLBuffer (line 9) | class IHLBuffer
  class CWLSurfaceResource (line 10) | class CWLSurfaceResource
  class CWLBufferResource (line 12) | class CWLBufferResource {

FILE: src/render/Framebuffer.hpp
  class CHLBufferReference (line 9) | class CHLBufferReference
  class IFramebuffer (line 11) | class IFramebuffer {
    method IFramebuffer (line 13) | IFramebuffer() = default;

FILE: src/render/GLRenderer.hpp
  class CHyprGLRenderer (line 5) | class CHyprGLRenderer : public IHyprRenderer {

FILE: src/render/OpenGL.cpp
  function loadGLProc (line 64) | static inline void loadGLProc(void* pProc, const char* name) {
  function eglLogToLevel (line 73) | static enum Hyprutils::CLI::eLogLevel eglLogToLevel(EGLint type) {
  function eglLog (line 105) | static void eglLog(EGLenum error, const char* command, EGLint type, EGLL...
  function openRenderNode (line 109) | static int openRenderNode(int drmFd) {
  function drmDeviceHasName (line 225) | static bool drmDeviceHasName(const drmDevice* device, const std::string&...
  function EGLDeviceEXT (line 236) | EGLDeviceEXT CHyprOpenGLImpl::eglDeviceFromDRMFD(int drmFD) {
  function EGLImageKHR (line 593) | EGLImageKHR CHyprOpenGLImpl::createEGLImage(const Aquamarine::SDMABUFAtt...
  function LIKELY (line 760) | LIKELY (m_offloadedFramebuffer) {
  function isSDR2HDR (line 1135) | static bool isSDR2HDR(const NColorManagement::SImageDescription& imageDe...
  function isHDR2SDR (line 1143) | static bool isHDR2SDR(const NColorManagement::SImageDescription& imageDe...
  function CFileDescriptor (line 2507) | CFileDescriptor& CEGLSync::fd() {
  function CFileDescriptor (line 2511) | CFileDescriptor&& CEGLSync::takeFd() {

FILE: src/render/OpenGL.hpp
  type gbm_device (line 42) | struct gbm_device
  class IHyprRenderer (line 43) | class IHyprRenderer
  type SVertex (line 45) | struct SVertex {
  type SRenderModifData (line 59) | struct SRenderModifData {
    type eRenderModifType (line 60) | enum eRenderModifType : uint8_t {
  type eMonitorRenderFBs (line 77) | enum eMonitorRenderFBs : uint8_t {
  type eMonitorExtraRenderFBs (line 83) | enum eMonitorExtraRenderFBs : uint8_t {
  type SFragShaderDesc (line 92) | struct SFragShaderDesc {
  type SPreparedShaders (line 97) | struct SPreparedShaders {
  type SCurrentRenderData (line 111) | struct SCurrentRenderData {
  class CEGLSync (line 147) | class CEGLSync {
    method CEGLSync (line 158) | CEGLSync() = default;
  class CGradientValueData (line 167) | class CGradientValueData
  class CHyprOpenGLImpl (line 169) | class CHyprOpenGLImpl {
    type SRectRenderData (line 174) | struct SRectRenderData {
    type STextureRenderData (line 183) | struct STextureRenderData {
    type SBorderRenderData (line 213) | struct SBorderRenderData {
    type eEGLContextVersion (line 305) | enum eEGLContextVersion : uint8_t {
    type eCachedCapStatus (line 313) | enum eCachedCapStatus : uint8_t {

FILE: src/render/Renderbuffer.hpp
  class IRenderbuffer (line 8) | class IRenderbuffer {

FILE: src/render/Renderer.cpp
  function cursorTicker (line 73) | static int cursorTicker(void* data) {
  function getSurfaceExpectedSize (line 1895) | static std::optional<Vector2D> getSurfaceExpectedSize(PHLWINDOW pWindow,...
  function Mat3x3 (line 2105) | static Mat3x3 getMirrorProjection(PHLMONITORREF monitor) {
  function Mat3x3 (line 2113) | static Mat3x3 getFBProjection(PHLMONITORREF pMonitor, const Vector2D& si...
  function Mat3x3 (line 2137) | Mat3x3 IHyprRenderer::getBoxProjection(const CBox& box, std::optional<eT...
  function Mat3x3 (line 2143) | Mat3x3 IHyprRenderer::projectBoxToTarget(const CBox& box, std::optional<...
  function isSDR2HDR (line 2184) | static bool isSDR2HDR(const NColorManagement::SImageDescription& imageDe...
  function isHDR2SDR (line 2192) | static bool isHDR2SDR(const NColorManagement::SImageDescription& imageDe...
  function SCMSettings (line 2200) | SCMSettings IHyprRenderer::getCMSettings(const NColorManagement::PImageD...
  function hdr_output_metadata (line 2541) | static hdr_output_metadata       createHDRMetadata(SImageDescription set...
  function applyExclusive (line 2760) | static void applyExclusive(CBox& usableArea, uint32_t anchor, int32_t ex...
  function handleCrashLoop (line 3235) | static int handleCrashLoop(void* data) {
  function SRenderData (line 3266) | const SRenderData& IHyprRenderer::renderData() {

FILE: src/render/Renderer.hpp
  type SMonitorRule (line 30) | struct SMonitorRule
  class CWorkspace (line 31) | class CWorkspace
  class CInputPopup (line 32) | class CInputPopup
  class IHLBuffer (line 33) | class IHLBuffer
  class CEventLoopTimer (line 34) | class CEventLoopTimer
  class CRenderPass (line 35) | class CRenderPass
  class CToplevelExportProtocolManager (line 44) | class CToplevelExportProtocolManager
  class CInputManager (line 45) | class CInputManager
  type SSessionLockSurface (line 46) | struct SSessionLockSurface
  type Screenshare (line 47) | namespace Screenshare {
    class CScreenshareFrame (line 48) | class CScreenshareFrame
  type eDamageTrackingModes (line 51) | enum eDamageTrackingModes : int8_t {
  type eRenderPassMode (line 58) | enum eRenderPassMode : uint8_t {
  type eRenderMode (line 64) | enum eRenderMode : uint8_t {
  type SRenderWorkspaceUntilData (line 71) | struct SRenderWorkspaceUntilData {
  type eRenderProjectionType (line 76) | enum eRenderProjectionType : uint8_t {
  type SRenderData (line 83) | struct SRenderData {
  type STFRange (line 120) | struct STFRange {
  type SCMSettings (line 125) | struct SCMSettings {
  class IHyprRenderer (line 143) | class IHyprRenderer {
    method beginRenderInternal (line 279) | virtual bool beginRenderInternal(PHLMONITOR pMonitor, CRegion& damage,...
    method beginFullFakeRenderInternal (line 282) | virtual bool beginFullFakeRenderInternal(PHLMONITOR pMonitor, CRegion&...
    method initRenderBuffer (line 286) | virtual bool initRenderBuffer(SP<Aquamarine::IBuffer> buffer, uint32_t...

FILE: src/render/Shader.cpp
  function compareFloat (line 7) | static bool compareFloat(auto a, auto b) {
  function GLuint (line 48) | GLuint CShader::compileShader(const GLuint& type, std::string src, bool ...
  function GLint (line 409) | GLint CShader::getUniformLocation(eShaderUniform location) const {
  function GLuint (line 413) | GLuint CShader::program() const {

FILE: src/render/Shader.hpp
  type eShaderUniform (line 7) | enum eShaderUniform : uint8_t {
  class CShader (line 86) | class CShader {
    type SUniformMatrix3Data (line 113) | struct SUniformMatrix3Data {
    type SUniformMatrix4Data (line 119) | struct SUniformMatrix4Data {
    type SUniformVData (line 125) | struct SUniformVData {

FILE: src/render/ShaderLoader.hpp
  type Render (line 10) | namespace Render {
    type ePreparedFragmentShaderFeature (line 11) | enum ePreparedFragmentShaderFeature : uint16_t {
    type ePreparedFragmentShader (line 29) | enum ePreparedFragmentShader : uint8_t {
    class CShaderLoader (line 46) | class CShaderLoader {

FILE: src/render/Texture.hpp
  class IHLBuffer (line 8) | class IHLBuffer
  type eTextureType (line 11) | enum eTextureType : int8_t {
  class ITexture (line 19) | class ITexture {
    method ITexture (line 21) | ITexture(ITexture&)        = delete;
    method ITexture (line 22) | ITexture(ITexture&&)       = delete;
    method ITexture (line 23) | ITexture(const ITexture&&) = delete;
    method ITexture (line 24) | ITexture(const ITexture&)  = delete;
    method ITexture (line 52) | ITexture() = default;

FILE: src/render/Transformer.hpp
  class IWindowTransformer (line 11) | class IWindowTransformer {

FILE: src/render/decorations/CHyprBorderDecoration.cpp
  function SDecorationPositioningInfo (line 12) | SDecorationPositioningInfo CHyprBorderDecoration::getPositioningInfo() {
  function CBox (line 34) | CBox CHyprBorderDecoration::assignedBoxGlobal() {
  function eDecorationType (line 99) | eDecorationType CHyprBorderDecoration::getDecorationType() {
  function eDecorationLayer (line 139) | eDecorationLayer CHyprBorderDecoration::getDecorationLayer() {

FILE: src/render/decorations/CHyprBorderDecoration.hpp
  class CHyprBorderDecoration (line 5) | class CHyprBorderDecoration : public IHyprWindowDecoration {

FILE: src/render/decorations/CHyprDropShadowDecoration.cpp
  function eDecorationType (line 13) | eDecorationType CHyprDropShadowDecoration::getDecorationType() {
  function SDecorationPositioningInfo (line 17) | SDecorationPositioningInfo CHyprDropShadowDecoration::getPositioningInfo...
  function SShadowRenderData (line 121) | SShadowRenderData CHyprDropShadowDecoration::getRenderData(PHLMONITOR pM...
  function eDecorationLayer (line 291) | eDecorationLayer CHyprDropShadowDecoration::getDecorationLayer() {

FILE: src/render/decorations/CHyprDropShadowDecoration.hpp
  type SShadowRenderData (line 5) | struct SShadowRenderData {
  class CHyprDropShadowDecoration (line 16) | class CHyprDropShadowDecoration : public IHyprWindowDecoration {

FILE: src/render/decorations/CHyprGroupBarDecoration.cpp
  function SDecorationPositioningInfo (line 40) | SDecorationPositioningInfo CHyprGroupBarDecoration::getPositioningInfo() {
  function eDecorationType (line 72) | eDecorationType CHyprGroupBarDecoration::getDecorationType() {
  function CTitleTex (line 276) | CTitleTex* CHyprGroupBarDecoration::textureFromTitle(const std::string& ...
  function renderGradientTo (line 319) | static void renderGradientTo(SP<ITexture> tex, CGradientValueData* grad) {
  function refreshGroupBarGradients (line 358) | void refreshGroupBarGradients() {
  function eDecorationLayer (line 512) | eDecorationLayer CHyprGroupBarDecoration::getDecorationLayer() {
  function CBox (line 524) | CBox CHyprGroupBarDecoration::assignedBoxGlobal() {

FILE: src/render/decorations/CHyprGroupBarDecoration.hpp
  class CTitleTex (line 10) | class CTitleTex {
  class CHyprGroupBarDecoration (line 26) | class CHyprGroupBarDecoration : public IHyprWindowDecoration {
    type STitleTexs (line 74) | struct STitleTexs {

FILE: src/render/decorations/DecorationPositioner.cpp
  function Vector2D (line 11) | Vector2D CDecorationPositioner::getEdgeDefinedPoint(uint32_t edges, PHLW...
  function SBoxExtents (line 287) | SBoxExtents CDecorationPositioner::getWindowDecorationReserved(PHLWINDOW...
  function SBoxExtents (line 294) | SBoxExtents CDecorationPositioner::getWindowDecorationExtents(PHLWINDOWR...
  function CBox (line 343) | CBox CDecorationPositioner::getBoxWithIncludedDecos(PHLWINDOW pWindow) {
  function CBox (line 381) | CBox CDecorationPositioner::getWindowDecorationBox(IHyprWindowDecoration...

FILE: src/render/decorations/DecorationPositioner.hpp
  class IHyprWindowDecoration (line 9) | class IHyprWindowDecoration
  type eDecorationPositioningPolicy (line 11) | enum eDecorationPositioningPolicy : uint8_t {
  type eDecorationEdges (line 16) | enum eDecorationEdges : uint8_t {
  type SDecorationPositioningInfo (line 35) | struct SDecorationPositioningInfo {
  type SDecorationPositioningReply (line 52) | struct SDecorationPositioningReply {
  class CDecorationPositioner (line 57) | class CDecorationPositioner {
    type SWindowPositioningData (line 74) | struct SWindowPositioningData {
    type SWindowData (line 82) | struct SWindowData {

FILE: src/render/decorations/IHyprWindowDecoration.cpp
  function eDecorationLayer (line 11) | eDecorationLayer IHyprWindowDecoration::getDecorationLayer() {

FILE: src/render/decorations/IHyprWindowDecoration.hpp
  type eDecorationType (line 8) | enum eDecorationType : int8_t {
  type eDecorationLayer (line 16) | enum eDecorationLayer : uint8_t {
  type eDecorationFlags (line 23) | enum eDecorationFlags : uint8_t {
  class CMonitor (line 29) | class CMonitor
  class CDecorationPositioner (line 30) | class CDecorationPositioner
  class IHyprWindowDecoration (line 32) | class IHyprWindowDecoration {

FILE: src/render/gl/GLFramebuffer.cpp
  function GLuint (line 162) | GLuint CGLFramebuffer::getFBID() {

FILE: src/render/gl/GLFramebuffer.hpp
  class CGLFramebuffer (line 8) | class CGLFramebuffer : public IFramebuffer {

FILE: src/render/gl/GLRenderbuffer.hpp
  class CMonitor (line 7) | class CMonitor
  class CGLRenderbuffer (line 9) | class CGLRenderbuffer : public IRenderbuffer {

FILE: src/render/gl/GLTexture.hpp
  class CGLTexture (line 7) | class CGLTexture : public ITexture {
    method CGLTexture (line 11) | CGLTexture(CGLTexture&)        = delete;
    method CGLTexture (line 12) | CGLTexture(CGLTexture&&)       = delete;
    method CGLTexture (line 13) | CGLTexture(const CGLTexture&&) = delete;
    method CGLTexture (line 14) | CGLTexture(const CGLTexture&)  = delete;
    type eTextureParam (line 33) | enum eTextureParam : uint8_t {

FILE: src/render/pass/BorderPassElement.hpp
  class CGradientValueData (line 5) | class CGradientValueData
  class CBorderPassElement (line 7) | class CBorderPassElement : public IPassElement {
    type SBorderData (line 9) | struct SBorderData {
    method ePassElementType (line 29) | virtual ePassElementType type() {

FILE: src/render/pass/ClearPassElement.cpp
  function CRegion (line 19) | CRegion CClearPassElement::opaqueRegion() {

FILE: src/render/pass/ClearPassElement.hpp
  class CClearPassElement (line 4) | class CClearPassElement : public IPassElement {
    type SClearData (line 6) | struct SClearData {
    method ePassElementType (line 22) | virtual ePassElementType type() {

FILE: src/render/pass/FramebufferElement.hpp
  class CFramebufferElement (line 4) | class CFramebufferElement : public IPassElement {
    type SFramebufferElementData (line 6) | struct SFramebufferElementData {
    method ePassElementType (line 22) | virtual ePassElementType type() {

FILE: src/render/pass/Pass.cpp
  function CRegion (line 121) | CRegion CRenderPass::render(const CRegion& damage_) {

FILE: src/render/pass/Pass.hpp
  class CGradientValueData (line 6) | class CGradientValueData
  class ITexture (line 7) | class ITexture
  class CRenderPass (line 9) | class CRenderPass {
    type SPassElementData (line 25) | struct SPassElementData {

FILE: src/render/pass/PassElement.cpp
  function CRegion (line 7) | CRegion IPassElement::opaqueRegion() {

FILE: src/render/pass/PassElement.hpp
  type ePassElementType (line 5) | enum ePassElementType : uint8_t {
  class IPassElement (line 19) | class IPassElement {

FILE: src/render/pass/PreBlurElement.hpp
  class CPreBlurElement (line 4) | class CPreBlurElement : public IPassElement {
    method ePassElementType (line 18) | virtual ePassElementType type() {

FILE: src/render/pass/RectPassElement.cpp
  function CRegion (line 20) | CRegion CRectPassElement::opaqueRegion() {

FILE: src/render/pass/RectPassElement.hpp
  class CRectPassElement (line 5) | class CRectPassElement : public IPassElement {
    type SRectData (line 7) | struct SRectData {
    method ePassElementType (line 35) | virtual ePassElementType type() {

FILE: src/render/pass/RendererHintsPassElement.hpp
  class CRendererHintsPassElement (line 6) | class CRendererHintsPassElement : public IPassElement {
    type SData (line 8) | struct SData {
    method ePassElementType (line 23) | virtual ePassElementType type() {

FILE: src/render/pass/ShadowPassElement.hpp
  class CHyprDropShadowDecoration (line 4) | class CHyprDropShadowDecoration
  class CShadowPassElement (line 6) | class CShadowPassElement : public IPassElement {
    type SShadowData (line 8) | struct SShadowData {
    method ePassElementType (line 23) | virtual ePassElementType type() {

FILE: src/render/pass/SurfacePassElement.cpp
  function CBox (line 20) | CBox CSurfacePassElement::getTexBox() {
  function CRegion (line 113) | CRegion CSurfacePassElement::opaqueRegion() {
  function CRegion (line 131) | CRegion CSurfacePassElement::visibleRegion(bool& cancel) {

FILE: src/render/pass/SurfacePassElement.hpp
  class CWLSurfaceResource (line 7) | class CWLSurfaceResource
  class ITexture (line 8) | class ITexture
  class CSyncTimeline (line 9) | class CSyncTimeline
  class CSurfacePassElement (line 11) | class CSurfacePassElement : public IPassElement {
    type SRenderData (line 13) | struct SRenderData {
    method ePassElementType (line 67) | virtual ePassElementType type() {

FILE: src/render/pass/TexPassElement.cpp
  function CRegion (line 24) | CRegion CTexPassElement::opaqueRegion() {

FILE: src/render/pass/TexPassElement.hpp
  class CWLSurfaceResource (line 5) | class CWLSurfaceResource
  class ITexture (line 6) | class ITexture
  class CSyncTimeline (line 7) | class CSyncTimeline
  type eDiscardMode (line 9) | enum eDiscardMode : uint8_t {
  class CTexPassElement (line 14) | class CTexPassElement : public IPassElement {
    type SRenderData (line 16) | struct SRenderData {
    method ePassElementType (line 61) | virtual ePassElementType type() {

FILE: src/render/pass/TextureMatteElement.hpp
  class ITexture (line 5) | class ITexture
  class CTextureMatteElement (line 7) | class CTextureMatteElement : public IPassElement {
    type STextureMatteData (line 9) | struct STextureMatteData {
    method ePassElementType (line 26) | virtual ePassElementType type() {

FILE: src/xwayland/Dnd.cpp
  function xcb_atom_t (line 18) | static xcb_atom_t dndActionToAtom(uint32_t actions) {
  function xcb_window_t (line 43) | xcb_window_t CX11DataDevice::getProxyWindow(xcb_window_t window) {
  function eDataSourceType (line 75) | eDataSourceType CX11DataOffer::type() {
  function eDataSourceType (line 221) | eDataSourceType CX11DataDevice::type() {
  function eDataSourceType (line 272) | eDataSourceType CX11DataSource::type() {

FILE: src/xwayland/Dnd.hpp
  class CXWaylandSurface (line 14) | class CXWaylandSurface
  class CX11DataOffer (line 16) | class CX11DataOffer : public IDataOffer {
    method CX11DataOffer (line 18) | CX11DataOffer()  = default;
  class CX11DataSource (line 32) | class CX11DataSource : public IDataSource {
    method CX11DataSource (line 34) | CX11DataSource()  = default;
  class CX11DataDevice (line 58) | class CX11DataDevice : public IDataDevice {
    method CX11DataDevice (line 60) | CX11DataDevice() = default;

FILE: src/xwayland/Server.cpp
  function CFileDescriptor (line 36) | static CFileDescriptor createSocket(struct sockaddr_un* addr, size_t pat...
  function checkPermissionsForSocketDir (line 82) | static bool checkPermissionsForSocketDir() {
  function ensureSocketDirExis
Condensed preview — 704 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,867K chars).
[
  {
    "path": ".clang-format",
    "chars": 1806,
    "preview": "---\nLanguage: Cpp\nBasedOnStyle: LLVM\n\nAccessModifierOffset: -2\nAlignAfterOpenBracket: Align\nAlignConsecutiveMacros: true"
  },
  {
    "path": ".clang-format-ignore",
    "chars": 17,
    "preview": "subprojects/**/*\n"
  },
  {
    "path": ".clang-tidy",
    "chars": 7571,
    "preview": "WarningsAsErrors: >\n  -*,\n  bugprone-*,\n  -bugprone-multi-level-implicit-pointer-conversion,\n  -bugprone-empty-catch,\n  "
  },
  {
    "path": ".gitattributes",
    "chars": 66,
    "preview": "# Auto detect text files and perform LF normalization\n* text=auto\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 13,
    "preview": "ko_fi: vaxry\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug.yml",
    "chars": 409,
    "preview": "name: Do not open issues, go to discussions please!\ndescription: Do not open an issue\nbody:\n  - type: checkboxes\n    att"
  },
  {
    "path": ".github/actions/setup_base/action.yml",
    "chars": 3842,
    "preview": "name: \"Setup base\"\n\ninputs:\n  INSTALL_XORG_PKGS:\n    description: 'Install xorg dependencies'\n    required: false\n    de"
  },
  {
    "path": ".github/labeler.yml",
    "chars": 1618,
    "preview": "assets:\n  - changed-files:\n      - any-glob-to-any-file: \"assets/**\"\n\ndocs:\n  - changed-files:\n      - any-glob-to-any-f"
  },
  {
    "path": ".github/pull_request_template.md",
    "chars": 514,
    "preview": "<!--\nBEFORE you submit your PR, please check out the PR guidelines\non our wiki: https://wiki.hyprland.org/Contributing-a"
  },
  {
    "path": ".github/workflows/ci.yaml",
    "chars": 2630,
    "preview": "name: Build Hyprland\n\non: [push, pull_request, workflow_dispatch]\njobs:\n  gcc:\n    if: github.event_name != 'pull_reques"
  },
  {
    "path": ".github/workflows/clang-format-check.sh",
    "chars": 2944,
    "preview": "#!/usr/bin/env bash\n#\n# Adapted from https://github.com/jidicula/clang-format-action\n\n##################################"
  },
  {
    "path": ".github/workflows/clang-format.yml",
    "chars": 946,
    "preview": "name: clang-format\non: pull_request_target\njobs:\n  clang-format:\n    permissions: write-all\n    if: github.event_name !="
  },
  {
    "path": ".github/workflows/close-issues.yml",
    "chars": 4068,
    "preview": "name: Close Unauthorized Issues\n\non:\n  workflow_dispatch:\n  issues:\n    types: [opened]\n\njobs:\n  close-unauthorized-issu"
  },
  {
    "path": ".github/workflows/labeler.yml",
    "chars": 211,
    "preview": "name: \"Pull Request Labeler\"\non:\n  - pull_request_target\n\njobs:\n  labeler:\n    permissions:\n      contents: read\n      p"
  },
  {
    "path": ".github/workflows/man-update.yaml",
    "chars": 540,
    "preview": "name: Build man pages\n\non:\n  workflow_dispatch:\n  push:\n    paths:\n      - docs/**\n    branches:\n      - 'main'\n\njobs:\n "
  },
  {
    "path": ".github/workflows/new-pr-comment.yml",
    "chars": 1505,
    "preview": "name: \"New MR welcome comment\"\n\non:\n  pull_request_target:\n    types:\n      - opened\n\njobs:\n  comment:\n    if: >\n      g"
  },
  {
    "path": ".github/workflows/nix-ci.yml",
    "chars": 1055,
    "preview": "name: Nix\n\non: [push, pull_request, workflow_dispatch]\n\njobs:\n  update-inputs:\n    if: (github.event_name == 'push' || g"
  },
  {
    "path": ".github/workflows/nix-test.yml",
    "chars": 1414,
    "preview": "name: Nix (Test)\n\non:\n  workflow_call:\n    secrets:\n      CACHIX_AUTH_TOKEN:\n        required: false\n\njobs:\n  build:\n   "
  },
  {
    "path": ".github/workflows/nix-update-inputs.yml",
    "chars": 1250,
    "preview": "name: Nix (Update Inputs)\n\non:\n  workflow_call:\n    secrets:\n      PAT:\n        required: true\n\njobs:\n  update:\n    if: "
  },
  {
    "path": ".github/workflows/nix.yml",
    "chars": 1142,
    "preview": "name: Build\n\non:\n  workflow_call:\n    inputs:\n      command:\n        required: true\n        type: string\n        descrip"
  },
  {
    "path": ".github/workflows/release.yaml",
    "chars": 2109,
    "preview": "name: Release artifacts\n\non:\n  release:\n    types: [published]\n  workflow_dispatch:\n\njobs:\n  source-tarball:\n    runs-on"
  },
  {
    "path": ".github/workflows/security-checks.yml",
    "chars": 779,
    "preview": "name: Security Checks\n\non: [push, pull_request]\n\njobs:\n  flawfinder:\n    if: github.event_name != 'pull_request' || gith"
  },
  {
    "path": ".github/workflows/translation-ai-check.yml",
    "chars": 5820,
    "preview": "name: AI Translation Check\n\non:\n  # pull_request_target:\n  #   types:\n  #     - opened\n  issue_comment:\n    types:\n     "
  },
  {
    "path": ".gitignore",
    "chars": 616,
    "preview": "CMakeLists.txt.user\nCMakeCache.txt\nCMakeFiles\nCMakeScripts\nTesting\ncmake_install.cmake\ninstall_manifest.txt\ncompile_comm"
  },
  {
    "path": ".gitmodules",
    "chars": 346,
    "preview": "[submodule \"subprojects/hyprland-protocols\"]\n\tpath = subprojects/hyprland-protocols\n\turl = https://github.com/hyprwm/hyp"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 22856,
    "preview": "cmake_minimum_required(VERSION 3.30)\n\n# Get version\nfile(READ \"${CMAKE_SOURCE_DIR}/VERSION\" VER_RAW)\nstring(STRIP ${VER_"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3357,
    "preview": "## Goal\n\nOur goal is to provide a space where it is safe for everyone to contribute to,\nand get support for, open-source"
  },
  {
    "path": "LICENSE",
    "chars": 1521,
    "preview": "BSD 3-Clause License\n\nCopyright (c) 2022-2026, vaxerski\nAll rights reserved.\n\nRedistribution and use in source and binar"
  },
  {
    "path": "Makefile",
    "chars": 3804,
    "preview": "PREFIX = /usr/local\n\nstub:\n\t@echo \"Do not run $(MAKE) directly without any arguments. Please refer to the wiki on how to"
  },
  {
    "path": "README.md",
    "chars": 4130,
    "preview": "<div align = center>\n\n<img src=\"https://raw.githubusercontent.com/hyprwm/Hyprland/main/assets/header.svg\" width=\"750\" he"
  },
  {
    "path": "SECURITY.md",
    "chars": 1134,
    "preview": "# Hyprland Development Security Policy\n\nIf you have a bug that affects the security of your system, you may\nwant to priv"
  },
  {
    "path": "VERSION",
    "chars": 7,
    "preview": "0.54.0\n"
  },
  {
    "path": "assets/hyprland-portals.conf",
    "chars": 32,
    "preview": "[preferred]\ndefault=hyprland;gtk"
  },
  {
    "path": "docs/Hyprland.1",
    "chars": 1625,
    "preview": ".\\\" Automatically generated by Pandoc 3.1.3\n.\\\"\n.\\\" Define V font for inline verbatim, using C font in formats\n.\\\" that "
  },
  {
    "path": "docs/Hyprland.1.rst",
    "chars": 1230,
    "preview": ":title: Hyprland\n:author: Vaxerski <*https://github.com/vaxerski*>\n\nNAME\n====\n\nHyprland - Dynamic tiling Wayland composi"
  },
  {
    "path": "docs/ISSUE_GUIDELINES.md",
    "chars": 3139,
    "preview": "# Issue Guidelines\n\nFirst of all, please remember to:\n- Check that your issue is not a duplicate\n- Read the [FAQ](https:"
  },
  {
    "path": "docs/hyprctl.1",
    "chars": 2722,
    "preview": ".\\\" Automatically generated by Pandoc 3.1.3\n.\\\"\n.\\\" Define V font for inline verbatim, using C font in formats\n.\\\" that "
  },
  {
    "path": "docs/hyprctl.1.rst",
    "chars": 2090,
    "preview": ":title: hyprctl(1)\n:author: Vaxerski <*https://github.com/vaxerski*>\n\nNAME\n====\n\nhyprctl - Utility for controlling parts"
  },
  {
    "path": "example/hyprland.conf",
    "chars": 9962,
    "preview": "# This is an example Hyprland config file.\n# Refer to the wiki for more information.\n# https://wiki.hypr.land/Configurin"
  },
  {
    "path": "example/hyprland.desktop.in",
    "chars": 214,
    "preview": "[Desktop Entry]\nName=Hyprland\nComment=An intelligent dynamic tiling Wayland compositor\nExec=@PREFIX@/@CMAKE_INSTALL_BIND"
  },
  {
    "path": "example/hyprland.service",
    "chars": 245,
    "preview": "; a primitive systemd --user example\n[Unit]\nDescription = %p\nBindsTo     = graphical-session.target\nUpholds     = swaybg"
  },
  {
    "path": "example/launch.json",
    "chars": 857,
    "preview": "{\n    // Use IntelliSense to learn about possible attributes.\n    // Hover to view descriptions of existing attributes.\n"
  },
  {
    "path": "example/screenShader.frag",
    "chars": 286,
    "preview": "//\n// Example blue light filter shader.\n//\n\n#version 300 es\n\nprecision mediump float;\nin vec2 v_texcoord;\nlayout(locatio"
  },
  {
    "path": "example/swaybg@.service",
    "chars": 290,
    "preview": "; a primitive systemd --user example\n; see example/hyprland.service for more details\n[Unit]\nDescription = %p\nBindsTo    "
  },
  {
    "path": "flake.nix",
    "chars": 6394,
    "preview": "{\n  description = \"Hyprland is a dynamic tiling Wayland compositor that doesn't sacrifice on its looks\";\n\n  inputs = {\n "
  },
  {
    "path": "hyprctl/CMakeLists.txt",
    "chars": 1740,
    "preview": "cmake_minimum_required(VERSION 3.19)\n\nproject(\n    hyprctl\n    DESCRIPTION \"Control utility for Hyprland\"\n)\n\npkg_check_m"
  },
  {
    "path": "hyprctl/hw-protocols/hyprpaper_core.xml",
    "chars": 6453,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"hyprpaper_core\" version=\"2\">\n  <copyright>\n    BSD 3-Clause Licen"
  },
  {
    "path": "hyprctl/hyprctl.bash",
    "chars": 7059,
    "preview": "_hyprctl_cmd_1 () {\n    hyprctl monitors | awk '/Monitor/{ print $2 }'\n}\n\n_hyprctl_cmd_3 () {\n    hyprctl clients | awk "
  },
  {
    "path": "hyprctl/hyprctl.fish",
    "chars": 14201,
    "preview": "function _hyprctl_2\n    set 1 $argv[1]\n    hyprctl monitors | awk '/Monitor/{ print $2 }'\nend\n\nfunction _hyprctl_4\n    s"
  },
  {
    "path": "hyprctl/hyprctl.usage",
    "chars": 13180,
    "preview": "# This is a file fed to complgen to generate bash/fish/zsh completions\n# Repo: https://github.com/adaszko/complgen\n# Gen"
  },
  {
    "path": "hyprctl/hyprctl.zsh",
    "chars": 15525,
    "preview": "#compdef hyprctl\n\n_hyprctl_cmd_1 () {\n    hyprctl monitors | awk '/Monitor/{ print $2 }'\n}\n\n_hyprctl_cmd_3 () {\n    hypr"
  },
  {
    "path": "hyprctl/src/Strings.hpp",
    "chars": 6797,
    "preview": "#pragma once\n\n#include <string_view>\n\nconst std::string_view USAGE = R\"#(usage: hyprctl [flags] <command> [args...|--hel"
  },
  {
    "path": "hyprctl/src/helpers/Memory.hpp",
    "chars": 250,
    "preview": "#pragma once\n\n#include <hyprutils/memory/SharedPtr.hpp>\n#include <hyprutils/memory/UniquePtr.hpp>\n#include <hyprutils/me"
  },
  {
    "path": "hyprctl/src/hyprpaper/Hyprpaper.cpp",
    "chars": 6866,
    "preview": "#include \"Hyprpaper.hpp\"\n#include \"../helpers/Memory.hpp\"\n\n#include <optional>\n#include <format>\n#include <filesystem>\n#"
  },
  {
    "path": "hyprctl/src/hyprpaper/Hyprpaper.hpp",
    "chars": 164,
    "preview": "#pragma once\n\n#include <expected>\n#include <string>\n\nnamespace Hyprpaper {\n    std::expected<void, std::string> makeHypr"
  },
  {
    "path": "hyprctl/src/main.cpp",
    "chars": 15867,
    "preview": "#include <re2/re2.h>\n\n#include <cctype>\n#include <netdb.h>\n#include <netinet/in.h>\n#include <cstdio>\n#include <cstdlib>\n"
  },
  {
    "path": "hyprland.pc.in",
    "chars": 659,
    "preview": "prefix=@PREFIX@/@INCLUDEDIR@\n\nName: Hyprland\nURL: https://github.com/hyprwm/Hyprland\nDescription: Hyprland header files\n"
  },
  {
    "path": "hyprpm/CMakeLists.txt",
    "chars": 1315,
    "preview": "cmake_minimum_required(VERSION 3.19)\n\nproject(\n    hyprpm\n    DESCRIPTION \"A Hyprland Plugin Manager\"\n)\n\nfile(GLOB_RECUR"
  },
  {
    "path": "hyprpm/hyprpm.bash",
    "chars": 3610,
    "preview": "_hyprpm_cmd_0 () {\n    hyprpm list | awk '/Plugin/{print $4}'\n}\n\n_hyprpm_cmd_1 () {\n    hyprpm list | awk '/Repository/{"
  },
  {
    "path": "hyprpm/hyprpm.fish",
    "chars": 4389,
    "preview": "function _hyprpm_1\n    set 1 $argv[1]\n    hyprpm list | awk '/Plugin/{print $4}'\nend\n\nfunction _hyprpm_2\n    set 1 $argv"
  },
  {
    "path": "hyprpm/hyprpm.usage",
    "chars": 1149,
    "preview": "hyprpm [<FLAGS>]... <ARGUMENT>\n\n\n<FLAGS> ::= (--notify | -n)             \"Send a hyprland notification for important eve"
  },
  {
    "path": "hyprpm/hyprpm.zsh",
    "chars": 6053,
    "preview": "#compdef hyprpm\n\n_hyprpm_cmd_0 () {\n    hyprpm list | awk '/Plugin/{print $4}'\n}\n\n_hyprpm_cmd_1 () {\n    hyprpm list | a"
  },
  {
    "path": "hyprpm/src/core/DataState.cpp",
    "chars": 10047,
    "preview": "#include \"DataState.hpp\"\n#include <sys/stat.h>\n#include <toml++/toml.hpp>\n#include <print>\n#include <sstream>\n#include <"
  },
  {
    "path": "hyprpm/src/core/DataState.hpp",
    "chars": 1121,
    "preview": "#pragma once\n#include <filesystem>\n#include <string>\n#include <vector>\n#include \"Plugin.hpp\"\n\nstruct SGlobalState {\n    "
  },
  {
    "path": "hyprpm/src/core/HyprlandSocket.cpp",
    "chars": 2483,
    "preview": "#include \"HyprlandSocket.hpp\"\n#include <pwd.h>\n#include <sys/socket.h>\n#include \"../helpers/StringUtils.hpp\"\n#include <p"
  },
  {
    "path": "hyprpm/src/core/HyprlandSocket.hpp",
    "chars": 109,
    "preview": "#pragma once\n\n#include <string>\n\nnamespace NHyprlandSocket {\n    std::string send(const std::string& cmd);\n};"
  },
  {
    "path": "hyprpm/src/core/Manifest.cpp",
    "chars": 4633,
    "preview": "#include \"Manifest.hpp\"\n#include <toml++/toml.hpp>\n#include <algorithm>\n\n// Alphanumerics and -_ allowed for plugin name"
  },
  {
    "path": "hyprpm/src/core/Manifest.hpp",
    "chars": 926,
    "preview": "#pragma once\n\n#include <string>\n#include <vector>\n\nenum eManifestType {\n    MANIFEST_HYPRLOAD,\n    MANIFEST_HYPRPM\n};\n\nc"
  },
  {
    "path": "hyprpm/src/core/Plugin.cpp",
    "chars": 1852,
    "preview": "#include \"Plugin.hpp\"\n\nSPluginRepoIdentifier SPluginRepoIdentifier::fromUrl(const std::string& url) {\n    return SPlugin"
  },
  {
    "path": "hyprpm/src/core/Plugin.hpp",
    "chars": 1205,
    "preview": "#pragma once\n\n#include <string>\n#include <vector>\n\nstruct SPlugin {\n    std::string name;\n    std::string filename;\n    "
  },
  {
    "path": "hyprpm/src/core/PluginManager.cpp",
    "chars": 43645,
    "preview": "#include \"PluginManager.hpp\"\n#include \"../helpers/Colors.hpp\"\n#include \"../helpers/StringUtils.hpp\"\n#include \"../progres"
  },
  {
    "path": "hyprpm/src/core/PluginManager.hpp",
    "chars": 2686,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <memory>\n#include <optional>\n#include <string>\n#include <expected>\n#include \"P"
  },
  {
    "path": "hyprpm/src/helpers/Colors.hpp",
    "chars": 370,
    "preview": "#pragma once\n\nnamespace Colors {\n    constexpr const char* RED     = \"\\x1b[31m\";\n    constexpr const char* GREEN   = \"\\x"
  },
  {
    "path": "hyprpm/src/helpers/Die.hpp",
    "chars": 354,
    "preview": "#pragma once\n\n#include <format>\n#include <iostream>\n\n// NOLINTNEXTLINE\nnamespace Debug {\n    template <typename... Args>"
  },
  {
    "path": "hyprpm/src/helpers/StringUtils.hpp",
    "chars": 1031,
    "preview": "#pragma once\n\n#include <format>\n#include <string>\n#include \"Colors.hpp\"\n\ntemplate <typename... Args>\nstd::string statusS"
  },
  {
    "path": "hyprpm/src/helpers/Sys.cpp",
    "chars": 4632,
    "preview": "#include \"Sys.hpp\"\n#include \"Die.hpp\"\n#include \"StringUtils.hpp\"\n\n#include <pwd.h>\n#include <unistd.h>\n#include <sstream"
  },
  {
    "path": "hyprpm/src/helpers/Sys.hpp",
    "chars": 940,
    "preview": "#pragma once\n\n#include <string>\n#include <optional>\n\nnamespace NSys {\n    bool                       isSuperuser();\n    "
  },
  {
    "path": "hyprpm/src/main.cpp",
    "chars": 9178,
    "preview": "#include \"helpers/Colors.hpp\"\n#include \"helpers/StringUtils.hpp\"\n#include \"core/PluginManager.hpp\"\n#include \"core/DataSt"
  },
  {
    "path": "hyprpm/src/progress/CProgressBar.cpp",
    "chars": 1946,
    "preview": "#include \"CProgressBar.hpp\"\n\n#include <sys/ioctl.h>\n#include <unistd.h>\n#include <cmath>\n#include <format>\n#include <pri"
  },
  {
    "path": "hyprpm/src/progress/CProgressBar.hpp",
    "chars": 385,
    "preview": "#pragma once\n\n#include <string>\n\nclass CProgressBar {\n  public:\n    void        print();\n    void        printMessageAbo"
  },
  {
    "path": "hyprtester/CMakeLists.txt",
    "chars": 3756,
    "preview": "cmake_minimum_required(VERSION 3.19)\n\nproject(hyprtester DESCRIPTION \"Hyprland test suite\")\n\ninclude(GNUInstallDirs)\n\nse"
  },
  {
    "path": "hyprtester/clients/child-window.cpp",
    "chars": 11585,
    "preview": "#include <print>\n#include <poll.h>\n#include <sys/mman.h>\n#include <fcntl.h>\n#include <stdio.h>\n#include <unistd.h>\n\n#inc"
  },
  {
    "path": "hyprtester/clients/pointer-scroll.cpp",
    "chars": 10559,
    "preview": "#include <cstring>\n#include <sys/poll.h>\n#include <sys/mman.h>\n#include <fcntl.h>\n#include <unistd.h>\n#include <print>\n#"
  },
  {
    "path": "hyprtester/clients/pointer-warp.cpp",
    "chars": 10737,
    "preview": "#include <cstring>\n#include <sys/poll.h>\n#include <sys/mman.h>\n#include <fcntl.h>\n#include <unistd.h>\n#include <print>\n#"
  },
  {
    "path": "hyprtester/clients/shortcut-inhibitor.cpp",
    "chars": 10781,
    "preview": "#include <sys/poll.h>\n#include <sys/mman.h>\n#include <fcntl.h>\n#include <print>\n\n#include <wayland-client.h>\n#include <w"
  },
  {
    "path": "hyprtester/plugin/Makefile",
    "chars": 410,
    "preview": "CXXFLAGS = -shared -fPIC -g -std=c++2b -Wno-c++11-narrowing\nINCLUDES = `pkg-config --cflags pixman-1 libdrm pangocairo l"
  },
  {
    "path": "hyprtester/plugin/build.sh",
    "chars": 31,
    "preview": "#!/bin/sh\n\nmake clean\nmake all\n"
  },
  {
    "path": "hyprtester/plugin/src/globals.hpp",
    "chars": 84,
    "preview": "#pragma once\n\n#include <src/plugins/PluginAPI.hpp>\n\ninline HANDLE PHANDLE = nullptr;"
  },
  {
    "path": "hyprtester/plugin/src/main.cpp",
    "chars": 13042,
    "preview": "#include <unistd.h>\n#include <src/includes.hpp>\n#include <sstream>\n#include <any>\n\n#define private public\n#include <src/"
  },
  {
    "path": "hyprtester/protocols/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "hyprtester/src/Log.hpp",
    "chars": 383,
    "preview": "#pragma once\n#include <string>\n#include <format>\n#include <print>\n\nnamespace NLog {\n    template <typename... Args>\n    "
  },
  {
    "path": "hyprtester/src/hyprctlCompat.cpp",
    "chars": 3905,
    "preview": "#include \"hyprctlCompat.hpp\"\n#include \"shared.hpp\"\n\n#include <pwd.h>\n#include <sys/socket.h>\n#include <sys/stat.h>\n#incl"
  },
  {
    "path": "hyprtester/src/hyprctlCompat.hpp",
    "chars": 321,
    "preview": "#pragma once\n\n#include <vector>\n#include <string>\n#include <cstdint>\n\nstruct SInstanceData {\n    std::string id;\n    uin"
  },
  {
    "path": "hyprtester/src/main.cpp",
    "chars": 7870,
    "preview": "\n// This is a tester for Hyprland. It will launch the built binary in ./build/Hyprland\n// in headless mode and test vari"
  },
  {
    "path": "hyprtester/src/shared.hpp",
    "chars": 14059,
    "preview": "// Stolen from hyprutils\n\n#pragma once\n#include <iostream>\n\ninline std::string HIS          = \"\";\ninline std::string WLD"
  },
  {
    "path": "hyprtester/src/tests/clients/.gitignore",
    "chars": 10,
    "preview": "build.hpp\n"
  },
  {
    "path": "hyprtester/src/tests/clients/child-window.cpp",
    "chars": 4324,
    "preview": "#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include \"../shared.hpp\"\n#include \"tests.hpp\"\n#include \"b"
  },
  {
    "path": "hyprtester/src/tests/clients/pointer-scroll.cpp",
    "chars": 4519,
    "preview": "#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include \"../shared.hpp\"\n#include \"tests.hpp\"\n#include \"b"
  },
  {
    "path": "hyprtester/src/tests/clients/pointer-warp.cpp",
    "chars": 5666,
    "preview": "#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include \"../shared.hpp\"\n#include \"tests.hpp\"\n#include \"b"
  },
  {
    "path": "hyprtester/src/tests/clients/shortcut-inhibitor.cpp",
    "chars": 5549,
    "preview": "#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include \"../shared.hpp\"\n#include \"tests.hpp\"\n#include \"b"
  },
  {
    "path": "hyprtester/src/tests/clients/tests.hpp",
    "chars": 846,
    "preview": "#pragma once\n\n#include <vector>\n#include <functional>\n\ninline std::vector<std::function<bool()>> clientTestFns;\n\n#define"
  },
  {
    "path": "hyprtester/src/tests/main/animations.cpp",
    "chars": 654,
    "preview": "#include \"../../Log.hpp\"\n#include \"tests.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include <h"
  },
  {
    "path": "hyprtester/src/tests/main/colors.cpp",
    "chars": 1036,
    "preview": "#include \"tests.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include \"../shared.hpp\"\n\nstatic int"
  },
  {
    "path": "hyprtester/src/tests/main/dwindle.cpp",
    "chars": 8260,
    "preview": "#include \"../shared.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include \"tests.hpp\"\n\nstatic int"
  },
  {
    "path": "hyprtester/src/tests/main/exec.cpp",
    "chars": 1888,
    "preview": "#include \"tests.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include <chrono>\n#include <format>\n"
  },
  {
    "path": "hyprtester/src/tests/main/gestures.cpp",
    "chars": 6220,
    "preview": "#include \"tests.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include <print>\n#include <thread>\n#"
  },
  {
    "path": "hyprtester/src/tests/main/groups.cpp",
    "chars": 12798,
    "preview": "#include \"tests.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include <print>\n#include <thread>\n#"
  },
  {
    "path": "hyprtester/src/tests/main/hyprctl.cpp",
    "chars": 9897,
    "preview": "#include \"tests.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include <cstdint>\n#include <print>\n"
  },
  {
    "path": "hyprtester/src/tests/main/keybinds.cpp",
    "chars": 22273,
    "preview": "#include <filesystem>\n#include <linux/input-event-codes.h>\n#include <thread>\n#include \"../../shared.hpp\"\n#include \"../.."
  },
  {
    "path": "hyprtester/src/tests/main/layer.cpp",
    "chars": 1371,
    "preview": "#include \"../../Log.hpp\"\n#include \"../shared.hpp\"\n#include \"tests.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprc"
  },
  {
    "path": "hyprtester/src/tests/main/layout.cpp",
    "chars": 3215,
    "preview": "#include \"../shared.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include \"tests.hpp\"\n\nstatic int"
  },
  {
    "path": "hyprtester/src/tests/main/master.cpp",
    "chars": 5643,
    "preview": "#include \"../shared.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include \"tests.hpp\"\n\nstatic int"
  },
  {
    "path": "hyprtester/src/tests/main/misc.cpp",
    "chars": 10285,
    "preview": "#include \"tests.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include <print>\n#include <thread>\n#"
  },
  {
    "path": "hyprtester/src/tests/main/persistent.cpp",
    "chars": 2595,
    "preview": "#include \"tests.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include <print>\n#include <thread>\n#"
  },
  {
    "path": "hyprtester/src/tests/main/scroll.cpp",
    "chars": 6849,
    "preview": "#include \"../shared.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include \"tests.hpp\"\n\nstatic int"
  },
  {
    "path": "hyprtester/src/tests/main/snap.cpp",
    "chars": 5948,
    "preview": "#include <hyprutils/math/Vector2D.hpp>\n#include <hyprutils/memory/WeakPtr.hpp>\n#include <hyprutils/os/Process.hpp>\n\n#inc"
  },
  {
    "path": "hyprtester/src/tests/main/solitary.cpp",
    "chars": 2966,
    "preview": "#include \"tests.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include <thread>\n#include <chrono>\n"
  },
  {
    "path": "hyprtester/src/tests/main/tags.cpp",
    "chars": 1982,
    "preview": "#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include \"../shared.hpp\"\n#include \"tests.hpp\"\n\nstatic int"
  },
  {
    "path": "hyprtester/src/tests/main/tests.hpp",
    "chars": 840,
    "preview": "#pragma once\n\n#include <vector>\n#include <functional>\n\ninline std::vector<std::function<bool()>> testFns;\n\n#define REGIS"
  },
  {
    "path": "hyprtester/src/tests/main/window.cpp",
    "chars": 39657,
    "preview": "#include <unistd.h>\n#include <cmath>\n#include <chrono>\n#include <cstdlib>\n#include <cstring>\n#include <filesystem>\n#incl"
  },
  {
    "path": "hyprtester/src/tests/main/workspaces.cpp",
    "chars": 22741,
    "preview": "#include \"tests.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include <print>\n#include <thread>\n#"
  },
  {
    "path": "hyprtester/src/tests/plugin/plugin.cpp",
    "chars": 816,
    "preview": "#include \"plugin.hpp\"\n#include \"../../shared.hpp\"\n#include \"../../hyprctlCompat.hpp\"\n#include <print>\n#include <thread>\n"
  },
  {
    "path": "hyprtester/src/tests/plugin/plugin.hpp",
    "chars": 49,
    "preview": "#pragma once\n\nbool testPlugin();\nbool testVkb();\n"
  },
  {
    "path": "hyprtester/src/tests/shared.cpp",
    "chars": 5470,
    "preview": "#include \"shared.hpp\"\n#include <csignal>\n#include <cerrno>\n#include <thread>\n#include <print>\n#include <fstream>\n#includ"
  },
  {
    "path": "hyprtester/src/tests/shared.hpp",
    "chars": 1467,
    "preview": "#pragma once\n\n#include <hyprutils/os/Process.hpp>\n#include <hyprutils/memory/WeakPtr.hpp>\n#include <sys/types.h>\n\n#inclu"
  },
  {
    "path": "hyprtester/test.conf",
    "chars": 11044,
    "preview": "# This is an example Hyprland config file.\n# Refer to the wiki for more information.\n# https://wiki.hyprland.org/Configu"
  },
  {
    "path": "nix/default.nix",
    "chars": 6174,
    "preview": "{\n  lib,\n  stdenv,\n  stdenvAdapters,\n  pkg-config,\n  pkgconf,\n  makeWrapper,\n  cmake,\n  aquamarine,\n  binutils,\n  cairo,"
  },
  {
    "path": "nix/formatter.nix",
    "chars": 1373,
    "preview": "{\n  writeShellApplication,\n  deadnix,\n  statix,\n  nixfmt,\n  llvmPackages_19,\n  fd,\n}:\nwriteShellApplication {\n  name = \""
  },
  {
    "path": "nix/hm-module.nix",
    "chars": 220,
    "preview": "self:\n{\n  lib,\n  pkgs,\n  ...\n}:\nlet\n  inherit (pkgs.stdenv.hostPlatform) system;\n\n  package = self.packages.${system}.de"
  },
  {
    "path": "nix/lib.nix",
    "chars": 5860,
    "preview": "lib:\nlet\n  inherit (lib)\n    attrNames\n    filterAttrs\n    foldl\n    generators\n    partition\n    ;\n\n  inherit (lib.stri"
  },
  {
    "path": "nix/module.nix",
    "chars": 4667,
    "preview": "inputs:\n{\n  config,\n  lib,\n  pkgs,\n  ...\n}:\nlet\n  inherit (pkgs.stdenv.hostPlatform) system;\n  selflib = import ./lib.ni"
  },
  {
    "path": "nix/overlays.nix",
    "chars": 4014,
    "preview": "{\n  self,\n  lib,\n  inputs,\n}:\nlet\n  mkDate =\n    longDate:\n    (lib.concatStringsSep \"-\" [\n      (builtins.substring 0 4"
  },
  {
    "path": "nix/tests/default.nix",
    "chars": 3106,
    "preview": "inputs: pkgs:\nlet\n  flake = inputs.self.packages.${pkgs.stdenv.hostPlatform.system};\n  hyprland = flake.hyprland-with-te"
  },
  {
    "path": "nix/update-inputs.sh",
    "chars": 853,
    "preview": "#!/usr/bin/env -S nix shell nixpkgs#jq -c bash\n\n# Update inputs when the Mesa or QT version is outdated. We don't want\n#"
  },
  {
    "path": "protocols/input-method-unstable-v2.xml",
    "chars": 21346,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"input_method_unstable_v2\">\n\n  <copyright>\n    Copyright © 2008-20"
  },
  {
    "path": "protocols/kde-server-decoration.xml",
    "chars": 5118,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"server_decoration\">\n  <copyright><![CDATA[\n    SPDX-FileCopyright"
  },
  {
    "path": "protocols/virtual-keyboard-unstable-v1.xml",
    "chars": 4881,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"virtual_keyboard_unstable_v1\">\n  <copyright>\n    Copyright © 2008"
  },
  {
    "path": "protocols/wayland-drm.xml",
    "chars": 7972,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"drm\">\n\n  <copyright>\n    Copyright © 2008-2011 Kristian Høgsberg\n"
  },
  {
    "path": "protocols/wlr-data-control-unstable-v1.xml",
    "chars": 12044,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"wlr_data_control_unstable_v1\">\n  <copyright>\n    Copyright © 2018"
  },
  {
    "path": "protocols/wlr-foreign-toplevel-management-unstable-v1.xml",
    "chars": 11555,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"wlr_foreign_toplevel_management_unstable_v1\">\n  <copyright>\n    C"
  },
  {
    "path": "protocols/wlr-gamma-control-unstable-v1.xml",
    "chars": 5505,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"wlr_gamma_control_unstable_v1\">\n  <copyright>\n    Copyright © 201"
  },
  {
    "path": "protocols/wlr-layer-shell-unstable-v1.xml",
    "chars": 19325,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"wlr_layer_shell_unstable_v1\">\n  <copyright>\n    Copyright © 2017 "
  },
  {
    "path": "protocols/wlr-output-management-unstable-v1.xml",
    "chars": 25781,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"wlr_output_management_unstable_v1\">\n  <copyright>\n    Copyright ©"
  },
  {
    "path": "protocols/wlr-output-power-management-unstable-v1.xml",
    "chars": 5594,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"wlr_output_power_management_unstable_v1\">\n  <copyright>\n    Copyr"
  },
  {
    "path": "protocols/wlr-screencopy-unstable-v1.xml",
    "chars": 10164,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"wlr_screencopy_unstable_v1\">\n  <copyright>\n    Copyright © 2018 S"
  },
  {
    "path": "protocols/wlr-virtual-pointer-unstable-v1.xml",
    "chars": 6894,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<protocol name=\"wlr_virtual_pointer_unstable_v1\">\n  <copyright>\n    Copyright © 2"
  },
  {
    "path": "scripts/generateShaderIncludes.sh",
    "chars": 783,
    "preview": "#!/bin/sh\n\nSHADERS_SRC=\"./src/render/shaders/glsl\"\n\necho \"-- Generating shader includes\"\n\nif [ ! -d ./src/render/shaders"
  },
  {
    "path": "scripts/hyprlandStaticAsan.diff",
    "chars": 524,
    "preview": "diff --git a/CMakeLists.txt b/CMakeLists.txt\nindex f26a5c3c..3dfef333 100644\n--- a/CMakeLists.txt\n+++ b/CMakeLists.txt\n@"
  },
  {
    "path": "scripts/waylandStatic.diff",
    "chars": 700,
    "preview": "diff --git a/src/meson.build b/src/meson.build\nindex 5d04334..6645eec 100644\n--- a/src/meson.build\n+++ b/src/meson.build"
  },
  {
    "path": "src/Compositor.cpp",
    "chars": 117869,
    "preview": "#include <ranges>\n#include <re2/re2.h>\n\n#include \"Compositor.hpp\"\n#include \"debug/log/Logger.hpp\"\n#include \"desktop/Desk"
  },
  {
    "path": "src/Compositor.hpp",
    "chars": 11271,
    "preview": "#pragma once\n\n#include <sys/resource.h>\n\n#include <ranges>\n\n#include \"helpers/math/Direction.hpp\"\n#include \"managers/XWa"
  },
  {
    "path": "src/SharedDefs.hpp",
    "chars": 1915,
    "preview": "#pragma once\n\n#include \"helpers/math/Math.hpp\"\n#include <functional>\n#include <any>\n#include <string>\n#include <algorith"
  },
  {
    "path": "src/config/ConfigDataValues.hpp",
    "chars": 5622,
    "preview": "#pragma once\n#include \"../defines.hpp\"\n#include \"../helpers/varlist/VarList.hpp\"\n#include <vector>\n#include <map>\n\nenum "
  },
  {
    "path": "src/config/ConfigDescriptions.hpp",
    "chars": 105631,
    "preview": "#pragma once\n\n#include <climits>\n#include \"ConfigManager.hpp\"\n\ninline static const std::vector<SConfigOptionDescription>"
  },
  {
    "path": "src/config/ConfigManager.cpp",
    "chars": 139471,
    "preview": "#include <re2/re2.h>\n\n#include \"ConfigManager.hpp\"\n#include \"ConfigWatcher.hpp\"\n#include \"../managers/KeybindManager.hpp"
  },
  {
    "path": "src/config/ConfigManager.hpp",
    "chars": 15110,
    "preview": "#pragma once\n\n#include <hyprutils/animation/AnimationConfig.hpp>\n#define CONFIG_MANAGER_H\n\n#include <map>\n#include <unor"
  },
  {
    "path": "src/config/ConfigValue.cpp",
    "chars": 519,
    "preview": "#include \"ConfigValue.hpp\"\n#include \"ConfigManager.hpp\"\n#include \"../macros.hpp\"\n\nvoid local__configValuePopulate(void* "
  },
  {
    "path": "src/config/ConfigValue.hpp",
    "chars": 2141,
    "preview": "#pragma once\n\n#include <string>\n#include <typeindex>\n#include <hyprlang.hpp>\n#include \"../macros.hpp\"\n\n// giga hack to a"
  },
  {
    "path": "src/config/ConfigWatcher.cpp",
    "chars": 3593,
    "preview": "#include \"ConfigWatcher.hpp\"\n#if defined(__linux__)\n#include <linux/limits.h>\n#endif\n#include <sys/inotify.h>\n#include \""
  },
  {
    "path": "src/config/ConfigWatcher.hpp",
    "chars": 982,
    "preview": "#pragma once\n#include \"../helpers/memory/Memory.hpp\"\n#include <vector>\n#include <string>\n#include <functional>\n#include "
  },
  {
    "path": "src/config/defaultConfig.hpp",
    "chars": 638,
    "preview": "#pragma once\n\n#include <string>\n\ninline constexpr std::string_view AUTOGENERATED_PREFIX   = R\"#(\n# #####################"
  },
  {
    "path": "src/debug/HyprCtl.cpp",
    "chars": 96127,
    "preview": "#include \"HyprCtl.hpp\"\n#include \"helpers/Monitor.hpp\"\n\n#include <algorithm>\n#include <format>\n#include <fstream>\n#includ"
  },
  {
    "path": "src/debug/HyprCtl.hpp",
    "chars": 2078,
    "preview": "#pragma once\n\n#include <fstream>\n#include \"../helpers/MiscFunctions.hpp\"\n#include \"../helpers/defer/Promise.hpp\"\n#includ"
  },
  {
    "path": "src/debug/HyprDebugOverlay.cpp",
    "chars": 9462,
    "preview": "#include <pango/pangocairo.h>\n#include \"HyprDebugOverlay.hpp\"\n#include \"config/ConfigValue.hpp\"\n#include \"../Compositor."
  },
  {
    "path": "src/debug/HyprDebugOverlay.hpp",
    "chars": 1586,
    "preview": "#pragma once\n\n#include \"../defines.hpp\"\n#include \"../render/Texture.hpp\"\n#include <cairo/cairo.h>\n#include <map>\n#includ"
  },
  {
    "path": "src/debug/HyprNotificationOverlay.cpp",
    "chars": 10299,
    "preview": "#include <numeric>\n#include <pango/pangocairo.h>\n#include \"HyprNotificationOverlay.hpp\"\n#include \"../Compositor.hpp\"\n#in"
  },
  {
    "path": "src/debug/HyprNotificationOverlay.hpp",
    "chars": 2571,
    "preview": "#pragma once\n\n#include \"../defines.hpp\"\n#include \"../helpers/time/Timer.hpp\"\n#include \"../render/Texture.hpp\"\n#include \""
  },
  {
    "path": "src/debug/TracyDefines.hpp",
    "chars": 570,
    "preview": "#pragma once\n\n#ifdef USE_TRACY_GPU\n\n#include \"log/Logger.hpp\"\n\n#include <GL/gl.h>\n#include <GLES2/gl2ext.h>\n\ninline PFNG"
  },
  {
    "path": "src/debug/crash/CrashReporter.cpp",
    "chars": 8658,
    "preview": "#include \"CrashReporter.hpp\"\n#include <fcntl.h>\n#include <sys/utsname.h>\n#include <link.h>\n#include <ctime>\n#include <ce"
  },
  {
    "path": "src/debug/crash/CrashReporter.hpp",
    "chars": 80,
    "preview": "#pragma once\n\nnamespace CrashReporter {\n    void createAndSaveCrash(int sig);\n};"
  },
  {
    "path": "src/debug/crash/SignalSafe.cpp",
    "chars": 708,
    "preview": "#include \"SignalSafe.hpp\"\n\n#ifndef __GLIBC__\n#include <signal.h>\n#endif\n#include <fcntl.h>\n#include <unistd.h>\n#include "
  },
  {
    "path": "src/debug/crash/SignalSafe.hpp",
    "chars": 5308,
    "preview": "#pragma once\n\n#include \"defines.hpp\"\n#include <cstring>\n\nnamespace SignalSafe {\n    template <uint16_t N>\n    class CMax"
  },
  {
    "path": "src/debug/log/Logger.cpp",
    "chars": 1832,
    "preview": "#include \"Logger.hpp\"\n#include \"RollingLogFollow.hpp\"\n\n#include \"../../event/EventBus.hpp\"\n\n#include \"../../config/Confi"
  },
  {
    "path": "src/debug/log/Logger.hpp",
    "chars": 2165,
    "preview": "#pragma once\n\n#include <hyprutils/cli/Logger.hpp>\n\n#include \"../../helpers/memory/Memory.hpp\"\n#include \"../../helpers/en"
  },
  {
    "path": "src/debug/log/RollingLogFollow.hpp",
    "chars": 2504,
    "preview": "#pragma once\n\n#include <shared_mutex>\n#include <unordered_map>\n#include <format>\n#include <vector>\n\nnamespace Log {\n    "
  },
  {
    "path": "src/defines.hpp",
    "chars": 277,
    "preview": "#pragma once\n\n#include \"includes.hpp\"\n#include \"debug/log/Logger.hpp\"\n#include \"helpers/Color.hpp\"\n#include \"macros.hpp\""
  },
  {
    "path": "src/desktop/DesktopTypes.hpp",
    "chars": 782,
    "preview": "#pragma once\n#include \"../helpers/memory/Memory.hpp\"\n\nclass CWorkspace;\nclass CMonitor;\n\nnamespace Desktop::View {\n    c"
  },
  {
    "path": "src/desktop/Workspace.cpp",
    "chars": 19962,
    "preview": "#include \"Workspace.hpp\"\n#include \"view/Group.hpp\"\n#include \"../Compositor.hpp\"\n#include \"../config/ConfigValue.hpp\"\n#in"
  },
  {
    "path": "src/desktop/Workspace.hpp",
    "chars": 3365,
    "preview": "#pragma once\n\n#include \"../helpers/AnimatedVariable.hpp\"\n#include <string>\n#include \"DesktopTypes.hpp\"\n#include \"../help"
  },
  {
    "path": "src/desktop/history/WindowHistoryTracker.cpp",
    "chars": 1306,
    "preview": "#include \"WindowHistoryTracker.hpp\"\n\n#include \"../view/Window.hpp\"\n#include \"../../event/EventBus.hpp\"\n\nusing namespace "
  },
  {
    "path": "src/desktop/history/WindowHistoryTracker.hpp",
    "chars": 874,
    "preview": "#pragma once\n\n#include \"../DesktopTypes.hpp\"\n\n#include <vector>\n\nnamespace Desktop::History {\n    class CWindowHistoryTr"
  },
  {
    "path": "src/desktop/history/WorkspaceHistoryTracker.cpp",
    "chars": 4836,
    "preview": "#include \"WorkspaceHistoryTracker.hpp\"\n\n#include \"../../helpers/Monitor.hpp\"\n#include \"../Workspace.hpp\"\n#include \"../st"
  },
  {
    "path": "src/desktop/history/WorkspaceHistoryTracker.hpp",
    "chars": 1849,
    "preview": "#pragma once\n\n#include \"../DesktopTypes.hpp\"\n#include \"../../SharedDefs.hpp\"\n#include \"../../macros.hpp\"\n#include \"../.."
  },
  {
    "path": "src/desktop/reserved/ReservedArea.cpp",
    "chars": 2752,
    "preview": "#include \"ReservedArea.hpp\"\n#include \"../../macros.hpp\"\n\nusing namespace Desktop;\n\n// fuck me. Writing this at 11pm, and"
  },
  {
    "path": "src/desktop/reserved/ReservedArea.hpp",
    "chars": 1384,
    "preview": "#pragma once\n\n#include \"../../helpers/math/Math.hpp\"\n#include <array>\n\nnamespace Desktop {\n    enum eReservedDynamicType"
  },
  {
    "path": "src/desktop/rule/Engine.cpp",
    "chars": 1461,
    "preview": "#include \"Engine.hpp\"\n#include \"Rule.hpp\"\n#include \"../view/LayerSurface.hpp\"\n#include \"../../Compositor.hpp\"\n\nusing nam"
  },
  {
    "path": "src/desktop/rule/Engine.hpp",
    "chars": 707,
    "preview": "#pragma once\n\n#include \"Rule.hpp\"\n\nnamespace Desktop::Rule {\n    class CRuleEngine {\n      public:\n        CRuleEngine()"
  },
  {
    "path": "src/desktop/rule/Rule.cpp",
    "chars": 5988,
    "preview": "#include \"Rule.hpp\"\n#include \"../../debug/log/Logger.hpp\"\n#include <re2/re2.h>\n\n#include \"matchEngine/RegexMatchEngine.h"
  },
  {
    "path": "src/desktop/rule/Rule.hpp",
    "chars": 3318,
    "preview": "#pragma once\n\n#include \"matchEngine/MatchEngine.hpp\"\n\n#include \"../../helpers/memory/Memory.hpp\"\n#include \"../../helpers"
  },
  {
    "path": "src/desktop/rule/effect/EffectContainer.hpp",
    "chars": 2483,
    "preview": "#pragma once\n\n#include <string>\n#include <vector>\n#include <type_traits>\n#include <cstdint>\n#include <optional>\n#include"
  },
  {
    "path": "src/desktop/rule/layerRule/LayerRule.cpp",
    "chars": 1117,
    "preview": "#include \"LayerRule.hpp\"\n#include \"../../../debug/log/Logger.hpp\"\n#include \"../../view/LayerSurface.hpp\"\n\nusing namespac"
  },
  {
    "path": "src/desktop/rule/layerRule/LayerRule.hpp",
    "chars": 793,
    "preview": "#pragma once\n\n#include \"../Rule.hpp\"\n#include \"../../DesktopTypes.hpp\"\n#include \"LayerRuleEffectContainer.hpp\"\n\nnamespac"
  },
  {
    "path": "src/desktop/rule/layerRule/LayerRuleApplicator.cpp",
    "chars": 6969,
    "preview": "#include \"LayerRuleApplicator.hpp\"\n#include \"LayerRule.hpp\"\n#include \"../Engine.hpp\"\n#include \"../../view/LayerSurface.h"
  },
  {
    "path": "src/desktop/rule/layerRule/LayerRuleApplicator.hpp",
    "chars": 3827,
    "preview": "#pragma once\n\n#include \"LayerRuleEffectContainer.hpp\"\n#include \"../../DesktopTypes.hpp\"\n#include \"../Rule.hpp\"\n#include "
  },
  {
    "path": "src/desktop/rule/layerRule/LayerRuleEffectContainer.cpp",
    "chars": 1017,
    "preview": "#include \"LayerRuleEffectContainer.hpp\"\n\nusing namespace Desktop;\nusing namespace Desktop::Rule;\n\n//\nSP<CLayerRuleEffect"
  },
  {
    "path": "src/desktop/rule/layerRule/LayerRuleEffectContainer.hpp",
    "chars": 881,
    "preview": "#pragma once\n\n#include \"../effect/EffectContainer.hpp\"\n#include \"../../../helpers/memory/Memory.hpp\"\n\n#pragma once\n\nname"
  },
  {
    "path": "src/desktop/rule/matchEngine/BoolMatchEngine.cpp",
    "chars": 273,
    "preview": "#include \"BoolMatchEngine.hpp\"\n#include \"../../../helpers/MiscFunctions.hpp\"\n\nusing namespace Desktop::Rule;\n\nCBoolMatch"
  },
  {
    "path": "src/desktop/rule/matchEngine/BoolMatchEngine.hpp",
    "chars": 321,
    "preview": "#pragma once\n\n#include \"MatchEngine.hpp\"\n\nnamespace Desktop::Rule {\n    class CBoolMatchEngine : public IMatchEngine {\n "
  },
  {
    "path": "src/desktop/rule/matchEngine/IntMatchEngine.cpp",
    "chars": 368,
    "preview": "#include \"IntMatchEngine.hpp\"\n#include \"../../../debug/log/Logger.hpp\"\n\nusing namespace Desktop::Rule;\n\nCIntMatchEngine:"
  },
  {
    "path": "src/desktop/rule/matchEngine/IntMatchEngine.hpp",
    "chars": 312,
    "preview": "#pragma once\n\n#include \"MatchEngine.hpp\"\n\nnamespace Desktop::Rule {\n    class CIntMatchEngine : public IMatchEngine {\n  "
  }
]

// ... and 504 more files (download for full content)

About this extraction

This page contains the full source code of the hyprwm/Hyprland GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 704 files (4.4 MB), approximately 1.2M tokens, and a symbol index with 2382 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!