Personal dotfiles and setup scripts. No build system, no test suite.
Symlinks are managed by setup_dotfiles.sh (home dir) and dotconfig/setup.sh (~/.config/).
bash setup_dotfiles.sh # symlink dotfiles into $HOME
bash dotconfig/setup.sh # symlink dotconfig/* into ~/.config/
bash bootstrap.sh # full bootstrap on a new machine
bash -n <file>.sh # syntax-check a shell script (no test runner)
perl -wc bin/linkbin.pl # syntax-check Perl script
python3 -m py_compile bin/rsync-recent.py # syntax-check Python
shellcheck <file>.sh # lint shell scripts (preferred)No single-test command exists — there are no automated tests.
- Shebang:
#!/bin/bash;set -ein setup scripts - Functions:
lower_snake_case; local vars:lower_snake_case - Indent: 4 spaces (no tabs)
- Quote all variable expansions:
"$var","${var}" - Prefer
[[ … ]]over[ … ]for conditionals
- Python 3;
#!/usr/bin/env python3 argparsefor CLI,loggingfor output (no bareprintin main logic)lower_snake_casefor functions/variables; constantsUPPER_SNAKE_CASE
- Always
use strict; use warnings;(or-wflag) lower_snake_casesubs;$lower_camellocal vars- do not use for new scripts
- Host-specific files:
<hostname>_dot<name>convention - User-specific files:
<username>_dot<name>convention - ECA skill files live in
dotconfig/eca/skills/<name>/SKILL.md - Commit messages: imperative mood, plain English, no emoji
- Agent Workspace: Use
/home/alex/mysrc/dotfiles.git/agent_workspace/for storing plans, tool evaluations, or temporary files. This directory is ignored by git. - Communication: Use
cavemanmode (lite or full) for all technical interactions to minimize token usage while maintaining accuracy.