PHPackages                             npoole81/mup - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. npoole81/mup

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

npoole81/mup
============

a bash script that generates a selection menu from a simple configuration file

1.2(7y ago)93801MITShell

Since Jul 25Pushed 7y ago1 watchersCompare

[ Source](https://github.com/npoole81/MUP)[ Packagist](https://packagist.org/packages/npoole81/mup)[ RSS](/packages/npoole81-mup/feed)WikiDiscussions master Synced yesterday

READMEChangelog (1)DependenciesVersions (2)Used By (0)

**MUP (aka: 'Menu Up')**
========================

[](#mup-aka-menu-up)

#### **What is it?**

[](#what-is-it)

It's a bash script that generates a selection menu from a simple configuration file.

[![it is what you want it to be](https://camo.githubusercontent.com/0b2d62dd5c25df05b29cee5fc28282e98f56b7a942893e5ab28c45603e97e40c/68747470733a2f2f692e696d6775722e636f6d2f665668533452742e706e67)](https://camo.githubusercontent.com/0b2d62dd5c25df05b29cee5fc28282e98f56b7a942893e5ab28c45603e97e40c/68747470733a2f2f692e696d6775722e636f6d2f665668533452742e706e67)

**Config**:

```
[Cache: Flush && Clean]
exec=php bin/magento cache:flush && php bin/magento cache:clean

[Setup: Upgrade]
exec=php bin/magento setup:upgrade

...

```

#### **Why is it?**

[](#why-is-it)

Because it's easier than making an alias or copying and pasting commands.

#### **Installation**

[](#installation)

You can install via composer with `composer require npoole81/mup`

#### **Usage**

[](#usage)

Just type 'mup' and you'll be given the default menu which you can customize or override.

```
mup

```

#### **SubMenus**

[](#submenus)

You can use MUP recursively and create sub-menus.

```
[Main Item]
exec=mup -c sub-menu.conf

```

and then in sub-menu.conf

```
[Sub Menu Item]
exec=date

```

#### **Callbacks**

[](#callbacks)

In the config entry, you can provide a "callback" command which is used after a menu item is completed.

```
[Sub Menu Item]
exec=date
callback=mup

```

In this example, after executing the command `date`, MUP will call itself (with the default menu).

If no callback is set, after a menu item is selected MUP will exit.

**Supported Parameters**
------------------------

[](#supported-parameters)

##### **Config File**

[](#config-file)

By default MUP looks for $EXECUTABLE\_NAME-menu.conf in the same directory as the bash file. That is, if you rename '*mup*' to '*foobar*' it will look for '*foobar-menu.conf*'.

You can pass the conf parameter (-c|--conf) to MUP to specify the config file to use.

` mup -c /home/$user/configFile.conf`

##### **Auto Execute**

[](#auto-execute)

You can pass the execute parameter (-e|--execute) to MUP to specify a series of selections to run sequentially.

` mup -e 1,2,3`

NOTE: This method does not execute callbacks.

MUP will still confirm the commands it's about to run.

##### **Auto Execute: No interaction**

[](#auto-execute-no-interaction)

You can pass the no-interaction parameter (-n|--no-interaction) along with --execute to not require confirmation before running commands.

` mup -e 1,2,3 -n`

**Other Stuff**
---------------

[](#other-stuff)

##### **Local Config File**

[](#local-config-file)

MUP will look for the file .mup/mup-menu.conf relative to the current working directory and by default use it for the config file.

You can bypass this by passing the config (-c|--config) parameter the value 'DEFAULT'.

` mup -c default`

###  Health Score

31

—

LowBetter than 66% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity20

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity62

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2897d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/2298399?v=4)[Nathan](/maintainers/npoole81)[@npoole81](https://github.com/npoole81)

---

Top Contributors

[![npoole81](https://avatars.githubusercontent.com/u/2298399?v=4)](https://github.com/npoole81 "npoole81 (35 commits)")

### Embed Badge

![Health badge](/badges/npoole81-mup/health.svg)

```
[![Health](https://phpackages.com/badges/npoole81-mup/health.svg)](https://phpackages.com/packages/npoole81-mup)
```

###  Alternatives

[luwes/craft3-codemirror

Add the awesome in-browser code editor CodeMirror as a field type.

1753.8k](/packages/luwes-craft3-codemirror)[dwnload/wp-settings-api

A PHP class abstraction that removes all the headaches of the WordPress settings API under the hood and builds a nice options panel on the fly.

1112.7k7](/packages/dwnload-wp-settings-api)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
