tvl-depot/users/tazjin/emacs/default.nix
Vincent Ambo 56c9fa9722 fix(tazjin/emacs): Temporary fixes to use unstable telega
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
2021-08-08 13:18:17 +00:00

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
) {}