about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2018-06-15T11·56+0200
committerVincent Ambo <mail@tazj.in>2018-06-15T11·56+0200
commitb1d45f5b7623f6c67bcb056063e7272c7a58ccaf (patch)
tree7627abfa9c7ac01469676a1c118018fb62a4176b
parent24314a61d6ec0dd138154e789d53c9ce402a4426 (diff)
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
-rw-r--r--emacs.nix99
-rw-r--r--packages.nix19
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 <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";
-  };
-};
+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
     };
   };