I recently swapped my gaming machine over to Ubuntu from Windows, and one thing that cropped up quite quickly was that my graphics card could no longer turn off its fans when idle. It turns out that this is software-controlled, and the default fan control on the card itself doesn't support this. I found a couple of options around but ultimately didn't like how they were implemented, so I instead spent a Saturday writing my own for AMD cards:
How it's implemented
It's implemented in Rust so that it has no other dependencies once compiled, has a tiny footprint, and has been reliable in my own usage. I've tested it with my own card (a Sapphire RX 580) and it works well, but your mileage may vary and patches are welcome. When I get some time I'll work on actually providing packages/a pre-built binary.
It keeps the last n (by default 30) seconds of temperature readings and bases the fan speed off of the highest reading in that window, which helps smooth out the speed changes.