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