Создание и настройка проекта

Создаем форк:

GitHub - jackyzha0/quartz: 🌱 a fast, batteries-included static-site generator that transforms Markdown content into fully functional websites

Клонируем:

git clone REMOTE-URL

В моем случае REMOTE-URL - это git@github.com:zeritiq/quartz.git

Связываем:

git remote set-url origin REMOTE-URL

Добавляем оригинальный удаленный репозиторий для получения обновлений:

git remote add upstream https://github.com/jackyzha0/quartz.git

Теперь в случае появления обновлений можно выполнить:

git fetch upstream
git checkout v4
git rebase upstream/v4

Это несколько излишне, но я создал ветки develop и master. И установил локально и в github основной веткой master.

Локально:

git remote set-head origin master

В ветке хранятся только изменения по коду и конфигурациям. А в мастере заметки, изменения приходящие с v4 и мои изменения подтягиваемые из develop.

Setting up your GitHub repository

Вытягивание и публикаци заметок

Настройка вытягивания заметок

Для вытягивания только тех заметок, что готовы к публикации я написал следующий скрипт:

#!/bin/bash
 
# Source directory path
source_dir="$1"
target_dir="$2"
 
# Check for missing arguments
if [ -z "$source_dir" ] || [ -z "$target_dir" ]; then
    echo "Please specify paths to source and target directories."
    exit 1
fi
 
# Function to check metadata of a file
check_metadata() {
    local file="$1"
    local publish=false
 
    # Read the contents of the file
    content=$(cat "$file")
 
    # Search for "publish: true"
    if grep -q "publish: true" <<< "$content"; then
        echo "true"
        return 0
    fi
 
    echo "false"
    return 1
}
 
# Main loop to find files
find "$source_dir" -type f -name "*.md" | while read -r file; do
    result=$(check_metadata "$file")
    if [ "$result" = "true" ]; then
        relative_path=$(realpath --relative-to="$source_dir" "$file")
        target_path="${target_dir}/${relative_path}"
        mkdir -p "$(dirname "$target_path")"
        cp "$file" "$target_path"
        echo "Copying $file to $target_path"
    else
        echo "Skipping $file"
    fi
done
 
echo "Copy completed."

И добавил его в корень проекта с именем sync.sh.

Этот скрипт будет копировать только те заметки в метаданных которых указано свойство publish: true.

Далее установите Just.

Добавьте в проект файл .justfile:

import? 'ext.just'
 
set dotenv-load
 
sync:
  rm -Rf ./content
  [ -n $SOURCE_DIR ] && ./sync.sh $SOURCE_DIR ./content
  [ -n $MEDIA_DIR ] && cp -R $MEDIA_DIR ./content/Media
 

А такжеext.just для последующего расширения списка личных команд.

После чего добавьте в проект .env:

SOURCE_DIR=/home/$USER/Obsidian
MEDIA_DIR=/home/$USER/Obsidian/PublicMedia

Где: SOURCE_DIR - папка или подпапка с заметками MEDIA_DIR - папка с файлами используемых для публикации. Стоит отделять публичные файлы от не публичных так как для Quartz требуется, чтобы файлы фиксировались в github.

Вытягивание заметок

Выполните из корня проекта (в моем случае в ветке master):

just sync

Зафиксируйте изменения:

npx quartz sync

Публикация

git push

Далее можно приступить к кастомизации Quartz и к настройке развертывания Quartz.


Ссылки

Obsidian — Notion свободного человека / Хабр