141 lines
3.6 KiB
Nix
141 lines
3.6 KiB
Nix
|
{ 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-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
|