tinrsenritr
This commit is contained in:
Executable
+89
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env nu
|
||||
|
||||
# Configuration
|
||||
let template_dir = ".typst-template"
|
||||
let config_dir = ".config"
|
||||
let out_dir = "."
|
||||
|
||||
def main [subject: string, shortcode: string, number: string = ""] {
|
||||
let subject_lower = ($subject | str downcase)
|
||||
let shortcode_lower = ($shortcode | str downcase)
|
||||
|
||||
validate-input $subject $shortcode $number
|
||||
|
||||
let temp_dir = (mktemp -d)
|
||||
let final_dir = $"($out_dir)/($subject_lower)/($shortcode_lower)($number)"
|
||||
let subject_dir = $"($out_dir)/($subject_lower)"
|
||||
|
||||
copy-template $temp_dir
|
||||
generate-doc-toml $shortcode_lower $subject_lower $temp_dir $number
|
||||
|
||||
if not ($final_dir | path exists) {
|
||||
error make -u {msg: $"Directory ($final_dir) already exists"}
|
||||
}
|
||||
|
||||
mkdir $subject_dir
|
||||
cp -r $temp_dir $final_dir
|
||||
|
||||
print $"=> Created new work: ($final_dir)"
|
||||
rm -rf $temp_dir
|
||||
}
|
||||
|
||||
def validate-input [subject: string, shortcode: string, number: string] {
|
||||
if not ($config_dir | path exists) {
|
||||
error make -u {msg: "Config directory not found"}
|
||||
}
|
||||
|
||||
let defaults_toml = $"($config_dir)/defaults.toml"
|
||||
let subjects_toml = $"($config_dir)/subjects.toml"
|
||||
|
||||
if not ($defaults_toml | path exists) {
|
||||
error make -u {msg: $"defaults.toml not found in config directory"}
|
||||
}
|
||||
|
||||
if not ($subjects_toml | path exists) {
|
||||
error make -u {msg: "subjects.toml not found in config directory"}
|
||||
}
|
||||
|
||||
if $out_dir != "." and not ($out_dir | path exists) {
|
||||
mkdir $out_dir
|
||||
}
|
||||
|
||||
# Check subject exists (case insensitive)
|
||||
let subject_lower = ($subject | str downcase)
|
||||
let subjects = (open $subjects_toml | get subjects | columns)
|
||||
if $subject_lower not-in $subjects {
|
||||
error make -u {
|
||||
msg: $"Subject '($subject)' not found in configuration"
|
||||
help: $"Available subjects: ($subjects | str join ', ')"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def copy-template [target_dir: string] {
|
||||
if not ($template_dir | path exists) {
|
||||
error make -u {msg: $"Template directory ($template_dir) not found"}
|
||||
}
|
||||
|
||||
cd $template_dir
|
||||
cp -r * $target_dir
|
||||
}
|
||||
|
||||
def generate-doc-toml [shortcode: string, subject: string, target_dir: string, number: string] {
|
||||
let defaults = (open $"($config_dir)/defaults.toml")
|
||||
let subjects = (open $"($config_dir)/subjects.toml")
|
||||
|
||||
let subject_data = ($subjects | get subjects | get $subject)
|
||||
let work_type = ($defaults | get work_types | try { get $shortcode } catch { $shortcode })
|
||||
|
||||
let number = if $number != "" { $number | into int } else { "" }
|
||||
|
||||
{
|
||||
university: ($defaults | get university)
|
||||
subject: ($subject_data | get name)
|
||||
type: $work_type
|
||||
number: $number
|
||||
mentors: ($subject_data | get mentors)
|
||||
authors: [($defaults | get default_author)]
|
||||
} | compact --empty | to toml | save $"($target_dir)/src/doc.toml" --force
|
||||
}
|
||||
Reference in New Issue
Block a user