Giter VIP home page Giter VIP logo

nix-doom-emacs's Introduction

index
readme reference faq

nix-doom-emacs

Status
Build on master Build Status on master
Dependency updater Dependency Updater Status
Matrix Chat Matrix Chat

nix-doom-emacs (abbreviated as NDE) provides a customisable Nix derivation for Doom Emacs.

⚠ Broken

This project has been broken for more than a year due to Doom's excessive divergence from emacs-overlay's package set, which is not Doom's fault but rather a missing Elisp package locking mechanism on our end. (Update PR, Tracking issue)


The expression builds a doom-emacs distribution with dependencies pre-installed based on an existing ~/.doom.d directory.

It is not a fully fledged experience as some dependencies are not installed and some may not be fully compatible as the version available in NixOS or emacs-overlay may not be compatible with the doom-emacs requirements.

Quick Start

If you want to get a taste of nix-doom-emacs, you can run nix run github:nix-community/nix-doom-emacs Which will run nix-doom-emacs with an example configuration.

Pick which setup you're using here (if you're not using NixOS or Home-Manager, then you should use standalone):

Home-Manager NixOS Standalone
Flake + Home-Manager NixOS Standalone

Hacking

This project is under MIT license. Our issue tracker has some open issues, the PR wanted label is for issues that need PRs to fix them. Also, talk to us in the Matrix Chat to discuss ideas for future improvements. Contributions are welcome.

nix-doom-emacs's People

Contributors

0x450x6c avatar adamcstephens avatar andresilva avatar ckiee avatar cole-h avatar duairc avatar edrex avatar github-actions[bot] avatar hab25 avatar happysalada avatar knl avatar kylesferrazza avatar maxschlueter avatar mic92 avatar radvendii avatar ribosomerocker avatar roman avatar rossabaker avatar starcraft66 avatar thiagokokada avatar znewman01 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nix-doom-emacs's Issues

`$out/bin/doom` fails to run

I got doom emacs building with nix, but now I am getting this error. I am having trouble tracing it, but it makes me think I probably have a doom directory misconfigured such that its trying to write out to the nix store.

My doom emacs is here but I just copy and pasted from test/doom.d

# -*- lisp-interaction -*-
# vim: set ft=lisp:

(file-error "Creating directory")

(signal file-error ("Creating directory" "Read-only file system" "/nix/store/p9vqsv0jmqk6zx96f3vk9zb2k7i5pkl4-doom-emacs/nix"))

(files--ensure-directory "/nix/store/p9vqsv0jmqk6zx96f3vk9zb2k7i5pkl4-doom-emacs/nix")

(make-directory "/nix/store/p9vqsv0jmqk6zx96f3vk9zb2k7i5pkl4-doom-emacs//nix/store/l6qbn762za1c8pgbp79jx7jms4jv5xzp-straight-emacs-env/" parents)

(apply make-directory ("/nix/store/p9vqsv0jmqk6zx96f3vk9zb2k7i5pkl4-doom-emacs//nix/store/l6qbn762za1c8pgbp79jx7jms4jv5xzp-straight-emacs-env/" parents))

((closure ((args parents) (fn . make-directory) t) (&rest pre-args) (apply fn (append pre-args args))) "/nix/store/p9vqsv0jmqk6zx96f3vk9zb2k7i5pkl4-doom-emacs//nix/store/l6qbn762za1c8pgbp79jx7jms4jv5xzp-straight-emacs-env/")

(mapc (closure ((args parents) (fn . make-directory) t) (&rest pre-args) (apply fn (append pre-args args))) ("/nix/store/p9vqsv0jmqk6zx96f3vk9zb2k7i5pkl4-doom-emacs//nix/store/l6qbn762za1c8pgbp79jx7jms4jv5xzp-straight-emacs-env/" "~/.local/doom/" "~/.cache/doom/"))

(load-with-code-conversion "/nix/store/p9vqsv0jmqk6zx96f3vk9zb2k7i5pkl4-doom-emacs/core/core-cli.el" "/nix/store/p9vqsv0jmqk6zx96f3vk9zb2k7i5pkl4-doom-emacs/core/core-cli.el" nil t)

(require core-cli)

(load-with-code-conversion "/nix/store/p9vqsv0jmqk6zx96f3vk9zb2k7i5pkl4-doom-emacs/bin/doom" "/nix/store/p9vqsv0jmqk6zx96f3vk9zb2k7i5pkl4-doom-emacs/bin/doom" nil t)

(command-line-1 ("-scriptload" "/nix/store/p9vqsv0jmqk6zx96f3vk9zb2k7i5pkl4-doom-emacs/bin/doom" "--"))

(command-line)

(normal-top-level)

Add option to inject into {exec-path,PATH}

I'm trying to setup LSP for C using clangd but for some reason it won't work.

It complains that unzip and powershell are not installed, but trying to add it to buildInputs of pagacke cc won't work.
I don't know if the package name is cc too, it might be the cause of the error.

What do I do?

`doom-etc-dir` is set incorrectly. Volatile files pollute `~/.local`.

Current configuration pollutes user's ~/.local dir without creating a specific doom directory. On my machine it looks something like this:

[azahi@melian:~/.local]$ l
total 12K
drwxr-xr-x  11 azahi users  182 Aug 17 12:24 .
drwx------+ 29 azahi users 4.0K Aug 17 13:12 ..
drwxr-xr-x   2 azahi users   73 Jul 13 00:30 bin
drwxr-xr-x   2 azahi users    6 Aug 17 11:41 doom
-rw-r--r--   1 azahi users   81 Aug 17 12:32 doomdap-breakpoints
drwx------   2 azahi users   21 Aug 17 11:40 doomeshell
drwxr-xr-x   2 azahi users   35 Aug 17 11:38 doomforge
drwxr-xr-x   2 azahi users   36 Aug 15 23:54 doomparinfer-rust
drwxr-xr-x   2 azahi users   26 Aug 15 23:57 doomscratch
drwxr-xr-x   2 azahi users   21 Aug 16 11:32 doomtransient
drwxr-xr-x  45 azahi users 4.0K Aug 17 13:18 share
drwx------   4 azahi users   56 Mar  5 11:25 state

I'm assuming this is happening because of an incorrectly patched Nix integration here. I'm guessing it should be something like this instead (note the trailing /):

-    (concat doom-local-dir "etc/"))
+    "~/.local/doom/")

However, I might be wrong about that because the same doesn't happen with the ~/.cache/doom directory.

The second part of the issue is that these paths are essentially hardcoded. Wouldn't it be better if we could somehow use XDG specification for these instead?

Support requests are mixed in with bugs

@thiagokokada I got pinged in #nix:nixos.org today by someone asking for help with nde and after I answered their question another person popped up in the room almost immediately also trying to use this project.

A lot of the issues we get are sort of repetitive. Do you think we should make a matrix room and stick it in the README? I'm not really convinced either way:
+ maybe people will help each other more casually, then we don't get as many emails and don't have to write as many responses.
- questions will get repeatedly brought up, and unlike here, will have to be answered many times since matrix does not really have the nice searchable discussion UX GitHub does.

Thoughts?

Error when building from a generated config

When building with doomPrivateDir pointing to a generated configuration directory in the store, I get the following error :

 chmod: changing permissions of '/nix/store/2ybn37xn4fq8j6zjcqna85z23cnk34yy-doom-private/config.el': Operation not permitted

I believe the cause of the problem is this chmod when config.el is actually a link to a file in the store. So this code should be updated to handle files that are links.

Build failure (`emacs-with-editor`): no matching file(s) found in /build/working/with-editor/.

I recently ran nix flake update, which pulled in the newest version of nix-doom-emacs. Upon rebuild, I encounter the following error:

error: builder for '/nix/store/6s6nk4zdd11w9455qc7cyaaipq9rpy0q-emacs-with-editor-20220608.1017.drv' failed with exit code 255;
       last 8 log lines:
       > unpacking sources
       > unpacking source archive /nix/store/8qh87iwm8knlk4sy11glgxqsd95zgds5-source
       > source root is source
       > patching sources
       > configuring
       > no configure script, doing nothing
       > building
       > No matching file(s) found in /build/working/with-editor/: (*.el *.el.in dir *.info *.texi *.texinfo doc/dir doc/*.info doc/*.texi doc/*.texinfo (:exclude .dir-locals.el test.el tests.el *-test.el *-tests.el))
       For full logs, run 'nix log /nix/store/6s6nk4zdd11w9455qc7cyaaipq9rpy0q-emacs-with-editor-20220608.1017.drv'.
error: 1 dependencies of derivation '/nix/store/sqai1if7i8bg2788n6kvmr06p43d4c2d-install-repo.drv' failed to build
error: 1 dependencies of derivation '/nix/store/3sc158xk9df0fnwiqpj0jq7hapix1zf8-straight-emacs-env.drv' failed to build
error: 1 dependencies of derivation '/nix/store/srb79inhviafr9pwxnx21ch7d4zvygpq-emacs-with-packages-27.2.drv' failed to build
error: 1 dependencies of derivation '/nix/store/gd3hnlcrg3w7l6yn93h1ggarm6ksxwnb-emacs-with-packages-with-packages-27.2.drv' failed to build
error: 1 dependencies of derivation '/nix/store/73l7fv9jrjp2sad8p5f2bpxndhaiis27-emacs.service.drv' failed to build
error: 1 dependencies of derivation '/nix/store/nxnx3kmmkhwp8y9hkabpwb75k7wxjw51-home-manager-files.drv' failed to build
error: 1 dependencies of derivation '/nix/store/v8g2dzpn2snwr0sbviv88afbc6cf9p1r-home-manager-path.drv' failed to build
error: 1 dependencies of derivation '/nix/store/hh6kvfdx2830k0clnn0zxjhwlkhz02c2-home-manager-generation.drv' failed to build
error: 1 dependencies of derivation '/nix/store/4p39svf2yibmf30ir0h0nmfzn4ach775-user-environment.drv' failed to build
error: 1 dependencies of derivation '/nix/store/ccg9iy13gcsj8sdifl85xln86rq1fy3z-etc.drv' failed to build
error: 1 dependencies of derivation '/nix/store/rjacj9rmzdlpa6kqs4paqay6z61k62wk-nixos-system-NotYourLaptop-21.11.20220702.573603b.drv' failed to build

The nix log reveals:

@nix { "action": "setPhase", "phase": "unpackPhase" }
unpacking sources
unpacking source archive /nix/store/8qh87iwm8knlk4sy11glgxqsd95zgds5-source
source root is source
@nix { "action": "setPhase", "phase": "patchPhase" }
patching sources
@nix { "action": "setPhase", "phase": "configurePhase" }
configuring
no configure script, doing nothing
@nix { "action": "setPhase", "phase": "buildPhase" }
building
No matching file(s) found in /build/working/with-editor/: (*.el *.el.in dir *.info *.texi *.texinfo doc/dir doc/*.info doc/*.texi doc/*.texinfo (:exclude .dir-locals.el test.el tests.el *-test.el *-tests.el))

I have tried opening the nix store directory:

❯ ls
  inode Permissions Links Size Blocks User Date Modified Name              inode Permissions Links Size Blocks User Date Modified Name
1602903 .r--r--r--      1  801      8 root  1 Jan  1970   default.mk    1602910 dr-xr-xr-x      2    -      - root  1 Jan  1970   lisp
1602904 dr-xr-xr-x      2    -      - root  1 Jan  1970   docs          1602901 .r--r--r--      1 1.2k      8 root  1 Jan  1970   Makefile
1602900 .r--r--r--      1  35k     72 root  1 Jan  1970   LICENSE       1602902 .r--r--r--      1 2.4k      8 root  1 Jan  1970   README.org

And reading the documentation, it clearly is the with-editor package:

❯ bat docs/with-editor.org

───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: docs/with-editor.org
───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ #+title: With-Editor User Manual
   2   │ :PREAMBLE:
   3   │ #+author: Jonas Bernoulli
   4   │ #+email: [email protected]
   5   │ #+date: 2015-{{{year}}}
   6   │
   7   │ #+texinfo_dir_category: Emacs
   8   │ #+texinfo_dir_title: With-Editor: (with-editor).
   9   │ #+texinfo_dir_desc: Using the Emacsclient as $EDITOR
  10   │ #+subtitle: for version 3.2.0-git
  11   │
  12   │ #+setupfile: .orgconfig
  13   │
  14   │ The library ~with-editor~ makes it easy to use the Emacsclient as the
  15   │ ~$EDITOR~ of child processes, making sure they know how to call home.
  16   │ For remote processes a substitute is provided, which communicates with
  17   │ Emacs on standard output instead of using a socket as the Emacsclient
  18   │ does.
  19   │
  20   │ This library was written because Magit has to be able to do the above
  21   │ to allow the user to edit commit messages gracefully and to edit
  22   │ rebase sequences, which wouldn't be possible at all otherwise.
  23   │
  24   │ Because other packages can benefit from such functionality, this
  25   │ library is made available as a separate package.  It also defines some
  26   │ additional functionality which makes it useful even for end-users, who
  27   │ don't use Magit or another package which uses it internally.
  28   │
  29   │ #+texinfo: @noindent
  30   │ This manual is for With-Editor version 3.2.0-git.

...

Interestingly, building this package directly from nixpkgs seems to be fine.

❯ nix build nixpkgs#emacs28Packages.with-editor
(no output)

Very interestingly, if I try to pin the older version of nix-doom-emacs (that worked just fine) (without downgrading the rest of my inputs), the build script cannot find git.

...
       > Searching for program: No such file or directory, git
       > Error in kill-emacs-hook (straight--transaction-finalize): (file-missing "Opening output file" "No such file or directory" "/build/tmp.MRp0BCVpGg/local/straight/build-27.2-cache.el")
...

Fortunately, I can reset my flake.lock for now (yay Nix!), meaning I will be running an old - but functioning - Doom Emacs.

Any thoughts? Am I doing something wrong?

Setup embedded onboarding documentation

#267 (comment):

[…] we should make the ./test/doom.d config start up with a y-or-n-p asking if you want to learn more about Doom Emacs pointing to some docs in the nix store. This will be better than before where the API guided you into discovering there are other arguments you can pass in.

#267 #266

Breaking change in consult

Currently consult will throw consult--source-file-related errors.

To fix it you can do this on your flake.nix file:

inputs.nixDoomEmacs = {
  url = "github:nix-community/nix-doom-emacs";
  inputs.doom-emacs.url = "github:hlissner/doom-emacs/master";
};

Reference: doomemacs/doomemacs#6099

nix-doom-emacs fails to build

emacs-straight.el> unpacking sources
emacs-straight.el> unpacking source archive /nix/store/2isls60jszab8y0yz716h4kfbg6c889b-source
emacs-straight.el> source root is source
emacs-straight.el> patching sources
emacs-straight.el> applying patch /nix/store/ixkk747g9pmblkyngd9f75fqd6aan026-nogit.patch
emacs-straight.el> patching file straight.el
emacs-straight.el> configuring
emacs-straight.el> no configure script, doing nothing
emacs-straight.el> building
emacs-straight.el> In end of data:
emacs-straight.el> indent.el:9:1:Warning: the following functions are not known to be defined:
emacs-straight.el>     use-package-only-one, use-package-process-keywords
emacs-straight.el> installing
emacs-straight.el> post-installation fixup
emacs-straight.el> shrinking RPATHs of ELF executables and libraries in /nix/store/2dx55vji1awqzl1rv200mw1nlc7nv1cq-emacs-straight.el
emacs-straight.el> strip is /nix/store/r7r10qvsqlnvbzjkjinvscjlahqbxifl-gcc-wrapper-11.3.0/bin/strip
emacs-straight.el> patching script interpreter paths in /nix/store/2dx55vji1awqzl1rv200mw1nlc7nv1cq-emacs-straight.el
emacs-straight.el> checking for references to /build/ in /nix/store/2dx55vji1awqzl1rv200mw1nlc7nv1cq-emacs-straight.el...
emacs-straight-packages.json> installing
emacs-straight-packages.json> [nix-doom-emacs] Advising doom installer to gather packages to install...
emacs-straight-packages.json> Loading /nix/store/2ca9myid9wc3qhhgm3nih2qw9lanz869-doom-src/bin/doom...
emacs-straight-packages.json> > Executing 'doom install' with Emacs 27.2 at 2022-06-13 02:37:02
emacs-straight-packages.json>   Installing Doom Emacs!
emacs-straight-packages.json>   
emacs-straight-packages.json>   > Creating /nix/store/y4i72p56mgzkkladrifx49ncsxiqfw25-doom.d/
emacs-straight-packages.json>     ✓ Created /nix/store/y4i72p56mgzkkladrifx49ncsxiqfw25-doom.d/
emacs-straight-packages.json>   ! init.el already exists, skipping
emacs-straight-packages.json>   ! config.el already exists, skipping
emacs-straight-packages.json>   ! packages.el already exists, skipping
emacs-straight-packages.json>   x There was an unexpected error
emacs-straight-packages.json>     Message: File is missing
emacs-straight-packages.json>     Error: (file-missing "Cannot open load file" "No such file or directory" "/build/tmp.QJ2gV0J0wu/local/autoloads.27.2")
emacs-straight-packages.json>     Backtrace:
emacs-straight-packages.json>       (load "/build/tmp.QJ2gV0J0wu/local/autoloads.27.2" nil nomessage)
emacs-straight-packages.json>       (condition-case e (load (string-remove-suffix ".el" doom-autoloads-file) n...
emacs-straight-packages.json>       (progn (setq doom-init-p t) (if doom-debug-p (progn (let ((inhibit-message...
emacs-straight-packages.json>       (if (or force-p (not doom-init-p)) (progn (setq doom-init-p t) (if doom-de...
emacs-straight-packages.json>       (doom-initialize)
emacs-straight-packages.json>       (eval-buffer #<buffer  *load*-983112> nil "/nix/store/2ca9myid9wc3qhhgm3ni...
emacs-straight-packages.json>       (load-with-code-conversion "/nix/store/2ca9myid9wc3qhhgm3nih2qw9lanz869-do...
emacs-straight-packages.json>       (load "/nix/store/2ca9myid9wc3qhhgm3nih2qw9lanz869-doom-src/init" t nomess...
emacs-straight-packages.json>       (let (file-name-handler-alist) (load (expand-file-name file (plist-get pli...
emacs-straight-packages.json>       (condition-case e (let (file-name-handler-alist) (load (expand-file-name f...
emacs-straight-packages.json>   ! Extended backtrace logged to /build/tmp.QJ2gV0J0wu/local/doom.error.log
emacs-straight-packages.json> [nix-doom-emacs] Inhibiting (kill-emacs)
emacs-straight-packages.json> Error in kill-emacs-hook (straight--transaction-finalize): (file-missing "Opening output file" "No such file or directory" "/build/tmp.QJ2gV0J0wu/local/straight/build-27.2-cache.el")
straight-emacs-env> installing
straight-emacs-env> Loading /nix/store/2ca9myid9wc3qhhgm3nih2qw9lanz869-doom-src/bin/doom...
straight-emacs-env> > Executing 'doom install' with Emacs 27.2 at 2022-06-13 02:38:26
straight-emacs-env>   Installing Doom Emacs!
straight-emacs-env>   
straight-emacs-env>   > Creating /nix/store/y4i72p56mgzkkladrifx49ncsxiqfw25-doom.d/
straight-emacs-env>     ✓ Created /nix/store/y4i72p56mgzkkladrifx49ncsxiqfw25-doom.d/
straight-emacs-env>   ! init.el already exists, skipping
straight-emacs-env>   ! config.el already exists, skipping
straight-emacs-env>   ! packages.el already exists, skipping
straight-emacs-env>   x There was an unexpected error
straight-emacs-env>     Message: File is missing
straight-emacs-env>     Error: (file-missing "Cannot open load file" "No such file or directory" "/nix/store/66rp9jyi57cgbz5k1wkjms93ksmac0p5-straight-emacs-env/autoloads.27.2")
straight-emacs-env>     Backtrace:
straight-emacs-env>       (load "/nix/store/66rp9jyi57cgbz5k1wkjms93ksmac0p5-straight-emacs-env/auto...
straight-emacs-env>       (condition-case e (load (string-remove-suffix ".el" doom-autoloads-file) n...
straight-emacs-env>       (progn (setq doom-init-p t) (if doom-debug-p (progn (let ((inhibit-message...
straight-emacs-env>       (if (or force-p (not doom-init-p)) (progn (setq doom-init-p t) (if doom-de...
straight-emacs-env>       (doom-initialize)
straight-emacs-env>       (eval-buffer #<buffer  *load*-41677> nil "/nix/store/2ca9myid9wc3qhhgm3nih...
straight-emacs-env>       (load-with-code-conversion "/nix/store/2ca9myid9wc3qhhgm3nih2qw9lanz869-do...
straight-emacs-env>       (load "/nix/store/2ca9myid9wc3qhhgm3nih2qw9lanz869-doom-src/init" t nomess...
straight-emacs-env>       (let (file-name-handler-alist) (load (expand-file-name file (plist-get pli...
straight-emacs-env>       (condition-case e (let (file-name-handler-alist) (load (expand-file-name f...
straight-emacs-env>   ! Extended backtrace logged to /nix/store/66rp9jyi57cgbz5k1wkjms93ksmac0p5-straight-emacs-env/doom.error.log
note: keeping build directory '/var/buildroot/nix-build-straight-emacs-env.drv-6'
error: builder for '/nix/store/82l9nsbdmpap89p91ij3bk421apn9gi7-straight-emacs-env.drv' failed with exit code 255;
       last 10 log lines:
       >       (condition-case e (load (string-remove-suffix ".el" doom-autoloads-file) n...
       >       (progn (setq doom-init-p t) (if doom-debug-p (progn (let ((inhibit-message...
       >       (if (or force-p (not doom-init-p)) (progn (setq doom-init-p t) (if doom-de...
       >       (doom-initialize)
       >       (eval-buffer #<buffer  *load*-41677> nil "/nix/store/2ca9myid9wc3qhhgm3nih...
       >       (load-with-code-conversion "/nix/store/2ca9myid9wc3qhhgm3nih2qw9lanz869-do...
       >       (load "/nix/store/2ca9myid9wc3qhhgm3nih2qw9lanz869-doom-src/init" t nomess...
       >       (let (file-name-handler-alist) (load (expand-file-name file (plist-get pli...
       >       (condition-case e (let (file-name-handler-alist) (load (expand-file-name f...

Both master and nixpkgs-stable.emacs, both doom-emacs from nix-doom-emacs and doomemacs/master.
Any ideas?

called with unexpected argument 'orgPackages' on the latest nixpkgs

while using home-manager module

error: anonymous function at /nix/store/xpifs2w4s1cwkvc68sp89rrg475zwq81-source/pkgs/top-level/emacs-packages.nix:58:53 called with unexpected argument 'orgPackages'

       at /nix/store/xpifs2w4s1cwkvc68sp89rrg475zwq81-source/lib/customisation.nix:69:16:

           68|     let
           69|       result = f origArgs;
             |                ^
           70|
(use '--show-trace' to show detailed location information)

meanwhile, nixpkgs:

pkgs.emacsPackages.orgPackages is removed
because org elpa is deprecated. The packages in the top level
of pkgs.emacsPackages, such as org and
org-contrib, refer to the ones in
pkgs.emacsPackages.elpaPackages and
pkgs.emacsPackages.nongnuPackages where the
new versions will release.

Home-Manager module should include `~/.emacs.d/early-init.el` file

Starting Doom-Emacs using this project shows Emacs ugly default theme until the load of ~/.emacs.d/init.el happens (that loads the site-lisp). Doom-Emacs itself solves this problems by adding a ~/.emacs.d/early-init.el file, that changes a few things during Emacs initialization so the load of the rest of the code works smoothly (and probably faster too). This projects loads the early-init.el shipped by upstream, but it only loads it after the initial load, so this doesn't really help.

Instead, the Home-Manager module should also link upstream early-init.el file to the ~/.enacs.d/early-init.el location, so we can have its benefits. Sadly we will probably need to patch the original file, since I tried to use as-is but it didn't work (I think because of this line that tries to load the rest of Doom-Emacs from ~/.emacs.d directory). I actually removed all the bootstrap part of that file in my personal configuration and it works, but probably this is not the best way to go.

doesn't work with `emacs-ng`

I tried to use emacs-ng as the emacsPackage but it gets stuck at installation.
SC:
image

I can use emacs-ng normally using nix run github:emacs-ng/emacs-ng.
Here is my config

{ pkgs, inputs, config, ... }: {
  programs.doom-emacs = {
    enable = true;
    doomPrivateDir = ./doom.d;
    emacsPackage = inputs.emacs-ng.packages.x86_64-linux.default;
  };
  services.emacs.enable = true;
}

here emacs-ng is a flake input emacs-ng.url = "github:emacs-ng/emacs-ng";

`doom.d` directory only updates after rebuilding twice

For whatever reason whenever I change my config.el, doom.d in the Nix store does not update until I rebuild again.

nix-info -m:

  • system: "x86_64-darwin"
  • host os: Darwin 20.6.0, macOS 10.16
  • multi-user?: yes
  • sandbox: no
  • version: nix-env (Nix) 2.5.1
  • channels(bandithedoge): "darwin, home-manager, nixpkgs-22.05pre345869.46821ea01c8"
  • channels(root): "nixpkgs-22.05pre345869.46821ea01c8"
  • nixpkgs: /nix/var/nix/profiles/per-user/root/channels/nixpkgs

Package not available: idris2-mode

Hello :) I should say that I'm kind of surprised I got to this point, (no offense, this is criticism in hope to inspire improving the documentation), the docs sure appear like they didn't want me to. (Specifically, this part is very confusing. it should be specified that you mean packages = inputs.nix-doom-emacs; here.

Anyways, onto my main problem: I add a module into my Doom folder, at modules/lang/idris2, mainly because Doom Emacs doesn't have an Idris2 module, and I have 2 files there:

doom/modules/lang/idris2/config.el
;;; lang/idris2/config.el -*- lexical-binding: t; -*-

(use-package! idris2-mode
  :mode ("\\.l?idr\\'" . idris2-mode)
  :config

  (after! lsp-mode
    (add-to-list 'lsp-language-id-configuration '(idris2-mode . "idris2"))

    (lsp-register-client
     (make-lsp-client
      :new-connection (lsp-stdio-connection "idris2-lsp")
      :major-modes '(idris2-mode)
      :server-id 'idris2-lsp)))

  (add-hook 'idris2-mode-hook #'lsp!))
doom/modules/lang/idris2/packages.el
;; -*- no-byte-compile: t; -*-
;;; lang/idris2/packages.el

(package! idris2-mode :recipe (:host github :repo "idris-community/idris2-mode"))

And, finally, I have :lang idris2 in my init.el file. The big issue though, is that nix-doom-emacs doesn't seem to want to use these settings to fetch the repository (this extension isn't on ELPA, and there's also no documentation about how to install extensions that aren't on ELPA, from Git...), and errors with:

error: evaluation aborted with the following error message: 'Package not available: idris2-mode' (THIS IS THE VERY LONG TRACE)
error: evaluation aborted with the following error message: 'Package not available: idris2-mode'

       … while evaluating anonymous lambda

       at /nix/store/a7m15v9ndw92ckanbaw1g5nchi5d3qah-source/libstraight.nix:46:13:

           45|       list = importJSON json;
           46|     in map (x:
             |             ^
           47|       if epkgs ? "${x}" then epkgs.${x}

       … from call site

       … while evaluating 'flatten'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:138:13:

          137|   */
          138|   flatten = x:
             |             ^
          139|     if isList x

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:140:24:

          139|     if isList x
          140|     then concatMap (y: flatten y) x
             |                        ^
          141|     else [x];

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:140:21:

          139|     if isList x
          140|     then concatMap (y: flatten y) x
             |                     ^
          141|     else [x];

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:140:10:

          139|     if isList x
          140|     then concatMap (y: flatten y) x
             |          ^
          141|     else [x];

       … while evaluating 'flatten'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:138:13:

          137|   */
          138|   flatten = x:
             |             ^
          139|     if isList x

       … from call site

       at /nix/store/a7m15v9ndw92ckanbaw1g5nchi5d3qah-source/libstraight.nix:14:12:

           13|           [ x ] ++ withDeps x.propagatedBuildInputs
           14|         ) (flatten p);
             |            ^
           15|    in (unique (filter (d: d ? ename) (flatten (withDeps packages))));

       … while evaluating 'withDeps'

       at /nix/store/a7m15v9ndw92ckanbaw1g5nchi5d3qah-source/libstraight.nix:10:18:

            9|     let
           10|       withDeps = p:
             |                  ^
           11|         map (x:

       … from call site

       at /nix/store/a7m15v9ndw92ckanbaw1g5nchi5d3qah-source/libstraight.nix:15:48:

           14|         ) (flatten p);
           15|    in (unique (filter (d: d ? ename) (flatten (withDeps packages))));
             |                                                ^
           16|

       … while evaluating 'flatten'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:138:13:

          137|   */
          138|   flatten = x:
             |             ^
          139|     if isList x

       … from call site

       at /nix/store/a7m15v9ndw92ckanbaw1g5nchi5d3qah-source/libstraight.nix:15:39:

           14|         ) (flatten p);
           15|    in (unique (filter (d: d ? ename) (flatten (withDeps packages))));
             |                                       ^
           16|

       … while evaluating 'expandDependencies'

       at /nix/store/a7m15v9ndw92ckanbaw1g5nchi5d3qah-source/libstraight.nix:8:24:

            7|
            8|   expandDependencies = packages:
             |                        ^
            9|     let

       … from call site

       at /nix/store/a7m15v9ndw92ckanbaw1g5nchi5d3qah-source/libstraight.nix:40:54:

           39|       mkdir -p ${repo}
           40|       ${(concatMapStringsSep "\n" (installPkg repo) (expandDependencies packages))}
             |                                                      ^
           41|     '';

       … while evaluating 'concatMapStringsSep'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/strings.nix:111:5:

          110|     # List of input strings
          111|     list: concatStringsSep sep (map f list);
             |     ^
          112|

       … from call site

       at /nix/store/a7m15v9ndw92ckanbaw1g5nchi5d3qah-source/libstraight.nix:40:10:

           39|       mkdir -p ${repo}
           40|       ${(concatMapStringsSep "\n" (installPkg repo) (expandDependencies packages))}
             |          ^
           41|     '';

       … while evaluating the attribute 'text' of the derivation 'install-repo'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/pkgs/stdenv/generic/make-derivation.nix:270:7:

          269|     // (lib.optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
          270|       name =
             |       ^
          271|         let

       … while evaluating the attribute 'installPhase' of the derivation 'straight-emacs-env'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/pkgs/stdenv/generic/make-derivation.nix:270:7:

          269|     // (lib.optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
          270|       name =
             |       ^
          271|         let

       … while evaluating the attribute 'buildCommand' of the derivation 'emacs-pgtk-native-comp-with-packages-20220828.0'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/pkgs/stdenv/generic/make-derivation.nix:270:7:

          269|     // (lib.optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
          270|       name =
             |       ^
          271|         let

       … while evaluating 'id'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/trivial.nix:14:5:

           13|     # The value to return
           14|     x: x;
             |     ^
           15|

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/generators.nix:272:47:

          271|           let
          272|             evalNext = x: mapAny (depth + 1) (transform (depth + 1) x);
             |                                               ^
          273|           in

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/generators.nix:270:40:

          269|           else id;
          270|         mapAny = with builtins; depth: v:
             |                                        ^
          271|           let

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/generators.nix:272:27:

          271|           let
          272|             evalNext = x: mapAny (depth + 1) (transform (depth + 1) x);
             |                           ^
          273|           in

       … while evaluating 'evalNext'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/generators.nix:272:24:

          271|           let
          272|             evalNext = x: mapAny (depth + 1) (transform (depth + 1) x);
             |                        ^
          273|           in

       … from call site

       … while evaluating 'go'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/generators.nix:292:18:

          291|     let
          292|     go = indent: v: with builtins;
             |                  ^
          293|     let     isPath   = v: typeOf v == "path";

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/options.nix:331:10:

          330|       prettyEval = builtins.tryEval
          331|         (lib.generators.toPretty { }
             |          ^
          332|           (lib.generators.withRecursion { depthLimit = 10; throwOnDepthLimit = false; } def.value));

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/options.nix:327:38:

          326|
          327|   showDefs = defs: concatMapStrings (def:
             |                                      ^
          328|     let

       … from call site

       … while evaluating 'concatMapStrings'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/strings.nix:54:25:

           53|   */
           54|   concatMapStrings = f: list: concatStrings (map f list);
             |                         ^
           55|

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/options.nix:327:20:

          326|
          327|   showDefs = defs: concatMapStrings (def:
             |                    ^
          328|     let

       … while evaluating 'showDefs'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/options.nix:327:14:

          326|
          327|   showDefs = defs: concatMapStrings (def:
             |              ^
          328|     let

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/options.nix:180:105:

          179|     else assert length defs > 1;
          180|       throw "The option `${showOption loc}' is defined multiple times.\n${message}\nDefinition values:${showDefs defs}";
             |                                                                                                         ^
          181|

       … while evaluating 'mergeUniqueOption'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/options.nix:176:41:

          175|
          176|   mergeUniqueOption = { message }: loc: defs:
             |                                         ^
          177|     if length defs == 1

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/types.nix:388:19:

          387|       merge = loc: defs:
          388|         let res = mergeOneOption loc defs;
             |                   ^
          389|         in if builtins.isPath res || (builtins.isString res && ! builtins.hasContext res)

       … while evaluating 'merge'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/types.nix:387:20:

          386|       check = x: isDerivation x || isStorePath x;
          387|       merge = loc: defs:
             |                    ^
          388|         let res = mergeOneOption loc defs;

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:787:59:

          786|       if isDefined then
          787|         if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
             |                                                           ^
          788|         else let allInvalid = filter (def: ! type.check def.value) defsFinal;

       … while evaluating the attribute 'mergedValue'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:785:5:

          784|     # Type-check the remaining definitions, and merge them. Or throw if no definitions.
          785|     mergedValue =
             |     ^
          786|       if isDefined then

       … while evaluating the option `home-manager.users.mon.programs.emacs.package':

       … while evaluating the attribute 'value'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:751:9:

          750|     in warnDeprecation opt //
          751|       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
             |         ^
          752|         inherit (res.defsFinal') highestPrio;

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:302:72:

          301|           # For definitions that have an associated option
          302|           declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options;
             |                                                                        ^
          303|

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:401:20:

          400|               then recurse (path ++ [name]) value
          401|               else f (path ++ [name]) value;
             |                    ^
          402|         in mapAttrs g;

       … while evaluating 'g'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:398:19:

          397|           g =
          398|             name: value:
             |                   ^
          399|             if isAttrs value && cond value

       … from call site

       … while evaluating the attribute 'emacs'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/pkgs/top-level/emacs-packages.nix:75:5:

           74|     # Propagate overriden scope
           75|     emacs = emacs'.overrideAttrs(old: {
             |     ^
           76|       passthru = (old.passthru or {}) // {

       … while evaluating the attribute 'meta'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/pkgs/build-support/emacs/wrapper.nix:186:20:

          185|
          186|     inherit (emacs) meta;
             |                    ^
          187|   }

       … while evaluating the attribute 'meta.outputsToInstall'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/pkgs/stdenv/generic/make-derivation.nix:506:13:

          505|
          506|      inherit meta passthru overrideAttrs;
             |             ^
          507|    } //

       … while evaluating the attribute 'passAsFile'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/pkgs/build-support/buildenv/default.nix:77:5:

           76|     # XXX: The size is somewhat arbitrary
           77|     passAsFile = if builtins.stringLength pkgs >= 128*1024 then [ "pkgs" ] else [ ];
             |     ^
           78|   }

       … while evaluating the attribute 'passAsFile' of the derivation 'home-manager-path'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/pkgs/stdenv/generic/make-derivation.nix:270:7:

          269|     // (lib.optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
          270|       name =
             |       ^
          271|         let

       … while evaluating the attribute 'value'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:586:44:

          585|       defnsByName' = byName "config" (module: value:
          586|           [{ inherit (module) file; inherit value; }]
             |                                            ^
          587|         ) configs;

       … while evaluating 'dischargeProperties'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:837:25:

          836|   */
          837|   dischargeProperties = def:
             |                         ^
          838|     if def._type or "" == "merge" then

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:766:137:

          765|         defs' = concatMap (m:
          766|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
             |                                                                                                                                         ^
          767|         ) defs;

       … while evaluating definitions from `/nix/store/gby2davr5n2hsxf1rfl6gaf8i17m71ff-source/modules/home-environment.nix':

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:765:28:

          764|         # Process mkMerge and mkIf properties.
          765|         defs' = concatMap (m:
             |                            ^
          766|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:765:17:

          764|         # Process mkMerge and mkIf properties.
          765|         defs' = concatMap (m:
             |                 ^
          766|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

       … while evaluating the attribute 'values'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:878:7:

          877|     in {
          878|       values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
             |       ^
          879|       inherit highestPrio;

       … while evaluating the attribute 'values'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:779:9:

          778|       in {
          779|         values = defs''';
             |         ^
          780|         inherit (defs'') highestPrio;

       … while evaluating the attribute 'mergedValue'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:785:5:

          784|     # Type-check the remaining definitions, and merge them. Or throw if no definitions.
          785|     mergedValue =
             |     ^
          786|       if isDefined then

       … while evaluating the option `home-manager.users.mon.home.activation.installPackages.data':

       … while evaluating the attribute 'value'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:751:9:

          750|     in warnDeprecation opt //
          751|       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
             |         ^
          752|         inherit (res.defsFinal') highestPrio;

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:302:72:

          301|           # For definitions that have an associated option
          302|           declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options;
             |                                                                        ^
          303|

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:401:20:

          400|               then recurse (path ++ [name]) value
          401|               else f (path ++ [name]) value;
             |                    ^
          402|         in mapAttrs g;

       … while evaluating 'g'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:398:19:

          397|           g =
          398|             name: value:
             |                   ^
          399|             if isAttrs value && cond value

       … from call site

       … while evaluating the attribute 'data'

       at /nix/store/gby2davr5n2hsxf1rfl6gaf8i17m71ff-source/modules/lib/dag.nix:83:9:

           82|         name = n;
           83|         data = v.data;
             |         ^
           84|         after = v.after ++ dagBefore dag n;

       … while evaluating the attribute 'data'

       at /nix/store/gby2davr5n2hsxf1rfl6gaf8i17m71ff-source/modules/lib/dag.nix:89:37:

           88|     in if sorted ? result then {
           89|       result = map (v: { inherit (v) name data; }) sorted.result;
             |                                     ^
           90|     } else

       … while evaluating 'mkCmd'

       at /nix/store/gby2davr5n2hsxf1rfl6gaf8i17m71ff-source/modules/home-environment.nix:638:17:

          637|       let
          638|         mkCmd = res: ''
             |                 ^
          639|             _iNote "Activating %s" "${res.name}"

       … from call site

       … while evaluating the attribute 'text' of the derivation 'activation-script'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/pkgs/stdenv/generic/make-derivation.nix:270:7:

          269|     // (lib.optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
          270|       name =
             |       ^
          271|         let

       … while evaluating the attribute 'buildCommand' of the derivation 'home-manager-generation'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/pkgs/stdenv/generic/make-derivation.nix:270:7:

          269|     // (lib.optionalAttrs (attrs ? name || (attrs ? pname && attrs ? version)) {
          270|       name =
             |       ^
          271|         let

       … while evaluating the attribute 'value'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/types.nix:442:60:

          441|           # Push down position info.
          442|           (map (def: mapAttrs (n: v: { inherit (def) file; value = v; }) def.value) defs)));
             |                                                            ^
          443|       emptyValue = { value = {}; };

       … while evaluating 'dischargeProperties'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:837:25:

          836|   */
          837|   dischargeProperties = def:
             |                         ^
          838|     if def._type or "" == "merge" then

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:766:137:

          765|         defs' = concatMap (m:
          766|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
             |                                                                                                                                         ^
          767|         ) defs;

       … while evaluating definitions from `/nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/flake.nix':

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:765:28:

          764|         # Process mkMerge and mkIf properties.
          765|         defs' = concatMap (m:
             |                            ^
          766|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:765:17:

          764|         # Process mkMerge and mkIf properties.
          765|         defs' = concatMap (m:
             |                 ^
          766|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

       … while evaluating the attribute 'values'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:878:7:

          877|     in {
          878|       values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
             |       ^
          879|       inherit highestPrio;

       … while evaluating the attribute 'values'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:779:9:

          778|       in {
          779|         values = defs''';
             |         ^
          780|         inherit (defs'') highestPrio;

       … while evaluating the attribute 'optionalValue'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:797:5:

          796|
          797|     optionalValue =
             |     ^
          798|       if isDefined then { value = mergedValue; }

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/types.nix:438:86:

          437|       merge = loc: defs:
          438|         mapAttrs (n: v: v.value) (filterAttrs (n: v: v ? value) (zipAttrsWith (name: defs:
             |                                                                                      ^
          439|             (mergeDefinitions (loc ++ [name]) elemType defs).optionalValue

       … from call site

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/types.nix:438:51:

          437|       merge = loc: defs:
          438|         mapAttrs (n: v: v.value) (filterAttrs (n: v: v ? value) (zipAttrsWith (name: defs:
             |                                                   ^
          439|             (mergeDefinitions (loc ++ [name]) elemType defs).optionalValue

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:225:62:

          224|   filterAttrs = pred: set:
          225|     listToAttrs (concatMap (name: let v = set.${name}; in if pred name v then [(nameValuePair name v)] else []) (attrNames set));
             |                                                              ^
          226|

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:225:29:

          224|   filterAttrs = pred: set:
          225|     listToAttrs (concatMap (name: let v = set.${name}; in if pred name v then [(nameValuePair name v)] else []) (attrNames set));
             |                             ^
          226|

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:225:18:

          224|   filterAttrs = pred: set:
          225|     listToAttrs (concatMap (name: let v = set.${name}; in if pred name v then [(nameValuePair name v)] else []) (attrNames set));
             |                  ^
          226|

       … while evaluating 'filterAttrs'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:224:23:

          223|   */
          224|   filterAttrs = pred: set:
             |                       ^
          225|     listToAttrs (concatMap (name: let v = set.${name}; in if pred name v then [(nameValuePair name v)] else []) (attrNames set));

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/types.nix:438:35:

          437|       merge = loc: defs:
          438|         mapAttrs (n: v: v.value) (filterAttrs (n: v: v ? value) (zipAttrsWith (name: defs:
             |                                   ^
          439|             (mergeDefinitions (loc ++ [name]) elemType defs).optionalValue

       … while evaluating 'merge'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/types.nix:437:20:

          436|       check = isAttrs;
          437|       merge = loc: defs:
             |                    ^
          438|         mapAttrs (n: v: v.value) (filterAttrs (n: v: v ? value) (zipAttrsWith (name: defs:

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:787:59:

          786|       if isDefined then
          787|         if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
             |                                                           ^
          788|         else let allInvalid = filter (def: ! type.check def.value) defsFinal;

       … while evaluating the attribute 'mergedValue'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:785:5:

          784|     # Type-check the remaining definitions, and merge them. Or throw if no definitions.
          785|     mergedValue =
             |     ^
          786|       if isDefined then

       … while evaluating the option `systemd.services.home-manager-mon.serviceConfig':

       … while evaluating the attribute 'value'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:751:9:

          750|     in warnDeprecation opt //
          751|       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
             |         ^
          752|         inherit (res.defsFinal') highestPrio;

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:302:72:

          301|           # For definitions that have an associated option
          302|           declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options;
             |                                                                        ^
          303|

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:401:20:

          400|               then recurse (path ++ [name]) value
          401|               else f (path ++ [name]) value;
             |                    ^
          402|         in mapAttrs g;

       … while evaluating 'g'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:398:19:

          397|           g =
          398|             name: value:
             |                   ^
          399|             if isAttrs value && cond value

       … from call site

       … while evaluating 'optional'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:255:20:

          254|   */
          255|   optional = cond: elem: if cond then [elem] else [];
             |                    ^
          256|

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/nixos/modules/system/boot/systemd.nix:424:16:

          423|             concatLists [
          424|               (optional (type == "oneshot" && (restart == "always" || restart == "on-success"))
             |                ^
          425|                 "Service '${name}.service' with 'Type=oneshot' cannot have 'Restart=always' or 'Restart=on-success'"

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/nixos/modules/system/boot/systemd.nix:417:16:

          416|       mapAttrsToList
          417|         (name: service:
             |                ^
          418|           let

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:356:16:

          355|   mapAttrsToList = f: attrs:
          356|     map (name: f name attrs.${name}) (attrNames attrs);
             |                ^
          357|

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:356:10:

          355|   mapAttrsToList = f: attrs:
          356|     map (name: f name attrs.${name}) (attrNames attrs);
             |          ^
          357|

       … from call site

       … while evaluating the attribute 'value'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:586:44:

          585|       defnsByName' = byName "config" (module: value:
          586|           [{ inherit (module) file; inherit value; }]
             |                                            ^
          587|         ) configs;

       … while evaluating 'dischargeProperties'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:837:25:

          836|   */
          837|   dischargeProperties = def:
             |                         ^
          838|     if def._type or "" == "merge" then

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:766:137:

          765|         defs' = concatMap (m:
          766|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
             |                                                                                                                                         ^
          767|         ) defs;

       … while evaluating definitions from `/nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/nixos/modules/system/boot/systemd.nix':

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:765:28:

          764|         # Process mkMerge and mkIf properties.
          765|         defs' = concatMap (m:
             |                            ^
          766|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:765:17:

          764|         # Process mkMerge and mkIf properties.
          765|         defs' = concatMap (m:
             |                 ^
          766|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

       … while evaluating the attribute 'values'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:878:7:

          877|     in {
          878|       values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
             |       ^
          879|       inherit highestPrio;

       … while evaluating the attribute 'values'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:779:9:

          778|       in {
          779|         values = defs''';
             |         ^
          780|         inherit (defs'') highestPrio;

       … while evaluating the attribute 'mergedValue'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:785:5:

          784|     # Type-check the remaining definitions, and merge them. Or throw if no definitions.
          785|     mergedValue =
             |     ^
          786|       if isDefined then

       … while evaluating the option `warnings':

       … while evaluating the attribute 'value'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:751:9:

          750|     in warnDeprecation opt //
          751|       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
             |         ^
          752|         inherit (res.defsFinal') highestPrio;

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:302:72:

          301|           # For definitions that have an associated option
          302|           declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options;
             |                                                                        ^
          303|

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:401:20:

          400|               then recurse (path ++ [name]) value
          401|               else f (path ++ [name]) value;
             |                    ^
          402|         in mapAttrs g;

       … while evaluating 'g'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:398:19:

          397|           g =
          398|             name: value:
             |                   ^
          399|             if isAttrs value && cond value

       … from call site

       … while evaluating 'fold''

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:56:15:

           55|       len = length list;
           56|       fold' = n:
             |               ^
           57|         if n == len

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:60:8:

           59|         else op (elemAt list n) (fold' (n + 1));
           60|     in fold' 0;
             |        ^
           61|

       … while evaluating 'foldr'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:53:20:

           52|   */
           53|   foldr = op: nul: list:
             |                    ^
           54|     let

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/trivial.nix:414:33:

          413|
          414|   showWarnings = warnings: res: lib.foldr (w: x: warn w x) res warnings;
             |                                 ^
          415|

       … while evaluating 'showWarnings'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/trivial.nix:414:28:

          413|
          414|   showWarnings = warnings: res: lib.foldr (w: x: warn w x) res warnings;
             |                            ^
          415|

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/nixos/modules/system/activation/top-level.nix:136:10:

          135|     then throw "\nFailed assertions:\n${concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}"
          136|     else showWarnings config.warnings baseSystem;
             |          ^
          137|

       … while evaluating 'fold''

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:56:15:

           55|       len = length list;
           56|       fold' = n:
             |               ^
           57|         if n == len

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:60:8:

           59|         else op (elemAt list n) (fold' (n + 1));
           60|     in fold' 0;
             |        ^
           61|

       … while evaluating 'foldr'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/lists.nix:53:20:

           52|   */
           53|   foldr = op: nul: list:
             |                    ^
           54|     let

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/nixos/modules/system/activation/top-level.nix:139:12:

          138|   # Replace runtime dependencies
          139|   system = foldr ({ oldDependency, newDependency }: drv:
             |            ^
          140|       pkgs.replaceDependency { inherit oldDependency newDependency drv; }

       … while evaluating the attribute 'value'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:586:44:

          585|       defnsByName' = byName "config" (module: value:
          586|           [{ inherit (module) file; inherit value; }]
             |                                            ^
          587|         ) configs;

       … while evaluating 'dischargeProperties'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:837:25:

          836|   */
          837|   dischargeProperties = def:
             |                         ^
          838|     if def._type or "" == "merge" then

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:766:137:

          765|         defs' = concatMap (m:
          766|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))
             |                                                                                                                                         ^
          767|         ) defs;

       … while evaluating definitions from `/nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/nixos/modules/system/activation/top-level.nix':

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:765:28:

          764|         # Process mkMerge and mkIf properties.
          765|         defs' = concatMap (m:
             |                            ^
          766|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:765:17:

          764|         # Process mkMerge and mkIf properties.
          765|         defs' = concatMap (m:
             |                 ^
          766|           map (value: { inherit (m) file; inherit value; }) (builtins.addErrorContext "while evaluating definitions from `${m.file}':" (dischargeProperties m.value))

       … while evaluating the attribute 'values'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:878:7:

          877|     in {
          878|       values = concatMap (def: if getPrio def == highestPrio then [(strip def)] else []) defs;
             |       ^
          879|       inherit highestPrio;

       … while evaluating the attribute 'values'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:779:9:

          778|       in {
          779|         values = defs''';
             |         ^
          780|         inherit (defs'') highestPrio;

       … while evaluating the attribute 'mergedValue'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:785:5:

          784|     # Type-check the remaining definitions, and merge them. Or throw if no definitions.
          785|     mergedValue =
             |     ^
          786|       if isDefined then

       … while evaluating the option `system.build.toplevel':

       … while evaluating the attribute 'value'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:751:9:

          750|     in warnDeprecation opt //
          751|       { value = builtins.addErrorContext "while evaluating the option `${showOption loc}':" value;
             |         ^
          752|         inherit (res.defsFinal') highestPrio;

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/modules.nix:302:72:

          301|           # For definitions that have an associated option
          302|           declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options;
             |                                                                        ^
          303|

       … from call site

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:401:20:

          400|               then recurse (path ++ [name]) value
          401|               else f (path ++ [name]) value;
             |                    ^
          402|         in mapAttrs g;

       … while evaluating 'g'

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:398:19:

          397|           g =
          398|             name: value:
             |                   ^
          399|             if isAttrs value && cond value

       … from call site

       … while evaluating anonymous lambda

       at /nix/store/sjmq1gphj1arbzf4aqqnygd9pf4hkfkf-source/lib/attrsets.nix:518:24:

          517|     let f = attrPath:
          518|       zipAttrsWith (n: values:
             |                        ^
          519|         let here = attrPath ++ [n]; in

       … from call site

Doom fails to build

After this commit, dooms fails to build with the following error:

Single file ghub-pkg.el does not match package name ghub
builder for '/nix/store/p1g1i94fwf88998sqvvf56g14rpghf5j-emacs-ghub-20220429.1708.drv' failed with exit code 255

"Permission denied" error when trying to install doom-emacs

I started with nixos a few days ago so it is possible that this is some mistake made by me.
When I try to install doom-emacs I got this error:

[nix-doom-emacs] Advising doom installer to gather packages to install...
Loading /nix/store/jkxpk8rfyb1fiyrv3kyhsjqdqav4ph5v-doom-src/bin/doom...
> Executing 'doom install' with Emacs 27.2 at 2022-01-26 00:45:39
  Installing Doom Emacs!
  
  > Creating /nix/store/0yj96lx7qhy1xhyq7pn09z25cjbx65zd-doom.d/
    ✓ Created /nix/store/0yj96lx7qhy1xhyq7pn09z25cjbx65zd-doom.d/
  - Creating /nix/store/0yj96lx7qhy1xhyq7pn09z25cjbx65zd-doom.d/init.el
  x There was an unexpected error
    Message: File error
    Error: (file-error "Opening output file" "Permission denied" "/nix/store/0yj96lx7qhy1xhyq7pn09z25cjbx65zd-doom.d/init.el")
    Backtrace:
      (write-region nil nil "/nix/store/0yj96lx7qhy1xhyq7pn09z25cjbx65zd-doom.d/...
      (save-current-buffer (set-buffer temp-buffer) (write-region nil nil temp-f...
      (prog1 (save-current-buffer (set-buffer temp-buffer) (insert-file-contents...
      (unwind-protect (prog1 (save-current-buffer (set-buffer temp-buffer) (inse...
      (let ((temp-file (doom-path doom-private-dir filename)) (temp-buffer (gene...
      (if (let ((p (let ((file filename)) (and (stringp file) (let ((default-dir...
      (let* ((template file) (filename (if template (car-safe (prog1 template (s...
      ((closure ((nofonts-p) (noinstall-p) (noenv-p) (noconfig-p) (--alist--) (p...
      (mapc (closure ((nofonts-p) (noinstall-p) (noenv-p) (noconfig-p) (--alist-...
      (if noconfig-p (doom--print (doom--format (format (doom--output-class 'war...
  ! Extended backtrace logged to /build/tmp.UX26Pmuoc8/local/doom.error.log
[nix-doom-emacs] Inhibiting (kill-emacs)

Error in kill-emacs-hook (straight--transaction-finalize): (file-missing "Opening output file" "No such file or directory" "/build/tmp.UX26Pmuoc8/local/straight/build-27.2-cache.el")

As of now, my configuration looks like this:

# Edit this configuration file to define what should be installed on
# your system.  Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).

{ config, pkgs, lib, ... }:

let
  home-manager = builtins.fetchTarball "https://github.com/nix-community/home-manager/archive/master.tar.gz";
  # doom-emacs = pkgs.callPackage (builtins.fetchTarball {
  #   url = https://github.com/nix-community/nix-doom-emacs/archive/master.tar.gz;
  #   }) {
  #     doomPrivateDir = /home/victor/doom.d;
  #   };
in
{

  imports =
    [ # Include the results of the hardware scan.
      ./hardware-configuration.nix
      (import "${home-manager}/nixos")
    ];

  # services.emacs.package = pkgs.emacsPgtkGcc;
  # nixpkgs.overlays = [
  #   (import (builtins.fetchGit {
  #     url = "https://github.com/nix-community/emacs-overlay.git";
  #     ref = "master";
  #     rev = "c6b057968bbb9a68541ce3edfdf4aa01c32de369";
  #   }))
  # ];

  nixpkgs.config.allowUnfree = true;
  programs.zsh.enable = true;
  users.defaultUserShell = pkgs.zsh;

  home-manager.users.victor = {
    home.packages = with pkgs; [
      vim
      terminator
      spotify
      git
      google-chrome
      vscode
      zsh
      # emacsPgtkGcc
      # doom-emacs
    ];

    home.file.".emacs.d/init.el".text = ''
      (load "default.el")
    '';
...

I take only the part with doom/emacs configuration (commented), if needed I can commit it all on some repo.
The README.md file on this repo it's not so friendly for people who is new to nix, do I have to install emacs with those overlays before installing this package? Or it does it all?

`(package! nano-theme)` not installing correctly

missing 'version' attribute with custom emacsWithPackages from emacs-overlay

I'm trying to set up emacs package management in Nix specifically rather than using the builtin nix-straight management, and I noticed the emacsPackage option allows you to provide a custom emacs package to use to derive doom-emacs.

I've added the community emacs-overlay as a flake input (and made sure nix-doom-emacs follows the same pinned version). I've set emacsPackage to a custom build with flycheck installed here. Building that results in a missing version attribute, presumably from the emacs package that's now the base for doom-emacs.

error: attribute 'version' missing

       at /nix/store/m2vv0bxfchzrjngx8wi0i7dhzb9q2g50-source/pkgs/applications/editors/emacs/elisp-packages/elpa-packages.nix:67:39:

           66|             else super.seq;
           67|       project = if lib.versionAtLeast self.emacs.version "28"
             |                                       ^
           68|                 then null
(use '--show-trace' to show detailed location information)

Tracing the custom base package however shows that the version is set to "28.1" - expected, since the base emacsUnstable from emacs-overlay being used is 28.1.

Does emacsPackage require a base non-derived emacs package for doom-emacs to build correctly? Or am I missing a key part of the process to build a custom emacs package?

For reference, I am using the NixOS wiki Emacs article and the source from the home-manager module option here.

I've tested the custom base package in environment.systemPackages and home.packages without issue, so the error is isolated to using it as a base for doom-emacs.

Flake fails to build with default install options

I tried to add doom-emacs into my nix-darwin flake as shown in the readme (as I would any other home-manager module), which can be found here at the broken commit.

Upon install doom-emacs is failing to build the emacs derivation with extra packages, the build fails when installing extra packages with nix-straight, this being the main excerpt of the trace:

(file-error "Creating directory")

(signal file-error ("Creating directory" "Permission denied" "/nix/store/y0rwwmkxvw7isb81g9x6nipyb8i4lwq4-doom-src/Executing git is not allowed; command line: rev-parse --git    -path hooks"))

(files--ensure-directory "/nix/store/y0rwwmkxvw7isb81g9x6nipyb8i4lwq4-doom-src/executing git is not allowed; command line: rev-parse --git-path hooks")

(make-directory "executing git is not allowed; command line: rev-parse --git-path hooks" parents)

The full trace is available in a Gist here.

I haven't done anything past enable the doom-emacs program in home-manager and supply a path to a copy-pasted version of test/doom.d, as I do not have any previous config and am starting from scratch.

On first glance this seems like a permissions issue in the nix store during build, or a lack of git as a build dependency somewhere, but I have not added any extra packages, and I would expect an error along the lines of command 'git' could not be found" if that were the case.

Has anyone else run into this on a fresh flake install?

Can't intall package

I try to install trapm-nspawn but it isn't there.

  • Expected Behavior
    I can use tramp-nspawn
  • Actual Beahavoir
    I get an error
Error in user's config: config.el, (file-missing Cannot open load file No such file or directory tramp-nspawn)

My path is

("/nix/store/3crzy4n80vp2b6i3i8ja14xw01i7vbh3-doom-private/snippets/" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/package-lint" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/ht" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/emojify" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/yaml" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/forge" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/deferred" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/uuidgen" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/treepy" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/ghub" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/a" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/emacsql" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/emacsql-sqlite" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/closql" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/async" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/magit-popup" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/magit-section" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/popup" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/with-editor" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/transient" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/annalist" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/expand-region" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/embrace" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/fringe-helper" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/git-gutter" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/goto-chg" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/shrink-path" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/let-alist" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/epl" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/pkg-info" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/nadvice" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/elisp-refs" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/f" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/s" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/dash" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/parent-mode" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/bind-key" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/tramp-nspawn" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/link-hint" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/drag-stuff" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/company-shell" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/ob-async" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/orgit" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-org" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/org-cliplink" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/toc-org" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/ox-clip" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/org-yt" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/htmlize" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/avy" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/org-contrib" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/org" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-markdown" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/edit-indirect" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/markdown-toc" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/markdown-mode" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/buttercup" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/flycheck-cask" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/flycheck-package" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/elisp-demos" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/elisp-def" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/overseer" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/macrostep" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/highlight-quoted" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/code-review" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/magit-todos" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/magit-gitflow" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/magit" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/request" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/dumb-jump" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/eros" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/quickrun" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/flycheck-popup-tip" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/flycheck" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/git-modes" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/git-timemachine" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/git-commit" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/browse-at-remote" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/undo-fu-session" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/undo-fu" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/fd-dired" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/dired-rsync" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/dired-git-info" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/diredfl" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/doom-snippets" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/auto-yasnippet" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-vimish-fold" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/vimish-fold" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/yasnippet" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-collection" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-quick-diff" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/exato" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-visualstar" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-traces" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-textobj-anyblock" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-surround" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-snipe" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-numbers" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-nerd-commenter" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-lion" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-indent-plus" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-exchange" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-escape" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-embrace" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-easymotion" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-args" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/persp-mode" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/vi-tilde-fringe" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/git-gutter-fringe" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-goggles" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/evil-anzu" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/anzu" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/doom-modeline" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/hl-todo" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/solaire-mode" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/doom-themes" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/wgrep" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/marginalia" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/embark-consult" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/embark" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/consult-flycheck" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/consult-dir" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/compat" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/consult" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/orderless" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/vertico" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/company-dict" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/company" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/which-key" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/general" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/project" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/projectile" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/ws-butler" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/smartparens" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/pcre2el" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/helpful" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/dtrt-indent" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/better-jumper" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/restart-emacs" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/rainbow-delimiters" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/highlight-numbers" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/hide-mode-line" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/all-the-icons" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/use-package" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/straight" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/explain-pause-mode" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/gcmh" "/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/auto-minor-mode" "/nix/store/q67j3b8xw742z8959nalmqy5dy9y79h6-doom-src/lisp/" "/nix/store/32f2i9yhzr7mdhan0z3rva7iyl8nh097-emacs-straight.el/share/emacs/site-lisp" "/nix/store/17911chzjyidcmw6xslxlpjzrj0qljj5-emacs-packages-deps/share/emacs/site-lisp" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/site-lisp" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/site-lisp" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/vc" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/url" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/textmodes" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/progmodes" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/play" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/org" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/nxml" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/net" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/mh-e" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/mail" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/leim" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/language" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/international" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/image" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/gnus" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/eshell" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/erc" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/emulation" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/emacs-lisp" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/cedet" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/calendar" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/calc" "/nix/store/cazpb1hdjqin0wp9x1855k0gwy1l3kmn-emacs-28.1/share/emacs/28.1/lisp/obsolete")

/nix/store/y4fbc1pa9pap01xn1ia5b156p68614qm-straight-emacs-env/straight/build-28.1/tramp-nspawn doesn't exists
I have a minmal example
flake.nix

{
  description = "Test";

  inputs = {
    nix-doom-emacs.url = "github:nix-community/nix-doom-emacs";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nix-doom-emacs, flake-utils, ... }@inputs:
    flake-utils.lib.eachDefaultSystem (
      system: {
        packages.default = nix-doom-emacs.package.${system} {
          doomPrivateDir = ./doom.d;
          emacsPackagesOverlay = _: super:
            {
              tramp-nspawn = super.trivialBuild rec {
                pname = "tramp-nspawn";
                version = "0.0.0";
                src = super.fetchFromGitHub {
                  owner = "emacs-straight";
                  repo = pname;
                  rev = "9977691242b50a853b351d6d234968c1c10f0af0";
                  sha256 = "0m5fzpqxk7hrbxsgqplkg7h2p7gv6s1miymv3gvw0cz039skaf0s";
                };
              };
            };
        };
      });
    }

flake.lock

{
  "nodes": {
    "doom-emacs": {
      "flake": false,
      "locked": {
        "lastModified": 1660901074,
        "narHash": "sha256-3apl0eQlfBj3y0gDdoPp2M6PXYnhxs0QWOHp8B8A9sc=",
        "owner": "doomemacs",
        "repo": "doomemacs",
        "rev": "c44bc81a05f3758ceaa28921dd9c830b9c571e61",
        "type": "github"
      },
      "original": {
        "owner": "doomemacs",
        "ref": "master",
        "repo": "doomemacs",
        "type": "github"
      }
    },
    "doom-snippets": {
      "flake": false,
      "locked": {
        "lastModified": 1659894476,
        "narHash": "sha256-1arRqlTos5uj6N47N4hyzHMMoUBxsxaZ/NK7iN5A+ZY=",
        "owner": "doomemacs",
        "repo": "snippets",
        "rev": "f957f8d195872f19c7ab0a777d592c611e10e9bb",
        "type": "github"
      },
      "original": {
        "owner": "doomemacs",
        "repo": "snippets",
        "type": "github"
      }
    },
    "emacs-overlay": {
      "flake": false,
      "locked": {
        "lastModified": 1662056744,
        "narHash": "sha256-DSVel5s2LajK2F+bxKwenfbDis63GprQLJjAfpfWgfU=",
        "owner": "nix-community",
        "repo": "emacs-overlay",
        "rev": "6b4445aa659fa26b4f36d9975b34632312699a85",
        "type": "github"
      },
      "original": {
        "owner": "nix-community",
        "repo": "emacs-overlay",
        "type": "github"
      }
    },
    "emacs-so-long": {
      "flake": false,
      "locked": {
        "lastModified": 1575031854,
        "narHash": "sha256-xIa5zO0ZaToDrec1OFjBK6l39AbA4l/CE4LInVu2hi0=",
        "owner": "hlissner",
        "repo": "emacs-so-long",
        "rev": "ed666b0716f60e8988c455804de24b55919e71ca",
        "type": "github"
      },
      "original": {
        "owner": "hlissner",
        "repo": "emacs-so-long",
        "type": "github"
      }
    },
    "evil-escape": {
      "flake": false,
      "locked": {
        "lastModified": 1588439096,
        "narHash": "sha256-aB2Ge5o/93B18tPf4fN1c+O46CNh/nOqwLJbox4c8Gw=",
        "owner": "hlissner",
        "repo": "evil-escape",
        "rev": "819f1ee1cf3f69a1ae920e6004f2c0baeebbe077",
        "type": "github"
      },
      "original": {
        "owner": "hlissner",
        "repo": "evil-escape",
        "type": "github"
      }
    },
    "evil-markdown": {
      "flake": false,
      "locked": {
        "lastModified": 1626852210,
        "narHash": "sha256-HBBuZ1VWIn6kwK5CtGIvHM1+9eiNiKPH0GUsyvpUVN8=",
        "owner": "Somelauw",
        "repo": "evil-markdown",
        "rev": "8e6cc68af83914b2fa9fd3a3b8472573dbcef477",
        "type": "github"
      },
      "original": {
        "owner": "Somelauw",
        "repo": "evil-markdown",
        "type": "github"
      }
    },
    "evil-org-mode": {
      "flake": false,
      "locked": {
        "lastModified": 1607203864,
        "narHash": "sha256-JxwqVYDN6OIJEH15MVI6XOZAPtUWUhJQWHyzcrUvrFg=",
        "owner": "hlissner",
        "repo": "evil-org-mode",
        "rev": "a9706da260c45b98601bcd72b1d2c0a24a017700",
        "type": "github"
      },
      "original": {
        "owner": "hlissner",
        "repo": "evil-org-mode",
        "type": "github"
      }
    },
    "evil-quick-diff": {
      "flake": false,
      "locked": {
        "lastModified": 1575189609,
        "narHash": "sha256-oGzl1ayW9rIuq0haoiFS7RZsS8NFMdEA7K1BSozgnJU=",
        "owner": "rgrinberg",
        "repo": "evil-quick-diff",
        "rev": "69c883720b30a892c63bc89f49d4f0e8b8028908",
        "type": "github"
      },
      "original": {
        "owner": "rgrinberg",
        "repo": "evil-quick-diff",
        "type": "github"
      }
    },
    "explain-pause-mode": {
      "flake": false,
      "locked": {
        "lastModified": 1595842060,
        "narHash": "sha256-++znrjiDSx+cy4okFBBXUBkRFdtnE2x+trkmqjB3Njs=",
        "owner": "lastquestion",
        "repo": "explain-pause-mode",
        "rev": "2356c8c3639cbeeb9751744dbe737267849b4b51",
        "type": "github"
      },
      "original": {
        "owner": "lastquestion",
        "repo": "explain-pause-mode",
        "type": "github"
      }
    },
    "flake-compat": {
      "flake": false,
      "locked": {
        "lastModified": 1650374568,
        "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
        "owner": "edolstra",
        "repo": "flake-compat",
        "rev": "b4a34015c698c7793d592d66adbab377907a2be8",
        "type": "github"
      },
      "original": {
        "owner": "edolstra",
        "repo": "flake-compat",
        "type": "github"
      }
    },
    "flake-utils": {
      "locked": {
        "lastModified": 1659877975,
        "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
        "owner": "numtide",
        "repo": "flake-utils",
        "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
        "type": "github"
      },
      "original": {
        "owner": "numtide",
        "repo": "flake-utils",
        "type": "github"
      }
    },
    "flake-utils_2": {
      "locked": {
        "lastModified": 1659877975,
        "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
        "owner": "numtide",
        "repo": "flake-utils",
        "rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
        "type": "github"
      },
      "original": {
        "owner": "numtide",
        "repo": "flake-utils",
        "type": "github"
      }
    },
    "format-all": {
      "flake": false,
      "locked": {
        "lastModified": 1581716637,
        "narHash": "sha256-ul7LCe60W8TIvUmUtZtZRo8489TK9iTPDsLHmzxY57M=",
        "owner": "lassik",
        "repo": "emacs-format-all-the-code",
        "rev": "47d862d40a088ca089c92cd393c6dca4628f87d3",
        "type": "github"
      },
      "original": {
        "owner": "lassik",
        "repo": "emacs-format-all-the-code",
        "rev": "47d862d40a088ca089c92cd393c6dca4628f87d3",
        "type": "github"
      }
    },
    "nix-doom-emacs": {
      "inputs": {
        "doom-emacs": "doom-emacs",
        "doom-snippets": "doom-snippets",
        "emacs-overlay": "emacs-overlay",
        "emacs-so-long": "emacs-so-long",
        "evil-escape": "evil-escape",
        "evil-markdown": "evil-markdown",
        "evil-org-mode": "evil-org-mode",
        "evil-quick-diff": "evil-quick-diff",
        "explain-pause-mode": "explain-pause-mode",
        "flake-compat": "flake-compat",
        "flake-utils": "flake-utils_2",
        "format-all": "format-all",
        "nix-straight": "nix-straight",
        "nixpkgs": "nixpkgs",
        "nose": "nose",
        "ob-racket": "ob-racket",
        "org": "org",
        "org-contrib": "org-contrib",
        "org-yt": "org-yt",
        "php-extras": "php-extras",
        "revealjs": "revealjs",
        "rotate-text": "rotate-text",
        "sln-mode": "sln-mode",
        "ts-fold": "ts-fold",
        "ws-butler": "ws-butler"
      },
      "locked": {
        "lastModified": 1662665437,
        "narHash": "sha256-Aksr5xArGPbyrqEa/jxXn0/d9hc639SvpgUqfkdPLCY=",
        "owner": "nix-community",
        "repo": "nix-doom-emacs",
        "rev": "a62512125de85c81fa8d1bb77ba8c8fe96d5b390",
        "type": "github"
      },
      "original": {
        "owner": "nix-community",
        "repo": "nix-doom-emacs",
        "type": "github"
      }
    },
    "nix-straight": {
      "flake": false,
      "locked": {
        "lastModified": 1656684255,
        "narHash": "sha256-ZefQiv4Ipu2VkLjs1oyelTLU7kBVJgkcQd+yBpJU0yo=",
        "owner": "nix-community",
        "repo": "nix-straight.el",
        "rev": "fb8dd5c44cde70abd13380766e40af7a63888942",
        "type": "github"
      },
      "original": {
        "owner": "nix-community",
        "repo": "nix-straight.el",
        "type": "github"
      }
    },
    "nixpkgs": {
      "locked": {
        "lastModified": 1661353537,
        "narHash": "sha256-1E2IGPajOsrkR49mM5h55OtYnU0dGyre6gl60NXKITE=",
        "owner": "NixOS",
        "repo": "nixpkgs",
        "rev": "0e304ff0d9db453a4b230e9386418fd974d5804a",
        "type": "github"
      },
      "original": {
        "id": "nixpkgs",
        "ref": "nixpkgs-unstable",
        "type": "indirect"
      }
    },
    "nose": {
      "flake": false,
      "locked": {
        "lastModified": 1400604510,
        "narHash": "sha256-daEi8Kta1oGaDEmUUDDQMahTTPOpvNpDKk22rlr7cB0=",
        "owner": "emacsattic",
        "repo": "nose",
        "rev": "f8528297519eba911696c4e68fa88892de9a7b72",
        "type": "github"
      },
      "original": {
        "owner": "emacsattic",
        "repo": "nose",
        "type": "github"
      }
    },
    "ob-racket": {
      "flake": false,
      "locked": {
        "lastModified": 1584656173,
        "narHash": "sha256-rBUYDDCXb+3D4xTPQo9UocbTPZ32kWV1Uya/1DmZknU=",
        "owner": "xchrishawk",
        "repo": "ob-racket",
        "rev": "83457ec9e1e96a29fd2086ed19432b9d75787673",
        "type": "github"
      },
      "original": {
        "owner": "xchrishawk",
        "repo": "ob-racket",
        "type": "github"
      }
    },
    "org": {
      "flake": false,
      "locked": {
        "lastModified": 1662044935,
        "narHash": "sha256-ZpxKw8L/IpxolkGyQMDut6V4i8I1T5za0QBBrztfcts=",
        "owner": "emacs-straight",
        "repo": "org-mode",
        "rev": "e36c3cc21b8b1471e1f7928a118de693819c3f12",
        "type": "github"
      },
      "original": {
        "owner": "emacs-straight",
        "repo": "org-mode",
        "type": "github"
      }
    },
    "org-contrib": {
      "flake": false,
      "locked": {
        "lastModified": 1661026052,
        "narHash": "sha256-rE7aioQxeVjo+TVI4DIppKkmf/c7tRNzK6hQJAmUnVE=",
        "owner": "emacsmirror",
        "repo": "org-contrib",
        "rev": "0740bd3fe69c4b327420185d931dcf0a9900a80e",
        "type": "github"
      },
      "original": {
        "owner": "emacsmirror",
        "repo": "org-contrib",
        "type": "github"
      }
    },
    "org-yt": {
      "flake": false,
      "locked": {
        "lastModified": 1527381913,
        "narHash": "sha256-dzQ6B7ryzatHCTLyEnRSbWO0VUiX/FHYnpHTs74aVUs=",
        "owner": "TobiasZawada",
        "repo": "org-yt",
        "rev": "40cc1ac76d741055cbefa13860d9f070a7ade001",
        "type": "github"
      },
      "original": {
        "owner": "TobiasZawada",
        "repo": "org-yt",
        "type": "github"
      }
    },
    "php-extras": {
      "flake": false,
      "locked": {
        "lastModified": 1573312690,
        "narHash": "sha256-r4WyVbzvT0ra4Z6JywNBOw5RxOEYd6Qe2IpebHXkj1U=",
        "owner": "arnested",
        "repo": "php-extras",
        "rev": "d410c5af663c30c01d461ac476d1cbfbacb49367",
        "type": "github"
      },
      "original": {
        "owner": "arnested",
        "repo": "php-extras",
        "type": "github"
      }
    },
    "revealjs": {
      "flake": false,
      "locked": {
        "lastModified": 1660499724,
        "narHash": "sha256-BhnEmX+8h0MVol7T4Zr2w53A+AmgzcVirpwHCR/G73U=",
        "owner": "hakimel",
        "repo": "reveal.js",
        "rev": "b23d15c4304a9a1b72f484171fc97682e5ed85a3",
        "type": "github"
      },
      "original": {
        "owner": "hakimel",
        "repo": "reveal.js",
        "type": "github"
      }
    },
    "root": {
      "inputs": {
        "flake-utils": "flake-utils",
        "nix-doom-emacs": "nix-doom-emacs"
      }
    },
    "rotate-text": {
      "flake": false,
      "locked": {
        "lastModified": 1322962747,
        "narHash": "sha256-SOeOgSlcEIsKhUiYDJv0p+mLUb420s9E2BmvZQvZ0wk=",
        "owner": "debug-ito",
        "repo": "rotate-text.el",
        "rev": "48f193697db996855aee1ad2bc99b38c6646fe76",
        "type": "github"
      },
      "original": {
        "owner": "debug-ito",
        "repo": "rotate-text.el",
        "type": "github"
      }
    },
    "sln-mode": {
      "flake": false,
      "locked": {
        "lastModified": 1423727528,
        "narHash": "sha256-XqkqPyEJuTtFslOz1fpTf/Klbd/zA7IGpzpmum/MGao=",
        "owner": "sensorflo",
        "repo": "sln-mode",
        "rev": "0f91d1b957c7d2a7bab9278ec57b54d57f1dbd9c",
        "type": "github"
      },
      "original": {
        "owner": "sensorflo",
        "repo": "sln-mode",
        "type": "github"
      }
    },
    "ts-fold": {
      "flake": false,
      "locked": {
        "lastModified": 1662006199,
        "narHash": "sha256-gDelW/h2LyknTQNkHODvzCJCKelLdLIQoDh/L1lk3KA=",
        "owner": "jcs-elpa",
        "repo": "ts-fold",
        "rev": "28409a0ceede0751ed9d520c6a19d1f5f1211502",
        "type": "github"
      },
      "original": {
        "owner": "jcs-elpa",
        "repo": "ts-fold",
        "type": "github"
      }
    },
    "ws-butler": {
      "flake": false,
      "locked": {
        "lastModified": 1634511126,
        "narHash": "sha256-c0y0ZPtxxICPk+eaNbbQf6t+FRCliNY54CCz9QHQ8ZI=",
        "owner": "hlissner",
        "repo": "ws-butler",
        "rev": "572a10c11b6cb88293de48acbb59a059d36f9ba5",
        "type": "github"
      },
      "original": {
        "owner": "hlissner",
        "repo": "ws-butler",
        "type": "github"
      }
    }
  },
  "root": "root",
  "version": 7
}

config.el

(use-package! tramp-nspawn
  :config (tramp-nspawn-setup))

packages.el

(package! tramp-nspawn)

Fails to build due to 'emacs-ghub' melpa package

Hello,

Just recently, I am having issues building 'nix-doom-emacs' on both master and develop branches. I am installing via home-manager and you can see my configuration at the end of this comment. It seems to be related to a MELPA package thats required by nix-doom-emacs.

nix-doom-emacs build fails due to during MELPA 'emacs-ghub' package (github.com/magit/ghub) install due to package name not matching up:

Debugger entered--Lisp error: (error "Single file ghub-pkg.el does not match package nam...")
  signal(error ("Single file ghub-pkg.el does not match package nam..."))
  error("Single file %s does not match package name %s" "ghub-pkg.el" "ghub")
  (if (string-equal (downcase (concat name ".el")) (downcase (file-name-nondirectory file))) nil (error "Single file %s does not match package name %s" file name))

emacs-ghub is required by straight it looks like, which is used by the base emacs-with-packages for recipe installation (?) which would make sense:

nix-store --query --referrers /nix/store/pryw0slmw21h46010p99hmcixngaqvlb-emacs-ghub-20220429.1708.drv
/nix/store/hy22353f46nbw49338kfimhfklxjijcn-emacs-forge-20220506.420.drv
/nix/store/qnh6larvwsqpg5maj3vfm7qbxd50zq19-emacs-forge-20220506.420.drv
/nix/store/qzpawybrndznp3m1863vwm65isfjkh54-emacs-code-review-20220503.1344.drv
/nix/store/jhqy4rs1skdh6gcj715xa3543mrw9qbs-install-repo.drv
/nix/store/w06n1jlkgxfa67h0n7gcs93zw1s5ffi4-emacs-code-review-20220503.1344.drv
/nix/store/k49v48v6klpbm00y0xw0pj645zm2qn6z-install-repo.drv

nix-store --query --referrers /nix/store/jhqy4rs1skdh6gcj715xa3543mrw9qbs-install-repo.drv
/nix/store/6dqqamr0p38zflf914pd50vdfr5xflw9-straight-emacs-env.drv

nix-store --query --referrers /nix/store/6dqqamr0p38zflf914pd50vdfr5xflw9-straight-emacs-env.drv
/nix/store/msir64mjlnrf2n772r5f47a65fpa8hii-nix-integration.patch.drv
/nix/store/xsiacifa9byahyii8xbpfn2m2ld8rdq6-build-summary.drv
/nix/store/z4qzr31rzhabw09v80d8hzvps1cki79j-emacs-with-packages-28.1.drv

I found a recent issue (magit/ghub/issues/156) in 'magit/ghub' regarding this exact issue I am experiencing. The workaround is to update MELPA checkout, which would be done as part of the nix-doom-emacs derivation build, so i'm not sure how that fix would apply here. Apparently the issue started after melpa/package-build@35017a2

I've tried clearing my garbage, performing home-manager re-build and also removed from HM configuration for a successful build but same issue once I add it back into my nix config.

Configuration:

{ pkgs, ... }:

let
  doom-emacs = pkgs.callPackage (builtins.fetchTarball {
    url = https://github.com/nix-community/nix-doom-emacs/archive/develop.tar.gz;
  }) {
    doomPrivateDir = ./doom.d;

    dependencyOverrides = {
      "emacs-overlay" = (builtins.fetchTarball {
          url = https://github.com/nix-community/emacs-overlay/archive/master.tar.gz;
      });
    };
    emacsPackagesOverlay = self: super: {
      gitignore-mode = pkgs.emacsPackages.git-modes;
      gitconfig-mode = pkgs.emacsPackages.git-modes;
    };
  };

in
{
  home.packages = [ doom-emacs ];
  home.file.".emacs.d/init.el".text = ''
    (load "default.el")
  '';
}

Regards,
Nick

orgPackages deprecated in emacs-packages

This commit NixOS/nixpkgs@932ab30#diff-56c122d979843ece29fff08e6d83c47ccf8cdbfedb68e4de21dd0cae5337dcf4 deprecates orgPackages.

This is leading to this error when I try to use nix-doom-emacs

error: anonymous function at /nix/store/pwz0d92vl5hjrvhiri3qzazxjnf1r8wy-source/pkgs/top-level/emacs-packages.nix:58:53 called with unexpected argument 'orgPackages'

       at /nix/store/pwz0d92vl5hjrvhiri3qzazxjnf1r8wy-source/lib/customisation.nix:69:16:

           68|     let
           69|       result = f origArgs;
             |                ^
           70|
(use '--show-trace' to show detailed location information)

Allow editing `config.el` and other runtime files without rebuild

We need to pass doomPrivateDir argument to default.nix to do basically two things:

  • Build the equivalent of ~/.doom.d/.local directory, with the doom-emacs dependencies properly build
  • Use in the Emacs wrapper so we can load the configs from ~/.doom.d during runtime

Arguably, we should always trigger a rebuilt after a dependency change, since otherwise we will have runtime errors when trying to use this dependency. However, we shouldn't necessary trigger a new rebuild if I just add e.g. a new (map! ...), since this change should only affect the runtime. Since we only have one input though, it is impossible to differentiate between the two, so we effectively always trigger a rebuild after any config change.

My proposal is to separate those two by adding a new argument to default.nix, runtimeDoomPrivateDir. By default this will be doomPrivateDir itself, so we will not have any changes. However we can allow the user to set this to a separate directory.

How can this help? Let's take this patch from my PoC:

diff --git a/default.nix b/default.nix
index e159b35..6f12645 100644
--- a/default.nix
+++ b/default.nix
@@ -1,5 +1,6 @@
 { # The files would be going to ~/.config/doom (~/.doom.d)
 doomPrivateDir
+, runtimeDoomPrivateDir ? doomPrivateDir
 /* Extra packages to install

   # Stage 5: catch-all wrapper capable to run doom-emacs even
@@ -230,7 +231,7 @@ in emacs.overrideAttrs (esuper:
     cmd = ''
       wrapEmacs() {
           wrapProgram $1 \
-                    --set DOOMDIR ${doomDir} \
+                    --set DOOMDIR ${runtimeDoomPrivateDir} \
                     --set NIX_DOOM_EMACS_BINARY $1 \
                     --set __DEBUG_doom_emacs_DIR ${doom-emacs} \
                     --set __DEBUG_doomLocal_DIR ${doomLocal}
diff --git a/modules/home-manager.nix b/modules/home-manager.nix
index 18807de..ebd0016 100644
--- a/modules/home-manager.nix
+++ b/modules/home-manager.nix
@@ -22,6 +22,16 @@ in
       '';
       apply = path: if lib.isStorePath path then path else builtins.path { inherit path; };
     };
+    runtimeDoomPrivateDir = mkOption {
+      default = cfg.doomPrivateDir;
+      description = ''
+        Path to your `.doom.d` directory.
+
+        The specified directory should  contain yoour `init.el`, `config.el` and
+        `packages.el` files.
+      '';
+      apply = path: if lib.isStorePath path then path else builtins.path { inherit path; };
+    };
     extraConfig = mkOption {
       description = ''
         Extra configuration options to pass to doom-emacs.
@@ -85,7 +95,7 @@ in
       emacs = pkgs.callPackage self {
         extraPackages = (epkgs: cfg.extraPackages);
         emacsPackages = pkgs.emacsPackagesFor cfg.emacsPackage;
-        inherit (cfg) doomPrivateDir extraConfig emacsPackagesOverlay;
+        inherit (cfg) doomPrivateDir runtimeDoomPrivateDir extraConfig emacsPackagesOverlay;
         dependencyOverrides = inputs;
       };
     in

We can them use it as the following is:

# To clarify, my configuration is stored in `/etc/nixos` and my HM Emacs config is stored in `/etc/nixos/home-manager/emacs`
{
  programs.doom-emacs = rec {
    enable = true;
    doomPrivateDir = ./doom-emacs;
    runtimeDoomPrivateDir = config.lib.file.mkOutOfStoreSymlink "/etc/nixos/home-manager/emacs/doom-emacs";
  };
}

We are using the mkOutOfStoreSymlink to abuse a feature from Home-Manager, that allow us to create a deterministic symbolic link pointing for a place outside of the /nix/store. So now, any edits in my Emacs configuration will automatically reflect in my next Emacs restart, without need to rebuild my configuration.

We could even go further:

{
  programs.doom-emacs = rec {
    enable = true;
    doomPrivateDir = ./doom-emacs;
    runtimeDoomPrivateDir = config.lib.file.mkOutOfStoreSymlink "/etc/nixos/home-manager/emacs/runtime-doom-emacs";
  };
}

And having the following organization between doom-emacs vs runtime-doom-emacs directory:

$ ls -l doom-emacs
total 16
-rw-r--r-- 1 thiagoko users 9947 jul  9 02:01 init.el
-rw-r--r-- 1 thiagoko users  399 jul  9 02:00 packages.el

$ ls -l runtime-doom-emacs
total 12
drwxr-xr-x 3 thiagoko users   22 jul  9 21:13 snippets
-rw-r--r-- 1 thiagoko users  436 jul  9 21:13 autoload.el
-rw-r--r-- 1 thiagoko users 4927 jul  9 21:13 config.el
lrwxrwxrwx 1 thiagoko users   21 jul  9 22:16 init.el -> ../doom-emacs/init.el
lrwxrwxrwx 1 thiagoko users   25 jul  9 22:16 packages.el -> ../doom-emacs/packages.el

So now what we have here? The only two files that we traditionally declare new packages in doom-emacs is either init.el or packages.el. Putting those two files in the doomPrivateDir will make our dependencies basically immutable, while our runtimeDoomPrivateDir we have the symbolic links of those two previous files (to ensure we keep both dependencies in sync), and all the files that only matters during runtime.

With the organization above, we basically can have the cake and eat it too: we will only have rebuilds if we change our dependencies. It should be kept in mind this only works if your doom-emacs configuration is well organized (there is nothing that impedes you to declare (package! ...) inside your config.el, for example), so we should mark this option as explicitly unsupported. However, when well used this should fix one of the main issues (in my opinion) when using this project.

emacs-project failed to build

I get a hash-mismatch when trying to update my nixos config (flake-based).

error: hash mismatch in fixed-output derivation '/nix/store/zr7niwxxr530xsf8g743n1q60s5286yw-project-0.8.1.tar.drv':
         specified: sha256-yDgyXpEHWHDnrqne2meSmSm2y1kZdz+8LZuAqOWaf/Q=
            got:    sha256-M7BzLw2jO0LZRDsSLGLGmurnRUoO9Cr6hQxSGDHSUmA=

Using the master branch of nix-doom-emacs and following nixos-unstable for nixpkgs.

Any idea where this would originate? And can I override it somewhere? I've been using nix for a couple of months now, which in nix-land means absolute beginner 😅

Error: "doomPrivateDir must be a path or a derivation" but doomPrivateDir is a path

In my nix config, I have:

doomPrivateDir =  ../doom.d ;

but when I attempt to build my configuration, I get this error:

trace: doomPrivateDir must be a path or a derivation
error: assertion '(((lib).assertMsg  (((builtins).isPath  doomPrivateDir) || ((lib).isDerivation  doomPrivateDir)))  "doomPrivateDir must be a path or a derivation")' failed

       at /nix/store/8vxck6r37jnp7y4vh7g52yqy5897w2zw-source/default.nix:68:1:

           67|
           68| assert (lib.assertMsg ((builtins.isPath doomPrivateDir) || (lib.isDerivation doomPrivateDir)) "doomPrivateDir must be a path or a derivation");
             | ^
           69|
(use '--show-trace' to show detailed location information)
make: *** [Makefile:6: build] Error 1

Hmmmm, okay. Maybe ../doom.d is not a path... but when I try the assertion in the repl, I get this:

nix-repl> builtins.isPath ../doom.d
true

This is quite confusing... is there something I'm missing?

How to reload config without exiting?

Hello, and thanks for this package! It's very nice to integrate emacs config w/ home-manager.

When I run home-manager switch and then SPC h r r, the old config is still used. But when I exit emacs and restart, the new config is loaded.

I think this is because emacs is reading its config from a specific derivation in /nix/store, and that specific config file is not updated when I run home-manager switch, but rather an entirely new directory is created. When I close emacs and re-open it, the new emacs instances reads from the new derivation.

So I'm just wondering if anyone has ideas for updating emacs config without closing the program entirely. Maybe it would be possible by creating symlinks from the derivation directory to a consistent location in e.g. /home/user/.emacs.d and instructing emacs to read config from there?

Thanks!
Oliver

cp: missing destination file operand after '/nix/store/xggy92dk4nx55gxj2jmpcg0j88mkvx2y-doom-private'

I am setting up Doom Emacs using this derivation for the first time. I currently am using Doom the "traditional" way. When I try to install the derivation using home-manager I get the following error:

these 13 derivations will be built:
  /nix/store/7mkf7r5534zq7igiw5jrgxqhsqc15xqs-install-repo.drv
  /nix/store/q0n8fsgims233p48bx2bxvnrw40zvsic-git.drv
  /nix/store/53pbiml54yikl7kbdyip7mi8msg7scgp-straight-emacs-env.drv
  /nix/store/559b6fmxh1xf1mw8j24hhv27xpqfrgnb-nix-integration.patch.drv
  /nix/store/fnla5504xfgdz6mrp6834acgr79dad5q-doom-emacs.drv
  /nix/store/31r0q0yarml6yfgrp61cdmljplhl7g4c-default.el.drv
  /nix/store/k2n4c89n50kqn195xrp69h8sxx8k1x7n-doom-private.drv
  /nix/store/87941dq9iialidki4bd6h93384y71jl6-build-summary.drv
  /nix/store/bs7ld8ihcz9fi0dfq1am4cvzipm1b656-emacs-packages-deps.drv
  /nix/store/yx9iw43wzicbi9wwabhvscr2gx4j1bd9-emacs-with-packages-27.2.drv
  /nix/store/fxl8i96289j8gf4k7a00wj1jhk8296vr-home-manager-path.drv
  /nix/store/8na553mkjs94ldwb9sp26019rd0aks5h-activation-script.drv
  /nix/store/30yk22f2f36ki4vfmlkz2pl2vkzzr4pz-home-manager-generation.drv
building '/nix/store/k2n4c89n50kqn195xrp69h8sxx8k1x7n-doom-private.drv'...
cp: missing destination file operand after '/nix/store/xggy92dk4nx55gxj2jmpcg0j88mkvx2y-doom-private'
Try 'cp --help' for more information.
error: builder for '/nix/store/k2n4c89n50kqn195xrp69h8sxx8k1x7n-doom-private.drv' failed with exit code 1
error: 1 dependencies of derivation '/nix/store/yx9iw43wzicbi9wwabhvscr2gx4j1bd9-emacs-with-packages-27.2.drv' failed to build
error: 1 dependencies of derivation '/nix/store/fxl8i96289j8gf4k7a00wj1jhk8296vr-home-manager-path.drv' failed to build
error: 1 dependencies of derivation '/nix/store/30yk22f2f36ki4vfmlkz2pl2vkzzr4pz-home-manager-generation.drv' failed to build

Does anyone know how I can further troubleshoot this issue?

Here's my home.nixfile:

{ config, pkgs, ... }:

let
  doom-emacs = pkgs.callPackage (builtins.fetchTarball {
    url = https://github.com/nix-community/nix-doom-emacs/archive/master.tar.gz;
  }) {
    doomPrivateDir = ~/.doom.d;
  };

in {
  # Let Home Manager install and manage itself.
  programs.home-manager.enable = true;

  home.packages = [
    pkgs.htop
    pkgs.fortune
    pkgs.starship
    pkgs.direnv
    doom-emacs
  ];

  # home.file.".emacs.d/init.el".text = ''
  #     (load "default.el")
  # '';

  programs.starship = {
    enable = true;
    enableBashIntegration = true;
    # Configuration written to ~/.config/starship.toml
    settings = {
      add_newline = false;

      character = {
        success_symbol = "[➜](bold green)";
        error_symbol = "[➜](bold red)";
      };

      package.disabled = false;
    };
  };

  services.lorri.enable = true;

  # Home Manager needs a bit of information about you and the
  # paths it should manage.
  home.username = "tom";
  home.homeDirectory = "/home/tom";

  # This value determines the Home Manager release that your
  # configuration is compatible with. This helps avoid breakage
  # when a new Home Manager release introduces backwards
  # incompatible changes.
  #
  # You can update Home Manager without changing this value. See
  # the Home Manager release notes for a list of state version
  # changes in each release.
  home.stateVersion = "21.11";
}

I'm running this from WSL2. Here's that info:

NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.3 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

`doom-dashboard` not loaded on start

Description

When I start Emacs the doom-dashboard is not loaded initially.
This is my Emacs after the initial start:
broken

After opening Emacs messages, it seems that the dashboard has been reloaded correctly:
reloading

Any ideas why I run into this problem?

Log output:

Loading /nix/store/a94rvycbpi6lhshrhl45r6dban6x4jpb-emacs-with-packages-27.2/share/emacs/site-lisp/site-start.el (source)...done
Loading /nix/store/9hawkcaxsvqj98w70l4haasfip8rkaq7-emacs-packages-deps/share/emacs/site-lisp/default.el (source)...
doom-emacs is not placed in ‘doom-private-dir’,
loading from ‘site-lisp’
Loading /nix/store/pa2lan4qrxsnkd0p8xv1a3d0n7dxcsp3-doom-emacs/early-init.el (source)...done
Loading /nix/store/pa2lan4qrxsnkd0p8xv1a3d0n7dxcsp3-doom-emacs/init.el (source)...
DOOM Initializing Doom
Debug mode on
DOOM New variables available: (use-package-verbose)
Debug mode off
Debug mode on
DOOM Initializing core modules
DOOM Initializing user config
Loading /nix/store/r6aig18jvyqpj034592c4pp54ykw5z66-doom.d/config.el (source)...done
Loading /nix/store/691xda5bkx31c6jqqlsxw4phwscrcp14-doom-private/config.extra.el (source)...done
Loading /nix/store/pa2lan4qrxsnkd0p8xv1a3d0n7dxcsp3-doom-emacs/init.el (source)...done
Loading /nix/store/9hawkcaxsvqj98w70l4haasfip8rkaq7-emacs-packages-deps/share/emacs/site-lisp/default.el (source)...done
Doom loaded 146 packages across 30 modules in 0.608s
DOOM Loading deferred package server from doom--after-call-server-h
DOOM Incrementally loading tree-widget
DOOM Incrementally loading recentf
DOOM Incrementally loading savehist
DOOM Incrementally loading yasnippet
DOOM [editor/evil] Initialized evil-collection-elisp-mode 
DOOM [editor/evil] Initialized evil-collection-comint 
DOOM [editor/evil] Initialized evil-collection-custom 
[yas] Check your `yas-snippet-dirs': /nix/store/691xda5bkx31c6jqqlsxw4phwscrcp14-doom-private/snippets/ is not a directory
[yas] Prepared just-in-time loading of snippets with some errors.  Check *Messages*.
DOOM Incrementally loading with-editor
DOOM Incrementally loading git-commit
DOOM [editor/evil] Initialized evil-collection-epa 
DOOM [editor/evil] Initialized evil-collection-dired 
DOOM [editor/evil] Initialized evil-collection-log-edit 
DOOM Incrementally loading package
DOOM [editor/evil] Initialized evil-collection-package-menu 
DOOM Incrementally loading magit
DOOM [editor/evil] Initialized evil-collection-diff-mode 
DOOM [editor/evil] Initialized evil-collection-imenu 
Loading /nix/store/3lpkncgg0cicmxzd3jfxg52piki7s3cp-straight-emacs-env/straight/repos/magit/magit-version.el (source)...done
DOOM [editor/evil] Initialized evil-collection-magit 
DOOM [editor/evil] Initialized evil-collection-calendar  [2 times]
DOOM [editor/evil] Initialized evil-collection-org 
DOOM [editor/evil] Initialized evil-collection-compile 
DOOM [editor/evil] Initialized evil-collection-grep 
DOOM New variables available: (async-debug)
Debug mode off
Debug mode on
DOOM [editor/evil] Initialized evil-collection-magit-todos 
DOOM Incrementally loading org-agenda
DOOM Incrementally loading org-capture
DOOM [editor/evil] Loading deferred package evil-easymotion from doom--after-call-evil-easymotion-h
DOOM [completion/vertico] Loading deferred package orderless from doom--after-call-orderless-h
DOOM [editor/evil] Initialized evil-collection-vertico 
DOOM [editor/evil] Initialized evil-collection-which-key 
DOOM [ui/doom-dashboard] Reloading dashboard at 09:43:30
DOOM [ui/doom-dashboard] Changed dashboard’s PWD to ~/

Configuration

flake.nix
(https://github.com/stefanDeveloper/nixos-lenovo-config/blob/master/flake.nix)

emacs.nix

{ pkgs, inputs, config, ... } :

{
  home-manager.users.stefan = {

    programs.emacs = {
      enable = true;
    }; 

    imports = [ inputs.nix-doom-emacs.hmModule ];
    programs.doom-emacs = {
      enable = true;
      doomPrivateDir = "${config.users.users.stefan.home}/doom.d";
    };
  };
}

Metadata

Please run nix-shell -p nix-info --run "nix-info -m" and paste the result.

[user@system:~]$ nix-shell -p nix-info --run "nix-info -m"
 - system: `"x86_64-linux"`
 - host os: `Linux 5.10.105, NixOS, 21.11 (Porcupine)`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.5.0pre20211206_d1aaa7e`
 - nixpkgs: `/nix/var/nix/profiles/per-user/root/channels/nixos`

Requires native compilation?

Hi there,

When building my doom configuration I'm getting the following error:

# -*- lisp-interaction -*-
# vim: set ft=lisp:

(error "Emacs was not compiled with native compiler support (--with-native-compilation)")

(signal error ("Emacs was not compiled with native compiler support (--with-native-compilation)"))

(error "Emacs was not compiled with native compiler support (--with-native-compilation)")

(cond ((null (featurep 'native-compile)) (error "Emacs was not compiled with native compiler support (--with-native-compilat
ion)")) ((null (native-comp-available-p)) (error "Cannot find libgccjit library")))

(comp-ensure-native-compiler)

(native--compile-async "/nix/store/bdvd1fd1mmc4w1afyirfw794dx2z5qyh-straight-emacs-env/straight/build-29.0.50/auto-minor-mod
e/" recursively nil straight--native-compile-file-p)

(let ((load (not (not load)))) (native--compile-async files recursively load selector))

(native-compile-async "/nix/store/bdvd1fd1mmc4w1afyirfw794dx2z5qyh-straight-emacs-env/straight/build-29.0.50/auto-minor-mode
/" recursively nil straight--native-compile-file-p)

(straight--build-native-compile (:local-repo "auto-minor-mode" :repo "auto-minor-mode" :type git :package "auto-minor-mode")
)

(run-hook-with-args straight--build-native-compile (:local-repo "auto-minor-mode" :repo "auto-minor-mode" :type git :package
 "auto-minor-mode"))

(straight--build-package (:local-repo "auto-minor-mode" :repo "auto-minor-mode" :type git :package "auto-minor-mode") nil)

Does this mean that using nix-doom-emacs requires emacsGcc? That would be a shame since for some machines (e.g. my raspberry pi) this means that building my configuration requires approx 6 hours.

Custom Doom Themes don't work

We can use custom themes by creating themes folder inside the .doom.d folder and adding our theme there(source: here)

I did the same and added a themes folder with my custom theme to my doomPrivateDir folder but when I rebuild the theme is not found.
folder structure:
image
no theme found:
image

can't Install copilot.el using `emacsPackagesOverlay`

I'm trying to install copilot.el but having problems.
My config to install it

    emacsPackagesOverlay = self: super: {
      copilot = self.trivialBuild {
        pname = "copilot";
        ename = "copilot";
        version = "0.1.0";
        src = self.fetchFromGithub {
          repo = "copilot.el";
          owner = "zerolfx";
          rev = "9b13478720581580a045ac76ad68be075466a963";
          sha256 = "sha256-csY9dxUpTw6hWwL+JJnNOsbLNlToIfh/gsdxS1uEQtg";
        };
        buildInputs = [ pkgs.nodejs ];
      };
    };

`SPC *` (+default/search-project-for-symbol-at-point SYMBOL DIR) not working with `vertico`

I recently migrated to nix-doom-emacs, and while on doom-emacs itself the SPC * works, in nix-doom-emacs it doesn't. I tried both Emacs 28.1 and 29.0.50, with the same results.

I get the following error: cond: Keyword argument :function not one of (:type :separator :initial). Maybe this is one of those packages that doom-emacs uses a fork, and we also need to overlay with the fork 🤔 ?

My HM Emacs config is located here. I use vertico as my completion engine, but not sure if related.

Use the forks from hlissner

https://github.com/hlissner maintains a few number of forks of Emacs packages himself. Considering that this is what ends up in doom-emacs, we probably should override them.

~/Projects/doomemacs master
❯ rg -F ':repo "hlissner/'
modules/lang/org/packages.el
47:    :recipe (:host github :repo "hlissner/evil-org-mode")

modules/lang/lua/packages.el
10:      :recipe (:host github :repo "hlissner/emacs-flycheck-moonscript")

modules/lang/emacs-lisp/demos.org
510:(package! so-long :recipe (:host github :repo "hlissner/emacs-so-long"))

modules/editor/evil/packages.el
9:  :recipe (:host github :repo "hlissner/evil-escape")

core/packages.el
43:  :recipe (:host github :repo "hlissner/ws-butler")

Vertico is showing &nopath and is not working

First of all I want to mention that this project is amazing and I am finding the community very helpful so thanks a lot for your work.

I have been trying these days to set up emacs to work with sway (wayland) and I have done a combination of emacs-overlay with pgtk and gcc and this package.

You can find my doom config in Guisanpea/dotfiles@a9fd3fa and my nix flakes at https://github.com/Guisanpea/nixfiles

The problem I am having is that vertico, which is a really important package for me is not working. When I check doom status I see the following

generated    Dec 14, 2021 14:17:04
system       NixOS 21.11.20211130.96b4157 (Porcupine) Linux 5.10.81 x86_64 pgtk
emacs        29.0.50 master da2c0e8f7 /nix/store/fvp6wqmbzikypysdzwb5jwm7ipavw1rf-doom-emacs/ -> /nix/store/fvp6wqmbzikypysdzwb5jwm7ipavw1rf-doom-emacs/
doom         3.0.0-alpha fatal: not a git repository (or any of the parent directories): .git /nix/store/7h2nbf7fl2z9nvbza1hfnd273jaxwddi-doom-private/ -> /nix/store/7h2nbf7fl2z9nvbza1hfnd273jaxwddi-doom-private/
shell        /run/current-system/sw/bin/bash
features     CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK PNG RSVG SECCOMP SOUND THREADS TIFF TOOLKIT_SCROLL_BARS XIM GTK3 ZLIB
traits       gui server-running custom-file
custom       vc-annotate-very-old-color vc-annotate-color-map vc-annotate-background rustic-ansi-faces pdf-view-midnight-colors objed-cursor-color jdee-db-spec-breakpoint-face-colors jdee-db-requested-breakpoint-face-colors jdee-db-active-breakpoint-face-colors highlight-tail-colors fci-rule-color exwm-floating-border-color custom-safe-themes ansi-color-names-vector
modules      :completion company (&nopath vertico +icons) :ui doom doom-dashboard doom-quit hl-todo ligatures modeline nav-flash ophints (popup +defaults) treemacs vc-gutter vi-tilde-fringe workspaces :editor (evil +everywhere) file-templates fold multiple-cursors snippets :emacs dired electric undo vc :term vterm :checkers syntax (spell +flyspell) grammar :tools (debugger +lsp) docker editorconfig (eval +overlay) lookup lsp :lang (elixir +lsp) emacs-lisp erlang json javascript markdown org php scala sh web yaml :config (default +bindings +smartparens)

I have the same doom config in ubuntu and nix and it is giving me problems only in ubuntu and one thing that worries me is that in info the vertico module appears as (&nopath vertico +icons)

What could be making that issue?

Issue with nix-integration patch

I am getting this error when trying to build with doom emacs

error: builder for '/nix/store/hyj2kcmy4drv69sqxizrdfkbmcags5mn-doom-emacs.drv' failed with exit code 1;
       last 10 log lines:
       > unpacking source archive /nix/store/2lmhr049hzn5fvgl0cgbwfdn59f1raaz-doom-src
       > source root is doom-src
       > patching sources
       > applying patch /nix/store/wl3gb8p4r0zla1y3k2l76r98i4sn1j7q-nix-integration.patch
       > patching file core/core-cli.el
       > patching file core/core.el
       > Hunk #1 FAILED at 68.
       > Hunk #2 succeeded at 82 (offset 6 lines).
       > Hunk #3 FAILED at 160.
       > 2 out of 3 hunks FAILED -- saving rejects to file core/core.el.rej
       For full logs, run 'nix log /nix/store/hyj2kcmy4drv69sqxizrdfkbmcags5mn-doom-emacs.drv'.

CI fails on latest commit, which has killed github actions

a 'aarch64-darwin' with features {} is required to build '/nix/store/sq8ppka3wyih94gx79qhkawkdsiadlif-fix-paths.patch.drv', but I am a 'x86_64-linux' with features {benchmark, big-parallel, nixos-test, recursive-nix}

You may need to reconfigure the build server to support cross compilation, if that's possible. If it's not possible, you may be able to have two separate actions for each arch that run checks on their respective arches?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.