Gweithdy (Welsh for "Workshop" — a place for making things or training).
Gweithdy is an opinionated development environment. It bundles common toolchains for Python, Node.js, Rust and R, and uses
Visual Studio Code as the editor via a VS Code Tunnel so you can connect with a local VS Code installation (Remote Tunnels extension) or through vscode.dev.
Gweithdy does not include Conda — it prefers uv for creating and managing distinct, project-focused Python environments. To learn more about connecting via a tunnel, see the VS Code Remote Tunnels documentation.
- Automated Git setup
- Ubuntu LTS Base
- uv for managing Python environments
- Rust toolchain
- nvm for managing Node.js projects
- bun runtime
- Opinionated: includes toolchains for Python, Node.js, Rust and R, with VS Code Tunnel as the editor
- Essential CLI tools:
git,vim,nano,curl,wget,jq - Development tools:
tmux,htop,build-essential,glances - Fast utilities:
ripgrep,bat,fzf - GitHub CLI (
gh) for repository management - Database clients: PostgreSQL, Redis, MySQL
git clone ...
cd gweithdy
docker build -t ghcr.io/bencevans/gweithdy:latest .A prebuilt image is available on GitHub Container Registry:
docker pull ghcr.io/bencevans/gweithdy:latestRun the prebuilt image (example):
docker run --rm -it \
-e GIT_USER="Your Name" \
-e GIT_EMAIL="your.email@example.com" \
ghcr.io/bencevans/gweithdy:latest /bin/bashThe container runs code tunnel by default. Configure it with environment variables:
docker run -d \
-e GIT_USER="Your Name" \
-e GIT_EMAIL="your.email@example.com" \
-e CODE_TUNNEL_NAME="my-dev-machine" \
-e CODE_ACCEPT_LICENSE="true" \
ghcr.io/bencevans/gweithdy:latestTo run a bash shell instead:
docker run -it \
-e GIT_USER="Your Name" \
-e GIT_EMAIL="your.email@example.com" \
ghcr.io/bencevans/gweithdy:latest \
/bin/bashGit Configuration:
GIT_USER- Your Git username (optional)GIT_EMAIL- Your Git email address (optional)
VS Code Tunnel Configuration:
CODE_TUNNEL_NAME- Name for the tunnel (optional, defaults to machine/container hostname)CODE_ACCEPT_LICENSE- Set totrueto accept VS Code server license terms (optional)CODE_EXTENSIONS_DIR- Custom directory for VS Code extensions (optional)CODE_SERVER_DATA_DIR- Custom directory for VS Code CLI data (optional)
VS Code Extensions:
DEFAULT_VSCODE_EXTENSIONS- Image default list of extensions (set in the image). Current default:ms-python.python,REditorSupport.r,REditorSupport.r-syntax.VSCODE_EXTENSIONS- Comma-separated list of extensions to install at container start (overrides the default). Example:VSCODE_EXTENSIONS="ms-python.python,ms-toolsai.jupyter".
Example (override extensions at runtime):
docker run --rm -it \
-e VSCODE_EXTENSIONS="ms-python.python,ms-toolsai.jupyter" \
ghcr.io/bencevans/gweithdy:latest /bin/bashExamples to run the prebuilt image ghcr.io/bencevans/gweithdy:latest on Run:AI.
runai workspace submit gweithdy-tunnel \
-p my-project \
-i ghcr.io/bencevans/gweithdy:latest \
--environment-variable GIT_USER="Your Name" \
--environment-variable GIT_EMAIL="your.email@example.com" \
--environment-variable CODE_ACCEPT_LICENSE="true"Check the workspace logs for a link and authorisation code to establish the VS Code tunnel connection. Once connected, a link for the tunnel will be printed in the terminal or should be accessible in the VS Code Remote Explorer.
From the terminal you can run runai workspace describe gweithdy-tunnel and periodically check until the pod is running. Then run runai workspace logs gweithdy-tunnel, copy the given code and follow the link to authenticate with your GitHub account.
To use Jupyter notebooks with the Python environments in Gweithdy, you can set up a Jupyter kernel that points to the Python interpreter inside the container. Once connected to the container via VS Code Tunnel, you can create a new Python environment with uv:
uv new myenv && cd myenvThen, install the ipykernel package in that environment:
uv add --dev ipykernelOpen the folder in VS Code by running:
code .A new window / tab should open with the folder set as the workspace. Creating a new notebook by Ctrl+Shift+P → "Jupyter: Create New Notebook" should automatically detect the Python environment and prompt you to select it as the kernel. If it doesn't, you can manually select the kernel by clicking on the kernel name in the top right of the notebook editor and choosing the correct Python interpreter from the list.
Run the git configuration tests to verify that GIT_USER and GIT_EMAIL environment variables are properly applied.
bash tests/test_git_config.shFor more details, see tests/README.md.