A terminal-based game teaching vim navigation and network engineering skills.
You're hired as the infrastructure engineer at DataFlow Inc. Navigate config files using vim keys to build and secure the company's network—from startup to enterprise scale.
# Clone the repository
git clone https://github.com/edd426/vim_network_game.git
cd vim_network_game
# Run the game (uv handles everything automatically)
uv run python main.pyThat's it! uv automatically creates a virtual environment, installs Python 3.12, and installs dependencies.
If you don't have uv installed:
curl -LsSf https://astral.sh/uv/install.sh | shpip install -r requirements.txt
python main.py- Terminal with curses support (80x24 minimum)
- Python 3.9+ (uv installs this automatically)
+--------------------------------------------------+
| MISSION BRIEFING |
| "Fix the DNS record before the site goes down!" |
+--------------------------------------------------+
| CONFIG EDITOR |
| admin IN A 192.168.1.1 ; WRONG! |
| www IN CNAME @ |
| _ |
+--------------------------------------------------+
| Keystrokes: 5/8 | Keys: h j k l w b | Score: 0 |
+--------------------------------------------------+
- Receive mission briefing with networking task
- Navigate config using vim keys
- Reach objective (cursor position)
- Score based on keystrokes + time
hjkl- Basic movement (left, down, up, right)wb- Word forward/backward
Enter/Space- Select menu itemq- Quit to menur- Restart level
- Tutorial: Learn
hjklby navigating server status - Word Jump: Use
w/bto navigate faster - DNS Fix: Find misconfigured A record
- Subnet Check: Identify wrong CIDR prefix
- Firewall Scan: Navigate to suspicious SSH rule
- Beat par keystrokes for 3 stars
- Time bonus for fast completion
- Progress saves automatically
Create YAML files in content/levels/:
id: "my_level"
title: "Custom Level"
chapter: "Chapter X"
narrative:
briefing: "Your mission..."
success: "Well done!"
content: |
# Your config content here
objectives:
- type: cursor_on_text
contains: "target_text"
scoring:
par_keystrokes: 10
par_time: 30
unlocks:
- w
- bMIT