89 lines
2.3 KiB
Text
89 lines
2.3 KiB
Text
# Workspace management helper functions
|
|
# NUSHELL 0.109 COMPLIANT - Using each (Rule 8), no mutable variables (Rule 3)
|
|
|
|
use platform/user/config.nu [get-user-config-dir get-user-config-path]
|
|
|
|
# Get the currently active workspace
|
|
export def get-active-workspace [] {
|
|
let user_config_dir = (get-user-config-dir)
|
|
|
|
if not ($user_config_dir | path exists) {
|
|
return null
|
|
}
|
|
|
|
# Load central user config
|
|
let user_config_path = (get-user-config-path)
|
|
|
|
if not ($user_config_path | path exists) {
|
|
return null
|
|
}
|
|
|
|
let user_config = (open $user_config_path)
|
|
|
|
# Check if active workspace is set
|
|
if ($user_config.active_workspace == null) {
|
|
null
|
|
} else {
|
|
# Find workspace in list
|
|
let workspace_name = $user_config.active_workspace
|
|
let workspace = ($user_config.workspaces | where name == $workspace_name | first)
|
|
|
|
if ($workspace | is-empty) {
|
|
null
|
|
} else {
|
|
{
|
|
name: $workspace.name
|
|
path: $workspace.path
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# Update workspace last used timestamp (internal)
|
|
export def update-workspace-last-used [workspace_name: string] {
|
|
let user_config_path = (get-user-config-path)
|
|
|
|
if not ($user_config_path | path exists) {
|
|
return
|
|
}
|
|
|
|
let user_config = (open $user_config_path)
|
|
|
|
# Update last_used timestamp for workspace
|
|
let updated_config = (
|
|
$user_config | upsert workspaces {|ws|
|
|
$ws | each {|w|
|
|
if $w.name == $workspace_name {
|
|
$w | upsert last_used (date now | format date '%Y-%m-%dT%H:%M:%SZ')
|
|
} else {
|
|
$w
|
|
}
|
|
}
|
|
}
|
|
)
|
|
|
|
$updated_config | to yaml | save --force $user_config_path
|
|
}
|
|
|
|
# Get project root directory
|
|
export def get-project-root [] {
|
|
let markers = [".provisioning.toml", "provisioning.toml", ".git", "provisioning"]
|
|
|
|
mut current = ($env.PWD | path expand)
|
|
|
|
while $current != "/" {
|
|
let found = ($markers
|
|
| any {|marker|
|
|
(($current | path join $marker) | path exists)
|
|
}
|
|
)
|
|
|
|
if $found {
|
|
return $current
|
|
}
|
|
|
|
$current = ($current | path dirname)
|
|
}
|
|
|
|
$env.PWD
|
|
}
|