IRC channel logs


back to list of logs

<roptat>mh... I'm having lots of troubles updating opam and making tests pass
<roptat>trying to wget four different commits of opam-repository...
<lfam>Sounds hairy
<roptat>so, I tried to replace that by getting the content with git-fetch, but dune still wants to run the rule that runs wget
<lfam>Sometimes, you need the # key
<lfam>Manual editing of a shell script
<roptat>right, trying to replace wget with touch :)
<roptat>same for that tar xf command...
<roptat>oh it worked, kinda
<roptat>[ERROR] Could not synchronize ${OPAMTMP}/463579a1237d68b4 from "git://"
<rndd>lfam: sooo, bash is invoked as login shell in guix?
<lfam>rndd: Anytime you "log in", like at the Linux console or via a desktop login window, it starts a login shell
<roptat>now I hate opam :(
<lfam>I feel you
<roptat>I don't think I can fix this test, unless we have a way to fake a git repository inside the environment
<lfam>Can you disable the code that checks for it?
<roptat>it's basically running opam to update itself and comparing the output
<lfam>Well that' something
<lfam>That's something
<lfam>I mean, what is even the point of this test
<roptat>don't know, whole system check, that it can update itself
<roptat>supposed to say "I was at 2.07 and now I'm at 2.1.0~beta3"
<roptat>oh, mh I created empty repositories, I think dune overwrote the copies of the opam-repository because it might have noticed it did not create it itself
<rndd>lfam: ok, thank you
<muradm>#:use-module ((gnu system file-systems)
<muradm> #:select (%elogind-file-systems file-system))
<muradm>never mind
<roptat>ok, I think I managed to fix the opam-repository issue, but still 4 failing tests
<roptat>crazy issues though, the first one fails because of whitespace in the output: it expects one line of output, but gets the same text nicely formated instead
<roptat>oh, one test failure is because it compares with a generated one?
<roptat>that's the file I changed to prevent it from using wget
<lfam>The tests sound fragile
<lfam>Like, does opam actually parse text in that way, such that formatting will break it?
<roptat>seems so, it's using diff between the output and a .out file
<roptat>not sure how to make it not format the output
<lfam>I'm struggling to figure out why Blender fails to build on core-updates. It can't find lex.h
<lfam>Oh, it's not lex.h, it's Iex.h
<Rooks>How would I acquire a newer version of node?
<ix>How does package detection in a channel work?
<ix>Does guix just scan all symbols? Or is it part of the (package) invocation?
<oriansj>Rooks: that would probably be as for how to acquire the process needed to build it. That is a far more difficult problem.
<Rooks>So it seems
<oriansj>as node.js is a language that loves to release big binary blobs and make generation from source a nightmare.
<Rooks>I tried writing a variation myself but it failed very quickly lol
<oriansj>there are probably a bunch of incremental pieces that need to be built first before you could use them to build the current node.js
<oriansj>assuming they didn't include another circular dependency.
<oriansj>those tend to require programming to cut through.
<Rooks>How does that get solved?
<oriansj>usually a programmer patches the code to implement the language feature without requiring the language feature to do so.
<Rooks>I see, so they want people using their binaries? :/
<oriansj>more often when we find these things. it tends to be because the code required to implement the functionality without depending on that functionality is quite ugly.
<oriansj>but yes there is always the possiblity of compromised binaries (certainly in non-reproducible builds)
<ix>Guess I'll answer myself, after quite some digging. It scans public symbols
<Faremacs>I'm trying to debug my xsession, and systemd-logind interprets my repeated attempts at logging in as spam and pauses the login for me for 14 minutes :-(
<Faremacs>How can I disable or reset this "feature" ?
<dstolfa>lfam: re shepherd user services, i feel like shepherd has the potential to be much nicer than systemd, it just needs hackers!
*dstolfa would love to hack on shepherd when he gets time
<muradm>lfam: for docs, it should go under services, you want it under "Miscellaneous Services" or under "Desktop" services?
<Faremacs>Looks like `herd restart xorg-xserver` resets the spam counter
<muradm>dstolfa: may be you could add conditional setsid in exec-command function? :) like this: (unless keep-tty (setsid))
<dstolfa>muradm: there's a lot of stuff on my todo list for shepherd, i just need to finish my phd first which is eating 16 hours of my day right now
<muradm>no luck again :D
<dstolfa>muradm: i didn't say no, i'm just saying ENOTIME, try again in a few months! :P
<Faremacs>How may I override the login shell for root to be zsh instead of bash?
<roptat>is there a way to control the number of lines a program thinks a terminal has?
<dstolfa>roptat: yes, there are a few environment variables you can se
<dstolfa>i forget which they are...
<dstolfa>roptat: seems like COLUMNS and LINES, though it might require some finessing depending on the shell
<Faremacs>roptal: stty -a ; echo $COLUMNS $LINES
<roptat>how can you set them? I tried setting $COLUMNS, but it did not have any effect
<dstolfa>not sure... usually i just set them, but my scripts that do that are all for oldschool kornshell for solaris/illumos systems
<dstolfa>it seems to depend on the shell, e.g. bash might set them after every command automatically
<roptat>"stty cols 500"
<roptat>ah, but in the build environment, that answers "stty: 'standard input': Inappropriate ioctl for device"
<roptat>I'll just disable that test and report upstream
<roptat>ok, with that out of the way, I need to find out why it can't build a test package
<roptat>most likely "bwrap: execvp ./ No such file or directory"
<roptat>so I'll have to find a way to fix that, it probably comes from one of the repositories
<Faremacs>I don't understand why my $USER, root and the system download the same thing (e.g. git) three times when my mental model is that they would be sharing it all.
<vagrantc>guix pull is per-user, and downloads a git history for each user
<ix>I want to import the entirety of melpa into guix >_>
<ix>Which is entirely doable, but apparently not the guix ethos
<vagrantc>guix system will build guix-daemon, also from the git sources, though that should be substitutable in general, but if it isn't, it downloads a copy of the relevent git into the store
<vagrantc>i've speculated that guix would benefit from a proxy cache for git, though do not have the ambition to try and create one
<dstolfa>ix: well, technically it's in the guix ethos that you import things from melpa as long as they're free software and "cleanly" imported for thet lack of a better word
<dstolfa>it's probably just against the guix ethos to just dump melpa as a source for things
<ix>Thats what i meant
<dstolfa>well you could do so as your own channel, but a lot of guarantees of guix would be lost if it were done in upstream
<dstolfa>+ it's probably better to just add things that definitely make sense 1 by 1, as that will get them archived on softwareheritage, make them bootstrappable and so on
<roptat>looking slightly better, now it managed to run, but that is failing while building
<roptat>ld: cannot find crt1.o: No such file or directory
<ix>dstolfa: im thinking of doing it... we'll see. Im just pining for the nix emacs-overlay
<roptat>success! it was missing a LIBRARY_PATH in its isolated environment
<muradm>how to generate guix manual html document? is it generated when "make" is run''?
<roptat>you can use doc/build.scm to generate the same thing as the website, are simply use "make doc/guix.html"
<roptat>and now I can update dune, and apply changes to the dune build system
<muradm>roptat: nice, thanks!
<Fare>Hi! This is my first time logging in this channel from Guix in graphical mode. Yay.
<roptat>Fare, yay :)
<roptat>oh fun, I crashed all my terminals by playng with stty ^
<roptat>xfce4-terminal uses a server to run all the windows in the same process
<roptat>and if you mess up the size with stty and try to resize it, all the windows disappear ^^'
<roptat>I had too many open anyway
<roptat>more terminal windows that tabs in icecat, can you imagine?
<dstolfa>roptat: can't you turn that off? i hate when terminals do that, because messing with something locally can kill my ssh sessions that i have to then reopen :P
<muradm>lfam: here is preliminary patch
<muradm>do you want it as one patch or a series? packages, services, docs could be separated
***lukedashjr is now known as luke-jr
<Fare>My terminator config doesn't seem to be working under guix, I'm not sure why
<Fare>stumpwm is also behaving slightly weird
<muradm>anyone knows where XDG_SESSION_ID is specified? which specification/document
<muradm>can't find it in
<muradm>if specified at all, or is it systemd specific?
<Fare>is there a packet filter / firewall in Guix ?
<cehteh>interesting, i dont see one, except raw iptables commands packaged
<Fare>I used to have a script that used them... I might have to resurrect it :-/
<cehteh>i recommend firehol
***silver is now known as MysteriousSilver
<jahor>Yesterday I asked the question about outputs, but was offline when bricewge answered it. So thanks a lot, bricewge :3 That was exactly what I needed!
<abrenon>good morning guix
<abrenon>I searched guile's documentation as well as guix' repos, and I was surprised by the lack of tooling for partial application
<abrenon>is it frowned upon ?
<abrenon>oooh I want <>, so that's what it's for
<vivien>What is <>? Is it related to cut/cute?
<abrenon>yeah, according to guile's manual, it's the "hole" that goes along with cut
<abrenon>like (cut + 7 <>) would be if I understand correctly (lambda (n) (+ 7 n))
<vivien>Oh sorry I thought you were asking for partial evaluation
<vivien>Yes, cut / cute is the thing for partial application
<abrenon>hmmm sorry I think I'm mistake
<abrenon>isn't partial evaluation passing some arguments to a function but not all, to get a function in return ?
<abrenon>or does it have to do with lazyness ?
<vivien>From what I know, this is the term dynamic languages use instead of "inlining"
<vivien>So it’s just an optimization pass
<abrenon>ohhhh I see, ok so definitely not the same thing ^^
<abrenon>I think I commonly use one for the other, I'll pay attention to that
<abrenon>although re-reading the logs I did write partial application, to my greatest astonishment
<abrenon>I manage to convey confusion without even writing it down
<vivien>The confusion that I experienced was mostly my fault: my IRC client has a tiny font on a large monitor so I am barely able to read the end of the chat lines. I should switch to something better.
<civodul>Hello Guix!
<MysteriousSilver> \(◕ ◡ ◕\)
<PurpleSym>sneek: later tell kappa: `guix environment --ad-hoc -C --no-cwd python-notebook -N -- jupyter notebook` works fine for me, but I’m using it on a foreign system.
<sneek>Got it.
<PurpleSym>sneek: botsnack
<civodul>hey! i'm told CONDA and Julia package folks will be well represented at
<civodul>we should be there as well, together with fellow Nix hackers!
<civodul>i think we have a Rust packaging talk in the pipeline :-)
<civodul>perhaps i should share my PyTorch experience
<jlicht>civodul: congrats on the retirement :)
<civodul>jlicht: heh thanks! :-)
<civodul>i'll still be around, but sitting in a rocking chair under the sun and watching people do the hard work
<civodul>that's what retirement is about, i'm told, right? :-)
<jlicht>it's about spending time on what you want, whatever that may be!
<civodul>yup :-)
<surfit>hi #guix, I'm having trouble understanding how to build a specific version of python, akin to pyenv; I have located the commit in the guix source tree associated with the python version I'm after, and `guix time-machine --commit=d37d975b748f65a1ace4b2434d04e30ed558a7a8 -- build python` fails to build my a profile due to a perl dependency build
*raghavgururajan peeps in
<raghavgururajan>Hello Guix!
<surfit>should I cleanbuild the whole stack here? what are some troubleshooting steps you would take in this situation? (I am currently running the previous command as `--pure`, with a `--root` specified, and it's just building everything from guile 2.0.12 to guile 2.2.4, including all libs like glib, gcc, groff
<civodul>surfit: hi! could be that you stumbled upon a commit where that Perl dependency was broken, although it should be hard to find a commit where Python or its dependencies don't build
<civodul>re "clean build", all builds are always "clean", in the sense that they are stateless; the build result does not depend on what's on your disk, what you did previously, etc.
<civodul>surfit: this is from July 2018 though; it's about the time 0.15.0 was released, so we can indeed time-travel to it:
<surfit>civodul: thanks for speaking up - that makes sense to me, I'm trying another commit 5c798ca71dcd009896654da7d6a1f8942c6f3c50 and I'll let you know how it goes
<civodul>however, because it's old, we no longer have substitutes for it, which is why you end up rebuilding everything
<surfit>just a perspective shift from binary distros, and using super easy tools like pyenv
<civodul>surfit: an easier option might be to check the Guix-Past channel:
<surfit>do you have any tips for navigating the metadata and history? I have a requirement in my dayjob to flip lang runtime verso
<civodul>(time travel is powerful, but it's perhaps more than what you're trying to achieve here)
<surfit>** versions around; blah blah microservices
<civodul>pages like have a "version history" link at the bottom
<surfit>that channel looks great; I'll append it and search it
<civodul>it takes you to the Guix Data Service, which records (among other things) package versions
<civodul>Guix-Past has Python 2.4 FWIW; it can be seen here:
<surfit>yeah the channel api through data aservice is okay, just maybe too 'cutting-edge' for the runtimes I need to use (it doesn't show anything before 2019 as far as I know)
<surfit>really great info though thank you
<surfit>been tearing my hair out on this one
<civodul>yw! hope it works for you
<civodul>if you need another old python/python2 version, we can add it to Guix-Past
<surfit>okay sweet, I'll look at the specs and make a PR if I'm missing a version in there! thanks again!
<surfit>civodul: I am missing python-3.6.4 from guix-past
<surfit>i will try a time-machine for that 3.6.4 commit, but the package def `5c798ca71dcd009896654da7d6a1f8942c6f3c50` is
<surfit>(define-public python-3.6
<surfit> (package (inherit python-2)
<surfit> (version "3.6.4")
<surfit> (source (origin
<surfit> (method url-fetch)
<surfit> (uri (string-append ""
<surfit> version "/Python-" version ".tar.xz"))
<surfit> (patches (search-patches
<surfit> "python-fix-tests.patch"
<surfit> "python-3-fix-tests.patch"
<surfit> "python-3-deterministic-build-info.patch"
<surfit> "python-3-search-paths.patch"))
<surfit> (patch-flags '("-p0"))
<surfit> (sha256
<surfit> (base32
<surfit> "1fna7g8jxzl4kd2pqmmqhva5724c5m920x3fsrpsgskaylmr76qm"))
<surfit> (snippet
<surfit> '(begin
<surfit> (setenv "PYTHONHASHSEED" "0")
<surfit> ;; Reset mtime when validating bytecode header.
<surfit> (substitute* "Lib/importlib/"
<surfit> (("source_mtime = int\\(source_stats\\['mtime'\\]\\)")
<surfit> "source_mtime = 1"))
<surfit> #t))
<surfit> ;; These tests fail because of our change to the bytecode
<surfit> ;; validation. They fail because expected exceptions do not get
<surfit> ;; thrown. This seems to be no problem.
<surfit> (add-after 'unpack 'disable-broken-bytecode-tests
<surfit> (lambda _
<surfit> (substitute* "Lib/test/test_importlib/source/"
<MysteriousSilver>use a pastebin next time
<surfit> (("test_bad_marshal")
<surfit> "disable_test_bad_marshal")
<surfit> (("test_no_marshal")
<surfit> "disable_test_no_marshal")
<surfit> (("test_non_code_marshal")
<surfit> "disable_test_non_code_marshal"))
<surfit> ,@opt
<surfit> "-m" "compileall"
<surfit> "-f" ; force rebuild
<surfit> ;; Don't build lib2to3, because it's Python 2 code.
<surfit> ;; Also don't build obviously broken test code.
<surfit> "-x" "(lib2to3|test/bad.*)"
<surfit> ,file)))
<surfit> (find-files out "\\.py$")))
<surfit> (list '() '("-O") '("-OO"))))))))))
<surfit> (native-search-paths
<surfit> (list (search-path-specification
<surfit> (variable "PYTHONPATH")
<surfit> (files (list (string-append "lib/python"
<surfit> (version-major+minor version)
<surfit> "/site-packages"))))))))
<surfit>will do
<efraim>I had to touch python-markupsafe on core-updates-frozen to fix python-jinja2, but it also is an input to python-mako which is an input to mesa
***GNUtoo_ is now known as GNUtoo
<civodul>surfit: in the meantime, note that you can have this package definition right into your manifest or in a file of yours
<civodul>efraim: cool! i need to take another look at that branch
<efraim>I figured the best way was to try to build my manifest
<efraim>ruby-asciidoctor dependencies needs some help, that's been my main blocker so far
<efraim>well thats ... interesting. gst-plugins-base segfaulted in the test suite but built fine the second time
<apteryx>hello! Should mcron check if the user home directory exists before chdir into it? I have an mcron job runnning as the user 'nobody' on my system, and it would fail attempting to '(chdir "/nonexistent")'.
<civodul>hi apteryx!
<civodul>i think it could (catch 'system-error (lambda () (chdir ...)) (lambda _ (chdir "/")))
<apteryx>uh, thinks my Scheme diff is spam
<apteryx>seems we should host our own paste service
<apteryx>civodul: wouldn't 'system-error catch too much, hiding perhaps valid failures that the user should be made aware? I was thinking simply checking with (when (directory-exists? home-directory) (chdir home-directory))
<civodul>apteryx: in that case you could check system-error-errno in the handler, to avoid a time-of-check-to-time-of-use issue
<ix>Has anyone considered lazy packages as an alternative to guix import?
<ix>No need to actually have the packages upstream if they can be scheme generated with a high success rate
<ix>I would try it but it seems hard to achieve without modifying guix
<ix>It's kinda analogous to IFD in nix, come to think of it
<ix>To be honest, could possibly use an inferior process to achieve it
<apteryx>civodul: OK! So exceptions can be useful to avoid this kind of pitfall, interesting.
<rekado_>ix: we have this for R
<ix>rekado_: oh?
<abrenon>nix wiki's page about IFD warns against the exclusive use of IFDs, do we really want that for all packages available ?
<rekado_>guix-install.R uses the recursive importer and then installs from the generated file
<ix>abrenon: nix has a purity complex
<ix>Guix is already wildly impure
<ix>There's no point putting that arbitrary boundary
<dstolfa>ix: i guess it's not really a purity argument, but rather what happens to users who use this, and then upstream changes underneath guix and suddenly things stop working. also, what happens when people use time-machine and the likes. we'd want this to fail gracefully rather than give backtraces and the likes :)
<ix>Yeah, fair second point. Though on the first, i was just thinking have it as a last resort, not to replace concrete packages
<ix>E.g. i have just generated every package in melpa
<ix>But having done that, i realise i won't use a good half of them, so something lazy would have been nicer
<rekado_>what do you mean by “wildly impure”? It certainly is not in the sense that it’s purely functional package management.
<ix>rekado_: i mean the package manager itself is editable code, i can pull an http stream while evaluating my config. Nix refuses to allow you to even check the time while evaluating, let alone while building
<rekado_>you can’t access the network on the build side.
<ix>Of course
<rekado_>whatever you do to *generate* the config is your business
<ix>You can't do that in nix, it's impure
<ix>Hence why they all hate IFD
<ix>It allows for impure stuff
<ix>My point is, guix alrealy allows for what IFD enables, it's already impure-by-default
<ix>(which is a pro, imo)
<rekado_>well, I don’t agree with the conclusion “it’s impure by default”, but I won’t argue semantics.
<apteryx>ix: impure-by-default sounds a bit too strong? I'd say Guix is pure where it matters for reproducibility (build side)
<ix>I mean it is a semantic disagreement i think yeah, im coming from nix where purity is understood as "pure from the first eval"
<ix>Sandboxed is what they would use for this definition of pure
<ix>I do think their terms make sense, nix configs are pure in that they deterministically evaluate a-la pure functions, guix configs trivially don't by depending on the filesystem/time/network (outside builds)
<ix>Anyway, pointless debate
<abrenon>ah, that's interesting
<civodul>ix: what's "IFD"?
<abrenon>Import From Derivations
<civodul>oh i see
<civodul>in theory Guix supports such things, but in practice the only place where it's done is grafts
<civodul>(i also think "impure" is a misleading term, in addition to being loaded)
<ix>I mean IFD is only required in nix because of the nix-purity thing, guix is a lot more powerful
<civodul>i see what you mean
<civodul>comrades, i've just submitted a soul-searching kind of talk for
<civodul>happy to discuss and coordinate if others want to submit!
<civodul>there are lots of technical topics that could be presented
<abrenon>"soul-searching" ?
<dstolfa>civodul: elaborate please! :)
<abrenon>: )
<dstolfa>civodul: hm, what is the software that they will use for video conferencing?
*dstolfa hopes it's free software
<rekado_>probably involving the question of whether striving for better package management is futile or foolish when many users seem to be content with using blobs that “just work”.
<roptat>LFS describes one method of package management that they call "it's all in my head", so I guess downloading arbitrary blobs that just work is a package management technique :)
<roptat>though a very poor one
<abrenon>hi roptat ! I finally sent that patch for opam
<roptat>abrenon, great! I'll have a look, thanks!
<roptat>what's the patch number?
<abrenon>I don't think it has received one yet, being my first contribution
<dstolfa>ah... you're getting greylisted
<dstolfa>give it an hour... or a day
<abrenon>yeah it's documented very clearly in the manual so I knew about it and I'm not worried : )
<roptat>oh, ok, then I'll also wait :)
<roptat>I worked on opam yesterday too (not the importer):
<roptat>the new test suite is... difficult to work with
<dstolfa>roptat: the opam one?
<dstolfa>roptat: do you have any specific reason for it? i can pass your feedback onto the ocamllabs people if you'd like :)
<roptat>trying to download 4 different archives from github, to run opam in such a way that it calls git to download another version of itself...
<roptat>I managed to work around the downloading of the archives, but I had to disable the test that wants to run git from inside bwrap
<roptat>had some troubles with generated scripts, because of their shebang
<dstolfa>i gather these are difficulties when it comes to functional package management?
<roptat>had a failing test (cli-versioning) only because it expects output on one line but gets a nice formating of the same message instead
<roptat>yes, the first three are clearly related to guix
<roptat>cli-versioning is not clear to me
<roptat>also, one test failed because it tried to compare that I modified with a generated
<civodul>dstolfa: i don't know yet, but i asked them (i'd only participate if it's privacy-respecting and i can use free software)
<dstolfa>roptat: thanks. i'll bring it up next time i see one of them :)
<civodul>dstolfa: as for the topic of the talk proposal: what rekado_ wrote :-)
<dstolfa>civodul: well, hopefully it is!
<dstolfa>would be a shame if it was something like zoom
<roptat>dstolfa, should I send a bug report about cli-versioning?
<dstolfa>roptat: i honestly don't know, might be worth asking in #ocaml?
<dstolfa>it does sound like a bug, but then again my current stack doesn't involve ocaml so i haven't had any recent testing of anything
<abrenon>about tests, I didn't really know where to look but since I changed get-opam-repository and I saw it was mentioned regarding tests, I suppose I should've run them ?
<roptat>ah yes, can you try "make check TESTS=tests/opam.scm"?
<roptat>and maybe fix the tests if they break with the new importer?
<ix>(eval ((@ (guix import elpa) elpa->guix-package) "svnwrapper" #:repo 'melpa) (interaction-environment))
<ix>(eval ((@ (guix import elpa) elpa->guix-package) "svnwrapper" #:repo 'melpa) (interaction-environment))
<abrenon>how could I ever hope the test would pass ?
<roptat>abrenon, :)
<roptat>what does get-opam-repository return now?
<abrenon>it returns the same, but I must admit I turned the input 'opam to "opam"
<abrenon>which is quite contrary to my natural taste
<abrenon>but I wanted to present a lean interface infering the type of repository argument instead of having to manually state what it was (and require two more command-line options)
<roptat>it shouldn't change anything, because the tests replace (mock) it with (const "/tmp/...")
<abrenon>I'll have a look anyway : )
<roptat>well, you can have a look at the logs to see what's failing exactly
<roptat>(tests/opam.log I think)
<roptat>oh I thought there was a specific log file for the test
<abrenon>you're right, it just wasn't reported by the make command I used, sorry
<abrenon>same content though, only some additional header
<abrenon>so any way I fail the first test, because of a type error using 'car'… : (
<abrenon>I should've walked instead
<roptat>try not to use 'car', 'cdr', etc, but use 'match' instead if you can
<abrenon>only opam->guix-package being called with a repo directly instead of a list
<abrenon>hehe I'm not guilty on that one
<abrenon>I didn't use any
<abrenon>(but noticed a couple of them in the importer though ^^)
<roptat>oof, that must be my fault, but I don't see any in the tests :)
<abrenon>no, not in the tests
<roptat>yeah, I tend to like them too much...
<abrenon>it seems to be in some lower-level function performing the match or I don't know what
<abrenon>anyway, it was entirely my fault: the big change, apart from 'opam -> "opam", is, more notably 'opam -> '("opam")
<abrenon>and the test is still passing a single value, not a list of it
<abrenon>I fixed it with 4 characters: "`(," and right after test-repo a ")" : )
<roptat>so get-opam-repository takes a list of repositories now?
<abrenon>oh yeah !
<abrenon>(I was kind of scared how you would react when I just tried to gather as much boldness in my previous answer, but I'm delighted by the outcome)
<abrenon>oh, looks like I just got whitelisted
<abrenon>time to update a first update to my patch ^^'
<apteryx>Has anyone else noticed truncated (failed) build logs when offloading when multiple builds happen at the same time?
<apteryx>Our bugs tracker says no. Reported as 49960.
<roptat>abrenon, btw how are the repos passed from the cli? multiple --repo, do I read it correctly? I think you have to fix the documentation too :)
<roptat>and wait a bit before v3, I have a few more remarks
<abrenon>: )
<roptat>ah, my mail client doesn't want to reply in the patch inline...
<leoprikler>approaching #50000 ever so slowly
<abrenon>how does it feel ? have you seen #1 ?
<roptat>oh, and note in the guix commit message, the first line needs to be separated from the rest with a blank line. Usually, you would have a one line title, a blank line, some free-form explanations, a blank line and the changelog format
<roptat>you can't have a list with - in the changelog part, instead you should do something like * path/to/file (procedure): what changed.\n(procedure2): what changed here to.\n...
<roptat>I love what you did with repo-type :)
<roptat>do you think we could use something better than "throw" there?
<roptat>(also document that you can use a local repository now)
<abrenon>oh thank you : )
<roptat>maybe one of the error reporting procedures from (guix ui)?
<abrenon>I first saw the (leave …) function and it looked great but I couldn't get my file to compile with it so I was a little bit puzzled
<roptat>in update-repository-at, I see a begin after a let, which is useless, a let can be followed by a body: (let ((var val)) instr1 instr2 ...)
<abrenon>then I noticed the use of a throw in master's version, and I thought I'd do the same, and maybe we'd properly catch in scripts/opam to print a nice translated string for each error case (which is why I attached relevant values to the exception)
<roptat>need to go, bbl :)
<abrenon>see you !
<roptat>re :)
<podiki[m]>how does guix handle packages that may include dependency sources in their own repo? (that are elsewhere, but they set up to build from their local copy)
<podiki[m]>sources, not binaries that is
<roptat>podiki[m], usually we remove them and add an input to use our version instead
<roptat>abrenon, also in update-repository-at, you use (and (some-condition) (do-something)) Since you don't use the return value of that one, you should use (when (condition) (do-something)) instead
<podiki[m]>roptat: that would include patching a makefile to include the input source then?
<podiki[m]>(okay I think the package I'm looking at mostly does that for their windows build, so shouldn't be too bad....)
<roptat>usually there's a switch in the configure script to use the system version
<roptat>abrenon, I see in get-opam-repository that you compute (opam-cache-directory (uri-host source)), but if it only depends on the host, you can't get more than one repository from the same host. for instance has multiple repositories we might want to use, and because of caching it might not work as expected
<abrenon>yeah, absolutely, I thought of that and hoped it wouldn't be a big limitation
<abrenon>but we can change that: a hash ? or simply replacing all / in URL by %2f and storing the full path, scheme included ?
<roptat>maybe a hash
<abrenon>I liked to keep a readable name for hackability but a s|/|%2f|ed URL sure looks ugly
<roptat>and prone to error
<abrenon>hmm just as I thought ! now that my get-opam-repository accepts a local path, we can get rid of its mock in the unit tests
***Kimapr8 is now known as Kimapr
<abrenon>so, about the throw occurrences, what would be more appropriate ? you mentioned (guix ui) but it seems to reexport (guix diagnostics) if you're meaning either report-error or leave, shouldn't I import that directly instead ?
<abrenon>also, the strings should be translated, shouldn't they ?
<abrenon>and you said I should document the fact that local repositories are now supported, what did you mean exactly ? in the manual ? in the CLI --help message ?
<roptat>at least in the manual
<abrenon>how can I locate with certainty the relevant part(s) ?
<roptat>just search for opam in the manual :)
*abrenon just realised doc/ was holding the sources of the manual
<roptat>oh yeah, you need to modify doc/guix.texi
<roptat>we already import (guix ui) anyway, and it provides G_ which is used to translate messages
<abrenon>yeah, I sort of saw that, but I tried looking into how the po files were generated and it started talking about specific software, and interfacing with weblate and I got overwhelmed
<roptat>ah, don't worry about that, the dev side is not really documented
<abrenon>I really don't get what's wrong with "leave"
<abrenon>I don't get "name not found" or such errors, I get a weird thing about my code failing to match any pattern
<abrenon>what does (define-syntax-rule …) mean ?
<abrenon>how is leave different from any other regular function ?
<roptat>define-syntax-rule defines a macro
<roptat>that might be the "code fails to match", it can be that you're using the macro wrong
<abrenon>but I don't get why, the occurrences I found were using it like it was a regular function (leave "Reason why")
<abrenon>and that's what I tried to reproduce
<roptat>or maybe what the macro evaluates to doesn't fit where you use it?
<abrenon>hmmm now that'd make sense
<abrenon>and explain the unless wrapping the sexp in opam's script
<muradm>hi guix
<abrenon>instead of simple when
<abrenon>hmmm I guess your comment re: (and ) with a single instruction holds with an (or ) and a single instruction
<abrenon>I suppose the equivalent of (when ) in that case is something like (unless ) ?
<roptat>you can have any number of instruction inside when or unless
<roptat>when executes the instructions when the condition is true
<roptat>unless executes them when it's false (execute unless it's true)
<roptat>but note that when and unless do not return any value
<abrenon>oooh then I can't use that thanks
<roptat>I see also (throw 'package-not-found repositories-specs) that replaces my (format #t ...)
<roptat>I wouldn't use leave here, but I would still report the issue
<roptat>also we need to find a solution for the recursive importer, it's currently broken when a dependency is missing
<abrenon>why not leave when opam-fetch has exhausted all its target repositories ?
<abrenon>when this point is reached, we know the import can't succeed, and we know why
<roptat>wouldn't it be better to continue import as much as possible, and somehow accumulate these issues and report at the end?
<roptat>maybe we can leave it as future work, it doesn't work right now either
<roptat>(because opam-fetch returns #f and and-let* doesn't like that and return #f immediately)
<abrenon>yeah, that was on purpose
<abrenon>to cut the useless work and report as early as possible the fatal error
<roptat>I see, let's leave for now
<roptat>last remark, why did you change the code for the version? does that mean no package still has a version starting with "v"?
<roptat>in opam->guix-package
<abrenon>this is taken care earlier
<abrenon>s/e a/e of a/
<abrenon>namely in get-version-and-file
<roptat>instead of `(,test-repo) maybe (list test-repo) is a bit more readable, also?
<abrenon>which already does the work of trimming the prefix 'v' when needed, wrapping the value with a 'V in that case
<abrenon>I trust you on that one
<roptat>isn't the version overridden in this function with (version (assoc-ref opam-file "version"))
<abrenon>I may be abusing ` , couples now that I've finally understood what they meant ^^
<roptat>unless you need symbols in the list, I find (list ...) more readable
<abrenon>blimey, you are right, version is overriden
<abrenon>that's a shame, why read it from the file again when we took the trouble to collect it to compare them and keep only the latest
<abrenon>when opam-fetch returns, we do know the actual version
<roptat>dunno, if you want to, you can change that part
<abrenon>I should've changed more
<roptat>although, the opam file is still the source of truth, not the filename
<abrenon>but yeah, as of now it's overridden
<roptat>I have no idea how opam would react if the two didn't match
<abrenon>although I can't understand why, but I distinctly remember having done the test with jane-street-headers this morning
<abrenon>and I got a proper guix-style version, without 'v'
<roptat>because the latest version doesn't have a "v"?
<abrenon>it does according to the folder, I checked
<roptat>remember that if there's any version without a v, it's greater than any other "v" version
<abrenon>without ?!
<abrenon>I thought it did the opposite
<abrenon>it returns (latest-version version) if (null? v-versions)
<abrenon>so I understand that there needs to be no v-version for "regular" versions to be even considered
<abrenon>otherwise, the v-versions (so filtered out of all "regular" versions) get considered
<roptat>oh, you're right
*abrenon is relieved
<roptat>the latest version for ocaml-base for instance is v0.14.1
<abrenon>hmmm the opam file doesn't contain any version except opam's
<abrenon>yeah, no, wait, we were both wrong
<abrenon>opam-fetch returns an assoc
<abrenon>this is what is called (quite unfortunately) opam-file
<abrenon>I should rename the variable
<char>How does one allow a port throught firewall in guix?
<abrenon>but it holds one value associated to "version"
<abrenon>which is the one I retrieved and computed already from the folder's name
<abrenon>and "metadata" which indeed gets loaded from the actual opam file
<roptat>abrenon, oh, ok I didn't remember that
<abrenon>me neither, although I've just been working on it
<roptat>char, you can use the iptables-service-type to define your firewall, but it's a bit low-level
<char>There is no way to just do it on command line?
<roptat>oh sure, but it won't be saved on reboot
<abrenon>I'll be going because my day's work is clearly over
<roptat>it's the same command as other linux systems, iptables something
<roptat>you might need the iptables package to get the command
<roptat>abrenon, sure, see you later :)
<abrenon>but I'll take your remarks re: documentation, replacing (throw)s by (leave) and such tomorrow
<char>ropat, thanks. I don't really want it to be saved on reboot anyway
<abrenon>one last thing I need cleared up is what you meant by the recursive importer broken "when a dependency is missing"
<abrenon>I tried importing recursively for a package on one repo having dependencies from another repo and that worked
<abrenon>did I break another use-case ?
<roptat>no it's ok, I mean if it's missing from all repos
<abrenon>ahhh, and that's because of my throw in opam-fetch
<abrenon>which is a good reason to keep it a simple message and keep rolling
<roptat>yeah, but without it, it would return #f, and fail later
<abrenon>well, work for another patch then
<abrenon>well I think that's it
<abrenon>I hope I didn't forget anything but that's the risk with an IRC patch comment : )
<abrenon>see you later !
<abrenon>and thanks a huge lot for your feedback !!
<Fare>is it a known issue that guix's mount can mount --bind /nixos/nix /nix but cannot process a line "/nixos/nix /nix bind defaults" in /etc/fstab ?
<lfam>I'd expect that `mount` is largely the same on all distros
<lfam>In what way does it fail to process the line?
<char>ropat: the port has been added to iptablles -L, but it still isn't accessable. Do I need to restart some service?
<roptat>no it should be ok
<roptat>maybe it can't reply back?
<roptat>there's usually a rule to allow outgoing packets, but maybe it's restricted too?
<char>still nothing. I thought iptables was for port forwarding and manipulation, not firewall
<roptat>it does firewall, maybe you can paste your current settings?
<roptat>(use or similar)
<Fare>lfam: I create the above line in /etc/fstab then I `mount /nix` and it fails with `mount: /nix: unknown filesystem type 'bind'.`
<roptat>char, so the firewall is alright, it accepts anything by default anyway
<roptat>you have another issue, maybe you can describe what you want to do and why you think it's a firewall issue?
<muradm>hi, i'm going to send a patch series on seatd/greetd desktop services, do i need to put a copyright line in files i touch?
<lfam>Fare: The type is "none" and the options are "defaults,bind"
<lfam>muradm: Yes
<roptat>yes, in the first patch that modifies the file in question
<char>I'm trying to do a tryhackme course: It requires uploading a reverse-shell and listening for it with netcat
<Fare>I believe it's the root cause for but there's an error when I try to add a comment on that page.
<Fare>lfam: but type bind and options defaults works well on NixOS, debian, etc.
<muradm>lfam: there is a dependency to be added
<Fare>lfam: thanks for the workaround, though.
<muradm>it has two licenses in repo, mit and asl2
<muradm>which one to specify in package?
<roptat>char, so I suppose you uploaded it, but can't listen for it? maybe it's your router configuration?
<lfam>I don't know Fare. `man 8 mount` says "The filesystem types which are currently supported depend on the running kernel. See /proc/filesystems and /lib/modules/$(uname -r)/kernel/fs for a complete list of the filesystems"
<lfam>And there is no "bind" in /proc/filesystems on Debian
<Fare>lfam: interestingly, your suggestion makes `mount /nix` work, yet during the guix system reconfigure I still get: `In procedure mount: mount "/nixos/nix" on "///nix": No such device`
<char>ropat: I'm connected via openvpn, and i was able to upload it (only accessable through vpn), so I think the router would not matter
<muradm>there is no MIT license in (guix licenses) ?
<lfam>muradm: It's called 'expat'
<muradm>eh. ) expat or asl2.0?
<muradm>which one to prefer
<roptat>char, usually your router will allow outgoin traffic, but not incoming connections
<lfam>muradm: If upstream allows both, we can use both
<char>ropat: I thought if it was vpn the router can't interfere
<roptat>oh sorry, if it's inside the vpn, then you're right
<roptat>maybe your reverse shell isn't working, in any case it's not your firewall
<char>ropat: okay thanks
<lfam>Fare: Are you sure that it works on Debian? I just tried using a type of 'bind' in fstab and `mount -a` complained that this type doesn't exist
<lfam>I'm using Debian Buster
<lfam>(aka stable)
<Fare>lfam: it works fine on NixOS, and I'm pretty sure it at least used to work fine in Debian.
<Fare>(I don't actively use Debian anymore except as a chroot under NixOS)
<Fare>maybe the Linux kernel has changed recently? My NixOS is at 5.12.12, and my GuixSD is at 5.13.8. That sounds like a doubtful explanation, though. Or maybe some kernel configuration option? or mount source code option? Is mount from the same source code on Guix as on other distributions?
<Fare>I tried adding a comment to — this time it said success, but didn't update the page. So I sent email instead. The page still doesn't see any of my comments. Perhaps in a few hours it will see many iterations of said comments...
<Fare>Or maybe it didn't like all my `foo` and ```bar``` in my comments?
<roptat>Fare, your first email needs to be reviewed by a human, so it can take some time (usually less than a day)
<podiki[m]>and is the web form submission working? last I tried it never showed comments I submitted
<Fare>podiki[m], did it queue them for human review?
<roptat>I don't know, but given reports, probably not
<Fare>At the very least the website should warn about this human review process, not to build wrong expectations.
<podiki[m]>I think the form should be disabled if it doesn't work at all, I never saw my comments go through though I later repeated in email anyway (so maybe human review discarded?)
<Fare>And if the webform won't work, it should also disable it.
<Fare>should I use the same site to issue bug reports about the bug system?
<podiki[m]>I thought there was a bug report but failing to find it now
<roptat>Fare, send your bug report to
<roptat>er, bug-guix)
<Fare>Well, if there's already a report, I'd rather comment on it (or let it go)
<podiki[m]>I'm not finding it, and think it is important enough to submit again just in case
<roptat>I don't think it's been reported before
<Fare>Thanks! Writing a bug report by mail...
<podiki[m]>thanks Fare! I think I'll try to comment by webform once I see it, and then followup by email, might be useful for someone looking at logs
<muradm>lfam: is there any description how do you send patch series to
***jess is now known as j
<apteryx>muradm: there's some information in "info '(guix) Submitting Patches'"
***j is now known as jess
<muradm>apteryx: there is one sentence at most :)
<lfam>muradm: Basically, send an introductory email to <>. You will get an email back telling you your ticket number
<lfam>Then, you send your patches to <$>
<lfam>You can create the patches with a command like `git format-patch origin/master`. That will generate a patch series of all the changes between your current Git branch and the master branch on Savannah
<lfam>There is also the `git send-email` command, which works the same way but also sends the patches for you. To intall it on Guix, use `guix install git:send-email`
<podiki[m]>see also for setting things up, etc.
<Fare>guix-bug@ failed. Is it actually guix-bugs@ ?
<lfam>muradm: If you are not working in Git, or can't use `git format-patch` or `git send-email` for some reason, that's fine. It's okay to send your code in whatever method you are comfortable with to guix-patches. Reviewers will sort it out for you, although we prefer you use the Git tools :)
<lfam>The bug-foo thing is a GNU standard, although it does feel a bit weird at first
<muradm>lfam: yes i use git send-mail, but it sends the thread, however in documentation it said that acquire ticket no, and send remaining to another ticket specific email
<muradm>your are saying the same
<lfam>Yeah, the problem with using `git send-email --to` is that each patch will get its own ticket number. One ticket per email
<muradm>just wander if git send-email -7 --compose will do the thing
<lfam>What does -7 do?
<muradm>last 7 commits
<dstolfa>lfam: heh, i did that once with the wrong git config and ended up with 20something new tickets :). in my defense, gmx locked me out of my email because of git send-email for some reason and i had to move .gitconfig files across machines and i ended up moving a fully permissive one :(
<lfam>I think it will create a new ticket for each patch, which is not the right thing
<lfam>Yeah, it's annoying dstolfa
<lfam>I did it multiple times a couple days ago. Out of practice
<Fare>interestingly, the return message said it couldn't deliver to ... would work, instead of ?
<muradm>ok, thats is the issue i wanted to clarify and be sure :)
<dstolfa>bug-guix is the correct one, not guix-bug (i think?)
<podiki[m]>I guess someone could write a little helper that sends an initial message, then gets the bug/patch# from the response to send the patches....(though would need access to reading incoming mail)
<Fare>what I mean is: is the instead of necessary? If so, THAT error message itself is misleading.
<lfam>Fare: It's <>.
<Fare>but the individual numbers are ?
<muradm>normally git send-email will create a thread which most are able to identify
<Fare>OK, let's see how my email fares...
<muradm>but not debugs you say
<lfam>Fare: I let your email through. The first messages from a new person are held for moderation
<lfam>Fare: It's still not clear to me in what context "/nixos/nix /nix bind defaults" is expected to work for fstab. It doesn't work in either Guix or Debian nor is it documented to work
<lfam>I'm not an expert on dealing with file systems in Guix
<lfam>The documentation of "device" in our manual says this: "This names the “source” of the file system. It can be one of three things: a file system label, a file system UUID, or the name of a /dev node."
<lfam>"/nixos/nix" is not one of those things
<lfam>Now, I don't know how to make a bind mount, given that
***jackhill_ is now known as jackhill
<lfam>However, /gnu/store is a bind mount on Guix System, so you could look into how %immutable-store works: <>
<lfam>I see there is a 'bind-mount' flag
<lfam>It does seem like you can pass a directory as a device, based on %immutable-store
<pricly_yellow>Hello, i not figure out a solution how to make service what runs sh file before any graphics(as earlier as posible), please help
<lfam>fare: I made directories /foo and /root/tmp/foo, and then this worked: <>
<roptat>pricly_yellow, you could use an activation service
<roptat>something like (simple-service 'run-shell-script activation-service-type #~(invoke #$(file-append bash "/bin/sh") #$(local-file "")))
<pricly_yellow>How it guarantee what script is run before graphics(xorg,dm,etc)?
<roptat>mh, I think activation services always run before shepherd services, but I'm not sure
<pricly_yellow>Thank you, i just test this service type
<muradm>lfam: here it comes:
<drakonis>that is a good one
<muradm>ah.. didn't screw this one
***iyzsong- is now known as iyzsong
<muradm>next step as it writes in cover is to add gtkgreet and/or wlgreet
<muradm>sometimes and see some talks about "guix home"
<muradm>any article around explaining it?
<muradm>searching "guix home" in the wild is a bit tough
<muradm>link from rde this one i think
<muradm>i was not super fan of it on nix, and not super fan of it on guix, just want to see if it will bite me in some way
<drakonis>well, it can be done better in guix by virtue of being better integrated with guix itself instead of being third party
<drakonis>plus it can be changed and the improvements will propagate to everyone
<drakonis>its a small victory compared to something like home-manager
<muradm>i don't know, it is not trivial task, if let's say system config is more or less the same for most people, after your login manager drops you to your session it could be so wild, also i prefer to abstract my self from system i run on, these home managers introduce very tight coupling
<muradm>if the goal to run shepherd as user service manager you can do it now also
<muradm>packages are managed by profiles out of the box on guix
<muradm>what else, configuration? that is whole different story, i understand mapping configuration of services/os etc to guix guile scheme
<drakonis>its for managing user level configuration i believe
<muradm>but attempting to map everything under .config/* and around it is a night mare
<drakonis>user level services and configuration, as well as anything else that comes up
<drakonis>it isnt trying to map everything under .config/*
<muradm>from link above: "All software can be configured in one language (Guile Scheme), this gives users to ability to share values between configurations of different programs and other benifits."
<drakonis>that's the point
<muradm>is freeciv config will be mapped? )
<drakonis>well... up to you?
<drakonis>someone has to do it
<muradm>too strong boundary for me.. before login and after login is good boundary
<muradm>any way that is another holly war kind i think :)
<drakonis>i think we might be having a language barrier problem right now :V
<muradm>thats whole different story also, right
<drakonis>guix home is a command you can invoke as a user to reconfigure your user owned stuff
<drakonis>its something you use after logging in
<muradm>i don't know, for me after login i layout in the way that it works under guix/nix/arch does not mater, just drop me into session shell, with that way i have to layout specifically for guix
<muradm>of course one can say that you can use guix as package manager on virtually any distro, but it is different of course
<muradm>until no one forces me to run "guix home ..." i fine )
<drakonis>anyhow, i'm a bit confused right now
<drakonis>its optional
<muradm>hopefuly it will stay so )
<NicholasvonKlitz>What does everyone think of this:
<drakonis>oh, that.
<muradm>looks like another trap )
<muradm>you can't do it, we can do it for you
<drakonis>it exists, yes.
<drakonis>it serves to fulfill a purpose that guix does, however without requiring the buy-in
<muradm>Enemy of State (1998): who is going to do monitoring of monitoring's monitoring's ))
<drakonis>who watches the watcher?
<NicholasvonKlitz>Interesting. Beyond just comparing hashing, does guix do any form of signature checking?
<NicholasvonKlitz>Or is it just done in best-faith from the package maintainer
<roptat>some importers are able to check signatures, but most packages don't have any signature...
<roptat>"Not knowing where all your software comes from means hard-to-spot risks to the integrity of your services" -> we know, it's from us :)
<NicholasvonKlitz>roptat: Does this include things like signed commits?
<roptat>no, I think it's limited to gnu packages
<NicholasvonKlitz> -- also does guix have an equivalent to this bot? Or are all package updated submitted manually by maintiners
<roptat>and elpa, visibly
<roptat>all are submitted and reviewed manually
<NicholasvonKlitz>Do you know the motivation for that approach?
<roptat>there is some automation, in the sense that you can run "guix refresh" and it can tell you what to update, and even change the code for you, but you must still check and submit the results
<roptat>I wouldn't trust that automation not to break stuff...
<NicholasvonKlitz>Isn't that why there are tests shipped with packages?
<NicholasvonKlitz>I know that all packages have them, but for the ones that do
<NicholasvonKlitz>*not all
<NicholasvonKlitz>roptat: Also it seems nix is having quite some success with their automation
<NicholasvonKlitz>And I imagine that for packages where a test harness and signatures exists, automatic updates might make quite a bit of sense
<NicholasvonKlitz>to verify authenticity and functionality
<roptat>maybe... guix refresh already does almost all of the job
<NicholasvonKlitz>yeah, that's why I find it an interesting opportunity to explore. It seems we're already so close to get there
<roptat>but even with it, it's not trivial to update packages, because conflicts, new failures, ...
<roptat>but maybe it would make sense to automatically push some updates, but I think you'll meet some resistance from the community if you don't come with numbers and show that it works well
<roptat>(like, is there a risk it could break guix somehow? it should not push updates to master if they have too many dependents, ...)
<NicholasvonKlitz>I can see that for packages which aren't explicity versioned can cause conflicts, but for versioned packages (like crates or other compile-time dependencies for example) I don't see how just adding a new package version would break anything
<roptat>ah, no, but we try to keep the number of versioned packages under control...
<NicholasvonKlitz>roptat: yeah that makes sense
<roptat>anyway, I need to go, see you all later :)
<NicholasvonKlitz>bye thanks for the insight :)
<podiki[m]>Perhaps for a staging type branch where it can then be merged manually to master, or more tests run (for the majority of "simple" packages) before auto merge
<civodul>iskarian, rekado_: hey! i sent a tentative fix for
<civodul>NicholasvonKlitz: as a user, you can always use --with-latest to try to get the latest upstream release even if it's not officially packaged yet:
<NicholasvonKlitz>yeah but that makes things no longer deterministic
<NicholasvonKlitz>which is one of the things I really like about guix
<NicholasvonKlitz>I just see that some packages are taking forever to be reviewed and merged (ex. nheko update has been unmerged and not reviewed for 3 months despite being perfectly fine). I just think if the maintainers would need to bother less with all the "simple" packages, then they could focus more on the "bigger" packages
<civodul>ah sure
<civodul>review, QA, and all that are hard :-)
<civodul>even if automation definitely helps
<leoprikler>If an update is perfectly fine, but no reviewer is there to verify, is it really fine? :P
<podiki[m]>What can average users do to help? Try out patches to test? Submit the simple upgrade patches? Donate money? (The package transformations are awesome, just saw they get reflected in exported manifests, very nice)
<leoprikler>I just had a look at the nheko patches and it seems they all stuff patches to several packages into a single message?
<leoprikler>I'm not even sure if those are multiple commits.
<leoprikler>Okay, looking closer at least 46012 is a series, but still single-message