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 sys.Linux became base.Linux with a System condition of Linux in the json.

Changes were made to Reload-MyScripts, Get-MyScripts and 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.

What's Next?

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: 1792bb23a1