Files
homelab/graphify-out/cache/ast/de122a158559c370b660f2dffa601fd3f55e275629bd76b7e542221b1260bd38.json
Hermes Agent service account d974c75d7c feat(jmri): headless JMRI server with Leviton layout power monitor and X11 GUI mode
- Stable udev device symlinks (/dev/jmri/nce, /dev/jmri/loconet, /dev/jmri/lcc)
- jmri-monitor: polls Leviton Decora Smart switch to start/stop JMRI automatically
  - Quiet hours 1-10 AM (no polling)
  - 30s off-delay before shutdown
- LCRR config cloned from Gitea (ssh://gitea.mk-labs.cloud:2221/rblundon/LCRR.git)
- ~/.jmri symlinked to LCRR repo for GitOps config management
- jmri-gui: X11 remote GUI access (PanelPro/DecoderPro) via ssh -X as jmri user
  - Stops daemon, launches GUI, restarts daemon on exit if layout still on
- jmri user gets login shell + SSH key for GUI sessions
- Full JRE installed (openjdk-21-jre) for AWT/X11 support
2026-07-29 00:43:23 -05:00

1 line
7.3 KiB
JSON

{"nodes": [{"id": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "label": "project-config.json", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L1"}, {"id": "semaphore_project_config_environments", "label": "environments", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L2"}, {"id": "semaphore_project_config_integration_aliases", "label": "integration_aliases", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L9"}, {"id": "semaphore_project_config_integrations", "label": "integrations", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L10"}, {"id": "semaphore_project_config_inventories", "label": "inventories", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L11"}, {"id": "semaphore_project_config_keys", "label": "keys", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L20"}, {"id": "semaphore_project_config_meta", "label": "meta", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L37"}, {"id": "semaphore_project_config_meta_alert", "label": "alert", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L38"}, {"id": "semaphore_project_config_meta_max_parallel_tasks", "label": "max_parallel_tasks", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L39"}, {"id": "semaphore_project_config_meta_name", "label": "name", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L40"}, {"id": "semaphore_project_config_meta_type", "label": "type", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L41"}, {"id": "semaphore_project_config_repositories", "label": "repositories", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L43"}, {"id": "semaphore_project_config_roles", "label": "roles", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L51"}, {"id": "semaphore_project_config_schedules", "label": "schedules", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L52"}, {"id": "semaphore_project_config_secret_storages", "label": "secret_storages", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L53"}, {"id": "semaphore_project_config_templates", "label": "templates", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L54"}, {"id": "semaphore_project_config_views", "label": "views", "file_type": "code", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L98"}], "edges": [{"source": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "target": "semaphore_project_config_environments", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L2", "weight": 1.0}, {"source": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "target": "semaphore_project_config_integration_aliases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L9", "weight": 1.0}, {"source": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "target": "semaphore_project_config_integrations", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L10", "weight": 1.0}, {"source": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "target": "semaphore_project_config_inventories", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L11", "weight": 1.0}, {"source": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "target": "semaphore_project_config_keys", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L20", "weight": 1.0}, {"source": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "target": "semaphore_project_config_meta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L37", "weight": 1.0}, {"source": "semaphore_project_config_meta", "target": "semaphore_project_config_meta_alert", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L38", "weight": 1.0}, {"source": "semaphore_project_config_meta", "target": "semaphore_project_config_meta_max_parallel_tasks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L39", "weight": 1.0}, {"source": "semaphore_project_config_meta", "target": "semaphore_project_config_meta_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L40", "weight": 1.0}, {"source": "semaphore_project_config_meta", "target": "semaphore_project_config_meta_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L41", "weight": 1.0}, {"source": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "target": "semaphore_project_config_repositories", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L43", "weight": 1.0}, {"source": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "target": "semaphore_project_config_roles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L51", "weight": 1.0}, {"source": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "target": "semaphore_project_config_schedules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L52", "weight": 1.0}, {"source": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "target": "semaphore_project_config_secret_storages", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L53", "weight": 1.0}, {"source": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "target": "semaphore_project_config_templates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L54", "weight": 1.0}, {"source": "home_hermes_git_homelab_boilerplates_semaphore_project_config_json", "target": "semaphore_project_config_views", "relation": "contains", "confidence": "EXTRACTED", "source_file": "boilerplates/semaphore/project-config.json", "source_location": "L98", "weight": 1.0}]}