<jeaye>I love the idea of a declarative approach to defining deterministic setups; I'd like to run with that. However, I spend most days compiling native software, for various projects, and I'm not interested in writing nix expressions for all of them.
<jeaye>civodul: For example, I want to build https://github.com/jeaye/color_coded on NixOS so I can use it with vim. However, I can't just use NeoBundle (I know you're an Emacs guy, heh) to build it with cmake like I would on a conventional system.
<jeaye>So, in this case, I setup a nix expression, went through the motions, installed, only to find that ldd doesn't find all bits for the compiled shared object unless I'm in a nix-shell for the project. But I use vim everywhere and I want that always available.
<jeaye>It seems like I'm fighting the system here.
<civodul>i think Guix doesn't have NeoBundle either, but there's no reasons it couldn't provide it
<civodul>Emacs also has its own package/plug-in system
<civodul>one can use it on GuixSD, or one can choose to use Guix instead of Emacs's own thing
<civodul>as a user, i find it more convenient to handle all my packages with Guix
<civodul>rather than have some handled by Guix, others by Emacs's package.el, and so on
<jeaye>Right. My issue is that, while nixos/guixsd work hard to control profiles and different environment for different programs, I'd like to be able to specify a _default_ environment, perhaps. This would allow me to have access to a specific version of boost, for example, or clojure, or gcc, and have them all there so I can conventionally build software.
<jeaye>I think this is what nix-shell is trying to do, but the separation of some programs (like vim) from that environment makes it tough to, in my case, compile arbitrary native plugins for vim.
<civodul>you don't *have* to use nix-shell or 'guix environment'
<civodul>you can always install things in your profile, with "guix package -i foo", etc.
<civodul>that effectively defines your "default environment"
<civodul>for instance i have 'gcc-toolchain' and a bunch of libraries in my profile
<fps>civodul: oh ok, excuse my bad terminology then
<jeaye>civodul: GuixSD uses scheme to define the system similar to how NixOS uses Nix, right?
<fps>btw: just as a side note: i stumbled over guix in the nixos channel, where some people "complained" about the page not featuring its nixos heritage more prominently.. might be good politics to maybe do so?
<jeaye>Yeah, I'm looking for a desktop. Minimally, I use X and i3wm. 99% of my time is working in vim with various C++ projects, so I rely on easily being able to build them.
<wingo>in that case guixsd might work well for you
<wingo>it's just us stick-in-the-mud gnome people that gripe a lot :)
<wingo>i have had ok luck developing chrome and v8 from within my nixos+guix box
<jeaye>The other 1% would be using non-free software like steam. My guess is this is where GuixSD will become a hassle.
<wingo>but i realized a lot of that is because nix helpfully has a /usr/bin/env and many scripts use that shebang :)
<wingo>guixsd has no /usr at all though i guess you can make your own /usr/bin/env
<wingo>it's strange because i use nixos's /usr/bin/env to let things build under guix
<jeaye>civodul: So, since you'd be the one to know, what I want should work, right? Allow Guix to handle my system, using Scheme, but also have libs like lua, boost, and sdl available and software like cmake, gcc5, and git available sanely such that, assuming I have everything installed, I can build arbitrary projects using those deps.
<jeaye>I really didn't have good luck with that in NixOS.
<fps>jeaye: "sanely" as in immediately available in your standard profile?
<jeaye>Yes. For the software I'm building locally, I'd like those libs available in my standard profile.
<taylan>in what way would you like that to be handled? in ~/.guix-profile, only one can be installed, but any other profiles on the system may have any other versions.
<jeaye>taylan: Are they installed into ~/.guix-profile imperatively?
<taylan>profiles are generated pretty much from scratch after every package transaction. e.g. when you run 'guix package --install=boost' (implicitly using the default profile, ~/.guix-profile), it creates a new "generation" of that profile and makes ~/.guix-profile point to it
<rekado>re different versions of boost: you would not install those into the same profile.
<rekado>I use multiple profiles for different projects with mutually exclusive dependencies.
<taylan>you might have noticed that ~/.guix-profile is a symlink to /var/guix/profiles/per-user/$USER/guix-profile. that file is in turn a symlink which is made to point to /var/guix/.../$USER/guix-profile-$GENERATION after every transaction, where each such generation profile is immutable (so can be easily rolled back to etc., so long as it doesn't get deleted)
<alezost>rekado: as Ludovic pointed, guix-build-log-mode is a major mode for log files. For shell-mode, there is "M-x guix-build-log-minor-mode" which also highlights build phases. I like it, so I have (add-hook 'shell-mode-hook 'guix-build-log-minor-mode) in my .emacs
<sneek>alezost, civodul says: what do you think of adding guix-build-log-mode to auto-mode-alist?
<alezost>civodul: yes, I was going to add it, but then forgot :-)
<alezost>civodul: btw, initially I added `compilation-shell-minor-mode' to `guix-build-log-mode-hook', as it highlights many general comilation stuff. But now I think it shouldn't be a default, because it is significantly slow on big logs, so what about removing it from that hook, and add a key binding for it instead?
<efraim>if I want to build a package completely separated it would be `guix environment --pure -- guix build foo`?
<alezost>efraim: I think "guix build foo" is enough
<efraim>thats what I thought, but I think I'm using /usr/bin/perl as part of the autoreconf process
<kmicu>It’s about providing binary substitutes for majority of possible compiler and system combinations. That is quite nice actually as a stress test for Nix/Guix ecosystem and as a service for haskell developers.
<rekado>davexunit: "people who aren't intimately familiar with all of Haskell's quirks" ---> this is nothing to do with Haskell but with cabal. You don't need to know about Haskell's quirks (which?) to build software.
<joeyh>I know the nix one, except the switches are impossible to remember
<davexunit>joeyh: poking at a vm config based on my laptop's config + ghc. juggling a few different tasks at once but I'll let you know if I get something built and uploaded.
<joeyh>paroneayea: it basically comes down to the number of symbols the library exports, and imports from other libraries. The mangled symbols are pretty big, and I've often seen up to 50% of the stripped .so are just the symbols
<davexunit>guix is reporting that the installed size of our ghc package is 860.5MiB
<joeyh>especially since haskell tends towards lots of small functions
<tyrion-webchat>wingo: so, I could boot with a live distro, and then mount my root partition and install guix there
<davexunit>joeyh: users using unprivileged guix currently get no build containers or chroots because they cannot create those, and if they can't write to /gnu/store, then the new store directory changes all of the build hashes
<davexunit>thus they must bootstrap the entire system from source.
<davexunit>and inevitably there are problems in the process due to the lack of isolation.
<wingo>tyrion-webchat: yes and guix's install image is live so that should work in theory. i don't know anything more about encrypted partitions though. reading the manual is essential and ask here if you have questions :)
<davexunit>some people recently got encrypted stuff working.
<davexunit>*but* you need to use guix master, not our 0.8.3 release.
<joeyh>hmm, didn't nix use a layer of indirection to avoid the hashes changing? Ie, everything uses ~/.nix and it symlinks off to /nix
<fps>ok installing emacs in the root profile to make hacking the config.scm more pwetteeh
<fps>btw: when i installed vim, it rebuilt it from source. in the bare bones config it doesn't pull binary packages? or was i just unlucky?
<joeyh>davexunit: hey, so heading home soon, how is that image coming?
<kmicu>fps: just remember to use paredit, or smartparens’ strict mode, or at least electric-pair-mode ( ͡~ ͜ʖ ͡°). You could also request a ‘guix layer’ for https://github.com/syl20bnr/spacemacs (if you still would like to use vi’s modal editing style)
<efraim>it looks like hydra still has the xz tarball, so as long as we trust hydra we can still download xz-5.0.4
<joeyh>civodul: the static libs are useful for haskell developers who want to produce a program binary that is self-contained and so easy to deploy to other systems. Seems somewhat common in the haskell comminity
<civodul>joeyh: yeah maybe we should just keep'em separated