# gopher-to-gemini gopher-to-gemini is a reverse proxy written in Go that allows you to serve your Gemini capsule over Gopher as well. ## What is Gemini? I've realised that if you're viewing this page over Gopher you might not know what Gemini is (yet). Gemini is a protocol that's vaguely similar to Gopher, but has TLS and a different menu format. See the Gemini protocol's page for more information: => gopher://geminiprotocol.net/0/docs/faq.txt The Gemini protocol is unrelated to Google's "Gemini" AI and predates it. ## Try it out This page is natively in Gemini and is available on Gopher using the proxy, click the link below to try it (if you aren't already on Gopher). => gopher://nz.xeroxirc.net/1/gopher-to-gemini/ Try it Gemtext documents get translated into Gophertext on-the-fly. Assumptions are made about file types based on their extensions where possible to try and make using it less painful, so it may not be compatible with sites that do their own thing. Emojis are removed from the start of links because some Gopher clients don't work properly with UTF-8. Here are some example links to demonstrate its Gemtext conversion (if you are connected with Gopher): => image.png 🖼️ PNG image => image.jpg 📷 JPG image => text.txt 📜 Text document => input-no-config 💬 Input (no special configuration) => input 💬 Input (configured in `GOPHER_PROXY_INPUT_PATH_REGEX`) > This is an example of a blockquote in Gemtext. The quote is all on one line, but will be wrapped. ## Options You can add the following prefixes to URL paths to change the behaviour of the Gemtext translation: * `/_raw`: Returns the raw content, does not translate into Gemtext. Any other options are ignored. * `/_wrap=`: Changes how many characters text gets wrapped at, useful for mobile devices. * `/_encoding=`: Output encoding. Supports `utf-8` (default), `latin-1`, and `ascii`. => gopher://nz.xeroxirc.net/1/_wrap=40/gopher-to-gemini/ Example with _wrap=40 => gopher://nz.xeroxirc.net/0/_raw/gopher-to-gemini/ View the source of this page ## Source code => https://codeberg.org/luk3yx/gopher-to-gemini Git repository ## Usage It is configured with environment variables because I didn't feel like doing anything nicer. Example configuration: ``` GOPHER_PROXY_BIND_PROTO=tcp GOPHER_PROXY_BIND_ADDR=:7070 GOPHER_PROXY_PUBLIC_ADDR=mysite.example.com:7070 GOPHER_PROXY_TARGET=gemini://mysite.example.com ``` There's also an optional `GOPHER_PROXY_INPUT_PATH_REGEX` variable, any links that match this regex that would otherwise become menu links (type `1`) get converted to input links (type `7`) if they don't already have a query string. Can be used to skip showing a "Gemini server has requested input" page. Example: ``` GOPHER_PROXY_INPUT_PATH_REGEX=^/search$ ``` => / Homepage