{"id":18446864,"url":"https://github.com/nmeum/hii","last_synced_at":"2025-06-11T04:07:56.644Z","repository":{"id":57561291,"uuid":"159716733","full_name":"nmeum/hii","owner":"nmeum","description":"A file-based IRC client inspired by ii","archived":false,"fork":false,"pushed_at":"2024-05-19T16:39:52.000Z","size":210,"stargazers_count":37,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-23T03:31:56.416Z","etag":null,"topics":["ii","irc","irc-client","suckless"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nmeum.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-11-29T19:27:10.000Z","updated_at":"2025-02-02T06:39:09.000Z","dependencies_parsed_at":"2024-05-19T17:42:08.050Z","dependency_job_id":"6d81114e-df8c-426d-8158-323a8273e150","html_url":"https://github.com/nmeum/hii","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmeum%2Fhii","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmeum%2Fhii/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmeum%2Fhii/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nmeum%2Fhii/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nmeum","download_url":"https://codeload.github.com/nmeum/hii/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247755410,"owners_count":20990617,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ii","irc","irc-client","suckless"],"created_at":"2024-11-06T07:11:07.030Z","updated_at":"2025-04-08T00:31:57.839Z","avatar_url":"https://github.com/nmeum.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# hii\n\nA file-based IRC client inspired by [ii(1)][ii homepage].\n\n## Motivation\n\nI originally only intended to write a frontend for ii instead of\ncompletely rewriting it from scratch. However, while working on the\nfrontend I noticed that I couldn't implement certain features in the\nfrontend without changes to the backend (ii). I briefly considered\npatching ii but ultimately decided for a rewrite. During the rewrite,\nvarious features have been implemented that are not supported by ii\n(e.g. various IRCv3 features, builtin TLS and IPv6 support, et cetera).\n\n## Status\n\nI currently consider hii feature complete and use it myself daily in\ncombination with [insomnia][insomnia github] and a per-server\n[runit][runit homepage] [user service][runit user] for automatically\nstarting and supervising hii processes.\n\n## Features\n\nNew features (compared to ii):\n\n* Memory safety\n* A proper IRC protocol implementation through [girc][girc repo]\n* Support for automatically joining channels on startup\n* Support for [IRCv3.2 monitoring][ircv3.2 monitor]\n* Support for a per-channel nick list using a UNIX domain socket\n* Support for recording messages mentioning the users\n* Support for authentication using TLS client certificates (CertFP)\n    * [Most][libera certfp] [IRC][oftc certfp] [networks][hackint certfp] support CertFP\n    * This can be used in conjunction with the [SASL EXTERNAL][sasl mechanisms] mechanism\n* Built-in TLS support\n* Built-in IPv6 support\n\nFeatures intentionally not implemented:\n\n* Automatic authorization using the [PASS command][password message] is\n  not implemented (ii `-k` flag).\n* Shortcut commands, e.g. `/j`. If you need them write yourself a shell\n  script for mapping shortcut commands to real commands.\n\nWhile hii has more features than ii it is still supposed to have a limit\nfeature set and shouldn't [\"expand until it can read mail\"][jwz's law].\n\n### Compatibility with ii\n\nBackwards compatibility with ii wasn't a goal. While the directory\nstructure is mostly backwards compatible everything else is pretty much\ndifferent. This is the case because proper backwards compatibility would\nhave been a lot of work and I personally didn't need it.\n\n## Installation\n\nThe program can be installed either using `go install` or `make`.\n\n### go install\n\nTo install to the program using `go install` run the following command:\n\n\t$ go install github.com/nmeum/hii@latest\n\nNote that this will not install additional documentation files, e.g. man pages.\n\n### make\n\nTo install to the program using `make` run the following commands:\n\n\t$ git clone https://github.com/nmeum/hii.git\n\t$ cd hii\n\t$ make \u0026\u0026 make install\n\nThis will also install documentation files to the correct location and\nmay thus be preferable when packaging this software for a distribution.\n\n## FAQ\n\n**Q:** Sockets cannot be used with standard utilities such as `grep(1)`.\nWhy are nick names served using a unix domain socket anyhow?\n\n**A:** Several ways of implementing a nick list have been considered.\nUsing a regular file has various obvious disadvantages. For instance,\nthe file would need to be truncated every time the nick list changes,\nwhich causes a lot of file system operation. Using a FUSE for serving\nthe nick list was also briefly considered, however, while this would\nallow interaction with standard utilities it would require linking\nagainst FUSE and would complicate things quite a bit. Serving nicks\nusing a unix domain socket seemed to be a reasonable compromise.\n\n**Q:** Why are mentions recorded in a separate file? Can't this be\nimplemented using inotify, kqueue, … in the frontend?\n\n**A:** While this might certainly be possible it would complicate the\nfrontend code quite a bit. Implementing this in the backend was fairly\neasy and only required a few changes. Additionally, neither kqueue nor\ninotify are mandated by POSIX.\n\n**Q:** Can feature X/Y/Z be added to hii?\n\n**A:** No.\n\n## License\n\nThis program is free software: you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation, either version 3 of the License, or (at your\noption) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\nPublic License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program. If not, see \u003chttp://www.gnu.org/licenses/\u003e.\n\n[ii homepage]: https://tools.suckless.org/ii/\n[girc repo]: https://github.com/lrstanley/girc\n[password message]: https://tools.ietf.org/html/rfc1459#section-4.1.1\n[libera certfp]: https://libera.chat/guides/certfp\n[oftc certfp]: https://www.oftc.net/NickServ/CertFP/\n[hackint certfp]: https://www.hackint.org/services#NickServ\n[jwz's law]: https://en.wikipedia.org/wiki/Zawinski's_law_of_software_envelopment#Principles\n[ircv3.2 monitor]: https://ircv3.net/specs/core/monitor-3.2.html\n[insomnia github]: https://github.com/nmeum/insomnia\n[runit homepage]: http://smarden.org/runit/\n[runit user]: http://smarden.org/runit/faq.html#userservices\n[sasl mechanisms]: https://ircv3.net/docs/sasl-mechs\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnmeum%2Fhii","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnmeum%2Fhii","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnmeum%2Fhii/lists"}