Migrate to chezmoi with per-host sway/waybar configs

- Restructure repo into chezmoi source layout (dot_ prefix)
- Add .chezmoi.toml.tmpl mapping hostname to hosttype (laptop/desktop)
- Template sway config.d fragments (outputs/inputs/binds) per host
- Template waybar config.jsonc with shared bar/module definitions
- Host-scope pulsemeeter (flow) and teams-for-linux (desktop hosts) via .chezmoiignore
- Trim install.sh package lists to configured software + config deps
- Remove stale kitty.conf.bak and untracked host fragments
This commit is contained in:
2026-08-01 22:37:00 -04:00
parent b550677af7
commit 7e6d30c3cd
71 changed files with 264 additions and 389 deletions
+7
View File
@@ -0,0 +1,7 @@
{{- $hosttype := "desktop" -}}
{{- if eq .chezmoi.hostname "framework13pro" -}}
{{- $hosttype = "laptop" -}}
{{- end -}}
[data]
hosttype = "{{ $hosttype }}"
+7
View File
@@ -0,0 +1,7 @@
**/*.bak
{{ if ne .chezmoi.hostname "flow" -}}
.config/pulsemeeter
{{- end }}
{{ if eq .chezmoi.hostname "framework13pro" -}}
.config/teams-for-linux
{{- end }}
+11
View File
@@ -0,0 +1,11 @@
{
"output": "{{ .out }}",
"layer": "top",
"position": "left",
"width": 44,
"modules-left": ["clock", "pulseaudio"],
"modules-center": ["sway/workspaces"],
"modules-right": ["tray", "battery", "custom/power"],
{{ template "workspaces" (dict "out" .out "ws" .ws) }}
{{ template "waybar-modules" . }}
}
+14
View File
@@ -0,0 +1,14 @@
{
"output": "DP-2",
"layer": "top",
"position": "top",
"height": 44,
"modules-right": ["clock"],
"modules-center": ["sway/workspaces"],
{{ template "workspaces" (dict "out" "DP-2" "ws" (list "5" "6" "7" "8")) }}
"clock": {
"timezone": "America/Montreal",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"format": "🕐 {:%H:%M 📅 %d/%m/%y}"
}
}
+44
View File
@@ -0,0 +1,44 @@
"tray": {
"icon-size": 21,
"spacing": 10
},
"clock": {
"timezone": "America/Montreal",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"format": "🕐\n{:%H\n%M\n\n📅\n%d\n%m\n%y} "
},
"backlight": {
"device": "intel_backlight",
"format": "{icon}",
"format-icons": ["", "", "", "", "", "", "", "", ""]
},
"battery": {
"states": {
"warning": 30,
"critical": 15
},
"format": "🔋\n{capacity}",
"format-charging": "⚡\n{capacity}",
"format-plugged": "🔌\n{capacity}",
"format-alt": "{icon}",
"format-icons": ["", "", "", "", "", "", "", "", "", "", "", ""]
},
"custom/power": {
"format" : "⏻",
"tooltip": false,
"menu": "on-click",
"menu-file": "~/.config/waybar/power_menu.xml",
"menu-actions": {
"logout": "loginctl terminate-user \"\"",
"shutdown": "systemctl poweroff",
"reboot": "systemctl reboot"
}
},
"pulseaudio": {
"format": "{icon}\n{volume}",
"format-muted": "",
"format-icons": {
"default": ["", "", " "]
},
"on-click": "pwvucontrol"
},
+14
View File
@@ -0,0 +1,14 @@
"sway/workspaces": {
"persistent-workspaces": {
{{- range $ws := .ws }}
"{{ $ws }}": ["{{ $.out }}"],
{{- end }}
},
"disable-scroll": true,
"sort-by-name": true,
"format": "{icon}",
"format-icons": {
"default": "<span color=\"#cdd6f4\">●</span>",
"focused": "<span color=\"#fab387\">●</span>",
},
},
-4
View File
@@ -1,4 +0,0 @@
1password
losslesscut-bin
rustdesk-bin
v4l2loopback-dkms-git
-229
View File
@@ -1,229 +0,0 @@
accountsservice
adobe-source-han-sans-cn-fonts
adobe-source-han-sans-jp-fonts
adobe-source-han-sans-kr-fonts
alsa-firmware
alsa-plugins
alsa-utils
appmenu-gtk-module
awesome-terminal-fonts
base
base-devel
bash-completion
bind
bluez
bluez-hid2hci
bluez-libs
bluez-utils
btop
btrfs-progs
cachyos-fish-config
cachyos-gaming-meta
cachyos-hello
cachyos-hooks
cachyos-kernel-manager
cachyos-keyring
cachyos-micro-settings
cachyos-mirrorlist
cachyos-packageinstaller
cachyos-plymouth-bootanimation
cachyos-rate-mirrors
cachyos-settings
cachyos-v3-mirrorlist
cachyos-v4-mirrorlist
cachyos-wallpapers
cachyos-zsh-config
chromium
chwd
cpupower
cryptsetup
cups
cups-filters
cups-pdf
device-mapper
dhclient
diffutils
discord
dmidecode
dmraid
dnsmasq
dolphin
dosfstools
duf
e2fsprogs
efibootmgr
efitools
egl-wayland
ethtool
exfatprogs
f2fs-tools
fastfetch
ffmpegthumbnailer
foomatic-db
foomatic-db-engine
foomatic-db-gutenprint-ppds
foomatic-db-nonfree
foomatic-db-nonfree-ppds
foomatic-db-ppds
fsarchiver
gamemode
gamescope
ghostscript
git
glances
gnome-keyring
gpu-screen-recorder-ui
gsfonts
gst-libav
gst-plugin-pipewire
gst-plugin-va
gst-plugins-bad
gst-plugins-ugly
gutenprint
haveged
hdparm
hwdetect
hwinfo
inetutils
iptables-nft
iwd
jfsutils
kcalc
kitty
lazygit
less
lib32-gamemode
lib32-mesa
lib32-opencl-mesa
libdbusmenu-glib
libdvdcss
libgsf
libopenraw
libwnck3
limine
limine-mkinitcpio-hook
linux-cachyos
linux-cachyos-headers
linux-cachyos-lts
linux-cachyos-lts-headers
linux-firmware
logrotate
lsb-release
lsscsi
lvm2
ly
man-db
man-pages
mangohud
mdadm
mediainfo
meld
mesa
mesa-utils
micro
mkinitcpio
modemmanager
mpv
mtools
nano-syntax-highlighting
neovim
netctl
networkmanager
networkmanager-openvpn
nfs-utils
nilfs-utils
noise-suppression-for-voice
noto-color-emoji-fontconfig
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
nss-mdns
ntp
obs-studio
obs-vkcapture
octopi
opencl-mesa
opendesktop-fonts
openssh
os-prober
otf-font-awesome
pacman-contrib
paru
perl
pipewire-alsa
pipewire-pulse
pkgfile
plocate
plymouth
poppler-glib
power-profiles-daemon
proton-mail-bin
pv
pwvucontrol
python
python-defusedxml
python-packaging
rebuild-detector
reflector
ripgrep
rofi
rsync
rtkit
s-nail
sg3_utils
signal-desktop
smartmontools
sof-firmware
splix
starship
steam
sudo
sway
swaylock
sysfsutils
system-config-printer
tailscale
texinfo
tmux
ttf-bitstream-vera
ttf-dejavu
ttf-jetbrains-mono-nerd
ttf-liberation
ttf-meslo-nerd
ttf-opensans
ufw
unrar
unzip
upower
usb_modeswitch
usbmuxd
usbutils
uwsm
v4l2loopback-dkms
vim
vlc-plugins-all
waybar
wayland-protocols
wget
which
wireless-regdb
wireplumber
wl-clipboard
wmenu
wofi
wpa_supplicant
xdg-desktop-portal
xdg-desktop-portal-wlr
xdg-user-dirs
xdg-utils
xf86-input-libinput
xfsprogs
xl2tpd
xorg-server
xorg-xdpyinfo
xorg-xinit
xorg-xinput
xorg-xkill
xorg-xrandr
xorg-xwayland
yazi
-11
View File
@@ -1,11 +0,0 @@
# Font Configuration
font_family JetBrainsMono Nerd Font
bold_font auto
italic_font auto
bold_italic_font auto
# Shell Integration - Start tmux by default
shell /usr/bin/tmux new-session -A -D -s main
# Terminal Type
term xterm-256color
-3
View File
@@ -1,3 +0,0 @@
- Prefer concise, readable code over clever one-liners
- No unnecessary comments — code should be self-documenting
- Docker-friendly: no hardcoded paths, use env vars for config
-30
View File
@@ -1,30 +0,0 @@
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"model": "opencode-go/deepseek-v4-flash",
"temperature": 1.0,
"top_p": 0.95,
"permission":{
"skill": {
"git-*": "allow"
}
}
},
"plan": {
"model": "kimi-for-coding/k3",
}
},
"mcp": {
"gitea-mcp": {
"enabled": true,
"type": "local",
"command": [
"gitea-mcp",
"-t", "stdio",
"-H", "https://gitea.itspm.cc",
"-T", "82e8aeb9bcf9b26d1bad9167549f6532f968bcb0"
]
}
}
}
-98
View File
@@ -1,98 +0,0 @@
[{
"output": "DP-1",
"layer": "top", // Waybar at top layer
"position": "left", // Waybar position (top|bottom|left|right)
"width": 44, // Waybar width
// Choose the order of the modules
"modules-left": ["clock", "pulseaudio"],
"modules-center": ["sway/workspaces"],
"modules-right": ["tray", "battery", "custom/power"],
"sway/workspaces": {
"persistent-workspaces": {
"1": ["DP-1"],
"2": ["DP-1"],
"3": ["DP-1"],
"4": ["DP-1"],
},
"disable-scroll": true,
"sort-by-name": true,
"format": "{icon}",
"format-icons": {
"default": "<span color=\"#cdd6f4\">●</span>",
"focused": "<span color=\"#fab387\">●</span>",
},
},
"tray": {
"icon-size": 21,
"spacing": 10
},
"clock": {
"timezone": "America/Montreal",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"format": "🕐\n{:%H\n%M\n\n📅\n%d\n%m\n%y} "
},
"backlight": {
"device": "intel_backlight",
"format": "{icon}",
"format-icons": ["", "", "", "", "", "", "", "", ""]
},
"battery": {
"states": {
"warning": 30,
"critical": 15
},
"format": "🔋\n{capacity}",
"format-charging": "⚡\n{capacity}",
"format-plugged": "🔌\n{capacity}",
"format-alt": "{icon}",
"format-icons": ["", "", "", "", "", "", "", "", "", "", "", ""]
},
"custom/power": {
"format" : "⏻",
"tooltip": false,
"menu": "on-click",
"menu-file": "~/.config/waybar/power_menu.xml",
"menu-actions": {
"logout": "loginctl terminate-user \"\"",
"shutdown": "systemctl poweroff",
"reboot": "systemctl reboot"
}
},
"pulseaudio": {
// "scroll-step": 1, // %, can be a float
"format": "{icon}\n{volume}",
"format-muted": "",
"format-icons": {
"default": ["", "", " "]
},
"on-click": "pwvucontrol"
},
},
{
"output": "DP-2",
"layer": "top",
"position": "top",
"height": 44,
"modules-right": ["clock"],
"modules-center": ["sway/workspaces"],
"sway/workspaces": {
"persistent-workspaces": {
"5": ["DP-2"],
"6": ["DP-2"],
"7": ["DP-2"],
"8": ["DP-2"],
},
"disable-scroll": true,
"sort-by-name": true,
"format": "{icon}",
"format-icons": {
"default": "<span color=\"#cdd6f4\">●</span>",
"focused": "<span color=\"#fab387\">●</span>",
},
},
"clock": {
"timezone": "America/Montreal",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"format": "🕐 {:%H:%M 📅 %d/%m/%y}"
}
}]
-12
View File
@@ -1,12 +0,0 @@
[[plugin.deps]]
use = "AnirudhG07/rich-preview"
rev = "573b275"
hash = "c3e2871c9ef244fd181f203791f9b0d2"
[[plugin.deps]]
use = "yazi-rs/plugins:git"
rev = "6c71385"
hash = "36a484acf6a0a0219c543ccb4cee218f"
[flavor]
deps = []
@@ -0,0 +1,4 @@
opencode-bin
{{ if eq .chezmoi.hostname "flow" -}}
pulsemeeter-git
{{- end }}
+30
View File
@@ -0,0 +1,30 @@
# Software with configs in this repo + runtime deps referenced by those configs
{{ if eq .hosttype "desktop" -}}
teams-for-linux
{{- end }}
brightnessctl
cachyos-fish-config
chezmoi
dunst
fish
git
gnome-keyring
kitty
lazygit
neovim
paru
pipewire-pulse
polkit-gnome
pwvucontrol
rofi
starship
sway
swayidle
swaylock
tmux
ttf-jetbrains-mono-nerd
uwsm
waybar
wl-clipboard
yazi
zsh
@@ -1,6 +1,6 @@
source /usr/share/cachyos-fish-config/cachyos-config.fish source /usr/share/cachyos-fish-config/cachyos-config.fish
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME' alias dotfiles='chezmoi'
fish_add_path ~/.local/bin fish_add_path ~/.local/bin
+27
View File
@@ -0,0 +1,27 @@
- Prefer concise, readable code over clever one-liners
- No unnecessary comments — code should be self-documenting
- Docker-friendly: no hardcoded paths, use env vars for config
<!-- codebase-memory-mcp:start -->
# Codebase Knowledge Graph (codebase-memory-mcp)
This project uses codebase-memory-mcp to maintain a knowledge graph of the codebase.
ALWAYS prefer MCP graph tools over grep/glob/file-search for code discovery.
## Priority Order
1. `search_graph` — find functions, classes, routes, variables by pattern
2. `trace_path` — trace who calls a function or what it calls
3. `get_code_snippet` — read specific function/class source code
4. `query_graph` — run Cypher queries for complex patterns
5. `get_architecture` — high-level project summary
## When to fall back to grep/glob
- Searching for string literals, error messages, config values
- Searching non-code files (Dockerfiles, shell scripts, configs)
- When MCP tools return insufficient results
## Examples
- Find a handler: `search_graph(name_pattern=".*OrderHandler.*")`
- Who calls it: `trace_path(function_name="OrderHandler", direction="inbound")`
- Read source: `get_code_snippet(qualified_name="pkg/orders.OrderHandler")`
<!-- codebase-memory-mcp:end -->
+40
View File
@@ -0,0 +1,40 @@
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"build": {
"model": "opencode-go/deepseek-v4-flash",
"temperature": 1.0,
"top_p": 0.95,
"permission": {
"skill": {
"git-*": "allow"
}
}
},
"plan": {
"model": "kimi-for-coding/k3"
}
},
"mcp": {
"gitea-mcp": {
"enabled": true,
"type": "local",
"command": [
"gitea-mcp",
"-t",
"stdio",
"-H",
"https://gitea.itspm.cc",
"-T",
"82e8aeb9bcf9b26d1bad9167549f6532f968bcb0"
]
},
"codebase-memory-mcp": {
"enabled": true,
"type": "local",
"command": [
"/home/pmcc/.local/bin/codebase-memory-mcp"
]
}
}
}
+6
View File
@@ -0,0 +1,6 @@
{{ if eq .hosttype "laptop" -}}
bindsym XF86MonBrightnessDown exec brightnessctl -d intel_backlight s 5%-
bindsym XF86MonBrightnessUp exec brightnessctl -d intel_backlight s +5%
bindsym --no-repeat $mod+Shift+r exec ~/.config/sway/scripts/toggle-refresh-rate.sh
{{- end }}
+10
View File
@@ -0,0 +1,10 @@
{{ if eq .hosttype "laptop" -}}
input "type:pointer" {
accel_profile flat
pointer_accel 0
}
input "2362:4931:PIXA3854:00_093A:1343_Touchpad" {
tap enabled
}
{{- end }}
@@ -0,0 +1,11 @@
{{ if eq .chezmoi.hostname "framework13pro" -}}
output eDP-1 mode 2880x1920@120Hz
{{- else if eq .chezmoi.hostname "flow" -}}
# TODO: fill in flow's outputs (run: swaymsg -t get_outputs)
# output DP-1 mode 2560x1440@144Hz position 0 0
# output DP-2 mode 2560x1440@144Hz position 2560 0
{{- else if eq .chezmoi.hostname "gata" -}}
# TODO: fill in gata's outputs (run: swaymsg -t get_outputs)
# output DP-1 mode 2560x1440@144Hz position 0 0
# output DP-2 mode 1920x1080@60Hz position 2560 0
{{- end }}
@@ -0,0 +1,14 @@
#!/bin/bash
OUTPUT="eDP-1"
CURRENT=$(swaymsg -rt get_outputs | jq -r ".[] | select(.name==\"$OUTPUT\") | .current_mode.refresh" | cut -d. -f1)
if [ "$CURRENT" -eq 120000 ]; then
swaymsg output "$OUTPUT" mode 2880x1920@60Hz
notify-send "Refresh Rate" "Switched to 60Hz" -t 2000
else
swaymsg output "$OUTPUT" mode 2880x1920@120Hz
notify-send "Refresh Rate" "Switched to 120Hz" -t 2000
fi
pkill -RTMIN+8 waybar
+11
View File
@@ -0,0 +1,11 @@
{{- if eq .chezmoi.hostname "framework13pro" -}}
[{{ template "bar-primary" (dict "out" "eDP-1" "ws" (list "1" "2" "3" "4")) }},
{{ template "bar-secondary" . }}]
{{- else if eq .chezmoi.hostname "flow" -}}
[{{ template "bar-primary" (dict "out" "DP-1" "ws" (list "1" "2" "3" "4")) }},
{{ template "bar-secondary" . }}]
{{- else if eq .chezmoi.hostname "gata" -}}
// TODO: fill in gata's outputs (run: swaymsg -t get_outputs)
[{{ template "bar-primary" (dict "out" "DP-1" "ws" (list "1" "2" "3" "4")) }},
{{ template "bar-secondary" . }}]
{{- end }}
+12
View File
@@ -0,0 +1,12 @@
[[plugin.deps]]
use = "AnirudhG07/rich-preview"
rev = "7d616ad"
hash = "d64feec9761392cbc250d199ab4b8a3a"
[[plugin.deps]]
use = "yazi-rs/plugins:git"
rev = "9014ed2"
hash = "88e56a64b7ce7c4314427452343fef17"
[flavor]
deps = []
View File
+1 -1
View File
@@ -13,7 +13,7 @@ bindkey "^[[3~" delete-char
alias ls='ls --color=auto' alias ls='ls --color=auto'
alias grep='grep --color=auto' alias grep='grep --color=auto'
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME' alias dotfiles='chezmoi'
eval "$(starship init zsh)" eval "$(starship init zsh)"