configs-all 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +3 -0
- package/CLAUDE.md +94 -0
- package/README.md +424 -0
- package/TERMINAL_SHORTCUTS.md +96 -0
- package/WINDOWS_COMPATIBILITY.md +85 -0
- package/WINDOWS_MCP_SETUP.md +133 -0
- package/apps/RectangleConfig.plist +0 -0
- package/apps/Synergy +84 -0
- package/apps/iStat Menus Settings.ismp7 +0 -0
- package/claude/CLAUDE.md +228 -0
- package/claude/commands/changelog.md +36 -0
- package/claude/commands/commit.md +29 -0
- package/claude/commands/context.md +112 -0
- package/claude/commands/dash.md +37 -0
- package/claude/commands/deploy-check.md +37 -0
- package/claude/commands/deps.md +26 -0
- package/claude/commands/duplo.md +56 -0
- package/claude/commands/explain.md +43 -0
- package/claude/commands/fix-and-test.md +46 -0
- package/claude/commands/game-debug.md +66 -0
- package/claude/commands/games.md +53 -0
- package/claude/commands/go.md +147 -0
- package/claude/commands/guard.md +102 -0
- package/claude/commands/handoff.md +66 -0
- package/claude/commands/incident.md +144 -0
- package/claude/commands/init.md +78 -0
- package/claude/commands/k8s-debug.md +31 -0
- package/claude/commands/lint.md +27 -0
- package/claude/commands/merge-all.md +115 -0
- package/claude/commands/merge.md +129 -0
- package/claude/commands/mikpc.md +54 -0
- package/claude/commands/morning.md +72 -0
- package/claude/commands/partymode.md +105 -0
- package/claude/commands/plans.md +88 -0
- package/claude/commands/pr.md +41 -0
- package/claude/commands/prep.md +132 -0
- package/claude/commands/push-sync.md +82 -0
- package/claude/commands/push.md +34 -0
- package/claude/commands/research.md +73 -0
- package/claude/commands/retro.md +95 -0
- package/claude/commands/review-pr.md +96 -0
- package/claude/commands/review.md +41 -0
- package/claude/commands/scaffold-agent.md +45 -0
- package/claude/commands/setup.md +92 -0
- package/claude/commands/ship-prod.md +97 -0
- package/claude/commands/ship.md +82 -0
- package/claude/commands/simplify.md +42 -0
- package/claude/commands/spike.md +110 -0
- package/claude/commands/status.md +37 -0
- package/claude/commands/sync.md +72 -0
- package/claude/commands/test.md +29 -0
- package/claude/commands/triage.md +72 -0
- package/claude/desktop/claude_desktop_config.json +9 -0
- package/claude/hooks.json +15 -0
- package/claude/mcp-servers.duplo.json +8 -0
- package/claude/mcp-servers.json +62 -0
- package/claude/scripts/psdebug.ps1 +7 -0
- package/claude/settings.json +38 -0
- package/claude/settings.local.json +4 -0
- package/claude/statusline-command.sh +94 -0
- package/claude/templates/CLAUDE-k8s-devops.md +58 -0
- package/claude/templates/CLAUDE-python-agent.md +47 -0
- package/claude/templates/CLAUDE-typescript-frontend.md +50 -0
- package/docker/ai-stack/docker-compose.yml +76 -0
- package/docker/ai-stack/searxng/limiter.toml +3 -0
- package/docker/ai-stack/searxng/settings.yml +39 -0
- package/docker/cli/config.json.template +15 -0
- package/docker/cli/daemon.json +9 -0
- package/docker/cli/features.json +3 -0
- package/docker/mcp/catalog.json +9 -0
- package/docker/mcp/catalogs/docker-mcp.yaml +15107 -0
- package/docker/mcp/config.yaml +0 -0
- package/docker/mcp/registry.yaml +37 -0
- package/docker/mcp/tools.yaml +0 -0
- package/docs/context/.gitkeep +0 -0
- package/docs/context/2026-03-02-configs.md +142 -0
- package/docs/handoff/.gitkeep +0 -0
- package/docs/incidents/.gitkeep +0 -0
- package/docs/plans/2026-02-28-autonomous-command-suite-design.md +250 -0
- package/docs/plans/2026-02-28-autonomous-command-suite.md +682 -0
- package/docs/plans/2026-03-01-ai-stack-split-architecture.md +72 -0
- package/docs/plans/2026-03-02-ai-stack-expansion.md +33 -0
- package/docs/plans/2026-03-02-merge-commands-design.md +58 -0
- package/docs/plans/2026-03-02-merge-commands.md +354 -0
- package/docs/research/.gitkeep +0 -0
- package/docs/research/2026-03-02-configs-repo-architecture.md +152 -0
- package/docs/retros/.gitkeep +0 -0
- package/docs/retros/2026-03-01-ai-stack-split-architecture.md +38 -0
- package/docs/spikes/.gitkeep +0 -0
- package/gh/config.yml +16 -0
- package/gh/hosts.yml +5 -0
- package/gh/main.json +103 -0
- package/ghostty/config +90 -0
- package/git/config/base.gitconfig +46 -0
- package/git/config/chiefmikey.gitconfig +11 -0
- package/git/config/personal.gitconfig +10 -0
- package/git/config/work.gitconfig +14 -0
- package/ide/cursor/extensions.txt +111 -0
- package/ide/cursor/keybindings.json +307 -0
- package/ide/cursor/mcp.json +92 -0
- package/ide/cursor/settings.json +544 -0
- package/ide/vscode/extensions.txt +120 -0
- package/ide/vscode/insiders/extensions.txt +119 -0
- package/ide/vscode/insiders/keybindings.json +294 -0
- package/ide/vscode/insiders/settings.json +518 -0
- package/ide/vscode/keybindings.json +294 -0
- package/ide/vscode/settings.json +526 -0
- package/ide/vscode/vscode/extensions.txt +43 -0
- package/iterm/Mikey Pro.json +951 -0
- package/iterm/com.googlecode.iterm2.plist +5549 -0
- package/iterm/font/MesloLGS NF Bold Italic.ttf +0 -0
- package/iterm/font/MesloLGS NF Bold.ttf +0 -0
- package/iterm/font/MesloLGS NF Italic.ttf +0 -0
- package/iterm/font/MesloLGS NF Regular.ttf +0 -0
- package/package.json +15 -0
- package/scripts/ai/deploy-ai-stack.sh +119 -0
- package/scripts/ai/fix-ai-proxy.service +12 -0
- package/scripts/ai/fix-ai-proxy.sh +25 -0
- package/scripts/brew/search/brew-search-results.sh +19 -0
- package/scripts/brew/search/brew-search.sh +34 -0
- package/scripts/brew/upgrade/brew-upgrade-autoupdate.sh +5 -0
- package/scripts/brew/upgrade/brew-upgrade-full-auto.sh +89 -0
- package/scripts/brew/upgrade/brew-upgrade-full.sh +159 -0
- package/scripts/docker/cleanup/docker-cleanup-manage.sh +163 -0
- package/scripts/docker/cleanup/docker-cleanup.cron +12 -0
- package/scripts/docker/cleanup/docker-cleanup.sh +280 -0
- package/scripts/docker/install/README.md +23 -0
- package/scripts/docker/install/docker-al2.sh +7 -0
- package/scripts/docker/install/docker-compose-al2.sh +15 -0
- package/scripts/gh/auth/auth.sh +12 -0
- package/scripts/gh/config/gh-config.sh +3 -0
- package/scripts/gh/gist/gh-gist-create.sh +29 -0
- package/scripts/gh/gist/gh-gist-delete.sh +1 -0
- package/scripts/gh/gist/gh-gist-edit.sh +8 -0
- package/scripts/gh/gpg-key/gh-gpg-key-add.sh +3 -0
- package/scripts/gh/install/install.sh +7 -0
- package/scripts/gh/label/gh-label-clone.sh +0 -0
- package/scripts/gh/label/gh-label-create.sh +0 -0
- package/scripts/gh/label/gh-label-delete.sh +0 -0
- package/scripts/gh/label/gh-label-edit.sh +0 -0
- package/scripts/gh/label/gh-label-list.sh +0 -0
- package/scripts/gh/secret/gh-secret-delete.sh +24 -0
- package/scripts/gh/secret/gh-secret-set.sh +70 -0
- package/scripts/gh/ssh-key/gh-ssh-key-add.sh +8 -0
- package/scripts/git/add/git-add.sh +3 -0
- package/scripts/git/auth/README.md +11 -0
- package/scripts/git/auth/https.sh +20 -0
- package/scripts/git/auth/ssh-mac.sh +41 -0
- package/scripts/git/branch-delete/git-branch-delete.sh +16 -0
- package/scripts/git/checkout/git-checkout-stash.sh +32 -0
- package/scripts/git/temp/git-temp-pull.sh +6 -0
- package/scripts/git/temp/git-temp-push.sh +5 -0
- package/scripts/install/fresh.zsh +34 -0
- package/scripts/install/full-install.zsh +193 -0
- package/scripts/linux/codedeploy/README.md +19 -0
- package/scripts/linux/codedeploy/linux-codedeploy-al2.sh +13 -0
- package/scripts/linux/codedeploy/linux-codedeploy-index.sh +16 -0
- package/scripts/linux/codedeploy/linux-codedeploy-ubuntu.sh +14 -0
- package/scripts/linux/coredns/README.md +17 -0
- package/scripts/linux/coredns/linux-coredns-al2.sh +29 -0
- package/scripts/linux/wifi/01-netconf.yaml +21 -0
- package/scripts/linux/wifi/wifi-ubuntu.sh +17 -0
- package/scripts/mac/dock-sort/mac-dock-sort.sh +87 -0
- package/scripts/mac/dropbox-ignore/mac-dropbox-ignore.sh +12 -0
- package/scripts/mac/sudo-askpass/mac-sudo-askpass.sh +50 -0
- package/scripts/mac/sudo-askpass/setup-sudo-password.sh +49 -0
- package/scripts/mac/upgrade/mac-upgrade.sh +21 -0
- package/scripts/mac/vpn/mac-vpn.sh +4 -0
- package/scripts/mcp/aws-mcp-wrapper.ps1 +97 -0
- package/scripts/mcp/aws-mcp-wrapper.sh +53 -0
- package/scripts/mcp/duplo-mcp-wrapper.sh +31 -0
- package/scripts/mcp/filesystem-mcp-wrapper.ps1 +43 -0
- package/scripts/mcp/filesystem-mcp-wrapper.sh +34 -0
- package/scripts/mcp/git-mcp-wrapper.ps1 +42 -0
- package/scripts/mcp/git-mcp-wrapper.sh +33 -0
- package/scripts/mcp/github-mcp-wrapper.ps1 +43 -0
- package/scripts/mcp/github-mcp-wrapper.sh +19 -0
- package/scripts/mcp/kubernetes-mcp-wrapper.ps1 +22 -0
- package/scripts/mcp/kubernetes-mcp-wrapper.sh +16 -0
- package/scripts/mcp/mcp-launcher.ps1 +56 -0
- package/scripts/mcp/mcp-launcher.sh +71 -0
- package/scripts/mcp/mongodb-mcp-wrapper.ps1 +26 -0
- package/scripts/mcp/mongodb-mcp-wrapper.sh +17 -0
- package/scripts/mcp/notion-mcp-wrapper.ps1 +23 -0
- package/scripts/mcp/notion-mcp-wrapper.sh +14 -0
- package/scripts/mcp/postgres-mcp-wrapper.ps1 +23 -0
- package/scripts/mcp/postgres-mcp-wrapper.sh +16 -0
- package/scripts/npm/ncu/npm-ncu.sh +24 -0
- package/scripts/npm/upgrade/npm-upgrade.sh +51 -0
- package/scripts/qmk/build_reviung41.sh +28 -0
- package/scripts/qmk/sync_unicorne.sh +44 -0
- package/scripts/sync/README.md +64 -0
- package/scripts/sync/config-common.zsh +882 -0
- package/scripts/sync/pull-configs.ps1 +33 -0
- package/scripts/sync/pull-configs.zsh +278 -0
- package/scripts/sync/push-configs.ps1 +91 -0
- package/scripts/sync/push-configs.zsh +384 -0
- package/shell/alias/alias-d.zsh +333 -0
- package/shell/alias/alias.zsh +36 -0
- package/shell/alias/categories/development.zsh +157 -0
- package/shell/alias/categories/environment.zsh +13 -0
- package/shell/alias/categories/git.zsh +40 -0
- package/shell/alias/categories/github-functions.zsh +459 -0
- package/shell/alias/categories/network.zsh +46 -0
- package/shell/alias/categories/path.zsh +46 -0
- package/shell/alias/categories/system.zsh +78 -0
- package/shell/alias/categories/wolfe-server.zsh +11 -0
- package/shell/powershell/Microsoft.PowerShell_profile.ps1 +208 -0
- package/shell/zsh/.p10k.zsh +1832 -0
- package/shell/zsh/.zshrc +87 -0
- package/shell/zsh/config/completion.zsh +31 -0
- package/shell/zsh/config/functions.zsh +31 -0
- package/shell/zsh/config/keybindings.zsh +13 -0
- package/shell/zsh/config/options.zsh +56 -0
- package/shell/zsh/config/plugins.zsh +83 -0
- package/shell/zsh/config/variables.zsh +191 -0
- package/shell/zsh/powerlevel10k.zsh-theme +83 -0
- package/shell/zsh/zsh-autosuggestions.zsh +871 -0
- package/ssh/config +46 -0
- package/ssh/config.duplo +21 -0
- package/ssh/config.mikpc +35 -0
- package/ssh/personal_signing.pub +1 -0
- package/templates/.envrc.example +34 -0
- package/templates/.envrc.quickstart +17 -0
- package/wezterm/wezterm.lua +249 -0
- package/wsl/.wslconfig +3 -0
- package/wsl/wsl.conf +18 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "configs-all",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"devDependencies": {
|
|
5
|
+
"mikey-pro": "^9.0.6"
|
|
6
|
+
},
|
|
7
|
+
"license": "ISC",
|
|
8
|
+
"prettier": "@mikey-pro/prettier-config",
|
|
9
|
+
"eslintConfig": {
|
|
10
|
+
"extends": "@mikey-pro/eslint-config"
|
|
11
|
+
},
|
|
12
|
+
"stylelint": {
|
|
13
|
+
"extends": "@mikey-pro/stylelint-config"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Deploy GPU compute stack to mikpc
|
|
3
|
+
# Web UIs run on wolfe-server — this deploys compute-only services
|
|
4
|
+
# Run from Mac: ./scripts/ai/deploy-ai-stack.sh
|
|
5
|
+
# Run on mikpc: ./scripts/ai/deploy-ai-stack.sh --local
|
|
6
|
+
|
|
7
|
+
set -uo pipefail
|
|
8
|
+
|
|
9
|
+
REMOTE_HOST="mikpc"
|
|
10
|
+
REMOTE_DEPLOY_DIR="/opt/ai-stack"
|
|
11
|
+
|
|
12
|
+
# Colors
|
|
13
|
+
GREEN='\033[0;32m'
|
|
14
|
+
YELLOW='\033[1;33m'
|
|
15
|
+
RED='\033[0;31m'
|
|
16
|
+
NC='\033[0m'
|
|
17
|
+
|
|
18
|
+
info() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
19
|
+
warn() { echo -e "${YELLOW}[!]${NC} $1"; }
|
|
20
|
+
error() { echo -e "${RED}[✗]${NC} $1"; }
|
|
21
|
+
|
|
22
|
+
# Detect if running locally on mikpc or remotely from Mac
|
|
23
|
+
if [[ "${1:-}" == "--local" ]] || [[ "$(hostname 2>/dev/null)" == "mikpc" ]]; then
|
|
24
|
+
LOCAL_MODE=true
|
|
25
|
+
else
|
|
26
|
+
LOCAL_MODE=false
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
run_remote() {
|
|
30
|
+
if [[ "$LOCAL_MODE" == true ]]; then
|
|
31
|
+
eval "$1"
|
|
32
|
+
else
|
|
33
|
+
ssh "$REMOTE_HOST" "$1"
|
|
34
|
+
fi
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
# Resolve script location to find the stack configs
|
|
38
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
39
|
+
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
40
|
+
STACK_SRC="$REPO_ROOT/docker/ai-stack"
|
|
41
|
+
|
|
42
|
+
if [[ ! -f "$STACK_SRC/docker-compose.yml" ]]; then
|
|
43
|
+
error "Cannot find $STACK_SRC/docker-compose.yml"
|
|
44
|
+
exit 1
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
echo "═══════════════════════════════════════════════════"
|
|
48
|
+
echo " GPU Compute Stack Deployment — mikpc"
|
|
49
|
+
echo "═══════════════════════════════════════════════════"
|
|
50
|
+
echo ""
|
|
51
|
+
|
|
52
|
+
# 1. Verify Docker is running
|
|
53
|
+
info "Checking Docker on mikpc..."
|
|
54
|
+
if ! run_remote "docker info >/dev/null 2>&1"; then
|
|
55
|
+
warn "Docker not running, attempting to start..."
|
|
56
|
+
run_remote "sudo service docker start"
|
|
57
|
+
sleep 2
|
|
58
|
+
if ! run_remote "docker info >/dev/null 2>&1"; then
|
|
59
|
+
error "Docker failed to start on mikpc"
|
|
60
|
+
exit 1
|
|
61
|
+
fi
|
|
62
|
+
fi
|
|
63
|
+
info "Docker is running"
|
|
64
|
+
|
|
65
|
+
# 2. Deploy configs via rsync
|
|
66
|
+
info "Deploying compute stack configs to $REMOTE_DEPLOY_DIR..."
|
|
67
|
+
if [[ "$LOCAL_MODE" == true ]]; then
|
|
68
|
+
sudo mkdir -p "$REMOTE_DEPLOY_DIR"
|
|
69
|
+
sudo cp -r "$STACK_SRC/"* "$REMOTE_DEPLOY_DIR/"
|
|
70
|
+
sudo chown -R "$(whoami):$(id -gn)" "$REMOTE_DEPLOY_DIR"
|
|
71
|
+
else
|
|
72
|
+
run_remote "sudo mkdir -p $REMOTE_DEPLOY_DIR && sudo chown wolfe:wolfe $REMOTE_DEPLOY_DIR"
|
|
73
|
+
rsync -avz --delete "$STACK_SRC/" "${REMOTE_HOST}:${REMOTE_DEPLOY_DIR}/"
|
|
74
|
+
fi
|
|
75
|
+
info "Configs deployed"
|
|
76
|
+
|
|
77
|
+
# 3. Deploy port proxy automation
|
|
78
|
+
info "Setting up port proxy automation..."
|
|
79
|
+
PROXY_SCRIPT="$REPO_ROOT/scripts/ai/fix-ai-proxy.sh"
|
|
80
|
+
PROXY_SERVICE="$REPO_ROOT/scripts/ai/fix-ai-proxy.service"
|
|
81
|
+
if [[ "$LOCAL_MODE" == true ]]; then
|
|
82
|
+
sudo cp "$PROXY_SCRIPT" "$REMOTE_DEPLOY_DIR/fix-ai-proxy.sh"
|
|
83
|
+
sudo chmod +x "$REMOTE_DEPLOY_DIR/fix-ai-proxy.sh"
|
|
84
|
+
sudo cp "$PROXY_SERVICE" /etc/systemd/system/fix-ai-proxy.service
|
|
85
|
+
sudo systemctl daemon-reload
|
|
86
|
+
sudo systemctl enable fix-ai-proxy 2>/dev/null
|
|
87
|
+
else
|
|
88
|
+
rsync -avz "$PROXY_SCRIPT" "${REMOTE_HOST}:${REMOTE_DEPLOY_DIR}/fix-ai-proxy.sh"
|
|
89
|
+
run_remote "chmod +x $REMOTE_DEPLOY_DIR/fix-ai-proxy.sh"
|
|
90
|
+
rsync -avz "$PROXY_SERVICE" "${REMOTE_HOST}:/tmp/fix-ai-proxy.service"
|
|
91
|
+
run_remote "sudo cp /tmp/fix-ai-proxy.service /etc/systemd/system/fix-ai-proxy.service && sudo systemctl daemon-reload && sudo systemctl enable fix-ai-proxy 2>/dev/null"
|
|
92
|
+
fi
|
|
93
|
+
info "Port proxy automation configured"
|
|
94
|
+
|
|
95
|
+
# 4. Pull images and start
|
|
96
|
+
info "Pulling images (this may take a few minutes)..."
|
|
97
|
+
run_remote "cd $REMOTE_DEPLOY_DIR && docker compose pull"
|
|
98
|
+
info "Starting compute stack..."
|
|
99
|
+
run_remote "cd $REMOTE_DEPLOY_DIR && docker compose up -d"
|
|
100
|
+
|
|
101
|
+
# 5. Verify
|
|
102
|
+
echo ""
|
|
103
|
+
info "Verifying services..."
|
|
104
|
+
sleep 5
|
|
105
|
+
run_remote "docker ps --filter 'network=ai-compute' --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'"
|
|
106
|
+
|
|
107
|
+
echo ""
|
|
108
|
+
echo "═══════════════════════════════════════════════════"
|
|
109
|
+
echo " GPU Compute Services — mikpc"
|
|
110
|
+
echo "═══════════════════════════════════════════════════"
|
|
111
|
+
echo ""
|
|
112
|
+
echo " ComfyUI: http://100.89.204.71:8188 (Image Gen)"
|
|
113
|
+
echo " ACE-Step: http://100.89.204.71:7860 (Music Gen)"
|
|
114
|
+
echo ""
|
|
115
|
+
echo " Ollama: http://100.89.204.71:11434 (systemd service)"
|
|
116
|
+
echo " Speaches: Moved to wolfe-server (RTX 3060)"
|
|
117
|
+
echo ""
|
|
118
|
+
echo " Web UIs run on wolfe-server (chat/search/n8n.wolfe.family)"
|
|
119
|
+
echo "═══════════════════════════════════════════════════"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
[Unit]
|
|
2
|
+
Description=WSL Port Proxy for AI Compute Services
|
|
3
|
+
After=network-online.target
|
|
4
|
+
Wants=network-online.target
|
|
5
|
+
|
|
6
|
+
[Service]
|
|
7
|
+
Type=oneshot
|
|
8
|
+
RemainAfterExit=yes
|
|
9
|
+
ExecStart=/opt/ai-stack/fix-ai-proxy.sh
|
|
10
|
+
|
|
11
|
+
[Install]
|
|
12
|
+
WantedBy=multi-user.target
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Update Windows port proxy to current WSL IP for GPU compute services
|
|
3
|
+
# Must run from WSL on mikpc after each WSL restart (WSL IP changes)
|
|
4
|
+
# Ports: 11434 (Ollama), 7860 (ACE-Step), 8000 (Speaches), 8188 (ComfyUI)
|
|
5
|
+
# Web UIs now run on wolfe-server — only GPU compute exposed here
|
|
6
|
+
|
|
7
|
+
WSL_IP=$(hostname -I | tr -s ' ' | cut -d' ' -f1)
|
|
8
|
+
echo "WSL IP: $WSL_IP"
|
|
9
|
+
|
|
10
|
+
if [[ -z "$WSL_IP" ]]; then
|
|
11
|
+
echo "ERROR: Could not determine WSL IP"
|
|
12
|
+
exit 1
|
|
13
|
+
fi
|
|
14
|
+
|
|
15
|
+
PORTS=(11434 7860 8188)
|
|
16
|
+
|
|
17
|
+
for PORT in "${PORTS[@]}"; do
|
|
18
|
+
powershell.exe -Command "netsh interface portproxy delete v4tov4 listenport=$PORT listenaddress=0.0.0.0" 2>/dev/null
|
|
19
|
+
powershell.exe -Command "netsh interface portproxy add v4tov4 listenport=$PORT listenaddress=0.0.0.0 connectport=$PORT connectaddress=$WSL_IP"
|
|
20
|
+
echo "Forwarded port $PORT -> $WSL_IP:$PORT"
|
|
21
|
+
done
|
|
22
|
+
|
|
23
|
+
echo ""
|
|
24
|
+
echo "Current port proxy rules:"
|
|
25
|
+
powershell.exe -Command "netsh interface portproxy show v4tov4"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
BREW_CORE=homebrew/core
|
|
4
|
+
BREW_CASK=homebrew/cask
|
|
5
|
+
CASK_VERSIONS=homebrew/cask-versions
|
|
6
|
+
CASK_FONTS=homebrew/cask-fonts
|
|
7
|
+
ALL_TAPS="${BREW_CORE} ${BREW_CASK} ${CASK_VERSIONS} ${CASK_FONTS}"
|
|
8
|
+
|
|
9
|
+
package_counter () {
|
|
10
|
+
COUNTER=0
|
|
11
|
+
for cask in $("${SCRIPT_DIR}"/brew/search/brew-search.sh "${1}"); do
|
|
12
|
+
COUNTER=$((${COUNTER} + 1))
|
|
13
|
+
done
|
|
14
|
+
echo "${COUNTER}"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
for tap in ${ALL_TAPS}; do
|
|
18
|
+
echo "${tap}: $(package_counter "${tap}")"
|
|
19
|
+
done
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
all_packages () {
|
|
4
|
+
brew tap-info --json "$@" | jq -r '.[]|(.formula_names[],.cask_tokens[])' | sort -V
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
COUNTER_ONE=0
|
|
8
|
+
for rb in $(all_packages "${1}"); do
|
|
9
|
+
echo "${rb##*/}"
|
|
10
|
+
COUNTER_ONE=$((COUNTER_ONE+1))
|
|
11
|
+
done
|
|
12
|
+
|
|
13
|
+
# echo "homebrew/core: ${COUNTER_ONE}"
|
|
14
|
+
|
|
15
|
+
# COUNTER_TWO=0
|
|
16
|
+
# for rb in $(all_packages homebrew/cask); do
|
|
17
|
+
# echo "${rb##*/}"
|
|
18
|
+
# COUNTER_TWO=$((COUNTER_TWO+1))
|
|
19
|
+
# done
|
|
20
|
+
|
|
21
|
+
# echo "homebrew/cask: ${COUNTER_TWO}"
|
|
22
|
+
|
|
23
|
+
# COUNTER_FOUR=0
|
|
24
|
+
# for rb in $(all_packages homebrew/cask-versions); do
|
|
25
|
+
# echo "${rb##*/}"
|
|
26
|
+
# COUNTER_FOUR=$((COUNTER_FOUR+1))
|
|
27
|
+
# done
|
|
28
|
+
|
|
29
|
+
# echo "homebrew/cask-versions: ${COUNTER_FOUR}"
|
|
30
|
+
|
|
31
|
+
# echo "Totals:"
|
|
32
|
+
# echo "homebrew/core: ${COUNTER_ONE}"
|
|
33
|
+
# echo "homebrew/cask: ${COUNTER_TWO}"
|
|
34
|
+
# echo "homebrew/cask-versions: ${COUNTER_FOUR}"
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
export SUDO_ASKPASS="${SCRIPT_DIR}"/mac/sudo-askpass/mac-sudo-askpass.sh
|
|
4
|
+
|
|
5
|
+
brew autoupdate stop
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
echo "+ brew update"
|
|
9
|
+
BREW_UPDATE=$(brew update)
|
|
10
|
+
export BREW_UPDATE
|
|
11
|
+
if [ "${BREW_UPDATE}" = "already up to date." ]; then
|
|
12
|
+
echo "already up to date."
|
|
13
|
+
else
|
|
14
|
+
echo "${BREW_UPDATE}"
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
echo "+ brew upgrade"
|
|
18
|
+
|
|
19
|
+
# Backup Dock configuration to preserve app positions
|
|
20
|
+
backup_dock() {
|
|
21
|
+
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
22
|
+
echo "Backing up Dock configuration..."
|
|
23
|
+
defaults export com.apple.dock /tmp/dock-backup.plist 2>/dev/null || true
|
|
24
|
+
fi
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
restore_dock() {
|
|
28
|
+
if [[ "$OSTYPE" == "darwin"* ]] && [ -f "/tmp/dock-backup.plist" ]; then
|
|
29
|
+
echo "Restoring Dock configuration..."
|
|
30
|
+
defaults import com.apple.dock /tmp/dock-backup.plist 2>/dev/null || true
|
|
31
|
+
killall Dock 2>/dev/null || true
|
|
32
|
+
rm -f /tmp/dock-backup.plist
|
|
33
|
+
fi
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
# Backup Dock before upgrades
|
|
37
|
+
backup_dock
|
|
38
|
+
|
|
39
|
+
# Upgrade formulas first
|
|
40
|
+
echo "Upgrading formulas..."
|
|
41
|
+
BREW_UPGRADE_FORMULAS=$(brew upgrade)
|
|
42
|
+
|
|
43
|
+
# Upgrade regular casks (non-auto-updating)
|
|
44
|
+
echo "Upgrading regular casks..."
|
|
45
|
+
BREW_UPGRADE_CASKS=$(brew upgrade --cask)
|
|
46
|
+
|
|
47
|
+
# Upgrade auto-updating casks individually (safer approach)
|
|
48
|
+
echo "Upgrading auto-updating casks individually..."
|
|
49
|
+
# Get list of all installed casks and check each one for auto_updates
|
|
50
|
+
AUTO_UPDATING_CASKS=""
|
|
51
|
+
for cask in $(brew list --cask); do
|
|
52
|
+
if brew info --cask "$cask" 2>/dev/null | grep -q "auto_updates true"; then
|
|
53
|
+
AUTO_UPDATING_CASKS="$AUTO_UPDATING_CASKS$cask"$'\n'
|
|
54
|
+
fi
|
|
55
|
+
done
|
|
56
|
+
BREW_UPGRADE_AUTO_CASKS=""
|
|
57
|
+
|
|
58
|
+
if [ -n "$AUTO_UPDATING_CASKS" ]; then
|
|
59
|
+
while IFS= read -r cask; do
|
|
60
|
+
if [ -n "$cask" ]; then
|
|
61
|
+
echo "Upgrading auto-updating cask: $cask"
|
|
62
|
+
BREW_UPGRADE_AUTO_CASKS="$BREW_UPGRADE_AUTO_CASKS$(brew upgrade --cask "$cask" 2>&1)"$'\n'
|
|
63
|
+
fi
|
|
64
|
+
done <<< "$AUTO_UPDATING_CASKS"
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
# Restore Dock configuration
|
|
68
|
+
restore_dock
|
|
69
|
+
|
|
70
|
+
BREW_UPGRADE="${BREW_UPGRADE_FORMULAS}
|
|
71
|
+
${BREW_UPGRADE_CASKS}
|
|
72
|
+
${BREW_UPGRADE_AUTO_CASKS}"
|
|
73
|
+
export BREW_UPGRADE
|
|
74
|
+
if [ -z "${BREW_UPGRADE}" ]; then
|
|
75
|
+
echo "already up to date."
|
|
76
|
+
else
|
|
77
|
+
echo "${BREW_UPGRADE}"
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
echo "+ brew cleanup"
|
|
81
|
+
BREW_CLEANUP=$(brew cleanup)
|
|
82
|
+
export BREW_CLEANUP
|
|
83
|
+
if [ -z "${BREW_CLEANUP}" ]; then
|
|
84
|
+
echo "Cleanup complete."
|
|
85
|
+
else
|
|
86
|
+
echo "${BREW_CLEANUP}"
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
"${SCRIPT_DIR}"/brew-upgrade/brew-upgrade-autoupdate.sh "${1}"
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Daily Homebrew Upgrade Script (with smart cask handling)
|
|
4
|
+
|
|
5
|
+
# Set SUDO_ASKPASS if needed
|
|
6
|
+
export SUDO_ASKPASS="${SCRIPT_DIR}/mac/sudo-askpass/mac-sudo-askpass.sh"
|
|
7
|
+
|
|
8
|
+
cd "${HOME}" || exit
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# Step 1: Update brew
|
|
12
|
+
echo "+ brew update"
|
|
13
|
+
brew update
|
|
14
|
+
|
|
15
|
+
# Step 2: Pre-clean stale `.upgrading` cask dirs
|
|
16
|
+
echo "+ pre-clean"
|
|
17
|
+
find /opt/homebrew/Caskroom -type d -name "*.upgrading" | while read -r stale; do
|
|
18
|
+
echo "Removing stale upgrade dir: $stale"
|
|
19
|
+
rm -rf "$stale"
|
|
20
|
+
done
|
|
21
|
+
|
|
22
|
+
# Step 4: Perform comprehensive upgrade with Dock preservation
|
|
23
|
+
echo "+ brew upgrade"
|
|
24
|
+
|
|
25
|
+
# Backup Dock configuration to preserve app positions
|
|
26
|
+
backup_dock() {
|
|
27
|
+
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
28
|
+
echo "Backing up Dock configuration..."
|
|
29
|
+
defaults export com.apple.dock /tmp/dock-backup.plist 2>/dev/null || true
|
|
30
|
+
fi
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
restore_dock() {
|
|
34
|
+
if [[ "$OSTYPE" == "darwin"* ]] && [ -f "/tmp/dock-backup.plist" ]; then
|
|
35
|
+
echo "Restoring Dock configuration..."
|
|
36
|
+
defaults import com.apple.dock /tmp/dock-backup.plist 2>/dev/null || true
|
|
37
|
+
killall Dock 2>/dev/null || true
|
|
38
|
+
rm -f /tmp/dock-backup.plist
|
|
39
|
+
fi
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# Backup Dock before upgrades
|
|
43
|
+
backup_dock
|
|
44
|
+
|
|
45
|
+
BREW_UPGRADE=$(mktemp)
|
|
46
|
+
|
|
47
|
+
# Upgrade formulas first
|
|
48
|
+
echo "Upgrading formulas..."
|
|
49
|
+
brew upgrade 2>&1 | tee -a "$BREW_UPGRADE"
|
|
50
|
+
|
|
51
|
+
# Upgrade regular casks (non-auto-updating)
|
|
52
|
+
echo "Upgrading regular casks..."
|
|
53
|
+
brew upgrade --cask 2>&1 | tee -a "$BREW_UPGRADE"
|
|
54
|
+
|
|
55
|
+
# Upgrade auto-updating casks individually (safer approach)
|
|
56
|
+
echo "Upgrading auto-updating casks individually..."
|
|
57
|
+
# Get list of all installed casks and check each one for auto_updates
|
|
58
|
+
AUTO_UPDATING_CASKS=""
|
|
59
|
+
for cask in $(brew list --cask); do
|
|
60
|
+
if brew info --cask "$cask" 2>/dev/null | grep -q "auto_updates true"; then
|
|
61
|
+
AUTO_UPDATING_CASKS="$AUTO_UPDATING_CASKS$cask"$'\n'
|
|
62
|
+
fi
|
|
63
|
+
done
|
|
64
|
+
|
|
65
|
+
if [ -n "$AUTO_UPDATING_CASKS" ]; then
|
|
66
|
+
while IFS= read -r cask; do
|
|
67
|
+
if [ -n "$cask" ]; then
|
|
68
|
+
echo "Upgrading auto-updating cask: $cask"
|
|
69
|
+
brew upgrade --cask "$cask" 2>&1 | tee -a "$BREW_UPGRADE"
|
|
70
|
+
fi
|
|
71
|
+
done <<< "$AUTO_UPDATING_CASKS"
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
BREW_UPGRADE_CONTENT=$(cat "$BREW_UPGRADE")
|
|
75
|
+
export BREW_UPGRADE_CONTENT
|
|
76
|
+
rm "$BREW_UPGRADE"
|
|
77
|
+
|
|
78
|
+
# Restore Dock configuration
|
|
79
|
+
restore_dock
|
|
80
|
+
|
|
81
|
+
if [ -z "${BREW_UPGRADE_CONTENT}" ]; then
|
|
82
|
+
echo "already up to date."
|
|
83
|
+
else
|
|
84
|
+
echo "${BREW_UPGRADE_CONTENT}"
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# Step 5: Parse summary
|
|
88
|
+
UPDATED_BOTTLES=()
|
|
89
|
+
UPDATED_CASKS=()
|
|
90
|
+
|
|
91
|
+
# Create temporary files to store results
|
|
92
|
+
BOTTLES_TEMP=$(mktemp)
|
|
93
|
+
CASKS_TEMP=$(mktemp)
|
|
94
|
+
|
|
95
|
+
# Parse upgrade sections from the output
|
|
96
|
+
while IFS= read -r line; do
|
|
97
|
+
if [[ "$line" =~ ^\=\=\> ]]; then
|
|
98
|
+
continue
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
# Match package upgrade lines (name old_version -> new_version)
|
|
102
|
+
if [[ "$line" =~ ^([a-zA-Z0-9@/._-]+)[[:space:]]+([0-9._-]+.*)[[:space:]]-\>[[:space:]]+([0-9._-]+.*) ]]; then
|
|
103
|
+
name="${BASH_REMATCH[1]}"
|
|
104
|
+
fromvers="${BASH_REMATCH[2]}"
|
|
105
|
+
tovers="${BASH_REMATCH[3]}"
|
|
106
|
+
|
|
107
|
+
# Check if it's a cask by looking for "(Cask)" in brew info output
|
|
108
|
+
if brew info "$name" 2>/dev/null | grep -qF "(Cask)"; then
|
|
109
|
+
echo "$name $fromvers -> $tovers" >> "$CASKS_TEMP"
|
|
110
|
+
else
|
|
111
|
+
echo "$name $fromvers -> $tovers" >> "$BOTTLES_TEMP"
|
|
112
|
+
fi
|
|
113
|
+
fi
|
|
114
|
+
done < <(echo "$BREW_UPGRADE_CONTENT" | grep -A 50 "^==> Upgrading [0-9]* outdated packages:")
|
|
115
|
+
|
|
116
|
+
# Read results back into arrays
|
|
117
|
+
while IFS= read -r line; do
|
|
118
|
+
[ -n "$line" ] && UPDATED_BOTTLES+=("$line")
|
|
119
|
+
done < "$BOTTLES_TEMP"
|
|
120
|
+
|
|
121
|
+
while IFS= read -r line; do
|
|
122
|
+
[ -n "$line" ] && UPDATED_CASKS+=("$line")
|
|
123
|
+
done < "$CASKS_TEMP"
|
|
124
|
+
|
|
125
|
+
# Clean up temp files
|
|
126
|
+
rm -f "$BOTTLES_TEMP" "$CASKS_TEMP"
|
|
127
|
+
|
|
128
|
+
# Step 6: Cleanup deeply
|
|
129
|
+
echo "+ brew cleanup"
|
|
130
|
+
brew cleanup --prune=all -s
|
|
131
|
+
|
|
132
|
+
# Step 7: Output summary
|
|
133
|
+
echo
|
|
134
|
+
echo "========== Brew Upgrade Summary =========="
|
|
135
|
+
if [ ${#UPDATED_BOTTLES[@]} -gt 0 ]; then
|
|
136
|
+
echo "Updated Bottles:"
|
|
137
|
+
for bottle in "${UPDATED_BOTTLES[@]}"; do
|
|
138
|
+
echo "* $bottle"
|
|
139
|
+
done
|
|
140
|
+
else
|
|
141
|
+
echo "No bottles were updated."
|
|
142
|
+
fi
|
|
143
|
+
|
|
144
|
+
if [ ${#UPDATED_CASKS[@]} -gt 0 ]; then
|
|
145
|
+
echo "Updated Casks:"
|
|
146
|
+
for cask in "${UPDATED_CASKS[@]}"; do
|
|
147
|
+
echo "* $cask"
|
|
148
|
+
done
|
|
149
|
+
else
|
|
150
|
+
echo "No casks were updated."
|
|
151
|
+
fi
|
|
152
|
+
echo "=========================================="
|
|
153
|
+
echo
|
|
154
|
+
|
|
155
|
+
# Step 8: Optional full cache nuke
|
|
156
|
+
if [ "${1}" = "full" ]; then
|
|
157
|
+
echo "+ rm brew --cache"
|
|
158
|
+
rm -rf "$(brew --cache)"
|
|
159
|
+
fi
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Docker Cleanup Cron Management Script
|
|
4
|
+
# Manage the automated Docker cleanup cron job
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
CLEANUP_SCRIPT="$SCRIPT_DIR/docker-cleanup.sh"
|
|
10
|
+
CRON_JOB="0 2 * * 0 $CLEANUP_SCRIPT --yes"
|
|
11
|
+
|
|
12
|
+
show_help() {
|
|
13
|
+
cat << EOF
|
|
14
|
+
Docker Cleanup Cron Management
|
|
15
|
+
|
|
16
|
+
Usage: $0 [command]
|
|
17
|
+
|
|
18
|
+
Commands:
|
|
19
|
+
install Install the weekly cleanup cron job (Sundays at 2 AM)
|
|
20
|
+
uninstall Remove the cleanup cron job
|
|
21
|
+
status Show current cron job status
|
|
22
|
+
test Test the cleanup script (dry-run)
|
|
23
|
+
edit Edit the cron schedule manually
|
|
24
|
+
help Show this help message
|
|
25
|
+
|
|
26
|
+
Examples:
|
|
27
|
+
$0 install # Install weekly cleanup (Sundays at 2 AM)
|
|
28
|
+
$0 status # Check if cron job is installed
|
|
29
|
+
$0 test # Preview what would be cleaned (dry-run)
|
|
30
|
+
$0 uninstall # Remove the cron job
|
|
31
|
+
$0 edit # Edit cron schedule manually
|
|
32
|
+
|
|
33
|
+
Setting Up Aliases:
|
|
34
|
+
Docker cleanup aliases are automatically loaded via your shell config.
|
|
35
|
+
They're defined in: shell/alias/categories/system.zsh
|
|
36
|
+
|
|
37
|
+
Use:
|
|
38
|
+
docker-cleanup-manage install
|
|
39
|
+
docker-cleanup-manage status
|
|
40
|
+
docker-cleanup-manage test
|
|
41
|
+
|
|
42
|
+
One-Time Cleanup:
|
|
43
|
+
To run cleanup manually (without cron):
|
|
44
|
+
docker-cleanup --dry-run # Preview
|
|
45
|
+
docker-cleanup --yes # Run cleanup
|
|
46
|
+
|
|
47
|
+
EOF
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
check_installed() {
|
|
51
|
+
if crontab -l 2>/dev/null | grep -q "docker-cleanup.sh"; then
|
|
52
|
+
return 0
|
|
53
|
+
else
|
|
54
|
+
return 1
|
|
55
|
+
fi
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
install_cron() {
|
|
59
|
+
if check_installed; then
|
|
60
|
+
echo "⚠️ Docker cleanup cron job already installed!"
|
|
61
|
+
echo ""
|
|
62
|
+
echo "Current entry:"
|
|
63
|
+
crontab -l | grep "docker-cleanup.sh"
|
|
64
|
+
echo ""
|
|
65
|
+
read -p "Replace existing entry? (y/N) " -n 1 -r
|
|
66
|
+
echo
|
|
67
|
+
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
68
|
+
echo "Installation cancelled."
|
|
69
|
+
exit 0
|
|
70
|
+
fi
|
|
71
|
+
uninstall_cron
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
if [ ! -f "$CLEANUP_SCRIPT" ]; then
|
|
75
|
+
echo "❌ Error: Cleanup script not found at $CLEANUP_SCRIPT"
|
|
76
|
+
exit 1
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
# Add new cron job
|
|
80
|
+
(crontab -l 2>/dev/null; echo "$CRON_JOB") | crontab -
|
|
81
|
+
|
|
82
|
+
echo "✅ Docker cleanup cron job installed!"
|
|
83
|
+
echo ""
|
|
84
|
+
echo "Schedule: Every Sunday at 2:00 AM"
|
|
85
|
+
echo "Command: $CLEANUP_SCRIPT --yes"
|
|
86
|
+
echo ""
|
|
87
|
+
echo "To view: $0 status"
|
|
88
|
+
echo "To remove: $0 uninstall"
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
uninstall_cron() {
|
|
92
|
+
if ! check_installed; then
|
|
93
|
+
echo "ℹ️ No Docker cleanup cron job found."
|
|
94
|
+
exit 0
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
echo "Removing Docker cleanup cron job..."
|
|
98
|
+
crontab -l 2>/dev/null | grep -v "docker-cleanup.sh" | crontab -
|
|
99
|
+
echo "✅ Cron job removed."
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
show_status() {
|
|
103
|
+
if check_installed; then
|
|
104
|
+
echo "✅ Docker cleanup cron job is installed:"
|
|
105
|
+
echo ""
|
|
106
|
+
crontab -l | grep "docker-cleanup.sh" | while read -r line; do
|
|
107
|
+
echo " $line"
|
|
108
|
+
done
|
|
109
|
+
echo ""
|
|
110
|
+
echo "Script location: $CLEANUP_SCRIPT"
|
|
111
|
+
else
|
|
112
|
+
echo "ℹ️ Docker cleanup cron job is not installed."
|
|
113
|
+
echo ""
|
|
114
|
+
echo "To install: $0 install"
|
|
115
|
+
fi
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
test_cleanup() {
|
|
119
|
+
echo "🧪 Testing cleanup script (dry-run)..."
|
|
120
|
+
echo ""
|
|
121
|
+
"$CLEANUP_SCRIPT" --dry-run
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
edit_cron() {
|
|
125
|
+
if ! check_installed; then
|
|
126
|
+
echo "ℹ️ No cron job installed. Install it first: $0 install"
|
|
127
|
+
exit 1
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
echo "Opening crontab editor..."
|
|
131
|
+
echo "Look for the line containing 'docker-cleanup.sh' to edit the schedule."
|
|
132
|
+
echo ""
|
|
133
|
+
read -p "Press Enter to continue..."
|
|
134
|
+
crontab -e
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
# Main command handling
|
|
138
|
+
case "${1:-}" in
|
|
139
|
+
install)
|
|
140
|
+
install_cron
|
|
141
|
+
;;
|
|
142
|
+
uninstall|remove)
|
|
143
|
+
uninstall_cron
|
|
144
|
+
;;
|
|
145
|
+
status|check)
|
|
146
|
+
show_status
|
|
147
|
+
;;
|
|
148
|
+
test)
|
|
149
|
+
test_cleanup
|
|
150
|
+
;;
|
|
151
|
+
edit)
|
|
152
|
+
edit_cron
|
|
153
|
+
;;
|
|
154
|
+
help|--help|-h)
|
|
155
|
+
show_help
|
|
156
|
+
;;
|
|
157
|
+
*)
|
|
158
|
+
echo "Unknown command: ${1:-}"
|
|
159
|
+
echo ""
|
|
160
|
+
show_help
|
|
161
|
+
exit 1
|
|
162
|
+
;;
|
|
163
|
+
esac
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Docker Cleanup Cron Job
|
|
2
|
+
# Runs weekly cleanup on Sundays at 2 AM
|
|
3
|
+
#
|
|
4
|
+
# To install, use the management script:
|
|
5
|
+
# ./docker-cleanup-manage.sh install
|
|
6
|
+
#
|
|
7
|
+
# Or manually edit crontab:
|
|
8
|
+
# crontab -e
|
|
9
|
+
# Then add this line (adjust path as needed):
|
|
10
|
+
# 0 2 * * 0 /path/to/docker-cleanup.sh --yes
|
|
11
|
+
|
|
12
|
+
0 2 * * 0 /path/to/docker-cleanup.sh --yes
|