# WireGuard Go Development Environment This repository includes a comprehensive Nix flake development environment with all the tools needed for efficient Go development. ## ๐Ÿš€ Quick Start ### Prerequisites - [Nix](https://nixos.org/download.html) with flakes enabled - [direnv](https://direnv.net/) (optional but recommended) ### Setup 1. **Clone and enter the repository:** ```bash git clone cd wireguard-go ``` 2. **Option A: Using direnv (Recommended)** ```bash direnv allow ``` This will automatically load the development environment when you enter the directory. 3. **Option B: Manual activation** ```bash nix develop ``` ## ๐Ÿ”ง Included Tools ### Core Go Tools - **Go 1.23.1** - Matching the project's go.mod - **gopls** - Official Go Language Server for LSP support ### Code Quality - **golangci-lint** - Comprehensive linter with 30+ linters enabled - **staticcheck** - Advanced static analysis - **gosec** - Security vulnerability scanner - **govulncheck** - Official Go vulnerability scanner - **gofumpt** - Stricter version of gofmt ### Development Tools - **delve** - Go debugger - **air** - Live reload for development - **gotests** - Automatic test generation - **gomodifytags** - Struct tag manipulation - **impl** - Interface implementation generator - **gotestsum** - Enhanced test output ### System Tools - **wireguard-tools** - WireGuard utilities - **iproute2** - Network configuration tools - **iptables** - Firewall utilities ## ๐ŸŽฏ Quick Commands ### Development Workflow ```bash # Install/update dependencies go mod tidy # Run comprehensive linting golangci-lint run # Check for security vulnerabilities govulncheck ./... # Run tests with coverage go test -race -coverprofile=coverage.out ./... # Generate tests for a package gotests -all -w ./device # Start live reload development server air # Format code with stricter rules gofumpt -w . ``` ### Building and Testing ```bash # Build the project go build . # Run all tests go test ./... # Run tests with race detection go test -race ./... # Benchmark tests go test -bench=. ./... # Generate coverage report go test -coverprofile=coverage.out ./... && go tool cover -html=coverage.out ``` ### Debugging ```bash # Start delve debugger dlv debug # Debug a specific test dlv test ./device ``` ## ๐Ÿ“ Editor Integration ### VS Code A `.vscode/settings.json` is included with optimized settings for Go development: - Automatic formatting with gofumpt - Integrated linting with golangci-lint - Proper LSP configuration - Optimized file watching and exclusions ### Other Editors For vim/neovim, emacs, or other editors that support LSP: - Use `gopls` as the language server - Point formatters to use `gofumpt` instead of `gofmt` - Configure linting to use `golangci-lint` ## ๐Ÿ” Code Quality Configuration ### Linting The included `.golangci.yml` enables 30+ linters with sensible defaults: - Security checks (gosec, G-prefixed rules) - Performance optimizations (prealloc, ineffassign) - Style consistency (gofumpt, goimports) - Bug prevention (errcheck, staticcheck) ### Pre-commit Hooks (Optional) Consider setting up pre-commit hooks: ```bash # Create .git/hooks/pre-commit #!/bin/bash set -e golangci-lint run go test ./... govulncheck ./... ``` ## ๐ŸŒ Environment Variables The flake automatically sets up: - `GOPATH="$PWD/.go"` - `GOBIN="$PWD/.go/bin"` - `GOCACHE="$PWD/.gocache"` - `GO111MODULE=on` - `CGO_ENABLED=1` - `WG_COLOR_MODE=always` ## ๐Ÿงช Testing ### Running Tests ```bash # All tests go test ./... # With race detection go test -race ./... # Verbose output go test -v ./... # Specific package go test ./device # With coverage go test -coverprofile=coverage.out ./... ``` ### Test Generation ```bash # Generate tests for all functions in a package gotests -all -w ./device # Generate tests for specific functions gotests -only FunctionName -w ./device ``` ## ๐Ÿ”’ Security ### Vulnerability Scanning ```bash # Scan for known vulnerabilities govulncheck ./... # Security-focused linting gosec ./... ``` ### WireGuard-Specific Security The environment includes networking tools for testing: - WireGuard tools for protocol testing - Network namespace utilities - Traffic analysis tools ## ๐Ÿ“ฆ Building Packages ### Development Build ```bash go build . ``` ### Optimized Build ```bash go build -ldflags="-w -s" . ``` ### Using Nix to Build ```bash # Build using the included Nix package nix build # The binary will be in ./result/bin/ ``` ## ๐Ÿ› Troubleshooting ### Common Issues 1. **"command not found" errors** - Ensure you're in the flake environment: `nix develop` - Or allow direnv: `direnv allow` 2. **Go module issues** - Clean module cache: `go clean -modcache` - Verify modules: `go mod verify` 3. **LSP not working** - Restart your editor - Check gopls is available: `which gopls` - Verify Go version: `go version` ### Performance Tips - Use `.gocache` for faster builds (already configured) - Exclude build artifacts from file watchers - Use `gotestsum` for faster test feedback ## ๐Ÿ“š Additional Resources - [Go Documentation](https://golang.org/doc/) - [WireGuard Protocol](https://www.wireguard.com/protocol/) - [golangci-lint Documentation](https://golangci-lint.run/) - [Delve Debugger](https://github.com/go-delve/delve)