diff options
Diffstat (limited to 'emacs/default.nix')
-rw-r--r-- | emacs/default.nix | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/emacs/default.nix b/emacs/default.nix new file mode 100644 index 000000000000..9ff5c1f2dfd1 --- /dev/null +++ b/emacs/default.nix @@ -0,0 +1,140 @@ +{ + 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 + 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 |