1
0
Fork 0

Add sway/wofi/foot Wayland desktop stack with per-host toggle

New opt-in feature for x86_64 desktops: sway + wofi + foot + swaybg +
swaylock + swayidle + grim + slurp + waybar + wl-clipboard. mako on
arch, dunst on debian (mako isn't packaged for debian).

Files:
- .chezmoi.yaml.tmpl: added data.sway flag (true on miche/byte/kaiser,
  false on Pis). Override per host with ~/.config/chezmoi/features/sway
  or ~/.config/chezmoi/features/no-sway marker files.
- run_once_40-install-sway.sh.tmpl: installs packages if .sway=true,
  exits 0 otherwise. Sets up the marker file.
- dot_config/{sway,foot,wofi,waybar,mako}/: existing configs from miche.

Per-host toggle workflow:
  # On any box, enable sway:
  touch ~/.config/chezmoi/features/sway
  chezmoi apply

  # On a sway-enabled box, disable it:
  touch ~/.config/chezmoi/features/no-sway
  rm ~/.config/chezmoi/features/sway
  chezmoi apply

Currently sway packages are already installed on miche (existed before
this commit). Byte will get them via the new run_once_40 script.
Pis (rye, crouton) are unaffected — install script early-returns.
This commit is contained in:
Rain 2026-06-22 14:23:56 -04:00
parent fe73bbecba
commit 6bbaa8f2f5
21 changed files with 965 additions and 1 deletions

View file

@ -0,0 +1,18 @@
# === ~/.config/sway/config.d/00-gruvbox.conf ===
# gruvbox material dark hard — wired through gsettings so Thunar, Firefox chrome,
# and any GTK3/4 app pick it up the moment sway starts.
# Run gsettings in a sh -c wrapper so we can pipe stderr to /dev/null.
# This is necessary because the very first exec block runs before dbus is
# always reachable, and gsettings prints a long bar-warning to stderr when
# it can't find the bus. We don't want the red bar to surface that.
exec_always {
gsettings set org.gnome.desktop.interface gtk-theme 'Gruvbox-Material-Dark-Hard' 2>/dev/null
gsettings set org.gnome.desktop.interface icon-theme 'Gruvbox-Material-Dark' 2>/dev/null
gsettings set org.gnome.desktop.interface cursor-theme 'Gruvbox-Material-Dark' 2>/dev/null
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' 2>/dev/null
gsettings set org.cinnamon.desktop.interface gtk-theme 'Gruvbox-Material-Dark-Hard' 2>/dev/null
}
# gnome-keyring (in case any GTK app needs secret service for ssh-agent bridge)
exec gnome-keyring-daemon --start --components=secrets

View file

@ -0,0 +1,76 @@
# === ~/.config/sway/config.d/10-keybinds.conf ===
# sway keybindings. Mint+Cinnamon muscle memory → Super (Mod4).
# === essentials ===
bindsym $mod+Return exec $term
bindsym $mod+d exec $menu
bindsym $mod+e exec $fileManager
bindsym $mod+b exec $browser
bindsym $mod+q kill
bindsym $mod+Shift+c reload
bindsym $mod+Shift+e exec swaynag -t warning \
-m 'Exit Sway?' \
-B 'Yes, exit Sway' 'swaymsg exit'
# === move focus ===
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# === workspace navigation ===
bindsym $mod+1 workspace number 1
bindsym $mod+2 workspace number 2
bindsym $mod+3 workspace number 3
bindsym $mod+4 workspace number 4
bindsym $mod+5 workspace number 5
bindsym $mod+6 workspace number 6
bindsym $mod+7 workspace number 7
bindsym $mod+8 workspace number 8
bindsym $mod+9 workspace number 9
bindsym $mod+0 workspace number 10
bindsym $mod+Tab workspace back_and_forth
bindsym $mod+Shift+1 move container to workspace number 1
bindsym $mod+Shift+2 move container to workspace number 2
bindsym $mod+Shift+3 move container to workspace number 3
bindsym $mod+Shift+4 move container to workspace number 4
bindsym $mod+Shift+5 move container to workspace number 5
bindsym $mod+Shift+6 move container to workspace number 6
bindsym $mod+Shift+7 move container to workspace number 7
bindsym $mod+Shift+8 move container to workspace number 8
bindsym $mod+Shift+9 move container to workspace number 9
bindsym $mod+Shift+0 move container to workspace number 10
# === layout ===
bindsym $mod+f fullscreen
bindsym $mod+v split toggle splitv
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+space floating toggle
bindsym $mod+Shift+space focus mode_toggle
# === screenshot (grim + slurp) ===
bindsym Print exec grim -g "$(slurp)" ~/Pictures/screenshot-$(date +%Y%m%d-%H%M%S).png
bindsym $mod+Print exec grim ~/Pictures/screenshot-$(date +%Y%m%d-%H%M%S).png
bindsym $mod+Shift+s exec grim -g "$(slurp)" - | wl-copy
# === resize ===
mode "resize" {
bindsym Left resize shrink width 30px
bindsym Down resize grow height 30px
bindsym Up resize shrink height 30px
bindsym Right resize grow width 30px
bindsym Escape mode "default"
bindsym Return mode "default"
}
bindsym $mod+r mode "resize"
# === scratchpads (quick terminal / browser) ===
# Start a headless foot server, then a dropdown client window. Toggle with $mod+grave.
bindsym $mod+grave exec foot --server
bindsym $mod+apostrophe exec foot -a dropdown
for_window [app_id="dropdown"] floating enable, sticky enable, resize set width 1100 height 600, move position center

View file

@ -0,0 +1,15 @@
# === ~/.config/sway/config.d/20-autostart.conf ===
# background services started when sway comes up.
# polkit agent — needed for gparted, mount UIs in thunar, etc.
exec /usr/libexec/polkit-gnome-authentication-agent-1
# clipboard — start clipmenud directly (it watches the clipboard internally)
# Drop the wl-paste --watch wrapper to avoid bar noise if the socket isn't ready.
exec clipmenud
# xdg-desktop-portal — required for native file/screen sharing in Firefox/Chromium.
# Skip if services aren't enabled; the user can enable with:
# systemctl --user enable --now xdg-desktop-portal xdg-desktop-portal-wlr
# Until then, those systemctl lines are quiet no-ops.
exec sh -c 'systemctl --user start xdg-desktop-portal xdg-desktop-portal-wlr 2>/dev/null || true'

View file

@ -0,0 +1,17 @@
# ~/.config/sway/config.d/50-launchers.conf
# Launcher keybinds. The base $menu var in config is the drun launcher.
# These add run mode, window switcher, and the powermenu.
# $mod+grave already used by foot dropdown — don't clobber.
# $mod+Tab already used by workspace back_and_forth — don't clobber.
# $mod+slash is the cheatsheet — keep it.
# Exec ad-hoc command (not in $PATH discovery)
bindsym $mod+F12 exec wofi --show run --prompt "exec"
# Sway window switcher (replaces `swayr`-style overview)
bindsym $mod+F11 exec wofi --show window
# Power menu — dmenu mode driven by wofi-powermenu script.
# wofi has no custom-mode feature; the script does the dispatch.
bindsym $mod+Escape exec $HOME/.local/bin/wofi-powermenu