feat: 💄 Improve styling
Tim Izzo tim@5ika.ch
Thu, 31 Jul 2025 20:32:58 +0200
3 files changed,
71 insertions(+),
13 deletions(-)
M
mod.go
→
main.go
@@ -3,7 +3,6 @@
import ( "fmt" "os" - "time" "github.com/godbus/dbus/v5" )@@ -37,16 +36,9 @@ c := make(chan *dbus.Message, 10)
conn.Eavesdrop(c) for v := range c { if len(v.Body) >= 5 { - currentTime := time.Now() - appName := fmt.Sprintf("%v", v.Body[0]) - summary := fmt.Sprintf("%v", v.Body[3]) - body := fmt.Sprintf("%v", v.Body[4]) - fmt.Printf("%s\n%s %s\n%s\n\n", - datetimeStyle.Render(currentTime.Format(DATETIME_FORMAT)), - appNameStyle.Render(appName), - summaryStyle.Render(summary), - bodyStyle.Render(body), - ) + notification := NewNotification(v) + fmt.Println(notification) + } } }
A
notification.go
@@ -0,0 +1,34 @@
+package main + +import ( + "fmt" + "time" + + dbus "github.com/godbus/dbus/v5" +) + +type Notification struct { + Time time.Time + AppName string + Summary string + Body string +} + +// https://specifications.freedesktop.org/notification-spec/latest/protocol.html +func NewNotification(message *dbus.Message) Notification { + return Notification{ + Time: time.Now(), + AppName: fmt.Sprintf("%v", message.Body[0]), + Summary: fmt.Sprintf("%v", message.Body[3]), + Body: fmt.Sprintf("%v", message.Body[4]), + } +} + +func (n Notification) String() string { + return fmt.Sprintf("%s\n%s %s\n%s\n\n", + datetimeStyle.Render(n.Time.Format(DATETIME_FORMAT)), + getAppNameStyle(n.AppName).Render(n.AppName), + summaryStyle.Render(n.Summary), + bodyStyle.Render(n.Body), + ) +}
M
style.go
→
style.go
@@ -1,6 +1,8 @@
package main import ( + "hash/fnv" + "github.com/charmbracelet/lipgloss" catppuccin "github.com/catppuccin/go"@@ -8,7 +10,37 @@ )
var Catppuccin catppuccin.Flavor = catppuccin.Mocha +var catppuccinColors []string = []string{ + Catppuccin.Red().Hex, + Catppuccin.Green().Hex, + Catppuccin.Yellow().Hex, + Catppuccin.Blue().Hex, + Catppuccin.Mauve().Hex, + Catppuccin.Pink().Hex, + Catppuccin.Flamingo().Hex, + Catppuccin.Teal().Hex, + Catppuccin.Sky().Hex, + Catppuccin.Sapphire().Hex, + Catppuccin.Maroon().Hex, + Catppuccin.Peach().Hex, + Catppuccin.Rosewater().Hex, + Catppuccin.Lavender().Hex, +} + var datetimeStyle = lipgloss.NewStyle().Foreground(lipgloss.Color(Catppuccin.Subtext0().Hex)) -var appNameStyle = lipgloss.NewStyle().Background(lipgloss.Color(Catppuccin.Blue().Hex)).Foreground(lipgloss.Color(Catppuccin.Base().Hex)).Padding(0, 1) -var summaryStyle = lipgloss.NewStyle().Foreground(lipgloss.Color(Catppuccin.Lavender().Hex)) +var summaryStyle = lipgloss.NewStyle().Bold(true).Foreground(lipgloss.Color(Catppuccin.Lavender().Hex)) var bodyStyle = lipgloss.NewStyle().Foreground(lipgloss.Color(Catppuccin.Text().Hex)) + +func getAppNameStyle(appName string) lipgloss.Style { + color := deterministicRandomString(appName, catppuccinColors) + return lipgloss.NewStyle().Background(lipgloss.Color(color)).Foreground(lipgloss.Color(Catppuccin.Base().Hex)).Padding(0, 1) +} + +func deterministicRandomString(key string, array []string) string { + hasher := fnv.New32a() + hasher.Write([]byte(key)) + hashValue := hasher.Sum32() + + index := int(hashValue) % len(array) + return array[index] +}