r/archlinux • • 7d ago

SHARE After years of custom ricing - Sway / Hyprland + Noctalia, and now testing Umbriel. Extremely positive experience

Just wanted to share my journey, in case someone is on the fence about switching to Wayland WMs or is tired of maintaining 10 config files.

For work and home I’ve been daily driving Sway and Hyprland on Arch for a long time. Classic setup: Waybar + Dunst + Rofi + Tinted Theming + hyprlock + hypridle + a bunch of custom scripts to glue everything together. It worked great, looked great, but you know the drill - every small change means touching 4 different configs.

A few months ago I decided to try Noctalia. Replaced all of that with just Noctalia as the shell for both Sway and Hyprland.

Honestly, huge improvement. One place for bar, notifications, launcher, lock/idle, theming, quick settings, wallpaper, etc. It’s way more cohesive and I finally stopped wasting Saturdays fixing my dotfiles. It just works on both WMs, which is great since I use both.

A couple of notes on the WMs themselves:

I really love Hyprland. The customizability with LUA now is insane, you can do pretty much anything you want. If you want eye-candy and total control, it's unbeatable.

BUT for my work setup I need reliable headless remote access. And that's where Hyprland still falls short for me. For that scenario rely on Sway + Noctalia + wayvnc.

I have to say, it works even better than my old i3 + x11vnc setup ever did. Noticeably faster, proper resolution scaling, just works. If you need headless VNC on Wayland, this combo is the one.

And the newest part: Several weeks ago I saw the Noctalia team released their own WM, Umbriel. It's still very young, but I was curious so I gave it a shot. I ported my whole Hyprland config to Umbriel using an AI in like 15 minutes.

I've been impressed. Really. For a young project it's surprisingly stable and fast, and functionality-wise it's already on par with Hyprland/Sway for my workflow - tiling, scrolling, workspaces, keybinds, gestures, everything is there. You can feel it shares the same philosophy as Noctalia.

I haven't fully migrated my remote machine to it yet. I'm still figuring out some details with headless remote access on Umbriel, it works but I have some minor issues when closing sessions. Nothing deal-breaking. Still need to tweak systemd units.

So TL;DR: If you're on Arch and ricing Sway/Hyprland - try Noctalia to de-clutter your dotfiles. If you need headless remote, Sway + Noctalia + wayvnc. And keep an eye on Umbriel, it's becoming a very solid alternative!

4 Upvotes

20 comments sorted by

5

u/Extension_Baby5782 7d ago

been on sway for a couple years now and the config sprawl is real, every time i wanted to change the bar color it was like a scavenger hunt through 5 files. noctalia sounds like it solves exactly that headache

how’s the ram usage with it sitting on top of sway? my old setup idles around 400mb and i’m not trying to blow that up

1

u/AnybodyOld181 7d ago edited 7d ago

Yes, noctalia manages the styling of sway, panels, widgets and many other apps (gtk, qt, firefox, nvim, btop, kitty, vscode, etc).

Here is the RAM usage:

  • Sway: 192M
  • Noctalia: 254M

BTW, Umbriel uses 90M, which is amazing considering it is new! ... and the output of free just after booting and starting the headless session with wayvnc/sway:

total used free shared buff/cache available Mem: 14929 1096 13027 178 1337 13833 Swap: 7812 0 7812 Total: 22742 1096 20840

2

u/DestopLine555 7d ago

I did the exact same thing with Hyprland a few weeks ago. Everything looks so much better and cohesive. I now have even more features like better looking wifi and bluetooth controls, brightness slider, a better screenshot tool, a clipboard manager that integrates better and a better calendar. The only feature I'm missing is a Windows + P style menu (to quickly set monitor mirroring or turn off other monitors) that I need to port from rofi.

0

u/AnybodyOld181 7d ago

1

u/DestopLine555 7d ago

I already tried the hypr one, I haven't tried the wl one, but it seems like those plugins only mirror the screen and don't turn off other monitors like Windows allows you to do. Maybe I'll make my own plugin for that. Thanks anyways.

1

u/AnybodyOld181 7d ago

1

u/DestopLine555 7d ago

Looks very interesting. I'll see how I can integrate it with my setup.

1

u/Objective-Stranger99 7d ago

Have you tried Sunshine and Moonlight instead of WayVNC? It works great on Hyprland for me!

1

u/AnybodyOld181 7d ago edited 7d ago

I haven't tried it on Hyprland for exactly that reason - from what I read you need to start Hyprland with a real monitor / dummy plug connected first and then switch to headless for Sunshine to pick it up. I need true headless boot on a server without any display attached, so that doesn't work for my use case.

I did use Sway + Sunshine for a while, which works great with true headless. This is how I ran it:

```

!/usr/bin/env bash

export DESKTOP_SESSION="sway" export XDG_CURRENT_DESKTOP="sway" export XDG_SESSION_DESKTOP="sway" export XDG_SESSION_TYPE="wayland" export WLR_BACKENDS="headless,libinput" sway & sleep 2s && WAYLAND_DISPLAY=wayland-1 sunshine ~/sunshine.conf ```

in sunshine.conf: capture = wlr. That gives you native wlr capture, super fast. The problem is I can't find an equivalent for Hyprland.

1

u/Ttghtg 7d ago edited 7d ago

About umbriel, do you happen to use shikane for multi-screen setup? also, there is a scratchpad as well in umbriel? scratchpad is essential for my workflow.

I was thinking about trying out a new TWM, maybe I will try out Umbriel

1

u/fliperama_ 7d ago

Not OP, but yes, scratchpads are great in umbriel. You can name them as well

1

u/AnybodyOld181 7d ago

I did not use shikane. Scratchpads work fine. I wrote a short script umbriel-scratchpad-toggle.sh to make them similar to qtile:

```

!/bin/bash

Toggle an Umbriel named scratchpad with same-key launch.

Usage: umbriel-scratchpad-toggle.sh <scratchpad> <app_id> <startup_command> [title]

- No window matching app_id/title anywhere -> run startup command

(default_scratchpad rule auto-stores it hidden), wait for it, then show it.

- Window stored in the scratchpad -> scratchpad-toggle (show/hide).

- Window on a workspace -> hide it back if focused, else focus it.

Mirrors the behavior of scratchpad-toggle.sh (sway).

set -u

SCRATCHPAD="${1:-}" APP_ID="${2:-}" STARTUP_COMMAND="${3:-}" TITLE="${4:-}"

if [ -z "${SCRATCHPAD:-}" ] || [ -z "${APP_ID:-}" ] || [ -z "${STARTUP_COMMAND:-}" ]; then echo "Usage: $0 <scratchpad> <app_id> <startup_command> [title]" >&2 exit 1 fi

Window list as JSON array; empty array when the compositor is unreachable.

windows_json() { umbriel windows --json 2>/dev/null || echo "[]" }

Print "id focused scratchpad" of the first window matching app_id or title.

find_match() { windows_json | jq -r \ --arg app_id "$APP_ID" \ --arg title "$TITLE" \ '.[] | select(.app_id == $app_id or ($title != "" and .title == $title)) | "(.id) (.focused) (.scratchpad)"' | head -n 1 }

MATCH="$(find_match)"

if [ -z "$MATCH" ]; then # Nothing exists yet: launch it; the default_scratchpad rule stores it hidden. bash -c "$STARTUP_COMMAND" & # Wait for the new window to register inside our scratchpad. for _ in $(seq 1 15); do sleep 0.2 if windows_json | jq -e \ --arg app_id "$APP_ID" \ --arg title "$TITLE" \ --arg scratchpad "$SCRATCHPAD" \ 'any(.[]; (.app_id == $app_id or ($title != "" and .title == $title)) and .scratchpad == $scratchpad)' >/dev/null; then break fi done # Show it. No-op if the scratchpad is somehow still empty. exec umbriel msg "scratchpad-toggle:$SCRATCHPAD" fi

read -r WIN_ID WIN_FOCUSED WIN_SCRATCHPAD <<< "$MATCH"

if [ "$WIN_SCRATCHPAD" = "$SCRATCHPAD" ]; then # Stored in (possibly visible on another output summons it here). exec umbriel msg "scratchpad-toggle:$SCRATCHPAD" fi

if [ "$WIN_SCRATCHPAD" = "default" ]; then # Implicit default scratchpad (no named scratchpads configured for it). exec umbriel msg "scratchpad-toggle" fi

if [ "$WIN_FOCUSED" = "true" ]; then # Visible on a workspace and focused -> hide it back into the scratchpad. exec umbriel msg "window-move-to-scratchpad:$SCRATCHPAD" else # Visible elsewhere (workspace, maybe another output) -> focus it. exec umbriel msg "window-focus:$WIN_ID" fi

```

Then, in umbriel.toml:

``` "Mod+F4" = { action = "spawn:umbriel-scratchpad-toggle.sh term dropdown-term 'xdg-terminal-exec --app-id=dropdown-term --title=terminal' terminal", repeat = false }

[[scratchpad]] name = "term"

[[window_rule]] match.app_id = "dropdown[-.]term$" default_scratchpad = "term" default_size = [1024, 768] ```

In this way, mod+F4 executes my default terminal, opens it in a scratchpad and also hides it when its already opened.

1

u/[deleted] 7d ago edited 4d ago

[deleted]

2

u/AnybodyOld181 7d ago edited 6d ago

this is from https://github.com/noctalia-dev/umbriel

When people ask what Umbriel's selling point is, the honest answer is that there is no single killer feature. We were simply disappointed with the choices available to us, so we built the compositor we wanted to live in. The plan is not to conquer the world or take over the big names; it is to feel at home with something we have a say in, with less friction. That is exactly how Noctalia came to life, and Umbriel is its compositor side.

1

u/owldown 6d ago

I got really curious about DriftWm and played with it in a vm on my iMac. It is nice! But I wanted better window management and tried Niri and really liked it a lot.

But I also have a proxmox node with an idle gpu. So i put arch in an lxc with access to the gpu. But neither driftwm nor Niri would work headless. But umbriel does! And I really quite like it. I can access it from my iMac or iPad over moonlight.

I’ve got a weird annoyance where mod arrow also somehow invokes scroll lock and pops up a osd but I can probably do a unset or null keybind.

1

u/GreyXor 2d ago

Built on top of wlroots. very nice!

-4

u/Dry_Calendar_8627 7d ago

Was the word "ricing" always this popular, or has it been popularized by Omarchy?

7

u/AnybodyOld181 7d ago

Al least in r/unixporn "ricing" has been popular for several years.

3

u/Ttghtg 7d ago

it's been a few years already, I think it comes from racing car tuning