subtree(users/wpcarro): docking briefcase at '24f5a642
'
git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15c
git-subtree-split:24f5a642af
Change-Id: I6105b3762b79126b3488359c95978cadb3efa789
This commit is contained in:
commit
019f8fd211
766 changed files with 175420 additions and 0 deletions
191
users/wpcarro/emacs/default.nix
Normal file
191
users/wpcarro/emacs/default.nix
Normal file
|
@ -0,0 +1,191 @@
|
|||
{ pkgs, depot, ... }:
|
||||
|
||||
let
|
||||
inherit (builtins) path;
|
||||
inherit (depot.third_party) emacsPackagesGen emacs27;
|
||||
inherit (pkgs) writeShellScript writeShellScriptBin;
|
||||
inherit (pkgs.lib.strings) concatStringsSep makeBinPath;
|
||||
|
||||
emacsBinPath = makeBinPath (with pkgs; [
|
||||
ripgrep
|
||||
bat
|
||||
fd
|
||||
fzf
|
||||
pass
|
||||
tokei
|
||||
nmap
|
||||
tldr
|
||||
diskus
|
||||
jq
|
||||
pup
|
||||
exa
|
||||
gitAndTools.hub
|
||||
kubectl
|
||||
google-cloud-sdk
|
||||
xsv
|
||||
scrot
|
||||
clipmenu
|
||||
xorg.xset
|
||||
direnv
|
||||
nix
|
||||
]);
|
||||
|
||||
emacsWithPackages = (emacsPackagesGen emacs27).emacsWithPackages;
|
||||
|
||||
wpcarrosEmacs = emacsWithPackages (epkgs:
|
||||
(with epkgs.elpaPackages; [
|
||||
exwm
|
||||
]) ++
|
||||
|
||||
(with epkgs.melpaPackages; [
|
||||
org-bullets
|
||||
sly
|
||||
notmuch
|
||||
elm-mode
|
||||
ts
|
||||
vterm
|
||||
base16-theme
|
||||
password-store
|
||||
clipmon # TODO: Prefer an Emacs client for clipmenud.
|
||||
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
|
||||
telephone-line
|
||||
which-key
|
||||
all-the-icons
|
||||
all-the-icons-ivy
|
||||
ivy
|
||||
ivy-pass
|
||||
ivy-prescient
|
||||
restclient
|
||||
package-lint
|
||||
parsec
|
||||
magit-popup
|
||||
direnv
|
||||
alert
|
||||
nix-mode
|
||||
racer
|
||||
rust-mode
|
||||
rainbow-delimiters
|
||||
racket-mode
|
||||
lispyville
|
||||
elisp-slime-nav
|
||||
py-yapf
|
||||
reason-mode
|
||||
elixir-mode
|
||||
go-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
|
||||
flymake-shellcheck
|
||||
fish-mode
|
||||
tuareg
|
||||
haskell-mode
|
||||
lsp-haskell
|
||||
use-package
|
||||
general
|
||||
clojure-mode
|
||||
cider
|
||||
f
|
||||
dash
|
||||
company
|
||||
counsel
|
||||
flycheck
|
||||
]));
|
||||
|
||||
vendorDir = path {
|
||||
path = ./.emacs.d/vendor;
|
||||
name = "emacs-vendor";
|
||||
};
|
||||
|
||||
# TODO: byte-compile these by packaging each as an Elisp library.
|
||||
wpcDir = path {
|
||||
path = ./.emacs.d/wpc;
|
||||
name = "emacs-libs";
|
||||
};
|
||||
|
||||
wpcPackageEl = path {
|
||||
path = ./.emacs.d/wpc/wpc-package.el;
|
||||
name = "wpc-package.el";
|
||||
};
|
||||
|
||||
initEl = path {
|
||||
path = ./.emacs.d/init.el;
|
||||
name = "init.el";
|
||||
};
|
||||
|
||||
loadPath = concatStringsSep ":" [
|
||||
wpcDir
|
||||
vendorDir
|
||||
# TODO: Explain why the trailing ":" is needed.
|
||||
"${wpcarrosEmacs.deps}/share/emacs/site-lisp:"
|
||||
];
|
||||
|
||||
withEmacsPath = { emacsBin, briefcasePath ? "$HOME/briefcase" }:
|
||||
writeShellScriptBin "wpcarros-emacs" ''
|
||||
export XMODIFIERS=emacs
|
||||
export BRIEFCASE=${briefcasePath}
|
||||
export GOOGLE_BRIEFCASE="$HOME/google-briefcase"
|
||||
export PATH="${emacsBinPath}:$PATH"
|
||||
export EMACSLOADPATH="${loadPath}"
|
||||
exec ${emacsBin} \
|
||||
--debug-init \
|
||||
--no-init-file \
|
||||
--no-site-file \
|
||||
--no-site-lisp \
|
||||
--load ${initEl} \
|
||||
"$@"
|
||||
'';
|
||||
in {
|
||||
inherit initEl withEmacsPath;
|
||||
|
||||
# I need to start my Emacs from CI without the call to `--load ${initEl}`.
|
||||
runScript = { script, briefcasePath }:
|
||||
writeShellScript "run-emacs-script" ''
|
||||
export BRIEFCASE=${briefcasePath}
|
||||
export PATH="${emacsBinPath}:$PATH"
|
||||
export EMACSLOADPATH="${wpcDir}:${vendorDir}:${wpcarrosEmacs.deps}/share/emacs/site-lisp"
|
||||
exec ${wpcarrosEmacs}/bin/emacs \
|
||||
--no-site-file \
|
||||
--no-site-lisp \
|
||||
--no-init-file \
|
||||
--script ${script} \
|
||||
"$@"
|
||||
'';
|
||||
|
||||
# Use `nix-env -f '<briefcase>' emacs.nixos` to install `wpcarros-emacs` on
|
||||
# NixOS machines.
|
||||
nixos = { briefcasePath ? "$HOME/briefcase" }: withEmacsPath {
|
||||
inherit briefcasePath;
|
||||
emacsBin = "${wpcarrosEmacs}/bin/emacs";
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue