Preferring to use the `general` package for defining leader-prefixed keybindings than `evil-leader`. This TODO has existed for quite awhile, so I'm pleased to finish it! During the cleanup, I deleted some keybindings that I no longer used.
		
			
				
	
	
		
			140 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			140 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
 |