Skip to content
Open
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
31 changes: 23 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,21 @@ Then `chezmoi apply`.
- 6 Lua `hl.monitor(...)` rules (3 home + 3 office) — desc-keyed so the right machine picks the right monitors automatically.
- Cursor: Catppuccin Mocha Teal (Hyprcursor) with Catppuccin Mocha Green as XCursor fallback.
- Electron / fcitx5 / GTK theming env vars set centrally.
- Noctalia v5 owns the desktop shell layer (bar, launcher, notifications, wallpaper, lock screen, idle, screenshots, clipboard).
- Wallpapers are deployed by chezmoi to `~/.config/wallpapers`; Noctalia reads that path directly.
- Noctalia v5 owns the desktop shell layer (bar, launcher, notifications, wallpaper by default, lock screen, idle, screenshots, clipboard).
- Wallpapers are deployed by chezmoi to `~/.config/wallpapers`; Noctalia reads that path directly unless Wallpaper Engine is enabled.
- Wallpaper Engine is opt-in through `data.wallpaperEngine.arguments`; when configured, Hyprland starts `linux-wallpaperengine-start` and Noctalia's static wallpaper layer is disabled.

### Wallpaper Engine (Hyprland)

Arch/CachyOS installs `linux-wallpaperengine-git` via `paru`; other Linux machines need a `linux-wallpaperengine` binary on `PATH`. Install and own the official Steam Wallpaper Engine assets first. Upstream auto-detects the usual Steam library paths, then `arguments` are passed directly to `linux-wallpaperengine` at Hyprland startup:

```toml
[data.wallpaperEngine]
enabled = true
arguments = ["--silent", "--fps", "30", "--scaling", "fill", "1845706469"]
```

Use the same argument list shape for multi-monitor commands, for example `--screen-root ... --bg ...` from upstream's README.

## Keymappings

Expand Down Expand Up @@ -164,6 +177,7 @@ Then `chezmoi apply`.

- [`hyprland`](https://hyprland.org) — Wayland compositor.
- [`noctalia`](https://github.com/noctalia-dev/noctalia) — desktop shell: bar, launcher, notifications, wallpaper, lock screen, idle behavior, screenshots, clipboard, and control center.
- [`linux-wallpaperengine`](https://github.com/Almamu/linux-wallpaperengine) — opt-in live wallpapers from Steam Wallpaper Engine assets on Hyprland.
- [`sddm`](https://github.com/sddm/sddm) — bootstrap and fallback display manager for fresh Arch installs.
- [`greetd`](https://git.sr.ht/~kennylevinsen/greetd) + [`Noctalia Greeter`](https://github.com/noctalia-dev/noctalia-greeter) — final Wayland login greeter after AUR packages are installed.
- [`fcitx5`](https://github.com/fcitx/fcitx5) + chewing — Chinese input.
Expand Down Expand Up @@ -224,10 +238,11 @@ Then `chezmoi apply`.
## Layout

```
home/ # chezmoi source root (.chezmoiroot=home)
├── .chezmoidata/packages.yaml # canonical package list (pacman + apt)
├── .chezmoiexternal.toml.tmpl # auto-pulled theme files
├── .chezmoiscripts/ # run_once / run_onchange bootstrap
├── .chezmoitemplates/ # macOS install template (Brewfile pass-thru)
└── dot_config/ # → ~/.config/...
home/ # chezmoi source root (.chezmoiroot=home)
├── .chezmoidata/ # package list + feature defaults
├── .chezmoiexternal.toml.tmpl # auto-pulled theme files
├── .chezmoiscripts/ # run_once / run_onchange bootstrap
├── .chezmoitemplates/ # macOS install template (Brewfile pass-thru)
├── dot_config/ # → ~/.config/...
└── dot_local/ # → ~/.local/...
```
1 change: 1 addition & 0 deletions home/.chezmoidata/packages.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ packages:
- libnewt
- libreoffice-fresh
- linux-headers
- linux-wallpaperengine-git
- localsend-bin
- mission-center
- mattermost-desktop
Expand Down
3 changes: 3 additions & 0 deletions home/.chezmoidata/wallpaper-engine.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
wallpaperEngine:
enabled: false
arguments: []
1 change: 1 addition & 0 deletions home/.chezmoiignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ Library/**
.config/paru/**
.local/share/applications
.local/share/applications/**
.local/bin/linux-wallpaperengine-start
{{- else if not (or (eq .chezmoi.osRelease.id "arch") (eq .chezmoi.osRelease.id "cachyos")) }}
.config/paru
.config/paru/**
Expand Down
21 changes: 19 additions & 2 deletions home/.chezmoiscripts/run_onchange_after_0-install-packages.sh.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,25 @@ retry() {
{{ if .packages.sharedArch.pacman }}
# Use -Syu to ensure system is up-to-date and libalpm version matches paru
sudo pacman -Syu --noconfirm
retry paru -S --needed --noconfirm {{ range .packages.sharedArch.pacman }}{{ . }} {{ end }}
arch_packages=(
{{- range .packages.sharedArch.pacman }}
{{ . | quote }}
{{- end }}
)
if [[ "${GITHUB_ACTIONS:-}" == "true" ]]; then
filtered_packages=()
for package in "${arch_packages[@]}"; do
case "$package" in
linux-wallpaperengine-git)
echo -e "${GREEN}Skipping linux-wallpaperengine-git in CI (large AUR source build)${NC}"
continue
;;
esac
filtered_packages+=("$package")
done
arch_packages=("${filtered_packages[@]}")
fi
retry paru -S --needed --noconfirm "${arch_packages[@]}"
{{ end }}

{{ if eq $osid "cachyos" }}
Expand Down Expand Up @@ -82,4 +100,3 @@ retry() {
{{ end }}

echo -e "${GREEN}Package installation complete!${NC}"

1 change: 1 addition & 0 deletions home/dot_config/hypr/hyprland.lua.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ hl.on("hyprland.start", function()
)
hl.exec_cmd("blueman-applet")
hl.exec_cmd("fcitx5 -d")
hl.exec_cmd({{ printf "%s/.local/bin/linux-wallpaperengine-start" .chezmoi.homeDir | quote }})
hl.exec_cmd("noctalia")
end)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ freeze_screen = false
pipe_to_command = false

[wallpaper]
enabled = true
# linux-wallpaperengine draws its own background layer when configured.
enabled = {{ if and .wallpaperEngine.enabled (gt (len .wallpaperEngine.arguments) 0) }}false{{ else }}true{{ end }}
fill_mode = "crop"
directory = "~/.config/wallpapers"
transition_on_startup = false
Expand Down
20 changes: 20 additions & 0 deletions home/dot_local/bin/executable_linux-wallpaperengine-start.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -euo pipefail

enabled="{{ .wallpaperEngine.enabled }}"
args=(
{{- range .wallpaperEngine.arguments }}
{{ . | quote }}
{{- end }}
)

if [[ "$enabled" != "true" || ${#args[@]} -eq 0 ]]; then
exit 0
fi

if ! command -v linux-wallpaperengine >/dev/null 2>&1; then
echo "linux-wallpaperengine is not installed; run chezmoi apply after package installation." >&2
exit 0
fi

exec linux-wallpaperengine "${args[@]}"
Loading