src/js/libs/spiritual-gui.js
function() {
		var Plugin, plugins = this.constructor.$plugins;
		this.life = new gui.LifePlugin(this);
		this.config = new gui.ConfigPlugin(this);
		Object.keys(plugins).filter(function(prefix) {
			return prefix !== "life" && prefix !== "config";
		}).sort().forEach(function(prefix) {
			Plugin = plugins[prefix];
			if ((this.life.plugins[prefix] = !Plugin.lazy)) {
				gui.Plugin.$assign(this, prefix, new Plugin(this));
			} else {
				gui.Plugin.$prepare(this, prefix, Plugin);
			}
		}, this);
	}
function() {
		var Plugin, plugins = this.constructor.$plugins;
		this.life = new gui.LifePlugin(this);
		this.config = new gui.ConfigPlugin(this);
		Object.keys(plugins).filter(function(prefix) {
			return prefix !== "life" && prefix !== "config";
		}).sort().forEach(function(prefix) {
			Plugin = plugins[prefix];
			if ((this.life.plugins[prefix] = !Plugin.lazy)) {
				gui.Plugin.$assign(this, prefix, new Plugin(this));
			} else {
				gui.Plugin.$prepare(this, prefix, Plugin);
			}
		}, this);
	}
function ( ) { var Plugin , plugins = this . constructor . $plugins ; this . life = new gui . LifePlugin ( this ) ; this . config = new gui . ConfigPlugin ( this ) ; Object . keys ( plugins ) . filter ( function ( prefix ) { return prefix !== "life" && prefix !== "config" ; } ) . sort ( ) . forEach ( function ( prefix ) { Plugin = plugins [ prefix ] ; if ( ( this . life . plugins [ prefix ] = ! Plugin . lazy ) ) { gui . Plugin . $assign ( this , prefix , new Plugin ( this ) ) ; } else { gui . Plugin . $prepare ( this , prefix , Plugin ) ; } } , this ) ; }
Plug in the plugins. Lazy plugins will be newed up when needed.

- {gui.LifePlugin} first
- {gui.ConfigPlugin} second
- bonus plugins galore

@TODO: To preserve order, refactor plugins stack from object to array
Plug in the plugins . Lazy plugins will be newed up when needed .