Don't know if this has been mentioned yet, but you can easily load your own shaders via script without overwriting default files.
$Shader::Enabled = 1;
$Shader::ShaderName = "myShader"; //will need myShader_vert.glsl and myShader_frag.glsl in shaders folder
$Shader::ShadowCount = 4; //how many shadow splits to use, valid range 1-4, scene is re-rendered for each split
$Shader::ShadowSize = 4096; //shadow map texture size
$Shader::DynamicShadows0 = 1; //render dynamic object shadows (vehicles, players, etc) at each shadow split
$Shader::DynamicShadows1 = 1; // example: setting DynamicShadows3 = 0 will turn off dynamic object shadows furthest away from the camera
$Shader::DynamicShadows2 = 1; // this can significantly improve performance in some cases
$Shader::DynamicShadows3 = 1;
//reinitialize shader stuff
initializeShaderAssets();
regenerateShadowMapFBOs();
flushVBOCache();
I haven't tested this but it's the way the default shaders work so it should be fine.
How do you specify the location of the shader files? Do they have to be in the shaders folder? In that case. you should allow us to write to it.