Live data from Hacker News

My First Impressions of Nix

mtlynch.io

321–330 of 354 posts

Re: My First Impressions of Nix

#321

Earlier quoted context omitted.

> You do not need FP to use pure functions. They are independent from FP. You can be OOP maniac and still use them. This is not true. OOP is fundamentally built around impure operations. Objects are persistent references that you send messages to or that you call methods on (depending on your OOP language of choice). A persistent reference that is stable across different invocations (as opposed to a new reference bei…

> You do not need FP to use pure functions I think this is a bit more subtle, and a bit less interesting to say, than you're thinking it is and responding to. You need to be impure in OOP world but not in every function you write. I write many pure functions in my OOP work; they make the whole thing easier to reason about.

Sure, but it's precisely those places where you're using pure functions that aren't object-oriented. That is it is possible in some nominally OO languages to write code that is not object-oriented and that's where pure functions come in. In a language that has only classic OO-style objects pure functions (and their counterpart in data space, immutable data structures) are generally not used or are not very idiomatic, e.g. as in Smalltalk (you will have things that are kind of pure, but the purity can almost always be broken in some way).

Re: My First Impressions of Nix

#322
post #19

If you want to install a package, search for it at https://search.nixos.org The gnome system monitor is gnome.gnome-system-monitor for example https://search.nixos.org/packages?channel=23.05&show=gnome.g...

Oh, thanks! That's super clear and fills a huge gap in my understanding how to use Nix.

It sure beats my previous method of finding packages, which was just blind guessing.

I've updated the post to include the correct package name and how to find it.

Re: My First Impressions of Nix

#323

Seeing a tweet like the one from Mitchell makes me want to try Nix. Or at least I want to want to try Nix. Then I read the comments here and am reminded that no one can even succinctly explain what Nix is. I've read dozens of comments here and I still don't have a clear idea!

Your mind must be pure to understand Nix. Work on your purity. Just kidding. You might explain why you want to try nix? That would help customize an explanation for you, because there are levels. Umm... here is my attempt. Sorry. Nix is a programming language plus utilities that are useful to define and work with software packages in a reproducible way ( https://github.com/nixos/nix/ ). Each package is called a "deri…

I need to review this again, but really helpful. Thank you! Any resources you'd recommend for learning nix?

Re: My First Impressions of Nix

#324

Earlier quoted context omitted.

Your mind must be pure to understand Nix. Work on your purity. Just kidding. You might explain why you want to try nix? That would help customize an explanation for you, because there are levels. Umm... here is my attempt. Sorry. Nix is a programming language plus utilities that are useful to define and work with software packages in a reproducible way ( https://github.com/nixos/nix/ ). Each package is called a "deri…

I need to review this again, but really helpful. Thank you! Any resources you'd recommend for learning nix?

I've heard good things about https://zero-to-nix.com/

Re: My First Impressions of Nix

#325

The problem Nix wants to solve is a valid one. But there are better alternatives imo, such as the newer distros based on rpm-ostree. You can do atomic upgrades, and easily rollback to a previous known good state if needed. No changes are allowed to a live system. And best of all, it's practically the same in terms of management, there's hardly any learning curve.

I think nix falls under "second best at everything" in this regard.

If there's a single thing Nix solves, it's being able to declare packages with a pure/functional language.

This ends up enabling all sorts of useful things which relate to packages. e.g. being able to install multiple versions of some package without these overwriting each other. e.g. build container images, declare development environments, run software without installing it, etc.

I think you can get 80% of what Nix does in many use cases without paying a lot of the effort. -- e.g. `asdf` is a tool which allows for installing project-local dependencies of programs.

Re: My First Impressions of Nix

#326

Does anyone have any ideas on what the most likely outcome would be for NixOS losing the S3 bucket funding?

Binary cache for old builds will be lost, they move to some other storage solution, but they can't transfer the binary caches due to AWS's egress costs.

Re: My First Impressions of Nix

#327
post #74

Earlier quoted context omitted.

> Is it a package manager? A build system? Nixpkg is a package manager, which uses the Nix programming language to describe dependencies and build steps. Like all package managers, it has components that could be called a "build system", but that's not its main focus. > An operating system? There's NixOS which is a Linux distro built on nixpkg. But you can also use Nix under other distros. > A container platform? A s…

> Nixpkg is a package manager *Nix

Technically nixpkgs as just nix would be pretty useless. Nixpkgs is much more than just package derivations, it contains a whole standard library for the language.

Re: My First Impressions of Nix

#328

Earlier quoted context omitted.

Your mind must be pure to understand Nix. Work on your purity. Just kidding. You might explain why you want to try nix? That would help customize an explanation for you, because there are levels. Umm... here is my attempt. Sorry. Nix is a programming language plus utilities that are useful to define and work with software packages in a reproducible way ( https://github.com/nixos/nix/ ). Each package is called a "deri…

I need to review this again, but really helpful. Thank you! Any resources you'd recommend for learning nix?

I don't have a good guide. I had to just start getting my hands dirty and piece it together.

My strategies:

- keep the documentation open

- install nixos in a vm

- search github for "configuration.nix" to find fully worked examples for nixos. I just cloned anything that looked useful[1] and would grep through it

- read the source code for nixpkgs

- search google and search https://discourse.nixos.org/ when you have an idea of what you want to do to find other people discussing it

It took me a couple days to have a very basic system running and a month to port most of my setup into nix (running some containers, overriding system packages, defining my own packages, running unmodified binaries using nix-ld).

I still use non-nix containers for a few services that I don't want to port over (but if I had known nix when I started I definitely would've used it).

Every step of the way was a huge struggle but the tools I have learned stay useful so I hope it is worthwhile investment. Still sometimes the extra nix friction is really frustrating but I can't help but think Nix or something like it is inevitably the future of software.

[1]: here is my random current list with some good and some bad... https://cgit.euer.krebsco.de/stockholm/ https://github.com/9ary/dotfiles.git https://github.com/baitinq/nixos-config https://github.com/barrucadu/nixfiles.git https://github.com/catern/dotfiles.git https://github.com/contrun/infra.git https://github.com/disassembler/network.git https://github.com/juliosueiras/rasp-nix/ https://github.com/KFearsoff/NixOS-config.git https://github.com/lopsided98/nixos-config https://github.com/Mic92/dotfiles.git https://github.com/moul/nixpkgs.git https://github.com/musnix/musnix https://github.com/myme/dotfiles https://github.com/nix-community/emacs-overlay https://github.com/nix-community/home-manager.git https://github.com/NixOS/nixos-org-configurations.git https://github.com/reckenrode/nixos-configs https://github.com/skogsbrus/os https://github.com/Xe/nixos-configs.git https://github.com/Xe/site.git https://git.immae.eu/perso/Immae/Config/Nix.git https://gitlab.com/pgronkievitz/nixos-configurations.git https://gitlab.com/rprospero/dotfiles.git

Re: My First Impressions of Nix

#329
post #249

Earlier quoted context omitted.

Explaining what Nix is seems like one of its biggest barriers to adoption. Part of the difficulty is it means different things to different people. My colleague spent a whole lot of time trying to answer this question and ended up with this: My main take away after spending some time learning about Nix is that it embraces the functional programming concept of a pure function. If I give a function a certain set of inp…

It doesn’t help that the term is hugely overloaded. Nix might mean the package manager, the shell, the operating system. There are so many valid permutations of letters; why they chose to reuse Nix for everything is a mystery to me. The other issue is complexity. If you can manage to figure out the jargon, you’re greeted with the requirement that you completely port an entire project to get any benefit, and that’s no…

you so not need tonport whole project. you can have shell, remote dev envs, remote build machines all use nix as shell providing build and run env.

Re: My First Impressions of Nix

#330
post #249

Earlier quoted context omitted.

Explaining what Nix is seems like one of its biggest barriers to adoption. Part of the difficulty is it means different things to different people. My colleague spent a whole lot of time trying to answer this question and ended up with this: My main take away after spending some time learning about Nix is that it embraces the functional programming concept of a pure function. If I give a function a certain set of inp…

It doesn’t help that the term is hugely overloaded. Nix might mean the package manager, the shell, the operating system. There are so many valid permutations of letters; why they chose to reuse Nix for everything is a mystery to me. The other issue is complexity. If you can manage to figure out the jargon, you’re greeted with the requirement that you completely port an entire project to get any benefit, and that’s no…

nix provides one liner. what one liner in python nix cannot do?
Post reply on HN