tvl-depot/emacs.nix
Vincent Ambo b1d45f5b76 refactor(emacs): Use unstable channel directly in emacs module
Stores the unstable channel in the global package set to make it
available in the emacs module.

All emacs-related packages are now taken from the unstable channel.

Related changes:

* prescient is now built directly from git
* sly has been (temporarily) removed because the MELPA recipe is
  failing

Unfortunately the version bumps to prescient and ivy (& its related
packages) don't seem to help with raxod502/prescient.el#10
2018-06-15 13:56:47 +02:00

133 lines
2.9 KiB
Nix

# 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 = "0.8";
src = fetchFromGitHub {
owner = "joaotavora";
repo = "eglot";
rev = version;
sha256 = "1avsry84sp3s2vr2iz9dphm579xgw8pqlwffl75gn5akykgazwdx";
};
};
# 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 ivy ];
recipeFile = writeText "ivy-prescient-recipe" ''
(ivy-prescient :files ("ivy-prescient.el"))
'';
};
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; [
browse-kill-ring
cargo
counsel
counsel-tramp
dash
dash-functional
dockerfile-mode
edit-server
erlang
exwm
go-mode
gruber-darker-theme
haskell-mode
ht
idle-highlight-mode
ivy
ivy-pass
jq-mode
kotlin-mode
magit
markdown-mode
markdown-toc
multi-term
multiple-cursors
nginx-mode
paredit
password-store
pg
rainbow-delimiters
restclient
rust-mode
s
smartparens
string-edit
swiper
telephone-line
terraform-mode
toml-mode
uuidgen
web-mode
websocket
yaml-mode
]) ++
# Custom packaged Emacs packages:
[ nix-mode eglot prescient ivy-prescient pkgs.notmuch ]
)