Использовать .env - нормальный вариант
В репозитории как-правило ложится .env.example из которого каждый разработчик может сделать себе .env и настроить переменные окружения под свою среду разработки
И дальше в PHP конфигах используете тот же
getenv()
Естественно часть переменных для конфигурации можно не выносить в .env если это какие-то константы, и оставить их просто в PHP
По поводу деплоя prod/dev то как-раз переменные окружения можно задать извне, если используется ci/cd и тот же docker.
Касательно кастинга типов: bool, null, empty string то легко можно написать свой хэлпер или подсмотреть у других
https://github.com/laravel/framework/blob/8.x/src/...