blob: 082346da75b94153c3a711df9797fcbcf7ba1e41 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
# This file builds an Emacs pre-configured with the packages I need
# and my personal Emacs configuration.
#
# On NixOS machines, this Emacs currently does not support
# Imagemagick, see https://github.com/NixOS/nixpkgs/issues/70631.
#
# Forcing Emacs to link against Imagemagick currently causes libvterm
# to segfault, which is a lot less desirable than not having telega
# render images correctly.
{ lib, pkgs, ... }:
pkgs.makeOverridable({ emacs ? pkgs.emacsGcc }:
let
emacsWithPackages = (pkgs.emacsPackagesGen emacs).emacsWithPackages;
# $PATH for binaries that need to be available to Emacs
emacsBinPath = lib.makeBinPath [ pkgs.emacsPackages.telega ];
identity = x: x;
tazjinsEmacs = pkgfun: (emacsWithPackages(epkgs: pkgfun(
# Actual ELPA packages (the enlightened!)
(with epkgs.elpaPackages; [
avy
flymake
pinentry
rainbow-mode
undo-tree
xelb
]) ++
# MELPA packages:
(with epkgs.melpaPackages; [
ace-window
ace-link
bazel-mode
browse-kill-ring
cargo
company
clojure-mode
cmake-mode
counsel
counsel-notmuch
dash-functional
direnv
dockerfile-mode
eglot
elixir-mode
elm-mode
erlang
go-mode
gruber-darker-theme
haskell-mode
ht
hydra
idle-highlight-mode
ivy
ivy-prescient
jq-mode
kotlin-mode
lsp-mode
magit
markdown-toc
meson-mode
multi-term
multiple-cursors
nginx-mode
nix-mode
notmuch # this comes from pkgs.third_party
paredit
password-store
polymode
prescient
protobuf-mode
rainbow-delimiters
refine
request
restclient
sly
string-edit
swiper
telephone-line
terraform-mode
toml-mode
transient
use-package
uuidgen
web-mode
websocket
which-key
yaml-mode
yasnippet
]) ++
# Other external packages:
(with epkgs; [
exwm
google-c-style
telega
vterm
]) ++
# Custom packages
(with epkgs.tvlPackages; [
dottime
nix-util
term-switcher
tvl
# patched / overridden versions of packages
rcirc
]))));
in lib.fix(self: l: f: pkgs.writeShellScriptBin "tazjins-emacs" ''
export PATH="${emacsBinPath}:$PATH"
exec ${tazjinsEmacs f}/bin/emacs \
--debug-init \
--no-site-file \
--no-site-lisp \
--no-init-file \
--directory ${./config} ${if l != null then "--directory ${l}" else ""} \
--eval "(require 'init)" $@
'' // {
# Call overrideEmacs with a function (pkgs -> pkgs) to modify the
# packages that should be included in this Emacs distribution.
overrideEmacs = f': self l f';
# Call withLocalConfig with the path to a *folder* containing a
# `local.el` which provides local system configuration.
withLocalConfig = confDir: self confDir f;
# Build a derivation that uses the specified local Emacs (i.e.
# built outside of Nix) instead
withLocalEmacs = emacsBin: pkgs.writeShellScriptBin "tazjins-emacs" ''
export PATH="${emacsBinPath}:$PATH"
export EMACSLOADPATH="${(tazjinsEmacs f).deps}/share/emacs/site-lisp:"
exec ${emacsBin} \
--debug-init \
--no-site-file \
--no-site-lisp \
--no-init-file \
--directory ${./config} \
${if l != null then "--directory ${l}" else ""} \
--eval "(require 'init)" $@
'';
}) null identity
) {}
|