Files
ps1-craft/.context.json
2026-01-25 02:26:16 +00:00

550 lines
15 KiB
JSON

{
"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)."
]
}