From 0481603e6293443a946fbd7d594cd1145214f4f1 Mon Sep 17 00:00:00 2001 From: Aygea Date: Sat, 28 Mar 2026 20:18:37 -0700 Subject: [PATCH] AygeaNight terminal theme macOS/Ubuntu/Arch config files for iTerm2, tmux, starship prompt, and fox kitsune fetch scripts in brand colors. Co-Authored-By: Claude Opus 4.6 --- .gitignore | 5 + AygeaNight.itermcolors | 251 ++++++++++++++++++++++++++++++++++++ README.md | 32 +++++ TERMINAL-SETUP.md | 226 ++++++++++++++++++++++++++++++++ assets/tmux.png | Bin 0 -> 112574 bytes fetch/aygeafetch-arch.sh | 248 +++++++++++++++++++++++++++++++++++ fetch/aygeafetch-ubuntu.sh | 257 +++++++++++++++++++++++++++++++++++++ fetch/aygeafetch.zsh | 244 +++++++++++++++++++++++++++++++++++ starship.toml | 203 +++++++++++++++++++++++++++++ tmux.conf | 166 ++++++++++++++++++++++++ 10 files changed, 1632 insertions(+) create mode 100644 .gitignore create mode 100644 AygeaNight.itermcolors create mode 100644 README.md create mode 100644 TERMINAL-SETUP.md create mode 100644 assets/tmux.png create mode 100644 fetch/aygeafetch-arch.sh create mode 100644 fetch/aygeafetch-ubuntu.sh create mode 100644 fetch/aygeafetch.zsh create mode 100644 starship.toml create mode 100644 tmux.conf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..43e15a1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Font files — download separately from nerdfonts.com +fonts/ + +# macOS +.DS_Store diff --git a/AygeaNight.itermcolors b/AygeaNight.itermcolors new file mode 100644 index 0000000..a01b068 --- /dev/null +++ b/AygeaNight.itermcolors @@ -0,0 +1,251 @@ + + + + + + + + + + Ansi 0 Color + + Color SpacesRGB + Red Component 0.10 + Green Component0.11 + Blue Component 0.16 + + + + Ansi 1 Color + + Color SpacesRGB + Red Component 0.42 + Green Component0.10 + Blue Component 0.23 + + + + Ansi 2 Color + + Color SpacesRGB + Red Component 0.10 + Green Component0.29 + Blue Component 0.35 + + + + Ansi 3 Color + + Color SpacesRGB + Red Component 0.60 + Green Component0.55 + Blue Component 0.78 + + + + Ansi 4 Color + + Color SpacesRGB + Red Component 0.059 + Green Component0.322 + Blue Component 0.729 + + + + Ansi 5 Color + + Color SpacesRGB + Red Component 0.780 + Green Component0.549 + Blue Component 0.659 + + + + Ansi 6 Color + + Color SpacesRGB + Red Component 0.459 + Green Component0.722 + Blue Component 0.878 + + + + Ansi 7 Color + + Color SpacesRGB + Red Component 0.780 + Green Component0.820 + Blue Component 0.878 + + + + Ansi 8 Color + + Color SpacesRGB + Red Component 0.165 + Green Component0.227 + Blue Component 0.369 + + + + Ansi 9 Color + + Color SpacesRGB + Red Component 0.769 + Green Component0.447 + Blue Component 0.541 + + + + Ansi 10 Color + + Color SpacesRGB + Red Component 0.157 + Green Component0.490 + Blue Component 0.576 + + + + Ansi 11 Color + + Color SpacesRGB + Red Component 0.788 + Green Component0.722 + Blue Component 0.910 + + + + Ansi 12 Color + + Color SpacesRGB + Red Component 0.686 + Green Component0.796 + Blue Component 1.000 + + + + Ansi 13 Color + + Color SpacesRGB + Red Component 0.941 + Green Component0.776 + Blue Component 0.859 + + + + Ansi 14 Color + + Color SpacesRGB + Red Component 0.867 + Green Component0.933 + Blue Component 1.000 + + + + Ansi 15 Color + + Color SpacesRGB + Red Component 0.957 + Green Component0.973 + Blue Component 1.000 + + + + + + Background Color + + Color SpacesRGB + Red Component 0.063 + Green Component0.071 + Blue Component 0.118 + + + + Foreground Color + + Color SpacesRGB + Red Component 0.753 + Green Component0.820 + Blue Component 0.902 + + + + Bold Color + + Color SpacesRGB + Red Component 0.957 + Green Component0.973 + Blue Component 1.000 + + + + Cursor Color + + Color SpacesRGB + Red Component 0.686 + Green Component0.796 + Blue Component 1.000 + + + + Cursor Text Color + + Color SpacesRGB + Red Component 0.063 + Green Component0.071 + Blue Component 0.118 + + + + Selection Color + + Color SpacesRGB + Red Component 0.106 + Green Component0.141 + Blue Component 0.220 + + + + Selected Text Color + + Color SpacesRGB + Red Component 0.957 + Green Component0.973 + Blue Component 1.000 + + + + Link Color + + Color SpacesRGB + Red Component 0.290 + Green Component0.565 + Blue Component 0.886 + + + + Tab Color + + Color SpacesRGB + Red Component 0.063 + Green Component0.071 + Blue Component 0.118 + + + Badge Color + + Color SpacesRGB + Red Component 0.686 + Green Component0.796 + Blue Component 1.000 + Alpha Component0.6 + + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..5bcbef3 --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +# AygeaNight + +Tokyo Night base with Aygea brand accent colors. Baby blue, sapphire, pink, silver on dark navy. + +AygeaNight tmux theme + +> **This is a personal terminal theme for my own machines.** It's not a framework or library — just a collection of config files I use daily. If it's useful to you, cool, but I'm not supporting it or taking requests. + +## What's included + +| File | What it does | +|---|---| +| `AygeaNight.itermcolors` | iTerm2 color scheme | +| `tmux.conf` | tmux status bar and colors | +| `starship.toml` | Shell prompt theme | +| `fetch/aygeafetch.zsh` | System fetch for macOS (zsh) | +| `fetch/aygeafetch-ubuntu.sh` | System fetch for Ubuntu (bash) | +| `fetch/aygeafetch-arch.sh` | System fetch for Arch Linux (bash) | + +## Setup guide + +See [TERMINAL-SETUP.md](TERMINAL-SETUP.md) for full step-by-step install instructions. + +## Font + +This theme uses **JetBrainsMono Nerd Font**. It's not included in this repo — download it from [nerdfonts.com](https://www.nerdfonts.com/font-downloads). + +## Colors + +Baby Blue `#AFCBFF` · Soft Pink `#F8C8DC` · Silver `#E6EEF8` · Sapphire `#6A8FD3` · Pink Dark `#D88CA8` · Silver Dark `#C0D1E6` · Purple `#9480B9` · Purple Dark `#5A4878` · Deep Sapphire `#0F52BA` · Sapphire Dark `#083B89` + +Background: Tokyo Night base `#0F1020` diff --git a/TERMINAL-SETUP.md b/TERMINAL-SETUP.md new file mode 100644 index 0000000..757f4c9 --- /dev/null +++ b/TERMINAL-SETUP.md @@ -0,0 +1,226 @@ +# 🦊 AygeaNight Terminal Setup Guide + +Tokyo Night base · Aygea brand accent colors +Baby blue, sapphire, pink, silver — dark navy background + +--- + +## Files in this repo + +| File | Goes to | What it does | +|---|---|---| +| `AygeaNight.itermcolors` | double-click to install | iTerm2 color scheme | +| `tmux.conf` | `~/.tmux.conf` | tmux status bar + colors | +| `starship.toml` | `~/.config/starship.toml` | shell prompt | +| `fetch/aygeafetch.zsh` | macOS system fetch | fox + system info | +| `fetch/aygeafetch-ubuntu.sh` | Ubuntu system fetch | fox + system info | +| `fetch/aygeafetch-arch.sh` | Arch system fetch | fox + system info | + +--- + +## Step 1 — Install a Nerd Font (required for icons) + +Without this you'll see boxes or `>` instead of icons and powerline arrows in tmux and Starship. + +1. Go to https://www.nerdfonts.com/font-downloads +2. Download **JetBrainsMono Nerd Font** +3. Unzip and double-click each `.ttf` file to install via Font Book +4. In iTerm2: Preferences → Profiles → Text → Font → select **JetBrainsMono Nerd Font** + - Check "Use a different font for non-ASCII text" → same font + +--- + +## Step 2 — Install iTerm2 color scheme (macOS only) + +1. Double-click `AygeaNight.itermcolors` — iTerm2 imports it automatically +2. iTerm2 → Preferences → Profiles → Colors → Color Presets → **AygeaNight** + +Optional vibe tweaks: +- Profiles → Window → Transparency: ~10–15% +- Profiles → Window → Blur: ~20 +- Profiles → Window → Background image: drag any image, set opacity ~8% + +--- + +## Step 3 — Set up tmux + +```bash +cp tmux.conf ~/.tmux.conf +tmux kill-server +tmux +``` + +Reload from inside tmux any time with `Ctrl+A then R`. + +--- + +## Step 4 — Starship prompt + +### macOS (zsh) + +```bash +brew install starship +mkdir -p ~/.config +cp starship.toml ~/.config/starship.toml +echo 'eval "$(starship init zsh)"' >> ~/.zshrc +source ~/.zshrc +``` + +### Linux — Ubuntu + +```bash +curl -sS https://starship.rs/install.sh | sh +mkdir -p ~/.config +cp starship.toml ~/.config/starship.toml +``` + +Add to `~/.bashrc` **above everything else**: + +```bash +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 +export TERM=xterm-256color +export COLORTERM=truecolor +``` + +Then add starship at the **very end** of `~/.bashrc`: + +```bash +eval "$(starship init bash)" +``` + +**Locale setup (required — fixes broken ╭─ ╰─ ❯ inside tmux):** + +```bash +sudo apt-get install -y locales +sudo locale-gen en_US.UTF-8 +sudo update-locale LANG=en_US.UTF-8 +# must fully log out and back in — source alone is not enough +tmux kill-server +tmux +``` + +### Linux — Arch + +```bash +curl -sS https://starship.rs/install.sh | sh +mkdir -p ~/.config +cp starship.toml ~/.config/starship.toml +``` + +Add to `~/.bashrc` **above everything else**: + +```bash +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 +export TERM=xterm-256color +export COLORTERM=truecolor +``` + +Then add at the **very end**: +```bash +eval "$(starship init bash)" +``` + +**Locale setup on Arch** (different from Ubuntu — no package needed): + +```bash +sudo nano /etc/locale.gen +# uncomment this line: +# en_US.UTF-8 UTF-8 +sudo locale-gen +sudo localectl set-locale LANG=en_US.UTF-8 +# log out and back in +tmux kill-server +tmux +``` + +--- + +## Step 5 — Fetch Scripts (optional — system info with fox mascot) + +Three self-contained fetch scripts that display a chibi white fox kitsune alongside your system info in AygeaNight brand colors. No dependencies — pure shell. + +| File | Platform | Shell | +|---|---|---| +| `fetch/aygeafetch.zsh` | macOS | zsh | +| `fetch/aygeafetch-ubuntu.sh` | Ubuntu Linux | bash | +| `fetch/aygeafetch-arch.sh` | Arch Linux | bash | + +### macOS (zsh) + +```bash +chmod +x fetch/aygeafetch.zsh +cp fetch/aygeafetch.zsh ~/aygeafetch.zsh +``` + +Add to `~/.zshrc` (at the end): + +```bash +aygeafetch +# or: source ~/aygeafetch.zsh +``` + +### Ubuntu (bash) + +```bash +chmod +x fetch/aygeafetch-ubuntu.sh +sudo cp fetch/aygeafetch-ubuntu.sh /usr/local/bin/aygeafetch +``` + +Add to `~/.bashrc` (at the end): + +```bash +aygeafetch +``` + +### Arch Linux (bash) + +```bash +chmod +x fetch/aygeafetch-arch.sh +sudo cp fetch/aygeafetch-arch.sh /usr/local/bin/aygeafetch +``` + +Add to `~/.bashrc` (at the end): + +```bash +aygeafetch +``` + +--- + +## Troubleshooting + +**Icons showing as boxes/squares:** +→ Nerd Font not set in iTerm2. Preferences → Profiles → Text → Font. + +**Powerline arrows showing as `>` or `?`:** +→ Same as above — Nerd Font required. + +**╭─ ╰─ showing as `_─` or garbled in tmux:** +→ Locale not installed. Follow the locale setup steps for your distro. Must log out completely, not just source. + +**tmux colors look wrong / still greenish:** +→ Run `tmux kill-server` then start fresh. Sourcing `.tmux.conf` alone doesn't always apply all color changes. + +**Selection highlight invisible in tmux:** +→ Check `~/.tmux.conf` has: `set -g mode-style "fg=#0F1020,bg=#AFCBFF,bold"` + +**Prompt not drawing correctly inside tmux:** +→ Make sure `TERM` and `COLORTERM` exports are at the top of `~/.bashrc` before everything else, then `tmux kill-server` and start fresh. + +**Starship not loading:** +→ The eval line must be at the very END of your rc file, after all exports. + +**Locale error: `cannot change locale (en_US.UTF-8)`:** +→ The locale isn't generated yet. Run the locale setup steps for your distro above. + +**Mac prompt has unwanted gap between ╭─ and ╰─:** +→ Remove any blank line or trailing `\` after `$time` in `~/.config/starship.toml`. + +**tmux prefix key:** +→ This config uses `Ctrl+A` instead of the tmux default `Ctrl+B`. + +--- + +*AygeaNight — built March 2026* 🦊 diff --git a/assets/tmux.png b/assets/tmux.png new file mode 100644 index 0000000000000000000000000000000000000000..94ac8f80fa1e88db68c850bd81ad676ee01e3cba GIT binary patch literal 112574 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� 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 literal 0 HcmV?d00001 diff --git a/fetch/aygeafetch-arch.sh b/fetch/aygeafetch-arch.sh new file mode 100644 index 0000000..bc0845d --- /dev/null +++ b/fetch/aygeafetch-arch.sh @@ -0,0 +1,248 @@ +#!/usr/bin/env bash +# ╭──────────────────────────────────────────────────────────────╮ +# │ aygeafetch-arch.sh · AygeaNight system fetch · Arch │ +# │ Fox kitsune ASCII art + system info in brand colors │ +# ╰──────────────────────────────────────────────────────────────╯ +# +# INSTALL: +# chmod +x fetch/aygeafetch-arch.sh +# sudo cp fetch/aygeafetch-arch.sh /usr/local/bin/aygeafetch +# Add to ~/.bashrc (at the end): +# aygeafetch +# +# REQUIREMENTS: +# - bash 4+ +# - Truecolor terminal +# - A Nerd Font for best results +# +# NO EXTERNAL DEPENDENCIES - pure bash, no python/jq/neofetch + +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 + +COLOR=0 +[[ -t 1 ]] && COLOR=1 + +ART_W=27 +GAP=3 + +# ── Helper: truecolor foreground escape ───────────────────────── +_c() { + [[ "$COLOR" = 1 ]] && printf '\033[38;2;%s;%s;%sm' "$1" "$2" "$3" +} + +R="" +[[ "$COLOR" = 1 ]] && R=$(printf '\033[0m') + +# ── Helper: visible length (strips ANSI, pure shell) ──────────── +_vlen() { + local s="$1" out="" i=0 len=${#1} char skip=0 + while (( i < len )); do + char="${s:$i:1}" + if (( skip )); then + case "$char" in [a-zA-Z]) skip=0 ;; esac + (( i++ )) && continue + fi + if [[ "$char" == $(printf '\033') ]]; then + skip=1 + (( i++ )) && continue + fi + out="${out}${char}" + (( i++ )) + done + printf '%s' "${#out}" +} + +# ── Helper: pad art line to ART_W visible chars ───────────────── +_pad() { + local vis + vis=$(_vlen "$1") + printf '%s%*s' "$1" $((ART_W - vis)) "" +} + +# ── Palette shortcuts ─────────────────────────────────────────── +_s=$(_c 230 238 248); _e=$(_c 15 82 186) +_b=$(_c 245 195 215); _p=$(_c 248 200 220) +_m=$(_c 216 140 168); _x=$(_c 155 135 195) +_d=$(_c 105 88 140); _f=$(_c 192 209 230) +_t1=$(_c 210 218 238); _t2=$(_c 170 182 210) +_t3=$(_c 130 145 175); _t4=$(_c 106 122 150) + +# ── ASCII art (24 lines) ──────────────────────────────────────── +declare -a ART +ART=() +ART+=("$(printf '%s /\\ /\\%s' "$_s" "$R")") +ART+=("$(printf '%s / \\ / \\%s' "$_s" "$R")") +ART+=("$(printf '%s / %s/\\%s\\ / %s/\\%s\\%s' "$_s" "$_p" "$_s" "$_p" "$_s" "$R")") +ART+=("$(printf '%s / %s/ \\%s\\ / %s/ \\%s\\%s' "$_s" "$_p" "$_s" "$_p" "$_s" "$R")") +ART+=("$(printf '%s | |%s' "$_f" "$R")") +ART+=("$(printf '%s | %s* * %s|%s' "$_f" "$_b" "$_f" "$R")") +ART+=("$(printf '%s | |%s' "$_f" "$R")") +ART+=("$(printf '%s | %s@@ @@%s %s|%s' "$_f" "$_e" "$R" "$_f" "$R")") +ART+=("$(printf '%s | |%s' "$_f" "$R")") +ART+=("$(printf '%s | %s* * %s|%s' "$_f" "$_b" "$_f" "$R")") +ART+=("$(printf '%s | %s.w.%s %s|%s' "$_f" "$_m" "$R" "$_f" "$R")") +ART+=("$(printf '%s | |%s' "$_f" "$R")") +ART+=("$(printf '%s | %s~~~~~~~~~~~~%s %s|%s' "$_f" "$_x" "$R" "$_f" "$R")") +ART+=("$(printf ' \\ %s*=======*%s /' "$_d" "$R")") +ART+=("$(printf ' \\ %s| |%s /' "$_f" "$R")") +ART+=("$(printf ' %s\\| |/%s' "$_f" "$R")") +ART+=("$(printf ' %s| |%s' "$_f" "$R")") +ART+=("$(printf ' %s/| |\\ %s|=====|%s %s/| |\\%s' "$_t1" "$_f" "$R" "$_t1" "$R")") +ART+=("$(printf ' %s/ | | \\ %s|=====|%s %s/ | | \\%s' "$_t1" "$_f" "$R" "$_t1" "$R")") +ART+=("$(printf '%s/ | | %s\\|====|/%s %s| | \\%s' "$_t1" "$_t2" "$R" "$_t2" "$R")") +ART+=("$(printf ' %s| | %s|====|%s %s| | \\%s' "$_t2" "$_t3" "$R" "$_t3" "$R")") +ART+=("$(printf ' %s| | %s|==|%s %s| | \\%s' "$_t3" "$_t3" "$R" "$_t3" "$R")") +ART+=("$(printf ' %s| | %s||%s %s| | \\%s' "$_t3" "$_t4" "$R" "$_t4" "$R")") +ART+=("$(printf ' %s| | \\%s' "$_t4" "$R")") + +# ── Data gathering (Arch Linux) ───────────────────────────────── +get_os() { + local name="" + if [[ -f /etc/os-release ]]; then + while IFS='=' read -r key val; do + if [[ "$key" == "PRETTY_NAME" ]]; then + name="${val//\"/}" + break + fi + done < /etc/os-release + fi + printf '%s' "${name:-Arch Linux}" +} + +get_kernel() { + printf '%s' "$(uname -r 2>/dev/null)" || printf 'N/A' +} + +get_shell() { + printf '%s' "${SHELL##*/:-bash}" +} + +get_term() { + printf '%s' "${TERM:-${COLORTERM:-N/A}}" +} + +get_cpu() { + local cpu="" + if [[ -f /proc/cpuinfo ]]; then + while IFS=: read -r k v; do + if [[ "$k" == "model name"* ]]; then + cpu="${v# }" + break + fi + done < /proc/cpuinfo + fi + cpu="${cpu//(tm)/}"; cpu="${cpu//(TM)/}" + cpu="${cpu//(r)/}"; cpu="${cpu//(R)/}" + printf '%s' "${cpu:-N/A}" +} + +get_gpu() { + local gpu="" + if command -v lspci >/dev/null 2>&1; then + gpu=$(lspci 2>/dev/null | grep -iE 'vga|3d|display' | head -1 | cut -d: -f3) + gpu="${gpu# }" + fi + printf '%s' "${gpu:-N/A}" +} + +get_ram() { + local line used total + if line=$(free -h 2>/dev/null | grep '^Mem:'); then + read -r _ total used _ _ _ <<< "$line" + printf '%s / %s' "${used:-N/A}" "${total:-N/A}" + else + printf 'N/A' + fi +} + +get_uptime() { + local s d h m + if [[ -f /proc/uptime ]]; then + s=$(awk '{printf "%d", $1}' /proc/uptime 2>/dev/null) || s=0 + (( d = s / 86400 )); (( s = s % 86400 )) + (( h = s / 3600 )); (( s = s % 3600 )) + (( m = s / 60 )) + printf '%dd %dh %dm' "$d" "$h" "$m" + else + printf 'N/A' + fi +} + +get_pkgs() { + local n + n=$(pacman -Qq 2>/dev/null | wc -l | tr -d ' ') || n=0 + printf '%s' "${n:-N/A}" +} + +get_ip() { + local ip="" + if command -v hostname >/dev/null 2>&1; then + ip=$(hostname -I 2>/dev/null | awk '{print $1}') + fi + printf '%s' "${ip:-N/A}" +} + +# ── Info formatting ───────────────────────────────────────────── +LBL_W=10 +_lc=$(_c 175 203 255) +_vc=$(_c 230 238 248) +_uc=$(_c 175 203 255) +_hc=$(_c 192 209 230) +_sc=$(_c 42 58 94) + +_info() { + local label="$1" value="$2" + printf '%s%*s%s %s%s%s' "$_lc" "$LBL_W" "$label" "$R" "$_vc" "$value" "$R" +} + +# ── Build info array ──────────────────────────────────────────── +declare -a INFO +INFO=() +INFO+=("$(printf '%s%s%s@%s%s' "$_uc" "$(whoami)" "$_hc" "$(hostname -s 2>/dev/null || printf 'localhost')" "$R")") +INFO+=("$(printf '%s──────────────────────%s' "$_sc" "$R")") +INFO+=("$(_info OS "$(get_os)")") +INFO+=("$(_info Kernel "$(get_kernel)")") +INFO+=("$(_info Shell "$(get_shell)")") +INFO+=("$(_info Terminal "$(get_term)")") +INFO+=("$(_info CPU "$(get_cpu)")") +INFO+=("$(_info GPU "$(get_gpu)")") +INFO+=("$(_info RAM "$(get_ram)")") +INFO+=("$(_info Uptime "$(get_uptime)")") +INFO+=("$(_info Packages "$(get_pkgs)")") +INFO+=("$(_info IP "$(get_ip)")") + +# ── Render side by side ──────────────────────────────────────── +art_n=${#ART[@]} +info_n=${#INFO[@]} +info_start=4 +max_lines=$art_n +needed=$((info_start + info_n)) +if (( needed > max_lines )); then max_lines=$needed; fi + +for (( row=0; row= 0 && idx < info_n )); then + printf '%s\n' "${INFO[$idx]}" + else + printf '\n' + fi +done + +# ── Color swatch (10 brand colors) ───────────────────────────── +printf '%*s' "$((ART_W + GAP))" "" +swatch_r=(175 248 230 106 216 192 148 90 15 8) +swatch_g=(203 200 238 143 140 209 128 72 82 59) +swatch_b=(255 220 248 211 168 230 185 120 186 137) +for (( i=0; i<10; i++ )); do + ec=$(_c ${swatch_r[$i]} ${swatch_g[$i]} ${swatch_b[$i]}) + printf '%s' "$ec" + printf '\xe2\x96\x88\xe2\x96\x88' +done +printf '%s\n' "$R" diff --git a/fetch/aygeafetch-ubuntu.sh b/fetch/aygeafetch-ubuntu.sh new file mode 100644 index 0000000..7455093 --- /dev/null +++ b/fetch/aygeafetch-ubuntu.sh @@ -0,0 +1,257 @@ +#!/usr/bin/env bash +# ╭──────────────────────────────────────────────────────────────╮ +# │ aygeafetch-ubuntu.sh · AygeaNight system fetch · Ubuntu │ +# │ Fox kitsune ASCII art + system info in brand colors │ +# ╰──────────────────────────────────────────────────────────────╯ +# +# INSTALL: +# chmod +x fetch/aygeafetch-ubuntu.sh +# sudo cp fetch/aygeafetch-ubuntu.sh /usr/local/bin/aygeafetch +# Add to ~/.bashrc (at the end): +# aygeafetch +# +# REQUIREMENTS: +# - bash 4+ +# - Truecolor terminal +# - A Nerd Font for best results +# +# NO EXTERNAL DEPENDENCIES - pure bash, no python/jq/neofetch + +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 + +COLOR=0 +[[ -t 1 ]] && COLOR=1 + +ART_W=27 +GAP=3 + +# ── Helper: truecolor foreground escape ───────────────────────── +_c() { + [[ "$COLOR" = 1 ]] && printf '\033[38;2;%s;%s;%sm' "$1" "$2" "$3" +} + +R="" +[[ "$COLOR" = 1 ]] && R=$(printf '\033[0m') + +# ── Helper: visible length (strips ANSI, pure shell) ──────────── +_vlen() { + local s="$1" out="" i=0 len=${#1} char skip=0 + while (( i < len )); do + char="${s:$i:1}" + if (( skip )); then + case "$char" in [a-zA-Z]) skip=0 ;; esac + (( i++ )) && continue + fi + if [[ "$char" == $(printf '\033') ]]; then + skip=1 + (( i++ )) && continue + fi + out="${out}${char}" + (( i++ )) + done + printf '%s' "${#out}" +} + +# ── Helper: pad art line to ART_W visible chars ───────────────── +_pad() { + local vis + vis=$(_vlen "$1") + printf '%s%*s' "$1" $((ART_W - vis)) "" +} + +# ── Palette shortcuts ─────────────────────────────────────────── +_s=$(_c 230 238 248); _e=$(_c 15 82 186) +_b=$(_c 245 195 215); _p=$(_c 248 200 220) +_m=$(_c 216 140 168); _x=$(_c 155 135 195) +_d=$(_c 105 88 140); _f=$(_c 192 209 230) +_t1=$(_c 210 218 238); _t2=$(_c 170 182 210) +_t3=$(_c 130 145 175); _t4=$(_c 106 122 150) + +# ── ASCII art (24 lines) ──────────────────────────────────────── +declare -a ART +ART=() +ART+=("$(printf '%s /\\ /\\%s' "$_s" "$R")") +ART+=("$(printf '%s / \\ / \\%s' "$_s" "$R")") +ART+=("$(printf '%s / %s/\\%s\\ / %s/\\%s\\%s' "$_s" "$_p" "$_s" "$_p" "$_s" "$R")") +ART+=("$(printf '%s / %s/ \\%s\\ / %s/ \\%s\\%s' "$_s" "$_p" "$_s" "$_p" "$_s" "$R")") +ART+=("$(printf '%s | |%s' "$_f" "$R")") +ART+=("$(printf '%s | %s* * %s|%s' "$_f" "$_b" "$_f" "$R")") +ART+=("$(printf '%s | |%s' "$_f" "$R")") +ART+=("$(printf '%s | %s@@ @@%s %s|%s' "$_f" "$_e" "$R" "$_f" "$R")") +ART+=("$(printf '%s | |%s' "$_f" "$R")") +ART+=("$(printf '%s | %s* * %s|%s' "$_f" "$_b" "$_f" "$R")") +ART+=("$(printf '%s | %s.w.%s %s|%s' "$_f" "$_m" "$R" "$_f" "$R")") +ART+=("$(printf '%s | |%s' "$_f" "$R")") +ART+=("$(printf '%s | %s~~~~~~~~~~~~%s %s|%s' "$_f" "$_x" "$R" "$_f" "$R")") +ART+=("$(printf ' \\ %s*=======*%s /' "$_d" "$R")") +ART+=("$(printf ' \\ %s| |%s /' "$_f" "$R")") +ART+=("$(printf ' %s\\| |/%s' "$_f" "$R")") +ART+=("$(printf ' %s| |%s' "$_f" "$R")") +ART+=("$(printf ' %s/| |\\ %s|=====|%s %s/| |\\%s' "$_t1" "$_f" "$R" "$_t1" "$R")") +ART+=("$(printf ' %s/ | | \\ %s|=====|%s %s/ | | \\%s' "$_t1" "$_f" "$R" "$_t1" "$R")") +ART+=("$(printf '%s/ | | %s\\|====|/%s %s| | \\%s' "$_t1" "$_t2" "$R" "$_t2" "$R")") +ART+=("$(printf ' %s| | %s|====|%s %s| | \\%s' "$_t2" "$_t3" "$R" "$_t3" "$R")") +ART+=("$(printf ' %s| | %s|==|%s %s| | \\%s' "$_t3" "$_t3" "$R" "$_t3" "$R")") +ART+=("$(printf ' %s| | %s||%s %s| | \\%s' "$_t3" "$_t4" "$R" "$_t4" "$R")") +ART+=("$(printf ' %s| | \\%s' "$_t4" "$R")") + +# ── Data gathering (Ubuntu Linux) ─────────────────────────────── +get_os() { + local name="" + if [[ -f /etc/os-release ]]; then + while IFS='=' read -r key val; do + if [[ "$key" == "PRETTY_NAME" ]]; then + name="${val//\"/}" + break + fi + done < /etc/os-release + fi + printf '%s' "${name:-Ubuntu}" +} + +get_kernel() { + printf '%s' "$(uname -r 2>/dev/null)" || printf 'N/A' +} + +get_shell() { + printf '%s' "${SHELL##*/:-bash}" +} + +get_term() { + printf '%s' "${TERM:-${COLORTERM:-N/A}}" +} + +get_cpu() { + local cpu="" + if [[ -f /proc/cpuinfo ]]; then + while IFS=: read -r k v; do + if [[ "$k" == "model name"* ]]; then + cpu="${v# }" + break + fi + done < /proc/cpuinfo + fi + cpu="${cpu//(tm)/}"; cpu="${cpu//(TM)/}" + cpu="${cpu//(r)/}"; cpu="${cpu//(R)/}" + printf '%s' "${cpu:-N/A}" +} + +get_gpu() { + local gpu="" + if command -v lspci >/dev/null 2>&1; then + gpu=$(lspci 2>/dev/null | grep -iE 'vga|3d|display' | head -1 | cut -d: -f3) + gpu="${gpu# }" + fi + printf '%s' "${gpu:-N/A}" +} + +get_ram() { + local line used total + if line=$(free -h 2>/dev/null | grep '^Mem:'); then + read -r _ total used _ _ _ <<< "$line" + printf '%s / %s' "${used:-N/A}" "${total:-N/A}" + else + printf 'N/A' + fi +} + +get_uptime() { + local s d h m + if [[ -f /proc/uptime ]]; then + s=$(awk '{printf "%d", $1}' /proc/uptime 2>/dev/null) || s=0 + (( d = s / 86400 )); (( s = s % 86400 )) + (( h = s / 3600 )); (( s = s % 3600 )) + (( m = s / 60 )) + printf '%dd %dh %dm' "$d" "$h" "$m" + else + printf 'N/A' + fi +} + +get_pkgs() { + local dpkg_n snap_n total + dpkg_n=$(dpkg -l 2>/dev/null | grep -c '^ii') || dpkg_n=0 + if command -v snap >/dev/null 2>&1; then + snap_n=$(snap list 2>/dev/null | tail -n +2 | wc -l | tr -d ' ') || snap_n=0 + else + snap_n=0 + fi + total="${dpkg_n:-0}" + if [[ -n "$snap_n" ]] && (( snap_n > 0 )); then + total="${dpkg_n} (dpkg) + ${snap_n} (snap)" + fi + printf '%s' "$total" +} + +get_ip() { + local ip="" + if command -v hostname >/dev/null 2>&1; then + ip=$(hostname -I 2>/dev/null | awk '{print $1}') + fi + printf '%s' "${ip:-N/A}" +} + +# ── Info formatting ───────────────────────────────────────────── +LBL_W=10 +_lc=$(_c 175 203 255) +_vc=$(_c 230 238 248) +_uc=$(_c 175 203 255) +_hc=$(_c 192 209 230) +_sc=$(_c 42 58 94) + +_info() { + local label="$1" value="$2" + printf '%s%*s%s %s%s%s' "$_lc" "$LBL_W" "$label" "$R" "$_vc" "$value" "$R" +} + +# ── Build info array ──────────────────────────────────────────── +declare -a INFO +INFO=() +INFO+=("$(printf '%s%s%s@%s%s' "$_uc" "$(whoami)" "$_hc" "$(hostname -s 2>/dev/null || printf 'localhost')" "$R")") +INFO+=("$(printf '%s──────────────────────%s' "$_sc" "$R")") +INFO+=("$(_info OS "$(get_os)")") +INFO+=("$(_info Kernel "$(get_kernel)")") +INFO+=("$(_info Shell "$(get_shell)")") +INFO+=("$(_info Terminal "$(get_term)")") +INFO+=("$(_info CPU "$(get_cpu)")") +INFO+=("$(_info GPU "$(get_gpu)")") +INFO+=("$(_info RAM "$(get_ram)")") +INFO+=("$(_info Uptime "$(get_uptime)")") +INFO+=("$(_info Packages "$(get_pkgs)")") +INFO+=("$(_info IP "$(get_ip)")") + +# ── Render side by side ──────────────────────────────────────── +art_n=${#ART[@]} +info_n=${#INFO[@]} +info_start=4 +max_lines=$art_n +needed=$((info_start + info_n)) +if (( needed > max_lines )); then max_lines=$needed; fi + +for (( row=0; row= 0 && idx < info_n )); then + printf '%s\n' "${INFO[$idx]}" + else + printf '\n' + fi +done + +# ── Color swatch (10 brand colors) ───────────────────────────── +printf '%*s' "$((ART_W + GAP))" "" +swatch_r=(175 248 230 106 216 192 148 90 15 8) +swatch_g=(203 200 238 143 140 209 128 72 82 59) +swatch_b=(255 220 248 211 168 230 185 120 186 137) +for (( i=0; i<10; i++ )); do + ec=$(_c ${swatch_r[$i]} ${swatch_g[$i]} ${swatch_b[$i]}) + printf '%s' "$ec" + printf '\xe2\x96\x88\xe2\x96\x88' +done +printf '%s\n' "$R" diff --git a/fetch/aygeafetch.zsh b/fetch/aygeafetch.zsh new file mode 100644 index 0000000..8133e64 --- /dev/null +++ b/fetch/aygeafetch.zsh @@ -0,0 +1,244 @@ +#!/usr/bin/env zsh +# ╭──────────────────────────────────────────────────────────────╮ +# │ aygeafetch.zsh · AygeaNight system fetch · macOS │ +# │ Fox kitsune ASCII art + system info in brand colors │ +# ╰──────────────────────────────────────────────────────────────╯ +# +# INSTALL: +# chmod +x fetch/aygeafetch.zsh +# cp fetch/aygeafetch.zsh ~/aygeafetch.zsh +# Add to ~/.zshrc (at the end): +# aygeafetch +# # or: source ~/aygeafetch.zsh +# +# REQUIREMENTS: +# - zsh (macOS default) +# - Truecolor terminal (iTerm2, Kitty, Alacritty, WezTerm) +# - A Nerd Font for best results (JetBrainsMono Nerd Font) +# +# NO EXTERNAL DEPENDENCIES - pure zsh, no python/jq/neofetch + +export LANG=en_US.UTF-8 +export LC_ALL=en_US.UTF-8 + +COLOR=0 +[[ -t 1 ]] && COLOR=1 + +ART_W=27 +GAP=3 + +# ── Helper: truecolor foreground escape ───────────────────────── +_c() { + [[ "$COLOR" = 1 ]] && printf '\033[38;2;%s;%s;%sm' "$1" "$2" "$3" +} + +R="" +[[ "$COLOR" = 1 ]] && R=$(printf '\033[0m') + +# ── Helper: visible length (strips ANSI, pure shell) ──────────── +_vlen() { + local s="$1" out="" i=1 char skip=0 + local -i len=${#s} + while (( i <= len )); do + char="${s[$i]}" + if (( skip )); then + [[ "$char" =~ [a-zA-Z] ]] && skip=0 + (( i++ )) && continue + fi + if [[ "$char" == $(printf '\033') ]]; then + skip=1 + (( i++ )) && continue + fi + out="${out}${char}" + (( i++ )) + done + printf '%s' "${#out}" +} + +# ── Helper: pad art line to ART_W visible chars ───────────────── +_pad() { + local vis + vis=$(_vlen "$1") + printf '%s%*s' "$1" $((ART_W - vis)) "" +} + +# ── Palette shortcuts ─────────────────────────────────────────── +_s=$(_c 230 238 248); _e=$(_c 15 82 186) +_b=$(_c 245 195 215); _p=$(_c 248 200 220) +_m=$(_c 216 140 168); _x=$(_c 155 135 195) +_d=$(_c 105 88 140); _f=$(_c 192 209 230) +_t1=$(_c 210 218 238); _t2=$(_c 170 182 210) +_t3=$(_c 130 145 175); _t4=$(_c 106 122 150) + +# ── ASCII art - built with printf to avoid quoting issues ──────── +typeset -a ART +ART=() +ART+=$(printf '%s /\\ /\\%s' "$_s" "$R") +ART+=$(printf '%s / \\ / \\%s' "$_s" "$R") +ART+=$(printf '%s / %s/\\%s\\ / %s/\\%s\\%s' "$_s" "$_p" "$_s" "$_p" "$_s" "$R") +ART+=$(printf '%s / %s/ \\%s\\ / %s/ \\%s\\%s' "$_s" "$_p" "$_s" "$_p" "$_s" "$R") +ART+=$(printf '%s | |%s' "$_f" "$R") +ART+=$(printf '%s | %s* * %s|%s' "$_f" "$_b" "$_f" "$R") +ART+=$(printf '%s | |%s' "$_f" "$R") +ART+=$(printf '%s | %s@@ @@%s %s|%s' "$_f" "$_e" "$R" "$_f" "$R") +ART+=$(printf '%s | |%s' "$_f" "$R") +ART+=$(printf '%s | %s* * %s|%s' "$_f" "$_b" "$_f" "$R") +ART+=$(printf '%s | %s.w.%s %s|%s' "$_f" "$_m" "$R" "$_f" "$R") +ART+=$(printf '%s | |%s' "$_f" "$R") +ART+=$(printf '%s | %s~~~~~~~~~~~~%s %s|%s' "$_f" "$_x" "$R" "$_f" "$R") +ART+=$(printf ' \\ %s*=======*%s /' "$_d" "$R") +ART+=$(printf ' \\ %s| |%s /' "$_f" "$R") +ART+=$(printf ' %s\\| |/%s' "$_f" "$R") +ART+=$(printf ' %s| |%s' "$_f" "$R") +ART+=$(printf ' %s/| |\\ %s|=====|%s %s/| |\\%s' "$_t1" "$_f" "$R" "$_t1" "$R") +ART+=$(printf ' %s/ | | \\ %s|=====|%s %s/ | | \\%s' "$_t1" "$_f" "$R" "$_t1" "$R") +ART+=$(printf '%s/ | | %s\\|====|/%s %s| | \\%s' "$_t1" "$_t2" "$R" "$_t2" "$R") +ART+=$(printf ' %s| | %s|====|%s %s| | \\%s' "$_t2" "$_t3" "$R" "$_t3" "$R") +ART+=$(printf ' %s| | %s|==|%s %s| | \\%s' "$_t3" "$_t3" "$R" "$_t3" "$R") +ART+=$(printf ' %s| | %s||%s %s| | \\%s' "$_t3" "$_t4" "$R" "$_t4" "$R") +ART+=$(printf ' %s| | \\%s' "$_t4" "$R") + +# ── Data gathering (macOS) ────────────────────────────────────── +get_os() { + local name ver + name=$(sw_vers -productName 2>/dev/null) || name="macOS" + ver=$(sw_vers -productVersion 2>/dev/null) || ver="" + printf '%s %s' "$name" "$ver" +} + +get_kernel() { + local k + k=$(uname -r 2>/dev/null) || k="N/A" + printf '%s' "$k" +} + +get_shell() { + local sh="${SHELL:t}" + printf '%s' "${sh:-zsh}" +} + +get_term() { + printf '%s' "${TERM_PROGRAM:-${TERM:-N/A}}" +} + +get_cpu() { + local cpu + cpu=$(sysctl -n machdep.cpu.brand_string 2>/dev/null) || cpu="" + [[ -z "$cpu" ]] && cpu="Apple Silicon" + cpu="${cpu//(tm)/}"; cpu="${cpu//(TM)/}" + cpu="${cpu//(r)/}"; cpu="${cpu//(R)/}" + printf '%s' "$cpu" +} + +get_gpu() { + local gpu + gpu=$(system_profiler SPDisplaysDataType 2>/dev/null \ + | grep 'Chipset Model' | head -1 \ + | sed 's/.*: *//') + printf '%s' "${gpu:-N/A}" +} + +get_ram() { + local pagesize total wired active comp used + pagesize=$(sysctl -n hw.pagesize 2>/dev/null) || pagesize=4096 + total=$(sysctl -n hw.memsize 2>/dev/null) || total=0 + wired=$(vm_stat 2>/dev/null | grep 'Pages wired down' | sed 's/[^0-9]//g') || wired=0 + active=$(vm_stat 2>/dev/null | grep 'Pages active' | sed 's/[^0-9]//g') || active=0 + comp=$(vm_stat 2>/dev/null | grep 'Pages occupied by compressor' | sed 's/[^0-9]//g') || comp=0 + used=$(( (wired + active + comp) * pagesize )) + if (( total > 0 )); then + printf '%dM / %dM' $((used / 1048576)) $((total / 1048576)) + else + printf 'N/A' + fi +} + +get_uptime() { + local boot s d h m + boot=$(sysctl -n kern.boottime 2>/dev/null) || boot="" + boot=${boot#*=} + boot=${boot%,*} + [[ -z "$boot" ]] && { printf 'N/A'; return; } + (( s = $(date +%s) - boot )) + (( d = s / 86400 )); (( s = s % 86400 )) + (( h = s / 3600 )); (( s = s % 3600 )) + (( m = s / 60 )) + printf '%dd %dh %dm' "$d" "$h" "$m" +} + +get_pkgs() { + local n + n=$(brew list --formula 2>/dev/null | wc -l | tr -d ' ') + printf '%s' "${n:-N/A}" +} + +get_ip() { + local ip + ip=$(ipconfig getifaddr en0 2>/dev/null) || ip="" + [[ -z "$ip" ]] && ip=$(ipconfig getifaddr en1 2>/dev/null) || ip="" + printf '%s' "${ip:-N/A}" +} + +# ── Info formatting ───────────────────────────────────────────── +LBL_W=10 +_lc=$(_c 175 203 255) +_vc=$(_c 230 238 248) +_uc=$(_c 175 203 255) +_hc=$(_c 192 209 230) +_sc=$(_c 42 58 94) + +_info() { + local label="$1" value="$2" + printf '%s%*s%s %s%s%s' "$_lc" "$LBL_W" "$label" "$R" "$_vc" "$value" "$R" +} + +# ── Build info array ──────────────────────────────────────────── +typeset -a INFO +INFO=() +INFO+=$(printf '%s%s%s@%s%s' "$_uc" "$(whoami)" "$_hc" "$(hostname -s 2>/dev/null || printf 'localhost')" "$R") +INFO+=$(printf '%s──────────────────────%s' "$_sc" "$R") +INFO+=$(_info OS "$(get_os)") +INFO+=$(_info Kernel "$(get_kernel)") +INFO+=$(_info Shell "$(get_shell)") +INFO+=$(_info Terminal "$(get_term)") +INFO+=$(_info CPU "$(get_cpu)") +INFO+=$(_info GPU "$(get_gpu)") +INFO+=$(_info RAM "$(get_ram)") +INFO+=$(_info Uptime "$(get_uptime)") +INFO+=$(_info Packages "$(get_pkgs)") +INFO+=$(_info IP "$(get_ip)") + +# ── Render side by side ──────────────────────────────────────── +art_n=${#ART} +info_n=${#INFO} +info_start=4 +max_lines=$art_n +needed=$((info_start + info_n)) +if (( needed > max_lines )); then max_lines=$needed; fi + +for (( row=1; row<=max_lines; row++ )); do + if (( row <= art_n )); then + _pad "${ART[$row]}" + else + printf '%*s' "$ART_W" "" + fi + printf '%*s' "$GAP" "" + idx=$(( row - info_start )) + if (( idx >= 1 && idx <= info_n )); then + printf '%s\n' "${INFO[$idx]}" + else + printf '\n' + fi +done + +# ── Color swatch (10 brand colors) ───────────────────────────── +printf '%*s' "$((ART_W + GAP))" "" +swatch_r=(175 248 230 106 216 192 148 90 15 8) +swatch_g=(203 200 238 143 140 209 128 72 82 59) +swatch_b=(255 220 248 211 168 230 185 120 186 137) +for (( i=1; i<=10; i++ )); do + ec=$(_c ${swatch_r[$i]} ${swatch_g[$i]} ${swatch_b[$i]}) + printf '%s' "$ec" + printf '\xe2\x96\x88\xe2\x96\x88' +done +printf '%s\n' "$R" diff --git a/starship.toml b/starship.toml new file mode 100644 index 0000000..a7a93b3 --- /dev/null +++ b/starship.toml @@ -0,0 +1,203 @@ +# ╭──────────────────────────────────────────────────────────────╮ +# │ ~/.config/starship.toml · AygeaNight prompt · 🦊 │ +# ╰──────────────────────────────────────────────────────────────╯ +# +# INSTALL: +# 1. Install starship: brew install starship +# 2. Add to ~/.zshrc: eval "$(starship init zsh)" +# 3. Copy this file: mkdir -p ~/.config && cp starship.toml ~/.config/starship.toml +# +# FONT: Requires a Nerd Font for icons to render correctly +# https://www.nerdfonts.com/font-downloads +# Set the Nerd Font in iTerm2 → Preferences → Profiles → Text → Font + +# ── Global ────────────────────────────────────────────────────── +add_newline = true +command_timeout = 1000 + +# Prompt format — two lines +# Line 1: fox icon · directory · git · lang versions · status +# Line 2: the actual input character +format = """ +[╭─](bold color:#2A3A5E)\ +$os\ +$username\ +$hostname\ +$directory\ +$git_branch\ +$git_status\ +$git_state\ +$nodejs\ +$python\ +$rust\ +$golang\ +$docker_context\ +$cmd_duration\ +$fill\ +$time +[╰─](bold color:#2A3A5E)$character""" + +# ── OS icon ───────────────────────────────────────────────────── +[os] +disabled = false +format = "[$symbol](bold fg:#6A8FD3) " + +[os.symbols] +Macos = "" +Linux = "" +Ubuntu = "" +Arch = "" +Windows = "" + +# ── Username ───────────────────────────────────────────────────── +[username] +show_always = false +format = "[$user](bold fg:#AFCBFF)[@](fg:#C0D1E6)" + +# ── Hostname ───────────────────────────────────────────────────── +[hostname] +ssh_only = false +format = "[$hostname](bold fg:#DDEEFF) " +trim_at = "." + +# ── Directory ──────────────────────────────────────────────────── +[directory] +format = "[ $path]($style)[$read_only]($read_only_style) " +style = "bold fg:#AFCBFF" +read_only = " 󰌾" +read_only_style = "fg:#D88CA8" +truncation_length = 4 +truncation_symbol = "…/" +home_symbol = "~" + +[directory.substitutions] +"Documents" = "󰈙 " +"Downloads" = " " +"Music" = " " +"Pictures" = " " +"Desktop" = " " +"Developer" = " " + +# ── Git branch ─────────────────────────────────────────────────── +[git_branch] +format = "[ $symbol$branch(:$remote_branch)]($style) " +symbol = " " +style = "bold fg:#D88CA8" +truncation_length = 20 +truncation_symbol = "…" + +# ── Git status ─────────────────────────────────────────────────── +[git_status] +format = "([$all_status$ahead_behind]($style) )" +style = "fg:#F8C8DC" +conflicted = "⚡" +ahead = "⇡${count}" +behind = "⇣${count}" +diverged = "⇕⇡${ahead_count}⇣${behind_count}" +up_to_date = "✓" +untracked = "?${count}" +stashed = "󰏗 " +modified = "!${count}" +staged = "+${count}" +renamed = "»${count}" +deleted = "✘${count}" + +# ── Git state (rebasing, merging etc.) ─────────────────────────── +[git_state] +format = "[$state($progress_current/$progress_total)]($style) " +style = "bold fg:#C9B8E8" + +# ── Node.js ────────────────────────────────────────────────────── +[nodejs] +format = "[ $version]($style) " +style = "fg:#A8D8F0" +detect_files = ["package.json", ".nvmrc", ".node-version"] + +# ── Python ─────────────────────────────────────────────────────── +[python] +format = "[ ${pyenv_prefix}$version($virtualenv)]($style) " +style = "fg:#A8D8F0" + +# ── Rust ───────────────────────────────────────────────────────── +[rust] +format = "[ $version]($style) " +style = "fg:#D88CA8" + +# ── Go ─────────────────────────────────────────────────────────── +[golang] +format = "[ $version]($style) " +style = "fg:#A8D8F0" + +# ── Docker ─────────────────────────────────────────────────────── +[docker_context] +format = "[ $context]($style) " +style = "fg:#6A8FD3" +only_with_files = true + +# ── Command duration ───────────────────────────────────────────── +[cmd_duration] +format = "[ $duration]($style) " +style = "fg:#C0D1E6" +min_time = 2_000 +show_milliseconds = false + +# ── Fill (pushes time to the right) ────────────────────────────── +[fill] +symbol = " " + +# ── Time (right side) ──────────────────────────────────────────── +[time] +disabled = false +format = "[$time]($style) " +style = "fg:#3B4A75" +time_format = "%H:%M" + +# ── Prompt character ───────────────────────────────────────────── +# Success: sapphire ❯ Error: pink ❯ +[character] +success_symbol = "[❯](bold fg:#6A8FD3)" +error_symbol = "[❯](bold fg:#D88CA8)" +vimcmd_symbol = "[❮](bold fg:#C9B8E8)" + +# ── Status (exit code) ─────────────────────────────────────────── +[status] +disabled = false +format = "[$symbol$status]($style) " +style = "fg:#D88CA8" +symbol = "✘ " +success_symbol = "" +not_executable_symbol = " " +not_found_symbol = "󰍉 " +sigint_symbol = "󰂭 " +signal_symbol = "󱐋 " + +# ── Package version ────────────────────────────────────────────── +[package] +format = "[ $version]($style) " +style = "fg:#6A8FD3" + +# ── Memory usage (optional — uncomment to show) ────────────────── +# [memory_usage] +# disabled = false +# format = "[$symbol ${ram_pct}]($style) " +# style = "fg:#C0D1E6" +# symbol = "󰍛 " +# threshold = 70 + +# ── Battery ────────────────────────────────────────────────────── +[battery] +full_symbol = "󰁹 " +charging_symbol = "󰂄 " +discharging_symbol = "󰂀 " + +[[battery.display]] +threshold = 20 +style = "bold fg:#D88CA8" + +[[battery.display]] +threshold = 50 +style = "fg:#C0D1E6" + +[[battery.display]] +threshold = 100 +style = "fg:#6A8FD3" diff --git a/tmux.conf b/tmux.conf new file mode 100644 index 0000000..cb0d870 --- /dev/null +++ b/tmux.conf @@ -0,0 +1,166 @@ +# ╭──────────────────────────────────────────────────────────────╮ +# │ ~/.tmux.conf · AygeaNight theme · 🦊 │ +# │ Tokyo Night base · Aygea brand accent colors │ +# ╰──────────────────────────────────────────────────────────────╯ +# +# INSTALL: +# cp tmux.conf ~/.tmux.conf +# tmux source ~/.tmux.conf (or restart tmux) +# +# REQUIREMENTS: +# - tmux 3.2+ (for truecolor support) +# - A Nerd Font in iTerm2 for the separators and icons +# Recommended: JetBrainsMono Nerd Font or Hack Nerd Font +# Download: https://www.nerdfonts.com/font-downloads +# Set in: iTerm2 → Preferences → Profiles → Text → Font +# - Optional: tmux plugin manager (tpm) for plugins section at bottom + +# ── General ───────────────────────────────────────────────────── +set -g default-terminal "tmux-256color" +set -ag terminal-overrides ",xterm-256color:RGB" # truecolor +set -ag terminal-overrides ",alacritty:RGB" +set -g mouse on # mouse support +set -g base-index 1 # windows from 1 +set -g pane-base-index 1 +set -g renumber-windows on +set -g history-limit 50000 +set -g escape-time 0 # no ESC delay (important for vim/nvim) +set -g focus-events on +set -g set-clipboard on +set -g allow-passthrough on # OSC 52 clipboard over SSH +set -g extended-keys on +set -q -g status-utf8 on +set -wq -g utf8 on + +# ── Prefix ────────────────────────────────────────────────────── +unbind C-b +set -g prefix C-a +bind C-a send-prefix + +# ── Split panes (intuitive keys) ──────────────────────────────── +bind | split-window -h -c "#{pane_current_path}" +bind - split-window -v -c "#{pane_current_path}" +bind c new-window -c "#{pane_current_path}" +unbind '"' +unbind % + +# ── Pane navigation (vim-style) ────────────────────────────────── +bind h select-pane -L +bind j select-pane -D +bind k select-pane -U +bind l select-pane -R + +# ── Pane resizing ──────────────────────────────────────────────── +bind -r H resize-pane -L 5 +bind -r J resize-pane -D 5 +bind -r K resize-pane -U 5 +bind -r L resize-pane -R 5 + +# ── Reload config ──────────────────────────────────────────────── +bind r source-file ~/.tmux.conf \; display "🦊 tmux reloaded!" + +# ═══════════════════════════════════════════════════════════════ +# COLORS — AygeaNight Palette +# Tokyo Night base (#0F1020 bg) + Aygea brand accents +# ═══════════════════════════════════════════════════════════════ + +# Brand hex references (used in #[fg=...] below): +# Baby Blue: #AFCBFF Baby Blue Dark: #6A8FD3 +# Deep Sapphire: #0F52BA Sapphire Dark: #083B89 +# Soft Pink: #F8C8DC Pink Dark: #D88CA8 +# Silver: #E6EEF8 Silver Dark: #C0D1E6 +# Navy: #2A3A5E Navy Dark: #1B2438 +# BG: #0F1020 (Tokyo Night base, blue-shifted) + +bg_base="#0F1020" +bg_panel="#1B2438" +bg_active="#2A3A5E" +fg_main="#C0D1E6" +fg_dim="#3B4A75" +col_active="#AFCBFF" +col_pink="#D88CA8" +col_sapphire="#0F52BA" +col_accent="#6A8FD3" +col_sep="#2A3A5E" + +# ── Pane borders ──────────────────────────────────────────────── +set -g pane-border-style "fg=#2A3A5E" +set -g pane-active-border-style "fg=#6A8FD3" + +# ── Message / command bar ──────────────────────────────────────── +set -g message-style "fg=#AFCBFF,bg=#1B2438,bold" +set -g message-command-style "fg=#D88CA8,bg=#1B2438" + +# ── Copy mode ─────────────────────────────────────────────────── +set -g mode-style "fg=#0F1020,bg=#AFCBFF" + +# ── Status bar — global ────────────────────────────────────────── +set -g status on +set -g status-position top +set -g status-interval 5 +set -g status-justify left +set -g status-style "fg=#C0D1E6,bg=#0F1020" + +# ── Status LEFT — session badge ────────────────────────────────── +# 🦊 [session-name] › +set -g status-left-length 40 +set -g status-left "\ +#[fg=#0F1020,bg=#AFCBFF,bold] 🦊 \ +#[fg=#0F1020,bg=#AFCBFF,bold]#{session_name} \ +#[fg=#AFCBFF,bg=#2A3A5E,nobold]\ +#[fg=#6A8FD3,bg=#2A3A5E] \ +#[fg=#2A3A5E,bg=#0F1020]\ +#[fg=#3B4A75,bg=#0F1020] " + +# ── Window list (center) ───────────────────────────────────────── +set -g window-status-separator "" + +# Inactive window +set -g window-status-format "\ +#[fg=#0F1020,bg=#0F1020] \ +#[fg=#3B4A75,bg=#1B2438] #I \ +#[fg=#C0D1E6,bg=#1B2438]#W \ +#[fg=#1B2438,bg=#0F1020]" + +# Active window — baby blue highlight +set -g window-status-current-format "\ +#[fg=#0F1020,bg=#0F1020]\ +#[fg=#0F1020,bg=#6A8FD3,bold] #I \ +#[fg=#0F1020,bg=#AFCBFF,bold]#W \ +#[fg=#AFCBFF,bg=#0F1020,nobold]" + +# Window with activity +set -g window-status-activity-style "fg=#D88CA8,bg=#1B2438" +set -g window-status-bell-style "fg=#F8C8DC,bg=#1B2438,bold" + +# ── Status RIGHT — system info ─────────────────────────────────── +set -g status-right-length 120 +set -g status-right "\ +#[fg=#2A3A5E,bg=#0F1020]\ +#[fg=#C0D1E6,bg=#2A3A5E] #(whoami) \ +#[fg=#1B2438,bg=#2A3A5E]\ +#[fg=#6A8FD3,bg=#1B2438,bold] \ +#[fg=#AFCBFF,bg=#1B2438]%H:%M \ +#[fg=#6A8FD3,bg=#1B2438] ⁞ \ +#[fg=#C0D1E6,bg=#1B2438]%a %d %b \ +#[fg=#0F52BA,bg=#1B2438]\ +#[fg=#E6EEF8,bg=#0F52BA,bold] ♡ " + +# ── Clock mode ─────────────────────────────────────────────────── +set -g clock-mode-colour "#AFCBFF" +set -g clock-mode-style 24 + +# ═══════════════════════════════════════════════════════════════ +# PLUGINS (optional — requires tpm) +# Install tpm first: +# git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm +# Then press prefix + I to install plugins +# ═══════════════════════════════════════════════════════════════ + +# set -g @plugin 'tmux-plugins/tpm' +# set -g @plugin 'tmux-plugins/tmux-sensible' +# set -g @plugin 'tmux-plugins/tmux-resurrect' # save/restore sessions +# set -g @plugin 'tmux-plugins/tmux-continuum' # auto-save sessions +# set -g @continuum-restore 'on' + +# run '~/.tmux/plugins/tpm/tpm'