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.nix107
1 files changed, 107 insertions, 0 deletions
diff --git a/overlays/patches/emacs/overlay/flake.nix b/overlays/patches/emacs/overlay/flake.nix
new file mode 100644
index 000000000000..894942cd74fd
--- /dev/null
+++ b/overlays/patches/emacs/overlay/flake.nix
@@ -0,0 +1,107 @@
+{
+  description = "Bleeding edge Emacs overlay";
+
+  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
+      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;
+
+        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
+      {
+        lib = attributesToAttrset overlayAttributes.wrong;
+        packages = attributesToAttrset overlayAttributes.right;
+      }
+    ));
+
+}