Making much progress.
This commit is contained in:
parent
e8041c74df
commit
47f16f0e30
21
README.md
21
README.md
|
@ -25,33 +25,50 @@ Zola itself. Eventually, though, I'm going to add whatever scraps I have lying
|
|||
around for some, perhaps most, of the following topics, since I've worked in all
|
||||
of them:
|
||||
|
||||
- .NET compilation chain
|
||||
- Aloq
|
||||
- Apache Configuration
|
||||
- Assembly
|
||||
- Audio & Music production
|
||||
- Bash
|
||||
- Bash Customization
|
||||
- C
|
||||
- C++
|
||||
- CMake
|
||||
- Clojure
|
||||
- Cobol
|
||||
- Django
|
||||
- ESlint
|
||||
- Emacs
|
||||
- F#
|
||||
- Git & Pre-Commit
|
||||
- Go
|
||||
- Graphic design
|
||||
- HAML
|
||||
- HTML & CSS
|
||||
- Handbrake Cookbook
|
||||
- Haskell
|
||||
- ID3V2
|
||||
- Imagemagick
|
||||
- Javascript
|
||||
- Kanren
|
||||
- Kubernetes
|
||||
- Linux Administration
|
||||
- Linux Software Development
|
||||
- Lisp
|
||||
- Lit-HTML
|
||||
- Machine learning
|
||||
- Makefiles
|
||||
- Markdown
|
||||
- Mate / Gnome customization
|
||||
- Nginx Configuration
|
||||
- Org-mode
|
||||
- Org mode
|
||||
- PHP
|
||||
- PNM Suite
|
||||
- Perl
|
||||
- Podman
|
||||
- Prettier
|
||||
- Prolog
|
||||
- Python
|
||||
- Rails
|
||||
- React
|
||||
|
@ -61,8 +78,10 @@ of them:
|
|||
- SQL
|
||||
- Sass
|
||||
- Scheme
|
||||
- Snobol
|
||||
- Typescript
|
||||
- Vite
|
||||
- Wasm
|
||||
- Web Components
|
||||
- X86 Assembly
|
||||
- XCB / X11 Systems Programming
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
* Organization
|
||||
** TODO Figure out weight/taxonomy scheme for home page.
|
||||
** TODO Implement multiple cards
|
||||
** TODO Sidebar - what navigation should be in sidebar?
|
||||
** TODO Menu - Megamenu on other pages, but always link back to home
|
||||
*** Check out Asana's nifty morph in their mobile transition; looks like pure CSS
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
+++
|
||||
title = "Git Notes"
|
||||
description = "Basic documentation of Git"
|
||||
date = 2022-04-27T18:00:00+00:00
|
||||
updated = 2022-04-27T18:00:00+00:00
|
||||
template = "docs/section.html"
|
||||
sort_by = "weight"
|
||||
weight = 6
|
||||
draft = false
|
||||
[taxonomies]
|
||||
documentation=["Reference"]
|
||||
categories=["Git", "Version Control", "VCS"]
|
||||
+++
|
||||
|
||||
[Git](https://git-scm.com/) is the most widely used version control system (or
|
||||
source configuration management) tool. Pretty much everything I do uses Git.
|
||||
This is where I keep my notes on how to do things.
|
||||
|
||||
## Starting a project
|
||||
|
||||
Git is project and folder-centered, and to start using git go to the root folder
|
||||
of a project you want to place under source control and initialize it:
|
||||
|
||||
```shell
|
||||
$ mkdir a-new-project
|
||||
$ git init
|
||||
```
|
||||
|
||||
This creates a new folder, `.git`, where Git will store your commit history and
|
||||
some configuration details.
|
||||
|
||||
## Putting files into git
|
||||
|
||||
To put files under source control, you must add them. To update the entire
|
||||
folder, switch to the root of the project and add _all_ of it:
|
||||
|
||||
```shell
|
||||
$ git add .
|
||||
$ git commit
|
||||
```
|
||||
|
||||
An editor will pop-up, asking you what this commit is about. It's generally
|
||||
polite, especially if you're working in a team, to explain your commit in some
|
||||
detail-- and to generally keep the commit small, in order to ensure that you
|
||||
don't have to explain too much!
|
||||
|
||||
If your commit message could be a single line, you can add it directly from the
|
||||
command line:
|
||||
|
||||
```shell
|
||||
$ git add .
|
||||
$ git commit -m "Updated the widget to widgetize."
|
||||
```
|
||||
|
||||
... and you can even combine both commands, but be careful: this command will
|
||||
not add any files that are new. It will only commit existing files that have
|
||||
been modified, and will delete any files that you have deleted, from the
|
||||
repository. (Deleted files still exist in the history and can always be
|
||||
recovered.)
|
||||
|
||||
```shell
|
||||
$ git commit -am "Updated the widget to widgetize."
|
||||
```
|
||||
|
||||
## Git Configuration
|
||||
|
||||
You can have a global Git configuration file, `$HOME/\.gitconfig`, in which you
|
||||
keep your personal information and command aliases, which is one of three ways
|
||||
you can add your own commands to Git.
|
||||
|
||||
```shell
|
||||
[user]
|
||||
name = Elf M. Sternberg
|
||||
email = someguy@example.com
|
||||
|
||||
[alias]
|
||||
unstage = reset -q HEAD --
|
||||
nevermind = !git reset --hard HEAD && git clean -d -f
|
||||
wip = for-each-ref --sort='authordate:iso8601' --format='%(color:green)%(authordate:relative)%09%(color:white)%(refname:short)' refs/heads
|
||||
stem = "!f() { git checkout -b $1 master; }; f"
|
||||
start = !git init && git commit --allow-empty -m \"Initial commit\"
|
||||
```
|
||||
|
||||
I'll explain each of these eventually, but for now, just know that if you want
|
||||
your commits to be attributed to the right person, you must have the `[user]`
|
||||
block, and
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
+++
|
||||
title = "Zola Cookbook"
|
||||
description = "Snippets I've developed that I want to keep"
|
||||
date = 2022-04-27T18:00:00+00:00
|
||||
updated = 2022-04-27T18:00:00+00:00
|
||||
template = "docs/section.html"
|
||||
sort_by = "weight"
|
||||
weight = 5
|
||||
draft = false
|
||||
[taxonomies]
|
||||
documentation=["Reference"]
|
||||
categories=["Web Development", "Static Site Generation", "Zola"]
|
||||
+++
|
||||
|
||||
[Zola](../zola) is the static site generator I use for most of my websites that
|
||||
don't require much dynamic functionality.
|
||||
|
||||
## Generating Nested Lists from Data
|
||||
|
||||
Example data:
|
||||
|
||||
```html
|
||||
{
|
||||
"definitions": [
|
||||
{ "dt": "undefined", "dd": " the thing is undefined." },
|
||||
{ "dt": "defined", "dd": " the thing is defined.", definitions: [
|
||||
{ "dt": "truthy", "dd": "the defined thing is truthy" },
|
||||
{ "dt": "falsy", "dd": "the defined thing is falsy" }
|
||||
]}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Tera macro to render a nested list:
|
||||
|
||||
```
|
||||
{% macro definition_body(source) %}
|
||||
<dl>
|
||||
{% for entry in source %}
|
||||
<dt><kbd>{{ entry.dt | safe }}</kbd></dt>
|
||||
<dd>
|
||||
{{ entry.dd | safe }}
|
||||
{% if entry.definitions %}
|
||||
{{ self::definition_body(source=entry.definitions) }}
|
||||
{% endif %}
|
||||
</dd>
|
||||
{% endfor %}
|
||||
</dl>
|
||||
{% endmacro %}
|
||||
```
|
||||
|
||||
Zola shortcode to import the macro template into Markdown and start the render:
|
||||
|
||||
```
|
||||
{%- import 'macros/definition_body.html' as renderer -%}
|
||||
<div>
|
||||
{% set content = load_data(path=source) %}
|
||||
{{ renderer::definition_body(source=content.definitions) }}
|
||||
</div>
|
||||
```
|
||||
|
||||
Invocation in Markdown file, providing the data source:
|
||||
|
||||
```
|
||||
{{ definition_list(source="@/docs/zola/definitions.json") }}
|
||||
```
|
||||
|
|
@ -107,6 +107,8 @@ Conditional statements are managed with `if/is ... else ... endif`
|
|||
|
||||
The list of `is` tests that are shipped with Zola are:
|
||||
|
||||
{{ definition_list(source="@/docs/zola/predicates.yaml") }}
|
||||
|
||||
- `defined`: the given variable is defined.
|
||||
- `undefined`: the given variable is undefined.
|
||||
- `odd`: the given variable is an odd number.
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"definitions": [
|
||||
{ "dt": "defined", "dd": " the given variable is defined." },
|
||||
{ "dt": "undefined", "dd": " the given variable is undefined." },
|
||||
{ "dt": "odd", "dd": " the given variable is an odd number." },
|
||||
{ "dt": "even", "dd": " the given variable is an even number." },
|
||||
{ "dt": "string", "dd": " the given variable is a string." },
|
||||
{ "dt": "number", "dd": " the given variable is a number." },
|
||||
{ "dt": "divisibleby", "dd": " the given expression is divisible by the arg given." },
|
||||
{
|
||||
"dt": "iterable",
|
||||
"dd": " Returns true if the given variable can be iterated over in Tera (i.e. is an array/tuple or an object)."
|
||||
},
|
||||
{
|
||||
"dt": "object",
|
||||
"dd": " Returns true if the given variable is an object (i.e. can be iterated over key, value)."
|
||||
},
|
||||
{
|
||||
"dt": "starting_with(string)",
|
||||
"dd": " Returns true if the given variable is a string and starts with the arg given."
|
||||
},
|
||||
{
|
||||
"dt": "ending_with(string)",
|
||||
"dd": " Returns true if the given variable is a string and ends with the arg given."
|
||||
},
|
||||
{
|
||||
"dt": "containing(val)",
|
||||
"dd": " Returns true if the given variable contains the arg given.",
|
||||
"definitions": [
|
||||
{ "dt": "strings", "dd": " is the arg a substring?" },
|
||||
{ "dt": "arrays", "dd": " is the arg one of the members of the array?" },
|
||||
{ "dt": "maps", "dd": " is the arg a key of the map?" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"dt": "matching(regexp)",
|
||||
"dd": " Returns true if the given variable is a string and matches the regex in the argument."
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
---
|
||||
definitions:
|
||||
-
|
||||
dt: "defined"
|
||||
dd: " the given variable is defined."
|
||||
-
|
||||
dt: "undefined"
|
||||
dd: " the given variable is undefined."
|
||||
-
|
||||
dt: "odd"
|
||||
dd: " the given variable is an odd number."
|
||||
-
|
||||
dt: "even"
|
||||
dd: " the given variable is an even number."
|
||||
-
|
||||
dt: "string"
|
||||
dd: " the given variable is a string."
|
||||
-
|
||||
dt: "number"
|
||||
dd: " the given variable is a number."
|
||||
-
|
||||
dt: "divisibleby"
|
||||
dd: " the given expression is divisible by the arg given."
|
||||
-
|
||||
dt: "iterable"
|
||||
dd: " Returns true if the given variable can be iterated over in Tera (i.e. is an array/tuple or an object)."
|
||||
-
|
||||
dt: "object"
|
||||
dd: " Returns true if the given variable is an object (i.e. can be iterated over key, value)."
|
||||
-
|
||||
dt: "starting_with(string)"
|
||||
dd: " Returns true if the given variable is a string and starts with the arg given."
|
||||
-
|
||||
dt: "ending_with(string)"
|
||||
dd: " Returns true if the given variable is a string and ends with the arg given."
|
||||
-
|
||||
dt: "containing(val)"
|
||||
dd: " Returns true if the given variable contains the arg given."
|
||||
definitions:
|
||||
-
|
||||
dt: "strings"
|
||||
dd: " is the arg a substring?"
|
||||
-
|
||||
dt: "arrays"
|
||||
dd: " is the arg one of the members of the array?"
|
||||
-
|
||||
dt: "maps"
|
||||
dd: " is the arg a key of the map?"
|
||||
-
|
||||
dt: "matching(regexp)"
|
||||
dd: " Returns true if the given variable is a string and matches the regex in the argument."
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{% macro definition_body(source) %}
|
||||
<dl>
|
||||
{% for entry in source %}
|
||||
<dt><kbd>{{ entry.dt | safe }}</kbd></dt>
|
||||
<dd>{{ entry.dd | safe }}</dd>
|
||||
{% if entry.definitions %}{{ self::definition_body(source=entry.definitions) }}{% endif %}
|
||||
{% endfor %}
|
||||
</dl>
|
||||
{% endmacro %}
|
|
@ -0,0 +1,5 @@
|
|||
{%- import 'macros/definition_body.html' as renderer -%}
|
||||
<div>
|
||||
{% set content = load_data(path=source) %}
|
||||
{{ renderer::definition_body(source=content.definitions) }}
|
||||
</div>
|
Loading…
Reference in New Issue