Skip to content

thomaschampagne/nvil

Repository files navigation

NVIL Logo

A portable, containerized terminal-first development environment built on Rhel Family.
Start coding immediately without configuring a new machine.

License

NVIL

Requirements

Tool Description Install
just Command runner brew install just / cargo install just / scoop install just
podman (or docker) Container runtime Install podman

Quick Start

cd /path/to/your-projects-workspace

# Download sample files
curl -fsSL https://raw.githubusercontent.com/thomaschampagne/nvil/main/.nvil.yaml -o .nvil.yaml
curl -fsSL https://raw.githubusercontent.com/thomaschampagne/nvil/main/justfile -o justfile
curl -fsSL https://raw.githubusercontent.com/thomaschampagne/nvil/main/.env.sample -o .env

# Edit .env with your info and preferences
vi .env

# Launch
just connect

You're in a fully configured dev environment. See Usage for details.

Features

  • Terminal-first workspace - ZSH, Zellij multiplexer, Helix/Neovim, Yazi file manager, and keyboard-driven tools out of the box
  • Pre-built images - No waiting for container builds; pull ghcr.io/thomaschampagne/nvil-core or nvil-full and go
  • Cross-project workspace - Mount your entire projects directory, not just one repo at a time
  • Extensible via "feats" - Add languages, runtimes, and tools via dnf, mise, or Homebrew
  • Editor agnostic - Works with any modal editor; connect your IDE via SSH to the container
  • 95+ pre-configured tools - Git, ripgrep, fzf, kubectl, trivy, lazygit, btop, and more

NVIL vs Dev Containers

Dev Containers NVIL
Scope Per-project (.devcontainer.json) Per-project and cross-project, and personal environment
Editor VS Code / JetBrains only Any modal editor, or connect your IDE via SSH
Base image Built from scratch each time Pre-built, layered on Fedora
Workflow Attach to container per project Access all projects from your mounted workspace

Architecture

┌─────────────────────────────────────────────────┐
│                   Your Host                     │
│  ┌─────────────┐     ┌──────────────────────┐   │
│  │  Projects   │     │   .nvil.yaml +       │   │
│  │  Directory  │ --> │   .nvil.env          │   │
│  └─────────────┘     └──────────────────────┘   │
│         ▲                      │                │
│         |                      ▼                │
│  ┌──────────────────────────────────────────┐   │
│  │       Container (Docker / Podman)        │   │
│  │  ┌────────────────────────────────────┐  │   │
│  │  │  Fedora Base (nvil-core)           │  │   │
│  │  │  ZSH · Zellij · Git · Core Tools   │  │   │
│  │  └────────────────────────────────────┘  │   │
│  │  ┌────────────────────────────────────┐  │   │
│  │  │  Flavor Layer (nvil-full)          │  │   │
│  │  │  Go · Node · Bun · k9s · Trivy ... │  │   │
│  │  └────────────────────────────────────┘  │   │
│  └──────────────────────────────────────────┘   │
└─────────────────────────────────────────────────┘
Component Description
core/ Base Fedora image with shell, git, editors
feats/ Installable tool modules (languages, runtimes, tools, ...)
flavors/ Dockerfiles that layer feats onto core
nvil.img.make.sh Build script for custom images

Usage

Environment Variables

Copy and edit the sample:

cp .env.sample .env
Variable Default Description
NVIL_CONTAINER_NAME nvil Container name and hostname
NVIL_IMAGE ghcr.io/thomaschampagne/nvil-full:latest Image to use
NVIL_WORKSPACE_HOST_PATH . Host path mounted as /home/${NVIL_USER}/workspace
NVIL_GIT_USER_NAME Smith Black Git user name
NVIL_GIT_USER_EMAIL smith.black@dev.local Git user email
NVIL_DEFAULT_EDITOR hx Default editor (hx, nvim, etc.)
TZ Europe/Paris Timezone

Setup

Create .nvil.yaml in your workspace directory (e.g., /home/user/Projects/.nvil.yaml):

Lifecycle Commands

# Start and connect (auto-starts podman machine if needed)
just connect

# Stop (preserves container state)
just stop

# Destroy container
just delete

Build Your Own Flavor

Use flavors/full.Dockerfile as a blueprint. Pick the feats you want, then build:

sh nvil.img.make.sh \
  --docker-file=./flavors/my-flavor.Dockerfile \
  --image=nvil-my-flavor:latest \
  --gh-token=$GITHUB_TOKEN

Add feats by copying install scripts into feats/<category>/<name>/ and referencing them in your Dockerfile:

COPY --parents --chown=${NVIL_USER}:${NVIL_USER} ./feats/tools/my-tool /nvil/.tmp/

Run sh nvil.img.make.sh --help for all options.

Available Tools in Full Flavor

NVIL ships with many tools across core and pickable categories. View the full list inside a running container:

nvil --list
Scope Category Name Version Description Licence Manager
core development gcc 16.1.1 GNU compiler collection GPL-3.0 dnf
core development git 2.55.0 Distributed version control system GPL-2.0 dnf
core development helix 25.07.1 Post-modern modal text editor MPL-2.0 mise
core development lazygit 0.62.2 Simple terminal UI for git commands MIT mise
core development nano 8.7.1 Text editor. An enhanced pico clone GPL-3.0 dnf
core development neovim 0.12.3 Ambitious Vim-fork focused on extensibility and agility Apache-2.0 mise
core development vim-enhanced 9.2.725 Vi IMproved, a programmer's text editor with enhanced features VIM dnf
core filesystem yazi 26.5.6 Blazing fast terminal file manager written in Rust MIT mise
core font jetbrains-mono-fonts 2.304 Monospaced font designed for developers by JetBrains OFL-1.1 dnf
core formatter dprint 0.55.1 Pluggable and configurable code formatting platform written in Rust MIT mise
core formatter shfmt 3.13.1 Shell parser, formatter, and interpreter BSD-3-Clause mise
core formatter taplo 0.10.0 TOML toolkit written in Rust MIT mise
core language-server bash-language-server 5.6.0 Bash language server using tree-sitter for parsing MIT npm
core language-server emmet-ls 0.4.2 Emmet support for LSP-compatible editors MIT npm
core language-server marksman 2026-02-08 Language Server Protocol for Markdown MIT mise
core language-server vscode-langservers-extracted 4.10.0 Extracted language servers from VSCode for HTML, CSS, and JSON MIT npm
core language-server vscode-xml 0.29.3 XML language server from VSCode EPL-2.0 mise
core language-server yaml-language-server 1.23.0 YAML language server with validation and completion MIT npm
core monitoring btop 1.4.7 Resource monitor that shows CPU, memory, disks, network, and processes Apache-2.0 dnf
core monitoring fastfetch 2.63.1 Display information about your operating system, software, and hardware MIT dnf
core monitoring strace 7.1 Trace system calls and signals LGPL-2.1 dnf
core network netcat 1.238 Utility for managing network connections GPL-2.0 dnf
core network tcpdump 4.99.6 Dump traffic on a network BSD-3-Clause dnf
core network traceroute 2.1.6 Trace the route IP packets take to a host GPL-2.0 dnf
core network wget2-wget 2.2.1 Non-interactive network downloader (wget2 variant) GPL-3.0 dnf
core package-manager npm 11.18.0 JavaScript and Node.js package manager Artistic-2.0 npm
core runtimes node 24.18.0 Open-source, cross-platform JavaScript runtime environment MIT mise
core security nmap 7.92 Network exploration tool and security/port scanner Nmap dnf
core security openssl 3.5.7 OpenSSL cryptographic toolkit Apache-2.0 dnf
core shell zellij 0.44.3 Pluggable terminal workspace, with terminal multiplexer as the base feature MIT mise
core shell zsh 5.9 Z SHell, a Bash-compatible command-line interpreter MIT dnf
core system dos2unix 7.5.5 Convert text between DOS, UNIX, and Mac formats BSD-2-Clause dnf
core system gzip 1.14 GNU compression utility GPL-3.0 dnf
core system jq 1.8.1 Lightweight and flexible command-line JSON processor MIT dnf
core system rsync 3.4.1 Fast incremental file transfer utility GPL-3.0 dnf
core system tree 2.2.1 Display directories as trees GPL-2.0 dnf
core system unzip 6.0 Extract, test, and list ZIP files Info-ZIP dnf
core system wl-clipboard 2.2.1^git20251124.e808203 Command-line copy/paste utilities for Wayland GPL-3.0 dnf
core system xclip 0.13 Command line interface to X selections (clipboard) GPL-2.0 dnf
core system xsel 1.2.1 Access X clipboard from the command line GPL-2.0 dnf
core system yq 4.47.1 Lightweight and portable command-line YAML processor MIT dnf
pick ai opencode 1.17.12 AI coding assistant for the terminal MIT mise
pick backups restic 0.19.0 Fast, secure, efficient backup program BSD-2-Clause mise
pick development delta 0.19.2 A syntax-highlighting pager for git, diff, grep, and blame output MIT mise
pick development hyperfine 1.20.0 A command-line benchmarking tool Apache-2.0 mise
pick development just 1.55.1 Just a command runner CC0-1.0 mise
pick development miniserve 0.35.0 For when you really just want to serve some files over HTTP right now MIT mise
pick development serpl 0.3.6 A simple terminal UI for search and replace, ala VS Code MIT mise
pick development tokei 14.0.0 A program that displays statistics about your code Apache-2.0 brew
pick development tuicr 0.18.0 Terminal UI for code review with vim keybindings and GitHub PR integration MIT mise
pick devops helm 4.2.2 The package manager for Kubernetes Apache-2.0 mise
pick devops k9s 0.51.0 Kubernetes CLI to manage your clusters Apache-2.0 mise
pick devops kubectl 1.36.2 Kubernetes command-line tool Apache-2.0 mise
pick filesystem 7zip 26.02 File archiver with a high compression ratio LGPL-2.1 mise
pick filesystem bat 0.26.1 A cat clone with syntax highlighting and Git integration Apache-2.0 mise
pick filesystem dua 2.37.1 A tool to conveniently learn about the disk usage of directories, fast MIT mise
pick filesystem duf 0.9.1 Disk Usage/Free Utility - a better df alternative MIT mise
pick filesystem eza 0.23.4 A modern replacement for ls EUPL-1.2 mise
pick filesystem jdupes 1.31.1 A powerful duplicate file finder and an enhanced fork of fdupes MIT brew
pick filesystem rip2 0.9.6 A safer, ergonomic alternative to rm GPL-3.0 mise
pick filesystem tre 0.4.0 A modern alternative to the tree command MIT mise
pick formatter prettier 3.9.4 Opinionated code formatter for JavaScript, CSS, JSON, GraphQL, Markdown, YAML MIT npm
pick language go 1.26.4 Open source programming language to build simple/reliable/efficient software BSD-3-Clause mise
pick language typescript 6.0.3 Typed superset of JavaScript that compiles to plain JavaScript Apache-2.0 npm
pick language-server dockerfile-language-server-nodejs 0.15.0 Dockerfile language server for syntax highlighting and validation MIT npm
pick language-server typescript-language-server 5.3.0 TypeScript/JavaScript language server using tsserver MIT npm
pick monitoring bandwhich 0.23.1 Terminal bandwidth utilization tool MIT mise
pick monitoring procs 0.14.12 A modern replacement for ps written in Rust MIT mise
pick network doggo 1.2.0 Modern DNS client for humans GPL-3.0 mise
pick network gping gping-v1.20.4 Ping, but with a graph MIT mise
pick network xh 0.26.1 Friendly and fast tool for sending HTTP requests MIT mise
pick productivity tlrc 1.13.1 Official tldr client written in Rust MIT mise
pick productivity xan 0.59.0 Terminal multiplexer with batteries included Unlicense mise
pick runtimes bun 1.3.14 Fast all-in-one JavaScript runtime and toolkit MIT mise
pick search fd 10.4.2 A simple, fast and user-friendly alternative to find Apache-2.0 mise
pick search fzf 0.73.1 A command-line fuzzy finder MIT mise
pick search navi 2.24.0 An interactive cheatsheet tool for the command-line Apache-2.0 mise
pick search ripgrep 15.1.0 Recursively searches directories for a regex pattern while respecting your gitignore Unlicense mise
pick search sd 1.1.0 Intuitive find and replace CLI (sed alternative) MIT mise
pick security age 1.3.1 Simple, modern, and secure encryption tool BSD-3-Clause mise
pick security grype 0.115.0 Vulnerability scanner for container images and filesystems Apache-2.0 mise
pick security sops 3.13.2 Simple and flexible tool for managing secrets MPL-2.0 mise
pick security syft 1.46.0 Generate Software Bill of Materials (SBOM) from container images and filesystems Apache-2.0 mise
pick security trivy 0.72.0 Find and fix container misconfigurations, IaC issues, and vulnerabilities Apache-2.0 mise
pick security trufflehog 3.95.7 Find and verify credentials in your codebase AGPL-3.0 mise
pick shell agg 1.9.0 Asciicast to GIF converter GPL-3.0 mise
pick shell asciinema 3.2.1 Terminal session recorder, streamer and player GPL-3.0 mise
pick shell chezmoi 2.70.5 Manage your dotfiles across multiple diverse machines, securely MIT mise
pick shell glow 2.1.2 Render markdown on the CLI, with pizzazz MIT mise
pick shell grex 1.4.6 A command-line tool for generating regular expressions from test cases Apache-2.0 mise
pick shell lnav 0.14.0 Log file navigator with format detection and color-coded output BSD-2-Clause mise
pick shell oh-my-posh 29.19.1 The most customisable and low-latency cross platform/shell prompt renderer MIT mise
pick shell watchexec 2.5.1 Execute commands when files change Apache-2.0 mise
pick shell zoxide 0.9.9 A smarter cd command. Supports all major shells MIT mise
pick system hexyl 0.17.0 A command-line hex viewer Apache-2.0 mise
productivity productivity pomo 1.2.1 Terminal Pomodoro timer with TUI, ASCII art, notifications, statistics MIT mise

Total: 98 packages

Project Structure

├── core/                   # Base image: bootstrap, entrypoint, core tools
├── feats/                  # Installable feature modules
│   ├── tools/              # CLI utilities
│   ├── languages/          # Language support (LSP, formatters)
│   ├── runtimes/           # Runtimes (Node, Bun, etc.)
│   └── frameworks/         # Framework-specific tooling
├── flavors/                # Dockerfiles that compose core + feats
├── .github/workflows/      # CI for building and publishing images
├── justfile                # Task runner for lifecycle commands
├── nvil.img.make.sh        # Image build script
├── .env.sample             # Environment template
├── .nvil.yaml              # Compose template (create in your workspace)
└── .dev/                   # Local dev compose files

Contributing

Contributions are welcome. To add a new tool:

  1. Create an install script under feats/<category>/<tool-name>/
  2. Add a metadata.json with tool info
  3. Reference it in a flavor Dockerfile
  4. Test by building the image

See BACKLOG.md for planned work.

License

MIT. See LICENSE for details.

About

A portable RHEL Based terminal-driven development forge

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors