Skip to content

Commit 28d3474

Browse files
feat: create services for supported targets only
1 parent d51a779 commit 28d3474

File tree

1 file changed

+33
-8
lines changed

1 file changed

+33
-8
lines changed

main_linux.go

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package main
44
import (
55
"bytes"
66
_ "embed"
7+
"encoding/json"
78
"errors"
89
"flag"
910
"fmt"
@@ -13,6 +14,7 @@ import (
1314
"path/filepath"
1415
rtdebug "runtime/debug"
1516
"strconv"
17+
"strings"
1618
"text/template"
1719

1820
"golang.org/x/sys/unix"
@@ -23,17 +25,21 @@ type Service struct {
2325
Threshold int
2426
}
2527

28+
type Target struct {
29+
Unit string `json:"unit"`
30+
}
31+
2632
const threshold = "charge_control_end_threshold"
2733

2834
var (
2935
tag string
3036

31-
events = [...]string{
32-
"hibernate",
33-
"hybrid-sleep",
34-
"multi-user",
35-
"suspend",
36-
"suspend-then-hibernate",
37+
events = map[string]struct{}{
38+
"hibernate": {},
39+
"hybrid-sleep": {},
40+
"multi-user": {},
41+
"suspend": {},
42+
"suspend-then-hibernate": {},
3743
}
3844

3945
services = filepath.Join("/", "etc", "systemd", "system")
@@ -226,8 +232,27 @@ func main() {
226232
panic(err)
227233
}
228234

235+
// Creates services for events with defined targets (targets vary by
236+
// distribution).
237+
cmd := exec.Command("systemctl", "list-units", "--type", "target", "--all", "--plain", "--output", "json")
238+
output, err = cmd.CombinedOutput()
239+
if err != nil {
240+
panic(err)
241+
}
242+
targets := make([]Target, 0)
243+
if err = json.Unmarshal(output, &targets); err != nil {
244+
panic(err)
245+
}
246+
available := make([]string, 0)
247+
for _, target := range targets {
248+
event := strings.TrimSuffix(target.Unit, ".target")
249+
_, ok := events[event]
250+
if ok {
251+
available = append(available, event)
252+
}
253+
}
229254
tmpl := template.Must(template.New("unit").Parse(unit))
230-
for _, event := range events {
255+
for _, event := range available {
231256
service := "bat-" + event + ".service"
232257
f, err := os.Create(filepath.Join(services, service))
233258
if err != nil {
@@ -316,7 +341,7 @@ func main() {
316341
os.Exit(1)
317342
}
318343
case "reset":
319-
for _, event := range events {
344+
for event := range events {
320345
service := "bat-" + event + ".service"
321346
output, err := exec.Command("systemctl", "disable", service).CombinedOutput()
322347
if err != nil {

0 commit comments

Comments
 (0)