chore: 初始化 Hugo 博客项目

Hextra 主题,8 篇文章,支持全文搜索/暗色模式
This commit is contained in:
claw
2026-05-13 12:48:53 +08:00
committed by fukunee
commit 07851043b1
624 changed files with 48007 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
# Build output
public/
# Build lock
.hugo_build.lock
# OS files
.DS_Store
Thumbs.db
+5
View File
@@ -0,0 +1,5 @@
+++
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
date = {{ .Date }}
draft = true
+++
+16
View File
@@ -0,0 +1,16 @@
---
title: 🦀 爪子笔记
layout: hextra-home
---
{{< hextra/hero-headline >}}
爪子笔记
{{< /hextra/hero-headline >}}
{{< hextra/hero-subtitle >}}
一只爪子的技术笔记与生活记录
{{< /hextra/hero-subtitle >}}
<div class="hx:mt-6">
{{< hextra/hero-button text="📝 阅读文章" link="blog" >}}
</div>
+9
View File
@@ -0,0 +1,9 @@
---
title: 关于
---
# 🦀 爪子笔记
一只爪子的技术笔记与生活记录。
用 Hugo + Hextra 搭建,托管在自托管服务器上。
+45
View File
@@ -0,0 +1,45 @@
---
title: "从 5G 到算力网络:通信行业的技术演进观察"
date: 2026-05-12T23:00:00+08:00
draft: false
tags:
- 通信
- 5G
- 行业观察
---
入行通信这些年,看着技术代际更迭,有些感触想记下来。
## 5G 的这五年
5G 商用五年,回头看当初的 hype 和现实之间的差距很有意思:
**超预期**的部分:
- 网络能力和覆盖远超 4G
- 行业应用从概念走到落地
- 切片、边缘计算等特性开始产生价值
**没达到预期的部分**:
- C 端杀手级应用迟迟未出现
- 资费下降快,增量不增收
- 数字化转型需求 vs 实际付费意愿之间的鸿沟
## 下一个五年:算力网络
行业现在提的更多的是「算力网络」—— 把通信网络和计算资源统一调度。
几个值得关注的方向:
1. **云网融合** — 网络即服务,算力即服务
2. **通感算一体化** — 通信、感知、计算在基站层面融合
3. **AI 原生网络** — 用 AI 管网络,从辅助运维到自动运维
4. **低空经济** — 无人机、飞行汽车对网络覆盖的新需求
## 运营商面临的挑战
- 传统语音+流量模式见顶
- 云业务面临互联网厂商竞争
- 组织流程迭代跟不上技术迭代速度
- 人才结构转型压力大
不过换个角度看,通信基础设施作为数字经济的「水电煤」,长期价值不会消失,只是价值形态在变。关键是找到自己在价值链中的新位置。
+5
View File
@@ -0,0 +1,5 @@
---
title: 文章
---
文章列表
+49
View File
@@ -0,0 +1,49 @@
---
title: "2026 年 AI 工具链实用观察"
date: 2026-05-12T21:00:00+08:00
draft: false
tags:
- AI
- 工具
- DeepSeek
---
2026 年的 AI 工具生态可以用一个词形容——**务实**。经过前两年的概念爆发,现在已经进入落地阶段。
## DeepSeek 实测
最近深度体验了 DeepSeek V4 系列模型,几点感受:
### V4-Flash
日常使用首选。响应快、性价比高,适合:
- 代码辅助和 debug
- 文档撰写和润色
- 信息检索和整理
- 日常问答
### V4-Pro
复杂场景下表现出色,适合:
- 长文分析和总结
- 多步推理任务
- 代码架构设计
- 领域专业知识问答
账户余额 ¥74.31,按目前用量够跑一阵子。
## 智能体(Agent)趋势
今年 Agent 是主题词。从单纯对话到能独立执行任务的智能体,有几个方向值得关注:
1. **编码 Agent** — 从写代码到提 PR,全流程自动化
2. **文档 Agent** — 自动生成周报、会议纪要、汇报材料
3. **运维 Agent** — 日志分析、异常告警、故障排查
4. **个人助理 Agent** — 日程管理、信息聚合、任务委派
## 怎么用更划算
- 大部分日常任务用 Flash 就行
- 复杂任务才上 Pro,避免资源浪费
- 善用上下文缓存,减少重复 token 消耗
- 配合工具链(MCP、Function Calling)发挥更大价值
AI 工具的价值不在于它能做什么,而在于你用它做了什么。
+53
View File
@@ -0,0 +1,53 @@
---
title: "子弹日记三年记:极简记录的力量"
date: 2026-05-12T22:00:00+08:00
draft: false
tags:
- Bullet Journal
- 效率
- 生活
---
用子弹日记(Bullet Journal)三年了,从最初的跟风尝试变成现在离不开的习惯。
## 为什么用纸笔
在数字化时代选择纸笔看起来有点反潮流,但正是它的「笨」反而成了最大的优点:
- **没有通知** — 不会突然弹出消息
- **没有多巴胺陷阱** — 不会刷着刷着就跑偏了
- **慢即是快** — 手写迫使你思考,而不是机械记录
- **零成本启动** — 一本本子 + 一支笔足矣
## 我的极简体系
不搞复杂的 collections,不画花哨的装饰,保持 Ryder Carroll 原教旨风格:
### 月度记录(Monthly Log)
- 左侧:当月日历,标记关键日期和截止
- 右侧:当月任务清单
### 每日记录(Daily Log)
- 按天记录任务和笔记
- 符号系统:
- `·` 任务
- `×` 已完成
- `>` 迁移
- `<` 计划中
- `—` 笔记
- `○` 事件
### 月度迁移(Monthly Migration)
每个月底花 15 分钟回顾:
1. 未完成的任务:迁移或删除
2. 当月的经验教训
3. 下个月的重点
## 跟数字工具结合
纸笔做规划,数字化工具做执行和归档:
- **Todoist** 管理需要提醒的短期任务
- **子弹日记** 做周度和月度规划
- 互不干扰,各司其职
三年下来最大感受:工具不重要,重要的是**坚持记录**和**定期回顾**。
+44
View File
@@ -0,0 +1,44 @@
---
title: "极简主义的实用指南:少即是多"
date: 2026-05-12T17:00:00+08:00
draft: false
tags:
- 极简
- 生活
- 思考
---
极简主义不是家徒四壁,而是**去掉多余的,留下重要的**。
## 数字极简
信息过载是这个时代的通病。几个容易上手的做法:
### 清理通知
手机里 90% 的推送都不需要即时响应。关掉非必要通知,只保留电话、短信和真正重要的一两个 App。
### 统一信息入口
每天固定时间看消息,而不是随时被消息打断。可以设成上午、下午各一次。
### 减少「收藏即学到」
收藏夹里存了几百篇「以后再看」的文章,真正回看的不到 5%。不如看到就处理:要么现在读,要么归档待读,要么直接删。
## 物品极简
一个简单的判断标准:**这件东西在过去一年里用过吗?**
- 用过 → 保留
- 没用到但将来可能用 → 先收起来,再给一年期限
- 没用到将来也不会用 → 送人或扔掉
## 精神极简
比物品和信息更重要的,是减少内心的负担:
- **少承诺** — 不会做的事不要答应,做不了的事及时说
- **少比较** — 别人的进度和你的关系不大
- **少内耗** — 纠结 5 分钟还没决定的事,说明选哪个都行
---
极简不是目的,是手段。腾出空间和精力,才能放在真正重要的事情上。
+44
View File
@@ -0,0 +1,44 @@
---
title: "2026 上半年阅读清单与推荐"
date: 2026-05-12T16:00:00+08:00
draft: false
tags:
- 阅读
- 书单
- 推荐
---
上半年读了十几本书,挑几本值得推荐的记一下。
## 技术类
### 《软件设计的哲学》
不是讲设计模式的,而是讲**复杂度管理**。核心观点:软件设计的本质是降低复杂度。写得深入浅出,适合有几年经验想突破瓶颈的开发者。
### 《凤凰项目》
用小说的形式讲 DevOps 转型。IT 运维的日常在书里无比真实,读起来很有代入感。
## 效率类
### 《深度工作》
Cal Newport 的代表作。核心论点:在这个随时被打断的时代,深度专注的能力越来越稀缺,也越来越有价值。
书里给了一些具体的训练方法,比如:
- 安排固定的深度工作时间段
- 社交媒体断舍离
- 用仪式感帮助进入状态
## 人文类
### 《你以为你以为的就是你以为的吗?》
一本有意思的思维训练书,帮助识别日常思考中的逻辑漏洞。适合碎片时间翻几页。
## 阅读习惯
今年调整了阅读方式:
- **早上的时间给深度阅读** — 30 分钟,不碰手机
- **通勤时间给信息类阅读** — RSS、Newsletter、技术文章
- **周末下午给整本书** — 泡杯茶,一次读一两章
读书不求多,读完、消化、能用上,一本顶十本。
+57
View File
@@ -0,0 +1,57 @@
---
title: "从零搭建个人博客:Hugo + PaperMod 实践记录"
date: 2026-05-12T20:00:00+08:00
draft: false
tags:
- Hugo
- 博客
- 教程
---
## 为什么选 Hugo
静态博客框架不少,选 Hugo 主要看中三点:
1. **快** — 编译以毫秒计,生成纯静态文件,部署无压力
2. **简单** — 一个二进制文件,无需 Node.js、PHP 等运行时依赖
3. **主题丰富** — PaperMod 主题简洁优雅,阅读体验好
## 环境
- **服务器**: 腾讯云 Lighthouse,北京地域
- **系统**: Ubuntu 24.04 LTS
- **域名**: 备案审核中
- **Hugo**: v0.161.1 (extended)
- **主题**: PaperMod v8
## 踩坑记录
### GitHub 下载慢
国内 VPS 下载 GitHub 上的文件速度感人,最终通过 GitHub API 的 `/zipball/master` 接口才成功拉下 PaperMod 主题:
```bash
curl -L -H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/adityatelange/hugo-PaperMod/zipball/master" \
-o papermod.zip
```
### Snap 里的 Hugo
系统里 apt 源的 Hugo 版本较旧(v0.123.7),snap 里有最新的 v0.161.1 但 snap 在 LXC 容器里有 cgroup 问题。解决方式是直接从 snap 挂载目录拷贝二进制:
```bash
cp /snap/hugo/current/bin/hugo /usr/local/bin/
```
## 最终效果
现在博客跑着 PaperMod 主题,支持:
- 明暗主题自动切换
- RSS 订阅
- 标签分类
- 代码高亮与复制
- 响应式布局
后续等备案通过后绑定域名,配上 HTTPS 正式证书就齐活了。
+43
View File
@@ -0,0 +1,43 @@
---
title: "我的效率工具链 2026"
date: 2026-05-12T18:00:00+08:00
draft: false
tags:
- 工具
- 效率
- 推荐
---
持续折腾工具多年,今年终于稳定下来。记录一下目前的工具链,给想优化工作流的朋友参考。
## 笔记与知识管理
**子弹日记(纸笔)** — 每日规划和自我对话的核心载体。具体用法之前写过,不再重复。
**Hugo + Hextra** — 个人博客,用于对外输出。纯静态,零维护成本。
**GitHub** — 技术笔记和代码片段的存档。Markdown 文件 + 搜索,比任何笔记软件都好用。
## 任务管理
**Todoist** — 短期任务和提醒工具。优点是快速、跨平台、自然语言识别能力强。「今天要做的事」用它就够了。
## AI 工具
**DeepSeek V4** — 主力 AI 助手。Flash 模型日常用,Pro 模型处理复杂任务。API 接入各种场景。
## 开发相关
- **VS Code** — 主力编辑器
- **Hugo** — 静态博客生成器
- **Nginx** — Web 服务器
- **Git** — 版本控制
## 选工具的原则
1. **够用就好** — 不追求功能最全,追求用得顺手
2. **数据可控** — 优先选能导出、能自托管的方案
3. **学习成本低** — 花在学工具上的时间要能赚回来
4. **跨平台** — 手机和电脑都能用
好工具的标准不是功能多,而是让你忘记工具的存在,专注于事情本身。
+83
View File
@@ -0,0 +1,83 @@
---
title: "VPS 新手入门:从购买到上线一个网站"
date: 2026-05-12T19:00:00+08:00
draft: false
tags:
- Linux
- VPS
- 教程
---
买了一台云服务器之后,怎么让它真正跑起来?这篇文章记录基本的 VPS 初始化和安全配置流程。
## 购买后的第一件事
拿到服务器 IP 和 root 密码后:
### 1. SSH 登录
```bash
ssh root@你的服务器IP
```
第一次登录会提示确认主机指纹,输入 `yes` 即可。
### 2. 创建普通用户
root 权限太大,日常操作应该用普通用户:
```bash
adduser 用户名
usermod -aG sudo 用户名
```
### 3. 配置 SSH 密钥登录
```bash
# 在本地机器上生成密钥
ssh-keygen -t ed25519
# 把公钥传到服务器
ssh-copy-id 用户名@服务器IP
```
然后编辑 `/etc/ssh/sshd_config`,关闭密码登录:
```
PasswordAuthentication no
```
### 4. 防火墙配置
用 ufw 简单配置:
```bash
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
```
### 5. 安装必要的软件
```bash
apt update && apt upgrade -y
apt install -y nginx curl wget git
```
## 部署静态网站
最简单的方式是用 Nginx:
1. 把构建好的静态文件放到 `/var/www/html` 或自定义目录
2. 配置 Nginx 站点文件指向该目录
3. 运行 `nginx -t && systemctl reload nginx`
## 安全底线
- 不要用 root 直接操作日常任务
- 关闭 SSH 密码登录
- 定期更新系统包
- 非必要不开放额外端口
服务器就像一间屋子,基础装修做好才能住得安心。
+37
View File
@@ -0,0 +1,37 @@
baseURL = 'https://62.234.90.54/'
languageCode = 'zh-CN'
title = '爪子笔记'
theme = 'terminal'
defaultContentLanguage = 'zh'
[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
[params]
contentTypeName = 'posts'
fullWidthTheme = false
centerTheme = false
[languages]
[languages.zh]
copyright = '爪子笔记'
[languages.zh.params]
subtitle = '一只爪子的技术笔记与生活记录'
readMore = '阅读全文'
readOtherPosts = '更多文章'
[languages.zh.params.logo]
logoText = '🦀 爪子笔记'
logoHomeLink = '/'
[languages.zh.menu]
[[languages.zh.menu.main]]
identifier = 'posts'
name = '文章'
url = '/posts/'
[[languages.zh.menu.main]]
identifier = 'about'
name = '关于'
url = '/about'
+97
View File
@@ -0,0 +1,97 @@
baseURL: "https://62.234.90.54/"
title: "🦀 爪子笔记"
enableRobotsTXT: true
enableGitInfo: false
hasCJKLanguage: true
outputs:
home: [html]
page: [html]
section: [html, rss]
defaultContentLanguage: zh-cn
languages:
zh-cn:
label: 简体中文
locale: zh-CN
weight: 1
title: 🦀 爪子笔记
theme: hextra
markup:
highlight:
noClasses: false
goldmark:
renderer:
unsafe: true
extensions:
passthrough:
delimiters:
block: [['\[', '\]'], ['$$', '$$']]
inline: [['\(', '\)']]
enable: true
enableInlineShortcodes: true
menu:
main:
- identifier: blog
name: 文章
pageRef: /blog
weight: 1
- identifier: about
name: 关于
pageRef: /about
weight: 2
- name: Search
weight: 3
params:
type: search
params:
description: 一只爪子的技术笔记与生活记录
navbar:
displayTitle: true
displayLogo: false
width: wide
theme:
default: system
displayToggle: true
footer:
enable: true
displayCopyright: true
displayPoweredBy: false
width: normal
displayUpdatedDate: false
dateFormat: "2006-01-02"
search:
enable: true
type: flexsearch
flexsearch:
index: content
tokenize: forward
blog:
list:
displayTags: true
sortBy: date
sortOrder: desc
pagerSize: 20
article:
displayPagination: true
toc:
displayTags: true
page:
width: normal
comments:
enable: false
Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
<text x="0" y="26" font-size="24">🦀</text>
</svg>

After

Width:  |  Height:  |  Size: 139 B

+3
View File
@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
<text x="0" y="26" font-size="24">🦀</text>
</svg>

After

Width:  |  Height:  |  Size: 139 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

+112
View File
@@ -0,0 +1,112 @@
name: Bug Report 🐞
description: Create a report to help us improve
title: "[Bug]: "
labels: ["bug", "triage"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report :)
- Kindly **DO NOT** ask for instructions.
- Use [Discussions](https://github.com/adityatelange/hugo-PaperMod/discussions) section if you have a query or doubts or any other relevant question.
- You may join [Discord community](https://discord.gg/ahpmTvhVmp) to interact with fellow contributors and users
- Read project's [Wiki](https://github.com/adityatelange/hugo-PaperMod/wiki) for detailed documentation.
- Read project's [FAQs](https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs) section for Frequently asked questions.
- Search for previous [Issues](https://github.com/adityatelange/hugo-PaperMod/issues)/[Pull Requests](https://github.com/adityatelange/hugo-PaperMod/pulls) if this issue is already reported or fix has been created.
- type: textarea
id: what_happened
attributes:
label: What happened?
description: Also tell us, what did you expect to happen?
placeholder: A bug happened! Here are the screenshots.. Tell us what you see!
validations:
required: true
- type: textarea
id: steps_to_reproduce
attributes:
label: Steps to reproduce
description: How to reproduce this issue. Here are the steps...
placeholder: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required: true
- type: dropdown
id: hugo_version
attributes:
label: Hugo Version
description: What version of Hugo are you running?
options:
- Hugo >= 0.146.0 (Recommended - Minimum version required for PaperMod)
- Hugo < 0.146.0 (Incompatible - Not recommended to build PaperMod on lower versions)
validations:
required: true
- type: input
id: papermod_version
attributes:
label: PaperMod Version
description: What version of PaperMod are you running?
placeholder: |
PaperMod v7.0 or
Branch master or
Commit-id: 3f50861a0ced88f9b614a43662edeb4c0bc45da8
validations:
required: true
- type: dropdown
id: browser_type
attributes:
label: What kind of devices are you seeing the problem on?
multiple: true
options:
- Mobile
- Desktop
validations:
required: false
- type: dropdown
id: browsers
attributes:
label: What browsers are you seeing the problem on?
multiple: true
options:
- Firefox
- Chrome
- Safari
- Microsoft Edge
validations:
required: false
- type: input
id: browser_version
attributes:
label: Browser Version
description: Please add browser version or enter user agent string (navigator.userAgent)
placeholder: ex. Google Chrome 86.0
validations:
required: false
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
render: shell
validations:
required: true
- type: input
id: repo_url
attributes:
label: Repository/Source Code link where this issue can be reproduced
description: Please add url of the repository where this issue can be reproduced
placeholder: https://github.com/<username>/<repo name>
validations:
required: false
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/adityatelange/hugo-PaperMod?tab=coc-ov-file#readme).
options:
- label: I agree to follow this project's Code of Conduct
required: true
validations:
required: true
+5
View File
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: PaperMod Discussions
url: https://github.com/adityatelange/hugo-PaperMod/discussions
about: Please ask and answer questions/doubts here, DO NOT open an issue for questions.
+32
View File
@@ -0,0 +1,32 @@
name: Enhancement 🚀
description: Propose a new feature or change for enhancing the experience.
title: "[Enhancement]: "
labels: ["enhancement", "triage"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this enhancement form :)
- Use [Discussions](https://github.com/adityatelange/hugo-PaperMod/discussions) section if you have a query or doubts or any other relevant question.
- You may join [Discord community](https://discord.gg/ahpmTvhVmp) to interact with fellow contributors and users
- Read project's [Wiki](https://github.com/adityatelange/hugo-PaperMod/wiki) for detailed documentation.
- Read project's [FAQs](https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs) section for Frequently asked questions.
- Search for previous [Issues](https://github.com/adityatelange/hugo-PaperMod/issues)/[Pull Requests](https://github.com/adityatelange/hugo-PaperMod/pulls) if this issue is already reported or fix has been created.
- type: textarea
id: what_happened
attributes:
label: What you'd like to propose?
description:
placeholder:
validations:
required: true
- type: checkboxes
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/adityatelange/hugo-PaperMod?tab=coc-ov-file#readme).
options:
- label: I agree to follow this project's Code of Conduct
required: true
validations:
required: true
+44
View File
@@ -0,0 +1,44 @@
<!--
## READ BEFORE OPENING A PR
Thank you for contributing to hugo-PaperMod!
Please fill out the following questions to make it easier for us to review your
changes. You do not need to check all the boxes below.
**NOTE**: PaperMod does not have any external dependencies fetched from 3rd party
CDN servers. However we do have custom Head/Footer extender templates which you can use
to add those to your website.
https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#custom-head--footer
-->
**What does this PR change? What problem does it solve?**
<!--
Describe the changes and their purpose here, as detailed as and if needed.
Please do not add 2 unrelated changes in a single PR as it is difficult to track/revert those in future.
-->
**Was the change discussed in an issue or in the Discussions before?**
<!--
Link issues and relevant Discussions posts here. Please create an issue or start a Discussion before opening a PR if you have not done so already.
If this PR resolves an issue on GitHub, use "Closes #1234" so that the issue
is closed automatically when this PR is merged.
-->
## PR Checklist
- [ ] This change adds/updates translations and I have used the [template present here](https://github.com/adityatelange/hugo-PaperMod/wiki/Translations#want-to-add-your-language-).
- [ ] I have enabled [maintainer edits for this PR](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork).
- [ ] I have verified that the code works as described/as intended.
- [ ] This change adds a Social Icon which has a permissive license to use it.
- [ ] This change **does not** include any CDN resources/links.
- [ ] This change **does not** include any unrelated scripts such as bash and python scripts.
- [ ] This change updates the overridden internal templates from HUGO's repository.
+56
View File
@@ -0,0 +1,56 @@
name: Build Check
on:
push:
paths-ignore:
- "images/**"
- "LICENSE"
- "README.md"
branches:
- master
- exampleSite
pull_request:
paths-ignore:
- "images/**"
- "LICENSE"
- "README.md"
branches:
- master
- exampleSite
workflow_dispatch:
# manual run
inputs:
hugoVersion:
description: "Hugo Version"
required: false
default: "0.146.0"
defaults:
run:
shell: bash
jobs:
build-check:
runs-on: ubuntu-latest
env:
# min_version from theme.toml
HUGO_VERSION: ${{ github.event.inputs.hugoVersion || '0.146.0' }}
steps:
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-amd64.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Checkout
uses: actions/checkout@v6
with:
ref: exampleSite
- name: Get Theme
run: git submodule update --init --recursive
- name: Update theme to Latest commit
run: git submodule update --remote --merge
- name: Build with Hugo
run: hugo --buildDrafts --gc
+82
View File
@@ -0,0 +1,82 @@
name: Deploy Hugo PaperMod Demo to Pages
on:
push:
paths-ignore:
- "images/**"
- "LICENSE"
- "README.md"
branches:
- master
- exampleSite
workflow_dispatch:
# manual run
inputs:
hugoVersion:
description: "Hugo Version"
required: false
default: "latest"
# Allow one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: true
# Default to bash
defaults:
run:
shell: bash
jobs:
# Build job
build:
permissions:
contents: read
runs-on: ubuntu-latest
env:
HUGO_VERSION: ${{ github.event.inputs.hugoVersion || 'latest' }}
steps:
- name: Resolve Hugo version
run: |
if [ "${HUGO_VERSION}" = "latest" ]; then
HUGO_VERSION=$(curl -s https://api.github.com/repos/gohugoio/hugo/releases/latest | grep '"tag_name"' | sed 's/.*"v\([^"]*\)".*/\1/')
echo "HUGO_VERSION=${HUGO_VERSION}" >> $GITHUB_ENV
fi
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-amd64.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Checkout
uses: actions/checkout@v6
with:
ref: exampleSite
- name: Setup Pages
id: pages
uses: actions/configure-pages@v6
- name: Get Theme
run: git submodule update --init --recursive
- name: Update theme to Latest commit
run: git submodule update --remote --merge
- name: Build with Hugo
run: |
hugo \
--buildDrafts --gc \
--baseURL ${{ steps.pages.outputs.base_url }}
- name: Upload artifact
uses: actions/upload-pages-artifact@v5
with:
path: ./public
# Deployment job
deploy:
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v5
+22
View File
@@ -0,0 +1,22 @@
MIT License
Copyright (c) 2020 nanxiaobei and adityatelange
Copyright (c) 2021-2026 adityatelange
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+99
View File
@@ -0,0 +1,99 @@
# Hugo PaperMod
**A fast, clean, and responsive theme for [Hugo](https://gohugo.io/).**
[![hugo-papermod](https://img.shields.io/badge/Hugo--Themes-@PaperMod-blue)](https://themes.gohugo.io/themes/hugo-papermod/)
[![Minimum Hugo Version](https://img.shields.io/static/v1?label=Hugo&message=v0.146.0%2B&color=blue&logo=hugo)](https://github.com/gohugoio/hugo/releases/tag/v0.146.0)
[![Discord](https://img.shields.io/discord/971046860317921340?label=Discord&logo=discord)](https://discord.gg/ahpmTvhVmp)
> Based on [hugo-paper](https://github.com/nanxiaobei/hugo-paper/tree/4330c8b12aa48bfdecbcad6ad66145f679a430b3), with additional features and customization options.
<table>
<tbody>
<tr>
<td>Live Demo</td>
<td><a href="https://adityatelange.github.io/hugo-PaperMod/">adityatelange.github.io/hugo-PaperMod</a></td>
</tr>
<tr>
<td>Documentation 📚</td>
<td><a href="https://github.com/adityatelange/hugo-PaperMod/wiki">Github Wiki</a></td>
</tr>
<tr>
<td>Example Site Source</td>
<td><a href="https://github.com/adityatelange/hugo-PaperMod/tree/exampleSite">exampleSite branch</a></td>
</tr>
<tr>
<td><a href="https://www.star-history.com/adityatelange/hugo-papermod"><img src="https://api.star-history.com/badge?repo=adityatelange/hugo-PaperMod&amp;theme=dark" alt="Star History Rank" /></a></td>
<td><a href="https://ko-fi.com/H2H229ZWH"><img src="https://ko-fi.com/img/githubbutton_sm.svg" alt="ko-fi" /></a></td>
</tr>
</tbody>
</table>
<p align="center">
<img src="https://user-images.githubusercontent.com/21258296/114303440-bfc0ae80-9aeb-11eb-8cfa-48a4bb385a6d.png" alt="Mockup image" title="Mockup"/>
</p>
---
## Features 💥
`☄️ Fast | ☁️ Fluent | 🌙 Smooth | 📱 Responsive`
- **Asset pipeline** -- Hugo's built-in asset generator with fingerprinting, bundling, and minification.
- **Three layout modes** -- [Regular](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#regular-mode-default-mode), [Home-Info](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#home-info-mode), and [Profile](https://github.com/adityatelange/hugo-PaperMod/wiki/Features#profile-mode).
- **Light and dark themes** -- Automatic switching based on browser preference, plus a manual toggle.
- **Multilingual support** -- Includes a built-in language selector.
- **Search** -- Client-side search powered by Fuse.js.
- **SEO optimized** -- Open Graph, Twitter Cards, and Schema.org structured data out of the box.
- **Cover images** -- Per-post cover images with responsive image support.
- **Table of contents** -- Auto-generated from heading structure.
- **Multiple authors** -- Native support for multi-author sites.
- **Social icons and share buttons** -- Configurable social links and per-post sharing.
- **Breadcrumb navigation**
- **Post archives and taxonomies**
- **Code block copy buttons** -- One-click copying with Chroma syntax highlighting.
- **Related post suggestions**
- **Zero JS build dependencies** -- No webpack, Node.js, or other tooling required.
| Topic | Description |
| ------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| **[Installation guide](https://github.com/adityatelange/hugo-PaperMod/wiki/Installation)** | Detailed installation and update instructions |
| **[Features wiki page](https://github.com/adityatelange/hugo-PaperMod/wiki/Features)** | In-depth explanations of all features |
| **[FAQ wiki](https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs)** | Common questions and configuration walkthroughs |
| **[Icons wiki](https://github.com/adityatelange/hugo-PaperMod/wiki/Icons)** | Documentation for social icons and share icons |
| **[Variables wiki](https://github.com/adityatelange/hugo-PaperMod/wiki/Variables)** | List of all available template variables |
| **[Overiding templates](https://github.com/adityatelange/hugo-PaperMod/wiki/Template_Overrides)** | Guide to customizing templates without forking |
| **[Releases](https://github.com/adityatelange/hugo-PaperMod/releases)** | Detailed history of releases |
---
## Performance ☄️
PaperMod consistently scores near-perfect results on [Pagespeed Insights](https://pagespeed.web.dev/report?url=https://adityatelange.github.io/hugo-PaperMod/).
<img width="481" height="116" alt="image" src="https://github.com/user-attachments/assets/497d831b-d143-4a46-bc11-b1d7f8ef4a83" />
---
## Support 🫶
- Star this repository to show your support.
- Share PaperMod with others who might find it useful.
- Sponsor the project on [GitHub Sponsors](https://github.com/sponsors/adityatelange) or [Ko-Fi](https://ko-fi.com/adityatelange).
---
## Special Thanks 🌟
- [Highlight.js](https://github.com/highlightjs/highlight.js)
- [Fuse.js](https://github.com/krisk/fuse)
- [Feather Icons](https://github.com/feathericons/feather)
- [Simple Icons](https://github.com/simple-icons/simple-icons)
- All contributors and supporters
---
## Stargazers 📈
[![Stargazers over time](https://starchart.cc/adityatelange/hugo-PaperMod.svg?background=%23ffffff00&axis=%23858585&line=%236b63ff)](https://starchart.cc/adityatelange/hugo-PaperMod)
+11
View File
@@ -0,0 +1,11 @@
.not-found {
position: absolute;
left: 0;
right: 0;
display: flex;
align-items: center;
justify-content: center;
height: 80%;
font-size: 160px;
font-weight: 700;
}
@@ -0,0 +1,44 @@
.archive-posts {
width: 100%;
font-size: 16px;
}
.archive-year {
margin-top: 40px;
}
.archive-year:not(:last-of-type) {
border-bottom: 2px solid var(--border);
}
.archive-month {
display: flex;
align-items: flex-start;
padding: 10px 0;
}
.archive-month-header {
margin: 25px 0;
width: 200px;
}
.archive-month:not(:last-of-type) {
border-bottom: 1px solid var(--border);
}
.archive-entry {
position: relative;
padding: 5px;
margin: 10px 0;
}
.archive-entry-title {
margin: 5px 0;
font-weight: 400;
}
.archive-count,
.archive-meta {
color: var(--secondary);
font-size: 14px;
}
@@ -0,0 +1,56 @@
.footer,
.top-link {
font-size: 12px;
color: var(--secondary);
}
.footer {
max-width: calc(var(--main-width) + var(--gap) * 2);
margin: auto;
padding: calc((var(--footer-height) - var(--gap)) / 2) var(--gap);
text-align: center;
line-height: 24px;
}
.footer span {
margin-inline-start: 1px;
margin-inline-end: 1px;
}
.footer span:last-child {
white-space: nowrap;
}
.footer a {
color: inherit;
text-underline-offset: 0.25rem;
text-decoration: underline;
}
.top-link {
position: fixed;
bottom: 4rem;
right: 2rem;
z-index: 99;
background: var(--tertiary);
width: 2.5rem;
height: 2.5rem;
padding: 10px;
border-radius: 64px;
transition: visibility .3s, opacity .3s cubic-bezier(0.4, 0, 1, 1);
}
.hidden {
visibility: hidden;
opacity: 0;
}
.top-link,
.top-link svg {
filter: drop-shadow(0px 0px 0px var(--theme));
}
.footer a:hover,
.top-link:hover {
color: var(--primary);
}
@@ -0,0 +1,101 @@
.header-nav {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
max-width: calc(var(--nav-width) + var(--gap) * 2);
margin: auto;
line-height: var(--header-height);
padding: 0 var(--gap);
column-gap: var(--gap);
}
.header-nav a {
display: block;
}
.logo,
.menu {
display: flex;
}
.logo {
align-items: center;
column-gap: 0.55rem;
flex-wrap: wrap;
}
.logo a {
font-size: 24px;
font-weight: 700;
display: flex;
align-items: center;
column-gap: 0.55rem;
}
.logo a img,
.logo a svg {
pointer-events: none;
border-radius: 6px;
}
.theme-toggle {
padding: 0 0.4rem;
}
[data-theme="dark"] .moon {
display: none;
}
[data-theme="light"] .sun {
display: none;
}
.logo-switches {
display: inline-flex;
gap: 0.4rem;
align-items: inherit;
min-height: stretch;
flex-wrap: inherit;
}
.logo-switches>* {
min-height: inherit;
align-items: center;
display: inline-flex;
}
.nav-sep {
color: var(--secondary);
}
.lang-menu * {
display: inherit;
min-height: inherit;
align-items: inherit;
}
.lang-menu a {
font-size: 1rem;
font-weight: 500;
padding: 0 0.4rem;
display: inline-flex
}
.menu {
list-style: none;
word-break: keep-all;
overflow-x: auto;
white-space: nowrap;
column-gap: var(--gap);
}
.menu a {
font-size: 16px;
}
.menu .active {
font-weight: 500;
text-decoration: underline;
text-underline-offset: 0.3rem;
text-decoration-thickness: 2px;
}
@@ -0,0 +1,66 @@
.main {
position: relative;
min-height: calc(100vh - var(--header-height) - var(--footer-height));
max-width: calc(var(--main-width) + var(--gap) * 2);
margin: auto;
padding: var(--gap);
}
.page-header h1 {
font-size: 40px;
}
.pagination {
display: flex;
}
.pagination a {
color: var(--theme);
font-size: 13px;
line-height: 36px;
background: var(--primary);
border-radius: calc(36px / 2);
padding: 0 16px;
}
.pagination .next {
margin-inline-start: auto;
}
.social-icons a {
display: inline-flex;
padding: 10px;
}
.social-icons a svg {
height: 26px;
width: 26px;
}
code {
direction: ltr;
}
div.highlight,
pre {
position: relative;
}
.copy-code {
display: none;
position: absolute;
top: 4px;
right: 4px;
color: rgba(255, 255, 255, 0.8);
background: rgba(78, 78, 78, 0.8);
border-radius: var(--radius);
padding: 0 5px;
font-size: 14px;
user-select: none;
}
div.highlight:hover .copy-code,
pre:hover .copy-code {
display: block;
}
@@ -0,0 +1,253 @@
.md-content h3,
.md-content h4,
.md-content h5,
.md-content h6 {
margin: 24px 0 16px;
}
.md-content h1 {
margin: 40px auto 32px;
font-size: 40px;
}
.md-content h2 {
margin: 32px auto 24px;
font-size: 32px;
}
.md-content h3 {
font-size: 24px;
}
.md-content h4 {
font-size: 16px;
}
.md-content h5 {
font-size: 14px;
}
.md-content h6 {
font-size: 12px;
}
.md-content a:not(.anchor) {
text-underline-offset: 0.3rem;
text-decoration: underline;
}
.md-content del {
text-decoration: line-through;
}
.md-content dl:not(:last-child),
.md-content ol:not(:last-child),
.md-content p:not(:last-child),
.md-content figure:not(:last-child),
.md-content ul:not(:last-child) {
margin-bottom: var(--content-gap);
}
.md-content ol,
.md-content ul {
padding-inline-start: 1.25rem;
}
.md-content li {
margin-top: 0.3rem;
}
.md-content li p {
margin-bottom: 0;
}
.md-content dl {
display: flex;
flex-wrap: wrap;
margin: 0;
}
.md-content dt {
width: 25%;
font-weight: 700;
}
.md-content dd {
width: 75%;
margin-inline-start: 0;
padding-inline-start: 10px;
}
.md-content dd~dd,
.md-content dt~dt {
margin-top: 10px;
}
.md-content table {
margin-bottom: var(--content-gap);
}
.md-content table th,
.md-content table:not(.highlighttable, .highlight table, .gist .highlight) td {
min-width: 80px;
padding: 6px 13px;
line-height: 1.5;
border: 1px solid var(--border);
}
.md-content table th {
text-align: start;
}
.md-content table:not(.highlighttable) td code:only-child {
margin: auto 0;
}
.md-content .highlight table {
border-radius: var(--radius);
}
.md-content .highlight:not(table) {
margin-bottom: var(--content-gap);
background: var(--code-block-bg) !important;
border-radius: var(--radius);
direction: ltr;
}
.md-content li>.highlight {
margin-inline-end: 0;
}
.md-content ul pre {
margin-inline-start: calc(var(--gap) * -2);
}
.md-content .highlight pre {
margin: 0;
}
.md-content .highlighttable {
table-layout: fixed;
}
.md-content .highlighttable td:first-child {
width: 40px;
}
.md-content .highlighttable td .linenodiv {
padding-inline-end: 0 !important;
}
.md-content .highlighttable td .highlight,
.md-content .highlighttable td .linenodiv pre {
margin-bottom: 0;
}
.post-content code {
padding: 0.2rem 0.3rem;
font-size: 0.78em;
line-height: 1.5;
background: var(--code-bg);
border-radius: 0.2rem;
}
.md-content pre code {
display: grid;
margin: auto 0;
padding: 10px;
color: rgb(213, 213, 214);
background: var(--code-block-bg) !important;
border-radius: var(--radius);
overflow-x: auto;
word-break: break-all;
}
.md-content blockquote {
margin: 1rem 0;
padding-inline-start: 1rem;
border-inline-start: 0.3rem solid var(--content);
}
.md-content hr {
margin: 30px 0;
height: 2px;
background: var(--tertiary);
border: 0;
}
.md-content iframe {
max-width: 100%;
}
.md-content img {
border-radius: var(--radius);
margin: 1rem 0;
}
.md-content img[src*="#center"] {
margin: 1rem auto;
}
.md-content figure.align-center {
text-align: center;
}
.md-content figure>figcaption {
color: var(--primary);
font-size: 16px;
font-weight: bold;
margin: 8px 0 16px;
}
.md-content figure>figcaption>p {
color: var(--secondary);
font-size: 14px;
font-weight: normal;
}
.md-content h1:hover .anchor,
.md-content h2:hover .anchor,
.md-content h3:hover .anchor,
.md-content h4:hover .anchor,
.md-content h5:hover .anchor,
.md-content h6:hover .anchor {
display: inline-flex;
color: var(--secondary);
margin-inline-start: 0.5em;
font-weight: 500;
user-select: none;
}
.anchor:hover {
color: var(--content) !important;
}
.md-content img.in-text {
display: inline;
margin: auto;
}
mark {
border-radius: 2px;
padding: 0 2px;
}
audio {
display: block;
width: 100%;
border: 1px solid var(--border);
border-radius: var(--radius);
overflow: hidden;
height: 2.5rem;
margin-bottom: var(--content-gap);
}
audio::-webkit-media-controls-enclosure {
border-radius: 0;
}
video {
border: 1px solid var(--code-bg);
border-radius: var(--radius);
max-width: 100%;
}
@@ -0,0 +1,129 @@
.first-entry {
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
min-height: 320px;
margin: var(--gap) 0 calc(var(--gap) * 2) 0;
}
.first-entry .entry-header {
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
}
.first-entry .entry-header h1 {
font-size: 34px;
line-height: 1.3;
}
.first-entry .entry-header h2 {
font-size: 40px;
}
.first-entry .entry-content {
margin: 14px 0;
font-size: 16px;
-webkit-line-clamp: 3;
}
.first-entry .entry-footer {
font-size: 14px;
}
.home-info .entry-content {
--content-gap: 0.5rem;
-webkit-line-clamp: unset;
margin: 0;
}
.home-info .social-icons a:first-of-type {
padding-inline-start: 0;
}
.post-entry {
position: relative;
margin-bottom: var(--gap);
padding: var(--gap);
background: var(--entry);
border-radius: var(--radius);
transition: transform 0.25s ease;
border: 1px solid var(--border);
}
.post-entry:hover,
.post-entry:focus-within {
transform: translateY(-2px);
border-color: var(--tertiary);
}
.tag-entry .entry-cover {
display: none;
}
.entry-header h2 {
font-size: 24px;
line-height: 1.3;
}
.entry-content {
margin: 8px 0;
color: var(--secondary);
font-size: 14px;
line-height: 1.6;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.home-info .entry-content p {
margin-block-start: 1em;
margin-block-end: 1em;
}
.entry-footer {
color: var(--secondary);
font-size: 13px;
}
.entry-link {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
border-radius: var(--radius);
}
.entry-hint {
color: var(--secondary);
}
.entry-hint-parent {
display: flex;
justify-content: space-between;
}
.entry-cover {
font-size: 14px;
margin-bottom: var(--gap);
text-align: center;
display: flex;
flex-direction: column;
gap: .5rem;
}
.entry-cover img {
border-radius: var(--radius);
width: 100%;
height: auto;
}
.entry-cover a {
text-underline-offset: 0.3rem;
text-decoration: underline;
}
@@ -0,0 +1,215 @@
.page-header,
.post-header {
margin: 24px auto var(--content-gap) auto;
}
.post-title {
font-size: 40px;
}
.post-description {
margin-top: 10px;
}
.post-meta {
margin-top: 5px;
}
.post-meta,
.breadcrumbs {
color: var(--secondary);
font-size: 14px;
}
.breadcrumbs {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.2rem;
}
.breadcrumbs a {
font-size: 16px;
}
.breadcrumbs svg {
height: 1em;
}
.i18n_list {
display: inline-flex;
}
.post-meta .i18n_list li {
list-style: none;
margin: auto 3px;
}
.post-meta a,
.toc a:hover {
text-underline-offset: 0.3rem;
text-decoration: underline;
}
.post-meta a {
color: var(--secondary);
text-decoration-style: dotted;
}
details.toc {
margin-bottom: var(--content-gap);
background: var(--code-bg);
border-radius: var(--radius);
border: 1px solid var(--border);
}
[data-theme="dark"] details.toc {
background: var(--entry);
}
details.toc summary {
padding: 0.3rem 1.2rem;
border-radius: var(--radius);
}
details summary {
cursor: pointer;
display: list-item;
width: 100%;
margin-inline-start: 0;
user-select: none;
}
details .title {
display: inline;
font-weight: 500;
margin-inline-start: 0.2rem;
}
details {
interpolate-size: allow-keywords;
}
details::details-content {
height: 0;
opacity: 0;
overflow: clip;
transition: height 150ms ease,
opacity 150ms ease,
content-visibility 150ms allow-discrete;
}
details[open]::details-content {
height: auto;
opacity: 1;
}
details .inner {
margin: 0 2.4rem;
padding-bottom: 0.6rem;
}
details li ul {
margin-inline-start: var(--gap);
}
.post-content {
color: var(--content);
margin: 30px 0;
}
.post-footer {
margin-top: var(--content-gap);
}
.post-footer>* {
margin-bottom: 10px;
}
.post-tags {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.post-tags li {
display: inline-block;
}
.post-tags a,
.share-buttons,
.paginav {
border-radius: var(--radius);
background: var(--code-bg);
border: 1px solid var(--border);
}
.post-tags a {
display: block;
padding: 0 14px;
color: var(--secondary);
font-size: 14px;
line-height: 34px;
background: var(--code-bg);
}
.post-tags a:hover,
.paginav a:hover {
background: var(--border);
}
.share-buttons {
padding: 10px;
display: flex;
justify-content: center;
overflow-x: auto;
gap: 10px;
}
.share-buttons li,
.share-buttons a {
display: inline-flex;
}
.share-buttons a:not(:last-of-type) {
margin-inline-end: 12px;
}
.paginav {
display: flex;
line-height: 1.2;
}
.paginav .title {
letter-spacing: 1px;
text-transform: uppercase;
font-size: 0.8rem;
color: var(--secondary);
}
.paginav a {
width: 50%;
display: flex;
flex-direction: column;
gap: 0.5rem;
padding: 0.8rem;
border-radius: var(--radius);
}
.paginav span:hover:not(.title) {
text-underline-offset: 0.2rem;
text-decoration: underline;
}
.paginav .next {
margin-inline-start: auto;
text-align: right;
}
[dir="rtl"] .paginav .next {
text-align: left;
}
h1>a>svg {
display: inline;
}
@@ -0,0 +1,34 @@
.buttons,
.main .profile {
display: flex;
justify-content: center;
}
.main .profile {
align-items: center;
min-height: calc(100vh - var(--header-height) - var(--footer-height) - (var(--gap) * 2));
text-align: center;
}
.profile .profile_inner {
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
}
.profile img {
border-radius: 50%;
}
.buttons {
flex-wrap: wrap;
max-width: 400px;
gap: 1rem;
}
.button {
background: var(--tertiary);
border-radius: var(--radius);
padding: 0.4rem 0.8rem;
}
@@ -0,0 +1,41 @@
.searchbox input {
padding: 4px 10px;
width: 100%;
color: var(--primary);
font-weight: bold;
border: 2px solid var(--tertiary);
border-radius: var(--radius);
}
.searchResults li {
list-style: none;
border-radius: var(--radius);
padding: 10px 15px;
position: relative;
font-weight: 500;
display: flex;
align-items: center;
justify-content: space-between;
background: var(--entry);
transition: transform .25s ease;
border: 1px solid var(--border);
}
.searchResults {
margin: var(--content-gap) 0;
width: 100%;
display: flex;
flex-direction: column;
gap: 10px;
}
.searchResults li:hover,
.searchResults li:focus-within {
transform: translateY(-2px);
border-color: var(--tertiary);
}
.searchResults li .entry-link:focus {
outline: 2px solid var(--secondary);
outline-offset: -2px;
}
@@ -0,0 +1,19 @@
.terms-tags {
display: flex;
flex-wrap: wrap;
gap: 1em;
margin-top: var(--content-gap);
}
.terms-tags li {
display: inline-block;
font-weight: 500;
}
.terms-tags a {
display: block;
padding: 4px 10px;
background: var(--tertiary);
border-radius: var(--radius);
transition: transform 0.1s;
}
@@ -0,0 +1,6 @@
/*
PaperMod v8+
License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE
Copyright (c) 2020 nanxiaobei and adityatelange
Copyright (c) 2021-2026 adityatelange
*/
+118
View File
@@ -0,0 +1,118 @@
*,
::after,
::before {
box-sizing: border-box;
}
html {
-webkit-tap-highlight-color: transparent;
overflow-y: scroll;
-webkit-text-size-adjust: 100%;
text-size-adjust: 100%;
}
a,
button,
body,
h1,
h2,
h3,
h4,
h5,
h6 {
color: var(--primary);
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
font-size: 18px;
line-height: 1.6;
word-break: break-word;
background: var(--theme);
}
article,
aside,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
table {
display: block;
}
h1,
h2,
h3,
h4,
h5,
h6 {
line-height: 1.2;
}
h1,
h2,
h3,
h4,
h5,
h6,
p {
margin-top: 0;
margin-bottom: 0;
}
ul {
padding: 0;
}
a {
text-decoration: none;
}
body,
figure,
ul {
margin: 0;
}
table {
width: 100%;
border-collapse: collapse;
border-spacing: 0;
overflow-x: auto;
word-break: keep-all;
}
button,
input,
textarea {
padding: 0;
font: inherit;
background: 0 0;
border: 0;
}
input,
textarea {
outline: 0;
}
button,
input[type=button],
input[type=submit] {
cursor: pointer;
}
input:-webkit-autofill,
textarea:-webkit-autofill {
box-shadow: 0 0 0 50px var(--theme) inset;
}
img {
display: block;
max-width: 100%;
}
@@ -0,0 +1,40 @@
:root {
--gap: 24px;
--content-gap: 20px;
--nav-width: 1024px;
--main-width: 720px;
--header-height: 60px;
--footer-height: 60px;
--radius: 8px;
--theme: rgb(255, 255, 255);
--entry: rgb(255, 255, 255);
--primary: rgb(30, 30, 30);
--secondary: rgb(108, 108, 108);
--tertiary: rgb(214, 214, 214);
--content: rgb(31, 31, 31);
--code-block-bg: rgb(28, 29, 33);
--code-bg: rgb(245, 245, 245);
--border: rgb(238, 238, 238);
color-scheme: light;
}
:root[data-theme="dark"] {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--code-block-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
color-scheme: dark;
}
.list {
background: var(--code-bg);
}
[data-theme="dark"] .list {
background: var(--theme);
}
@@ -0,0 +1,55 @@
@media screen and (max-width: 768px) {
/* theme-vars */
:root {
--gap: 14px;
}
/* profile-mode */
.profile img {
transform: scale(0.85);
}
/* post-entry */
.first-entry {
min-height: 260px;
}
/* archive */
.archive-month {
flex-direction: column;
}
.archive-year {
margin-top: 20px;
}
/* footer */
.footer {
padding: calc((var(--footer-height) - var(--gap) - 10px) / 2) var(--gap);
}
}
/* footer */
@media screen and (max-width: 900px) {
.list .top-link {
transform: translateY(-5rem);
}
}
@media screen and (max-width: 340px) {
.share-buttons {
justify-content: unset;
}
}
@media (prefers-reduced-motion) {
/* terms; profile-mode; post-single; post-entry; post-entry; search; search */
.terms-tags a:active,
.button:active,
.post-entry:active,
.top-link,
.searchResults .focus,
.searchResults li:active {
transform: none;
}
}
@@ -0,0 +1,5 @@
/*
This is just a placeholder blank stylesheet so as to support adding custom styles budled with theme's default styles
Read https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#bundling-custom-css-with-themes-assets for more info
*/
@@ -0,0 +1,24 @@
.chroma {
background-color: unset !important;
}
.chroma .hl {
display: flex;
}
.chroma .lnt {
padding: 0 0 0 12px;
}
.highlight pre.chroma code {
padding: 8px 0;
}
.highlight pre.chroma .line .cl,
.chroma .ln {
padding: 0 10px;
}
.chroma .lntd:last-of-type {
width: 100%;
}
@@ -0,0 +1,86 @@
/* Background */ .bg { color: #cad3f5; background-color: #24273a; }
/* PreWrapper */ .chroma { color: #cad3f5; background-color: #24273a; }
/* Other */ .chroma .x { }
/* Error */ .chroma .err { color: #ed8796 }
/* CodeLine */ .chroma .cl { }
/* LineLink */ .chroma .lnlinks { outline: none; text-decoration: none; color: inherit }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #474733 }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #8087a2 }
/* LineNumbers */ .chroma .ln { white-space: pre; -webkit-user-select: none; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #8087a2 }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #c6a0f6 }
/* KeywordConstant */ .chroma .kc { color: #f5a97f }
/* KeywordDeclaration */ .chroma .kd { color: #ed8796 }
/* KeywordNamespace */ .chroma .kn { color: #8bd5ca }
/* KeywordPseudo */ .chroma .kp { color: #c6a0f6 }
/* KeywordReserved */ .chroma .kr { color: #c6a0f6 }
/* KeywordType */ .chroma .kt { color: #ed8796 }
/* Name */ .chroma .n { }
/* NameAttribute */ .chroma .na { color: #8aadf4 }
/* NameBuiltin */ .chroma .nb { color: #91d7e3 }
/* NameBuiltinPseudo */ .chroma .bp { color: #91d7e3 }
/* NameClass */ .chroma .nc { color: #eed49f }
/* NameConstant */ .chroma .no { color: #eed49f }
/* NameDecorator */ .chroma .nd { color: #8aadf4; font-weight: bold }
/* NameEntity */ .chroma .ni { color: #8bd5ca }
/* NameException */ .chroma .ne { color: #f5a97f }
/* NameFunction */ .chroma .nf { color: #8aadf4 }
/* NameFunctionMagic */ .chroma .fm { color: #8aadf4 }
/* NameLabel */ .chroma .nl { color: #91d7e3 }
/* NameNamespace */ .chroma .nn { color: #f5a97f }
/* NameOther */ .chroma .nx { }
/* NameProperty */ .chroma .py { color: #f5a97f }
/* NameTag */ .chroma .nt { color: #c6a0f6 }
/* NameVariable */ .chroma .nv { color: #f4dbd6 }
/* NameVariableClass */ .chroma .vc { color: #f4dbd6 }
/* NameVariableGlobal */ .chroma .vg { color: #f4dbd6 }
/* NameVariableInstance */ .chroma .vi { color: #f4dbd6 }
/* NameVariableMagic */ .chroma .vm { color: #f4dbd6 }
/* Literal */ .chroma .l { }
/* LiteralDate */ .chroma .ld { }
/* LiteralString */ .chroma .s { color: #a6da95 }
/* LiteralStringAffix */ .chroma .sa { color: #ed8796 }
/* LiteralStringBacktick */ .chroma .sb { color: #a6da95 }
/* LiteralStringChar */ .chroma .sc { color: #a6da95 }
/* LiteralStringDelimiter */ .chroma .dl { color: #8aadf4 }
/* LiteralStringDoc */ .chroma .sd { color: #6e738d }
/* LiteralStringDouble */ .chroma .s2 { color: #a6da95 }
/* LiteralStringEscape */ .chroma .se { color: #8aadf4 }
/* LiteralStringHeredoc */ .chroma .sh { color: #6e738d }
/* LiteralStringInterpol */ .chroma .si { color: #a6da95 }
/* LiteralStringOther */ .chroma .sx { color: #a6da95 }
/* LiteralStringRegex */ .chroma .sr { color: #8bd5ca }
/* LiteralStringSingle */ .chroma .s1 { color: #a6da95 }
/* LiteralStringSymbol */ .chroma .ss { color: #a6da95 }
/* LiteralNumber */ .chroma .m { color: #f5a97f }
/* LiteralNumberBin */ .chroma .mb { color: #f5a97f }
/* LiteralNumberFloat */ .chroma .mf { color: #f5a97f }
/* LiteralNumberHex */ .chroma .mh { color: #f5a97f }
/* LiteralNumberInteger */ .chroma .mi { color: #f5a97f }
/* LiteralNumberIntegerLong */ .chroma .il { color: #f5a97f }
/* LiteralNumberOct */ .chroma .mo { color: #f5a97f }
/* Operator */ .chroma .o { color: #91d7e3; font-weight: bold }
/* OperatorWord */ .chroma .ow { color: #91d7e3; font-weight: bold }
/* Punctuation */ .chroma .p { }
/* Comment */ .chroma .c { color: #6e738d; font-style: italic }
/* CommentHashbang */ .chroma .ch { color: #6e738d; font-style: italic }
/* CommentMultiline */ .chroma .cm { color: #6e738d; font-style: italic }
/* CommentSingle */ .chroma .c1 { color: #6e738d; font-style: italic }
/* CommentSpecial */ .chroma .cs { color: #6e738d; font-style: italic }
/* CommentPreproc */ .chroma .cp { color: #6e738d; font-style: italic }
/* CommentPreprocFile */ .chroma .cpf { color: #6e738d; font-weight: bold; font-style: italic }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { color: #ed8796; background-color: #363a4f }
/* GenericEmph */ .chroma .ge { font-style: italic }
/* GenericError */ .chroma .gr { color: #ed8796 }
/* GenericHeading */ .chroma .gh { color: #f5a97f; font-weight: bold }
/* GenericInserted */ .chroma .gi { color: #a6da95; background-color: #363a4f }
/* GenericOutput */ .chroma .go { }
/* GenericPrompt */ .chroma .gp { }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu { color: #f5a97f; font-weight: bold }
/* GenericTraceback */ .chroma .gt { color: #ed8796 }
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
/* TextWhitespace */ .chroma .w { }
+194
View File
@@ -0,0 +1,194 @@
import * as params from '@params';
const resList = document.getElementById('searchResults');
const sInput = document.getElementById('searchInput');
const searchBox = document.getElementById('searchbox');
let fuse;
let currentElement = null;
let firstResult = null;
let lastResult = null;
const defaultFuseOptions = {
distance: 100,
threshold: 0.4,
ignoreLocation: true,
keys: ['title', 'permalink', 'summary', 'content']
};
const buildFuseOptions = () => {
if (!params.fuseOpts) {
return defaultFuseOptions;
}
return {
isCaseSensitive: params.fuseOpts.iscasesensitive ?? false,
includeScore: params.fuseOpts.includescore ?? false,
includeMatches: params.fuseOpts.includematches ?? false,
minMatchCharLength: params.fuseOpts.minmatchcharlength ?? 1,
shouldSort: params.fuseOpts.shouldsort ?? true,
findAllMatches: params.fuseOpts.findallmatches ?? false,
keys: params.fuseOpts.keys ?? defaultFuseOptions.keys,
location: params.fuseOpts.location ?? 0,
threshold: params.fuseOpts.threshold ?? defaultFuseOptions.threshold,
distance: params.fuseOpts.distance ?? defaultFuseOptions.distance,
ignoreLocation: params.fuseOpts.ignorelocation ?? defaultFuseOptions.ignoreLocation
};
};
const debounce = (fn, delay) => {
let timeout;
return (...args) => {
clearTimeout(timeout);
timeout = window.setTimeout(() => fn(...args), delay);
};
};
const reset = () => {
currentElement = null;
firstResult = null;
lastResult = null;
resList.innerHTML = '';
sInput.value = '';
sInput.focus();
};
const setActiveResult = (element) => {
document.querySelectorAll('.focus').forEach((item) => item.classList.remove('focus'));
if (!element) {
return;
}
element.focus();
element.parentElement?.classList.add('focus');
currentElement = element;
};
const renderResults = (results) => {
if (!Array.isArray(results) || results.length === 0) {
resList.innerHTML = '';
firstResult = lastResult = currentElement = null;
return;
}
const fragment = document.createDocumentFragment();
for (const result of results) {
const li = document.createElement('li');
const titleText = document.createTextNode(result.item.title);
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svg.setAttribute('width', '24');
svg.setAttribute('height', '24');
svg.setAttribute('viewBox', '0 0 24 24');
svg.setAttribute('fill', 'none');
svg.setAttribute('stroke', 'currentColor');
svg.setAttribute('stroke-width', '2');
svg.setAttribute('stroke-linecap', 'round');
svg.setAttribute('stroke-linejoin', 'round');
svg.classList.add('feather', 'feather-chevrons-right');
svg.innerHTML = '<polyline points="13 17 18 12 13 7"></polyline><polyline points="6 17 11 12 6 7"></polyline>';
const link = document.createElement('a');
link.className = 'entry-link';
link.href = result.item.permalink;
link.setAttribute('aria-label', result.item.title);
li.appendChild(titleText);
li.appendChild(svg);
li.appendChild(link);
fragment.appendChild(li);
}
resList.innerHTML = '';
resList.appendChild(fragment);
firstResult = resList.firstElementChild;
lastResult = resList.lastElementChild;
};
const performSearch = () => {
if (!fuse) {
return;
}
const query = sInput.value.trim();
if (!query) {
renderResults([]);
return;
}
const searchOptions = params.fuseOpts?.limit ? { limit: params.fuseOpts.limit } : undefined;
const results = searchOptions ? fuse.search(query, searchOptions) : fuse.search(query);
renderResults(results);
};
const initSearch = async () => {
if (!sInput || !resList) {
return;
}
sInput.disabled = false;
sInput.focus();
try {
const response = await fetch('../index.json');
if (!response.ok) {
throw new Error(`Search index load failed: ${response.status}`);
}
const data = await response.json();
if (data) {
fuse = new Fuse(data, buildFuseOptions());
}
} catch (error) {
console.error(error);
}
};
window.addEventListener('load', initSearch);
sInput?.addEventListener('input', debounce(performSearch, 150));
sInput?.addEventListener('search', () => {
if (!sInput.value) {
reset();
}
});
document.addEventListener('keydown', (event) => {
const { key } = event;
const active = document.activeElement;
const isInSearchBox = searchBox?.contains(active);
if (key === 'Escape') {
reset();
return;
}
if (!firstResult || !isInSearchBox) {
return;
}
if (key === 'ArrowDown') {
event.preventDefault();
if (active === sInput) {
setActiveResult(firstResult.querySelector('.entry-link'));
} else if (active?.parentElement !== lastResult) {
setActiveResult(active?.parentElement?.nextElementSibling?.querySelector('.entry-link'));
}
} else if (key === 'ArrowUp') {
event.preventDefault();
if (active?.parentElement === firstResult) {
setActiveResult(sInput);
} else if (active !== sInput) {
setActiveResult(active?.parentElement?.previousElementSibling?.querySelector('.entry-link'));
}
} else if (key === 'ArrowRight') {
if (active?.matches?.('.entry-link')) {
active.click();
}
}
});
File diff suppressed because one or more lines are too long
+6
View File
@@ -0,0 +1,6 @@
/*
PaperMod v8+
License: MIT https://github.com/adityatelange/hugo-PaperMod/blob/master/LICENSE
Copyright (c) 2020 nanxiaobei and adityatelange
Copyright (c) 2021-2026 adityatelange
*/
+3
View File
@@ -0,0 +1,3 @@
module github.com/adityatelange/hugo-PaperMod
go 1.16
+28
View File
@@ -0,0 +1,28 @@
- id: prev_page
translation: "السابق"
- id: next_page
translation: "التالي"
- id: read_time
translation:
one: "دقيقة واحدة"
two: "دقيقتان"
few: "بضع ثوان"
zero: "الآن"
other: "دقائق {{ .Count }}"
- id: toc
translation: "فهرس المحتوى"
- id: translations
translation: "ترجمات أخرى"
- id: home
translation: "الصفحة الرئيسية"
- id: code_copied
translation: "تم النسخ!"
- id: code_copy
translation: "نسخ الكود"
+39
View File
@@ -0,0 +1,39 @@
- id: prev_page
translation: "Папярэдняя"
- id: next_page
translation: "Наступная"
- id: read_time
translation:
zero: "0 хвілін"
one: "1 хвіліна"
few: "{{ .Count }} хвіліны"
many: "{{ .Count }} хвілін"
other: "{{ .Count }} хвілін"
- id: words
translation:
zero: "няма слоў"
one: "1 слова"
few: "{{ .Count }} слова"
many: "{{ .Count }} слоў"
other: "{{ .Count }} слова"
- id: toc
translation: "Змест"
- id: translations
translation: "Пераклады"
- id: home
translation: "Галоўная"
- id: edit_post
translation: "Рэдагаваць"
- id: code_copy
translation: "капіяваць"
- id: code_copied
translation: "скапіявана!"
+16
View File
@@ -0,0 +1,16 @@
- id: prev_page
translation: "Предишна страница"
- id: next_page
translation: "Следваща страница"
- id: read_time
translation:
one : "1 мин"
other: "{{ .Count }} мин"
- id: toc
translation: "Съдържание"
- id: translations
translation: "Преводи"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "পূর্ববর্তী"
- id: next_page
translation: "পরবর্তী"
- id: read_time
translation:
one : "১ মিনিট"
other: "{{ .Count }} মিনিট"
- id: words
translation:
one : "১ টি শব্দ"
other: "{{ .Count }} টি শব্দ"
- id: toc
translation: "সূচিপত্র"
- id: translations
translation: "অনুবাদসমূহ"
- id: home
translation: "হোম"
- id: edit_post
translation: "সম্পাদনা করুন"
- id: code_copy
translation: "কপি করুন"
- id: code_copied
translation: "কপি হয়েছে!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Pàgina anterior"
- id: next_page
translation: "Pàgina següent"
- id: read_time
translation:
one : "1 minut"
other: "{{ .Count }} minuts"
- id: words
translation:
one : "paraula"
other: "{{ .Count }} paraules"
- id: toc
translation: "Taula de Continguts"
- id: translations
translation: "Traduccions"
- id: home
translation: "Inici"
- id: edit_post
translation: "Editar"
- id: code_copy
translation: "copiar"
- id: code_copied
translation: "copiat!"
+25
View File
@@ -0,0 +1,25 @@
- id: prev_page
translation: "پەڕەی پێشتر"
- id: next_page
translation: "پەڕەی دواتر"
- id: read_time
translation:
one : "1 خولەک"
other: "{{ .Count }} خولەک"
- id: toc
translation: "پێڕست"
- id: translations
translation: "وەرگێڕانەکان"
- id: home
translation: "ماڵەوە"
- id: code_copy
translation: "لەبەری بگرەوە"
- id: code_copied
translation: "لەبەر گیرایەوە!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Předchozí"
- id: next_page
translation: "Další"
- id: read_time
translation:
one : "1 min"
other: "{{ .Count }} min"
- id: words
translation:
one : "slovo"
other: "{{ .Count }} slov"
- id: toc
translation: "Obsah"
- id: translations
translation: "Překlady"
- id: home
translation: "Domů"
- id: edit_post
translation: "Upravit"
- id: code_copy
translation: "kopírovat"
- id: code_copied
translation: "zkopírováno!"
+28
View File
@@ -0,0 +1,28 @@
- id: prev_page
translation: "Forrige Side"
- id: next_page
translation: "Næste Side"
- id: read_time
translation:
one: "1 min"
other: "{{ .Count }} min"
- id: toc
translation: "Indholdsfortegnelse"
- id: translations
translation: "Oversættelser"
- id: home
translation: "Start"
- id: edit_post
translation: "Rediger"
- id: code_copy
translation: "kopier"
- id: code_copied
translation: "kopieret!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Vorherige"
- id: next_page
translation: "Nächste"
- id: read_time
translation:
one: "1 Minute"
other: "{{ .Count }} Minuten"
- id: words
translation:
one : "Wort"
other: "{{ .Count }} Wörter"
- id: toc
translation: "Inhaltsverzeichnis"
- id: translations
translation: "Übersetzungen"
- id: home
translation: "Home"
- id: edit_post
translation: "Bearbeiten"
- id: code_copy
translation: "Kopieren"
- id: code_copied
translation: "Kopiert!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Προηγούμενο"
- id: next_page
translation: "Επόμενο"
- id: read_time
translation:
one: "1 λεπτό"
other: "{{ .Count }} λεπτά"
- id: words
translation:
one: "λέξη"
other: "{{ .Count }} λέξεις"
- id: toc
translation: "Πίνακας Περιεχομένων"
- id: translations
translation: "Μεταφράσεις"
- id: home
translation: "Αρχική"
- id: edit_post
translation: "Επεξεργασία"
- id: code_copy
translation: "αντιγραφή"
- id: code_copied
translation: "αντιγράφηκε!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Prev"
- id: next_page
translation: "Next"
- id: read_time
translation:
one : "1 min"
other: "{{ .Count }} min"
- id: words
translation:
one : "word"
other: "{{ .Count }} words"
- id: toc
translation: "Table of Contents"
- id: translations
translation: "Translations"
- id: home
translation: "Home"
- id: edit_post
translation: "Edit"
- id: code_copy
translation: "copy"
- id: code_copied
translation: "copied!"
+25
View File
@@ -0,0 +1,25 @@
- id: prev_page
translation: "antaŭa paĝo"
- id: next_page
translation: "sekva paĝo"
- id: read_time
translation:
one : "1 min"
other: "{{ .Count }} min"
- id: toc
translation: "Enhavo"
- id: translations
translation: "tradukoj"
- id: home
translation: "ĉefpaĝo"
- id: code_copy
translation: "kopii"
- id: code_copied
translation: "kopiite!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Anterior"
- id: next_page
translation: "Siguiente"
- id: read_time
translation:
one : "1 min"
other: "{{ .Count }} min"
- id: words
translation:
one : "palabra"
other: "{{ .Count }} palabras"
- id: toc
translation: "Tabla de Contenidos"
- id: translations
translation: "Traducciones"
- id: home
translation: "Inicio"
- id: edit_post
translation: "Editar"
- id: code_copy
translation: "copiar"
- id: code_copied
translation: "¡copiado!"
+28
View File
@@ -0,0 +1,28 @@
- id: prev_page
translation: "صفحه قبلی"
- id: next_page
translation: "صفحه بعدی"
- id: read_time
translation:
one: "۱ دقیقه"
other: "{{ .Count }} دقیقه"
- id: toc
translation: "فهرست مطالب"
- id: translations
translation: "ترجمه ها"
- id: home
translation: "خانه"
- id: edit_post
translation: "ویرایش"
- id: code_copy
translation: "کپی"
- id: code_copied
translation: "کپی شد!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Edellinen"
- id: next_page
translation: "Seuraava"
- id: read_time
translation:
one : "1 min"
other: "{{ .Count }} minuuttia"
- id: words
translation:
one : "sana"
other: "{{ .Count }} sanaa"
- id: toc
translation: "Sisällysluettelo"
- id: translations
translation: "Käännökset"
- id: home
translation: "Etusivu"
- id: edit_post
translation: "Muokkaa"
- id: code_copy
translation: "Kopioi"
- id: code_copied
translation: "Kopioitu!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Précédent"
- id: next_page
translation: "Suivant"
- id: read_time
translation:
one : "1 min"
other: "{{ .Count }} min"
- id: words
translation:
one : "mot"
other: "{{ .Count }} mots"
- id: toc
translation: "Table des matières"
- id: translations
translation: "Traductions"
- id: home
translation: "Accueil"
- id: edit_post
translation: "Modifier"
- id: code_copy
translation: "Copier"
- id: code_copied
translation: "Copié !"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "הקודם"
- id: next_page
translation: "הבא"
- id: read_time
translation:
one: "דקה אחת"
other: "{{ .Count }} דקות"
- id: words
translation:
one: "מילה אחת"
other: "{{ .Count }} מילים"
- id: toc
translation: "תוכן עניינים"
- id: translations
translation: "תרגומים"
- id: home
translation: "בית"
- id: edit_post
translation: "ערוך"
- id: code_copy
translation: "העתק"
- id: code_copied
translation: "הועתק!"
+19
View File
@@ -0,0 +1,19 @@
- id: prev_page
translation: "पिछला"
- id: next_page
translation: "अगला"
- id: read_time
translation:
one : "एक मिनट"
other: "{{ .Count }} मिनट"
- id: edit_post
translation: "सुधारें"
- id: toc
translation: "विषय - सूची"
- id: translations
translation: "अनुवाद"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Prethodna stranica"
- id: next_page
translation: "Sljedeća stranica"
- id: read_time
translation:
one : "1 minuta"
other: "{{ .Count }} minute"
- id: words
translation:
one : "riječ"
other: "{{ .Count }} riječi"
- id: toc
translation: "Tablica Sadržaja"
- id: translations
translation: "Prijevodi"
- id: home
translation: "Početna stranica"
- id: edit_post
translation: "Promjeni"
- id: code_copy
translation: "kopiraj"
- id: code_copied
translation: "kopirano!"
+16
View File
@@ -0,0 +1,16 @@
- id: prev_page
translation: "Előző oldal"
- id: next_page
translation: "Következő oldal"
- id: read_time
translation:
one: "1 perc"
other: "{{ .Count }} perc"
- id: toc
translation: "Tartalomjegyzék"
- id: translations
translation: "Fordítások"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Sebelumnya"
- id: next_page
translation: "Selanjutnya"
- id: read_time
translation:
one : "1 menit"
other: "{{ .Count }} menit"
- id: words
translation:
one : "kata"
other: "{{ .Count }} kata"
- id: toc
translation: "Daftar isi"
- id: translations
translation: "Terjemahan"
- id: home
translation: "Beranda"
- id: edit_post
translation: "Sunting"
- id: code_copy
translation: "salin"
- id: code_copied
translation: "disalin!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Precedente"
- id: next_page
translation: "Successivo"
- id: read_time
translation:
one: "1 minuto"
other: "{{ .Count }} minuti"
- id: words
translation:
one : "parola"
other: "{{ .Count }} parole"
- id: toc
translation: "Indice contenuti"
- id: translations
translation: "Traduzioni"
- id: home
translation: "Home"
- id: edit_post
translation: "Modifica"
- id: code_copy
translation: "copia"
- id: code_copied
translation: "copiato!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "前へ"
- id: next_page
translation: "次へ"
- id: read_time
translation:
one : "1 分"
other: "{{ .Count }} 分"
- id: words
translation:
one: "文字"
other: "{{ .Count }} 文字"
- id: toc
translation: "目次"
- id: translations
translation: "言語"
- id: home
translation: "ホーム"
- id: edit_post
translation: "編集"
- id: code_copy
translation: "コピー"
- id: code_copied
translation: "コピーされました!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "이전 페이지"
- id: next_page
translation: "다음 페이지"
- id: read_time
translation:
one : "1 분"
other: "{{ .Count }} 분"
- id: words
translation:
one : "단어"
other: "{{ .Count }} 단어"
- id: toc
translation: "목차"
- id: translations
translation: "번역"
- id: home
translation: "홈"
- id: edit_post
translation: "편집"
- id: code_copy
translation: "복사"
- id: code_copied
translation: "복사 완료!"
+25
View File
@@ -0,0 +1,25 @@
- id: prev_page
translation: "Rûpela Paş"
- id: next_page
translation: "Rûpela Pêş"
- id: read_time
translation:
one : "1 xulek"
other: "{{ .Count }} xulek"
- id: toc
translation: "Pêrist"
- id: translations
translation: "Wergeran"
- id: home
translation: "Xanî"
- id: code_copy
translation: "Jê bigire"
- id: code_copied
translation: "Hat jêgirtin!"
+25
View File
@@ -0,0 +1,25 @@
- id: prev_page
translation: "Ѳмнѳх"
- id: next_page
translation: "Дараах"
- id: read_time
translation:
one : "1 МИН"
other: "{{ .Count }} МИН"
- id: toc
translation: "Агуулга"
- id: translations
translation: "Орчуулга"
- id: home
translation: "Нүүр"
- id: code_copy
translation: "хуулах"
- id: code_copied
translation: "хуулсан!"
+28
View File
@@ -0,0 +1,28 @@
- id: prev_page
translation: "Halaman Sebelumnya"
- id: next_page
translation: "Halaman Seterusnya"
- id: read_time
translation:
one: "1 minit"
other: "{{ .Count }} minit"
- id: toc
translation: "Isi Kandungan"
- id: translations
translation: "Terjemahan"
- id: home
translation: "Home"
- id: edit_post
translation: "Sunting"
- id: code_copy
translation: "Salin"
- id: code_copied
translation: "Disalin!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Vorige"
- id: next_page
translation: "Volgende"
- id: read_time
translation:
one: "1 min"
other: "{{ .Count }} min"
- id: words
translation:
one : "woord"
other: "{{ .Count }} woorden"
- id: toc
translation: "Inhoudsopgave"
- id: translations
translation: "Vertalingen"
- id: home
translation: "Startpagina"
- id: edit_post
translation: "Bewerk"
- id: code_copy
translation: "kopieer"
- id: code_copied
translation: "gekopieerd!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Forrige Side"
- id: next_page
translation: "Neste Side"
- id: read_time
translation:
one: "1 min"
other: "{{ .Count }} min"
- id: words
translation:
one: "ord"
other: "{{ .Count }} ord"
- id: toc
translation: "Innholdsfortegnelse"
- id: translations
translation: "Oversettelser"
- id: home
translation: "Hjem"
- id: edit_post
translation: "Rediger"
- id: code_copy
translation: "Kopier"
- id: code_copied
translation: "Kopiert!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Prec."
- id: next_page
translation: "Seg."
- id: read_time
translation:
one : "1 min"
other: "{{ .Count }} min"
- id: words
translation:
one : "mot"
other: "{{ .Count }} motss"
- id: toc
translation: "Taula de contengut"
- id: translations
translation: "Traduccions"
- id: home
translation: "Acuèlh"
- id: edit_post
translation: "Modificar"
- id: code_copy
translation: "copiar"
- id: code_copied
translation: "copiat !"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "ਪਿਛਲਾ"
- id: next_page
translation: "ਅਗਲਾ"
- id: read_time
translation:
one: "1 ਮਿੰਟ"
other: "{{ .Count }} ਮਿੰਟ"
- id: words
translation:
one: "ਸ਼ਬਦ"
other: "{{ .Count }} ਸ਼ਬਦ"
- id: toc
translation: "ਤਤਕਰਾ"
- id: translations
translation: "ਅਨੁਵਾਦ"
- id: home
translation: "ਘਰ"
- id: edit_post
translation: "ਸੋਧ"
- id: code_copy
translation: "ਕਾਪੀ"
- id: code_copied
translation: "ਕਾਪੀ ਕੀਤੀ ਗਈ!!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Poprzednia"
- id: next_page
translation: "Następna"
- id: read_time
translation:
one: "1 min"
other: "{{ .Count }} min"
- id: words
translation:
one : "słowo"
other: "{{ .Count }} słów"
- id: toc
translation: "Spis treści"
- id: translations
translation: "Tłumaczenia"
- id: home
translation: "Strona Główna"
- id: edit_post
translation: "Edytuj"
- id: code_copy
translation: "Kopiuj"
- id: code_copied
translation: "Skopiowano!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "پِچھلا"
- id: next_page
translation: "اگلا"
- id: read_time
translation:
one: "ایک منٹ"
other: "مِنٹ {{ .Count }}"
- id: words
translation:
one: "لفظ"
other: "لفظ {{ .Count }}"
- id: toc
translation: "تتکرا"
- id: translations
translation: "انوواد"
- id: home
translation: "گھر"
- id: edit_post
translation: "سودھ"
- id: code_copy
translation: "کاپی"
- id: code_copied
translation: "کاپی کیتی گئی!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Página Anterior"
- id: next_page
translation: "Próxima Página"
- id: read_time
translation:
one: "1 minuto"
other: "{{ .Count }} minutos"
- id: words
translation:
one : "palavra"
other: "{{ .Count }} palavras"
- id: toc
translation: "Conteúdo"
- id: translations
translation: "Traduções"
- id: home
translation: "Início"
- id: edit_post
translation: "Editar"
- id: code_copy
translation: "copiar"
- id: code_copied
translation: "copiado!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Înapoi"
- id: next_page
translation: "Înainte"
- id: read_time
translation:
one : "1 minut"
other: "{{ .Count }} minute"
- id: words
translation:
one : "cuvânt"
other: "{{ .Count }} cuvinte"
- id: toc
translation: "Sumar"
- id: translations
translation: "Traduceri"
- id: home
translation: "Acasă"
- id: edit_post
translation: "Editează"
- id: code_copy
translation: "copiază"
- id: code_copied
translation: "copiat!"
+39
View File
@@ -0,0 +1,39 @@
- id: prev_page
translation: "Предыдущая"
- id: next_page
translation: "Следующая"
- id: read_time
translation:
zero: "0 минут"
one: "1 минута"
few: "{{ .Count }} минуты"
many: "{{ .Count }} минут"
other: "{{ .Count }} минута"
- id: words
translation:
zero: "0 слов"
one: "1 слово"
few: "{{ .Count }} слова"
many: "{{ .Count }} слов"
other: "{{ .Count }} слово"
- id: toc
translation: "Оглавление"
- id: translations
translation: "Переводы"
- id: home
translation: "Главная"
- id: edit_post
translation: "Редактировать"
- id: code_copy
translation: "копировать"
- id: code_copied
translation: "скопировано!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Predch"
- id: next_page
translation: "Ďaľší"
- id: read_time
translation:
one : "1 min"
other: "{{ .Count }} min"
- id: words
translation:
one : "slovo"
other: "{{ .Count }} slov"
- id: toc
translation: "Obsah"
- id: translations
translation: "Preklady"
- id: home
translation: "Domov"
- id: edit_post
translation: "Upraviť"
- id: code_copy
translation: "kopírovať"
- id: code_copied
translation: "skopírované!"
+28
View File
@@ -0,0 +1,28 @@
- id: prev_page
translation: "Förra Sidan"
- id: next_page
translation: "Nästa Sida"
- id: read_time
translation:
one: "1 min"
other: "{{ .Count }} min"
- id: toc
translation: "Innehållsförteckning"
- id: translations
translation: "Översättningar"
- id: home
translation: "Hem"
- id: edit_post
translation: "Redigera"
- id: code_copy
translation: "kopiera"
- id: code_copied
translation: "kopierad!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Uliopita"
- id: next_page
translation: "Ujao"
- id: read_time
translation:
one : "dakika 1"
other: "dakika {{ .Count }}"
- id: words
translation:
one : "neno"
other: "maneno {{ .Count }}"
- id: toc
translation: "Jedwali la Yaliyomo"
- id: translations
translation: "Tafsiri"
- id: home
translation: "Mwanzo"
- id: edit_post
translation: "Hariri"
- id: code_copy
translation: "nakili"
- id: code_copied
translation: "nakiliwa!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "ก่อนหน้า"
- id: next_page
translation: "ถัดไป"
- id: read_time
translation:
one : "1 นาที"
other: "{{ .Count }} นาที"
- id: words
translation:
one : "คำ"
other: "{{ .Count }} คำ"
- id: toc
translation: "สารบัญ"
- id: translations
translation: "การแปล"
- id: home
translation: "หน้าหลัก"
- id: edit_post
translation: "แก้ไข"
- id: code_copy
translation: "คัดลอก"
- id: code_copied
translation: "คัดลอกแล้ว!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Önceki"
- id: next_page
translation: "Sonraki"
- id: read_time
translation:
one : "1 dk"
other: "{{ .Count }} dk"
- id: words
translation:
one : "sözcük"
other: "{{ .Count }} sözcük"
- id: toc
translation: "İçindekiler"
- id: translations
translation: "Çeviriler"
- id: home
translation: "Ana Sayfa"
- id: edit_post
translation: "Düzenle"
- id: code_copy
translation: "Kopyala"
- id: code_copied
translation: "Kopyalandı!"
+25
View File
@@ -0,0 +1,25 @@
- id: prev_page
translation: "Попередня"
- id: next_page
translation: "Наступна"
- id: read_time
translation:
one : "1 хвилина"
other: "{{ .Count }} хвилин"
- id: toc
translation: "Зміст"
- id: translations
translation: "Переклади"
- id: home
translation: "Головна"
- id: code_copy
translation: "копіювати"
- id: code_copied
translation: "скопійовано!"
+20
View File
@@ -0,0 +1,20 @@
- id: prev_page
translation: "Oldingi sahifa"
- id: next_page
translation: "Keyingi sahifa"
- id: read_time
translation:
one : "Bir daqiqa"
other: "{{ .Count }} daqiqa"
- id: toc
translation: "Mundarija"
- id: translations
translation: "Tarjimalar"
- id: home
translation: "Bosh sahifa"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "Trang trước"
- id: next_page
translation: "Trang tiếp theo"
- id: read_time
translation:
one: "1 phút"
other: "{{ .Count }} phút"
- id: words
translation:
one: "từ"
other: "{{ .Count }} từ"
- id: toc
translation: "Mục lục"
- id: translations
translation: "Bản dịch"
- id: home
translation: "Trang chủ"
- id: edit_post
translation: "Chỉnh sửa"
- id: code_copy
translation: "Sao chép"
- id: code_copied
translation: "Đã sao chép!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "上一頁"
- id: next_page
translation: "下一頁"
- id: read_time
translation:
one : "1 分鐘"
other: "{{ .Count }} 分鐘"
- id: words
translation:
one: "字"
other: "{{ .Count }} 字"
- id: toc
translation: "目錄"
- id: translations
translation: "語言"
- id: home
translation: "首頁"
- id: edit_post
translation: "編輯"
- id: code_copy
translation: "複製"
- id: code_copied
translation: "已複製!"
+33
View File
@@ -0,0 +1,33 @@
- id: prev_page
translation: "上一页"
- id: next_page
translation: "下一页"
- id: read_time
translation:
one : "1 分钟"
other: "{{ .Count }} 分钟"
- id: words
translation:
one: "字"
other: "{{ .Count }} 字"
- id: toc
translation: "目录"
- id: translations
translation: "语言"
- id: home
translation: "主页"
- id: edit_post
translation: "编辑"
- id: code_copy
translation: "复制"
- id: code_copied
translation: "已复制!"
Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

+3
View File
@@ -0,0 +1,3 @@
{{- define "main" }}
<div class="not-found">404</div>
{{- end }}{{/* end main */ -}}

Some files were not shown because too many files have changed in this diff Show More