36 ms·
NixOS and Flakes Book: An unofficial book for beginners (free)
- master-lincoln 3y agoWhy write a book on an experimental feature (Flakes)? Is the API unlikely to change?
- iopq 3y agoYes, it's basically a ready feature that's not currently the default
- infinisil 3y agoFlakes has an unfortunate past [1]. The fact that so many people are using Flakes now and treating them as stable makes it effectively impossible to make drastic changes, even though the design is flawed in many ways [2]. Nevertheless, the Nix team is discussing the stabilisation in recent weeks, with the tendency to not make breaking changes, but improving the design in the long term. [1]: https://nix.dev/concepts/faq#why-are-flakes-controversial https://nix.dev/concepts/faq#why-are-flakes-controversial [2]: https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/2 https://discourse.nixos.org/t/experimental-does-not-mean-uns...
- Cu3PO42 3y agoFor some more context: Flawed as they are, Flakes solve a large number of problems Nix experiences without them. This is why I, and presumably many others, use them even in their current experimental state. An RFC was recently accepted to commit to forming a plan towards stabilization of Flakes: https://github.com/NixOS/rfcs/pull/136 https://github.com/NixOS/rfcs/pull/136 Personally, I don't believe there won't be any breaking changes, but I also believe that the stabilization of Flakes is still a ways away and hope that there will be a reasonable migration path.
- Aerbil313 3y agoI sometimes just hope a new Nix but rewritten from scratch according to 2020s best practices instead of 2000s comes before too long. With a transpiler to convert Nix to whatever it uses. Nickel?
- infogulch 3y agoMaybe I'm dreaming, but a nix-alike built on CUE would be fire.
- Filligree 3y agoI spent half of last week trying to make productive use of Nickel, and it's just... not a very fun experience. Maybe it'll be better someday? We can hope. It's certainly incomplete right now, and the documentation is mostly nonexistent, but I don't think my use-case (incrementally replacing Nix) is supported at all.
- beepbooptheory 3y agoAll I really want is the Guix api ontop of nixpkgs packages.
- toastal 3y agoAnd here I want GNU Guix but with an ML language instead of LISP :)
- pmarreck 3y agoAt some point, my developer intuition says we'll get something with the core good ideas of Nix, but simplified. The problem is that implementation of these ideas is fairly hideously complex for the intelligences of most current humans, and that simplifying that complexity requires even MORE intelligence (or more years of more people staring at the problem until the simpler picture becomes clearer).
- callahad 3y agoThat's half the argument for Guix, and the same train of thought that led me to Mercurial back in the 2000's. For better or worse, Nix has owned the zeitgeist for several years now, and I'd be surprised to see it dethroned before the next paradigm shift.
- realo 3y agoWhat I heard Eelco say in a recent conference is that 'nix build' will work with 'old flakes' but as soon as you do a 'nix flake update ' you might have to adapt your flake to the new conventions.
- pmarreck 3y ago> flake.nix is not written in Nix Well, how did I not even realize that until now? Wow. An out-loud "holy shit" was hearable over here as I learned THAT one.
- jhvkjhk 3y agoI don't think a beginner should use Home Manager, because that's an extra layer on the already not-beginner-friendly Nix ecosystem.
- baryphonic 3y agoI'm a beginner, and I set up my system with Home Manager and on MacOS Nix Darwin. It works extremely well, and both Home Manager & Nix Darwin are quite well-documented. The hardest part was figuring out the different arguments to various Nix functions (sometimes I wished Nix had types).
- OJFord 3y agoOh! The lack of (what I now know is) Home Manager is what made me drop Nix not long after trying it out briefly a while ago (well, several years now, maybe 2015-16). I really liked the sound of having all my config declarative and managed through Nix, but it's almost all in home - not everything even has system-wide config, and anyway it's easier to version control. So that's just to say I think it at least warrants a mention, it's helpful for a beginner to be aware of, even if they don't use it (once informed they can decide for themselves if they need that piece or not).
- cormacrelf 3y agoSome people may enjoy going through an enormous learning curve to do configuration like that, but the benefits there are pretty abstract and personal, and the pressure to make the onboarding any easier is very low. It's partly because these kinds of users are willing to (a) suffer through a lot in the name of learning and feel good about having done that, and (b) read and write what appears to be a dozen book-length tomes of documentation, that it doesn't get any easier for beginners. I know because I was also one of them in 2015-16 or thereabouts. Nix doesn't need any more home-manager tutorials, because it doesn't need any more small-time tinkerers. It would benefit more from becoming essential to a bunch of businesses who will become invested in making their own developer experience acceptable at scale, and who will have to improve Nix to that end. Pretty soon a bunch of people are going to realise they actually do need the exact same version of every tool in every toolchain on every machine in a team, to make use of the transformative caching abilities of tools like Bazel and Buck2. And if that catches on, I would not be surprised to see an alternative Nix frontend configured in Starlark, like every other tool in that arena. There's already a buck2-nix that generates dhall under the hood.
- yu3zhou4 3y agoI like the UI of the website, is it some open source template?
- loveparade 3y agohttps://vitepress.dev/ https://vitepress.dev/
- toastal 3y agoWhy release a book under a software license instead of like Creative Commons?
- alexvitkov 3y agoBecause that's the licenses they know and interact with day to day. It's probably what most of the audience for this book id familiar with as well.
- toastal 3y agoBut it’s not software—it’s a creative work.
- troupo 3y agoTo the author, make sure to go through your CSS and fix colors for code boxes At least half of the code is simply unreadable even to a person with good eyes. Some examples: https://nixos-and-flakes.thiscute.world/nixos-with-flakes/downgrade-or-upgrade-packages https://nixos-and-flakes.thiscute.world/nixos-with-flakes/do... https://nixos-and-flakes.thiscute.world/nixpkgs/overriding https://nixos-and-flakes.thiscute.world/nixpkgs/overriding etc. Simple black-on-white with no syntax highlighting is better than this.
- notfed 3y agoLooks fine to me. Maybe our browsers are rendering differently. Can you be specific?
- troupo 3y agoIt looks like CSS got updated/fixed. It now looks fine. Previously it would light gray on lighter gray, and light yellow-ish-green etc.
- mtlynch 3y agoNot GP, but this is what I see: https://imgur.com/gTQ4J80 https://imgur.com/gTQ4J80 I can read it, but I can understand having trouble with dim gray text on a black background.
- Filligree 3y agoIt depends on the total contrast on your screen. Unfortunately... On a high-contrast, high-brightness screen, white on black becomes glaringly bright and produces halos, while a pure white background actually hurts your eyes. So you default to gray-on-gray because that's what's pleasant, while higher contrasts are used in scenarios where you want glare. (Games and photographs, mostly.) On a low-contrast screen, which describes a lot of cheaper hardware, the exact opposite is true. The real issue is it's all relative to what your display hardware can do, instead of using absolutes. HDR modes fix that, but HDR is still rare.
- dlyons 3y agoNix has a great community of folks passionate enough to write free books ;) I've spent over a year making my personal Nix config work well for others: https://github.com/dustinlyons/nixos-config https://github.com/dustinlyons/nixos-config
- deleted 3y ago[deleted]
- justaj 3y agoThis does not seem to work for me as I'm getting a blank page.
- mdaniel 3y agotheir GH releases page has a PDF, if that helps you, or browsing around the .md files may help what I presume is your noscript browser, assuming that GH works with noscript anymore: https://github.com/ryan4yin/nixos-and-flakes-book/releases/download/v0.2.2/nixos-and-flakes-book.pdf https://github.com/ryan4yin/nixos-and-flakes-book/releases/d...
- weatherlight 3y agoI found this interesting. I picked dup NixOS a few months back using configuration.nix and home.nix and completely avoided flakes all together because it was an experimental feature that will have breaking changes going forward. I feel like this book jumps into flakes too soon. it should have more around the configuration.nix file, its purpose and uses, and then show systematically why one may need a home.nix file and then maybe show why something like configuration.nix/home.nix might not serve some users (and then introduction flakes for those individuals.)
- SkyMarshal 3y agoAll that would make for an interesting blog post, if you’re up for it.
- sigmonsays 3y agoi went this same route and was actually looking at flakes wondering "Why is everyone using something that's not stable" it took a ton of time before I finally switched to flakes. They really need better messaging about this because the environments are incredibly complicated.. the possible choices are cumbersome. The problems are a matrix of - root daemon or non-root daemon - nixos or non-nixos - home-manager or non-home-manager - what OS are you on? - flakes or non-flakes - stable or unstable i'm happy with nix and love it but i definitely stumbled on al lof the mentioned
- SuperSandro2000 3y agoYou want the daemon, the sandbox and what you use to manage your inputs does not really matter for the outcome, it only makes the managing easier.
- w0m 3y agoUsers seem to love it, but... Why should I use it? I have a number of personal machines, but I tend to mirror whatever I need to use at work; currently mostly Ubuntu. Nix seems Great to help cleanup my ansible deployments, but it also seems problematic with the lack of LTS releases to where I couldn't potentially roll out at work.
- flkiwi 3y agoSo, it took me an inordinate amount of effort to get to this point, but I find managing my nixos laptop to be idiotically easy now. And, to be clear, I'm not a developer. I just want an easy to use config that I can port over to a new laptop when the time is right (and maybe port a similar config over to my desktop as well, once I get around to installing NixOS). It's very weird, because I went from "WHY IN GOD'S NAME WOULD ANYONE WANT THIS?" to "my life is now measurably better" over the span of about 48 hours, and I have no idea what clicked. Something about adding flakes to the mix (NixOS + HM + flakes) broke the logjam. Or maybe it was simply how damned useful this config was to learn from: https://github.com/Misterio77/nix-starter-configs https://github.com/Misterio77/nix-starter-configs I went from that to a per-user, per-machine (with defaults for each) config in about an hour, and I haven't fundamentally changed that setup since. I have no idea why it's so compelling to me, but the combination of being able to tell the machine how to configure itself in one place with the ease of adding software ... I'm going to spin up a config this weekend and put it on my kid's laptop. There are other tools to accomplish the same thing, but NixOS is just so easy ... and poorly documented ... and has weird CLI conventions ... and doesn't do a super job of garbage control ... and
- rgoulter 3y agoThe Nix package manager is to apt what Emacs/Vim are to Notepad. Nix is a very powerful tool for dealing with packages. NixOS uses the package manager to manage the system configuration. With a declarative config, you mitigate the risk of "I made this change, forgot what that change was" (or otherwise systems becoming out of sync with each other). Ansible also solves this, sure. (Though, NixOS forces a system into a target state). Especially useful for working on more than one machine is the ability to conveniently install the same sets of packages everywhere. -- The standard thing to do is just run "install <package>" on each machine. Whereas with Nix, you can write a meta-package of packages you want, and either install this system-wide, or just have those packages added to PATH for when you need them. With Nix, you pay an upfront cost, so that later you don't have to pay the cost later. -- It's a similar trade-off to using Ansible, or using a dotfile manager across machines. Nix's reproducibility has benefits, too; before using Nix, when picking up a side project would often require that I'd update the code, as system package managers updated their package versions. -- With Nix, it's easy to retain references to old versions, and possible to have both old and latest versions of a package available on the same system.
- anotherevan 3y agoI'm expecting to receive my shiny new Framework 16 laptop in the new year. It will be my main workhorse/development machine. I vacillate between learning Nix and giving that a go, or sticking with Arch+Ansible to manage it.
- k2enemy 3y agoI use NixOS on a server and it is wonderful there where my needs are basic and on the well worn path. But there's no chance I would want it on my development machine. Even something as simple as installing a python package that isn't in the main repo doesn't have a straightforward solution. There are half a dozen different approaches people take, almost none of them well documented. And most of them involve writing 50 lines of esoteric nix, your own derivation, or a complicated flake (which everyone says to use, but there isn't good documentation). Maybe it is great for those on the inside, but from the outside it looks like a disaster. And that's the last thing I want to deal with when I need a package installed to get my work done.
- rgoulter 3y agoI use NixOS as a daily driver. (My previous Linux of choice had been Arch). I'd describe Nix as 95% wonderful, 5% hugely painful. I learned Nix by using it on macOS/Linux before trying NixOS. I was concerned that NixOS would be very difficult to use. It was easier to use NixOS than I expected; the main problems I ran into were when a tool would helpfully download some kind of binary, but since NixOS doesn't put its shared libraries where other Linuxes do, these programs wouldn't work. -- Though, for a popular-enough tool, most likely someone else already has a Nix package written that helps out. There are other "escape hatches". e.g. I think something like distrobox could be used if native-on-NixOS stuff has problems. https://github.com/89luca89/distrobox https://github.com/89luca89/distrobox Nix can otherwise be difficult if you need to write some Nix code. There are several concepts in Nix which are foreign enough to how things have been done before; e.g. when building a package, it won't have access to $HOME; but, recent language tooling will often want access to $HOME. -- If something goes wrong, you may often need a wider and deeper understanding compared to if something goes wrong on a more typical Linux distribution. For as difficult as it is, the trade-offs Nix makes are essentially "I'm going to put in a lot of effort now, so that I don't have to put in effort some time later". (This favours Nix when "effort later" is multiplied many times). Overall, as a choice for "I need this to work right now", I'd recommend against NixOS (especially for someone who doesn't know Nix).