What is seifenkehrer?#

seifenkehrer (German for “soap sweeper”) is a modular, YAML-driven cleanup tool designed to keep your macOS system clean, organized, and free of clutter. Define custom cleanup tasks, review deletions interactively, and reclaim disk space with minimal effort.
Perfect for developers, power users, and anyone tired of manually hunting down cache files, outdated versions, or residual data.
π Key Features#
- YAML-Based Task Configuration: Define cleanup rules in simple YAML files.
- Interactive & Silent Modes: Review deletions before they happen or automate cleanup.
- Smart Exclusions: Skip critical files with
excludeandkeep_newestrules. - Permission Handling: Force-delete read-only files (e.g., Go module cache, code-signed apps).
- Interval-Based Runs: Schedule tasks to run at specific intervals (e.g., weekly).
- Cross-Platform: Built with Go for macOS, Linux, and Windows compatibility.
π¦ Installation#
1. Install Script (Recommended)#
Verifies SHA256 checksums and seeds default tasks:
curl -fsSL https://raw.githubusercontent.com/original-flipster69/seifenkehrer/main/install.sh | sh2. Homebrew#
brew tap original-flipster69/seifenkehrer
brew install seifenkehrer3. Go Install#
go install github.com/original-flipster69/seifenkehrer@latest4. Build from Source#
git clone https://github.com/original-flipster69/seifenkehrer.git
cd seifenkehrer
go build .π οΈ Usage#
Basic Commands#
# List installed tasks
sk tasks
# Run interactive cleanup
sk clean
# Silent mode (no prompts)
sk clean --silent
# Custom tasks directory
sk clean --tasks-dir ./my-tasksExample Output#
After each run, Seifenkehrer displays a summary of freed space:
β
Chrome Old Versions: 1.2 GB freed
β Go Module Cache: 3 errors (hint: Run `go clean -modcache`)
π Total: 1.2 GB reclaimedπ Task Configuration#
Tasks are YAML files stored in ~/.seifenkehrer/tasks/. Example:
name: Chrome Old Versions
description: Removes outdated Google Chrome framework versions
globs:
- /Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/*
exclude:
- Current
keep_newest: 1
interval: 168h # Run weekly
force: true # Handle read-only files
hint: "Update Chrome to avoid version bloat"Supported Fields#
| Field | Required | Description |
|---|---|---|
name | No | Display name (defaults to filename). |
description | Yes | Purpose of the task. |
globs | Yes | File patterns to match (supports ~ for home directory). |
exclude | No | Basenames to skip. |
keep_newest | No | Keep the N most recent matches. |
interval | No | Minimum time between runs (e.g., 24h, 168h). |
force | No | Add write permissions before deleting (for read-only files). |
hint | No | Custom message shown after errors (e.g., recovery steps). |
π§ Task Management#
# Enable/disable tasks
sk config enable <task-name>
sk config disable <task-name>
# Set run interval
sk config interval <task-name> 24hπ How It Works#
- Load Tasks: Scans
~/.seifenkehrer/tasks/for.yaml/.ymlfiles. - Resolve Globs: Expands patterns, applies exclusions, and respects
keep_newest. - Check Intervals: Skips tasks if their
intervalhasnβt elapsed. - Preview Matches: Shows files grouped by task with sizes.
- Prompt for Action: Choose to delete all, skip, or select individually.
- Force Permissions: For
force: truetasks, adds write permissions before deletion. - Report Results: Displays hints for errors and a total bytes-freed summary.
π― Use Cases#
- Developers: Clean Go module cache, Node.js
node_modules, or Docker artifacts. - Designers: Remove Adobe cache or old font versions.
- General Users: Delete browser cache, old downloads, or system logs.
π Why Choose Seifenkehrer?#
- Lightweight: No GUI bloatβjust a CLI tool with YAML config.
- Transparent: Review deletions before they happen.
- Extensible: Add custom tasks for any cleanup scenario.
- Open Source: MIT-licensed and community-driven.
π’ Get Involved#
- GitHub: original-flipster69/seifenkehrer
- Issues: Report bugs or suggest features.
- Contribute: Add new tasks or improve the codebase!
