[spacemacs] Use znc.el for irc (wraps around erc)
[~bandali/configs] / spacemacs / .emacs.d / private / aminb / packages.el
CommitLineData
f138f1d7
AB
1;;; packages.el --- aminb layer packages file for Spacemacs.
2;;
3;; Copyright (c) 2016 Amin Bandali
4;;
5;; Author: Amin Bandali <amin@aminb.org>
6;; URL: https://github.com/aminb/dotfiles
7;;
8;; This file is not part of GNU Emacs.
9;;
10;;; License: GPLv3
11
12;;; Commentary:
13
14;; This file is a collection of my settings and customizations on top of
15;; spacemacs.
16
17;;; Code:
18
19(defconst aminb-packages
ab386d24 20 '(crux writeroom-mode znc)
f138f1d7
AB
21 "The list of Lisp packages required by the aminb layer.")
22
23(defun aminb/init-crux ()
24 (use-package crux
25 :defer t
26 :bind (("C-c d" . crux-duplicate-current-line-or-region)
27 ("C-c M-d" . crux-duplicate-and-comment-current-line-or-region)
28 )))
29
30(defun aminb/init-writeroom-mode ()
31 (use-package writeroom-mode ; Distraction-free editing
32 :defer t
33 :config (setq writeroom-width 82)
34 :bind (("C-c W" . writeroom-mode)
35 ("s-?" . writeroom-toggle-mode-line))))
36
ab386d24
AB
37(defun aminb/init-znc ()
38 (use-package znc
39 :defer t
40 :init
41 (spacemacs/set-leader-keys
42 "aiz" 'znc-erc)
43 :config
44 (progn
45 (defun vbe:znc-add-server (server port user networks)
46 "Add a server to the list of ZNC servers.
47We use SSL inconditionaly. Moreover, we don't store the password
48but put nil instead. At least, we tweak the username to contain
49the network name later, this will be separated again."
50 (add-to-list 'znc-servers
51 (list server
52 port
53 t ; SSL enabled
54 (mapcar (function (lambda (slug) (list slug
55 (format "%s/%s" user slug)
56 nil)))
57 networks))))
58
59 (defun vbe:znc-erc-ssl-connector (&rest R)
60 "Connect to ERC using SSL and retrieve password with `auth-source-search'.
61Moreover, handle multiple networks by sending the password with
62the appropriate network slug that we extract from the nick."
63 (let* ((user (nth 0 (split-string (plist-get R :nick) "/")))
64 (slug (nth 1 (split-string (plist-get R :nick) "/")))
65 (found (nth 0 (auth-source-search :host (plist-get R :server)
66 :user user
67 :require '(:user :secret)
68 :max 1))))
69 (if found
70 (let ((password (let ((secret (plist-get found :secret)))
71 (if (functionp secret)
72 (funcall secret)
73 secret))))
74 (plist-put R :password (format "%s/%s:%s" user slug password))
75 (plist-put R :nick user)
76 (apply 'erc-tls R)))))
77 (setq znc-erc-ssl-connector 'vbe:znc-erc-ssl-connector)
78
79 ;; Define networks
80 (vbe:znc-add-server "nix.aminb.org" 6669 "amin"
81 '(freenode mozilla))
82 )))
f138f1d7
AB
83
84;;; packages.el ends here