Open-source project
ChrisTitusTech/mybash avatar
ChrisTitusTech/mybash

mybash and what a shared shell configuration actually installs on your machine

My Bash profile - Highly customized Starship Theme - Just imagine Powerlevel10k and Nord Theme had a baby.

685 stars245 forksShellMIT

At a glance

What is it?
mybash is Chris Titus Tech's dotfiles for a Starship prompt, a Nord inspired palette system and a set of terminal utilities, and its setup script does considerably more than copy a dotfile: it installs Homebrew, replaces your login shell on macOS, changes your terminal font and installs packages. It fits a developer who wants this exact terminal, and it is the wrong thing to adopt as a general dotfile set.
Who is it for?
mybash fits a developer who wants this specific terminal environment, who runs a recent macOS or a Linux box with a supported package manager, and who is willing to let a setup script change the login shell and the terminal font. It is the wrong choice as a general dotfile set, because the configuration is a personal setup rather than a framework, and the install script takes system level actions that a shared configuration should not.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 102 days ago.
What is it written in?
Mainly Shell, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Three files, and the prompt is only one of them

The repository is a shell configuration for Unix-like systems, described as a comprehensive `.bashrc` configuration along with supporting scripts and configuration files to enhance the terminal experience. The top level listing is small: a `.bashrc`, a `starship.toml`, a `config.jsonc`, a `setup.sh`, an `uninstall.sh`, a `starship-theme` file, a `shellcheck.log`, an `assets/` directory, a `.vscode/` directory and a `LICENSE`.

Three of those files carry the configuration, and the readme describes each one separately.

The `.bashrc` defines aliases, functions and environment variables. The aliases are shortcuts for common commands, with the example given being `alias cp='cp -i'`, which makes copy ask before overwriting. The functions are custom helpers for tasks like extracting archives and copying files with progress.

The `starship.toml` configures the Starship prompt, and the readme names three things it contains: theme settings that define colours and symbols for different prompt segments, module configurations for modules like `python`, `git` and `docker_context` and various programming languages, and format customization that structures the layout and truncation of paths.

The `config.jsonc` configures fastfetch, the system information tool, with logo and display settings, the modules that decide which system information appears such as CPU, GPU, OS, kernel and uptime, and custom sections for hardware and software information.

So the visible result is a prompt plus a system information banner, and the invisible result is a set of aliases and functions. The repository description calls it a highly customized Starship theme, and the palette list and the fastfetch config are the parts you would actually look at.

The palette switcher is the tidiest idea in the repository

Switching color palettes is handled by a separate `starship-theme` file, and the readme explains the point in one line: use it to recolor the prompt without changing its layout.

The interface is three forms:

bash
starship-theme          # interactive picker
starship-theme fedora   # apply a palette directly
starship-theme list     # list available palettes

The available palettes are Ubuntu, Claude, Arch, Fedora, Debian, Mint, Manjaro, Pop!_OS, Kali, Gentoo, Dracula, and the original Nord theme.

This is a better idea than it first appears. A Starship configuration is one TOML file, and themes that change the whole file are awkward because the moment you personalise anything, applying a theme overwrites your changes. A palette that only touches the colour values leaves the layout, the modules and the customisation alone, so a developer can keep a tuned prompt and still switch the colour scheme to match a different terminal theme or a different project.

The naming also tells you something about the design. Most of the palette names are Linux distributions, which makes sense given that the prompt is tuned to the conventions of a Linux desktop, and the inclusion of both Dracula and the original Nord theme marks the two ends of the range: the themes the project grew out of and the ones people ask for.

Claude appearing in the list is a small sign of the current moment, and it is a reminder that these palettes are the terminal equivalent of a code editor theme.

setup.sh installs packages, changes your shell and swaps your font

The install step is one script, and reading what it does is the most important part of evaluating this repository.

sh
git clone --depth=1 https://github.com/christitustech/mybash.git
cd mybash
./setup.sh

The readme then lists what the script automates, and it is a long list. It creates directories `~/.local/share/mybash`, `~/.config/starship` and `~/.config/fastfetch`. It copies the managed repository files into `~/.local/share/mybash`. It installs Homebrew on macOS if it is not already installed, and installs Bash 5 with Homebrew on macOS. It adds Homebrew Bash to `/etc/shells` and sets it as the default login shell on macOS. It installs dependencies, naming bash-completion, neovim, starship, fzf and zoxide. It installs Starship and the JetBrainsMono Nerd Font on Linux, and selects that font in Ptyxis or GNOME Terminal when available. On macOS it installs the MesloLGS Nerd Font required for the prompt when available. It links the configuration files from `~/.local/share/mybash` to your home directory, and links the fastfetch config to `~/.config/fastfetch/config.jsonc`. It ensures `~/.bash_profile` initializes Homebrew on macOS and sources `~/.bashrc` on macOS. And it sets up additional utilities like fastfetch.

Read that list carefully, because several of those are system level changes rather than dotfile copies. Changing your default login shell, editing `/etc/shells` and installing a font into your terminal emulator are the actions of a setup script, not of a configuration file, and the macOS ones may prompt for your password.

The verification step is short, and it is the right check after a change to the login shell:

sh
echo "$SHELL"
bash --version

`$SHELL` should point to the Homebrew Bash path, such as `/opt/homebrew/bin/bash` on Apple Silicon or `/usr/local/bin/bash` on Intel Macs. On Linux, the readme notes you need the required permissions and a supported package manager.

The uninstall script is as considered as the installer

Uninstalling is documented with the same specificity as installing, which is unusual and welcome for a dotfile repository.

sh
cd mybash
chmod +x uninstall.sh
./uninstall.sh
./uninstall.sh --keep-deps

The `--keep-deps` flag removes the mybash configuration while retaining the installed software and fonts, which is the right choice when you want to keep starship, fzf and zoxide but stop managing them through this repository.

The script reverses the installation by removing installed dependencies, uninstalling fonts, removing symbolic links to configuration files, restoring the `.bashrc` backup created during installation, restoring previous Ptyxis or GNOME Terminal font settings, deleting the `~/.local/share/mybash` directory, and cleaning up additional utilities like starship, fzf and zoxide.

Two of those entries are the ones that matter. The `.bashrc` backup means the install is reversible for the file people actually care about, and the font settings restoration means the terminal does not stay in a state that references a font you no longer have.

The `chmod +x` step in the documented sequence is worth noting. It implies the script is not executable in a fresh clone, which is a sensible default for a script that is going to change your login shell, and the fact that the readme asks you to make it executable explicitly is a small sign the author thought about how this thing is going to be run.

After running it, the recommendation is to restart your shell to apply the changes.

The shell behaviour is where the personal touches show

The key features list in the readme is where the design choices become visible, and they are personal ones rather than general.

The first entry is aliases and functions, which covers the shortcuts and the custom helpers for complex operations such as extracting archives and copying with progress. The second is prompt customization and history management, which configures `PROMPT_COMMAND` for automatic history saving, manages the history file size and handles duplicates. The third is enhancements and utilities, which improves command output readability with colors, introduces safer file operations such as using `trash` instead of `rm`, and integrates Zoxide for directory navigation. The fourth is installation and configuration helpers, which auto-install the necessary utilities based on system type and provide functions to edit important configuration files.

The `trash` instead of `rm` substitution is the one with real consequences, and it is worth thinking about. It is a genuinely better default for an interactive shell, where a mistyped `rm` is one of the most common ways a developer loses work. It also changes the meaning of a command, so a script that expects `rm` to fail on a missing file or to remove a directory now behaves differently, and a muscle-memory habit from another machine will not do what you expect.

The `PROMPT_COMMAND` history handling is the other one worth understanding. Hooking automatic history saving into the prompt is how a shell gets a usable history across a session, and doing it in `PROMPT_COMMAND` rather than in a trap is the conventional way to do it. Managing the history file size and handling duplicates is the part that stops the history file from growing without bound.

The advanced functions section is thin by comparison, listing system information display, networking utilities such as IP address checks, and resource monitoring tools. The system specific configuration section adds editor settings with NeoVim as the default, conditional aliases based on system type, and package manager specific commands.

Why this is a personal setup rather than a dotfile framework

The conclusion section of the readme describes the aim as a powerful and customizable terminal environment suitable for various Unix-like systems, for a developer, system administrator or power user. That is a fair description, but it also marks the boundary of what this repository is.

A dotfile framework, the kind of thing people adopt and then configure for their own needs, has a stable set of hooks and lets you set the parts you care about. This repository is the opposite: it is a finished configuration, and the customisation points are the palette names, the aliases in the `.bashrc`, the Starship module configuration and the fastfetch sections. That is a perfectly good artefact, and for the person who made it it is exactly right. For a team, it is a starting point to fork rather than a dependency to install.

The install script is the clearest expression of the difference. It installs Homebrew, replaces the login shell, installs a font, and installs a set of packages that include neovim. None of those are configuration decisions the user made, and a team standardising on a shared configuration would want them to be opt-in. The readme does not present them as optional.

There is also a dependency set that is easy to miss. bash-completion, neovim, starship, fzf and zoxide are all installed, and the config file mentions nvim as the default editor, so installing this repository also changes which editor the shell expects to open. zoxide is integrated for directory navigation, and changing how you move between directories is the kind of habit change that has a real cost even for an enthusiast.

The honest summary is that mybash is best read as a well executed personal terminal environment that happens to be published, and the parts worth taking from it are the palette approach, the fastfetch configuration, the `trash` over `rm` default, and the `PROMPT_COMMAND` history handling.

Editorial conclusion

mybash fits a developer who wants this specific terminal environment, who runs a recent macOS or a Linux box with a supported package manager, and who is willing to let a setup script change the login shell and the terminal font. It is the wrong choice as a general dotfile set, because the configuration is a personal setup rather than a framework, and the install script takes system level actions that a shared configuration should not. Before running `setup.sh`, verify three things: what it does to your login shell on macOS, since it adds Homebrew Bash to `/etc/shells` and sets it as the default and may ask for your password, that the uninstall script can restore your previous `.bashrc`, and that the terminal font it selects is one your emulator has. The code is MIT licensed, the default branch is `main`, the last push was on 2026-07-14, and the repository publishes no releases.

Frequently asked questions

What does the mybash repository contain?

It holds a `.bashrc` with aliases, functions and environment variables, a `starship.toml` for the Starship prompt, and a `config.jsonc` for fastfetch, plus a `setup.sh` installer, an `uninstall.sh` uninstaller, a `starship-theme` palette switcher and a `shellcheck.log`.

How do I install mybash?

Run `git clone --depth=1 https://github.com/christitustech/mybash.git`, change into the `mybash` directory and run `./setup.sh`. On macOS the script may ask for your password, and afterwards you restart Terminal and verify with `echo "$SHELL"` and `bash --version`.

What does setup.sh change on my system?

Beyond copying files and linking configurations, it installs Homebrew on macOS if missing, installs Bash 5 through Homebrew, adds Homebrew Bash to `/etc/shells` and sets it as the default login shell, installs dependencies such as bash-completion, neovim, starship, fzf and zoxide, and installs and selects a Nerd Font in Ptyxis or GNOME Terminal.

How do I switch the prompt color palette in mybash?

Use the `starship-theme` script, which recolors the prompt without changing its layout. Run `starship-theme` for an interactive picker, `starship-theme fedora` to apply a palette directly, or `starship-theme list` to see the options, which include Ubuntu, Claude, Arch, Fedora, Debian, Mint, Manjaro, Pop!_OS, Kali, Gentoo, Dracula and the original Nord theme.

Can I uninstall mybash?

Yes. Run `chmod +x uninstall.sh` and then `./uninstall.sh`, or `./uninstall.sh --keep-deps` to remove the configuration but keep the installed software and fonts. The script restores the `.bashrc` backup, removes the config symlinks and restores previous terminal font settings, and the readme recommends restarting your shell afterwards.

Official sources

  1. ChrisTitusTech/mybash on GitHub
  2. Issues
  3. License: MIT
  4. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/christitustech-mybash.svg)](https://hysenlabs.com/projects/christitustech-mybash)

Was this useful?