tvl-depot/emacs/default.nix
William Carroll edea127e07 Support building wpcarros-emacs
I'm using a Makefile until I can remember the command:

```shell
> nix-env -f . -i
```

This will install (i.e. `-i`) any derivations instantiated from the Nix
expression resolvable by `-f`. Ideally the incantation will look something like
this:

```shell
> nix-env -f '<universe>' -iA emacs
```

Informing `nix-env` to install all of the derivations created by the expression
at attribute `emacs` in my `<universe>` repository. For now two things are
preventing this:

1. `emacs` isn't an attribute in my top-level expression defined in the
   `default.nix`.
2. If I do add `emacs` as an attribute and call the above command, my usage of
   `readTree` results in `pkgs` missing `.lib` and a few other stdlib commands
   that are available in `(import <nixpkgs> {})`.

A fix for both of these should be forthcoming.
2020-01-31 13:20:18 +00:00

146 lines
3.5 KiB
Nix

{
pkgs ? import <nixpkgs> {},
depot ? import <depot> {},
...
}:
let
utils = import ~/briefcase/utils;
emacsBinPath = pkgs.lib.strings.makeBinPath [ pkgs.terminator ];
emacsWithPackages = (pkgs.emacsPackagesNgGen pkgs.emacs26).emacsWithPackages;
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
restclient
package-lint
parsec
magit-popup
direnv
emr
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
]) ++
(with depot.tools.emacs-pkgs; [
dottime
term-switcher
]));
# TODO: Do I need `pkgs.lib.fix`?
in pkgs.lib.fix(self: l: f: pkgs.writeShellScriptBin "wpcarros-emacs" ''
# TODO: Is this the best way to handle environment variables using Nix?
export BRIEFCASE=$HOME/briefcase
export DEPOT=$HOME/depot
export PATH="${emacsBinPath}:$PATH"
exec ${wpcarrosEmacs}/bin/emacs \
--debug-init \
--no-site-file \
--no-site-lisp \
--directory ${ ./.emacs.d/vendor } \
--directory ${ ./.emacs.d/wpc } \
--load ${ ./.emacs.d/wpc/wpc-package.el } \
--load ${ ./.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 an Emacs binary outside of /nix/store. On gLinux,
# this will ensure that X and GL linkage behaves as expected.
withLocalEmacs = emacsBin: pkgs.writeShellScriptBin "wpcarros-emacs" ''
# TODO: Is this the best way to handle environment variables using Nix?
export BRIEFCASE=$HOME/briefcase
export DEPOT=$HOME/depot
export PATH="${emacsBinPath}:$PATH"
export EMACSLOADPATH="${wpcarrosEmacs.deps}/share/emacs/site-lisp:"
exec ${emacsBin} \
--debug-init \
--no-site-file \
--no-site-lisp \
--directory ${ ./.emacs.d/vendor } \
--directory ${ ./.emacs.d/wpc } \
--load ${ ./.emacs.d/wpc/wpc-package.el } \
--load ${ ./.emacs.d/init.el } \
--no-init-file $@
'';
}) null utils.identity