요한 블로그

Blog

Sharing development experiences, code snippets, and technical insights.

Syncing dotfiles across 3 Macs with chezmoi (secrets encrypted with age)

chezmoi
dotfiles
age
macOS
Claude Code

Syncing shell config and ~/.claude/CLAUDE.md across 3 Macs — office, home, and laptop — with chezmoi, while encrypting API keys and SSH private keys with age. Setup commands, pitfalls like encryption not configured and the PATH chicken-and-egg, plus the source-of-truth model.

Read more

Automating Magento Deployment — Why I Dropped GitHub Actions for a Direct Mac→SSH Setup

Server
Magento
Hyvä
deployment
SSH
automation
over-engineering

With a manual trigger and no main repo, GitHub Actions is over-engineering. Running the server's deploy.sh directly via ssh -t from Raycast, plus avoiding the maintenance-mode lockout with trap and the composer install pitfall.

Read more

Doing Claude Code Right on a Remote Server — Ditch the Local Clone, Use tmux + Screenshot Auto-Hand-off

Claude Code
Claude Code
tmux
SSH
Magento
remote development
workflow

A remote Ubuntu server + AI coding agent workflow. Why I ditched the local clone, tmux multi-sessions instead of the VS Code extension, and filling the image-input gap in a pure terminal with an ss sync + cc function.

Read more

Things I Learned from Basketball

Daily Thoughts
daily
basketball
thoughts

A short note jotted down while playing basketball.

Read more

Enabling Claude Code to Use sudo on Ubuntu (fixing 'a terminal is required')

Claude Code
Claude Code
Ubuntu
Linux
sudo

The Claude Code CLI hits 'sudo: a terminal is required' when running root commands like apt or systemctl. Solving it safely without NOPASSWD, using timestamp_timeout + !tty_tickets.

Read more