Episode: 2308 Title: HPR2308: Everyday package operations in Guix Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr2308/hpr2308.mp3 Transcribed: 2025-10-19 01:06:02 --- This is HBR episode 2,380 titled Every Day Package Operations in Geeks. It is hosted by Clacket and is about 16 minutes long and carrying a clean flag. The summary is, here's how I use Geeks in my native name, fleshed out all the overcomments on app 2,198. This episode of HBR is brought to you by An Honest Host.com. Get 15% discount on all shared hosting with the offer code HBR15, that's HBR15. Better web hosting that's honest and fair at An Honest Host.com. Hi, I'm Clacket, 4 months ago or maybe 1 year and 5 months ago depending on your perspective. I interviewed Chris Weber about how awesome Geeks is and why it will take over the world. In the comments I wrote a very short overview of what I actually do in everyday use of Geeks and here I'm going to flesh it out just a little bit more not to watch in audio form. So for me, the killer operation when you run Geeks is Geeks environment and basically if I'm on a dev-based system and I find out about the utility that sounds interesting but I would like to try it out. What I have to do is I have to install it and then I'll try it out and then maybe I like it, maybe I don't like it, I app to remove it. And then maybe there's libraries lingering around and then I would have to do auto-clean to get rid of those libraries. But maybe they were lingering around for some other reason, maybe I'm doing builds somewhere and these were build dependencies, I wouldn't know. But with Geeks, what I can do is I don't have to install or uninstall anything, I just do Geeks environment dash dash add dash hawk and then name of utility or package. What this does is it starts a new shell and it downloads this software and puts it in the magical Geeks locations and in that particular shell the utility is in the path. So I can try it out, I can play with it. If I exit the shell, it's no longer in my path and it won't get in the way of tab completions and the next time I garbage collect it will disappear from disk. So Geeks environment is really cool, makes it easier for me to try out new things without having to think about the sort of administration overhead. So that's one thing I use Geeks environment for. All these commands are, the actual command is just Geeks and then environment is subcommands with Geeks space environment. And one cool utility you can do this with is NCDU. So check that out, it's a graphical disk usage. So basically if you've been using a winder stat on windows or if you've been using bow, bob on the X desktop, then NCDU is the same but for the end curses interface on the console or terminal. So that's one thing I can do with Geeks environment is try things out and if you're doing development of course you can use Geeks environment for the primary intended use which is pull down the dependencies of the thing you're developing. If you write Geeks definition for the package you're developing, just do Geeks environment in that directory where the source code is and it pulls down everything you need to do to have available to be able to do configure, make install or whatever. But I sadly don't develop much so that's not part of my everyday usage. Also among my bash aliases I have some things that I may run from time to time but I don't use them every day. So maybe there's a function there that calls some program but I don't necessarily want to keep that thing in my path. Could be because I don't want things in my path because they interfere with type completion and also when I do package upgrades of course the more packages I have really installed the longer the upgrade takes and if it's something I do less than I use upgrades then it's nice to not have it be part of the upgrade. So for example I have some aliases for doing formatting of source code so I can do JSON less and then it takes a JSON file, formats it will nicely with slanted font and bold font and so on and then pipes it to less. For this I use a command called inscript but maybe I don't do this even every week so I don't want to upgrade inscript every time. So in my bash aliases for JSON less and some other blah blah less aliases I just call inscript using geeks environment just geeks space, environment space dash dash add dash hog space in inscript and then you separate the parameters to geeks environment from the command you want to run. So geeks environment blah blah package name and then dash dash and then here comes the real command and you actually want to use and there comes inscript parameters for formatting and then file name and so on. So that's in my bash aliases that's one other place I use geeks environment and that's a whole show of itself. I have a couple of things I'm pretty happy with that I have at my fingertips when I'm at the command line but that'll be another show. Also regarding the upgrades there are some pretty big packages like chromium, firefox geeks that's icecat, firefox actually I use nix for and pigeon is I also use nix for that I use both geeks and nix and those might also be something I don't want to burn myself with when I do an upgrade. I run them every day of course but basically but the reason I don't want them in my upgrade is because the things that are actually in my profile will not be garbage collected until I explicitly remove old profiles. So I could have like 20 versions of firefox lying around if there are files that are exactly the same geeks optimizes that with hard links but there are also files that change slightly that might be huge in firefox or in one of its dependencies. So by not keeping them around in my profiles when I do garbage collect they will disappear entirely from this and then the next time I do geeks environment to pull them in they will have to be pulled from scratch. So that's a good way to be able to keep old profiles around for the small tools but they're able to more easily throw away the bigger tools. And the way I do that is first I install the tool or well realize the tool with geeks environment and then I look for the dot application files in the share applications folder. And in that application file it says somewhere exec equals blah blah blah for fox for example. So I take that exec line. I replace it with a copy this to some other location where I actually able to edit things you can't edit things in the new store. I edit it to instead of running blah blah blah for fox it runs geeks environment add hog firefox dash dash firefox and then I put that in my dot local so that gnome can find it. So when I press super and then I type firefox glom firefox comes up and I can run it but what actually happens is it acts asks geeks to get the latest firefox according to my package definitions and then run that. So in case I have updated the geeks package definitions then it pulls down your firefox that could take some time so actually usually what I do is when I update my packages I also fetch the latest I do geeks environment add hog these packages so that I have the latest thing at hand on disk but not in my profile. To manage these dot local slash share slash applications files of course I use stow I think I mentioned stow in the previous geeks episode and I will probably do an episode on stow itself. Stow is very cool it manages you can put various disparate things into separate directories and then you soon link them all together to a shared you know the usual bin lib share file structure. Meaning for example till the slash dot local. So geeks environment I use the ad hoc version of it on the command line directly and as part of aliases they run tools that I don't use so often and for big tools actually some of the big tools are moved to my profile recently because they've been crashing a lot in some recent updates so I want to keep them in a way that I can roll them back easily and not have to just run the latest version but when they are stable I've been running them from the geeks environment add hog so normal package management like you would do in any other operating system or package management system geeks space package. If I like this tool and I want to have it available all the time I do geeks space package space dash I for install space package name and then I don't install it on the system I install it for my user so it ends up in my till the slash dot geeks dash profile which is put in my path variable by my bash profile. So that installs the version according to my current package definitions to update the package definitions I use geeks space pull so I do that from time to time maybe once a week and what I actually do is I have a long command line that does all of the geeks actually then I'm basically just a big geeks pull and then geeks package update. So that's geeks space pull pull down the definitions and then it's geeks space package space dash you take all the packages I have currently installed on my user and find the latest version and if it's newer then upgrade or actually if the version of that particular package is the same but one of its dependencies was updated then it will also be updated to use that later dependency and then if you start running out of disk space if I've been doing this for a couple of weeks especially with nicks but also with geeks even though it does hard linking to optimize this space I will have to get rid of some craft lying around that I'm not actually using so that's geeks space GC for garbage collect so what happens then it will clear out after after a couple of weeks maybe it will clear out a couple of gigabytes of stuff from my slash can you follow there and that's stuff that has been pulled down to build something but now it's built and we don't need to build dependencies anymore and old package definitions because those aren't actually version managed anywhere you always just have the latest one there's no back functionality in geeks for package definitions but if I installed some package a week ago and then I uninstalled it or I upgraded it that old version is still in an old profile definition an old profile generation for my user so to get rid of old profile generations and clear up maybe 10 gigabytes of stuff after a while then I would have to first run geeks space package space dash d without any further parameters that will delete everything except the latest generation of my profile so that when I do geeks garbage collect it will erase everything that is not in my latest profile geeks package d also takes a parameter so I can say throw away everything that is older than a week or throw away everything except the latest five generations things like that um now that's basically how I use geeks from day to day use the geeks environment thing install packages I didn't say uninstall packages I sold them do that but that's geeks space package space dash r for remove so geeks environment for trying things out or temporarily using things package dash i for installing things package dash u for upgrading them package dash d for removing old profiles that I don't think I will want to roll back to if the latest profile is working well and geeks gc to garbage collect things um yeah see you next time when I look into some of the uh diversions from this episode radio at hackerpublicradio.org we are a community podcast network that releases shows every week day monday through friday today's show like all our shows was contributed by an hpr listener like yourself if you ever thought of recording a podcast and clicking our contribute link to find out how easy it really is hacker public radio was founded by the digital dog pound and the computer club and it's part of the binary revolution at binwrap.com if you have comments on today's show please email the host directly leave a comment on the website or record a follow-up episode yourself unless otherwise stated today's show is released under a creative comment attribution share like 3.0 life