Let linuxdeploy embed Update Information into each AppImage, allowing
for external apps (Gear Lever, Shelly, AppImageUpdate) to easily
download WayVR updates.
This also requires that a corresponding .zsync file be attached to each
release, for efficient transfer of updated AppImages.
See this section in the AppImage spec:
https://github.com/AppImage/AppImageSpec/blob/master/draft.md#update-information
* wgui: Animation system refactoring (seconds instead of ticks), dash-frontend: pop-up slide effects
* dash-frontend: audio_settings UI fixes
* wgui: do not swipe in non-scrollable axis, dash-frontend: skymap list xml fixes
* wayvr: notification animations, wgui: animation system refactoring
- All new layout xml files now are required to include this metadata
at the top, if they want to be parsed in the new layout v2 behavior:
```xml
<layout version="2">
<!-- rest of the markup -->
</layout>
```
- Add path expansion using '@' for widget resources and includes
The '@' character is always expanded to the assets root directory
(builtin/internal), or the root xml directory (external).
Paths directing to the built-in resources like:
`edit/mouse.svg`
are now required to be written as:
`@/edit/mouse.svg`,
For example:
```xml
<sprite src_builtin="@/edit/mouse.svg" />
```
- All paths without '/' at the start are now treated as relative
to the currently parsing XML (paths like `/usr/share/icons/...`
are still accessible)
- Add support for relative paths for widgets instantiated from
templates
- Rename `<theme>` to `<vars>`
Changes (dash-frontend):
- Adapt and refactor XML files
Changes (wayvr):
- Adapt and refactor XML files
* Supporters list
* dash-frontend: Random supporter on main screen, wgui: prevent unnecessary redraws
* more creative sponsor messages
---------
Co-authored-by: galister <22305755+galister@users.noreply.github.com>
* Refactor HID subsystem to support zwlr_virtual_pointer_v1/zwp_virtual_keyboard_v1, and only use uinput as a fallback
* Add keymap support to HID providers and refactor related functionality
* Replace `expect` with `context` for improved error handling in wl_virtual.rs
* Run `cargo fmt`
* Replace hard panic with Err on failed seat binding
* add watch toggle setting
* previous commit broke monado workaround, this fixes it
* use active_state to toggle watch
* use the other monado workaround
* fix whitespace
* cargo fmt
the change in rotation is computed in the untransformed stage space. To produce the correct rotation change the quaternion needs to be rotated using the space offset
* add a toast for uinput errors
this makes it more obvious if missing uinput permissions are the reason your keyboard and mouse aren't working.
* uinput toaster part 2: the cargo formattening
* increase uinput error toast's timeout to 30 seconds
---------
Co-authored-by: galister <22305755+galister@users.noreply.github.com>
* start to integrate swipetype with keyboardstate
* successful debug implementation
* change to git dependency
* add manual trigger to app image build to test
* use latest swipeType lib to test including binaries
* use clipboard to paste swipe output
* use new prediction engine, move swipe type related logic to its own module
* update appimage bulid to support building ort runtime
* implement swipe selection ui in keyboard overlay
* only add motion data for the device that started the swipe
* process swipes on separate thread to not block ui
* add toggle to settings.rs
* default swipe to type config to false
* remove println, minor fix
* use correct key_dimensions
* use latest swipe_type library version
* optionally use wayvr compositor clipboard when pasting
* remove unused imports
* fix typo in log::error
* fix within key positioning
* run swipes on AltGr keycaps
Current implementation picks up the first available color format, which could be HDR (A2R10G10B10_UNORM_PACK32 in my case), but we don't have any color profiles. Stick back to SDR-only instead.
* fix: delete hand bindings from openxr_actions.json5
Presumably fixes handtracking causing laser offsets to tear off of controllers when hands switch to and from handtrack.
* Comment out fallback controller
* OscSend: support strings poc
- change value delimiter to `;`
- default convert values to String when not converted to another type
* add `_arg<n>="<value>"` format instead of `;` delimiter
that is, vrchat chatbox is controlled like `_press="::OscSend /chatbox/input" _arg0="${send}" _arg1="true" _arg2="true"` now
old format still supported as shorthand, with same "strings can't have spaces" limit as before. `_arg<n>` are appended after these.
* fix accidentally resetting `osc_args` to empty between formats
* update readme to document `::OscSend` paramter-form
* clean up, use `while let` instead of `while match`
* merge `parse_osc_value` into while condition
* remove second log from shortform arg parsing
* reimplement custom audio loading for `toast` and `key_click` using `from_mp3`
* run cargo fmt
* `try_bytes_from_config`: output with `log::trace` when file cannot be opened
* rewrite `try_bytes_from_config`
* use file `read_to_end`, log categories
* edit `register_wgui_samples`
* rework audio functions for loading custom wgui sounds
oh hey, it works!
* clean up
* allow custom `startup` and `app_start` sounds
these sounds are loaded on-demand and never registered; this behaviour is unchanged
* edit `bytes_from_config` outputs
* use return value of `read_to_end` instead of `len()` for reported file size
* implement suggested changes
- remove now-unused `register_mp3_sample_from_assets` function
- replace implementation of `try_bytes_from_config`
- missing the `real_path` context
* swap out `context`s for `inspect_err`s with closures to output `real_path`
* clean up `audio.rs`
- remove unused import
- unify capitalisation + quotes in output messages.
- Rename state -> wayland_state
- Move WayVR IPC server outside "wayvr" (wayland server) feature
- WayVR IPC server is now available without "wayvr" (wayland server) feature
- Remove run_compositor_at_start (run wayland server instantly)
This change is part of a new initiative in Envision to revamp the plugin
system. The new system is such that Envision will no longer install plugins on
its own, instead it will detect system provided plugin applications via
the X-XR-Plugin flag, and be instructed on a specific command to use
with the optional X-XR-Plugin-Exec.
This proposed specification is detailed in the following issue:
<https://gitlab.com/gabmus/envision/-/issues/250>
* add `lowestBattery` parameter to match the casing of other parameters
* add the following parameters:
`isEditModeActive`, `ToggleEditMode`, `currentWorkingSet`, `CurrentProfile`, and `totalWorkingSets`
* treat fully transparent overlays as "not visible"
this fixes the `isWristVisible` parameter; it was always True even when not looking at it since the watch is usually always "active", which was the only condition before.
there are a few gzip-compressed ttf as for now, looks like variable fonts aren't parsed properly by cosmic_text. Not sure why. Also, we probably need to have a fallback for CJK characters in the future, or just fallback to the built-in ones in the OS.
- use parking_lot for mutex (less restrictive and easier to use)
- simplify event callbacks and widget type casting
- defer component initialization at start (required for setting the initial state of sliders)
- fix non-working scroll events
- update testbed.xml
- replace slider with the real one in bar.xml
- show slider text on its handle
* Bring back using dpad for click modifiers
* Use system button for show_hide on WMR controllers
---------
Co-authored-by: hare_ware <3469405-hare_ware@users.noreply.gitlab.com>
* Converted tabs to spaces for consistency
* Added default space_reset binding as space_drag's double click variant for all controllers
* Fixed duplicate space_resets
Contributions are warmly welcome. Before you start, please read the entire document carefully.
## AI Policy
Do not use LLMs to generate substantial pieces of code. You need to fully understand every line of code you change. No exceptions.
Commits, issues and pull requests must be made by humans. Co-authoring by AI is not allowed.
Looking to create an issue on the project, such as a feature request or bug report? Focus on writing what you know for sure in simple terms. We'll figure it out from there.
Usage of Gen-AI for visuals and audio is prohibited.
The only exception is LLM-translated strings generated by the scripts/translator tool.
## Basics
Before committing, make sure to format your Rust code by running:
```
cargo fmt
```
You should also check for any compiler warnings too:
```
cargo check
```
or even better:
```
cargo clippy
```
## Large contributions
If you want to submit a relatively big pull requests, it's highly advisable to create a separate issue request for it. That way we can discuss the approach and sort out the details first.
## Adding translations
Look at `scripts/translator/run.sh` for more information.
## Licensing
WayVR is developed and published under [GPL-3 License](https://www.gnu.org/licenses/gpl-3.0.en.html).
A lightweight OpenXR/OpenVR overlay for Wayland and X11 desktops, inspired by XSOverlay.
# WayVR (previously WlxOverlay-S)
WlxOverlay-S lets you to access your desktop screens while in VR.
A lightweight OpenXR/OpenVR overlay for Wayland and X11 desktops.
In comparison to similar overlays, WlxOverlay-S aims to run alongside VR games and experiences while having as little performance impact as possible. The UI appearance and rendering techniques are kept as simple and efficient as possible, while still allowing a high degree of customizability.
WayVR lets you access your desktop screens while in VR, and even launch apps directly in VR.

In comparison to similar overlays, WayVR aims to run alongside VR games and experiences while having as little performance impact as possible. The UI appearance and rendering techniques are kept as simple and efficient as possible, while still allowing a high degree of customizability.

## Join the Linux VR Community
We are available on either:
We are available on either**Discord** or **Matrix space**:
Questions/issues specific to WlxOverlay-S will be handled in the `wlxoverlay` chat room.
Questions/issues specific to WayVR will be handled in the `wayvr` chat room. Feel free to ask anything.
## Setup
### Installation
There are multiple ways to install WayVR:
1. AppImage: Download from [Releases](https://github.com/wayvr-org/wayvr/releases)
1. AUR package: [wayvr](https://aur.archlinux.org/packages/wayvr) or [wayvr-git](https://aur.archlinux.org/packages/wayvr-git)
1. Nix package: [wayvr](https://search.nixos.org/packages?channel=unstable&show=wayvr&query=wayvr) or [unstable package from nixpkgs-xr](https://github.com/nix-community/nixpkgs-xr)
1. [Docs: Building from source](https://wayvr.org/docs/basics/building-from-source/).
### General Setup
1. Grab the latest AppImage from [Releases](https://github.com/galister/wlx-overlay-s/releases).
1.`chmod +x WlxOverlay-S-*.AppImage`
1. Start Monado, WiVRn or SteamVR.
1. Run the overlay
**Note:** If you are using Monado or WiVRn, no additional setup steps are required for Flatpak Steam compatibility—most people use WlxOverlay-S seamlessly with Monado/WiVRn.
**Note:** If you are using Monado or WiVRn, no additional setup steps are required for Flatpak Steam compatibility—most people use WayVR seamlessly with Monado/WiVRn.
### SteamVR via Steam Flatpak
### SteamVR (PC) via Steam Flatpak
For users specifically running **SteamVR via Steam Flatpak**, follow these steps:
1. Grab the latest AppImage from [Releases](https://github.com/galister/wlx-overlay-s/releases).
1.`WlxOverlay-S-*.AppImage --appimage-extract`
1. Grab the latest AppImage from [Releases](https://github.com/wayvr-org/wayvr/releases).
1.`WayVR-*.AppImage --appimage-extract`
1.`chmod +x squashfs-root/AppRun`
1. Move the newly created `squashfs-root` folder to a location accessible by the Steam Flatpak.
@@ -41,21 +50,37 @@ For users specifically running **SteamVR via Steam Flatpak**, follow these steps
1. Start SteamVR.
1.`flatpak run --command='/path/to/squashfs-root/AppRun' com.valvesoftware.Steam`
AUR package is [wlx-overlay-s-git](https://aur.archlinux.org/packages/wlx-overlay-s-git).
### Installing on Steam Frame
You may also want to [build from source](https://github.com/galister/wlx-overlay-s/wiki/Building-from-Source).
Steam Frame support is experimental. Please report issues.
It's possible to install and run WayVR on the Steam Frame in headless mode. You will not have access to your KDE desktop, but you will be able to run applications in 3D space around you.
Steps to install on Steam Frame:
1. Grab the latest aarch64 AppImage
- For nightly AppImages go [here](https://github.com/wayvr-org/wayvr/actions/workflows/build-appimage.yml) and select the topmost list item a ✅️
- The downloads will be on the bottom of the page (GitHub login required).
1. Install the AppImage using GearLever
1. (Recommended) In Frame's SteamVR settings, set overlay quality to High.
1. Start WayVR from the taskbar (same place where you'd start Destkop)
## First Start
**When the screen share pop-up appears, check the terminal and select the screens in the order it requests.**
**When the screen share pop-up appears, check your notifications or the terminal and select the screens in the order it requests.**
In case screens were selected in the wrong order:
-`rm ~/.config/wlxoverlay/conf.d/pw_tokens.yaml` then restart
-Go to Settings and press `Clear PipeWire tokens` and then `Restart software`
- Pay attention to your notifications, which tell you in which order to pick the screens.
- If notifications don't show, try starting WayVR from the terminal and look for instructions in there.
**SteamVR users**: WlxOverlay-S will register itself for auto-start, so there is no need to start it every time.
**WiVRn users**: Select WayVR from the `Application` drop-down. If there's no such entry, select `Custom` and browse to your WayVR executable or AppImage.
**Envision users**: Set `wlx-overlay-s --openxr --show` as the _Autostart Command_ on your Envision profile! This will show a home environment with headset passthrough by default or a [customizable background](https://github.com/galister/wlx-overlay-s/wiki/OpenXR-Skybox)! If you are using the appimage instead, set the _Autostart Command_ to the location of tha appimage binary, e.g `/full/path/to/wlx-overlay-s.appimage --openxr --show`.
**Envision users**: Go to the Plugins menu and toggle on the WayVR plugin. If WayVR isn't in the Plugins list, or the list is empty, ensure you've installed WayVR fully, such that it appears in your Desktop Environment's application menu. If you've *downloaded* the WayVR AppImage, [Gear Lever](https://github.com/mijorus/gearlever) can *install* it, which creates the application menu entry.
**SteamVR users**: WayVR no longer registers itself for auto-start, due to bugs in SteamVR. For now, you must start WayVR manually.
This will show a home environment with headset passthrough enabled by default or a [customizable background](https://wayvr.org/docs/various/openxr-skybox/)!
**Please continue reading the guide below.**
@@ -63,7 +88,7 @@ In case screens were selected in the wrong order:
### Working Set
The working set consists of all currently selected overlays; screens, mirrors, keyboard, etc.
The working set consists of all currently selected overlays: screens, mirrors, keyboard, etc.
The working set appears in front of the headset when shown, and can be re-centered by hiding and showing again.
@@ -72,9 +97,13 @@ Show and hide the working set using:
- Non-vive controller: double-tap B or Y on the left controller.
- Vive controller: double-tap the menu button on the left controller (for SteamVR, the `showhide` binding must be bound)
Moving overlays: Grab + Joystick
Resizing overlays: Grab + Click + Joystick
### Pointer Modes AKA Laser Colors
Much of the functionality in WlxOverlay-S depends on what color of laser is used to interact with a UI element. \
Much of the functionality in WayVR depends on what color of laser is used to interact with a UI element. \
Using the default settings, there are 3 modes:
- Regular Mode: Blue laser
@@ -85,94 +114,118 @@ Please see the bindings section below on how to activate these modes.
The guide here uses the colors for ease of getting started.
### The Watch
### Edit mode
Ways to enter Edit mode:
- Edit mode button on Watch face
- Taskbar (top of keyboard) hamburger menu
- Edit mode button on the title bar of WayVR apps (next to X button)
Edit mode lets you grab overlays and reposition them in yourset.
It's also possible to change overlay behavior and tweak your overlays in different way.
While in edit mode, try hovering over various overlays to see their options!
### The watch
Check your left wrist for the watch. The watch is the primary tool for controlling the app.
The top of the watch shows device batteries, and the bottom shows your overlay controls.
### The Screens
While in edit mode, the watch can also be grabbed and passed between your hands.
Hovering a pointer over a screen will move the mouse. If there are more than one pointers hovering a screen, the pointer that was last used to click will take precedence.
After grabbing, the watch will automatically attach to the hand that's opposite from the one that held it.
The click depends on the laser color:
### The screens
Hovering a pointer over a screen will move the mouse. If more than one pointer is hovering over a screen, the pointer that was last used to click will take precedence.
The click type depends on the laser color:
- Blue laser: Left click
- Orange laser: Right click
- Purple laser: Middle click
- Stick up/down: Scroll wheel
To **curve a screen**, grab it with one hand. Then, using the other hand, hover the laser over the screen and use the scroll action.
See the [bindings](#default-bindings) section on how to grab, move and resize screens.
### The keyboard
The keyboard is fully customizable via the [keyboard.yaml](https://raw.githubusercontent.com/galister/wlx-overlay-s/main/src/res/keyboard.yaml) file. \
Download it into the `~/.config/wlxoverlay/` folder and edit it to your liking.
The keyboard sends keys to the screen or WayVR application with the most recent mouse interaction.
On top of the keyboard is the taskbar, which lists WayVR apps as well as screens, mirrors and panels overlays.
Typing
- Use the BLUE laser when typing regularly.
- While using ORANGE laser, all keystrokes will have SHIFT applied.
- Purple laser has no effect as of now.
- While using the ORANGE laser, all keystrokes will have SHIFT applied.
- Purple laser is customizable via the settings, no modifier by default.
**Modifier Keys** are sticky. They will remain pressed until a non-modifier key is pressed, the modifier gets toggled off, or the keyboard gets hidden.
**Modifier Keys are sticky**. They will remain pressed until either:
- a non-modifier key is pressed
- the modifier is toggled off by clicking again
- the keyboard is hidden (including via show-hide)
To customize bindings on OpenXR, refer to the [OpenXR Bindings wiki page](https://github.com/galister/wlx-overlay-s/wiki/OpenXR-Bindings).
### Changing Bindings
If your bindings are not supported, please reach out. \
We would like to work with you and include additional bindings.
- SteamVR: Simply change the bindings from the SteamVR bindings section.
- If WayVR doesn't show up on the list, select any other title and then press back on the top left. (SteamVR bug)
- Monado/WiVRn: See WayVR Dashboard → Settings → Controls.
## Customization
See these relevant wiki pages:
- For all available config options, check [Docs: Configuration](https://wayvr.org/docs/basics/configuration/)
- Looking to customize look & feel, or add functionality? See [Docs: Customization](https://wayvr.org/docs/basics/customization/)
- Looking to change the OpenXR background? See [Docs: OpenXR Skybox](https://wayvr.org/docs/various/openxr-skybox/)
## Troubleshooting
When an error is detected, we often print tips for fixing into the log file.
When an error is detected, we often print tips for fixing it into the log file.
Logs will be at `/tmp/wlx.log` for most distros.
Logs will be at `/tmp/wayvr.log` for most distros.
Check [here](https://github.com/galister/wlx-overlay-s/wiki/Troubleshooting) for tips.
Check [here](https://wayvr.org/docs/various/troubleshooting/) for tips.
## Known Issues
### Mouse is not where it should be
### Mouse movement is wrong
Hyprland users: Hyprland v0.41.0 changed their absolute input implementation to one that does not respect existing absolute input standards. Make your voice heard: [Hyprland#6023](https://github.com/hyprwm/Hyprland/issues/6023)・[Hyprland#6889](https://github.com/hyprwm/Hyprland/issues/6889)
**If the mouse is moving on a completely different screen**, the screens were likely selected in the wrong order:
Niri users: use on Niri 0.1.7 or later.
- Go to Settings and press `Clear PipeWire tokens` and then `Restart software`
- Pay attention to your notifications, which tell you in which order to pick the screens.
- If notifications don't show, try starting WayVR from the terminal and look for instructions in there.
X11 users might be dealing with a [Phantom Monitor](https://wiki.archlinux.org/title/Xrandr#Disabling_phantom_monitor).
**If the mouse is on the correct screen but moves in weird ways**, enter Edit Mode, hover the screen and under Mouse Fixes, select the mode that works.
Other desktops: The screens may have been selected in the wrong order, see [First Start](#first-start).
COSMIC desktop:
### Crashes, blank screens
- Due to limitations with COSMIC, the mouse can only move on a single display.
There are some driver-desktop combinations that don't play nice with DMA-buf capture.
X11 users:
Disabling DMA-buf capture is a good first step to try when encountering an app crash or gpu driver reset.
- Might be dealing with a [Phantom Monitor](https://wiki.archlinux.org/title/Xrandr#Disabling_phantom_monitor).
- DPI scaling is not supported and will mess with the mouse.
- Upright screens are not supported and will mess with the mouse.
### Screens or launched apps don't work when auto-started by SteamVR or WiVRn
Without DMA-buf capture, capturing screens takes CPU power, so let's try and not show too many screens at the same time.
SteamVR starts WayVR in the Steam runtime, and systemd/flatpak WiVRn can also start WayVR in a sub-optimal environment.
### Space-drag crashes SteamVR
This has been idenfitied as an issue with SteamVR versions 2.5.5 and above (latest tested 2.7.2). One way to avoid the crash is by switching to the `temp-v1.27.5` branch of SteamVR (via beta selection) and selecting [Steam-Play-None](https://github.com/Scrumplex/Steam-Play-None) under the compatibility tab.
### Modifiers get stuck in weird ways
This is a rare issue that can make KDE Plasma not react to click or keys due to what seems to be a race condition with modifiers. Restarting the overlay fixes this.
The easiest fix is to start WayVR separately. It's possible to start WayVR before starting SteamVR/WiVRn by passing `--wait`:
-`wayvr --wait` or `/path/to/WayVR.AppImage --wait`
### X11 limitations
- X11 capture can generally seem slow. This is because zero-copy GPU capture is not supported on the general X11 desktop. Consider trying Wayland or Picom.
- X11 capture can generally seem slow. This is because zero-copy GPU capture is not supported on the general X11 desktop. Consider trying Wayland.
- DPI scaling is not supported and may cause the mouse to not follow the laser properly.
- Upright screens are not supported and can cause the mouse to act weirdly.
- Screen changes (connecting / disconnecting a display, resolution changes, etc) are not handled at runtime. Restart the overlay for these to take effect.
- Upright screens are not supported and can cause the mouse to not follow the laser properly.
- Screen changes (connecting/disconnecting a display, resolution changes, etc) are not handled at runtime. Restart the overlay for these to take effect.
**WayVR acts as a bridge between Wayland applications and wlx-overlay-s panels, allowing you to display your applications within a VR environment. Internally, WayVR utilizes Smithay to run a Wayland compositor.**
# >> Quick setup <<
#### Configure your applications list
Go to `src/res/wayvr.yaml` to configure your desired application list. This configuration file represents all currently available WayVR options. Feel free to adjust it to your liking.
#### Add WayVR Launcher to your watch
Copy `watch_wayvr_example.yaml` to `~/.config/wlxoverlay/watch.yaml`. This file contains pre-configured **WayVRLauncher** and **WayVRDisplayList** widget types. By default, the _default_catalog_ is used.
That's it; you're all set!
###### _Make sure you have `wayvr` feature enabled in Cargo.toml (enabled by default)_
- Display Wayland applications without GPU overhead (zero-copy via dma-buf)
- Mouse and keyboard input, with precision scrolling support
- Tested on AMD and Nvidia
### Supported software
- Basically all Qt and GTK applications (they work out of the box)
- Most XWayland applications via `cage`
### XWayland
WayVR does not have native XWayland support. You can run X11 applications (or these who require DISPLAY set) by wrapping them in a `cage` program, like so:
```yaml
- name:"Xeyes"
target_display:"Disp1"
exec:"cage"
args:"xeyes -- -fg blue"
```
instead of:
```yaml
- name:"Xeyes"
target_display:"Disp1"
exec:"xeyes"
args:"-fg blue"
```
in `wayvr.yaml` configuration file, in your desired catalog.
Setting `DISPLAY` to an empty string forces various apps to use Wayland instead of X11.
# Troubleshooting
### My application doesn't launch but others do!
Even though some applications support Wayland, some still check for the `DISPLAY` environment variable and an available X11 server, throwing an error. This can also be fixed by running `cage` on top of them.
### Image corruption
dma-buf textures may display various graphical glitches due to unsupported dma-buf tiling modifiers between GLES<->Vulkan on Radeon RDNA3 graphics cards. Current situation: https://gitlab.freedesktop.org/mesa/mesa/-/issues/11629). Nvidia should work out of the box, without any isues. Alternatively, you can run wlx-overlay-s with `LIBGL_ALWAYS_SOFTWARE=1` to mitigate that (only the Smithay compositor will run in software renderer mode, wlx will still be accelerated).
### Floating windows
Context menus are not functional in most cases yet, including drag & drop support.
### Forced window shadows in GTK
GNOME still insists on rendering client-side decorations instead of server-side ones. This results in all GTK applications looking odd due to additional window shadows. [Fix here, "Client-side decorations"](https://wiki.archlinux.org/title/GTK)
<svgxmlns="http://www.w3.org/2000/svg"width="32"height="32"viewBox="0 0 24 24"><!-- Icon from Material Symbols by Google - https://github.com/google/material-design-icons/blob/master/LICENSE -->
<svgxmlns="http://www.w3.org/2000/svg"width="32"height="32"viewBox="0 0 24 24"><!-- Icon from Material Symbols by Google - https://github.com/google/material-design-icons/blob/master/LICENSE -->
<svgxmlns="http://www.w3.org/2000/svg"width="32"height="32"viewBox="0 0 24 24"><!-- Icon from Material Symbols by Google - https://github.com/google/material-design-icons/blob/master/LICENSE --><pathfill="currentColor"d="M2 21v-2h20v2zm1-3v-7h3v7zm5 0V6h3v12zm5 0V9h3v9zm5 0V3h3v15z"/></svg>
<svgxmlns="http://www.w3.org/2000/svg"width="32"height="32"viewBox="0 0 24 24"><!-- Icon from Tabler Icons by Paweł Kuna - https://github.com/tabler/tabler-icons/blob/master/LICENSE -->
<svgxmlns="http://www.w3.org/2000/svg"width="32"height="32"viewBox="0 0 24 24"><!-- Icon from Material Symbols by Google - https://github.com/google/material-design-icons/blob/master/LICENSE --><pathfill="#33FF99"d="m9.55 18l-5.7-5.7l1.425-1.425L9.55 15.15l9.175-9.175L20.15 7.4z"/></svg>
<svgxmlns="http://www.w3.org/2000/svg"width="32"height="32"viewBox="0 0 24 24"><!-- Icon from Material Symbols by Google - https://github.com/google/material-design-icons/blob/master/LICENSE -->
<svgxmlns="http://www.w3.org/2000/svg"width="32"height="32"viewBox="0 0 24 24"><!-- Icon from Material Symbols by Google - https://github.com/google/material-design-icons/blob/master/LICENSE --><pathfill="currentColor"d="m12 13.4l-4.9 4.9q-.275.275-.7.275t-.7-.275t-.275-.7t.275-.7l4.9-4.9l-4.9-4.9q-.275-.275-.275-.7t.275-.7t.7-.275t.7.275l4.9 4.9l4.9-4.9q.275-.275.7-.275t.7.275t.275.7t-.275.7L13.4 12l4.9 4.9q.275.275.275.7t-.275.7t-.7.275t-.7-.275z"/></svg>
<!-- Icon from Phosphor by Phosphor Icons - https://github.com/phosphor-icons/core/blob/main/LICENSE -->
<path
fill="currentColor"
d="m 223.99926,120.14002 v 90.93 c 0,46.2 -36.85,84.55 -83,85.06 a 83.7,83.7 0 0 1 -60.400003,-24.59 c -21.81,-23.07 -46.45,-79.4 -46.45,-79.4 a 16,16 0 0 1 6.53,-22.23 c 7.66,-4 17.1,-0.84 21.4,6.62 l 21,36.44 a 6.09,6.09 0 0 0 6,3.09 h 0.12 a 8.19,8.19 0 0 0 6.800001,-8.18 v -103.74 A 16,16 0 0 1 112.76926,88.140018 c 8.61,0.4 15.23,7.82 15.23,16.430002 v 63.57 a 8,8 0 0 0 8.53,8 8.17,8.17 0 0 0 7.47,-8.25 V 88.140018 a 16,16 0 0 1 16.77,-15.999999 c 8.61,0.4 15.23,7.82 15.23,16.429999 v 87.570002 a 8,8 0 0 0 8.53,8 8.17,8.17 0 0 0 7.47,-8.25 v -55.3 c 0,-8.61 6.62,-16 15.23,-16.43 a 16,16 0 0 1 16.77,15.98"
id="path1"/>
<path
fill="currentColor"
d="M 263.19112,258.73409 V 112.03922 h 18.49095 v 130.25847 h 64.10196 v 16.4364 z"
<!-- Icon from Phosphor by Phosphor Icons - https://github.com/phosphor-icons/core/blob/main/LICENSE -->
<path
fill="currentColor"
d="M 30.079989,119.60999 V 210.54 c 0,46.2 36.85,84.55 83.000011,85.06 a 83.7,83.7 0 0 0 60.4,-24.59 c 21.81,-23.07 46.45,-79.4 46.45,-79.4 a 16,16 0 0 0 -6.53,-22.23 c -7.66,-4.00001 -17.1,-0.84 -21.4,6.62 l -21,36.44 a 6.09,6.09 0 0 1 -6,3.09 h -0.12 a 8.19,8.19 0 0 1 -6.8,-8.18 V 103.60999 a 16,16 0 0 0 -16.77,-16 c -8.61,0.4 -15.23,7.82 -15.23,16.43 V 167.61 a 8,8 0 0 1 -8.53,8 8.17,8.17 0 0 1 -7.47,-8.25 V 87.60999 A 16,16 0 0 0 93.309986,71.609992 c -8.609997,0.4 -15.229997,7.819999 -15.229997,16.429998 V 175.61 a 8,8 0 0 1 -8.53,8 8.17,8.17 0 0 1 -7.47,-8.25 v -55.30001 c 0,-8.61 -6.62,-16 -15.23,-16.43 a 16,16 0 0 0 -16.77,15.98"
id="path1"/>
<path
d="m 301.74274,111.50919 q 27.32551,0 40.26918,10.4782 13.14912,10.27275 13.14912,31.22916 0,11.71094 -4.31456,19.51824 -4.31455,7.80729 -11.09457,12.53275 -6.57456,4.52001 -13.97094,7.19093 l 40.26918,65.7456 h -21.57277 l -35.54372,-60.60923 h -29.17461 v 60.60923 H 261.2681 V 111.50919 Z m -1.02728,16.02549 h -20.95641 v 54.44558 h 21.98369 q 17.87458,0 26.09278,-6.98547 8.2182,-7.19092 8.2182,-20.95642 0,-14.38185 -8.62911,-20.34004 -8.62911,-6.16365 -26.70915,-6.16365 z"
<svgxmlns="http://www.w3.org/2000/svg"width="32"height="32"viewBox="0 0 24 24"><!-- Icon from Material Design Icons by Pictogrammers - https://github.com/Templarian/MaterialDesign/blob/master/LICENSE -->
<svgxmlns="http://www.w3.org/2000/svg"width="32"height="32"viewBox="0 0 24 24"><!-- Icon from Material Symbols by Google - https://github.com/google/material-design-icons/blob/master/LICENSE -->
<svgxmlns="http://www.w3.org/2000/svg"width="32"height="32"viewBox="0 0 24 24"><!-- Icon from Material Symbols by Google - https://github.com/google/material-design-icons/blob/master/LICENSE -->
Loaded 100 of 816 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.