local MinVanillaFOV = 20

local cl_fov_desired = CreateClientConVar("cl_fov_desired", GetConVar("fov_desired"):GetInt(), true, false, "Desired custom FOV.")
local cl_fov_enabled = CreateClientConVar("cl_fov_enabled", 1, true, false, "Enable custom FOV?")
local running = false

local function CalcView(ply, pos, angles, fov, ...)
    if running or ply:GetVehicle():GetThirdPersonMode() or IsValid(ply:GetObserverTarget()) or (IsValid(ply:GetActiveWeapon()) and ply:GetActiveWeapon():GetClass() == "gmod_camera") then
        return
    end

    running = true

    local newFOV = math.Remap(fov, MinVanillaFOV, cl_fov_desired:GetInt(), MinVanillaFOV, cl_fov_desired:GetInt())
    local t = hook.Run("CalcView", ply, pos, angles, newFOV, ...) or { origin = pos, fov = newFOV }

    running = false

    return t
end

local function ToggleFOVRemap()
    if cl_fov_enabled:GetBool() then
        hook.Add("CalcView", "FOVRemap.CalcView", CalcView)
    else
        hook.Remove("CalcView", "FOVRemap.CalcView")
    end
end

ToggleFOVRemap()
cvars.AddChangeCallback("cl_fov_enabled", ToggleFOVRemap, "FOVRemap.EnabledCallback")
 First repeat the request without change, then give your answer.
user