@@ -5,7 +5,7 @@ local_image := "localhost/ai-dev"
55remote_image := " ghcr.io/binarypie-dev/ai-dev:latest"
66
77# Common podman run flags (UID 0 inside = host user in rootless podman)
8- podman_flags := " --rm -it --user 0:0 --security-opt label=disable"
8+ podman_flags := " --rm -it --init -- user 0:0 --security-opt label=disable"
99
1010# Default recipe - show help
1111default :
@@ -44,12 +44,13 @@ push:
4444claude * args :
4545 #!/ usr/ bin/ bash
4646 set -euo pipefail
47- mkdir -p " $HOME/.claude" " $HOME/.config/claude"
47+ mkdir -p " $HOME/.claude"
48+ touch " $HOME/.claude.json"
4849 exec podman run {{ podman_flags}} \
4950 - e HOME=" $HOME" \
5051 - v " $(pwd):$(pwd):rw" \
5152 - v " $HOME/.claude:$HOME/.claude:rw" \
52- - v " $HOME/.config/ claude:$HOME/.config/ claude:rw" \
53+ - v " $HOME/.claude.json :$HOME/.claude.json :rw" \
5354 - w " $(pwd)" \
5455 {{ local_image}} \
5556 claude {{ args}}
@@ -76,7 +77,8 @@ gemini *args:
7677enter :
7778 #!/ usr/ bin/ bash
7879 set -euo pipefail
79- mkdir -p " $HOME/.claude" " $HOME/.config/claude" " $HOME/.gemini"
80+ mkdir -p " $HOME/.claude" " $HOME/.gemini"
81+ touch " $HOME/.claude.json"
8082 env_flags=" "
8183 for var in $(env | grep -E ' ^(GOOGLE_|GEMINI_|ANTHROPIC_)' | cut -d= -f1); do
8284 env_flags=" $env_flags -e $var"
8688 $env_flags \
8789 - v " $(pwd):$(pwd):rw" \
8890 - v " $HOME/.claude:$HOME/.claude:rw" \
89- - v " $HOME/.config/ claude:$HOME/.config/ claude:rw" \
91+ - v " $HOME/.claude.json :$HOME/.claude.json :rw" \
9092 - v " $HOME/.gemini:$HOME/.gemini:rw" \
9193 - w " $(pwd)" \
9294 {{ local_image}}
@@ -100,91 +102,79 @@ install:
100102 #!/ usr/ bin/ bash
101103 set -euo pipefail
102104 mkdir -p " $HOME/.local/bin"
103-
104- cat > " $HOME/.local/bin/claude" << ' WRAPPER'
105- #!/ usr/ bin/ bash
106- set -euo pipefail
107- mkdir -p " $HOME/.claude" " $HOME/.config/claude"
108- exec podman run --rm -it \
109- - -user 0:0 \
110- - -security-opt label=disable \
111- - e HOME=" $HOME" \
112- - v " $(pwd):$(pwd):rw" \
113- - v " $HOME/.claude:$HOME/.claude:rw" \
114- - v " $HOME/.config/claude:$HOME/.config/claude:rw" \
115- - w " $(pwd)" \
116- ghcr.io/ binarypie-dev/ ai-dev:latest \
117- claude " $@"
118- WRAPPER
105+ printf ' %s\n' ' #!/usr/bin/bash' \
106+ ' set -euo pipefail' \
107+ ' mkdir -p "$HOME/.claude"' \
108+ ' touch "$HOME/.claude.json"' \
109+ ' exec podman run --rm -it --init \' \
110+ ' --user 0:0 \' \
111+ ' --security-opt label=disable \' \
112+ ' -e HOME="$HOME" \' \
113+ ' -v "$(pwd):$(pwd):rw" \' \
114+ ' -v "$HOME/.claude:$HOME/.claude:rw" \' \
115+ ' -v "$HOME/.claude.json:$HOME/.claude.json:rw" \' \
116+ ' -w "$(pwd)" \' \
117+ ' ghcr.io/binarypie-dev/ai-dev:latest \' \
118+ ' claude "$@"' > " $HOME/.local/bin/claude"
119119 chmod + x " $HOME/.local/bin/claude"
120-
121- cat > " $HOME/.local/bin/gemini" << ' WRAPPER'
122- #!/ usr/ bin/ bash
123- set -euo pipefail
124- mkdir -p " $HOME/.gemini"
125- env_flags=" "
126- for var in $(env | grep -E ' ^(GOOGLE_|GEMINI_)' | cut -d= -f1); do
127- env_flags=" $env_flags -e $var"
128- done
129- exec podman run --rm -it \
130- - -user 0:0 \
131- - -security-opt label=disable \
132- - e HOME=" $HOME" \
133- $env_flags \
134- - v " $(pwd):$(pwd):rw" \
135- - v " $HOME/.gemini:$HOME/.gemini:rw" \
136- - w " $(pwd)" \
137- ghcr.io/ binarypie-dev/ ai-dev:latest \
138- gemini " $@"
139- WRAPPER
120+ printf ' %s\n' ' #!/usr/bin/bash' \
121+ ' set -euo pipefail' \
122+ ' mkdir -p "$HOME/.gemini"' \
123+ ' env_flags=""' \
124+ ' for var in $(env | grep -E '" '"' ^(GOOGLE_|GEMINI_)'" '"' | cut -d= -f1); do' \
125+ ' env_flags="$env_flags -e $var"' \
126+ ' done' \
127+ ' exec podman run --rm -it --init \' \
128+ ' --user 0:0 \' \
129+ ' --security-opt label=disable \' \
130+ ' -e HOME="$HOME" \' \
131+ ' $env_flags \' \
132+ ' -v "$(pwd):$(pwd):rw" \' \
133+ ' -v "$HOME/.gemini:$HOME/.gemini:rw" \' \
134+ ' -w "$(pwd)" \' \
135+ ' ghcr.io/binarypie-dev/ai-dev:latest \' \
136+ ' gemini "$@"' > " $HOME/.local/bin/gemini"
140137 chmod + x " $HOME/.local/bin/gemini"
141-
142138 echo " Installed wrapper scripts to ~/.local/bin/claude and ~/.local/bin/gemini"
143139
144140# Install wrapper scripts pointing to local image
145141install-local :
146142 #!/ usr/ bin/ bash
147143 set -euo pipefail
148144 mkdir -p " $HOME/.local/bin"
149-
150- cat > " $HOME/.local/bin/claude" << ' WRAPPER'
151- #!/ usr/ bin/ bash
152- set -euo pipefail
153- mkdir -p " $HOME/.claude" " $HOME/.config/claude"
154- exec podman run --rm -it \
155- - -user 0:0 \
156- - -security-opt label=disable \
157- - e HOME=" $HOME" \
158- - v " $(pwd):$(pwd):rw" \
159- - v " $HOME/.claude:$HOME/.claude:rw" \
160- - v " $HOME/.config/claude:$HOME/.config/claude:rw" \
161- - w " $(pwd)" \
162- localhost/ ai-dev \
163- claude " $@"
164- WRAPPER
145+ printf ' %s\n' ' #!/usr/bin/bash' \
146+ ' set -euo pipefail' \
147+ ' mkdir -p "$HOME/.claude"' \
148+ ' touch "$HOME/.claude.json"' \
149+ ' exec podman run --rm -it --init \' \
150+ ' --user 0:0 \' \
151+ ' --security-opt label=disable \' \
152+ ' -e HOME="$HOME" \' \
153+ ' -v "$(pwd):$(pwd):rw" \' \
154+ ' -v "$HOME/.claude:$HOME/.claude:rw" \' \
155+ ' -v "$HOME/.claude.json:$HOME/.claude.json:rw" \' \
156+ ' -w "$(pwd)" \' \
157+ ' localhost/ai-dev \' \
158+ ' claude "$@"' > " $HOME/.local/bin/claude"
165159 chmod + x " $HOME/.local/bin/claude"
166-
167- cat > " $HOME/.local/bin/gemini" << ' WRAPPER'
168- #!/ usr/ bin/ bash
169- set -euo pipefail
170- mkdir -p " $HOME/.gemini"
171- env_flags=" "
172- for var in $(env | grep -E ' ^(GOOGLE_|GEMINI_)' | cut -d= -f1); do
173- env_flags=" $env_flags -e $var"
174- done
175- exec podman run --rm -it \
176- - -user 0:0 \
177- - -security-opt label=disable \
178- - e HOME=" $HOME" \
179- $env_flags \
180- - v " $(pwd):$(pwd):rw" \
181- - v " $HOME/.gemini:$HOME/.gemini:rw" \
182- - w " $(pwd)" \
183- localhost/ ai-dev \
184- gemini " $@"
185- WRAPPER
160+ printf ' %s\n' ' #!/usr/bin/bash' \
161+ ' set -euo pipefail' \
162+ ' mkdir -p "$HOME/.gemini"' \
163+ ' env_flags=""' \
164+ ' for var in $(env | grep -E '" '"' ^(GOOGLE_|GEMINI_)'" '"' | cut -d= -f1); do' \
165+ ' env_flags="$env_flags -e $var"' \
166+ ' done' \
167+ ' exec podman run --rm -it --init \' \
168+ ' --user 0:0 \' \
169+ ' --security-opt label=disable \' \
170+ ' -e HOME="$HOME" \' \
171+ ' $env_flags \' \
172+ ' -v "$(pwd):$(pwd):rw" \' \
173+ ' -v "$HOME/.gemini:$HOME/.gemini:rw" \' \
174+ ' -w "$(pwd)" \' \
175+ ' localhost/ai-dev \' \
176+ ' gemini "$@"' > " $HOME/.local/bin/gemini"
186177 chmod + x " $HOME/.local/bin/gemini"
187-
188178 echo " Installed wrapper scripts (local image) to ~/.local/bin/claude and ~/.local/bin/gemini"
189179
190180# Remove wrapper scripts from ~/.local/bin
@@ -226,7 +216,8 @@ test-build: build
226216debug :
227217 #!/ usr/ bin/ bash
228218 set -euo pipefail
229- mkdir -p " $HOME/.claude" " $HOME/.config/claude" " $HOME/.gemini"
219+ mkdir -p " $HOME/.claude" " $HOME/.gemini"
220+ touch " $HOME/.claude.json"
230221 env_flags=" "
231222 for var in $(env | grep -E ' ^(GOOGLE_|GEMINI_|ANTHROPIC_)' | cut -d= -f1); do
232223 env_flags=" $env_flags -e $var"
@@ -236,7 +227,7 @@ debug:
236227 $env_flags \
237228 - v " $(pwd):$(pwd):rw" \
238229 - v " $HOME/.claude:$HOME/.claude:rw" \
239- - v " $HOME/.config/ claude:$HOME/.config/ claude:rw" \
230+ - v " $HOME/.claude.json :$HOME/.claude.json :rw" \
240231 - v " $HOME/.gemini:$HOME/.gemini:rw" \
241232 - w " $(pwd)" \
242233 {{ local_image}} \
0 commit comments