gopher://gopher.someodd.zip:70/1/catalog/someodd/services/ServicesHosted services I run: IRC, XMPP, CS:1.6, museum, archives, QR campaign, git-clone gopher hosting.2026-06-15T00:00:00Zgopher.someodd.zipgopher://gopher.someodd.zip:70/0/someodd/services/irc.mdirc.md2026-06-15T00:00:00Z2026-06-15T00:00:00Z=============== IRC.SOMEODD.ZIP ===============gopher://gopher.someodd.zip:70/0/someodd/services/announcements/main-is-now-voice-only.md#main went voice-only: a post-mortem2026-06-15T00:00:00Z2026-06-15T00:00:00ZPost-mortem on a persistent ban evader in #main: why IRC bans never... +V
`+m` makes it voice-only; `+V` auto-voices that person on every join, so
a regular never has to ask twice. (For an unregistered regular you can
match a hostmask instead of an account.)
Pin the state so it survives restarts, with ChanServ:
/msg ChanServ SET #main MLOCK +mnt
/msg ChanServ SET #main GUARD ON
/msg ChanServ SET #main KEEPTOPIC ON
/msg ChanServ SET #main TOPICLOCK ON
MLOCK locks the modes so nobody can quietly drop `+m`; GUARD keeps
ChanServ sitting in the channel so it never empties out; the topic stays
put.
Make #main the only room. In ngircd.conf, predefine the channel and set,
under [Options]:
AllowedChannelTypes =
(empty), then rehash. Ordinary users can no longer spin up channels.
Point people at registration, so their voice is durable:
/msg NickServ REGISTER
/msg NickServ IDENTIFY
An identified nick gets account-based voice that follows them across
addresses -- no hostmask juggling, nothing to re-ask.
## The gopher angle
The gopher-to-IRC bridge (the girc applet) kept working through all of
this. The trick under `+m`: it connects over loopback, **waits until
ChanServ grants it a voice, and only then speaks** -- otherwise its line
would be sent in the same instant it joined, before the voice landed,
and dropped. It posts under its own throwaway handle, not as the channel
bot, so a hello from a passing gopher visitor still lands and is still
attributable.
## Impact
- Regulars: barely noticed.
- Evader: neutralized -- present but silent, with no way to earn a voice.
- Tradeoff: a brand-new visitor has to ask for a voice before their
first word.
## Lessons
I would rather leave a small gap than risk silencing someone who belongs
here. The defenses lean permissive on purpose, and the evader gets
handled directly when they turn up -- better than a wall so tall it locks
out my own people.
## Status
Resolved. #main is usable, the regulars are talking, and the evader is
shouting into a void.
Connection details and rules: /someodd/services/irc.md
]]>gopher://gopher.someodd.zip:70/1/someodd/services/announcements/sftp-gopher-hostingHow I Host My Friends on Gopher2026-05-17T00:00:00Z2026-05-17T00:00:00ZSFTP-based per-friend gopher hosting on someodd.zip. Per-user chroo...SFTP-based per-friend gopher hosting on someodd.zip. Per-user chroot at /srv/sftp/<u>/ bind-mounted from /var/gopher/hosted/<u>/, so the gopher daemon (venusia) keeps reading and writing while friends only ever see their own hole. Bartleby auto-regenerates the friend's catalog at SFTP disconnect via a PAM session_close hook. Includes the bootstrap script.gopher://gopher.someodd.zip:70/0/someodd/services/README.txtREADME.txt2026-01-23T00:00:00Z2026-01-23T00:00:00ZInformation about services I provide (self-host!), like IRC, XMPP, ...gopher://gopher.someodd.zip:70/0/someodd/services/counter-strike.mdcounter-strike.md2025-09-30T00:00:00Z2025-09-30T00:00:00Z# someodd's Counter Strike 1.6 Servergopher://gopher.someodd.zip:70/0/someodd/services/mumble.mdmumble.md2025-09-30T00:00:00Z2025-09-30T00:00:00Z# someodd Mumblegopher://gopher.someodd.zip:70/0/someodd/services/whisper-radio.mdwhisper-radio.md2025-09-30T00:00:00Z2025-09-30T00:00:00Zhttps://radio.someodd.zip/gopher://gopher.someodd.zip:70/0/someodd/services/xmpp.mdxmpp.md2025-09-30T00:00:00Z2025-09-30T00:00:00Z# someodd's XMPP servergopher://gopher.someodd.zip:70/1/someodd/services/announcements/announcing-counter-strike-16-weekly-eventCounter-Strike 1.6 Server + Weekly Event2025-04-01T00:00:00Z2025-04-01T00:00:00ZAnnounces the author's Counter-Strike 1.6 server and a recurring we...Announces the author's Counter-Strike 1.6 server and a recurring weekly event. Accompanied by Chinese-language flyer artwork promoting the game night.