summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2021-03-22 11:21:26 -0400
committerDavid Thompson <dthompson2@worcester.edu>2021-03-22 11:21:26 -0400
commit05b94245389b7842f61dbb22db18cb85bd22621a (patch)
treefd99055711086d64044b9c6dee91fd55753f6e47
parentf7fa2fe389b37fbb5532e17747c5d3a7b2c6b394 (diff)
Big update to Emacs config.
-rw-r--r--dotfiles/.emacs.d/erc.el82
-rw-r--r--dotfiles/.emacs.d/init.el518
2 files changed, 215 insertions, 385 deletions
diff --git a/dotfiles/.emacs.d/erc.el b/dotfiles/.emacs.d/erc.el
deleted file mode 100644
index 3f26d16..0000000
--- a/dotfiles/.emacs.d/erc.el
+++ /dev/null
@@ -1,82 +0,0 @@
-(require 'erc)
-(require 'erc-log)
-(require 'erc-notify)
-;;(require 'erc-spelling)
-(require 'erc-autoaway)
-(require 'erc-services)
-(require 'notifications)
-(require 'tls)
-
-;; Notify the user of private messages
-(defun erc-private-message-notify (proc parsed)
- (let ((nick (car (erc-parse-user (erc-response.sender parsed))))
- (target (car (erc-response.command-args parsed)))
- (msg (erc-response.contents parsed)))
- (notifications-notify :title nick :body msg)))
-
-;; (add-hook 'erc-server-PRIVMSG-functions 'erc-private-message-notify)
-
-;; Interpret mIRC-style color commands in IRC chats
-(setq erc-interpret-mirc-color t)
-
-;; The following are commented out by default, but users of other
-;; non-Emacs IRC clients might find them useful.
-;; Kill buffers for channels after /part
-(setq erc-kill-buffer-on-part t)
-;; Kill buffers for private queries after quitting the server
-(setq erc-kill-queries-on-quit t)
-;; Kill buffers for server messages after quitting the server
-(setq erc-kill-server-buffer-on-quit t)
-
-;; exclude boring stuff from tracking
-(erc-track-mode t)
-(setq erc-track-exclude-types '("JOIN" "NICK" "PART" "QUIT" "MODE"
- "324" "329" "332" "333" "353" "477"))
-
-;; logging
-(setq erc-log-channels-directory "~/.erc/logs/")
-
-(if (not (file-exists-p erc-log-channels-directory))
- (mkdir erc-log-channels-directory t))
-
-(setq erc-save-buffer-on-part t)
-
-;; utf-8 always and forever
-(setq erc-server-coding-system '(utf-8 . utf-8))
-
-;; Auto-join channels
-(erc-autojoin-mode t)
-(setq erc-autojoin-channels-alist
- '(("freenode.net" "#guile" "#guix" "#lispgames" "#librelounge")))
-
-;; Don't open channel buffers in place of the current buffer because
-;; that drives me fucking crazy.
-(setq erc-join-buffer 'bury)
-
-;; Secret password file
-(defvar freenode-password nil)
-(let ((password-file "~/.emacs.d/.ercpasswords"))
- (when (file-exists-p password-file)
- (load password-file)))
-
-;; Start and stop erc
-(defun start-irc ()
- "Connect to IRC."
- (interactive)
- (erc-tls :server "irc.freenode.net"
- :port 6697
- :nick "davexunit"))
-
-(defun filter-erc-server-buffers ()
- (delq nil
- (mapcar
- (lambda (x) (and (erc-server-buffer-p x) x))
- (buffer-list))))
-
-(defun stop-irc ()
- "Disconnects from all irc servers"
- (interactive)
- (dolist (buffer (filter-erc-server-buffers))
- (message "Server buffer: %s" (buffer-name buffer))
- (with-current-buffer buffer
- (erc-quit-server "Later"))))
diff --git a/dotfiles/.emacs.d/init.el b/dotfiles/.emacs.d/init.el
index eba9d62..afdb6b4 100644
--- a/dotfiles/.emacs.d/init.el
+++ b/dotfiles/.emacs.d/init.el
@@ -1,5 +1,3 @@
-(require 'cl)
-
;; Added by Package.el. This must come before configurations of
;; installed packages. Don't delete this line. If you don't want it,
;; just comment it out by adding a semicolon to the start of the line.
@@ -8,39 +6,38 @@
(add-to-list 'package-archives (cons "melpa-stable" "https://stable.melpa.org/packages/") t)
(package-initialize)
-(if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
-(if (fboundp 'menu-bar-mode) (menu-bar-mode -1))
-(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
+;; Remove UI clutter.
+(tool-bar-mode -1)
+(menu-bar-mode -1)
+(scroll-bar-mode -1)
+(tooltip-mode -1)
+(set-fringe-mode 10)
+(setq inhibit-startup-message t) ; no splash screen
-;; No splash screen.
-(setf inhibit-startup-message t)
+(setq visible-bell t)
;; Maximize frames
(add-to-list 'default-frame-alist '(fullscreen . maximized))
;; Stop customize from writing to my init file. Who thought this was
;; a good idea?
-(setf custom-file "~/.emacs.d/custom.el")
-
-(defmacro when-require (package &rest body)
- "Evaluate BODY if and only if PACKAGE can be imported."
- (declare (indent 1))
- `(when (require ,package nil t) ,@body))
+(setq custom-file "~/.emacs.d/custom.el")
(defun home-file (file-name)
"Prefix FILE-NAME with the current home directory."
(concat (getenv "HOME") file-name))
+
;;;
;;; Packages
;;;
+(require 'use-package)
+
(add-to-list 'load-path
(home-file "/.guix-profile/share/emacs/site-lisp"))
-(when-require 'guix-autoloads
- (setf guix-dot-program (concat (getenv "HOME") "/.guix-profile/bin/dot")))
-
+
;;;
;;; Look and Feel
;;;
@@ -52,82 +49,108 @@
;; Use Inconsolata font.
(add-to-list 'default-frame-alist '(font . "Inconsolata-12"))
-(load-theme 'wombat t)
+(use-package doom-themes
+ :config
+ (load-theme 'doom-vibrant t)
+ ;; Enable flashing mode-line on errors
+ (doom-themes-visual-bell-config)
+ ;; Enable custom neotree theme (all-the-icons must be installed!)
+ (doom-themes-neotree-config)
+ ;; Corrects (and improves) org-mode's native fontification.
+ (doom-themes-org-config))
+
+(use-package doom-modeline
+ :init (doom-modeline-mode 1)
+ :custom ((doom-modeline-irc t)
+ (doom-modeline-irc-buffers t)))
+
(column-number-mode t)
(which-function-mode t)
+(add-hook 'prog-mode-hook (lambda () (display-line-numbers-mode t)))
-(defun change-theme (theme)
- "Disable all active themes and load THEME."
- (interactive
- (lexical-let ((themes (mapcar 'symbol-name (custom-available-themes))))
- (list (intern (completing-read "Load custom theme: " themes)))))
- (mapc 'disable-theme custom-enabled-themes)
- (load-theme theme t))
+(use-package which-key
+ :init (which-key-mode)
+ :diminish which-key-mode
+ :custom (which-key-idle-delay 0.3))
+
;;;
;;; Dired
;;;
-(require 'dired-x)
+(use-package dired-x)
+
;;;
;;; TRAMP
;;;
-(when-require 'tramp-sh
+(use-package tramp-sh
;; Include the current path for the system to TRAMP's remote path.
;; This is necessary for GuixSD, where the usual /usr/bin,
;; /usr/local/bin, etc. do not exist.
- (push 'tramp-own-remote-path tramp-remote-path))
+ :config (push 'tramp-own-remote-path tramp-remote-path))
+
;;;
;;; Battery
;;;
-(require 'battery)
-
-;; Display battery level in modeline only if a battery is present,
-;; otherwise display-battery-mode will throw an error.
-(when (and (boundp 'battery-status-function)
- (not (null battery-status-function))
- (not (string-match-p
- "N/A"
- (battery-format
- "%B"
- (funcall battery-status-function)))))
- (display-battery-mode t))
+(use-package battery
+ :init
+ ;; Display battery level in modeline only if a battery is present,
+ ;; otherwise display-battery-mode will throw an error.
+ (when (and (boundp 'battery-status-function)
+ (not (null battery-status-function))
+ (not (string-match-p
+ "N/A"
+ (battery-format
+ "%B"
+ (funcall battery-status-function)))))
+ (display-battery-mode t)))
+
;;;
-;;; Minibuffer
+;;; Minibuffer and completion
;;;
-(setf ido-everywhere t
- ido-enable-flex-matching t)
+(use-package swiper
+ :bind (("C-s" . swiper)
+ ("C-r" . swiper-backward)))
-(ido-mode t)
+(use-package ivy
+ :config (ivy-mode t)
+ :custom ((ivy-initial-inputs-alist nil)))
-(when-require 'ido-ubiquitous
- (ido-ubiquitous-mode t))
+(use-package ivy-rich
+ :init (ivy-rich-mode 1))
-;; Ignore compiled Guile files. This has the side-effect of looking
-;; like I hate GoLang.
-(setf ido-ignore-files (cons "\\.go$" ido-ignore-files))
+(use-package counsel
+ :bind (("M-x" . counsel-M-x)
+ ("C-x b" . counsel-switch-buffer)
+ ("C-x C-f" . counsel-find-file)
+ ("C-h f" . counsel-describe-function)
+ ("C-h v" . counsel-describe-variable)
+ :map minibuffer-local-map
+ ("C-r" . counsel-minibuffer-history)))
-;; Much improved M-x prompt.
-(when-require 'smex
- (global-set-key (kbd "M-x") 'smex))
+(use-package helpful
+ :bind (("C-h k" . helpful-key))
+ :custom ((counsel-describe-function-function 'helpful-callable)
+ (counsel-describe-variable-function 'helpful-variable)))
+
;;;
;;; Buffers
;;;
;; Kill buffers that haven't been modified in awhile.
-(require 'midnight)
+(use-package midnight)
;; Save point position between sessions
-(require 'saveplace)
-(setq-default save-place t)
-(setq save-place-file (expand-file-name ".places" user-emacs-directory))
+(use-package saveplace
+ :custom ((save-place t)
+ (save-place-file (expand-file-name ".places" user-emacs-directory))))
(defun cleanup-buffer-safe ()
"Perform a bunch of safe operations on the whitespace content of a buffer.
@@ -140,55 +163,70 @@ might be bad."
;; Various superfluous white-space. Just say no.
(add-hook 'before-save-hook 'cleanup-buffer-safe)
-(setq ibuffer-saved-filter-groups
- '(("default"
- ("guile-2d" (filename . "Code/guile-2d/"))
- ("dired" (mode . dired-mode))
- ("org" (mode . org-mode))
- ("erc" (mode . erc-mode)))))
+(use-package ibuffer
+ :init (add-hook 'ibuffer-mode-hook
+ (lambda ()
+ (ibuffer-switch-to-saved-filter-groups "default")))
+ :custom ((ibuffer-saved-filter-groups
+ '(("default"
+ ("dired" (mode . dired-mode))
+ ("org" (mode . org-mode))
+ ("erc" (mode . erc-mode)))))))
-(add-hook 'ibuffer-mode-hook
- (lambda ()
- (ibuffer-switch-to-saved-filter-groups "default")))
+(setq view-read-only t)
+
;;;
;;; Tabs and Newlines
;;;
(setq-default indent-tabs-mode nil)
-(setf indent-tabs-mode nil
- tab-width 2
- require-final-newline t)
-(electric-indent-mode t)
+(setq indent-tabs-mode nil)
+(setq tab-width 2)
+(setq require-final-newline t)
+(setq electric-indent-mode t)
+
;;;
;;; Version Control
;;;
-(when-require 'magit
- (require 'magit-blame)
+(use-package magit
+ :bind (("C-c g" . magit-status))
+ :config (use-package magit-blame)
+ :custom
+ ;; I don't like magit's default local tracking branch naming
+ ;; strategy.
+ ((magit-default-tracking-name-function 'magit-default-tracking-name-branch-only)
+ (magit-last-seen-setup-instructions "1.4.0")
+ (magit-completing-read-function #'magit-ido-completing-read)))
- ;; I don't like magit's default local tracking branch naming strategy.
- (setf magit-default-tracking-name-function
- 'magit-default-tracking-name-branch-only)
- (setf magit-last-seen-setup-instructions "1.4.0")
- (setf magit-completing-read-function #'magit-ido-completing-read)
+;; Follow symlinks automatically instead of asking each time.
+(setq vc-follow-symlinks t)
- (global-set-key (kbd "C-c g") 'magit-status))
+
+;;;
+;;; Project Management
+;;;
-;; Follow symlinks automatically instead of asking each time.
-(setf vc-follow-symlinks t)
+(use-package projectile
+ :init (projectile-mode 1)
+ :bind-keymap (("C-c p" . projectile-command-map))
+ :custom ((projectile-completion-system 'ivy)))
-(when-require 'projectile (projectile-global-mode))
+(use-package neotree
+ :bind (("C-c n" . neotree)))
+
;;;
;;; Ediff
;;;
;; Don't break out a separate frame for ediff.
-(setf ediff-window-setup-function 'ediff-setup-windows-plain
- ediff-split-window-function 'split-window-horizontally)
+(setq ediff-window-setup-function 'ediff-setup-windows-plain)
+(setq ediff-split-window-function 'split-window-horizontally)
+
;;;
;;; C
;;;
@@ -197,71 +235,57 @@ might be bad."
(setq-default c-basic-offset 2)
(setq-default c-basic-indent 2)
+
;;;
;;; Javascript
;;;
-(setf js-indent-level 2
- js2-basic-offset 2)
-(when-require 'js2-mode
- (add-to-list 'auto-mode-alist '("\\.js$" . js2-mode)))
+(setq js-indent-level 2)
+
+(use-package js2-mode
+ :init (add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))
+ :custom ((js2-basic-offset 2)))
+
;;;
;;; Web
;;;
-(when-require 'web-mode
- (add-hook 'web-mode-hook (lambda () (setq web-mode-markup-indent-offset 2)))
+(use-package web-mode
+ :init
(add-to-list 'auto-mode-alist '("\\.html$" . web-mode))
(add-to-list 'auto-mode-alist '("\\.tpl$" . web-mode))
- (add-to-list 'auto-mode-alist '("\\.erb$" . web-mode)))
-
-;;;
-;;; PHP
-;;;
-
-(when-require 'php-mode
- (add-hook 'php-mode-hook (lambda () (setf c-basic-offset 2))))
+ (add-to-list 'auto-mode-alist '("\\.erb$" . web-mode))
+ (add-hook 'web-mode-hook
+ (lambda ()
+ (setq web-mode-markup-indent-offset 2))))
+
;;;
;;; Lisp
;;;
(show-paren-mode t)
-(defmacro use-mode-for-lisp (mode)
- `(progn
- (add-hook 'emacs-lisp-mode-hook (lambda () (,mode t)))
- (add-hook 'lisp-mode-hook (lambda () (,mode t)))
- (add-hook 'lisp-interaction-mode-hook (lambda () (,mode t)))
- (add-hook 'scheme-mode-hook (lambda () (,mode t)))))
-
-(when-require 'rainbow-delimiters
- (use-mode-for-lisp rainbow-delimiters-mode))
+(use-package rainbow-delimiters
+ :hook (prog-mode . rainbow-delimiters-mode))
-(when-require 'paredit
- (use-mode-for-lisp paredit-mode))
+(use-package scheme)
-(when-require 'geiser
- (require 'geiser-guile)
- (setf geiser-active-implementations '(guile))
+(use-package paredit
+ :config
+ (add-hook 'emacs-lisp-mode-hook (lambda () (paredit-mode t)))
+ (add-hook 'lisp-mode-hook (lambda () (paredit-mode t)))
+ (add-hook 'lisp-interaction-mode-hook (lambda () (paredit-mode t)))
+ (add-hook 'scheme-mode-hook (lambda () (paredit-mode t))))
- (global-set-key (kbd "C-c s") 'connect-to-guile))
+(use-package geiser
+ :config (use-package geiser-guile)
+ :custom ((geiser-active-implementations '(guile))))
;; Use scheme-mode for Skribe documents.
(add-to-list 'auto-mode-alist '("\\.skr$" . scheme-mode))
-(when-require 'skribe
- ;; Activate Skribe minor mode on .skr files.
- (add-hook 'scheme-mode-hook
- (lambda ()
- (when (string-match "\\.skr$" (buffer-file-name))
- (skribe-mode t)
- (when-require 'typo
- (typo-mode t))))))
-
-(require 'scheme)
-
;; Hacked to properly indent keywords. Thanks to mark_weaver.
(defun scheme-indent-function (indent-point state)
"Scheme mode function for the value of the variable `lisp-indent-function'.
@@ -315,20 +339,7 @@ indentation."
(method
(funcall method state indent-point normal-indent)))))))
-(defun connect-to-guile-wm ()
- "Connect to guile-wm's REPL server."
- (interactive)
- (geiser-connect 'guile "localhost" "37147"))
-
-(put 'run-script 'scheme-indent-function 1)
-(put 'and-let* 'scheme-indent-function 1)
-(put 'syntax-parameterize 'scheme-indent-function 1)
-(put 'with-mutex 'scheme-indent-function 1)
-(put 'test-group 'scheme-indent-function 1)
-(put 'sxml-match 'scheme-indent-function 1)
-(put 'substitute-keyword-arguments 'scheme-indent-function 1)
-(put 'modify-phases 'scheme-indent-function 1)
-
+
;;;
;;; Ruby
;;;
@@ -340,10 +351,10 @@ indentation."
(add-to-list 'auto-mode-alist '("Rakefile$" . ruby-mode))
(add-to-list 'auto-mode-alist '("Gemfile$" . ruby-mode))
-;; Use ruby-test-mode
-(when-require 'ruby-test-mode
- (add-hook 'ruby-mode-hook 'ruby-test-mode))
+(use-package ruby-test-mode
+ :hook ruby-mode)
+
;;;
;;; SQL
;;;
@@ -353,11 +364,12 @@ indentation."
(add-hook 'sql-interactive-mode-hook
(lambda () (setq truncate-lines t)))
+
;;;
;;; Org
;;;
-(require 'ox-beamer)
+(use-package ox-beamer)
(defun org-sort-by-priority-and-todo ()
"Sort org entries first by priority, and then by TODO status."
@@ -375,195 +387,95 @@ indentation."
(lambda ()
(local-set-key (kbd "C-c o") 'org-sort-by-priority-and-todo)))
+
;;;
;;; RSS
;;;
-(when-require 'elfeed
- (setf elfeed-feeds
- '("http://planet.gnu.org/rss20.xml"
- "http://cs.worcester.edu/blog/feed/"
- "https://hacks.mozilla.org/feed/"
- "http://ebb.org/bkuhn/blog/rss.xml"))
-
- (global-set-key (kbd "C-c f") 'elfeed))
-
-;;;
-;;; Mail
-;;;
-
-(when-require 'notmuch
- ;; (when-require 'notmuch-unread
- ;; (notmuch-unread-mode 1))
-
- (setf notmuch-crypto-process-mime t)
-
- (global-set-key (kbd "C-c m") 'notmuch)
-
- (setf notmuch-fcc-dirs
- '(("dthompson2@worcester.edu" . "WSU/Sent")
- ("davet@fsf.org" . "FSF/INBOX.Sent")
- ("davet@gnu.org" . "FSF/INBOX.Sent")
- ("dthompson@vistahigherlearning.com" . "VHL/Sent Items")
- (".*" . "sent")))
-
- (defun recent-mail-by-tag (tag)
- `(:name ,tag
- :query ,(concat "tag:" tag " AND date:today..today")
- :sort-order newest-first))
-
- (defun unread-mail-by-tag (tag)
- `(:name ,tag
- :query ,(concat "tag:" tag " AND tag:unread")
- :sort-order newest-first))
-
- (defun unarchived-mail-by-tag (tag)
- `(:name ,tag
- :query ,(concat "tag:" tag " AND NOT tag:archive")
- :sort-order newest-first))
-
- (setf notmuch-saved-searches
- `((:name "inbox"
- :query "tag:inbox"
- :sort-order newest-first)
- ,(unarchived-mail-by-tag "guix")
- ,(unarchived-mail-by-tag "guile")
- ,@(mapcar 'recent-mail-by-tag
- '("nagios" "semaphore" "airbrake" "newrelic"
- "rackspace" "vividcortex" "aws" "papertrail"
- "codeclimate" "basecamp"))))
-
- (define-key notmuch-search-mode-map "u"
- (lambda ()
- "Remove 'unread' tag from message."
- (interactive)
- (notmuch-search-tag '("-unread"))
- (notmuch-search-next-thread)))
-
- (define-key notmuch-search-mode-map "a"
- (lambda ()
- "Remove 'unread' and 'inbox' tags from message and add
-'archive' tag."
- (interactive)
- (notmuch-search-tag '("-unread" "-inbox" "+archive"))
- (notmuch-search-next-thread)))
-
- (define-key notmuch-search-mode-map "d"
- (lambda ()
- "Add 'deleted' tag to message."
- (interactive)
- (notmuch-search-tag '("+deleted"))
- (notmuch-search-next-thread)))
-
- (define-key notmuch-search-mode-map "i"
- (lambda ()
- "Remove 'unread' and 'archive' tags from message, and add
-the 'inbox' tag."
- (interactive)
- (notmuch-search-tag '("-unread" "-archive" "+inbox"))
- (notmuch-search-next-thread)))
-
- (define-key notmuch-search-mode-map "s"
- (lambda ()
- "Remove 'unread' and 'inbox' tags from message, and add the
-'spam' tag."
- (interactive)
- (notmuch-search-tag '("-unread" "-inbox" "+spam"))
- (notmuch-search-next-thread))))
-
-(setf send-mail-function 'smtpmail-send-it
- smtpmail-smtp-server "smtp.gmail.com"
- smtpmail-smtp-service 587
- smtpmail-stream-type 'starttls)
-
-;; Work email
-;; (when (equalp system-name "7VWJD42")
-;; (setf send-mail-function 'smtpmail-send-it
-;; smtpmail-smtp-server "EXCHANGE02.vhl.dom"
-;; smtpmail-smtp-service 587
-;; smtpmail-stream-type 'starttls))
-
-;;;
-;;; Calendar
-;;;
-
-(when-require 'org-caldav
- (setf org-caldav-url
- "https://my.owndrive.com/remote.php/caldav/calendars/davexunit"
- org-caldav-calendar-id "defaultcalendar"
- org-caldav-inbox "~/Documents/calendar.org"
- org-caldav-files '()
- org-icalendar-timezone "America/New_York"))
-
-;;;
-;;; Music
-;;;
-
-(when-require 'emms
- (require 'emms-player-mpd)
- (require 'emms-mode-line)
- (require 'emms-browser)
-
- (emms-standard)
- (emms-mode-line 1)
- (setf emms-player-mpd-server-name "localhost"
- emms-player-mpd-server-port "6600"
- emms-volume-change-function 'emms-volume-mpd-change)
- (add-to-list 'emms-info-functions 'emms-info-mpd)
- (add-to-list 'emms-player-list 'emms-player-mpd)
-
- (global-set-key (kbd "C-c e e") 'emms)
- (global-set-key (kbd "C-c e b") 'emms-browser))
+(use-package elfeed
+ :bind (("C-c f" . elfeed))
+ :custom (elfeed-feeds
+ '("http://planet.gnu.org/rss20.xml"
+ "http://cs.worcester.edu/blog/feed/"
+ "https://hacks.mozilla.org/feed/"
+ "http://ebb.org/bkuhn/blog/rss.xml")))
+
;;;
;;; GPG
;;;
-(setf epg-gpg-program "gpg")
-(setf epa-pinentry-mode 'loopback)
+(setq epg-gpg-program "gpg")
+(setq epa-pinentry-mode 'loopback)
+
;;;
-;;; Other
+;;; IRC
;;;
-;; Load machine specific emacs configuration
-(defvar local-config-filename "~/.emacs.d/local.el")
-(if (file-exists-p local-config-filename)
- (load local-config-filename))
+(use-package erc
+ :init
+ (erc-autojoin-mode t)
+ (erc-track-mode t)
+ :custom ((erc-interpret-mirc-color t)
+ (erc-kill-buffer-on-part t)
+ (erc-kill-queries-on-quit t)
+ (erc-kill-server-buffer-on-quit t)
+ (erc-server-coding-system '(utf-8 . utf-8))
+ (erc-autojoin-channels-alist
+ '(("freenode.net" "#guile" "#guix" "#lispgames")))
+ ;; Don't open channel buffers in place of the current
+ ;; buffer because that drives me fucking crazy.
+ (erc-join-buffer 'bury)
+ (erc-track-exclude-types '("JOIN" "NICK" "PART" "QUIT" "MODE"
+ "324" "329" "332" "333" "353" "477"))
+ (erc-save-buffer-on-part t)))
-;; IRC configuration
-(load "~/.emacs.d/erc.el")
+(use-package erc-log
+ :custom ((erc-log-channels-directory "~/.erc/logs/")))
-;;;
-;;; Keybindings
-;;;
+(if (not (file-exists-p erc-log-channels-directory))
+ (mkdir erc-log-channels-directory t))
-;; Handy functions courtesy of whattheemacs.d
-(defun open-line-below ()
+(use-package erc-notify)
+(use-package erc-autoaway)
+(use-package erc-services)
+(use-package tls)
+
+;; Start and stop erc
+(defun start-irc ()
+ "Connect to IRC."
(interactive)
- (if (eolp)
- (newline)
- (end-of-line)
- (newline))
- (indent-for-tab-command))
+ (erc-tls :server "irc.freenode.net"
+ :port 6697
+ :nick "davexunit"
+ :password (read-passwd "Password: ")))
-(defun open-line-above ()
+(defun stop-irc ()
+ "Disconnects from all irc servers"
(interactive)
- (beginning-of-line)
- (newline)
- (forward-line -1)
- (indent-for-tab-command))
+ (dolist (buffer (delq nil
+ (mapcar
+ (lambda (x)
+ (and (erc-server-buffer-p x) x))
+ (buffer-list))))
+ (message "Server buffer: %s" (buffer-name buffer))
+ (with-current-buffer buffer
+ (erc-quit-server "Later"))))
-(global-set-key (kbd "RET") 'newline-and-indent)
-(global-set-key (kbd "<C-return>") 'open-line-below)
-(global-set-key (kbd "<C-M-return>") 'open-line-above)
(global-set-key (kbd "C-c i") 'start-irc)
+
+
+;;;
+;;; Keybindings
+;;;
+
+(global-set-key (kbd "RET") 'newline-and-indent)
(global-set-key (kbd "C-c p") 'package-list-packages)
(global-set-key (kbd "C-c C-f") 'ff-find-other-file)
(global-set-key (kbd "M-%") 'query-replace-regexp)
;; No more minimizing Emacs by accident.
(global-unset-key (kbd "C-z"))
-
-;; Enable some disabled-by-default functions
+;; Enable some disabled-by-default functions.
(put 'upcase-region 'disabled nil)
(put 'downcase-region 'disabled nil)