No description
  • Python 96.9%
  • Shell 1.3%
  • Nix 1.2%
  • CSS 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-06-02 22:40:41 +02:00
.direnv restore workspaces path 2025-05-28 11:57:35 +03:00
.github Update FUNDING.yml 2024-02-16 13:23:30 +01:00
nwg_displays use wlr-randr to get more info 2026-06-02 22:13:25 +02:00
.envrc add profile saving in config dir 2025-05-20 13:57:08 +03:00
.gitignore wip; mango ipc doesn't provide all properties 2026-06-02 20:23:02 +02:00
flake.lock fix(flake): use the same Python version for buildPythonApplication and for propagatedBuildInputs 2023-11-04 14:52:47 +02:00
flake.nix remove wlr-randr dependency 2024-03-20 01:38:41 +01:00
install.sh feat: implement toggle profile wallpapers script 2026-01-12 11:20:15 -03:00
LICENSE Create LICENSE 2022-07-20 01:20:56 +02:00
nwg-displays.desktop add .desktop file 2022-03-08 14:08:56 +01:00
nwg-displays.svg add icon 2022-03-08 14:10:48 +01:00
README.md update readme 2026-06-02 22:40:41 +02:00
setup.py bump to 0.4.3 2026-05-13 03:16:43 +02:00
uninstall.sh add uninstall script 2025-02-26 23:47:57 +01:00

Forked

I forked this repo because I started using MangoWC and I really like the app. Since the fork didn't support tags and some other functionality, I only added the features that I needed.

nwg-shell logo

nwg-displays


This application is a part of the nwg-shell project.

Nwg-displays is an output management utility for sway, Hyprland and Niri Wayland compositor, inspired by wdisplays and wlay. The program is expected to:

  • provide an intuitive GUI to manage multiple displays;
  • apply settings;
  • save outputs configuration to a text file;
  • save workspace -> output assignments to a text file;
  • support sway, Hyprland and Niri only.

screenshot

Installation

Install from your linux distribution repository if possible.

Packaging status

Otherwise, clone this repository and run the install.sh script.

Dependencies

  • gtk-layer-shell
  • gtk3
  • python
  • python-gobject
  • python-i3ipc
  • python-build (make)
  • python-installer (make)
  • python-setuptools (make)
  • python-wheel (make)

Usage

$  nwg-displays -h
usage: nwg-displays [-h] [-m MONITORS_PATH] [-n NUM_WS] [-v]

options:
  -h, --help            show this help message and exit
  -m MONITORS_PATH, --monitors_path MONITORS_PATH
                        path to save the monitors.conf file to, default: ~/.config/hypr/monitors.conf
  -n NUM_WS, --num_ws NUM_WS
                        number of Workspaces in use, default: 10
  -v, --version         display version information

sway

The configuration saved to a file may be easily used in the sway config:

...
include ~/.config/sway/outputs
...

The program also saves the ~/.config/sway/workspaces file, which defines the workspace -> output associations.

workspace 1 output DP-1
workspace 2 output DP-1
workspace 3 output DP-1
workspace 4 output eDP-1
workspace 5 output eDP-1
workspace 6 output eDP-1
workspace 7 output HDMI-A-1
workspace 8 output HDMI-A-1

You may include it in the sway config file, instead of editing associations manually:

...
include ~/.config/sway/workspaces
...

Use --generic_names if your output names happen to be different on every restart, e.g. when you use Thunderbolt outputs.

Use --num_ws if you use workspaces in a number other than 8.

Hyprland

Monitors:

Instead of configuring as described in Wiki, insert this line:

source = ~/.config/hypr/monitors.conf

For version 0.55 and greater (using Lua), insert this line:

require("monitors")

Default workspace and Binding workspaces to a monitor:

Insert:

source = ~/.config/hypr/workspaces.conf

For version 0.55 and greater, insert:

require("workspaces")

Do not set disable_autoreload true in Hyprland settings, or you'll have to reload Hyprland manually after applying changes.

Niri

Outputs:

The program automatically adds an include directive to your ~/.config/niri/config.kdl file:

include "monitor.kdl"

The configuration is saved to ~/.config/niri/monitor.kdl in KDL format:

Niri will automatically reload the configuration when you apply settings in nwg-displays.

Note: Niri uses dynamic workspaces, so the workspace assignment feature is not available for Niri.

Settings

The runtime configuration file is placed in your config directory, like ~/.config/nwg-displays/config. It's a simple JSON file:

{
  "view-scale": 0.15,
  "snap-threshold": 10,
  "indicator-timeout": 500
}
  • view-scale does not need to be changed manually. The GUI takes care of that.
  • snap-threshold specifies the flush margin of widgets representing displays. I added this value just in case, as I have no high-DPI display to test the stuff on.
  • indicator-timeout determines how long (in milliseconds) the overlay identifying screens should be visible. Set 0 to turn overlays off.