{"id":26581583,"url":"https://github.com/e-lemongrab/myshell","last_synced_at":"2026-04-12T00:32:05.235Z","repository":{"id":283544185,"uuid":"951515545","full_name":"e-lemongrab/myshell","owner":"e-lemongrab","description":"Framework for bash","archived":false,"fork":false,"pushed_at":"2025-03-20T19:02:02.000Z","size":4800,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-20T20:37:38.214Z","etag":null,"topics":["bash","bash-alias","bash-completion","bash-profile","bash-prompt","bitwarden","cloud","docker","shell","terminal"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/e-lemongrab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-19T19:58:00.000Z","updated_at":"2025-03-20T19:02:05.000Z","dependencies_parsed_at":"2025-03-20T20:37:43.651Z","dependency_job_id":"26d3d22f-2f83-4a52-9a35-3dbd17287ef1","html_url":"https://github.com/e-lemongrab/myshell","commit_stats":null,"previous_names":["e-lemongrab/myshell"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e-lemongrab%2Fmyshell","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e-lemongrab%2Fmyshell/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e-lemongrab%2Fmyshell/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/e-lemongrab%2Fmyshell/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/e-lemongrab","download_url":"https://codeload.github.com/e-lemongrab/myshell/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245067922,"owners_count":20555646,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","bash-alias","bash-completion","bash-profile","bash-prompt","bitwarden","cloud","docker","shell","terminal"],"created_at":"2025-03-23T07:21:40.691Z","updated_at":"2026-04-12T00:32:05.207Z","avatar_url":"https://github.com/e-lemongrab.png","language":"Shell","readme":"# myshell\n\n`myshell` is a Bash-first hybrid framework for building, bootstrapping, and operating a modular user environment.\n\nIt treats the shell runtime as the technical base, then layers optional profiles, user services, and operational modules on top of it. The result is a structured system that aims for two main properties:\n\n- **modularity**: each component has a clear layer, a concrete purpose, and explicit activation\n- **reproducibility**: the managed local environment and its modular composition can be reproduced consistently\n\n`myshell` is not intended to look like a classic dotfiles repository, a loose collection of personal scripts, a simple `.bashrc` bootstrap, or a package manager. It is meant to behave like a lightweight, Bash-based framework for managing a stable user environment and exposing reusable operational tooling.\n\n## Scope\n\n`myshell` is designed to:\n- bootstrap a Bash-based user environment\n- manage shell runtime behavior through a structured core\n- load optional profiles and user services explicitly\n- expose operational modules through a stable framework structure\n- integrate official external companion repositories such as `config_files`\n\n`myshell` is **not** designed to:\n- manage arbitrary local state outside its declared managed components\n- behave like a package manager\n- present itself as a generic framework without a concrete user-environment use case\n\n## Core model\n\n`myshell` is organized around the following layers:\n\n### Core\nThe core is the runtime base of the framework. It provides the shell entrypoints and the structure through which the rest of the system is loaded.\n\nThis includes:\n- `.bash_profile`\n- `.bashrc`\n- aliases\n- functions\n- jobs\n\n### Profiles\nProfiles are optional environment components loaded from `core/shells/bash/profiles/`.\n\nProfiles are part of the framework core model. They are used for shell environment setup, bootstrap behavior, and managed configuration deployment.\n\nProfiles are opt-in through explicit loader blocks in `.bashrc`.\n\n### Services\nServices are optional components loaded from `core/shells/bash/services/`.\n\nServices are also part of the framework core model, but are intended for persistent or service-like integrations that should not live as normal shell profiles.\n\nTypical examples are `systemd --user` units and their companion scripts.\n\nServices are opt-in through explicit loader blocks in `.bashrc`.\n\n### Modules\nModules are operational tooling components. They expose commands and workflows on top of the stable user-environment base provided by the framework.\n\nModules are part of the core identity of `myshell`, not an afterthought.\n\n### Optional components\nPowerShell support exists as an optional layer. It is supported, but it is not part of the primary identity of the framework.\n\n### Official external companion repositories\n`myshell` supports official companion repositories that are external in storage but functionally part of the framework ecosystem.\n\nThe primary companion repository is:\n- `config_files`\n\n`config_files` is not treated as a secondary integration. It is the official companion repository for managed external configuration consumed by `myshell`.\n\n## Managed vs unmanaged behavior\n\nA core principle of `myshell` is explicit control.\n\nWhen a component is active and managed by the framework, the framework is authoritative for that component.\n\nWhen a component is disabled, it stops being managed.\n\nThis means:\n- active managed components are expected to follow framework-defined behavior\n- disabled components are outside the authority of the framework\n- activation state is explicit and visible through the corresponding loader blocks\n\n## Stability model\n\n`myshell` aims to keep both of these stable:\n- the **structure** of the framework\n- the **experience of use**\n\nWhat may vary:\n- which profiles, services, and modules are enabled\n- which components are sourced from the official companion repository\n- future official external integrations in the `myshell` ecosystem\n\n## Activation model\n\nThe framework is designed around explicit, visible activation.\n\nThe expected user experience is:\n- load a predefined environment\n- enable or disable explicit pieces of that environment\n- use operational modules on top of a stable base\n\nThis is an opt-in modular system, not a hidden auto-magic bootstrap.\n\n## Why Bash-first matters\n\n`myshell` is Bash-first by design.\n\nBash is not just the implementation language; it is part of the framework identity. The framework is intended to stay technically direct, operational, and readable while still being powerful.\n\nThe target is **power within visible simplicity**:\n- the internal system can grow\n- but the user model and framework structure should remain understandable and explicit\n\n## Repository structure\n\nCurrent top-level structure relevant to the framework model:\n\n- `core/`\n  - framework runtime and shell entrypoints\n- `core/shells/bash/profiles/`\n  - optional managed environment components\n- `core/shells/bash/services/`\n  - optional managed service integrations\n- `core/shells/bash/.bash_profile`\n  - framework entrypoint\n- `core/shells/bash/.bashrc`\n  - explicit activation surface for profiles and services\n- `modules/`\n  - operational toolkit components\n- `core/shells/pwsh/`\n  - optional PowerShell support\n\n## Installation\n\n### Bash\n\n1. Back up your current `$HOME/.bash_profile` if needed.\n2. Clone the repository.\n3. Copy the framework entrypoint to your home.\n4. Set `project_path`.\n5. Reload the shell session.\n\n```bash\ngit clone git@github.com:e-lemongrab/myshell.git\ncp -rfv myshell/core/shells/bash/.bash_profile \"$HOME\"\nsed -i 's|$HOME/Documents/myshell|'\"$(pwd)\"'/myshell|g' \"$HOME/.bash_profile\"\nexec -l \"$SHELL\"\n```\n\nAfter that:\n- run `checks` to list compatibility information\n- run `myshell` to view available commands\n\n### PowerShell\n\nOnce the Bash configuration is active, and if `pwsh` is installed, `myshell` can also set the PowerShell profile at:\n\n- `~/.config/powershell/Microsoft.PowerShell_profile.ps1`\n\nIf you want to use the PowerShell profile from Windows:\n\n1. Install a WSL2 distribution.\n2. Edit `$PROFILE` with the content from `core/shells/pwsh/Microsoft.PowerShell_profile.ps1`.\n3. Set the required values in the `VARIABLE DECLARATION` section.\n\n## Profiles and services\n\n`myshell` loads optional Bash components from `core/shells/bash/profiles/` and `core/shells/bash/services/` through explicit blocks in `core/shells/bash/.bashrc`.\n\n### Profiles currently loaded by default blocks in `.bashrc`\n\nExamples include:\n- `.git-configs`\n- `.appearance`\n- `.completion`\n- `.history`\n- `.path`\n- `.pwsh`\n- `.software`\n- `.config_files`\n- `.ssh`\n\n### Services currently supported\n\nExamples include:\n- `.hyprland-wallpaper`\n- `.nvidia-fan`\n\nThese are framework-managed service integrations and are activated through `.bashrc` loader blocks.\n\n### Current service behavior\n\n`.hyprland-wallpaper`\n- downloads `hypr-wallpaper.service` from `config_files`\n- downloads `wallpaper-rotation.sh` from `config_files`\n- installs them into local user paths\n- runs `systemctl --user daemon-reload`\n- runs `systemctl --user enable --now hypr-wallpaper.service` when needed\n\n`.nvidia-fan`\n- downloads `nvidia-fan.service` from `config_files`\n- downloads `nvidiafan.sh` from `config_files`\n- installs them into local user paths\n- runs `systemctl --user daemon-reload`\n- runs `systemctl --user enable --now nvidia-fan.service` when needed\n\n### Service prerequisites\n\n`.hyprland-wallpaper`\n- `hyprpaper`\n- `hyprctl`\n- a valid `~/.config/hypr/hyprpaper.conf`\n- a local wallpaper directory configured in the script through `WALLPAPER_DIR`\n- `mpvpaper` if video wallpapers are used\n- monitor names and interval may need local adjustment\n\n`.nvidia-fan`\n- `nvidia-smi`\n- `nvidia-settings`\n- `sudo`\n- `xhost`\n- a deployed script at `~/.config/nvidia/nvidiafan.sh`\n- `sudo` for `nvidia-settings` must work non-interactively in the session where the service runs\n- the graphical session must be ready; the service definition uses a short startup delay to avoid login-time race conditions\n\n## Companion repository: `config_files`\n\n`config_files` is the official companion repository of `myshell`.\n\nWithin the framework model:\n- `myshell` is the framework and orchestration layer\n- `config_files` is the managed external source of truth for supported configuration artifacts\n\nThis relationship is part of the intended architecture of the framework.\n\n## Extension model\n\n`myshell` is modular, but that modularity is structured.\n\nIn practice, new functionality should fit one of the framework layers:\n- core runtime behavior\n- profile\n- service\n- module\n- official external companion integration\n\nIf a new component does not clearly fit one of those layers, it should not be added until its role is defined.\n\n## Summary\n\n`myshell` should be understood as:\n- a Bash-first hybrid framework\n- a structured user-environment manager\n- a modular shell and services system\n- a reproducible local environment framework\n- a lightweight operational platform built on top of Bash\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fe-lemongrab%2Fmyshell","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fe-lemongrab%2Fmyshell","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fe-lemongrab%2Fmyshell/lists"}