tvl-depot/emacs.nix

212 lines
4.9 KiB
Nix
Raw Normal View History

# Derivation for Emacs pre-configured with packages that I need.
#
# * TODO 2018-06-15: sly removed due to build error in unstable
{ pkgs }:
with pkgs.unstable; with emacsPackagesNg;
let emacsWithPackages = (emacsPackagesNgGen emacs).emacsWithPackages;
# The nix-mode in the official repositories is old and annoying to
# work with, pin it to something newer instead:
nix-mode = emacsPackagesNg.melpaBuild {
pname = "nix-mode";
version = "20180306";
src = fetchFromGitHub {
owner = "NixOS";
repo = "nix-mode";
rev = "0ac0271f6c8acdbfddfdbb1211a1972ae562ec17";
sha256 = "157vy4xkvaqd76km47sh41wykbjmfrzvg40jxgppnalq9pjxfinp";
};
recipeFile = writeText "nix-mode-recipe" ''
(nix-mode :repo "NixOS/nix-mode" :fetcher github
:files (:defaults (:exclude "nix-mode-mmm.el")))
'';
};
# The default Rust language server mode is not really usable, install
# `eglot` instead and hope for the best.
eglot = emacsPackagesNg.melpaBuild rec {
pname = "eglot";
version = "1.1";
src = fetchFromGitHub {
owner = "joaotavora";
repo = "eglot";
rev = version;
sha256 = "0p3fry60xvh7za0p8pyz4h21nzj6df1cbl9lxdzd19rwfd35fzpp";
};
};
# ivy has not been updated in unstable for a while:
ivySource = fetchFromGitHub {
owner = "abo-abo";
repo = "swiper";
rev = "6f2939485d33e9b28022d3b6912a50669dcdd596";
sha256 = "1f2i6hkcbiqdw7fr9vabsm32a0gy647llzki6b97yv8vwa0klh2q";
};
withIvySources = pname: recipe: emacsPackagesNg.melpaBuild {
inherit pname;
version = "20180616";
recipeFile = builtins.toFile "${pname}-recipe" recipe;
src = ivySource;
};
newIvy.ivy = withIvySources "ivy" ''
(ivy :files (:defaults
(:exclude "swiper.el" "counsel.el" "ivy-hydra.el")
"doc/ivy-help.org"))
'';
newIvy.counsel = withIvySources "counsel" ''
(counsel :files ("counsel.el"))
'';
newIvy.swiper = withIvySources "swiper" ''
(swiper :files ("swiper.el"))
'';
newIvy.ivy-pass = melpaBuild {
pname = "ivy-pass";
version = "20170812";
src = fetchFromGitHub {
owner = "ecraven";
repo = "ivy-pass";
rev = "5b523de1151f2109fdd6a8114d0af12eef83d3c5";
sha256 = "18crb4zh2pjf0cmv3b913m9vfng27girjwfqc3mk7vqd1r5a49yk";
};
};
2018-06-29 13:06:52 +02:00
counsel-notmuch = melpaBuild {
pname = "counsel-notmuch";
version = "20171223";
packageRequires = [
newIvy.ivy
pkgs.notmuch
];
src = fetchFromGitHub {
owner = "fuxialexander";
repo = "counsel-notmuch";
rev = "ac1aaead81c6860d7b8324cc1c00bcd52de5e9ca";
sha256 = "19frcrz6bx7d7v1hkg0xv7zmbk2sydlsdzn1s96cqzjk1illchkz";
};
};
# prescient & ivy-prescient provide better filtering in ivy/counsel,
# but they are not in nixpkgs yet:
prescientSource = fetchFromGitHub {
owner = "raxod502";
repo = "prescient.el";
rev = "27c94636489d5b062970a0f7e9041ca186b6b659";
sha256 = "05jk8cms48dhpbaimmx3akmnq32fgbc0q4dja7lvpvssmq398cn7";
};
prescient = emacsPackagesNg.melpaBuild {
pname = "prescient";
version = "1.0";
src = prescientSource;
recipeFile = writeText "prescient-recipe" ''
(prescient :files ("prescient.el"))
'';
};
ivy-prescient = emacsPackagesNg.melpaBuild {
pname = "ivy-prescient";
version = "1.0";
src = prescientSource;
packageRequires = [ prescient newIvy.ivy ];
recipeFile = writeText "ivy-prescient-recipe" ''
(ivy-prescient :files ("ivy-prescient.el"))
'';
};
sly = emacsPackagesNg.melpaBuild {
pname = "sly";
version = "20180613";
packageRequires = [ elpaPackages.company ];
src = fetchFromGitHub {
owner = "joaotavora";
repo = "sly";
rev = "a05b45f1564a86a9d49707c9c570da6c3a56b6e5";
sha256 = "1c9xzppxlnak1px0dv0ljpp4izfj4377lncvrcb1jaiyh8z8ry48";
};
recipeFile = writeText "sly-recipe" ''
(sly :files ("*.el"
("lib" "lib/*")
("contrib" "contrib/*")))
'';
};
in emacsWithPackages(epkgs:
# Actual ELPA packages (the enlightened!)
(with epkgs.elpaPackages; [
ace-window
adjust-parens
avy
company
pinentry
rainbow-mode
undo-tree
which-key
]) ++
# MELPA packages:
(with epkgs.melpaPackages; [
2018-07-03 18:58:22 +02:00
alchemist
browse-kill-ring
cargo
dash
dash-functional
dockerfile-mode
edit-server
2018-07-14 16:18:21 +02:00
elixir-mode
erlang
exwm
go-mode
gruber-darker-theme
haskell-mode
ht
2018-06-19 15:21:34 +02:00
hydra
idle-highlight-mode
2018-06-08 00:13:27 +02:00
jq-mode
kotlin-mode
magit
markdown-mode
markdown-toc
multi-term
multiple-cursors
2018-04-23 15:33:05 +02:00
nginx-mode
paredit
password-store
pg
rainbow-delimiters
restclient
rust-mode
s
smartparens
string-edit
telephone-line
terraform-mode
2018-03-17 21:47:27 +01:00
toml-mode
2018-06-22 10:32:01 +02:00
use-package
uuidgen
web-mode
websocket
yaml-mode
]) ++
# Use custom updated ivy packages
(lib.attrValues newIvy) ++
# Custom packaged Emacs packages:
2018-06-29 13:06:52 +02:00
[ nix-mode eglot prescient ivy-prescient counsel-notmuch pkgs.notmuch sly ]
)