about summary refs log tree commit diff
path: root/overlays/patches/emacs/overlay/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'overlays/patches/emacs/overlay/flake.nix')
-rw-r--r--overlays/patches/emacs/overlay/flake.nix105
1 files changed, 89 insertions, 16 deletions
diff --git a/overlays/patches/emacs/overlay/flake.nix b/overlays/patches/emacs/overlay/flake.nix
index 36cfc4713fbd..894942cd74fd 100644
--- a/overlays/patches/emacs/overlay/flake.nix
+++ b/overlays/patches/emacs/overlay/flake.nix
@@ -1,33 +1,106 @@
 {
   description = "Bleeding edge Emacs overlay";
 
-  inputs.flake-utils.url = "github:numtide/flake-utils";
+  nixConfig = {
+    extra-substituters = [ "https://nix-community.cachix.org" ];
+    extra-trusted-public-keys = [ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" ];
+  };
+
+  inputs = {
+    flake-utils.url = "github:numtide/flake-utils";
+    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+    nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-23.05";
+  };
 
   outputs =
     { self
     , nixpkgs
+    , nixpkgs-stable
     , flake-utils
-    }: {
+    }:
+    let
+      importPkgs = path: attrs: import path (attrs // {
+        config.allowAliases = false;
+        overlays = [ self.overlays.default ];
+      });
+    in
+    {
       # self: super: must be named final: prev: for `nix flake check` to be happy
-      overlay = final: prev:
-        import ./default.nix final prev;
-    } // flake-utils.lib.eachDefaultSystem (system: (
-      let
-        pkgs = import nixpkgs {
-          inherit system;
-          config.allowAliases = false;
-          overlays = [ self.overlay ];
+      overlays = {
+        default = final: prev: import ./overlays final prev;
+        emacs = final: prev: import ./overlays/emacs.nix final prev;
+        package = final: prev: import ./overlays/package.nix final prev;
+      };
+      # for backward compatibility, is safe to delete, not referenced anywhere
+      overlay = self.overlays.default;
+    } // flake-utils.lib.eachSystem [ "x86_64-linux" ] (system:
+    {
+      hydraJobs =
+        let
+          mkHydraJobs = pkgs:
+            let
+              mkEmacsSet = emacs: pkgs.recurseIntoAttrs (
+                lib.filterAttrs
+                  (n: v: builtins.typeOf v == "set" && ! lib.isDerivation v)
+                  (pkgs.emacsPackagesFor emacs)
+              );
+              inherit (pkgs) lib;
+
+            in
+            {
+              emacsen = {
+                inherit (pkgs) emacs-unstable emacs-unstable-nox;
+                inherit (pkgs) emacs-unstable-pgtk;
+                inherit (pkgs) emacs-git emacs-git-nox;
+                inherit (pkgs) emacs-pgtk;
+              };
+
+              emacsen-cross =
+                let
+                  crossTargets = [ "aarch64-multiplatform" ];
+                in
+                lib.fold lib.recursiveUpdate { }
+                  (builtins.map
+                    (target:
+                      let
+                        targetPkgs = pkgs.pkgsCross.${target};
+                      in
+                      lib.mapAttrs' (name: job: lib.nameValuePair "${name}-${target}" job)
+                        ({
+                          inherit (targetPkgs) emacs-unstable emacs-unstable-nox;
+                          inherit (targetPkgs) emacs-unstable-pgtk;
+                          inherit (targetPkgs) emacs-git emacs-git-nox;
+                          inherit (targetPkgs) emacs-pgtk;
+                        }))
+                    crossTargets);
+
+              packages = mkEmacsSet pkgs.emacs;
+              packages-unstable = mkEmacsSet pkgs.emacs-unstable;
+            };
+
+        in
+        {
+          "23.05" = mkHydraJobs (importPkgs nixpkgs-stable { inherit system; });
+          "unstable" = mkHydraJobs (importPkgs nixpkgs { inherit system; });
         };
+    }) // flake-utils.lib.eachDefaultSystem (system: (
+      let
+        pkgs = importPkgs nixpkgs { inherit system; };
         inherit (pkgs) lib;
-        overlayAttrs = builtins.attrNames (import ./. pkgs pkgs);
+
+        overlayAttributes = lib.pipe (import ./. pkgs pkgs) [
+          builtins.attrNames
+          (lib.partition (n: lib.isDerivation pkgs.${n}))
+        ];
+        attributesToAttrset = attributes: lib.pipe attributes [
+          (map (n: lib.nameValuePair n pkgs.${n}))
+          lib.listToAttrs
+        ];
 
       in
       {
-        packages =
-          let
-            drvAttrs = builtins.filter (n: lib.isDerivation pkgs.${n}) overlayAttrs;
-          in
-          lib.listToAttrs (map (n: lib.nameValuePair n pkgs.${n}) drvAttrs);
+        lib = attributesToAttrset overlayAttributes.wrong;
+        packages = attributesToAttrset overlayAttributes.right;
       }
     ));