unofficial mirror of help-guix@gnu.org 
 help / color / mirror / Atom feed
* Erlang + Emacs profile
@ 2020-06-23 22:49 Zelphir Kaltstahl
  2020-06-24 20:29 ` Maxim Cournoyer
  0 siblings, 1 reply; 18+ messages in thread
From: Zelphir Kaltstahl @ 2020-06-23 22:49 UTC (permalink / raw)
  To: help-guix

Hello Guix users!

What is your way of setting up a profile for Erlang development?

There are some things I would like to have, some of which I already
managed to get:

  * [X] Erlang installed through Guix package manager in a separate profile
  * [X] `erl` REPL available in that separate profile
  * [X] an Emacs Erlang mode (installed it through M-x list-pack RET and
    searched for erlang there)
  * [_] org-mode babel erlang for literate programming in org-mode,
    using the Guix installed erlang executable – I found
    https://github.com/xfwduke/ob-erlang, which also seems to work, but
    I do not know how to point it to the Guix installed Erlang, so that
    it can actually run code. Currently it complains about not finding
    Erlang. Does anyone know how to point it to the Erlang executable? I
    created this issue: https://github.com/xfwduke/ob-erlang/issues/1

I did not see any separate OTP package on `guix search`. Is this already
included in the `erlang` package or is this missing from Guix package
repositories?

Here is my current manifest.scm file for creating a profile (currently
not much in there):

~~~~
(specifications->manifest
 '("erlang@21.3.8.13"))
~~~~

Note, that Emacs is not in here, because I have it in my global or base
profile. I'd rather not have a separate Emacs for this project, but
simply use the one installed already. I am also aware, that Guix has
packages for Emacs packages, but so far I've always installed those
inside Emacs using M-x list-pack. This probably means, that Guix is not
aware of them being installed, but I had no problems with it so far.

Regards,
Zelphir


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-23 22:49 Erlang + Emacs profile Zelphir Kaltstahl
@ 2020-06-24 20:29 ` Maxim Cournoyer
  2020-06-25 19:25   ` Zelphir Kaltstahl
                     ` (3 more replies)
  0 siblings, 4 replies; 18+ messages in thread
From: Maxim Cournoyer @ 2020-06-24 20:29 UTC (permalink / raw)
  To: Zelphir Kaltstahl; +Cc: help-guix

Hello Zelphir,

Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> writes:

> Hello Guix users!
>
> What is your way of setting up a profile for Erlang development?
>
> There are some things I would like to have, some of which I already
> managed to get:
>
>   * [X] Erlang installed through Guix package manager in a separate profile
>   * [X] `erl` REPL available in that separate profile
>   * [X] an Emacs Erlang mode (installed it through M-x list-pack RET and
>     searched for erlang there)
>   * [_] org-mode babel erlang for literate programming in org-mode,
>     using the Guix installed erlang executable – I found
>     https://github.com/xfwduke/ob-erlang, which also seems to work, but
>     I do not know how to point it to the Guix installed Erlang, so that
>     it can actually run code. Currently it complains about not finding
>     Erlang. Does anyone know how to point it to the Erlang executable? I
>     created this issue: https://github.com/xfwduke/ob-erlang/issues/1

It just looks up erl from your PATH, so the problem must be that you
started Emacs from your user profile, which doesn't know about the
separate Guix profile you created which contains Erlang.

You'd have to start Emacs from an shell where your separate profile was
sourced, or fiddle with M-x setenv to fix this.  emacs-guix also has
some guix-set-emacs-environment procedure that can be used to augment
Emacs environment variables given a profile, but it seems broken at the
moment.

I just tried the following approach, where everything is managed by Guix
in a separate profile:

--8<---------------cut here---------------start------------->8---
;; file: manifest.scm
(specifications->manifest
 '("erlang"
   "emacs"
   "emacs-org"
   "emacs-erlang"
   "emacs-ob-erlang")) ;; freshly packaged for you ;-)
--8<---------------cut here---------------end--------------->8---

Then spawn an environment with

guix environment -m manifest.scm

And then ran the following experiment:

--8<---------------cut here---------------start------------->8---
# file: test.org

Put this in your ~/.emacs or evaluate it ad-hoc before running the
rest.

#+begin_src elisp
  (require 'org-tempo)			
  (require 'ob-erlang)
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((erlang . t)))
#+end_src

Example taken from: https://github.com/xfwduke/ob-erlang
With your cursor on the code block, I ran M-x org-babel-execute-src-block
#+BEGIN_SRC erlang :module tryerlang
start() ->
	io:format("hello world").
#+END_SRC

And it produced:
#+RESULTS:
: hello world
--8<---------------cut here---------------end--------------->8---

Hope this helps!

Maxim


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-24 20:29 ` Maxim Cournoyer
@ 2020-06-25 19:25   ` Zelphir Kaltstahl
  2020-06-28  4:41     ` Maxim Cournoyer
  2020-06-29  8:50     ` zimoun
  2020-06-29 20:26   ` Zelphir Kaltstahl
                     ` (2 subsequent siblings)
  3 siblings, 2 replies; 18+ messages in thread
From: Zelphir Kaltstahl @ 2020-06-25 19:25 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: help-guix

Hi Maxim!

Thanks for your message! I'll try it out. It implies some things I'd
rather not do though:

* It requires keeping multiple Emacs on my system. How will they
interact with the same ~/.emacs.d/.init.el?
* This approach seems to install everything only temporary, reinstalling
every single time. But I can use a profile, so that's fine.

How did you package emacs-ob-erlang? (I did not yet package a single
package for Guix, so I assume no prior knowledge.) Or is it a rather
lengthy procedure to do so? I think this might be one of the next things
I learn about Guix, which is very useful, because if a package is
missing, one can add it oneself, without having to rely on others to add it.

It's an OK-ish solution to simply modify my PATH to make ob-erlang find
erl, however, I was hoping for a configuration value in ob-emacs itself,
so that I can set everything inside that plugin.

I usually install Emacs packages inside Emacs, instead of using Guix for
it. I do this, because probably not all packages I want are available in
Guix, but I have not checked this assumption at all.

I think I'll be fine with adapting my PATH for now, just need to do it
in a way, that will keep working when I update Guix packages.

Thanks,
Zelphir

On 6/24/20 10:29 PM, Maxim Cournoyer wrote:
> Hello Zelphir,
>
> Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> writes:
>
>> Hello Guix users!
>>
>> What is your way of setting up a profile for Erlang development?
>>
>> There are some things I would like to have, some of which I already
>> managed to get:
>>
>>   * [X] Erlang installed through Guix package manager in a separate profile
>>   * [X] `erl` REPL available in that separate profile
>>   * [X] an Emacs Erlang mode (installed it through M-x list-pack RET and
>>     searched for erlang there)
>>   * [_] org-mode babel erlang for literate programming in org-mode,
>>     using the Guix installed erlang executable – I found
>>     https://github.com/xfwduke/ob-erlang, which also seems to work, but
>>     I do not know how to point it to the Guix installed Erlang, so that
>>     it can actually run code. Currently it complains about not finding
>>     Erlang. Does anyone know how to point it to the Erlang executable? I
>>     created this issue: https://github.com/xfwduke/ob-erlang/issues/1
> It just looks up erl from your PATH, so the problem must be that you
> started Emacs from your user profile, which doesn't know about the
> separate Guix profile you created which contains Erlang.
>
> You'd have to start Emacs from an shell where your separate profile was
> sourced, or fiddle with M-x setenv to fix this.  emacs-guix also has
> some guix-set-emacs-environment procedure that can be used to augment
> Emacs environment variables given a profile, but it seems broken at the
> moment.
>
> I just tried the following approach, where everything is managed by Guix
> in a separate profile:
>
> --8<---------------cut here---------------start------------->8---
> ;; file: manifest.scm
> (specifications->manifest
>  '("erlang"
>    "emacs"
>    "emacs-org"
>    "emacs-erlang"
>    "emacs-ob-erlang")) ;; freshly packaged for you ;-)
> --8<---------------cut here---------------end--------------->8---
>
> Then spawn an environment with
>
> guix environment -m manifest.scm
>
> And then ran the following experiment:
>
> --8<---------------cut here---------------start------------->8---
> # file: test.org
>
> Put this in your ~/.emacs or evaluate it ad-hoc before running the
> rest.
>
> #+begin_src elisp
>   (require 'org-tempo)			
>   (require 'ob-erlang)
>   (org-babel-do-load-languages
>    'org-babel-load-languages
>    '((erlang . t)))
> #+end_src
>
> Example taken from: https://github.com/xfwduke/ob-erlang
> With your cursor on the code block, I ran M-x org-babel-execute-src-block
> #+BEGIN_SRC erlang :module tryerlang
> start() ->
> 	io:format("hello world").
> #+END_SRC
>
> And it produced:
> #+RESULTS:
> : hello world
> --8<---------------cut here---------------end--------------->8---
>
> Hope this helps!
>
> Maxim


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-25 19:25   ` Zelphir Kaltstahl
@ 2020-06-28  4:41     ` Maxim Cournoyer
  2020-06-29  8:50     ` zimoun
  1 sibling, 0 replies; 18+ messages in thread
From: Maxim Cournoyer @ 2020-06-28  4:41 UTC (permalink / raw)
  To: Zelphir Kaltstahl; +Cc: help-guix

Hello,

Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> writes:

> Hi Maxim!
>
> Thanks for your message! I'll try it out. It implies some things I'd
> rather not do though:
>
> * It requires keeping multiple Emacs on my system. How will they
> interact with the same ~/.emacs.d/.init.el?

Badly, unless you've carefully crafted .init.el to load modules only
when they're present (it's doable, and some packages even aim to
simplify this kind of thing).

Otherwise you'd have to launch emacs with the -q switch to prevent
reading your main ~/.emacs.el (or .init.el).

> * This approach seems to install everything only temporary, reinstalling
> every single time. But I can use a profile, so that's fine.

Yes, you can change the 'guix environment -m' command for a 'guix
package -m' one for a persistent result (or use the -r option of 'guix
environment').

> How did you package emacs-ob-erlang? (I did not yet package a single
> package for Guix, so I assume no prior knowledge.)

'guix edit emacs-ob-erlang' should bring you right to the definition of
the package.

> Or is it a rather
> lengthy procedure to do so?

No, it probably took me less than 15 minutes total; it was a small and
straightforward package.  The emacs-build-system is remarkably simple.

> I learn about Guix, which is very useful, because if a package is
> missing, one can add it oneself, without having to rely on others to add it.

Yes, that's one of my favorite things about Guix. It's hackable.

> It's an OK-ish solution to simply modify my PATH to make ob-erlang find
> erl, however, I was hoping for a configuration value in ob-emacs itself,
> so that I can set everything inside that plugin.

Such as configuration would need to be possible in ob-erlang, but it's
not [0].  You could define a bunch of defvars and contribute a patch
upstream, if you are so inclined.

> I usually install Emacs packages inside Emacs, instead of using Guix for
> it. I do this, because probably not all packages I want are available in
> Guix, but I have not checked this assumption at all.

The collection is growing, and as mentioned earlier, it's rather easy to
add new items to it :-). Managing everything the same way makes for a
better experience in my opinion (isn't that what Guix is about? :-)).

> I think I'll be fine with adapting my PATH for now, just need to do it
> in a way, that will keep working when I update Guix packages.

Note that you could also choose to install erlang in your main profile
along Emacs and emacs-ob-erlang; that'd remove the need to mess with
PATH.

Maxim


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-25 19:25   ` Zelphir Kaltstahl
  2020-06-28  4:41     ` Maxim Cournoyer
@ 2020-06-29  8:50     ` zimoun
  2020-06-29 19:37       ` Zelphir Kaltstahl
  1 sibling, 1 reply; 18+ messages in thread
From: zimoun @ 2020-06-29  8:50 UTC (permalink / raw)
  To: Zelphir Kaltstahl, Maxim Cournoyer; +Cc: help-guix

Dear,

On Thu, 25 Jun 2020 at 21:25, Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> wrote:

> * It requires keeping multiple Emacs on my system. How will they
> interact with the same ~/.emacs.d/.init.el?

Emacs reads init.el when it starts so yes all Emacs will interact with
this file if you do not specify explicitly to not do it.  Well, if you
use 'with-eval-after-load' in your Emacs configuration files, it should
not be a problem. Otherwise give a look at "emacs-guix" or try "emacs -q
-l /path/to/your/specific/config.el", as Maxim pointed.

> How did you package emacs-ob-erlang? (I did not yet package a single
> package for Guix, so I assume no prior knowledge.) Or is it a rather
> lengthy procedure to do so? I think this might be one of the next things
> I learn about Guix, which is very useful, because if a package is
> missing, one can add it oneself, without having to rely on others to add it.

For this specific package, I do not know because I have not checked but
the first step when a package is not in Guix is: try the importer! :-)

  guix import elpa -a melpa -r foo

where foo is the name of package in MELPA.  This works very well.

> I usually install Emacs packages inside Emacs, instead of using Guix for
> it. I do this, because probably not all packages I want are available in
> Guix, but I have not checked this assumption at all.

I did that (installing with 'use-package') too but then I switched all
to manifest.scm file and 'with-eval-after-load' tracking channels.scm
(guix describe -f channels).  This way, I have a working setup
everywhere and everytime.  Anyway! :-)

The point is that Guix has a really large collection of Emacs packages:

--8<---------------cut here---------------start------------->8---
$ du -sh gnu/packages/*.scm | sort -nr | head -n5
908K    gnu/packages/crates-io.scm
884K    gnu/packages/emacs-xyz.scm
784K    gnu/packages/cran.scm
732K    gnu/packages/python-xyz.scm
636K    gnu/packages/bioinformatics.scm
--8<---------------cut here---------------end--------------->8---

and if your needs is not there then "guix import elpa" eases the task
for adding it. :-)


All the best,
simon


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-29  8:50     ` zimoun
@ 2020-06-29 19:37       ` Zelphir Kaltstahl
  2020-06-29 20:24         ` Ricardo Wurmus
  2020-06-29 20:49         ` zimoun
  0 siblings, 2 replies; 18+ messages in thread
From: Zelphir Kaltstahl @ 2020-06-29 19:37 UTC (permalink / raw)
  To: zimoun, Maxim Cournoyer; +Cc: help-guix

Hi Simon and Maxim!

I am not sure I understand all things you wrote.

On 29.06.20 10:50, zimoun wrote:
> Dear,
>
> On Thu, 25 Jun 2020 at 21:25, Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> wrote:
>
>> * It requires keeping multiple Emacs on my system. How will they
>> interact with the same ~/.emacs.d/.init.el?
> Emacs reads init.el when it starts so yes all Emacs will interact with
> this file if you do not specify explicitly to not do it.  Well, if you
> use 'with-eval-after-load' in your Emacs configuration files, it should
> not be a problem. Otherwise give a look at "emacs-guix" or try "emacs -q
> -l /path/to/your/specific/config.el", as Maxim pointed.

OK, so basically the way would then be to have 2 Emacs, but always start
one of them with with the `-l <path>` argument, so that it makes use of
another config file.

>> How did you package emacs-ob-erlang? (I did not yet package a single
>> package for Guix, so I assume no prior knowledge.) Or is it a rather
>> lengthy procedure to do so? I think this might be one of the next things
>> I learn about Guix, which is very useful, because if a package is
>> missing, one can add it oneself, without having to rely on others to add it.
> For this specific package, I do not know because I have not checked but
> the first step when a package is not in Guix is: try the importer! :-)
>
>   guix import elpa -a melpa -r foo
>
> where foo is the name of package in MELPA.  This works very well.

OK nice! I'll try it for a package! I noticed, that there are only 3
Emacs Org-Babel packages available (or visible)
at: https://guix.gnu.org/packages/E/page/9/. I'l try with some of those
I need. And I see
at https://guix.gnu.org/manual/en/html_node/Invoking-guix-import.html#Invoking-guix-import,
that there are already some repositories understood, which I would
probably use.

Also the edit thing `guix edit emacs-ob-erlang` sounds interesting.

I just did the edit thing and I am not sure how to then "upload" a
package. But I will read the docs a little and will probably all clear up.

>> I usually install Emacs packages inside Emacs, instead of using Guix for
>> it. I do this, because probably not all packages I want are available in
>> Guix, but I have not checked this assumption at all.
> I did that (installing with 'use-package') too but then I switched all
> to manifest.scm file and 'with-eval-after-load' tracking channels.scm
> (guix describe -f channels).  This way, I have a working setup
> everywhere and everytime.  Anyway! :-)
>
> The point is that Guix has a really large collection of Emacs packages:
>
> --8<---------------cut here---------------start------------->8---
> $ du -sh gnu/packages/*.scm | sort -nr | head -n5
> 908K    gnu/packages/crates-io.scm
> 884K    gnu/packages/emacs-xyz.scm
> 784K    gnu/packages/cran.scm
> 732K    gnu/packages/python-xyz.scm
> 636K    gnu/packages/bioinformatics.scm
> --8<---------------cut here---------------end--------------->8---
>
> and if your needs is not there then "guix import elpa" eases the task
> for adding it. :-)

So if I understand this correctly, there are different channels for
different types of packages, for example for Rust packages we have
`gnu/packages/crates-io.scm` and for Emacs packages we have
`gnu/packages/emacs-xyz.scm`.

The command `guix describe -f channels` does not work for me:

~~~~
xiaolong@xlx200:~$ guix describe -f channels
guix describe: error: failed to determine origin
hint: Perhaps this `guix' command was not obtained with `guix pull'? Its version string is
36da62f1b9c78a2729658143a7df1845cd532afa.
~~~~

I did another `guix pull` and `guix package -u` and this is after a
fresh Guix package manager install and and installing the following
packages:

~~~~
xiaolong@xlx200:~$ sudo -i guix package -I
glibc-utf8-locales	2.31	out	/gnu/store/z7a6sbvqzb5zapwpznmjkq2rsxil6i67-glibc-utf8-locales-2.31

xiaolong@xlx200:~$ sudo -i guix package -I
glibc-utf8-locales	2.31	out	/gnu/store/z7a6sbvqzb5zapwpznmjkq2rsxil6i67-glibc-utf8-locales-2.31
xiaolong@xlx200:~$ guix package -I
guile	3.0.4	out	/gnu/store/ah16zr8mmfkqy23rr7jy5a842ca1q9h1-guile-3.0.4
erlang	21.3.8.13	out	/gnu/store/6x8ycgi8hv5rh8gq3vrdbcq5sh3qfq7i-erlang-21.3.8.13
emacs-ob-erlang	20180827-1.f1a8c66	out	/gnu/store/czg6wqga0hvc57axbz1cjp892k5r8ybp-emacs-ob-erlang-20180827-1.f1a8c66
icecat	68.9.0-guix0-preview1	out	/gnu/store/7qakza7zdiz57l5hldd8162324fwbw8s-icecat-68.9.0-guix0-preview1
libreoffice	6.4.4.2	out	/gnu/store/swk410ahw9v4k0hjmsd4f33bqw5fdyqa-libreoffice-6.4.4.2
lyx	2.3.5.1	out	/gnu/store/p7z5436jhgjlgdbx44np44vzjhrwi2ns-lyx-2.3.5.1
python	3.8.2	out	/gnu/store/6sr11m4i1d3vbqlmbpzmfj1lihbc5iz4-python-3.8.2
rust	1.39.0	out	/gnu/store/24pbvvdwaj9kbsdfi6kgxkvxkjayfz74-rust-1.39.0
openvpn	2.4.9	out	/gnu/store/3rh4i3wbkdwkrmrxy30d3f3nbg6kdl02-openvpn-2.4.9
emacs	26.3	out	/gnu/store/528p0v6gg5gx53jd0x52dmghb01bfhc5-emacs-26.3
glibc-utf8-locales	2.31	out	/gnu/store/z7a6sbvqzb5zapwpznmjkq2rsxil6i67-glibc-utf8-locales-2.31
guile-colorized	0.1	out	/gnu/store/5h0jfssgyx49cq82wrmw57an7ngb7kkz-guile-colorized-0.1
~~~~

The other command to show the count of packages also does not work for me:

~~~~
xiaolong@xlx200:/$ sudo du -sh gnu/packages/*.scm | sort -nr | head -n5
du: cannot access 'gnu/packages/*.scm': No such file or directory
~~~~

Do I need to create channels, like a custom way of structuring packages
for myself, before running these commands?

> All the best,
> simon

Thanks for all your help!
Best regards,
Zelphir

-- 
repositories: https://notabug.org/ZelphirKaltstahl


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-29 19:37       ` Zelphir Kaltstahl
@ 2020-06-29 20:24         ` Ricardo Wurmus
  2020-06-29 20:37           ` Zelphir Kaltstahl
  2020-06-29 20:49         ` zimoun
  1 sibling, 1 reply; 18+ messages in thread
From: Ricardo Wurmus @ 2020-06-29 20:24 UTC (permalink / raw)
  To: Zelphir Kaltstahl; +Cc: help-guix


Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> writes:

> I just did the edit thing and I am not sure how to then "upload" a
> package. But I will read the docs a little and will probably all clear up.

“guix edit” only opens the source file containing a package definition
in your editor.

To contribute packages please see the Contributing section in the manual.

>> The point is that Guix has a really large collection of Emacs packages:
>>
>> --8<---------------cut here---------------start------------->8---
>> $ du -sh gnu/packages/*.scm | sort -nr | head -n5
>> 908K    gnu/packages/crates-io.scm
>> 884K    gnu/packages/emacs-xyz.scm
>> 784K    gnu/packages/cran.scm
>> 732K    gnu/packages/python-xyz.scm
>> 636K    gnu/packages/bioinformatics.scm
>> --8<---------------cut here---------------end--------------->8---
>>
>> and if your needs is not there then "guix import elpa" eases the task
>> for adding it. :-)
>
> So if I understand this correctly, there are different channels for
> different types of packages, for example for Rust packages we have
> `gnu/packages/crates-io.scm` and for Emacs packages we have
> `gnu/packages/emacs-xyz.scm`.

No, these are not channels.  These are all modules that are part of the
default channel called “guix”.

> The command `guix describe -f channels` does not work for me:
>
> ~~~~
> xiaolong@xlx200:~$ guix describe -f channels
> guix describe: error: failed to determine origin
> hint: Perhaps this `guix' command was not obtained with `guix pull'? Its version string is
> 36da62f1b9c78a2729658143a7df1845cd532afa.
> ~~~~

“guix describe” will work when you use a “guix” that was obtained with
“guix pull”.  It will usually be in ~/.config/guix/current/bin/guix.

> I did another `guix pull` and `guix package -u` and this is after a
> fresh Guix package manager install and and installing the following
> packages:
>
> ~~~~
> xiaolong@xlx200:~$ sudo -i guix package -I
> glibc-utf8-locales	2.31	out	/gnu/store/z7a6sbvqzb5zapwpznmjkq2rsxil6i67-glibc-utf8-locales-2.31
>
> xiaolong@xlx200:~$ sudo -i guix package -I
> glibc-utf8-locales	2.31	out	/gnu/store/z7a6sbvqzb5zapwpznmjkq2rsxil6i67-glibc-utf8-locales-2.31
> xiaolong@xlx200:~$ guix package -I
> guile	3.0.4	out	/gnu/store/ah16zr8mmfkqy23rr7jy5a842ca1q9h1-guile-3.0.4
> erlang	21.3.8.13	out	/gnu/store/6x8ycgi8hv5rh8gq3vrdbcq5sh3qfq7i-erlang-21.3.8.13
> emacs-ob-erlang	20180827-1.f1a8c66	out	/gnu/store/czg6wqga0hvc57axbz1cjp892k5r8ybp-emacs-ob-erlang-20180827-1.f1a8c66
> icecat	68.9.0-guix0-preview1	out	/gnu/store/7qakza7zdiz57l5hldd8162324fwbw8s-icecat-68.9.0-guix0-preview1
> libreoffice	6.4.4.2	out	/gnu/store/swk410ahw9v4k0hjmsd4f33bqw5fdyqa-libreoffice-6.4.4.2
> lyx	2.3.5.1	out	/gnu/store/p7z5436jhgjlgdbx44np44vzjhrwi2ns-lyx-2.3.5.1
> python	3.8.2	out	/gnu/store/6sr11m4i1d3vbqlmbpzmfj1lihbc5iz4-python-3.8.2
> rust	1.39.0	out	/gnu/store/24pbvvdwaj9kbsdfi6kgxkvxkjayfz74-rust-1.39.0
> openvpn	2.4.9	out	/gnu/store/3rh4i3wbkdwkrmrxy30d3f3nbg6kdl02-openvpn-2.4.9
> emacs	26.3	out	/gnu/store/528p0v6gg5gx53jd0x52dmghb01bfhc5-emacs-26.3
> glibc-utf8-locales	2.31	out	/gnu/store/z7a6sbvqzb5zapwpznmjkq2rsxil6i67-glibc-utf8-locales-2.31
> guile-colorized	0.1	out	/gnu/store/5h0jfssgyx49cq82wrmw57an7ngb7kkz-guile-colorized-0.1
> ~~~~

I don’t know what this is supposed to demonstrate.  “sudo -i guix” runs
Guix as the root user, which has a different default profile.

> The other command to show the count of packages also does not work for me:
>
> ~~~~
> xiaolong@xlx200:/$ sudo du -sh gnu/packages/*.scm | sort -nr | head -n5
> du: cannot access 'gnu/packages/*.scm': No such file or directory
> ~~~~

That’s not a general command to count packages.  This was just simon’s
way of showing you that the file containing package definitions for
Emacs packages in the Guix repository is among the largest modules.

To show all available packages use “guix package --list-available”.

> Do I need to create channels, like a custom way of structuring packages
> for myself, before running these commands?

No.  The command line that simon showed you is a simple combination of
coreutils commands that operate on the Guix source code.  If you want to
run the same command you need to do this in the directory containing a
checkout of the Guix source code.

-- 
Ricardo


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-24 20:29 ` Maxim Cournoyer
  2020-06-25 19:25   ` Zelphir Kaltstahl
@ 2020-06-29 20:26   ` Zelphir Kaltstahl
  2020-06-30 18:34   ` Zelphir Kaltstahl
  2020-06-30 18:41   ` Zelphir Kaltstahl
  3 siblings, 0 replies; 18+ messages in thread
From: Zelphir Kaltstahl @ 2020-06-29 20:26 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: help-guix

Hi Maxim!

Although I installed emacs-ob-erlang in my main profile, where Emacs is
installed, I get an error, when I try to evaluate Erlang code in
Org-mode. A new buffer *Org-Babel Error Output* opens and displays:

~~~~
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
~~~~

When I open an `eshell` and do `which`:

~~~~
Welcome to the Emacs shell

$ which erl
/home/xiaolong/.guix-profile/bin/erl
$ which erlc
/home/xiaolong/.guix-profile/bin/erlc
$ 
~~~~

So it can definitely find Erlang. I am not sure what the problem is. I
did not exactly follow the approach of using a manifest and instead
installed everything in the main profile, but to my understanding, that
should also work the same way, as long as it is all in the same profile.

The whole file I have for trying it:

~~~~
#+BEGIN_SRC python :results output
print(1+1)
#+END_SRC

#+RESULTS:
: 2


#+BEGIN_SRC scheme
(define abc
  (lambda (a)
    a))

(abc 123)
#+END_SRC

#+RESULTS:
: 123

#+begin_src elisp
  ;; (require 'org-tempo)
  (require 'ob-erlang)
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((erlang . t)))
#+end_src

#+RESULTS:

#+BEGIN_SRC erlang :module tryerlang
start() ->
	io:format("hello world").
#+END_SRC

#+RESULTS:
~~~~

So Python works, Scheme (Guile in this case) works, and Elisp simply had
no output but worked and was run before the Erlang one. Only Erlang did
not work.

Do you know what causes this error? I've seen it with other org-babel
source blocks, but usually accompanied by some more error telling me,
what is wrong. For example, when there is no Python at the specified
executable path of Python in Emacs settings / config, it would tell me
that there is no such file or directory or something like that.

Best regards,
Zelphir

On 24.06.20 22:29, Maxim Cournoyer wrote:

> Hello Zelphir,
>
> Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> writes:
>
>> Hello Guix users!
>>
>> What is your way of setting up a profile for Erlang development?
>>
>> There are some things I would like to have, some of which I already
>> managed to get:
>>
>>   * [X] Erlang installed through Guix package manager in a separate profile
>>   * [X] `erl` REPL available in that separate profile
>>   * [X] an Emacs Erlang mode (installed it through M-x list-pack RET and
>>     searched for erlang there)
>>   * [_] org-mode babel erlang for literate programming in org-mode,
>>     using the Guix installed erlang executable – I found
>>     https://github.com/xfwduke/ob-erlang, which also seems to work, but
>>     I do not know how to point it to the Guix installed Erlang, so that
>>     it can actually run code. Currently it complains about not finding
>>     Erlang. Does anyone know how to point it to the Erlang executable? I
>>     created this issue: https://github.com/xfwduke/ob-erlang/issues/1
> It just looks up erl from your PATH, so the problem must be that you
> started Emacs from your user profile, which doesn't know about the
> separate Guix profile you created which contains Erlang.
>
> You'd have to start Emacs from an shell where your separate profile was
> sourced, or fiddle with M-x setenv to fix this.  emacs-guix also has
> some guix-set-emacs-environment procedure that can be used to augment
> Emacs environment variables given a profile, but it seems broken at the
> moment.
>
> I just tried the following approach, where everything is managed by Guix
> in a separate profile:
>
> --8<---------------cut here---------------start------------->8---
> ;; file: manifest.scm
> (specifications->manifest
>  '("erlang"
>    "emacs"
>    "emacs-org"
>    "emacs-erlang"
>    "emacs-ob-erlang")) ;; freshly packaged for you ;-)
> --8<---------------cut here---------------end--------------->8---
>
> Then spawn an environment with
>
> guix environment -m manifest.scm
>
> And then ran the following experiment:
>
> --8<---------------cut here---------------start------------->8---
> # file: test.org
>
> Put this in your ~/.emacs or evaluate it ad-hoc before running the
> rest.
>
> #+begin_src elisp
>   (require 'org-tempo)			
>   (require 'ob-erlang)
>   (org-babel-do-load-languages
>    'org-babel-load-languages
>    '((erlang . t)))
> #+end_src
>
> Example taken from: https://github.com/xfwduke/ob-erlang
> With your cursor on the code block, I ran M-x org-babel-execute-src-block
> #+BEGIN_SRC erlang :module tryerlang
> start() ->
> 	io:format("hello world").
> #+END_SRC
>
> And it produced:
> #+RESULTS:
> : hello world
> --8<---------------cut here---------------end--------------->8---
>
> Hope this helps!
>
> Maxim

-- 
repositories: https://notabug.org/ZelphirKaltstahl


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-29 20:24         ` Ricardo Wurmus
@ 2020-06-29 20:37           ` Zelphir Kaltstahl
  0 siblings, 0 replies; 18+ messages in thread
From: Zelphir Kaltstahl @ 2020-06-29 20:37 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: help-guix

Hi Ricardo!


On 29.06.20 22:24, Ricardo Wurmus wrote:
> Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> writes:
>
>> I just did the edit thing and I am not sure how to then "upload" a
>> package. But I will read the docs a little and will probably all clear up.
> “guix edit” only opens the source file containing a package definition
> in your editor.
>
> To contribute packages please see the Contributing section in the manual.
>
>>> The point is that Guix has a really large collection of Emacs packages:
>>>
>>> --8<---------------cut here---------------start------------->8---
>>> $ du -sh gnu/packages/*.scm | sort -nr | head -n5
>>> 908K    gnu/packages/crates-io.scm
>>> 884K    gnu/packages/emacs-xyz.scm
>>> 784K    gnu/packages/cran.scm
>>> 732K    gnu/packages/python-xyz.scm
>>> 636K    gnu/packages/bioinformatics.scm
>>> --8<---------------cut here---------------end--------------->8---
>>>
>>> and if your needs is not there then "guix import elpa" eases the task
>>> for adding it. :-)
>> So if I understand this correctly, there are different channels for
>> different types of packages, for example for Rust packages we have
>> `gnu/packages/crates-io.scm` and for Emacs packages we have
>> `gnu/packages/emacs-xyz.scm`.
> No, these are not channels.  These are all modules that are part of the
> default channel called “guix”.
>
>> The command `guix describe -f channels` does not work for me:
>>
>> ~~~~
>> xiaolong@xlx200:~$ guix describe -f channels
>> guix describe: error: failed to determine origin
>> hint: Perhaps this `guix' command was not obtained with `guix pull'? Its version string is
>> 36da62f1b9c78a2729658143a7df1845cd532afa.
>> ~~~~
> “guix describe” will work when you use a “guix” that was obtained with
> “guix pull”.  It will usually be in ~/.config/guix/current/bin/guix.
>
>> I did another `guix pull` and `guix package -u` and this is after a
>> fresh Guix package manager install and and installing the following
>> packages:
>>
>> ~~~~
>> xiaolong@xlx200:~$ sudo -i guix package -I
>> glibc-utf8-locales	2.31	out	/gnu/store/z7a6sbvqzb5zapwpznmjkq2rsxil6i67-glibc-utf8-locales-2.31
>>
>> xiaolong@xlx200:~$ sudo -i guix package -I
>> glibc-utf8-locales	2.31	out	/gnu/store/z7a6sbvqzb5zapwpznmjkq2rsxil6i67-glibc-utf8-locales-2.31
>> xiaolong@xlx200:~$ guix package -I
>> guile	3.0.4	out	/gnu/store/ah16zr8mmfkqy23rr7jy5a842ca1q9h1-guile-3.0.4
>> erlang	21.3.8.13	out	/gnu/store/6x8ycgi8hv5rh8gq3vrdbcq5sh3qfq7i-erlang-21.3.8.13
>> emacs-ob-erlang	20180827-1.f1a8c66	out	/gnu/store/czg6wqga0hvc57axbz1cjp892k5r8ybp-emacs-ob-erlang-20180827-1.f1a8c66
>> icecat	68.9.0-guix0-preview1	out	/gnu/store/7qakza7zdiz57l5hldd8162324fwbw8s-icecat-68.9.0-guix0-preview1
>> libreoffice	6.4.4.2	out	/gnu/store/swk410ahw9v4k0hjmsd4f33bqw5fdyqa-libreoffice-6.4.4.2
>> lyx	2.3.5.1	out	/gnu/store/p7z5436jhgjlgdbx44np44vzjhrwi2ns-lyx-2.3.5.1
>> python	3.8.2	out	/gnu/store/6sr11m4i1d3vbqlmbpzmfj1lihbc5iz4-python-3.8.2
>> rust	1.39.0	out	/gnu/store/24pbvvdwaj9kbsdfi6kgxkvxkjayfz74-rust-1.39.0
>> openvpn	2.4.9	out	/gnu/store/3rh4i3wbkdwkrmrxy30d3f3nbg6kdl02-openvpn-2.4.9
>> emacs	26.3	out	/gnu/store/528p0v6gg5gx53jd0x52dmghb01bfhc5-emacs-26.3
>> glibc-utf8-locales	2.31	out	/gnu/store/z7a6sbvqzb5zapwpznmjkq2rsxil6i67-glibc-utf8-locales-2.31
>> guile-colorized	0.1	out	/gnu/store/5h0jfssgyx49cq82wrmw57an7ngb7kkz-guile-colorized-0.1
>> ~~~~
> I don’t know what this is supposed to demonstrate.  “sudo -i guix” runs
> Guix as the root user, which has a different default profile.


I made a typo when pasting the output from terminal. There are two
package -I outputs I posted, if you check. The one with fewer packages
is the root profile, of which you can see the command I used. The one
with more packages is not the root profile, but the `guix package -I`.
Perhaps I could have split it into two parts to make it more clear.

This is supposed to show, that I already installed some software,
instead of starting completely from a clean install, in case, that the
error I got could be caused by anything I installed already. I don't
know how it works internally, so perhaps it would be of use to someone
knowing more than me about Guix package manager. Better to put all the
info out there, than making others ask for it, because it's missing.
That was the idea I had behind that.


>> The other command to show the count of packages also does not work for me:
>>
>> ~~~~
>> xiaolong@xlx200:/$ sudo du -sh gnu/packages/*.scm | sort -nr | head -n5
>> du: cannot access 'gnu/packages/*.scm': No such file or directory
>> ~~~~
> That’s not a general command to count packages.  This was just simon’s
> way of showing you that the file containing package definitions for
> Emacs packages in the Guix repository is among the largest modules.
>
> To show all available packages use “guix package --list-available”.
>
>> Do I need to create channels, like a custom way of structuring packages
>> for myself, before running these commands?
> No.  The command line that simon showed you is a simple combination of
> coreutils commands that operate on the Guix source code.  If you want to
> run the same command you need to do this in the directory containing a
> checkout of the Guix source code.

OK I see, thanks!

Regards,
Zelphir

-- 
repositories: https://notabug.org/ZelphirKaltstahl



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-29 19:37       ` Zelphir Kaltstahl
  2020-06-29 20:24         ` Ricardo Wurmus
@ 2020-06-29 20:49         ` zimoun
  2020-06-29 21:12           ` Zelphir Kaltstahl
  1 sibling, 1 reply; 18+ messages in thread
From: zimoun @ 2020-06-29 20:49 UTC (permalink / raw)
  To: Zelphir Kaltstahl, Maxim Cournoyer; +Cc: help-guix

Dear,

On Mon, 29 Jun 2020 at 21:37, Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> wrote:
>> On Thu, 25 Jun 2020 at 21:25, Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> wrote:
>>
>>> * It requires keeping multiple Emacs on my system. How will they
>>> interact with the same ~/.emacs.d/.init.el?
>> Emacs reads init.el when it starts so yes all Emacs will interact with
>> this file if you do not specify explicitly to not do it.  Well, if you
>> use 'with-eval-after-load' in your Emacs configuration files, it should
>> not be a problem. Otherwise give a look at "emacs-guix" or try "emacs -q
>> -l /path/to/your/specific/config.el", as Maxim pointed.
>
> OK, so basically the way would then be to have 2 Emacs, but always start
> one of them with with the `-l <path>` argument, so that it makes use of
> another config file.

I am not sure to understand what you want.  Could you describe what is
your desired workflow to hack Erlang?

> OK nice! I'll try it for a package! I noticed, that there are only 3
> Emacs Org-Babel packages available (or visible)
> at: https://guix.gnu.org/packages/E/page/9/. I'l try with some of
> those

First, in case you do not know this web interface for searching
packages:

https://hpc.guix.info/browse

Second, I am not following closely Org Babel extensions but what
languages appear to you missing?


> Also the edit thing `guix edit emacs-ob-erlang` sounds interesting.

It depends if you use Guix System or Guix as package manager solely.
For the latter, the 'edit' is read-only.

> I just did the edit thing and I am not sure how to then "upload" a
> package. But I will read the docs a little and will probably all clear
> up.

What do you mean by "upload"?
If you mean contribute, you might be interested by this section of the
manual:

https://guix.gnu.org/manual/devel/en/guix.html#Contributing



> So if I understand this correctly, there are different channels for
> different types of packages, for example for Rust packages we have
> `gnu/packages/crates-io.scm` and for Emacs packages we have
> `gnu/packages/emacs-xyz.scm`.

Channel is not the right term, in Guix parlance.  To be clear, channel
means a collection of packages living in files.  The previous different
types of packages are all in the same channel, i.e., the default
channel.

https://guix.gnu.org/manual/devel/en/guix.html#Channels

For channels examples, you can give a look at:

https://gitlab.inria.fr/guix-hpc/guix-hpc
ahttps://gitlab.inria.fr/guix-hpc/guix-past


>
> The command `guix describe -f channels` does not work for me:
>
> ~~~~
> xiaolong@xlx200:~$ guix describe -f channels
> guix describe: error: failed to determine origin
> hint: Perhaps this `guix' command was not obtained with `guix pull'? Its version string is
> 36da62f1b9c78a2729658143a7df1845cd532afa.
> ~~~~

How did you install Guix?  Have you run "guix pull" before trying "guix
describe"?


> I did another `guix pull` and `guix package -u` and this is after a
> fresh Guix package manager install and and installing the following
> packages:
>
> ~~~~
> xiaolong@xlx200:~$ sudo -i guix package -I

Note that once you have configured your system (if you use Guix System),
you can run "guix pull" as a regular user and install package as regular
user, independently of what your system-wide is.

> The other command to show the count of packages also does not work for me:
>
> ~~~~
> xiaolong@xlx200:/$ sudo du -sh gnu/packages/*.scm | sort -nr | head -n5
> du: cannot access 'gnu/packages/*.scm': No such file or directory
> ~~~~

You need to be in the Guix repo, i.e., you need to git clone
https://git.savannah.gnu.org/git/guix.git and the subfolder
gnu/packages/ contains all the packages stored by thematic. 


> Do I need to create channels, like a custom way of structuring packages
> for myself, before running these commands?

To test and install your own packages, you have 3 choices:

 1. ./pre-inst-env
 2. local channel
 3. --load-path

The point #1 means you use the Contribution section, build Guix from
source, then add your package to the file gnu/packages/emacs-xyz.scm (of
the Git clone) and then run (from the Git cloned repo):

  ./pre-inst-env guix install emacs-foo

The point #2 means you use a local Git repo containing your definitions
of packages.  You have the channels.scm file:

--8<---------------cut here---------------start------------->8---
(cons*
 (channel
  (name 'my-stuff)
  (url "file:////path/to/my/stuff.git")
  (branch "master"))
 %default-channels)
--8<---------------cut here---------------end--------------->8---

then "guix pull -C path/to/channels.scm" and you should be able to
install your package emacs-foo with "guix install emacs-foo".  Note that
the Git repo can be also https:// or other protocols.

The point #3 mean you use a local folder containing your definitions as
for point #2.  Then you simply run:

   guix install -L path/to/your/folder/containing/stuff emacs-foo


Hope that helps,
simon


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-29 20:49         ` zimoun
@ 2020-06-29 21:12           ` Zelphir Kaltstahl
  2020-06-29 22:08             ` zimoun
  0 siblings, 1 reply; 18+ messages in thread
From: Zelphir Kaltstahl @ 2020-06-29 21:12 UTC (permalink / raw)
  To: zimoun; +Cc: help-guix

Hi Simon!

On 29.06.20 22:49, zimoun wrote:
> Dear,
>
> On Mon, 29 Jun 2020 at 21:37, Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> wrote:
>>> On Thu, 25 Jun 2020 at 21:25, Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> wrote:
>>>
>>>> * It requires keeping multiple Emacs on my system. How will they
>>>> interact with the same ~/.emacs.d/.init.el?
>>> Emacs reads init.el when it starts so yes all Emacs will interact with
>>> this file if you do not specify explicitly to not do it.  Well, if you
>>> use 'with-eval-after-load' in your Emacs configuration files, it should
>>> not be a problem. Otherwise give a look at "emacs-guix" or try "emacs -q
>>> -l /path/to/your/specific/config.el", as Maxim pointed.
>> OK, so basically the way would then be to have 2 Emacs, but always start
>> one of them with with the `-l <path>` argument, so that it makes use of
>> another config file.
> I am not sure to understand what you want.  Could you describe what is
> your desired workflow to hack Erlang?

I'm only trying to understand how it would work with 2 Emacs, one in the
main profile and one in another profile, which can be created from
manifest. What I would like to achieve is, that I can do some literate
programming in org-mode, while following along an online course about
Erlang. In the past I had some pretty good experience with that approach
to understanding some code and making sure I also write down what I
understand, so that later on, I can go back and read again. I am not
asking, whether this is a good or typical approach to any Erlang
development.

>> OK nice! I'll try it for a package! I noticed, that there are only 3
>> Emacs Org-Babel packages available (or visible)
>> at: https://guix.gnu.org/packages/E/page/9/. I'l try with some of
>> those
> First, in case you do not know this web interface for searching
> packages:
>
> https://hpc.guix.info/browse
Indeed I did not know that one yet and always clicked through the pages,
estimating, how many pages ahead I would need to go, to approximately
find a package. :D
> Second, I am not following closely Org Babel extensions but what
> languages appear to you missing?

I was thinking, that `ob-python` was missing, because I only found
`emacs-ob-ipython`, but apparently `ob-python` does not exist and is
instead built in? Because it works without me installing any `ob-python`
Emacs package. Same seems to be true for `ob-scheme`. Only needed to
install `geiser` I think.

For now it seems nothing is missing.

>> Also the edit thing `guix edit emacs-ob-erlang` sounds interesting.
> It depends if you use Guix System or Guix as package manager solely.
> For the latter, the 'edit' is read-only.
>
>> I just did the edit thing and I am not sure how to then "upload" a
>> package. But I will read the docs a little and will probably all clear
>> up.
> What do you mean by "upload"?
> If you mean contribute, you might be interested by this section of the
> manual:
>
> https://guix.gnu.org/manual/devel/en/guix.html#Contributing
>
>
>
>> So if I understand this correctly, there are different channels for
>> different types of packages, for example for Rust packages we have
>> `gnu/packages/crates-io.scm` and for Emacs packages we have
>> `gnu/packages/emacs-xyz.scm`.
> Channel is not the right term, in Guix parlance.  To be clear, channel
> means a collection of packages living in files.  The previous different
> types of packages are all in the same channel, i.e., the default
> channel.
>
> https://guix.gnu.org/manual/devel/en/guix.html#Channels
>
> For channels examples, you can give a look at:
>
> https://gitlab.inria.fr/guix-hpc/guix-hpc
> ahttps://gitlab.inria.fr/guix-hpc/guix-past
>
>
>> The command `guix describe -f channels` does not work for me:
>>
>> ~~~~
>> xiaolong@xlx200:~$ guix describe -f channels
>> guix describe: error: failed to determine origin
>> hint: Perhaps this `guix' command was not obtained with `guix pull'? Its version string is
>> 36da62f1b9c78a2729658143a7df1845cd532afa.
>> ~~~~
> How did you install Guix?  Have you run "guix pull" before trying "guix
> describe"?

I installed it on Trisquel 8 using the recommended install script. I did
`guix pull` just like the error hinted, but still got the error. Now, a
few terminals closed and opened later, it seems to work and give some
output.

~~~~
(list (channel
        (name 'guix)
        (url "https://git.savannah.gnu.org/git/guix.git")
        (commit
          "6ebf300959a58fd1eda875205c75d21137862285")))
~~~~

I think that is the normal intended output.

>> I did another `guix pull` and `guix package -u` and this is after a
>> fresh Guix package manager install and and installing the following
>> packages:
>>
>> ~~~~
>> xiaolong@xlx200:~$ sudo -i guix package -I
> Note that once you have configured your system (if you use Guix System),
> you can run "guix pull" as a regular user and install package as regular
> user, independently of what your system-wide is.

Yep, sorry for that copy&paste error in my e-mail! The longer output was
actually the output of the non-root profile already.

>> The other command to show the count of packages also does not work for me:
>>
>> ~~~~
>> xiaolong@xlx200:/$ sudo du -sh gnu/packages/*.scm | sort -nr | head -n5
>> du: cannot access 'gnu/packages/*.scm': No such file or directory
>> ~~~~
> You need to be in the Guix repo, i.e., you need to git clone
> https://git.savannah.gnu.org/git/guix.git and the subfolder
> gnu/packages/ contains all the packages stored by thematic.
>
>
>> Do I need to create channels, like a custom way of structuring packages
>> for myself, before running these commands?
> To test and install your own packages, you have 3 choices:
>
>  1. ./pre-inst-env
>  2. local channel
>  3. --load-path
>
> The point #1 means you use the Contribution section, build Guix from
> source, then add your package to the file gnu/packages/emacs-xyz.scm (of
> the Git clone) and then run (from the Git cloned repo):
>
>   ./pre-inst-env guix install emacs-foo
>
> The point #2 means you use a local Git repo containing your definitions
> of packages.  You have the channels.scm file:
>
> --8<---------------cut here---------------start------------->8---
> (cons*
>  (channel
>   (name 'my-stuff)
>   (url "file:////path/to/my/stuff.git")
>   (branch "master"))
>  %default-channels)
> --8<---------------cut here---------------end--------------->8---
>
> then "guix pull -C path/to/channels.scm" and you should be able to
> install your package emacs-foo with "guix install emacs-foo".  Note that
> the Git repo can be also https:// or other protocols.
>
> The point #3 mean you use a local folder containing your definitions as
> for point #2.  Then you simply run:
>
>    guix install -L path/to/your/folder/containing/stuff emacs-foo
>
>
> Hope that helps,
> simon

Thanks Simon, it helps!

I will need to read more about various terms in the Guix universe in its
docs. I've not read that much yet and that is, why some terms and
concepts are unclear to me.

Regards,
Zelphir

-- 
repositories: https://notabug.org/ZelphirKaltstahl


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-29 21:12           ` Zelphir Kaltstahl
@ 2020-06-29 22:08             ` zimoun
  0 siblings, 0 replies; 18+ messages in thread
From: zimoun @ 2020-06-29 22:08 UTC (permalink / raw)
  To: Zelphir Kaltstahl; +Cc: help-guix

On Mon, 29 Jun 2020 at 23:12, Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> wrote:

> I'm only trying to understand how it would work with 2 Emacs, one in the
> main profile and one in another profile, which can be created from
> manifest. What I would like to achieve is, that I can do some literate
> programming in org-mode, while following along an online course about
> Erlang. In the past I had some pretty good experience with that approach
> to understanding some code and making sure I also write down what I
> understand, so that later on, I can go back and read again. I am not
> asking, whether this is a good or typical approach to any Erlang
> development.

Having 2 Emacs instances, one in your default profile and one in your
Erlang dev profile does not mean you need complicated init.el file.  As
I wrote you earlier, you can use 'with-eval-after-load' and everything
will be fine, even using only one ~/.emacs.d.


> Thanks Simon, it helps!

Welcome!  Feel free to ask. :-)

All the best,
simon


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-24 20:29 ` Maxim Cournoyer
  2020-06-25 19:25   ` Zelphir Kaltstahl
  2020-06-29 20:26   ` Zelphir Kaltstahl
@ 2020-06-30 18:34   ` Zelphir Kaltstahl
  2020-06-30 18:41   ` Zelphir Kaltstahl
  3 siblings, 0 replies; 18+ messages in thread
From: Zelphir Kaltstahl @ 2020-06-30 18:34 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: help-guix

Hi Maxim!

I got around to trying it your way, I think.

I have the manifest file `manifest.scm`:

~~~~
(specifications->manifest
 '("erlang"
   "emacs"
   "emacs-org"
   "emacs-erlang"
   "emacs-ob-erlang"))
~~~~

~~~~
~~~~

~~~~
executing Erlang code block...
append-export-all: Symbol’s function definition is void: string-join
~~~~
~~~~
~~~~

On 24.06.20 22:29, Maxim Cournoyer wrote:
> Hello Zelphir,
>
> Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> writes:
>
>> Hello Guix users!
>>
>> What is your way of setting up a profile for Erlang development?
>>
>> There are some things I would like to have, some of which I already
>> managed to get:
>>
>>   * [X] Erlang installed through Guix package manager in a separate profile
>>   * [X] `erl` REPL available in that separate profile
>>   * [X] an Emacs Erlang mode (installed it through M-x list-pack RET and
>>     searched for erlang there)
>>   * [_] org-mode babel erlang for literate programming in org-mode,
>>     using the Guix installed erlang executable – I found
>>     https://github.com/xfwduke/ob-erlang, which also seems to work, but
>>     I do not know how to point it to the Guix installed Erlang, so that
>>     it can actually run code. Currently it complains about not finding
>>     Erlang. Does anyone know how to point it to the Erlang executable? I
>>     created this issue: https://github.com/xfwduke/ob-erlang/issues/1
> It just looks up erl from your PATH, so the problem must be that you
> started Emacs from your user profile, which doesn't know about the
> separate Guix profile you created which contains Erlang.
>
> You'd have to start Emacs from an shell where your separate profile was
> sourced, or fiddle with M-x setenv to fix this.  emacs-guix also has
> some guix-set-emacs-environment procedure that can be used to augment
> Emacs environment variables given a profile, but it seems broken at the
> moment.
>
> I just tried the following approach, where everything is managed by Guix
> in a separate profile:
>
> --8<---------------cut here---------------start------------->8---
> ;; file: manifest.scm
> (specifications->manifest
>  '("erlang"
>    "emacs"
>    "emacs-org"
>    "emacs-erlang"
>    "emacs-ob-erlang")) ;; freshly packaged for you ;-)
> --8<---------------cut here---------------end--------------->8---
>
> Then spawn an environment with
>
> guix environment -m manifest.scm
>
> And then ran the following experiment:
>
> --8<---------------cut here---------------start------------->8---
> # file: test.org
>
> Put this in your ~/.emacs or evaluate it ad-hoc before running the
> rest.
>
> #+begin_src elisp
>   (require 'org-tempo)			
>   (require 'ob-erlang)
>   (org-babel-do-load-languages
>    'org-babel-load-languages
>    '((erlang . t)))
> #+end_src
>
> Example taken from: https://github.com/xfwduke/ob-erlang
> With your cursor on the code block, I ran M-x org-babel-execute-src-block
> #+BEGIN_SRC erlang :module tryerlang
> start() ->
> 	io:format("hello world").
> #+END_SRC
>
> And it produced:
> #+RESULTS:
> : hello world
> --8<---------------cut here---------------end--------------->8---
>
> Hope this helps!
>
> Maxim

-- 
repositories: https://notabug.org/ZelphirKaltstahl


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-24 20:29 ` Maxim Cournoyer
                     ` (2 preceding siblings ...)
  2020-06-30 18:34   ` Zelphir Kaltstahl
@ 2020-06-30 18:41   ` Zelphir Kaltstahl
  2020-07-06  3:50     ` Maxim Cournoyer
  3 siblings, 1 reply; 18+ messages in thread
From: Zelphir Kaltstahl @ 2020-06-30 18:41 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: help-guix

Hi Maxim,

Sorry for the incomplete previous e-mail, somehow I hit send, instead of
changing formatting.

So here I go again:

I got around to trying it your way, I think.

I have the manifest file `manifest.scm`:

~~~~
(specifications->manifest
 '("erlang"
   "emacs"
   "emacs-org"
   "emacs-erlang"
   "emacs-ob-erlang"))
~~~~

Then I run the command you wrote: `guix environment -m manifest.scm`,
which created the environment just fine.

Then I created a little Bash script, to make sure to start the separate
Emacs without looking at the normal `~/.emacs.d/init.el` file:

~~~~
#!/usr/bin/env bash

set -Eeuxo pipefail

emacs --no-init-file --no-desktop --maximized
~~~~

And Emacs starts up just fine.

Then I run the Elisp code in the *scratch* buffer:

~~~~
  (require 'org-tempo)			
  (require 'ob-erlang)
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((erlang . t)))
~~~~

Then I try to run the org-mode source block hello world Erlang:

~~~~
start() ->
        io:format("hello world").
~~~~

Here however, I get an error logged in my *Messages* buffer:

~~~~
executing Erlang code block...
append-export-all: Symbol’s function definition is void: string-join
~~~~

Is there anything I missed?

Best regards,
Zelphir

On 24.06.20 22:29, Maxim Cournoyer wrote:
> Hello Zelphir,
>
> Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> writes:
>
>> Hello Guix users!
>>
>> What is your way of setting up a profile for Erlang development?
>>
>> There are some things I would like to have, some of which I already
>> managed to get:
>>
>>   * [X] Erlang installed through Guix package manager in a separate profile
>>   * [X] `erl` REPL available in that separate profile
>>   * [X] an Emacs Erlang mode (installed it through M-x list-pack RET and
>>     searched for erlang there)
>>   * [_] org-mode babel erlang for literate programming in org-mode,
>>     using the Guix installed erlang executable – I found
>>     https://github.com/xfwduke/ob-erlang, which also seems to work, but
>>     I do not know how to point it to the Guix installed Erlang, so that
>>     it can actually run code. Currently it complains about not finding
>>     Erlang. Does anyone know how to point it to the Erlang executable? I
>>     created this issue: https://github.com/xfwduke/ob-erlang/issues/1
> It just looks up erl from your PATH, so the problem must be that you
> started Emacs from your user profile, which doesn't know about the
> separate Guix profile you created which contains Erlang.
>
> You'd have to start Emacs from an shell where your separate profile was
> sourced, or fiddle with M-x setenv to fix this.  emacs-guix also has
> some guix-set-emacs-environment procedure that can be used to augment
> Emacs environment variables given a profile, but it seems broken at the
> moment.
>
> I just tried the following approach, where everything is managed by Guix
> in a separate profile:
>
> --8<---------------cut here---------------start------------->8---
> ;; file: manifest.scm
> (specifications->manifest
>  '("erlang"
>    "emacs"
>    "emacs-org"
>    "emacs-erlang"
>    "emacs-ob-erlang")) ;; freshly packaged for you ;-)
> --8<---------------cut here---------------end--------------->8---
>
> Then spawn an environment with
>
> guix environment -m manifest.scm
>
> And then ran the following experiment:
>
> --8<---------------cut here---------------start------------->8---
> # file: test.org
>
> Put this in your ~/.emacs or evaluate it ad-hoc before running the
> rest.
>
> #+begin_src elisp
>   (require 'org-tempo)			
>   (require 'ob-erlang)
>   (org-babel-do-load-languages
>    'org-babel-load-languages
>    '((erlang . t)))
> #+end_src
>
> Example taken from: https://github.com/xfwduke/ob-erlang
> With your cursor on the code block, I ran M-x org-babel-execute-src-block
> #+BEGIN_SRC erlang :module tryerlang
> start() ->
> 	io:format("hello world").
> #+END_SRC
>
> And it produced:
> #+RESULTS:
> : hello world
> --8<---------------cut here---------------end--------------->8---
>
> Hope this helps!
>
> Maxim

-- 
repositories: https://notabug.org/ZelphirKaltstahl


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-06-30 18:41   ` Zelphir Kaltstahl
@ 2020-07-06  3:50     ` Maxim Cournoyer
  2020-07-07 10:23       ` Zelphir Kaltstahl
  2020-07-16 21:34       ` Zelphir Kaltstahl
  0 siblings, 2 replies; 18+ messages in thread
From: Maxim Cournoyer @ 2020-07-06  3:50 UTC (permalink / raw)
  To: Zelphir Kaltstahl; +Cc: help-guix

Hello Zelphir!

Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> writes:

[...]

> Then I try to run the org-mode source block hello world Erlang:
>
> ~~~~
> start() ->
>         io:format("hello world").
> ~~~~
>
> Here however, I get an error logged in my *Messages* buffer:
>
> ~~~~
> executing Erlang code block...
> append-export-all: Symbol’s function definition is void: string-join
> ~~~~

Getting close!  I've had this error before and could workaround it (I
forgot how). let's see...

The string-join call originates from this procedure, which is in
 ob-erlang.el:

--8<---------------cut here---------------start------------->8---
(defun append-export-all (code-body)
  "Append -compile(export_all).  after -module line if CODE-BODY do not has export line."
  (if (export-p code-body)
      code-body
    (string-join (mapcar
		  (lambda (line)
		    (if (string-match-p "^-module" line)
			(setq line (concat line "\n-compile(export_all)."))
		      line))
		  (split-string code-body "\n"))
     "\n")))
--8<---------------cut here---------------end--------------->8---

In Emacs, C-h f string-join RET says it is defined in the subr-x.el
module:

--8<---------------cut here---------------start------------->8---
string-join is a compiled Lisp function in
‘/gnu/store/pm5kipzcpkfxspy0hhq0jnma7475hqhv-emacs-26.3/share/emacs/26.3/lisp/emacs-lisp/subr-x.el’.

(string-join STRINGS &optional SEPARATOR)

Join all STRINGS using SEPARATOR.
--8<---------------cut here---------------end--------------->8---

Clicking on the link to the file fails to display it.  After some head
scratching, it turns out that Emacs calls out to 'sh' and 'gzip' to
uncompress the 'subr.el.gz' file, and failing to do so 'string-join' is
undefined.  That's a bug in our Emacs package, it should just work even
when ran in a container, at least for such core functionality.

For now, using 'guix environment -m manifest.scm --pure --ad-hoc bash
gzip' gets us passed this road block.  Unfortunately doing the above
steps still fail to produce the "hello world" result in a pure
environment.

Time to C-u C-M-x (edebug) org-babel-execute-src-block and see where the
it stumbles, given the lack of error message.

Everything looks fine until line 704 in ob-core.el:

		    (let ((r (funcall cmd body params)))

Where cmd, body and params are bound to org-babel-execute:erlang,
"start() ->\n io:format(\"hello world\")." and ((:colname-names)
(:rowname-names) (:result-params "replace") (:result-type . value)
(:results . "replace") (:exports . "code") (:session . "none") (:cache
. "no") (:noweb . "no") (:hlines . "no") (:tangle . "no")),
respectively.

C-h f org-babel-execute:erlang RET allows us to navigate to its
definition, which we instrument for Edebug (C-u C-M-x) then run the
entry-point M-x org-babel-execute-src-block again.

The function saves the following script to a file named ".erc" under a
temporary directory, with the following content:

--8<---------------cut here---------------start------------->8---
-module().
-compile(export_all).
start() ->
 io:format("hello world").
--8<---------------cut here---------------end--------------->8---

Which it compiles with: erlc -o /tmp/org-babel-erlangFBLqDi
/tmp/org-babel-erlangFBLqDi/.erl

The file name is made by concatenating the module name (specified with
-module line or a :module code block parameter), which we didn't specify
here so it is nil.

It seems that a nil module name is not valid in erlang. the
-module(). doesn't compile and the file name '.erl' seems to cause
problems too.  ob-erlang should probably choose a default module name
when the user doesn't care to specify one instead of producing broken
code.

The workaround is to define a module name as explained on the ob-erlang
 home page:

#+BEGIN_SRC erlang :module tryerlang
start() ->
	io:format("hello world").
#+END_SRC

Except there's a bug in ob-erlang and this also fails (it still produces
a -module(). line).

Instead, define it yourself:

#+begin_src erlang
  -module(m).
  start() ->
      io:format("hello world").
#+end_src

This works.

I'll take two actions following this:

1) Create a Guix bug against our Emacs package: installing bash and gzip
should not be necessary in a container just so that Emacs is able to
load core modules --> done: http://issues.guix.gnu.org/issue/42224

2) Submit a PR to the ob-erlang project that fixes the above problems
--> done: https://github.com/xfwduke/ob-erlang/pull/2.

HTH!

Maxim


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-07-06  3:50     ` Maxim Cournoyer
@ 2020-07-07 10:23       ` Zelphir Kaltstahl
  2020-07-07 15:55         ` Maxim Cournoyer
  2020-07-16 21:34       ` Zelphir Kaltstahl
  1 sibling, 1 reply; 18+ messages in thread
From: Zelphir Kaltstahl @ 2020-07-07 10:23 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: help-guix

Hey Maxim!

Wow, thanks for the notes on how to debug the problem as well as looking
into it.

I'll try to do the same debugging later myself, to learn how to do that
and perhaps in the future know what to look for.

Regards,
Zelphir

On 06.07.20 05:50, Maxim Cournoyer wrote:
> Hello Zelphir!
>
> Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> writes:
>
> [...]
>
>> Then I try to run the org-mode source block hello world Erlang:
>>
>> ~~~~
>> start() ->
>>         io:format("hello world").
>> ~~~~
>>
>> Here however, I get an error logged in my *Messages* buffer:
>>
>> ~~~~
>> executing Erlang code block...
>> append-export-all: Symbol’s function definition is void: string-join
>> ~~~~
> Getting close!  I've had this error before and could workaround it (I
> forgot how). let's see...
>
> The string-join call originates from this procedure, which is in
>  ob-erlang.el:
>
> --8<---------------cut here---------------start------------->8---
> (defun append-export-all (code-body)
>   "Append -compile(export_all).  after -module line if CODE-BODY do not has export line."
>   (if (export-p code-body)
>       code-body
>     (string-join (mapcar
> 		  (lambda (line)
> 		    (if (string-match-p "^-module" line)
> 			(setq line (concat line "\n-compile(export_all)."))
> 		      line))
> 		  (split-string code-body "\n"))
>      "\n")))
> --8<---------------cut here---------------end--------------->8---
>
> In Emacs, C-h f string-join RET says it is defined in the subr-x.el
> module:
>
> --8<---------------cut here---------------start------------->8---
> string-join is a compiled Lisp function in
> ‘/gnu/store/pm5kipzcpkfxspy0hhq0jnma7475hqhv-emacs-26.3/share/emacs/26.3/lisp/emacs-lisp/subr-x.el’.
>
> (string-join STRINGS &optional SEPARATOR)
>
> Join all STRINGS using SEPARATOR.
> --8<---------------cut here---------------end--------------->8---
>
> Clicking on the link to the file fails to display it.  After some head
> scratching, it turns out that Emacs calls out to 'sh' and 'gzip' to
> uncompress the 'subr.el.gz' file, and failing to do so 'string-join' is
> undefined.  That's a bug in our Emacs package, it should just work even
> when ran in a container, at least for such core functionality.
>
> For now, using 'guix environment -m manifest.scm --pure --ad-hoc bash
> gzip' gets us passed this road block.  Unfortunately doing the above
> steps still fail to produce the "hello world" result in a pure
> environment.
>
> Time to C-u C-M-x (edebug) org-babel-execute-src-block and see where the
> it stumbles, given the lack of error message.
>
> Everything looks fine until line 704 in ob-core.el:
>
> 		    (let ((r (funcall cmd body params)))
>
> Where cmd, body and params are bound to org-babel-execute:erlang,
> "start() ->\n io:format(\"hello world\")." and ((:colname-names)
> (:rowname-names) (:result-params "replace") (:result-type . value)
> (:results . "replace") (:exports . "code") (:session . "none") (:cache
> . "no") (:noweb . "no") (:hlines . "no") (:tangle . "no")),
> respectively.
>
> C-h f org-babel-execute:erlang RET allows us to navigate to its
> definition, which we instrument for Edebug (C-u C-M-x) then run the
> entry-point M-x org-babel-execute-src-block again.
>
> The function saves the following script to a file named ".erc" under a
> temporary directory, with the following content:
>
> --8<---------------cut here---------------start------------->8---
> -module().
> -compile(export_all).
> start() ->
>  io:format("hello world").
> --8<---------------cut here---------------end--------------->8---
>
> Which it compiles with: erlc -o /tmp/org-babel-erlangFBLqDi
> /tmp/org-babel-erlangFBLqDi/.erl
>
> The file name is made by concatenating the module name (specified with
> -module line or a :module code block parameter), which we didn't specify
> here so it is nil.
>
> It seems that a nil module name is not valid in erlang. the
> -module(). doesn't compile and the file name '.erl' seems to cause
> problems too.  ob-erlang should probably choose a default module name
> when the user doesn't care to specify one instead of producing broken
> code.
>
> The workaround is to define a module name as explained on the ob-erlang
>  home page:
>
> #+BEGIN_SRC erlang :module tryerlang
> start() ->
> 	io:format("hello world").
> #+END_SRC
>
> Except there's a bug in ob-erlang and this also fails (it still produces
> a -module(). line).
>
> Instead, define it yourself:
>
> #+begin_src erlang
>   -module(m).
>   start() ->
>       io:format("hello world").
> #+end_src
>
> This works.
>
> I'll take two actions following this:
>
> 1) Create a Guix bug against our Emacs package: installing bash and gzip
> should not be necessary in a container just so that Emacs is able to
> load core modules --> done: http://issues.guix.gnu.org/issue/42224
>
> 2) Submit a PR to the ob-erlang project that fixes the above problems
> --> done: https://github.com/xfwduke/ob-erlang/pull/2.
>
> HTH!
>
> Maxim

-- 
repositories: https://notabug.org/ZelphirKaltstahl



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-07-07 10:23       ` Zelphir Kaltstahl
@ 2020-07-07 15:55         ` Maxim Cournoyer
  0 siblings, 0 replies; 18+ messages in thread
From: Maxim Cournoyer @ 2020-07-07 15:55 UTC (permalink / raw)
  To: Zelphir Kaltstahl; +Cc: help-guix

Hi,

Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> writes:

> Hey Maxim!
>
> Wow, thanks for the notes on how to debug the problem as well as looking
> into it.
>
> I'll try to do the same debugging later myself, to learn how to do that
> and perhaps in the future know what to look for.

Glad I could help!

Maxim


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: Erlang + Emacs profile
  2020-07-06  3:50     ` Maxim Cournoyer
  2020-07-07 10:23       ` Zelphir Kaltstahl
@ 2020-07-16 21:34       ` Zelphir Kaltstahl
  1 sibling, 0 replies; 18+ messages in thread
From: Zelphir Kaltstahl @ 2020-07-16 21:34 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: help-guix

Hi Maxim!

It took me a few days longer to get back to this.

Just to make sure I am doing this correctly: I put the:

~~~~
  (require 'org-tempo)
  (require 'ob-erlang)
  (org-babel-do-load-languages
   'org-babel-load-languages
   '((erlang . t)
     (shell . t)))
~~~~

Into the *scratch* buffer and then highlight all of it and "Evaluate and
print" (or C-j), after which a "nil" is printed in the *scratch* buffer.

Then I proceed.

On 06.07.20 05:50, Maxim Cournoyer wrote:
> Hello Zelphir!
>
> Zelphir Kaltstahl <zelphirkaltstahl@posteo.de> writes:
>
> [...]
>
>> Then I try to run the org-mode source block hello world Erlang:
>>
>> ~~~~
>> start() ->
>>         io:format("hello world").
>> ~~~~
>>
>> Here however, I get an error logged in my *Messages* buffer:
>>
>> ~~~~
>> executing Erlang code block...
>> append-export-all: Symbol’s function definition is void: string-join
>> ~~~~
> Getting close!  I've had this error before and could workaround it (I
> forgot how). let's see...
>
> The string-join call originates from this procedure, which is in
>  ob-erlang.el:
>
> --8<---------------cut here---------------start------------->8---
> (defun append-export-all (code-body)
>   "Append -compile(export_all).  after -module line if CODE-BODY do not has export line."
>   (if (export-p code-body)
>       code-body
>     (string-join (mapcar
> 		  (lambda (line)
> 		    (if (string-match-p "^-module" line)
> 			(setq line (concat line "\n-compile(export_all)."))
> 		      line))
> 		  (split-string code-body "\n"))
>      "\n")))
> --8<---------------cut here---------------end--------------->8---
>
> In Emacs, C-h f string-join RET says it is defined in the subr-x.el
> module:
>
> --8<---------------cut here---------------start------------->8---
> string-join is a compiled Lisp function in
> ‘/gnu/store/pm5kipzcpkfxspy0hhq0jnma7475hqhv-emacs-26.3/share/emacs/26.3/lisp/emacs-lisp/subr-x.el’.
>
> (string-join STRINGS &optional SEPARATOR)
>
> Join all STRINGS using SEPARATOR.
> --8<---------------cut here---------------end--------------->8---
>
> Clicking on the link to the file fails to display it.

(Note: For me it opens the file, not sure, whether this is important. It
shows the definition:

~~~~
(defsubst string-join (strings &optional separator)
  "Join all STRINGS using SEPARATOR."
  (mapconcat 'identity strings separator))
~~~~

)

> After some head
> scratching, it turns out that Emacs calls out to 'sh' and 'gzip' to
> uncompress the 'subr.el.gz' file, and failing to do so 'string-join' is
> undefined.  That's a bug in our Emacs package, it should just work even
> when ran in a container, at least for such core functionality.
>
> For now, using 'guix environment -m manifest.scm --pure --ad-hoc bash
> gzip' gets us passed this road block.  Unfortunately doing the above
> steps still fail to produce the "hello world" result in a pure
> environment.

For me there is a different result (added newlines for readability):

~~~~
$ guix environment -m manifest.scm --pure --ad-hoc bash gzip

The following derivation will be built:
   /gnu/store/3fsqf52sgr0mm271szmb24knvwr47frx-profile.drv
The following profile hooks will be built:
   /gnu/store/4i8zy7adnskvbsfm8za29vb8nmqlds9f-gtk-im-modules.drv
   /gnu/store/7jdkqh3zhjlhc6wmb2qnnh6ysc1c3nbs-ca-certificate-bundle.drv
   /gnu/store/g31dq1fn90h2mdfvpb55i02r73sgrf0h-info-dir.drv
   /gnu/store/ikm4rinvywb7qapi6sqxb9yq3kj7mqjv-manual-database.drv
   /gnu/store/j3ks6l39bpj6svlrmap0s4smjz44iwbq-glib-schemas.drv
   /gnu/store/m6ki0x4p25sh4x9wzzgy8lxkwkysfk8a-xdg-desktop-database.drv
   /gnu/store/ygkd5q4d4m7a6lp86lm2b65md2by7r2r-xdg-mime-database.drv
   /gnu/store/zf9kfkm1ihqg3xcbw5xp2f59243da9z2-fonts-dir.drv
   /gnu/store/zq1rvhmxnrkr9cdpavdy05dpfdww044q-gtk-icon-themes.drv
building CA certificate bundle...
building fonts directory...
generating GLib schema cache...
creating GTK+ icon theme cache...
building cache files for GTK+ input methods...
building directory of Info manuals...
building database for manual pages...
building XDG desktop file cache...
building XDG MIME database...
building profile with 7 packages...
Command 'lesspipe' is available in the following places
 * /bin/lesspipe
 * /usr/bin/lesspipe
The command could not be located because '/bin:/usr/bin' is not included in the PATH environment variable.
lesspipe: command not found
Command 'dircolors' is available in '/usr/bin/dircolors'
The command could not be located because '/usr/bin' is not included in the PATH environment variable.
dircolors: command not found
Command 'ls' is available in '/bin/ls'
The command could not be located because '/bin' is not included in the PATH environment variable.
ls: command not found

$ which emacs 

Command 'which' is available in the following places
 * /bin/which
 * /usr/bin/which
The command could not be located because '/bin:/usr/bin' is not included in the PATH environment variable.
which: command not found

$ emacs -Q
~~~~

And Emacs starts up just like before, but still I get the same error
about string-join being void.

> Time to C-u C-M-x (edebug) org-babel-execute-src-block and see where the
> it stumbles, given the lack of error message.

I guess the rest has only a chance of working once I get around the
string-join issue, but I still tried as follows.

For me when pressing C-u C-M-x, the part C-M-x is not a defined key
combination and it shows in the *Messages* buffer:

~~~~
C-M-x is undefined
~~~~

So I ran edebug in the "Eval :" minibuffer pressing C-S-: (control,
shift, colon) and writing there "edebug" and pressing the return key.
Then the *Backtrace* buffer shows up, so that seems to have worked.

However, next problem is to run `org-babel-execute-src-block`. When I
try it in the M-x thing, it claims that `org-babel-execute-src-block` is
void. I think it does not work inside the *Backtrace* buffer and I need
to be in the buffer, where org-mode runs. However,  when I move the
cursor into that buffer, an try to run `org-babel-execute-src-block`
there, I am back to the string-join error.

> Everything looks fine until line 704 in ob-core.el:
>
> 		    (let ((r (funcall cmd body params)))
>
> Where cmd, body and params are bound to org-babel-execute:erlang,
> "start() ->\n io:format(\"hello world\")." and ((:colname-names)
> (:rowname-names) (:result-params "replace") (:result-type . value)
> (:results . "replace") (:exports . "code") (:session . "none") (:cache
> . "no") (:noweb . "no") (:hlines . "no") (:tangle . "no")),
> respectively.
>
> C-h f org-babel-execute:erlang RET allows us to navigate to its
> definition, which we instrument for Edebug (C-u C-M-x) then run the
> entry-point M-x org-babel-execute-src-block again.
>
> The function saves the following script to a file named ".erc" under a
> temporary directory, with the following content:
>
> --8<---------------cut here---------------start------------->8---
> -module().
> -compile(export_all).
> start() ->
>  io:format("hello world").
> --8<---------------cut here---------------end--------------->8---
>
> Which it compiles with: erlc -o /tmp/org-babel-erlangFBLqDi
> /tmp/org-babel-erlangFBLqDi/.erl
>
> The file name is made by concatenating the module name (specified with
> -module line or a :module code block parameter), which we didn't specify
> here so it is nil.
>
> It seems that a nil module name is not valid in erlang. the
> -module(). doesn't compile and the file name '.erl' seems to cause
> problems too.  ob-erlang should probably choose a default module name
> when the user doesn't care to specify one instead of producing broken
> code.
>
> The workaround is to define a module name as explained on the ob-erlang
>  home page:
>
> #+BEGIN_SRC erlang :module tryerlang
> start() ->
> 	io:format("hello world").
> #+END_SRC
>
> Except there's a bug in ob-erlang and this also fails (it still produces
> a -module(). line).
>
> Instead, define it yourself:
>
> #+begin_src erlang
>   -module(m).
>   start() ->
>       io:format("hello world").
> #+end_src
OK I added that to my source block.
> This works.
>
> I'll take two actions following this:
>
> 1) Create a Guix bug against our Emacs package: installing bash and gzip
> should not be necessary in a container just so that Emacs is able to
> load core modules --> done: http://issues.guix.gnu.org/issue/42224
>
> 2) Submit a PR to the ob-erlang project that fixes the above problems
> --> done: https://github.com/xfwduke/ob-erlang/pull/2.
>
> HTH!
>
> Maxim

Thanks for doing those 2 things and taking the time to write that response.

Best regards,
Zelphir

-- 
repositories: https://notabug.org/ZelphirKaltstahl


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2020-07-16 21:34 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-23 22:49 Erlang + Emacs profile Zelphir Kaltstahl
2020-06-24 20:29 ` Maxim Cournoyer
2020-06-25 19:25   ` Zelphir Kaltstahl
2020-06-28  4:41     ` Maxim Cournoyer
2020-06-29  8:50     ` zimoun
2020-06-29 19:37       ` Zelphir Kaltstahl
2020-06-29 20:24         ` Ricardo Wurmus
2020-06-29 20:37           ` Zelphir Kaltstahl
2020-06-29 20:49         ` zimoun
2020-06-29 21:12           ` Zelphir Kaltstahl
2020-06-29 22:08             ` zimoun
2020-06-29 20:26   ` Zelphir Kaltstahl
2020-06-30 18:34   ` Zelphir Kaltstahl
2020-06-30 18:41   ` Zelphir Kaltstahl
2020-07-06  3:50     ` Maxim Cournoyer
2020-07-07 10:23       ` Zelphir Kaltstahl
2020-07-07 15:55         ` Maxim Cournoyer
2020-07-16 21:34       ` Zelphir Kaltstahl

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).