I use KiCad, and the integrated ngSpice as a simulator. It's a bit of a nuisance to find suitable models and setup a simulation to the point where it's working. I simply have no interest in using any other program then KiCad for schematic entry, so for me it's either ngSpice or no simulator at all. Simple as that.
There are various reasons why it's so difficult to setup a simulation. It's partly because of (possible) copyright infringement of the models, which exempts them fro being distributed in KiCad itself. And there are also other reasons, such as encrypted models, or models which depend on proprietary extensions of a particular spice simulator.
In an ideal world all spice versions would use the same syntax for all models, or at least be able to each other's models. In reality there are different deliberate roadblocks. From attempts to hide the inner workings / IP in a model, to weaponizing the simulator to give one IC manufacturer an (unfair?) "advantage" over another IC manufacturer. I do not want to be a part of that, and that is a part of the reason I use FOSS software exclusively. It's far from perfect, but at least it's also free from deliberate sabotage.
When searching a bit around, you can find libraries with transistors and IC's that use generic models. If you can't find a model for a particular BJT or FET, then you can probably get "close enough" quite easy by tweaking a model of a similar device (Those models are often just a single line of text with parameters). IC manufacturers often have a download section for each IC they make and you can then sometimes choose between downloads of different spice models for different spice simulator varieties.