Compare commits

..

2 Commits

Author SHA1 Message Date
dfb1bf4ee5 Addittions 2025-10-03 22:22:17 -06:00
723fda29f2 Added doggy post :3 2025-10-03 22:21:49 -06:00
7 changed files with 277 additions and 1 deletions

View File

@ -9,3 +9,20 @@ Spotify
normie
syscall
syscalls
aspell
catppuccin
cli
config
formatter
Foss
fosscat
Gitea
Gokarna
LSP
markdownlint
md
Pre
RSS
submodule
TILs
webp

View File

@ -50,6 +50,10 @@ if command -v aspell &> /dev/null; then
done
fi
done <<< "$ERRORS"
echo -e "\nMisspelled words:\n"
while IFS= read -r word; do
echo "$word"
done <<< "$ERRORS"
MISSPELLED=1
echo ""
fi

109
CLAUDE.md Normal file
View File

@ -0,0 +1,109 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Architecture Overview
This is a Hugo static site for the Foss Cat blog (fosscat.com), using the Gokarna theme. The site
includes blog posts, TILs (Today I Learned), and project pages.
Key architectural components:
- **Hugo framework**: Static site generator with content in Markdown
- **Gokarna theme**: Git submodule theme providing the site's design
- **Content structure**: Posts in `content/posts/`, TILs in `content/tils/`, projects in `content/projects/`
- **Static assets**: Images and other assets in `static/` directory
- **Custom layouts**: Overrides in `layouts/` for TILs and other content types
- **Configuration**: Main site config in `config.toml`
## Development Commands
### Environment Setup
```bash
# Initialize git submodules (theme)
git submodule init
git submodule update
# Enter Nix development environment (if using Nix)
nix develop
```
### Building and Development
```bash
# Start development server with live reload
hugo server
# Build static site for production
hugo
# Build with drafts included
hugo --buildDrafts
```
### Linting and Quality Checks
```bash
# Lint markdown files
markdownlint content/**/*.md
# Format markdown files
prettier --write content/**/*.md
# Spell check (requires aspell with English dictionary)
aspell check --mode=markdown --lang=en --personal=./.aspell.en.pws [filename.md]
```
### Git Hooks
- Pre-commit hooks automatically installed via `scripts/install_hooks.sh`
- Hooks run markdown linting and spell checking on staged `.md` files
- Personal dictionary in `.aspell.en.pws` for spell checking
## Content Management
### Creating New Content
```bash
# Create new blog post
hugo new posts/post-title.md
# Create new TIL
hugo new tils/til-title.md
# Create new project
hugo new projects/project-name.md
```
### TILs (Today I Learned)
- Custom archetype in `archetypes/tils.md`
- Custom layouts in `layouts/tils/` for list and single views
- Accessible via `/tils/` URL path
## Site Configuration
- **Base URL**: <https://fosscat.com/>
- **Theme**: Gokarna (git submodule)
- **Syntax highlighting**: catppuccin-frappe style
- **Content language**: English (en-us)
- **Social icons**: Configured for Gitea, Twitch, RSS
- **Navigation menu**: Defined in `config.toml`
## Development Environment
This repository uses Nix flakes for reproducible development environment including:
- Hugo static site generator
- Marksman (Markdown LSP)
- Prettier (code formatter)
- markdownlint-cli
- aspell with English dictionaries
## Quality Assurance
- Markdown linting enforced via `.markdownlint.jsonc` configuration
- Spell checking with personal dictionary support
- Pre-commit hooks prevent commits with linting/spelling errors
- Use `git commit --no-verify` to bypass hooks if needed

View File

@ -0,0 +1,27 @@
---
date: 2025-10-03T16:19:07-06:00
description: ""
lastmod: 2025-10-03T16:19:07-06:00
showTableOfContents: true
type: "tils"
title: "TIL: We Created Dogs and Dogs Created Us"
image: "images/otto-1.webp"
image_alt: "Image of my sweet pup Otto, Irish Setter 7 months"
tags: ["life", "dogs", "history"]
---
# Context
I started listening to [_Sapiens: A Brief History of Human
kind_](https://en.wikipedia.org/wiki/Sapiens:_A_Brief_History_of_Humankind) and was struck at the significance of dogs
in human history. I [realized](https://fosscat.com/tils/people-are-actually-right/) that dogs really are man's best
friend, and only animal that has evolved alongside us since the hunter gatherer period. Its incredible!
# Reflection
Otto (pictured above) is my first dog. I feel like having a dog isn't for everybody, but having humans is for every dog.
I've found such satisfaction in my relationship with him. We really mutually benefit each other. Dogs are so malleable,
they really pick up on so much of what you do and how you want them to behave. There is some learning required from
you as the human, and moments to stop and think critically about what it is you want from them. But, once you train
something only a handful of times, dogs _learn it_, they _understand_ us. What an incredible relationship us monkeys
created with these wolves.

View File

@ -1,6 +1,125 @@
{{ define "main" }}
{{- partial "post.html" . -}}
<style>
.post-image {
display: flex;
justify-content: center;
margin: 1.5rem 0;
}
.post-image img {
height: auto;
border-radius: 8px;
border: 1.5px solid var(--light-secondary-color);
box-shadow: rgba(0, 0, 0, 0.1) 0px 2px 8px;
object-fit: cover;
}
/* Mobile - small images fit better */
@media (max-width: 480px) {
.post-image img {
width: 100%;
max-width: 300px;
}
}
/* Tablet - medium size */
@media (min-width: 481px) and (max-width: 768px) {
.post-image img {
width: 80%;
max-width: 400px;
}
}
/* Desktop - larger but not overwhelming */
@media (min-width: 769px) {
.post-image img {
width: 60%;
max-width: 500px;
}
}
html[data-theme="dark"] .post-image img {
border-color: var(--dark-secondary-color);
box-shadow: rgba(0, 0, 0, 0.3) 0px 2px 12px;
}
</style>
<div class="post container">
<div class="post-header-section">
<h1>{{ .Title | markdownify }}</h1>
{{/* Determine whether to display the date & description based on tags */}}
{{ $displayDate := true }}
{{ $displayDescription := true }}
{{ $postTags := or .Params.Tags slice }}
{{ $hiddenTags := or .Site.Params.Hidden.Tags slice }}
{{ $tagsHidePostDate := or .Site.Params.Hidden.TagsPostDate slice }}
{{ $tagsHidePostDescription := or .Site.Params.Hidden.TagsPostDescription slice }}
{{ if gt ($tagsHidePostDate | intersect $postTags | len) 0 }}
{{ $displayDate = false }}
{{ end }}
{{ if gt ($tagsHidePostDescription | intersect $postTags | len) 0 }}
{{ $displayDescription = false }}
{{ end }}
{{ if $displayDescription }}
<small role="doc-subtitle">{{ .Description }}</small>
{{ end }}
{{ if $displayDate }}
<p class="post-date">{{ dateFormat (or .Site.Params.dateFormat "January 2, 2006") .Date}}
{{ if lt .Date .Lastmod }} | Updated {{ dateFormat (or .Site.Params.dateFormat "January 2, 2006") .Lastmod }}{{ end }}
</p>
{{ end }}
<ul class="post-tags">
{{ range $tag := $postTags }}
{{ if not (in $hiddenTags $tag) }}
<li class="post-tag"><a href="{{ "tags/" | absLangURL }}{{ . | urlize }}">{{ . }}</a></li>
{{ end }}
{{ end }}
</ul>
</div>
{{/* Display image if present in front matter */}}
{{ if .Params.image }}
<div class="post-image">
<img src="{{ .Params.image | absURL }}" alt="{{ .Params.image_alt | default .Title }}">
</div>
{{ end }}
<div class="post-content">
{{ .Content }}
{{ if .Site.Config.Services.Disqus.Shortname }}
<div class="post-comments">
{{ template "_internal/disqus.html" . }}
</div>
{{ end }}
</div>
<div class="prev-next">
{{ if eq .Site.Params.TogglePreviousAndNextButtons "true" }}
{{ if or .PrevInSection .NextInSection }}
{{ partial "prev-next.html" . }}
{{ end }}
{{ end }}
</div>
<!-- Back to top button -->
{{ if .Site.Params.ShowBackToTopButton }}
{{ partial "back-to-top.html" . }}
{{ end }}
{{ if .Site.Params.CustomCommentHTML }}
<div id="comments">
{{ .Site.Params.CustomCommentHTML | safeHTML }}
</div>
{{ end }}
</div>
{{- partial "toc.html" . -}}
{{ end }}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
static/images/otto-1.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB