blob: c980c678d62507ee2d8c63905c40b86923adb255 (
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
# 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.
{ depot, ... }:
with depot;
with third_party.emacsPackages;
with third_party.emacs;
let
emacsWithPackages = (third_party.emacsPackagesGen third_party.emacs26).emacsWithPackages;
# $PATH for binaries that need to be available to Emacs
emacsBinPath = lib.makeBinPath [ third_party.telega ];
identity = x: x;
# EXWM straight from GitHub. As of 2020-02-07, XELB in nixpkgs is
# already at a recent enough version and does not need to be
# overridden.
exwmMaster = exwm.overrideAttrs(_: {
src = third_party.fetchFromGitHub {
owner = "ch11ng";
repo = "exwm";
rev = "48db94f48bea1137132345abfe8256cfc6219248";
sha256 = "0jj12z6m5kvanq19gds3jpvid2mg8w28bbbq9iycl751y2sj4l1r";
};
});
tazjinsEmacs = pkgfun: (emacsWithPackages(epkgs: pkgfun(
# Actual ELPA packages (the enlightened!)
(with epkgs.elpaPackages; [
ace-window
avy
pinentry
rainbow-mode
undo-tree
]) ++
# MELPA packages:
(with epkgs.melpaPackages; [
ace-link
browse-kill-ring
cargo
clojure-mode
cmake-mode
counsel
counsel-notmuch
dash-functional
direnv
dockerfile-mode
elixir-mode
elm-mode
erlang
geiser
go-mode
gruber-darker-theme
haskell-mode
ht
hydra
idle-highlight-mode
intero
ivy
ivy-pass
ivy-prescient
jq-mode
kotlin-mode
lispy
lsp-mode
magit
markdown-toc
multi-term
multiple-cursors
nginx-mode
nix-mode
notmuch # this comes from pkgs.third_party
org-journal
org-ql
paredit
password-store
pg
prescient
racket-mode
rainbow-delimiters
refine
request
restclient
sly
string-edit
swiper
telega
telephone-line
terraform-mode
toml-mode
transient
use-package
uuidgen
web-mode
websocket
which-key
xelb
yaml-mode
(vterm.overrideAttrs(_: {
src = third_party.fetchFromGitHub{
owner = "akermu";
repo = "emacs-libvterm";
rev = "58b4cc40ee9872a08fc5cbfee78ad0e195a3306c";
sha256 = "1w5yfl8nq4k7xyldf0ivzv36vhz3dwdzk6q2vs3xwpx6ljy52px6";
};
}))
]) ++
# Custom packages
(with depot.tools.emacs-pkgs; [
carp-mode
exwmMaster
dottime
nix-util
term-switcher
# patched version of rcirc
depot.third_party.emacs.rcirc
]))));
in lib.fix(self: l: f: third_party.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: third_party.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
|