unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Guix Goals: One Hackable Developer Tool To Rule Them All
@ 2022-10-13  6:07 jgart
  2022-10-13 13:03 ` zimoun
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: jgart @ 2022-10-13  6:07 UTC (permalink / raw)
  To: Guix Devel

Hi Guixers,

What do you think if we were to implement "Guix Goals"?

The various language ecosystems have their own linters, formatters,
typecheckers, repls, test runners, etc.

What if Guix could manage them all?

`guix lint` in a python project would run mypy.
`guix lint` in a haskell project would run hlint.
`guix lint` in an erlang project would run dialyzer.

`guix fmt` in a python project would run black.
`guix fmt` in a haskell project would run ormolu.
`guix fmt` in a erlang project would run erlfmt.

`guix repl` in a python project would run ptpython or some other configured repl.
`guix repl` in a haskell project would run ghci.
`guix repl` in a erlang project would run erl.

`guix test` in a python project would run pytest or unittest.
`guix test` in a haskell project would run hunit.
`guix test` in a erlang project would run eunit.

`guix run` in a python project could start a flask app listening on a particular port.
`guix run` in a ruby project could start a puma server.
`guix run` in a haskell project could run a pre-configured script or Main.hs
`guix run` in a erlang project could start a cowboy server.

The idea would be to have Guix provide a configurable CLI wrapper
subcommand around all language ecosystem developer tools. In other words
it's the same Guixy thesis applied to developer tooling. I think this
could take the Guix developer experience to the next level.



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

* Re: Guix Goals: One Hackable Developer Tool To Rule Them All
  2022-10-13  6:07 Guix Goals: One Hackable Developer Tool To Rule Them All jgart
@ 2022-10-13 13:03 ` zimoun
  2022-10-13 13:56 ` pinoaffe
  2022-10-16 13:11 ` Liliana Marie Prikler
  2 siblings, 0 replies; 13+ messages in thread
From: zimoun @ 2022-10-13 13:03 UTC (permalink / raw)
  To: jgart, Guix Devel

Hi,
On jeu., 13 oct. 2022 at 01:07, jgart <jgart@dismail.de> wrote:

> `guix lint` in a python project would run mypy.

[...]

> `guix fmt` in a python project would run black.

Following your logic, it should be “guix style”.

> `guix repl` in a python project would run ptpython or some other configured repl.

[...]


[...]

> `guix run` in a python project could start a flask app listening on a particular port.

[...]

> The idea would be to have Guix provide a configurable CLI wrapper
> subcommand around all language ecosystem developer tools. In other words
> it's the same Guixy thesis applied to developer tooling. I think this
> could take the Guix developer experience to the next level.

I think it is a bad idea to mix generic Guix commands with per specific
project ones.  For instance, considering a Python project, then if I run
“guix repl”, it launches some Python interpreter, but what if I really
want to start Guix REPL.  Instead, it would appears a better design to
have:

    guix project lint    
    guix project style
    guix project repl
    guix project test
    guix project run

Well, for it is worth, I often deal with some multi-languages projects,
and what I prefer is to explicitly run the per language tool, e.g.,

    guixify ipython

launching some Python interpreter.  I personally prefer an explicit
reference of the tools.

*guixify is currently a tiny Bash script similar to the one pasted here
[1].  But we could imagine a Guile script. :-)

1: <https://yhetil.org/guix/86wn9puqj7.fsf@gmail.com>

Cheers,
simon


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

* Re: Guix Goals: One Hackable Developer Tool To Rule Them All
  2022-10-13  6:07 Guix Goals: One Hackable Developer Tool To Rule Them All jgart
  2022-10-13 13:03 ` zimoun
@ 2022-10-13 13:56 ` pinoaffe
  2022-10-13 14:34   ` indieterminacy
  2022-10-16 13:11 ` Liliana Marie Prikler
  2 siblings, 1 reply; 13+ messages in thread
From: pinoaffe @ 2022-10-13 13:56 UTC (permalink / raw)
  To: jgart; +Cc: guix-devel


Hi,

I think that (if done well) this would greatly simplify my workflow in
many software projects, so I think it's a good idea.

In the rest of my email, I more or less assume that there is a
one-to-one correspondence between software projects and guix packages,
even though this is clearly not the case.  I nonetheless make this
assumption since it is the case (or can be made the case) for many of
the software projects on which one might want to work using guix.

jgart <jgart@dismail.de> writes:
> The various language ecosystems have their own linters, formatters,
> typecheckers, repls, test runners, etc.
>
> What if Guix could manage them all?
>
> `guix lint` in a python project would run mypy.
> `guix lint` in a haskell project would run hlint.
> `guix lint` in an erlang project would run dialyzer.

These would require some sort of configurability, since most
languages/projects have not just one linter.  Even if there's a
"monopoly" there might be different settings/versions of said linter.

Do you propose that such configuration is added to packages?  Or should
this go somewhere else?

Furthermore, in many projects there are various different languages at
once (e.g., a python webapp with client-side javascript and css), so it
would probably be useful to mirror the build-phases approach in guix
packaging.  It might even be possible to set up (somewhat) sane defaults
based on the build-system used by the local project.

> `guix fmt` in a python project would run black.
> `guix fmt` in a haskell project would run ormolu.
> `guix fmt` in a erlang project would run erlfmt.

My comments regarding linters apply here as well

> `guix repl` in a python project would run ptpython or some other configured repl.
> `guix repl` in a haskell project would run ghci.
> `guix repl` in a erlang project would run erl.

This should be fairly easy to implement, assuming that there is just one
repl associated to each project one might want to use this command with.
It should (imo) be possible to configure/pass arguments to the repl on a
per-project basis and whenever you run `guix repl`

> `guix test` in a python project would run pytest or unittest.
> `guix test` in a haskell project would run hunit.
> `guix test` in a erlang project would run eunit.

Should I read this as a proposal to add an extra command to build (and
test) the local project's guix package, or do you propose to make this
do something different?  Because I'm not sure the latter would be a good
idea, if there is a need to do testing in some other way than currently
possible I'd think it would be more valuable (and more clean) to extend
the current testing facilities to incorporate this.

> `guix run` in a python project could start a flask app listening on a particular port.
> `guix run` in a ruby project could start a puma server.
> `guix run` in a haskell project could run a pre-configured script or Main.hs
> `guix run` in a erlang project could start a cowboy server.

I'm not sure how widely this may be applicable, since many projects or
packages don't have just one way to run them, they may even contain
several different executables or modules.

> The idea would be to have Guix provide a configurable CLI wrapper
> subcommand around all language ecosystem developer tools. In other words
> it's the same Guixy thesis applied to developer tooling. I think this
> could take the Guix developer experience to the next level.

Kind regards,
pinoaffe


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

* Re: Guix Goals: One Hackable Developer Tool To Rule Them All
  2022-10-13 13:56 ` pinoaffe
@ 2022-10-13 14:34   ` indieterminacy
  2022-10-13 14:55     ` pinoaffe
  0 siblings, 1 reply; 13+ messages in thread
From: indieterminacy @ 2022-10-13 14:34 UTC (permalink / raw)
  To: pinoaffe; +Cc: jgart, guix-devel

Sorry if this comes off as facetious (because this is an interesting 
proposal) but hasnt Make cornered a lot of these usecases well enough?

On 13-10-2022 15:56, pinoaffe wrote:
> Hi,
> 
> I think that (if done well) this would greatly simplify my workflow in
> many software projects, so I think it's a good idea.
> 
> In the rest of my email, I more or less assume that there is a
> one-to-one correspondence between software projects and guix packages,
> even though this is clearly not the case.  I nonetheless make this
> assumption since it is the case (or can be made the case) for many of
> the software projects on which one might want to work using guix.
> 
> jgart <jgart@dismail.de> writes:
>> The various language ecosystems have their own linters, formatters,
>> typecheckers, repls, test runners, etc.
>> 
>> What if Guix could manage them all?
>> 
>> `guix lint` in a python project would run mypy.
>> `guix lint` in a haskell project would run hlint.
>> `guix lint` in an erlang project would run dialyzer.
> 
> These would require some sort of configurability, since most
> languages/projects have not just one linter.  Even if there's a
> "monopoly" there might be different settings/versions of said linter.
> 
> Do you propose that such configuration is added to packages?  Or should
> this go somewhere else?
> 
> Furthermore, in many projects there are various different languages at
> once (e.g., a python webapp with client-side javascript and css), so it
> would probably be useful to mirror the build-phases approach in guix
> packaging.  It might even be possible to set up (somewhat) sane 
> defaults
> based on the build-system used by the local project.
> 
>> `guix fmt` in a python project would run black.
>> `guix fmt` in a haskell project would run ormolu.
>> `guix fmt` in a erlang project would run erlfmt.
> 
> My comments regarding linters apply here as well
> 
>> `guix repl` in a python project would run ptpython or some other 
>> configured repl.
>> `guix repl` in a haskell project would run ghci.
>> `guix repl` in a erlang project would run erl.
> 
> This should be fairly easy to implement, assuming that there is just 
> one
> repl associated to each project one might want to use this command 
> with.
> It should (imo) be possible to configure/pass arguments to the repl on 
> a
> per-project basis and whenever you run `guix repl`
> 
>> `guix test` in a python project would run pytest or unittest.
>> `guix test` in a haskell project would run hunit.
>> `guix test` in a erlang project would run eunit.
> 
> Should I read this as a proposal to add an extra command to build (and
> test) the local project's guix package, or do you propose to make this
> do something different?  Because I'm not sure the latter would be a 
> good
> idea, if there is a need to do testing in some other way than currently
> possible I'd think it would be more valuable (and more clean) to extend
> the current testing facilities to incorporate this.
> 
>> `guix run` in a python project could start a flask app listening on a 
>> particular port.
>> `guix run` in a ruby project could start a puma server.
>> `guix run` in a haskell project could run a pre-configured script or 
>> Main.hs
>> `guix run` in a erlang project could start a cowboy server.
> 
> I'm not sure how widely this may be applicable, since many projects or
> packages don't have just one way to run them, they may even contain
> several different executables or modules.
> 
>> The idea would be to have Guix provide a configurable CLI wrapper
>> subcommand around all language ecosystem developer tools. In other 
>> words
>> it's the same Guixy thesis applied to developer tooling. I think this
>> could take the Guix developer experience to the next level.
> 
> Kind regards,
> pinoaffe

-- 
Jonathan McHugh
indieterminacy@libre.brussels


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

* Re: Guix Goals: One Hackable Developer Tool To Rule Them All
  2022-10-13 14:34   ` indieterminacy
@ 2022-10-13 14:55     ` pinoaffe
  2022-10-14  2:24       ` jgart
  0 siblings, 1 reply; 13+ messages in thread
From: pinoaffe @ 2022-10-13 14:55 UTC (permalink / raw)
  To: indieterminacy; +Cc: pinoaffe, jgart, guix-devel


indieterminacy <indieterminacy@libre.brussels> writes:

> Sorry if this comes off as facetious (because this is an interesting
> proposal) but hasnt Make cornered a lot of these usecases well enough?

It has covered some of these usecases to a certain degree, but in my
opinion there's a lot of room for improvement.

As an example, setting up make to run a particular command in a
particular environment (e.g., with certain packages available) is (imo)
quite annoying.  It would be possible to shell out to guix from within a
makefile, but at that point, it's (imo) way cleaner if this can be
handled by guix.

Furthermore, doing this ckind of configuration in a makefile means that
the same or very similar make commands would need to be put in many
projects' makefiles, this could be implemented a lot cleaner within guix.


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

* Re: Guix Goals: One Hackable Developer Tool To Rule Them All
  2022-10-13 14:55     ` pinoaffe
@ 2022-10-14  2:24       ` jgart
  0 siblings, 0 replies; 13+ messages in thread
From: jgart @ 2022-10-14  2:24 UTC (permalink / raw)
  To: pinoaffe; +Cc: indieterminacy, pinoaffe, guix-devel

On Thu, 13 Oct 2022 16:55:33 +0200 pinoaffe <pinoaffe@airmail.cc> wrote:

What I proposed is not an original idea but what the pants project
does. See this doc:

https://www.pantsbuild.org/v1.29/docs/goals

Pants fully supports Python but they are quickly working on golang,
java, and other languages.

zimoun, I'm mostly just brainstorming the general idea at the moment. I don't
mind if it takes the form of `guix project ...` or some other form.

pinoaffe, I agree that the developer commands should be completely
Guile configurable and hackable to our hacker heart's content, of
course. That's why we're all here ;()

Jonathan,

> but hasnt Make cornered a lot of these usecases well enough?

That didn't stop Guixers from making the gnu-build-system that paren
hugs Make. Why stop there? If you want to call mypy from Make that's
fine but I'd like to call mypy from Make from guix or why not cut out
the middleman altogether? In the end I just want to see the same unifying
guix ui experience transfered to dev tools across the polyglot stack.

This infrastructure should be flexible enough to allow us to
easily go unix plumbing if need be.

Let's wrap the world in parens!

paren hugs,

jgart 





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

* Re: Guix Goals: One Hackable Developer Tool To Rule Them All
  2022-10-13  6:07 Guix Goals: One Hackable Developer Tool To Rule Them All jgart
  2022-10-13 13:03 ` zimoun
  2022-10-13 13:56 ` pinoaffe
@ 2022-10-16 13:11 ` Liliana Marie Prikler
  2022-10-16 17:54   ` jgart
  2 siblings, 1 reply; 13+ messages in thread
From: Liliana Marie Prikler @ 2022-10-16 13:11 UTC (permalink / raw)
  To: jgart, Guix Devel

Am Donnerstag, dem 13.10.2022 um 01:07 -0500 schrieb jgart:
> Hi Guixers,
> 
> What do you think if we were to implement "Guix Goals"?
> 
> The various language ecosystems have their own linters, formatters,
> typecheckers, repls, test runners, etc.
> 
> What if Guix could manage them all?
> 
> `guix lint` in a python project would run mypy.
> `guix lint` in a haskell project would run hlint.
> `guix lint` in an erlang project would run dialyzer.
> 
> `guix fmt` in a python project would run black.
> `guix fmt` in a haskell project would run ormolu.
> `guix fmt` in a erlang project would run erlfmt.
> 
> `guix repl` in a python project would run ptpython or some other
> configured repl.
> `guix repl` in a haskell project would run ghci.
> `guix repl` in a erlang project would run erl.
> 
> `guix test` in a python project would run pytest or unittest.
> `guix test` in a haskell project would run hunit.
> `guix test` in a erlang project would run eunit.
> 
> `guix run` in a python project could start a flask app listening on a
> particular port.
> `guix run` in a ruby project could start a puma server.
> `guix run` in a haskell project could run a pre-configured script or
> Main.hs
> `guix run` in a erlang project could start a cowboy server.
> 
> The idea would be to have Guix provide a configurable CLI wrapper
> subcommand around all language ecosystem developer tools. In other
> words it's the same Guixy thesis applied to developer tooling. I
> think this could take the Guix developer experience to the next
> level.
Completely unnecessary.  You can already do this with guix shell or gwl
if you prefer.

To elaborate, note that only the last variable in a file or manifest
needs to evaluate to a list of packages or manifest.  That is, you can
write a self-reading manifest/script wrapper relatively easy.

  #!/bin/sh
  exec guix shell -m "$0" -- guile -e main -s "$0" "$@" 
  !#

  (define (main args) ...)

  ...

  (specifications->manifest ...)

Of course, it'd be hell of a lot cleaner to separate manifest and
business logic, but who am I to stop you?

Cheers


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

* Re: Guix Goals: One Hackable Developer Tool To Rule Them All
  2022-10-16 13:11 ` Liliana Marie Prikler
@ 2022-10-16 17:54   ` jgart
  2022-10-16 18:41     ` jgart
  2022-10-16 18:50     ` Liliana Marie Prikler
  0 siblings, 2 replies; 13+ messages in thread
From: jgart @ 2022-10-16 17:54 UTC (permalink / raw)
  To: Liliana Marie Prikler; +Cc: Guix Devel

On Sun, 16 Oct 2022 15:11:38 +0200 Liliana Marie Prikler <liliana.prikler@gmail.com> wrote:
> Am Donnerstag, dem 13.10.2022 um 01:07 -0500 schrieb jgart:
>   #!/bin/sh
>   exec guix shell -m "$0" -- guile -e main -s "$0" "$@" 
>   !#
> 
>   (define (main args) ...)
> 
>   ...
> 
>   (specifications->manifest ...)
> 
> Of course, it'd be hell of a lot cleaner to separate manifest and
> business logic, but who am I to stop you?

Hi lilyp,

Yup, the latter is what I'm proposing instead of implementing a goal
for each lang à"ala carte" as a script for each project.

That would be like implementing part of a build-system everytime
when needed like we currently do when we needing to run pytest
instead their being first class support like was being worked on in:
https://github.com/guix-mirror/guix/tree/wip-python-pep517.

I'd like for "goals" to have first class support like guix home configs,
etc. do. But thanks for reminding us that we can just implement it
directly as needed in a script for each project. That's a testament to
the extensibility of Guix!

> Of course, it'd be hell of a lot cleaner to separate manifest and
business logic, but who am I to stop you?

I just need to find the time to implement the framework/system and
propose it again with a patch series ;() Not sure when that will be yet...

all best,

jgart


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

* Re: Guix Goals: One Hackable Developer Tool To Rule Them All
  2022-10-16 17:54   ` jgart
@ 2022-10-16 18:41     ` jgart
  2022-10-16 18:50     ` Liliana Marie Prikler
  1 sibling, 0 replies; 13+ messages in thread
From: jgart @ 2022-10-16 18:41 UTC (permalink / raw)
  To: Liliana Marie Prikler; +Cc: Guix Devel

On Sun, 16 Oct 2022 12:54:42 -0500 jgart <jgart@dismail.de> wrote:

That said thanks for suggesting a way to start hacking on this before it exists.
I'll use your suggestion for testing things out.

all best,

jgart


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

* Re: Guix Goals: One Hackable Developer Tool To Rule Them All
  2022-10-16 17:54   ` jgart
  2022-10-16 18:41     ` jgart
@ 2022-10-16 18:50     ` Liliana Marie Prikler
  2022-10-16 20:03       ` jgart
  1 sibling, 1 reply; 13+ messages in thread
From: Liliana Marie Prikler @ 2022-10-16 18:50 UTC (permalink / raw)
  To: jgart; +Cc: Guix Devel

Am Sonntag, dem 16.10.2022 um 12:54 -0500 schrieb jgart:
> On Sun, 16 Oct 2022 15:11:38 +0200 Liliana Marie Prikler
> <liliana.prikler@gmail.com> wrote:
> > Am Donnerstag, dem 13.10.2022 um 01:07 -0500 schrieb jgart:
> >   #!/bin/sh
> >   exec guix shell -m "$0" -- guile -e main -s "$0" "$@" 
> >   !#
> > 
> >   (define (main args) ...)
> > 
> >   ...
> > 
> >   (specifications->manifest ...)
> > 
> > Of course, it'd be hell of a lot cleaner to separate manifest and
> > business logic, but who am I to stop you?
> 
> Hi lilyp,
> 
> Yup, the latter is what I'm proposing instead of implementing a goal
> for each lang à"ala carte" as a script for each project.
This à la carte approach will definitely break down in polyglot
applications – hence needing a more generic solution for the generic
case – and even when there's just one language, the fact that multiple
compilers, linters, etc. exist and people are very opinionated on which
ones to use with which options makes your goal a somewhat stupid one if
you don't actually specify what it has to do on a per-project basis.

> That would be like implementing part of a build-system everytime
> when needed like we currently do when we needing to run pytest
> instead their being first class support like was being worked on in:
> https://github.com/guix-mirror/guix/tree/wip-python-pep517.
> 
> I'd like for "goals" to have first class support like guix home
> configs, etc. do. But thanks for reminding us that we can just
> implement it directly as needed in a script for each project. That's
> a testament to the extensibility of Guix!
I don't think it'd be that.  Note that you have the full power of
Guix/Guile at your disposal, so you can encapsulate much of it in
channels.  Is it a good idea to do so?  Hell, no.  Refusing to use the
tools your colleagues are using to instead hack on your own is not a
recipe for success.  There are good reasons why generic build systems
like make and ninja are more widely adopted than their language-focused
counterparts.  You're not doing anyone a favour here by forcing them to
adopt a solution that has parentheses.

Instead of aiming for world domination, you should try writing a tool
that helps folks collaborate.  Adding a guix.scm alone already does
wonders in this regard, but if you really want to go beyond, you could
define a set of workflows with gwl or fall back to ye good olde make
and ninja.  And if you don't like either, there's potato-make [1].

Cheers

[1] https://github.com/spk121/potato-make


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

* Re: Guix Goals: One Hackable Developer Tool To Rule Them All
  2022-10-16 18:50     ` Liliana Marie Prikler
@ 2022-10-16 20:03       ` jgart
  2022-10-16 23:22         ` Felix Lechner via Development of GNU Guix and the GNU System distribution.
  2022-10-17 19:08         ` Liliana Marie Prikler
  0 siblings, 2 replies; 13+ messages in thread
From: jgart @ 2022-10-16 20:03 UTC (permalink / raw)
  To: Liliana Marie Prikler; +Cc: Guix Devel

On Sun, 16 Oct 2022 20:50:47 +0200 Liliana Marie Prikler <liliana.prikler@gmail.com> wrote:

> makes your goal a somewhat stupid one if you don't actually specify
> what it has to do on a per-project basis.

hi lilyp,

That's a bit harsh to say that my idea is "stupid" even in light of
your qualifier.

If you read the previous thread you can see some of my proposals on a
per language basis.

There's absolutely no requirement for me to work out the whole solution
just yet on this email thread or to offer per project details. I'm not at
the stage of proposing per-project ideas. I'm just casually brainstorming
with those colleagues who want to. If that's too stressful to do then
anyone is free to opt out of the conversation. There's no need to call it
"stupid". Instead, ask me to expound on it in a friendly way instead if
something is not clear or not yet stated.

> I don't think it'd be that.  Note that you have the full power of
> Guix/Guile at your disposal, so you can encapsulate much of it in
> channels.  Is it a good idea to do so?  Hell, no.    

If Guix channels don't give users enough freedom/hackability/extensibility
to do what they want then maybe that's something that should be looked
into. I would consider it a bug, and a limitation of the system. There
should be enough trust in our community to allow users to hack channels
the way they want and to contribute back to GNU Guix proper if they
so choose.  Restrictions shouldn't be built into the system to prevent
users from doing x, y, z with regards to extending it.  There should
only be trust regarding extensibility. That's what made Guix stand out
to me from the start. If that is not the case going forward then I will
lose hope in Guix and would rather invest my time chasing that dream
elsewhere. The extensibility thesis that Guix subscribes to (atleast
to my understanding) involves trust in its users instead of giving them
a limiting DSL and telling them what they are and are not allowed to do
with it.

I came to GNU Guix because of this freedom of extensibility and these
ideals that I perceived in channels and in the system as a whole.
Contributing back to upstream not a limiting feature that is "designed in"
to Guix in order to enforce it. I don't want to be limited that way. This
trust has to exist if it wants to cooperate with the Schemer spirit.

> Refusing to use the tools your colleagues are using to instead hack on your own is not a
> recipe for success.

I'm currently using my colleagues tools extensively. Not sure what you
mean here...



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

* Re: Guix Goals: One Hackable Developer Tool To Rule Them All
  2022-10-16 20:03       ` jgart
@ 2022-10-16 23:22         ` Felix Lechner via Development of GNU Guix and the GNU System distribution.
  2022-10-17 19:08         ` Liliana Marie Prikler
  1 sibling, 0 replies; 13+ messages in thread
From: Felix Lechner via Development of GNU Guix and the GNU System distribution. @ 2022-10-16 23:22 UTC (permalink / raw)
  To: jgart; +Cc: Liliana Marie Prikler, Guix Devel

Hi,

On Sun, Oct 16, 2022 at 1:10 PM jgart <jgart@dismail.de> wrote:
>
> That's a bit harsh.

I also found it a bit stiff, but sometimes folks don't find the right
words—hence my own recent apology.

Kind regards
Felix Lechner


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

* Re: Guix Goals: One Hackable Developer Tool To Rule Them All
  2022-10-16 20:03       ` jgart
  2022-10-16 23:22         ` Felix Lechner via Development of GNU Guix and the GNU System distribution.
@ 2022-10-17 19:08         ` Liliana Marie Prikler
  1 sibling, 0 replies; 13+ messages in thread
From: Liliana Marie Prikler @ 2022-10-17 19:08 UTC (permalink / raw)
  To: jgart; +Cc: Guix Devel

Am Sonntag, dem 16.10.2022 um 15:03 -0500 schrieb jgart:
> On Sun, 16 Oct 2022 20:50:47 +0200 Liliana Marie Prikler
> <liliana.prikler@gmail.com> wrote:
> 
> > makes your goal a somewhat stupid one if you don't actually specify
> > what it has to do on a per-project basis.
> 
> hi lilyp,
> 
> That's a bit harsh to say that my idea is "stupid" even in light of
> your qualifier.
> 
> If you read the previous thread you can see some of my proposals on a
> per language basis.
For context, the "goal" here refers to the individual goal, e.g.
"format", as specified in the initial post.  If it only ever covers the
most common case per programming language, that is a very stupid tool
indeed.

> There's absolutely no requirement for me to work out the whole
> solution just yet on this email thread or to offer per project
> details. I'm not at the stage of proposing per-project ideas. I'm
> just casually brainstorming with those colleagues who want to. If
> that's too stressful to do then anyone is free to opt out of the
> conversation. There's no need to call it "stupid". Instead, ask me to
> expound on it in a friendly way instead if something is not clear or
> not yet stated.
I am insisting on this notion of per-projectness, because it is key to
you understanding that you are indeed trying to construct a build
system.¹  Perhaps a very crude one, but a build system still.  Your
logical foundation are the following statements:

1. Every project written in L uses T for a specific task.
2. P is written in L.
3. Therefore P uses T for that task.

By constructing a per-task mapping of L ~> T, you can offer a unified
solution.

The truth, however, is more complicated.

1. Every sufficiently mature programming language L has at least one
task such that at least two tools T, T', T != T' are used in different
projects to achieve it.
2. There exist projects that are not limited to a single programming
language.

You can of course try to be smarter than that and try to figure out
which tools to invoke based on the existence and contents of certain
magic files, but note that at this point you're doing significantly
more work than in the declarative approach you rejected.

> > I don't think it'd be that.  Note that you have the full power of
> > Guix/Guile at your disposal, so you can encapsulate much of it in
> > channels.  Is it a good idea to do so?  Hell, no.    
> 
> If Guix channels don't give users enough
> freedom/hackability/extensibility
> to do what they want then maybe that's something that should be
> looked into. I would consider it a bug, and a limitation of the
> system. There should be enough trust in our community to allow users
> to hack channels the way they want and to contribute back to GNU Guix
> proper if they so choose.  Restrictions shouldn't be built into the
> system to prevent users from doing x, y, z with regards to extending
> it.  There should only be trust regarding extensibility. That's what
> made Guix stand out to me from the start. If that is not the case
> going forward then I will lose hope in Guix and would rather invest
> my time chasing that dream elsewhere. The extensibility thesis that
> Guix subscribes to (atleast to my understanding) involves trust in
> its users instead of giving them a limiting DSL and telling them what
> they are and are not allowed to do with it.
> 
> I came to GNU Guix because of this freedom of extensibility and these
> ideals that I perceived in channels and in the system as a whole.
> Contributing back to upstream not a limiting feature that is
> "designed in" to Guix in order to enforce it. I don't want to be
> limited that way. This trust has to exist if it wants to cooperate
> with the Schemer spirit.
I believe you're attacking a straw man here.  I'm not telling you that
you can't run with scissors, only that it'd be unwise if you did.

> > Refusing to use the tools your colleagues are using to instead hack
> > on your own is not a recipe for success.
> 
> I'm currently using my colleagues tools extensively. Not sure what
> you mean here...
This is calling back to the main motivation outlined in the initial
post; rather than invoking the linters, formatters, etc., you simply
wrap them in Guix.  It is almost always preferable to provide a
solution that works even for those who don't use Guix – for example a
"make indent" rule, etc.

Cheers

¹ Also note that pants, which seems to be a source of your inspiration,
describes itself as a build system.  Compare the already mentioned GWL
for a build system already based on Guix, albeit focused on scientific
workflows, and potato-make for a simplistic Guile-based build system.


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

end of thread, other threads:[~2022-10-17 19:09 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-13  6:07 Guix Goals: One Hackable Developer Tool To Rule Them All jgart
2022-10-13 13:03 ` zimoun
2022-10-13 13:56 ` pinoaffe
2022-10-13 14:34   ` indieterminacy
2022-10-13 14:55     ` pinoaffe
2022-10-14  2:24       ` jgart
2022-10-16 13:11 ` Liliana Marie Prikler
2022-10-16 17:54   ` jgart
2022-10-16 18:41     ` jgart
2022-10-16 18:50     ` Liliana Marie Prikler
2022-10-16 20:03       ` jgart
2022-10-16 23:22         ` Felix Lechner via Development of GNU Guix and the GNU System distribution.
2022-10-17 19:08         ` Liliana Marie Prikler

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

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).