Open-source project
nwg-piotr/nwg-look avatar
nwg-piotr/nwg-look

nwg-look: a GTK settings editor that writes gsettings directly on Wayland

GTK3 settings editor adapted to work in the wlroots environment

1,017 stars37 forksGoMIT

At a glance

What is it?
nwg-look is a GTK3 appearance editor written in Go, adapted for wlroots based Wayland compositors, and its pitch is that you can delete the workarounds: no Xwayland, no gsettings calls in your sway config, no import-gsettings script. It also keeps a compatibility layer for the older LXAppearance settings file, which is where the interesting mapping table lives.
Who is it for?
Adopt nwg-look if you run a wlroots based Wayland compositor, especially sway, and you want GTK appearance settings to take effect without the settings.ini and import-gsettings dance. Do not adopt it if you are on X11 or on a desktop that already handles GTK settings, since the whole value is the direct gsettings path.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 9 days ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The two conveniences this editor removes

nwg-look is a GTK settings editor designed to work properly in a wlroots based Wayland environment, and the look and feel is strongly influenced by LXAppearance. The README then states the two problems it sets out to solve, and they are the reason the project exists. The first is that it works natively on Wayland, so you no longer need Xwayland nor the strange environment variables that Xwayland needs in order to run. The second is that it applies gsettings directly, with no need for the workarounds documented in the sway wiki page on GTK 3 settings on Wayland. In concrete terms, you do not need to set gsettings in the sway config file and you do not need the `import-gsettings` script. That is a small feature on paper and a real quality of life improvement in practice, because the traditional approach puts a second source of truth, a shell snippet in your compositor config, between you and the settings you think you are editing. It is also part of the nwg-shell project, so it fits into a wider set of tools by the same author rather than standing alone.

What to delete from your sway config

The sway section of the README is written for a reader who has already followed the wiki instructions and now has a config full of GTK boilerplate. The default way to apply GTK settings on sway is described in the GTK 3 settings on Wayland wiki section, and the README says you no longer need it, because nwg-look loads and saves gsettings values directly and does not care about the `~/.config/gtk-3.0/settings.ini` file, and only exports your settings to it unless you use the `-n` flag. The consequence is that the block of gsettings calls in a sway config becomes redundant, and the README shows the exact shape of it: a `set $gnome-schema org.gnome.desktop.interface` line, then an `exec_always` block that sets the GTK theme, the icon theme, the cursor theme and the font name, or the alternative `exec_always import-gsettings` line. The instruction is to remove these lines. The `exec_always` part is the detail that matters, since it runs on every compositor reload, so the redundancy was not just conceptual but a small recurring cost.

The command line flags, and applying settings without the GUI

The tool exposes a small set of flags, and they are the reason it can live in a script.

text
$ nwg-look -h
Usage of nwg-look:
  -a	Apply stored gsetting and quit
  -d	turn on Debug messages
  -r	Restore default values and quit
  -v	display Version information
  -x	eXport config files and quit

The `-a` flag is the one the README flags as added just in case. The reasoning is that pressing the Apply button in the window applies the changes and also creates a backup file, so the same application can be re-run later with `nwg-look -a` to apply the stored gsettings again without opening the graphical interface, and the author adds that there is no idea whether it will be useful in real life. The other flags round out a sensible headless set, with `-r` to restore default values and quit, `-x` to export the config files and quit, `-d` for debug messages and `-v` for the version. For a compositor setup that runs on every login, being able to apply the stored settings from a command is the difference between a tool you configure once and a tool you have to open by hand.

The compatibility table, and the settings that are quietly ignored

Some gsettings keys have no direct counterparts in the Gtk.Settings type, and the README explains what happens in that case, which is that while exporting the settings.ini file nwg-look uses the most similar values. The mapping is short and specific. The `font-hinting` key maps onto `gtk-xft-hintstyle`, `font-antialiasing` onto `gtk-xft-antialias` and `font-rgba-order` onto `gtk-xft-rgba`. Then there are two groups of settings that were kept only for LXAppearance compatibility, and for possible use of your settings.ini file elsewhere. Toolbar style and toolbar icon size have been deprecated since GTK 3.10 and the values are ignored. Show button images and show menu images have also been deprecated since GTK 3.10 and have no corresponding gsettings values at all. That is worth knowing before you spend an afternoon tweaking a toggle that turns out to do nothing, and it is a fair example of a small application documenting its own limitations rather than leaving users to guess.

Dependencies, packaging and building it yourself

The dependency list is short and mostly desktop level. You need Go as a build dependency, gtk3, xcur2png, gsettings and canberra-gtk-play, and depending on your distribution you may also need the gotk3 dependencies installed. There is a note that a GTK module such as `canberra-gtk-module` may need to be loaded for sounds to be played across applications, which is the kind of detail that produces silence in a fresh install. Packaging is in good shape, with a Repology badge showing nwg-look packaged across distributions. If it has not been packaged for your distribution, the README gives a three step route: clone the repository and change into it, run `make build`, and run `sudo make install`.

bash
make build
sudo make install

The Makefile is conventional and gives you the usual control. The `PREFIX` variable defaults to `/usr` and can be overridden for a different install directory, so an install into `/usr/local` is a matter of passing it on the command line. There is a `get` target that fetches the Go dependencies, a `build` target that produces the binary in `bin/`, an `install` target that copies the binary, the Glade interface file, the translations, the desktop entry, the icon and the licence into the right places, an `uninstall` target, and a `run` target that runs the program straight from the source with `go run .`.

How a GTK3 app is put together in Go

The repository is small enough to read in one sitting, which is a virtue for a settings editor. The source is `main.go`, plus `uicomponents.go` and `tools.go`, the interface description lives in `stuff/main.glade` alongside a desktop entry and an SVG icon in the same directory, the translations are in `langs/`, and there is a `stylepak/` directory at the top level of the repository. The Go module declares Go 1.26.0 and depends on `github.com/gotk3/gotk3` for the GTK3 bindings, pinned to a specific pseudo-version, and on `sirupsen/logrus` for logging, with `golang.org/x/sys` pulled in indirectly. The gotk3 pin is the interesting part for anyone maintaining a fork, because a GTK binding is a moving target and the exact commit is what keeps the build reproducible. There is no separate runtime dependency on a Python or C library of its own, since the GTK side is handled by the binding, which is what makes a single Go binary plausible for a tool this small.

A small tool on a fast release cadence

The project is MIT licensed with a LICENSE file at the root, and the release history shows a quick rhythm, with 1.1.2 on 2026-09-29, 1.2.0 on 2026-10-12 and 1.2.1 on 2026-10-14. The last push was on the same day as the newest tag, so the project is actively worked on rather than merely maintained. The scope is deliberately narrow, a settings editor for one desktop toolkit on one display server, and that narrowness is what makes the tool usable, since the alternative in the sway world is a wiki page of shell snippets you have to find, understand and paste. The one thing to keep in mind is that it is one application in a family, since it is part of the nwg-shell project, and a user who adopts it will likely meet the author's other tools shortly afterwards. The other thing to keep in mind is what it is not, because it does not replace a GTK theme engine or a desktop settings panel, it replaces the specific workaround of driving GTK appearance settings from a Wayland compositor configuration file.

Editorial conclusion

Adopt nwg-look if you run a wlroots based Wayland compositor, especially sway, and you want GTK appearance settings to take effect without the settings.ini and import-gsettings dance. Do not adopt it if you are on X11 or on a desktop that already handles GTK settings, since the whole value is the direct gsettings path. Before you remove the sway configuration, read the compatibility section, because some gsettings keys have no counterpart in the Gtk.Settings type and are mapped to the most similar values, and two groups of settings are ignored entirely because they were deprecated in GTK 3.10. Also install the listed dependencies, since the cursor export path needs xcur2png and the sound feedback needs the canberra modules. The licence is MIT, the current release is 1.2.1 from 2026-10-14, and the last push was the same day.

Frequently asked questions

What problem does nwg-look solve for sway users?

It applies GTK settings through gsettings directly, so you no longer need Xwayland for it, and you can remove the gsettings calls from your sway config and the `import-gsettings` script. It does not care about the `~/.config/gtk-3.0/settings.ini` file, and only exports to it unless you use the `-n` flag.

Which command line flags does nwg-look have?

There is `-a` to apply the stored gsetting and quit, `-d` for debug messages, `-r` to restore default values and quit, `-v` to display version information and `-x` to export the config files and quit. The `-a` flag exists because pressing Apply also creates a backup file, so the settings can be reapplied without the GUI.

How do I build and install nwg-look?

It is packaged for many distributions, shown by the Repology badge. Otherwise clone the repository, run `make build` and then `sudo make install`, and override the install prefix with `sudo make PREFIX=/usr/local install` if you want it somewhere other than the default `/usr`.

Which GTK settings does nwg-look not support?

Toolbar style and toolbar icon size are kept for LXAppearance compatibility but were deprecated in GTK 3.10 and the values are ignored, and show button images and show menu images were also deprecated in GTK 3.10 and have no corresponding gsettings values. Keys such as font-hinting and font-antialiasing map onto the closest Gtk.Settings equivalents when exporting.

Official sources

  1. Issues
  2. License: MIT
  3. nwg-piotr/nwg-look on GitHub
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/nwg-piotr-nwg-look.svg)](https://hysenlabs.com/projects/nwg-piotr-nwg-look)

Was this useful?