Compare commits

...

12 Commits

Author SHA1 Message Date
6bf38df599 Update dotfiles/ps1/ps1.sh
All checks were successful
ShellCheck / shellcheck (push) Successful in 45s
runner test
2026-01-25 16:18:03 +00:00
727f3f86d4 Update state metadata 2026-01-25 02:26:16 +00:00
979b6bc1a5 Add cron note 2026-01-25 02:24:25 +00:00
ac298ef484 . 2026-01-25 02:24:25 +00:00
22e92a62dd Update dotfiles/ps1/ps1.sh
All checks were successful
ShellCheck / shellcheck (push) Successful in 14s
2026-01-25 02:12:44 +00:00
c8b365436a Update dotfiles/ps1/ps1.sh
All checks were successful
ShellCheck / shellcheck (push) Successful in 14s
.
2026-01-25 01:46:05 +00:00
7004caf4d1 Add Gitea Actions workflow copy 2026-01-25 01:33:41 +00:00
f9ebc5523a Move workflow back to .github
All checks were successful
ShellCheck / shellcheck (push) Successful in 13s
2026-01-25 01:11:20 +00:00
11a70b2d21 Move workflow to .gitea
All checks were successful
ShellCheck / shellcheck (push) Successful in 13s
2026-01-25 01:04:56 +00:00
8710ca4e78 Update dotfiles/ps1/ps1.sh
All checks were successful
ShellCheck / shellcheck (push) Successful in 13s
runner test
2026-01-25 00:57:31 +00:00
5591d87023 Track JSON state files 2026-01-25 00:40:41 +00:00
23bc59250c Update repo metadata 2026-01-25 00:36:23 +00:00
6 changed files with 1029 additions and 3 deletions

549
.context.json Normal file
View File

@@ -0,0 +1,549 @@
{
"project": {
"name": "ps1-craft",
"purpose": "Global and per-user bash prompt + banner with seasonal palettes and time/season emoji accents.",
"repo_root": "/home/steffen/Bashrc",
"default_branch": "main",
"release_state": "main is production-ready",
"repo_urls": {
"github": "git@github.com:Hawolex/ps1-craft.git",
"gitea": "ssh://git@git.skui.io:2222/steffen/ps1-craft.git"
}
},
"branches": {
"main": {
"notes": [
"Shared PS1 module in dotfiles/ps1/ps1.sh is source of truth for both Linux and macOS installers.",
"README documents seasonal ranges and style packs.",
"README example image uses images/bash-pallete.png.",
"GitHub mirror is active at git@github.com:Hawolex/ps1-craft.git."
]
}
},
"files": {
"ps1_shared": "dotfiles/ps1/ps1.sh",
"linux_installer": "dotfiles/install/install-linux-global.sh",
"macos_installer": "dotfiles/install/install-macos-user.sh",
"global_installer_wrapper": "dotfiles/install/install-global-ps1.sh",
"readme": "README.md",
"library": "library.md",
"cron_note": ".cron",
"github_workflow": ".github/workflows/shellcheck.yml",
"gitea_workflow": ".gitea/workflows/shellcheck.yml",
"palette_image": "images/bash-pallete.png",
"theme_images_dir": "images/themes",
"theme_images": {
"season_winter": "images/themes/season-winter.png",
"season_spring": "images/themes/season-spring.png",
"season_summer": "images/themes/season-summer.png",
"season_autumn": "images/themes/season-autumn.png",
"aurora": "images/themes/aurora.png",
"neon": "images/themes/neon.png",
"forge": "images/themes/forge.png",
"circuit": "images/themes/circuit.png",
"mono": "images/themes/mono.png",
"git": "images/themes/git.png",
"hawolex": "images/themes/hawolex.png",
"hawolexv2": "images/themes/hawolexv2.png",
"christmas": "images/themes/christmas.png",
"easter": "images/themes/easter.png",
"halloween": "images/themes/halloween.png",
"valentine": "images/themes/valentine.png",
"thanksgiving": "images/themes/thanksgiving.png",
"newyear": "images/themes/newyear.png",
"radar": "images/themes/radar.png",
"synthwave": "images/themes/synthwave.png",
"noir": "images/themes/noir.png",
"topo": "images/themes/topo.png",
"glitch": "images/themes/glitch.png",
"arcticfire": "images/themes/arcticfire.png",
"acidlime": "images/themes/acidlime.png"
}
},
"install_behavior": {
"linux": {
"script": "dotfiles/install/install-linux-global.sh",
"scope": "global (all users)",
"installs": [
"/etc/profile.d/ps1.sh",
"/etc/profile.d/banner.sh"
],
"sources_from": "/etc/bash.bashrc",
"prompts": [
"PS1 only / Banner only / Both",
"PS1 mode: Single season / Dynamic / Contest / Holidays / Custom (if PS1 selected)",
"Season pick (if single season)",
"Layout order selection (seasonal/contest/holidays)",
"Style preset selection (if contest)",
"Holiday selection (if holidays)",
"Custom style selection (if custom)",
"Enable git capsule for all themes (if PS1 selected)"
],
"season_config_file": "/etc/ps1-season",
"style_config_file": "/etc/ps1-style",
"banner_punchline_file": "/etc/ps1-punchline"
},
"macos": {
"script": "dotfiles/install/install-macos-user.sh",
"scope": "per-user",
"installs": [
"~/.config/ps1/ps1.sh"
],
"sources_from": [
"~/.bashrc",
"~/.bash_profile"
],
"prompts": [
"PS1 mode: Single season / Dynamic / Contest / Holidays / Custom",
"Season pick (if single season)",
"Layout order selection (seasonal/contest/holidays)",
"Style preset selection (if contest)",
"Holiday selection (if holidays)",
"Custom style selection (if custom)",
"Enable git capsule for all themes"
],
"season_config_file": "~/.config/ps1/season",
"style_config_file": "~/.config/ps1/style"
},
"global_installer_wrapper": {
"script": "dotfiles/install/install-global-ps1.sh",
"behavior": "Copies shared PS1 module to /etc/profile.d/ps1.sh and updates /etc/bash.bashrc."
}
},
"season_rules": {
"timezone": "Europe/Oslo",
"dynamic_ranges": {
"spring": "March-May",
"summer": "June-August",
"autumn": "September-mid November (before Nov 15)",
"winter": "mid November-February"
},
"config": {
"mode_env": "PS1_SEASON_MODE=dynamic|static",
"season_env": "PS1_SEASON=winter|spring|summer|autumn",
"config_file_keys": [
"PS1_SEASON_MODE",
"PS1_SEASON"
]
}
},
"palettes": {
"winter": {
"Z1_BG": 59,
"Z2_BG": 61,
"Z3_BG": 63,
"Z4_BG": 38,
"Z5_BG": 37,
"Z1_FG": 255,
"Z2_FG": 255,
"PATH_FG": 152,
"FRAME": 60
},
"spring": {
"Z1_BG": 68,
"Z2_BG": 70,
"Z3_BG": 72,
"Z4_BG": 121,
"Z5_BG": 120,
"Z1_FG": 255,
"Z2_FG": 22,
"PATH_FG": 28,
"FRAME": 65
},
"summer": {
"Z1_BG": 141,
"Z2_BG": 142,
"Z3_BG": 143,
"Z4_BG": 214,
"Z5_BG": 208,
"Z1_FG": 255,
"Z2_FG": 0,
"PATH_FG": 0,
"FRAME": 130
},
"autumn": {
"Z1_BG": 93,
"Z2_BG": 95,
"Z3_BG": 97,
"Z4_BG": 166,
"Z5_BG": 136,
"Z1_FG": 255,
"Z2_FG": 255,
"PATH_FG": 223,
"FRAME": 95
}
},
"styles": {
"default": "aurora",
"available": [
{
"id": "aurora",
"name": "Aurora",
"description": "Powerline blocks with seasonal palette, two-line calm layout.",
"layout": "two-line, segmented blocks",
"preview": "[date time user] > [@host /path]"
},
{
"id": "neon",
"name": "Neon",
"description": "Magenta/cyan cyber blocks, high contrast, two-line.",
"layout": "two-line, neon blocks",
"preview": "[user time] > [@host /path]"
},
{
"id": "forge",
"name": "Forge",
"description": "Warm copper blocks, heavy frame, assertive.",
"layout": "two-line, bold blocks",
"preview": "[date time user] > [@host /path]"
},
{
"id": "circuit",
"name": "Circuit",
"description": "Green scanline rail, minimal chrome, compact.",
"layout": "two-line, rail style",
"preview": "[user time] - @host /path"
},
{
"id": "mono",
"name": "Mono",
"description": "Clean monochrome, fast read, low noise.",
"layout": "two-line, minimal",
"preview": "[date time user] @host /path"
},
{
"id": "git",
"name": "Git",
"description": "Minimal blocks with git capsule when in repo.",
"layout": "two-line, git capsule on line 2",
"preview": "[date time user] @host - /path (git)"
},
{
"id": "hawolex",
"name": "Hawolex",
"description": "Winter neon with tech icons, contest layout.",
"layout": "two-line, contest layout",
"preview": "[date time user] @host - /path"
},
{
"id": "hawolexv2",
"name": "HawolexV2",
"description": "Winter neon with multi-segment gradient.",
"layout": "two-line, segmented gradient",
"preview": "[date time user] @host - /path"
},
{
"id": "radar",
"name": "Radar",
"description": "Green scanline HUD with a clean, low-noise read.",
"layout": "two-line, minimal HUD",
"preview": "[user time] @host /path"
},
{
"id": "synthwave",
"name": "Synthwave",
"description": "Pink/cyan/orange glow blocks, aggressive contrast.",
"layout": "two-line, three blocks",
"preview": "[date time user] | @host | /path"
},
{
"id": "noir",
"name": "Noir",
"description": "Near-black minimal with a sharp path accent.",
"layout": "two-line, minimal",
"preview": "[date time user] @host /path"
},
{
"id": "topo",
"name": "Topo",
"description": "Elevation-style path with multi-tone segments.",
"layout": "two-line, path emphasis",
"preview": "[date time user] @host /path"
},
{
"id": "glitch",
"name": "Glitch",
"description": "Jitter separators and neon contrast.",
"layout": "two-line, glitch separators",
"preview": "[date time user] ~ @host /path"
},
{
"id": "arcticfire",
"name": "ArcticFire",
"description": "Icy blues on the left, ember orange on the right.",
"layout": "two-line, three blocks",
"preview": "[date time user] | @host | /path"
},
{
"id": "acidlime",
"name": "AcidLime",
"description": "Black background with electric green signal.",
"layout": "two-line, minimal",
"preview": "[date time user] @host /path"
}
],
"config": {
"env": "PS1_STYLE=aurora|neon|forge|circuit|mono|git|hawolex|hawolexv2|radar|synthwave|noir|topo|glitch|arcticfire|acidlime; PS1_STYLE_PACK=standard|contest|holiday|custom; PS1_CONTEST_LAYOUT=day-time-user|user-time|time-user|day-time; PS1_HOLIDAY=christmas|easter|halloween|valentine|thanksgiving|newyear; PS1_GIT=0|1",
"config_file_keys": [
"PS1_STYLE",
"PS1_STYLE_PACK",
"PS1_CONTEST_LAYOUT",
"PS1_HOLIDAY",
"PS1_GIT"
]
}
},
"emoji_rules": {
"fixed_times": {
"lunch": "11:00-11:29 => 🥪",
"dinner": "16:00-16:59 => 🍲"
},
"rotation": "Daily rotation by day-of-year with season offsets.",
"seasonal_accents": {
"spring": {
"sunrise": [
"🌷",
"🌱",
"🐣",
"🌤"
],
"coffee": "☕",
"work": [
"🌿",
"🪴",
"🐝",
"🌼"
],
"evening": "🌤",
"night": "🌙"
},
"summer": {
"sunrise": [
"🌞",
"🏖️",
"🌅",
"🌤"
],
"coffee": "🧃",
"work": [
"🏄",
"🏖️",
"🚤",
"🌴"
],
"evening": "🌇",
"night": "🌙"
},
"autumn": {
"sunrise": [
"🍁",
"🍂",
"🌫️",
"🌦️"
],
"coffee": "☕",
"work": [
"🍂",
"🍄",
"🎃",
"🪵"
],
"evening": "🌆",
"night": "🌙"
},
"winter": {
"sunrise": [
"🏔️",
"🌨️",
"❄️",
"🌌"
],
"coffee": "☕",
"work": [
"🎿",
"⛷️",
"🏂",
"🧊"
],
"evening": "🌆",
"night": "🌙"
}
},
"contest_accents": {
"sunrise": [
"⚡️",
"🛰️",
"🧬",
"🧠"
],
"work": [
"🛠️",
"💾",
"🧪",
"🧩"
],
"coffee": "☕",
"evening": "🎛️",
"night": "🕶️"
},
"holiday_accents": {
"christmas": {
"sunrise": [
"🎄",
"🎅",
"❄️",
"⛄"
],
"work": [
"🎁",
"🧤",
"🧣",
"🦌"
],
"coffee": "☕",
"evening": "🌟",
"night": "🕯️"
},
"easter": {
"sunrise": [
"🐣",
"🥚",
"🌷",
"🌤"
],
"work": [
"🐰",
"🌼",
"🧺",
"🍫"
],
"coffee": "☕",
"evening": "🌅",
"night": "🌙"
},
"halloween": {
"sunrise": [
"🎃",
"🦇",
"🌕",
"🕸️"
],
"work": [
"👻",
"💀",
"🕯️",
"🧪"
],
"coffee": "☕",
"evening": "🌆",
"night": "🕷️"
},
"valentine": {
"sunrise": [
"💖",
"🌹",
"💘",
"💕"
],
"work": [
"💌",
"🍫",
"🕊️",
"💗"
],
"coffee": "☕",
"evening": "🌆",
"night": "🌙"
},
"thanksgiving": {
"sunrise": [
"🦃",
"🍁",
"🥧",
"🍂"
],
"work": [
"🍽️",
"🌾",
"🧺",
"🥖"
],
"coffee": "☕",
"evening": "🌆",
"night": "🌙"
},
"newyear": {
"sunrise": [
"🎆",
"🥂",
"🎇",
"✨"
],
"work": [
"🗓️",
"⏳",
"🚀",
"✨"
],
"coffee": "☕",
"evening": "🌆",
"night": "🌙"
}
},
"style_accents": {
"hawolex": {
"sunrise": [
"💻",
"🚗",
"🔊",
"🎮"
],
"work": [
"🎧",
"🕹️",
"📟",
"🧩"
],
"coffee": "☕",
"evening": "🌆",
"night": "🌙"
}
},
"time_slots": {
"sunrise": "05:00-08:59",
"coffee": "09:00-10:59",
"work": "11:30-15:59",
"evening": "17:00-22:59",
"night": "23:00-04:59"
}
},
"prompt_structure": {
"zone1": "date time user",
"zone2": "host path",
"seasonal_segments": "date | time | user | host+path (subtle seasonal gradient)",
"line2": "status arrow + emoji",
"emoji_padding": "Two spaces after the emoji before the cursor",
"path_shortening": "Keeps /home/user or /Users/user visible and shortens middle if deep.",
"nerd_font_caps": "Always enabled unless PS1_FORCE_ASCII=1"
},
"overrides": {
"force_nerd_font": "PS1_FORCE_NF=1",
"force_ascii": "PS1_FORCE_ASCII=1",
"disable_prompt_env": "DISABLE_GLOBAL_PS1=1",
"disable_prompt_file": "~/.config/ps1/disable"
},
"notes": [
"On Linux, installer affects all users by writing to /etc/profile.d and sourcing from /etc/bash.bashrc.",
"On macOS, installer is per-user and sources from .bashrc/.bash_profile.",
"Seasonal palettes and contest pack are now documented directly in main.",
"README uses images/bash-pallete.png.",
"Git capsule prefers __git_ps1 and falls back to git symbolic-ref/short hash when git-prompt is unavailable or returns empty.",
"Hawolex git capsule enables when PS1_GIT resolves to a truthy value (1/yes/true/on).",
"Custom pack adds bold styles (radar, synthwave, noir, topo, glitch, arcticfire, acidlime).",
"Library includes emoji usage blocks per theme (sets, fixed times, time slots, rotation).",
"Gitea Actions enabled in app.ini with [actions] ENABLED=true.",
"ShellCheck workflows exist for both GitHub and Gitea (.github/workflows and .gitea/workflows).",
"Self-hosted runner uses label ubuntu-latest and runs in Docker.",
"Host has daily Docker prune cron at 04:00 with 24h retention (see .cron)."
]
}

17
.cron Normal file
View File

@@ -0,0 +1,17 @@
Docker cleanup cron (host-side)
Purpose:
- Daily prune of unused images/containers/build cache for the runner host.
- Keeps bind-mounted data safe (no named volumes removed).
Schedule:
- 04:00 daily
Cron entry (root):
0 4 * * * root /usr/bin/docker image prune -af --filter "until=24h" && /usr/bin/docker container prune -f && /usr/bin/docker builder prune -af --filter "until=24h"
printf '%s\n' '0 4 * * * root /usr/bin/docker image prune -af --filter "until=24h" && /usr/bin/docker container prune -f && /usr/bin/docker builder prune -af --filter "until=24h"' | sudo tee /etc/cron.d/docker-prune
cat /etc/cron.d/docker-prune

View File

@@ -0,0 +1,21 @@
name: ShellCheck
on:
push:
paths:
- "dotfiles/**/*.sh"
- ".github/workflows/shellcheck.yml"
pull_request:
paths:
- "dotfiles/**/*.sh"
- ".github/workflows/shellcheck.yml"
jobs:
shellcheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install ShellCheck
run: sudo apt-get update && sudo apt-get install -y shellcheck
- name: Run ShellCheck
run: shellcheck dotfiles/**/*.sh

3
.gitignore vendored
View File

@@ -1,3 +1,2 @@
.sshinfo.txt
.context.json
contest-styles.json
.cron

440
contest-styles.json Normal file
View File

@@ -0,0 +1,440 @@
{
"project": "Bashrc Dotfiles",
"branch": "main",
"purpose": "DEFCON contest + custom render pack for PS1 styles",
"contest_pack": {
"layout_options": [
"day-time-user",
"user-time",
"time-user",
"day-time"
],
"host_path_format": "@host - /path",
"prefix_newline": true,
"emoji_set": {
"sunrise": [
"⚡️",
"🛰️",
"🧬",
"🧠"
],
"work": [
"🛠️",
"💾",
"🧪",
"🧩"
],
"coffee": "☕",
"evening": "🎛️",
"night": "🕶️"
}
},
"prompt_spacing": {
"emoji_padding": 2,
"note": "Two spaces after the emoji before the cursor"
},
"emoji_rules": {
"fixed_times": [
"11:00-11:29 => 🥪",
"16:00-16:59 => 🍲"
],
"time_slots": {
"sunrise": "05:00-08:59",
"coffee": "09:00-10:59",
"work": "11:30-15:59",
"evening": "17:00-22:59",
"night": "23:00-04:59"
},
"rotation": "Daily rotation by day-of-year with season offsets."
},
"holiday_pack": {
"layout_options": [
"day-time-user",
"user-time",
"time-user",
"day-time"
],
"host_path_format": "@host - /path",
"prefix_newline": true,
"themes": {
"christmas": {
"palette": { "Z1_BG": 52, "Z1_FG": 255, "Z2_BG": 28, "Z2_FG": 255, "PATH_FG": 194, "FRAME": 88 },
"emoji_set": {
"sunrise": [ "🎄", "🎅", "❄️", "⛄" ],
"work": [ "🎁", "🧤", "🧣", "🦌" ],
"coffee": "☕",
"evening": "🌟",
"night": "🕯️"
}
},
"easter": {
"palette": { "Z1_BG": 186, "Z1_FG": 16, "Z2_BG": 150, "Z2_FG": 16, "PATH_FG": 94, "FRAME": 143 },
"emoji_set": {
"sunrise": [ "🐣", "🥚", "🌷", "🌤" ],
"work": [ "🐰", "🌼", "🧺", "🍫" ],
"coffee": "☕",
"evening": "🌅",
"night": "🌙"
}
},
"halloween": {
"palette": { "Z1_BG": 53, "Z1_FG": 255, "Z2_BG": 166, "Z2_FG": 16, "PATH_FG": 16, "FRAME": 89 },
"emoji_set": {
"sunrise": [ "🎃", "🦇", "🌕", "🕸️" ],
"work": [ "👻", "💀", "🕯️", "🧪" ],
"coffee": "☕",
"evening": "🌆",
"night": "🕷️"
}
},
"valentine": {
"palette": { "Z1_BG": 198, "Z1_FG": 255, "Z2_BG": 205, "Z2_FG": 255, "PATH_FG": 224, "FRAME": 162 },
"emoji_set": {
"sunrise": [ "💖", "🌹", "💘", "💕" ],
"work": [ "💌", "🍫", "🕊️", "💗" ],
"coffee": "☕",
"evening": "🌆",
"night": "🌙"
}
},
"thanksgiving": {
"palette": { "Z1_BG": 94, "Z1_FG": 230, "Z2_BG": 136, "Z2_FG": 231, "PATH_FG": 223, "FRAME": 130 },
"emoji_set": {
"sunrise": [ "🦃", "🍁", "🥧", "🍂" ],
"work": [ "🍽️", "🌾", "🧺", "🥖" ],
"coffee": "☕",
"evening": "🌆",
"night": "🌙"
}
},
"newyear": {
"palette": { "Z1_BG": 17, "Z1_FG": 255, "Z2_BG": 20, "Z2_FG": 255, "PATH_FG": 229, "FRAME": 19 },
"emoji_set": {
"sunrise": [ "🎆", "🥂", "🎇", "✨" ],
"work": [ "🗓️", "⏳", "🚀", "✨" ],
"coffee": "☕",
"evening": "🌆",
"night": "🌙"
}
}
}
},
"custom_pack": {
"styles": [
{
"id": "radar",
"tagline": "Green scanline HUD",
"preview": "[user time] @host /path"
},
{
"id": "synthwave",
"tagline": "Pink/cyan/orange glow blocks",
"preview": "[date time user] | @host | /path"
},
{
"id": "noir",
"tagline": "Near-black minimal + red path",
"preview": "[date time user] @host /path"
},
{
"id": "topo",
"tagline": "Elevation path (multi-tone)",
"preview": "[date time user] @host /path"
},
{
"id": "glitch",
"tagline": "Jitter separators",
"preview": "[date time user] ~ @host /path"
},
{
"id": "arcticfire",
"tagline": "Ice blue to ember orange",
"preview": "[date time user] | @host | /path"
},
{
"id": "acidlime",
"tagline": "Black + electric green",
"preview": "[date time user] @host /path"
}
]
},
"styles": [
{
"id": "aurora",
"name": "Aurora",
"tagline": "Seasonal powerline glow",
"description": "Two-line powerline blocks with seasonal palette and calm hierarchy.",
"layout": {
"line1": "date time user | @host path",
"line2": "status arrow + emoji"
},
"colors": {
"palette_source": "seasonal",
"seasonal": true
},
"preview": "[date time user] > [@host /path]"
},
{
"id": "neon",
"name": "Neon",
"tagline": "Cyber-magenta strike",
"description": "Magenta + cyan blocks, high contrast, aggressive read.",
"layout": {
"line1": "user time | @host path",
"line2": "status arrow + emoji"
},
"colors": {
"zone1_bg": 201,
"zone1_fg": 255,
"zone2_bg": 45,
"zone2_fg": 16,
"path_fg": 16,
"frame": 199
},
"preview": "[user time] > [@host /path]"
},
{
"id": "forge",
"name": "Forge",
"tagline": "Copper heatline",
"description": "Warm copper blocks with heavy frame and bold emphasis.",
"layout": {
"line1": "date time user | @host path",
"line2": "status arrow + emoji"
},
"colors": {
"zone1_bg": 94,
"zone1_fg": 230,
"zone2_bg": 166,
"zone2_fg": 231,
"path_fg": 224,
"frame": 130
},
"preview": "[date time user] > [@host /path]"
},
{
"id": "circuit",
"name": "Circuit",
"tagline": "Green scanline rail",
"description": "Minimal rails, green scanline glow, compact density.",
"layout": {
"line1": "user time - @host path",
"line2": "status arrow + emoji"
},
"colors": {
"fg_primary": 46,
"fg_dim": 22,
"path_fg": 120
},
"preview": "[user time] - @host /path"
},
{
"id": "mono",
"name": "Mono",
"tagline": "No-frills sniper view",
"description": "Monochrome clarity with minimal chrome.",
"layout": {
"line1": "date time user @host path",
"line2": "status arrow + emoji"
},
"colors": {
"fg_primary": 250,
"fg_dim": 240
},
"preview": "[date time user] @host /path"
},
{
"id": "git",
"name": "Git",
"tagline": "Repo-aware minimalism",
"description": "Minimal blocks with git capsule on line 2.",
"layout": {
"line1": "date time user | @host - /path",
"line2": "status arrow + emoji + git"
},
"colors": {
"zone1_bg": 61,
"zone1_fg": 255,
"zone2_bg": 37,
"zone2_fg": 255,
"path_fg": 194,
"frame": 60
},
"preview": "[date time user] @host - /path (git)"
},
{
"id": "hawolex",
"name": "Hawolex",
"tagline": "Winter neon, tech icons",
"description": "Contest layout with winter-strong palette and tech emojis.",
"layout": {
"line1": "date time user | @host - /path",
"line2": "status arrow + emoji"
},
"colors": {
"zone1_bg": 54,
"zone1_fg": 255,
"zone2_bg": 31,
"zone2_fg": 255,
"path_fg": 230,
"frame": 24
},
"preview": "[date time user] @host - /path"
},
{
"id": "hawolexv2",
"name": "HawolexV2",
"tagline": "Winter neon gradient",
"description": "Multi-segment winter neon gradient with stronger separation.",
"layout": {
"line1": "date time user | @host | /path",
"line2": "status arrow + emoji"
},
"colors": {
"zone1_bg": 54,
"zone2_bg": 55,
"zone3_bg": 56,
"zone4_bg": 31,
"zone5_bg": 30,
"zone_fg": 255,
"path_fg": 230,
"frame": 24
},
"preview": "[date time user] @host - /path"
},
{
"id": "radar",
"name": "Radar",
"tagline": "Green scanline HUD",
"description": "Minimal HUD lines with green signal accents.",
"layout": {
"line1": "user time @host /path",
"line2": "status arrow + emoji"
},
"colors": {
"frame": 22,
"fg_main": 46,
"fg_dim": 28,
"path_fg": 120
},
"preview": "[user time] @host /path"
},
{
"id": "synthwave",
"name": "Synthwave",
"tagline": "Pink/cyan/orange glow",
"description": "Three-block powerline glow in neon tones.",
"layout": {
"line1": "date time user | @host | /path",
"line2": "status arrow + emoji"
},
"colors": {
"zone1_bg": 198,
"zone1_fg": 255,
"zone2_bg": 45,
"zone2_fg": 16,
"zone3_bg": 208,
"zone3_fg": 16,
"frame": 201
},
"preview": "[date time user] | @host | /path"
},
{
"id": "noir",
"name": "Noir",
"tagline": "Near-black minimal",
"description": "Low-light mono with a red path accent.",
"layout": {
"line1": "date time user @host /path",
"line2": "status arrow + emoji"
},
"colors": {
"fg_main": 250,
"fg_dim": 242,
"path_fg": 160,
"frame": 236
},
"preview": "[date time user] @host /path"
},
{
"id": "topo",
"name": "Topo",
"tagline": "Elevation path",
"description": "Multi-tone path segments for depth.",
"layout": {
"line1": "date time user @host /path",
"line2": "status arrow + emoji"
},
"colors": {
"path_fg": [109, 110, 111, 110],
"frame": 24
},
"preview": "[date time user] @host /path"
},
{
"id": "glitch",
"name": "Glitch",
"tagline": "Jitter separators",
"description": "Shifting glyph separators in neon tones.",
"layout": {
"line1": "date time user ~ @host /path",
"line2": "status arrow + emoji"
},
"colors": {
"fg_main": 118,
"fg_dim": 60,
"frame": 129
},
"preview": "[date time user] ~ @host /path"
},
{
"id": "arcticfire",
"name": "ArcticFire",
"tagline": "Ice to ember",
"description": "Cold blues into hot orange, three blocks.",
"layout": {
"line1": "date time user | @host | /path",
"line2": "status arrow + emoji"
},
"colors": {
"zone1_bg": 24,
"zone1_fg": 255,
"zone2_bg": 31,
"zone2_fg": 255,
"zone3_bg": 208,
"zone3_fg": 16,
"frame": 25
},
"preview": "[date time user] | @host | /path"
},
{
"id": "acidlime",
"name": "AcidLime",
"tagline": "Electric green",
"description": "Black background with green signal.",
"layout": {
"line1": "date time user @host /path",
"line2": "status arrow + emoji"
},
"colors": {
"fg_main": 46,
"fg_dim": 40,
"path_fg": 118,
"frame": 46
},
"preview": "[date time user] @host /path"
}
],
"seasonal_palettes": {
"winter": { "Z1_BG": 59, "Z2_BG": 61, "Z3_BG": 63, "Z4_BG": 38, "Z5_BG": 37, "Z1_FG": 255, "Z2_FG": 255, "PATH_FG": 152, "FRAME": 60 },
"spring": { "Z1_BG": 68, "Z2_BG": 70, "Z3_BG": 72, "Z4_BG": 121, "Z5_BG": 120, "Z1_FG": 255, "Z2_FG": 22, "PATH_FG": 28, "FRAME": 65 },
"summer": { "Z1_BG": 141, "Z2_BG": 142, "Z3_BG": 143, "Z4_BG": 214, "Z5_BG": 208, "Z1_FG": 255, "Z2_FG": 0, "PATH_FG": 0, "FRAME": 130 },
"autumn": { "Z1_BG": 93, "Z2_BG": 95, "Z3_BG": 97, "Z4_BG": 166, "Z5_BG": 136, "Z1_FG": 255, "Z2_FG": 255, "PATH_FG": 223, "FRAME": 95 }
},
"notes": [
"Palette values are 256-color codes.",
"Aurora uses seasonal palettes; other styles use fixed palettes.",
"Previews are textual layout hints for rendering.",
"Contest pack prepends a blank line and always ends with host - path."
]
}

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env bash
# PS1 module with Nerd Font fallback + disable switch
# Designed for bash 3.2+ (macOS) and bash 4/5 (Linux)
# Designed for bash 3.2+ (macOS) and bash 4/5 (Linux)
# Load this in interactive shells.
case "$-" in