c1a5d7d62a
Packages the telega-server binary and adds the required mode into Emacs. Unread message count is displayed in the modeline, which is neat. Probably need to figure out some key bindings for this.
128 lines
2.9 KiB
Nix
128 lines
2.9 KiB
Nix
# This file builds an Emacs pre-configured with the packages I need
|
|
# and my personal Emacs configuration.
|
|
|
|
{ pkgs, ... }:
|
|
|
|
with pkgs;
|
|
with third_party.emacsPackagesNg;
|
|
with third_party.emacs;
|
|
|
|
let
|
|
localPackages = pkgs.tools.emacs-pkgs;
|
|
emacsWithPackages = (third_party.emacsPackagesNgGen third_party.emacs26).emacsWithPackages;
|
|
|
|
# $PATH for binaries that need to be available to Emacs
|
|
emacsBinPath = lib.makeBinPath [ third_party.telega ];
|
|
|
|
identity = x: x;
|
|
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; [
|
|
browse-kill-ring
|
|
cargo
|
|
clojure-mode
|
|
counsel
|
|
counsel-notmuch
|
|
dash-functional
|
|
direnv
|
|
dockerfile-mode
|
|
elixir-mode
|
|
elm-mode
|
|
erlang
|
|
exwm
|
|
go-mode
|
|
gruber-darker-theme
|
|
haskell-mode
|
|
ht
|
|
hydra
|
|
idle-highlight-mode
|
|
intero
|
|
ivy
|
|
ivy-pass
|
|
ivy-prescient
|
|
jq-mode
|
|
kotlin-mode
|
|
lsp-mode
|
|
magit
|
|
markdown-toc
|
|
multi-term
|
|
multiple-cursors
|
|
nginx-mode
|
|
nix-mode
|
|
notmuch # this comes from pkgs.third_party
|
|
paredit
|
|
password-store
|
|
pg
|
|
prescient
|
|
racket-mode
|
|
rainbow-delimiters
|
|
refine
|
|
restclient
|
|
request
|
|
sly
|
|
string-edit
|
|
swiper
|
|
telega
|
|
telephone-line
|
|
terraform-mode
|
|
toml-mode
|
|
transient
|
|
use-package
|
|
uuidgen
|
|
vterm
|
|
web-mode
|
|
websocket
|
|
which-key
|
|
xelb
|
|
yaml-mode
|
|
]) ++
|
|
|
|
# Custom packages
|
|
(with localPackages; [
|
|
carp-mode
|
|
dottime
|
|
nix-util
|
|
term-switcher
|
|
]))));
|
|
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
|