4 ms·
- You will have to learn both the nix language and working with nixpkgs. Learning nix is pretty trivial IMO (great resources are nix-1p[0] and Nix Pills[1]) but
by _piif 4y ago
- You will have to learn both the nix language and working with nixpkgs. Learning nix is pretty trivial IMO (great resources are nix-1p[0] and Nix Pills[1]) but the documentation, while vast, is pretty shallow at the moment. You will likely have to resort to reading random blog posts, nix configs published by others and the source code of nixpkgs itself.
- As mentioned by another commenter you will not be able to run random binaries by default. You can use nix-alien[2] which will automatically fetch the required libraries and build an FHS environment for the binary.
- It is significantly more bandwidth- / rebuild-heavy. If an input for a derivation changes it will trigger a rebuild, which means either a redownload from the binary cache or a recompilation.
[0] https://github.com/tazjin/nix-1p https://github.com/tazjin/nix-1p
[1] https://nixos.org/guides/nix-pills https://nixos.org/guides/nix-pills
[2] https://github.com/thiagokokada/nix-alien https://github.com/thiagokokada/nix-alien
- codedokode 4y ago> learn both the nix language That seems weird to me. I don't have to learn package configuration language in other distributions. I thought that one could just install packages with a package manager. > You can use nix-alien[2] which will automatically fetch the required libraries and build an FHS shell for the binary. That's actually fine. I want to put closed source software into a chroot anyway.
- preisschild 4y ago> That seems weird to me. I don't have to learn package configuration language in other distributions. I thought that one could just install packages with a package manager. NixOS is more like a distro bundled with Ansible, so you can describe your entire system as code.
- SuperSandro2000 4y agobut in contrast to ansible it uses a real programming language and not turing complete yaml
- colordrops 4y agoAnd it's reproducible since the entire system is built with it. Ansible is brittle as hell.
- jauco 4y agoIf you want to run nixos (i.e. the linux distro) then the configuration file is written in the nix language. Given that you’ll have to configure your installation, you’ll have to learn the nix language If you just want to use nix for packages, you can run any distro and install nix the package manager into it. This is a good way to dip your toes in the water. And in that case you can just use the cli commands for installing packages.
- codedokode 4y agoI remember reading that nix unlike all other distros can install multiple version of the same package and I want this feature, but I guess programming a package config might be too much for me. Maybe I'll try nix package manager then.
- rssoconnor 4y agoWhile maybe not impossible, it is quite hard to cox Nix to "install" multiple different versions of the packages. They all cannot be in your path at the same time. I still encourage you to give it a try. You can build different versions of same package and not "install" them. Instead just execute the binary from the built version (I do this where I have a built-but-not-installed version of openssh-8.6 laying around because I have an old service that modern SSH no longer supports). You can also run `nix-shell -p <custom-package-version>` to get a shell with a specific package available in the path, overtop of whatever might be globally installed. Who knows, you might even be tempted to dip your toes into the Nix language by writing a custom `shell.nix` to build a shell with some more complex development environment, or to simply automate a complex `nix-shell -p` command.
- pxc 4y agoThe Nix idioms that are used in configuring NixOS are super simple, mostly just turning things on and off. You can browse some here: https://search.nixos.org/options https://search.nixos.org/options For example, to install an OpenSSH server and run it, you'd write: services.openssh.enable = true; and to run it on an additional port, 2222, instead of just the default of 22, you'd write: services.openssh.ports = [ 22 2222 ]; For programs you don't need to configure but just want to put on your PATH, you just add them to a list like environment.systemPackages = [ pkgs.firefox pkgs.jq ]; If configuration management isn't for you, go ahead and mess around with Nix as a standalone package manager. But NixOS really doesn't require much effort or prior knowledge to get up and running and start playing with it! (For NixOS, the Nix you write only starts looking like real code when you want to add new features or some packages to NixOS.)
- opan 4y agoOn both NixOS and Guix System you can get by pretty well without learning the config langs or all the more advanced features. Only really becomes a problem if you need something new packaged. You can enjoy declarative package management with easy rollbacks without really learning more than any other distro.
- nextaccountic 4y ago> I thought that one could just install packages with a package manager. You could use the command nix-env -iA mypackage To install packages, which is like pacman -S mypackage or apt install mypackage. But... the interesting part of Nix is that it lets you install packages declaratively, by editing a config (like vim and emacs packages). Besides installing packages, all configuration is done through this config file (or bunch of config files): nix generates all files in /etc for you, again, like vim or emacs, but for the whole OS That way, you easily transfer your setup to another computer or even keep two machines in sync. And you can add it to version control. And you get a grub menu with all your previous setups (until you uninstall them) If this doesn't appeal you, you probably won't like to use NixOS
- SuperSandro2000 4y agoyou can also use https://github.com/Mic92/nix-ld https://github.com/Mic92/nix-ld or build a fhs.
- kaba0 4y ago> It is significantly more bandwidth- / rebuild-heavy. If an input for a derivation changes it will trigger a rebuild, which means either a redownload from the binary cache or a recompilation. For general usage I didn’t notice it much, like, as an alternative to apt/pacman/etc. Ok, maybe don’t use it from a limited data plan (but isn’t true of every desktop OS?). But sure, if you patch some lib n layers deep you will have to recompile many things, which is a godsend (in that you can actually do that), but will take a bit of time. But you can usually decrement its impact by really changing what has to be changed and using a “standard” channel for all the rest. With flakes it is especially easy to mix and match multiple nixpkgs repos at different versions.