Two of the seven modules invoked python_pkg/ paths that stopped existing when screen_locker and steam_backlog_enforcer were extracted into their own repos, so the first thing the installer did on a fresh machine was fail. Nothing installed guard-lib either, which meant the CORE "Midnight shutdown timer" module always died with "guardctl not found on PATH". Every module now resolves through install_module_from_repo, and require_extracted_repo clones a missing sibling instead of only printing instructions -- otherwise "clone it yourself" is not actionable on the bare machine this script exists to set up. The clone drops privileges to the invoking human via sudo -u, because an installer that re-execs under sudo would otherwise leave a root-owned checkout in the user's home; a sandbox cannot catch that, since the guest is root throughout. A clone that fails is still a loud, fatal module failure, never a silent skip. guard-lib is addressed as the "utils" repo: it is a subdirectory of github.com/kuhyx/utils, so asking for "guard-lib" would resolve to ~/guard-lib and derive a clone URL that does not exist. It installs first, before the modules that need guardctl. Separately, the security hardening suite's screen_locker section hardcoded $HOME/testsAndMisc/python_pkg/screen_locker/screen_lock.py. That path went away with the extraction, so all five checks silently SKIPPED -- reporting a clean run for tests that never executed, which is the exact failure mode lib/extracted_repos.sh was written to prevent. It resolves the repo properly now ($HOME is also wrong under sudo), and the assertions are rewritten against the current implementation: the four symbols they grepped for no longer exist anywhere, having been replaced by SPORT_CHOICES, SPORT_TABLE_TENNIS, _validate_table_tennis and MANUAL_WORKOUT_REFLECTION_MIN_CHARS. On this host that takes the suite from 18 passed / 1 failed / 5 skipped to 23 passed / 0 skipped. The task file's "18 passed / 6 skipped out of 17" target was stale -- the suite is 24 checks now -- so it could not be matched literally. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PJrqKERAo5QUeEHWS5Asgp |
||
|---|---|---|
| .github | ||
| .vscode | ||
| docs | ||
| endurain | ||
| linux_configuration | ||
| meta | ||
| python_pkg | ||
| third_party/agent-skills | ||
| .binary-allowlist | ||
| .copilotignore | ||
| .fvmrc | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .prettierignore | ||
| .shellcheckrc | ||
| AGENTS.md | ||
| CLAUDE.md | ||
| DESIGN_AUDIT_TODO.md | ||
| INSTALLER_FIX_TASK.md | ||
| lint_python.sh | ||
| pyproject.toml | ||
| README.md | ||
| refactor_claude_todo_resume.md | ||
| refactor_claude_todo.md | ||
| requirements.txt | ||
| RESTRUCTURE_HANDOFF.md | ||
| run.sh | ||
testsAndMisc
A collection of personal projects, scripts, and experiments — from a GPS-based phone focus tool to Linux/Arch automation, with CI, linting, and pre-commit hooks across the board.
Highlights
Phone Focus Mode
Location-based app restriction for rooted Android. Automatically disables non-whitelisted apps within 500 m of home using ADB + Magisk. Features Haversine distance calculation, hysteresis to prevent toggling, fail-safe unlock, and state persistence. Bash, Android ADB.
Linux Configuration
Automated Arch Linux setup: fresh-install scripts, i3 window manager config, LaTeX environment, and system tests. Includes documentation and test result logging.
Scripts
Utility scripts for development workflows — build file validation, secret detection, and custom makepkg helpers.
Repository Layout
| Path | Description |
|---|---|
python_pkg/ |
Python packages (each maintained subpackage lives here) |
billsplit/ |
Receipt bill-splitting Flutter app — people, groups, per-item assignment, e-paragon import and xlsx export (Dart, 100 % line coverage gate) |
linux_configuration/ |
Arch Linux setup, i3 config, system maintenance scripts |
focus_owner/ |
Device Owner app enforcing focus mode on the unrooted Pixel 6a — geofence + night curfew, hides apps the phone cannot un-hide (Dart/Kotlin) |
phone_focus_mode/ |
GPS-based Android focus enforcer (rooted-era scripts; config.sh is still the policy source of truth for focus_owner/) |
reverse_survivors/ |
Reverse Survivors — React/Vite game where you play the horde against an AI survivor (TypeScript, 100 % coverage gate) |
scripts/ |
Workspace-level helper scripts and pre-commit hooks |
docs/ |
Reference docs and historical reports |
third_party/ |
Vendored upstream skills/agents |
meta/ |
Repo-wide tooling: pyproject.toml, requirements.txt, .pre-commit-config.yaml, run.sh, lint_python.sh, .fvmrc. Symlinked into the repo root so tools that auto-discover from root keep working. |
Archived / unmaintained projects live in the sibling repository
testsAndMisc-archive.
Tooling
- Python linting: Ruff with all rules enabled (see
meta/pyproject.toml) - Dependencies:
pip install -r meta/requirements.txt(combined runtime + dev) - CI: GitHub Actions — lint, build, and test on push
- Testing: pytest (Python), custom shell-based test harness for scripts