Add utility scripts collection with auto-generated documentation

This commit introduces a comprehensive collection of utility scripts for shell
automation, color manipulation, and documentation generation:

Core Scripts:
- artifact_github_download.sh: Download GitHub Action artifacts via CLI
- css_color_filter.sh: Generate CSS filter values using SPSA algorithm
- css_color_palette.sh: Generate comprehensive color palettes (monochromatic, triadic, etc.)
- css_json_convert.sh: Convert CSS variables to JSON/YAML formats
- doc_bash_generate.sh: Auto-generate README.md with animated GIF demos
- doc_rust_generate.sh: Generate Rust project documentation
- jinja_template_render.sh: Render Jinja2 templates from CLI
- mime_mp4_gif.sh: Convert MP4 videos to GIF format

Documentation Features:
- Comprehensive README.md with table of contents
- 8 animated GIF demos showing real command examples
- Sandboxed demo execution in temporary directories
- 15-second timeout protection for intensive computations
- Automatic example extraction from --help output

Technical Implementation:
- Pure bash color utilities using only bc for arithmetic
- tput-based color codes for portability
- IFS-safe string parsing using parameter expansion
- Stdout/stderr isolation to prevent contamination
- Base64 encoding for multi-line text preservation

All scripts include detailed --help documentation with usage examples.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-30 03:10:19 +01:00
commit a71eef9006
22 changed files with 6462 additions and 0 deletions

View File

@@ -0,0 +1,90 @@
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
mermaid.initialize({
startOnLoad: false,
theme: 'dark',
themeVariables: {
primaryColor: '{{primaryColor}}',
primaryTextColor: '{{primaryTextColor}}',
primaryBorderColor: '{{primaryBorderColor}}',
lineColor: '{{lineColor}}',
secondaryColor: '#{{secondaryColor}}',
tertiaryColor: '{{secondaryColor}}',
background: '{{background}}',
mainBkg: '{{mainBkg}}',
secondBkg: '{{secondBkg}}',
border1: '{{border1}}',
border2: '{{border2}}',
note: '{{note}}',
noteBkgColor: '{{noteBkgColor}}',
noteTextColor: '{{noteTextColor}}',
noteBorderColor: '{{noteBorderColor}}',
arrowheadColor: '{{arrowheadColor}}',
fontFamily: '{{fontFamily}}',
fontSize: '{{fontSize}}',
darkMode: '{{darkMode}}',
edgeLabelBackground: '{{edgeLabelBackground}}',
clusterBkg: '{{clusterBkg}}',
clusterBorder: '{{clusterBorder}}',
defaultLinkColor: '{{defaultLinkColor}}',
titleColor: '{{titleColor}}',
nodeTextColor: '{{nodeTextColor}}'
},
flowchart: {
htmlLabels: true,
curve: 'basis',
useMaxWidth: true,
padding: 20
},
securityLevel: 'loose'
});
// Use both DOMContentLoaded and load events for better compatibility
function initMermaid() {
const mermaidBlocks = document.querySelectorAll(
'pre.language-mermaid code'
);
if (mermaidBlocks.length === 0) {
console.log('No mermaid blocks found');
return;
}
console.log(`Found ${mermaidBlocks.length} mermaid blocks, converting...`);
mermaidBlocks.forEach((block, index) => {
const mermaidDiv = document.createElement('div');
mermaidDiv.className = 'mermaid';
mermaidDiv.id = `mermaid-diagram-${index}`;
mermaidDiv.textContent = block.textContent;
block.parentElement.replaceWith(mermaidDiv);
});
setTimeout(() => {
mermaid
.run()
.then(() => {
console.log('Mermaid diagrams rendered successfully');
})
.catch((err) => {
console.error('Mermaid rendering error:', err);
});
}, 100);
}
// Try multiple event listeners to ensure it runs
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initMermaid);
} else {
// DOM already loaded
initMermaid();
}
window.addEventListener('load', () => {
// Failsafe: run again on window load if diagrams still missing
if (document.querySelectorAll('.mermaid svg').length === 0) {
initMermaid();
}
});
</script>

View File

@@ -0,0 +1,25 @@
primaryColor: '#ff69b4'
primaryTextColor: '#1e272e'
primaryBorderColor: '#ff1493'
lineColor: '#ff69b4'
secondaryColor: '#2f3542'
tertiaryColor: '#1e272e'
background: '#1e272e'
mainBkg: '#2f3542'
secondBkg: '#1e272e'
border1: '#ff69b4'
border2: '#ff1493'
note: '#2f3542'
noteBkgColor: '#2f3542'
noteTextColor: '#ffffff'
noteBorderColor: '#ff69b4'
arrowheadColor: '#ff69b4'
fontFamily: 'Inter system-ui -apple-system sans-serif'
fontSize: '16px'
darkMode: true
edgeLabelBackground: '#1e272e'
clusterBkg: '#2f3542'
clusterBorder: '#ff69b4'
defaultLinkColor: '#ff69b4'
titleColor: '#ffffff'
nodeTextColor: '#e8eaed'

View File

@@ -0,0 +1,28 @@
.mermaid {
width: 100%;
height: auto;
padding: 14px;
background-color: var(--code-block-background-color);
border-radius: var(--code-block-border-radius);
}
.version {
color: var(--quote-color);
}
.sidebar-crate h2 a {
color: var(--link-color);
}
a.doc-anchor {
color: var(--link-color-alternative);
}
pre {
font-size: 0.8em;
}
.docblock :not(pre) > code {
font-size: 0.8em;
padding: 1px 6px;
}

View File

@@ -0,0 +1,152 @@
main-background-color: "#2f3542"
main-color: "#e8eaed"
settings-input-color: "#e8eaed"
settings-input-border-color: "#57606f"
settings-button-color: "#ff69b4"
settings-button-border-focus: "#ff1493"
link-color: "#ff69b4"
code-highlight-kw-color: "#ff69b4"
code-highlight-kw-2-color: "#ff1493"
code-highlight-kw-3-color: "#ec407a"
sidebar-background-color: "#1e272e"
sidebar-background-color-hover: "#24272e"
sidebar-elems-color: "#e8eaed"
sidebar-border-color: "#57606f"
sidebar-link-color: "#e8eaed"
sidebar-current-link-background-color: rgba(255, 105, 180, 0.15)
search-input-focused-border-color: "#ff69b4"
search-results-alias-color: "#ff69b4"
search-results-grey-color: "#747d8c"
search-tab-title-count-color: "#ff69b4"
search-background-color: "#2f3542"
search-color: "#e8eaed"
search-error-code-background-color: "#1e272e"
search-results-border-color: "#57606f"
search-tab-button-not-selected-border-top-color: "#57606f"
search-tab-button-not-selected-background: "#24272e"
search-tab-button-selected-border-top-color: "#ff69b4"
search-tab-button-selected-background: "#2f3542"
search-result-link-focus-background-color: rgba(255, 105, 180, 0.1)
search-result-border-color: "#57606f"
search-input-border-color: "#57606f"
code-block-background-color: "#1e272e"
codeblock-error-hover-color: rgba(255, 105, 180, 0.1)
codeblock-error-color: rgba(255, 20, 147, 0.8)
codeblock-ignore-hover-color: "#ffffff"
codeblock-ignore-color: "#e8eaed"
codeblock-link-background: "#1e272e"
codeblock-link-hover-background: "#24272e"
scrollbar-track-background-color: "#1e272e"
scrollbar-thumb-background-color: "#ff69b4"
scrollbar-color: "#ff69b4 #1e272e"
heading-color: "#ff69b4"
title-color: "#ff69b4"
subtitle-color: "#ff1493"
headings-border-bottom-color: "#ff69b4"
border-color: "#57606f"
table-border-color: "#57606f"
table-head-background-color: "#1e272e"
button-background-color: "#1e272e"
button-border-color: "#57606f"
right-side-color: "#e8eaed"
tr-even-background-color: "#24272e"
tr-odd-background-color: "#2f3542"
table-alt-row-background-color: "#24272e"
quote-color: "#747d8c"
quote-border-color: "#ff69b4"
type-link-color: "#ff69b4"
trait-link-color: "#ff1493"
assoc-item-link-color: "#ec407a"
fn-link-color: "#ff69b4"
function-link-color: "#ff69b4"
macro-link-color: "#f06292"
keyword-link-color: "#ff69b4"
mod-link-color: "#ff1493"
docblock-table-border-color: "#57606f"
docblock-code-background-color: "#1e272e"
mobile-sidebar-menu-filter: none
mobile-sidebar-menu-hover-filter: invert(100%) brightness(1.2)
src-line-numbers-span-color: "#57606f"
src-line-number-highlighted-background-color: rgba(255, 105, 180, 0.1)
src-sidebar-background-selected: rgba(255, 105, 180, 0.15)
src-sidebar-background-hover: rgba(255, 105, 180, 0.1)
item-table-header-background-color: "#1e272e"
item-table-header-border-color: "#57606f"
scraped-example-title-color: "#ff69b4"
scraped-example-help-border-color: "#57606f"
scraped-example-help-color: "#e8eaed"
scraped-example-help-hover-border-color: "#ff69b4"
scraped-example-help-hover-color: "#ffffff"
scraped-example-code-line-highlight: rgba(255, 105, 180, 0.1)
scraped-example-code-line-highlight-focus: rgba(255, 105, 180, 0.2)
scrape-example-code-line-highlight: rgba(255, 105, 180, 0.1)
scrape-example-code-line-highlight-focus: rgba(255, 105, 180, 0.2)
scrape-example-help-border-color: "#57606f"
scrape-example-help-color: "#e8eaed"
scrape-example-help-hover-border-color: "#ff69b4"
scrape-example-help-hover-color: "#ffffff"
scrape-example-toggle-line-background: rgba(255, 105, 180, 0.05)
scrape-example-toggle-line-hover-background: rgba(255, 105, 180, 0.1)
scrape-example-code-wrapper-background-start: rgba(30, 39, 46, 0.9)
scrape-example-code-wrapper-background-end: rgba(30, 39, 46, 0.6)
toggle-filter: invert(100%) brightness(0.8)
toggle-plus-minus-background-color: rgba(255, 105, 180, 0.1)
notable-trait-tooltip-background-color: "#1e272e"
notable-trait-tooltip-border-color: "#ff69b4"
copy-button-color: "#e8eaed"
copy-button-background-color: "#1e272e"
copy-button-hover-color: "#ffffff"
copy-button-hover-background-color: "#24272e"
copy-button-border-color: "#57606f"
copy-path-button-color: "#e8eaed"
code-attribute-color: "#ff69b4"
code-highlight-lifetime-color: "#f06292"
code-highlight-prelude-color: "#ff69b4"
code-highlight-prelude-val-color: "#ff1493"
code-highlight-number-color: "#f06292"
code-highlight-string-color: "#ec407a"
code-highlight-literal-color: "#ff69b4"
code-highlight-attribute-color: "#ff69b4"
code-highlight-self-color: "#ff1493"
code-highlight-macro-color: "#f06292"
code-highlight-question-mark-color: "#ff69b4"
code-highlight-comment-color: "#747d8c"
code-highlight-doc-comment-color: "#747d8c"
stab-background-color: "#1e272e"
stab-code-color: "#e8eaed"
stab-unstable-background-color: rgba(255, 105, 180, 0.2)
stab-unstable-code-color: "#ff69b4"
stab-deprecated-background-color: rgba(255, 69, 0, 0.2)
stab-deprecated-code-color: "#ff4500"
stab-portability-background-color: rgba(116, 125, 140, 0.2)
stab-portability-code-color: "#747d8c"
kbd-color: "#e8eaed"
kbd-background: "#1e272e"
kbd-box-shadow-color: "#57606f"
rust-logo-filter: brightness(0) saturate(100%) invert(75%) sepia(100%) saturate(1000%) hue-rotate(290deg) brightness(100%) contrast(100%)
crate-search-div-filter: invert(100%)
crate-search-div-hover-filter: invert(100%)
crate-search-hover-border: "#ff69b4"
target-background-color: rgba(255, 105, 180, 0.1)
target-border-color: "#ff69b4"
code-example-button-color: "#e8eaed"
code-example-button-background-color: "#1e272e"
code-example-button-hover-background-color: "#24272e"
code-example-button-hover-color: "#ffffff"
settings-menu-filter: brightness(0.9) invert(65%) sepia(67%) saturate(3704%) hue-rotate(300deg) brightness(108%) contrast(101%)
settings-menu-hover-background-color: rgba(255, 105, 180, 0.1)
settings-menu-hover-filter: brightness(1.1) invert(65%) sepia(67%) saturate(3704%) hue-rotate(300deg) brightness(108%) contrast(101%)
help-border-color: "#57606f"
help-background-color: "#2f3542"
help-color: "#e8eaed"
warning-border-color: "#f59e0b"
warning-background-color: rgba(245, 158, 11, 0.1)
note-background-color: rgba(59, 130, 246, 0.1)
note-border-color: "#3b82f6"
toggles-color: "#e8eaed"
sidebar-resizer-hover: "#ff69b4"
sidebar-resizer-active: "#ff1493"
font-family: "'Inter', 'Fira Sans', Arial, sans-serif"
font-family-code: "'JetBrains Mono', 'Fira Mono', monospace"
link-color-alternative: "#6495ed"