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