+ + +
← BACK TO BLOG
2026-04-14 / 4 min read | AILinuxHardwareNixOS

I Set Up a Racing Sim on Linux Instead of Paying for Driving Lessons

Driving lessons are £35 an hour. A Logitech G923 is way less. Claude handled the entire NixOS setup, Wine bugs and all, and I was doing laps the same evening.

So driving lessons in the UK are mad expensive right. We're talking £30-40 per hour and you need loads of them before you're even close to ready for a test. And I had this thought, what if I could build some muscle memory at home first? Not replace actual lessons but get the basics down so I'm not wasting paid hours learning where the clutch bites.

I already had a NixOS machine sitting there. I just needed a wheel, pedals and something that would actually run on Linux. And this is where most people give up because sim racing is completely Windows-dominated.

The hardware

I went with a Logitech G923 Racing Wheel (the PlayStation/PC version). Full three-pedal set with gas, brake and clutch. The brake has this heavy progressive spring which actually feels realistic. I'm running it on my ASUS TUF laptop with an RTX 3050 and a Samsung 1440p monitor over HDMI. Not exactly a high-end sim rig but it does the job.

For the game I went with City Car Driving on Steam. It's specifically designed for learning traffic rules, city driving and exam scenarios which is exactly what I needed. It's not a racing game, it's a driving practice tool.

What Claude actually did

This is the part that still blows my mind. I told Claude what I had and what I wanted to achieve. And it didn't give me a list of instructions to follow. It went into my NixOS config and did everything itself.

First it installed the new-lg4ff kernel driver for force feedback support. Added it straight to my boot.extraModulePackages in my NixOS config and rebuilt the system. Force feedback was working immediately after that.

Then it got City Car Driving running through Proton. It figured out that I needed GE-Proton (version 10-34) for proper Wayland support, set up the right launch options so the game renders on my external monitor instead of the laptop screen using PROTON_ENABLE_WAYLAND=1 PROTON_WAYLAND_MONITOR=HDMI-A-1, and configured NVIDIA offloading so the RTX 3050 handles the rendering instead of the integrated Intel GPU.

But here's where it gets really impressive. There was a Wine bug where the G923's PlayStation variant has a different USB product ID (0xC266) that Wine's bus_sdl.c doesn't recognise properly. This caused the brake pedal axis to map incorrectly. Instead of showing up as axis:rz like it should, it was coming through as axis:rx. Claude traced this all the way down to the Wine source, figured out the mapping issue and then configured the in-game bindings to match the actual axis assignments.

It also set up the full button and axis mapping for everything. Steering, gas, brake, clutch, indicators, headlights, engine start, gear shifts, handbrake. Every single control mapped and working.

The technical details

For anyone running a similar setup, here's what the final config looks like. The kernel module goes in your NixOS hardware config:

boot.extraModulePackages = [ config.boot.kernelPackages.new-lg4ff ];

The Steam launch options handle Wayland, monitor selection and GPU offloading:

PROTON_ENABLE_WAYLAND=1 PROTON_WAYLAND_MONITOR=HDMI-A-1 DXVK_ASYNC=1 __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia %command%

No udev rules needed because the generic HID support plus Steam's input rules are enough. The key thing is getting the pedal axes right. Gas and brake both need FullAxisMode=true and Inversion=true in the game's profile database. And whatever you do, don't add a G923 alias XML file because it strips the axis modifiers on every launch and breaks everything.

Does it actually save money?

A driving instructor charges roughly £35 an hour. The wheel cost significantly less than that per hour of practice I've put into it. And I know the maths isn't exactly one to one right, you can't learn to check mirrors and deal with real traffic in a sim. But the spatial awareness, the pedal coordination and the steering input genuinely does transfer. City Car Driving specifically focuses on traffic rules and real driving scenarios which makes it way more useful than a racing game for this purpose. I'm building muscle memory for clutch control and road positioning in a zero-risk environment where I can just reset and try again.

Why this matters

The whole setup from plugging in the wheel to doing laps was handled by Claude in one session. It installed the kernel driver, configured Proton, traced a Wine bug with the pedal mapping, set up GPU offloading, configured the monitor output and mapped every single control. I didn't read a single forum post or edit a config file manually.

That's what I mean when I say AI is a force multiplier. All the knowledge to set this up existed somewhere out there scattered across forum posts and kernel docs and Wine bug trackers. Claude took all of that, figured out what applied to my exact setup and just did it. And I spent my evening practising driving instead of debugging config files. Which is kind of the whole point.