diff --git a/docs/config.md b/docs/config.md index c25a5e6e..9a93514f 100644 --- a/docs/config.md +++ b/docs/config.md @@ -68,9 +68,11 @@ alt-m = "toggle-mono" # windowed and fullscreen. alt-u = "toggle-fullscreen" -# The focus-parent action moves the keyboard focus to the parrent of +# The focus-parent action moves the keyboard focus to the parent of # the currently focused window. alt-f = "focus-parent" +# The open-control-center action opens the control center. +alt-c = "open-control-center" # The close action requests the currently focused window to close. alt-shift-c = "close" # The toggle-floating action changes the currently focused window between diff --git a/docs/features.md b/docs/features.md index 92e3eb2a..0ed92350 100644 --- a/docs/features.md +++ b/docs/features.md @@ -142,6 +142,10 @@ Jay uses frame scheduling to achieve input latency as low as 1.5 ms. Jay supports the color management protocol and HDR10. +## Night Light + +Jay supports night-light applications via `zwlr_gamma_control_manager_v1`. + ## Window and Client Rules Jay supports powerful window and client rules. diff --git a/release-notes.md b/release-notes.md index 3e4b502b..1c4a6c3b 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,5 +1,322 @@ # Unreleased +## Fixes + +As always, this release contains many bug fixes. Thanks to the following people for +reporting or fixing bugs: + +- @danielfrrrr +- @disluckyguy +- @flammablebunny +- @Jeff-WuYo +- @khyperia +- @kotarac +- @krakow10 +- @KyunLFA +- @llyyr +- @luvvlyjude +- @Richochet1 +- @rrtt217 +- @sday-ssc +- @Stoppedpuma + +## Control Center + +Jay now has a built-in control center that can be opened with the `open-control-center` +action. In the default config, this action is bound to `alt-c`. + +The control center runs in the same thread as the rest of the compositor and therefore has +easy access to all compositor internals. In this version it does not make much use of this +ability and limits itself to exposing the capabilities that are already available through +the configuration and on the command line. + +Since the control center runs in the same thread, it also takes away resources from the +rest of the compositor and might increase latency. You should close the control center +when you are not using it. + +## Support for Render-Only GPUs + +Jay now supports render-only GPUs, that is, GPUs that themselves don't support driving +displays. This is useful on some embedded devices where the GPU that supports accelerated +rendering is render-only and displays are connected to a separate GPU that doesn't support +accelerated rendering. On such devices, you would want to use the render-only GPU as the +primary GPU. + +You can test this via `sudo modprobe vgem` which will create a virtual render-only GPU. + +## Vulkan Improvements + +- Jay now ships pre-compiled shaders. You no longer need to have shaderc installed to + compile Jay. + +- The renderer will now fall back to software rendering in virtual machines where + accelerated rendering is not available. Previously this would fall back to software + rendering via OpenGL. + +- The blend space can now be configured. Previously the renderer always blended in linear + space which made some transparent textures much lighter than intended. Since most + textures are designed to be blended in sRGB space, this is the new default. If you're + not using HDR, this is also significantly more efficient. The easiest way to temporarily + change the blend space is in the control center in the outputs pane. + +- Shared-memory buffers can now be imported directly into the renderer via the udmabuf + mechanism. This can significantly improve the compositor-side performance by reducing + the number of copies from 2 to 1. On integrated GPUs, the renderer will try to use such + buffers directly as images, eliminating all copies. + +- The renderer will now opportunistically use timeline semaphores as syncobjs which + eliminates a significant number of system calls. This is known to not work with the + Nvidia driver since it does not use syncobjs for timeline semaphores. A new vulkan + extension for official timeline semaphore/syncobj interop is being discussed at Khronos, + which would allow this feature to also work on Nvidia. + +## Toml Improvements + +- `exec` actions now have a `shell` field to execute a program via the shell. For example, + + ```toml + [shortcuts] + alt-x = { type = "exec", exec.shell = "echo $WAYLAND_DISPLAY >file" } + ``` + +- The config can now be reloaded automatically when the config file has changed. This is + disabled by default and can be enabled with the top-level, boolean `auto-reload` field. + + Note that reloading the config has side effects such as reverting changes to the theme + made via the command line and the control center. + + Thanks to @disluckyguy for implementing this. + +## Client Capabilities + +Client rules can now grant clients additional capabilities. This allows more fine-grained +control over exposed globals in contrast to the existing feature that only allowed +granting all capabilities to a client. See the next section for an example. + +## Tagging Clients + +You can now add a _tag_ to applications launched via `exec` actions and on the command +line. This tag applies to the application and all of its children. For example, on the +command line + +```shell +~$ jay run-tagged my-tag chromium +``` + +and in an action + +```toml +[shortcuts] +alt-x = { type = "exec", exec.prog = "chromium", exec.tag = "my-tag" } +``` + +This tag can in turn be used in client rules to match clients: + +```toml +[[clients]] +match.tag = "my-tag" +capabilities = ["data-control"] +``` + +Tags are incompatible with `exec.privileged = true`. All capabilities must be assigned via +client rules. + +## Pid Subcommand + +The new `jay pid` subcommand prints the process ID of Jay and exits. This can be useful +when debugging issues and can be used as follows: + +```shell +~$ cd /proc/$(jay pid) +~$ sudo strace -p $(jay pid) +``` + +## Tray Applications + +Jay now supports running almost all wayland-native applications as tray applications. This +can be accomplished with the +[window-to-tray](https://github.com/mahkoh/wl-proxy/tree/master/apps/window-to-tray) +tool from the wl-proxy project. + +For example, to have an easily accessible volume mixer in the tray: + +```shell +~$ window-to-tray pavucontrol-qt +``` + +## Keymaps from RMLVO Names + +In addition to XKB, keymaps can now also be specified via their RMLVO names that might be +known from other compositors: + +```toml +keymap.rmlvo = { + layout = "us,de", + variants = "dvorak", + options = "grp:ctrl_space_toggle", +} +``` + +Thanks to @khyperia for implementing this. + +## Night Light + +Jay now supports night-light applications that attach gamma tables to outputs via +`zwlr_gamma_control_manager_v1`. + +Thanks to @khyperia for implementing this. + +## Improved Multi-GPU Blits + +On some systems, displays are connected to GPUs other than the GPU used for rendering. The +embedded scenario with render-only GPUs is one example. Another are laptops with dedicated +GPUs where the internal display is hard-wired to the iGPU and external displays are +hard-wired to the dGPU. + +Jay has always supported such systems with the open-source mesa drivers. However, it did +not support using Nvidia devices as the primary GPU and the method used to copy images +from the primary GPU to the output GPU was not optimized. + +This release adds several new implementations for these blits: + +- direct-pull +- direct-sampling +- indirect-pull +- udmabuf +- direct-push + +By default, the compositor will try to use the methods in this order. It is currently not +possible to know which method is the most optimal on a given system without trying them. +In the embedded scenario, direct-push is most likely the most efficient, but on a dual-AMD +system it is likely to crash the compositor due to bugs in the AMD driver. + +You can modify the order in which these methods are attempted, and exclude methods, with +the `JAY_PRIME_METHODS` environment variable. For example: + +```shell +~$ JAY_PRIME_METHODS=udmabuf,-direct-push jay run +``` + +This would result in the methods being attempted in this order: + +- udmabuf +- direct-pull +- direct-sampling +- indirect-pull + +On systems with an Nvidia primary device and mesa secondary devices, you might +need to explicitly select the udmabuf method due to bugs in the Nvidia driver. + +## Look & Feel Improvements + +- The bar can now be moved to the bottom of the screen. + + ```toml + [theme] + bar-position = "bottom" + ``` + + Thanks to @kotarac for implementing this. + +- The width of the separator between the bar and the rest of the output can now + be configured. + + ```toml + [theme] + bar-separator-width = 2 + ``` + + Thanks to @kotarac for implementing this. + +- Directional commands now work across neighboring outputs. + + Thanks to @ArthurHeymans for implementing this. + +- Jay can now be configured to display workspaces in alphabetical order. + + ```toml + workspace-display-order = "sorted" + ``` + + Thanks to @kotarac for implementing this. + +- All configurable sizes can now be reduced to 0 instead of 1. + +- The bar and title heights can now be configured separately. + + ```toml + [theme] + title-height = 16 + bar-height = 17 + ``` + +## Fallback Output Mode + +By default, when opening new windows or executing actions that don't specify an output but +need an output, Jay will use the output that contains the cursor. To enable more +keyboard-centric workflows, Jay can now be configured to fall back to the output that has +the keyboard focus. + +```toml +fallback-output-mode = "focus" +``` + +To allow this to work with empty outputs, it is now also possible to + +- specify an output when creating a workspace + + ```toml + [shortcuts] + alt-x = { type = "show-workspace", name = "abcd", output.connector = "DP-3" } + ``` + +- focus an empty workspace. + +Thanks to @khyperia for implementing this. + +## Disabling Xwayland + +If you don't need Xwayland and want to ensure that no application uses Xwayland, +you can now disable Xwayland outright: + +```toml +[xwayland] +enabled = false +``` + +Thanks to @khyperia for implementing this. + +## Simple Input Method + +If no external input method is used, Jay will now provide a built-in simple +input method. This IM can operate in two modes: + +- By default, it provides completions based on `~/.XCompose`. +- When the `enable-unicode-input` action is executed, it allows inputting + characters by their unicode code point. + +The simple input method can be disabled: + +```toml +[simple-im] +enabled = false +``` + +## Protocol Updates and Additions + +This version of Jay supports the following new and improved protocols: + +| Global | Old | New | +|------------------------------------|:----|:----| +| jay_popup_ext_manager_v1 | | 1 | +| wl_compositor | 6 | 7 | +| wl_data_device_manager | 3 | 4 | +| wl_seat | 9 | 10 | +| wp_color_manager_v1 | 1 | 2 | +| wp_color_representation_manager_v1 | | 1 | +| zwlr_gamma_control_manager_v1 | | 1 | +| zxdg_decoration_manager_v1 | 1 | 2 | + # 1.11.0 (2025-07-26) ## Fixes