Native Linux desktop control using a game controller.
GoStick converts a controller into a low-latency desktop input system with:
- analog mouse movement
- native scrolling
- keyboard navigation
- drag support
- precision mode
- Wayland-compatible uinput injection
Built in Go for Linux.
- Right analog stick controls cursor
- Radial acceleration curve
- Subpixel precision accumulation
- Precision mode using LT
- RB → Left Click
- LB → Right Click
- RT → Click + Hold Drag
- Left stick vertical → Vertical scroll
- Left stick horizontal → Horizontal scroll
- Native uinput wheel events
- D-pad simulates keyboard arrow keys
- Tap → single movement
- Hold → natural OS key repeat
- Uses
/dev/uinput - Works with Wayland
- No X11 dependency
- No external automation tools required
GoStick uses a modular architecture designed for:
- GUI support
- live configuration
- rebinding
- profiles
- multiple controller types
- future plugin systems
gostick/
├── cmd/
│ └── gostick/
│ └── main.go
│
├── internal/
│ ├── config/
│ │ ├── config.go
│ │ └── defaults.go
│ │
│ ├── controller/
│ │ ├── device.go
│ │ ├── events.go
│ │ └── mappings.go
│ │
│ ├── input/
│ │ ├── keyboard.go
│ │ ├── mouse.go
│ │ └── scroll.go
│ │
│ ├── runtime/
│ │ └── loop.go
│ │
│ └── state/
│ └── state.go
│
├── profiles/
│ └── default.json
│
├── ui/
│
├── go.mod
└── README.md