Guix for development (dthompson.us)
from paequ2@lemmy.today to programming@programming.dev on 25 Jul 23:56
https://lemmy.today/post/34281466

cross-posted from: lemmy.today/post/34279957

guix shell sees to it that all of the dependencies (listed in the inputs and native-inputs sections) are available within the shell session it creates by downloading (or building, if necessary) the entire dependency tree.

Should you want/need more isolation from the host system, guix shell has you covered. The --pure flag will clear out most existing environments variables, such as $PATH, so that the resulting environment does not contain pointers to places like /usr. For more Docker-like isolation, the --container flag can be used, which will run the new shell session within a set of Linux namespaces so that the host system is inaccessible.

#programming

threaded - newest

cecilkorik@lemmy.ca on 26 Jul 05:04 next collapse

Guh, someday I am going to have to learn that bracket-based syntax (lisp?) that keeps popping up on particularly interesting projects but I can never be bothered to learn.

chonkyninja@lemmy.world on 26 Jul 06:53 next collapse

It’s actually really easy.

HaraldvonBlauzahn@feddit.org on 31 Jul 05:44 collapse

Plus, any good editor will arrange the indentation to make nesting clear. For experienced Lisp / Scheme programmers, the parens nearly disappear, like commas or semicolons for c++ programmers.

Ephera@lemmy.ml on 26 Jul 08:09 next collapse

Yeah, the style of syntax originated in LISP. The technical name is S-expressions.

But yes, the basic syntax rules are extremely simple. It’s rather when you actually want to do something with that syntax that it takes some thinking…

frankenswine@lemmy.world on 26 Jul 14:11 next collapse

it’s as simple as

(command argument0 argument1 argument2)

meaning arguments 0, 1 and 2 are applied to command. when an expression is evaluated it dissolves into a value according to its context.

(+ 1 2 3)
; evaluates to 6 in a context where + actually means an addition or sum operation

(* 2 (+ 4 3))
; evaluates to 14 (i think)

the absolute killer feature is the elimination of idiotic, man-made madness excused with the term “operator precedence”

hono4kami@piefed.social on 26 Jul 16:57 next collapse

Somehow it's not the bracket syntax that stopped me.

It's the amount of dialects LISP has. Way too many of it. I don't know where to start

HaraldvonBlauzahn@feddit.org on 31 Jul 05:21 collapse

As a first approximation, there is not much to learn. The lisp syntax thing is a scarecrow for the uninformed

In Python, you write:

a = atan2(x, y)
b = sin(x)
c = b if x > a else 1
# use values of a, b and c here

Where the indentation is a block.

In Scheme, you write:

(let ((a (atan2 x y))
      (b (sin x))
      (c (if (> x a) b 1)))
       ; use values of a, b, and c here
)

Where the outer paren around “let” determines the scope of the binding, and the scope serves as an expression with a value (like in Rust), and scopes can be nested arbitrarily deep.

JamonBear@sh.itjust.works on 26 Jul 07:41 next collapse

Archive of the wonderful article mentioned in the intro.

IanTwenty@lemmy.world on 26 Jul 08:42 next collapse

This is similar using nix: devenv.sh

It has a few more features like git hooks and spinning up long-running processes like web servers

paequ2@lemmy.today on 27 Jul 04:52 collapse

Other great resource is guix shell: Overview by Andrew.

Although, one thing I’m still trying to understand is the difference between guix.scm and manifest.scm… The posted article only mentions guix.scm, but Andrew talks about both. But… he doesn’t really go into why there are two files and when you would use one or the other…