”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 我的 Obsidian + Hugo 博客设置(使用热键自动发布)

我的 Obsidian + Hugo 博客设置(使用热键自动发布)

发布于2024-08-29
浏览:700

My Obsidian   Hugo blogging setup (Auto publishing with hotkeys)

如果您点击了这篇文章,您可能知道这两种技术是什么,但如果您不知道,这里有一个快速解释:

黑曜石

Obsidian 是一个功能齐全的 Markdown 编辑器。但它不仅仅是一个 Markdown 编辑器。这是管理知识的一种方式。它非常适合以灵活、非线性的方式组织您的想法。

Obsidian 适用于所有平台。所以你基本上可以在任何平台上写文章。

几个月来我一直在里面记下我的所有笔记,这太棒了!

雨果

Hugo 是一个用 golang 制作的超快速静态网站生成器。我的博客使用 Hugo 已经快两年了。我最近更换了博客的主题。了解更多关于新面貌、新开始的变化。

设置

在本文中,我不会展示如何设置这两种技术,而只是展示如何让它们协同工作。

如果您不想了解我如何使用hugo、cloudflare 和 render.com 设置整个博客,请阅读:我如何免费设置此博客(域名、托管、ssl)完整指南

如果您不想要有关如何使用黑曜石的良好指南,请阅读:入门 - obsidian.md

目标

我的设置目标是:

  1. 使用单个黑曜石金库
  2. 有一个易于使用的黑曜石模板,我可以将其用于我的博客文章。
  3. 将我的个人保管库文件夹设为私有。
  4. 使用黑曜石热键自动发布。
  5. 将所有 markdown 文件放在公共 github 存储库中,以便人们可以提出更改

现有设置

我当前的工作流程的工作方式是:

  1. 编辑内容文件夹中的文章。
  2. 运行hugo命令。
  3. 推送到github。
  4. Render.com 自动获取更改并提供服务。

旅行

如果你想跳过旅程部分可以直接去The Sauce

我将经历一些在设置时犯的错误。

错误#1

我的第一个想法是创建一个简单的符号链接(顺便说一句,我使用 linux)将两个文件夹链接在一起。

基本上我有两个文件夹:

blog/
vault/

博客文件夹包含所有博客文件夹,保管库是我的个人保管库。

符号链接将链接这些文件夹

blog/content
vault/Blog

但是符号链接的问题是文件夹内容在我的 git 存储库中不可见。这意味着人们不能对我的任何文章提出更改

错误#2

我想要同步我的文件夹。我尝试编写几个 bash 脚本,使用 cronjob 自动同步两个文件夹。然而,当我不写作时,不断运行后台是一种资源浪费。仅仅通过 cli 运行脚本并不那么顺利。

酱汁

基本上我设置的方式是我有两个文件夹:

blog
vault

blog 文件夹包含所有必需的 Hugo 文件,并且还有一个名为 content 的子目录,其中包含所有 Markdown 博客文件。

我在我的保管库中创建了一个名为 Blog 的新文件夹

blog/content
vault/Blog

之后,我将所有文件从内容目录复制到博客。

然后我开始写这篇文章

黑曜石模板

我需要某种方法来设置一个简单的模板来包含所有必需的 Hugo 前言。

这很简单。

了解如何设置模板 Templates - obsidian.md

我在模板文件夹中创建了一个名为 Blog Post 的文件

我的博客文章模板包含以下内容:

---
title: "{{Title}}"
description: 
date: "{{date:YYYY-MM-DD}}T{{time:HH:mm:ss}} 00:00"
draft: true
---

**If you enjoyed this article consider [supporting me](https://4rkal.eu.org/donate)**

我有所有必需的前言,包括标题、描述和日期,格式符合 Hugo 要求的格式。

我还添加了一个小的捐赠文本,将其包含在每篇文章的底部。

这意味着我可以自动将此模板插入到任何文件中并开始编写!

文件夹同步

现在我希望将我的保管库/博客目录中的所有文件复制到博客/内容

感谢一位有用的不和谐用户,我找到了 obsidian-shellcommands 插件。

注意:这个插件目前不能很好地与黑曜石的 flatpak 版本配合使用(因为 flatpak 隔离了环境)。使用另一种替代方案(.deb 或 appimage)似乎可行。

它允许您使用热键在后台运行 shell 命令。

设置步骤如下:

  1. 安装插件
  2. 启用插件
  3. 转到插件选项
  4. 单击新建 shell 命令
  5. 现在您需要输入 shell 命令将文件从一个文件夹复制到另一个文件夹。

在 Linux/MacOS 上是:

cp -a ~/folder1/. 〜/文件夹2/

在我的例子中是 cp -a ~/Documents/vault/Blog/。 〜/文档/blog2/内容/

在 Windows 上最有可能是:

robocopy "%USERPROFILE%\folder1" "%USERPROFILE%\folder2" /E /COPYALL

之后我们需要设置一个运行命令的热键

单击 ( ) 图标转至热键设置并指定热键

我的热键是 CTR 0,只是因为它可用。

现在,每次我运行热键时,它都会将我的所有文件复制到hugo文件夹中,准备发布

自动发布脚本

我还希望能够自动发布我的文章。但我希望通过按下热键来实现。

我写了一个小脚本来完成这个任务:

#!/bin/bash
cd ~/Documents/blog

hugo

git add .
git commit -m "new"
git push -u origin main

这个脚本将构建我的网站,提交并推送到我的 github 存储库,在那里它被提取和发布。阅读我如何免费设置此博客(域名、托管、ssl)完整指南,了解如何免费设置您自己的博客。

不要忘记通过运行

使脚本可执行

chmod x ./YOURSCRIPT.sh

然后为 shellcommand 插件创建一个新的 shell 命令(就像我们之前所做的那样)并输入脚本的路径。

就我而言是:

~/Documents/blog2/push.sh

然后输入热键就完成了!

结论

我现在可以简单地打开我的黑曜石保险库,创建一个新文件,插入我的模板并自动输入所有信息。

然后我在黑曜石中写我的文章

运行我的热键并将所有文件复制到hugo目录中

再按一个键,我的博客就发布了!

如果您喜欢这篇文章,请考虑支持我

版本声明 本文转载于:https://dev.to/4rkal/my-obsidian-hugo-blogging-setup-auto-publishing-with-hotkeys-365d?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 雷迪斯
    雷迪斯
    Redis 是一个 NOSQL 数据库,数据以键值对的形式存储。 Redis 将数据存储在主内存上,这意味着它速度快,但易失性,不像 PostgreSQL 等数据库系统将数据存储在磁盘上。 概述 在具有服务器和数据库的应用程序中,访问数据库上的信息会导致延迟。 像redis这样...
    编程 发布于2024-11-06
  • 如何使用预先导入的包启动 python 或 ipython。
    如何使用预先导入的包启动 python 或 ipython。
    不必每次执行 python 或 ipython 时都必须编写“import os”或其他常见包,此脚本将启动 python 并导入这些包 #!/usr/bin/env bash # -----------------------------------------------------------...
    编程 发布于2024-11-06
  • python中的数据类型
    python中的数据类型
    内置数据类型 文本类型:字符串 数值类型:int、float、complex 序列类型:列表、元组、范围 映射类型:字典 集合类型:集合、冻结集合 布尔类型:bool 二进制类型:字节、字节数组、内存视图 无类型:无类型 程序 a=“阿维纳什” 打印(类型(a)) b=45 打印(类型(b)) c=...
    编程 发布于2024-11-06
  • JavaScript 中的提升
    JavaScript 中的提升
    什么是 JavaScript 提升? 提升是指 JavaScript 中在执行之前进行声明的过程。首先处理变量和函数声明。因此,即使变量在声明之前被引用,也不会导致错误,而是返回 undefined。对于函数声明,整个函数被提升,这意味着它可以在代码中定义之前使用。此过程在执行开始...
    编程 发布于2024-11-06
  • 如何在 Go 中同时选择缓冲发送和无缓冲接收通道?
    如何在 Go 中同时选择缓冲发送和无缓冲接收通道?
    同时选择 Go 发送和接收通道在 Go 中,可以使用 select 语句在通道上执行非阻塞 I/O 操作。然而,在处理缓冲发送通道 (chan
    编程 发布于2024-11-06
  • 如何将列表列表转换为统一的 NumPy 数组?
    如何将列表列表转换为统一的 NumPy 数组?
    将列表列表转换为 NumPy 数组数据分析中的一个常见任务是将列表列表转换为 NumPy 数组高效的数值运算。该数组可以通过将每个列表分配给一行来形成,列表中的每个元素占据一列。选项 1:数组数组如果子列表具有不同的长度,合适的方法是创建数组的数组。这保留了列表列表的原始结构,从而可以轻松检索特定元...
    编程 发布于2024-11-06
  • 前端的顶级设计模式
    前端的顶级设计模式
    在过去的几个月里,我为前端开发人员分享了一些流行的设计模式。其中包括 Singleton、Facade、Observer、Publisher/Subscriber 等模式。今天,我想总结一下这些模式的一些要点和好处,以及如何使用它们来改进您的前端开发流程。 什么是设计模式 设计模式是...
    编程 发布于2024-11-06
  • ServBay版本.pdate公告
    ServBay版本.pdate公告
    我们很高兴地宣布新版本 1.4.4 已经到来!让我们来看看新增的备受期待的新功能。 新功能 CA和证书管理: 统一SSL证书管理平台:全新的证书管理平台,旨在简化证书申请和管理流程。 ServBay User CA 和 ServBay Public CA: 引入 Se...
    编程 发布于2024-11-06
  • Spring框架中的控制反转
    Spring框架中的控制反转
    控制反转(IoC)和依赖注入(DI)是Spring框架中的两个基本概念。传统上,对象负责创建和管理它们自己的依赖关系。然而,IoC 通过将对象创建和依赖管理的控制权移交给像 Spring 这样的框架来翻转这一责任。 这种转变有几个优点: 更简单的实现交换:只需对代码库进行最小的更改即可交换不同的实现...
    编程 发布于2024-11-06
  • 使用 React 构建递归文件系统:深入探讨
    使用 React 构建递归文件系统:深入探讨
    简介:在 React 中构建递归文件系统 在现代 Web 开发中,创建交互式动态文件系统是一个常见的要求。无论是管理文档、组织项目还是构建复杂的数据结构,拥有强大的文件系统都至关重要。在这篇博文中,我们将探讨如何在 React 中构建递归文件系统,重点关注可以添加、重命名或删除的嵌...
    编程 发布于2024-11-06
  • SQL 查询速度慢?使用此技术提高应用程序的性能
    SQL 查询速度慢?使用此技术提高应用程序的性能
    挑战 在我的应用程序(React Spring Boot Oracle)中,处理大型数据集导致处理时间极其缓慢。我需要一种解决方案来提高性能而不影响准确性或完整性。 解决方案:NTILE 并行处理 NTILE 是一个功能强大的 SQL 窗口函数,旨在将结果集划分为指...
    编程 发布于2024-11-06
  • 关于测试覆盖率的真相
    关于测试覆盖率的真相
    一个强有力的真理。 看下面这段简单明了的代码: function sum(a, b) { return a b; } 现在,让我们为它编写一些测试: test('sum', () => { expect(sum(1, 2)).toBe(3); expect(s...
    编程 发布于2024-11-06
  • 为什么我的 OpenGL 三角形无法在 Go 中渲染?调查顶点缓冲区问题。
    为什么我的 OpenGL 三角形无法在 Go 中渲染?调查顶点缓冲区问题。
    Go 中的 OpenGL 顶点缓冲区问题在尝试在 Go 中使用 OpenGL 显示三角形时,用户遇到了顶点缓冲区问题缓冲区无法渲染形状。 Go 代码源自教程,但与 C 代码不同的是,它没有产生任何输出。问题原因问题的根本原因位于传递给 vertexAttrib.AttribPointer() 的参数...
    编程 发布于2024-11-06
  • 为什么在 Linux 32 位发行版上的 Go 程序中设置 `ulimit -n` 会导致“参数无效”错误?
    为什么在 Linux 32 位发行版上的 Go 程序中设置 `ulimit -n` 会导致“参数无效”错误?
    如何在 Go 程序中设置 ulimit -n?问题用户尝试在 Go 程序中设置 ulimit -n使用 setrlimit 和 getrlimit 系统调用将其限制在程序内而不是全局。然而,在尝试设置该值时出现错误,提示“参数无效”。解决方案发现该问题是由于 Linux 32 的 Getrlimit...
    编程 发布于2024-11-06
  • 如何在Python中创建无限深度的动态嵌套字典?
    如何在Python中创建无限深度的动态嵌套字典?
    未定义深度的动态嵌套字典在涉及复杂多级数据结构的场景中,经常会遇到变量嵌套字典的需求水平。虽然硬编码插入语句是一种潜在的解决方案,但当事先未知嵌套深度时,这种方法是不切实际的。要克服此限制,请考虑利用 Python 的 collections.defaultdict,它允许动态创建字典。可以使用以下...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3