You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/env node
  2. var syscheck = require("./js/syscheck");
  3. var parseConf = require("./js/parse-conf");
  4. var async = require("./js/async");
  5. var udev = require("./udev");
  6. var modules = {
  7. // display: require("./modules/display"),
  8. input: require("./modules/input"),
  9. wallpaper: require("./modules/wallpaper"),
  10. process: require("./modules/process"),
  11. };
  12. if (!process.argv[2]) {
  13. console.error("Usage:", process.argv[1], "<config>");
  14. process.exit(1);
  15. }
  16. var config = parseConf(process.argv[2]);
  17. function createLogger(name) {
  18. function log(pre, msg) {
  19. console.error(pre+msg.join(" "));
  20. }
  21. return {
  22. info: (...msg) => log(name+": INFO: ", msg),
  23. warn: (...msg) => log(name+": WARNING: ", msg),
  24. error: (...msg) => log(name+": ERROR: ", msg),
  25. }
  26. }
  27. function startAll() {
  28. Object.keys(modules).forEach(i => {
  29. var mod = modules[i];
  30. var conf = config[i] || {};
  31. if (conf instanceof Array && conf.length === 0)
  32. return;
  33. mod.start(conf, createLogger(i), modules);
  34. });
  35. }
  36. function stopAll(cb) {
  37. var keys = Object.keys(modules);
  38. var next = async(keys.length, cb);
  39. keys.forEach(i => modules[i].stop(next));
  40. }
  41. function onTerm() {
  42. udev.exit();
  43. stopAll(() => process.exit(1));
  44. }
  45. syscheck(ok => {
  46. if (ok)
  47. startAll();
  48. else
  49. console.error("Missing binaries, exiting.");
  50. });
  51. process.on("SIGTERM", onTerm);
  52. process.on("SIGINT", onTerm);