7 ms·
Am I the only one who thought Guix did this better? Maybe it's just my freakish and unnatural love of parenthesis. Or my hatred of learning new configuration sy
by qwertyuiop924 10y ago
Am I the only one who thought Guix did this better? Maybe it's just my freakish and unnatural love of parenthesis. Or my hatred of learning new configuration syntaxes (I just want to install packges, dammit! Yes, I enjoy learning new languages, but I need to get this machine up and running, and I don't want to learn your new programming language to do that)
- sorpaas 10y agoWhat I really worry about is my nonfree wireless driver and Nvidia driver, which doesn't seem to be available on Guix.
- Slackwise 10y agoWell, you can specify extra packages using $GUIX_PACKAGE_PATH, and I've seen a few custom repos, such as this: https://github.com/genenetwork/guix-bioinformatics https://github.com/genenetwork/guix-bioinformatics and https://github.com/Ecogenomics/ace-guix https://github.com/Ecogenomics/ace-guix I'm not sure how easy it is to maintain a system with extra packages like this, but it'd be nice to be able to use an "overlay" repo as you can in Gentoo for personal/custom packages. Would love to ping davexunit to see if he can elaborate, because I don't see any specific way to add repositories from the documentation.
- davexunit 10y agoThere's no such thing as a repository in Guix. Using GUIX_PACKAGE_PATH is the closest thing, conceptually.
- Slackwise 10y agoAhh, well, then it appears I have to manage a directory of packages myself, as well as any dependencies outside of the Guix store, right? Would be nice to just have a secondary source, as I do with MELPA for Emacs, or overlays for Gentoo. Is something similar/comparable planned to be added? Orrr should someone step forward and volunteer to add it as a feature...?
- willtim 10y agoIMHO, Nix needs a static type checker far more than it needs parenthesis or syntactic abstraction. The syntax of Nix is a non-issue.
- dbcurtis 10y agoAfter a quick look at Nix syntax, it seems to me that it is almost JSON but different enough to required all new parsers. Maybe I'm wrong about that. But... why not just use JSON?
- davexunit 10y agoJSON isn't a programming language.
- dbcurtis 10y agoTrue enough. Maybe I've not seen enough of what is in a Nix packaging script.
- Ericson2314 10y agoNix is isomorphic to JSON + lambda + let-rec, made lazy.
- vertex-four 10y agoNix is actually a purely function programming language - you can embed function calls in it. This is used to great effect in various parts of nixpkgs - the entire thing is actually a program which returns the Nix package tree (but is not fully evaluated unless you explicitly ask for it).
- dbcurtis 10y agoOK, I replace my naive question above with a different naive question: "Why not just use Haskell?"
- rdtsc 10y agoI understand that Guix is newer and has less packages so far (but number is growing). I don't know, I rather like Nix's language, maybe I am just not a Lisp person.
- Ericson2314 10y agoI greatly respect scheme, and yet I like the nix expression language too. Scheme's claim is you shouldn't be using x more bloated language than it, but the nix expression language is smaller and simpler than Scheme; it beats it at its own game! More practically, I can't think of anything that I wanted that Scheme offers but the nix expression language doesn't.
- qwertyuiop924 10y ago>the nix expression language is smaller and simpler than Scheme; it beats it at its own game! It may have a smaller stdlib than scheme (but I doubt it). But it's very hard to be simpler than scheme semantically. As for what I want from scheme that nix doesn't provide, a simple, regular, syntax that I already know is what I want. I understand that that doesn't apply to everybody.
- Ericson2314 10y ago> It may have a smaller stdlib than scheme (but I doubt it). But it's very hard to be simpler than scheme semantically. Yes, I mean the semantics of the language. Scheme is indisputably more complex. There isn't really much a standard library for the Nix Expression Language either. > As for what I want from scheme that nix doesn't provide, a simple, regular, syntax that I already know is what I want. I understand that that doesn't apply to everybody. off the top of my head: Scheme-Simplified ::= <Item>* Items ::= (define (<Id>*) <Expr>) | (define <Id> <Expr>) Expr ::= (<Expr> <Expr>*) | (set! <Id> <Expr>) | (lambda (<Id>*) <Expr>) Nix-Expr ::= <Pattern> : <Nix-Expr> | with <Nix-Expr>; <Nix-Expr> | { <Nix-Item>* } | let <Nix-Item>* in <Expr> | <Expr> <ArithOp> <Expr> | <Expr>.<Id> | <Expr>.<String-Lit> | <Expr> ? <Id> | <Expr> ? <Id> or <Nix-Expr> Nix-Item ::= <Id> = <Nix-Expr>; | <StringLit> = <Nix-Expr>; | inherit <Expr>; | inherit (<Nix-Expr>) <Nix-Expr>;
- ambrop7 10y ago- I think the issue is partly made moot by that not many people know Guile/Scheme in the first place, so they'd need to learn one language anyway. - Guix refuses to integrate proprietary software so its usability is diminished compared to Nix (and Guix has less software packaged than Nix in the first place, AFAIK). - Nix is a pretty good language for the task.
- davexunit 10y ago>I think the issue is partly made moot by that not many people know Guile/Scheme in the first place, so they'd need to learn one language anyway. But this language is not a DSL, but a general purpose language that has pattern matchers, HTTP libraries, XML parsers, data structure implementations, etc. >Guix refuses to integrate proprietary software so its usability is diminished compared to Nix (and Guix has less software packaged than Nix in the first place, AFAIK). Guix is younger, thus has less software packaged, but the number of new packages introduced with each Guix release continues to increase. I have all the packages most important to me and have been using GuixSD exclusively for at least a year now. >Nix is a pretty good language for the task. The problem with any DSL is that is not very extensible and developers must spend time maintaining parsers, compilers, etc. for a one-off language. Guix is achieving its velocity in good part thanks to using an existing general purpose language that new languages can be embedded within.
- muraiki 10y ago> But this language is not a DSL, but a general purpose language that has pattern matchers, HTTP libraries, XML parsers, data structure implementations, etc. I'm not expressing this as a criticism that I have, but for some people what you described is not a feature but a bug. :)
- corysama 10y agoLike everything else with Gnu, the main difference seems to be philosophical. Guix is fundamentally opposed to pre-compiled binaries. Nix has no issue with them.
- davexunit 10y ago>Guix is fundamentally opposed to pre-compiled binaries. Nix has no issue with them. Using pre-compiled binaries means that builds aren't reproducible, a goal of both Nix and Guix.
- tener 10y agoHow so? You can see the build as a pure function. It consumes a binary blob but it doesn't make it any less deterministic?
- davexunit 10y agoThe build is a source to binary function. How does one reproduce the binary blob? How does one know that binary hasn't been tampered with?
- qwertyuiop924 10y agoChecksums!
- davexunit 10y agoYou're missing the point.
- qwertyuiop924 10y agoWell, yes, but I read some newer comments, and I get what you mean. I don't necesarily agree with your decision, but I understand it. M-x passive-agressive-mode And now, I'll go upgrade my NVIDIA drivers, and load up Psychonauts on Steam.
- pavlov 10y agoWhen I hear the words "elegant DSL", I reach for my pistol. (Don't worry, it's just a tiny toy gun.)
- qwertyuiop924 10y agoWell then, you must hate Guix and Nix equally.
- pavlov 10y agoJoking, mostly... Although I do think that programmers often tend to try to solve problems with the kind of tools that they like to make, rather than ones that would be appropriate for the user -- and that's why the *nix open source world has so many incompatible programming languages and configuration formats, and so few good GUIs.
- qwertyuiop924 10y agoWell, the programming languages are nicer than the guis. It's the incompatable part I can't stand. Use TOML, JSON, or YAML. If you need something general purpose, use Scheme. It works well embedded.