Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions docs/niri-keybindings.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ interchangeable everywhere.
| `Mod+T` | `spawn ghostty` | Open a terminal |
| `Mod+Shift+T` | `spawn` tuxedo in ghostty | Todo.txt TUI (floating) |
| `Mod+B` | `spawn zen-browser` | Open the browser (zen) |
| `Mod+G` | `spawn google-chrome-stable` | Open Google Chrome |
| `Mod+E` | `spawn nautilus` | Open the file manager |
| `Mod+Shift+Z` | `spawn zeditor` | Open the Zed editor |
| `Super+Alt+L` | `noctalia msg session lock` | Lock the screen (Noctalia) |

## Screenshots & capture
Expand Down
24 changes: 19 additions & 5 deletions docs/theme-sync.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,13 +121,27 @@ mode, and we deliberately didn't build one.
follow the toggle with **no per-app setting** — the same mechanism as Ghostty;
they just read the one gsetting the portal broadcasts. (This is why it feels
"like gtk" — it is the gtk portal.)
- **Electron caveat — must run on Wayland/Ozone.** An Electron app only reads
- **Electron caveat 1 — must run on Wayland/Ozone.** An Electron app only reads
the appearance portal when it runs as a native Wayland client. On **XWayland**
(the Electron default) it never sees the portal and its "sync with system"
theme stays stuck. So Discord, Slack, and Teams each ship a
`~/.local/share/applications/*.desktop` override with
`env XDG_CURRENT_DESKTOP=GNOME … --enable-features=UseOzonePlatform --ozone-platform=wayland`.
Without that override the app won't follow the toggle.
theme stays stuck. Ozone/Wayland is selected by
`ELECTRON_OZONE_PLATFORM_HINT=auto` in
[`environment.d/electron.conf`](../home/dot_config/environment.d/electron.conf)
(session-wide, all Electron apps); the per-app
`~/.local/share/applications/*.desktop` overrides only add
`XDG_CURRENT_DESKTOP=GNOME` + `--enable-wayland-ime` (fcitx5 text-input). Verify
with `pgrep -af slack` / `teams-for-linux` — you should see `--ozone-platform=wayland`.
- **Electron caveat 2 — Slack & Teams also need an app-level opt-in.** Running on
Wayland/Ozone is necessary but **not sufficient** for these two: unlike Discord
(which follows the portal once on Ozone), Slack and Teams default to a fixed
theme and must be told to follow the OS:
- **Teams** (teams-for-linux): set `"followSystemTheme": true` in
`~/.config/teams-for-linux/config.json` (the file/key doesn't exist by
default — create it), then restart Teams.
- **Slack**: in-app **Preferences → Themes → Sync with OS setting** (Slack has
no config-file knob for this; it's a per-user in-app toggle).
- Without these, the `.desktop` override alone leaves them stuck light even
though the portal is broadcasting correctly.
- **GTK/libadwaita apps self-follow live — no Noctalia gtk template.** GTK4/
libadwaita apps (Nautilus, ghostty's tab-bar) read `org.freedesktop.appearance
color-scheme` from the portal and repaint light↔dark **live**; GTK3 apps follow
Expand Down
5 changes: 5 additions & 0 deletions home/dot_config/niri/config.kdl.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -460,6 +460,11 @@ binds {
Mod+T hotkey-overlay-title="Open a Terminal: ghostty" { spawn "ghostty"; }
Mod+Shift+T hotkey-overlay-title="Todo: tuxedo" { spawn-sh "ghostty --class=com.tuxedo.todo -e tuxedo ~/todo.txt"; }
Mod+B hotkey-overlay-title="Open a Browser: zen" { spawn "zen-browser"; }
// Mod+G (not Mod+Shift+B) for Chrome; Mod+Shift+Z (not Mod+Z) for Zed --
// Mod+Z is fcitx5's input-method TriggerKey (Super+Z), see docs/fcitx5.md.
Mod+G hotkey-overlay-title="Open a Browser: google-chrome" { spawn "google-chrome-stable"; }
Mod+E hotkey-overlay-title="Open a File Manager: nautilus" { spawn "nautilus"; }
Mod+Shift+Z hotkey-overlay-title="Open an Editor: zed" { spawn "zeditor"; }
// Noctalia session (power) menu -- logout / reboot / shutdown / lock.
Mod+X hotkey-overlay-title="Session menu (Noctalia)" { spawn-sh "noctalia msg panel-toggle session"; }
// Noctalia settings panel.
Expand Down
26 changes: 16 additions & 10 deletions home/dot_config/noctalia/10-machine.toml.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,13 @@ transition_duration = 2000
[wallpaper.monitors.eDP-1]
path = "{{ $wp }}/scarlet-tree.png"
{{- else -}}
# home + work (same layout): DP-3 (landscape) + HDMI-A-1 (portrait).
{{- $land := "DP-3" }}{{- $port := "HDMI-A-1" }}
{{- if eq .machine "work" }}{{ $land = "DP-1" }}{{ $port = "HDMI-A-2" }}{{ end }}
# Dual-monitor layout: land landscape + port portrait. Physical connectors
# differ per machine (home = DP-3 + HDMI-A-1, work = DP-1 + HDMI-A-2 — the two
# ASUS PA278CV enumerate differently), so they're templated. The lockscreen box
# geometry below is shared; nudge it per machine in Noctalia's lockscreen editor
# if an output's scale/mode differs.
[accessibility]
ui_scale = 1.2500000111758709

Expand All @@ -31,34 +37,34 @@ directory_light = "{{ $wp }}"
edge_smoothness = 0.39999999105930328
transition_duration = 2000

[wallpaper.monitors.DP-3]
[wallpaper.monitors.{{ $land }}]
path = "{{ $wp }}/scarlet-tree.png"

[wallpaper.monitors.HDMI-A-1]
[wallpaper.monitors.{{ $port }}]
path = "{{ $wp }}/F42-01-day.jpg"

[lockscreen_widgets]
enabled = false
schema_version = 2
widget_order = [ "lockscreen-login-box@DP-3", "lockscreen-login-box@HDMI-A-1" ]
widget_order = [ "lockscreen-login-box@{{ $land }}", "lockscreen-login-box@{{ $port }}" ]

[lockscreen_widgets.grid]
cell_size = 16
major_interval = 4
visible = true

[lockscreen_widgets.widget."lockscreen-login-box@DP-3"]
[lockscreen_widgets.widget."lockscreen-login-box@{{ $land }}"]
box_height = 196.0
box_width = 810.0
cx = 1536.0
cy = 1546.0
output = "DP-3"
output = "{{ $land }}"
placement_height = 1728.0
placement_width = 3072.0
rotation = 0.0
type = "login_box"

[lockscreen_widgets.widget."lockscreen-login-box@DP-3".settings]
[lockscreen_widgets.widget."lockscreen-login-box@{{ $land }}".settings]
background_color = "surface_variant"
background_opacity = 0.88
background_radius = 12.0
Expand All @@ -74,18 +80,18 @@ widget_order = [ "lockscreen-login-box@DP-3", "lockscreen-login-box@HDMI-A-1" ]
show_unlock_hint = true
show_weather = true

[lockscreen_widgets.widget."lockscreen-login-box@HDMI-A-1"]
[lockscreen_widgets.widget."lockscreen-login-box@{{ $port }}"]
box_height = 196.0
box_width = 810.0
cx = 720.0
cy = 2378.0
output = "HDMI-A-1"
output = "{{ $port }}"
placement_height = 2560.0
placement_width = 1440.0
rotation = 0.0
type = "login_box"

[lockscreen_widgets.widget."lockscreen-login-box@HDMI-A-1".settings]
[lockscreen_widgets.widget."lockscreen-login-box@{{ $port }}".settings]
background_color = "surface_variant"
background_opacity = 0.88
background_radius = 12.0
Expand Down
23 changes: 14 additions & 9 deletions home/dot_local/share/darkman/executable_set-wallpaper.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@
# The image directory is baked in from chezmoi (the repo's images/wallpaper) --
# no more reading it out of Noctalia's config (v5 moved config to TOML; the old
# `jq .wallpaper.directory settings.json` read a dead v4 file). Connectors branch
# per machine: home/work share DP-3 (landscape) + HDMI-A-1 (portrait); laptop has
# the single internal panel eDP-1. See docs/theme-sync.md.
# per machine: home = DP-3 (landscape) + HDMI-A-1 (portrait); work = DP-1 + HDMI-A-2
# (same layout, connectors enumerate differently); laptop has the single internal
# panel eDP-1. See docs/theme-sync.md.
set -eu

# WAYLAND_DISPLAY guard: darkman.service may start before niri exports
Expand All @@ -36,17 +37,21 @@ dark) edp="${wpdir}/scarlet-tree-dark.png" ;;
esac
[ -f "${edp}" ] && noctalia msg wallpaper-set eDP-1 "${edp}" >/dev/null 2>&1 || true
{{- else }}
# home + work: DP-3 (landscape) + HDMI-A-1 (portrait).
{{- $land := "DP-3" }}{{- $port := "HDMI-A-1" }}
{{- if eq .machine "work" }}{{ $land = "DP-1" }}{{ $port = "HDMI-A-2" }}{{ end }}
# Landscape + portrait pair. The physical connectors differ per machine, so they're
# templated: home = DP-3 + HDMI-A-1, work = DP-1 + HDMI-A-2 (verify a machine with
# `niri msg outputs`). The images are the same landscape/portrait set either way.
case "$1" in
dark)
dp3="${wpdir}/fantasy-lake2.png"
hdmi="${wpdir}/F42-01-night.jpg"
land="${wpdir}/fantasy-lake2.png"
port="${wpdir}/F42-01-night.jpg"
;;
*)
dp3="${wpdir}/scarlet-tree.png"
hdmi="${wpdir}/F42-01-day.jpg"
land="${wpdir}/scarlet-tree.png"
port="${wpdir}/F42-01-day.jpg"
;;
esac
[ -f "${dp3}" ] && noctalia msg wallpaper-set DP-3 "${dp3}" >/dev/null 2>&1 || true
[ -f "${hdmi}" ] && noctalia msg wallpaper-set HDMI-A-1 "${hdmi}" >/dev/null 2>&1 || true
[ -f "${land}" ] && noctalia msg wallpaper-set {{ $land }} "${land}" >/dev/null 2>&1 || true
[ -f "${port}" ] && noctalia msg wallpaper-set {{ $port }} "${port}" >/dev/null 2>&1 || true
{{- end }}
6 changes: 1 addition & 5 deletions packages/aur.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,8 @@ bruno-bin
flyctl
google-breakpad
google-chrome
lefthook
noctalia-qs
noctalia-shell
maplemono-ttf
papirus-folders-git
peazip
pgadmin4-bin
rate-mirrors-bin
slack-desktop-wayland
Expand All @@ -17,5 +14,4 @@ tuxedo
visual-studio-code-bin
waterfox-bin
witr
wl-screenrec-git
zen-browser-bin
16 changes: 12 additions & 4 deletions packages/pacman-explicit.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
7zip
accountsservice
adw-gtk-theme
alacritty
alsa-firmware
alsa-plugins
Expand All @@ -11,15 +12,16 @@ base
base-devel
bash-completion
bat
bc
bibata-cursor-theme-bin
bind
blueman
bluez
bluez-utils
bruno-bin
btop
btrfs-progs
cantarell-fonts
chezmoi
cliphist
cryptsetup
curlie
Expand Down Expand Up @@ -61,6 +63,7 @@ fastfetch
fcitx5
fcitx5-bamboo
fcitx5-configtool
fcitx5-hangul
fd
ffmpegthumbnailer
firefox
Expand Down Expand Up @@ -124,6 +127,7 @@ lsscsi
lvm2
man-db
man-pages
maplemono-ttf
mdadm
meld
mesa-utils
Expand All @@ -144,8 +148,7 @@ nfs-utils
nilfs-utils
niri
nm-connection-editor
noctalia-qs
noctalia-shell
noctalia
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
Expand All @@ -162,6 +165,7 @@ pacman-contrib
papirus-folders-git
papirus-icon-theme
pavucontrol
peazip
peco
perl
pgadmin4-bin
Expand All @@ -171,6 +175,8 @@ pipewire-jack
pipewire-pulse
pkgfile
plocate
podman
podman-compose
poppler-glib
postgresql
power-profiles-daemon
Expand Down Expand Up @@ -211,6 +217,7 @@ ttf-liberation
ttf-opensans
tumbler
turbo
tuxedo
unrar
unzip
upower
Expand Down Expand Up @@ -243,12 +250,13 @@ xorg-xinit
xorg-xinput
xorg-xkill
xorg-xrandr
xorg-xwininfo
xterm
xwayland-satellite
yay
zathura
zed
zellij
zen-browser-bin
zip
zoxide
zram-generator