Initial commit: Hugo site with Terminal theme
Scripts: setup.sh, build.sh, serve.sh (Docker-based) Content: about, config, software, posts sections Custom: CSS overrides, HTML sitemap layout, extended_head partial Theme: hugo-theme-terminal via Hugo modules (go.mod)
This commit is contained in:
commit
b2727be8ce
28 changed files with 697 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
site/public/
|
||||
site/resources/
|
||||
site/.hugo_build.lock
|
||||
29
scripts/build.sh
Executable file
29
scripts/build.sh
Executable file
|
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Build and serve the Hugo site locally using Docker.
|
||||
# Usage: ./scripts/build.sh
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
SITE_DIR="${PROJECT_ROOT}/site"
|
||||
HUGO_IMAGE="ghcr.io/gohugoio/hugo:latest"
|
||||
PORT="${1:-1313}"
|
||||
|
||||
if [[ ! -d "${SITE_DIR}" ]]; then
|
||||
echo "[build] Site directory not found: ${SITE_DIR}"
|
||||
echo "[build] Run ./scripts/setup.sh first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[build] Serving site at http://localhost:${PORT}/"
|
||||
echo "[build] Press Ctrl+C to stop."
|
||||
|
||||
docker run --rm \
|
||||
-v "${SITE_DIR}:/src" \
|
||||
-w /src \
|
||||
-p "${PORT}:1313" \
|
||||
"${HUGO_IMAGE}" server \
|
||||
--bind 0.0.0.0 \
|
||||
--baseURL "http://localhost:${PORT}/" \
|
||||
--appendPort=false
|
||||
29
scripts/serve.sh
Executable file
29
scripts/serve.sh
Executable file
|
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Serve the Hugo site locally using Docker.
|
||||
# Usage: ./scripts/serve.sh
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
SITE_DIR="${PROJECT_ROOT}/site"
|
||||
HUGO_IMAGE="ghcr.io/gohugoio/hugo:latest"
|
||||
PORT="${1:-1313}"
|
||||
|
||||
if [[ ! -d "${SITE_DIR}" ]]; then
|
||||
echo "[serve] Site directory not found: ${SITE_DIR}"
|
||||
echo "[serve] Run ./scripts/setup.sh first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[serve] Serving site at http://localhost:${PORT}/"
|
||||
echo "[serve] Press Ctrl+C to stop."
|
||||
|
||||
docker run --rm \
|
||||
-v "${SITE_DIR}:/src" \
|
||||
-w /src \
|
||||
-p "${PORT}:1313" \
|
||||
"${HUGO_IMAGE}" server \
|
||||
--bind 0.0.0.0 \
|
||||
--baseURL "http://localhost:${PORT}/" \
|
||||
--appendPort=false
|
||||
104
scripts/setup.sh
Executable file
104
scripts/setup.sh
Executable file
|
|
@ -0,0 +1,104 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Initialize a Hugo site with the Terminal theme using Docker.
|
||||
# Usage: ./scripts/setup.sh
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
SITE_DIR="${PROJECT_ROOT}/site"
|
||||
HUGO_IMAGE="ghcr.io/gohugoio/hugo:latest"
|
||||
|
||||
hugo() {
|
||||
docker run --rm \
|
||||
-v "${SITE_DIR}:/src" \
|
||||
-w /src \
|
||||
"${HUGO_IMAGE}" "$@"
|
||||
}
|
||||
|
||||
if [[ -d "${SITE_DIR}" ]]; then
|
||||
echo "[setup] Site directory already exists: ${SITE_DIR}"
|
||||
echo "[setup] Delete it first if you want a fresh start."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[setup] Creating new Hugo site in ${SITE_DIR}"
|
||||
mkdir -p "${SITE_DIR}"
|
||||
docker run --rm \
|
||||
-v "${PROJECT_ROOT}:/src" \
|
||||
-w /src \
|
||||
"${HUGO_IMAGE}" new site site
|
||||
|
||||
echo "[setup] Initializing Hugo module"
|
||||
hugo mod init gohugo-jm
|
||||
|
||||
echo "[setup] Writing hugo.toml"
|
||||
cat > "${SITE_DIR}/hugo.toml" << 'EOF'
|
||||
baseURL = "http://localhost:1313/"
|
||||
languageCode = "en-us"
|
||||
title = "JM's Site"
|
||||
pagination.pagerSize = 5
|
||||
|
||||
[markup.highlight]
|
||||
noClasses = false
|
||||
|
||||
[params]
|
||||
contentTypeName = "posts"
|
||||
showMenuItems = 2
|
||||
fullWidthTheme = false
|
||||
centerTheme = true
|
||||
|
||||
[languages]
|
||||
[languages.en]
|
||||
languageName = "English"
|
||||
title = "JM's Site"
|
||||
|
||||
[languages.en.params]
|
||||
subtitle = "hello, it's JM"
|
||||
owner = "JM"
|
||||
keywords = ""
|
||||
copyright = ""
|
||||
menuMore = "Show more"
|
||||
readMore = "Read more"
|
||||
readOtherPosts = "Read other posts"
|
||||
newerPosts = "Newer posts"
|
||||
olderPosts = "Older posts"
|
||||
missingContentMessage = "Page not found..."
|
||||
missingBackButtonLabel = "Back to home page"
|
||||
minuteReadingTime = "min read"
|
||||
words = "words"
|
||||
|
||||
[languages.en.params.logo]
|
||||
logoText = "JM's Terminal"
|
||||
logoHomeLink = "/"
|
||||
|
||||
[languages.en.menu]
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "about"
|
||||
name = "About"
|
||||
url = "/about"
|
||||
|
||||
[module]
|
||||
[[module.imports]]
|
||||
path = 'github.com/panr/hugo-theme-terminal/v4'
|
||||
EOF
|
||||
|
||||
echo "[setup] Fetching theme module"
|
||||
hugo mod get github.com/panr/hugo-theme-terminal/v4
|
||||
|
||||
echo "[setup] Creating first post"
|
||||
mkdir -p "${SITE_DIR}/content/posts"
|
||||
cat > "${SITE_DIR}/content/posts/hello.md" << 'EOF'
|
||||
---
|
||||
title: "Hello, it's JM"
|
||||
date: 2026-04-03
|
||||
draft: false
|
||||
---
|
||||
|
||||
Hello, it's JM. Welcome to my site.
|
||||
|
||||
This is my first post, built with [Hugo](https://gohugo.io/) and the
|
||||
[Terminal](https://github.com/panr/hugo-theme-terminal) theme.
|
||||
EOF
|
||||
|
||||
echo "[setup] Done. Run ./scripts/build.sh to serve the site."
|
||||
6
site/archetypes/default.md
Normal file
6
site/archetypes/default.md
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
+++
|
||||
date = '{{ .Date }}'
|
||||
draft = true
|
||||
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||
tags = []
|
||||
+++
|
||||
10
site/assets/css/custom.css
Normal file
10
site/assets/css/custom.css
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
/* Highlight the first two menu items (About, Sitemap) */
|
||||
.navigation-menu__inner li:nth-child(-n+2) a,
|
||||
.menu__dropdown li:nth-child(-n+2) a {
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
border-bottom: 2px solid currentColor;
|
||||
padding-bottom: 2px;
|
||||
font-weight: bold;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
4
site/content/about/_index.md
Normal file
4
site/content/about/_index.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: "About"
|
||||
description: "Who I am, what I use, and what I'm up to."
|
||||
---
|
||||
13
site/content/about/now.md
Normal file
13
site/content/about/now.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
title: "What I'm Doing Now"
|
||||
date: 2026-04-03
|
||||
draft: false
|
||||
tags: ['personal', 'workflow']
|
||||
---
|
||||
|
||||
A [/now page](https://nownownow.com/about). Update this periodically with
|
||||
what you're currently focused on.
|
||||
|
||||
- Building a Hugo site
|
||||
- Experimenting with local LLMs via Ollama
|
||||
- Indexing documentation with ChromaDB
|
||||
20
site/content/about/tools.md
Normal file
20
site/content/about/tools.md
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
title: "Tools I Use"
|
||||
date: 2026-04-02
|
||||
draft: false
|
||||
tags: ['tools', 'linux', 'workflow']
|
||||
---
|
||||
|
||||
A list of the hardware, software, and services I rely on daily.
|
||||
|
||||
## Editor
|
||||
|
||||
VS Code with GitHub Copilot.
|
||||
|
||||
## Terminal
|
||||
|
||||
Bash on Linux.
|
||||
|
||||
## Languages
|
||||
|
||||
Python (via uv), Go, shell scripts.
|
||||
9
site/content/about/whoami.md
Normal file
9
site/content/about/whoami.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: "Who is JM"
|
||||
date: 2026-04-01
|
||||
draft: false
|
||||
tags: ['intro', 'personal']
|
||||
---
|
||||
|
||||
This is a short bio page. Replace this with a few paragraphs about yourself —
|
||||
background, interests, what you do for work, whatever feels right.
|
||||
4
site/content/config/_index.md
Normal file
4
site/content/config/_index.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: "Config"
|
||||
description: "Site configuration, conventions, and how things are set up."
|
||||
---
|
||||
42
site/content/config/git-dates.md
Normal file
42
site/content/config/git-dates.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
title: "Automatic Dating with Git"
|
||||
date: 2026-04-02
|
||||
draft: false
|
||||
tags: ['hugo', 'git', 'workflow']
|
||||
---
|
||||
|
||||
Hugo can pull dates from Git history so you never have to update `lastmod`
|
||||
by hand.
|
||||
|
||||
## Enable Git info
|
||||
|
||||
```toml
|
||||
# hugo.toml
|
||||
enableGitInfo = true
|
||||
```
|
||||
|
||||
## Configure front matter date resolution
|
||||
|
||||
```toml
|
||||
[frontmatter]
|
||||
date = [':filename', ':default']
|
||||
publishDate = [':filename', ':default']
|
||||
lastmod = [':git', ':fileModTime']
|
||||
```
|
||||
|
||||
## How it works
|
||||
|
||||
- `.Date` — tries the filename first (`2026-04-03-post.md`), then the
|
||||
`date` field in front matter.
|
||||
- `.Lastmod` — uses the Git author date of the last commit that touched
|
||||
the file, falling back to filesystem mtime.
|
||||
- `.PublishDate` — same resolution chain as `.Date`.
|
||||
|
||||
## Filename date formats
|
||||
|
||||
Hugo recognizes these patterns:
|
||||
|
||||
```
|
||||
2026-04-03-my-post.md → date: 2026-04-03, slug: my-post
|
||||
2026-04-03T14-30-00-post.md → date: 2026-04-03T14:30:00
|
||||
```
|
||||
120
site/content/config/site-organization.md
Normal file
120
site/content/config/site-organization.md
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
---
|
||||
title: "Organizing This Site"
|
||||
date: 2026-04-03
|
||||
draft: false
|
||||
tags: ['hugo', 'workflow', 'meta']
|
||||
---
|
||||
|
||||
A reference for how this Hugo site is organized and what configuration
|
||||
options are available.
|
||||
|
||||
## Sections
|
||||
|
||||
Sections are created automatically from the directory tree under `content/`.
|
||||
Any directory with an `_index.md` file becomes a section with its own list
|
||||
page.
|
||||
|
||||
```
|
||||
content/
|
||||
├── _index.md ← home page
|
||||
├── about/
|
||||
│ ├── _index.md ← /about/ list page
|
||||
│ ├── whoami.md
|
||||
│ └── now.md
|
||||
├── software/
|
||||
│ ├── _index.md ← /software/ list page
|
||||
│ ├── ollama.md
|
||||
│ └── hugo-setup/ ← page bundle (leaf)
|
||||
│ ├── index.md
|
||||
│ └── architecture.svg
|
||||
└── config/
|
||||
├── _index.md ← /config/ list page
|
||||
└── this-file.md
|
||||
```
|
||||
|
||||
No config changes are needed — Hugo derives sections from the filesystem.
|
||||
|
||||
## Taxonomies
|
||||
|
||||
Tags and categories are enabled by default. Assign them in front matter:
|
||||
|
||||
```yaml
|
||||
tags: ['hugo', 'docker', 'tools']
|
||||
```
|
||||
|
||||
Hugo auto-generates pages at `/tags/`, `/tags/hugo/`, etc.
|
||||
|
||||
To define custom taxonomies beyond tags/categories:
|
||||
|
||||
```toml
|
||||
# hugo.toml
|
||||
[taxonomies]
|
||||
tag = "tags"
|
||||
category = "categories"
|
||||
series = "series" # custom
|
||||
```
|
||||
|
||||
## Page bundles
|
||||
|
||||
A **leaf bundle** is a directory with `index.md` (not `_index.md`). All
|
||||
sibling files become page resources — images, data files, etc. — that
|
||||
travel with the article.
|
||||
|
||||
A **branch bundle** uses `_index.md` and represents a section (it can have
|
||||
children).
|
||||
|
||||
| File | Type | Has children? |
|
||||
|---|---|---|
|
||||
| `index.md` | leaf bundle | No |
|
||||
| `_index.md` | branch bundle | Yes |
|
||||
|
||||
## Automatic dating
|
||||
|
||||
Three mechanisms, configured in `hugo.toml`:
|
||||
|
||||
```toml
|
||||
enableGitInfo = true
|
||||
|
||||
[frontmatter]
|
||||
date = [':filename', ':default']
|
||||
lastmod = [':git', ':fileModTime']
|
||||
```
|
||||
|
||||
- **`:filename`** — extracts date from `2026-04-03-my-post.md`.
|
||||
- **`:default`** — falls back to the `date` field in front matter.
|
||||
- **`:git`** — uses the Git author date of the last commit.
|
||||
- **`:fileModTime`** — uses the file's mtime on disk.
|
||||
|
||||
## Automatic tagging
|
||||
|
||||
Hugo does **not** auto-tag content. Tags must be set manually in front
|
||||
matter. The closest workaround is `cascade` in a section `_index.md`,
|
||||
which pushes shared parameters to descendants — but it only works for
|
||||
custom `.Params` fields, not real taxonomy terms.
|
||||
|
||||
For true auto-tagging, use an external script or LLM to populate front
|
||||
matter before building.
|
||||
|
||||
## Menu
|
||||
|
||||
The Terminal theme reads `showMenuItems` from config. To add sections to
|
||||
the nav menu:
|
||||
|
||||
```toml
|
||||
[languages.en.menu]
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "about"
|
||||
name = "About"
|
||||
url = "/about"
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "software"
|
||||
name = "Software"
|
||||
url = "/software"
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "config"
|
||||
name = "Config"
|
||||
url = "/config"
|
||||
```
|
||||
|
||||
Set `showMenuItems = 3` (or more) to display them all without a "Show
|
||||
more" toggle.
|
||||
48
site/content/config/taxonomies.md
Normal file
48
site/content/config/taxonomies.md
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
---
|
||||
title: "Using Tags and Categories"
|
||||
date: 2026-04-01
|
||||
draft: false
|
||||
tags: ['hugo', 'meta']
|
||||
---
|
||||
|
||||
Hugo ships with two default taxonomies: **tags** and **categories**.
|
||||
|
||||
## Assigning terms
|
||||
|
||||
Add them to any article's front matter:
|
||||
|
||||
```yaml
|
||||
---
|
||||
title: "My Article"
|
||||
tags: ['python', 'tools']
|
||||
categories: ['tutorials']
|
||||
---
|
||||
```
|
||||
|
||||
## What Hugo generates
|
||||
|
||||
For each taxonomy, Hugo creates:
|
||||
|
||||
- A **taxonomy list** page: `/tags/` — shows all terms.
|
||||
- A **term** page per value: `/tags/python/` — lists all articles with
|
||||
that tag.
|
||||
|
||||
## Custom taxonomies
|
||||
|
||||
Define additional taxonomies in `hugo.toml`:
|
||||
|
||||
```toml
|
||||
[taxonomies]
|
||||
tag = "tags"
|
||||
category = "categories"
|
||||
series = "series"
|
||||
```
|
||||
|
||||
Then use `series: ['my-series']` in front matter. Hugo generates `/series/`
|
||||
and `/series/my-series/` automatically.
|
||||
|
||||
## Tag overlap
|
||||
|
||||
Tags are meant to cross-cut sections. An article in `software/` and one in
|
||||
`config/` can share the tag `hugo` — the term page at `/tags/hugo/` will
|
||||
list both.
|
||||
10
site/content/posts/hello.md
Normal file
10
site/content/posts/hello.md
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
title: "Hello, it's JM"
|
||||
date: 2026-04-03
|
||||
draft: false
|
||||
---
|
||||
|
||||
Hello, it's JM. Welcome to my site.
|
||||
|
||||
This is my first post, built with [Hugo](https://gohugo.io/) and the
|
||||
[Terminal](https://github.com/panr/hugo-theme-terminal) theme.
|
||||
7
site/content/sitemap.md
Normal file
7
site/content/sitemap.md
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
title: "Sitemap"
|
||||
date: 2026-04-03
|
||||
draft: false
|
||||
layout: "sitemap"
|
||||
tags: []
|
||||
---
|
||||
4
site/content/software/_index.md
Normal file
4
site/content/software/_index.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: "Software"
|
||||
description: "Tools, setups, and projects I work with."
|
||||
---
|
||||
26
site/content/software/chromadb.md
Normal file
26
site/content/software/chromadb.md
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
title: "Vector Search with ChromaDB"
|
||||
date: 2026-04-02
|
||||
draft: false
|
||||
tags: ['chromadb', 'python', 'llm', 'tools']
|
||||
---
|
||||
|
||||
ChromaDB is an embedding database for building search and retrieval systems.
|
||||
|
||||
## How I use it
|
||||
|
||||
I chunk documentation (VyOS, Hugo) into paragraphs, embed them with
|
||||
`nomic-embed-text` via Ollama, and store the vectors in ChromaDB for
|
||||
semantic search.
|
||||
|
||||
## Stack
|
||||
|
||||
```
|
||||
Documents → Chunker → Ollama embeddings → ChromaDB → Query API
|
||||
```
|
||||
|
||||
## Key concepts
|
||||
|
||||
- **Collection**: a named group of embeddings (like a table).
|
||||
- **Document**: the raw text stored alongside the vector.
|
||||
- **Metadata**: key-value pairs for filtering results.
|
||||
12
site/content/software/hugo-setup/architecture.svg
Normal file
12
site/content/software/hugo-setup/architecture.svg
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 200">
|
||||
<rect x="10" y="10" width="120" height="60" rx="8" fill="#2d2d2d" stroke="#7c6f64" stroke-width="2"/>
|
||||
<text x="70" y="45" text-anchor="middle" fill="#ebdbb2" font-size="14">content/</text>
|
||||
<rect x="150" y="10" width="120" height="60" rx="8" fill="#2d2d2d" stroke="#7c6f64" stroke-width="2"/>
|
||||
<text x="210" y="45" text-anchor="middle" fill="#ebdbb2" font-size="14">Hugo build</text>
|
||||
<rect x="290" y="10" width="100" height="60" rx="8" fill="#2d2d2d" stroke="#7c6f64" stroke-width="2"/>
|
||||
<text x="340" y="45" text-anchor="middle" fill="#ebdbb2" font-size="14">public/</text>
|
||||
<line x1="130" y1="40" x2="150" y2="40" stroke="#ebdbb2" stroke-width="2" marker-end="url(#arrow)"/>
|
||||
<line x1="270" y1="40" x2="290" y2="40" stroke="#ebdbb2" stroke-width="2" marker-end="url(#arrow)"/>
|
||||
<defs><marker id="arrow" markerWidth="10" markerHeight="7" refX="10" refY="3.5" orient="auto">
|
||||
<polygon points="0 0, 10 3.5, 0 7" fill="#ebdbb2"/></marker></defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1 KiB |
46
site/content/software/hugo-setup/index.md
Normal file
46
site/content/software/hugo-setup/index.md
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
---
|
||||
title: "Setting Up Hugo with Docker"
|
||||
date: 2026-04-01
|
||||
draft: false
|
||||
tags: ['hugo', 'docker', 'tools']
|
||||
---
|
||||
|
||||
This article is a **page bundle** (leaf bundle). Notice it lives at
|
||||
`software/hugo-setup/index.md` — not `hugo-setup.md`.
|
||||
|
||||
## What makes this a page bundle?
|
||||
|
||||
The directory structure looks like this:
|
||||
|
||||
```
|
||||
content/software/hugo-setup/
|
||||
├── index.md ← this file (the page content)
|
||||
├── architecture.svg ← co-located resource (image)
|
||||
└── notes.txt ← co-located resource (data)
|
||||
```
|
||||
|
||||
Everything in this folder **belongs to this page**. Hugo treats the sibling
|
||||
files as *page resources* accessible via `.Resources` in templates.
|
||||
|
||||
## Why use bundles?
|
||||
|
||||
- **Co-location**: images and files live next to the article that uses them,
|
||||
not in a global `static/` folder.
|
||||
- **Resource processing**: Hugo can resize, crop, and fingerprint bundled
|
||||
images at build time.
|
||||
- **Portability**: move or delete the folder and everything travels together.
|
||||
|
||||
## Using a bundled image
|
||||
|
||||
In a template you'd access it with:
|
||||
|
||||
```go-html-template
|
||||
{{ $img := .Resources.GetMatch "architecture.svg" }}
|
||||
{{ with $img }}
|
||||
<img src="{{ .RelPermalink }}" alt="Architecture diagram">
|
||||
{{ end }}
|
||||
```
|
||||
|
||||
Or reference it directly in Markdown:
|
||||
|
||||

|
||||
3
site/content/software/hugo-setup/notes.txt
Normal file
3
site/content/software/hugo-setup/notes.txt
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
This is a co-located resource file.
|
||||
Hugo treats it as a page resource of the hugo-setup article.
|
||||
It won't appear as its own page — it's just data attached to the bundle.
|
||||
26
site/content/software/ollama.md
Normal file
26
site/content/software/ollama.md
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
title: "Running Local LLMs with Ollama"
|
||||
date: 2026-04-02
|
||||
draft: false
|
||||
tags: ['ollama', 'llm', 'tools', 'linux']
|
||||
---
|
||||
|
||||
Ollama lets you run large language models locally with a single command.
|
||||
|
||||
## Quick start
|
||||
|
||||
```bash
|
||||
ollama run llama3
|
||||
```
|
||||
|
||||
## Why local?
|
||||
|
||||
- No API keys or rate limits.
|
||||
- Data stays on your machine.
|
||||
- Works offline.
|
||||
|
||||
## Models I use
|
||||
|
||||
- `llama3` — general purpose
|
||||
- `codellama` — code generation
|
||||
- `nomic-embed-text` — embeddings for vector search
|
||||
28
site/content/software/python-uv.md
Normal file
28
site/content/software/python-uv.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
title: "Python Packaging with uv"
|
||||
date: 2026-04-03
|
||||
draft: false
|
||||
tags: ['python', 'tools', 'workflow']
|
||||
---
|
||||
|
||||
`uv` is a fast Python package manager and project tool written in Rust.
|
||||
|
||||
## Why uv over pip/poetry/pipenv?
|
||||
|
||||
- 10–100x faster dependency resolution.
|
||||
- Single tool: replaces pip, pip-tools, virtualenv, and pyenv.
|
||||
- Lockfile support via `uv.lock`.
|
||||
|
||||
## Common commands
|
||||
|
||||
```bash
|
||||
uv init myproject # scaffold a new project
|
||||
uv add requests # add a dependency
|
||||
uv sync # install from lockfile
|
||||
uv run pytest # run inside the managed venv
|
||||
```
|
||||
|
||||
## Project convention
|
||||
|
||||
All Python projects in this workspace use `uv` exclusively — no raw
|
||||
`pip install` or `python -m pytest`.
|
||||
5
site/go.mod
Normal file
5
site/go.mod
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
module gohugo-jm
|
||||
|
||||
go 1.26.1
|
||||
|
||||
require github.com/panr/hugo-theme-terminal/v4 v4.2.3 // indirect
|
||||
2
site/go.sum
Normal file
2
site/go.sum
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
github.com/panr/hugo-theme-terminal/v4 v4.2.3 h1:BU4x0qPDTZao6kzT4hWrOwGVaYgo5GesQZr+ATMsQoM=
|
||||
github.com/panr/hugo-theme-terminal/v4 v4.2.3/go.mod h1:W0sFodm5ipL5gjRqOFjg4zD+euoQ8hCtyDDtqSpihxM=
|
||||
68
site/hugo.toml
Normal file
68
site/hugo.toml
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
baseURL = "http://localhost:1313/"
|
||||
languageCode = "en-us"
|
||||
title = "JM's Site"
|
||||
pagination.pagerSize = 5
|
||||
enableGitInfo = true
|
||||
|
||||
[frontmatter]
|
||||
date = [':filename', ':default']
|
||||
lastmod = [':git', ':fileModTime']
|
||||
|
||||
[markup.highlight]
|
||||
noClasses = false
|
||||
|
||||
[params]
|
||||
contentTypeName = "posts"
|
||||
showMenuItems = 5
|
||||
fullWidthTheme = false
|
||||
centerTheme = true
|
||||
|
||||
[languages]
|
||||
[languages.en]
|
||||
languageName = "English"
|
||||
title = "JM's Site"
|
||||
|
||||
[languages.en.params]
|
||||
subtitle = "hello, it's JM"
|
||||
owner = "JM"
|
||||
keywords = ""
|
||||
copyright = ""
|
||||
menuMore = "Show more"
|
||||
readMore = "Read more"
|
||||
readOtherPosts = "Read other posts"
|
||||
newerPosts = "Newer posts"
|
||||
olderPosts = "Older posts"
|
||||
missingContentMessage = "Page not found..."
|
||||
missingBackButtonLabel = "Back to home page"
|
||||
minuteReadingTime = "min read"
|
||||
words = "words"
|
||||
|
||||
[languages.en.params.logo]
|
||||
logoText = "JM's Terminal"
|
||||
logoHomeLink = "/"
|
||||
|
||||
[languages.en.menu]
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "about"
|
||||
name = "About"
|
||||
url = "/about"
|
||||
weight = 1
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "sitemap"
|
||||
name = "Sitemap"
|
||||
url = "/sitemap"
|
||||
weight = 2
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "software"
|
||||
name = "Software"
|
||||
url = "/software"
|
||||
weight = 10
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "config"
|
||||
name = "Config"
|
||||
url = "/config"
|
||||
weight = 11
|
||||
|
||||
[module]
|
||||
[[module.imports]]
|
||||
path = 'github.com/panr/hugo-theme-terminal/v4'
|
||||
17
site/layouts/_default/sitemap.html
Normal file
17
site/layouts/_default/sitemap.html
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{{ define "main" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
|
||||
{{ range .Site.Sections }}
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
|
||||
<ul>
|
||||
{{ range .Pages }}
|
||||
<li>
|
||||
<a href="{{ .RelPermalink }}">{{ .Title }}</a>
|
||||
{{ with .Date }}<small> — {{ .Format "Jan 2, 2006" }}</small>{{ end }}
|
||||
{{ with .Params.tags }}<small> [{{ delimit . ", " }}]</small>{{ end }}
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ end }}
|
||||
|
||||
{{ end }}
|
||||
2
site/layouts/partials/extended_head.html
Normal file
2
site/layouts/partials/extended_head.html
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
{{ $custom := resources.Get "css/custom.css" | minify | fingerprint }}
|
||||
<link rel="stylesheet" href="{{ $custom.RelPermalink }}" integrity="{{ $custom.Data.Integrity }}">
|
||||
Loading…
Reference in a new issue