Simple mod which does what the name says. I made this because most tactical shooters I play have it. Crouch speed configurable in MCM.
Incompatibility
Since I use Oldman's Immersive Overhaul, I know this mod doesn't work since you stand up the moment you start sprinting. Most other mods, including Speed Modifying mods, should work (unless proven wrong).
I fixed this by commenting out following four lines in their Controller.gd:
func MovementStates(delta):
[some code ...]
if gameData.sprintMode == 2 && Input.is_action_just_pressed("sprint"):
sprintToggle = !sprintToggle
#if Input.is_action_just_pressed("sprint"): (COMMENTED OUT LINE)
#Input.action_press("crouch") (COMMENTED OUT LINE)
#Input.action_release("crouch") (COMMENTED OUT LINE)
#return (COMMENTED OUT LINE)
gameData.isCrouching = true
gameData.isWalking = false
gameData.isRunning = false
currentSpeed = lerp(currentSpeed, crouchSpeed, delta * 2.5)
[more code...]