- Notifications
You must be signed in to change notification settings - Fork2
A file-based IRC client inspired by ii
License
nmeum/hii
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A file-based IRC client inspired byii(1).
I originally only intended to write a frontend for ii instead ofcompletely rewriting it from scratch. However, while working on thefrontend I noticed that I couldn't implement certain features in thefrontend without changes to the backend (ii). I briefly consideredpatching ii but ultimately decided for a rewrite. During the rewrite,various features have been implemented that are not supported by ii(e.g. various IRCv3 features, builtin TLS and IPv6 support, et cetera).
I currently consider hii feature complete and use it myself daily incombination withinsomnia and a per-serverrunituser service for automaticallystarting and supervising hii processes.
New features (compared to ii):
- Memory safety
- A proper IRC protocol implementation throughgirc
- Support for automatically joining channels on startup
- Support forIRCv3.2 monitoring
- Support for a per-channel nick list using a UNIX domain socket
- Support for recording messages mentioning the users
- Support for authentication using TLS client certificates (CertFP)
- MostIRCnetworks support CertFP
- This can be used in conjunction with theSASL EXTERNAL mechanism
- Built-in TLS support
- Built-in IPv6 support
Features intentionally not implemented:
- Automatic authorization using thePASS command isnot implemented (ii
-k
flag). - Shortcut commands, e.g.
/j
. If you need them write yourself a shellscript for mapping shortcut commands to real commands.
While hii has more features than ii it is still supposed to have a limitfeature set and shouldn't"expand until it can read mail".
Backwards compatibility with ii wasn't a goal. While the directorystructure is mostly backwards compatible everything else is pretty muchdifferent. This is the case because proper backwards compatibility wouldhave been a lot of work and I personally didn't need it.
The program can be installed either usinggo install
ormake
.
To install to the program usinggo install
run the following command:
$ go install github.com/nmeum/hii@latest
Note that this will not install additional documentation files, e.g. man pages.
To install to the program usingmake
run the following commands:
$ git clone https://github.com/nmeum/hii.git$ cd hii$ make && make install
This will also install documentation files to the correct location andmay thus be preferable when packaging this software for a distribution.
Q: Sockets cannot be used with standard utilities such asgrep(1)
.Why are nick names served using a unix domain socket anyhow?
A: Several ways of implementing a nick list have been considered.Using a regular file has various obvious disadvantages. For instance,the file would need to be truncated every time the nick list changes,which causes a lot of file system operation. Using a FUSE for servingthe nick list was also briefly considered, however, while this wouldallow interaction with standard utilities it would require linkingagainst FUSE and would complicate things quite a bit. Serving nicksusing a unix domain socket seemed to be a reasonable compromise.
Q: Why are mentions recorded in a separate file? Can't this beimplemented using inotify, kqueue, … in the frontend?
A: While this might certainly be possible it would complicate thefrontend code quite a bit. Implementing this in the backend was fairlyeasy and only required a few changes. Additionally, neither kqueue norinotify are mandated by POSIX.
Q: Can feature X/Y/Z be added to hii?
A: No.
This program is free software: you can redistribute it and/or modify itunder the terms of the GNU General Public License as published by theFree Software Foundation, either version 3 of the License, or (at youroption) any later version.
This program is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU GeneralPublic License for more details.
You should have received a copy of the GNU General Public License alongwith this program. If not, seehttp://www.gnu.org/licenses/.
About
A file-based IRC client inspired by ii