about summary refs log tree commit diff
path: root/tools/emacs/init
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2019-12-14T15·24+0000
committerVincent Ambo <tazjin@google.com>2019-12-14T15·24+0000
commit7d03ab714059a05e4f841be379b7a5ba2d033b09 (patch)
tree43dfc7b90339c69a5827ab468099591ca6b5edd3 /tools/emacs/init
parent1584607fb9c0d7d8c151509573c3447f17f42ec8 (diff)
chore(emacs.d): Move init/* to config/* r/144
Diffstat (limited to 'tools/emacs/init')
-rw-r--r--tools/emacs/init/bindings.el54
-rw-r--r--tools/emacs/init/custom.el52
-rw-r--r--tools/emacs/init/desktop.el211
-rw-r--r--tools/emacs/init/eshell-setup.el68
-rw-r--r--tools/emacs/init/functions.el206
-rw-r--r--tools/emacs/init/look-and-feel.el132
-rw-r--r--tools/emacs/init/mail-setup.el90
-rw-r--r--tools/emacs/init/modes.el36
-rw-r--r--tools/emacs/init/settings.el64
-rw-r--r--tools/emacs/init/term-setup.el36
10 files changed, 0 insertions, 949 deletions
diff --git a/tools/emacs/init/bindings.el b/tools/emacs/init/bindings.el
deleted file mode 100644
index f10869a5325f..000000000000
--- a/tools/emacs/init/bindings.el
+++ /dev/null
@@ -1,54 +0,0 @@
-;; Various keybindings, most of them taken from starter-kit-bindings
-
-;; Font size
-(define-key global-map (kbd "C-+") 'text-scale-increase)
-(define-key global-map (kbd "C--") 'text-scale-decrease)
-
-;; Use regex searches by default.
-(global-set-key (kbd "\C-r") 'isearch-backward-regexp)
-(global-set-key (kbd "M-%") 'query-replace-regexp)
-(global-set-key (kbd "C-M-s") 'isearch-forward)
-(global-set-key (kbd "C-M-r") 'isearch-backward)
-(global-set-key (kbd "C-M-%") 'query-replace)
-
-;; Counsel stuff:
-(global-set-key (kbd "C-c r g") 'counsel-rg)
-
-;; imenu instead of insert-file
-(global-set-key (kbd "C-x i") 'imenu)
-
-;; Window switching. (C-x o goes to the next window)
-(windmove-default-keybindings) ;; Shift+direction
-
-;; Start eshell or switch to it if it's active.
-(global-set-key (kbd "C-x m") 'eshell)
-
-;; Start a new eshell even if one is active.
-(global-set-key (kbd "C-x M") (lambda () (interactive) (eshell t)))
-
-(global-set-key (kbd "C-x p") 'ivy-browse-repositories)
-(global-set-key (kbd "M-g M-g") 'goto-line-with-feedback)
-
-(global-set-key (kbd "C-c w") 'whitespace-cleanup)
-(global-set-key (kbd "C-c a") 'align-regexp)
-
-;; Browse URLs (very useful for Gitlab's SSH output!)
-(global-set-key (kbd "C-c b p") 'browse-url-at-point)
-(global-set-key (kbd "C-c b b") 'browse-url)
-
-;; Goodness from @magnars
-;; I don't need to kill emacs that easily
-;; the mnemonic is C-x REALLY QUIT
-(global-set-key (kbd "C-x r q") 'save-buffers-kill-terminal)
-(global-set-key (kbd "C-x C-c") 'delete-frame)
-
-;; Open Fefes Blog
-(global-set-key (kbd "C-c C-f") 'fefes-blog)
-
-;; Open a file in project:
-(global-set-key (kbd "C-c f") 'project-find-file)
-
-;; Use swiper instead of isearch
-(global-set-key "\C-s" 'swiper)
-
-(provide 'bindings)
diff --git a/tools/emacs/init/custom.el b/tools/emacs/init/custom.el
deleted file mode 100644
index a157c7a5fa37..000000000000
--- a/tools/emacs/init/custom.el
+++ /dev/null
@@ -1,52 +0,0 @@
-(custom-set-variables
- ;; custom-set-variables was added by Custom.
- ;; If you edit it by hand, you could mess it up, so be careful.
- ;; Your init file should contain only one such instance.
- ;; If there is more than one, they won't work right.
- '(ac-auto-show-menu 0.8)
- '(ac-delay 0.2)
- '(avy-background t)
- '(cargo-process--custom-path-to-bin "env CARGO_INCREMENTAL=1 cargo")
- '(cargo-process--enable-rust-backtrace 1)
- '(company-auto-complete (quote (quote company-explicit-action-p)))
- '(company-idle-delay 0.5)
- '(custom-enabled-themes (quote (gruber-darker)))
- '(custom-safe-themes
-   (quote
-    ("d61fc0e6409f0c2a22e97162d7d151dee9e192a90fa623f8d6a071dbf49229c6" "3c83b3676d796422704082049fc38b6966bcad960f896669dfc21a7a37a748fa" "89336ca71dae5068c165d932418a368a394848c3b8881b2f96807405d8c6b5b6" default)))
- '(display-time-default-load-average nil)
- '(display-time-interval 30)
- '(elnode-send-file-program "/run/current-system/sw/bin/cat")
- '(frame-brackground-mode (quote dark))
- '(global-auto-complete-mode t)
- '(kubernetes-commands-display-buffer-function (quote display-buffer))
- '(lsp-gopls-server-path "/home/tazjin/go/bin/gopls")
- '(magit-log-show-gpg-status t)
- '(ns-alternate-modifier (quote none))
- '(ns-command-modifier (quote control))
- '(ns-right-command-modifier (quote meta))
- '(require-final-newline (quote visit-save))
- '(tls-program (quote ("gnutls-cli --x509cafile %t -p %p %h"))))
-(custom-set-faces
- ;; custom-set-faces was added by Custom.
- ;; If you edit it by hand, you could mess it up, so be careful.
- ;; Your init file should contain only one such instance.
- ;; If there is more than one, they won't work right.
- '(default ((t (:foreground "#e4e4ef" :background "#181818"))))
- '(rainbow-delimiters-depth-1-face ((t (:foreground "#2aa198"))))
- '(rainbow-delimiters-depth-2-face ((t (:foreground "#b58900"))))
- '(rainbow-delimiters-depth-3-face ((t (:foreground "#268bd2"))))
- '(rainbow-delimiters-depth-4-face ((t (:foreground "#dc322f"))))
- '(rainbow-delimiters-depth-5-face ((t (:foreground "#859900"))))
- '(rainbow-delimiters-depth-6-face ((t (:foreground "#268bd2"))))
- '(rainbow-delimiters-depth-7-face ((t (:foreground "#cb4b16"))))
- '(rainbow-delimiters-depth-8-face ((t (:foreground "#d33682"))))
- '(rainbow-delimiters-depth-9-face ((t (:foreground "#839496"))))
- '(term-color-black ((t (:background "#282828" :foreground "#282828"))))
- '(term-color-blue ((t (:background "#96a6c8" :foreground "#96a6c8"))))
- '(term-color-cyan ((t (:background "#1fad83" :foreground "#1fad83"))))
- '(term-color-green ((t (:background "#73c936" :foreground "#73c936"))))
- '(term-color-magenta ((t (:background "#9e95c7" :foreground "#9e95c7"))))
- '(term-color-red ((t (:background "#f43841" :foreground "#f43841"))))
- '(term-color-white ((t (:background "#f5f5f5" :foreground "#f5f5f5"))))
- '(term-color-yellow ((t (:background "#ffdd33" :foreground "#ffdd33")))))
diff --git a/tools/emacs/init/desktop.el b/tools/emacs/init/desktop.el
deleted file mode 100644
index dcc35383370a..000000000000
--- a/tools/emacs/init/desktop.el
+++ /dev/null
@@ -1,211 +0,0 @@
-;; -*- lexical-binding: t; -*-
-;;
-;; Configure desktop environment settings, including both
-;; window-management (EXWM) as well as additional system-wide
-;; commands.
-
-(require 's)
-(require 'f)
-(require 'dash)
-(require 'exwm)
-(require 'exwm-config)
-(require 'exwm-randr)
-(require 'exwm-systemtray)
-
-(defun pactl (cmd)
-  (shell-command (concat "pactl " cmd))
-  (message "Volume command: %s" cmd))
-
-(defun volume-mute () (interactive) (pactl "set-sink-mute @DEFAULT_SINK@ toggle"))
-(defun volume-up () (interactive) (pactl "set-sink-volume @DEFAULT_SINK@ +5%"))
-(defun volume-down () (interactive) (pactl "set-sink-volume @DEFAULT_SINK@ -5%"))
-
-(defun brightness-up ()
-  (interactive)
-  (shell-command "xbacklight -inc 5")
-  (message "Brightness increased"))
-
-(defun brightness-down ()
-  (interactive)
-  (shell-command "xbacklight -dec 5")
-  (message "Brightness decreased"))
-
-(defun lock-screen ()
-  (interactive)
-  ;; A sudoers configuration is in place that lets me execute this
-  ;; particular command without having to enter a password.
-  ;;
-  ;; The reason for things being set up this way is that I want
-  ;; xsecurelock.service to be started as a system-wide service that
-  ;; is tied to suspend.target.
-  (shell-command "/usr/bin/sudo /usr/bin/systemctl start xsecurelock.service"))
-
-(defun generate-randr-config (primary secondary)
-  (-flatten `(,(-map (lambda (n) (list n primary)) (number-sequence 1 7))
-              (0 secondary)
-              ,(-map (lambda (n) (list n secondary)) (number-sequence 8 9)))))
-
-(defun randr-layout-dp1-extend ()
-  "Layout for connecting my X1 Carbon to my screen at home"
-
-  (interactive)
-  (setq exwm-randr-workspace-monitor-plist (generate-randr-config "DP1-1" "eDP1"))
-  (exwm-randr-refresh)
-  (shell-command "xrandr --output DP1-1 --right-of eDP1 --auto --primary"))
-
-(defun randr-layout-hdmi1-extend ()
-  "Office layout for The Big Screen(tm)"
-
-  (interactive)
-  (setq exwm-randr-workspace-monitor-plist (generate-randr-config "HDMI1" "eDP1"))
-  (exwm-randr-refresh)
-  (shell-command "xrandr --output HDMI1 --dpi 144 --auto --right-of eDP1 --primary"))
-
-(defun randr-layout-single ()
-  "Laptop screen only!"
-
-  (interactive)
-  (shell-command "xrandr --output HDMI1 --off")
-  (shell-command "xrandr --output DP1-1 --off")
-  (exwm-randr-refresh))
-
-(defun set-xkb-layout (layout)
-  "Set the current X keyboard layout."
-
-  (shell-command (format "setxkbmap %s" layout))
-  (message "Set X11 keyboard layout to '%s'" layout))
-
-(defun create-window-name ()
-  "Construct window names to be used for EXWM buffers by
-  inspecting the window's X11 class and title.
-
-  A lot of commonly used applications either create titles that
-  are too long by default, or in the case of web
-  applications (such as Cider) end up being constructed in
-  awkward ways.
-
-  To avoid this issue, some rewrite rules are applied for more
-  human-accessible titles."
-
-  (pcase (list (or exwm-class-name "unknown") (or exwm-title "unknown"))
-    ;; In Cider windows, rename the class and keep the workspace/file
-    ;; as the title.
-    (`("Google-chrome" ,(and (pred (lambda (title) (s-ends-with? " - Cider" title))) title))
-     (format "Cider<%s>" (s-chop-suffix " - Cider" title)))
-
-    ;; Attempt to detect IRCCloud windows via their title, which is a
-    ;; combination of the channel name and network.
-    ;;
-    ;; This is what would often be referred to as a "hack". The regexp
-    ;; will not work if a network connection buffer is selected in
-    ;; IRCCloud, but since the title contains no other indication that
-    ;; we're dealing with an IRCCloud window
-    (`("Google-chrome"
-       ,(and (pred (lambda (title)
-                     (s-matches? "^[\*\+]\s#[a-zA-Z0-9/\-]+\s\|\s[a-zA-Z\.]+$" title)))
-             title))
-     (format "IRCCloud<%s>" title))
-
-    ;; For other Chrome windows, make the title shorter.
-    (`("Google-chrome" ,title)
-     (format "Chrome<%s>" (s-truncate 42 (s-chop-suffix " - Google Chrome" title))))
-
-    ;; Gnome-terminal -> Term
-    (`("Gnome-terminal" ,title)
-     ;; fish-shell buffers contain some unnecessary whitespace and
-     ;; such before the current working directory. This can be
-     ;; stripped since most of my terminals are fish shells anyways.
-     (format "Term<%s>" (s-trim-left (s-chop-prefix "fish" title))))
-
-    ;; For any other application, a name is constructed from the
-    ;; window's class and name.
-    (`(,class ,title) (format "%s<%s>" class (s-truncate 12 title)))))
-
-;; EXWM launch configuration
-;;
-;; This used to use use-package, but when something breaks use-package
-;; it doesn't exactly make debugging any easier.
-
-(let ((titlef (lambda ()
-                (exwm-workspace-rename-buffer (create-window-name)))))
-  (add-hook 'exwm-update-class-hook titlef)
-  (add-hook 'exwm-update-title-hook titlef))
-
-(fringe-mode 3)
-(exwm-enable)
-
-;; 's-N': Switch to certain workspace
-(setq exwm-workspace-number 10)
-(dotimes (i 10)
-  (exwm-input-set-key (kbd (format "s-%d" i))
-                      `(lambda ()
-                         (interactive)
-                         (exwm-workspace-switch-create ,i))))
-
-;; Launch applications / any command  with completion (dmenu style!)
-(exwm-input-set-key (kbd "s-d") #'counsel-linux-app)
-(exwm-input-set-key (kbd "s-x") #'ivy-run-external-command)
-(exwm-input-set-key (kbd "s-p") #'ivy-password-store)
-
-;; Add X11 terminal selector to a key
-(exwm-input-set-key (kbd "C-x t") #'counsel-switch-to-terminal)
-
-;; Toggle between line-mode / char-mode
-(exwm-input-set-key (kbd "C-c C-t C-t") #'exwm-input-toggle-keyboard)
-
-;; Volume keys
-(exwm-input-set-key (kbd "<XF86AudioMute>") #'volume-mute)
-(exwm-input-set-key (kbd "<XF86AudioRaiseVolume>") #'volume-up)
-(exwm-input-set-key (kbd "<XF86AudioLowerVolume>") #'volume-down)
-
-;; Brightness keys
-(exwm-input-set-key (kbd "<XF86MonBrightnessDown>") #'brightness-down)
-(exwm-input-set-key (kbd "<XF86MonBrightnessUp>") #'brightness-up)
-(exwm-input-set-key (kbd "<XF86Display>") #'lock-screen)
-
-;; Keyboard layouts (these are bound separately in Cyrillic
-;; because I don't use reverse-im)
-;; (-map
-;;  (lambda (pair)
-;;    (exwm-input-set-key
-;;     (kbd (format "s-%s" (cadr pair)))
-;;     `(lambda () (interactive) (set-xkb-layout ,(car pair)))))
-;;  '(("de" "k d")
-;;    ("de" "л в")
-;;    ("no" "k n")
-;;    ("no" "л т")
-;;    ("ru" "k r")
-;;    ("ru" "л к")
-;;    ("us" "k u")
-;;    ("us" "л г")))
-
-;; Line-editing shortcuts
-(exwm-input-set-simulation-keys
- '(([?\C-d] . delete)
-   ([?\C-w] . ?\C-c)))
-
-;; Show time & battery status in the mode line
-(display-time-mode)
-(display-battery-mode)
-
-;; enable display of X11 system tray within Emacs
-(exwm-systemtray-enable)
-
-;; Configure xrandr (multi-monitor setup)
-(setq exwm-randr-workspace-monitor-plist (generate-randr-config "HDMI1" "eDP1"))
-(exwm-randr-enable)
-
-;; Let buffers move seamlessly between workspaces by making them
-;; accessible in selectors on all frames.
-(setq exwm-workspace-show-all-buffers t)
-(setq exwm-layout-show-all-buffers t)
-
-;; Monitor layouts
-;;
-;; TODO(tazjin): Desired layout should be inferred based on
-;; connected screens - autorandr or something?
-(exwm-input-set-key (kbd "s-m d") #'randr-layout-dp1-extend)
-(exwm-input-set-key (kbd "s-m h") #'randr-layout-hdmi1-extend)
-(exwm-input-set-key (kbd "s-m s") #'randr-layout-single)
-
-(provide 'desktop)
diff --git a/tools/emacs/init/eshell-setup.el b/tools/emacs/init/eshell-setup.el
deleted file mode 100644
index 0b23c5a2d1bc..000000000000
--- a/tools/emacs/init/eshell-setup.el
+++ /dev/null
@@ -1,68 +0,0 @@
-;; EShell configuration
-
-(require 'eshell)
-
-;; Generic settings
-;; Hide banner message ...
-(setq eshell-banner-message "")
-
-;; Prompt configuration
-(defun clean-pwd (path)
-  "Turns a path of the form /foo/bar/baz into /f/b/baz
-   (inspired by fish shell)"
-  (let* ((hpath (replace-regexp-in-string home-dir
-                                          "~"
-                                          path))
-         (current-dir (split-string hpath "/"))
-	 (cdir (last current-dir))
-	 (head (butlast current-dir)))
-    (concat (mapconcat (lambda (s)
-			 (if (string= "" s) nil
-			   (substring s 0 1)))
-		       head
-		       "/")
-	    (if head "/" nil)
-	    (car cdir))))
-
-(defun vcprompt (&optional args)
-  "Call the external vcprompt command with optional arguments.
-   VCPrompt"
-  (replace-regexp-in-string
-   "\n" ""
-   (shell-command-to-string (concat  "vcprompt" args))))
-
-(defmacro with-face (str &rest properties)
-  `(propertize ,str 'face (list ,@properties)))
-
-(defun prompt-f ()
-  "EShell prompt displaying VC info and such"
-  (concat
-   (with-face (concat (clean-pwd (eshell/pwd)) " ") :foreground  "#96a6c8")
-   (if (= 0 (user-uid))
-       (with-face "#" :foreground "#f43841")
-     (with-face "$" :foreground "#73c936"))
-   (with-face " " :foreground "#95a99f")))
-
-
-(setq eshell-prompt-function 'prompt-f)
-(setq eshell-highlight-prompt nil)
-(setq eshell-prompt-regexp "^.+? \\((\\(git\\|svn\\|hg\\|darcs\\|cvs\\|bzr\\):.+?) \\)?[$#] ")
-
-;; Ignore version control folders in autocompletion
-(setq eshell-cmpl-cycle-completions nil
-      eshell-save-history-on-exit t
-      eshell-cmpl-dir-ignore "\\`\\(\\.\\.?\\|CVS\\|\\.svn\\|\\.git\\)/\\'")
-
-;; Load some EShell extensions
-(eval-after-load 'esh-opt
-  '(progn
-     (require 'em-term)
-     (require 'em-cmpl)
-     ;; More visual commands!
-     (add-to-list 'eshell-visual-commands "ssh")
-     (add-to-list 'eshell-visual-commands "tail")
-     (add-to-list 'eshell-visual-commands "sl")))
-
-(setq eshell-directory-name "~/.config/eshell/")
-
-(provide 'eshell-setup)
diff --git a/tools/emacs/init/functions.el b/tools/emacs/init/functions.el
deleted file mode 100644
index e0bc496a538f..000000000000
--- a/tools/emacs/init/functions.el
+++ /dev/null
@@ -1,206 +0,0 @@
-(require 's)
-
-(defun load-file-if-exists (filename)
-  (if (file-exists-p filename)
-      (load filename)))
-
-(defun goto-line-with-feedback ()
-  "Show line numbers temporarily, while prompting for the line number input"
-  (interactive)
-  (unwind-protect
-      (progn
-        (setq-local display-line-numbers t)
-        (let ((target (read-number "Goto line: ")))
-          (avy-push-mark)
-          (goto-line target)))
-    (setq-local display-line-numbers nil)))
-
-(defun untabify-buffer ()
-  (interactive)
-  (untabify (point-min) (point-max)))
-
-(defun indent-buffer ()
-  (interactive)
-  (indent-region (point-min) (point-max)))
-
-(defun cleanup-buffer ()
-  "Perform a bunch of operations on the whitespace content of a buffer.
-Including indent-buffer, which should not be called automatically on save."
-  (interactive)
-  (untabify-buffer)
-  (delete-trailing-whitespace)
-  (indent-buffer))
-
-;; These come from the emacs starter kit
-
-(defun esk-add-watchwords ()
-  (font-lock-add-keywords
-   nil '(("\\<\\(FIX\\(ME\\)?\\|TODO\\|DEBUG\\|HACK\\|REFACTOR\\|NOCOMMIT\\)"
-          1 font-lock-warning-face t))))
-
-(defun esk-sudo-edit (&optional arg)
-  (interactive "p")
-  (if (or arg (not buffer-file-name))
-      (find-file (concat "/sudo:root@localhost:" (read-file-name "File: ")))
-    (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
-
-;; Open Fefes blog
-(defun fefes-blog ()
-  (interactive)
-  (eww "https://blog.fefe.de/"))
-
-;; Open the NixOS man page
-(defun nixos-man ()
-  (interactive)
-  (man "configuration.nix"))
-
-;; Open local emacs configuration
-(defun emacs-config ()
-  (interactive)
-  (dired "~/.emacs.d/"))
-
-;; Get the nix store path for a given derivation.
-;; If the derivation has not been built before, this will trigger a build.
-(defun nix-store-path (derivation)
-  (let ((expr (concat "with import <nixos> {}; " derivation)))
-    (s-chomp (shell-command-to-string (concat "nix-build -E '" expr "'")))))
-
-(defun insert-nix-store-path ()
-  (interactive)
-  (let ((derivation (read-string "Derivation name (in <nixos>): ")))
-    (insert (nix-store-path derivation))))
-
-(defun toggle-force-newline ()
-  "Buffer-local toggle for enforcing final newline on save."
-  (interactive)
-  (setq-local require-final-newline (not require-final-newline))
-  (message "require-final-newline in buffer %s is now %s"
-           (buffer-name)
-           require-final-newline))
-
-;; Helm includes a command to run external applications, which does
-;; not seem to exist in ivy. This implementation uses some of the
-;; logic from Helm to provide similar functionality using ivy.
-(defun list-external-commands ()
-  "Creates a list of all external commands available on $PATH
-  while filtering NixOS wrappers."
-  (cl-loop
-   for dir in (split-string (getenv "PATH") path-separator)
-   when (and (file-exists-p dir) (file-accessible-directory-p dir))
-   for lsdir = (cl-loop for i in (directory-files dir t)
-                        for bn = (file-name-nondirectory i)
-                        when (and (not (s-contains? "-wrapped" i))
-                                  (not (member bn completions))
-                                  (not (file-directory-p i))
-                                  (file-executable-p i))
-                        collect bn)
-   append lsdir into completions
-   finally return (sort completions 'string-lessp)))
-
-(defvar external-command-flag-overrides
-  '(("google-chrome" . "--force-device-scale-factor=1.4"))
-
-  "This setting lets me add additional flags to specific commands
-  that are run interactively via `ivy-run-external-command'.")
-
-(defun run-external-command (cmd)
-  "Execute the specified command and notify the user when it
-  finishes."
-    (let* ((extra-flags (cdr (assoc cmd external-command-flag-overrides)))
-           (cmd (if extra-flags (s-join " " (list cmd extra-flags)) cmd)))
-      (message "Starting %s..." cmd)
-      (set-process-sentinel
-       (start-process-shell-command cmd nil cmd)
-       (lambda (process event)
-         (when (string= event "finished\n")
-           (message "%s process finished." process))))))
-
-(defun ivy-run-external-command ()
-  "Prompts the user with a list of all installed applications and
-  lets them select one to launch."
-
-  (interactive)
-  (let ((external-commands-list (list-external-commands)))
-    (ivy-read "Command:" external-commands-list
-              :require-match t
-              :history 'external-commands-history
-              :action #'run-external-command)))
-
-(defun ivy-password-store (&optional password-store-dir)
-  "Custom version of password-store integration with ivy that
-  actually uses the GPG agent correctly."
-
-  (interactive)
-  (ivy-read "Copy password of entry: "
-            (password-store-list (or password-store-dir (password-store-dir)))
-            :require-match t
-            :keymap ivy-pass-map
-            :action (lambda (entry)
-                      (let ((password (auth-source-pass-get 'secret entry)))
-                        (password-store-clear)
-                        (kill-new password)
-                        (setq password-store-kill-ring-pointer kill-ring-yank-pointer)
-                        (message "Copied %s to the kill ring. Will clear in %s seconds."
-                                 entry (password-store-timeout))
-                        (setq password-store-timeout-timer
-                              (run-at-time (password-store-timeout)
-                                           nil 'password-store-clear))))))
-
-(defun ivy-browse-repositories ()
-  "Select a git repository and open its associated magit buffer."
-
-  (interactive)
-  (ivy-read "Repository: "
-            (magit-list-repos)
-            :require-match t
-            :sort t
-            :action #'magit-status))
-
-(defun warmup-gpg-agent (arg &optional exit)
-  "Function used to warm up the GPG agent before use. This is
-   useful in cases where there is no easy way to make pinentry run
-   in the correct context (such as when sending email)."
-  (interactive)
-  (message "Warming up GPG agent")
-  (epg-sign-string (epg-make-context) "dummy")
-  nil)
-
-(defun bottom-right-window-p ()
-  "Determines whether the last (i.e. bottom-right) window of the
-  active frame is showing the buffer in which this function is
-  executed."
-  (let* ((frame (selected-frame))
-         (right-windows (window-at-side-list frame 'right))
-         (bottom-windows (window-at-side-list frame 'bottom))
-         (last-window (car (seq-intersection right-windows bottom-windows))))
-    (eq (current-buffer) (window-buffer last-window))))
-
-(defun inferior-erlang-nix-shell ()
-  "Start an inferior Erlang process from the root of the current
-  project."
-  (interactive)
-  (inferior-erlang
-   (format "nix-shell --command erl %s" (cdr (project-current)))))
-
-(defun memespace-region ()
-  "Make a meme out of it."
-
-  (interactive)
-  (let* ((start (region-beginning))
-         (end (region-end))
-         (memed
-          (message
-           (s-trim-right
-            (apply #'string
-                   (-flatten
-                    (nreverse
-                     (-reduce-from (lambda (acc x)
-                                     (cons (cons x (-repeat (+ 1 (length acc)) 32)) acc))
-                                   '()
-                                   (string-to-list (buffer-substring-no-properties start end))))))))))
-
-    (save-excursion (delete-region start end)
-                    (goto-char start)
-                    (insert memed))))
-
-(provide 'functions)
diff --git a/tools/emacs/init/look-and-feel.el b/tools/emacs/init/look-and-feel.el
deleted file mode 100644
index 8f42133fb8a0..000000000000
--- a/tools/emacs/init/look-and-feel.el
+++ /dev/null
@@ -1,132 +0,0 @@
-;;; -*- lexical-binding: t; -*-
-
-;; Hide those ugly tool bars:
-(tool-bar-mode 0)
-(scroll-bar-mode 0)
-(menu-bar-mode 0)
-(add-hook 'after-make-frame-functions
-          (lambda (frame) (scroll-bar-mode 0)))
-
-;; Don't do any annoying things:
-(setq ring-bell-function 'ignore)
-(setq initial-scratch-message "")
-
-;; Remember layout changes
-(winner-mode 1)
-
-;; Usually emacs will run as a proper GUI application, in which case a few
-;; extra settings are nice-to-have:
-(when window-system
-  (setq frame-title-format '(buffer-file-name "%f" ("%b")))
-  (mouse-wheel-mode t)
-  (blink-cursor-mode -1))
-
-;; Configure editor fonts
-(let ((font (format "Input Mono-%d" 12)))
-  (setq default-frame-alist `((font-backend . "xft")
-                              (font . ,font)))
-  (set-frame-font font t t))
-
-;; Display modeline time in dottime (see https://dotti.me)
-;;
-;; This is done in a way that initially seems more complicated than
-;; one would like, but this is unfortunately required due to the way
-;; `format-time-string' handles timezones.
-(defun format-dottime-advice (orig _ &optional _ _)
-  (let* ((offset-sec (car (current-time-zone)))
-         (offset-hours (/ offset-sec 60 60))
-         (dottime (if (/= offset-hours 0)
-                      (concat "%M-%Dt%H·%M" (format "%0+3d" offset-hours))
-                    "%m-%dT%H·%M")))
-    (apply orig '("%m-%dT%H·%M" nil t))))
-
-(advice-add 'format-time-string :around #'format-dottime-advice)
-
-;; Configure telephone-line
-(defun telephone-misc-if-last-window ()
-  "Renders the mode-line-misc-info string for display in the
-  mode-line if the currently active window is the last one in the
-  frame.
-
-  The idea is to not display information like the current time,
-  load, battery levels on all buffers."
-
-  (when (bottom-right-window-p)
-      (telephone-line-raw mode-line-misc-info t)))
-
-(defun telephone-line-setup ()
-  (telephone-line-defsegment telephone-line-last-window-segment ()
-    (telephone-misc-if-last-window))
-
-  ;; Display the current EXWM workspace index in the mode-line
-  (telephone-line-defsegment telephone-line-exwm-workspace-index ()
-    (when (bottom-right-window-p)
-      (format "[%s]" exwm-workspace-current-index)))
-
-  ;; Define a highlight font for ~ important ~ information in the last
-  ;; window.
-  (defface special-highlight '((t (:foreground "white" :background "#5f627f"))) "")
-  (add-to-list 'telephone-line-faces
-               '(highlight . (special-highlight . special-highlight)))
-
-  (setq telephone-line-lhs
-        '((nil . (telephone-line-position-segment))
-          (accent . (telephone-line-buffer-segment))))
-
-  (setq telephone-line-rhs
-        '((accent . (telephone-line-major-mode-segment))
-          (nil . (telephone-line-last-window-segment
-                  telephone-line-exwm-workspace-index))
-
-          ;; TODO(tazjin): lets not do this particular thing while I
-          ;; don't actually run notmuch, there are too many things
-          ;; that have a dependency on the modeline drawing correctly
-          ;; (including randr operations!)
-          ;;
-          ;; (highlight . (telephone-line-notmuch-counts))
-          ))
-
-  (setq telephone-line-primary-left-separator 'telephone-line-tan-left
-        telephone-line-primary-right-separator 'telephone-line-tan-right
-        telephone-line-secondary-left-separator 'telephone-line-tan-hollow-left
-        telephone-line-secondary-right-separator 'telephone-line-tan-hollow-right)
-
-  (telephone-line-mode 1))
-
-;; Auto refresh buffers
-(global-auto-revert-mode 1)
-
-;; Use clipboard properly
-(setq select-enable-clipboard t)
-
-;; Show in-progress chords in minibuffer
-(setq echo-keystrokes 0.1)
-
-;; Show column numbers in all buffers
-(column-number-mode t)
-
-;; Highlight currently active line
-(global-hl-line-mode t)
-
-(defalias 'yes-or-no-p 'y-or-n-p)
-(defalias 'auto-tail-revert-mode 'tail-mode)
-
-;; Style line numbers (shown with M-g g)
-(setq linum-format
-      (lambda (line)
-        (propertize
-         (format (concat " %"
-                         (number-to-string
-                          (length (number-to-string
-                                   (line-number-at-pos (point-max)))))
-                         "d ")
-                 line)
-         'face 'linum)))
-
-;; Display tabs as 2 spaces
-(setq tab-width 2)
-
-;; Don't wrap around when moving between buffers
-(setq windmove-wrap-around nil)
-
-(provide 'look-and-feel)
diff --git a/tools/emacs/init/mail-setup.el b/tools/emacs/init/mail-setup.el
deleted file mode 100644
index 71cfb92ff53c..000000000000
--- a/tools/emacs/init/mail-setup.el
+++ /dev/null
@@ -1,90 +0,0 @@
-(require 'notmuch)
-(require 'counsel-notmuch)
-
-(global-set-key (kbd "C-c m") 'notmuch-hello)
-(global-set-key (kbd "C-c C-m") 'counsel-notmuch)
-(global-set-key (kbd "C-c C-e n") 'notmuch-mua-new-mail)
-
-(setq notmuch-cache-dir (format "%s/.cache/notmuch" (getenv "HOME")))
-(make-directory notmuch-cache-dir t)
-
-;; Cache addresses for completion:
-(setq notmuch-address-save-filename (concat notmuch-cache-dir "/addresses"))
-
-;; Don't spam my home folder with drafts:
-(setq notmuch-draft-folder "drafts") ;; relative to notmuch database
-
-;; Mark things as read when archiving them:
-(setq notmuch-archive-tags '("-inbox" "-unread" "+archive"))
-
-;; Show me saved searches that I care about:
-(setq notmuch-saved-searches
-      '((:name "inbox" :query "tag:inbox" :count-query "tag:inbox AND tag:unread" :key "i")
-        (:name "sent" :query "tag:sent" :key "t")
-        (:name "drafts" :query "tag:draft")))
-(setq notmuch-show-empty-saved-searches t)
-
-;; Mail sending configuration
-(setq send-mail-function 'sendmail-send-it) ;; sendmail provided by MSMTP
-(setq notmuch-always-prompt-for-sender t)
-(setq notmuch-mua-user-agent-function
-      (lambda () (format "Emacs %s; notmuch.el %s" emacs-version notmuch-emacs-version)))
-(setq mail-host-address (system-name))
-(setq notmuch-mua-cite-function #'message-cite-original-without-signature)
-
-;; Close mail buffers after sending mail
-(setq message-kill-buffer-on-exit t)
-
-;; Ensure sender is correctly passed to msmtp
-(setq mail-specify-envelope-from t
-      message-sendmail-envelope-from 'header
-      mail-envelope-from 'header)
-
-;; Store sent mail in the correct folder per account
-(setq notmuch-maildir-use-notmuch-insert nil)
-(setq notmuch-fcc-dirs '(("mail@tazj.in" . "tazjin/Sent")))
-
-;; I don't use drafts but I instinctively hit C-x C-s constantly, lets
-;; handle that gracefully.
-(define-key notmuch-message-mode-map (kbd "C-x C-s") #'ignore)
-
-;; MSMTP decrypts passwords using pass, but pinentry doesn't work
-;; correctly in that setup. This forces a warmup of the GPG agent
-;; before sending the message.
-;;
-;; Note that the sending function is advised because the provided hook
-;; for this seems to run at the wrong time.
-(advice-add 'notmuch-mua-send-common :before 'warmup-gpg-agent)
-
-;; Define a telephone-line segment for displaying the count of unread,
-;; important mails in the last window's mode-line:
-(defvar *last-notmuch-count-redraw* 0)
-(defvar *current-notmuch-count* nil)
-
-(defun update-display-notmuch-counts ()
-  "Update and render the current state of the notmuch unread
-  count for display in the mode-line.
-
-  The offlineimap-timer runs every 2 minutes, so it does not make
-  sense to refresh this much more often than that."
-
-  (when (> (- (float-time) *last-notmuch-count-redraw*) 30)
-    (setq *last-notmuch-count-redraw* (float-time))
-    (let* ((inbox-unread (notmuch-saved-search-count "tag:inbox and tag:unread"))
-           (notmuch-count (format "I: %s; D: %s" inbox-unread)))
-      (setq *current-notmuch-count* notmuch-count)))
-
-  (when (and (bottom-right-window-p)
-             ;; Only render if the initial update is done and there
-             ;; are unread mails:
-             *current-notmuch-count*
-             (not (equal *current-notmuch-count* "I: 0; D: 0")))
-    *current-notmuch-count*))
-
-(telephone-line-defsegment telephone-line-notmuch-counts ()
-  "This segment displays the count of unread notmuch messages in
-  the last window's mode-line (if unread messages are present)."
-
-  (update-display-notmuch-counts))
-
-(provide 'mail-setup)
diff --git a/tools/emacs/init/modes.el b/tools/emacs/init/modes.el
deleted file mode 100644
index 19ed2a684349..000000000000
--- a/tools/emacs/init/modes.el
+++ /dev/null
@@ -1,36 +0,0 @@
-;; Initializes modes I use.
-
-(add-hook 'prog-mode-hook 'esk-add-watchwords)
-
-;; Use auto-complete as completion at point
-(defun set-auto-complete-as-completion-at-point-function ()
-  (setq completion-at-point-functions '(auto-complete)))
-
-(add-hook 'auto-complete-mode-hook
-          'set-auto-complete-as-completion-at-point-function)
-
-;; Enable rainbow-delimiters for all things programming
-(add-hook 'prog-mode-hook 'rainbow-delimiters-mode)
-
-;; Enable Paredit & Company in Emacs Lisp mode
-(add-hook 'emacs-lisp-mode-hook 'company-mode)
-
-;; Always highlight matching brackets
-(show-paren-mode 1)
-
-;; Always auto-close parantheses and other pairs
-;; (replaced by smartparens)
-;; (electric-pair-mode)
-
-;; Keep track of recent files
-(recentf-mode)
-
-;; Easily navigate sillycased words
-(global-subword-mode 1)
-
-;; Transparently open compressed files
-(auto-compression-mode t)
-
-;; Show available key chord completions
-
-(provide 'modes)
diff --git a/tools/emacs/init/settings.el b/tools/emacs/init/settings.el
deleted file mode 100644
index 0bcf73b0e794..000000000000
--- a/tools/emacs/init/settings.el
+++ /dev/null
@@ -1,64 +0,0 @@
-(require 'prescient)
-(require 'ivy-prescient)
-(require 'uniquify)
-(require 'ivy-pass)
-
-;; Make ivy go!
-(ivy-mode 1)
-(counsel-mode 1)
-
-(setq ivy-use-virtual-buffers t)
-(setq enable-recursive-minibuffers t)
-
-;; Enable support for prescient in ivy & configure it
-(ivy-prescient-mode)
-(prescient-persist-mode)
-
-;; Move files to trash when deleting
-(setq delete-by-moving-to-trash t)
-
-;; We don't live in the 80s, but we're also not a shitty web app.
-(setq gc-cons-threshold 20000000)
-
-(setq uniquify-buffer-name-style 'forward)
-
-; Fix some defaults
-(setq visible-bell nil
-      inhibit-startup-message t
-      color-theme-is-global t
-      sentence-end-double-space nil
-      shift-select-mode nil
-      uniquify-buffer-name-style 'forward
-      whitespace-style '(face trailing lines-tail tabs)
-      whitespace-line-column 80
-      default-directory "~"
-      fill-column 80
-      ediff-split-window-function 'split-window-horizontally)
-
-(add-to-list 'safe-local-variable-values '(lexical-binding . t))
-(add-to-list 'safe-local-variable-values '(whitespace-line-column . 80))
-
-(set-default 'indent-tabs-mode nil)
-
-;; UTF-8 please
-(setq locale-coding-system 'utf-8) ; pretty
-(set-terminal-coding-system 'utf-8) ; pretty
-(set-keyboard-coding-system 'utf-8) ; pretty
-(set-selection-coding-system 'utf-8) ; please
-(prefer-coding-system 'utf-8) ; with sugar on top
-
-;; Make emacs behave sanely (overwrite selected text)
-(delete-selection-mode 1)
-
-;; Keep your temporary files in tmp, emacs!
-(setq auto-save-file-name-transforms
-      `((".*" ,temporary-file-directory t)))
-(setq backup-directory-alist
-      `((".*" . ,temporary-file-directory)))
-
-(remove-hook 'kill-buffer-query-functions 'server-kill-buffer-query-function)
-
-;; Show time in 24h format
-(setq display-time-24hr-format t)
-
-(provide 'settings)
diff --git a/tools/emacs/init/term-setup.el b/tools/emacs/init/term-setup.el
deleted file mode 100644
index cd4f9c25ef73..000000000000
--- a/tools/emacs/init/term-setup.el
+++ /dev/null
@@ -1,36 +0,0 @@
-;; Utilities for X11 terminal buffers.
-
-(defvar x11-terminal-program "gnome-terminal"
-  "Which X11 terminal application to use.")
-
-(defvar x11-terminal-buffer-prefix "Term"
-  "String prefix for X11 terminal buffer names.")
-
-(defun open-or-create-terminal-buffer (buffer-name)
-  "Switch to the buffer with BUFFER-NAME or create a new buffer
-  running the configured X11 terminal."
-  (let ((buffer (get-buffer buffer-name)))
-    (if (not buffer)
-        (run-external-command x11-terminal-program)
-      (switch-to-buffer buffer))))
-
-(defun is-terminal-buffer (buffer)
-  "Determine whether BUFFER runs an X11 terminal."
-  (and (equal 'exwm-mode (buffer-local-value 'major-mode buffer))
-       (s-starts-with? x11-terminal-buffer-prefix (buffer-name buffer))))
-
-(defun counsel-switch-to-terminal ()
-  "Switch to an X11 terminal buffer, or create a new one."
-  (interactive)
-  (let ((terms (-map #'buffer-name
-                     (-filter #'is-terminal-buffer (buffer-list)))))
-    (if terms
-        (ivy-read "Switch to terminal buffer: "
-                  (cons "New terminal" terms)
-                  :caller 'counsel-switch-to-terminal
-                  :preselect (s-concat "^" x11-terminal-buffer-prefix)
-                  :require-match t
-                  :action #'open-or-create-terminal-buffer)
-      (run-external-command x11-terminal-program))))
-
-(provide 'term-setup)