Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/thassiov/framed-commands
A snippet/cheatsheet application. So you don't have to memorize everything.
https://github.com/thassiov/framed-commands
cheatsheet command-line tui typescript
Last synced: 29 days ago
JSON representation
A snippet/cheatsheet application. So you don't have to memorize everything.
- Host: GitHub
- URL: https://github.com/thassiov/framed-commands
- Owner: thassiov
- License: mit
- Created: 2021-02-20T20:43:03.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-01-08T22:56:40.000Z (about 1 year ago)
- Last Synced: 2024-10-11T23:17:06.482Z (3 months ago)
- Topics: cheatsheet, command-line, tui, typescript
- Language: TypeScript
- Homepage:
- Size: 2.53 MB
- Stars: 6
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Make a TUI app using a config file
# tuizer
## Install
```bash
npm install -g tuizer
```## What is does
From a config file, it creates a menu where you can execute commands. A small description of the command is also shown, if provided.
Why (the motivation behind it)
I don't remember all the possible commands from an application and I didn't wanted to keep trying to dig through documentation to find the correct combination of options to do a certain operation. Also I didn't want to created a lot of custom scripts to do those things, like having a script that does `ls -la` alone, for instance.
If I find a command that I want to use, but don't do it very often and don't want to lose it, or I want to study some application, like terraform or some other thing that has a bunch of different commands, I would want something like this available: feed a json file with the stuff you don't want to lose (commands and their descriptions) and the app will create a little menu for you.
## How it works
`tuizer` can be fed a JSON or YAML file directly or, if no file is provided, it searches for the `$HOME/.tuizer` directory for files.
```bash
# the '.json' extension is optional if the format is json
tuizer ./some-json-file.json
tuizer ./some-json-fileor
# the '.yaml' or '.yml' extension is required if the format is yaml
tuizer ./some-yaml-file.yaml# or
# this will launch a selection menu with the `$HOME/.tuizer`'s content
tuizer```
Make sure to create the `$HOME/.tuizer` directory and put your configs there if you don't want to provide them as argument everytime.
## The config file
As mentioned, the config can be both a JSON or a YAML file.
The description here only mentions JSON, but an alternative doc will be written later with the YAML structure. At the end of this doc there are a JSON file example and a YAML file example converted from JSON using [json formatter](https://jsonformatter.org/).### The base structure
```json
{
"name": "These are the commands I am learning",
"commands": []
}
```The base structure only has 2 properties, one of them optional:
|name |type |required |
--- | --- | ---
|`name`|string|no|
|`commands`|array of `comand`|yes|### The `command` structure
```json
{
"command": "some_command",
"parameters": [],
"description": "the command's description",
"nameAlias": "an alias to show in the menu instead of the command (because it might be big)"
},
```|name |type |required |
--- | --- | ---
|`comand`|string|yes|
|`parameters`|array of `parameters`|yes|
|`description`|string|yes|
|`nameAlias`|string|yes|### The `parameters` structure
The `parameters` property can receive two types of elements: `strings` and `input object` structures.
#### The `input object` structure
The idea behind the structure is that there might be commands that need user input to *set parameters*.
This *does not* enable the user to interact with the application run by `tuizer`, but only set the parameters for it to run.```json
{
"type":"string",
"required":true,
"parameter":"",
"question":"Enter the cluster's name",
"defaultValue": "myCluster"
}
```|name |type |required |description |
--- | --- | --- | ---
|`type`|only `string` for now|yes|the type of the input|
|`required`|`boolean`|no|input is obligatory|
|`parameter`|`string`|yes|more info in the next section|
|`question`|`string`|yes|the sentence that will appear in the form for this parameter|
|`defaultValue`|`string`|no|if the user does not input anything, this value will be used|Right now we only have `string` as a type, but in the future there will be `select`, `date`, maybe a `multiSelect`, who knows...😬
##### The `parameter` property
There are two ways to set this property:
- leaving it blank and the parameter will be replaced by the answer given in the form, or
- putting a string with a unescaped `$` in the middle that will be replaced by the answerThe idea of the `$` character is that sometimes the information is in the middle of the string, so if you have a parameter like `--file log..txt` and you want to change the `` part, you would write it as `--file log.$.txt` in the `parameter` field. The answer given in the form will replace the `$` character.
## Example of a JSON file
Here's how it looks like with all the structures in place (json taken from the project's `example` directory)
```json
{
"name":"K3D Kubernetes",
"commands": [
{
"command":"k3d",
"parameters": [
"cluster",
"list"
],
"description":"Lists all k3d clusters",
"nameAlias":"list clusters"
},
{
"command":"k3d",
"parameters": [
"cluster",
"start",
{
"type":"string",
"required":true,
"parameter":"",
"question":"Enter the cluster's name",
"defaultValue": "myCluster"
}
],
"description":"Starts a named cluster (user input or 'my-cluster' by default)",
"nameAlias":"starts a named cluster"
},
{
"command":"k3d",
"parameters": [
"node",
"create",
{
"type":"string",
"required":true,
"parameter":"",
"question":"Enter the worker node's name",
"defaultValue": "myWorker"
},
"--replicas",
{
"type":"string",
"required":true,
"parameter":"",
"question":"Enter the number of replicas of worker nodes",
"defaultValue": "2"
},
"--cluster",
{
"type":"string",
"required":true,
"parameter":"",
"question":"Enter the cluster's name",
"defaultValue": "myCluster"
}
],
"description":"Adds a number of worker nodes (user input or 2 by default) with a given name (user input or 'myWorker' by default) in a named cluster (user input or 'myCluster' by default)",
"nameAlias":"adds N named workers in a named cluster"
}
]
}
```## Example of a YAML file (the same JSON, but converted using [json formatter](https://jsonformatter.org/)).
```yaml
name: K3D Kubernetes
commands:
- command: k3d
parameters:
- cluster
- list
description: Lists all k3d clusters
nameAlias: list clusters
- command: k3d
parameters:
- cluster
- start
- type: string
required: true
parameter: ''
question: Enter the cluster's name
defaultValue: myCluster
description: Starts a named cluster (user input or 'my-cluster' by default)
nameAlias: starts a named cluster
- command: k3d
parameters:
- node
- create
- type: string
required: true
parameter: ''
question: Enter the worker node's name
defaultValue: myWorker
- '--replicas'
- type: string
required: true
parameter: ''
question: Enter the number of replicas of worker nodes
defaultValue: '2'
- '--cluster'
- type: string
required: true
parameter: ''
question: Enter the cluster's name
defaultValue: myCluster
description: >-
Adds a number of worker nodes (user input or 2 by default) with a given
name (user input or 'myWorker' by default) in a named cluster (user input
or 'myCluster' by default)
nameAlias: adds N named workers in a named cluster
```## Contributing
Send pull requests, idk
## License
[MIT](LICENSE)