diff options
author | William Carroll <wpcarro@gmail.com> | 2020-01-06T14·58+0000 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2020-01-17T10·56+0000 |
commit | 069ca630828435280cd41e30d3e75057180f333c (patch) | |
tree | 7d3e0d9f438386b9af284ea13412282abff8e319 | |
parent | 7175d230c2cb2e5d90a25bcbd012ed75eaa96860 (diff) |
WIP: Nixify Emacs setup
The things that I dislike about this setup are: 1. `xref-find-definitions` takes me to `/nix/store`, which is a read-only version of the source code, so I cannot edit it, which doesn't feel lispy. 2. I need to rebuild the derivation when I change something, which also doesn't feel lispy. There are ways to circumvent both of these drawbacks, but for now, I'm checking this in only to later revert it.
-rw-r--r-- | configs/shared/.emacs.d/init.el | 10 | ||||
-rw-r--r-- | configs/shared/.emacs.d/wpc/packages/wpc-misc.el | 2 | ||||
-rw-r--r-- | configs/shared/.xsessionrc.shared | 7 | ||||
-rw-r--r-- | emacs.nix | 141 |
4 files changed, 155 insertions, 5 deletions
diff --git a/configs/shared/.emacs.d/init.el b/configs/shared/.emacs.d/init.el index e07157c70f3f..c02b56f3f864 100644 --- a/configs/shared/.emacs.d/init.el +++ b/configs/shared/.emacs.d/init.el @@ -1,4 +1,8 @@ (require 'wpc-package "~/.emacs.d/wpc/packages/wpc-package.el") +(require 'f) +(setq user-init-file (or load-file-name (buffer-file-name))) +(setq user-emacs-directory (f-dirname user-init-file)) +;; TODO: Troubleshoot broken terminator. ;; load order is intentional (require 'constants) @@ -11,7 +15,7 @@ (require 'kaomoji) ;; Google -(require 'google-stuff) +;; (require 'google-stuff) ;; Laptop XF-functionality (require 'pulse-audio) @@ -41,7 +45,7 @@ (require 'wpc-lisp) (require 'wpc-haskell) (require 'wpc-reasonml) -(require 'wpc-ocaml) +;; (require 'wpc-ocaml) (require 'wpc-elixir) (require 'wpc-nix) (require 'wpc-rust) @@ -50,3 +54,5 @@ (require 'wpc-javascript) (require 'wpc-java) (require 'wpc-prolog) + +(run-hooks 'after-init-hook) diff --git a/configs/shared/.emacs.d/wpc/packages/wpc-misc.el b/configs/shared/.emacs.d/wpc/packages/wpc-misc.el index a6b1aab50b55..8af54c36ca80 100644 --- a/configs/shared/.emacs.d/wpc/packages/wpc-misc.el +++ b/configs/shared/.emacs.d/wpc/packages/wpc-misc.el @@ -13,7 +13,7 @@ (display-time-mode 1) ;; disable custom variable entries from being written to ~/.emacs.d/init.el -(setq custom-file "~/.emacs.d/custom.el") +(setq custom-file "/tmp/custom.el") (load custom-file 'noerror) ;; integrate Emacs with X11 clipboard diff --git a/configs/shared/.xsessionrc.shared b/configs/shared/.xsessionrc.shared index 5c9da5b5a3be..f0f8355a820d 100644 --- a/configs/shared/.xsessionrc.shared +++ b/configs/shared/.xsessionrc.shared @@ -26,7 +26,7 @@ tmux new -d -s main # Start the Emacs server # TODO: Consider starting this with `systemctl --user enable emacs.service` -emacs --daemon +# emacs --daemon # Start ssh-agent eval "$(ssh-agent -s)" @@ -42,4 +42,7 @@ compton & unclutter & # Startup Emacs (and EXWM). -exec dbus-launch --exit-with-session emacs +# TODO: Does this prevent the Emacs server (i.e. `emacs --daemon`) from running? +# NOTE: wpcarros-emacs is built with `nix-env -iA emacs -f .` from +# `CWD=~/Dropbox/dotfiles` +exec dbus-launch --exit-with-session wpcarros-emacs diff --git a/emacs.nix b/emacs.nix new file mode 100644 index 000000000000..8e3bf21d2424 --- /dev/null +++ b/emacs.nix @@ -0,0 +1,141 @@ +{ pkgs ? import <nixpkgs> {} +, tazjinsPkgs ? import (builtins.fetchGit "https://git.tazj.in") { + rev = "4c0e0d715f21eeb62594d198ba1eeccb1a2cfb13"; + } +}: + +let + # TODO: Move this function definition to a prelude.nix or elsewhere. + identity = x: x; + + # Here is a whitelist of all of the binary dependencies that Emacs relies + # on. These are separate from Emacs libraries like dash.el. + emacsBinPath = pkgs.lib.strings.makeBinPath [ pkgs.terminator ]; + + emacsWithPackages = (pkgs.emacsPackagesNgGen pkgs.emacs26).emacsWithPackages; + + # TODO: Learn more about melpa versus elpa to have a preference. + wpcarrosEmacs = emacsWithPackages (epkgs: + (with epkgs.elpaPackages; [ + exwm + ]) ++ + + (with epkgs.melpaPackages; [ + base16-theme + ivy-pass + clipmon # TODO: Prefer an Emacs client for clipmenud. + protobuf-mode # TODO: Determine if this is coming from google-emacs. + docker + evil + evil-collection + evil-magit + evil-leader + evil-commentary + evil-surround + key-chord + add-node-modules-path # TODO: Assess whether or not I need this with Nix. + web-mode + rjsx-mode + tide + prettier-js + flycheck + diminish + doom-themes + neotree # TODO: Remove this dependency from my config. + which-key + ivy + ivy-prescient + all-the-icons + all-the-icons-ivy + alert + nix-mode + racer + rust-mode + rainbow-delimiters + racket-mode + lispyville + elisp-slime-nav + py-yapf + reason-mode + elixir-mode + company + markdown-mode + refine + deferred + magit + request + pcre2el + helpful + exec-path-from-shell # TODO: Determine if Nix solves this problem. + yasnippet + projectile + deadgrep + counsel + counsel-projectile + engine-mode # TODO: Learn what this is. + eglot + dap-mode + lsp-ui + company-lsp + suggest + paradox + emr + flymake-shellcheck + fish-mode + tuareg + haskell-mode + lsp-haskell + use-package + general + clojure-mode + cider + f + dash + company + counsel + flycheck + ivy + magit + ]) ++ + + # tazjin's packages + (with tazjinsPkgs.tools.emacs-pkgs; [ + dottime + term-switcher + ])); + +# TODO: Do I need `pkgs.lib.fix`? +in pkgs.lib.fix(self: l: f: pkgs.writeShellScriptBin "wpcarros-emacs" '' + export PATH="${emacsBinPath}:$PATH" + exec ${wpcarrosEmacs}/bin/emacs \ + --debug-init \ + --no-site-file \ + --no-site-lisp \ + --directory ${ ./configs/shared/emacs.d/vendor } \ + --directory ${ ./configs/shared/emacs.d/wpc } \ + --directory ${ ./configs/shared/emacs.d/wpc/packages } \ + --load ${ ./configs/shared/emacs.d/init.el } \ + --no-init-file $@ +'' // { + # TODO: Ascertain whether I need this. + overrideEmacs = f': self l f'; + + # Call with a local.el file containing local system configuration. + withLocalConfig = confDir: self confDir f; + + # This accepts the path to a non-Nix built Emacs, so that X and GL linkage + # behaves as expected. + withLocalEmacs = emacsBin: pkgs.writeShellScriptBin "wpcarros-emacs" '' + export PATH="${emacsBinPath}:$PATH" + export EMACSLOADPATH="${wpcarrosEmacs.deps}/share/emacs/site-lisp:" + exec ${emacsBin} \ + --debug-init \ + --no-site-file \ + --no-site-lisp \ + --directory ${ ./configs/shared/emacs.d/vendor } \ + --directory ${ ./configs/shared/emacs.d/wpc } \ + --directory ${ ./configs/shared/emacs.d/wpc/packages } \ + --load ${ ./configs/shared/emacs.d/init.el } \ + --no-init-file $@ + ''; +}) null identity |