56c9fa9722
The latest Emacs versions removed some (private) functions that telega depends on, and this is fixed in HEAD of telega.el. However, without these fixes, the unstable version of telega doesn't build because the patch Nix tries to apply doesn't match the source anymore. The patch itself doesn't seem to do anything relevant for me. Change-Id: Ib9a042c636cb438b2b15d231a07afd5c02be72ee Reviewed-on: https://cl.tvl.fyi/c/depot/+/3294 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
148 lines
3.4 KiB
Nix
148 lines
3.4 KiB
Nix
# 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.tvlPackages.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 TODO(tazjin): where did this go?
|
|
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
|
|
rust-mode
|
|
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
|
|
telega
|
|
]))));
|
|
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
|
|
) {}
|