Menu for Fuzzy Linux Procedures
Project description
rungs -- A Tool for Fuzzy Procedures
rungs
is a tool help navigate "fuzzy" procedures on Linux where you might want to:
- skip certain steps if certain vague criteria are met
- repeat certain steps if they failed and trying again makes sense
You very simply specify your procedures within a single .ini
file.
Quick Start: from the CLI
- If
python3 -V
shows v3.11 or later, install usingpipx
:
python3 -m pip install --user pipx # if pipx not installed
python3 -m pipx ensurepath # if needed (restart terminal)
pipx upgrade rungs || pipx install rungs # to install/upgrade
- Else for python3.10 and lesser versions, install using
pip
:
python3 -m pip install --user --upgrade rungs
- To run:
rungs # to run and show all menus
rungs {menu-name} # run the specified menu
rungs --edit # edit your menus
Mnemonic: step through the rungs of your laddered procedure ;-)
A Practical Example -- Manually Updating EndeavourOS
Here is an example menu for manually update an EndeavourOS:
Notes:
- Except for the first personal command, all commands are standard on EndeavourOS.
- All commands are run literally by
bash
except:exit
which means exit the menu.rungs {menu-name}
runs rungs recursively usingpython3
- To run a command:
- highlight the command by typing the "key" before the ':' or move the cursor with the up/down arrow keys.
- then press ENTER.
- After the command runs, the next command is highlighted and runs with just ENTER if desired.
- To, repeat and skip commands, just select another command rather than the next.
- IMPORTANT: If the menu does not fit within your terminal, then resize until it does fit.
rungs
Config: ~/.config/rungs/rungs.ini
Edit ~/.config/rungs/rungs.ini
to configure your menu. The "eos-update-menu" was configured by adding this section:
[eos-update]
a: my-snaps # replace snaps of root, home, etc
b: sudo reflector -l20 -cus,ca --sort rate --save /etc/pacman.d/mirrorlist
c: eos-rankmirrors # update EndeavourOS mirrors
d: eos-update --yay # EndeavourOS update script
e: sudo paccache -rk1; sudo paccache -ruk0 # cleanup cache
f: sudo pacman -Rns $(pacman -Qdtq) # cleanup orphans
g: flatpak update
h: flatpak uninstall --unused; flatpak repair
i: sudo journalctl --vacuum-time=2weeks
j: sudo reboot now
x: exit
So, the config looks nearly the same as the menu, but if you specify a multiline value, then:
- the first line is shown, and
- the subsequent lines are given to bash literally.
In this manner, for very complicated commands, you can provide a summary description of what is to be run.
Additionally:
- keys must be a single character and unique
- if you specify an multicharacter key, only the lead character is used in the menu
rungs
Command Line
usage: rungs [-h] [-e] [-n] [menus ...]
positional arguments:
menus zero or more arguments
options:
-h, --help show this help message and exit
-e, --edit edit config (i.e., runs edit-rungs-config)
-n, --dry-run show commands w/o running them
Thus, you can:
- run
rungs --edit
to edit the configuration file. - run
rungs
with no arguments to given a menu of all the "ordinary" menus. - provide the name specifiers of the menus to run them; each name spec can match:
- exactly,
- case independent exactly (if unique and ordinary),
- or case independent substring match but only at word boundaries (if unique and ordinary); e.g., for the menus,
['edit-rungs-config', 'example', 'eos-update']
:- these name specs would find a menu: 'edit', 'ex', 'EOS-', 'EOS-UPDATE'
- these name specs would NOT: 'date', 'e'.
"Special" (vs "Ordinary") menu names begin with character other than [_A-Za-z0-9], and are excluded from being run unless given the whole, exact, memory sensitive name. A suggested naming convention for menus:
- beginning
>
for a sub-menu that should not be called independently - beginning
!
for a deprecated menu (but not ready to remove it)
The Edit Menu and Handling Corrupt .ini Files
On first startup, the .ini file contains a menu for editing that you may customize:
[edit-rungs-config]
a: ${EDITOR=-vi} ~/.config/rungs/rungs.ini
x: exit
[example]
a: command-a
b: prompt-b
command-b
x: exit
For example, you might change the default from vi
to geany
if installed and desired. Also, note:
- You may remove the
example
which shows a multilined value which must be indented lines after the first. - Do NOT remove the
edit-rungs-config
menu; it is needed for--edit
option AND recovery. - The
edit-rungs-config
shows how to pass variables to your commands. - In case of a corrupt
.ini
, you will see the error and theedit-rungs-config
menu. - Each time the
.ini
file is read and valid,~/.config/rungs/rungs.ini.bak
is written; in the case you just made a terrible change, recover using the.ini.bak
file manually (w/o runningrungs -e
).
Practical Examples
The examples
subdirectory includes more practical examples, including
- A two-level menu for Fedora updates and release upgrades.
These menus many not be current and are not tested; use only after reviewing for correctness and completeness.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file rungs-1.0.11.tar.gz
.
File metadata
- Download URL: rungs-1.0.11.tar.gz
- Upload date:
- Size: 13.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6cf4172d1f9c026947515153c3ba2d4ac4070da731e72029f1c47184c8329f05 |
|
MD5 | 6cf577e9cd6286bff9b84a79b1567fe4 |
|
BLAKE2b-256 | 5b9753fddac13325ba14890cab638f14dd790d093512521b48fbf71888195537 |
File details
Details for the file rungs-1.0.11-py3-none-any.whl
.
File metadata
- Download URL: rungs-1.0.11-py3-none-any.whl
- Upload date:
- Size: 11.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0fef40cc76244e075e6cb2e322495e25a9c039d8372445d539c7d4736ec6aad8 |
|
MD5 | 2d92416f6382671babd760b3dce6be0e |
|
BLAKE2b-256 | 8f0578557394600862f274cebb11ad80fc2d2a98ce25680a770c3322faa22930 |