1
Fork 0
mirror of https://github.com/RGBCube/ncc synced 2025-07-29 11:07:44 +00:00

nushell: clean up dump module, add dump list

This commit is contained in:
RGBCube 2025-06-08 17:21:48 +03:00
parent f8c824dd0a
commit 85019a5bd7
Signed by: RGBCube
SSH key fingerprint: SHA256:CzqbPcfwt+GxFYNnFVCqoN5Itn4YFrshg1TrnACpA5M

View file

@ -28,66 +28,123 @@ def --env mcg [path: path]: nothing -> nothing {
jj git init --colocate jj git init --colocate
} }
let site_path = glob "~" | path join "projects" "site" module dump {
def site-path []: nothing -> path {
$env.HOME | path join "Projects" "site"
}
# Edit a thought dump. def dump-path []: nothing -> path {
def "dump ed" [ site-path | path join "site" "dump"
namespace: string # The thought dump to edit. Namespaced using '.', does not include file extension. }
]: nothing -> nothing {
let dump_path = $site_path | path join "site" "dump" ...($namespace | split row ".") | $in + ".md"
mkdir ($dump_path | path parse | get parent) # Convert a thought dump namespace to the filesystem path.
touch $dump_path export def to-path []: string -> path {
let namespace = $in
let old_dump_hash = open $dump_path | hash sha256 dump-path
| path join ...($namespace | split row ".")
| $in + ".md"
}
^$env.EDITOR $dump_path # Convert a filesystem path to a thought dump namespace.
export def to-dump []: path -> string {
let path = $in
let dump_size = ls $dump_path | get 0.size print $path (dump-path)
if $dump_size == 0b {
print $"(ansi red)thought dump was emptied(ansi reset)" $path
dump rm $namespace | path relative-to (dump-path)
} else if $old_dump_hash == (open $dump_path | hash sha256) { | path split
print $"(ansi yellow)thought dump was not changed(ansi reset)" | str join "."
} else { | str substring 0..<-3
print $"(ansi magenta)thought dump was edited(ansi reset)" }
# List all thought dumps that start with the given namespace.
export def list [
namespace: string = ""
]: nothing -> table<namespace: string, path: path> {
let dump_prefix = dump-path | path join ...($namespace | split row ".")
let dump_parent_contents = glob ($dump_prefix | path parse | get parent | path join "**" "*.md")
let dump_matches = $dump_parent_contents | filter { str starts-with $dump_prefix }
ls ...$dump_matches | each {
merge { path: $in.name }
| select path size modified
| merge { namespace: ($in.path | to-dump) }
}
}
# Deploy the thought dumps and thus the website.
export def deploy []: nothing -> nothing {
print $"(ansi green)deploying...(ansi reset)" print $"(ansi green)deploying...(ansi reset)"
cd $site_path cd (site-path)
./apply.nu
}
jj commit --message $"dump\(($namespace)\): update" # Edit a thought dump.
jj bookmark set master --revision @- export def edit [
namespace: string # The thought dump to edit. Namespaced using '.', does not include file extension.
]: nothing -> nothing {
let dump_path = $namespace | to-path
[ let old_dump_size = try { ls $dump_path }
{ jj git push --remote origin }
{ jj git push --remote rad }
{ ./apply.nu }
] | par-each { do $in }
cd - mkdir ($dump_path | path parse | get parent)
touch $dump_path
let old_dump_hash = open $dump_path | hash sha256
^$env.EDITOR $dump_path
let dump_size = ls $dump_path | get 0.size
if $dump_size == 0b {
print $"(ansi red)thought dump was emptied(ansi reset)"
delete $namespace --existed-before ($old_dump_size != null)
} else if $old_dump_hash == (open $dump_path | hash sha256) {
print $"(ansi yellow)thought dump was not modifier, doing nothing(ansi reset)"
} else {
print $"(ansi magenta)thought dump was edited(ansi reset)"
let jj_arguments = [ "--repository", (site-path) ]
jj ...$jj_arguments commit --message $"dump\(($namespace)\): update"
jj ...$jj_arguments bookmark set master --revision @-
[
{ jj ...$jj_arguments git push --remote origin }
{ jj ...$jj_arguments git push --remote rad }
{ deploy }
] | par-each { do $in }
}
}
# Delete a thought dump.
export def delete [
namespace: string # The thought dump to edit. Namespaced using '.', does not include file extension.
--existed-before = true
]: nothing -> nothing {
let dump_path = $namespace | to-path
let parent_path = $dump_path | path parse | get parent
print $"(ansi red)deleting thought dump...(ansi reset)"
print --no-newline (ansi red)
rm --verbose $dump_path
print --no-newline (ansi reset)
if (ls $parent_path | length) == 0 {
print $"(ansi red)parent folder is empty, deleting that too...(ansi reset)"
print $"(ansi yellow)other parents will not be deleted, if you want to delete those do it manually(ansi reset)"
rm $parent_path
}
if $existed_before {
deploy
} else {
print $"(ansi green)the thought dump didn't exist before, so skipping deployment(ansi reset)"
}
} }
} }
# Delete a thought dump. use dump
def "dump rm" [
namespace: string # The thought dump to edit. Namespaced using '.', does not include file extension.
]: nothing -> nothing {
print $namespace
let dump_path = $site_path | path join "site" "dump" ...($namespace | split row ".") | $in + ".md"
let parent_path = $dump_path | path parse | get parent
print $"(ansi red)deleting thought dump...(ansi reset)"
rm $dump_path
if (ls $parent_path | length) == 0 {
print $"(ansi red)parent folder is empty, deleting that too...(ansi reset)"
print $"(ansi yellow)other parents will not be deleted, if you want to delete those do it manually(ansi reset)"
rm $parent_path
}
print $"(ansi green)deploying...(ansi reset)"
cd $site_path
./apply.nu
cd -
}