Looking at the work that I've been doing, things were looking really messy.
I needed a way to cleanup, and I needed it to make sense and scale onwards.
Keeping everything in a single directory wasn't really working, and just allowing everything to load wasn't working either.
Some systems had docker, some didn't, there are commands I currently want only on Linux systems, other on Windows, there are commands that I need them to behave differently on Windows and on Linux, and having the command code do the juggling didn't feel right either.
This ties in to what I mentioned about different environments in my previous post, and I chose to implement the concept of packages.
The inspiration came to me from the packages in Home-Assistant, but my implementation is a bit more 'dynamic' (I think).
Keep a clean root
Up until now everything was focused in
$MyPSScriptRoot, but as I mentioned, it has become hard to manage. Instead I'm creating a
base package - which will contain all of the basic scripts, including the package management code.
Packages are sub-directories that have a
_.package.json file in them describing the package.
The package description contains a set of conditions, when the condition set are met, the package is on.
An active package will have it's commands available, it's aliases loaded and it's
profile.d sub-dir executed.
Breaking the egg...
This new package paradigm allowed me to drop the previous
sys.XXXX per-system scheme, as I the package condition already takes care of that, so
base.Linux with a
System condition of
Linux in the json.
Changes were made to
Edit-MyScripts to address the changes.
The 'most painful' change was probably to the profile code, so
Setup-Profile has been updated, and I had to update the profile on all environments I installed it on, but thankfully, after running the script and reloading the shell, everything was in working order.
The journey continues, but I really feel 'at home' in this PowerShell environment, and I really like how it's coming along.
I think my next post will be a more in depth look at what makes a package and how they work, and after that I'll focus on the tasks I still want to accomplish (some of which I mentioned in my previous post)
* Source Code
Latest commit at the time of writing: