id = "irssi" name = "irssi" homepage = "https://irssi.org" description = "Irssi is a modular text mode chat client." # The irssi icon, from the project's repository. icon = "https://raw.githubusercontent.com/irssi/irssi/master/irssi-icon.png" executables = ["irssi"] [dotfiles] # irssi(1), FILES: "~/.irssi/config — personal configuration file", # "~/.irssi/default.theme — default irssi theme", "~/.irssi/startup — file # containing a list of commands to execute on startup", "~/.irssi/scripts/ — # default scripts directory" and "~/.irssi/scripts/autorun/ — directory # containing links to scripts that should be loaded automatically on startup". # https://irssi.org/documentation/manual/configuration/ adds that "The # configuration is saved to ~/.irssi/config file", in a format of irssi's own # resembling libPropList, and that comment lines survive /SAVE. The whole # directory is listed: themes, scripts and the startup command list are as much # the user's setup as the config file is. paths = ["~/.irssi/"] # Same FILES list: away.log is "logged messages in away status", a transcript # rather than configuration, and config.autosave is "automatic save of the # personal config file when it was changed externally" — a backup copy irssi # writes for itself. exclude = [ "~/.irssi/away.log", "~/.irssi/config.autosave", ] secret = [] # The passwords irssi writes into the config file, by the key names its own # writers use. src/core/servers-setup.c, server_setup_save(): # `iconfig_node_set_str(node, "password", rec->password)` for the server # password and "tls_pass" for the client-certificate key passphrase. # src/irc/core/irc-chatnets.c writes "sasl_password" alongside "sasl_username" # and "sasl_mechanism" for a chatnet. All three keys are listed because they are # three separate credentials in one file; `password` as a prefix does not reach # `sasl_password`, which is why that one is spelled out. [[dotfiles.secret_paths]] file = "~/.irssi/config" match = { prefix = ["password", "tls_pass", "sasl_password"] } # From the same server_setup_save(): tls_cert and tls_pkey are absolute paths to # the certificate and key file on this machine, and own_host is the local # address irssi binds outgoing connections to. Nicknames, themes, key bindings # and the network list are deliberately not here: those are what the user wants # carried over. The certificate the user was issued and the address this box # answers on are its own, and have to be put back by hand after a rebuild, so # they are kept: backup. [[dotfiles.machine_lines]] file = "~/.irssi/config" match = { prefix = ["tls_cert", "tls_pkey", "own_host"] } scope = "backup" # tls_cafile and tls_capath are split out of the rule above because they are # not this machine's at all: they name the system CA bundle, /etc/ssl/certs on # one distro and a Homebrew prefix on the next, the same on every box of that # kind. Decided by the platform, so they travel to one of the same kind. [[dotfiles.machine_lines]] file = "~/.irssi/config" match = { prefix = ["tls_cafile", "tls_capath"] } scope = "platform" [commands] format = 1 label = "Start Irssi" description = "Start the IRC client with an optional server, nick and config location. Passing a password on the command line exposes it in the process list." quality = "ai-draft" parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false } [[commands.source]] id = "man" kind = "manual" url = "https://raw.githubusercontent.com/irssi/irssi/master/docs/irssi.1" revision = "irssi.1 June 2015" evidence = """ irssi [--config=PATH] [--home=PATH] [-dv!?] [-c server] [-p port] [-n nickname] [-w password] [-h hostname] --config=FILE use FILE instead of ~/.irssi/config --home=PATH PATH specifies the home directory of Irssi; default is ~/.irssi -c, --connect=SERVER connect to SERVER -w, --password=PASSWORD use PASSWORD for authentication. -p, --port=PORT automatically connect to PORT on server. -!, --noconnect disable autoconnecting of servers -n, --nick=NICKNAME specify NICKNAME as your nick -h, --hostname=HOSTNAME use HOSTNAME for your irc session """ [[commands.field]] id = "connect" label = "Server" type = "string" option = ["--connect", "-c"] sources = ["man"] [[commands.field]] id = "port" label = "Port" type = "integer" option = ["--port", "-p"] sources = ["man"] [[commands.field]] id = "nick" label = "Nickname" type = "string" option = ["--nick", "-n"] sources = ["man"] [[commands.field]] id = "password" label = "Password" description = "Visible in the process list while Irssi runs." type = "string" option = ["--password", "-w"] sources = ["man"] [[commands.field]] id = "hostname" label = "Local hostname" type = "string" option = ["--hostname", "-h"] sources = ["man"] [[commands.field]] id = "noconnect" label = "Do not autoconnect" type = "boolean" option = ["--noconnect", "-!"] sources = ["man"] [[commands.field]] id = "config" label = "Config file" type = "path" path = { kind = "file", role = "input" } option = ["--config"] sources = ["man"] [[commands.field]] id = "home" label = "Irssi home directory" type = "path" path = { kind = "directory", role = "input" } option = ["--home"] sources = ["man"] [[commands.task]] id = "connect" label = "Connect to a server" fields = ["connect", "port", "nick"] required = ["connect"] [[commands.task]] id = "no-autoconnect" label = "Start without autoconnect" set = { noconnect = [true] } lock = ["noconnect"] fields = ["noconnect", "config", "home"] required = [] [[commands.group]] id = "basic" label = "Basic" fields = ["connect", "port", "nick", "noconnect"] [[commands.group]] id = "advanced" label = "Advanced" fields = ["config", "home", "hostname", "password"]