-
-
Notifications
You must be signed in to change notification settings - Fork 4.5k
Description
Since I open sourced MagicMirror², I have received many awesome pull requests adding a lot of nice features to the Magic Mirror core. I am very grateful for that! Unfortunately, this comes with a downside: the application gets a lot more complicated.
The reason I open sourced MagicMirror² was because it is a perfect starter project for newcomers. Getting their feet wet in javascript and software development in general (see manifesto). With the current complexity, this project is slowly moving away from this.
I also noted that the amount of bash code is increasing, while the main intention of version 2 was to try to do everything in 1 program language: javascript. (Opposed to v1, which was a combination of languages like PHP, Javascript en in some cases Python).
Looking at other OS projects, there are some beautiful examples on how the project can be focused at what it does best. One example I like to mention is OctoPrint/OctoPi. Software to control your 3D printer. While @foosel does a great job to maintain the core application (OctoPrint), the packaged Rasberry Pi image (OctoPi) is maintained in a different repo by a different user (@guysoft).
If we use that same approach there are a lot of things we can take out the core repo, and let other users start their own repo's to accomplish the same features while separating concerns.
In my opinion, the following parts could initially be taken out of the core repo, and taken over by other repo's:
- Installer script
- Update script
- Start Script
- PM2 integration
- Docker Package
Of course, we won't take out these features as long as no other solutions are in place. As an install and update replacement, we need to write a good manual.
The added benefit of this approach is that the release schedule of the above features is no longer tied to the quarterly release schedule of MagicMirror².
With the new approach I think it's good to set a few guidelines to which the future versions should adhere:
- Javascript, HTML, CSS only.
- No compile scripts (ie. webpack, sass, less)
- Focus (only) on Raspberry support.
- Install/Run/Update using default commands:
npm install,git pull, etc. Which will help people to learn and understand these commands.
Since this project would have never been such a success without the help of the community, I want to discuss this approach before taking any action. So I'm looking forward to your input.
Please let me know what you think with an open mind.
Thanks! Michael.
EDIT: Provisional TO DO List
Based on the discussion below, I made a provisional to do list which could be the base for the simplification of this repository. The to do list is not set in stone, and could change based on the feedback in this issue.
- Remove installer scripts (make sure an external repository is available as a replacement).
- Remove update scripts.
- Remove start script.
- Separate Client & Serveronly commands as regular npm commands:
npm run start&npm run server. - Cleanup folders (remove
/installers&/splashscreenand remove all root .sh files). Where necessary, replace shell code with javascript code. - Implement handler for incompatible modules.
- Create separate documentation site and repo.
- Improve documentation on how to install and update. This should reflect the procedure without an installer/updater, but it should also mention the available third party installers/updaters.
- Make an overview of the hard- and software requirements.
- Make an overview of the supported (tested) hardware and operating systems.
Feel free to share your ideas and feedback!