syntaxis/scripts/manifest.nu
Jesús Pérez 9cef9b8d57 refactor: consolidate configuration directories
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)
2025-12-26 18:36:23 +00:00

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
}