DevNerves
A Mix task that creates Nerves projects with complete dev container setup, making Nerves development on Windows (and other platforms) smooth and hassle-free.
🎯 What is DevNerves?
DevNerves simplifies the tedious process of setting up a Nerves development environment, especially on Windows. It combines:
- ✅ Automated Nerves project creation
- ✅ Complete Docker dev container setup
- ✅ VS Code integration with proper extensions
- ✅ Interactive target device selection (no more typing numbers!)
- ✅ WiFi configuration built-in
- ✅ Comprehensive getting started guide
🚀 Features
- 🐳 Dev Container - Pre-configured Docker environment with all Nerves tools
- 🪟 Windows Friendly - Specifically designed to solve Windows development pain points
- 🎯 Multiple Targets - Support for Raspberry Pi (Zero, 3, 4, 5) and BeagleBone Black
- 📡 WiFi Setup - Optional WiFi configuration during project creation
- 🔧 VS Code Integration - Workspace file with proper ElixirLS configuration
📋 Prerequisites
Before installing DevNerves, ensure you have:
- Elixir 1.14 or later
- Mix (comes with Elixir)
- Docker Desktop installed and running
- VS Code with the "Dev Containers" extension
Windows Users
Enable host networking in Docker Desktop:
- Open Docker Desktop Settings
- Go to Resources → Network
- Check "Enable host networking"
- Click "Apply & Restart"
📦 Installation
Option 1: Install from Hex (Recommended)
mix archive.install hex dev_nervesOption 2: Install from Source
git clone https://github.com/yourusername/dev_nerves.git
cd dev_nerves
mix do deps.get, archive.build, archive.install🎮 Usage
Basic Usage
mix dev_nerves.new my_robotThis will:
- Launch an interactive setup wizard
- Ask you to select your target device
- Optionally configure WiFi
- Create a complete Nerves project with dev container setup
Advanced Usage
Skip the interactive prompts by providing options:
# Create project with specific target
mix dev_nerves.new my_robot --target rpi4
# Create with WiFi pre-configured
mix dev_nerves.new my_robot --target rpi4 --wifi-ssid "MyWiFi" --wifi-psk "password123"
# Short form
mix dev_nerves.new my_robot -t rpi3Options
--target,-t- Target device:rpi0,rpi3,rpi4,rpi5,bbb--wifi-ssid- WiFi network name (SSID)--wifi-psk- WiFi password
🎯 Supported Targets
DevNerves supports all officially supported Nerves targets:
| Device | Target Code | Description |
|---|---|---|
| Raspberry Pi A+, B, B+ | rpi | BCM2835, 512MB RAM |
| Raspberry Pi Zero/Zero W | rpi0 | BCM2835, 512MB RAM |
| Raspberry Pi Zero 2W / 3A (64-bit) | rpi0_2 | BCM2837, 512MB RAM |
| Raspberry Pi 2 Model B | rpi2 | BCM2836, 1GB RAM |
| Raspberry Pi 3 Model B/B+ | rpi3 | BCM2837, 1GB RAM |
| Raspberry Pi Zero 2W / 3A (32-bit) | rpi3a | BCM2837, 512MB RAM |
| Raspberry Pi 4 Model B | rpi4 | BCM2711, 2-8GB RAM |
| Raspberry Pi 5 | rpi5 | BCM2712, 4-8GB RAM |
| BeagleBone Black/Green/Wireless, PocketBeagle | bbb | AM335x, 512MB RAM |
| Generic x86_64 | x86_64 | x86_64 architecture |
| OSD32MP1 | osd32mp1 | STM32MP157, 512MB RAM |
| GRiSP 2 | grisp2 | i.MX 6UL, 512MB RAM |
| MangoPi MQ Pro | mangopi_mq_pro | Allwinner D1, 1GB RAM |
See Nerves Supported Targets for more details.
🛠️ What Gets Created
When you run mix dev_nerves.new my_robot, you get:
my_robot/
├── .devcontainer/
│ ├── devcontainer.json # VS Code dev container config
│ ├── docker-compose.yml # Docker Compose setup
│ └── Dockerfile # Container with all Nerves tools
├── .ssh/
│ └── .gitkeep # Mount point for SSH keys
├── config/ # Nerves configuration
├── lib/ # Your application code
├── test/ # Tests
├── .gitignore # Updated with dev container entries
├── FIRST_DEVICE.md # Complete getting started guide
├── my_robot.code-workspace # VS Code workspace file
└── mix.exs # Project configuration🚀 Quick Start After Creation
After creating your project:
# 1. Open in VS Code
cd my_robot
code my_robot.code-workspace
# 2. Reopen in Container
# Press F1 → "Dev Containers: Reopen in Container"
# Wait for container to build (5-10 minutes first time)
# 3. Inside the container terminal:
mix deps.get
mix firmware
# 4. Burn to SD card (from host machine with Balena Etcher)
# Or use fwup on Linux/Mac
# 5. Boot your device and connect!
ssh nerves.local
For detailed instructions, see the auto-generated FIRST_DEVICE.md in your project!
📖 Documentation
Each created project includes a comprehensive FIRST_DEVICE.md guide covering:
- ✅ Prerequisites and setup
- ✅ Opening the dev container
- ✅ Generating SSH keys
- ✅ Building firmware
- ✅ Burning to SD card (multiple methods)
- ✅ Finding your device on the network
- ✅ SSH connection
- ✅ OTA updates
- ✅ Troubleshooting common issues
- ✅ Next steps and resources
🎨 Interactive UI with Owl
DevNerves uses the powerful Owl library by Mykola Konyk for beautiful CLI interactions:
- Arrow key navigation - Use ↑↓ keys to select options, no typing numbers!
- Multi-select menus - Beautiful, intuitive selection interface
- Colored output - Clear visual feedback with semantic colors
- Secure password input - WiFi passwords hidden while typing
- Progress indicators - Real-time feedback on what's happening
Owl makes the CLI experience feel modern and professional, similar to tools like npm create or cargo new.
Example Interaction
╔═══════════════════════════════════════════════════╗
║ 🚀 Nerves Dev Container Setup ║
║ Easy Nerves development for Windows users ║
╚═══════════════════════════════════════════════════╝
📋 Configuration
Select your target device:
❯ Raspberry Pi 4 Model B - BCM2711, 2-8GB RAM
Raspberry Pi 3 Model B/B+ - BCM2837, 1GB RAM
Raspberry Pi Zero / Zero W - BCM2835, 512MB RAM
Raspberry Pi 5 - BCM2712, 4-8GB RAM
BeagleBone Black - AM335x, 512MB RAM
✓ Selected: rpi4🐛 Troubleshooting
"mix: command not found"
Install Elixir first: https://elixir-lang.org/install.html
"nerves_bootstrap not found"
Install Nerves bootstrap:
mix archive.install hex nerves_bootstrapDocker Container Won't Start
- Ensure Docker Desktop is running
- Check that virtualization is enabled in BIOS (Windows)
- Try rebuilding: F1 → "Dev Containers: Rebuild Container"
Can't Find Device on Network (Windows)
- Enable host networking in Docker Desktop settings
- Disable VPN temporarily
- Check firewall settings
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Development
# Clone the repository
git clone https://github.com/yourusername/dev_nerves.git
cd dev_nerves
# Install dependencies
mix deps.get
# Run tests
mix test
# Build archive locally
mix archive.build
# Install locally for testing
mix archive.install📚 Resources
📄 License
Apache License 2.0
🙏 Acknowledgments
- Inspired by Oooska's Elixir Nerves DevContainer
- Built with the excellent Owl library by Mykola Konyk for beautiful CLI interactions
Made with ❤️ for the Elixir and Nerves community