v0.9.0 458251f

desktop.md RawHistoryFolder

Desktop integration

Running commands

spawn binds, startup and terminal run a program directly, without a shell. The line is split on spaces: the first word is the program (from PATH or a full path), the rest are its arguments. ; separates several commands, which all start at once.

bind.ctrl+cmd+space = spawn fuzzel
startup = waybar; mako; wl-paste --watch cliphist store

Pipes, &&, redirections, $VARIABLES, ~ and quotes are passed as plain text. For those, write a script in your PATH and run it:

#!/bin/sh
# ~/.local/bin/screenshot-main
nefercap screenshot -output DP-1 -file "$HOME/Pictures/$(date +%F-%T).png"
bind.cmd+shift+p = spawn screenshot-main

Programs started by NeferWL get WAYLAND_DISPLAY, DISPLAY and NEFERWL_STATE. startup changes apply at the next session.

Clipboard

The clipboard, primary selection (middle-click paste) and clipboard managers work. A cliphist history:

startup = wl-paste --watch cliphist store
bind.cmd+v = spawn cliphist-pick
#!/bin/sh
# ~/.local/bin/cliphist-pick
cliphist list | fuzzel --dmenu | cliphist decode | wl-copy

Drag and drop is not supported yet.

Input methods

fcitx5 and IBus work through zwp_input_method_v2. Start one at session start:

startup = fcitx5 -d

Candidate popups are not drawn yet.

X11 apps

X11 apps such as Steam run through xwayland-satellite 0.7+, found in PATH. NeferWL starts it when the first X11 app connects; do not start it yourself.

xwayland = off   # no X11 support

Session locking

Use an external locker such as swaylock or hyprlock. See Session locking.

Screen capture

nefercap, grim and screen sharing through xdg-desktop-portal-gnome work out of the box. Other tools must be added to the allowlist. See Screen capture.

Idle and screen off

swayidle and wlopm turn the screens off after a delay:

startup = swayidle -w timeout 300 wlopm-off resume wlopm-on
#!/bin/sh
# ~/.local/bin/wlopm-off (wlopm-on is the same with --on)
exec wlopm --off '*'

Video players, games and browsers keep the screens on while they ask to, through Wayland or D-Bus (org.freedesktop.ScreenSaver).

Power keys

NeferWL stops logind from acting on the power, suspend, hibernate and reboot keys. They do nothing unless you bind them:

bind.XF86PowerOff = spawn systemctl suspend
bind.XF86Suspend = spawn systemctl hibernate
Key Bind name
Power XF86PowerOff
Sleep XF86Sleep
Suspend XF86Suspend
Reboot code:408

The lid switch is still handled by logind.

Bars

Waybar 0.13+ (ext/workspaces) and ironbar show and switch workspaces. Taskbars can list, focus and close windows.

Workspace IDs are name:<name> for named workspaces, stable across launches. Numbered workspaces get a random prefix per launch, so do not save settings keyed on them.

State for scripts

NeferWL writes its state as JSON to $XDG_RUNTIME_DIR/neferwl/<wayland socket>.json, also given to started programs as $NEFERWL_STATE. It lists outputs, workspaces, the focused window, and every window with its app ID, PID, workspace, column and row.

neferwl state                        # the whole state
neferwl state output-of "$PID"       # the output showing that process's window
neferwl state | jq '[.windows[] | select(.hidden)] | length'   # windows in hidden stashes
source
1# Desktop integration
2
3## Running commands
4
5`spawn` binds, `startup` and `terminal` run a program directly, **without a shell**. The line is split on spaces: the first word is the program (from `PATH` or a full path), the rest are its arguments. `;` separates several commands, which all start at once.
6
7```text
8bind.ctrl+cmd+space = spawn fuzzel
9startup = waybar; mako; wl-paste --watch cliphist store
10```
11
12Pipes, `&&`, redirections, `$VARIABLES`, `~` and quotes are passed as plain text. For those, write a script in your `PATH` and run it:
13
14```sh
15#!/bin/sh
16# ~/.local/bin/screenshot-main
17nefercap screenshot -output DP-1 -file "$HOME/Pictures/$(date +%F-%T).png"
18```
19
20```text
21bind.cmd+shift+p = spawn screenshot-main
22```
23
24Programs started by NeferWL get `WAYLAND_DISPLAY`, `DISPLAY` and `NEFERWL_STATE`. `startup` changes apply at the next session.
25
26## Clipboard
27
28The clipboard, primary selection (middle-click paste) and clipboard managers work. A [cliphist](https://github.com/sentriz/cliphist) history:
29
30```text
31startup = wl-paste --watch cliphist store
32bind.cmd+v = spawn cliphist-pick
33```
34
35```sh
36#!/bin/sh
37# ~/.local/bin/cliphist-pick
38cliphist list | fuzzel --dmenu | cliphist decode | wl-copy
39```
40
41Drag and drop is not supported yet.
42
43## Input methods
44
45[fcitx5](https://fcitx-im.org) and IBus work through `zwp_input_method_v2`. Start one at session start:
46
47```text
48startup = fcitx5 -d
49```
50
51Candidate popups are not drawn yet.
52
53## X11 apps
54
55X11 apps such as Steam run through [xwayland-satellite](https://github.com/Supreeeme/xwayland-satellite) 0.7+, found in `PATH`. NeferWL starts it when the first X11 app connects; do not start it yourself.
56
57```text
58xwayland = off   # no X11 support
59```
60
61## Session locking
62
63Use an external locker such as swaylock or hyprlock. See [Session locking](session-lock.md).
64
65## Screen capture
66
67nefercap, `grim` and screen sharing through `xdg-desktop-portal-gnome` work out of the box. Other tools must be added to the allowlist. See [Screen capture](capture.md).
68
69## Idle and screen off
70
71[swayidle](https://github.com/swaywm/swayidle) and [wlopm](https://git.sr.ht/~leon_plickat/wlopm) turn the screens off after a delay:
72
73```text
74startup = swayidle -w timeout 300 wlopm-off resume wlopm-on
75```
76
77```sh
78#!/bin/sh
79# ~/.local/bin/wlopm-off (wlopm-on is the same with --on)
80exec wlopm --off '*'
81```
82
83Video players, games and browsers keep the screens on while they ask to, through Wayland or D-Bus (`org.freedesktop.ScreenSaver`).
84
85## Power keys
86
87NeferWL stops logind from acting on the power, suspend, hibernate and reboot keys. They do nothing unless you bind them:
88
89```text
90bind.XF86PowerOff = spawn systemctl suspend
91bind.XF86Suspend = spawn systemctl hibernate
92```
93
94| Key | Bind name |
95|---|---|
96| Power | `XF86PowerOff` |
97| Sleep | `XF86Sleep` |
98| Suspend | `XF86Suspend` |
99| Reboot | `code:408` |
100
101The lid switch is still handled by logind.
102
103## Bars
104
105Waybar 0.13+ (`ext/workspaces`) and ironbar show and switch workspaces. Taskbars can list, focus and close windows.
106
107Workspace IDs are `name:<name>` for named workspaces, stable across launches. Numbered workspaces get a random prefix per launch, so do not save settings keyed on them.
108
109## State for scripts
110
111NeferWL writes its state as JSON to `$XDG_RUNTIME_DIR/neferwl/<wayland socket>.json`, also given to started programs as `$NEFERWL_STATE`. It lists outputs, workspaces, the focused window, and every window with its app ID, PID, workspace, column and row.
112
113```sh
114neferwl state                        # the whole state
115neferwl state output-of "$PID"       # the output showing that process's window
116neferwl state | jq '[.windows[] | select(.hidden)] | length'   # windows in hidden stashes
117```

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 23

Tags 10

↑↓ moveenter openesc close