slate-theme 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- slate_theme-0.1.0/.config/.cspell.json +241 -0
- slate_theme-0.1.0/.config/.markdownlint.yaml +44 -0
- slate_theme-0.1.0/.config/.markdownlintignore +3 -0
- slate_theme-0.1.0/.config/.stylelintrc.json +24 -0
- slate_theme-0.1.0/.config/404-router.html +20 -0
- slate_theme-0.1.0/.config/lighthouserc.json +24 -0
- slate_theme-0.1.0/.config/lychee.toml +21 -0
- slate_theme-0.1.0/.devcontainer/Dockerfile +47 -0
- slate_theme-0.1.0/.devcontainer/devcontainer.json +62 -0
- slate_theme-0.1.0/.devcontainer/install-github-binary.sh +45 -0
- slate_theme-0.1.0/.devcontainer/post-create.sh +23 -0
- slate_theme-0.1.0/.editorconfig +18 -0
- slate_theme-0.1.0/.gitattributes +4 -0
- slate_theme-0.1.0/.github/CODE_OF_CONDUCT.md +32 -0
- slate_theme-0.1.0/.github/CONTRIBUTING.md +107 -0
- slate_theme-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +44 -0
- slate_theme-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- slate_theme-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +28 -0
- slate_theme-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +32 -0
- slate_theme-0.1.0/.github/SECURITY.md +44 -0
- slate_theme-0.1.0/.github/dependabot.yml +62 -0
- slate_theme-0.1.0/.github/workflows/ci.yml +82 -0
- slate_theme-0.1.0/.github/workflows/codeql.yml +60 -0
- slate_theme-0.1.0/.github/workflows/dco.yml +78 -0
- slate_theme-0.1.0/.github/workflows/deploy.yml +85 -0
- slate_theme-0.1.0/.github/workflows/links.yml +62 -0
- slate_theme-0.1.0/.github/workflows/quality.yml +76 -0
- slate_theme-0.1.0/.github/workflows/uv-upgrade.yml +58 -0
- slate_theme-0.1.0/.gitignore +58 -0
- slate_theme-0.1.0/.pre-commit-config.yaml +125 -0
- slate_theme-0.1.0/AGENTS.md +99 -0
- slate_theme-0.1.0/CHANGELOG.md +92 -0
- slate_theme-0.1.0/CLAUDE.md +1 -0
- slate_theme-0.1.0/GEMINI.md +1 -0
- slate_theme-0.1.0/Justfile +157 -0
- slate_theme-0.1.0/LICENSE +21 -0
- slate_theme-0.1.0/LICENSE-CONTENT +400 -0
- slate_theme-0.1.0/PKG-INFO +116 -0
- slate_theme-0.1.0/README.md +248 -0
- slate_theme-0.1.0/README.pypi.md +93 -0
- slate_theme-0.1.0/content/en/assets/images/zensical-slate-theme-preview.webp +0 -0
- slate_theme-0.1.0/content/en/blog/hello-world.md +26 -0
- slate_theme-0.1.0/content/en/blog/index.md +27 -0
- slate_theme-0.1.0/content/en/index.md +23 -0
- slate_theme-0.1.0/content/en/projects/index.md +17 -0
- slate_theme-0.1.0/content/es/blog/hello-world.md +26 -0
- slate_theme-0.1.0/content/es/blog/index.md +28 -0
- slate_theme-0.1.0/content/es/index.md +24 -0
- slate_theme-0.1.0/content/es/projects/index.md +17 -0
- slate_theme-0.1.0/eslint.config.js +43 -0
- slate_theme-0.1.0/pyproject.toml +66 -0
- slate_theme-0.1.0/scripts/check_i18n.py +142 -0
- slate_theme-0.1.0/uv.lock +853 -0
- slate_theme-0.1.0/zensical.es.toml +101 -0
- slate_theme-0.1.0/zensical.toml +101 -0
- slate_theme-0.1.0/zensical_slate_theme/__init__.py +6 -0
- slate_theme-0.1.0/zensical_slate_theme/assets/images/banner.svg +32 -0
- slate_theme-0.1.0/zensical_slate_theme/assets/images/favicon.svg +18 -0
- slate_theme-0.1.0/zensical_slate_theme/assets/images/logo.svg +18 -0
- slate_theme-0.1.0/zensical_slate_theme/assets/images/profile.svg +24 -0
- slate_theme-0.1.0/zensical_slate_theme/assets/images/zensical-slate-theme-preview.webp +0 -0
- slate_theme-0.1.0/zensical_slate_theme/assets/javascripts/extra.js +343 -0
- slate_theme-0.1.0/zensical_slate_theme/assets/stylesheets/extra.css +972 -0
- slate_theme-0.1.0/zensical_slate_theme/main.html +11 -0
- slate_theme-0.1.0/zensical_slate_theme/mkdocs_theme.yml +4 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.2",
|
|
3
|
+
"language": "en",
|
|
4
|
+
"words": [
|
|
5
|
+
"aaron",
|
|
6
|
+
"abiertas",
|
|
7
|
+
"abierto",
|
|
8
|
+
"activado",
|
|
9
|
+
"activo",
|
|
10
|
+
"adoptar",
|
|
11
|
+
"agrupados",
|
|
12
|
+
"Allows",
|
|
13
|
+
"años",
|
|
14
|
+
"Anson",
|
|
15
|
+
"arquitectura",
|
|
16
|
+
"asistente",
|
|
17
|
+
"asesoría",
|
|
18
|
+
"Astral",
|
|
19
|
+
"automatizacion",
|
|
20
|
+
"basándote",
|
|
21
|
+
"better",
|
|
22
|
+
"bookworm",
|
|
23
|
+
"buscando",
|
|
24
|
+
"búsqueda",
|
|
25
|
+
"cambiar",
|
|
26
|
+
"cargando",
|
|
27
|
+
"claro",
|
|
28
|
+
"código",
|
|
29
|
+
"colaboración",
|
|
30
|
+
"conexión",
|
|
31
|
+
"conocimiento",
|
|
32
|
+
"cómo",
|
|
33
|
+
"configures",
|
|
34
|
+
"contacto",
|
|
35
|
+
"contexto",
|
|
36
|
+
"Conventional",
|
|
37
|
+
"cuál",
|
|
38
|
+
"customizations",
|
|
39
|
+
"datos",
|
|
40
|
+
"desarrolladores",
|
|
41
|
+
"descargando",
|
|
42
|
+
"después",
|
|
43
|
+
"deuda",
|
|
44
|
+
"días",
|
|
45
|
+
"ecosistema",
|
|
46
|
+
"ecosistemas",
|
|
47
|
+
"ejecución",
|
|
48
|
+
"ejecutando",
|
|
49
|
+
"elegante",
|
|
50
|
+
"emergentes",
|
|
51
|
+
"encontraron",
|
|
52
|
+
"enfocado",
|
|
53
|
+
"envrc",
|
|
54
|
+
"Español",
|
|
55
|
+
"está",
|
|
56
|
+
"evaluación",
|
|
57
|
+
"evaluar",
|
|
58
|
+
"exitosa",
|
|
59
|
+
"flexibility",
|
|
60
|
+
"fonts",
|
|
61
|
+
"frontmatter",
|
|
62
|
+
"generando",
|
|
63
|
+
"gitleaks",
|
|
64
|
+
"gobierno",
|
|
65
|
+
"guía",
|
|
66
|
+
"guiyomh",
|
|
67
|
+
"headings",
|
|
68
|
+
"herramienta",
|
|
69
|
+
"herramientas",
|
|
70
|
+
"huso",
|
|
71
|
+
"individuales",
|
|
72
|
+
"infraestructura",
|
|
73
|
+
"ingeniería",
|
|
74
|
+
"inicializar",
|
|
75
|
+
"inicializando",
|
|
76
|
+
"iniciando",
|
|
77
|
+
"iniciar",
|
|
78
|
+
"inicio",
|
|
79
|
+
"inlinehilite",
|
|
80
|
+
"Justfile",
|
|
81
|
+
"Landero",
|
|
82
|
+
"landerox",
|
|
83
|
+
"lamini",
|
|
84
|
+
"lenguaje",
|
|
85
|
+
"lenguajes",
|
|
86
|
+
"LHCI",
|
|
87
|
+
"librería",
|
|
88
|
+
"lighthouse",
|
|
89
|
+
"lighthouserc",
|
|
90
|
+
"licencia",
|
|
91
|
+
"limpia",
|
|
92
|
+
"Límite",
|
|
93
|
+
"linenums",
|
|
94
|
+
"Linting",
|
|
95
|
+
"lista",
|
|
96
|
+
"matter",
|
|
97
|
+
"Mensajes",
|
|
98
|
+
"mermaid",
|
|
99
|
+
"mismo",
|
|
100
|
+
"mlops",
|
|
101
|
+
"modelo",
|
|
102
|
+
"modo",
|
|
103
|
+
"must",
|
|
104
|
+
"OpenSSF",
|
|
105
|
+
"optimizado",
|
|
106
|
+
"ocurrió",
|
|
107
|
+
"oscuro",
|
|
108
|
+
"ossf",
|
|
109
|
+
"Política",
|
|
110
|
+
"practices",
|
|
111
|
+
"preferencia",
|
|
112
|
+
"pregunta",
|
|
113
|
+
"presentando",
|
|
114
|
+
"preparando",
|
|
115
|
+
"produccion",
|
|
116
|
+
"producción",
|
|
117
|
+
"Propo",
|
|
118
|
+
"proyectos",
|
|
119
|
+
"pymdownx",
|
|
120
|
+
"pyodide",
|
|
121
|
+
"PYSEC",
|
|
122
|
+
"PYTHONUNBUFFERED",
|
|
123
|
+
"pyupgrade",
|
|
124
|
+
"QWEN",
|
|
125
|
+
"reemplaza",
|
|
126
|
+
"responde",
|
|
127
|
+
"respuesta",
|
|
128
|
+
"relevantes",
|
|
129
|
+
"resumen",
|
|
130
|
+
"retener",
|
|
131
|
+
"sarif",
|
|
132
|
+
"sabes",
|
|
133
|
+
"semántica",
|
|
134
|
+
"semánticos",
|
|
135
|
+
"siguen",
|
|
136
|
+
"siento",
|
|
137
|
+
"similitudes",
|
|
138
|
+
"sitio",
|
|
139
|
+
"soluciones",
|
|
140
|
+
"stages",
|
|
141
|
+
"técnica",
|
|
142
|
+
"tecnológico",
|
|
143
|
+
"tecnologías",
|
|
144
|
+
"treosh",
|
|
145
|
+
"trixie",
|
|
146
|
+
"waivable",
|
|
147
|
+
"xenova",
|
|
148
|
+
"zensical",
|
|
149
|
+
"Zensical",
|
|
150
|
+
"zizmor",
|
|
151
|
+
"construido",
|
|
152
|
+
"guías",
|
|
153
|
+
"portafolio",
|
|
154
|
+
"Mundo",
|
|
155
|
+
"Tema",
|
|
156
|
+
"Hecho",
|
|
157
|
+
"usando"
|
|
158
|
+
],
|
|
159
|
+
"ignoreWords": [
|
|
160
|
+
"bar",
|
|
161
|
+
"cd",
|
|
162
|
+
"ci",
|
|
163
|
+
"dev",
|
|
164
|
+
"foo",
|
|
165
|
+
"nd",
|
|
166
|
+
"prd",
|
|
167
|
+
"qa",
|
|
168
|
+
"repo",
|
|
169
|
+
"req",
|
|
170
|
+
"temp"
|
|
171
|
+
],
|
|
172
|
+
"import": [],
|
|
173
|
+
"dictionaries": [
|
|
174
|
+
"aws",
|
|
175
|
+
"bash",
|
|
176
|
+
"companies",
|
|
177
|
+
"css",
|
|
178
|
+
"data-science",
|
|
179
|
+
"devops",
|
|
180
|
+
"docker",
|
|
181
|
+
"en_GB",
|
|
182
|
+
"en_US",
|
|
183
|
+
"gcp",
|
|
184
|
+
"html",
|
|
185
|
+
"k8s",
|
|
186
|
+
"markdown",
|
|
187
|
+
"misc",
|
|
188
|
+
"node",
|
|
189
|
+
"npm",
|
|
190
|
+
"python",
|
|
191
|
+
"softwareTerms",
|
|
192
|
+
"typescript"
|
|
193
|
+
],
|
|
194
|
+
"dictionaryDefinitions": [],
|
|
195
|
+
"useGitignore": true,
|
|
196
|
+
"ignorePaths": [
|
|
197
|
+
".coverage",
|
|
198
|
+
".git",
|
|
199
|
+
".mypy_cache",
|
|
200
|
+
".pre-commit-cache",
|
|
201
|
+
".pytest_cache",
|
|
202
|
+
".ruff_cache",
|
|
203
|
+
".venv",
|
|
204
|
+
".vscode",
|
|
205
|
+
"__pycache__",
|
|
206
|
+
"*.egg-info",
|
|
207
|
+
"build",
|
|
208
|
+
"dist",
|
|
209
|
+
"htmlcov",
|
|
210
|
+
"node_modules",
|
|
211
|
+
"site",
|
|
212
|
+
"temp",
|
|
213
|
+
"tmp",
|
|
214
|
+
"uv.lock"
|
|
215
|
+
],
|
|
216
|
+
"overrides": [
|
|
217
|
+
{
|
|
218
|
+
"filename": "**/*.md",
|
|
219
|
+
"ignoreRegExpList": [
|
|
220
|
+
"[A-Z]{3,}",
|
|
221
|
+
"https?://\\S+",
|
|
222
|
+
"^#+\\s",
|
|
223
|
+
"```[\\s\\S]*?```",
|
|
224
|
+
"`[^`\\n]+`"
|
|
225
|
+
]
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"filename": "**/*.json",
|
|
229
|
+
"ignoreRegExpList": [
|
|
230
|
+
"\\w+\\.\\w+"
|
|
231
|
+
]
|
|
232
|
+
}
|
|
233
|
+
],
|
|
234
|
+
"noSuggestDictionaries": [
|
|
235
|
+
"fonts",
|
|
236
|
+
"filetypes",
|
|
237
|
+
"software-terms"
|
|
238
|
+
],
|
|
239
|
+
"allowCompoundWords": true,
|
|
240
|
+
"caseSensitive": false
|
|
241
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Markdown Linting Configuration
|
|
2
|
+
# Reference: https://github.com/DavidAnson/markdownlint
|
|
3
|
+
|
|
4
|
+
default: true
|
|
5
|
+
|
|
6
|
+
# Disabled rules
|
|
7
|
+
MD013:
|
|
8
|
+
line_length: 80
|
|
9
|
+
code_blocks: false
|
|
10
|
+
tables: false
|
|
11
|
+
headings: false
|
|
12
|
+
MD033: false # Inline HTML - needed for badges, embeds
|
|
13
|
+
MD060: false # Reference link placement flexibility
|
|
14
|
+
MD025: false # Allow title in front-matter and H1 in content
|
|
15
|
+
|
|
16
|
+
# Heading configuration
|
|
17
|
+
MD001: true # Increment heading levels by one
|
|
18
|
+
MD003:
|
|
19
|
+
style: atx # Use # style headings (not underlines)
|
|
20
|
+
|
|
21
|
+
# List configuration
|
|
22
|
+
MD004:
|
|
23
|
+
style: consistent # Allows * or - (but must be consistent per file)
|
|
24
|
+
MD007:
|
|
25
|
+
indent: 2 # 2-space indentation for nested lists
|
|
26
|
+
MD029:
|
|
27
|
+
style: ordered # Use sequential numbering (1., 2., 3...)
|
|
28
|
+
|
|
29
|
+
# Whitespace
|
|
30
|
+
MD009:
|
|
31
|
+
br_spaces: 0 # No trailing spaces for line breaks
|
|
32
|
+
strict: true # No trailing spaces anywhere
|
|
33
|
+
MD010:
|
|
34
|
+
code_blocks: false # Allow tabs in code blocks
|
|
35
|
+
|
|
36
|
+
# Horizontal rules
|
|
37
|
+
MD035:
|
|
38
|
+
style: "---" # Use triple dash for horizontal rules
|
|
39
|
+
|
|
40
|
+
# Heading duplication — Keep a Changelog 1.1.0 uses repeated section
|
|
41
|
+
# names (Added/Changed/Fixed/Removed/Security) under each release;
|
|
42
|
+
# allow them as long as they have different parent headings.
|
|
43
|
+
MD024:
|
|
44
|
+
siblings_only: true
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "stylelint-config-standard",
|
|
3
|
+
"rules": {
|
|
4
|
+
"no-descending-specificity": null,
|
|
5
|
+
"selector-class-pattern": null,
|
|
6
|
+
"custom-property-pattern": null,
|
|
7
|
+
"import-notation": null,
|
|
8
|
+
"color-function-notation": null,
|
|
9
|
+
"alpha-value-notation": null,
|
|
10
|
+
"hue-degree-notation": null,
|
|
11
|
+
"property-no-vendor-prefix": null,
|
|
12
|
+
"comment-empty-line-before": null,
|
|
13
|
+
"rule-empty-line-before": null,
|
|
14
|
+
"declaration-block-single-line-max-declarations": null,
|
|
15
|
+
"length-zero-no-unit": null,
|
|
16
|
+
"value-keyword-case": null,
|
|
17
|
+
"declaration-empty-line-before": null,
|
|
18
|
+
"at-rule-empty-line-before": null,
|
|
19
|
+
"font-family-name-quotes": null,
|
|
20
|
+
"color-hex-length": null,
|
|
21
|
+
"no-duplicate-selectors": null,
|
|
22
|
+
"custom-property-empty-line-before": null
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>404</title>
|
|
6
|
+
<script>
|
|
7
|
+
(function () {
|
|
8
|
+
var p = window.location.pathname;
|
|
9
|
+
var t = p.indexOf('/es/') === 0 ? '/es/404/' : '/404/';
|
|
10
|
+
window.location.replace(t);
|
|
11
|
+
})();
|
|
12
|
+
</script>
|
|
13
|
+
<noscript>
|
|
14
|
+
<meta http-equiv="refresh" content="0; url=/404/">
|
|
15
|
+
</noscript>
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<p>Redirecting… <a href="/404/">English</a> / <a href="/es/404/">Español</a></p>
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"ci": {
|
|
3
|
+
"collect": {
|
|
4
|
+
"staticDistDir": "./site",
|
|
5
|
+
"url": [
|
|
6
|
+
"http://localhost/",
|
|
7
|
+
"http://localhost/es/"
|
|
8
|
+
],
|
|
9
|
+
"numberOfRuns": 3
|
|
10
|
+
},
|
|
11
|
+
"assert": {
|
|
12
|
+
"assertions": {
|
|
13
|
+
"categories:performance": ["warn", { "minScore": 0.85 }],
|
|
14
|
+
"categories:accessibility": ["warn", { "minScore": 0.9 }],
|
|
15
|
+
"categories:best-practices": ["warn", { "minScore": 0.9 }],
|
|
16
|
+
"categories:seo": ["warn", { "minScore": 0.9 }]
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"upload": {
|
|
20
|
+
"target": "filesystem",
|
|
21
|
+
"outputDir": "./lhci-reports"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
timeout = 8
|
|
2
|
+
max_concurrency = 4
|
|
3
|
+
no_progress = true
|
|
4
|
+
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
|
|
5
|
+
accept = [200, 301, 302]
|
|
6
|
+
|
|
7
|
+
# Skip 404 pages: they contain only root-relative site navigation links
|
|
8
|
+
# (/, /services/, /projects/, /radar/, /es/, …) that only resolve correctly
|
|
9
|
+
# post-build on the web server, not as local file paths.
|
|
10
|
+
exclude_path = ["404\\.md$"]
|
|
11
|
+
|
|
12
|
+
# Exclude domains that block automated crawlers
|
|
13
|
+
exclude = [
|
|
14
|
+
"https://openai.com/.*",
|
|
15
|
+
"https://leetcode.com/.*",
|
|
16
|
+
"https://www.terraform.io/.*",
|
|
17
|
+
"https://www.vaultproject.io/.*",
|
|
18
|
+
"https://opencv.org/.*",
|
|
19
|
+
"https://hazelcast.com/.*",
|
|
20
|
+
"https://www.llama.com/.*"
|
|
21
|
+
]
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# Global build args
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# UV_VERSION is declared before the first FROM so it is visible across stages.
|
|
5
|
+
ARG UV_VERSION="0.11.21"
|
|
6
|
+
|
|
7
|
+
# -----------------------------------------------------------------------------
|
|
8
|
+
# uv source stage: pinned by UV_VERSION + SHA256 digest. Exists so the
|
|
9
|
+
# final stage can `COPY --from=uv-source ...` without variable expansion in --from.
|
|
10
|
+
# -----------------------------------------------------------------------------
|
|
11
|
+
FROM ghcr.io/astral-sh/uv:${UV_VERSION}@sha256:ff07b86af50d4d9391d9daf4ff89ce427bc544f9aae87057e69a1cc0aa369946 AS uv-source
|
|
12
|
+
|
|
13
|
+
# -----------------------------------------------------------------------------
|
|
14
|
+
# Main devcontainer stage (mcr.microsoft.com/devcontainers/python on Debian 13)
|
|
15
|
+
# -----------------------------------------------------------------------------
|
|
16
|
+
FROM mcr.microsoft.com/devcontainers/python:3-3.13-trixie@sha256:e797f7e02a8adf1c6d375a4873591205cc867a2d68083506e7f3aa89822f2026
|
|
17
|
+
|
|
18
|
+
# Use bash with pipefail for all RUN steps.
|
|
19
|
+
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
|
20
|
+
|
|
21
|
+
# Global environment variables
|
|
22
|
+
ENV PYTHONDONTWRITEBYTECODE=1 \
|
|
23
|
+
PYTHONUNBUFFERED=1 \
|
|
24
|
+
UV_LINK_MODE=copy
|
|
25
|
+
|
|
26
|
+
# Pull uv & uvx from the pinned upstream image (see uv-source stage above).
|
|
27
|
+
COPY --from=uv-source /uv /uvx /usr/local/bin/
|
|
28
|
+
|
|
29
|
+
# Install lychee (link checker, pinned vía LYCHEE_VERSION arg)
|
|
30
|
+
ARG LYCHEE_VERSION="0.24.2"
|
|
31
|
+
RUN --mount=type=bind,source=install-github-binary.sh,target=/install-github-binary.sh \
|
|
32
|
+
/install-github-binary.sh \
|
|
33
|
+
lychee \
|
|
34
|
+
lycheeverse/lychee \
|
|
35
|
+
"lychee-v${LYCHEE_VERSION}" \
|
|
36
|
+
lychee-x86_64-unknown-linux-gnu.tar.gz \
|
|
37
|
+
lychee-aarch64-unknown-linux-gnu.tar.gz
|
|
38
|
+
|
|
39
|
+
# Install pinact (Action SHA pinner, pinned vía PINACT_VERSION arg)
|
|
40
|
+
ARG PINACT_VERSION="4.0.0"
|
|
41
|
+
RUN --mount=type=bind,source=install-github-binary.sh,target=/install-github-binary.sh \
|
|
42
|
+
/install-github-binary.sh \
|
|
43
|
+
pinact \
|
|
44
|
+
suzuki-shunsuke/pinact \
|
|
45
|
+
"v${PINACT_VERSION}" \
|
|
46
|
+
pinact_linux_amd64.tar.gz \
|
|
47
|
+
pinact_linux_arm64.tar.gz
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "zensical-slate-theme",
|
|
3
|
+
"build": {
|
|
4
|
+
"dockerfile": "Dockerfile",
|
|
5
|
+
"context": "."
|
|
6
|
+
},
|
|
7
|
+
"features": {
|
|
8
|
+
"ghcr.io/devcontainers/features/git:1": {},
|
|
9
|
+
"ghcr.io/devcontainers/features/github-cli:1": {},
|
|
10
|
+
"ghcr.io/guiyomh/features/just:0": {}
|
|
11
|
+
},
|
|
12
|
+
"init": true,
|
|
13
|
+
"containerEnv": {
|
|
14
|
+
"LANG": "C.UTF-8",
|
|
15
|
+
"TZ": "UTC"
|
|
16
|
+
},
|
|
17
|
+
"forwardPorts": [8000, 8001],
|
|
18
|
+
"portsAttributes": {
|
|
19
|
+
"8000": {
|
|
20
|
+
"label": "Zensical (EN)",
|
|
21
|
+
"onAutoForward": "notify"
|
|
22
|
+
},
|
|
23
|
+
"8001": {
|
|
24
|
+
"label": "Zensical (ES)",
|
|
25
|
+
"onAutoForward": "notify"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"customizations": {
|
|
29
|
+
"vscode": {
|
|
30
|
+
"settings": {
|
|
31
|
+
"editor.formatOnSave": true,
|
|
32
|
+
"editor.rulers": [80],
|
|
33
|
+
"[markdown]": {
|
|
34
|
+
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint",
|
|
35
|
+
"editor.wordWrap": "on"
|
|
36
|
+
},
|
|
37
|
+
"[toml]": {
|
|
38
|
+
"editor.wordWrap": "on"
|
|
39
|
+
},
|
|
40
|
+
"files.associations": {
|
|
41
|
+
"zensical.toml": "toml"
|
|
42
|
+
},
|
|
43
|
+
"cSpell.import": ["${workspaceFolder}/.config/.cspell.json"],
|
|
44
|
+
"markdownlint.configFile": ".config/.markdownlint.yaml"
|
|
45
|
+
},
|
|
46
|
+
"extensions": [
|
|
47
|
+
"bierner.markdown-mermaid",
|
|
48
|
+
"codezombiech.gitignore",
|
|
49
|
+
"DavidAnson.vscode-markdownlint",
|
|
50
|
+
"EditorConfig.EditorConfig",
|
|
51
|
+
"github.vscode-github-actions",
|
|
52
|
+
"redhat.vscode-yaml",
|
|
53
|
+
"streetsidesoftware.code-spell-checker",
|
|
54
|
+
"tamasfe.even-better-toml",
|
|
55
|
+
"yzhang.markdown-all-in-one"
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"postCreateCommand": "bash .devcontainer/post-create.sh",
|
|
60
|
+
"updateContentCommand": "uv sync --all-groups",
|
|
61
|
+
"remoteUser": "vscode"
|
|
62
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# install-github-binary.sh
|
|
4
|
+
# =============================================================================
|
|
5
|
+
#
|
|
6
|
+
# Download a GitHub release tarball and install the binary under
|
|
7
|
+
# /usr/local/bin. Called by the devcontainer Dockerfile for tools that
|
|
8
|
+
# don't ship as a devcontainer feature (currently: lychee, pinact).
|
|
9
|
+
#
|
|
10
|
+
# =============================================================================
|
|
11
|
+
set -euo pipefail
|
|
12
|
+
|
|
13
|
+
if [[ $# -ne 5 ]]; then
|
|
14
|
+
echo "Usage: $0 <binary> <repo> <tag> <asset_amd64> <asset_arm64>" >&2
|
|
15
|
+
exit 2
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
binary="$1"
|
|
19
|
+
repo="$2"
|
|
20
|
+
tag="$3"
|
|
21
|
+
asset_amd64="$4"
|
|
22
|
+
asset_arm64="$5"
|
|
23
|
+
|
|
24
|
+
case "$(uname -m)" in
|
|
25
|
+
x86_64) asset="$asset_amd64" ;;
|
|
26
|
+
aarch64|arm64) asset="$asset_arm64" ;;
|
|
27
|
+
*) echo "Unsupported architecture: $(uname -m)" >&2; exit 1 ;;
|
|
28
|
+
esac
|
|
29
|
+
|
|
30
|
+
tmp="$(mktemp -d)"
|
|
31
|
+
trap 'rm -rf "$tmp"' EXIT
|
|
32
|
+
|
|
33
|
+
curl -sSfL "https://github.com/${repo}/releases/download/${tag}/${asset}" \
|
|
34
|
+
-o "${tmp}/asset.tar.gz"
|
|
35
|
+
tar -xzf "${tmp}/asset.tar.gz" -C "${tmp}"
|
|
36
|
+
|
|
37
|
+
# Locate the binary regardless of whether it sits at the top level or
|
|
38
|
+
# inside a nested directory.
|
|
39
|
+
binary_path=$(find "${tmp}" -name "${binary}" -type f -executable -print -quit)
|
|
40
|
+
if [[ -z "${binary_path}" ]]; then
|
|
41
|
+
echo "Binary '${binary}' not found in extracted tarball" >&2
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
install -m 0755 "${binary_path}" "/usr/local/bin/${binary}"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# post-create.sh
|
|
4
|
+
# =============================================================================
|
|
5
|
+
#
|
|
6
|
+
# Bootstraps the devcontainer once it has been built. Wired up via
|
|
7
|
+
# .devcontainer/devcontainer.json `postCreateCommand`.
|
|
8
|
+
#
|
|
9
|
+
# =============================================================================
|
|
10
|
+
set -euo pipefail
|
|
11
|
+
trap 'echo "❌ Error on line $LINENO"; exit 1' ERR
|
|
12
|
+
|
|
13
|
+
echo "🚀 Starting post-create configuration..."
|
|
14
|
+
|
|
15
|
+
# 1. Sync project dependencies
|
|
16
|
+
echo "📚 Syncing dependencies..."
|
|
17
|
+
uv sync --all-groups
|
|
18
|
+
|
|
19
|
+
# 2. Install Git hooks
|
|
20
|
+
echo "🪝 Installing pre-commit hooks..."
|
|
21
|
+
uv run pre-commit install
|
|
22
|
+
|
|
23
|
+
echo "✅ Configuration completed successfully!"
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# EditorConfig helps maintain consistent coding styles across editors
|
|
2
|
+
# https://editorconfig.org
|
|
3
|
+
|
|
4
|
+
root = true
|
|
5
|
+
|
|
6
|
+
[*]
|
|
7
|
+
charset = utf-8
|
|
8
|
+
end_of_line = lf
|
|
9
|
+
insert_final_newline = true
|
|
10
|
+
trim_trailing_whitespace = true
|
|
11
|
+
indent_style = space
|
|
12
|
+
indent_size = 2
|
|
13
|
+
|
|
14
|
+
[*.md]
|
|
15
|
+
trim_trailing_whitespace = false
|
|
16
|
+
|
|
17
|
+
[*.py]
|
|
18
|
+
indent_size = 4
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Commitment
|
|
4
|
+
|
|
5
|
+
We are committed to providing a welcoming and inclusive environment for all
|
|
6
|
+
contributors, regardless of background, experience level, or identity.
|
|
7
|
+
|
|
8
|
+
## Expected Behavior
|
|
9
|
+
|
|
10
|
+
- Be respectful and treat all contributors with courtesy
|
|
11
|
+
- Offer constructive feedback and engage in good-faith discussions
|
|
12
|
+
- Welcome diverse perspectives and experiences
|
|
13
|
+
|
|
14
|
+
## Unacceptable Behavior
|
|
15
|
+
|
|
16
|
+
- Harassment, discrimination, or exclusion of any kind
|
|
17
|
+
- Offensive language and personal attacks
|
|
18
|
+
- Spam or low-effort contributions without genuine intent
|
|
19
|
+
|
|
20
|
+
## Enforcement
|
|
21
|
+
|
|
22
|
+
If you witness or experience unacceptable behavior, please report it by opening
|
|
23
|
+
a private GitHub issue or contacting the repository maintainer directly.
|
|
24
|
+
|
|
25
|
+
## Scope
|
|
26
|
+
|
|
27
|
+
This Code of Conduct applies to all interactions within this repository.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
Inspired by the [Contributor Covenant](https://www.contributor-covenant.org/)
|
|
32
|
+
version 3.0.
|