-
Notifications
You must be signed in to change notification settings - Fork 12
/
daemons-openrc.el
71 lines (61 loc) · 2.18 KB
/
daemons-openrc.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
;;; daemons-openrc.el --- UI for managing init system daemons (services) -*- lexical-binding: t -*-
;; Copyright (c) 2019 Mitescu George Dan
;;
;; Author: Mitescu George dan
;; URL: https://github.com/cbowdon/daemons.el
;;
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3
;;
;; Created: September 20, 2019
;; Modified: September 20, 2019
;; Version: 2.0.0
;; Keywords: unix convenience
;; Package-Requires: ((emacs "25.1"))
;;
;;; Commentary:
;; This file provides OpenRC support for daemons.el.
;;; Code:
(require 'seq)
(require 'daemons)
(require 's)
(daemons-define-submodule daemons-openrc
"Daemons submodule for OpenRC."
:test (and (eq system-type 'gnu/linux)
(equal 0 (daemons--shell-command "which rc-service")))
:commands
'((status . (lambda (name) (format "rc-service %s status" name)))
(start . (lambda (name) (format "rc-service %s start" name)))
(stop . (lambda (name) (format "rc-service %s stop" name)))
(restart . (lambda (name) (format "rc-service %s restart" name))))
:list (daemons-openrc--list)
:headers (daemons-openrc--list-headers))
(defun daemons-openrc--parse-list-item (raw-rc-output)
"Parse a single line from rc-update into a tabulated list item."
(let* ((runlevels '("boot" "default" "nonetwork" "shutdown" "sysinit"))
(parts (split-string raw-rc-output "|" t))
(name (s-trim (car parts)))
(unparsed-levels (cadr parts))
(run-level-statuses
(seq-map (lambda (level)
(if (s-contains? level unparsed-levels)
level ""))
runlevels)))
(list name (apply 'vector (cons name run-level-statuses)))))
(defun daemons-openrc--list ()
"Return a list of daemons on a OpenRC system."
(thread-last "rc-update -v show"
(daemons--shell-command-to-string)
(daemons--split-lines)
(seq-map 'daemons-openrc--parse-list-item)))
(defun daemons-openrc--list-headers ()
"Return the list of headers for a OpenRC ‘daemons-mode’ buffer."
(apply 'vector
(cons '("Daemon (service)" 30 t)
(seq-map
(lambda (x)
(list (number-to-string x) 10 t))
(number-sequence 0 4)))))
(provide 'daemons-openrc)
;;; daemons-openrc.el ends here