blob: 9b88dcaf9b45c5977c3156649432a625092141d8 (
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
|
# This file builds an Emacs pre-configured with the packages I need
# and my personal Emacs configuration.
{ depot, lib, pkgs, ... }:
lib.makeOverridable
(
{ emacs ? pkgs.emacs31-pgtk
, extraConfig ? null
, preInit ? ""
, overridePackages ? (_: x: x)
}:
let
emacsPackages = (pkgs.emacsPackagesFor emacs);
emacsWithPackages = emacsPackages.emacsWithPackages;
# $PATH for binaries that need to be available to Emacs
emacsBinPath = lib.makeBinPath [
emacsPackages.checkedTelega
pkgs.libwebp # for dwebp, required by telega
];
# tree-sitter grammars for various ts-modes
customTreesitGrammars = emacs.pkgs.treesit-grammars.with-grammars (g: with g; [
tree-sitter-bash
tree-sitter-c
tree-sitter-cmake
tree-sitter-cpp
tree-sitter-css
tree-sitter-dockerfile
tree-sitter-go
tree-sitter-gomod
tree-sitter-gleam
tree-sitter-hcl
tree-sitter-html
tree-sitter-java
tree-sitter-json
tree-sitter-latex
tree-sitter-make
tree-sitter-nix
tree-sitter-python
tree-sitter-rust
tree-sitter-sql
tree-sitter-toml
tree-sitter-typescript
tree-sitter-yaml
]);
tazjinsEmacs = pkgfun: (emacsWithPackages (epkgs: pkgfun (with epkgs; [
ace-window
avy
bazel
browse-kill-ring
cargo
clojure-mode
consult
direnv
elixir-mode
elm-mode
erlang
geiser
geiser-chez
gleam-ts-mode
go-mode
google-c-style
gptel
haskell-mode
ht
hydra
idle-highlight-mode
inspector
jq-mode
kotlin-mode
# TODO(tazjin): Temporarily removed from MELPA due to hacked upstream repository
# https://github.com/kubernetes-el/kubernetes-el/issues/383#issuecomment-4144867926
# https://github.com/melpa/melpa/pull/9918
# kubernetes
magit
markdown-toc
multiple-cursors
nginx-mode
nix-mode
notmuch
paredit
pinentry
protobuf-mode
rainbow-delimiters
rainbow-mode
request
restclient
rust-mode
sly
string-edit-at-point
terraform-mode
undo-tree
uuidgen
vterm
web-mode
websocket
which-key
yasnippet
zoxide
# Wonky stuff
checkedTelega
customTreesitGrammars # TODO(tazjin): how is this *supposed* to work?!
# Custom depot packages (either ours, or overridden ones)
tvlPackages.dottime
tvlPackages.niri
tvlPackages.nix-util
tvlPackages.notable
tvlPackages.passively
tvlPackages.rcirc
tvlPackages.term-switcher
tvlPackages.treecrumbs
tvlPackages.tvl
tvlPackages.gptel-memory
tvlPackages.reka
# Dynamic/native modules
depot.users.tazjin.gio-list-apps
])));
in
(pkgs.writeShellScriptBin "tazjins-emacs" ''
export PATH="${emacsBinPath}:$PATH"
exec ${tazjinsEmacs (overridePackages emacsPackages)}/bin/emacs \
--debug-init \
--no-site-file \
--no-site-lisp \
--no-init-file \
--directory ${./config} ${if extraConfig != null then "--directory ${extraConfig}" else ""} \
--eval "(add-to-list 'treesit-extra-load-path \"${customTreesitGrammars}/lib\")" \
${preInit} --eval "(require 'init)" $@
'').overrideAttrs
(_: {
passthru = {
inherit emacs emacsPackages emacsBinPath;
};
})
)
{ }
|