- Time
- Battery %
- Volume %
This commit is contained in:
Felipe M 2021-01-10 15:23:04 +01:00
commit e0f17d6fdd
1 changed files with 108 additions and 0 deletions

108
main.go Normal file
View File

@ -0,0 +1,108 @@
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"os/exec"
"strconv"
"strings"
"time"
)
const HEADER = "{\"version\": 1}"
const TEST_BLOCK = "[{\"full_text\": \"test\"}]"
const SEPARATOR_WIDTH = 22
type Bar struct {
Blocks []BarBlock `json:"blocks"`
}
type BarBlock struct {
FullText string `json:"full_text"`
//ShortText string `json:"short_text"`
//Color string `json:"color"`
//Background string `json:"background"`
//Border string `json:"border"`
//BorderTop int `json:"border_top"`
//BorderBottom int `json:"border_bottom"`
//BorderLeft int `json:"border_left"`
//BorderRight int `json:"border_right"`
//MinWidth string `json:"min_width"`
//Align string `json:"align"`
//Name string `json:"name"`
//Instance string `json:"instance"`
Urgent bool `json:"urgent"`
Separator bool `json:"separator"`
SeparatorBlockWidth int `json:"separator_block_width"`
//Markup string `json:"markup"`
}
func NewBlock() BarBlock {
return BarBlock{SeparatorBlockWidth: SEPARATOR_WIDTH}
}
func getDateTimeBlock() BarBlock {
format := "02 15:04"
block := NewBlock()
block.FullText = time.Now().Local().Format(format)
return block
}
func getBatteryBlock(battery string) BarBlock {
// TODO Check that `/sys/class/power_supply/{battery} exists
block := NewBlock()
block.Separator = true
percentageContent, _ := ioutil.ReadFile("/sys/class/power_supply/" + battery + "/capacity")
percentageInt, _ := strconv.Atoi(strings.TrimSpace(string(percentageContent)))
block.FullText = strconv.Itoa(percentageInt) + "%"
statusContent, _ := ioutil.ReadFile("/sys/class/power_supply/" + battery + "/status")
batteryStatus := strings.TrimSpace(string(statusContent))
if batteryStatus == "Charging" {
block.FullText = block.FullText + "+"
} else if batteryStatus == "Discharging" {
block.FullText = block.FullText + "-"
}
if percentageInt <= 10 {
block.Urgent = true
}
return block
}
func getVolumeLevelBlock() BarBlock {
block := NewBlock()
block.Separator = true
cmd := exec.Command("bash", "-c", "amixer get Master | grep 'Left:' | awk -F\"[][]\" '{ print $2 }'")
cmd.Env = os.Environ()
out, err := cmd.Output()
if err != nil {
fmt.Println(err)
}
block.FullText = strings.TrimSpace(string(out))
return block
}
func main() {
fmt.Println(HEADER)
fmt.Print("[")
for {
bar := Bar{}
var volumeBlock = getVolumeLevelBlock()
bar.Blocks = append(bar.Blocks, volumeBlock)
var batteryBlock = getBatteryBlock("BAT0")
bar.Blocks = append(bar.Blocks, batteryBlock)
var timeBlock = getDateTimeBlock()
bar.Blocks = append(bar.Blocks, timeBlock)
blockJSON, _ := json.Marshal(bar.Blocks)
fmt.Print(string(blockJSON), ",")
time.Sleep((1250 * 10) * time.Millisecond)
}
}