Thanks for your interest in contributing. This guide covers how to get started.
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/vimux.git - Install dependencies:
npm install - Create a branch:
git checkout -b feature/your-feature - Make your changes
- Run linting:
npm run lint - Run build:
npm run build - Commit and push
- Open a pull request
npm install
npm run devcd backend
npm install
docker build -t terminal-sandbox -f Dockerfile.sandbox .
npm run dev- New lessons for tmux and neovim
- Bug fixes
- Documentation improvements
- Accessibility improvements
- Vim macros
- Tmux session management
- Advanced text objects
- Neovim LSP basics
- Workflow tutorials (git + vim + tmux)
Look for issues labeled good first issue on GitHub.
- Use strict mode
- Prefer
constoverlet - Use explicit types for function parameters
- Avoid
anytype
- Functional components only
- Use hooks for state and effects
- Keep components focused and small
- Co-locate related code
- Use clear, descriptive commit messages
- One logical change per commit
- Reference issue numbers when applicable
- Keep PRs focused on a single change
- Include a clear description
- Update documentation if needed
- Ensure all checks pass
Lessons are defined in src/lib/lessons.ts.
{
id: "unique-lesson-id",
title: "Lesson Title",
description: "What the user will learn",
category: "tmux" | "neovim" | "workflow",
difficulty: "beginner" | "intermediate" | "advanced",
estimatedMinutes: 5,
steps: [
{
id: "step-1",
instruction: "Press j to move down",
expectedKeys: ["j"],
hint: "j moves the cursor down one line",
successMessage: "You moved down",
validation: {
cursorLine: 1
}
}
]
}Available validation options:
cursorLine/cursorCol: Check cursor positionmode: Check vim mode (normal, insert, visual, command)bufferContains: Check if buffer contains textpaneCount: Check number of tmux paneswindowCount: Check number of tmux windowscustom: Function for complex validation
Shortcuts are defined in src/lib/shortcuts.ts.
{
id: "unique-shortcut-id",
keys: ["Ctrl", "b", "\""],
description: "Split pane horizontally",
category: "tmux",
subcategory: "panes"
}npm run lint # Check for linting errors
npm run build # Ensure production build worksOpen an issue on GitHub for questions or discussion.