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:
pmcc committed 2026-08-01 22:37:00 -04:00
1 parent b550677af7
commit 7e6d30c3cd
71 files changed
+264 -389

No files matched your search

+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 }}
File renamed without changes.
+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
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+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"
]
}
}
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+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
File renamed without changes.
File renamed without changes.
+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 }}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+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 = []
File renamed without changes.
File renamed without changes.
View File
File renamed without changes.
+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)"