tvl-depot/emacs.nix
Vincent Ambo fc6126f579 feat(emacs): Install prescient & ivy-prescient
These packages are not in nixpkgs yet (will most likely be added after
the next MELPA import), so they're added here manually.

As both originate from the same source they're added to the same
derivation here by using a custom recipe.
2018-06-13 00:08:23 +02:00

150 lines
3.7 KiB
Nix

# Derivation for Emacs configured with the packages that I need:
{ pkgs }:
let emacsWithPackages = with pkgs; (emacsPackagesNgGen emacs).emacsWithPackages;
sly = with pkgs; emacsPackagesNg.melpaBuild {
pname = "sly";
version = "20180221.1414";
src = fetchFromGitHub {
owner = "joaotavora";
repo = "sly";
rev = "486bfbe95612bcdc0960c490207970a188e0fbb9";
sha256 = "0ib4q4k3h3qn88pymyjjmlmnpizdn1mfg5gpk5a715nqsgxlg09l";
};
recipeFile = fetchurl {
url = "https://raw.githubusercontent.com/melpa/melpa/23b9e64887a290fca7c7ab2718f627f8d728575f/recipes/sly";
sha256 = "1pmyqjk8fdlzwvrlx8h6fq0savksfny78fhmr8r7b07pi20y6n9l";
name = "sly";
};
};
# Building sly-company requires quite some dancing because
# company-mode is required at build time.
trivialBuildWithCompany = with pkgs; callPackage <nixos/pkgs/build-support/emacs/trivial.nix> {
emacs = with pkgs; emacsWithPackages(epkgs: [ epkgs.elpaPackages.company ]);
};
sly-company = with pkgs; trivialBuildWithCompany {
pname = "sly-company";
version = "master";
src = fetchFromGitHub {
owner = "joaotavora";
repo = "sly-company";
rev = "dfe18218e4b2ee9874394b50f82f5172f41c462c";
sha256 = "1bj8w2wfq944cnhsk5xx41mfrjv89scrg4w98kqgda5drkpdf8a7";
};
};
# The nix-mode in the official repositories is old and annoying to
# work with, pin it to something newer instead:
nix-mode = with pkgs; 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 = with pkgs; emacsPackagesNg.melpaBuild rec {
pname = "eglot";
version = "0.8";
src = fetchFromGitHub {
owner = "joaotavora";
repo = "eglot";
rev = version;
sha256 = "1avsry84sp3s2vr2iz9dphm579xgw8pqlwffl75gn5akykgazwdx";
};
};
# prescient & prescient-ivy provide better filtering in ivy/counsel
prescient = with pkgs; emacsPackagesNg.melpaBuild {
pname = "prescient";
version = "20180611";
src = fetchFromGitHub {
owner = "raxod502";
repo = "prescient.el";
rev = "19a2c6b392ca6130dbbcf70cba57ee34d64fe50c";
sha256 = "136q785lyhpgyaiysyq4pw11l83sa9h3q57v6papx813gf7rb7v7";
};
recipeFile = writeText "prescient-recipe" ''
(prescient :files ("prescient.el" "ivy-prescient.el"))
'';
};
in emacsWithPackages(epkgs:
# Pinned packages (from unstable):
(with pkgs; with lib; attrValues pinnedEmacs) ++
# 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; [
browse-kill-ring
cargo
dash
dash-functional
dockerfile-mode
edit-server
elm-mode
erlang
flx
go-mode
gruber-darker-theme
haskell-mode
ht
idle-highlight-mode
jq-mode
kotlin-mode
magit
multi-term
multiple-cursors
nginx-mode
paredit
password-store
pg
racket-mode
rainbow-delimiters
restclient
rust-mode
s
smart-mode-line
smartparens
string-edit
terraform-mode
toml-mode
uuidgen
web-mode
websocket
yaml-mode
]) ++
# Custom packaged Emacs packages:
[ sly sly-company nix-mode eglot prescient pkgs.notmuch ]
)