It's set by the Bitcoin protocol built-in to the software
It's not set in $ or any fiat, but set in satoshi/byte, the amont of storage your transaction will take on the blockchain, i.e. multiple input/output addresses vs single input/output address vs advanced features i.e. multisig
It's based...