From b1d45f5b7623f6c67bcb056063e7272c7a58ccaf Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Fri, 15 Jun 2018 13:56:47 +0200 Subject: 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 --- emacs.nix | 99 +++++++++++++++++++++++++----------------------------------- packages.nix | 19 +++--------- 2 files changed, 45 insertions(+), 73 deletions(-) diff --git a/emacs.nix b/emacs.nix index bcf6d6318ef0..3f391fc1d709 100644 --- a/emacs.nix +++ b/emacs.nix @@ -1,46 +1,14 @@ -# Derivation for Emacs configured with the packages that I need: +# Derivation for Emacs pre-configured with packages that I need. +# +# * TODO 2018-06-15: sly removed due to build error in unstable { 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"; - }; -}; +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 = with pkgs; emacsPackagesNg.melpaBuild { +nix-mode = emacsPackagesNg.melpaBuild { pname = "nix-mode"; version = "20180306"; @@ -59,7 +27,7 @@ nix-mode = with pkgs; emacsPackagesNg.melpaBuild { # The default Rust language server mode is not really usable, install # `eglot` instead and hope for the best. -eglot = with pkgs; emacsPackagesNg.melpaBuild rec { +eglot = emacsPackagesNg.melpaBuild rec { pname = "eglot"; version = "0.8"; @@ -71,27 +39,37 @@ eglot = with pkgs; emacsPackagesNg.melpaBuild rec { }; }; -# prescient & prescient-ivy provide better filtering in ivy/counsel -prescient = with pkgs; emacsPackagesNg.melpaBuild { - pname = "prescient"; - version = "20180611"; +# 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"; +}; - src = fetchFromGitHub { - owner = "raxod502"; - repo = "prescient.el"; - rev = "19a2c6b392ca6130dbbcf70cba57ee34d64fe50c"; - sha256 = "136q785lyhpgyaiysyq4pw11l83sa9h3q57v6papx813gf7rb7v7"; - }; +prescient = emacsPackagesNg.melpaBuild { + pname = "prescient"; + version = "1.0"; + src = prescientSource; recipeFile = writeText "prescient-recipe" '' - (prescient :files ("prescient.el" "ivy-prescient.el")) + (prescient :files ("prescient.el")) ''; }; -in emacsWithPackages(epkgs: - # Pinned packages (from unstable): - (with pkgs; with lib; attrValues pinnedEmacs) ++ +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 @@ -108,36 +86,41 @@ in emacsWithPackages(epkgs: (with epkgs.melpaPackages; [ browse-kill-ring cargo + counsel + counsel-tramp dash dash-functional dockerfile-mode edit-server - elm-mode erlang - flx + 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 - racket-mode rainbow-delimiters restclient rust-mode s smartparens string-edit - terraform-mode + swiper telephone-line + terraform-mode toml-mode uuidgen web-mode @@ -146,5 +129,5 @@ in emacsWithPackages(epkgs: ]) ++ # Custom packaged Emacs packages: - [ sly sly-company nix-mode eglot prescient pkgs.notmuch ] + [ nix-mode eglot prescient ivy-prescient pkgs.notmuch ] ) diff --git a/packages.nix b/packages.nix index ea76f3183f22..4804aa8ad859 100644 --- a/packages.nix +++ b/packages.nix @@ -33,26 +33,15 @@ in { # To use the pinned channel, the original package set is thrown # away in the overrides: config.packageOverrides = oldPkgs: stable // { + # Store whole unstable channel in case that other modules need + # it (see emacs.nix for example): + inherit unstable; + wallpapers = import ./pkgs/wallpapers.nix; pulseaudio-ctl = import pkgs/pulseaudio-ctl.nix; kontemplate = unstable.kontemplate; mq-cli = unstable.mq-cli; - - # Override various Emacs packages from unstable: - pinnedEmacs = with unstable.emacsPackagesNg; { - inherit - counsel - counsel-tramp - exwm - ivy - ivy-gitlab - ivy-hydra - ivy-pass - markdown-mode - markdown-toc - swiper; - }; emacs = unstable.emacs; # emacs 26.1 }; }; -- cgit 1.4.1