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.
Files changed (65) hide show
  1. slate_theme-0.1.0/.config/.cspell.json +241 -0
  2. slate_theme-0.1.0/.config/.markdownlint.yaml +44 -0
  3. slate_theme-0.1.0/.config/.markdownlintignore +3 -0
  4. slate_theme-0.1.0/.config/.stylelintrc.json +24 -0
  5. slate_theme-0.1.0/.config/404-router.html +20 -0
  6. slate_theme-0.1.0/.config/lighthouserc.json +24 -0
  7. slate_theme-0.1.0/.config/lychee.toml +21 -0
  8. slate_theme-0.1.0/.devcontainer/Dockerfile +47 -0
  9. slate_theme-0.1.0/.devcontainer/devcontainer.json +62 -0
  10. slate_theme-0.1.0/.devcontainer/install-github-binary.sh +45 -0
  11. slate_theme-0.1.0/.devcontainer/post-create.sh +23 -0
  12. slate_theme-0.1.0/.editorconfig +18 -0
  13. slate_theme-0.1.0/.gitattributes +4 -0
  14. slate_theme-0.1.0/.github/CODE_OF_CONDUCT.md +32 -0
  15. slate_theme-0.1.0/.github/CONTRIBUTING.md +107 -0
  16. slate_theme-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +44 -0
  17. slate_theme-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
  18. slate_theme-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +28 -0
  19. slate_theme-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +32 -0
  20. slate_theme-0.1.0/.github/SECURITY.md +44 -0
  21. slate_theme-0.1.0/.github/dependabot.yml +62 -0
  22. slate_theme-0.1.0/.github/workflows/ci.yml +82 -0
  23. slate_theme-0.1.0/.github/workflows/codeql.yml +60 -0
  24. slate_theme-0.1.0/.github/workflows/dco.yml +78 -0
  25. slate_theme-0.1.0/.github/workflows/deploy.yml +85 -0
  26. slate_theme-0.1.0/.github/workflows/links.yml +62 -0
  27. slate_theme-0.1.0/.github/workflows/quality.yml +76 -0
  28. slate_theme-0.1.0/.github/workflows/uv-upgrade.yml +58 -0
  29. slate_theme-0.1.0/.gitignore +58 -0
  30. slate_theme-0.1.0/.pre-commit-config.yaml +125 -0
  31. slate_theme-0.1.0/AGENTS.md +99 -0
  32. slate_theme-0.1.0/CHANGELOG.md +92 -0
  33. slate_theme-0.1.0/CLAUDE.md +1 -0
  34. slate_theme-0.1.0/GEMINI.md +1 -0
  35. slate_theme-0.1.0/Justfile +157 -0
  36. slate_theme-0.1.0/LICENSE +21 -0
  37. slate_theme-0.1.0/LICENSE-CONTENT +400 -0
  38. slate_theme-0.1.0/PKG-INFO +116 -0
  39. slate_theme-0.1.0/README.md +248 -0
  40. slate_theme-0.1.0/README.pypi.md +93 -0
  41. slate_theme-0.1.0/content/en/assets/images/zensical-slate-theme-preview.webp +0 -0
  42. slate_theme-0.1.0/content/en/blog/hello-world.md +26 -0
  43. slate_theme-0.1.0/content/en/blog/index.md +27 -0
  44. slate_theme-0.1.0/content/en/index.md +23 -0
  45. slate_theme-0.1.0/content/en/projects/index.md +17 -0
  46. slate_theme-0.1.0/content/es/blog/hello-world.md +26 -0
  47. slate_theme-0.1.0/content/es/blog/index.md +28 -0
  48. slate_theme-0.1.0/content/es/index.md +24 -0
  49. slate_theme-0.1.0/content/es/projects/index.md +17 -0
  50. slate_theme-0.1.0/eslint.config.js +43 -0
  51. slate_theme-0.1.0/pyproject.toml +66 -0
  52. slate_theme-0.1.0/scripts/check_i18n.py +142 -0
  53. slate_theme-0.1.0/uv.lock +853 -0
  54. slate_theme-0.1.0/zensical.es.toml +101 -0
  55. slate_theme-0.1.0/zensical.toml +101 -0
  56. slate_theme-0.1.0/zensical_slate_theme/__init__.py +6 -0
  57. slate_theme-0.1.0/zensical_slate_theme/assets/images/banner.svg +32 -0
  58. slate_theme-0.1.0/zensical_slate_theme/assets/images/favicon.svg +18 -0
  59. slate_theme-0.1.0/zensical_slate_theme/assets/images/logo.svg +18 -0
  60. slate_theme-0.1.0/zensical_slate_theme/assets/images/profile.svg +24 -0
  61. slate_theme-0.1.0/zensical_slate_theme/assets/images/zensical-slate-theme-preview.webp +0 -0
  62. slate_theme-0.1.0/zensical_slate_theme/assets/javascripts/extra.js +343 -0
  63. slate_theme-0.1.0/zensical_slate_theme/assets/stylesheets/extra.css +972 -0
  64. slate_theme-0.1.0/zensical_slate_theme/main.html +11 -0
  65. 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,3 @@
1
+ # Ignore Justfile as it is not a markdown document
2
+ Justfile
3
+ **/Justfile
@@ -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,4 @@
1
+
2
+ # AI CLI symlinks (point to AGENTS.md)
3
+ CLAUDE.md symlink=true
4
+ GEMINI.md symlink=true
@@ -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.