What is a correct approach to gamma correction in OpenGL?

I’m currently reading about the topic of gamma correction and am a bit confused about what should I, as a game developer, do about it. There seem to be a few options here:

  1. Don’t do anything at all and let OS, driver, monitor and user figure it out. Doesn’t seem to be the right one to me, but I may be wrong.
  2. Explicitly request sRGB framebuffer and enable GL_FRAMEBUFFER_SRGB while doing rendering to display, leaving details to driver once again.
  3. Explicitly request sRGB framebuffer and manually apply gamma correction in shader, potentially exposing slider to user.

In addition to above, there’s an idea to “uncorrect” textures, which assumes that they were made in sRGB color space to begin with, which seems pretty dubious to me: wouldn’t good textures already be properly using RGB colorspace instead of sRGB? Even if they weren’t, why not correct them on disk instead of doing extra calculations in runtime?

So, what approach should I take?