IRC channel logs


back to list of logs

<Fare>sarahjones, I'm right now building guix on a pinephone for the first time. It's currently building inkscape (that I should probably have commented out, but oh well)
<sarahjones>wow, pine phone supported?
<sarahjones>for pinebook I'm hoping the pinebook-pro.scm config properly makes an image which includes uboot.
<Fare>sarahjones, the phone is supported as a small book. Not sure about phone-specific features.
<sarahjones>good to know
<sarahjones>what config or board to use for guix image creation?
<sarahjones>I recommend not using cellular networks anyways
<sarahjones>fun fact, if you do use pine phone, only phone I'm aware of where you can change the imei number with a command, the EG-25 modem allows that
<Fare>The phone comes with manjaro that has truly terrible Qt-based interface. I also tried with mobian that has a slightly less terrible wayland&gnome based interface. Still terrible.
<pkill9>is the IMEI number part of SIM card?
<Fare>I got a mifi for cellular network access.
<sarahjones>random imei number + anonymous esim (or physical sim) for each geographical region might give you locational privacy. IF you use tor or i2p to funnel all traffic through, as to avoid identifiers based on metadata. Any phone, no matter how open source it is, tracks you at cellular network level. calyx is good but location privacy is a flaw with
<sarahjones>cellular networks
<Fare>between cars being tracked, cameras everywhere, RFID, payments tracking, etc... location privacy is very costly to achieve. Gotta pick my battles.
<sarahjones>guix may be the solution for OS though
<sarahjones>just about winning one battle at a time
<sarahjones>after struggling past getting to work on pinebook, my next battle is how to manually apply luks full disk encryption. I'm used to it being offered at an install option
<Fare>aha, I can give you a workaround in the meantime:
<sarahjones>no documentation anywhere on applying full disk encryption to an already existing system that I can find
<sarahjones>my thought was to keep u-boot and bootable partition on sd card, with the encrypted filesystem on internal storage drive
<Fare>fixboot () { a=( $(grep /gnu/store /boot/grub/grub.cfg | grep -v '^#' | sed 's,^\(.*\)\?/gnu/store/\([^ ;]\+\).*$,\2,' | sort -u) ) ; mkdir -p /boot/gnu/store ; ( cd /gnu/store && rsync -cLRrv --delete $a /boot/gnu/store/ ) ; cp -f /boot/grub/grub.cfg /boot/grub/grub.cfg.bak ; sed 's,^cryptomount,#cryptomount,' < /boot/grub/grub.cfg.bak > /boot/grub/grub.cfg ; }
<Fare>I use lvm on cryptsetup, and run this fixboot function after I guix system reconfigure
<Fare>there ought to be a better way, but until I understand how to do it, this is an ok workaround
<sarahjones>how would one run this function?
<Fare>run it as root after you guix system reconfigure /path/to/my/host.scm
<Fare>I have a shell function that does the running one after the other
<Fare>oh, and I use (targets '("/boot")) for my grub-efi-bootloader
<Fare>(I haven't completed guix on the pinephone yet)
<sarahjones>going offline
<sarahjones>Farewell Fare
<Fare>how do I determine why guix is installing all those gnome packages, and disable them?
<Fare>(especially since one of them is failing to build?)
<Fare>and/or how do I freeze guix to a specific working checkout, or go back to it when the build fails?
<zamfofex>Fare: Have you considered ‘guix graph’?
<johnabs[m]>Hi all, I'm trying to determine how to change my gtk (I think? The one for firefox and such) theme and my mouse cursor, yet I've not been able to find anything in the cookbook or manual. Any tips you can throw my way?
<Fare>zamfofex, thanks!
<apteryx>sneek: later tell civodul: while updating the linux checkout: 11435 root 20 0 12.6g 3.3g 99.3 42.5 270:29.70 R guix
<sneek>Will do.
<apteryx>sneek: later tell civodul I think libgit2 performance is just bad:
<sneek>Will do.
<mmarshall540>What's the proper way to test Guix package definitions that I've hacked on before submitting them as patches? I know how to do "--install-from-file", but I think that's just for individual packages, not something like "gnu/packages/emacs-xyz.scm", right? Section of the Guix Cookbook ("Direct checkout hacking") mentions using "./pre-inst-env", but it's not in the root directory of my Guix git checkout.
<apteryx>mmarshall540: you need to build Guix first, to have pre-inst-env
<apteryx>so, ./bootstrap && ./configure --localstatedir=/var && make -j$(nproc)
<mmarshall540>hmm, I probably need to install autoconf automake, etc then too.
<antero>mmarshall540: for installing auto-stuff you can use 'guix shell -D guix'
<mmarshall540>Okay, it's off and running. Thanks to both of you!
<Fare>how do I control the parallelism of guix builds?
<oat>Where can I get a config.scm to install at basic GNU Guix System?
<oat>I tried with bare-bone.scm. The installation is successful but don't get a login screen and the bootstrap hold on. I guess for missing modules.
<oat>Fare: I don't know what kind of
<zamfofex>Fare: ‘--cores’ (or ‘-c’)
<apteryx>oat: what's your GPU?
<oat>Fare: builds use Guix but I compile the Linux-Libre and using make -j enhance the performance
<apteryx>what do you mean by the bootstrap hold on?
<oat>apteryx: I'm using AMD GPU
<apteryx>is your boot screen black?
<oat>apteryx: No the kernel is loading after some kernel logs the process was freezing
<apteryx>I think amdgpu requires blobs, so you'll want to modprobe that, perhaps
<apteryx>like the installer uses:
<oat>I installed a Trisquel GNU card and was successful then tested with Trisquel GNU x86_64 and was successful
<oat>For that reason the blobs cannot be thrown the error.
<oat>In fact I have a Guix install on a USB stick with a previous release and it works
<kozo[m]><oat> "apteryx: No the kernel is..." <- Hey Oat, I also have an amdgpu and I found that using gdm requires blobs. I got it to work by using slim-service-type for the login and deleting gdm-service-type
<kozo[m]><oat> "apteryx: No the kernel is..." <- @ me if you want the code from my .scm file to achieve this
<oat>@kozon your .scm could help me
<oat>kozo[m]: the blobs are riquiered when you try to use X11 or AMD and Radeon drivers but if you want just to use VGA isn't requiered
<oat>In fact the blobs of Linux-Libre include them
<ph03n1xaimverncc><rekado> "the Scheme primer (linked on..." <- Great!!!
<oat>message <kozo[m]> <Gracias>
<oat>kozo[m]: Gracias I'll use the config.scm on my USB stick I hope to get success
<kozo[m]><oat> "kozo: the blobs are riquiered..." <- Yes, but it won't get past the kernel loading module if you don't get rid of gdm, I found
<oat>kozo[m]: I read yours .scm is good. I don't need the desktop environment right now.
<oat>Guix is slower than Trisquel and Slackware but has many interesting characteristics.
<oat>Richard Stallman is looking for volunteers for Libreboot. Someone interested in contacting him
<lechner>oat / The installation may be slower, but running the programs isn't, at least not in my experience. What I love about Guix is that it ultra-stable. In half a year, I have had zero crashes on any of six machines, even with frequent reconfigurations and gc runs. I hardly ever reboot
<raghavgururajan>> Richard Stallman is looking for volunteers for Libreboot. Someone interested in contacting him
<raghavgururajan>Did you mean to say Leah Rowe?
<sneek>Welcome back lechner!
<lechner>sneek / botsnack
<kozo[m]><lechner> "oat / The installation may be..." <- I find sometimes that guix won't pick up new program installs or updates without rebooting. What is another way to get around rebooting?
<lechner>kozo[m] / Do you use Guix System and Guix Home?
<unmatched-paren>kozo[m]: if that happens, it means your environment variables probably aren't set up right
<unmatched-paren>usually you should be able to just re-source the profile or relogin
<lechner>Hi, locally 'guix system list-generations' identifies the latest system generation as current even though I booted an earlier generation via GRUB (twice). As a result, my latest generation cannot be deleted even though it is defective. Can anybody confirm that behavior? Thanks!
<unmatched-paren>lechner: couldn't you simply roll back to the previous generation again, this time with ``guix system roll-back'' instead of grub?
<unmatched-paren>then you could probably remove it
<lechner>unmatched-paren / you are probably right, but the (current) designation is wrong. i know that because the latest generation did not boot
<lechner>unmatched-paren / in an unrelated topic, your config cannot change into my FUSE-mounted home folder. It drops me into root. I think the 'chdir' happens as the root user, who does not have access to my home folder, instead my own uid. Am I looking at seatd or greetd? Thanks!
<unmatched-paren>lechner: i don't really understand; my configs don't do any chdiring
<lechner>unmatched-paren / well, some part of the login process assumes my user privileges and changes into my home folder. that happens in the wrong order.
<unmatched-paren>lechner: hmm, i think that might be greetd...
<lechner>unmatched-paren / okay, thanks! i'll ask kenny.
<lechner>unmatched-paren / also, I have trouble starting X in a regular terminal. Did you ever try that instead of Wayland? I see
<unmatched-paren>i've never tried x on greetd/seatd, nope
<unmatched-paren>_XSERVTransmkdir: Owner of /tmp/.X11-unix should be set to root
<unmatched-paren>maybe this is related to your previous problem, since there's file ownership involved?
<puppysad>instead of using "guix install" I can use "guix build" to build an app from source?
<puppysad>for package manager
<unmatched-paren>puppysad: guix build won't necessarily build from source
<unmatched-paren>what it basically does is add the outputs to the store, without adding them to a profile
<puppysad>How can I build something locally rather than downloading a binary?
<puppysad>on Debian for example "apt-get install nmap"
<puppysad>for guix would it be "guix build nmap" ?
<robin>guix install nmap
<puppysad>that downloads binaries right?
<unmatched-paren>so does debian :)
<puppysad>why I'm leaving debian
<unmatched-paren>do you want to disable binary substitutes entirely?
<puppysad>how can I do that?
<unmatched-paren>well, be prepared to build a LOT of things, but:
<puppysad>I know, reproducible, but then I have to issue "challenge" every time, and if challenge fails then it is too late
<unmatched-paren>i think that's overly paranoid, but oka
<puppysad>so how can I use package manger to download then build from source locally? similar to apt-src on Debian for exmaple
<unmatched-paren>okay :)
<robin>typically, yes, if a binary substitute is published. there are ways to disable substitute usage, though i don't remember the details (most of my "build from source" programs are self-contained single packages that aren't upstream yet)
<unmatched-paren>ACTION opens guix manual
<puppysad>I have manual open also, just not clear
<puppysad>it is promoting "install"
<unmatched-paren>puppysad: okay, so, you'll want to modify guix-service-type to set (use-substitutes? #f)
<unmatched-paren>in your system config
<unmatched-paren>open it up, replace %base-services or %desktop-services with (modify-services %base/desktop-services (guix-service-type config => (guix-configuration (inherit config) (use-substitutes? #f))))
<unmatched-paren>and then reconfigure
<unmatched-paren>and run ``sudo herd restart guix-daemon'' to restart the guix daemon with those changes
<puppysad>so that disables substitutes?
<unmatched-paren>yup, it's a thing you need to disable in the daemon's config
<robin>you may also want to enable gc-keep-derivations and gc-keep outputs, which will generally keep build requirements around in the store iiuc, reducing the amount of rebuilding you might have to do
<oat>lechner: Thank you for share your experience I'm fresher on Guix but I like it
<robin>"When both are set to ‘yes’, the effect is to keep all the build prerequisites (the sources, compiler, libraries, and other build-time tools) of live objects in the store, regardless of whether these prerequisites are reachable from a GC root." (info "(guix) Invoking guix-daemon")
<puppysad>Guix manual sec. 6.37 "While using substitutes can be convenient, we encourage users to also build on their own, "
<oat>raghavgururajan: You right Leah Rowe the original author
<oat>raghavgururajan: You know why Libreboot left the GNU project?
<itd>Cuirass dashboard: how can one distinguish "Failed" and "Failed (dependency)"?
<oat>apteryx: kozo[m] Muchas Gracias: Thank you so much I found the issue. apteryx you right I forget to add Radeon on the modprob.blacklist this add-on removes the driver Radeon and fix the conflict with Linux-Libre
<oat>lechner: I had time to not use Guix. I was dispersed using Trisquel and Slackware GNU/Linux distribution. I decided to use GUIX for the same reason that everyone in this channel uses a GNU/Linux distribution 100% Free Software
<raghavgururajan>oat: Not sure.
<oat>But we need to improve the system more
<oat>raghavgururajan: That's sad I would like to participate in the GNU project. Well but Libreboot still keeps GPL v3
<sneek>wb nckx :)
<oat>kozo[m]: You can reload GUIX initialization process
<oat>lechner: How do you use your six machines?
<oat>Successful manual installation using the bare-bone.scm 20 minutes depends on your bandwidth
<oat>Just add radeon at the end modprobe.blacklist in Toshiba satellite notebook C40D-A with Radeon HD 8330
<ardumont>hello, guix, i recently tried out guix as an os, read quite some docs but sometimes i feel lost
<ardumont>for example, i don't know nor find how to check herd service log output
<ardumont>so i'm fallbacking to good ol' /var/log, is there another way (to debug issues with a particular service)
<ardumont>another pattern i seem to grasp is that we may have to write ourselves a configuration file for
<ardumont>a service (e.g. /etc/wpa-supplicant.conf) and then refer to it in the guix manifest (if possible), is
<ardumont>that correct? (I'm used to nixos/nix where i could do a bit more directly from nix's dsl
<ardumont>so just checking that's the way)
<tatsumaru>hey guys, does a script exist that I can run on my existing linux distro to check if my hardware is supported by guix i.e. something that compares lspci output with your firmware database?
<apteryx>oat: by the way, it's spelled "Guix" :-). GUIX is some Microsoft thing.
<apteryx>glad you got it working!
<oat>apteryx: thanks for the hints
<oat>ardumont: you could try using pipes and cat. herd is a program that controls shepherd daemon
<ardumont>yes, thx, i'm using `tail -f /var/log/{messages,debug,...}` but i wanted to know if i missed something obvious ;)
<apteryx>ardumont: I sometimes resort to running the service code by hand (!)
<apteryx>you can find the service code via 'guix gc -R /run/current-system/ | grep shepherd'
<apteryx>emacs-guix has an 'guix-scheme-mode' that is able to expand the minimized Guile source into something readable
<oat>tatsumaru: you can use a Trisquel GNU/Linux distribution over a USB stick and test your hardware. I suggest Trisquel GNU because it is 100% Free Software and you can use it without installing it on your hard disk.
<ardumont>apteryx: true, and i did it too now that you mention it (for wpa supplicant at least) once i `ps aux | grep $service` to check how guix triggered it
<ardumont>thx for your hint
<lechner>oat / I have four Guix computers for my family and two cloud servers. I run a few personal domains including Web, DNS and mail. By the way, I use Guix because I love the community. Linux is aging, and it's hard to find a community these days that has a positive outlook. Also, Guix is all about change and making things better, and not about little fiefdoms
<lechner>It's about the group spirit, really
<lechner>Did I mention the functional programming part? That's probably a personal choice, but I like it better than Perl (or Python)
<ennoausberlin>lechner: I totally agree, just wish my scheme-fu would be better. At work I have to use Python and not much time to realize a smaller project in scheme. So - while configuring and building vms / images / container - I hope my scheme skills magically will improve. System crafters latest video is a good start
<Fare>I installed various font packages, but gnome-font-viewer or firefox don't see them... how do I make them visible? I tried fc-cache -rv and xset +fp $(dirname $(readlink -f /run/current-system/profile/share/fonts/truetype/fonts.dir)) to no avail.
<nckx2>My VPS provider is having tummy troubles, so I won't be available today.  That includes mail.
<nckx2>Fare: That xset command scares me but only fc-cache -rv should be needed.  Make sure that the output doesn't complain about unwritable (=outdated) caches, and use fc-list to see if FC is even the problem.
<oat>lechner: You're right. I'm starting to use Guix I like that it has many advantages. The bare-bone.scm manual installation was a great 20 minutes with 10MiB bandwidth. The process from bootloader to login screen took 20 seconds I can minimize the time a little more. Regarding the graphical installer throw issues in this release.
<weidtn>Hey. I use manjaro and guix as an additional package manager. This now created some problems after manjaro updated gcc. Now some "manjaro" programs give the error "symbol lookup error: /gnu/store/5h2w4qi9hk1qzzgi1w83220ydslinr4s-glibc-2.33/lib/ undefined symbol: __libc_pthread_init, version GLIBC_PRIVATE". I think libpthread was
<weidtn>removed in glibc@2.34? But guix only offers 2.33. Removing glibc and glibc-locales from guix does not help. Any other tips?
<rekado>what program?
<rekado>this sounds like the manjaro program loads a Guix binary
<rekado>usually that’s due to environment variables
<rekado>check the output of env for XDG_* variables and LD_LIBRARY_PATH
<lechner>ennoausberlin / yeah, daviwil is our best, and magical spokesperson!
<Fare>I installed google noto for the unicode support (unless you have a better suggestion), but it doesn't show in fc-list :-(
<Fare>and yes the fonts can be seen in /run/current-system/profile/share/fonts/truetype/fonts.dir
<rekado>have you run fc-cache -f?
<Fare>I even tried fc-cache -rv
<oat>lechner: ennoausberlin apteryx kozo[m] Guix is more secure than other GNU/Linux distributions, implementing functional programming and no on
<Fare>how do I query the font path? I can set it with xset, but how do I query it?
<rekado>oat: I don’t think this statement is accurate.
<oat>@fare use guix to query your package font they're usually stored on the same path
<oat>rekado: What do you want to say?
<rekado>“more secure” because of “functional programming”? One does not follow from the other.
<oat>Fare: if you know the extension fonts you can use find / -name *extension|less
<nckx2>Fare: And that -rv output doesn't contain any suspicious write failures?
<nckx2>Fare: I also use Noto, despite its ridiculous size.
<Fare>I see write failures on a few root-controlled directories. So I sudo fc-cache -rv to handle them... but the result is the same.
<Fare>I also tried to guix install font-google-noto as $USER instead of as part of the system configuration... to no avail.
<Fare>maybe I somehow need to restart the X server?
<oat>rekado: No I tried to say when you are using a regular GNU/Linux distribution file system structure is obvious but when you use Guix the file system structure is more difficult to explore for a cracker because he needs to know the directories name and Guix you have a letter chain. Regarding Functional programming the installer config files are in lisp structure and I guess is more clear when you read the code.
<tatsumaru>does Guix have something like smartmontools to monitor drive health/speed?
<rekado>oat: obscurity and weirdness does not make a distro more secure.
<rekado>tatsumaru: there’s a package for smartmontools.
<oat>rekado: I agree. So in your thoughts what do a distro more secure?
<drakonis>i see kde plasma is finally here
<drakonis>how nice, that.
<drakonis>what a time to be alive.
<rekado>oat: release/update/patch processes that quickly and reliably deliver fixes to users.
<drakonis>that and provide any escape hatches wherever necessary
<drakonis>for when the process fails
<drakonis>it shouldn't, but those should be there
<oat>rekado: One principle of security is if you don't have information about the operating system it is more difficult to crack it. I guess. Which security principle has Guix or you consider an Operating system must have?
<Fare>nope, not even rebooting made X see noto and other fonts I installed.
<drakonis>invoke fc-cache
<drakonis>fc-cache -v as a user afaik
<rekado>oat: I’m not interested in discussing this, sorry.
<drakonis>is it installed as a user or system config though?
<Fare>Aha. Let's see if I have a xset fp= from an old xinit inherited from non-guix systems (I shouldn't, since it used to work on nix)
<drakonis>i've already got fonts to work before
<Fare>xset q shows I didn't have any /usr nonsense in my font path... but I didn't have the /gnu/store/...-fonts-dir/share/fonts/truetype either... and even after adding it, fc-cache won't help fc-list find anything.
<oat>rekado: Gracias, Thanks I appreciate your answers. I'm not trying to discuss it. It was just my opinion.
<Fare>drakonis, I installed noto as both user and system, just for good measure... to no avail.
<drakonis>are you keeping your home directory from a previous install?
<drakonis>from another distribution, that is.
<Fare>drakonis, yes, from nixos.
<drakonis>okay, maybe that's causing something to break?
<Fare>Are there some directories I shall wipe?
<Fare>shouldn't that leave system fonts unaffected, though?
<drakonis>i don't make the rules when dealing with xorg
<Fare>and why do I have fonts at all, then (e.g. cantarell and deja)
<weidtn>rekado sorry for late answer, I had lunch. One example program would be yad. Both manjaro version does not work, guix version works. As far as i can tell in the XDG env vars there is no reference to any libs. LD_LIBRARY_PATH is not set (normal on manjaro i think).
<Fare>fc-cache -v shows a list of /gnu/store paths as "Font directories:" but the list is woefully incomplete.
<Fare>even more incredible: deja-vu is listed, but I didn't explicitly request for it, so that's probably some program's default dependency.
<Fare>in your $system.scm, where do you put the fonts? I put mine in the (packages ...) statement. Do they go some other place?
<Fare>aha, yes, it should go in the (fonts ...) field of the xorg-configuration. This explains that.
<rekado>weidtn: what are the values of the XDG vars?
<Fare>next issue: the yubikey works in firefox, but specifically not in chrome when trying to log into google.
<tatsumaru>the fact that you managed to port gnome to shepherd is truly amazing.
<tatsumaru>i noticed during updates that guix will install multiple versions of certain packages, for example 'samba 4.15' and 'samba 4.16' any idea why that happens?
<tatsumaru>also considering 'python2' is no longer supported or maintained by the python core team, does it still make sense to install it by default with the distro?
<rekado>tatsumaru: it’s not installed by default. It may however be needed to build something else.
<rekado>tatsumaru: different variants of a package may be needed as inputs for different packages. If you have an example you can inspect it with “guix graph” to see where the different variants come from.
<tatsumaru>rekado: python2 was installed during the guix installation, I have not installed any packages personally yet
<rekado>tatsumaru: I did not claim you did. It is not installed by default, but it may be needed to build something else.
<florhizome[m]><tatsumaru> "rekado: python2 was installed..." <- what does python -v say?
<nij->Any options for running a guix system in an VM over a macbook m2?
<nij->I saw an option here for m1:
<florhizome[m]>I don’t see why what this guy did wouldn’t work on m2?
<nij->heard many tricky differences between m1 and m2..
<nij->I may just go through what they did and see what happended.
<florhizome[m]>If you are willing to build an image in another Linux vm yourself it seems like this guy didn’t use any official resources from guix himself
<rekado>tatsumaru: looks like gtk / gnome stuff pulls in python2 at some point
<rekado>gtk pulls it in via lash
<nij->Im back
<jlicht>hello again guix!
<tatsumaru>is updating a fresh install of guix supposed to be extremely slow? It's taking 2h+.
<rekado>what is it doing?
<lechner>Hi, does anyone see the incorrect system generation marked as "(current)" when booting a past entry in Grub? I am about to file a bug and would feel better if someone could confirm. Not sure if it matters, but I am using 'guix deploy'.
<tatsumaru>rekado: 'building /gnu/store/somethingsomething.drv' the loader is taking forever to finish.
<rekado>which one exactly?
<tatsumaru>rekado: something-evolution-data-server.drv
<tatsumaru>sry for not pasting the exact output but I am on a different PC at the moment
<tatsumaru>but I think it's been slow on other packages too, I suspect my SSD might be failing
<rekado>it shouldn’t build these things; it should download the binaries
<rekado>does it download anything from
<rekado>does /etc/guix/acl exist?
<tatsumaru>rekado: yes it does exist. it was downloading a while ago "substitute: updating subsitutes from" now it's building
<tatsumaru>looks like it's downloading some of the stuff, and building some other stuff
<f3n1x>hi guixers ! wasn't it
<f3n1x>possible to use an emacs package in order to list and search through guix packages like one can do accross (M)ELPA ? If yes... may you please remember me the package name of ?
<f3n1x>thanks, thanks, thanks !
<unmatched-paren>f3n1x: emacs-guix
<f3n1x>thX unmatched-paren !
<Metanoia>hmm, interesting, when I install a new package in guix I see certain other packages being installed along with it, but later when I try to launch one of those packages I get 'command not found'. for example I saw python being installed, but now when I do 'python' or 'python3' or 'python -v' I get 'command not found'. Does guix have some sort of special instancing system for storing packages only as dependencies in virtual environments rath
<Metanoia>er than on the main system?
<unmatched-paren>Metanoia: so the whole thing about guix is that it stores "outputs" containing built /bin, /share, /lib, etc hierarchy in /gnu/store
<nckx>It's one of the main features of Guix, even. You saw python being downloaded and placed in /gnu/store, but that is separate from ‘being installed’. The latter means that it's symlinked into a profile (those directories you see in $PATH).
<unmatched-paren>when you install something, a special output called a profile is built from the packages you've installed
<Metanoia>oh cool, is this similar to how python's virtual environments work?
<nckx>Something that needs Python will refer directly to /gnu/store/xxx-python-x.y/bin/python.
<nckx>Metanoia: Almost certainly not.
<unmatched-paren>it squishes directories together into a single directory
<unmatched-paren>``guix shell'' is kinda like venv i guess
<nckx>Metanoia: But I don't know how they work much :)
<nckx>Yeah, what ( said, probably.
<dthompson>Metanoia: it's reasonable analogy, conceptually. :)
<unmatched-paren>but anyway, this output is linked to ~/.guix-profile
<unmatched-paren>and there's a /etc/profile file in that profile output which can be sourced to add all the necessary environment variables
<unmatched-paren>e.g. PATH, GUIX_PYTHON_PATH, etc
<Metanoia>is this to make sure a single package doesn't break the whole system?
<unmatched-paren>have a look at ~/.guix-profile/etc/profile to see your search paths, or use ``guix shell --search-paths''
<unmatched-paren>sorry, not guix shell --search-paths...
<unmatched-paren>what's the command to list search paths in a profile? i forgot :)
<unmatched-paren>Metanoia: not really.
<unmatched-paren>only the packages you install will be in ~/.guix-profile, so no (e.g.) libqt
<unmatched-paren>if you have a qt package, its executable will embed a direct path to the library directory:
<unmatched-paren>e.g. /gnu/store/...-qtbase-.../lib
<unmatched-paren>so there's no need to install qtbase
<unmatched-paren>this allows us to have multiple versions of the same library installed at a time, for instance
<unmatched-paren>a package can use both qtbase-6 and qtbase-5
<unmatched-paren>s/a package/packages/
<Metanoia>hmm, interesting, when is this most useful
<unmatched-paren>one might refer to /gnu/store/...-qtbase-6.3.1-.../lib, and another might refer to /gnu/store/...-qtbase-5.15.5-.../lib
<unmatched-paren>Metanoia: this setup also allows us to have our venv-like feature ``guix shell'' basically for free
<unmatched-paren>``guix shell'' builds a profile directory, but it doesn't link it anywhere
<unmatched-paren>instead it creates a new environment that uses this profile directory *directly*
<unmatched-paren>try this: ``guix shell guile --pure'' and check the value of ``$GUIX_ENVIRONMENT''
<unmatched-paren>it will be a profile output in /gnu/store that contains only guile
<luis-felipe>Hi, is it normal to get this error when you try to reconfigure a newly installed system without "guix pulling" first?
<luis-felipe>guix system: error: aborting reconfiguration because commit 682639c107 of channel 'guix' is not a descendant of bb04b5e0ce
<Metanoia>unmatched-paren: this is what I got: /gnu/store/5q2h4rkplgj7xss0r9jl8vg1721xspmm-profile: Is a directory
<unmatched-paren>for example
<unmatched-paren>(we have to exit the guix shell before lsing because this shell doesn't have ls, since i didn't add coreutils :))
<unmatched-paren>if you leave off the --pure, the shell will inherit your base environment
<unmatched-paren>so it'll be able to access anything from outside too
<unmatched-paren>there's also --container and the new, shiny --emulate-fhs
<Metanoia>oh I see, so the packages listed after 'shell' are the ones you want to include in your new env?
<unmatched-paren>Metanoia: yup
<unmatched-paren>Metanoia: if you do ``guix build PKG'', it'll display the output path of *just* that package
<Metanoia>don't this store dirs start to take up much space at some point
<unmatched-paren>rather than a profile made by squishing a bunch of packages together with a /etc/profile and such
<unmatched-paren>Metanoia: here's a package's output, as an example:
<unmatched-paren>Metanoia: well, guix does take up a bit more space than your average package manager, but not that much
<unmatched-paren>and there's ``guix gc'' which cleans up any store paths that're no longer being used
<Metanoia>like a garbage collector
<unmatched-paren>this setup also allows for roll-backs; your previous profiles are stored, allowing you to switch back to them at any time
<unmatched-paren>with guix package --roll-back
<Metanoia>pretty cool, I will invest some time into the documentation to get acquainted with guix
<unmatched-paren>Metanoia: yup
<unmatched-paren>the storing of previous generations does take up quite a lot of space, so you can delete previous generations with ``guix gc --delete-generations''
<nckx>luis-felipe: Short answer: yes. Long answer: the ‘guix’ command that created your new OS will install an older (packaged) ‘guix’ command. The one you'd see with ‘guix show guix’) as part of that OS. It's not that much older, and good enough to bootstrap a ‘guix pull’. Guix cannot install an exact copy of itself (yet?).
<unmatched-paren>these same mechanisms apply to system and home configs; ``guix system reconfigure'' and ``guix home reconfigure'' build special system directory outputs
<nckx>luis-felipe: I fudged the edit. Meant to write ‘will install an older (packaged) ‘guix’ command as part of that OS’.
<unmatched-paren>Metanoia: the difference between guix system and guix home is, of course, that they are generated from a declarative .scm file
<unmatched-paren>rather than imperatively by mutating a profile manifest
<unmatched-paren>well, i suppose it's not really mutating it
<unmatched-paren>it's taking it, adding stuff to it, and rebuilding the profile
<unmatched-paren>Metanoia: make sure to look at rather than
<luis-felipe>nckx: I see, thanks.
<unmatched-paren>the devel manual is up to date
<unmatched-paren>to the latest master commit, which is used by guix pull
<unmatched-paren>guix does have releases but they're ceremonial and only really matter for the installer
<Metanoia>when I try to open links directly from irc I get a popup 'the browser command xdg-open is invalid'
<unmatched-paren>Metanoia: bug alert bug alert
<unmatched-paren>(in whatever IRC client package you're using; which one is it?)
<Metanoia>pidgin, maybe i should switch to emacs for IRC
<unmatched-paren>it should be referring to /gnu/store/...-xdg-utils-.../bin/xdg-open rather than just plain xdg-open
<unmatched-paren>so that it works without installing xdg-utils manually
<unmatched-paren>but there's no way to do that automatically, so we have to patch in direct binary invocations when we find them
<nckx>‘Ceremonial’. Nice.
<unmatched-paren>nckx: ?
<nckx>Good word.
<unmatched-paren>...i see.
<unmatched-paren>(I was worried I'd mispelled it in a humourous way for a moment there :P)
<nckx>Oh no, sorry. I just mean I might snarf it to succinctly describe Guix releases in a single word.
<nckx>-> Meaningful, and yet also not.
<unmatched-paren>ACTION wonders where "snarf" comes from, as they've never heard it outside the internet
<unmatched-paren>Hmm. "(transitive, intransitive, slang) To expel (fluid or food) through the mouth or nostrils accidentally, usually while attempting to stifle laughter with one's mouth full." -- wiktionary definition 3 :P
<unmatched-paren>Definition 4 makes sense here though.
<unmatched-paren>"(transitive, slang, computing) To slurp (computing slang sense); to load in entirety; to copy as a whole.
<unmatched-paren>Metanoia: i'll write a quick patch to fix that, one moment :)
<unmatched-paren>Metanoia: tip: ``guix build -S PKG'' displays the store path for a package's source code :)
<nckx>One of those fun words that are their own antonym. TIL.
<Metanoia>hmm, guix build -S pkg, downloads the package for me
<unmatched-paren>If you're drinking milk while reading definition 3, well...
<unmatched-paren>Metanoia: it's downloading the source
<unmatched-paren>it should print out a store path at the end
<Metanoia>oh yeah
<unmatched-paren>probably ending with .tar.*
<unmatched-paren>how do i generate a makefile from a
<unmatched-paren>ah, right, configure, of course
<Fare>Yikes, I'm trying to install guix on a pinephone (aarch64), and it's in the process of rebuilding rust...
<Fare>maybe I should somehow not have pulled, and/or have used some stable branch as the channel? How do we do that?
<tribals>Hi, folks!
<rekado>aarch64 has two broken build nodes
<rekado>so it’s currently unable to build everything in time
<tribals>I'm trying to build some package, it requires pango. I'm trying to build it in guix shell first, as it is simplier to test first - it is ever builds? Package uses meson build system. I used gcc-toolchain and meson as guix shell's packages. But I'm getting error
<tribals>Did not find CMake 'cmake'
<tribals>Found CMake: NO
<tribals>Run-time dependency pango found: NO (tried pkgconfig)
<tribals> ERROR: Dependency "pango" not found, tried pkgconfig
<tribals>I tried including cmake to guix shell's packages as well, but with no luck
<tribals>still getting error
<rekado>what does your “guix shell” command look like?
<tribals>guix shell --pure gcc-toolchain pkg-config meson ninja wayland wayland-protocols pango cair
<tribals>Last is "cairo"
<tribals>Any ideas?
<gnucode>howdy guix! I saw (and-map ...) in the guix source code. What is and-map?
<nckx>2008 ♥
<gnucode>nckx: thanks!
<gabber>what's the straight forward way to combine - say - android-udev-rules and the udev rules from rtl-sdr?
<rekado>tribals: if there’s a log of what the build system tried I suggest checking it.
<nckx>gabber: Combine into what, for what reason?
<ss2>hello. This seems a new feature. Where do these dumps go to? :)
<ss2>Just trying out the latest installer, which is failing.
<gabber>i just want to make use of a multitude of udev-rules. IIRC i can't just define multiple udev-service-types. i have one such udev-service-type defined for teensy (a string within my system config file) combined with the package android-udev-rules. now i want to add the rules from the rtl-sdr package
<podiki[m]>you can have multiple udev-rules-service which i what you want to use here
<podiki[m]>e.g. (udev-rules-service 'headsetcontrol headsetcontrol) where the headsetcontrol package has udev rules that will be used
<rekado>ss2: you can paste to
<podiki[m]>I also, for unknown reasons, use the udev-service-type where i've added in a configuration from a package...probably should simplify that
<ss2>alright, was just about to think the installer would paste things online.
<gabber>podiki[m]: do you mean i should use (udev-rules-service) or avoid that?
<podiki[m]>udev-rules-service should be all you need
<podiki[m]>and you can have multiple of those as needed
<podiki[m]>I was just saying I also had the other form and now I don't know why :) probably from before I knew the easier way
<gabber>perfect, thanks for clarification!
<podiki[m]>welcome. and i believe the new rules should be active as soon as you reconfigure, without a reboot
<gabber>another question: i tried to reconfigure and have this (i think unrelated to my udev-adventures) kinda weird error message . i don't think i changed anything regarding efi or the boot partitions
<nckx>Sadly, there is no known answer to that question.
<nckx>It's just a thing that happens, probably due to buggy hardware, but Guix manages to tease it out, probably because it installs the bootloader much more frequently than other distributions.
<nckx>You could try the removable grub bootloader variant if you don't multi-boot, or care.
<nckx>Or ‘grub-efi-removable-bootloader’ to give the ‘actual name’.
<nckx>Deleting variables sometimes works on some machines:
<nckx>* — there is a theoretical risk inherent in deleting these, so exercise caution.
<Guest4396>hi guix!
<acrow>Why would mg issue: panic: Terminal setup failed after creating a shell container with -e '(@ (gnu) %base-packages)'? What am I forgetting?
<gabber>nckx: thanks for the link! this makes me somewhat uncomfy. are those entries in NVRAM the entries i can see in /sys/firmware/efi/efivars/ ?
<ss2>rekado: reported to:
<nckx>gabber: Yes.
<acrow>I tried adding ncurses-with-tinfo and obtained the same result.
<nckx>I thought I was being clever too, but no dice.
<lilyp>quick question: are pretrained ML models downloaded over the aether fair game or should we deblob them?
<nckx>Currently pulling Guix so --expose= is hopefully unbroken.
<nckx>acrow: Can you strace mg?
<acrow>lilyp: Good question. I have no idea where we're headed on that. :(
<podiki[m]>nicely the fix to mounts with guix shell means you can just do --expose=/dev now (before it would fail)
<podiki[m]>(handy when needing hardware access and not wanting to figure out all the exact paths)
<nckx>ACTION nods.
<acrow>nckx: I can add strace to the environment and give it a shot, sure.
<nckx>podiki[m]: Does --expose=/ work now?
<nckx>ACTION little chaos gremlin.
<nckx>acrow: Thanks! My kernel disallows unprivileged strace.
<podiki[m]>nckx: just tried, and yes
<roptat>lilyp, I wouldn't want to train a neural network as part of a system reconfigure...
<acrow>nckx: Just the bits at the end.
<roptat>but we can't really consider these as static data, it works more or less like code
<roptat>and more worrying, we probably don't have the power to train one on the build farm, and most are trained on specialized hardware using proprietary software
<gabber>how does the entry for my Guix System look in the efivars? is it one of the "Linux Boot Manager" entries?
<lilyp>well, I wouldn't directly want to train one – just remove code paths and tests that depend on them
<acrow>nckx: I tried --expose=/dev and --expose=dev --- and they failed.
<nckx>There's devpts in the container, that won't be it.
<nckx>It's clearly trying to set up terminfo (setupterm()) and failing. Hm.
<nckx>Try --preserve='^TERM$' (or set TERM=linux manually, in the container)?
<nckx>I bet that might certainly be it perhaps.
<nckx>If that is the case, it's a terrible error message. Most other software will explicitly say that TERM is unset.
<nckx>But I'll reserve judgment :)
<acrow>nckx: That was the trick1
<nckx>ACTION unleashes judgment.
<podiki[m]>and then give you no/crappy prompt with poor keys support :)
<podiki[m]>has anyone noticed the irc logs now use ACTION? perhaps appropriate for the unleashing of judgment though
<acrow>nckx: Adding that do my tidbit list
<nckx>podiki[m]: That's because we no longer use ZNC, but a from-scratch Guile bot.
<podiki[m]>I thought it was from my brief foray into emacs irc client yesterday, but I guess not
<nckx>goggles (the renderer) still handles ‘* me does thing’ fine, so one could tweak the bot if one were so inclined.
<nckx>I'm not being obtuse, I have no idea where goggles-bot code is hosted.
<nckx>Unquoted '*' stroke again.
<nckx>Correction: ‘* me does thing’ came straight from the old logs, not the pretty-printing. So goggles would have to be taught to explicitly pretty-print ACTION. Or, if the goal is to remain compatible with ZNC, goggles-bot needs to remove ACTION.
<acrow>nckx: Curiosity gets the best of me -- goggles-bot replaces ZNC (zero-network computing, the wide-area network X caching speeder-upper thing)?
<nckx>The IRC bouncer.
<acrow>That makes more sense.
<nckx>It's meant to be a bot but it worked as a side-effect.
<nckx>grr. NOT meant.
<rekado>it’s an embarrassing story. We wanted IRC logs, and I thought: “hey, my ZNC thing writes logs; guess we could run that to log the channel until we figure out a proper solution.” We did not, in fact, look for a proper solution.
<rekado>goggles.scm renders ZNC-style logs, so now the IRC bot needs to produce ZNC-style logs.
<acrow>rekado: No, it's a lovely story.
<nckx>I think it's pretty clever.
<podiki[m]>it's all fun and games until you end up setting a standard
<lilyp>Your logs are missing XML.
<acrow>guix is the standard
<the_tubular>I wish acrow :(
<nckx>VISUAL=ed guix edit
<gabber>nckx: i deleted a bunch of entries with `efibootmgr` but i still get the same error. how sure are we that the problem stems from a full NVRAM?
<acrow>The embarrassing story is that, somehow, I confused ZNC with No-machine networking. Sorry about that. Along the lines of this discussion, should I use znc instead of pounce? or is rekado the only one using znc? :)
<fidel>I have guix on my Kubuntu install, and for some reason guix's python is interfering with system python:
<fidel>$ which python3
<fidel>$ virt-manager
<fidel>/usr/bin/python3: symbol lookup error: /gnu/store/5h2w4qi9hk1qzzgi1w83220ydslinr4s-glibc-2.33/lib/ undefined symbol: __libc_pthread_init, version GLIBC_PRIVATE
<fidel>Anybody has any idea of what could it be, how to fix it or where to research? I would rather not have to uninstall guix's python
<nckx>gabber: ‘Full’ is not the operative word, ‘buggy’ is :-/ It's not as simple as ‘delete one entry, now you can add one entry’. I had some success deleting several ‘files’ from /sys/firmware/efi/efivars that were reported safe. That's not a recommendation, but it's what I did…
<nckx>The only *recommendation* I'd give is to replace UEFI with something else, but that's prohibitive for most people/machines.
<nckx>gabber: Did you try the removable variant?
<nckx>Or do you boot other OSes?
<nckx>fidel: I'd suspect an environment variable. Does ‘env’ contain [links to] /gnu/store?
<nckx>Specifically LD_LIBRARY_PATH or so.
<acrow>fidel: Are you running on a foreign distro?
<fidel>acrow: Kubuntu
<fidel>nckx: env | grep LD_LIBRARY_PATH finds nothing
<fidel>nckx: no other OSes
<nckx>That last one was for gabber.
<abhicherath[m]>why is this ( cargo still around?
<nckx>{LD_,}LIBRARY_PATH was just an example, but I admit I was expecting that.
<fidel>that gave me the idea of grepping env for guix
<abhicherath[m]>is it needed for anything? (of course now there's rust:cargo)
<nckx>abhicherath[m]: Possibly because it's a staging change.
<nckx>(‘822 dependent packages’) of rust-cargo-c.
<abhicherath[m]>nckx: where'd you see that?
<nckx>I ran ‘guix refresh -l rust-cargo-c’.
<nckx>Before that I ran grep.
<abhicherath[m]>ooo ic
<abhicherath[m]>nckx: this means transitive stuff needs it to build?
<gabber>nckx: i did not (yet). and i don't boot other OSs. i am somewhat reluctant since i fear making my machine unbootable (and with that un-usable). not sure how realistic that scenario actually is, tho
<nckx>abhicherath[m]: Yep. Stuff like remmina and gnome-tweaks, just to give 2 random examples.
<abhicherath[m]>👍, thank you you've given me yet another tidbit for my notes folder :D
<nckx>gabber: If this is about using ‘grub-efi-removable-bootloader’: it should be safe.
<nckx>I can't guarantee it. That applies to anything computer. I can only say I'd do it.
<abhicherath[m]>wait but this is rust cargo-c right
<abhicherath[m]>for rust-cargo guix refresh -l rust-cargo shows nothing
<gabber>there's also this ominous "reset NVRAM" boot-option (by pressing some wicked key combo at boot). do you think this might be worth a try? not sure what it actually does -- i doubt it completely wipes/resets NVRAM
<nckx>gabber: Do you have a bootable USB drive?
<nckx>Otherwise, I'd not touch it, but if you do, it would be a thing I would personally try :)
<nckx>abhicherath[m]: Yes, it's suboptimal. See <>. See that #:cargo-inputs ? It's a bit of a hack, and unlike the regular ‘inputs’ field, is not tracked by tools like ‘guix refresh’.
<nckx>That's why I ran grep.
<nckx>(In the Guix source checkout.)
<rekado>the antiox build system fixes this
<gabber>nckx: thank you so much for your input! i think i better wait with these experiments until i have another machine in proximity; i really don't want to look stuff up on my phone in case this machine doesn't boot anymore (:
<abhicherath[m]>i understand
<abhicherath[m]>well not sweet kinda weird
<abhicherath[m]>but I get it thanks
<abhicherath[m]>rekado: what that
<nckx>Yeah, the thing itself isn't sweet, but as rekado says it'll soon be past.
<nckx>But there are other fun ways dependencies can be hidden! Like inheritance.
<nckx>abhicherath[m]: A new Rust build system.
<nckx>As in, Guix build system.
<nckx>gabber: Understandable. Honestly, you can ignore this error, probably indefinitely.
<nckx>ACTION AFK. 
<podiki[m]>wow spam issue reports, can't say I've seen that before (well, spam from real users is another thing)
<nckx>(mobile) Ugh what?
<podiki[m]>on maximed's repo linked above
<nckx>Oh :)
<podiki[m]>nothing is scared
<podiki[m]>sacred even
<gabber>nckx: so the new system is installed and activated, even though i get the error? i was under the impression my `guix system reconfigure` failed
<nckx>It almost certainly didn't, IIRC.
<nckx>The last step fails, but even grub.cfg is updated before thot.
<gabber>so maybe it might be a good idea to catch that error and display a clearer error message?
<oat> The latest version USB stick installer has issues over Toshiba Satellite C40D-A in fact it overwrites automatically MBR without permission
<oat>Toshiba BIOS is disabled features on Linux-Libre Kernel
<oat>If someone has a suggestion let me know
<abhicherath[m]>Is there a way to recursively import crates io packages from a cargo lockfile? If not no problem I'll write it, but guix import can only do crates io packages directly right?
<oat>rekado: some suggestions CPU AMD A4-5000 APU with Radeon(TM) HD Graphics
<jonsger>oh, did we gain KDE recently?
<podiki[m]>looks like it! or a lot of kde including plasma desktop I think
<pkill9>there is a metapackage for kde plasma desktop so yeh, but no service currently afaik
<oat>Also the Guix newest version changed the partitioning table
<nckx>oat: What do you mean exactly by overwriting the MBR?
<rekado>apteryx: I’ll be in the data centre tomorrow. Is it safe to move the big SSDs from 25 to 29?
<oat>nckx: The newest installer records the HDD MBR replacing it with USB MBR. I am trying to recover the partition table
<rekado>apteryx: would it be okay to use two of the SSDs in the failed aarch64 nodes?
<nckx>oat: When?
<nckx>What is a ‘USB MBR’?
<nckx>(And how does it differ from a ‘HDD MBR’?)
<rekado>it will likely take more than a week before my RMA claims can be processed, so we’ll have only one aarch64 node (with an SSD that might fail soon as well).
<oat>nckx: Happened a couple hours ago. The MBR is where your GRUB and your partition table are stored, usually the first 512 bytes of the device store
<oat>nckx: USB and HDD differ in electronic structure
<nckx>I know what an MBR is.
<nckx>With ‘when’, I meant at which exact point during the installation (or at least: when did you notice the MBR had been overwritten). Sorry I was unclear.
<oat>nckx: I guess when grub loads the Linux-Libre kernel because then the display flashing black and I reboot
<nckx>During the very first live system early boot?
<nckx>Before any Guix userspace runs?
<abhicherath[m]>how do I get packages from the tip of the git repo?
<oat>nckx: Q1: Yes. Q:2 I don't know
<nckx>Well, when GRUB loads the kernel, there's a good second of kernel init (or more) before init is called. If the machine resets almost immediately after GRUB loads the kernel, there's no time for any Guix code to run.
<nckx>But this is extremely, bizarrely odd.
<nckx>abhicherath[m]: The Guix git repository?
<abhicherath[m]>yea im a little confused
<abhicherath[m]>cause I see rust 1.65 in the guix git checkout
<abhicherath[m]>but when I run guix pull && guix install rust@1.65, that doesn't seem to work
<rekado>“guix pull” is how you update your “guix” command
<rekado>what does “type guix” say?
<rekado>“guix pull” updates ~/.config/guix/current/bin/guix
<oat>nckx: that's right any way the issue crashed the system
<abhicherath[m]>guix is /home/$MYHOME/.config/guix/current/bin/guix
<abhicherath[m]>o do i run guix package -u
<rekado>when you say “that doesn’t seem to work” — what happens and what did you expect to happen?
<abhicherath[m]>I expect rust 1.65 to be installed
<abhicherath[m]>but it says package not found for version 1.65
<rekado>the reason is that rust-1.65 is not exported
<rekado>only “rust” is, which works with rust-1.60
<abhicherath[m]>right? cause it downloads 1.61 here
<nckx>oat: Then everything hinges on how the MBR has changed. Saying that ‘HDD MBRs’ and ‘USB MBRs’ have a different structure won't cut it—what, exactly, has changed? If the old MBR was overwritten, what are you comparing the new one to? How are you inspecting the MBR, and what do you see?
<Fare>rekado: how come a same guix system reconfigure has both rust 1.54 and rust 1.55---and maybe 1.65 too if that's the latest?
<rekado>abhicherath[m]: you could do this: guix build -e '(@@ (gnu packages rust) rust-1.65)'
<rekado>abhicherath[m]: awkward, I know.
<rekado>Fare: I don’t know. Does “guix graph” help you answer the question?
<abhicherath[m]>rekado: syntax error: source expression failed to match any pattern
<nckx>Is there a reason rust@1.65 isn't exported? I'd expect that to be commented. Oversight?
<nckx>abhicherath[m]: Add another ) at the end.
<abhicherath[m]>also where's the hash come from for the channel?
<nckx>Oh no, never mind, HexChat font issue.
<nckx>Yes, I don't see the last character of most messages. It's wild.
<abhicherath[m]>I see bddb43b as the start of the hash
<abhicherath[m]>in guix pull
<rekado>nckx: no idea why it’s not exported.
<abhicherath[m]>which doesn't match the commit hash
<abhicherath[m]>for the repo
<nckx>abhicherath[m]: bddb43b is the latest commit.
<abhicherath[m]>ah derp