diff --git a/default.nix b/default.nix index 5bf9da886..704f5b433 100644 --- a/default.nix +++ b/default.nix @@ -19,6 +19,24 @@ let }); in { + + emacsGit = let + repoMeta = super.lib.importJSON (./. + "/repos/emacs.json"); + name = "emacs-git-${version}"; + version = builtins.substring 0 7 repoMeta.rev; + in (super.emacs.override { srcRepo = true; }).overrideAttrs(old: { + inherit name version; + src = super.fetchFromGitHub { + owner = "emacs-mirror"; + repo = "emacs"; + inherit (repoMeta) sha256 rev; + }; + patches = [ + ./patches/tramp-detect-wrapped-gvfsd.patch + ./patches/clean-env.patch + ]; + }); + emacsPackagesNgFor = emacs: (super.emacsPackagesNgFor emacs).overrideScope'(eself: esuper: { xelb = mkExDrv eself "xelb" { @@ -28,4 +46,5 @@ in { packageRequires = [ eself.xelb ]; }; }); + } diff --git a/patches/.gitkeep b/patches/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/patches/clean-env.patch b/patches/clean-env.patch new file mode 100644 index 000000000..2ffe8b777 --- /dev/null +++ b/patches/clean-env.patch @@ -0,0 +1,16 @@ +Dump temacs in an empty environment to prevent -dev paths from ending +up in the dumped image. + +diff --git a/src/Makefile.in b/src/Makefile.in +index fd05a45df5..13f529c253 100644 +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -570,7 +570,7 @@ emacs$(EXEEXT): temacs$(EXEEXT) \ + lisp.mk $(etc)/DOC $(lisp) \ + $(lispsource)/international/charprop.el ${charsets} + ifeq ($(DUMPING),unexec) +- LC_ALL=C $(RUN_TEMACS) -batch $(BUILD_DETAILS) -l loadup --temacs=dump ++ env -i LC_ALL=C $(RUN_TEMACS) -batch $(BUILD_DETAILS) -l loadup --temacs=dump + ifneq ($(PAXCTL_dumped),) + $(PAXCTL_dumped) emacs$(EXEEXT) + endif diff --git a/patches/tramp-detect-wrapped-gvfsd.patch b/patches/tramp-detect-wrapped-gvfsd.patch new file mode 100644 index 000000000..5d16194fd --- /dev/null +++ b/patches/tramp-detect-wrapped-gvfsd.patch @@ -0,0 +1,14 @@ +diff --git a/lisp/net/tramp-gvfs.el b/lisp/net/tramp-gvfs.el +index f370abba31..f2806263a9 100644 +--- a/lisp/net/tramp-gvfs.el ++++ b/lisp/net/tramp-gvfs.el +@@ -164,7 +164,8 @@ tramp-gvfs-enabled + (and (featurep 'dbusbind) + (tramp-compat-funcall 'dbus-get-unique-name :system) + (tramp-compat-funcall 'dbus-get-unique-name :session) +- (or (tramp-compat-process-running-p "gvfs-fuse-daemon") ++ (or (tramp-compat-process-running-p ".gvfsd-fuse-wrapped") ++ (tramp-compat-process-running-p "gvfs-fuse-daemon") + (tramp-compat-process-running-p "gvfsd-fuse")))) + "Non-nil when GVFS is available.") + diff --git a/repos/emacs.json b/repos/emacs.json new file mode 100644 index 000000000..0c029b1c6 --- /dev/null +++ b/repos/emacs.json @@ -0,0 +1 @@ +{"rev": "a48726ebae2f44ed15b97cb72bc7eca199d8de47", "sha256": "1ldn6cjxhc42dj3rg7balpnq8k5a55karwqy7yld7as6cj2zx703", "version": "20190723.0"} diff --git a/test.nix b/test.nix index c8c47b8f9..44950bf59 100644 --- a/test.nix +++ b/test.nix @@ -1,6 +1,9 @@ -with import { - overlays = [ (import ./default.nix) ]; -}; -emacsWithPackages(epkgs: [ +{ pkgs ? import { overlays = [ (import ./default.nix) ]; } }: + +let + package = pkgs.emacsGit; + emacsPackages = pkgs.emacsPackagesNgGen package; + emacsWithPackages = emacsPackages.emacsWithPackages; +in emacsWithPackages(epkgs: [ epkgs.exwm ]) diff --git a/update b/update index 11e1d1a67..65e192213 100755 --- a/update +++ b/update @@ -3,21 +3,23 @@ set -euxo pipefail function update_repo() { - repo=$1 + owner=$1 + repo=$2 echo $repo # Get relevant data (commit id and timestamp) for the latest commit - commit_data=$(curl "https://github.com/ch11ng/$repo/commits/master.atom" | xmlstarlet sel -N atom="http://www.w3.org/2005/Atom" -t -m /atom:feed/atom:entry -v "concat(atom:id,'/',atom:updated)" -n | head -n 1) + commit_data=$(curl "https://github.com/$owner/$repo/commits/master.atom" | xmlstarlet sel -N atom="http://www.w3.org/2005/Atom" -t -m /atom:feed/atom:entry -v "concat(atom:id,'/',atom:updated)" -n | head -n 1) # Extract commit sha and build a version number based on date: YYYYMMDD.0 commit_sha=$(echo $commit_data | cut -d '/' -f 2) version_number=$(echo $commit_data | cut -d '/' -f 3 | cut -d 'T' -f 1 | sed 's/-//g').0 - digest=$(nix-prefetch-url --unpack "https://github.com/ch11ng/$repo/archive/${commit_sha}.tar.gz") + digest=$(nix-prefetch-url --unpack "https://github.com/$owner/$repo/archive/${commit_sha}.tar.gz") echo "{\"rev\": \"${commit_sha}\", \"sha256\": \"${digest}\", \"version\": \"${version_number}\"}" > repos/$repo.json } -update_repo exwm -update_repo xelb +update_repo ch11ng exwm +update_repo ch11ng xelb +update_repo emacs-mirror emacs nix-build --no-out-link --show-trace ./test.nix