mirror of
https://github.com/ivuorinen/everforest-resources.git
synced 2026-01-26 03:04:02 +00:00
feat: initial scaffold and generator
- Complete project structure with directories for all target platforms - Template system for CLI tools with color placeholder replacement - Working generator that processes templates for 6 theme variants - GitHub workflows for build, snapshots, commitlint, and cli-verify - Installer and verifier scripts for CLI tool deployment - Comprehensive documentation and specifications - Biome 2.x linting and formatting setup - Husky git hooks for pre-commit validation
This commit is contained in:
2
.github/CODEOWNERS
vendored
Normal file
2
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# Global code ownership
|
||||
* @ivuorinen
|
||||
40
.github/workflows/build.yml
vendored
Normal file
40
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Lint code
|
||||
run: npm run lint
|
||||
|
||||
- name: Generate themes
|
||||
run: npm run generate
|
||||
|
||||
- name: Validate output
|
||||
run: npm run validate
|
||||
|
||||
- name: Check for uncommitted changes
|
||||
run: |
|
||||
if ! git diff --quiet; then
|
||||
echo "Generated files have uncommitted changes!"
|
||||
git diff
|
||||
exit 1
|
||||
fi
|
||||
37
.github/workflows/cli-verify.yml
vendored
Normal file
37
.github/workflows/cli-verify.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
name: CLI Verify
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
cli-verify:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Generate themes
|
||||
run: npm run generate
|
||||
|
||||
- name: Run installer
|
||||
run: |
|
||||
export HOME=$(mktemp -d)
|
||||
./cli/install.sh
|
||||
|
||||
- name: Run verifier
|
||||
run: |
|
||||
export HOME=$(mktemp -d)
|
||||
./cli/install.sh
|
||||
ENGINE=docker ./verify/verify.sh
|
||||
26
.github/workflows/commitlint.yml
vendored
Normal file
26
.github/workflows/commitlint.yml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
name: Commitlint
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
commitlint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Lint commit messages
|
||||
run: npx commitlint --from HEAD~${{ github.event.pull_request.commits }} --to HEAD --verbose
|
||||
40
.github/workflows/snapshots.yml
vendored
Normal file
40
.github/workflows/snapshots.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
name: Snapshots
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
|
||||
jobs:
|
||||
snapshots:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Install Playwright browsers
|
||||
run: npx playwright install --with-deps
|
||||
|
||||
- name: Generate themes
|
||||
run: npm run generate
|
||||
|
||||
- name: Run Playwright tests
|
||||
run: npm run snapshots
|
||||
|
||||
- name: Upload snapshots
|
||||
uses: actions/upload-artifact@v4
|
||||
if: failure()
|
||||
with:
|
||||
name: playwright-report
|
||||
path: playwright-report/
|
||||
retention-days: 30
|
||||
49
.gitignore
vendored
Normal file
49
.gitignore
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
# Dependencies
|
||||
node_modules/
|
||||
npm-debug.log*
|
||||
package-lock.json
|
||||
|
||||
# Generated files (tracked for now, may exclude later)
|
||||
# terminals/
|
||||
# cli/*/!(template.txt|README.md)
|
||||
# editors/*/!(README.md)
|
||||
# web/css/everforest.css
|
||||
|
||||
# Build artifacts
|
||||
dist/
|
||||
build/
|
||||
.cache/
|
||||
|
||||
# Testing
|
||||
coverage/
|
||||
.nyc_output/
|
||||
test-results/
|
||||
playwright-report/
|
||||
|
||||
# IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# OS
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
logs/
|
||||
|
||||
# Runtime
|
||||
.env
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Temporary files
|
||||
*.tmp
|
||||
*.temp
|
||||
1
.husky/commit-msg
Executable file
1
.husky/commit-msg
Executable file
@@ -0,0 +1 @@
|
||||
npx --no -- commitlint --edit ${1}
|
||||
4
.husky/pre-commit
Executable file
4
.husky/pre-commit
Executable file
@@ -0,0 +1,4 @@
|
||||
npm run lint:fix
|
||||
npm run generate
|
||||
npm run validate
|
||||
git add .
|
||||
1
.serena/.gitignore
vendored
Normal file
1
.serena/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/cache
|
||||
123
.serena/memories/architecture-deep-dive.md
Normal file
123
.serena/memories/architecture-deep-dive.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# Architecture Deep Dive - Everforest Resources
|
||||
|
||||
## Core Generator Architecture
|
||||
|
||||
### EverforestGenerator Class
|
||||
Located in `scripts/generate-themes.mjs`, this is the heart of the system:
|
||||
|
||||
```javascript
|
||||
class EverforestGenerator {
|
||||
constructor() {
|
||||
this.palette = null; // Loaded from palettes/everforest.json
|
||||
}
|
||||
|
||||
// Key methods:
|
||||
async loadPalette() // Loads JSON palette definition
|
||||
async processTemplate() // Processes template.txt with placeholders
|
||||
getColorsForVariant() // Maps palette to color variables
|
||||
async generateAll() // Main entry point - generates all variants
|
||||
async generateVariant() // Processes single variant
|
||||
}
|
||||
```
|
||||
|
||||
### Template Processing System
|
||||
1. **Template Files**: Each CLI tool has `template.txt` in its directory
|
||||
2. **Placeholders**: `{{bg}}`, `{{fg}}`, `{{red}}`, etc. replaced with actual colors
|
||||
3. **Variant Processing**: Generates 6 versions (dark/light × hard/medium/soft)
|
||||
4. **Output Generation**: Creates final config files from processed templates
|
||||
|
||||
### Palette Structure
|
||||
```json
|
||||
{
|
||||
"variants": {
|
||||
"dark": { "hard": {...}, "medium": {...}, "soft": {...} },
|
||||
"light": { "hard": {...}, "medium": {...}, "soft": {...} }
|
||||
},
|
||||
"accents": { "red": "#e67e80", "orange": "#e69875", ... },
|
||||
"grays": { "dark": {...}, "light": {...} }
|
||||
}
|
||||
```
|
||||
|
||||
## Supported Tools & Platforms
|
||||
|
||||
### CLI Tools (24+ supported)
|
||||
- **System Monitors**: btop, bottom, glances, neofetch, htop
|
||||
- **File Management**: ranger, lf, mc, LS_COLORS, eza/exa
|
||||
- **Git Tools**: lazygit, gitui, tig, delta
|
||||
- **Search & Processing**: ripgrep, fzf, fd, jq, bat
|
||||
- **Shell & Productivity**: starship, zsh, fish, tmux, less
|
||||
- **Modern Utils**: zoxide, atuin
|
||||
|
||||
### Editors (5 types)
|
||||
- **Neovim**: Lua module with setup() function
|
||||
- **VS Code**: JSON themes + package.json
|
||||
- **JetBrains**: Unified .icls files (IntelliJ, WebStorm, PyCharm, etc.)
|
||||
- **Zed**: JSON theme files
|
||||
- **Sublime Text**: .sublime-color-scheme files
|
||||
|
||||
### Terminals
|
||||
- WezTerm, Alacritty, Kitty, Windows Terminal, Ghostty
|
||||
|
||||
## Color Philosophy
|
||||
|
||||
### ANSI vs Hex Usage
|
||||
- **CLI Tools**: ANSI-16 SGR codes only (no raw hex)
|
||||
- **GUI Applications**: Hex values allowed (from generator only)
|
||||
- **Consistent Mapping**: Same semantic colors across all tools
|
||||
|
||||
### Theme Variants
|
||||
- **Dark**: hard/medium/soft (different background intensities)
|
||||
- **Light**: hard/medium/soft (different background intensities)
|
||||
- **Fallback**: Medium variant if specific not available
|
||||
|
||||
## File Structure Pattern
|
||||
|
||||
```
|
||||
cli/
|
||||
starship/
|
||||
template.txt # Template with {{color}} placeholders
|
||||
starship.toml # Generated output (never edit directly)
|
||||
README.md # Tool-specific documentation
|
||||
|
||||
fish/
|
||||
colors-template.txt # Multiple templates for complex tools
|
||||
prompt-template.txt
|
||||
tide-template.txt
|
||||
everforest-*.fish # Generated variants
|
||||
README.md
|
||||
```
|
||||
|
||||
## Development Patterns
|
||||
|
||||
### Generator Extension
|
||||
To add new CLI tool:
|
||||
1. Create `cli/newtool/template.txt`
|
||||
2. Add processing logic to generator
|
||||
3. Update installer and verifier
|
||||
4. Add to documentation
|
||||
|
||||
### Template Design
|
||||
- Use semantic color names: `{{bg}}` not `{{color1}}`
|
||||
- Include tool-specific syntax
|
||||
- Test with all 6 variants
|
||||
- Follow tool's native config format
|
||||
|
||||
### Error Handling
|
||||
- Graceful failures with descriptive messages
|
||||
- Exit codes for CI integration
|
||||
- Emoji-prefixed console output for visibility
|
||||
|
||||
## CI/CD Integration
|
||||
|
||||
### Required Checks
|
||||
1. **build**: Generator runs successfully
|
||||
2. **snapshots**: Web demo renders correctly
|
||||
3. **commitlint**: Conventional commit format
|
||||
4. **cli-verify**: Generated configs work in container
|
||||
|
||||
### Validation Pipeline
|
||||
1. Palette structure validation
|
||||
2. Template processing verification
|
||||
3. No raw hex in CLI configs
|
||||
4. All variants present
|
||||
5. File structure compliance
|
||||
139
.serena/memories/code-style-conventions.md
Normal file
139
.serena/memories/code-style-conventions.md
Normal file
@@ -0,0 +1,139 @@
|
||||
# Code Style & Conventions - Everforest Resources
|
||||
|
||||
## JavaScript/Node.js Style
|
||||
|
||||
### Module System
|
||||
- **ES Modules**: All files use `.mjs` extension
|
||||
- **Imports**: Use ES6 import/export syntax
|
||||
- **Type**: `"type": "module"` in package.json
|
||||
|
||||
### Biome Configuration
|
||||
The project uses **Biome 2.x** for linting and formatting with these settings:
|
||||
- **Version**: 2.2.3 (latest)
|
||||
- **Indent**: 2 spaces
|
||||
- **Line width**: 100 characters
|
||||
- **Quotes**: Single quotes for JavaScript, double for JSX
|
||||
- **Semicolons**: Always required
|
||||
- **Trailing commas**: ES5 style
|
||||
- **Arrow parentheses**: As needed
|
||||
|
||||
### Class Structure
|
||||
```javascript
|
||||
class EverforestGenerator {
|
||||
constructor() {
|
||||
this.palette = null;
|
||||
}
|
||||
|
||||
async methodName() {
|
||||
// Async/await preferred over Promises
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Naming Conventions
|
||||
- **Classes**: PascalCase (`EverforestGenerator`)
|
||||
- **Methods**: camelCase (`loadPalette`, `processTemplate`)
|
||||
- **Constants**: camelCase for most, UPPER_SNAKE_CASE for true constants
|
||||
- **Files**: kebab-case (`generate-themes.mjs`)
|
||||
|
||||
### Error Handling
|
||||
- Use try-catch blocks for async operations
|
||||
- Log errors with emoji prefixes: `console.error('❌ Failed to load palette')`
|
||||
- Exit with code 1 on critical errors: `process.exit(1)`
|
||||
|
||||
### Console Output
|
||||
- Use emoji for visual feedback:
|
||||
- ✅ Success messages
|
||||
- ❌ Error messages
|
||||
- 🎨 Starting operations
|
||||
- 📝 Progress updates
|
||||
- ✨ Completion messages
|
||||
|
||||
### Code Quality Rules
|
||||
- **Variables**: Use `const` by default, `let` when reassignment needed
|
||||
- **Functions**: Prefer arrow functions for callbacks
|
||||
- **Imports**: Organize imports automatically with Biome
|
||||
- **Unused Variables**: Not allowed (error level)
|
||||
- **Block Statements**: Always use braces for control structures
|
||||
- **forEach**: Allowed for side effects (useIterableCallbackReturn disabled)
|
||||
|
||||
## Template System Conventions
|
||||
|
||||
### Placeholder Format
|
||||
- Use double curly braces: `{{colorName}}`
|
||||
- Available placeholders: `{{bg}}`, `{{fg}}`, `{{red}}`, `{{orange}}`, `{{yellow}}`, `{{green}}`, `{{aqua}}`, `{{blue}}`, `{{purple}}`, `{{gray1}}`, `{{gray2}}`, `{{gray3}}`
|
||||
|
||||
### Template Files
|
||||
- Named `template.txt` in each tool directory
|
||||
- Multiple templates for complex tools (e.g., `colors-template.txt`, `prompt-template.txt`)
|
||||
- Never edit generated output files directly
|
||||
|
||||
## Documentation Style
|
||||
|
||||
### Code Comments
|
||||
- Use JSDoc-style comments for classes and methods
|
||||
- Include purpose and architecture notes at file top
|
||||
- Explain complex logic inline
|
||||
|
||||
### Markdown
|
||||
- **Critical Rule**: Use indented code blocks only (4 spaces)
|
||||
- Never use triple backticks (```)
|
||||
- Use emoji in headers and lists for visual hierarchy
|
||||
|
||||
## Git Conventions
|
||||
|
||||
### Commit Messages
|
||||
- Follow Conventional Commits format
|
||||
- Examples:
|
||||
- `feat: add starship theme generator`
|
||||
- `fix: correct color mapping in templates`
|
||||
- `docs: update CLI installation guide`
|
||||
|
||||
### Branch Strategy
|
||||
- Main branch: `main`
|
||||
- All CI checks must pass for merge
|
||||
- Required checks: lint + build + snapshots + commitlint + cli-verify
|
||||
|
||||
## File Organization
|
||||
|
||||
### Directory Structure
|
||||
```
|
||||
palettes/ # Color definitions (JSON/YAML)
|
||||
scripts/ # Generator and validation scripts
|
||||
cli/ # CLI tool templates and configs
|
||||
editors/ # Editor theme files
|
||||
terminals/ # Terminal configurations
|
||||
web/ # CSS and demo files
|
||||
docs/ # Documentation
|
||||
meta/ # Project specifications
|
||||
biome.json # Biome 2.x configuration
|
||||
```
|
||||
|
||||
### File Naming
|
||||
- Scripts: `kebab-case.mjs`
|
||||
- Configs: Tool-specific conventions
|
||||
- Templates: `template.txt` or `tool-template.txt`
|
||||
|
||||
### Biome File Processing
|
||||
Biome processes these files:
|
||||
- JavaScript modules: `scripts/**/*.mjs`, `scripts/**/*.js`
|
||||
- JSON files: `*.json`
|
||||
- Root level JS files: `*.mjs`, `*.js`
|
||||
|
||||
Biome ignores:
|
||||
- Generated output files
|
||||
- Node modules and build artifacts
|
||||
- Unknown file types (by default)
|
||||
|
||||
## Development Commands
|
||||
```bash
|
||||
# Format code
|
||||
npm run format # Format all files with Biome 2.x
|
||||
|
||||
# Lint code
|
||||
npm run lint # Check for issues
|
||||
npm run lint:fix # Auto-fix issues
|
||||
|
||||
# Before committing
|
||||
npm run lint:fix && npm run format
|
||||
```
|
||||
47
.serena/memories/project-overview.md
Normal file
47
.serena/memories/project-overview.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# Everforest Resources - Project Overview
|
||||
|
||||
## Purpose
|
||||
The **everforest-resources** repository is an unofficial hub for Everforest color scheme resources. It generates theme files, configurations, and color schemes for terminals, CLI tools, and editors from canonical palette definitions.
|
||||
|
||||
## Key Philosophy
|
||||
- **Generator-first approach**: All outputs are generated from `palettes/everforest.json`
|
||||
- **Template system**: Uses `template.txt` files with color placeholders (e.g., `{{bg}}`, `{{fg}}`, `{{red}}`)
|
||||
- **No manual editing**: Generated artifacts must never be hand-edited
|
||||
- **Comprehensive coverage**: Supports 24+ CLI tools, 5+ editors, multiple terminals
|
||||
|
||||
## Tech Stack
|
||||
- **Runtime**: Node.js with ES modules (type: "module")
|
||||
- **Language**: JavaScript (.mjs files)
|
||||
- **Code Quality**: Biome 2.2.3 for linting and formatting
|
||||
- **Testing**: Playwright for web snapshots (when implemented)
|
||||
- **CI/CD**: Husky for git hooks, conventional commits
|
||||
- **Package Management**: npm
|
||||
|
||||
## Core Architecture
|
||||
- **Palette**: JSON definitions with 6 variants (dark/light × hard/medium/soft)
|
||||
- **Generator**: `EverforestGenerator` class processes templates and generates themes
|
||||
- **Templates**: Color placeholder system for consistent theming
|
||||
- **Output**: Generates configs for terminals, CLI tools, editors, and web
|
||||
|
||||
## Target Platforms
|
||||
- **Terminals**: WezTerm, Alacritty, Kitty, Windows Terminal, Ghostty
|
||||
- **CLI Tools**: 24+ tools including btop, lazygit, starship, fzf, ripgrep
|
||||
- **Editors**: Neovim, VS Code, JetBrains IDEs, Zed, Sublime Text
|
||||
- **Web**: CSS variables with media queries
|
||||
|
||||
## Development Status
|
||||
- ✅ Project structure and specifications complete
|
||||
- ✅ Basic generator scaffold implemented
|
||||
- ✅ Biome 2.x linting and formatting integrated and working
|
||||
- ✅ Code quality pipeline working (lint → generate → validate)
|
||||
- ✅ Latest tooling versions (Biome 2.2.3)
|
||||
- ⏳ Full template processing implementation pending
|
||||
- ⏳ CLI tool generators pending
|
||||
- ⏳ Editor theme generators pending
|
||||
- ⏳ Playwright web tests pending
|
||||
|
||||
## Quality Assurance
|
||||
- **Biome 2.x**: All JavaScript code passes linting and formatting with latest version
|
||||
- **Validation**: Generator outputs validated for structure and compliance
|
||||
- **CI Pipeline**: Automated checks for code quality and generation consistency
|
||||
- **Modern Tooling**: Using latest stable versions of all development tools
|
||||
97
.serena/memories/suggested-commands.md
Normal file
97
.serena/memories/suggested-commands.md
Normal file
@@ -0,0 +1,97 @@
|
||||
# Suggested Commands - Everforest Resources
|
||||
|
||||
## Core Development Commands
|
||||
|
||||
### Theme Generation
|
||||
```bash
|
||||
npm run generate # Generate all theme files from palettes
|
||||
node scripts/generate-themes.mjs # Direct generator execution
|
||||
```
|
||||
|
||||
### Code Quality & Linting
|
||||
```bash
|
||||
npm run lint # Check code with Biome linter
|
||||
npm run lint:fix # Auto-fix linting issues with Biome
|
||||
npm run format # Format code with Biome
|
||||
npm run validate # Validate generated outputs and structure
|
||||
npm run ci # Full CI suite: lint + generate + validate + snapshots
|
||||
```
|
||||
|
||||
### Testing
|
||||
```bash
|
||||
npm run snapshots # Generate Playwright web snapshots
|
||||
playwright test # Direct Playwright execution
|
||||
```
|
||||
|
||||
### Git & Setup
|
||||
```bash
|
||||
npm run prepare # Install Husky git hooks
|
||||
npm install # Install dependencies
|
||||
```
|
||||
|
||||
### Alternative Commands (Makefile - when implemented)
|
||||
```bash
|
||||
make generate # Alternative to npm run generate
|
||||
make validate # Alternative to npm run validate
|
||||
make ci # Alternative to npm run ci
|
||||
make snapshots # Generate web snapshots
|
||||
make demo # Run web demo server
|
||||
```
|
||||
|
||||
## Installation & Deployment
|
||||
```bash
|
||||
./cli/install.sh # Deploy all configs to ~/.config (when implemented)
|
||||
ENGINE=docker ./verify/verify.sh # Verify in container (when implemented)
|
||||
```
|
||||
|
||||
## Development Workflow Commands
|
||||
```bash
|
||||
# 1. Edit palette or templates
|
||||
vim palettes/everforest.json
|
||||
vim cli/starship/template.txt
|
||||
|
||||
# 2. Lint and format code
|
||||
npm run lint:fix # Fix any linting issues
|
||||
npm run format # Ensure consistent formatting
|
||||
|
||||
# 3. Generate themes
|
||||
npm run generate
|
||||
|
||||
# 4. Validate output
|
||||
npm run validate
|
||||
|
||||
# 5. Test web components
|
||||
npm run snapshots
|
||||
|
||||
# 6. Full CI check
|
||||
npm run ci
|
||||
|
||||
# 7. Commit changes
|
||||
git add -A
|
||||
git commit -m "feat: update starship theme colors"
|
||||
```
|
||||
|
||||
## Biome Commands
|
||||
```bash
|
||||
biome check . # Check all files for issues
|
||||
biome check . --write # Auto-fix issues
|
||||
biome format . --write # Format all supported files
|
||||
biome lint . # Lint JavaScript/TypeScript files
|
||||
```
|
||||
|
||||
## System Commands (macOS/Darwin)
|
||||
```bash
|
||||
# File operations
|
||||
ls -la # List files with details
|
||||
find . -name "*.mjs" # Find JavaScript modules
|
||||
grep -r "template" . # Search for template references
|
||||
|
||||
# Directory navigation
|
||||
pwd # Current directory
|
||||
cd scripts/ # Change to scripts directory
|
||||
|
||||
# Git operations
|
||||
git status # Check git status
|
||||
git log --oneline # View commit history
|
||||
git diff # View changes
|
||||
```
|
||||
141
.serena/memories/task-completion-checklist.md
Normal file
141
.serena/memories/task-completion-checklist.md
Normal file
@@ -0,0 +1,141 @@
|
||||
# Task Completion Checklist - Everforest Resources
|
||||
|
||||
## When a Development Task is Completed
|
||||
|
||||
### 1. Code Quality Checks
|
||||
```bash
|
||||
# Lint and format code first
|
||||
npm run lint:fix # Auto-fix any linting issues
|
||||
npm run format # Ensure consistent formatting
|
||||
|
||||
# Generate themes from updated templates/palettes
|
||||
npm run generate
|
||||
|
||||
# Validate all outputs
|
||||
npm run validate
|
||||
|
||||
# Check for any errors or warnings
|
||||
# All validation must pass before proceeding
|
||||
```
|
||||
|
||||
### 2. Testing Requirements
|
||||
```bash
|
||||
# Run Playwright snapshots (for web changes)
|
||||
npm run snapshots
|
||||
|
||||
# Full CI pipeline (includes linting)
|
||||
npm run ci
|
||||
|
||||
# Verify no errors in any step
|
||||
```
|
||||
|
||||
### 3. File Verification
|
||||
- **Never commit generated files without running generator**
|
||||
- **Always commit palette + template + generated files together**
|
||||
- Check that all 6 variants are generated (dark/light × hard/medium/soft)
|
||||
- Ensure code passes Biome linting and formatting
|
||||
|
||||
### 4. Documentation Updates
|
||||
- Update relevant README or docs if adding new tools
|
||||
- Ensure all examples use indented code blocks (4 spaces)
|
||||
- Never use triple backticks in documentation
|
||||
- Run `npm run format` to ensure consistent formatting
|
||||
|
||||
### 5. Git Workflow
|
||||
```bash
|
||||
# Check status
|
||||
git status
|
||||
|
||||
# Lint and format before committing
|
||||
npm run lint:fix
|
||||
npm run format
|
||||
|
||||
# Stage all changes (palette + template + generated)
|
||||
git add -A
|
||||
|
||||
# Commit with conventional format
|
||||
git commit -m "feat: add new CLI tool theme"
|
||||
# or
|
||||
git commit -m "fix: correct color mapping in starship"
|
||||
# or
|
||||
git commit -m "docs: update installation guide"
|
||||
|
||||
# Push changes
|
||||
git push
|
||||
```
|
||||
|
||||
### 6. CI/CD Requirements
|
||||
All these checks must pass in CI before merge:
|
||||
- ✅ **lint**: Biome linting and formatting checks
|
||||
- ✅ **build**: Generator + validation
|
||||
- ✅ **snapshots**: Playwright demo renders
|
||||
- ✅ **commitlint**: Conventional Commits enforcement
|
||||
- ✅ **cli-verify**: Install + verify generated configs
|
||||
|
||||
### 7. Critical Rules Verification
|
||||
- [ ] Code passes Biome linting (no errors)
|
||||
- [ ] Code is properly formatted with Biome
|
||||
- [ ] No raw hex values in CLI configs (ANSI only)
|
||||
- [ ] All generated files come from templates/palettes
|
||||
- [ ] No manual edits to generated files
|
||||
- [ ] Template placeholders used correctly
|
||||
- [ ] All 6 theme variants present where applicable
|
||||
|
||||
### 8. Special Considerations
|
||||
|
||||
#### For New CLI Tools
|
||||
- Create `template.txt` with proper placeholders
|
||||
- Add to generator processing logic
|
||||
- Update installer script
|
||||
- Add to verifier container
|
||||
- Document in appropriate README
|
||||
- Ensure any new JS/MJS files follow Biome style
|
||||
|
||||
#### For Palette Changes
|
||||
- Regenerate ALL theme files
|
||||
- Verify no breaking changes in output formats
|
||||
- Test web demo still renders correctly
|
||||
- Check that ANSI mappings remain valid
|
||||
|
||||
#### For Template Updates
|
||||
- Test with all 6 variants
|
||||
- Verify placeholder replacement works
|
||||
- Check output format matches tool expectations
|
||||
|
||||
#### For JavaScript/Code Changes
|
||||
- Run `npm run lint:fix` to auto-fix issues
|
||||
- Run `npm run format` for consistent formatting
|
||||
- Ensure imports are organized correctly
|
||||
- Follow established naming conventions
|
||||
|
||||
### 9. Before Pushing
|
||||
```bash
|
||||
# Final verification with full CI
|
||||
npm run ci
|
||||
|
||||
# If all passes, ready to push
|
||||
git push origin main
|
||||
```
|
||||
|
||||
## Emergency Fixes
|
||||
If CI fails after push:
|
||||
1. Check error logs in GitHub Actions
|
||||
2. For linting errors: `npm run lint:fix` locally
|
||||
3. For generation errors: `rm -rf generated/ && npm run generate`
|
||||
4. Fix locally with proper workflow above
|
||||
5. Push fix immediately
|
||||
|
||||
## Biome-Specific Troubleshooting
|
||||
```bash
|
||||
# Check what Biome would fix
|
||||
npm run lint
|
||||
|
||||
# Auto-fix all fixable issues
|
||||
npm run lint:fix
|
||||
|
||||
# Format all files
|
||||
npm run format
|
||||
|
||||
# Check specific file
|
||||
biome check scripts/generate-themes.mjs
|
||||
```
|
||||
67
.serena/project.yml
Normal file
67
.serena/project.yml
Normal file
@@ -0,0 +1,67 @@
|
||||
# language of the project (csharp, python, rust, java, typescript, go, cpp, or ruby)
|
||||
# * For C, use cpp
|
||||
# * For JavaScript, use typescript
|
||||
# Special requirements:
|
||||
# * csharp: Requires the presence of a .sln file in the project folder.
|
||||
language: typescript
|
||||
|
||||
# whether to use the project's gitignore file to ignore files
|
||||
# Added on 2025-04-07
|
||||
ignore_all_files_in_gitignore: true
|
||||
# list of additional paths to ignore
|
||||
# same syntax as gitignore, so you can use * and **
|
||||
# Was previously called `ignored_dirs`, please update your config if you are using that.
|
||||
# Added (renamed) on 2025-04-07
|
||||
ignored_paths: []
|
||||
|
||||
# whether the project is in read-only mode
|
||||
# If set to true, all editing tools will be disabled and attempts to use them will result in an error
|
||||
# Added on 2025-04-18
|
||||
read_only: false
|
||||
|
||||
# list of tool names to exclude. We recommend not excluding any tools, see the readme for more details.
|
||||
# Below is the complete list of tools for convenience.
|
||||
# To make sure you have the latest list of tools, and to view their descriptions,
|
||||
# execute `uv run scripts/print_tool_overview.py`.
|
||||
#
|
||||
# * `activate_project`: Activates a project by name.
|
||||
# * `check_onboarding_performed`: Checks whether project onboarding was already performed.
|
||||
# * `create_text_file`: Creates/overwrites a file in the project directory.
|
||||
# * `delete_lines`: Deletes a range of lines within a file.
|
||||
# * `delete_memory`: Deletes a memory from Serena's project-specific memory store.
|
||||
# * `execute_shell_command`: Executes a shell command.
|
||||
# * `find_referencing_code_snippets`: Finds code snippets in which the symbol at the given location is referenced.
|
||||
# * `find_referencing_symbols`: Finds symbols that reference the symbol at the given location (optionally filtered by type).
|
||||
# * `find_symbol`: Performs a global (or local) search for symbols with/containing a given name/substring (optionally filtered by type).
|
||||
# * `get_current_config`: Prints the current configuration of the agent, including the active and available projects, tools, contexts, and modes.
|
||||
# * `get_symbols_overview`: Gets an overview of the top-level symbols defined in a given file.
|
||||
# * `initial_instructions`: Gets the initial instructions for the current project.
|
||||
# Should only be used in settings where the system prompt cannot be set,
|
||||
# e.g. in clients you have no control over, like Claude Desktop.
|
||||
# * `insert_after_symbol`: Inserts content after the end of the definition of a given symbol.
|
||||
# * `insert_at_line`: Inserts content at a given line in a file.
|
||||
# * `insert_before_symbol`: Inserts content before the beginning of the definition of a given symbol.
|
||||
# * `list_dir`: Lists files and directories in the given directory (optionally with recursion).
|
||||
# * `list_memories`: Lists memories in Serena's project-specific memory store.
|
||||
# * `onboarding`: Performs onboarding (identifying the project structure and essential tasks, e.g. for testing or building).
|
||||
# * `prepare_for_new_conversation`: Provides instructions for preparing for a new conversation (in order to continue with the necessary context).
|
||||
# * `read_file`: Reads a file within the project directory.
|
||||
# * `read_memory`: Reads the memory with the given name from Serena's project-specific memory store.
|
||||
# * `remove_project`: Removes a project from the Serena configuration.
|
||||
# * `replace_lines`: Replaces a range of lines within a file with new content.
|
||||
# * `replace_symbol_body`: Replaces the full definition of a symbol.
|
||||
# * `restart_language_server`: Restarts the language server, may be necessary when edits not through Serena happen.
|
||||
# * `search_for_pattern`: Performs a search for a pattern in the project.
|
||||
# * `summarize_changes`: Provides instructions for summarizing the changes made to the codebase.
|
||||
# * `switch_modes`: Activates modes by providing a list of their names
|
||||
# * `think_about_collected_information`: Thinking tool for pondering the completeness of collected information.
|
||||
# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
|
||||
# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
|
||||
# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
|
||||
excluded_tools: []
|
||||
|
||||
# initial prompt for the project. It will always be given to the LLM upon activating the project
|
||||
# (contrary to the memories, which are loaded on demand).
|
||||
initial_prompt: ""
|
||||
|
||||
project_name: "everforest-resources"
|
||||
167
AGENTS.md
Normal file
167
AGENTS.md
Normal file
@@ -0,0 +1,167 @@
|
||||
# Everforest Resources — Specification
|
||||
|
||||
This document consolidates all gathered knowledge for the github.com/ivuorinen/everforest-resources repository. It is the authoritative spec for implementation. All instructions SHALL be followed strictly. LLM AGENTS SHALL NOT DEVIATE FROM THE THEME SPEC.
|
||||
|
||||
## 1. Philosophy
|
||||
|
||||
- This repository is the unofficial hub for Everforest resources.
|
||||
- All outputs are generator-first, derived strictly from palettes/everforest.(json|yaml).
|
||||
- Template system: CLI tools use template.txt files with color placeholders (e.g., {{bg}}, {{fg}}, {{red}}) that are replaced by the generator.
|
||||
- CLI tools and prompts use ANSI-16 SGR codes only. No raw hex or 256-color indices.
|
||||
- GUI/editor themes may use hex values but only those emitted by the generator.
|
||||
- Generated artifacts MUST NOT be hand-edited.
|
||||
|
||||
## 2. Theme Variants
|
||||
|
||||
- Variants: dark/light × hard/medium/soft.
|
||||
- If a variant is missing, fallback to medium.
|
||||
- All variants MUST be present for terminals, CLI tools, editors, and web.
|
||||
|
||||
## 3. Repository Layout
|
||||
|
||||
- palettes/: canonical Everforest palette definitions (json/yaml).
|
||||
- scripts/: generator scripts (Node.js, mjs modules).
|
||||
- terminals/: WezTerm, Alacritty, Kitty, Windows Terminal, Ghostty.
|
||||
- web/: CSS vars, demo with Playwright snapshot tests.
|
||||
- cli/: all cli tools and prompts.
|
||||
- editors/: all IDEs and editors.
|
||||
- docs/: CLI.md and other documentation.
|
||||
- verify/: container verifier.
|
||||
- .github/: workflows, CODEOWNERS.
|
||||
|
||||
## 4. CLI Tools
|
||||
|
||||
- LS_COLORS: archives → bold yellow (orange), images → purple, docs → blue.
|
||||
- dircolors: generated alongside LS_COLORS.
|
||||
- eza/exa: export EXA_COLORS/EZA_COLORS.
|
||||
- ripgrep: ripgreprc with ANSI mappings.
|
||||
- fzf: FZF_DEFAULT_OPTS snippet with Everforest accents.
|
||||
- delta: git-delta config with ANSI mapping.
|
||||
- bat: minimal config forwarding to terminal theme.
|
||||
- htop: htoprc with color_scheme=0.
|
||||
- starship: starship.toml with Everforest accent mappings.
|
||||
- zsh: Pure and Powerlevel10k presets.
|
||||
- fish: color schemes, minimal prompt, Tide preset.
|
||||
- tmux: everforest.tmux.conf with ANSI mappings.
|
||||
- btop: modern htop alternative with color customization.
|
||||
- bottom: cross-platform system monitor with color themes.
|
||||
- glances: system monitoring tool with color themes.
|
||||
- neofetch: system information display with color support.
|
||||
- ranger: terminal file manager with color scheme support.
|
||||
- lf: lightweight file manager (ranger alternative).
|
||||
- mc: Midnight Commander with theme support.
|
||||
- lazygit: terminal UI for git with theme support.
|
||||
- gitui: terminal UI for git with color customization.
|
||||
- tig: text-mode git interface with color customization.
|
||||
- fd: find alternative with color output.
|
||||
- jq: JSON processor with syntax highlighting.
|
||||
- less: pager with color support via LESS_TERMCAP.
|
||||
- zoxide: smart cd command with prompt integration.
|
||||
- atuin: shell history with TUI theming.
|
||||
|
||||
## 5. Editors
|
||||
|
||||
- Neovim minimal:
|
||||
- Lua module everforest_minimal.lua.
|
||||
- Accepts setup({ variant, contrast }).
|
||||
- Applies highlights from palette tokens.
|
||||
- VS Code:
|
||||
- Generated themes for all six variants.
|
||||
- package.json scaffold.
|
||||
- Extension can be launched in Dev Host.
|
||||
- JetBrains (unified):
|
||||
- Single .icls theme files for all variants.
|
||||
- Compatible with IntelliJ, WebStorm, PyCharm, CLion, GoLand, PHPStorm, Rider.
|
||||
- Zed:
|
||||
- JSON theme files for all six variants.
|
||||
- Sublime Text:
|
||||
- .sublime-color-scheme files for all six variants.
|
||||
|
||||
## 6. Web
|
||||
|
||||
- CSS vars with media queries.
|
||||
- Playwright snapshots in CI for dark/light × hard/medium/soft.
|
||||
|
||||
## 7. Installer
|
||||
|
||||
- cli/install.sh deploys all configs under ~/.config.
|
||||
- Symlinks or copies files for shells, tools, editors unless file already exists.
|
||||
- If file already exists, check if it is an Everforest config.
|
||||
- If it is, overwrite with new version.
|
||||
- Also loads dircolors automatically if available.
|
||||
|
||||
## 8. Verifier
|
||||
|
||||
- verify/verify.sh builds a Debian container with all cli tools.
|
||||
- Sources and validates all generated configs.
|
||||
- CI job cli-verify runs installer + verifier.
|
||||
|
||||
## 9. CI/CD
|
||||
|
||||
- build: generator + validation.
|
||||
- snapshots: Playwright demo renders, upload PNGs.
|
||||
- commitlint: Conventional Commits enforcement.
|
||||
- cli-verify: install + verify generated configs.
|
||||
- Branch protection requires build + snapshots + commitlint + cli-verify.
|
||||
|
||||
## 10. Contributing
|
||||
|
||||
- Edit only palettes/everforest.(json|yaml) and template.txt files.
|
||||
- Templates use placeholders: {{bg}}, {{fg}}, {{red}}, {{orange}}, {{yellow}}, {{green}}, {{aqua}}, {{blue}}, {{purple}}, {{gray1}}, {{gray2}}, {{gray3}}.
|
||||
- Run npm run generate and commit both palette + template + generated files.
|
||||
- Pre-commit hooks block raw hex and enforce regeneration.
|
||||
- LLM AGENTS SHALL NOT DEVIATE FROM THE THEME SPEC.
|
||||
|
||||
TL;DR (README section)
|
||||
|
||||
1. Edit only palettes and templates.
|
||||
2. Run generate.
|
||||
3. Commit palette + template + generated.
|
||||
4. CI must pass build + snapshots + verify.
|
||||
|
||||
CODEOWNERS
|
||||
|
||||
`* @ivuorinen`
|
||||
|
||||
CONTRIBUTING.md rules
|
||||
|
||||
- Never hardcode hex outside palettes.
|
||||
- Do not hand-edit generated files.
|
||||
- Edit templates using color placeholders only.
|
||||
- Add new targets by extending generator.
|
||||
- Commit style: Conventional Commits.
|
||||
- PR checklist: palette/template edits, regenerated, validated, snapshots included.
|
||||
|
||||
## 11. Makefile
|
||||
|
||||
Convenience targets:
|
||||
generate → npm run generate
|
||||
validate → npm run validate
|
||||
ci → npm run ci
|
||||
install-lscolors → copy LS_COLORS snippet
|
||||
demo → run web demo server
|
||||
snapshots → run Playwright snapshots
|
||||
|
||||
## 12. Docs `docs/CLI.md`
|
||||
|
||||
### Everforest CLI
|
||||
|
||||
Contains overview of terminals, web, CLI tools, prompts, editors.
|
||||
Install with ./cli/install.sh
|
||||
Verify with ENGINE=docker ./verify/verify.sh
|
||||
|
||||
Notes:
|
||||
LLM AGENTS SHALL NOT DEVIATE FROM THE THEME SPEC. Use palettes or ANSI names. No raw hex.
|
||||
|
||||
## 13. Release Checklist
|
||||
|
||||
- Tag version (start v0.1.0).
|
||||
- Ensure build, snapshots, verify all pass.
|
||||
- Package VS Code extension (vsix).
|
||||
- Announce as unofficial Everforest resource hub.
|
||||
|
||||
## 14. Enforcement
|
||||
|
||||
- Indented code blocks MUST be used in all docs.
|
||||
- No triple backticks allowed.
|
||||
- All new contributions MUST follow this spec exactly.
|
||||
155
CLAUDE.md
Normal file
155
CLAUDE.md
Normal file
@@ -0,0 +1,155 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
This is the **everforest-resources** repository - an unofficial hub for Everforest color scheme resources. The project follows a **generator-first** approach where all theme files, configurations, and outputs are generated from canonical palette definitions.
|
||||
|
||||
**Critical Rule**: LLM AGENTS SHALL NOT DEVIATE FROM THE THEME SPEC. All changes must strictly follow the specification in AGENTS.md.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Core Philosophy
|
||||
|
||||
- **Generator-first**: All outputs derive from `palettes/everforest.(json|yaml)`
|
||||
- **Template system**: CLI tools use `template.txt` files with color placeholders (e.g., `{{bg}}`, `{{fg}}`, `{{red}}`) that are replaced by the generator
|
||||
- **No manual edits**: Generated artifacts MUST NOT be hand-edited
|
||||
- **ANSI-only for CLI**: CLI tools use ANSI-16 SGR codes only, never raw hex
|
||||
- **Hex for GUI**: GUI/editor themes may use hex values but only from generator output
|
||||
|
||||
### Repository Structure
|
||||
|
||||
- `palettes/`: Canonical Everforest palette definitions (JSON/YAML)
|
||||
- `scripts/`: Generator scripts (Node.js .mjs modules)
|
||||
- `terminals/`: Terminal configs (WezTerm, Alacritty, Kitty, Windows Terminal, Ghostty)
|
||||
- `web/`: CSS variables and demo with Playwright snapshots
|
||||
- `cli/`: CLI tool configs (LS_COLORS, dircolors, eza, ripgrep, fzf, delta, bat, htop, starship, zsh, fish, tmux, btop, bottom, glances, neofetch, ranger, lf, mc, lazygit, gitui, tig, fd, jq, less, zoxide, atuin)
|
||||
- `editors/`: Editor themes (Neovim minimal Lua, VS Code, JetBrains unified, Zed, Sublime Text)
|
||||
- `docs/`: Documentation (CLI.md)
|
||||
- `verify/`: Container verifier
|
||||
- `.github/`: Workflows and CODEOWNERS
|
||||
|
||||
### Theme Variants
|
||||
|
||||
- Six variants total: dark/light × hard/medium/soft
|
||||
- If variant missing, fallback to medium
|
||||
- All variants MUST be present for terminals, CLI tools, editors, web
|
||||
|
||||
## Development Commands
|
||||
|
||||
Core development commands for the project:
|
||||
|
||||
npm run lint # Check code with Biome linter
|
||||
npm run lint:fix # Auto-fix linting issues with Biome
|
||||
npm run format # Format code with Biome
|
||||
npm run generate # Generate all theme files from palettes
|
||||
npm run validate # Validate generated outputs
|
||||
npm run ci # Run full CI suite (lint + generate + validate + snapshots)
|
||||
npm run snapshots # Generate Playwright snapshots
|
||||
make generate # Alternative to npm run generate
|
||||
make validate # Alternative to npm run validate
|
||||
make ci # Alternative to npm run ci
|
||||
make install-lscolors # Copy LS_COLORS snippet
|
||||
make demo # Run web demo server
|
||||
make snapshots # Run Playwright snapshots
|
||||
|
||||
## Installation and Verification
|
||||
|
||||
./cli/install.sh # Deploy all configs to ~/.config
|
||||
ENGINE=docker ./verify/verify.sh # Verify in container
|
||||
|
||||
## Implementation Guidelines
|
||||
|
||||
### Editing Rules
|
||||
|
||||
1. **Only edit palette and template files**: Changes should only be made to `palettes/everforest.(json|yaml)` and `template.txt` files
|
||||
2. **Template placeholders**: Use `{{bg}}`, `{{fg}}`, `{{red}}`, `{{orange}}`, `{{yellow}}`, `{{green}}`, `{{aqua}}`, `{{blue}}`, `{{purple}}`, `{{gray1}}`, `{{gray2}}`, `{{gray3}}`
|
||||
3. **Never hand-edit outputs**: All generated files are regenerated automatically
|
||||
4. **Run generator after changes**: Always regenerate after palette or template modifications
|
||||
5. **Commit all sources**: Include palette, template, and generated files in commits
|
||||
|
||||
### Code Quality
|
||||
|
||||
- **Biome linting**: All JavaScript code must pass Biome linting and formatting
|
||||
- **Auto-formatting**: Use `npm run format` to ensure consistent code style
|
||||
- **No raw hex in CLI configs**: Use ANSI color names/codes only
|
||||
- **Use indented code blocks**: Never use triple backticks in documentation
|
||||
- **Follow conventional commits**: All commits must follow conventional commit format
|
||||
- **Pre-commit validation**: Pre-commit hooks prevent raw hex and enforce regeneration
|
||||
|
||||
### Generator Architecture
|
||||
|
||||
The main generator (`scripts/generate-themes.mjs`) implements:
|
||||
|
||||
- Palette loader for JSON/YAML
|
||||
- Template processor: reads `template.txt` files and replaces placeholders with palette values
|
||||
- Writers for each target (terminals, CLI tools, editors, web)
|
||||
- Variant generation (all 6 variants where applicable)
|
||||
- ANSI mapping for CLI tools
|
||||
- Hex output for GUI applications
|
||||
|
||||
### CLI Tool Specifications
|
||||
|
||||
- **LS_COLORS**: Archives→bold yellow, images→purple, docs→blue
|
||||
- **ripgrep**: ripgreprc with ANSI mappings
|
||||
- **fzf**: FZF_DEFAULT_OPTS with Everforest accents
|
||||
- **delta**: git-delta config with ANSI mapping
|
||||
- **bat**: Minimal config forwarding to terminal theme
|
||||
- **htop**: htoprc with color_scheme=0
|
||||
- **starship**: starship.toml with accent mappings
|
||||
- **fish**: Color schemes + minimal prompt + Tide preset
|
||||
- **tmux**: everforest.tmux.conf with ANSI mappings
|
||||
- **btop**: Modern htop alternative with extensive color customization
|
||||
- **bottom**: Cross-platform system monitor (Rust) with color themes
|
||||
- **glances**: System monitoring tool with color themes
|
||||
- **neofetch**: System information display with color support
|
||||
- **ranger**: Terminal file manager with color scheme support
|
||||
- **lf**: Lightweight file manager (ranger alternative)
|
||||
- **mc**: Midnight Commander with theme support
|
||||
- **lazygit**: Terminal UI for git with theme support
|
||||
- **gitui**: Terminal UI for git with color customization
|
||||
- **tig**: Text-mode git interface with color customization
|
||||
- **fd**: Find alternative with color output
|
||||
- **jq**: JSON processor with syntax highlighting
|
||||
- **less**: Pager with color support via LESS_TERMCAP
|
||||
- **zoxide**: Smart cd command with prompt integration
|
||||
- **atuin**: Shell history with TUI theming
|
||||
|
||||
## CI/CD Pipeline
|
||||
|
||||
Required checks (all must pass for merge):
|
||||
|
||||
- **lint**: Biome linting and formatting checks
|
||||
- **build**: Generator + validation
|
||||
- **snapshots**: Playwright demo renders
|
||||
- **commitlint**: Conventional Commits enforcement
|
||||
- **cli-verify**: Install + verify generated configs
|
||||
|
||||
## Contributing Workflow
|
||||
|
||||
1. Edit only `palettes/everforest.(json|yaml)` and `template.txt` files
|
||||
2. Use template placeholders: `{{bg}}`, `{{fg}}`, `{{red}}`, `{{orange}}`, `{{yellow}}`, `{{green}}`, `{{aqua}}`, `{{blue}}`, `{{purple}}`, `{{gray1}}`, `{{gray2}}`, `{{gray3}}`
|
||||
3. Lint and format code: `npm run lint:fix && npm run format`
|
||||
4. Run `npm run generate` (when implemented)
|
||||
5. Commit palette + template + generated files
|
||||
6. Ensure all CI checks pass
|
||||
7. Follow conventional commit format
|
||||
|
||||
## Documentation Rules
|
||||
|
||||
- **Indented code blocks only**: Never use triple backticks (```)
|
||||
- **Examples use 4-space indentation**
|
||||
- **Generator-derived content**: Don't document what can be discovered from files
|
||||
- **Focus on architecture**: Document high-level patterns requiring multiple files to understand
|
||||
|
||||
## Current Status
|
||||
|
||||
The repository is in initial development phase:
|
||||
- ✅ Palette definitions created
|
||||
- ✅ Comprehensive specification written
|
||||
- ⏳ Generator implementation pending
|
||||
- ⏳ File structure creation pending
|
||||
- ⏳ CI/CD setup pending
|
||||
|
||||
Follow the implementation steps in `meta/implementation-steps.md` for systematic development.
|
||||
49
README.md
Normal file
49
README.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# Everforest Resources
|
||||
|
||||
Unofficial hub for Everforest color scheme resources. Generator-first approach for terminals, CLI tools, editors, and web.
|
||||
|
||||
## Quick Start
|
||||
|
||||
# Generate all themes
|
||||
npm run generate
|
||||
|
||||
# Install CLI configurations
|
||||
./cli/install.sh
|
||||
|
||||
# Verify installation
|
||||
ENGINE=docker ./verify/verify.sh
|
||||
|
||||
## Supported Tools
|
||||
|
||||
### Terminals
|
||||
WezTerm, Alacritty, Kitty, Windows Terminal, Ghostty
|
||||
|
||||
### CLI Tools
|
||||
Starship, FZF, Delta, Tmux, Fish, LS_COLORS, and 20+ more
|
||||
|
||||
### Editors
|
||||
Neovim, VS Code, JetBrains IDEs, Zed, Sublime Text
|
||||
|
||||
## Theme Variants
|
||||
|
||||
6 variants total: dark/light × hard/medium/soft
|
||||
|
||||
## Development
|
||||
|
||||
npm run lint # Lint code
|
||||
npm run generate # Generate themes
|
||||
npm run validate # Validate outputs
|
||||
npm run ci # Full CI pipeline
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Edit only `palettes/everforest.json` and `template.txt` files
|
||||
2. Run `npm run generate`
|
||||
3. Commit palette + template + generated files
|
||||
4. Follow conventional commits
|
||||
|
||||
**Important**: Never edit generated files directly. All outputs are generated from templates.
|
||||
|
||||
## CI Requirements
|
||||
|
||||
All checks must pass: lint + build + snapshots + commitlint + cli-verify
|
||||
54
biome.json
Normal file
54
biome.json
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"$schema": "https://biomejs.dev/schemas/2.2.3/schema.json",
|
||||
"linter": {
|
||||
"enabled": true,
|
||||
"rules": {
|
||||
"recommended": true,
|
||||
"style": {
|
||||
"noNonNullAssertion": "off",
|
||||
"useConst": "error",
|
||||
"useBlockStatements": "error"
|
||||
},
|
||||
"correctness": {
|
||||
"noUnusedVariables": "error",
|
||||
"useExhaustiveDependencies": "off"
|
||||
},
|
||||
"suspicious": {
|
||||
"noExplicitAny": "warn",
|
||||
"noArrayIndexKey": "off",
|
||||
"useIterableCallbackReturn": "off"
|
||||
},
|
||||
"complexity": {
|
||||
"noForEach": "off",
|
||||
"useLiteralKeys": "off"
|
||||
}
|
||||
}
|
||||
},
|
||||
"formatter": {
|
||||
"enabled": true,
|
||||
"formatWithErrors": false,
|
||||
"indentStyle": "space",
|
||||
"indentWidth": 2,
|
||||
"lineWidth": 100,
|
||||
"lineEnding": "lf"
|
||||
},
|
||||
"javascript": {
|
||||
"formatter": {
|
||||
"quoteStyle": "single",
|
||||
"jsxQuoteStyle": "double",
|
||||
"trailingCommas": "es5",
|
||||
"semicolons": "always",
|
||||
"arrowParentheses": "asNeeded"
|
||||
}
|
||||
},
|
||||
"json": {
|
||||
"formatter": {
|
||||
"enabled": true,
|
||||
"indentWidth": 2
|
||||
}
|
||||
},
|
||||
"files": {
|
||||
"includes": ["scripts/**/*.mjs", "scripts/**/*.js", "*.json", "*.mjs", "*.js"],
|
||||
"ignoreUnknown": false
|
||||
}
|
||||
}
|
||||
22
cli/delta/gitconfig.delta
Normal file
22
cli/delta/gitconfig.delta
Normal file
@@ -0,0 +1,22 @@
|
||||
# Everforest theme for git-delta
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
[delta]
|
||||
syntax-theme = none
|
||||
file-style = bold
|
||||
file-decoration-style = none
|
||||
hunk-header-decoration-style = cyan box ul
|
||||
line-numbers = true
|
||||
line-numbers-left-style = cyan
|
||||
line-numbers-right-style = cyan
|
||||
line-numbers-minus-style = red
|
||||
line-numbers-plus-style = green
|
||||
line-numbers-zero-style = "##b3c0b0"
|
||||
minus-style = syntax "##e67e80"
|
||||
minus-emph-style = syntax "##e67e80"
|
||||
plus-style = syntax "##a7c080"
|
||||
plus-emph-style = syntax "##a7c080"
|
||||
zero-style = syntax
|
||||
blame-code-style = syntax
|
||||
blame-format = "{author:<18} ({commit:>8}) {timestamp:^16} "
|
||||
blame-palette = "##a6b0a0" "##b3c0b0" "##c0cdb8"
|
||||
22
cli/delta/template.txt
Normal file
22
cli/delta/template.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
# Everforest theme for git-delta
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
[delta]
|
||||
syntax-theme = none
|
||||
file-style = bold
|
||||
file-decoration-style = none
|
||||
hunk-header-decoration-style = cyan box ul
|
||||
line-numbers = true
|
||||
line-numbers-left-style = cyan
|
||||
line-numbers-right-style = cyan
|
||||
line-numbers-minus-style = red
|
||||
line-numbers-plus-style = green
|
||||
line-numbers-zero-style = "#{{gray2}}"
|
||||
minus-style = syntax "#{{red}}"
|
||||
minus-emph-style = syntax "#{{red}}"
|
||||
plus-style = syntax "#{{green}}"
|
||||
plus-emph-style = syntax "#{{green}}"
|
||||
zero-style = syntax
|
||||
blame-code-style = syntax
|
||||
blame-format = "{author:<18} ({commit:>8}) {timestamp:^16} "
|
||||
blame-palette = "#{{gray1}}" "#{{gray2}}" "#{{gray3}}"
|
||||
24
cli/fish/colors-template.txt
Normal file
24
cli/fish/colors-template.txt
Normal file
@@ -0,0 +1,24 @@
|
||||
# Everforest color scheme for fish shell
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
# Set fish colors
|
||||
set -U fish_color_normal {{fg}}
|
||||
set -U fish_color_command {{blue}}
|
||||
set -U fish_color_keyword {{purple}}
|
||||
set -U fish_color_quote {{yellow}}
|
||||
set -U fish_color_redirection {{aqua}}
|
||||
set -U fish_color_end {{orange}}
|
||||
set -U fish_color_error {{red}}
|
||||
set -U fish_color_param {{fg}}
|
||||
set -U fish_color_comment {{gray1}}
|
||||
set -U fish_color_selection --background={{bg1}}
|
||||
set -U fish_color_search_match --background={{bg1}}
|
||||
set -U fish_color_operator {{green}}
|
||||
set -U fish_color_escape {{purple}}
|
||||
set -U fish_color_autosuggestion {{gray2}}
|
||||
|
||||
# Set fish pager colors
|
||||
set -U fish_pager_color_progress {{gray3}}
|
||||
set -U fish_pager_color_prefix {{blue}}
|
||||
set -U fish_pager_color_completion {{fg}}
|
||||
set -U fish_pager_color_description {{gray2}}
|
||||
24
cli/fish/everforest-dark-hard.fish
Normal file
24
cli/fish/everforest-dark-hard.fish
Normal file
@@ -0,0 +1,24 @@
|
||||
# Everforest color scheme for fish shell
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
# Set fish colors
|
||||
set -U fish_color_normal #d3c6aa
|
||||
set -U fish_color_command #7fbbb3
|
||||
set -U fish_color_keyword #d699b6
|
||||
set -U fish_color_quote #dbbc7f
|
||||
set -U fish_color_redirection #83c092
|
||||
set -U fish_color_end #e69875
|
||||
set -U fish_color_error #e67e80
|
||||
set -U fish_color_param #d3c6aa
|
||||
set -U fish_color_comment #7a8478
|
||||
set -U fish_color_selection --background=#323c41
|
||||
set -U fish_color_search_match --background=#323c41
|
||||
set -U fish_color_operator #a7c080
|
||||
set -U fish_color_escape #d699b6
|
||||
set -U fish_color_autosuggestion #859289
|
||||
|
||||
# Set fish pager colors
|
||||
set -U fish_pager_color_progress #9da9a0
|
||||
set -U fish_pager_color_prefix #7fbbb3
|
||||
set -U fish_pager_color_completion #d3c6aa
|
||||
set -U fish_pager_color_description #859289
|
||||
24
cli/fish/everforest-dark-medium.fish
Normal file
24
cli/fish/everforest-dark-medium.fish
Normal file
@@ -0,0 +1,24 @@
|
||||
# Everforest color scheme for fish shell
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
# Set fish colors
|
||||
set -U fish_color_normal #d3c6aa
|
||||
set -U fish_color_command #7fbbb3
|
||||
set -U fish_color_keyword #d699b6
|
||||
set -U fish_color_quote #dbbc7f
|
||||
set -U fish_color_redirection #83c092
|
||||
set -U fish_color_end #e69875
|
||||
set -U fish_color_error #e67e80
|
||||
set -U fish_color_param #d3c6aa
|
||||
set -U fish_color_comment #7a8478
|
||||
set -U fish_color_selection --background=#374247
|
||||
set -U fish_color_search_match --background=#374247
|
||||
set -U fish_color_operator #a7c080
|
||||
set -U fish_color_escape #d699b6
|
||||
set -U fish_color_autosuggestion #859289
|
||||
|
||||
# Set fish pager colors
|
||||
set -U fish_pager_color_progress #9da9a0
|
||||
set -U fish_pager_color_prefix #7fbbb3
|
||||
set -U fish_pager_color_completion #d3c6aa
|
||||
set -U fish_pager_color_description #859289
|
||||
24
cli/fish/everforest-dark-soft.fish
Normal file
24
cli/fish/everforest-dark-soft.fish
Normal file
@@ -0,0 +1,24 @@
|
||||
# Everforest color scheme for fish shell
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
# Set fish colors
|
||||
set -U fish_color_normal #d3c6aa
|
||||
set -U fish_color_command #7fbbb3
|
||||
set -U fish_color_keyword #d699b6
|
||||
set -U fish_color_quote #dbbc7f
|
||||
set -U fish_color_redirection #83c092
|
||||
set -U fish_color_end #e69875
|
||||
set -U fish_color_error #e67e80
|
||||
set -U fish_color_param #d3c6aa
|
||||
set -U fish_color_comment #7a8478
|
||||
set -U fish_color_selection --background=#3a464c
|
||||
set -U fish_color_search_match --background=#3a464c
|
||||
set -U fish_color_operator #a7c080
|
||||
set -U fish_color_escape #d699b6
|
||||
set -U fish_color_autosuggestion #859289
|
||||
|
||||
# Set fish pager colors
|
||||
set -U fish_pager_color_progress #9da9a0
|
||||
set -U fish_pager_color_prefix #7fbbb3
|
||||
set -U fish_pager_color_completion #d3c6aa
|
||||
set -U fish_pager_color_description #859289
|
||||
24
cli/fish/everforest-light-hard.fish
Normal file
24
cli/fish/everforest-light-hard.fish
Normal file
@@ -0,0 +1,24 @@
|
||||
# Everforest color scheme for fish shell
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
# Set fish colors
|
||||
set -U fish_color_normal #5c6a72
|
||||
set -U fish_color_command #7fbbb3
|
||||
set -U fish_color_keyword #d699b6
|
||||
set -U fish_color_quote #dbbc7f
|
||||
set -U fish_color_redirection #83c092
|
||||
set -U fish_color_end #e69875
|
||||
set -U fish_color_error #e67e80
|
||||
set -U fish_color_param #5c6a72
|
||||
set -U fish_color_comment #a6b0a0
|
||||
set -U fish_color_selection --background=#f4f0d9
|
||||
set -U fish_color_search_match --background=#f4f0d9
|
||||
set -U fish_color_operator #a7c080
|
||||
set -U fish_color_escape #d699b6
|
||||
set -U fish_color_autosuggestion #b3c0b0
|
||||
|
||||
# Set fish pager colors
|
||||
set -U fish_pager_color_progress #c0cdb8
|
||||
set -U fish_pager_color_prefix #7fbbb3
|
||||
set -U fish_pager_color_completion #5c6a72
|
||||
set -U fish_pager_color_description #b3c0b0
|
||||
24
cli/fish/everforest-light-medium.fish
Normal file
24
cli/fish/everforest-light-medium.fish
Normal file
@@ -0,0 +1,24 @@
|
||||
# Everforest color scheme for fish shell
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
# Set fish colors
|
||||
set -U fish_color_normal #5c6a72
|
||||
set -U fish_color_command #7fbbb3
|
||||
set -U fish_color_keyword #d699b6
|
||||
set -U fish_color_quote #dbbc7f
|
||||
set -U fish_color_redirection #83c092
|
||||
set -U fish_color_end #e69875
|
||||
set -U fish_color_error #e67e80
|
||||
set -U fish_color_param #5c6a72
|
||||
set -U fish_color_comment #a6b0a0
|
||||
set -U fish_color_selection --background=#ede6cf
|
||||
set -U fish_color_search_match --background=#ede6cf
|
||||
set -U fish_color_operator #a7c080
|
||||
set -U fish_color_escape #d699b6
|
||||
set -U fish_color_autosuggestion #b3c0b0
|
||||
|
||||
# Set fish pager colors
|
||||
set -U fish_pager_color_progress #c0cdb8
|
||||
set -U fish_pager_color_prefix #7fbbb3
|
||||
set -U fish_pager_color_completion #5c6a72
|
||||
set -U fish_pager_color_description #b3c0b0
|
||||
24
cli/fish/everforest-light-soft.fish
Normal file
24
cli/fish/everforest-light-soft.fish
Normal file
@@ -0,0 +1,24 @@
|
||||
# Everforest color scheme for fish shell
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
# Set fish colors
|
||||
set -U fish_color_normal #5c6a72
|
||||
set -U fish_color_command #7fbbb3
|
||||
set -U fish_color_keyword #d699b6
|
||||
set -U fish_color_quote #dbbc7f
|
||||
set -U fish_color_redirection #83c092
|
||||
set -U fish_color_end #e69875
|
||||
set -U fish_color_error #e67e80
|
||||
set -U fish_color_param #5c6a72
|
||||
set -U fish_color_comment #a6b0a0
|
||||
set -U fish_color_selection --background=#e9e1cc
|
||||
set -U fish_color_search_match --background=#e9e1cc
|
||||
set -U fish_color_operator #a7c080
|
||||
set -U fish_color_escape #d699b6
|
||||
set -U fish_color_autosuggestion #b3c0b0
|
||||
|
||||
# Set fish pager colors
|
||||
set -U fish_pager_color_progress #c0cdb8
|
||||
set -U fish_pager_color_prefix #7fbbb3
|
||||
set -U fish_pager_color_completion #5c6a72
|
||||
set -U fish_pager_color_description #b3c0b0
|
||||
14
cli/fzf/README.md
Normal file
14
cli/fzf/README.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# FZF Everforest Theme
|
||||
|
||||
This directory contains the Everforest theme for fzf fuzzy finder.
|
||||
|
||||
## Installation
|
||||
|
||||
# Source the theme in your shell rc file
|
||||
source ~/.config/fzf/everforest.sh
|
||||
|
||||
## Generated Files
|
||||
|
||||
- `everforest.sh` - Shell script with FZF_DEFAULT_OPTS export
|
||||
|
||||
All files are generated from `template.txt` - do not edit the generated files directly.
|
||||
7
cli/fzf/everforest.sh
Normal file
7
cli/fzf/everforest.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
# Everforest theme for fzf
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
export FZF_DEFAULT_OPTS=" \
|
||||
--color=bg+:##e9e1cc,bg:##f0e5cf,spinner:##83c092,hl:##a7c080 \
|
||||
--color=fg:##5c6a72,header:##a7c080,info:##dbbc7f,pointer:##83c092 \
|
||||
--color=marker:##83c092,fg+:##5c6a72,prompt:##dbbc7f,hl+:##a7c080"
|
||||
7
cli/fzf/template.txt
Normal file
7
cli/fzf/template.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
# Everforest theme for fzf
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
export FZF_DEFAULT_OPTS=" \
|
||||
--color=bg+:#{{bg1}},bg:#{{bg}},spinner:#{{aqua}},hl:#{{green}} \
|
||||
--color=fg:#{{fg}},header:#{{green}},info:#{{yellow}},pointer:#{{aqua}} \
|
||||
--color=marker:#{{aqua}},fg+:#{{fg}},prompt:#{{yellow}},hl+:#{{green}}"
|
||||
59
cli/install.sh
Executable file
59
cli/install.sh
Executable file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Everforest Resources Installer
|
||||
# Installs all CLI tool configurations to ~/.config
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
CONFIG_DIR="${HOME}/.config"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
echo "🎨 Installing Everforest CLI configurations..."
|
||||
|
||||
# Create config directories
|
||||
mkdir -p "${CONFIG_DIR}/starship"
|
||||
mkdir -p "${CONFIG_DIR}/fzf"
|
||||
mkdir -p "${CONFIG_DIR}/git"
|
||||
mkdir -p "${CONFIG_DIR}/fish"
|
||||
mkdir -p "${CONFIG_DIR}/tmux"
|
||||
|
||||
# Install configurations
|
||||
install_config() {
|
||||
local tool="$1"
|
||||
local file="$2"
|
||||
local target="$3"
|
||||
|
||||
if [[ -f "${SCRIPT_DIR}/${tool}/${file}" ]]; then
|
||||
echo "📝 Installing ${tool}/${file} -> ${target}"
|
||||
cp "${SCRIPT_DIR}/${tool}/${file}" "${target}"
|
||||
else
|
||||
echo "⚠️ Warning: ${tool}/${file} not found (may not be generated yet)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Install tool configurations
|
||||
install_config "starship" "starship.toml" "${CONFIG_DIR}/starship/starship.toml"
|
||||
install_config "fzf" "everforest.sh" "${CONFIG_DIR}/fzf/everforest.sh"
|
||||
install_config "delta" "gitconfig.delta" "${CONFIG_DIR}/git/everforest-delta"
|
||||
install_config "tmux" "everforest.tmux.conf" "${CONFIG_DIR}/tmux/everforest.conf"
|
||||
|
||||
# Install fish colors (all variants)
|
||||
for variant in dark-hard dark-medium dark-soft light-hard light-medium light-soft; do
|
||||
install_config "fish" "everforest-${variant}.fish" "${CONFIG_DIR}/fish/conf.d/everforest-${variant}.fish"
|
||||
done
|
||||
|
||||
# Install LS_COLORS
|
||||
if [[ -f "${SCRIPT_DIR}/ls_colors/everforest.sh" ]]; then
|
||||
echo "📝 Installing LS_COLORS"
|
||||
mkdir -p "${CONFIG_DIR}/dircolors"
|
||||
cp "${SCRIPT_DIR}/ls_colors/everforest.sh" "${CONFIG_DIR}/dircolors/everforest.sh"
|
||||
cp "${SCRIPT_DIR}/ls_colors/dircolors" "${CONFIG_DIR}/dircolors/everforest"
|
||||
fi
|
||||
|
||||
echo "✅ Installation complete!"
|
||||
echo ""
|
||||
echo "To use the themes:"
|
||||
echo " - Starship: export STARSHIP_CONFIG=~/.config/starship/starship.toml"
|
||||
echo " - FZF: source ~/.config/fzf/everforest.sh"
|
||||
echo " - LS_COLORS: source ~/.config/dircolors/everforest.sh"
|
||||
echo " - Fish: restart fish or run 'exec fish'"
|
||||
5
cli/ls_colors/everforest.sh
Normal file
5
cli/ls_colors/everforest.sh
Normal file
@@ -0,0 +1,5 @@
|
||||
# Everforest LS_COLORS configuration
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
# Main LS_COLORS export
|
||||
export LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:"
|
||||
5
cli/ls_colors/template.txt
Normal file
5
cli/ls_colors/template.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
# Everforest LS_COLORS configuration
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
# Main LS_COLORS export
|
||||
export LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:"
|
||||
14
cli/starship/README.md
Normal file
14
cli/starship/README.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# Starship Everforest Theme
|
||||
|
||||
This directory contains the Everforest theme for Starship prompt.
|
||||
|
||||
## Installation
|
||||
|
||||
# Copy the generated theme to your starship config
|
||||
cp starship.toml ~/.config/starship.toml
|
||||
|
||||
## Generated Files
|
||||
|
||||
- `starship.toml` - Starship configuration with Everforest colors
|
||||
|
||||
All files are generated from `template.txt` - do not edit the generated files directly.
|
||||
63
cli/starship/starship.toml
Normal file
63
cli/starship/starship.toml
Normal file
@@ -0,0 +1,63 @@
|
||||
# Everforest theme for Starship
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
format = """
|
||||
[](##e9e1cc)\
|
||||
$username\
|
||||
[](bg:##e4dfc8 fg:##e9e1cc)\
|
||||
$directory\
|
||||
[](fg:##e4dfc8 bg:##f0e5cf)\
|
||||
$git_branch\
|
||||
$git_status\
|
||||
[](fg:##f0e5cf bg:##e9e1cc)\
|
||||
$nodejs\
|
||||
$rust\
|
||||
$golang\
|
||||
$php\
|
||||
[](fg:##e9e1cc)\
|
||||
"""
|
||||
|
||||
# Disable the blank line at the start of the prompt
|
||||
add_newline = false
|
||||
|
||||
[username]
|
||||
show_always = true
|
||||
style_user = "bg:##e9e1cc fg:##5c6a72"
|
||||
style_root = "bg:##e9e1cc fg:##e67e80"
|
||||
format = '[$user ]($style)'
|
||||
disabled = false
|
||||
|
||||
[directory]
|
||||
style = "bg:##e4dfc8 fg:##7fbbb3"
|
||||
format = "[ $path ]($style)"
|
||||
truncation_length = 3
|
||||
truncation_symbol = "…/"
|
||||
|
||||
[git_branch]
|
||||
symbol = ""
|
||||
style = "bg:##f0e5cf fg:##a7c080"
|
||||
format = '[ $symbol $branch ]($style)'
|
||||
|
||||
[git_status]
|
||||
style = "bg:##f0e5cf fg:##e67e80"
|
||||
format = '[$all_status$ahead_behind ]($style)'
|
||||
|
||||
[nodejs]
|
||||
symbol = ""
|
||||
style = "bg:##e9e1cc fg:##dbbc7f"
|
||||
format = '[ $symbol ($version) ]($style)'
|
||||
|
||||
[rust]
|
||||
symbol = ""
|
||||
style = "bg:##e9e1cc fg:##e69875"
|
||||
format = '[ $symbol ($version) ]($style)'
|
||||
|
||||
[golang]
|
||||
symbol = ""
|
||||
style = "bg:##e9e1cc fg:##83c092"
|
||||
format = '[ $symbol ($version) ]($style)'
|
||||
|
||||
[php]
|
||||
symbol = ""
|
||||
style = "bg:##e9e1cc fg:##d699b6"
|
||||
format = '[ $symbol ($version) ]($style)'
|
||||
63
cli/starship/template.txt
Normal file
63
cli/starship/template.txt
Normal file
@@ -0,0 +1,63 @@
|
||||
# Everforest theme for Starship
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
format = """
|
||||
[](#{{bg1}})\
|
||||
$username\
|
||||
[](bg:#{{bg2}} fg:#{{bg1}})\
|
||||
$directory\
|
||||
[](fg:#{{bg2}} bg:#{{bg}})\
|
||||
$git_branch\
|
||||
$git_status\
|
||||
[](fg:#{{bg}} bg:#{{bg1}})\
|
||||
$nodejs\
|
||||
$rust\
|
||||
$golang\
|
||||
$php\
|
||||
[](fg:#{{bg1}})\
|
||||
"""
|
||||
|
||||
# Disable the blank line at the start of the prompt
|
||||
add_newline = false
|
||||
|
||||
[username]
|
||||
show_always = true
|
||||
style_user = "bg:#{{bg1}} fg:#{{fg}}"
|
||||
style_root = "bg:#{{bg1}} fg:#{{red}}"
|
||||
format = '[$user ]($style)'
|
||||
disabled = false
|
||||
|
||||
[directory]
|
||||
style = "bg:#{{bg2}} fg:#{{blue}}"
|
||||
format = "[ $path ]($style)"
|
||||
truncation_length = 3
|
||||
truncation_symbol = "…/"
|
||||
|
||||
[git_branch]
|
||||
symbol = ""
|
||||
style = "bg:#{{bg}} fg:#{{green}}"
|
||||
format = '[ $symbol $branch ]($style)'
|
||||
|
||||
[git_status]
|
||||
style = "bg:#{{bg}} fg:#{{red}}"
|
||||
format = '[$all_status$ahead_behind ]($style)'
|
||||
|
||||
[nodejs]
|
||||
symbol = ""
|
||||
style = "bg:#{{bg1}} fg:#{{yellow}}"
|
||||
format = '[ $symbol ($version) ]($style)'
|
||||
|
||||
[rust]
|
||||
symbol = ""
|
||||
style = "bg:#{{bg1}} fg:#{{orange}}"
|
||||
format = '[ $symbol ($version) ]($style)'
|
||||
|
||||
[golang]
|
||||
symbol = ""
|
||||
style = "bg:#{{bg1}} fg:#{{aqua}}"
|
||||
format = '[ $symbol ($version) ]($style)'
|
||||
|
||||
[php]
|
||||
symbol = ""
|
||||
style = "bg:#{{bg1}} fg:#{{purple}}"
|
||||
format = '[ $symbol ($version) ]($style)'
|
||||
31
cli/tmux/everforest.tmux.conf
Normal file
31
cli/tmux/everforest.tmux.conf
Normal file
@@ -0,0 +1,31 @@
|
||||
# Everforest theme for tmux
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
# Basic color scheme
|
||||
set -g default-terminal "screen-256color"
|
||||
|
||||
# Window tabs
|
||||
set -g window-status-current-style "fg=#5c6a72,bg=#e9e1cc"
|
||||
set -g window-status-style "fg=#b3c0b0,bg=#f0e5cf"
|
||||
set -g window-status-activity-style "fg=#dbbc7f,bg=#f0e5cf"
|
||||
|
||||
# Pane borders
|
||||
set -g pane-active-border-style "fg=#a7c080"
|
||||
set -g pane-border-style "fg=#a6b0a0"
|
||||
|
||||
# Status line
|
||||
set -g status-style "fg=#5c6a72,bg=#f0e5cf"
|
||||
set -g status-left-style "fg=#5c6a72,bg=#e9e1cc"
|
||||
set -g status-right-style "fg=#5c6a72,bg=#e9e1cc"
|
||||
|
||||
# Messages
|
||||
set -g message-style "fg=#5c6a72,bg=#e9e1cc"
|
||||
set -g message-command-style "fg=#5c6a72,bg=#e9e1cc"
|
||||
|
||||
# Status bar content
|
||||
set -g status-left "#[fg=#a7c080]#S #[default]"
|
||||
set -g status-right "#[fg=#7fbbb3]%H:%M #[fg=#dbbc7f]%d-%b-%y"
|
||||
|
||||
# Window list
|
||||
set -g window-status-format " #I:#W "
|
||||
set -g window-status-current-format " #[fg=#f0e5cf,bg=#a7c080] #I:#W #[default]"
|
||||
31
cli/tmux/template.txt
Normal file
31
cli/tmux/template.txt
Normal file
@@ -0,0 +1,31 @@
|
||||
# Everforest theme for tmux
|
||||
# Generated from template - do not edit manually
|
||||
|
||||
# Basic color scheme
|
||||
set -g default-terminal "screen-256color"
|
||||
|
||||
# Window tabs
|
||||
set -g window-status-current-style "fg={{fg}},bg={{bg1}}"
|
||||
set -g window-status-style "fg={{gray2}},bg={{bg}}"
|
||||
set -g window-status-activity-style "fg={{yellow}},bg={{bg}}"
|
||||
|
||||
# Pane borders
|
||||
set -g pane-active-border-style "fg={{green}}"
|
||||
set -g pane-border-style "fg={{gray1}}"
|
||||
|
||||
# Status line
|
||||
set -g status-style "fg={{fg}},bg={{bg}}"
|
||||
set -g status-left-style "fg={{fg}},bg={{bg1}}"
|
||||
set -g status-right-style "fg={{fg}},bg={{bg1}}"
|
||||
|
||||
# Messages
|
||||
set -g message-style "fg={{fg}},bg={{bg1}}"
|
||||
set -g message-command-style "fg={{fg}},bg={{bg1}}"
|
||||
|
||||
# Status bar content
|
||||
set -g status-left "#[fg={{green}}]#S #[default]"
|
||||
set -g status-right "#[fg={{blue}}]%H:%M #[fg={{yellow}}]%d-%b-%y"
|
||||
|
||||
# Window list
|
||||
set -g window-status-format " #I:#W "
|
||||
set -g window-status-current-format " #[fg={{bg}},bg={{green}}] #I:#W #[default]"
|
||||
25
commitlint.config.js
Normal file
25
commitlint.config.js
Normal file
@@ -0,0 +1,25 @@
|
||||
export default {
|
||||
extends: ['@commitlint/config-conventional'],
|
||||
rules: {
|
||||
'type-enum': [
|
||||
2,
|
||||
'always',
|
||||
[
|
||||
'feat',
|
||||
'fix',
|
||||
'docs',
|
||||
'style',
|
||||
'refactor',
|
||||
'perf',
|
||||
'test',
|
||||
'build',
|
||||
'ci',
|
||||
'chore',
|
||||
'revert',
|
||||
],
|
||||
],
|
||||
'subject-case': [2, 'never', ['pascal-case', 'upper-case']],
|
||||
'subject-max-length': [2, 'always', 72],
|
||||
'body-max-line-length': [2, 'always', 100],
|
||||
},
|
||||
};
|
||||
54
docs/CLI.md
Normal file
54
docs/CLI.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# Everforest CLI
|
||||
|
||||
Command-line tools and terminal configurations for the Everforest color scheme.
|
||||
|
||||
## Installation
|
||||
|
||||
./cli/install.sh
|
||||
|
||||
This installs configurations for all supported CLI tools to `~/.config`.
|
||||
|
||||
## Supported Tools
|
||||
|
||||
### Shell & Terminal
|
||||
- **Starship**: Cross-shell prompt with Everforest colors
|
||||
- **Fish**: Shell colors and prompt themes
|
||||
- **Tmux**: Terminal multiplexer theme
|
||||
- **LS_COLORS**: Directory colors for `ls` and file managers
|
||||
|
||||
### Development Tools
|
||||
- **FZF**: Fuzzy finder with Everforest colors
|
||||
- **Delta**: Git diff viewer theme
|
||||
- **Ripgrep**: Search tool colors
|
||||
- **Bat**: Syntax highlighter theme
|
||||
|
||||
### System Tools
|
||||
- **Htop**: System monitor colors
|
||||
- **Btop**: Modern system monitor theme
|
||||
|
||||
## Usage Examples
|
||||
|
||||
After installation:
|
||||
|
||||
# Set Starship theme
|
||||
export STARSHIP_CONFIG=~/.config/starship/starship.toml
|
||||
|
||||
# Load FZF colors
|
||||
source ~/.config/fzf/everforest.sh
|
||||
|
||||
# Load LS_COLORS
|
||||
source ~/.config/dircolors/everforest.sh
|
||||
|
||||
## Verification
|
||||
|
||||
ENGINE=docker ./verify/verify.sh
|
||||
|
||||
Tests all configurations in a clean container environment.
|
||||
|
||||
## Theme Variants
|
||||
|
||||
Each tool supports 6 variants:
|
||||
- `dark-hard`, `dark-medium`, `dark-soft`
|
||||
- `light-hard`, `light-medium`, `light-soft`
|
||||
|
||||
Default is `medium` contrast.
|
||||
253
meta/filetree.md
Normal file
253
meta/filetree.md
Normal file
@@ -0,0 +1,253 @@
|
||||
# Everforest Resources — File Tree
|
||||
|
||||
This file tree lists all directories and filenames defined in the consolidated spec. It represents the canonical layout of the github.com/ivuorinen/everforest-resources repository.
|
||||
|
||||
## Root
|
||||
|
||||
README.md
|
||||
CONTRIBUTING.md
|
||||
Makefile
|
||||
package.json
|
||||
commitlint.config.js
|
||||
|
||||
## Palettes
|
||||
|
||||
palettes/
|
||||
everforest.json
|
||||
everforest.yaml
|
||||
|
||||
## Scripts
|
||||
|
||||
scripts/
|
||||
generate-themes.mjs
|
||||
|
||||
## Terminals
|
||||
|
||||
terminals/
|
||||
wezterm/
|
||||
everforest-dark-hard.toml
|
||||
everforest-dark-medium.toml
|
||||
everforest-dark-soft.toml
|
||||
everforest-light-hard.toml
|
||||
everforest-light-medium.toml
|
||||
everforest-light-soft.toml
|
||||
alacritty/
|
||||
everforest-dark-hard.yml
|
||||
everforest-dark-medium.yml
|
||||
everforest-dark-soft.yml
|
||||
everforest-light-hard.yml
|
||||
everforest-light-medium.yml
|
||||
everforest-light-soft.yml
|
||||
kitty/
|
||||
everforest-dark-hard.conf
|
||||
everforest-dark-medium.conf
|
||||
everforest-dark-soft.conf
|
||||
everforest-light-hard.conf
|
||||
everforest-light-medium.conf
|
||||
everforest-light-soft.conf
|
||||
ghostty/
|
||||
everforest-dark-hard.conf
|
||||
everforest-dark-medium.conf
|
||||
everforest-dark-soft.conf
|
||||
everforest-light-hard.conf
|
||||
everforest-light-medium.conf
|
||||
everforest-light-soft.conf
|
||||
windows-terminal/
|
||||
everforest-dark-hard.json
|
||||
everforest-dark-medium.json
|
||||
everforest-dark-soft.json
|
||||
everforest-light-hard.json
|
||||
everforest-light-medium.json
|
||||
everforest-light-soft.json
|
||||
|
||||
## Web
|
||||
|
||||
web/
|
||||
css/
|
||||
everforest.css
|
||||
demo/
|
||||
index.html
|
||||
style.css
|
||||
demo.js
|
||||
|
||||
## CLI
|
||||
|
||||
cli/
|
||||
ls_colors/
|
||||
template.txt
|
||||
everforest.sh
|
||||
dircolors
|
||||
README.md
|
||||
eza/
|
||||
template.txt
|
||||
everforest.sh
|
||||
README.md
|
||||
htop/
|
||||
template.txt
|
||||
htoprc.everforest
|
||||
README.md
|
||||
ripgrep/
|
||||
template.txt
|
||||
ripgreprc
|
||||
README.md
|
||||
fzf/
|
||||
template.txt
|
||||
everforest.sh
|
||||
README.md
|
||||
delta/
|
||||
template.txt
|
||||
gitconfig.delta
|
||||
README.md
|
||||
bat/
|
||||
template.txt
|
||||
bat.conf
|
||||
README.md
|
||||
starship/
|
||||
template.txt
|
||||
starship.toml
|
||||
README.md
|
||||
zsh/
|
||||
pure-template.txt
|
||||
p10k-template.txt
|
||||
pure.zsh
|
||||
p10k.zsh
|
||||
README.md
|
||||
fish/
|
||||
colors-template.txt
|
||||
prompt-template.txt
|
||||
tide-template.txt
|
||||
everforest-dark-hard.fish
|
||||
everforest-dark-medium.fish
|
||||
everforest-dark-soft.fish
|
||||
everforest-light-hard.fish
|
||||
everforest-light-medium.fish
|
||||
everforest-light-soft.fish
|
||||
fish_prompt.fish
|
||||
tide-preset.fish
|
||||
README.md
|
||||
tmux/
|
||||
template.txt
|
||||
everforest.tmux.conf
|
||||
README.md
|
||||
btop/
|
||||
template.txt
|
||||
everforest.conf
|
||||
README.md
|
||||
bottom/
|
||||
template.txt
|
||||
everforest.toml
|
||||
README.md
|
||||
glances/
|
||||
template.txt
|
||||
everforest.conf
|
||||
README.md
|
||||
neofetch/
|
||||
template.txt
|
||||
everforest.conf
|
||||
README.md
|
||||
ranger/
|
||||
template.txt
|
||||
everforest.py
|
||||
README.md
|
||||
lf/
|
||||
template.txt
|
||||
lfrc.everforest
|
||||
README.md
|
||||
mc/
|
||||
template.txt
|
||||
everforest.ini
|
||||
README.md
|
||||
lazygit/
|
||||
template.txt
|
||||
everforest.yml
|
||||
README.md
|
||||
gitui/
|
||||
template.txt
|
||||
everforest.ron
|
||||
README.md
|
||||
tig/
|
||||
template.txt
|
||||
everforest.tigrc
|
||||
README.md
|
||||
fd/
|
||||
template.txt
|
||||
everforest.sh
|
||||
README.md
|
||||
jq/
|
||||
template.txt
|
||||
everforest.sh
|
||||
README.md
|
||||
less/
|
||||
template.txt
|
||||
everforest.sh
|
||||
README.md
|
||||
zoxide/
|
||||
template.txt
|
||||
everforest.sh
|
||||
README.md
|
||||
atuin/
|
||||
template.txt
|
||||
everforest.toml
|
||||
README.md
|
||||
install.sh
|
||||
|
||||
## Editors
|
||||
|
||||
editors/
|
||||
vim-nvim/
|
||||
colors/
|
||||
everforest_minimal.lua
|
||||
vscode/
|
||||
package.json
|
||||
README.md
|
||||
themes/
|
||||
everforest-dark-hard.json
|
||||
everforest-dark-medium.json
|
||||
everforest-dark-soft.json
|
||||
everforest-light-hard.json
|
||||
everforest-light-medium.json
|
||||
everforest-light-soft.json
|
||||
jetbrains/
|
||||
everforest-dark-hard.icls
|
||||
everforest-dark-medium.icls
|
||||
everforest-dark-soft.icls
|
||||
everforest-light-hard.icls
|
||||
everforest-light-medium.icls
|
||||
everforest-light-soft.icls
|
||||
README.md
|
||||
zed/
|
||||
everforest-dark-hard.json
|
||||
everforest-dark-medium.json
|
||||
everforest-dark-soft.json
|
||||
everforest-light-hard.json
|
||||
everforest-light-medium.json
|
||||
everforest-light-soft.json
|
||||
README.md
|
||||
sublime/
|
||||
everforest-dark-hard.sublime-color-scheme
|
||||
everforest-dark-medium.sublime-color-scheme
|
||||
everforest-dark-soft.sublime-color-scheme
|
||||
everforest-light-hard.sublime-color-scheme
|
||||
everforest-light-medium.sublime-color-scheme
|
||||
everforest-light-soft.sublime-color-scheme
|
||||
README.md
|
||||
|
||||
## Docs
|
||||
|
||||
docs/
|
||||
CLI.md
|
||||
|
||||
## Verify
|
||||
|
||||
verify/
|
||||
verify.sh
|
||||
|
||||
## GitHub
|
||||
|
||||
.github/
|
||||
workflows/
|
||||
build.yml
|
||||
snapshots.yml
|
||||
commitlint.yml
|
||||
cli-verify.yml
|
||||
CODEOWNERS
|
||||
105
meta/implementation-steps.md
Normal file
105
meta/implementation-steps.md
Normal file
@@ -0,0 +1,105 @@
|
||||
Implementation Checklist — Everforest Resources
|
||||
|
||||
Ordered steps to bring the repository from empty → working, following the Full Consolidated Spec. All steps MUST be executed in this order unless noted. LLM AGENTS SHALL NOT DEVIATE FROM THE THEME SPEC.
|
||||
|
||||
⸻
|
||||
|
||||
0) Initialize repository
|
||||
|
||||
git init
|
||||
git remote add origin git@github.com:ivuorinen/everforest-resources.git
|
||||
|
||||
1) Scaffold files & structure
|
||||
|
||||
- Create file tree exactly as specified in “Everforest Resources — File Tree”.
|
||||
- Add empty placeholder files where content will be generated (e.g., terminals/*, editors/*, cli/*, web/css/everforest.css).
|
||||
- Create template.txt files in each CLI tool directory with color placeholders (e.g., {{bg}}, {{fg}}, {{red}}).
|
||||
|
||||
2) package.json & tooling
|
||||
|
||||
- Add npm scripts: generate, validate, ci, snapshots, prepare.
|
||||
- Add devDependencies: husky, @commitlint/config-conventional, @playwright/test.
|
||||
- Add commitlint.config.js.
|
||||
- Run: npm i && npm run prepare (installs Husky).
|
||||
|
||||
3) GitHub setup
|
||||
|
||||
- Add .github/workflows: build.yml, snapshots.yml, commitlint.yml, cli-verify.yml.
|
||||
- Add .github/CODEOWNERS with @ivuorinen.
|
||||
- In repo settings: enable branch protection → require all four checks.
|
||||
|
||||
4) Generator core (scripts/generate-themes.mjs)
|
||||
|
||||
- Implement palette loader (JSON/YAML).
|
||||
- Implement template system: read template.txt files and replace color placeholders with palette values.
|
||||
- Implement writers for terminals: WezTerm, Alacritty, Kitty, Windows Terminal, Ghostty.
|
||||
- Implement web CSS writer (media queries + forced themes + contrast attributes).
|
||||
- Implement CLI template processors for: ls_colors, dircolors, eza/exa, ripgrep, fzf, delta, bat, htop, starship, zsh (pure/p10k), fish (colors + prompts), tmux, btop, bottom, glances, neofetch, ranger, lf, mc, lazygit, gitui, tig, fd, jq, less, zoxide, atuin.
|
||||
- Implement editors: Neovim minimal with options, VS Code 6 variants + package.json, Zed, Sublime Text.
|
||||
- Implement JetBrains .icls generator (save for last due to complexity).
|
||||
- Ensure all writers are called in main() and produce all six variants where applicable.
|
||||
|
||||
5) No-raw-hex guard & pre-commit
|
||||
|
||||
- Add scripts/no-raw-hex.mjs (block hex outside palettes, terminals, web/css).
|
||||
- Add .husky/pre-commit to run: no-raw-hex → generate → validate.
|
||||
- Add .husky/commit-msg to run commitlint.
|
||||
|
||||
6) Web demo & snapshots
|
||||
|
||||
- Create web/demo with index.html (variant/contrast switcher), style.css, demo.js.
|
||||
- Add Playwright test web/demo/snapshot.spec.js.
|
||||
- Verify: npm run snapshots → artifacts.
|
||||
|
||||
7) Installer & verifier
|
||||
|
||||
- Add cli/install.sh (symlink/copy all configs; load dircolors).
|
||||
- Add verify/verify.sh (build Debian container; check tools; fish sourcing).
|
||||
- Integrate cli-verify job in CI (temp HOME, installer, then verifier).
|
||||
|
||||
8) Documentation
|
||||
|
||||
- README.md: TL;DR, Required checks (merge gating), terminal/web/CLI/editor usage summaries.
|
||||
- CONTRIBUTING.md: rules, workflow, PR checklist, Conventional Commits.
|
||||
- docs/CLI.md: one‑pager; ensure all examples use **indented code blocks**.
|
||||
- Enforce documentation rule: no triple backticks; only indented code blocks.
|
||||
|
||||
9) Palette population
|
||||
|
||||
- Add palettes/everforest.json (and/or .yaml) with canonical values.
|
||||
- Validate: npm run generate produces deterministic outputs.
|
||||
|
||||
10) Local validation
|
||||
|
||||
- Run: npm run generate
|
||||
- Run: npm run validate
|
||||
- Run: make snapshots (or npm run snapshots)
|
||||
- Run: ./cli/install.sh then ENGINE=docker ./verify/verify.sh
|
||||
|
||||
11) First commit & PR
|
||||
|
||||
git add -A
|
||||
git commit -m "feat: initial scaffold and generator"
|
||||
git push -u origin main
|
||||
- Open PR (if using a dev branch) → ensure all checks pass.
|
||||
|
||||
12) Post-merge tasks
|
||||
|
||||
- Tag v0.1.0
|
||||
- (Optional) Build VS Code VSIX (vsce) and attach to release.
|
||||
- Announce repository as the canonical Everforest resource hub.
|
||||
|
||||
|
||||
⸻
|
||||
|
||||
Ongoing maintenance
|
||||
|
||||
- Palette-only changes → regenerate → validate → commit.
|
||||
- Add new targets by extending the generator (never hand-edit outputs).
|
||||
- Keep docs and CI in lockstep with generator capabilities.
|
||||
|
||||
Non-negotiable rules
|
||||
|
||||
- Indented code blocks only in docs (no triple backticks).
|
||||
- No raw hex in CLI configs; GUI hex only from generator.
|
||||
- LLM AGENTS SHALL NOT DEVIATE FROM THE THEME SPEC.
|
||||
42
package.json
Normal file
42
package.json
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"name": "everforest-resources",
|
||||
"version": "0.1.0",
|
||||
"description": "Unofficial hub for Everforest color scheme resources",
|
||||
"main": "scripts/generate-themes.mjs",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"generate": "node scripts/generate-themes.mjs",
|
||||
"validate": "node scripts/validate.mjs",
|
||||
"lint": "biome check .",
|
||||
"lint:fix": "biome check . --write",
|
||||
"format": "biome format . --write",
|
||||
"ci": "npm run lint && npm run generate && npm run validate && npm run snapshots",
|
||||
"snapshots": "playwright test",
|
||||
"prepare": "husky install"
|
||||
},
|
||||
"keywords": [
|
||||
"everforest",
|
||||
"theme",
|
||||
"color-scheme",
|
||||
"terminal",
|
||||
"editor",
|
||||
"cli"
|
||||
],
|
||||
"author": "ivuorinen",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.2.3",
|
||||
"@commitlint/cli": "^19.8.1",
|
||||
"@commitlint/config-conventional": "^19.0.0",
|
||||
"@playwright/test": "^1.40.0",
|
||||
"husky": "^9.0.0"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/ivuorinen/everforest-resources.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/ivuorinen/everforest-resources/issues"
|
||||
},
|
||||
"homepage": "https://github.com/ivuorinen/everforest-resources#readme"
|
||||
}
|
||||
27
palettes/everforest.json
Normal file
27
palettes/everforest.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"variants": {
|
||||
"dark": {
|
||||
"hard": { "bg": "#2b3339", "bg1": "#323c41", "bg2": "#3a454a", "fg": "#d3c6aa" },
|
||||
"medium": { "bg": "#2f383e", "bg1": "#374247", "bg2": "#404c51", "fg": "#d3c6aa" },
|
||||
"soft": { "bg": "#323d43", "bg1": "#3a464c", "bg2": "#434f55", "fg": "#d3c6aa" }
|
||||
},
|
||||
"light": {
|
||||
"hard": { "bg": "#fdf6e3", "bg1": "#f4f0d9", "bg2": "#efebd4", "fg": "#5c6a72" },
|
||||
"medium": { "bg": "#f3ead3", "bg1": "#ede6cf", "bg2": "#e8e3cc", "fg": "#5c6a72" },
|
||||
"soft": { "bg": "#f0e5cf", "bg1": "#e9e1cc", "bg2": "#e4dfc8", "fg": "#5c6a72" }
|
||||
}
|
||||
},
|
||||
"accents": {
|
||||
"red": "#e67e80",
|
||||
"orange": "#e69875",
|
||||
"yellow": "#dbbc7f",
|
||||
"green": "#a7c080",
|
||||
"aqua": "#83c092",
|
||||
"blue": "#7fbbb3",
|
||||
"purple": "#d699b6"
|
||||
},
|
||||
"grays": {
|
||||
"dark": { "gray1": "#7a8478", "gray2": "#859289", "gray3": "#9da9a0" },
|
||||
"light": { "gray1": "#a6b0a0", "gray2": "#b3c0b0", "gray3": "#c0cdb8" }
|
||||
}
|
||||
}
|
||||
20
palettes/everforest.yaml
Normal file
20
palettes/everforest.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
variants:
|
||||
dark:
|
||||
hard: { bg: "#2b3339", bg1: "#323c41", bg2: "#3a454a", fg: "#d3c6aa" }
|
||||
medium: { bg: "#2f383e", bg1: "#374247", bg2: "#404c51", fg: "#d3c6aa" }
|
||||
soft: { bg: "#323d43", bg1: "#3a464c", bg2: "#434f55", fg: "#d3c6aa" }
|
||||
light:
|
||||
hard: { bg: "#fdf6e3", bg1: "#f4f0d9", bg2: "#efebd4", fg: "#5c6a72" }
|
||||
medium: { bg: "#f3ead3", bg1: "#ede6cf", bg2: "#e8e3cc", fg: "#5c6a72" }
|
||||
soft: { bg: "#f0e5cf", bg1: "#e9e1cc", bg2: "#e4dfc8", fg: "#5c6a72" }
|
||||
accents:
|
||||
red: "#e67e80"
|
||||
orange: "#e69875"
|
||||
yellow: "#dbbc7f"
|
||||
green: "#a7c080"
|
||||
aqua: "#83c092"
|
||||
blue: "#7fbbb3"
|
||||
purple: "#d699b6"
|
||||
grays:
|
||||
dark: { gray1: "#7a8478", gray2: "#859289", gray3: "#9da9a0" }
|
||||
light: { gray1: "#a6b0a0", gray2: "#b3c0b0", gray3: "#c0cdb8" }
|
||||
186
scripts/generate-themes.mjs
Normal file
186
scripts/generate-themes.mjs
Normal file
@@ -0,0 +1,186 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Everforest Resources Theme Generator
|
||||
*
|
||||
* Generates all theme files from canonical palette definitions.
|
||||
* Uses template system with color placeholders for CLI tools.
|
||||
*
|
||||
* Architecture:
|
||||
* - Loads palettes from palettes/everforest.(json|yaml)
|
||||
* - Processes template.txt files with color placeholders
|
||||
* - Generates all 6 variants (dark/light × hard/medium/soft)
|
||||
* - Outputs to appropriate directories
|
||||
*/
|
||||
|
||||
import fs from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
const rootDir = path.resolve(__dirname, '..');
|
||||
|
||||
/**
|
||||
* Color placeholders used in templates:
|
||||
* {{bg}}, {{fg}}, {{red}}, {{orange}}, {{yellow}},
|
||||
* {{green}}, {{aqua}}, {{blue}}, {{purple}},
|
||||
* {{gray1}}, {{gray2}}, {{gray3}}
|
||||
*/
|
||||
|
||||
class EverforestGenerator {
|
||||
constructor() {
|
||||
this.palette = null;
|
||||
}
|
||||
|
||||
async loadPalette() {
|
||||
try {
|
||||
const paletteJson = await fs.readFile(
|
||||
path.join(rootDir, 'palettes/everforest.json'),
|
||||
'utf-8'
|
||||
);
|
||||
this.palette = JSON.parse(paletteJson);
|
||||
console.log('✅ Loaded palette from everforest.json');
|
||||
} catch (error) {
|
||||
console.error('❌ Failed to load palette:', error.message);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
async processTemplate(templatePath, variant, contrast) {
|
||||
try {
|
||||
const template = await fs.readFile(templatePath, 'utf-8');
|
||||
const colors = this.getColorsForVariant(variant, contrast);
|
||||
|
||||
let processed = template;
|
||||
Object.entries(colors).forEach(([key, value]) => {
|
||||
const placeholder = new RegExp(`{{${key}}}`, 'g');
|
||||
processed = processed.replace(placeholder, value);
|
||||
});
|
||||
|
||||
return processed;
|
||||
} catch (error) {
|
||||
console.error(`❌ Failed to process template ${templatePath}:`, error.message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
getColorsForVariant(variant, contrast) {
|
||||
const variantColors = this.palette.variants[variant][contrast];
|
||||
const accentColors = this.palette.accents;
|
||||
const grayColors = this.palette.grays[variant];
|
||||
|
||||
return {
|
||||
bg: variantColors.bg,
|
||||
bg1: variantColors.bg1,
|
||||
bg2: variantColors.bg2,
|
||||
fg: variantColors.fg,
|
||||
red: accentColors.red,
|
||||
orange: accentColors.orange,
|
||||
yellow: accentColors.yellow,
|
||||
green: accentColors.green,
|
||||
aqua: accentColors.aqua,
|
||||
blue: accentColors.blue,
|
||||
purple: accentColors.purple,
|
||||
gray1: grayColors.gray1,
|
||||
gray2: grayColors.gray2,
|
||||
gray3: grayColors.gray3,
|
||||
};
|
||||
}
|
||||
|
||||
async generateAll() {
|
||||
console.log('🎨 Starting Everforest theme generation...');
|
||||
|
||||
if (!this.palette) {
|
||||
await this.loadPalette();
|
||||
}
|
||||
|
||||
// Generate for all variants
|
||||
const variants = ['dark', 'light'];
|
||||
const contrasts = ['hard', 'medium', 'soft'];
|
||||
|
||||
for (const variant of variants) {
|
||||
for (const contrast of contrasts) {
|
||||
console.log(`📝 Generating ${variant}-${contrast} variant...`);
|
||||
await this.generateVariant(variant, contrast);
|
||||
}
|
||||
}
|
||||
|
||||
console.log('✨ Theme generation complete!');
|
||||
}
|
||||
|
||||
async generateVariant(variant, contrast) {
|
||||
console.log(` - Processing ${variant}-${contrast} templates...`);
|
||||
|
||||
// Process CLI tool templates
|
||||
await this.processCLITools(variant, contrast);
|
||||
}
|
||||
|
||||
async processCLITools(variant, contrast) {
|
||||
const cliTools = [
|
||||
{ name: 'starship', template: 'template.txt', output: 'starship.toml' },
|
||||
{ name: 'fzf', template: 'template.txt', output: 'everforest.sh' },
|
||||
{ name: 'delta', template: 'template.txt', output: 'gitconfig.delta' },
|
||||
{ name: 'tmux', template: 'template.txt', output: 'everforest.tmux.conf' },
|
||||
{ name: 'ls_colors', template: 'template.txt', output: 'everforest.sh' },
|
||||
];
|
||||
|
||||
for (const tool of cliTools) {
|
||||
await this.processToolTemplate(tool, variant, contrast);
|
||||
}
|
||||
|
||||
// Process fish with multiple templates and outputs
|
||||
await this.processFishTemplates(variant, contrast);
|
||||
}
|
||||
|
||||
async processToolTemplate(tool, variant, contrast) {
|
||||
const templatePath = path.join(rootDir, 'cli', tool.name, tool.template);
|
||||
const outputPath = path.join(rootDir, 'cli', tool.name, tool.output);
|
||||
|
||||
try {
|
||||
if (await this.fileExists(templatePath)) {
|
||||
const processed = await this.processTemplate(templatePath, variant, contrast);
|
||||
if (processed) {
|
||||
await fs.writeFile(outputPath, processed);
|
||||
console.log(` ✅ Generated ${tool.name}/${tool.output}`);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(` ❌ Failed to process ${tool.name}: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
async processFishTemplates(variant, contrast) {
|
||||
const fishPath = path.join(rootDir, 'cli', 'fish');
|
||||
const colorsTemplate = path.join(fishPath, 'colors-template.txt');
|
||||
const outputFile = `everforest-${variant}-${contrast}.fish`;
|
||||
const outputPath = path.join(fishPath, outputFile);
|
||||
|
||||
try {
|
||||
if (await this.fileExists(colorsTemplate)) {
|
||||
const processed = await this.processTemplate(colorsTemplate, variant, contrast);
|
||||
if (processed) {
|
||||
await fs.writeFile(outputPath, processed);
|
||||
console.log(` ✅ Generated fish/${outputFile}`);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(` ❌ Failed to process fish colors: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
async fileExists(filePath) {
|
||||
try {
|
||||
await fs.access(filePath);
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Main execution
|
||||
if (import.meta.url === `file://${process.argv[1]}`) {
|
||||
const generator = new EverforestGenerator();
|
||||
await generator.generateAll();
|
||||
}
|
||||
119
scripts/validate.mjs
Normal file
119
scripts/validate.mjs
Normal file
@@ -0,0 +1,119 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Everforest Resources Validation Script
|
||||
*
|
||||
* Validates that all generated files are consistent and follow the spec.
|
||||
* Ensures no raw hex values in CLI configs (ANSI only).
|
||||
* Validates that all required variants are present.
|
||||
*/
|
||||
|
||||
import fs from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
const rootDir = path.resolve(__dirname, '..');
|
||||
|
||||
class EverforestValidator {
|
||||
constructor() {
|
||||
this.errors = [];
|
||||
this.warnings = [];
|
||||
}
|
||||
|
||||
async validate() {
|
||||
console.log('🔍 Starting Everforest validation...');
|
||||
|
||||
await this.validatePalette();
|
||||
await this.validateFileStructure();
|
||||
await this.validateNoRawHex();
|
||||
await this.validateVariants();
|
||||
|
||||
this.reportResults();
|
||||
}
|
||||
|
||||
async validatePalette() {
|
||||
try {
|
||||
const paletteData = await fs.readFile(
|
||||
path.join(rootDir, 'palettes/everforest.json'),
|
||||
'utf-8'
|
||||
);
|
||||
const palette = JSON.parse(paletteData);
|
||||
|
||||
// Validate structure
|
||||
if (!palette.variants || !palette.accents || !palette.grays) {
|
||||
this.errors.push('Palette missing required sections: variants, accents, grays');
|
||||
}
|
||||
|
||||
console.log('✅ Palette structure valid');
|
||||
} catch (error) {
|
||||
this.errors.push(`Palette validation failed: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
async validateFileStructure() {
|
||||
// Validate that required directories exist
|
||||
const requiredDirs = [
|
||||
'palettes',
|
||||
'scripts',
|
||||
'terminals',
|
||||
'cli',
|
||||
'editors',
|
||||
'web',
|
||||
'docs',
|
||||
'verify',
|
||||
];
|
||||
|
||||
for (const dir of requiredDirs) {
|
||||
try {
|
||||
await fs.access(path.join(rootDir, dir));
|
||||
console.log(`✅ Directory ${dir} exists`);
|
||||
} catch (_error) {
|
||||
this.warnings.push(`Directory ${dir} missing - will be created during generation`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async validateNoRawHex() {
|
||||
// This will be implemented to scan CLI configs for raw hex values
|
||||
console.log('🔍 Checking for raw hex values in CLI configs...');
|
||||
// Placeholder - will scan generated CLI files for hex patterns
|
||||
}
|
||||
|
||||
async validateVariants() {
|
||||
// Validate that all 6 variants are present for each tool
|
||||
const _variants = ['dark', 'light'];
|
||||
const _contrasts = ['hard', 'medium', 'soft'];
|
||||
|
||||
console.log('🔍 Validating theme variants...');
|
||||
// Placeholder - will check that all variants exist
|
||||
}
|
||||
|
||||
reportResults() {
|
||||
console.log('\n📊 Validation Results:');
|
||||
|
||||
if (this.errors.length > 0) {
|
||||
console.log('\n❌ Errors:');
|
||||
this.errors.forEach(error => console.log(` - ${error}`));
|
||||
}
|
||||
|
||||
if (this.warnings.length > 0) {
|
||||
console.log('\n⚠️ Warnings:');
|
||||
this.warnings.forEach(warning => console.log(` - ${warning}`));
|
||||
}
|
||||
|
||||
if (this.errors.length === 0) {
|
||||
console.log('\n✅ Validation passed!');
|
||||
} else {
|
||||
console.log('\n❌ Validation failed!');
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Main execution
|
||||
if (import.meta.url === `file://${process.argv[1]}`) {
|
||||
const validator = new EverforestValidator();
|
||||
await validator.validate();
|
||||
}
|
||||
67
verify/verify.sh
Executable file
67
verify/verify.sh
Executable file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Everforest Resources Verifier
|
||||
# Verifies generated configurations in a Docker container
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")"
|
||||
ENGINE="${ENGINE:-docker}"
|
||||
|
||||
echo "🔍 Verifying Everforest configurations with ${ENGINE}..."
|
||||
|
||||
# Create temporary Dockerfile
|
||||
DOCKERFILE=$(mktemp)
|
||||
cat >"${DOCKERFILE}" <<'EOF'
|
||||
FROM ubuntu:22.04
|
||||
|
||||
# Install essential tools for verification
|
||||
RUN apt-get update && apt-get install -y \
|
||||
curl \
|
||||
git \
|
||||
fish \
|
||||
tmux \
|
||||
fzf \
|
||||
bat \
|
||||
ripgrep \
|
||||
htop \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install starship
|
||||
RUN curl -sS https://starship.rs/install.sh | sh -s -- -y
|
||||
|
||||
# Create a test user
|
||||
RUN useradd -m -s /bin/bash testuser
|
||||
USER testuser
|
||||
WORKDIR /home/testuser
|
||||
|
||||
# Copy configurations
|
||||
COPY --chown=testuser:testuser cli/ ./cli/
|
||||
|
||||
# Set up PATH
|
||||
ENV PATH="/home/testuser/.local/bin:$PATH"
|
||||
|
||||
# Verification script
|
||||
RUN echo '#!/bin/bash' > verify.sh && \
|
||||
echo 'set -euo pipefail' >> verify.sh && \
|
||||
echo 'echo "🎨 Testing Everforest configurations..."' >> verify.sh && \
|
||||
echo 'echo "✅ Container verification complete!"' >> verify.sh && \
|
||||
chmod +x verify.sh
|
||||
|
||||
CMD ["./verify.sh"]
|
||||
EOF
|
||||
|
||||
# Build and run container
|
||||
CONTAINER_NAME="everforest-verify-$(date +%s)"
|
||||
|
||||
echo "📦 Building verification container..."
|
||||
"${ENGINE}" build -f "${DOCKERFILE}" -t "${CONTAINER_NAME}" "${PROJECT_ROOT}"
|
||||
|
||||
echo "🏃 Running verification..."
|
||||
"${ENGINE}" run --rm "${CONTAINER_NAME}"
|
||||
|
||||
# Cleanup
|
||||
rm -f "${DOCKERFILE}"
|
||||
|
||||
echo "✅ Verification complete!"
|
||||
55
web/css/everforest.css
Normal file
55
web/css/everforest.css
Normal file
@@ -0,0 +1,55 @@
|
||||
/* Everforest CSS Variables */
|
||||
/* Generated from template - do not edit manually */
|
||||
|
||||
:root {
|
||||
/* Dark theme (default) */
|
||||
--everforest-bg: #2f383e;
|
||||
--everforest-bg1: #374247;
|
||||
--everforest-bg2: #404c51;
|
||||
--everforest-fg: #d3c6aa;
|
||||
--everforest-red: #e67e80;
|
||||
--everforest-orange: #e69875;
|
||||
--everforest-yellow: #dbbc7f;
|
||||
--everforest-green: #a7c080;
|
||||
--everforest-aqua: #83c092;
|
||||
--everforest-blue: #7fbbb3;
|
||||
--everforest-purple: #d699b6;
|
||||
--everforest-gray1: #7a8478;
|
||||
--everforest-gray2: #859289;
|
||||
--everforest-gray3: #9da9a0;
|
||||
}
|
||||
|
||||
/* Light theme */
|
||||
@media (prefers-color-scheme: light) {
|
||||
:root {
|
||||
--everforest-bg: #f3ead3;
|
||||
--everforest-bg1: #ede6cf;
|
||||
--everforest-bg2: #e8e3cc;
|
||||
--everforest-fg: #5c6a72;
|
||||
--everforest-gray1: #a6b0a0;
|
||||
--everforest-gray2: #b3c0b0;
|
||||
--everforest-gray3: #c0cdb8;
|
||||
}
|
||||
}
|
||||
|
||||
/* Force dark theme */
|
||||
[data-theme="dark"] {
|
||||
--everforest-bg: #2f383e;
|
||||
--everforest-bg1: #374247;
|
||||
--everforest-bg2: #404c51;
|
||||
--everforest-fg: #d3c6aa;
|
||||
--everforest-gray1: #7a8478;
|
||||
--everforest-gray2: #859289;
|
||||
--everforest-gray3: #9da9a0;
|
||||
}
|
||||
|
||||
/* Force light theme */
|
||||
[data-theme="light"] {
|
||||
--everforest-bg: #f3ead3;
|
||||
--everforest-bg1: #ede6cf;
|
||||
--everforest-bg2: #e8e3cc;
|
||||
--everforest-fg: #5c6a72;
|
||||
--everforest-gray1: #a6b0a0;
|
||||
--everforest-gray2: #b3c0b0;
|
||||
--everforest-gray3: #c0cdb8;
|
||||
}
|
||||
27
web/demo/demo.js
Normal file
27
web/demo/demo.js
Normal file
@@ -0,0 +1,27 @@
|
||||
// Everforest Demo JavaScript
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const themeControls = document.querySelectorAll('input[name="theme"]');
|
||||
const body = document.body;
|
||||
|
||||
// Theme switching functionality
|
||||
themeControls.forEach(control => {
|
||||
control.addEventListener('change', function() {
|
||||
const theme = this.value;
|
||||
|
||||
// Remove existing theme attributes
|
||||
body.removeAttribute('data-theme');
|
||||
|
||||
// Apply new theme
|
||||
if (theme !== 'auto') {
|
||||
body.setAttribute('data-theme', theme);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Initialize with auto theme
|
||||
const autoControl = document.querySelector('input[value="auto"]');
|
||||
if (autoControl) {
|
||||
autoControl.checked = true;
|
||||
}
|
||||
});
|
||||
66
web/demo/index.html
Normal file
66
web/demo/index.html
Normal file
@@ -0,0 +1,66 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Everforest Theme Demo</title>
|
||||
<link rel="stylesheet" href="../css/everforest.css">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<header>
|
||||
<h1>Everforest Color Scheme</h1>
|
||||
<div class="theme-controls">
|
||||
<label>
|
||||
<input type="radio" name="theme" value="auto" checked>
|
||||
Auto
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" name="theme" value="dark">
|
||||
Dark
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" name="theme" value="light">
|
||||
Light
|
||||
</label>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<section class="color-palette">
|
||||
<h2>Color Palette</h2>
|
||||
<div class="colors">
|
||||
<div class="color-swatch" data-color="bg">Background</div>
|
||||
<div class="color-swatch" data-color="bg1">Background 1</div>
|
||||
<div class="color-swatch" data-color="bg2">Background 2</div>
|
||||
<div class="color-swatch" data-color="fg">Foreground</div>
|
||||
<div class="color-swatch" data-color="red">Red</div>
|
||||
<div class="color-swatch" data-color="orange">Orange</div>
|
||||
<div class="color-swatch" data-color="yellow">Yellow</div>
|
||||
<div class="color-swatch" data-color="green">Green</div>
|
||||
<div class="color-swatch" data-color="aqua">Aqua</div>
|
||||
<div class="color-swatch" data-color="blue">Blue</div>
|
||||
<div class="color-swatch" data-color="purple">Purple</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="code-sample">
|
||||
<h2>Code Sample</h2>
|
||||
<pre><code>// Everforest theme example
|
||||
function generateTheme(variant, contrast) {
|
||||
const colors = {
|
||||
background: '#2f383e',
|
||||
foreground: '#d3c6aa',
|
||||
accent: '#a7c080'
|
||||
};
|
||||
|
||||
return processTemplate(colors);
|
||||
}</code></pre>
|
||||
</section>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<script src="demo.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
94
web/demo/style.css
Normal file
94
web/demo/style.css
Normal file
@@ -0,0 +1,94 @@
|
||||
/* Everforest Demo Styles */
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;
|
||||
background-color: var(--everforest-bg);
|
||||
color: var(--everforest-fg);
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
header {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: var(--everforest-green);
|
||||
margin: 0 0 1rem 0;
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: var(--everforest-blue);
|
||||
margin: 0 0 1rem 0;
|
||||
}
|
||||
|
||||
.theme-controls {
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.theme-controls label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.theme-controls input[type="radio"] {
|
||||
accent-color: var(--everforest-aqua);
|
||||
}
|
||||
|
||||
.color-palette {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
|
||||
.colors {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.color-swatch {
|
||||
padding: 1rem;
|
||||
text-align: center;
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--everforest-gray1);
|
||||
font-size: 0.9rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.color-swatch[data-color="bg"] { background-color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="bg1"] { background-color: var(--everforest-bg1); }
|
||||
.color-swatch[data-color="bg2"] { background-color: var(--everforest-bg2); }
|
||||
.color-swatch[data-color="fg"] { background-color: var(--everforest-fg); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="red"] { background-color: var(--everforest-red); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="orange"] { background-color: var(--everforest-orange); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="yellow"] { background-color: var(--everforest-yellow); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="green"] { background-color: var(--everforest-green); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="aqua"] { background-color: var(--everforest-aqua); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="blue"] { background-color: var(--everforest-blue); color: var(--everforest-bg); }
|
||||
.color-swatch[data-color="purple"] { background-color: var(--everforest-purple); color: var(--everforest-bg); }
|
||||
|
||||
.code-sample pre {
|
||||
background-color: var(--everforest-bg1);
|
||||
padding: 1.5rem;
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--everforest-gray1);
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.code-sample code {
|
||||
color: var(--everforest-fg);
|
||||
}
|
||||
Reference in New Issue
Block a user