/winenv

Primary LanguageDhall

WinEnv

This project is a work in progress and I don't want to be responsible for what you do to your computer with it

Overview

This project has two primary components: the executor and the configuration library

    • A small program written in Rust whose goal is to implement a minimal set of primitives for declarativly managing a Windows system.
    • A collection of expressions written in Dhall that can be composed to allow flexible and extensible declaration
  • The files winenv-config/system-config.dhall and winenv-config/user-config.dhall contain the base expressions for the system and user environments

  • The two powershell scripts in the project root system-exec.ps1 and user-exec.ps1 are the entrypoints for instantiating the system and user environments

    • These scripts will generate a context object containing information about the environment and save it to winenv-config/system-context.dhall or winenv-config/user-context.dhall
    • They will then run tools/wrapper-script.ps1 passing either winenv-config/system-config.dhall or winenv-config/user-config.dhall to be evaluated and instantiated

Challenges:

  • Windows Registry
    • Registry values containing an array of bytes where different subsets of the array control distinct features (See for example)
      • Currently there is no declarative granularity smaller than the registry value as a whole

Aspects of Windows I want to manage declaratively:


Links & Reference Materials:

A mostly unorganized dumping ground —


Inspired by NixOS, Home Manager, and PowerShell Desired State Configuration