{"id":51183168,"url":"https://github.com/carrilloapps/omp-config","last_synced_at":"2026-06-27T08:03:10.565Z","repository":{"id":359666360,"uuid":"1247031798","full_name":"carrilloapps/omp-config","owner":"carrilloapps","description":"Cross-platform oh-my-posh prompt config — adaptive 3-line layout with system telemetry (CPU/RAM/GPU/battery), Spotify integration, public IP fallback, runtime detection, and Ubuntu/Mono color schemes. Works on Linux, WSL, macOS, and Windows.","archived":false,"fork":false,"pushed_at":"2026-05-22T21:01:59.000Z","size":44,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-22T22:57:32.859Z","etag":null,"topics":["bash","cli","cross-platform","developer-tools","dotfiles","linux","macos","nerd-fonts","oh-my-posh","powershell","prompt","pwsh","ricing","shell","spotify","terminal","theme","ubuntu","windows","wsl"],"latest_commit_sha":null,"homepage":"https://carrillo.app","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/carrilloapps.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-22T20:34:07.000Z","updated_at":"2026-05-22T21:02:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/carrilloapps/omp-config","commit_stats":null,"previous_names":["carrilloapps/omp-config"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/carrilloapps/omp-config","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carrilloapps%2Fomp-config","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carrilloapps%2Fomp-config/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carrilloapps%2Fomp-config/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carrilloapps%2Fomp-config/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/carrilloapps","download_url":"https://codeload.github.com/carrilloapps/omp-config/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carrilloapps%2Fomp-config/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34845749,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","cli","cross-platform","developer-tools","dotfiles","linux","macos","nerd-fonts","oh-my-posh","powershell","prompt","pwsh","ricing","shell","spotify","terminal","theme","ubuntu","windows","wsl"],"created_at":"2026-06-27T08:03:09.767Z","updated_at":"2026-06-27T08:03:10.559Z","avatar_url":"https://github.com/carrilloapps.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# omp-config\n\n**A cross-platform [oh-my-posh](https://ohmyposh.dev) prompt for developers.**\nAdaptive 3-line layout · system telemetry · music integration · brand-aware themes.\n\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](LICENSE)\n[![Platforms](https://img.shields.io/badge/platforms-linux%20%7C%20wsl%20%7C%20macos%20%7C%20windows-lightgrey.svg?style=flat-square)](#supported-platforms)\n[![Shells](https://img.shields.io/badge/shells-bash%20%7C%20pwsh-success.svg?style=flat-square)](#installation)\n[![oh-my-posh](https://img.shields.io/badge/oh--my--posh-v22%2B-E95420.svg?style=flat-square)](https://ohmyposh.dev)\n[![GitHub stars](https://img.shields.io/github/stars/carrilloapps/omp-config?style=flat-square\u0026color=2C001E)](https://github.com/carrilloapps/omp-config/stargazers)\n\n\u003c/div\u003e\n\n---\n\n```text\n 24.15.0   1.2G/31G (4%)   0.41 (3%)   1.2G/4G (30%)   79%             ♫ The Cranberries — Promises\n user@host  ~/project  proyecto v1.0.0   main ↑1                                       ✓  18:09:42\n❯\n```\n\n## Why\n\nMost prompt configurations leak details from their host's OS, package manager, or shell. `omp-config` is one set of theme files that produces a coherent prompt on **Ubuntu, other Linux distros, WSL, macOS, and Windows** — picking the right palette and the right telemetry source automatically. Slow data (GPU memory, Spotify track) is cached. The layout reflows below a configurable column count so narrow terminals stay readable.\n\n## Highlights\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n**Layout**\n\n- Three lines: telemetry, identity + git, prompt\n- Adaptive: `1.2G/31G (4%)` → `4%` below 130 cols\n- Spotify badge replaced by public IP when no music\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n**Telemetry**\n\n- RAM, CPU load, GPU memory + utilization, battery\n- Battery icons reflect state (5 levels + charging + AC plug)\n- Cached lookups keep prompt latency imperceptible\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd valign=\"top\"\u003e\n\n**Context**\n\n- Runtime versions (Node, Python, Go, Rust, Bun)\n- Cloud (`kubectl`, `aws`, `docker`) — only when set\n- Git: ahead/behind/staged/working indicators\n\n\u003c/td\u003e\n\u003ctd valign=\"top\"\u003e\n\n**Cross-platform**\n\n- Same JSON works on Linux, WSL, macOS, Windows\n- `{{ if ne .OS \"windows\" }}` guards on host-specific fields\n- UTF-8 forced on PowerShell to preserve Nerd Font glyphs\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Table of Contents\n\n- [Preview](#preview)\n- [Supported Platforms](#supported-platforms)\n- [Requirements](#requirements)\n- [Installation](#installation)\n- [Configuration](#configuration)\n- [Optional Integrations](#optional-integrations)\n- [How It Works](#how-it-works)\n- [Themes](#themes)\n- [Customization](#customization)\n- [Troubleshooting](#troubleshooting)\n- [Project Structure](#project-structure)\n- [Acknowledgements](#acknowledgements)\n- [Author](#author)\n- [License](#license)\n\n## Preview\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003cstrong\u003eWide terminal, Spotify playing\u003c/strong\u003e\u003c/summary\u003e\n\n```text\n 24.15.0   1.2G/31G (4%)   0.41 (3%)   1.2G/4G (30%)   79%             ♫ The Cranberries — Promises\n user@host  ~/project  proyecto v1.0.0   main ↑1                                       ✓  18:09:42\n❯\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eWide terminal, no music — public IP fallback\u003c/strong\u003e\u003c/summary\u003e\n\n```text\n 24.15.0   1.2G/31G (4%)   0.41 (3%)   1.2G/4G (30%)   79%                           191.92.219.243\n user@host  ~/project  proyecto v1.0.0   main ↑1                                       ✓  18:09:42\n❯\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eNarrow terminal, compact mode\u003c/strong\u003e\u003c/summary\u003e\n\n```text\n 24.15.0   4%   3%   30%   79%                                ♫ The Cranberries…\n user@host  ~/project  main ↑1                                        ✓  18:09:42\n❯\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eFailed command (exit 42), slow command (2.3 s)\u003c/strong\u003e\u003c/summary\u003e\n\n```text\n 24.15.0   1.2G/31G (4%)   0.41 (3%)   1.2G/4G (30%)   79%             ♫ The Cranberries — Promises\n user@host  ~/project  proyecto v1.0.0   main ↑1                ✗ 42   2.3s   18:09:42\n❯\n```\n\n\u003c/details\u003e\n\n## Supported Platforms\n\n| Platform | Shell | Status | Theme auto-selected |\n|---|---|---|---|\n| Ubuntu (any version) | bash | Full | `ubuntu.omp.json` |\n| WSL2 (Ubuntu) | bash | Full | `ubuntu.omp.json` |\n| WSL2 (Debian, Arch, etc.) | bash | Full | `mono.omp.json` |\n| Other Linux (Arch, Fedora, Debian, Alpine…) | bash | Full | `mono.omp.json` |\n| macOS | bash · zsh | Full | `mono.omp.json` |\n| Windows 11 / 10 | PowerShell 7 (`pwsh`) | Full | `ubuntu.omp.json` (configurable) |\n| Windows PowerShell 5.1 | `powershell.exe` | Works after enabling script execution policy | manual |\n\n## Requirements\n\n- [**oh-my-posh**](https://ohmyposh.dev/docs/installation/prompt) **v22 or newer**\n- A **Nerd Font** configured in your terminal — `Mono` variants render icons in a single cell\n  - Recommended: `CaskaydiaCove Nerd Font Mono`, `FiraCode Nerd Font Mono`, `0xProto Nerd Font Mono`, `MesloLGS NF`\n  - These fonts also fully cover [Terminal-Icons](#optional-integrations) on Windows out of the box\n- For GPU telemetry: NVIDIA GPU with `nvidia-smi` on PATH (or at `/usr/lib/wsl/lib/nvidia-smi` on WSL)\n- For Spotify badge: the desktop Spotify client running\n- For Linux desktop Spotify integration: `playerctl` (`apt install playerctl` · `pacman -S playerctl` · `brew install playerctl`)\n\n## Installation\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eUbuntu (native Linux)\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\ngit clone https://github.com/carrilloapps/omp-config.git\ncd omp-config\nbash install/install.sh\n```\n\nWhat it does:\n\n1. Creates `~/.config/oh-my-posh/themes/` and copies both theme JSON files\n2. Copies `scripts/refresh-stats.sh` to `~/.config/oh-my-posh/refresh-stats.sh`\n3. Injects an idempotent block between `# \u003e\u003e\u003e omp-config \u003e\u003e\u003e` and `# \u003c\u003c\u003c omp-config \u003c\u003c\u003c` markers into `~/.bashrc`\n4. The block reads `/etc/os-release`, finds `ID=ubuntu`, and loads `ubuntu.omp.json` automatically\n\nActivate:\n\n```bash\nsource ~/.bashrc\n```\n\nOr open a new terminal.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eWSL2 (Ubuntu, Debian, or any distro on Windows)\u003c/strong\u003e\u003c/summary\u003e\n\nThe bash installer works identically inside WSL — but there are a few WSL-specific behaviors worth knowing.\n\n**Install:**\n\n```bash\ngit clone https://github.com/carrilloapps/omp-config.git\ncd omp-config\nbash install/install.sh\n```\n\n**WSL-specific behavior:**\n\n- **Spotify integration:** when WSL is detected (`microsoft` in `/proc/version`), the stats refresher calls `powershell.exe Get-Process Spotify` to read the currently-playing track from the Windows host. The Spotify client must be running on Windows, not inside WSL.\n- **GPU telemetry:** uses `/usr/lib/wsl/lib/nvidia-smi`, which Windows mounts into every WSL distro automatically when you have NVIDIA drivers installed on Windows.\n- **Battery:** OMP reads `/sys/class/power_supply/BAT*`. WSL2 exposes battery state from the host, so the percentage and charging state work without extra setup.\n- **Path display:** when launching pwsh from Windows Terminal into a WSL directory, the path shows as `\\\\wsl.localhost\\Ubuntu\\...` — that's expected.\n\n**Theme:** Ubuntu WSL gets `ubuntu.omp.json`. Other distros on WSL (Debian, Arch, etc.) get `mono.omp.json` — both decided by `/etc/os-release` `ID=`.\n\nActivate:\n\n```bash\nsource ~/.bashrc\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eOther Linux (Arch, Fedora, Debian, Alpine, openSUSE, …)\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\ngit clone https://github.com/carrilloapps/omp-config.git\ncd omp-config\nbash install/install.sh\n```\n\nThe installer reads `/etc/os-release`. Any value of `ID` other than `ubuntu` causes the `mono.omp.json` theme to load — grayscale with red and yellow reserved for warnings. If you prefer the Ubuntu palette anywhere, edit the block in `~/.bashrc` and change `mono.omp.json` to `ubuntu.omp.json`.\n\nFor Spotify on Linux desktops, install `playerctl`:\n\n- Arch: `pacman -S playerctl`\n- Fedora: `dnf install playerctl`\n- Debian / Ubuntu: `apt install playerctl`\n- openSUSE: `zypper install playerctl`\n\nActivate:\n\n```bash\nsource ~/.bashrc\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003emacOS (Intel and Apple Silicon)\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\ngit clone https://github.com/carrilloapps/omp-config.git\ncd omp-config\nbash install/install.sh\n```\n\nThe installer detects the oh-my-posh binary at `/opt/homebrew/bin/oh-my-posh` (Apple Silicon) or `/usr/local/bin/oh-my-posh` (Intel), and falls back to whatever `which oh-my-posh` returns.\n\n**macOS-specific behavior:**\n\n- **Spotify:** read via `osascript` against the Spotify.app process. No additional installation required.\n- **GPU:** Apple Silicon Macs don't have an NVIDIA GPU, so the GPU segment is empty. This is expected.\n- **RAM:** computed from `vm_stat` + `sysctl hw.memsize` (used = total − free − inactive − speculative).\n- **CPU:** uses `sysctl vm.loadavg` for load and `sysctl hw.ncpu` for core count.\n\n**zsh users:** the bash installer modifies `~/.bashrc`, but oh-my-posh works the same on zsh. To install for zsh manually, replace `bash` with `zsh` in the OMP init line:\n\n```zsh\neval \"$(oh-my-posh init zsh --config ~/.config/oh-my-posh/themes/ubuntu.omp.json)\"\n```\n\nActivate:\n\n```bash\nsource ~/.bashrc\n```\n\nOr open a new terminal.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eWindows 11 / 10 (PowerShell 7)\u003c/strong\u003e\u003c/summary\u003e\n\n```powershell\ngit clone https://github.com/carrilloapps/omp-config.git\ncd omp-config\n.\\install\\install.ps1\n```\n\nWhat it does:\n\n1. Creates `%USERPROFILE%\\.config\\oh-my-posh\\themes\\` and copies both theme files\n2. Copies `scripts\\refresh-stats.ps1` to `%USERPROFILE%\\.config\\oh-my-posh\\refresh-stats.ps1`\n3. Injects an idempotent block between `# \u003e\u003e\u003e omp-config \u003e\u003e\u003e` and `# \u003c\u003c\u003c omp-config \u003c\u003c\u003c` markers into `$PROFILE`\n4. The block sets `[Console]::OutputEncoding = UTF8`, initializes oh-my-posh with `ubuntu.omp.json`, dot-sources the stats script, and wraps the `prompt` function so stats refresh every render\n\nTo switch to the mono theme on Windows, edit `$PROFILE` and change `ubuntu.omp.json` to `mono.omp.json`.\n\nActivate:\n\n```powershell\n. $PROFILE\n```\n\nOr open a new PowerShell window.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eWindows PowerShell 5.1 (legacy \u003ccode\u003epowershell.exe\u003c/code\u003e)\u003c/strong\u003e\u003c/summary\u003e\n\nPowerShell 5.1 ships with `Restricted` execution policy by default, which blocks loading scripts. Run this once:\n\n```powershell\nSet-ExecutionPolicy -Scope CurrentUser RemoteSigned\n```\n\nThe profile path for Windows PowerShell 5.1 is different from PowerShell 7. After cloning, manually copy the contents of the installer block into:\n\n```\n%USERPROFILE%\\Documents\\WindowsPowerShell\\Microsoft.PowerShell_profile.ps1\n```\n\nPowerShell 7 is strongly recommended — it has UTF-8 defaults, faster startup, and is the supported target of the installer.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eManual install (any platform)\u003c/strong\u003e\u003c/summary\u003e\n\nIf you'd rather not run the installer, copy the files yourself.\n\n**bash:**\n\n1. Copy `themes/ubuntu.omp.json` and `themes/mono.omp.json` to `~/.config/oh-my-posh/themes/`\n2. Copy `scripts/refresh-stats.sh` to `~/.config/oh-my-posh/refresh-stats.sh` and `chmod +x`\n3. Append to `~/.bashrc`:\n\n```bash\neval \"$(oh-my-posh init bash --config ~/.config/oh-my-posh/themes/ubuntu.omp.json)\"\nPROMPT_COMMAND=\"${PROMPT_COMMAND:+${PROMPT_COMMAND}; }source $HOME/.config/oh-my-posh/refresh-stats.sh\"\n```\n\n**PowerShell:**\n\n1. Copy `themes\\*.json` to `$env:USERPROFILE\\.config\\oh-my-posh\\themes\\`\n2. Copy `scripts\\refresh-stats.ps1` to `$env:USERPROFILE\\.config\\oh-my-posh\\refresh-stats.ps1`\n3. Append to `$PROFILE`:\n\n```powershell\n$OutputEncoding = [System.Text.UTF8Encoding]::new($false)\n[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)\noh-my-posh init pwsh --config \"$env:USERPROFILE\\.config\\oh-my-posh\\themes\\ubuntu.omp.json\" | Invoke-Expression\n. \"$env:USERPROFILE\\.config\\oh-my-posh\\refresh-stats.ps1\"\n```\n\n\u003c/details\u003e\n\n## Configuration\n\n### File layout after installation\n\n```\n~/.config/oh-my-posh/                     # Linux / macOS / WSL bash\n├── refresh-stats.sh\n└── themes/\n    ├── ubuntu.omp.json\n    └── mono.omp.json\n\n%USERPROFILE%\\.config\\oh-my-posh\\         # Windows pwsh\n├── refresh-stats.ps1\n└── themes\\\n    ├── ubuntu.omp.json\n    └── mono.omp.json\n```\n\n### Theme auto-selection\n\nThe bash installer's injected block reads `/etc/os-release`:\n\n- `ID=ubuntu` → `ubuntu.omp.json`\n- anything else → `mono.omp.json`\n\nPowerShell defaults to `ubuntu.omp.json`. Edit `$PROFILE` to switch.\n\n## Optional Integrations\n\nBeyond the prompt itself, `omp-config` ships with **automatic** integrations that add per-file icons to `ls` / `Get-ChildItem` output. The Unix installer auto-installs both `eza` and `icons-in-terminal`; the Windows installer auto-installs `Terminal-Icons`. None of them are required — if installation fails, the prompt still works.\n\n| Tool | Platforms | Adds | Auto-installed by |\n|---|---|---|---|\n| [**eza**](https://github.com/eza-community/eza) | Linux · WSL · macOS | `--icons` flag for `ls`/`ll`/`la`/`lt` (uses your Nerd Font) | `install/install.sh` |\n| [**icons-in-terminal**](https://github.com/sebastiencs/icons-in-terminal) | Linux · WSL · macOS | 1400+ shell variables (`$oct_*`, `$fa_*`, `$powerline_*`, …) for scripts | `install/install.sh` |\n| [**Terminal-Icons**](https://github.com/devblackops/Terminal-Icons) | Windows · PowerShell | File/folder icons in `Get-ChildItem` | `install/install.ps1` |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eTerminal-Icons — Windows · PowerShell\u003c/strong\u003e\u003c/summary\u003e\n\n[devblackops/Terminal-Icons](https://github.com/devblackops/Terminal-Icons) is a PowerShell module that adds Nerd-Font icons to `Get-ChildItem` (`ls`, `dir`) based on file type and extension. It uses the same Nerd Font already required by `omp-config`, so there is no additional font installation.\n\n**Automatic installation:** `install.ps1` checks for the module and installs it from the PowerShell Gallery when missing:\n\n```powershell\nInstall-Module -Name Terminal-Icons -Scope CurrentUser -Force\n```\n\nThe installer's `$PROFILE` block then imports it on every shell start:\n\n```powershell\nif (Get-Module -ListAvailable -Name Terminal-Icons) {\n    Import-Module Terminal-Icons -ErrorAction SilentlyContinue\n}\n```\n\n**Manual install:**\n\n```powershell\nInstall-Module -Name Terminal-Icons -Scope CurrentUser\n```\n\n**Compatible fonts:** any Nerd Font Mono variant. The recommended fonts in the [Requirements](#requirements) section all work.\n\n**Result:** `ls` shows folder/file icons colored by type:\n\n```\n   src/\n   package.json\n   tsconfig.json\n   .env\n   README.md\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eeza — Linux · WSL · macOS · bash\u003c/strong\u003e\u003c/summary\u003e\n\n[eza](https://github.com/eza-community/eza) is a modern replacement for `ls` with native `--icons` support that reads from your Nerd Font. The installer detects your package manager and runs the right command:\n\n| Detector | Command run |\n|---|---|\n| `brew` (macOS / Linuxbrew) | `brew install eza` |\n| `apt-get` (Ubuntu / Debian) | `sudo apt-get install -y eza` |\n| `pacman` (Arch) | `sudo pacman -S --noconfirm eza` |\n| `dnf` (Fedora) | `sudo dnf install -y eza` |\n| `cargo` (Rust) | `cargo install eza` |\n\nAfter install, `install.sh` adds four aliases to the `~/.bashrc` block:\n\n```bash\nalias ls='eza --icons --group-directories-first'\nalias ll='eza --icons -la --group-directories-first'\nalias la='eza --icons -a --group-directories-first'\nalias lt='eza --icons --tree --level=2 --group-directories-first'\n```\n\nAliases are wrapped in `if command -v eza \u003e/dev/null` so they only apply when eza is installed. If `eza` is uninstalled later, the aliases vanish on next shell start and `ls` falls back to coreutils.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eicons-in-terminal — Linux · WSL · macOS · bash\u003c/strong\u003e\u003c/summary\u003e\n\n[sebastiencs/icons-in-terminal](https://github.com/sebastiencs/icons-in-terminal) supplies its own icon font and shell scripts. It does NOT modify `ls` directly — instead it exports 1400+ shell variables (`$oct_git_branch`, `$fa_house`, `$powerline_branch`, …) that you embed in custom scripts and prompts.\n\n**Automatic install:** `install.sh` clones the repo to a temp dir, runs its `./install.sh` (which installs `~/.fonts/icons-in-terminal.ttf`, generates `~/.config/fontconfig/conf.d/30-icons.conf`, copies bash helpers to `~/.local/share/icons-in-terminal/`, and runs `fc-cache`), then cleans up.\n\nRequires `git` and `fc-cache` (fontconfig). On Debian/Ubuntu: `sudo apt install git fontconfig`.\n\n**Auto-detection at shell start:** the `~/.bashrc` block sources `icons_bash.sh` from any of these locations:\n\n```bash\n~/.local/share/icons-in-terminal/icons_bash.sh   # default install\n~/.icons-in-terminal/icons_bash.sh                # legacy\n/usr/local/share/icons-in-terminal/icons_bash.sh  # system-wide\n```\n\nIf you install icons-in-terminal *after* running `omp-config`'s installer, opening a new terminal picks it up automatically — no reinstall needed.\n\n**Compatible fonts:** the project's `icons-in-terminal.ttf` is installed and registered with `fontconfig` automatically. Configure your terminal to use it as a fallback after your primary Nerd Font.\n\n**Windows / PowerShell:** not supported (the project is Unix-only). Use [Terminal-Icons](#optional-integrations) instead.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eChoosing between Nerd Fonts and icons-in-terminal\u003c/strong\u003e\u003c/summary\u003e\n\nYou can run both, but typically you pick one as your terminal's primary icon font.\n\n| | Nerd Font (default for `omp-config`) | icons-in-terminal |\n|---|---|---|\n| Distribution | Single patched font replaces your existing terminal font | Separate icon-only font, set as fallback |\n| Required by `omp-config` prompt | Yes — every glyph in the prompt is from Nerd Font ranges | No |\n| Pairs with | Terminal-Icons (PowerShell) | Its own `icons_bash.sh` / `icons_zsh.sh` |\n| Best when | You want one font that handles everything | You want a different icon set than NF, or already have your editor font set |\n\nThe prompt itself (`omp-config` themes) **requires Nerd Font**. `icons-in-terminal` only affects `ls` and similar commands — it never modifies the prompt.\n\n\u003c/details\u003e\n\n## How It Works\n\n### Environment-variable driven segments\n\noh-my-posh themes can't natively shell out to platform-specific commands. To keep the JSON portable, `omp-config` publishes values as environment variables that the theme reads through `{{ .Env.POSH_X }}` templates.\n\n| Variable | Set by | Format (wide) | Format (compact) |\n|---|---|---|---|\n| `POSH_RAM` | `refresh-stats.{sh,ps1}` | `1.2G/31G (4%)` | `4%` |\n| `POSH_CPU` | `refresh-stats.{sh,ps1}` | `0.41 (3%)` | `3%` |\n| `POSH_GPU` | `refresh-stats.{sh,ps1}` | `1.2G/4G (30%)` | `30%` |\n| `POSH_SPOTIFY` | `refresh-stats.{sh,ps1}` | full title | first 25 chars + `…` |\n\nOn bash, `refresh-stats.sh` is appended to `PROMPT_COMMAND`. On PowerShell, the script wraps the `prompt` function (the `Set-PoshContext` hook is not reliably reachable from user scope in PowerShell 7).\n\n### Caching strategy\n\n| Stat | Source | Cache TTL |\n|---|---|---|\n| GPU | `nvidia-smi --query-gpu=memory.used,memory.total,utilization.gpu` | 5 s |\n| Spotify | `powershell.exe` (WSL→Win), `osascript` (macOS), `playerctl` (Linux) | 3 s |\n| RAM | `/proc/meminfo`, `vm_stat`+`sysctl`, or `Win32_OperatingSystem` (CIM) | none — sub-millisecond |\n| CPU | `/proc/loadavg`+`nproc`, `sysctl`, or `Win32_Processor` (CIM) | none — sub-millisecond |\n\nCaches live under `/tmp` (or `%TEMP%` on Windows), keyed by user ID. Formatting is re-derived each prompt from the cached raw values using the current terminal width, so the layout reflows immediately on resize without re-running the slow command.\n\n## Themes\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eUbuntu palette (\u003ccode\u003eubuntu.omp.json\u003c/code\u003e)\u003c/strong\u003e\u003c/summary\u003e\n\nBased on the [Ubuntu brand book](https://design.ubuntu.com/brand/) and the [Yaru GTK theme](https://github.com/ubuntu/yaru).\n\n| Color | Hex | Usage |\n|---|---|---|\n| Ubuntu Orange | `#E95420` | Primary accent — OS, CPU, status check, prompt arrow, git on clean |\n| Canonical Red | `#C7162B` | Errors, low battery, OFFLINE |\n| Ubuntu Green | `#0E8420` | Success check, Node runtime |\n| Aubergine | `#77216F` | Reserved variations |\n| Aubergine Mid | `#5E2750` | Project name, Bun runtime |\n| Aubergine Light | `#C25EAD` | GPU icon (high visibility on dark) |\n| Aubergine Dark | `#2C001E` | Spotify / IP badge background |\n| Warm White | `#F7F7F7` | Username, host |\n| Warm Gray | `#C7C2BC` | Path, RAM, time |\n| Warm Dim | `#928B85` | Execution time |\n| Blue | `#335280` | Python, Go, Docker |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eMonochrome (\u003ccode\u003emono.omp.json\u003c/code\u003e)\u003c/strong\u003e\u003c/summary\u003e\n\nGrayscale base with color reserved exclusively for warnings.\n\n| Trigger | Color |\n|---|---|\n| Exit code \u003e 0 | Red |\n| Battery ≤ 20% | Red |\n| Battery 20–50% | Yellow |\n| Git working / staged changes | Yellow |\n| Git ahead AND behind (divergence) | Red |\n| Background jobs \u003e 0 | Yellow |\n| Connection disconnected | Red |\n| OMP upgrade available | Yellow |\n| Charging | Bright white |\n\nEverything else renders in `#FFFFFF` / `#E0E0E0` / `#A8A8A8` / `#787878` / `#3A3A3A`.\n\n\u003c/details\u003e\n\n## Customization\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eChange the active theme on Windows\u003c/strong\u003e\u003c/summary\u003e\n\nEdit `$PROFILE` and replace `ubuntu.omp.json` with `mono.omp.json` in the `$ompTheme` line.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eChange the width threshold\u003c/strong\u003e\u003c/summary\u003e\n\nEdit the variable at the top of the stats script:\n\n- bash: `_OMP_WIDTH_FULL=130` in `~/.config/oh-my-posh/refresh-stats.sh`\n- PowerShell: `$script:OmpWidthFull = 130` in `%USERPROFILE%\\.config\\oh-my-posh\\refresh-stats.ps1`\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eChange Spotify-track truncation length\u003c/strong\u003e\u003c/summary\u003e\n\nInside `_omp_refresh_spotify` (bash) or `_Omp-RefreshSpotify` (PowerShell), the truncation helper is called with `25` as the max length. Adjust to taste.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eSwap a Nerd Font icon\u003c/strong\u003e\u003c/summary\u003e\n\nAll icons are stored as explicit `\\uXXXX` Unicode escapes in the JSON so they survive any source-code editing. Look up the codepoint you want at the [Nerd Fonts cheat sheet](https://www.nerdfonts.com/cheat-sheet) and replace the escape in the appropriate segment's `template`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eDisable a segment\u003c/strong\u003e\u003c/summary\u003e\n\nSet the segment's `template` to `\"\"`, or remove the segment object entirely.\n\nNote: the `connection` segment uses a `{{ if ne .OS \"windows\" }}` guard. Don't remove it — the field doesn't exist on Windows and the template will error.\n\n\u003c/details\u003e\n\n## Troubleshooting\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eIcons appear as boxes, question marks, or invisible spaces\u003c/strong\u003e\u003c/summary\u003e\n\nYour terminal font isn't a Nerd Font (or it's the non-`Mono` variant). Install one of the recommended Nerd Fonts and select it in your terminal application's settings.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ePowerShell shows \u003ccode\u003e¯£ÿ\u003c/code\u003e or similar gibberish where icons should be\u003c/strong\u003e\u003c/summary\u003e\n\nUTF-8 encoding isn't applied. Verify your `$PROFILE` contains the `[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)` line. The installer adds it automatically — if you installed manually, add it at the top of the profile.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eThe cursor lands on a line below \u003ccode\u003e❯\u003c/code\u003e instead of next to it\u003c/strong\u003e\u003c/summary\u003e\n\nThis was historically caused by right-aligned segments on the prompt line confusing readline. The current layout places `❯` alone on its own line with no right-aligned content. Open a fresh terminal after install. If the issue persists, run `echo \"$PS1\"` (bash) or `$function:prompt` (PowerShell) and open an issue with the output.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eRAM / CPU / GPU values are empty\u003c/strong\u003e\u003c/summary\u003e\n\nThe stats refresher isn't running.\n\n- **bash:** check that `echo $PROMPT_COMMAND` ends with `source $HOME/.config/oh-my-posh/refresh-stats.sh`.\n- **PowerShell:** verify the prompt was wrapped — `(Get-Command prompt).ScriptBlock.ToString()` should contain `Update-PoshStats`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\u003ccode\u003eunable to create text based on template\u003c/code\u003e appears in the prompt\u003c/strong\u003e\u003c/summary\u003e\n\nA segment template referenced a field that doesn't exist on the current platform. Open an issue with the platform and a copy of your active theme JSON.\n\n\u003c/details\u003e\n\n## Project Structure\n\n```\nomp-config/\n├── README.md\n├── LICENSE                  # MIT\n├── .gitignore\n├── install/\n│   ├── install.sh           # bash installer\n│   └── install.ps1          # PowerShell installer\n├── scripts/\n│   ├── refresh-stats.sh     # stats helper for bash\n│   └── refresh-stats.ps1    # stats helper for PowerShell\n└── themes/\n    ├── ubuntu.omp.json      # Ubuntu brand theme\n    └── mono.omp.json        # monochrome theme\n```\n\n## Acknowledgements\n\n- [**oh-my-posh**](https://ohmyposh.dev) by [Jan De Dobbeleer](https://github.com/JanDeDobbeleer) — the prompt engine this builds on\n- [**Ubuntu brand book**](https://design.ubuntu.com/brand/) and [**Yaru**](https://github.com/ubuntu/yaru) — source of the Ubuntu palette\n- [**Nerd Fonts**](https://www.nerdfonts.com) by [Ryan L McIntyre](https://github.com/ryanoasis) — the patched fonts that supply every glyph\n- [**Catppuccin Frappé**](https://github.com/catppuccin/catppuccin) — early layout inspiration\n- [**ipify**](https://www.ipify.org) — the public IP API used by the fallback badge\n\n## Author\n\n\u003cdiv align=\"center\"\u003e\n\n**Junior Carrillo**\nTech Lead · Open Finance \u0026 Payments Expert · AI-Driven Architect\nMedellín, Colombia\n\n[Website](https://carrillo.app) ·\n[Email](mailto:m@carrillo.app) ·\n[GitHub](https://github.com/carrilloapps) ·\n[LinkedIn](https://linkedin.com/in/carrilloapps) ·\n[X](https://x.com/carrilloapps) ·\n[Bluesky](https://bsky.app/profile/carrillo.app)\n\n[Dev.to](https://dev.to/carrilloapps) ·\n[Hashnode](https://hashnode.com/@carrilloapps) ·\n[Substack](https://carrilloapps.substack.com) ·\n[Stack Overflow](https://stackoverflow.com/users/14580648) ·\n[YouTube](https://www.youtube.com/channel/UCIwxFli0q78RqlMOgByVe-g)\n\n\u003c/div\u003e\n\n## License\n\nReleased under the [MIT License](LICENSE).\n\nYou are free to use, modify, and redistribute this work in personal and commercial contexts, provided the copyright notice remains intact.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarrilloapps%2Fomp-config","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarrilloapps%2Fomp-config","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarrilloapps%2Fomp-config/lists"}