Compare commits

...

22 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
dd1ba72cd1 Silence ShellCheck warnings
All checks were successful
ShellCheck / shellcheck (push) Successful in 13s
2026-01-25 00:23:55 +00:00
0e87cee872 Use apt ShellCheck in CI 2026-01-25 00:18:22 +00:00
18eda7ae6b Fix ShellCheck action version 2026-01-25 00:17:05 +00:00
4a7cdcc11f Polish docs and repo hygiene 2026-01-25 00:14:21 +00:00
2443820037 Add LICENSE 2026-01-25 00:01:39 +00:00
f5386bc047 Stop tracking JSON config files 2026-01-25 00:00:12 +00:00
ec18a4d68f My ps1 crafts 2026-01-24 23:57:16 +00:00
d1ee693044 Ignore local SSH notes 2026-01-24 21:23:44 +00:00
3fb8b9697a Clarify git capsule state meanings 2026-01-24 20:44:31 +00:00
12fc686de1 Document git capsule in library 2026-01-24 20:40:29 +00:00
12 changed files with 276 additions and 33 deletions

View File

@@ -1,17 +1,22 @@
{
"project": {
"name": "Bashrc Dotfiles",
"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"
"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."
"README example image uses images/bash-pallete.png.",
"GitHub mirror is active at git@github.com:Hawolex/ps1-craft.git."
]
}
},
@@ -21,7 +26,10 @@
"macos_installer": "dotfiles/install/install-macos-user.sh",
"global_installer_wrapper": "dotfiles/install/install-global-ps1.sh",
"readme": "README.md",
"library": "libary.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": {
@@ -532,6 +540,10 @@
"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)."
"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

18
.editorconfig Normal file
View File

@@ -0,0 +1,18 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[*.sh]
indent_style = space
indent_size = 2
[*.yml]
indent_style = space
indent_size = 2

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

21
.github/workflows/shellcheck.yml vendored Normal file
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

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
.sshinfo.txt
.cron

22
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,22 @@
# Contributing
Thanks for helping improve ps1-craft. Keep changes small, readable, and fast.
## Style rules
- Keep the prompt hot path fast (no external commands unless feature-gated).
- Use `printf` over `echo` for formatting.
- Quote variables and paths; avoid word-splitting.
- Maintain bash 3.2 compatibility for macOS.
## Add a new theme or palette
1) Update `dotfiles/ps1/ps1.sh` with the new colors/icons.
2) Add a screenshot under `images/themes/`.
3) Document it in `library.md` and `README.md`.
## Testing
- Run the installer script you changed.
- Open a new shell and verify the prompt renders.
- Run ShellCheck on `dotfiles/**/*.sh`.

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 Steffen Skui
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,19 +1,31 @@
# Bashrc Dotfiles — Global & Portable Bash Prompt
# ps1-craft — Global & Portable Bash Prompt
Elegant, portable, and easy-to-install Bash prompt with seasonal palettes, time-aware emoji, and clean powerline structure.
## ⚡ 10-Second Demo
```text
[Mon 14:32 steffen] ▶
@host ~/ps1-craft ⟦main⟧ ✨
```
Preview (Aurora seasonal):
![Aurora (seasonal)](images/themes/season-winter.png)
---
## ⚡ Quick Look
- Theme gallery + full specs: [Theme Library](libary.md)
- Theme gallery + full specs: [Theme Library](library.md)
- Install scope + rollback: [UNINSTALL.md](UNINSTALL.md)
- Packs: Seasonal (auto), Contest, Holidays, Custom, Git
- Layout order option: day-time-user, user-time, time-user, day-time
- Optional git capsule across themes
## ✅ Requirements (Nerd Fonts)
This prompt relies on Nerd Font glyphs for the rounded separators.
This prompt relies on Nerd Fonts glyphs for the rounded separators.
```bash
bash dotfiles/install/install-nerdfont.sh
@@ -21,13 +33,29 @@ bash dotfiles/install/install-nerdfont.sh
After install:
- Set your terminal font to JetBrainsMono Nerd Font (or any Nerd Font)
- Set your terminal font to JetBrainsMono Nerd Font (or any Nerd Fonts family)
- Manual download: https://www.nerdfonts.com/font-downloads
If you use a nonNerd font, the prompt falls back to ASCII/Unicode.
---
## ⚠️ Safety / Scope (global install)
Linux/WSL installs are global and modify system files:
- Writes `/etc/profile.d/ps1.sh` and `/etc/profile.d/banner.sh`
- Writes `/etc/ps1-season`, `/etc/ps1-style`, and `/etc/ps1-punchline`
- Adds a managed source block in `/etc/bash.bashrc`
Rollback and uninstall steps live in [UNINSTALL.md](UNINSTALL.md). You can also disable per user:
- `export DISABLE_GLOBAL_PS1=1`
- `export DISABLE_GLOBAL_BANNER=1`
- `touch ~/.config/ps1/disable` (PS1) or `touch ~/.config/ps1/disable-banner` (banner)
---
## 🚀 Install
### 🐧 Linux / WSL (global, all users)
@@ -35,13 +63,13 @@ If you use a nonNerd font, the prompt falls back to ASCII/Unicode.
1) Clone the repo:
```bash
git clone <repo-url>
git clone git@github.com:Hawolex/ps1-craft.git
```
2) Enter the folder:
```bash
cd Bashrc
cd ps1-craft
```
3) Run the global installer (auto-installs deps + prompts for punchline):
@@ -57,13 +85,13 @@ sudo bash dotfiles/install/install-linux-global.sh
1) Clone the repo:
```bash
git clone <repo-url>
git clone git@github.com:Hawolex/ps1-craft.git
```
2) Enter the folder:
```bash
cd Bashrc
cd ps1-craft
```
3) Run the user installer:
@@ -194,6 +222,12 @@ echo "Your punchline" | sudo tee /etc/ps1-punchline >/dev/null
## 🎛️ Themes & Style Packs
Terminology:
- Theme = palette + emoji set
- Style = layout + separators
- Pack = a curated set of styles/themes
### 🏁 Contest Pack
The contest pack is a bold, DEFCON-ready set of five styles (Aurora, Neon, Forge, Circuit, Mono) with optional layout order. It always starts on a new line and ends with `@host - /path`.
@@ -225,11 +259,13 @@ Custom styles add a small context badge when relevant (`ssh`, `ctr`, `git`).
The Git theme adds a repo-aware capsule on line 2 that only appears inside a Git repo. The branch name is wrapped as `⟦branch⟧`, and status emojis reflect state:
- Clean: ✨
- Dirty: 🔨
- Staged: 📌
- Untracked: 🧷
- Stashed: 📦
```text
Clean ✨
Dirty 🔨
Staged 📌
Untracked 🧷
Stashed 📦
```
It uses the same two-block layout as Aurora, but focuses on signal and minimal noise for fast scanning. Use it when you want repo status on every command without a full VCS prompt.
@@ -294,12 +330,16 @@ Meaning:
```text
.
├── .context.json
├── contest-styles.json
├── images/
├── bash-pallete.png
│ └── contest.png
│ └── themes/
├── .editorconfig
├── .github/
│ └── workflows/
└── shellcheck.yml
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── UNINSTALL.md
├── library.md
├── dotfiles/
│ ├── banner/
│ │ └── banner.sh
@@ -310,7 +350,9 @@ Meaning:
│ ├── install-linux-global.sh
│ ├── install-macos-user.sh
│ └── install-nerdfont.sh
└── README.md
└── images/
├── bash-pallete.png
└── themes/
```
<details>
@@ -318,7 +360,7 @@ Meaning:
Sometimes autodetection doesnt work (e.g., on macOS without fontconfig):
Force Nerd Font glyphs:
Force Nerd Fonts glyphs:
```bash
export PS1_FORCE_NF=1
@@ -335,6 +377,14 @@ Add these to your `~/.bashrc` or `~/.bash_profile`.
---
## ⚙️ Performance Notes
- Git capsule work only runs inside a Git repo and only when enabled
- Large repos can slow status checks; disable with `PS1_GIT=0` or avoid the Git theme
- Prompt logic avoids external commands unless a feature is enabled (banner, git capsule)
---
<details>
<summary><strong>Disable prompt (per user)</strong></summary>
@@ -445,10 +495,7 @@ Palette reference:
Want to help improve this project?
- Fork the repository
- Make your changes
- Open a merge request
- Please keep consistent colors and styles
- See [CONTRIBUTING.md](CONTRIBUTING.md) for style rules and how to add a new theme/palette
---

35
UNINSTALL.md Normal file
View File

@@ -0,0 +1,35 @@
# Uninstall
## Linux / WSL (global)
Remove installed files:
```bash
sudo rm -f /etc/profile.d/ps1.sh /etc/profile.d/banner.sh
sudo rm -f /etc/ps1-season /etc/ps1-style /etc/ps1-punchline
```
Remove the managed block from `/etc/bash.bashrc`:
```bash
sudo sed -i '/# >>> dotfiles (managed) >>>/,/# <<< dotfiles (managed) <<</d' /etc/bash.bashrc
```
Open a new shell to confirm the prompt is gone.
## macOS (per-user)
Remove installed files:
```bash
rm -f ~/.config/ps1/ps1.sh ~/.config/ps1/season ~/.config/ps1/style
```
Remove the managed block from your shell configs:
```bash
sed -i '' '/# >>> user ps1 (managed) >>>/,/# <<< user ps1 (managed) <<</d' ~/.bashrc
sed -i '' '/# >>> user ps1 (managed) >>>/,/# <<< user ps1 (managed) <<</d' ~/.bash_profile
```
Open a new shell or run `source ~/.bashrc`.

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
@@ -220,6 +220,7 @@ __try_source_git_prompt() {
"/etc/bash_completion.d/git-prompt.sh"
)
for f in "${candidates[@]}"; do
# shellcheck disable=SC1090
[[ -r "$f" ]] && source "$f" && return 0
done
return 1
@@ -380,7 +381,9 @@ _ps1_symbol() {
coffee="☕"; evening="🌆"; night="🌙"
;;
*)
# shellcheck disable=SC2034
sunrise_list=( "🏔️" "🌨️" "❄️" "🌌" )
# shellcheck disable=SC2034
work_list=( "🎿" "⛷️" "🏂" "🧊" )
coffee="☕"; evening="🌆"; night="🌙"
;;
@@ -720,7 +723,8 @@ ${PREFIX}${M_FG}⟦${L1}⟧ ${M_DIM}${HOST_PART}${PATH_SEP}${M_FG}${PATH_PART}${
local G_Z2_BG="\[\e[48;5;37m\]"
local G_Z2_FG="\[\e[38;5;255m\]"
local G_PATH_FG="\[\e[38;5;194m\]"
local GIT_INFO="$(__git_capsule)"
local GIT_INFO
GIT_INFO="$(__git_capsule)"
local G_LEFT=""
local G_RIGHT=""
local G_SEP=""
@@ -864,7 +868,8 @@ ${T_FRAME}╭─${RST}${T_MAIN}${L1}${RST} ${T_FRAME}${L_HOST}${RST} $(_ps1_path
local G_FRAME="\[\e[38;5;129m\]"
local G_MAIN="\[\e[38;5;118m\]"
local G_DIM="\[\e[38;5;60m\]"
local G_SEP="$(_ps1_glitch_glyph)"
local G_SEP
G_SEP="$(_ps1_glitch_glyph)"
PS1="\
${G_FRAME}╭─${RST}${G_MAIN}${L1}${RST} ${G_DIM}${G_SEP}${RST} ${G_MAIN}${L_HOST} ${RST}${G_DIM}${G_SEP}${RST} ${G_MAIN}${__PS1_PATH}${RST}\
\n${G_FRAME}╰─${RST}${prompt_sym} ${__PS1_SYM}${git_tail}"

View File

@@ -2,6 +2,28 @@
This file lists every prompt theme, color codes, design intent, and configuration options.
## Git Capsule (optional, all themes)
What it is: a compact git status block shown on line 2 when you're inside a git repo.
It uses `__git_ps1` when available, with a safe fallback to `git rev-parse` for the branch.
States + emojis (plain language):
- Clean repo: ✨ no local changes; your files match the last commit
- Dirty working tree: 🔨 you edited tracked files but havent staged them yet
- Staged changes: 📌 changes are staged and ready to commit
- Untracked files: 🧷 new files git hasnt started tracking
- Stashed changes: 📦 work saved with `git stash` (not in your working tree)
How it works:
- The capsule only renders when a repo is detected (no extra noise outside git).
- If `__git_ps1` is available, it reads git state flags and maps them to emojis.
- If not, it falls back to the current branch/short SHA (still useful, but fewer states).
Best practices:
- Keep the capsule on during active work; it surfaces risk at a glance.
- If you want faster prompts in very large repos, leave untracked detection off.
- Use the Git theme for a minimal, work-safe look with the capsule always enabled.
## Seasonal (Aurora, Standard Pack)
Design intent: calm, readable, long-session comfort with a subtle five-step gradient