Merge _configs/ into config/ for single configuration directory. Update all path references. Changes: - Move _configs/* to config/ - Update .gitignore for new patterns - No code references to _configs/ found Impact: -1 root directory (layout_conventions.md compliance)
245 lines
6.3 KiB
Plaintext
245 lines
6.3 KiB
Plaintext
#!/usr/bin/env nu
|
|
|
|
# Manifest management utilities for .syntaxis/manifest.toml
|
|
#
|
|
# Functions to read, write, and manipulate manifest.toml files
|
|
# that track installed binaries and configurations in syntaxis.
|
|
|
|
use scripts/common/find-config.nu [find-config]
|
|
|
|
# Load manifest from .syntaxis/manifest.toml
|
|
export def load-manifest []: nothing -> record {
|
|
let manifest_path = ".syntaxis/manifest.toml"
|
|
|
|
if not ($manifest_path | path exists) {
|
|
return {
|
|
syntaxis: {
|
|
version: "0.1.0"
|
|
created_at: (date now | format date "%Y-%m-%d")
|
|
installation_root: (pwd)
|
|
}
|
|
binaries: {}
|
|
configurations: {}
|
|
}
|
|
}
|
|
|
|
try {
|
|
open $manifest_path
|
|
} catch {
|
|
print $"⚠️ Failed to parse manifest.toml: ($in)"
|
|
{}
|
|
}
|
|
}
|
|
|
|
# Save manifest to .syntaxis/manifest.toml
|
|
export def save-manifest [manifest: record] {
|
|
let manifest_path = ".syntaxis/manifest.toml"
|
|
mkdir -p ".syntaxis"
|
|
|
|
try {
|
|
let content = (manifest_to_toml $manifest)
|
|
$content | save --force $manifest_path
|
|
print $"✓ Saved manifest to ($manifest_path)"
|
|
} catch {
|
|
print $"❌ Failed to save manifest: ($in)"
|
|
}
|
|
}
|
|
|
|
# Convert manifest record to TOML format
|
|
def manifest_to_toml [manifest: record]: nothing -> string {
|
|
mut output = "# syntaxis Installation Manifest\n"
|
|
output += "# This file tracks installed binaries and configurations\n\n"
|
|
|
|
# Add syntaxis section
|
|
output += "[syntaxis]\n"
|
|
output += $"version = \"($manifest.syntaxis.version)\"\n"
|
|
output += $"created_at = \"($manifest.syntaxis.created_at)\"\n"
|
|
output += $"installation_root = \"($manifest.syntaxis.installation_root)\"\n"
|
|
output += "\n"
|
|
|
|
# Add binaries section
|
|
output += "[binaries]\n"
|
|
if ($manifest.binaries | type) == "record" {
|
|
$manifest.binaries | each { |key, value|
|
|
output += $"($key) = { "
|
|
output += $"enabled = ($value.enabled), "
|
|
output += $"installed_at = \"($value.installed_at)\", "
|
|
output += $"version = \"($value.version)\", "
|
|
output += $"path = \"($value.path)\""
|
|
output += " }\n"
|
|
}
|
|
}
|
|
output += "\n"
|
|
|
|
# Add configurations section
|
|
output += "[configurations]\n"
|
|
if ($manifest.configurations | type) == "record" {
|
|
$manifest.configurations | each { |key, value|
|
|
output += $"($key) = { "
|
|
output += $"enabled = ($value.enabled), "
|
|
output += $"type = \"($value.type)\", "
|
|
output += $"path = \"($value.path)\""
|
|
output += " }\n"
|
|
}
|
|
}
|
|
|
|
$output
|
|
}
|
|
|
|
# List all installed binaries from manifest
|
|
export def list-binaries [] {
|
|
let manifest = load-manifest
|
|
|
|
if ($manifest.binaries | is-empty) {
|
|
print "No binaries found in manifest"
|
|
return
|
|
}
|
|
|
|
print ""
|
|
print "📦 Installed Binaries:"
|
|
print ""
|
|
|
|
$manifest.binaries | each { |key, value|
|
|
let status = if $value.enabled { "✅" } else { "⭕" }
|
|
print $" ($status) ($key)"
|
|
print $" Installed: ($value.installed_at)"
|
|
print $" Version: ($value.version)"
|
|
print $" Path: ($value.path)"
|
|
print ""
|
|
}
|
|
}
|
|
|
|
# Register a binary installation in manifest
|
|
export def register-binary [name: string, version: string, path: string] {
|
|
mut manifest = load-manifest
|
|
|
|
let binary_record = {
|
|
enabled: true
|
|
installed_at: (date now | format date "%Y-%m-%d %H:%M:%S")
|
|
version: $version
|
|
path: $path
|
|
}
|
|
|
|
if ($manifest.binaries | type) != "record" {
|
|
$manifest.binaries = {}
|
|
}
|
|
|
|
$manifest.binaries = ($manifest.binaries | insert $name $binary_record)
|
|
save-manifest $manifest
|
|
|
|
print $"✓ Registered binary: ($name)"
|
|
}
|
|
|
|
# Unregister a binary from manifest
|
|
export def unregister-binary [name: string] {
|
|
mut manifest = load-manifest
|
|
|
|
if ($name not-in $manifest.binaries) {
|
|
print $"⚠️ Binary not found: ($name)"
|
|
return
|
|
}
|
|
|
|
$manifest.binaries = ($manifest.binaries | del $name)
|
|
save-manifest $manifest
|
|
|
|
print $"✓ Unregistered binary: ($name)"
|
|
}
|
|
|
|
# Enable a binary
|
|
export def enable-binary [name: string] {
|
|
mut manifest = load-manifest
|
|
|
|
if ($name not-in $manifest.binaries) {
|
|
print $"❌ Binary not found: ($name)"
|
|
return
|
|
}
|
|
|
|
mut binary = ($manifest.binaries | get $name)
|
|
$binary.enabled = true
|
|
$manifest.binaries = ($manifest.binaries | insert $name $binary)
|
|
save-manifest $manifest
|
|
|
|
print $"✓ Enabled: ($name)"
|
|
}
|
|
|
|
# Disable a binary
|
|
export def disable-binary [name: string] {
|
|
mut manifest = load-manifest
|
|
|
|
if ($name not-in $manifest.binaries) {
|
|
print $"❌ Binary not found: ($name)"
|
|
return
|
|
}
|
|
|
|
mut binary = ($manifest.binaries | get $name)
|
|
$binary.enabled = false
|
|
$manifest.binaries = ($manifest.binaries | insert $name $binary)
|
|
save-manifest $manifest
|
|
|
|
print $"✓ Disabled: ($name)"
|
|
}
|
|
|
|
# List all configurations from manifest
|
|
export def list-configs [] {
|
|
let manifest = load-manifest
|
|
|
|
if ($manifest.configurations | is-empty) {
|
|
print "No configurations found in manifest"
|
|
return
|
|
}
|
|
|
|
print ""
|
|
print "⚙️ Configurations:"
|
|
print ""
|
|
|
|
$manifest.configurations | each { |key, value|
|
|
let status = if $value.enabled { "✅" } else { "⭕" }
|
|
print $" ($status) ($key)"
|
|
print $" Type: ($value.type)"
|
|
print $" Path: ($value.path)"
|
|
print ""
|
|
}
|
|
}
|
|
|
|
# Register a configuration
|
|
export def register-config [name: string, type: string, path: string] {
|
|
mut manifest = load-manifest
|
|
|
|
let config_record = {
|
|
enabled: true
|
|
type: $type
|
|
path: $path
|
|
}
|
|
|
|
if ($manifest.configurations | type) != "record" {
|
|
$manifest.configurations = {}
|
|
}
|
|
|
|
$manifest.configurations = ($manifest.configurations | insert $name $config_record)
|
|
save-manifest $manifest
|
|
|
|
print $"✓ Registered configuration: ($name)"
|
|
}
|
|
|
|
# Show full manifest
|
|
export def show-manifest [] {
|
|
let manifest = load-manifest
|
|
|
|
print ""
|
|
print "📋 Full Manifest"
|
|
print ""
|
|
|
|
print "Syntaxis:"
|
|
print $" Version: ($manifest.syntaxis.version)"
|
|
print $" Created: ($manifest.syntaxis.created_at)"
|
|
print ""
|
|
|
|
list-binaries
|
|
list-configs
|
|
}
|
|
|
|
# Test function
|
|
def test-manifest [] {
|
|
true
|
|
}
|