2 releases
0.1.1 | Oct 29, 2023 |
---|---|
0.1.0 | Oct 29, 2023 |
#10 in #obsidian
16KB
389 lines
Obsidian2Neorg
Transform from Obsidian Markdown to Neorg format.
obsidian2neorg
takes input from stdin
and outputs the transformation to stdout
.
You can transform a file like this:
cat file.md | obsidian2neorg > file.norg
Installation
You'll need to have rustup installed. Then install with Cargo
cargo install obsidian2neorg
Bulk Transformations
You can find in this repository a shell script that will transform all .md
files
in a folder and copy all other files. I've used this script to port all my notes to
Neorg using obsidian2neorg.
folder_path="vault"
out_path="vault_neorg"
mkdir -p $out_path
find "$folder_path" -type f -not -path "*/.git/*" -not -name "*.md" | while read -r file; do
relative_path="${file#$folder_path/}"
out_file="${out_path}/${relative_path}"
mkdir -p "$(dirname "$out_file")"
cp "$file" "$out_file"
done
find "$folder_path" -type f -not -path "*/.git/*" -name "*.md" | while read -r file; do
lowercase_filename=$(basename "$file" | tr '[:upper:]' '[:lower:]')
final_filename=${lowercase_filename// /-}
relative_path="${final_filename#$folder_path/}"
out_file="${out_path}/${relative_path%.md}.norg"
mkdir -p "$(dirname "$out_file")"
cat "$file" | obsidian2neorg > "$out_file"
done
The transformations are based on regex, and not every possible Markdown style is implemented, but it should be enough to get your notes in an acceptable state to start working on Neorg.
lowercase-links
By default file links are forced into lowercase-without-spaces
form. This makes it easy to rename all
files so that relations are easily transferred.
If you want to keep them as they are pass the --literal-links
flag:
obsidian2neorg --literal-links
In this case you'll need to modify the bulk transformation script to avoid the renaming
folder_path="vault" # change this to the location of your vault/notes folder
out_path="vault_neorg" # this will be the output folder
mkdir -p $out_path
find "$folder_path" -type f -not -path "*/.git/*" -not -name "*.md" | while read -r file; do
relative_path="${file#$folder_path/}"
out_file="${out_path}/${relative_path}"
mkdir -p "$(dirname "$out_file")"
cp "$file" "$out_file"
done
find "$folder_path" -type f -not -path "*/.git/*" -name "*.md" | while read -r file; do
relative_path="${file#$folder_path/}"
out_file="${out_path}/${relative_path%.md}.norg"
mkdir -p "$(dirname "$out_file")"
cat "$file" | obsidian2neorg > "$out_file"
done
Dependencies
~4.5–6MB
~106K SLoC