š Learning Nix for my Devcontainers - Neovim
Read full transcript 66 segments
-
live live boing Hey Day Loop so Loop so trying out Nicks for the first time in trying out Nicks for the first time in trying out Nicks for the first time in my life reason being is that I'm working my life reason being is that I'm working my life reason being is that I'm working on a portable death container on a portable death container on a portable death container setup and I was relying on Brew but I setup and I was relying on Brew but I setup and I was relying on Brew but I realized that Brew is not supported on realized that Brew is not supported on realized that Brew is not supported on Arm based chips when you're running them Arm based chips when you're running them Arm based chips when you're running them in in in Linux so I need to find a solution for Linux so I need to find a solution for Linux so I need to find a solution for that and one of them is Nicks that and one of them is Nicks that and one of them is Nicks might not be the best solution but it might not be the best solution but it might not be the best solution but it is something uh I've been interested in NX something uh I've been interested in NX for a long time has been recommended to for a long time has been recommended to for a long time has been recommended to me many many times so it was just a me many many times so it was just a me many many times so it was just a matter of time until I started looking matter of time until I started looking matter of time until I started looking into it and now it seems like I have an into it and now it seems like I have an into it and now it seems like I have an interesting use case for it interesting use case for it interesting use case for it so just going to try it out so just going to try it out so just going to try it out this is it's completely fresh to me I this is it's completely fresh to me I this is it's completely fresh to me I have no idea what I'm going to be doing have no idea what I'm going to be doing have no idea what I'm going to be doing so let go for so let go for so let go for it these sections contain series of it these sections contain series of it these sections contain series of lessons to get started okay first steps lessons to get started okay first steps lessons to get started okay first steps everything starts with the first everything starts with the first everything starts with the first steps this tutorial series is where you steps this tutorial series is where you steps this tutorial series is where you should start learning
-
should start learning should start learning Nicks these lessons you'll use basic Nicks these lessons you'll use basic Nicks these lessons you'll use basic Nick commands to about yeah you also learn reading the Nick you also learn reading the Nick language and later use it to build language and later use it to build language and later use it to build portable reproducible development portable reproducible development portable reproducible development environment so this does look like environment so this does look like environment so this does look like exactly what I'm looking for yeah it is the the package manager not yeah it is the the package manager not the uh not the OS not yet at least I'm the uh not the OS not yet at least I'm the uh not the OS not yet at least I'm trying to go for the the package manager trying to go for the the package manager trying to go for the the package manager first and may who knows where it's going first and may who knows where it's going first and may who knows where it's going to lead and I needed to check my YouTube lead and I needed to check my YouTube here because my chat is not uh complet here because my chat is not uh complet here because my chat is not uh complet completely syncing to my chat that I completely syncing to my chat that I completely syncing to my chat that I have on my iPad here have on my iPad here have on my iPad here apparently so I have to switch back and apparently so I have to switch back and apparently so I have to switch back and forth sometimes so in a NYX shell environment sometimes so in a NYX shell environment you can immediately use any program you can immediately use any program you can immediately use any program package with NYX without installing it package with NYX without installing it package with NYX without installing it permanently you can also share the permanently you can also share the permanently you can also share the command invoking such a shell with
-
command invoking such a shell with command invoking such a shell with others and it will work on all Linux others and it will work on all Linux others and it will work on all Linux distributions WSL and Mac OS distributions WSL and Mac OS distributions WSL and Mac OS wow so you can share the wow so you can share the wow so you can share the command with others command with others command with others no once you install NYX you can use it no once you install NYX you can use it no once you install NYX you can use it to create new shell environments with to create new shell environments with to create new shell environments with programs you want to use yeah so install NYX so what what I'm use yeah so install NYX so what what I'm G to be doing is I'm going to do G to be doing is I'm going to do G to be doing is I'm going to do everything from everything from everything from from in a from in a from in a container defp pod and this container basically is just pod and this container basically is just a it's just the the Debian base image and it's just and it's just as as as um I'm going to delete it actually def um I'm going to delete it actually def um I'm going to delete it actually def delete just a base image nothing else delete just a base image nothing else delete just a base image nothing else installed in there yet but it is pulling installed in there yet but it is pulling installed in there yet but it is pulling in my DOT in my DOT in my DOT files devp up Docker so as you see here this defb is
-
Docker so as you see here this defb is pulling in my DOT files from my devbot clean oh it persisted my storage clean oh it persisted my storage here why did it do devp up dot provider devp up dot provider Docker and reset like can I open this chat just
-
like can I open this chat just only or do I have to watch myself every only or do I have to watch myself every only or do I have to watch myself every time I switch to the chat that's a bit annoying let see copy this your annoying let see copy this your [Music] just yeah now I just see chat so maybe I just yeah now I just see chat so maybe I should just chats so let's start with installing Nix chats so let's start with installing Nix um install the via the recommended um install the via the recommended um install the via the recommended multi-user installation or installation or Docker but this oh no of course not I am going to this oh no of course not I am going to be using a def container and there is a be using a def container and there is a be using a def container and there is a Dev container feature for that so Dev container feature for that so Dev container feature for that so containers. thefeatures NYX so this will be the Nyx package NYX so this will be the Nyx package manager feature manager feature manager feature and if I add this to my Dev container.
-
and if I add this to my Dev container. and if I add this to my Dev container. Jon I will Jon I will Jon I will have have have um Dev containers available add this one add this one here if I now rebuild it then it will here if I now rebuild it then it will here if I now rebuild it then it will install NY for up dot provider up dot provider Docker create
-
there oh I can even give it the packages there oh I can even give it the packages here that's nice I'm try I'm thinking of using my nice I'm try I'm thinking of using my setup script to pull in my DOT files but setup script to pull in my DOT files but setup script to pull in my DOT files but maybe I can also use this to have my maybe I can also use this to have my maybe I can also use this to have my packages it's very repo specific then packages it's very repo specific then packages it's very repo specific then though but so when we have installed next but so when we have installed next then suggests I take a look at coway C let's try that it's still building my C let's try that it's still building my container because I had to recreate it so in here you will enter a shell with so in here you will enter a shell with the packages the packages the packages installed and then when you exit the installed and then when you exit the installed and then when you exit the shell they won't be there
-
anymore oh this looks really nice I'm anymore oh this looks really nice I'm excited about excited about excited about this e right so I'm in my Dev container now right so I'm in my Dev container now with and it should have with and it should have with and it should have Nicks Nicks Nicks [Music] so let's test out if I have so let's test out if I have cow command not
-
found and then we will open a Nick shell found and then we will open a Nick shell with cow with cow and shell and shell and then I can use the coway and lolcat then I can use the coway and lolcat then I can use the coway and lolcat commands Okay that's a really cool commands Okay that's a really cool commands Okay that's a really cool concept that you can just run a shell concept that you can just run a shell concept that you can just run a shell with some packages that you want to with some packages that you want to with some packages that you want to try and exit it now cow say it now cow say hello now cow is not available to me hello now cow is not available to me hello now cow is not available to me anymore I'm loving Nicks already then you can run it Direct from already then you can run it Direct from an Nick an Nick an Nick [Music] [Music] [Music] sh really nice search for packages what can you nice search for packages what can you put in a shell environment if you can put in a shell environment if you can put in a shell environment if you can think of it there's probably a next think of it there's probably a next think of it there's probably a next package of one yeah so here this is the search and
-
one yeah so here this is the search and if I want to have flux then here you if I want to have flux then here you if I want to have flux then here you have all of the packages containing flux so so neovim has its own package here neovim has its own package here neovim has its own package here in n it's defined here editors neovim n it's defined here editors neovim default. n and here it will also have a version n and here it will also have a version 094 and what is the version I have Lo 094 and what is the version I have Lo 094 and what is the version I have Lo locally Neo version my my local version is 095 so it version my my local version is 095 so it is a little bit behind interestingly but it could be fun to interestingly but it could be fun to contribute to Nyx by submitting PRS for contribute to Nyx by submitting PRS for contribute to Nyx by submitting PRS for version upgrades that's actually a nice way to upgrades that's actually a nice way to contribute
-
run any combination of programs so once run any combination of programs so once you have the package name you can start you have the package name you can start you have the package name you can start with a with a with a shell with those packages shell with those packages shell with those packages so so so it's this is really nice so in the nick shell we are now nice so in the nick shell we are now opening git neovim and NOS so we opening git neovim and NOS so we opening git neovim and NOS so we basically have a full Dev environment basically have a full Dev environment basically have a full Dev environment based on a command which get yeah so it's all stored in the which get yeah so it's all stored in the next store which then already it is picking up the dot then already it is picking up the dot files that I have in my configuration this is my configuration this is cool so in my DOT files I specify that I cool so in my DOT files I specify that I cool so in my DOT files I specify that I need lazy need lazy need lazy Vim so just by having Nicks available in Vim so just by having Nicks available in Vim so just by having Nicks available in my Dev container I can install Vim in my Dev container I can install Vim in my Dev container I can install Vim in the local
-
shell and now I have envm in my shell and now I have envm in my container already container already container already this is cool so I'm going out of the Nick shell cool so I'm going out of the Nick shell now and if I now run enim it won't find now and if I now run enim it won't find now and if I now run enim it won't find it okay towards okay towards reproducibility the shell environments reproducibility the shell environments reproducibility the shell environments are convenient but the examples so far are convenient but the examples so far are convenient but the examples so far not reproducible yet yeah but it is not reproducible yet yeah but it is not reproducible yet yeah but it is Handy to be able to just uh try out Handy to be able to just uh try out Handy to be able to just uh try out a a program in a shell yeah reproduce yeah this is what I shell yeah reproduce yeah this is what I want a reproducible example yeah so this creates a fully yeah so this creates a fully reproducible you can run it anywhere reproducible you can run it anywhere reproducible you can run it anywhere anytime to obtain this exact same anytime to obtain this exact same anytime to obtain this exact same version of git so you do the Nick shell version of git so you do the Nick shell version of git so you do the Nick shell with the package git and run this yeah pure discards most environment yeah pure discards most environment variables set on your system when variables set on your system when variables set on your system when running the shell it means that only the running the shell it means that only the running the shell it means that only the git provided by NYX is available in that git provided by NYX is available in that git provided by NYX is available in that shell oh shell oh shell oh yeah yeah
-
okay so the next step is reproducible okay so the next step is reproducible interpreted scripts use n for interpreted scripts use n for interpreted scripts use n for reproducible scripts take the following script with scripts take the following script with fetches the content of XML of a URL fetches the content of XML of a URL fetches the content of XML of a URL converts it to Json and formats it for converts it to Json and formats it for converts it to Json and formats it for better readability it requires curl JQ it also requires the it requires curl JQ it also requires the bash interpreter with NYX we can declare all interpreter with NYX we can declare all dependencies explicitly and produce a dependencies explicitly and produce a dependencies explicitly and produce a script that will always run on any script that will always run on any script that will always run on any machine that supports NYX ah so you use you point the script NYX ah so you use you point the script to a Nick shell yeah that's nice create a file with NYX packages releases create a file with NYX packages releases with the following content and I'm not with the following content and I'm not with the following content and I'm not going to add the ashh in extension going to add the ashh in extension going to add the ashh in extension because that is a big noo because that is a big noo because that is a big noo according to the Google
-
executable so the first line is a executable so the first line is a standard standard standard shebang the additional shebang L lines shebang the additional shebang L lines shebang the additional shebang L lines are Nick specific construct Let's see we specify bash as construct Let's see we specify bash as The Interpreter for the rest of the file The Interpreter for the rest of the file The Interpreter for the rest of the file with the I option okay so you're running the Nick shell okay so you're running the Nick shell using bash As an interpreter and then it will open a NYX interpreter and then it will open a NYX shell with these packages and it also strips away packages and it also strips away environment variables and points to environment variables and points to environment variables and points to specific specific specific G okay I'm getting it it Brave step NYX is an entirely it Brave step NYX is an entirely different way to do Linux different way to do Linux different way to do Linux yeah well I feel I'm ready for yeah well I feel I'm ready for yeah well I feel I'm ready for it like I'm now looking into Dev pods it like I'm now looking into Dev pods it like I'm now looking into Dev pods and and and and and and portable Dev environments and Nyx just portable Dev environments and Nyx just portable Dev environments and Nyx just seems the perfect solution for that yep seems the perfect solution for that yep seems the perfect solution for that yep here we here we here we go our script worked so that's really cool then the next step is the Nyx
-
cool then the next step is the Nyx language Basics ni l is designed for conveniently Basics ni l is designed for conveniently creating and composing derivations creating and composing derivations creating and composing derivations precise descriptions of how contents of precise descriptions of how contents of precise descriptions of how contents of existing files are used to derive new files um let's files um let's rewind next language is designed for rewind next language is designed for rewind next language is designed for conveniently conveniently conveniently creating and composing creating and composing creating and composing derivations precise descriptions of how derivations precise descriptions of how derivations precise descriptions of how contents of existing files are used to contents of existing files are used to contents of existing files are used to derive new files okay so you're taking existing files and okay so you're taking existing files and creating new files out of those it's a creating new files out of those it's a creating new files out of those it's a domain specific purely functional lazily domain specific purely functional lazily domain specific purely functional lazily evaluated dynamically typed programming evaluated dynamically typed programming evaluated dynamically typed programming language wow it's it's a entire language language wow it's it's a entire language language wow it's it's a entire language of itself yeah so I'm mostly interested in itself yeah so I'm mostly interested in NYX packages now but who knows maybe I NYX packages now but who knows maybe I NYX packages now but who knows maybe I will go towards NX OS I mean I'm I'm will go towards NX OS I mean I'm I'm will go towards NX OS I mean I'm I'm intrigued intrigued intrigued now so you can fully declara now so you can fully declara now so you can fully declara declaratively configure your Linux declaratively configure your Linux declaratively configure your Linux distribution based on a NYX distribution based on a NYX distribution based on a NYX language that's really cool you may quickly encounter Nick's
-
cool you may quickly encounter Nick's language expressions that look very language expressions that look very language expressions that look very complicated as with any programming complicated as with any programming complicated as with any programming language the required amount of Nick's language the required amount of Nick's language the required amount of Nick's language closely matches the complexity language closely matches the complexity language closely matches the complexity of the problem it's supposed to solve yeah so my use case is I want to solve yeah so my use case is I want to just install a few packages in a Dev pod just install a few packages in a Dev pod just install a few packages in a Dev pod that's all I want to do so I don't have that's all I want to do so I don't have that's all I want to do so I don't have to go very deep into this to go very deep into this to go very deep into this but I can just glance over this and take but I can just glance over this and take but I can just glance over this and take from it what I need this tutorial should enable you to read this tutorial should enable you to read typical NYX language code and understand typical NYX language code and understand typical NYX language code and understand its structure yeah okay so this is for structure yeah okay so this is for actually learning the entire NYX language will probably take me about an language will probably take me about an hour but I don't think I need to yeah I don't have to go into the the NY yeah I don't have to go into the the NY language I mean it is insane though it language I mean it is insane though it language I mean it is insane though it is a entire programming language super cool but this is way more language super cool but this is way more than I need I just need a a list of than I need I just need a a list of than I need I just need a a list of packages and it and I need to install packages and it and I need to install packages and it and I need to install those with
-
NYX definitely interested in going NYX definitely interested in going deeper into this though that like in the be in the on the that like in the be in the on the beginning page here it's beginning page here it's beginning page here it's says here reproducible development says here reproducible development says here reproducible development environments that is basically what I'm environments that is basically what I'm environments that is basically what I'm what I'm interested in here next I saw there was a page about Nicks next I saw there was a page about Nicks where they ex they talked explicitly
-
where they ex they talked explicitly where they ex they talked explicitly about installing the packages declarative builds and packages declarative builds and deployments deployments deployments yeah next packages basic package management URL not oh basic package management URL not oh that's a shame I think that sounds like that's a shame I think that sounds like that's a shame I think that sounds like what I wanted to do I had this guide I had this guide install it home manager has a modules for them it home manager has a modules for them so that's with some sort of addition to
-
so that's with some sort of addition to so that's with some sort of addition to Nyx package manager but if you do not Nyx package manager but if you do not Nyx package manager but if you do not use home manager you can use the use home manager you can use the use home manager you can use the following code in your NYX OS following code in your NYX OS following code in your NYX OS configuration so this is just for configuration so this is just for configuration so this is just for the this for the Nyx the this for the Nyx the this for the Nyx OS you can also manually add neim to OS you can also manually add neim to OS you can also manually add neim to your packages so the question then is how do I install so the question then is how do I install a package on the Linux a package on the Linux a package on the Linux level because here I would be in a NYX level because here I would be in a NYX level because here I would be in a NYX shell but how do I use NYX to install a shell but how do I use NYX to install a shell but how do I use NYX to install a package on the normal B shell level there's a great Guide online line level there's a great Guide online line called zero to Nicks you should check it called zero to Nicks you should check it called zero to Nicks you should check it out okay zero to okay zero to Nicks you're guide to learning Nicks and good create a development good create a development environment environment environment okay let's see explore next development
-
okay let's see explore next development okay let's see explore next development environment next develop yeah okay so this would this develop yeah okay so this would this would start a also starts a a new shell but what I'm interested in but what I'm interested in is like my my DOT files contain a my my DOT files contain a script and I want this this this script script and I want this this this script script and I want this this this script sets up my bash RC and so forth inside sets up my bash RC and so forth inside sets up my bash RC and so forth inside of my Dev of my Dev of my Dev container and I was using Brew to container and I was using Brew to container and I was using Brew to install certain packages into that Linux environment but environment but though they are installed in like the though they are installed in like the though they are installed in like the actual normal bash shell but I'm actual normal bash shell but I'm actual normal bash shell but I'm wondering if I have to run everything wondering if I have to run everything wondering if I have to run everything inside of the Nyx inside of the Nyx inside of the Nyx shell if I choose to go for Nyx in shell if I choose to go for Nyx in shell if I choose to go for Nyx in this example or in this application
-
yeah this is this uses NYX develop but I yeah this is this uses NYX develop but I want to use defp packages here declarative package packages here declarative package management I think this is what I need using package overrides it is need using package overrides it is possible to manage packages possible to manage packages possible to manage packages declaratively this means that we can declaratively this means that we can declaratively this means that we can list all of our desired packages within list all of our desired packages within list all of our desired packages within a declarative Nick's expression interesting so it looks like this is
-
interesting so it looks like this is some this is what I'm looking for here you have this in in Con in your here you have this in in Con in your config so I can use that in my my setup config so I can use that in my my setup config so I can use that in my my setup script I'm already like adding Basher C script I'm already like adding Basher C script I'm already like adding Basher C and things like that then I can have the list of packages then I can have the list of packages that I want in the dot files that I want in the dot files that I want in the dot files repo and then the setup script can run repo and then the setup script can run repo and then the setup script can run this command I have my do config and then we would
-
I have my do config and then we would create create create a NYX packages directory and in there there will be a directory and in there there will be a config NX and this will contain the packages that and this will contain the packages that I want to install install so deleting all of that what I want is is neim neim neim and I don't know let's let's try some and I don't know let's let's try some and I don't know let's let's try some packages packages nio search here we packages nio search here we go so neovim here neovim and another one one neovim here neovim and another one one is going to is going to is going to be Cube CTL for
-
example so to install in your example so to install in your environment you can run NYX n i a my P and envm is also and envm is also okay yeah this is what I'm looking for uh I'm just planning to use NX I'm for uh I'm just planning to use NX I'm basically replacing Brew to install basically replacing Brew to install basically replacing Brew to install packages declaratively yeah I I think this is how declaratively yeah I I think this is how I can do it because now my envm works to make
-
to make the NY directory in the config the NY directory in the config the NY directory in the config [Music] packages and packages and then there will be so in here I will then have so in here I will then have a config config config here so these are here so these are here so these are the packages that I want
-
okay let's give it a little bit better okay let's give it a little bit better name instead of my packages it will be be coding I don't know I'll just call it I'll just call it coding so the packages that I had were FD rip so the packages that I had were FD rip grap Starship all of those I want to grap Starship all of those I want to grap Starship all of those I want to have in my in my Dev container FD rip grap are those FD rip grap are those [Music] [Music] [Music] available available available FD rip grip
-
packages install defined n packages install defined n packages from time time yeah so if I if I run the setup script yeah so if I if I run the setup script yeah so if I if I run the setup script now it's in the wrong directory it's not in it's in the wrong directory it's not in the home directory it's in the xcg the home directory it's in the xcg the home directory it's in the xcg config home config home config home directory coding unable to build profile there's a
-
coding unable to build profile there's a conflict for the following file this is probably because I have multiple this is probably because I have multiple package environments now so at least I know it works in terms now so at least I know it works in terms of no I don't want to commit my changes to no I don't want to commit my changes to the neovim directory so how do I
-
here we go kit commit here we go kit commit M try moving to to n so I'm going to push n so I'm going to push that and I'm going to go out of my Dev that and I'm going to go out of my Dev that and I'm going to go out of my Dev container Death part delete Debian and I'm going Death part delete Debian and I'm going to completely rebuild so I'm going to now now is the big test so I'm going to now now is the big test basically now I'm recreating the entire packages from the file that I created so packages from the file that I created so that's working and if I then do defb that's working and if I then do defb that's working and if I then do defb SSH Debian then let's see one of the things I well then let's see one of the things I well I see that Starship is here already from I see that Starship is here already from I see that Starship is here already from The The The Prompt but now Nick should have
-
Prompt but now Nick should have Prompt but now Nick should have installed uh neovim so let's try that installed uh neovim so let's try that installed uh neovim so let's try that yep wow it yep wow it yep wow it works neovim is starting it works starting it works hello there hello there hello there ox9 nice to see you this is exactly what I wanted I you this is exactly what I wanted I figured it out I can use Nick out I can use Nick to to install packages from a list to to install packages from a list to to install packages from a list instead of Brew instead of Brew instead of Brew this is cool okay this is the configuration that cool okay this is the configuration that I want know for sure low yeah that might be because of my
-
low yeah that might be because of my microphone like is it is it too low I mean low I mean like I could increase the volume on my thing here like like this is this is thing here like like this is this is this now let me know if it's uh too loud or now let me know if it's uh too loud or if it's better or worse it's better okay thank you for worse it's better okay thank you for letting me know so when I'm opening so when I'm opening my config n let's see will it show me any it n let's see will it show me any it doesn't recommend me any anything about doesn't recommend me any anything about doesn't recommend me any anything about NYX but can I install the the um I recently come across your Channel
-
I recently come across your Channel today I wanted to follow your homelab today I wanted to follow your homelab today I wanted to follow your homelab live videos and notice they are not live videos and notice they are not live videos and notice they are not beginner friendly and not properly beginner friendly and not properly beginner friendly and not properly ordered no that's right so the these ordered no that's right so the these ordered no that's right so the these live streams I'm just basically working live streams I'm just basically working live streams I'm just basically working and talking and showing what I do but and talking and showing what I do but and talking and showing what I do but there's no structure to it at all um if there's no structure to it at all um if there's no structure to it at all um if you want a more structured approach I you want a more structured approach I you want a more structured approach I highly recommend you check out my school highly recommend you check out my school highly recommend you check out my school Community I um I have a 11-hour course Community I um I have a 11-hour course Community I um I have a 11-hour course where I start your where I start your where I start your uh uh kubernetes home lab Journey from uh uh kubernetes home lab Journey from uh uh kubernetes home lab Journey from scratch and I now have a like I have the scratch and I now have a like I have the scratch and I now have a like I have the fundamentals there where you learn fundamentals there where you learn fundamentals there where you learn everything about kubernetes and how to everything about kubernetes and how to everything about kubernetes and how to run it on a local run it on a local run it on a local environment and on I'm building on that environment and on I'm building on that environment and on I'm building on that course to basically teach you how to course to basically teach you how to course to basically teach you how to create a kubernetes home lab so if create a kubernetes home lab so if create a kubernetes home lab so if you're interested in it I highly suggest you're interested in it I highly suggest you're interested in it I highly suggest you go you check out my school community so it looks like my config community so it looks like my config code here seems fine and actually I'm code here seems fine and actually I'm code here seems fine and actually I'm going going going to let's to let's to let's [Music] [Music] [Music] do I'm going to call it Misha tools how do I'm going to call it Misha tools how do I'm going to call it Misha tools how about that so what other pack packages about that so what other pack packages about that so what other pack packages am I going to need am I going to need am I going to need like this is going to be the the like this is going to be the the like this is going to be the the universal package list that I'm going to universal package list that I'm going to universal package list that I'm going to be pulling into all of my Dev containers
-
be pulling into all of my Dev containers be pulling into all of my Dev containers so I want neovim Starship FD rip crab so I want neovim Starship FD rip crab so I want neovim Starship FD rip crab lazy git Cube lazy git Cube lazy git Cube CTL uh I want K9s in there too too K9s here K9s here K9s here so that one I can so that one I can so that one I can have and I wanted the have and I wanted the have and I wanted the flux CD I want flux in there too flux CD quite the pace pumping out videos and CD quite the pace pumping out videos and courses yeah thank you I'm working 12 14 courses yeah thank you I'm working 12 14 courses yeah thank you I'm working 12 14 hours a hours a hours a day hey hours of work four hours of day hey hours of work four hours of day hey hours of work four hours of content creation and now I'm relaxing on content creation and now I'm relaxing on content creation and now I'm relaxing on a Sunday learning but yeah I think this will be a list but yeah I think this will be a list that I can that I want to carry with that I can that I want to carry with that I can that I want to carry with me so going to clean that up and me so going to clean that up and me so going to clean that up and then also I can clean up
-
then also I can clean up then also I can clean up my Brew packages so Misha tools I like that name packages so Misha tools I like that name better I added K9s and flux CD and I better I added K9s and flux CD and I better I added K9s and flux CD and I remove remove remove this so feed move to Debian and I'm also going to delete my Debian and I'm also going to delete my death B death B death B delete going to delete my home lab Dev delete going to delete my home lab Dev delete going to delete my home lab Dev container and I'm going to migrate my container and I'm going to migrate my container and I'm going to migrate my home lab def container to a different home lab def container to a different home lab def container to a different one CPR
-
CPR lab death containers lab death containers lab death containers Debian death container now my Dev home lab repo has these Dev now my Dev home lab repo has these Dev container in your Homeland videos you already set in your Homeland videos you already set up your up your up your [Music]
-
[Music] [Music] abtu if you can make a video setting up abtu if you can make a video setting up abtu if you can make a video setting up ubun or any other Linux Dro that will be ubun or any other Linux Dro that will be ubun or any other Linux Dro that will be great yeah I am going to do a course uh great yeah I am going to do a course uh great yeah I am going to do a course uh about setting up Ubuntu and k3s in about setting up Ubuntu and k3s in about setting up Ubuntu and k3s in Virtual machines that's going to be the next machines that's going to be the next part in my hom lab course um okay so I've now added my new Dev um okay so I've now added my new Dev container to my home lab repo and I want container to my home lab repo and I want container to my home lab repo and I want to be running that on my local system so to be running that on my local system so to be running that on my local system so now if I do def pod up Dot and then now if I do def pod up Dot and then now if I do def pod up Dot and then provider provider provider Docker then it will create the dev Docker then it will create the dev Docker then it will create the dev [Music] repo it's installing all of the Nyx repo it's installing all of the Nyx packages container so if I then open neovim it container so if I then open neovim it will install everything
-
so I'm now in a completely fresh so I'm now in a completely fresh environment running in a container on my environment running in a container on my environment running in a container on my MacBook installing all of the packages MacBook installing all of the packages MacBook installing all of the packages that I defined in Nyx lazy Vim is lazy Vim is updated oh wow there's a updated oh wow there's a updated oh wow there's a frustrating timeout now in My Starship interestingly uh let's see there are interestingly uh let's see there are there are some things not completely there are some things not completely there are some things not completely working yet so so check else three C executable not else three C executable not found that's a problem node executable found that's a problem node executable found that's a problem node executable not found that's a problem
-
okay okay so there there are some things okay okay so there there are some things missing here but that's that's the missing here but that's that's the missing here but that's that's the challenge I'm now in a nified challenge I'm now in a nified challenge I'm now in a nified environment I just need to Define what environment I just need to Define what environment I just need to Define what the packages are that are missing fail to install go please so it's fail to install go please so it's probably probably probably missing um go then so if I go to Lazy missing um go then so if I go to Lazy missing um go then so if I go to Lazy extras now it will suggest I in now it will suggest I in install install install [Music] please fail to install yams so what's please fail to install yams so what's that about Mason log
-
let's see go is not executable npm is let's see go is not executable npm is not not not executable so apparently I'm missing the executable so apparently I'm missing the executable so apparently I'm missing the go and npm go and npm go and npm binaries so those are ones that I am binaries so those are ones that I am binaries so those are ones that I am going to need in my environment so go so it's probably going to be no and um so it's probably going to be no and um go and no GS that I need to add to my go and no GS that I need to add to my go and no GS that I need to add to my package so this will be on top so this will be on top go and go and go and npm so that will be no GS 22 because those are needed for GS 22 because those are needed for installing installing installing neovim so let's run the setup script neovim so let's run the setup script neovim so let's run the setup script again
-
again now it's installing go please again now it's installing go please that's good and yams is also good and yams is also installed so I'm now able to installed so I'm now able to installed so I'm now able to install lazy extras so yams is now so yams is now active great I'm a little bit annoyed that My great I'm a little bit annoyed that My Starship prompt is it's a little bit laggy so what is is it's a little bit laggy so what is that about if I'm in my root that about if I'm in my root that about if I'm in my root directory there is absolutely no then it did say something about G didn't then it did say something about G didn't it
-
here executing command user local bin here executing command user local bin git timed out valuable so some conclusions so far on valuable so some conclusions so far on the the the Nick like I I went into this because I Nick like I I went into this because I Nick like I I went into this because I have a very specific use case and that have a very specific use case and that have a very specific use case and that is that I need to list install a list of is that I need to list install a list of is that I need to list install a list of packages uh in Dev container packages uh in Dev container packages uh in Dev container that's all that I want to do I just want that's all that I want to do I just want that's all that I want to do I just want to have a list of packages that it needs to have a list of packages that it needs to have a list of packages that it needs to to to install and now I I have that it's install and now I I have that it's install and now I I have that it's working but I was almost at a point just working but I was almost at a point just working but I was almost at a point just now already where I was thinking like oh now already where I was thinking like oh now already where I was thinking like oh my God this is way too much way too my God this is way too much way too my God this is way too much way too um complicated and in a um complicated and in a um complicated and in a way like it it is extremely complicated way like it it is extremely complicated way like it it is extremely complicated I had no idea that NYX was so went so I had no idea that NYX was so went so I had no idea that NYX was so went so deep as as this I I just thought it deep as as this I I just thought it deep as as this I I just thought it would be an a replacement for brew but would be an a replacement for brew but would be an a replacement for brew but this is just Brew on steroids times a this is just Brew on steroids times a this is just Brew on steroids times a thousand and it's freaking
-
thousand and it's freaking thousand and it's freaking awesome but it's also very intimidating awesome but it's also very intimidating awesome but it's also very intimidating for sure I I'm happy that I have this for sure I I'm happy that I have this for sure I I'm happy that I have this specific use specific use specific use case um and I'm very much interested in case um and I'm very much interested in case um and I'm very much interested in this I definitely want to learn more this I definitely want to learn more this I definitely want to learn more about this but I'm just going to about this but I'm just going to about this but I'm just going to focus on my very Niche use case specifically but I am a little bit specifically but I am a little bit dissatisfied with the fact that dissatisfied with the fact that dissatisfied with the fact that my there is this 1 second timeout when I my there is this 1 second timeout when I my there is this 1 second timeout when I when I do an LS in my G repo when I do an LS in my G repo when I do an LS in my G repo here and that's because of Starship so I'm now I'm not using Starship so I'm now I'm not using Starship and now it's just blazing fast Starship and now it's just blazing fast Starship and now it's just blazing fast so there is a problem with Starship and so there is a problem with Starship and so there is a problem with Starship and how it's treating the how it's treating the how it's treating the the the GI my the the binaries for git in my system
-
my the the binaries for git in my system here in my here in my here in my container CU if I'm here in my home lab repo like there's absolutely no problem repo like there's absolutely no problem on my local machine to have Starship on on my local machine to have Starship on on my local machine to have Starship on so there's no problem with the actual so there's no problem with the actual so there's no problem with the actual git configuration if I reenable Starship and configuration if I reenable Starship and I'm going out of the container and going I'm going out of the container and going I'm going out of the container and going back into it again again executing command user local bin again executing command user local bin git timed lock why is there a lock on this lock why is there a lock on this thing uh Starship lock
-
prompt so this is the prompt so this is the prompt and then there is this lock prompt and then there is this lock prompt and then there is this lock symbol there timings timings Starship print timings so get status is taking a long timings so get status is taking a long time ah here fatal detected dubious ownership ah here fatal detected dubious ownership in repository at workspaces hom lab this is the problem detected dubious lab this is the problem detected dubious ownership in repository what the hell is ownership in repository what the hell is ownership in repository what the hell is that
-
workspaces it's owned by workspaces it's owned by dialout what the heck is that about dialout okay so now the the git by dialout okay so now the the git by running this git running this git running this git config command it is quick again but there's a command it is quick again but there's a problem with how this def pod is then problem with how this def pod is then problem with how this def pod is then cloning my repo apparently but at least cloning my repo apparently but at least cloning my repo apparently but at least I have a I have a I have a workaround okay this is going quicker Okay cool so this was the def pod Okay cool so this was the def pod running on my local Docker now let's try running it on my Docker now let's try running it on my kubernetes
-
cluster so now if I cluster so now if I do defp up um deleting the old um deleting the old one and if I do it defp up now it should one and if I do it defp up now it should one and if I do it defp up now it should run it on the default provider which is run it on the default provider which is run it on the default provider which is my kubernetes my kubernetes my kubernetes cluster yeah and as it's doing that I'm cluster yeah and as it's doing that I'm cluster yeah and as it's doing that I'm going going going to go to the how long have I been streaming
-
how long have I been streaming for one and a half hours so I am going to write a few notes hours so I am going to write a few notes uh these can all go to these can all go to my public saddle my public saddle my public saddle Casas Casas Casas and I wonder like this this whole def and I wonder like this this whole def and I wonder like this this whole def pod def container thing is becoming a pod def container thing is becoming a pod def container thing is becoming a real um bit of a Fascination for me so I'm wondering if I should have me so I'm wondering if I should have this as this as this as [Music] [Music] [Music] a separate topic or if I should a separate topic or if I should a separate topic or if I should like or is NYX a separate toic Topic in like or is NYX a separate toic Topic in like or is NYX a separate toic Topic in itself it basically is NY is probably going to go become a is NY is probably going to go become a full new obsession on mine so let's just full new obsession on mine so let's just full new obsession on mine so let's just create a new map of content for that
-
that so let's so let's so let's see see see Ni um Ni um Ni um is much more is much more is much more powerful than I thought expecting it to be a slightly thought expecting it to be a slightly better better better Brew this my first exposure to this my first exposure to Nyx has been mindblowing been mindblowing basically has been mindblowing basically has been mindblowing basically has been mindblowing um I'm glad I found out I um I'm glad I found out I um I'm glad I found out I could I'm glad I figured out how to could I'm glad I figured out how to could I'm glad I figured out how to install packages from a install packages from a install packages from a list and list and list and stay with that because NYX can do so stay with that because NYX can do so stay with that because NYX can do so much more it even has more it even has even has a fully fledged programming language so it it is fledged programming language so it it is fascinating really and let's really and let's see uh um so what I did
-
um so what I did was this could actually be a blog post was this could actually be a blog post was this could actually be a blog post really maybe I should just write a blog really maybe I should just write a blog really maybe I should just write a blog post about this packages packages so everything is now so everything is now so everything is now installed on my in my devp so installed on my in my devp so installed on my in my devp so devp devp devp SSH H interestingly this there is no problem interestingly this there is no problem with the Starship prompt here with the Starship prompt here with the Starship prompt here now so which Cube now so which Cube now so which Cube CTL is there Cube CTL is there and CTL is there Cube CTL is there and CTL is there Cube CTL is there and then neovim is there too thing maybe I'll just write a little
-
thing maybe I'll just write a little blog post so NYX NYX n Linux uh Dev environments is going to be Linux uh Dev environments is going to be a new tag I I've
-
I I've [Music] [Music] [Music] been I've been obsessed with Dev been I've been obsessed with Dev been I've been obsessed with Dev containers and death pots recently and I'm learning a lot about portable and I'm learning a lot about portable Dev environments this is environments this is truly the next level of config management and the future of Dev management and the future of Dev environments in my opinion [Music] [Music] um I relied on brew as my package um I relied on brew as my package um I relied on brew as my package manager manager manager [Music] [Music] [Music] however I ran into problems when I however I ran into problems when I however I ran into problems when I wanted to run my Linux Dev architecture there is a little bit of
-
architecture there is a little bit of frustrating delay in my terminal I think frustrating delay in my terminal I think frustrating delay in my terminal I think I need to restart my terminal let's get out of here get out of let's get out of here get out of here my t-u session is almost four days here my t-u session is almost four days here my t-u session is almost four days old so let's just have a clean t-o yeah that feels a lot better t-o yeah that feels a lot better sometimes you just need to refresh your sometimes you just need to refresh your sometimes you just need to refresh your terminal terminal terminal so um Linux Brew not support on arm architecture architecture then then then um use case um use case um use case all I need to do is install a list of all I need to do is install a list of all I need to do is install a list of packages into a Linux container uh I was using Brew because I container uh I was using Brew because I need to install need to install need to install packages like K9s and packages like K9s and packages like K9s and flux which are
-
flux which are flux which are sometimes not available in in Registries in the Linux in the in the Registries in the Linux in the in the Registries in the Linux in the in the stand what is it called it the normal repositories repositories my current devp my current devp my current devp setup contains setup contains setup contains a setup a setup a setup script which tinkering ni I managed tinkering ni I managed to um packages so what I've done packages so what I've done is St B SSH
-
JS here no gs22 that's JS here no gs22 that's it no it no it no [Music] okay this is my setup okay this is my setup script it sets up script it sets up script it sets up the next packages the next packages the next packages [Music] [Music] [Music] directory and the cont fig. next
-
set up the next and the config n the set up the next and the config n the config n contains the packages I want to command uh installs all of the command uh installs all of the packages into my environment my pandoc is not rendering correctly my pandoc is not rendering correctly that's that's that's [Music] annoying I must have done something annoying I must have done something wrong oh well okay so well okay so this is going to be the blog okay been obsessed with Dev containers
-
okay been obsessed with Dev containers and death bu recently learning L and death bu recently learning L and death bu recently learning L portable Dev environments yeah I relied portable Dev environments yeah I relied portable Dev environments yeah I relied on Brew is my package on Brew is my package on Brew is my package [Music] manager all I need to do is install list manager all I need to do is install list of packages into a Linux container I was of packages into a Linux container I was of packages into a Linux container I was using using using [Music] [Music] [Music] Brew yeah yeah that's all I want to convey in that yeah that's all I want to convey in that blog post uh then I will just include the post uh then I will just include the links to I was lucky to find I was lucky to find this in the N documentation and I'm this in the N documentation and I'm this in the N documentation and I'm mostly writing this for mostly writing this for mostly writing this for myself because I want to be able to find myself because I want to be able to find myself because I want to be able to find this again when one yes still using Yugo for my blog
-
one yes still using Yugo for my blog that's right here the claive package management right here the claive package management that is the that is that is the that is that is the that is the the golden URL here had I not found this had I not found this particular heading I particular heading I particular heading I think I would have been lost in the weeds but Nick has weeds but Nick has definitely definitely definitely peaked my interest and I look forward to peaked my interest and I look forward to peaked my interest and I look forward to learn more about learn more about learn more about it works no this is works no this is not this isn't even the the heading that not this isn't even the the heading that not this isn't even the the heading that I want on I want on I want on it it it uh so what is the here this is it build an
-
here this is it build an environment this is the one declarative environment this is the one declarative environment this is the one declarative package management here Nick's packages stable management here Nick's packages stable that's it this is the this is the one cool now I'm also wondering can I pin cool now I'm also wondering can I pin this to a particular version maybe that would be interesting version maybe that would be interesting to figure to figure to figure out let's see
-
versions okay sorry then you have versions okay sorry then you have to go deep no that's fine now it's just to go deep no that's fine now it's just to go deep no that's fine now it's just using the using the using the latest that's probably fine for now latest that's probably fine for now latest that's probably fine for now especially not needed in this blog especially not needed in this blog especially not needed in this blog post so let's uh publish it blog so let's uh publish it blog Pub N Pub N Pub N and let's tweet that NYX and let's tweet that NYX and let's tweet that NYX nyos nyos nyos Linux coding my theme looks Pleasant thank you coding my theme looks Pleasant thank you very much it has been unchanged for a very much it has been unchanged for a very much it has been unchanged for a year can I use it to my local dot files can I use it to my local dot files instead of Brew I think you Brew I think you can uh I'm using it in in a Dev can uh I'm using it in in a Dev can uh I'm using it in in a Dev container fashion now but I on my Mac container fashion now but I on my Mac container fashion now but I on my Mac I'm just going to continue using Brew I'm just going to continue using Brew I'm just going to continue using Brew I'm not going to over complicate things uh no knowing you a little bit things uh no knowing you a little bit mola I think mola I think mola I think um if you're happy with Brew especially
-
um if you're happy with Brew especially um if you're happy with Brew especially for local environment then I wouldn't for local environment then I wouldn't for local environment then I wouldn't go and dig into this too much because go and dig into this too much because go and dig into this too much because NYX is a huge Rabbit Hole I I figured NYX is a huge Rabbit Hole I I figured NYX is a huge Rabbit Hole I I figured out that much already like I have already like I have I have found this very I have found this very I have found this very particular use case of it but even this particular use case of it but even this particular use case of it but even this document is just huge right and that's document is just huge right and that's document is just huge right and that's just the Nyx packages I mean look at this whole I mean look at this whole document declarative package management document declarative package management document declarative package management I was so lucky to find this because it I was so lucky to find this because it I was so lucky to find this because it doesn't even have this in the table of contents
-
table of contents here what is declarative package here what is declarative package here what is declarative package management under Global configuration that that is under Global configuration that that is not a very I was so lucky to find this very I was so lucky to find this heading but now it works spend like one hour to set up my new Mac spend like one hour to set up my new Mac from scratch with all my configs with from scratch with all my configs with from scratch with all my configs with brew and Bash yeah I mean one hour brew and Bash yeah I mean one hour brew and Bash yeah I mean one hour that's not that's not much I think that's not that's not much I think that's not that's not much I think you're going to spend a lot of hours um you're going to spend a lot of hours um you're going to spend a lot of hours um to get get it to work with Nicks but it's a fun thing to dive into Nicks but it's a fun thing to dive into that's for that's for that's for sure I definitely want to learn more sure I definitely want to learn more sure I definitely want to learn more about Nicks in the time to come but for about Nicks in the time to come but for about Nicks in the time to come but for now I'm happy that I did this that I now I'm happy that I did this that I now I'm happy that I did this that I have this use case and I have this use case and I have this use case and I am I I'm also going to be using these ad am I I'm also going to be using these ad am I I'm also going to be using these ad hoc shell environments that's also very hoc shell environments that's also very hoc shell environments that's also very interesting that you can interesting that you can interesting that you can just open a shell with a few packages just open a shell with a few packages just open a shell with a few packages you want to try out and when you're done you want to try out and when you're done you want to try out and when you're done then they're just gone that's just super then they're just gone that's just super then they're just gone that's just super handy so I'm definitely going to be handy so I'm definitely going to be handy so I'm definitely going to be using NYX more
-
okay but now now I have a fully okay but now now I have a fully functional Dev Environment Straight from NYX going to add these packages is here NYX going to add these packages is here [Music] too add go and too add go and noes push those those and let's see CD workspaces home lab and let's see CD workspaces home lab and let's see CD workspaces home lab this is my home lab this is my home lab this is my home lab container so if I container so if I container so if I now find a deployment. now find a deployment. now find a deployment. yaml and I do lazy yaml and I do lazy yaml and I do lazy extras then it's going to suggest I extras then it's going to suggest I extras then it's going to suggest I install Lang okay so now I have my yaml LS installed okay so now I have my yaml LS installed and I have my like my home lab Dev and I have my like my home lab Dev and I have my like my home lab Dev environment running inside of a pod on environment running inside of a pod on environment running inside of a pod on my home lab kubernetes my home lab kubernetes my home lab kubernetes cluster this is so freaking
-
cool and it's all working really cool and it's all working really well no delays nothing well no delays nothing well no delays nothing working very all right well that was my exploration all right well that was my exploration of uh NX OS of today well not not nixos of uh NX OS of today well not not nixos of uh NX OS of today well not not nixos but just nx. Dev but man this is a huge rabbit hoal Dev but man this is a huge rabbit hoal there's just so much you can do with there's just so much you can do with there's just so much you can do with this like it is off the this like it is off the this like it is off the hook one thing I did notice like I'm I'm hook one thing I did notice like I'm I'm hook one thing I did notice like I'm I'm pulling in these pulling in these pulling in these um like here I'm pulling um like here I'm pulling um like here I'm pulling [Music] in here I'm pulling in flux CD in here I'm pulling in flux CD right and in the NY package search if I then look for flux CD and
-
search if I then look for flux CD and look at the source 2.1.2 2.1.2 and I want that to be because on my and I want that to be because on my and I want that to be because on my local system flux in order to update that I would have to in order to update that I would have to submit a pool request submit a pool request submit a pool request probably so how how difficult would that probably so how how difficult would that probably so how how difficult would that be to update contributing quick start to adding a contributing quick start to adding a package no we don't need yeah so you Fork it you then create a
-
yeah so you Fork it you then create a new branch make the desired changes it would be fun to commit a pool request it would be fun to commit a pool request though for um seems like that it is a bit of a um I um seems like that it is a bit of a um I would have to sit down and take an hour would have to sit down and take an hour would have to sit down and take an hour to read through it properly because if to read through it properly because if to read through it properly because if you do a a pool request you want to do you do a a pool request you want to do you do a a pool request you want to do it properly but let's see how how is this properly but let's see how how is this how what do these look like basically how what do these look like basically how what do these look like basically it's just updating the it's just updating the it's just updating the hash and the version and these are done hash and the version and these are done hash and the version and these are done by people basically all of these are done by people this is all of these are done by people this is cool this is a good way to to contribute cool this is a good way to to contribute cool this is a good way to to contribute to open source actually
-
I mean it's just updating the version I mean it's just updating the version and the and the and the hashes so it shouldn't be too difficult hashes so it shouldn't be too difficult hashes so it shouldn't be too difficult that would be a fun thing to do next that would be a fun thing to do next that would be a fun thing to do next stream let's let's check out I'm going stream let's let's check out I'm going stream let's let's check out I'm going to keep an eye on the flux package in in to keep an eye on the flux package in in to keep an eye on the flux package in in nios and I'm going to see if I can try nios and I'm going to see if I can try nios and I'm going to see if I can try to contribute and make to update to the to contribute and make to update to the to contribute and make to update to the latest latest latest version all right well my mom is uh version all right well my mom is uh version all right well my mom is uh coming over for a cup of tea in half an coming over for a cup of tea in half an coming over for a cup of tea in half an hour hour hour so I'm going to stop the stream and so I'm going to stop the stream and so I'm going to stop the stream and stretch my legs for a bit and then stretch my legs for a bit and then stretch my legs for a bit and then um maybe I'll do some more streaming um maybe I'll do some more streaming um maybe I'll do some more streaming today I'm not sure but thank you so much today I'm not sure but thank you so much today I'm not sure but thank you so much for tuning in today I hope you if you for tuning in today I hope you if you for tuning in today I hope you if you want to read a summary of what I did want to read a summary of what I did want to read a summary of what I did today check out my blog if you want to today check out my blog if you want to today check out my blog if you want to learn more from me check out my school learn more from me check out my school learn more from me check out my school community I would love to have have you community I would love to have have you community I would love to have have you there and uh see you in the next one there and uh see you in the next one there and uh see you in the next one guys by
Summary
The main theme is exploring Nix as a solution for creating portable and reproducible development environments after Brew proved unsupported on ARM-based Linux. Key subjects mentioned include Nix, Brew, ARM-based chips, Linux, and portable death containers, with a practical takeaway being that Nix allows immediate use and sharing of packages within shell environments without permanent installation, enabling reproducible setups.