snix/users/tazjin/emacs/default.nix
sterni 25d28cb1d5 chore(3p/sources): bump channels & overlays (2025-03-07)
* Bump Emacs 29 to 30 to address CVEs in prior versions:
  https://github.com/NixOS/nixpkgs/pull/386174

* //3p/overlays/tvl:

  - Drop upstreamed fix for buildkite-agent
  - Drop tpm2-pkcs11 patch for an issue that has been
    addressed in 1.9.1.
  - Drop Nix 2.3 patch for home-manager. An alternative
    to it has been upstreamed in
    <https://github.com/nix-community/home-manager/pull/5067>.

* //users/flokli/presentations: disable derivations that have
  been failing since the latest chromium upgrade (presumably).
  reveal-md … --print fails to export a PDF. Enabling debug
  output reveals that a timeout in pupeteer is hit.

Change-Id: Id83eb5e5fe2db77e648817c5c737b2f95b43deeb
Reviewed-on: https://cl.tvl.fyi/c/depot/+/13217
Autosubmit: sterni <sternenseemann@systemli.org>
Reviewed-by: sterni <sternenseemann@systemli.org>
Reviewed-by: flokli <flokli@flokli.de>
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
2025-03-11 07:28:19 +00:00

154 lines
3.7 KiB
Nix

# This file builds an Emacs pre-configured with the packages I need
# and my personal Emacs configuration.
{ depot, lib, pkgs, ... }:
pkgs.makeOverridable
({ emacs ? pkgs.emacs-pgtk }:
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
];
identity = x: x;
# 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-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-link
ace-window
avy
bazel
browse-kill-ring
cargo
clojure-mode
company
company-prescient
consult
deft
direnv
elixir-mode
elm-mode
erlang
go-mode
google-c-style
gruber-darker-theme
haskell-mode
ht
hydra
idle-highlight-mode
inspector
jq-mode
kotlin-mode
kubernetes
magit
markdown-toc
multiple-cursors
nginx-mode
nix-mode
notmuch
paredit
password-store
pinentry
prescient
protobuf-mode
rainbow-delimiters
rainbow-mode
request
restclient
rust-mode
sly
string-edit-at-point
terraform-mode
undo-tree
uuidgen
vertico
vertico-prescient
vterm
web-mode
websocket
which-key
xelb
yasnippet
zetteldeft
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.passively
tvlPackages.rcirc
tvlPackages.term-switcher
tvlPackages.treecrumbs
tvlPackages.tvl
# Dynamic/native modules
depot.users.tazjin.gio-list-apps
])));
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 "(add-to-list 'treesit-extra-load-path \"${customTreesitGrammars}/lib\")" \
--eval "(require 'init)" $@
'').overrideAttrs
(_: {
passthru = {
# Expose original Emacs used for my configuration.
inherit emacs;
# Expose the pure emacs with all packages.
inherit emacsPackages;
emacsWithPackages = tazjinsEmacs f;
# 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;
};
}))
null
identity
)
{ }