diff --git a/advice.el b/advice.el index 9e85ca8..e5f8255 100644 --- a/advice.el +++ b/advice.el @@ -1,20 +1,16 @@ ;;; -*- lexical-binding: t; -*- (advice-add 'nix-straight-get-used-packages :before (lambda (&rest r) - (message "Advising doom installer to gather packages to install...") - (advice-add 'doom-reload-autoloads + (message "[nix-doom-emacs] Advising doom installer to gather packages to install...") + (advice-add 'doom-cli-reload-autoloads :override (lambda (&optional file force-p) - (message "Skipping generating autoloads..."))) + (message "[nix-doom-emacs] Skipping generating autoloads..."))) (advice-add 'doom--format-print :around (lambda (orig-print &rest r) (let ((noninteractive nil)) (apply orig-print r)))))) - - -(advice-add 'doom-call-process - :before (lambda (&rest r) - (message "> call-process %s" r))) -(advice-add 'doom-call-process - :after (lambda (&rest r) - (message "< call-process %s" r))) +(advice-add 'y-or-n-p + :override (lambda (q) + (message "%s \n[nix-doom-emacs] --> answering NO" q) + nil)) diff --git a/default.nix b/default.nix index fb07c09..c53ec2e 100644 --- a/default.nix +++ b/default.nix @@ -1,7 +1,27 @@ { # The files would be going to ~/.config/doom (~/.doom.d) doomPrivateDir - # Package set to install emacs and dependent packages from + /* Package set to install emacs and dependent packages from + + Only used to get emacs package, if `bundledPackages` is set + */ , emacsPackages + /* Use bundled revision of github.com/nix-community/emacs-overlay + as `emacsPackages` + */ +, bundledPackages ? true + /* Override dependency versions + + Hadful for testing out updated dependencies without publishing + a new version of them. + + Type: dependencyOverrides :: attrset -> either path derivation + + Example: + dependencyOverrides = { + "emacs-overlay" = fetchFromGitHub { owner = /* ...*\/; }; + }; + */ +, dependencyOverrides ? { } , lib , pkgs , stdenv @@ -14,6 +34,12 @@ , writeTextDir }: let + lock = pkgs.callPackage + "${builtins.fetchTarball https://github.com/vlaci/nix-lock/archive/develop.tar.gz}/lock.nix" { + path = ./derivations.lock; + overrides = dependencyOverrides; + }; + # Packages we need to get the default doom configuration run overrides = self: super: { evil-escape = super.evil-escape.overrideAttrs (esuper: { @@ -24,24 +50,14 @@ let version = "1"; recipe = null; ename = pname; - src = fetchFromGitHub { - owner = "TobiasZawada"; - repo = "org-yt"; - rev = "40cc1ac76d741055cbefa13860d9f070a7ade001"; - sha256 = "0jsm3azb7lwikvc53z4p91av8qvda9s15wij153spkgjp83kld3p"; - }; + src = lock.get pname; }; }; # Stage 1: prepare source for byte-compilation doomSrc = stdenv.mkDerivation { name = "doom-src"; - src = fetchFromGitHub { - owner = "hlissner"; - repo = "doom-emacs"; - rev = "22ae9cca15f5aa9215cf0ec2c7b0b78d64deddc0"; - sha256 = "0nya6qf2v0snd4zskxxradqdpiylpx3lxfrfi7xs04yb39ma99pn"; - }; + src = lock.get "doom-emacs"; phases = ["unpackPhase" "patchPhase" "installPhase"]; patches = [ (substituteAll { @@ -55,21 +71,24 @@ let ''; }; + # Bundled version of `emacs-overlay` + emacs-overlay = import (lock.get "emacs-overlay") pkgs pkgs; + # Stage 2:: install dependencies and byte-compile prepared source doomLocal = let - straight-env = pkgs.callPackage (fetchFromGitHub { - owner = "vlaci"; - repo = "nix-straight.el"; - rev = "v1.0"; - sha256 = "038dss49bfvpj15psh5pr9jyavivninl0rzga9cn8qyc4g2cj5i0"; - }) { - emacsPackages = emacsPackages.overrideScope' overrides; + straight-env = pkgs.callPackage (lock.get "nix-straight.el") { + emacsPackages = + if bundledPackages then + let + epkgs = emacs-overlay.emacsPackagesFor emacsPackages.emacs; + in epkgs.overrideScope' overrides + else + emacsPackages.overrideScope' overrides; emacsLoadFiles = [ ./advice.el ]; emacsArgs = [ + "--" "install" - "--no-fonts" - "--no-env" ]; # Need to reference a store path here, as byte-compilation will bake-in diff --git a/derivations.json b/derivations.json new file mode 100644 index 0000000..af276f9 --- /dev/null +++ b/derivations.json @@ -0,0 +1,20 @@ +{ + "doom-emacs": { + "repo": "doom-emacs", + "owner": "hlissner", + "rev": "develop" + }, + "nix-straight.el": { + "owner": "vlaci", + "repo": "nix-straight.el", + "rev": "v1.0" + }, + "org-yt": { + "owner": "TobiasZawada", + "repo": "org-yt" + }, + "emacs-overlay": { + "owner": "nix-community", + "repo": "emacs-overlay" + } +} diff --git a/derivations.lock b/derivations.lock new file mode 100644 index 0000000..83ee68b --- /dev/null +++ b/derivations.lock @@ -0,0 +1,54 @@ +{ + "doom-emacs": { + "fetcher": "fetchFromGitHub", + "args": { + "owner": "hlissner", + "repo": "doom-emacs", + "rev": "58e674d8fb85515e7980c87fc708dabb2b276128", + "sha256": "1algblcah2y5lbrn60fjslszx3jz1p9w7bh82c788ih1d8x7z253" + }, + "meta": { + "updated": "2019-11-10T14:33:52+00:00", + "rev": "58e674d8fb85515e7980c87fc708dabb2b276128" + } + }, + "nix-straight.el": { + "fetcher": "fetchFromGitHub", + "args": { + "owner": "vlaci", + "repo": "nix-straight.el", + "rev": "6182914aefea06ef514cd3f3f7f9f67db45940db", + "sha256": "038dss49bfvpj15psh5pr9jyavivninl0rzga9cn8qyc4g2cj5i0" + }, + "meta": { + "updated": "2019-10-25T22:28:25+00:00", + "rev": "6182914aefea06ef514cd3f3f7f9f67db45940db" + } + }, + "org-yt": { + "fetcher": "fetchFromGitHub", + "args": { + "owner": "TobiasZawada", + "repo": "org-yt", + "rev": "40cc1ac76d741055cbefa13860d9f070a7ade001", + "sha256": "0jsm3azb7lwikvc53z4p91av8qvda9s15wij153spkgjp83kld3p" + }, + "meta": { + "updated": "2019-10-25T22:28:27+00:00", + "rev": "40cc1ac76d741055cbefa13860d9f070a7ade001" + } + }, + "emacs-overlay": { + "fetcher": "fetchFromGitHub", + "args": { + "owner": "nix-community", + "repo": "emacs-overlay", + "rev": "0bd32c063118ddc95d1a73ccd01b51a2d6dda24e", + "sha256": "1yc1az5l6073x1amk4g3rvfd98wsq3z3jvh2l7crp8q6wq9rndpa" + }, + "meta": { + "updated": "2019-11-10T14:33:57+00:00", + "rev": "0bd32c063118ddc95d1a73ccd01b51a2d6dda24e" + } + } +} diff --git a/fix-paths.patch b/fix-paths.patch index f6bcd81..145699f 100644 --- a/fix-paths.patch +++ b/fix-paths.patch @@ -1,25 +1,15 @@ -diff --git a/bin/doom b/bin/doom -index bd381e5ab..37cc69569 100755 ---- a/bin/doom -+++ b/bin/doom -@@ -6,7 +6,7 @@ - ":"; DOOMBASE=$(dirname "$0")/.. - ":"; [ "$1" = -d ] || [ "$1" = --debug ] && { shift; export DEBUG=1; } - ":"; [ "$1" = doc ] || [ "$1" = doctor ] && { cd "$DOOMBASE"; shift; exec $EMACS --script bin/doom-doctor "$@"; exit 0; } --":"; [ "$1" = run ] && { cd "$DOOMBASE"; shift; exec $EMACS -q --no-splash -l bin/doom "$@"; exit 0; } -+":"; [ "$1" = run ] && { cd "$DOOMBASE"; shift; exec $EMACS -q --no-splash -l bin/.doom-wrapped "$@"; exit 0; } - ":"; exec $EMACS --script "$0" -- "$@" - ":"; exit 0 - diff --git a/core/core.el b/core/core.el -index 9cc1cfc25..fcbc3a3cf 100644 +index cb12f8d08..03f370691 100644 --- a/core/core.el +++ b/core/core.el -@@ -54,20 +54,20 @@ decrease this. If you experience stuttering, increase this.") +@@ -63,22 +63,21 @@ decrease this. If you experience stuttering, increase this.") + "The root directory for Doom's modules. Must end with a slash.") - (defvar doom-local-dir - (or (getenv "DOOMLOCALDIR") -- (concat doom-emacs-dir ".local/")) + (defconst doom-local-dir +- (if-let (localdir (getenv "DOOMLOCALDIR")) +- (expand-file-name (file-name-as-directory localdir)) +- (concat doom-emacs-dir ".local/")) ++ (or (getenv "DOOMLOCALDIR") + "@local@/") "Root directory for local storage. @@ -27,19 +17,19 @@ index 9cc1cfc25..fcbc3a3cf 100644 These files should not be shared across systems. By default, it is used by `doom-etc-dir' and `doom-cache-dir'. Must end with a slash.") --(defvar doom-etc-dir (concat doom-local-dir "etc/") -+(defvar doom-etc-dir "~/.local/doom" +-(defconst doom-etc-dir (concat doom-local-dir "etc/") ++(defconst doom-etc-dir "~/.local/doom" "Directory for non-volatile local storage. Use this for files that don't change much, like server binaries, external dependencies or long-term shared data. Must end with a slash.") --(defvar doom-cache-dir (concat doom-local-dir "cache/") -+(defvar doom-cache-dir "~/.cache/doom/" +-(defconst doom-cache-dir (concat doom-local-dir "cache/") ++(defconst doom-cache-dir "~/.cache/doom/" "Directory for volatile local storage. Use this for files that change often, like cache files. Must end with a slash.") -@@ -189,7 +189,7 @@ users).") +@@ -196,7 +195,7 @@ users).") (setq abbrev-file-name (concat doom-local-dir "abbrev.el") async-byte-compile-log-file (concat doom-etc-dir "async-bytecomp.log") bookmark-default-file (concat doom-etc-dir "bookmarks")