Devcontainer voor dagelijks ontwikkelwerk — AI-first, reproduceerbaar, direct bruikbaar.
- Base: Debian bookworm-slim,
amd64+arm64 - Shell: bash, starship, zoxide, eza, fzf, bat, fd, ripgrep, jq
- Editor: Neovim + LazyVim
- Git: lazygit, gh, glab, delta
- Data: csvlens
- AI: claude, opencode, entire, org-skills via
cedanl/.github— met--dangerously-skip-permissions - Python: uv
- Node: LTS
- Cloud: az, azcopy, azd, aws, kubectl, helm, flux, sops
- Media & automatisering: ffmpeg, Playwright headless Chromium
- Open in VS Code →
Dev Containers: Reopen in Container - Wacht op post-create
- Voer
onboarduit — begeleide authenticatie (gh, opencode, claude) + git-identiteit - Aan de slag met
nvim .ofclaude
Claude Code en OpenCode starten met
--dangerously-skip-permissions(ingebakken als shell-alias). Git gebruikt per user een expliciete identiteit (ingesteld dooronboard) enuser.useConfigOnly true.
De container bevat ffmpeg en de systeembibliotheken voor Playwright headless Chromium, zodat je zonder displayserver screenshots en animaties kunt genereren.
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://example.com")
page.screenshot(path="screenshot.png", full_page=True)
browser.close()Installeer de Playwright-bibliotheek en de Chromium-binary:
uv add playwright
playwright install chromiumDe vereiste systeembibliotheken zijn al ingebakken in het image —
playwright install-depsis niet nodig.
page.pdf(path="rapport.pdf", format="A4")# Reeks PNG-screenshots → geanimeerde GIF
ffmpeg -framerate 2 -pattern_type glob -i 'screenshot_*.png' \
-vf "scale=1280:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" \
demo.gifimport subprocess
from pathlib import Path
from playwright.sync_api import sync_playwright
out = Path("frames")
out.mkdir(exist_ok=True)
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page(viewport={"width": 1280, "height": 720})
page.goto("https://example.com")
for i in range(10):
page.screenshot(path=out / f"frame_{i:03d}.png")
page.evaluate("window.scrollBy(0, 200)")
browser.close()
subprocess.run([
"ffmpeg", "-y", "-framerate", "5",
"-pattern_type", "glob", "-i", "frames/frame_*.png",
"-vf", "scale=1280:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse",
"demo.gif"
], check=True)# MP4 van een reeks frames
ffmpeg -framerate 24 -pattern_type glob -i 'frames/frame_*.png' \
-c:v libx264 -pix_fmt yuv420p output.mp4Gepubliceerd op ghcr.io/cedanl/dev-dots:latest — gebouwd voor amd64 en arm64.
Uitgebreide documentatie en sneltoetsen: zie de projectdocumentatie.