Files
linux-workspace/CLAUDE.md
lachtan f8a61e9290 Improve CLAUDE.md docs and add bash style rules
Expand CLAUDE.md with detailed helper function reference,
environment variables section, and commit conventions.
Add .claude/rules/bash-style.md for bash coding standards.
2026-03-15 14:36:53 +01:00

1.8 KiB

Linux Workspace

Dotfiles & workstation automation for Linux, macOS, WSL. bashrc loads rc/*.sh (ordered by prefix) and adds bin/ to PATH. $LWS points to repo root.

Directory Layout

  • rc/ — Shell init files, loaded in 0X-name.sh order. Per-tool env setup goes here.
  • install/ — Idempotent one-off installer scripts (run manually).
  • bin/ — Scripts auto-added to PATH. New CLI tools go here.
  • scripts/ — Setup scripts NOT on PATH (git-config, docker fixes, gnome config).
  • conf/ — Tool configs (vim, WireGuard, WSL).
  • functions.sh — Core lib (see below).

Key Helpers (functions.sh)

  • can_run <cmd> — check if command is available
  • is_slow_init / is_fast_init — check LWS_FAST mode
  • is_interactive_shell — true when [[ $- == *i* ]]
  • is_wsl — detect WSL environment
  • true_false <val> — normalize 1/true/yes to boolean
  • prepend_path / append_path / prepend_path_try / append_path_try — safe PATH manipulation
  • source_try <file> — source file if it exists
  • source_directory_sh <dir> — source all *.sh in a directory
  • xlog <msg> — debug log (only in interactive + LWS_DEBUG)

Conventions

All new bash scripts should use:

#!/usr/bin/env bash

set -E -o errexit -o nounset -o pipefail

Before writing shell code, check functions.sh for existing helper functions and prefer them over raw commands.

RC files MUST guard slow tools and check availability:

if is_slow_init && can_run pyenv; then
    # initialize pyenv
fi

Installers (install/*.sh) MUST be idempotent — check before installing.

Environment Variables

  • LWS_FAST=1 — skips slow tools during shell init
  • LWS_DEBUG=1 — enables debug logging via xlog

Commits

Do not add Co-Authored-By lines to commit messages.