https://github.com/theflash2k/fsh
A small shell that I created as a side project.
https://github.com/theflash2k/fsh
bash fsh shell zsh
Last synced: 3 months ago
JSON representation
A small shell that I created as a side project.
- Host: GitHub
- URL: https://github.com/theflash2k/fsh
- Owner: TheFlash2k
- License: apache-2.0
- Created: 2025-03-20T00:50:38.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-20T01:09:04.000Z (over 1 year ago)
- Last Synced: 2025-03-20T02:24:35.654Z (over 1 year ago)
- Topics: bash, fsh, shell, zsh
- Language: C++
- Homepage:
- Size: 15.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# FSH
Flash-Shell - A small utility I created as a side project.
## Compile and Run
To compile and run, just type:
```bash
make
```
This will automatically create a new `bin/` folder that will have the `fsh` and it will also compile all the existing plugins
and put them inside the `bin/plugins` folder.
To run it, just simply run:
```bash
cd bin && ./fsh
```
and you'll drop inside fsh.
## Customizations
Currently, the only customizations I have added are modifications to prompt using the `config.hxx` file and creating your own custom
plugins.
### Prompt and other modifications
Looking at [./src/config.hxx](./src/config.hxx), you can see that all the variables are modifiable. Currently, I have not added the integration with `.fshrc` file but in the near future, I will surely do that and then we'll have much more control over everything using files rather than recompiling the project every single time.
### Create Custom Plugins
Each plugin is basically a program that can be integrated directly with fsh.
To create custom plugins, you can get the `[_template].cxx` from the `src/plugins/` directory. Then, all you really need to do is just modify the variables accordingly and inside the `_impl` method, you need to write the actual implementation of the command you're trying to implement.
Make sure to also modify the `plugin_create` export methods because those will be invoked to fetch the class itself when dynamically loading.
To build, just run the `make plugins` command and you'll have your plugin built.
If you want to just build this plugin, you can use the following g++ command:
```bash
g++ -o lib.so -fPIC -shared .cxx
```
Then just move the `.so` file to the plugins folder and it will be implemented automatically.
During runtime, you can also use the `load-plugin` command to dynamically load a plugin.
## Bugs and other things
This is just a side project and there may be some bugs here and there. If you find any, just open an issue and I'll try and fix them. But, I'm fairly certain I won't be looking after this project that much but whenever I'm bored and want to do something different.
---