Add systemd resource budgets with TOML profiles
This commit is contained in:
commit
be8749a384
1 changed files with 2591 additions and 0 deletions
59
internal/budget/files.go
Normal file
59
internal/budget/files.go
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
package budget
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
type paths struct {
|
||||
config string
|
||||
units string
|
||||
state string
|
||||
}
|
||||
|
||||
func homePaths(home string) paths {
|
||||
return paths{
|
||||
config: filepath.Join(home, ".config/budget/profiles.toml"),
|
||||
units: filepath.Join(home, ".config/systemd/user"),
|
||||
state: filepath.Join(home, ".local/state/budget"),
|
||||
}
|
||||
}
|
||||
|
||||
func writeFiles(p paths, files map[string]string) error {
|
||||
if err := os.MkdirAll(p.state, 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
manifest := filepath.Join(p.state, "files.json")
|
||||
previous := []string{}
|
||||
data, err := os.ReadFile(manifest)
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
return err
|
||||
}
|
||||
if err == nil {
|
||||
if err := json.Unmarshal(data, &previous); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
for _, relative := range previous {
|
||||
if _, keep := files[relative]; !keep {
|
||||
if err := os.Remove(filepath.Join(p.units, relative)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, relative := range keys(files) {
|
||||
target := filepath.Join(p.units, relative)
|
||||
if err := os.MkdirAll(filepath.Dir(target), 0755); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := os.WriteFile(target, []byte(files[relative]), 0644); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
data, err = json.MarshalIndent(keys(files), "", " ")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return os.WriteFile(manifest, append(data, '\n'), 0644)
|
||||
}
|
||||
Loading…
Reference in a new issue