We can't find the internet
Attempting to reconnect
Something went wrong!
Attempting to reconnect
System Crafters · 933 views · 25 likes
Analysis Summary
Ask yourself: “What would I have to already believe for this argument to make sense?”
Worth Noting
Positive elements
- This video provides a rare, transparent look into the thought process of a developer architecting a system-level tool from the ground up, including the trade-offs between different Linux philosophies.
Be Aware
Cautionary elements
- The creator's use of AI to generate his programming language's core is a significant shift in software authorship that may influence how viewers perceive the 'craft' of coding.
Influence Dimensions
How are these scored?About this analysis
Knowing about these techniques makes them visible, not powerless. The ones that work best on you are the ones that match beliefs you already hold.
This analysis is a tool for your own thinking — what you do with it is up to you.
Related content covering similar topics.
Transcript
Heat. Heat. [music] What's up everybody? Welcome to System Crabers Live. I'm David Wilson and we're back again with another Friday stream where we get together as a community and talk about whatever topic I've come up with. And this week is no exception. Yes, the banner is up. The music is running. We're a little bit late. Uh lateness on the lateness. I scheduled the stream 15 minutes later than usual. Usual and I'm still a little bit late. So um sorry. Sometimes you just got to know that uh things are not in my control. And that's all I'll say about that. So um let me see where I'm all at here. Loud noises. What loud noises? Oslo, did you forget you had the tab open in your browser and then all of a sudden the music starts playing? This happened to people before. Let me know if you hear buzzing noises from my microphone though, cuz that could happen. Um, so yes, it's Friday. Uh, next week is Christmas, right? >> [music] >> um that holiday that comes once per year and uh causes a whole bunch of uh consumerous behavior and uh you know people being away from from work, things of that nature. I don't know I'm describing it that way. Yes, Christmas is a is a fine time of the year. It's the the general holiday season, let's say. So anyway, yes, uh last Friday before the holidays here, but I think probably we will have a stream next Friday, I think. I'm not out of town, so I should be around. We'll see. We'll see what happens. But um anyway, happy holidays to all of you who celebrate whatever holiday that you celebrate this time of year. And uh thank you for being here. I appreciate uh all of you being here. Gun says pola. Yes, pol seems to know a lot of Greek phrases and words and stuff. Let me pull the the chat up on the screen here. So, let me say hello to the people who are here so far. Uh Cal, Oslo, uh Auntie, uh Gun, Edge Crusher, Niklaus, Alternate V. Uh let's see who else. Glenn, uh Gorax Axe, not never sure how to pronounce your name. And uh on the YouTube side, I forgot to bring up the stupid YouTube. Let me see the stupid YouTube. Where's my cursor? I have two screens I'm dealing with here. So, you know, it it causes me some some issues. Where is it? Here it is. Okay. Here it is. Who's on the YouTube side? Now, I'm going to see. Uh, Trollbridge and uh, DPX. Hello to all. Trollbridgeidge says, "I was just watching your Emacs from Scratch again." Well, that's cool. I haven't seen it in a long time. Hello to Kalabaya and to Eric. All right. They've changed up the YouTube streaming interface. Now it's bigger. And actually, it's kind of better uh to be honest. But there we are. Oswway says, "How dare you not consider the people who don't celebrate holidays?" Well, happy non-h holidays to you as well because you know that's perfectly valid. I mean, uh I'm not really that attached to Christmas, let's say. I mean, it's cool and all, but uh it's not really like a big thing for me other than just, you know, spending time with family. the usual thing that you would do around this time of year. Gift giving can be fun. Okay, so let me get the show notes started up here because I don't want to waste any time. If I can get my cursor back to the correct screen again. All right, let's go. So, slightly pro provocative title today. Not really. Not really intended to be, but you know, it's it's what it is. We'll see what I'm actually talking about in a moment. Open, please. And we'll also see whether um I actually can make any progress on this because I have not tried to set up a VM in the way that needs to be set up. And we're already an hour and a half left in the stream. Uh what did I call this stream? This is called sketching a and we don't have to like make a ton of progress either, but sketching sketching a new tool for declarative systems. Okay. So, I'll explain what I mean by that. So, what's the news this week, folks? Because I've been very busy working on Sigil, and I haven't really been paying attention to what else is going on. Um, I mean, the first thing is that uh the Black Friday discount on hands-on goals for beginners is still on because I just left it up and I haven't bothered going back to turn it off yet. So, if you haven't done that yet, then you can go still do that cuz I have been lazy and haven't dis disabled the discount. Um, what else has been going on in the world? Anybody know anything that's been happening system crafter wise? Any new cool things going on? Project projects people have been working on that I have um [music] forgotten about? Yes, Emac 20 2025. Thank you, Auntie. Uh, Emac. Uh, that happened last weekend or was it? Yeah, it was last weekend, right? Uh talks. I believe all the videos are here. That's so many files. Anyway, if you want to check out the talks that happened at Emac 2025, Emacs Conf 2025 was last weekend. Uh here are the recorded talks. So, did anybody have a talk in particular that they thought was really good that maybe we should bring up? Uh, modular flexible complete system setup building the shoulder of giants. Oh, yeah. Hex, we've seen that before. Is that Let's see. Codeberg. Every time I hit that, control E. Uh, JJBA23. Ah, yeah. Hex Linux. What is this? The Witches GNU Linux. Yeah, this guy has done another project of Jans written mostly in lisp uses what makes sensible command runner. Ah, interesting. Cool. This guy's going going off writing a lot of projects. Oh, this has been archived. Wow. Why? This was built on geeks, I think. Ah, Cal has this talk. Cal's saying, "No, don't watch my talk." I think I'm going to have to put it in the list then. Okay. Why was it archived? Anyway, okay. Let's just go back to the original point. Anyway, the original point was there's this Hex Linux thing and um it's written in Scheme. It's built on Fedora. It seems installing Geek's package manager. Nyx. Okay, there's a lot of stuff in here. I don't know. I don't really know exactly what this amounts to in the end. Your talk got deleted, Cal. Yes, the Skimax talk. Schemax. Skiax. Is that it? Okay. Uh, let's see. Since it was mentioned, I'll put it here. So, check out what is it? Hex. All right. Uh, check out Ramen's talk on Skimax. If I can find it in the list. Here we go. One-year progress update. Formerly Gypsum. I never heard it uh having that name before. Is this the right one? Yeah. 2025. There we go. There we go. There it is. Are we following the pasta trail? Is Slatecoin meanted already? Yeah, we're bringing the the IRC memes into the stream now. Following the pasta trail. That's a new one. That's a new one. You heard it here first, folks. Alternate vet has coined a new phrase. Ian Trev. I don't know where that one came from. Sounds pretty weird to me. Kind of sketchy. You're going to hear all the uh the zoomers saying it on TikTok anytime now. Okay. So, what else is going on? Let me see what's going on in the chat. He's changing it from Gypsson to Skax. I thought it was Schemax the whole time. Like that's the only thing I ever heard it uh called. Geeks gang. Yeah, I got to start playing those videos in the in the opening. Okay, so um I guess the other thing to say is that uh the sigil project has been making quite a lot of progress. Uh if you don't know what I'm talking about, basically I started working on a new scheme implementation basically and um I was doing it I've been doing it with the assistance of AI through claude code. Okay. Yes. And I know this a very uh sensitive topic for a lot of people but um I don't know it the way I look at it is that there's a kind of project that I've been trying to do for a long time which is like basically having my own schema implementation that creates standalone binaries and makes it really easy to to distribute them. Um and it's very difficult to write a kind of thing like that from scratch or even to retrofit something else to do exactly the kind of things I wanted to do. So, um, because I I found out that the Opus 4.5 model from Anthropic was pretty good, I just started like hacking away on it, um, one weekend about a month ago, and it's reached a point of, let's say, maturity that, uh, I want to start using it for actual projects. So, today will be one of those instances where I try to use it for an actual project. No, I will not be using AI in the in the purpose of [music] uh, writing what we're going to do today. Okay, I'm actually going to be a human being and uh write the code myself. But it's a good way to test what I'm making just to make sure that it actually works for a human being and not just an AI. So uh Niklas says topic for today targeted to analytics broadly or void in particular. We'll talk about that but void uh first let's say just just as kind of a a target let's say. So um a bit of a break from the constant AI noise. Sorry for that. Um, so anywh who, uh, Sigil is a, um, it's a scheme implementation, but I'm kind of like not really making a big deal out of being a scheme implementation because I want people to try it because it's cool, right? Um, scheme is cool, that is, but if you want to go to the site use.org, you can hit try it. There's like a whole like web playground thing that you can use to uh to test it out. And like there's some example programs here. a lot of stuff in there like uh SXML. You could generate a website inside of a website. I don't know. But um I'll primarily be using the docs today for referring to what's in the standard libraries. Um and whatever else that I might end up using probably just standard library stuff. Uh like let's say the where's the process library? Process. Yeah, the extended process libraries outside of main. Anywh who um we will be trying to use sigil for the purpose of writing a declarative system configuration tool that is not geeks. Um maybe I should write down my reasons for why I might want to do that. So uh let's uh sketch out a declarative system tool system configuration tool. Let's see. Wow. All right. As you can see, I am having buffer overflow errors in my brain right now. Configuration tool. There we go. Is this the same low-level scheme you were making in 2021? Um, man, you remember that one, huh? So, uh, there's been a few different iterations of scheme implementations I've been working on over the years. Uh, the first one around 2021, well, the first one I was doing while talking about on the streams was one that was meant to be compiled to native code directly. Uh I might get back to that at some point because it's a cool idea like writing an actual assembler and linker and stuff in um in Scheme but not for now. This is more a direct inheritor of the uh mesh project that I had started um a couple years ago maybe 2022. I was writing my own compiler and bite code interpreter for a scheme like language. It was basically Scheme but it has some other things that are a bit different. Um that was all handwritten took a long time and uh never really got finished because it's difficult thing to do writing a whole compiler and uh uh runtime and tool chain and stuff by yourself. And that's kind of the reason why I ended up using AI for sigil is because I wanted to um complete this project to a point where I could use it for the things that I want to do like making games and uh oh thanks alternate v for being s copy today. Uh making games, making other tools that other people can use. And what we're going to talk about today is an is an example of that. So uh gun is asking what is a declarative system? Kubernetes, Terraform, Ansible. Um let's see. I just want to get my head around today's topic. So the idea is uh Geeks is nice, right? I've been using Geeks for a while now. Six years actually. Right about now. Six years using Geeks as my main Linux distribution um every day. And while there's a lot that I love about geeks, I've talked about geeks a lot on the channel. I've shown it a lot on the channel, there's a lot that also is kind of a pain in the ass uh that makes it difficult to uh use your Linux system like a normal human being and not just a person that has to know all of the quirks of geeks and how to get software to run on it. So I thought maybe it would be interesting to try and see whether you can implement a tool that is like geeks but doesn't have all the downsides that geeks can have. I mean, I guess you could call them downsides or maybe like just um implications of his design because they're not necessarily downsides depending on how you look at it. But what if you could take the idea of having a scheme-based declarative configuration which gets executed whenever you want to apply it to your system uh but take away some of the the aspects of geeks that cause the difficulties difficulties that people end up having with geeks like the fact that uh all the system configuration gets applied using a readonly file system with sort of an immutable uh store of um builds of all the things that you use. I mean that immutable store that readonly file system the fact that it has generations that you can roll back profiles etc that gives you a lot of power gives you a lot of uh great capabilities like being able to roll roll back your system uh install different profiles uh have different profiles installed of different like versions of things on your system at the same time so you can uh switch between them or maybe even use a completely different set of versions of programs uh for something that you're doing. uh that is kind of like um like the the end all be all implementation of something like that. But I think that maybe there's something in the middle that doesn't have to go so far for the people who want to use something like Geeks to configure their system, but they don't want to have to deal with the complexity of uh living day-to-day with the Geek system. I think that a lot of people who've tried Geeks on this channel or in the community have kind of bounced off of it because of this because it, you know, has a lot of great promise as a tool that you can use for crafting your system exactly how you want it. Uh, but it is complex and learning how to live in the system day-to-day uh is difficult. It can be difficult. So, um, I don't know, just wanted to try maybe thinking about how to develop a tool like this. Um, the distribution of Linux, I wouldn't try to make a complete distribution of Linux. um with this out of the gate like maybe later once it's figured out and like you know a good kind of base dro is decided upon that something could be built on maybe that would happen at some point later but for now the idea would be to make a tool that could uh configure a specific Linux distribution that already exists uh just so that we could validate that this is something that would work and then um eventually either support multiple distributions like let's say we start with void Linux uh because it's s simple and it has some qualities that I like. Uh you could you know maybe support Alpine, you can support uh Arch or Arc, however you want to say it. You can support other distributions of Linux. Obviously there's c certain aspects of the design that may have to change per distribution that you target but that's just a matter of you know implementing it. Um but maybe later if if a good base distro was decided upon that you know something else could be built on top of then this tool could be its own distribution. It sort of just piggybacks on uh a pre-existing distribution uses the existing packages. It just provides a much better management experience through the uh the tool and the language that allows you do the declarative declarative config. Does that make sense gun? Do do you have a better grasp of it? I mean it is kind of like Ansible uh in a way not so much like Terraform because I think Terraform is more for the uh the hardware like installing the hard sorry installing the OS on the hardware but anvil is more like configuring a system I think right unless I'm wrong about that I'm not a DevOps person so I don't really know for sure but it has similarities to something like anible or was it salt stack there's some other ones like that chef is anybody talk about chef anymore or is that gone um sort of like a desired state like you have a desired state your system you want your system to be in and this tool should be able to put your system in that state. Okay. Tofu says, "What is the current state of the keyword syntax? Did you decide on colon before or after the symbol?" Uh after because I think it looks better. I know it looks weird in certain cases, but I like it after. Please finish your live stream by then. Sorry, Oslo. It'll probably be a little bit longer than that. Um, auntie says, "Chef, excuse me, chef is cooked." I haven't heard anybody mention chef probably in about 9 or 10 years. So, you're probably [music] right. All right. So, um, let's, uh, see if we can start making a tool like Geeks, but not as, uh, complex as Geeks. Still using Scheme via, uh, Sigil. Nobody's using chef or puppet. Puppet, man. Is that what it was called? There was another one out there called puppet. Man, there's so many old things that just sort of disappear. DPX says multiple scheme implementations. That's hardcore. Well, I I guess what I can say is that I'm kind of obsessed with uh scheme and writing scheme compilers. So, apparently that's what's happening. Swedish chef. Yes. Uh, Discordianism says, "Is that them?" No, this is Emacs. Uh, DPX says, "Maybe we could make a tool that keeps multiple previous build artifacts with arch and uses that as generations." Um, maybe, maybe something like that. Anible and salt. Yeah, salt I had seen, but I never really used it. Ansible I haven't really used either, but I've seen it um mentioned a lot more. All right, so um first of all, I need to get Sigil on the system. I'm not going to build it from source. I'm actually going to try to use it from a CI artifact cuz uh soon I'm going to have like a first release of it. In fact, I wanted to do that today, but um I just didn't end up having time to finish it because I had to deal with like garbage collection bugs since yesterday today. Here we go. So, I'm just going to go download the snapshot off the latest CI run because I made it for that purpose. Let me see. Can I just click it? There we go. Uh, download this one right there. We're gonna see if it works. Did it download? How big was it? 1.5 megs. Okay, it's gotten a little bit bigger. I think it's because of all the strings that are embedded in there now for all the documentation. Um, so let me try to pull up a folder to start this off in. So, CD project code. Um, let me see what I would want to call this thing. So, make deer sigil uh conf. I don't know. It's terrible name. Sigil conf. It's not what I'm going to call it. I'm just getting that uh kind of set up for now. Oh, actually, let me show you what I what you can do if you download a sigil binary. So, x downloads sigil. Yeah. So I'm going to just set that up as a executable. Then I'm going to run it. Okay. So it runs. You see there's output here, right? There's like commands and stuff. I'm going to say uh sigil CLI install and it's going to take that binary that you just downloaded from the internet and it's going to install it into your home folder um under the sigil folder. And now uh you've basically got a self-contained local installation sigil bin sigil. So you can see that it's there. And Nikol says what about sigil DSC desired state configuration because uh I used to work on the PowerShell team at Microsoft and they called theirs PowerShell DSC and I don't want to step on that. So yes, it will be called something else with a better name than sigil something. Um anyway, I just installed that in my local machine. And also I can look at the CLI uh what is it versions. So I have version 0.0.0 installed right now but eventually whenever I have versions being published to the the repository you can uh upgrade those by using the CLI directly. So um let me actually put that on my path export path equals uh path and then sigil. Actually, I should just use the the script. Look at this. Wait, what did it say right there? That one. The eval. Eval. Is that going to work here? Hey, hey, hey, hey. I can't type. I should stop being an idiot. Just go copy the text, shouldn't I? That's the whole point of using uh uh Medex shell. Okay, so echo path. Is it in there? Yeah. Okay, so sigil. There it is. Boom. All right, cool. So, uh, I've installed Sigil, and you noticed that I I did that on Geeks without having to do any weird geeks packaging stuff. That's because I'm using Muzzle C. Sigil JDSL for jolly declarative system link. That's going to be a little bit more of a mouthful, I think. Um, all right. So, we're in the sigil comp folder. Uh, let me see if sigil andit works cuz let's see. Sigilit project name required. Let's do that. Sigil init. This is probably not going to work, right? Maybe it will. Actually, I never merged the stuff that would make this work, right? We're going to see. This probably won't work. All right. Um, sigil conf. So, I actually did create a new project in here. Uh, but what is actually in it? I need to put sigil mode in. Uh, let's see. Task build. It doesn't have any dependencies listed. H probably work though. Nah, I didn't break the stream. Come on. Um, do I have the repo? Because I need to get the Emacs package loaded up here. Sigil. There we go. Let me pull the latest. Uh, I've been cheating lately um on BC mode with Magic. I've been using Magic again because it's good and why not just use it, right? Uh, let's see. F. Let's just pull that. Okay. Yes, that's right. I've been cheating on VC mode with Magic. I feel so terrible. I don't really I'm probably going to put Vertigo back in my config pretty soon. You know, sometimes you got to be Yes, it's good. Why not use it? I mean, in a way, at some point the uh your heard of him is good. Okay. Well, you you should definitely use it. Let me know. Alternate bed. You can tell me more about Neri, too. All right. So, the Emacs package. Do I have this in my config? Did I push it? Nothing's driving me from Geeks Niles. I'm just like, this is my constant mode is I'm always trying to do something different. Like I Geeks is so much of a stable state for me now um that I'm bored. Like I don't really mess with my Geeks config anymore. So, I got to do something to introduce new problems in my life to to solve. Um, let me see. Where is my dot files? I'm looking on my other machine right now. Files. Uh, emacs.org. Come on. Where is it? Or there it is. All right. So, sigil. Okay. Let me just replicate my config here. Atomic Fedora. Fedora is not bad, dude. I like Fedora. Um, let's go to scratch buffer. I'm going to type this in. Use package sigil. Ensure nil load path. We're going to see if this if this works at all. Home data will projects code sigil emac editor. No, no. Editor Emacs. That's the load path. Custom sigil ripple program. This may have changed since then, too. But let's see. Home. David will sigil bin sigil. Okay. Let's see. Sigil. No. So, oh, run sigil. Is that what it was? Sigil in ripple. Was there a program sigil ripple? Switch to ripple. No such file or directory. Is it sigil program? Is that what it is? Okay, maybe that's it. There it is. Okay. So, we actually have an inrepple uh ripple here, which should be working. Let's see. I wonder if the errors are going to work. I haven't tested this yet. Uh no [laughter] connection closed. Let's do it the other way, which is running running a normal ripple. So, oh, it's still doing inrepel. I think I must have removed the other ripple. Fine, whatever. Where is it? Where is it? Sigil works on my machine. Yes, I guess that would be a thing, right? All right, here we go. Anyway, really the point of that was to um to get the syntax highlighting turned on, which I think we have now. So, let me go back over to that. Uh let's see. Diane says, "Why do you want to use sigil but not guile of com or common list?" Because yes, sigil is uh is my own schema implementation. Sigil mode turn on. Thank you. Okay, at least we got that. Uh Peter says, "Hey, Peter, Geeks History, as far as I can tell, was for reproducible builds on HPC clusters. In my mind, that would explain some of the choices." Yes, definitely was used for uh science. So, um, this should work, I think. Let's go into source main. We should try to just run it, I think. Um, MedX compile sigil build. Sigil command not found. Ah, it's not in the uh shell here. Let's just change that then. Okay, main. Sigil build complete. There is a binary there. Let's go into uh the shell for this project. All right, there we are. And then uh build bin. Really? Oh, build dev. Right, got it. So, bin. There's no bin. Dev Ben sigil conf. Ah, you know why? Because I don't have sigil running here. Okay, I may have to just go and do this inside the uh the repo. And that's fine, too, cuz I was working on the kind of the experience for being able to write social programs outside of the the scope of the repository and I didn't get to finish that before the stream because I was dealing with other issues for the doc site generation. Bennett, Bennett, I should just throw it away. Is that what I should do? Okay. Um, all right. So, geeks shell manifest SEM uh make CC equals GCC standard lab. Probably don't need to do this, but let's just do it. Janet. Janet is good, but um I don't know. It's a little bit different. I'm just I'm too habituated to scheme now, I think. And that causes problems for me. The problem J Janet is it's not Sigil. Yes. Well, I don't know. I like Janet. I spent a lot of time screwing around with it over the last year, I guess. But well, not a lot of time. Like here and there I spent time with it. Are we building? Are we finished? Yeah. Nicholas says, "Does Bennett mean trash it or vendor it?" I'm pretty sure in this case it means trash it. Altern says, "I'm bored. I need something new. Develops lang language very similar to Scheme." It is Scheme. This is R7RS small scheme, dude. It will have things on top, but it's basically Scheme. That's what it's supposed to be. All right. Um, so next is uh sigil bootals 1 run sigil build sigil CLI. And now we got the dev CLI. No matching prompts found. Oh, I need to do this inside the uh shell. What? Oh, I need you to do the little in thing here. Right here. Stockholm syndrome. For which part? Go, go, go, go. All right. So, run sigil. There we go. We got one. Okay. So, I'm just going to drop this in here because why not? And um in fact, I should probably copy that code over that we just looked at. So if I go into sigil conf copy it to s Whoa. Okay. Now go back. Here we are. Okay. So back in the package that sigil file. Let me get rid of the other one that's open so I don't get confused. Wait, which folder am I in right now? Yes, that's the right one. Okay, [snorts] alternate vet is quoting me as saying cults are good fun. Yes, they are, aren't they? How many uh streams do I have open on the computer at the same time? Got it. There we go. We must unite the scheme somehow if we don't start sharing our libraries and start showering showering together. What are you talking about, dude? Um, there is the uh Aku scheme scheme package manager. There's this thing which should work across multiple schemes. I have not used it. I don't know if it will work for this. Hey, there's Retropixel. And what is Retropixel doing C? What am I looking at here? foreign function interface library for R seven RS schemes. Cool. H interesting. Where is Retropixel now to ask him about that? Showering together sounds awfully close to cults. Yes, I'm I'm going to leave that one out. Okay, so main uh compile scheme modules. That's good. Output deer config output sub deer. That's the modules, but what about the executable? Maybe that's the part we're missing. So, if I go into sigil CLI and go to the package.sigil here, I should see it's the same thing. There's no bundle name entry. I see. Okay, but we do need um these two. We also need args. Any wouldn't hurt. Uh process we will need. Let me just take the whole dependencies list here. And I'm just going to get rid of the things I don't want. HTTP probably don't need it, but it wouldn't hurt. Time maybe test. No ripple JSON uh format build. All right, these are probably the right set of dependencies for this. This is not the dependency syntax we're sticking with. This is just what we got for now. Oswway says, "Sigil is surprisingly complete for a language you built yourself." Yes. Well, you know, Claude Code did most of the work uh of the coding of the typing of the code. I told it what to do though. So basically, the fact that it looks complete is because I spent many, many, many, many hours telling it what to do. Many, many, many hours. It's become an obsession, let's say. Uh, okay. So now, let's see if I can build that. We're going to get to a place where we will actually have a program in a moment. And actually, let's go to the shell and do this. So shell, many hours watching scrolling text. Yes, watching scrolling text and stopping it and saying, "No, you're doing that wrong. Do it this other way instead. It's it's it's a it's a give and take. It's a back and forth, you know." All right, so we got to go down into the sigil folder. Those of you who want to use sigil will not have to do this very soon. Like, it would have been done today. It will be done this week. 0.1 will be available to use if you want to try it. Uh, all right. Run sigil build. Uh, sigil conf build complete. I don't see any output though. I don't trust you. Is it because I don't have um a configuration? Uh, it's probably because it's not part of the workspace. Okay. So, sigil CLI. Come on. There it is. There we go. Let's see if that does any better. All right, that's better. Okay, so um it's not good that we're going to have to keep running this like over and over. I'll I'll see if I can compile only the libs. See, Ooy. Okay. So now uh bin no build dev bin sigil. There's no sigil comp. What's going on in here, man? Oh, like the self-hosting stuff is in here, too. So, I had to to get rid of the uh compiler self-hosting [music] aspects of things because it just became too much of a headache. Maybe eventually it will go back go back in, but at first it just was not going to work out. say that the the fact that it doesn't have a an output here makes me wonder if the bundle name is necessary for it to do anything. I don't see any other configuration here that would indicate that it's asking for a bundle. So, let's try that again. I also need to get incremental builds working, which I had started doing and then it gave me other issues. But, uh, while we're doing that, let's actually just go start looking at what the code might look like for something like this. So, the idea is to make a system. Whoa, it put it in the wrong folder path. No wonder it was actually there the whole time. H. But now it's in the right place. That's very interesting. That's a little bug. Okay. Anyway, let's just run it because now I'll be able to see that it works. So, um, build dev bin sigil comp conf. and it basically ran like it's the CLI because there's nothing else in there. The sigil have XML RPC. It has uh sockets and JSON and it has an HTP server. I mean XML RPC not yet. That would be pretty easy to do right now though just because it does have SXML and a socket uh implementation. So you could have a you connect to a TCP socket and send XML stanzas over to it I think or you know receive uh requests on HTTP server but it's not like wired up like that. Um things like that will be added though cuz it's not super hard to add now that a lot of the base stuff is in there. So what was I thinking? Oh it's it's running the CLI for some reason which doesn't make any sense. What did I tell it to build? Sigilov, right? Config dev. I believe it must be because of the dev build. Let me try the release build instead because I shouldn't uh default it to that's curious. Okay, it took a little while for it to wake up. Um, it shouldn't default to the CLI module. I think that there's some hacks in there for the dev build. Sure is slow running the C compiler. Chromium is chewing CPU in the background because of uh the screen sharing. I think that's part [music] of the problem here. Okay. Sigov 700 KB. Nice. All right. So, let's try running that. There it is. Hello world. Okay. So, we have an actual program and uh that is a a completely self uh standalone program that's 700K. I mean, it only says hello world, but it's got all the uh stuff in there, standard library and the other dependencies. So it's that's a a binary you can just give somebody on on another Linux machine and they can just [music] run it which is pretty cool. Hello sigil. Yeah, I probably should say that. Huh auntie. So back to the point I was making before. Um let's think about how we want this to look. So sigil conf what will be the the thing here? System.sigil. Let's see. So in sigil there is system. Let's just call it system. I don't know. Uh there is the concept of a record type which is not the same as a scheme record type. This is actually directly inspired by geeks record types. They have their own special record types. That is what basically what you see whenever you write geeks configurations. I'm probably going to change the name of this to something else like define form. But for now it's define record and you give it a type name like uh let's say operating system sort of like on geeks. Then you just give it a set of fields. So like host name and I think that uh type string is what you would put there. In fact, let's just do that real quick. I'm going to just set this up so that we can see whether it works or not. So um operating system is going to be the name of the record uh constructor. Then operating system host name and that close that out. And then we got that done. All right. So now I want to go back into the main.sigil file and then uh pull this in. So I'm going to import um sigil conf system. And then in here, I'm going to do a little let and uh conf uh operating system. I probably drop this down one little level here. Operating system host name zero cool. And then here, uh I'll do a little different thing here. Does print line support this? Let's see if print line does this. There's there's some macros in here. In fact, I might need to pull in uh sigil string for this. So, the the Emacs package is not highlighting things uh very correctly at the moment, but that's okay. It will be fixed at some point. So, now print line hello. Let me actually check the docs. I don't remember what that looks like. Oh, by the way, uh there's a symbol search here at the top of the API reference page. So, I can actually go here and click search all symbols. if it loads. Codeberg is being slow. Oh, failed dependency. Come on now. Give me a break. That's the problem with hosting anything on Codeberg is that sometimes it just decides it doesn't want to work anymore. Lovely. Could not find target for custom domain. Uh can I do this in like an incognito window or something? That didn't work, did it? Let's see. Uh, where is it? Private window. Yes, I know that probably won't help, but does any page work? Okay, I got to find another solution for this cuz this ain't going to fly. I'm trying to like have people use this and they can't go to the website to use it and that's going to be a big problem. Let me see if the ripple can actually tell me anything. So uh in the ripple [clears throat] what does it describe uh display right I need to give it the a symbol not a uh value display what is it called there's a procedure for Oh, it wants the actual procedure object in that case. Okay, so display. There we go. So, it does give me the string. There's something that's supposed to give me. Oh, wait. Hold on. Help. Uh, not in there. It will be in there though because help is built in. Excuse me. Excuse me. Doc strings are built in. Um, syntax documentation on print line. There's none. Is it a function? You can see how much I remember here. Nope. All right. Okay. Finally, it decides to load. Is it? Now it doesn't like subdirectories anymore. Apparently, it can load the main page, but it doesn't want to load um the docs folder path. We'll just do this the oldfashioned way then. Um string. No, not in this project. No, right there. Okay. Print line. Okay. Tilda A. That's the syntax. Got it. After all that trouble. Sorry. Print line is not standard uh scheme obviously. And you may be wondering, why don't you do this in the ripple? Well, because the ripple is a little bit busted at the moment in Emacs. I could try it though. Let's see. Uh, switch to ripple. I probably need the load path set up right though. Let's try this. This should work, I think. Wait, kill this first. Um, sigil uh add to load path. That's going to be packages uh sigil conf source. All right. And then eval f uh packages sudov source sudov main. Okay. It didn't do anything which is interesting. We'll just build it and see what happens. [clears throat] No, not that. There we go. Claude has no inrepel MCP. I don't know if it has an inrepple one, but it's going to have one for sigil because I'm going to make one. So there's basic there will be an MCP server for uh for for sigil built in a sigil so that you can basically hook it right up into uh an AI agent and it will be able to get documentation for things and run tests run builds that kind of stuff without having to like you know read a documentation on how to use it. So if you just have it if you have the MCP server set up with your local project then it should be able to just do what you ask it to do. All right. So, let's run comp. I don't want to have to go through that whole um process every time, but hey. So, release. Hey, Trev. Excuse me, Trieve. Um, build release bin sigil confound variable operating system name. So, proper response. Hey Trev, how's it going? Best friend. Is that what you have self-promoted yourself to? You promoted yourself to best friend now. I see. Ah, operating system host name. No wonder it didn't work. I should have seen that coming. All right, so let's run this under compile so that we don't have to do the whole dance the entire time. kind of wonder if nah digital comp. Can I do this? Is this going to work? Probably not. TR says, "My wife gave me permission to sell my car and donate 20K to Sig Foundation." Whatever, buddy. [snorts] There probably will not be such a thing as that. Just a goofy little project. The compile times are terrible. It's like Rust. The mods are planning to perman you tonight. Cow is talking about some deep lore here, I think. All right, let's try this again. So, there it is. Hello, Zero. Cool. So, what we accomplished in that amount of time of me struggling around with what's going on here is that uh we've got a system. Record type that we're defining. So, it's kind of like what you got in Geeks. In fact, let me just pull up my geeks config and just rip off the whole uh structure. How about that? Files. Uh, David will systems base. So, operating system time zone. Now, the question is, can I actually get this to configure all this stuff? Hey, Ash, I'm sure you do, Ashra. You're a very hard worker. Uh, alternate vet is is playing the role of escopy today whenever he feels like it, which I appreciate. Also, I think uh I've got dock strings on these, too, but let's not fool around with that. So, uh time zone. What else? We're going to do a little X3 on that and pull it up side by side. Local. I don't really care about localal at the moment because, uh UTF8 working hard or hardly working. Uh kernel, not so much. Firmware, not so much. Uh keyboard layout, sure, let's leave that off for now. file systems, excuse me, file systems will be a thing. Users is uh user will be a thing for sure. So we could even say like uh like define record user [clears throat] and then have a name type string. And if you're wondering what this type string thing is, it's actually a I think this is what um Geeks does either on these record types or the configuration types where basically a field can have a type, but it's not really like a type that a type checker is uh reasoning about. This actually is just turning the symbol for string into string question mark, the predicate for checking if a value is a string type. So, uh, it's very very simple, but it's kind of clever because it gives you the ability to have a syntax that, um, makes it look like you [music] have, you know, type checking. You kind of do have type checking if you want to, but um, yeah. So, name comment, group. Whoops. And, uh, home directory. You can have defaults for these, too. I probably should have thunks or at least uh procedures that can produce a default value, but I don't have that at the moment. I think Ashra says, "Maybe there will be another rush of YouTube viewers in 10 minutes or so." Probably not because I'm talking about stuff nobody wants to hear about except for you guys. So, that's the way it is. Uh, all right. So, users and uh here's a funny little thing. um type uh user what I call it uh what's the name I use for this come on it's coming to me it's very very common name variatic I think it's that right I'm gonna have to go check it out because I can't remember for sure let's let me check out the code for uh let's see standard lib uh source sigil core variatic is variatic okay is that what it is is variatic okay cool probably I should not have is on there because variatic question mark is probably good enough but basically what this means is you don't have to explicitly put a list in for this you can just have users with you know a bunch of user records right into it which is a bit different than what they do in geeks it makes for the document to be a bit more declarative. However, uh you can't use you can use conventional list processing procedures to produce a list or call a function, but um I don't know. I might have to take it out because it's it's a little bit too magical and it might bite people uh in ways that don't feel good. So, we've got those set up. Let me just see if I can go add another little record to our main file. Hey uh oh my goodness Mike my mind went blank. I saw demirth and I'm like I know I know you demariatic is common. I need to check that out. Variatic is uh yeah variatic is basically whenever you have a procedure that could take any number of arguments uh or like you know optional rest parameters let's say man I tell you what I've been like staring at stuff way too long for the last month and my brain has turned to mush okay yes Mike thank you Mike brain came back to me it finally it finally reset yes exactly okay so Um, right. Let's fill out the the form here. We're just filling out forms now. So, um, what did I add? System. Sigil. All right. So, time zone ains because of course that's what it's called. Uh, let's see what else did I have here. Users. Now I'll just put here user name. Uh just copying my configuration here. What else did I have in there? Home directory. That probably isn't as relevant. I mean I guess you can use that to create a user. And the idea here is that um because we're not like actually doing what Geeks does, which is really building the whole system configuration from scratch, we're kind of taking a system that may already be existing. Uh this has to be IDM potent. I don't know exactly the right way to pronounce that. Ideotent. If you have ever ever heard this before, you probably won't hear this. It's got a British accent. Id potent. Sure. So in important basically means that uh whenever you ask the system to do something if the the state if the system is already in the state that you want it to be in it does nothing but if it's not in the state you want it to be in it makes a change it uh does some action right I'm right about that right all of you uh rest rest service people probably know know that anyway um yes that's a little different than geeks because geeks assumes it's building your entire system configuration into a generation. Uh but in this case, we don't do that. So we would have to look at the config and then make it like the document says if it's not like that already. So that means if you're specifying a user that doesn't exist in the configuration on the if it doesn't exist on the system, then it would create that user or uh AI input. Thank you, Peter. uh or if it if it doesn't exist in your configuration anymore but it exists on the system maybe you consider deleting it but probably that's not going to be the case here. Altervest says basically you can spam requests to the server but nothing would happen if it already happened. Yes, that's an important thing for uh web service design. Okay. Oo says as opposed to biting people in a way that feels good. Yes. I don't know what that would be to be honest. I don't really know what would feel good. So, um let's see if this actually works. I I think I still need to export some things though here because I haven't done that yet. So, user uh user name user comment user home directory uh user group. Okay. So, we got the user block here. Operating system users. Cool. All right, there's that. This looks looks like Scheme, right? That's because it is. And here's what I'm going to do. Operating system users. Um, wow. I must have hit a keybinding. Uh, car. No car. I wanted to get the first user off the list. Okay. That should be a user username. I'm hitting control before I start hitting parenthesis and it does weird things. All right, so car operating system users conf uh username print line. All right, that should be enough so long as I didn't make any syntax errors. So, we'll go check check this out now. So, back over to the compilation buffer. Rerun that. Peter says very important property of distributed async systems if you want to reason about it. Yes, for sure. So probably we won't be able to actually do anything on a void system because that would require setting up a VM right now. So we will just uh sort of write the logic that might actually set this stuff up in reality and just test it out on the machine. Ash has a concert rehearsal. Good luck Ashraz. That sounds awesome. Okay, we're up to 701 kilobytes now. I'm starting to sweat because the program is getting larger. Um, back to Shell Crav car expected pair got other. What other did you get? I'm kind of curious to know what it is. Operating system users I wonder what I put in there. Actually, that record type could be or the variatic type could be busted. Um, maybe I broke it by let me see what did I do for those inside of Sigil build is it in package maybe? Yeah. Oh, I don't put a question mark there. That's part of the problem. Is that right? Apparently it is. Apparently, it is because that's what works. All right. So, it's variatic. I don't know why I did it that way. Um, back into system. Variatic. I'm just going to put this here like this. Doesn't look perfectly right. Maybe my friend Claude went and did something I didn't actually expect them to. But that seems to be it. Uh, variatic default. Oh, I probably should put Yes. Uh, probably should put the default values in there as well. So in this case, uh we'll leave the type off for now, but we'll put default as an empty list, um host name, time zone, all these others could be okay. So we're going to try to rebuild and rerun that now. So let's go over to compilation buffer, restart. Let's let it go through it thing again. This is a very moment in time issue here. You shouldn't have to be rebuilding the entire thing every time you want to test a change. The ripple should work. Uh but it isn't right now. I need to think about how to automatically set the load path for the current project um whenever you start the ripple in a project so that uh you don't have to do any kind of funky load path configuration yourself. There we go. Now it's finished. All right. Central Conf. Hello David will okay good. So now um that did actually work. Our configuration has a old one. Yeah. Our configuration is Let me just actually define this right over here because I want to be able to see it. Whoops. as we're going. There we go. And now we got it indented a little bit. And uh we don't need the let anymore. Let's get rid of that one. And then here we'll just put config [music] config. All right. Uh good. Does that make sense? Is all making sense so far? All right. So we got a config that we've set up here. Operating system host name zero. Cool. So, the next thing we would need um in something like this is a way to apply a system configuration. So, how would you want to set that up in a uh in a system? Well, let's just let's just do it this way. We're going to start it here. Apply um [music] system. So, let's see. just uh follow a set of steps to determine if the system is in the desired state. All right. Um so first of all, host name, cat, etc. host name. That's actually a file that's on the system. Okay, I could probably write this in the ripple actually for the most part. So uh let's see should I do this in like a comment buffer? What would be better? All right. So in the ripple define uh get host name uh let's see with what do we have for that is is documentation pages that is it working now? Okay good simple index. So, with input from file, with input from file, I click on that to go to the doc page if it lets me. Oh, it's doing it again. Fantastic. Anyway, there's a there's a page where you can search all the symbols in the packages that come with with Sigil and uh you can jump to the individual pages for those, which is pretty nice, I think. Um, let's see. going to end up with a virtual DOM for system configuration. Uh well, I mean, it's sort of what Geeks is, I guess, is you basically have a document that um is part code and um you do things with it. So, if I go back to standard lib and what am I looking for now? Oh, actually, we're going to go to IO. IO. No, it's in standard lib. Okay. Source sigil IO. Here we go. There's some examples up here. Call with input file data with output string with input from file. There it is. File name. Thunk. And ah, it doesn't. I thought it did. I could have swore we did that. In fact, this would not even work. That's wrong code. So, uh, call with input file, I think, is going to be the one that works. Open input file, file name, port, result, procport, close input port. That's the one. All right, so that works. So, call with, in fact, do I need to pull in? Can I type call with input file? Okay, I need to pull that in. So, uh, use sigil IO. There we go. And then if I try to call up call with input file, I get a procedure this time. Cool. Call with input file. Um, etc. Host name. I think that there's like a read. Do we even have like a read all file? Read all port. Read all. Read all. Read all. That's an S expression reader though. Ah, that's a good point actually, Peter. Uh, it seems like it would need to dip the actual and desired states to see which mutations to apply. Uh, yeah. I mean that's that's an interesting way to look at it, but I wonder if it would work because everything needs to be like so code driven that um you would have to write a lot of code just to like put the current system state in a a format that looks like the one that that you get from executing the document. So maybe it would work all all. Okay, maybe we don't have that. Yeah, Peter says, "Geeks not need that because it's all immutable, so it can be a pure projection." That's true. That's very true, actually. See, read data.ext read line. It's like react maybe. Read a line of text from a port. All characters up to and not including a new line. Well, I want more than that. I want all the text. There's There's the whole thing right there. Read all the lines from a file. We might need that for now. Let's just steal the code that's in the doc strings. Um over to main and we we will just do that for the purpose of uh getting something in here. Read all lines. Um, file name. Okay. So, we don't want that. We don't have to do this as a nested let either, but that's okay. Okay, let's just do it this way. EF UF object reverse lines loop. All right, so read line. That's wrong. I guess we do need it inside. There we go. Tree diff. Yes, that's right, Oslo. So, let loop lines read a line from the port. If eof, then reverse the current lines list. Otherwise, loop and constant with the list of lines. Cool. That does work. Um this needs to be done in see already uh port. There it is. Okay. Read all lines file name. So actually I probably knew this in the rebel, don't I? Let me see if I can paste this in if this will actually work. I think it probably won't, but let's see what happens. Okay. Uh, read all lines. Okay, it's in there. Read all lines, etc. Post name Phantom. Good. Okay, so that is it's a list, which I expect because it's I'm telling it to read all the lines. Um, the easier thing to do would be just to uh use call with input file. Well, so define uh get host name. Is there another way to get the host name? Can I shell out somewhere? I mean, I could shell to the um the shell. So, host name. Well, I wrote it with the help of AI uh Mike, but I did tell it what to do. So, I take some some responsibility for what happened with it. You saw my screen flicker. Um, let's see. So which host name I need to relink this where is it coming from okay init utils it's a process called host name I actually want to go into the ripple use sigual process process run um how does that one work is it going to let me go to the page It's really not going to let me do what I need to do today, is it? GPX says, "The cool thing about it is you can make new packages and syntax easily with macros." Yes, you can. Uh there's full syntax rules and syntax case support. Um it may not be perfect, but it does work because uh a lot of the core macros are being written with syntax case now, which is good. In fact like the uh define record macro is written with syntax case syntax case is there itself syntax I thought it was being written with syntax case it was supposed to be but maybe it's syntax rules actually syntax rules is being written with syntax case now we had to bootstrap some of the Okay. Anyway, where was I headed to? I was headed to uh process right there. And then okay, process run is just a list of arguments it seems. Oh, process lines. Nice. How about this? Process lines. Phantom. Well, that's easier. That's even easier. I don't have to read any files. Just run process lines and ask for the process output string. How about that? That's even better. Process output to string host name. Boom. All right. So, uh, date cool. All right. Great. So, that makes my life much easier than in this case. Uh, if I go to main sigil get host name. It's basically just calling that. Oops. Hey. Okay. So, get host name. Cool. Apply system. Uh, if get host name, DPX says, imagine being one of the first sigil sigil users and it explodes. That'd be cool. That's quite likely, I would say. Quite likely. Uh, let's see. Get host name. That's a terrible name for that function, but whatever. Are you going to let me click links now? Are you going to let me? Why is this page keep loading? Secure connection failed. Is it is like redoing the [music] uh certificates at the moment? What is happening? The server is busted, dude. Okay. String equal. That's what I'm looking for. Just trying to make sure that I know the name string equal question mark. Good. That's it. All right, let's uh pretty that up a little bit. Okay, so if not string equals get host name operating system host name, then do something about it. Let's use when instead uh display uh set the host name. All right. So now we're just going to run apply system here because it's I mean why not? Okay. We'll rebuild again because it's, you know, appropriate to do that. I wonder if I screwed up any uh syntax in here. Let me do check PNS. I've got a uh [clears throat] format command that's supposed to be able to check and autofix um parenthesis imbalance issues, but it doesn't work perfectly. It's it's being improved right now. Uh the idea is that uh it should be easy that if you have written a sigil file you should be able to just hit format and then it will fix the parenthesis and also redo all the indentation for you. Kind of like you know auto formatterers in other languages. It's not something you see very commonly in uh list languages because parenthesis can be hard to balance sometimes but you know there's ways you can infer where the parentheses are supposed to line up based on indotation levels. So kind of the idea is like uh just have some some sensible auto formatting so that you can just run it automatically every time you save a buffer or um if you have an AI friend helping you, you can tell it to run that command instead because what what I found is that AI tends to be really bad at balancing parentheses. It tries to run like said and GP to figure out where all the p the parentheses are supposed to match up and it just takes way too long to do something that's very simple. So, that's another thing I I do for the AI. I'm just sitting there and stopping it and um fixing parenthesis imbalances for it while it uh does its work. Uh, all right. So, now that we've got it compiled, let's try to run it again. I should probably just do this the the non-S stupid way and hit meta R and type in wait uh what am I looking for? I'm looking for that's it right there. Unbound variable process output string. That's right because I didn't import the stupid module sigil process. Okay, let's compile it again and wait for 45 seconds. Unfortunately. So, I mean, as you can see, it's working so far. Um, I guess you know, we're not really making a whole lot of progress towards actually something that would work for this, but the idea of the stream is just to sort of talk about doing this in practice and um what it would mean to do it. So, I like Peter's idea that maybe having a configuration like a current state to diff it um diff it against the the desired state of the world and then based on things that are different go and act on it. But I guess you have to have like a sort of an algorithm for deciding based on the diff which things are different what to do. So I don't know maybe something a little bit more procedural makes more sense at first. All right. So set the host name. It it says says that because the host name of the system is not what I I'm asking for. So because I'm asking for the host name to be zero cool and it's currently phantom. uh it goes to the set the host name path. So um what would that be? Uh do you do you call host name to set host name option name show or set the systems host name? Well, let's try it. I don't think it's going to work. It could break my system if it doesn't work. But let's see. Conflict resolution will be hard. Maybe it's possible. Uh let's see process run uh host name. In fact, I should probably store it. So let host name. Okay. Okay, let's do it this way. Front line. Um, excuse me. [clears throat] Host name. Wait a second. This is [music] wrong. Let's do that right there. [clears throat] And then on this one, have I bootstrapped sigil and sigil yet? I I tried to do that when I was first working on the project and it ended up causing too many problems to um to make progress on the harder tasks like good macro support and um also correcting some early design mistakes that the AI had done like uh giving uh the language global scope and in R seven RS scheme you're not really supposed to have global scope it necessarily say you're not supposed to have it, but the idea is that you have module local scope and then you have imports between modules. So there would not be an explicit global scope, there would just be module scope and um you sort of implement things with that in mind. So because I had to do a big change to fix the design for that, can you write a sigil in sigil? Yes, you could. the core runtime you would still have to like so the compiler you could definitely write in sigil because I I had that working but the runtime it needs to be in C because you have to be able to compile something down to machine code. So either you have sigil code that can generate C code for the runtime which would be a little bit ridiculous or you just have the runtime written in C. So I mean later if you had a full like u assembler that could turn sigil code into assembly and then turn it into a binary let's say like it write out actual actual elf binaries which I had something I had started doing with scheme a long time ago which is kind of fun like trying to trying to understand the elf format and then write out uh compile a program down directly to an elf binary but it's not easy it is not easy it would take a long time. All right. Uh, old host name. Let's do that. Okay. Old host name, new host name. Let's just make it obvious. Why am I doing this? So I can write out a nice little message. Yeah, I don't know, man. Codeberg, I love Codeberg, but man, it really has a lot of problems sometimes. They're probably getting DDOS because somebody doesn't like that I'm writing uh Sigil. It's all my fault. Obviously, that's a very arrogant thing to say. Um, host name to wait. No, no, no. That's right. Uh, tilda A to tilda A. And let me try using the ANC output, too. Good, Trev. Our plan is working. See, I knew you guys are screwing me. DPX says, "Don't joke. I have to wait uh 3 minutes every time for my side project to compile in Rust, and that's in dev mode." Yeah. Uh I've heard Rust compile times are uh a [clears throat] little bit painful. Um so I think instead we should probably use a combination of display and stir. because we want to use the ANC library. I go up here to print out some colored text because you know how important it is to print out colored text. So instead of the the A's where the A would be, I'm going to put old host name. and then uh new host name. All right, like that. And then I think it's a colon um a colon blue a green. I don't know. Whoops. All right. And then all those things they don't belong. There we go. All right. So, um, old host name, new host name when not string equals, let me just drop that down one more line there because I prefer it that way. Process run display. question is is that does that actually change the file or is that only just change it in the context of the current session maybe uh maybe that can be done just to do it all in one fell swoop. All right, let's try that. So, let me make sure about the a black a blue. Okay, so there's a blue a green. I'm pretty sure those are just rappers. So if I go back into ancy source sigil ancy a green. Yeah. Okay. You just basically pass a string through that you want. All right. Or maybe I like this better. Let's let this be white. And then this one can be dim. I'm pretty sure there's a dim in there. Yeah, dim. Got it. All right. How about that? There it is. Let's compile. And then once we wait 45 seconds for that to complete, then we can run it again. Temporary problem. As I said, yes, we're we're in very very very baby steps here trying to reimplement geeks uh in a uh very hacky and stupid way. I'm very proud of myself. Does the site load again? No. Should host name not be added to etc host maybe. Yeah. Um I wonder if it is on my machine. Etc hosts. Uhhuh. You're right, Peter. So, there's a number of things that need to be done here. Uh update, etc. hosts. And that really kind of needs to go through and set things correctly, too. So, you need to not just make a change to the file. You need to make sure that you change the file as it is without breaking it. Now there there may be some call for like certain file like etc hosts maybe that should be managed by the tool and you shouldn't just be able to edit make edits to it with the tool cuz that would get a little bit too wacky too fast. All right, run the tool. Run it. Cool. There it is. Phantom to zero. Cool. Set host name. Operation not permitted. Well, yeah, probably not. Either because it's geeks or because I'm not root. How can I tell if I'm root? I mean, um, in Linux, how to tell, uh, if you're a super user. No. Get out of here. Pseudo V. Yeah. How to check if running is route. Is that good enough? Okay, got it. We could do a little check at the beginning and see. Um, that I could do that probably. Yeah, get the effective UID with a actual system call. So fly system warn if uh user is not super user. So what would I do? Call when. Oh, unless wait a second. Okay. If it's not, then uh should I throw an error or should I Do I have an exit procedure? Just like bail out immediately? That would be a little bit lame though. Is there no POSIX library yet with these tools? Uh utils. I think I mean some of the things are like calling into posics libraries but uh I think that yeah some of the other system management libraries need to be added or system management functions let's say let's see error that will take the process down basically which is fine I don't really mind that at first this is not warn let's say fail Oh. All right. So, um compile again. It feels like the language works though, right? I mean, we haven't hit anything like completely stupid yet that uh seems like it should it should work and it doesn't work, which is good. I'm I'm happy about that. At least it's this is scheme. Like, we're right in scheme right now, which is fun. Come on, let's finish that course core. Sigil file is pretty big because it's basically the prelude of the whole language. So, uh it takes a while to compile that one. All right, there we go. Running it. Error must be root to apply system configurations. Let's run my uh hacked up compiler with pseudo. How about that? Here we go. Uh, hello David Will. Host name Phantom Zero. Cool. So, that time it did let me because I was uh pseudo in there. Oh, let's see. Host name. Hey, it actually did set the host name. Did it set it in uh Oops. No. Okay. So, it doesn't set the file. It just sets it for the purpose of the current uh system maybe. And also cat etc. Hosts is still phantom. Okay. Got it. All right. Well, it worked at least uh in a very basic way. Can we check if there are users? How do you check? I mean, aside from looking for a user folder, how do you check if if a user exists? So, um excuse me, I'm doing this the oldfashioned way by using Google. IDU name. That sounds like a good way to do it actually. Okay. IDU Fubert. No such user. And is is having like an error code maybe has an error code. Uh yeah, error code one. Okay. What do we have in the process library then that we could use? Etc. Group. Uh exit, exit, exit returns the exit status. Okay, good. We can exit. Exit status process spawn. Uh returns a process object. Use process weight to wait for completion and retrieve the exit status. Get pw ent. Yeah. Process wait. All right. Process spawn. process run uh returns the exit status. Sorry. So process run is the way to do it. So I'm going to go into main and uh let's see. So uh four each because why not? Just do that for now. And then this is going to be operating system users system. Okay. And inside of here, let's drop that down. Looks a bit ugly, but whatever. um for each lambda user I want to check that the user exists. So if not greater than process run ID uh what was it dash u um user name is greater than zero let's see that means it exists Right. No, it means it doesn't exist. And then [music] um user name user. There we go. Printlin. Is that it? Okay. So, got it. Now, back down here. We got the let there. I don't really care about being inside the let. All right. So, here we're going to call what was it? Uh, apply system users. And then we're closing out the define. All right. So, um, that should be enough, right? Apply system users. We're just going to say whether it exists or not, and then we'll go. Probably should um add some bindings to uh the posics utils, though. as uh Peter implies. Ah, time's almost up. So, we'll we'll see that this works and then we'll call it here. Um, I will probably continue working on this tool um just because I want to see how far I can get with it. Not on stream necessarily. I might just, you know, use my usual tool to build this tool. But, uh, I I want to see if, uh, maybe it could be possible to manage other Linux distros in a way that's like geeks because I like the geeks model, but um, you know, geeks is, uh, can be troublesome at times. Altervest says, will it break the stream? You mean running it now? Probably. Uh must be root to apply system configurations. Yes, that's right. I forgot. Uh user David will must be created. I must have got the logic backwards. If process is greater than zero, it says user A exists. No, it's wrong. If it's equal to zero, then the user exists. Otherwise, they don't exist. It would be nice to have comparison with Geeks, Nicks, OS3, etc. It won't be anywhere near as good as any of those for sure. It will not be as good as those. It could be, I guess, if we come up with like a unique way to accomplish the task um that's practical but still gives you some of the benefits. But things like OS tree and geeks and nicks, I think they're more like really like paving down what the system is supposed to be every time that you apply configuration. And this is more kind of like working with the existing system. Um, I wouldn't mind having a way to do things that was more like applying a configuration and not just trying to manipulate the current system. But then you end up getting into the same kind of setup that is in geeks and nicks where you have to have um you know like builds user David will exist. Okay. So we got it there. Good. All right. Well, I feel like somewhat relieved that I can write code in this language and it works and uh it looks pretty good. The the syntax highlighting looks weird because it's a custom package and it needs to be tweaked. That's easy. All right. Well, um I'll drop the code for this into the show notes. Um I'll probably have a a repo created for this at some point soon if I end up like actually continuing to work on it and um I might talk about it more in a future stream if people are interested. I don't know if it was interesting today at all to see that or even to think about the possibility of having such a tool, but um but it would be fun to try it, I think, just to see if there's maybe another alternative way to doing something like Geeks where you have a scheme based configuration that gets applied to a system, but uh you don't have to deal with the limitations that are imposed by Geeks just as part of its design. You know, they're not trying to do that to hassle you. It's just the way that the system is built and um it it's good for a lot of reasons, but it's also a pain for others. So, um yeah, if Codeberg lets you, you can go check out the site for uh Sigil at useigil.org. It's not loading right now because codeberg pages is down, but it is there and you can play with the language on the website. Gun says, "Next time we do a language server to do proper highlighting." We don't really need it to uh to do highlighting. Um most languages don't even have language server based highlighting, but um having it be able to do code completions uh you know normal ripple development uh things like that would really be necessary. Altervest says thanks for the stream without lots of scrolling text. Yes. Uh Nikl says this is roughly comparable to system manager which is Nyx config management for nonext systems. That's cool. Excuse me. Uh, Peter says, "Sigel held up pretty good for such a new language. Had remarkably little friction." Yeah, it's going to be better, too, because like once the tooling gets dialed in where it's easy to just install it and start working with it without having to um mess with it too much, I think it's going to be the most pleasant scheme to use, the most pleasant scheme implementation to use. And also, you can ship applications with it. So, uh, that'll be fun. We'll see how it goes. I mean, it's only been one month since I started working on it. So, we'll let's we'll see what happens in another month. Maybe I will have reimplemented Emacs method. That would be a stupid thing to do. Maybe I'll do it in three months. I don't know. Uh anywh who, uh thank you all very much for being here today. I really appreciate your time and attention. Hope you all have a great weekend. I should probably see you next Friday, but since it will be after Christmas, I will say merry Christmas to those of you who celebrate Christmas and happy holidays to the rest of you and happy non-h holidays to those of you who don't celebrate holidays because you're also valid too in my eyes. Um, so thank you all. Slatecoin win never. Auntie says, "Sigil editor coming soon." Yeah, I mean, I'm going to try it. It might be fun to try it. Nicholas says, "Add Sigil as a target for Skimax." Maybe [music] hack the planet indeed. All right, thank you all for being here. Uh, I'll see you next time. Till then, happy hacking. See you.
Video description
After 6 years with Guix, I love declarative system config but I'm tired of fighting the ecosystem. What if I built something simpler on top of Void Linux? In this stream, we'll sketch out a new tool for Guix-style system management without the pain. Written in Sigil, of course. Will it work? Let's find out! #linux #voidlinux #guix #scheme #sigil SUPPORT THE CHANNEL: 👍 Support My Work: https://systemcrafters.net/how-to-help/#support-my-work 📰 Subscribe to the Newsletter: https://systemcrafters.net/newsletter/ 👕 Check out the Store: https://systemcrafters.store 📘 Get Your Copy of Mastering Emacs: https://www.masteringemacs.org/r/systemcrafters?utm_source=yt&utm_medium=desc&utm_campaign=scme SHOW NOTES: https://systemcrafters.net/live-streams/december-19-2025/ JOIN THE COMMUNITY: https://systemcrafters.net/community/ (Forum and IRC chat!) https://fosstodon.org/@daviwil MY CONFIGURATION: (This site is currently down but will be back up soon!) https://config.daviwil.com https://config.daviwil.com/emacs https://config.daviwil.com/systems (Guix) OTHER SERIES: - Emacs Essentials: https://www.youtube.com/watch?v=48JlgiBpw_I&list=PLEoMzSkcN8oPZvSdewHG8uApD7THlLLCV - Emacs From Scratch: https://www.youtube.com/watch?v=74zOY-vgkyw&list=PLEoMzSkcN8oPH1au7H6B7bBJ4ZO7BXjSZ - Emacs Tips: https://www.youtube.com/watch?v=wKTKmE1wLyw&list=PLEoMzSkcN8oMHJ6Xil1YdnYtlWd5hHZql - Emacs Desktop Environment: https://www.youtube.com/watch?v=f7xB2fFk1tQ&list=PLEoMzSkcN8oNPbEMYEtswOVTvq7CVddCS - Emacs IDE: https://www.youtube.com/watch?v=E-NAM9U5JYE&list=PLEoMzSkcN8oNvsrtk_iZSb94krGRofFjN - Emacs Mail: https://www.youtube.com/watch?v=yZRyEhi4y44&list=PLEoMzSkcN8oM-kA19xOQc8s0gr0PpFGJQ - Learning Emacs Lisp: https://www.youtube.com/watch?v=RQK_DaaX34Q&list=PLEoMzSkcN8oPQtn7FQEF3D7sroZbXuPZ7 - Craft Your System with GNU Guix: https://www.youtube.com/watch?v=iBaqOK75cho&list=PLEoMzSkcN8oNxnj7jm5V2ZcGc52002pQU CREDITS: Coriolis Effect by logos feat. stefsax, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/mseq/26296 reNovation by airtone, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/airtone/60674 ukeSounds by airtone, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/airtone/32655 Between Worlds (Instrumental) by Aussens@iter, licensed Creative Commons 3.0 CC-BY http://ccmixter.org/files/tobias_weber/56664