# 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 { 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"))) ''; }; 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 flycheck go-mode gruber-darker-theme haskell-mode ht idle-highlight-mode intero kotlin-mode magit markdown-mode-plus 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 yaml-mode ]) ++ # Custom packaged Emacs packages: [ sly sly-company nix-mode ] )