Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Brewfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ tap "charmbracelet/tap" # Charm shell tools and utilities
tap "oven-sh/bun" # Bun JavaScript runtime

# Command Line Tools & Development
brew "bash" # Modern Bash for monitoring tools such as g3rm0n (macOS ships Bash 3.2)
brew "bat" # Cat clone with syntax highlighting
brew "bottom" # Yet another cross-platform graphical process/system monitor
brew "btop" # Resource monitor that shows usage and stats
Expand Down
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Added
- `bash` (modern Homebrew Bash) to the Brewfile for monitoring tools such as g3rm0n
- g3rm0n live terminal dashboard recommendation in README and INSTALLATION
(`brew install bash jq && curl -fsSL https://raw.githubusercontent.com/iamgerwin/g3rm0n/main/install.sh | bash`)
- `tests/brewfile_test.py` regression for the Brewfile Bash entry

## [0.1.0] - 2026-10-19

### Added
Expand Down
7 changes: 6 additions & 1 deletion INSTALLATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,18 @@ Each backup includes:
- Tmux with Tmux Plugin Manager (TPM)
- Tmux plugins (resurrect, continuum, vim-navigator)
- AI CLI tools (Claude, Gemini, Codex) - optional, requires API keys
- Recommended extra: **g3rm0n** live monitoring dashboard (optional, installs to `~/.local`, no root)
```bash
brew install bash jq && curl -fsSL https://raw.githubusercontent.com/iamgerwin/g3rm0n/main/install.sh | bash
```

### Final Configuration Steps
After installation completes, you'll need to:
1. Install the MesloLGS NF font and configure your terminal
2. Run `p10k configure` to customize your prompt theme
3. (Optional) Run `~/dotfiles/scripts/setup-ai-tools.sh` to configure AI CLI tools
4. Restart your terminal to activate all changes
4. (Optional) Install the g3rm0n monitoring dashboard (see Dependencies Installed)
5. Restart your terminal to activate all changes

## Verification Steps

Expand Down
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,15 @@ The dotfiles now include comprehensive terminal setup tools for an enhanced deve
- **Fd**: Simple, fast alternative to `find`
- **Dust**: More intuitive version of `du` written in Rust

#### Monitoring
- **g3rm0n**: Live terminal dashboard for system and AI usage (CPU, memory, disk, network + Claude/Codex/Z.ai limits)

Install it with the one-liner below. `bash` and `jq` already come from the Brewfile; the command installs them if missing and then installs g3rm0n into `~/.local`:

```bash
brew install bash jq && curl -fsSL https://raw.githubusercontent.com/iamgerwin/g3rm0n/main/install.sh | bash
```

#### Fonts
The setup includes JetBrains Mono and other Nerd Fonts for proper icon display in terminals.

Expand Down
33 changes: 33 additions & 0 deletions tests/brewfile_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
"""Brewfile regression: modern Bash is declared once, in the CLI tools section."""

from pathlib import Path
import unittest


BREWFILE = Path(__file__).resolve().parents[1] / "Brewfile"


class BrewfileTests(unittest.TestCase):
def setUp(self):
self.lines = BREWFILE.read_text(encoding="utf-8").splitlines()

def formula_lines(self, name):
prefix = f'brew "{name}"'
return [line for line in self.lines if line.startswith(prefix)]

def test_modern_bash_is_declared_once(self):
self.assertEqual(len(self.formula_lines("bash")), 1)

def test_jq_is_not_duplicated(self):
self.assertEqual(len(self.formula_lines("jq")), 1)

def test_bash_sits_in_command_line_tools_section_sorted(self):
section = self.lines.index("# Command Line Tools & Development")
bash_index = next(i for i, line in enumerate(self.lines) if line.startswith('brew "bash"'))
bat_index = next(i for i, line in enumerate(self.lines) if line.startswith('brew "bat"'))
self.assertGreater(bash_index, section)
self.assertLess(bash_index, bat_index)


if __name__ == "__main__":
unittest.main()
Loading