Calling this pivotal macro "def-package!" has frequently been a source of confusion. It is a thin wrapper around use-package, and it should be obvious that it is so. For this reason, and to match the naming convention used with other convenience macros/wrappers, it is now use-package!. Also changes def-package-hook! -> use-package-hook! The old macros are now marked obsolete and will be removed when straight integration is merged. |
||
---|---|---|
.. | ||
autoload | ||
config.el | ||
packages.el | ||
README.org |
app/irc
Table of Contents TOC
Description
This module turns adds an IRC client to Emacs with OS notifications.
Module Flags
This module provides no flags.
Plugins
Dependencies
This module requires gnutls-cli
or openssl
for secure connections.
Prerequisites
This module has no direct prerequisites.
Features
An IRC Client in Emacs
To connect to IRC you can invoke the =irc
function using M-x
or your own
custom keybinding.
command | description |
---|---|
=irc |
Connect to IRC and all configured servers |
When in a circe buffer these keybindings will be available.
command | key | description |
---|---|---|
+irc/tracking-next-buffer |
SPC m a |
Switch to the next active buffer |
circe-command-JOIN |
SPC m j |
Join a channel |
+irc/send-message |
SPC m m |
Send a private message |
circe-command-NAMES |
SPC m n |
List the names of the current channel |
circe-command-PART |
SPC m p |
Part the current channel |
+irc/quit |
SPC m Q |
Kill the current circe session and workgroup |
circe-reconnect |
SPC m R |
Reconnect the current server |
Configuration
Use set-irc-server!
to configure IRC servers. Its second argument (a plist)
takes the same arguments as circe-network-options
.
(set-irc-server! "chat.freenode.net"
`(:tls t
:nick "doom"
:sasl-username "myusername"
:sasl-password "mypassword"
:channels ("#emacs")))
It is a obviously a bad idea to store auth-details in plaintext, so here are some ways to avoid that:
Pass: the unix password manager
Pass is my tool of choice. I use it to manage my passwords. If you activate the :tools pass module you get an elisp API through which to access your password store.
set-irc-server!
accepts a plist can use functions instead of strings.
+pass-get-user
and +pass-get-secret
can help here:
(set-irc-server! "chat.freenode.net"
`(:tls t
:nick "doom"
:sasl-username ,(+pass-get-user "irc/freenode.net")
:sasl-password ,(+pass-get-secret "irc/freenode.net")
:channels ("#emacs")))
But wait, there's more! This stores your password in a public variable which could be accessed or appear in backtraces. Not good! So we go a step further:
(set-irc-server! "chat.freenode.net"
`(:tls t
:port 6697
:nick "doom"
:sasl-username ,(+pass-get-user "irc/freenode.net")
:sasl-password (lambda (&rest _) (+pass-get-secret "irc/freenode.net"))
:channels ("#emacs")))
And you're good to go!
Note that +pass-get-user
tries to find your username by looking for the fields
listed in +pass-user-fields
(by default login
, user=
, username=
and
email
)=). An example configuration looks like
mysecretpassword
username: myusername
Emacs' auth-source API
auth-source
is built into Emacs. As suggested in the circe wiki, you can store
(and retrieve) encrypted passwords with it.
(setq auth-sources '("~/.authinfo.gpg"))
(defun my-fetch-password (&rest params)
(require 'auth-source)
(let ((match (car (apply #'auth-source-search params))))
(if match
(let ((secret (plist-get match :secret)))
(if (functionp secret)
(funcall secret)
secret))
(error "Password not found for %S" params))))
(defun my-nickserv-password (server)
(my-fetch-password :user "forcer" :host "irc.freenode.net"))
(set-irc-server! "chat.freenode.net"
'(:tls t
:port 6697
:nick "doom"
:sasl-password my-nickserver-password
:channels ("#emacs")))