Compare commits
5 Commits
51abefb9b4
...
6b68960e8a
Author | SHA1 | Date | |
---|---|---|---|
6b68960e8a | |||
cf2d874f08 | |||
903e6b06f1 | |||
cebdf81ad9 | |||
f202c5b3eb |
7
.aspell.en.pws
Normal file
7
.aspell.en.pws
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
personal_ws-1.1 en 0
|
||||||
|
lastmod
|
||||||
|
showTableOfContents
|
||||||
|
Zig
|
||||||
|
Nim
|
||||||
|
tils
|
||||||
|
Spotify
|
19
.direnv/bin/nix-direnv-reload
Executable file
19
.direnv/bin/nix-direnv-reload
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
if [[ ! -d "/home/nate/source/fosscat-site" ]]; then
|
||||||
|
echo "Cannot find source directory; Did you move it?"
|
||||||
|
echo "(Looking for "/home/nate/source/fosscat-site")"
|
||||||
|
echo 'Cannot force reload with this script - use "direnv reload" manually and then try again'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# rebuild the cache forcefully
|
||||||
|
_nix_direnv_force_reload=1 direnv exec "/home/nate/source/fosscat-site" true
|
||||||
|
|
||||||
|
# Update the mtime for .envrc.
|
||||||
|
# This will cause direnv to reload again - but without re-building.
|
||||||
|
touch "/home/nate/source/fosscat-site/.envrc"
|
||||||
|
|
||||||
|
# Also update the timestamp of whatever profile_rc we have.
|
||||||
|
# This makes sure that we know we are up to date.
|
||||||
|
touch -r "/home/nate/source/fosscat-site/.envrc" "/home/nate/source/fosscat-site/.direnv"/*.rc
|
68
.githooks/pre-commit
Executable file
68
.githooks/pre-commit
Executable file
@ -0,0 +1,68 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "Running pre-commit checks..."
|
||||||
|
|
||||||
|
# Get list of staged markdown files
|
||||||
|
STAGED_MD_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.md$' || true)
|
||||||
|
|
||||||
|
if [ -z "$STAGED_MD_FILES" ]; then
|
||||||
|
echo "No markdown files to check."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Checking markdown files..."
|
||||||
|
|
||||||
|
# Check markdown formatting with markdownlint-cli
|
||||||
|
if command -v markdownlint &> /dev/null; then
|
||||||
|
markdownlint $STAGED_MD_FILES || {
|
||||||
|
echo "❌ Markdown linting failed. Fix issues or use 'git commit --no-verify' to skip."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
else
|
||||||
|
echo "⚠️ markdownlint not found, skipping markdown linting"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Spell check
|
||||||
|
if command -v aspell &> /dev/null; then
|
||||||
|
# Check if aspell can find dictionaries
|
||||||
|
if ! aspell dump dicts 2>/dev/null | grep -q "en"; then
|
||||||
|
echo "⚠️ aspell found but no English dictionaries available"
|
||||||
|
echo " Make sure ASPELL_CONF is set correctly in your direnv"
|
||||||
|
echo " Skipping spell check"
|
||||||
|
else
|
||||||
|
echo "Running spell check..."
|
||||||
|
MISSPELLED=0
|
||||||
|
for file in $STAGED_MD_FILES; do
|
||||||
|
# Get list of misspelled words
|
||||||
|
ERRORS=$(cat "$file" | aspell list --mode=markdown --lang=en --personal=./.aspell.en.pws 2>/dev/null | sort -u)
|
||||||
|
if [ ! -z "$ERRORS" ]; then
|
||||||
|
echo "⚠️ Possible misspellings in $file:"
|
||||||
|
# For each misspelled word, show context
|
||||||
|
while IFS= read -r word; do
|
||||||
|
if [ ! -z "$word" ]; then
|
||||||
|
SUGGESTION=$(echo "$word" | aspell pipe --mode=markdown --lang=en --personal=./.aspell.en.pws 2>/dev/null | grep -E "^&" | cut -d: -f2 | cut -d, -f1 | sed 's/^ //')
|
||||||
|
echo " '$word' → suggestion: $SUGGESTION"
|
||||||
|
# Use grep to find lines containing the word (case-insensitive) with line numbers
|
||||||
|
grep -n -i -w --color=always "$word" "$file" | head -3 | while IFS= read -r line; do
|
||||||
|
echo " $line"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
done <<< "$ERRORS"
|
||||||
|
MISSPELLED=1
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [ $MISSPELLED -eq 1 ]; then
|
||||||
|
echo "Review spelling errors above. Add correct terms to .aspell.personal"
|
||||||
|
echo "Use 'git commit --no-verify' to skip if needed."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "⚠️ aspell not found, skipping spell check"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ Pre-commit checks passed!"
|
||||||
|
exit 0
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -11,3 +11,6 @@ hugo.linux
|
|||||||
|
|
||||||
# Temporary lock file while building
|
# Temporary lock file while building
|
||||||
/.hugo_build.lock
|
/.hugo_build.lock
|
||||||
|
|
||||||
|
# direnv stuff
|
||||||
|
.direnv/**
|
||||||
|
280
.markdownlint.jsonc
Normal file
280
.markdownlint.jsonc
Normal file
@ -0,0 +1,280 @@
|
|||||||
|
// Example markdownlint configuration with all properties set to their default value
|
||||||
|
{
|
||||||
|
// Default state for all rules
|
||||||
|
"default": true,
|
||||||
|
// Path to configuration file to extend
|
||||||
|
"extends": null,
|
||||||
|
// MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md001.md
|
||||||
|
"MD001": true,
|
||||||
|
// MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md003.md
|
||||||
|
"MD003": {
|
||||||
|
// Heading style
|
||||||
|
"style": "consistent"
|
||||||
|
},
|
||||||
|
// MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md004.md
|
||||||
|
"MD004": {
|
||||||
|
// List style
|
||||||
|
"style": "consistent"
|
||||||
|
},
|
||||||
|
// MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md005.md
|
||||||
|
"MD005": true,
|
||||||
|
// MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md007.md
|
||||||
|
"MD007": {
|
||||||
|
// Spaces for indent
|
||||||
|
"indent": 2,
|
||||||
|
// Whether to indent the first level of the list
|
||||||
|
"start_indented": false,
|
||||||
|
// Spaces for first level indent (when start_indented is set)
|
||||||
|
"start_indent": 2
|
||||||
|
},
|
||||||
|
// MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md009.md
|
||||||
|
"MD009": {
|
||||||
|
// Spaces for line break
|
||||||
|
"br_spaces": 2,
|
||||||
|
// Allow spaces for empty lines in list items
|
||||||
|
"list_item_empty_lines": false,
|
||||||
|
// Include unnecessary breaks
|
||||||
|
"strict": false
|
||||||
|
},
|
||||||
|
// MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md010.md
|
||||||
|
"MD010": {
|
||||||
|
// Include code blocks
|
||||||
|
"code_blocks": true,
|
||||||
|
// Fenced code languages to ignore
|
||||||
|
"ignore_code_languages": [],
|
||||||
|
// Number of spaces for each hard tab
|
||||||
|
"spaces_per_tab": 1
|
||||||
|
},
|
||||||
|
// MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md011.md
|
||||||
|
"MD011": true,
|
||||||
|
// MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md012.md
|
||||||
|
"MD012": {
|
||||||
|
// Consecutive blank lines
|
||||||
|
"maximum": 1
|
||||||
|
},
|
||||||
|
// MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md013.md
|
||||||
|
"MD013": {
|
||||||
|
// Number of characters
|
||||||
|
"line_length": 120,
|
||||||
|
// Number of characters for headings
|
||||||
|
"heading_line_length": 120,
|
||||||
|
// Number of characters for code blocks
|
||||||
|
"code_block_line_length": 120,
|
||||||
|
// Include code blocks
|
||||||
|
"code_blocks": true,
|
||||||
|
// Include tables
|
||||||
|
"tables": true,
|
||||||
|
// Include headings
|
||||||
|
"headings": true,
|
||||||
|
// Strict length checking
|
||||||
|
"strict": false,
|
||||||
|
// Stern length checking
|
||||||
|
"stern": false
|
||||||
|
},
|
||||||
|
// MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md014.md
|
||||||
|
"MD014": true,
|
||||||
|
// MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md018.md
|
||||||
|
"MD018": true,
|
||||||
|
// MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md019.md
|
||||||
|
"MD019": true,
|
||||||
|
// MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md020.md
|
||||||
|
"MD020": true,
|
||||||
|
// MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md021.md
|
||||||
|
"MD021": true,
|
||||||
|
// MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md022.md
|
||||||
|
"MD022": {
|
||||||
|
// Blank lines above heading
|
||||||
|
"lines_above": 1,
|
||||||
|
// Blank lines below heading
|
||||||
|
"lines_below": 1
|
||||||
|
},
|
||||||
|
// MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md023.md
|
||||||
|
"MD023": true,
|
||||||
|
// MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md024.md
|
||||||
|
"MD024": {
|
||||||
|
// Only check sibling headings
|
||||||
|
"siblings_only": false
|
||||||
|
},
|
||||||
|
// MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md025.md
|
||||||
|
"MD025": false,
|
||||||
|
// {
|
||||||
|
// RegExp for matching title in front matter
|
||||||
|
// "front_matter_title": "^\\s*title\\s*[:=]",
|
||||||
|
// Heading level
|
||||||
|
// "level": 1
|
||||||
|
// },
|
||||||
|
// MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md026.md
|
||||||
|
"MD026": {
|
||||||
|
// Punctuation characters
|
||||||
|
"punctuation": ".,;:!。,;:!"
|
||||||
|
},
|
||||||
|
// MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md027.md
|
||||||
|
"MD027": {
|
||||||
|
// Include list items
|
||||||
|
"list_items": true
|
||||||
|
},
|
||||||
|
// MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md028.md
|
||||||
|
"MD028": true,
|
||||||
|
// MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md029.md
|
||||||
|
"MD029": {
|
||||||
|
// List style
|
||||||
|
"style": "one_or_ordered"
|
||||||
|
},
|
||||||
|
// MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md030.md
|
||||||
|
"MD030": {
|
||||||
|
// Spaces for single-line unordered list items
|
||||||
|
"ul_single": 1,
|
||||||
|
// Spaces for single-line ordered list items
|
||||||
|
"ol_single": 1,
|
||||||
|
// Spaces for multi-line unordered list items
|
||||||
|
"ul_multi": 1,
|
||||||
|
// Spaces for multi-line ordered list items
|
||||||
|
"ol_multi": 1
|
||||||
|
},
|
||||||
|
// MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md031.md
|
||||||
|
"MD031": {
|
||||||
|
// Include list items
|
||||||
|
"list_items": true
|
||||||
|
},
|
||||||
|
// MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md032.md
|
||||||
|
"MD032": true,
|
||||||
|
// MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md033.md
|
||||||
|
"MD033": {
|
||||||
|
// Allowed elements
|
||||||
|
"allowed_elements": []
|
||||||
|
},
|
||||||
|
// MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md034.md
|
||||||
|
"MD034": true,
|
||||||
|
// MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md035.md
|
||||||
|
"MD035": {
|
||||||
|
// Horizontal rule style
|
||||||
|
"style": "consistent"
|
||||||
|
},
|
||||||
|
// MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md036.md
|
||||||
|
"MD036": {
|
||||||
|
// Punctuation characters
|
||||||
|
"punctuation": ".,;:!?。,;:!?"
|
||||||
|
},
|
||||||
|
// MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md037.md
|
||||||
|
"MD037": true,
|
||||||
|
// MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md038.md
|
||||||
|
"MD038": true,
|
||||||
|
// MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md039.md
|
||||||
|
"MD039": true,
|
||||||
|
// MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md040.md
|
||||||
|
"MD040": {
|
||||||
|
// List of languages
|
||||||
|
"allowed_languages": [],
|
||||||
|
// Require language only
|
||||||
|
"language_only": false
|
||||||
|
},
|
||||||
|
// MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md041.md
|
||||||
|
"MD041": {
|
||||||
|
// Allow content before first heading
|
||||||
|
"allow_preamble": false,
|
||||||
|
// RegExp for matching title in front matter
|
||||||
|
"front_matter_title": "^\\s*title\\s*[:=]",
|
||||||
|
// Heading level
|
||||||
|
"level": 1
|
||||||
|
},
|
||||||
|
// MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md042.md
|
||||||
|
"MD042": true,
|
||||||
|
// MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md043.md
|
||||||
|
"MD043": false,
|
||||||
|
// {
|
||||||
|
// List of headings
|
||||||
|
// "headings": [],
|
||||||
|
// Match case of headings
|
||||||
|
// "match_case": false
|
||||||
|
// },
|
||||||
|
// MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md044.md
|
||||||
|
"MD044": {
|
||||||
|
// List of proper names
|
||||||
|
"names": [],
|
||||||
|
// Include code blocks
|
||||||
|
"code_blocks": true,
|
||||||
|
// Include HTML elements
|
||||||
|
"html_elements": true
|
||||||
|
},
|
||||||
|
// MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md045.md
|
||||||
|
"MD045": true,
|
||||||
|
// MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md046.md
|
||||||
|
"MD046": {
|
||||||
|
// Block style
|
||||||
|
"style": "consistent"
|
||||||
|
},
|
||||||
|
// MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md047.md
|
||||||
|
"MD047": true,
|
||||||
|
// MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md048.md
|
||||||
|
"MD048": {
|
||||||
|
// Code fence style
|
||||||
|
"style": "consistent"
|
||||||
|
},
|
||||||
|
// MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md049.md
|
||||||
|
"MD049": {
|
||||||
|
// Emphasis style
|
||||||
|
"style": "consistent"
|
||||||
|
},
|
||||||
|
// MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md050.md
|
||||||
|
"MD050": {
|
||||||
|
// Strong style
|
||||||
|
"style": "consistent"
|
||||||
|
},
|
||||||
|
// MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md051.md
|
||||||
|
"MD051": {
|
||||||
|
// Ignore case of fragments
|
||||||
|
"ignore_case": false,
|
||||||
|
// Pattern for ignoring additional fragments
|
||||||
|
"ignored_pattern": ""
|
||||||
|
},
|
||||||
|
// MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md052.md
|
||||||
|
"MD052": {
|
||||||
|
// Ignored link labels
|
||||||
|
"ignored_labels": [
|
||||||
|
"x"
|
||||||
|
],
|
||||||
|
// Include shortcut syntax
|
||||||
|
"shortcut_syntax": false
|
||||||
|
},
|
||||||
|
// MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md053.md
|
||||||
|
"MD053": {
|
||||||
|
// Ignored definitions
|
||||||
|
"ignored_definitions": [
|
||||||
|
"//"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md054.md
|
||||||
|
"MD054": {
|
||||||
|
// Allow autolinks
|
||||||
|
"autolink": true,
|
||||||
|
// Allow inline links and images
|
||||||
|
"inline": true,
|
||||||
|
// Allow full reference links and images
|
||||||
|
"full": true,
|
||||||
|
// Allow collapsed reference links and images
|
||||||
|
"collapsed": true,
|
||||||
|
// Allow shortcut reference links and images
|
||||||
|
"shortcut": true,
|
||||||
|
// Allow URLs as inline links
|
||||||
|
"url_inline": true
|
||||||
|
},
|
||||||
|
// MD055/table-pipe-style : Table pipe style : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md055.md
|
||||||
|
"MD055": {
|
||||||
|
// Table pipe style
|
||||||
|
"style": "consistent"
|
||||||
|
},
|
||||||
|
// MD056/table-column-count : Table column count : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md056.md
|
||||||
|
"MD056": true,
|
||||||
|
// MD058/blanks-around-tables : Tables should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md058.md
|
||||||
|
"MD058": true,
|
||||||
|
// MD059/descriptive-link-text : Link text should be descriptive : https://github.com/DavidAnson/markdownlint/blob/v0.38.0/doc/md059.md
|
||||||
|
"MD059": {
|
||||||
|
// Prohibited link texts
|
||||||
|
"prohibited_texts": [
|
||||||
|
"click here",
|
||||||
|
"here",
|
||||||
|
"link",
|
||||||
|
"more"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
37
content/tils/people-are-actually-right.md
Normal file
37
content/tils/people-are-actually-right.md
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
date: 2025-09-30T23:28:53-06:00
|
||||||
|
description: "There's a reason things become mainstream"
|
||||||
|
lastmod: 2025-09-30T23:28:53-06:00
|
||||||
|
showTableOfContents: true
|
||||||
|
type: "tils"
|
||||||
|
title: "TIL: People Are Actually Right"
|
||||||
|
image: ""
|
||||||
|
image_credit: ""
|
||||||
|
image_alt: ""
|
||||||
|
tags: ["philosophy", "lifestyle"]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Context
|
||||||
|
|
||||||
|
As a teenager I spent a lot of my energy trying to be different. I don't know what informed my rebellious streak, I just
|
||||||
|
know that once artists got over a couple thousands active listeners on Spotify, I started to lose interest in them.
|
||||||
|
|
||||||
|
I'm barely old enough to think straight, and it dawned on me in a conversation with my wife, and I told her, "you know,
|
||||||
|
things are probably actually bigger in Texas".
|
||||||
|
|
||||||
|
## Reflection
|
||||||
|
|
||||||
|
I'm glad I still have a pretty strong rebel streak in me that propels me to be curious, to try the more esoteric things
|
||||||
|
that others ignore. I'm a better developer for having learned other niche programming languages like
|
||||||
|
|
||||||
|
- Zig
|
||||||
|
- Clojure
|
||||||
|
- Ocaml
|
||||||
|
- Gleam
|
||||||
|
- Nim
|
||||||
|
|
||||||
|
(I know, surprisingly no rust, I feel like when it came on the scene it caught on too quickly...)
|
||||||
|
|
||||||
|
But, I feel like I don't often give the public consensus opinion its fair shake.
|
||||||
|
|
||||||
|
So here's to being a normie sometimes, its actually great to be like everyone else.
|
61
flake.lock
generated
Normal file
61
flake.lock
generated
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731533236,
|
||||||
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1759036355,
|
||||||
|
"narHash": "sha256-0m27AKv6ka+q270dw48KflE0LwQYrO7Fm4/2//KCVWg=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "e9f00bd893984bc8ce46c895c3bf7cac95331127",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
39
flake.nix
Normal file
39
flake.nix
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
description = "Hugo static site development environment";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, flake-utils }:
|
||||||
|
flake-utils.lib.eachDefaultSystem (system:
|
||||||
|
let
|
||||||
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
devShells.default = pkgs.mkShell {
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
hugo
|
||||||
|
marksman # Markdown LSP server
|
||||||
|
nodePackages.prettier # Format markdown and other files
|
||||||
|
markdownlint-cli
|
||||||
|
aspell
|
||||||
|
aspellDicts.en
|
||||||
|
];
|
||||||
|
|
||||||
|
shellHook = ''
|
||||||
|
export ASPELL_CONF="dict-dir ${pkgs.aspellDicts.en}/lib/aspell"
|
||||||
|
|
||||||
|
# Auto-install git hooks if not already installed
|
||||||
|
if [ ! -L .git/hooks/pre-commit ]; then
|
||||||
|
bash scripts/install_hooks.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Hugo development environment loaded"
|
||||||
|
echo "Hugo version: $(hugo version)"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
29
scripts/install_hooks.sh
Normal file
29
scripts/install_hooks.sh
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
HOOKS_DIR=".githooks"
|
||||||
|
GIT_HOOKS_DIR=".git/hooks"
|
||||||
|
|
||||||
|
echo "Installing git hooks..."
|
||||||
|
|
||||||
|
# Create .git/hooks directory if it doesn't exist
|
||||||
|
mkdir -p "$GIT_HOOKS_DIR"
|
||||||
|
|
||||||
|
# Symlink all hooks from .githooks to .git/hooks
|
||||||
|
for hook in "$HOOKS_DIR"/*; do
|
||||||
|
hook_name=$(basename "$hook")
|
||||||
|
target="$GIT_HOOKS_DIR/$hook_name"
|
||||||
|
|
||||||
|
# Remove existing hook or symlink
|
||||||
|
[ -e "$target" ] && rm "$target"
|
||||||
|
|
||||||
|
# Create symlink
|
||||||
|
ln -s "../../$HOOKS_DIR/$hook_name" "$target"
|
||||||
|
chmod +x "$hook"
|
||||||
|
|
||||||
|
echo "✅ Installed $hook_name"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Git hooks installed successfully!"
|
Loading…
Reference in New Issue
Block a user