Skip to content

Commit 68e511e

Browse files
committed
Working bar
1 parent cfd8a06 commit 68e511e

File tree

9 files changed

+505
-218
lines changed

9 files changed

+505
-218
lines changed

bar.go

Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"time"
6+
7+
"github.com/MiracleOS-Team/desktoplib/batteryHandler"
8+
"github.com/MiracleOS-Team/desktoplib/foreignToplevel"
9+
"github.com/MiracleOS-Team/desktoplib/networkManagerHandler"
10+
"github.com/MiracleOS-Team/desktoplib/volumeHandler"
11+
"github.com/dlasky/gotk3-layershell/layershell"
12+
"github.com/gotk3/gotk3/gdk"
13+
"github.com/gotk3/gotk3/glib"
14+
"github.com/gotk3/gotk3/gtk"
15+
)
16+
17+
func getDateInfo() (string, string) {
18+
hours, minutes, _ := time.Now().Clock()
19+
curTimeInString := fmt.Sprintf("%d:%02d", hours, minutes)
20+
21+
curDay := time.Now().Day()
22+
curDayName := firstN(time.Now().Weekday().String(), 3)
23+
var curDayCal string
24+
25+
if curDay <= 5 {
26+
curMonth := time.Now().Month()
27+
curDayCal = fmt.Sprintf("%s. %02d %s", curDayName, curDay, curMonth)
28+
} else {
29+
curDayCal = fmt.Sprintf("%s. %02d", curDayName, curDay)
30+
}
31+
return curDayCal, curTimeInString
32+
}
33+
34+
func createSidestuff() *gtk.Box {
35+
sideBox, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0)
36+
sideBox.SetHAlign(gtk.ALIGN_END)
37+
sc, _ := sideBox.GetStyleContext()
38+
sc.AddClass("sidestuff")
39+
40+
otherIcons, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0)
41+
keyboardImage, _ := gtk.ImageNewFromIconName("input-keyboard-symbolic", gtk.ICON_SIZE_BUTTON)
42+
sc, _ = keyboardImage.GetStyleContext()
43+
sc.AddClass("keyboard")
44+
45+
otherIcons.PackStart(keyboardImage, false, false, 0)
46+
sc, _ = otherIcons.GetStyleContext()
47+
sc.AddClass("other-icons-wrapper")
48+
49+
statusBox, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0)
50+
51+
volumeIcon, err := volumeHandler.GetAudioIcon()
52+
53+
if err == nil {
54+
volumeImage, _ := gtk.ImageNewFromIconName(volumeIcon, gtk.ICON_SIZE_BUTTON)
55+
sc, _ = volumeImage.GetStyleContext()
56+
sc.AddClass("sound")
57+
58+
statusBox.PackStart(volumeImage, false, false, 0)
59+
}
60+
61+
networkIcon, err := networkManagerHandler.GetNetworkIcon()
62+
63+
if err == nil {
64+
networkImage, _ := gtk.ImageNewFromIconName(networkIcon, gtk.ICON_SIZE_BUTTON)
65+
66+
sc, _ = networkImage.GetStyleContext()
67+
sc.AddClass("network")
68+
69+
statusBox.PackStart(networkImage, false, false, 0)
70+
}
71+
72+
if batteryHandler.IsBattery() {
73+
batteryImage, _ := gtk.ImageNewFromIconName(batteryHandler.GetBatteryIcon(), gtk.ICON_SIZE_BUTTON)
74+
75+
sc, _ = batteryImage.GetStyleContext()
76+
sc.AddClass("power")
77+
78+
statusBox.PackStart(batteryImage, false, false, 0)
79+
}
80+
81+
sc, _ = statusBox.GetStyleContext()
82+
sc.AddClass("status-icons-wrapper")
83+
84+
curDayCal, currUTCTimeInString := getDateInfo()
85+
86+
clock, _ := gtk.LabelNew(currUTCTimeInString)
87+
sc, _ = clock.GetStyleContext()
88+
sc.AddClass("clock-text")
89+
90+
dayText, _ := gtk.LabelNew(curDayCal)
91+
sc, _ = dayText.GetStyleContext()
92+
sc.AddClass("day-text")
93+
94+
glib.TimeoutAdd(uint(500), func() bool {
95+
// Get new date/time info.
96+
newDayCal, newTime := getDateInfo()
97+
98+
// Update the labels.
99+
clock.SetText(newTime)
100+
dayText.SetText(newDayCal)
101+
102+
// Return true to keep the timeout active.
103+
return true
104+
})
105+
106+
notificationButton, _ := gtk.ButtonNew()
107+
notificationBox, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 0)
108+
sc, _ = notificationBox.GetStyleContext()
109+
sc.AddClass("notification-bell-wrapper")
110+
111+
notificationImage, _ := gtk.ImageNewFromIconName("preferences-system-notifications-symbolic", gtk.ICON_SIZE_BUTTON)
112+
sc, _ = notificationImage.GetStyleContext()
113+
sc.AddClass("notification-bell")
114+
115+
notificationBox.PackStart(notificationImage, false, false, 0)
116+
notificationButton.Add(notificationBox)
117+
118+
sideBox.PackStart(otherIcons, false, false, 0)
119+
sideBox.PackStart(statusBox, false, false, 0)
120+
sideBox.PackStart(clock, false, false, 0)
121+
sideBox.PackStart(dayText, false, false, 0)
122+
sideBox.PackStart(notificationButton, false, false, 0)
123+
124+
return sideBox
125+
}
126+
127+
func createWorkspaces() *gtk.Box {
128+
box, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 10)
129+
box.SetHAlign(gtk.ALIGN_START)
130+
sc, _ := box.GetStyleContext()
131+
sc.AddClass("workspaces")
132+
133+
toplevels, err := foreignToplevel.ListToplevels()
134+
if err != nil {
135+
fmt.Println("Error getting toplevels:", err)
136+
return box
137+
}
138+
139+
for _, k := range toplevels {
140+
imgButton, _ := gtk.ButtonNew()
141+
sc, _ := imgButton.GetStyleContext()
142+
sc.AddClass("app")
143+
144+
img, _ := gtk.ImageNewFromIconName(k.AppID, gtk.ICON_SIZE_BUTTON)
145+
imgButton.Add(img)
146+
box.PackStart(imgButton, false, false, 0)
147+
}
148+
// Placeholder for dynamic window list
149+
imgButton1, _ := gtk.ButtonNew()
150+
sc, _ = imgButton1.GetStyleContext()
151+
sc.AddClass("app")
152+
img1, _ := gtk.ImageNewFromIconName("preferences-desktop", gtk.ICON_SIZE_BUTTON)
153+
imgButton1.Add(img1)
154+
box.PackStart(imgButton1, false, false, 0)
155+
156+
return box
157+
}
158+
159+
func createMainIcons() *gtk.Box {
160+
box, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 10)
161+
box.SetHAlign(gtk.ALIGN_CENTER)
162+
163+
desktopImage, _ := gtk.ImageNewFromIconName("preferences-system-windows-symbolic", gtk.ICON_SIZE_LARGE_TOOLBAR)
164+
searchImage, _ := gtk.ImageNewFromIconName("system-search-symbolic", gtk.ICON_SIZE_LARGE_TOOLBAR)
165+
customIcon, _ := gtk.ImageNewFromFile("images/pp.png")
166+
customButton, _ := gtk.ButtonNew()
167+
customButton.Add(customIcon)
168+
169+
customButton.Connect("clicked", func() {
170+
createMainMenu().ShowAll()
171+
box.Hide()
172+
})
173+
174+
box.PackStart(desktopImage, false, false, 0)
175+
box.PackStart(customButton, false, false, 0)
176+
box.PackStart(searchImage, false, false, 0)
177+
178+
return box
179+
}
180+
181+
func createBar() *gtk.Window {
182+
win, _ := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)
183+
win.SetTitle("Main Bar")
184+
win.SetDecorated(false)
185+
win.SetResizable(false)
186+
win.SetTypeHint(gdk.WINDOW_TYPE_HINT_DOCK)
187+
188+
layershell.InitForWindow(win)
189+
layershell.SetNamespace(win, "miracleos")
190+
layershell.SetAnchor(win, layershell.LAYER_SHELL_EDGE_LEFT, true)
191+
layershell.SetAnchor(win, layershell.LAYER_SHELL_EDGE_BOTTOM, true)
192+
layershell.SetAnchor(win, layershell.LAYER_SHELL_EDGE_RIGHT, true)
193+
194+
layershell.SetLayer(win, layershell.LAYER_SHELL_LAYER_TOP)
195+
layershell.SetMargin(win, layershell.LAYER_SHELL_EDGE_TOP, 0)
196+
layershell.SetMargin(win, layershell.LAYER_SHELL_EDGE_LEFT, 0)
197+
layershell.SetMargin(win, layershell.LAYER_SHELL_EDGE_RIGHT, 0)
198+
199+
layershell.SetExclusiveZone(win, 75)
200+
layershell.SetKeyboardMode(win, layershell.LAYER_SHELL_KEYBOARD_MODE_NONE)
201+
disp, _ := gdk.DisplayGetDefault()
202+
mon, _ := disp.GetMonitor(0)
203+
layershell.SetMonitor(win, mon)
204+
205+
box, _ := gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 10)
206+
sc, _ := box.GetStyleContext()
207+
sc.AddClass("bar")
208+
box.PackStart(createWorkspaces(), false, false, 0)
209+
box.SetCenterWidget(createMainIcons())
210+
box.PackEnd(createSidestuff(), false, false, 0)
211+
win.Add(box)
212+
return win
213+
}

desktop.css

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,4 +279,8 @@
279279

280280
.status-icons-wrapper image {
281281
margin: 5px;
282-
}
282+
}
283+
284+
.workspaces * {
285+
margin: 0px;
286+
}

go.mod

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,28 @@ module github.com/MiracleOS-Team/desktop
33
go 1.22.2
44

55
require (
6-
github.com/MiracleOS-Team/libxdg-go v0.0.0-20250130123149-66a2b3e59a66
6+
github.com/MiracleOS-Team/desktoplib v0.0.0-20250204155824-a42d5b7c24e3
7+
github.com/MiracleOS-Team/libxdg-go v0.0.0-20250203122932-0d6a9fc71582
8+
github.com/dlasky/gotk3-layershell v0.0.0-20240515133811-5c5115f0d774
79
github.com/gotk3/gotk3 v0.6.5-0.20240618185848-ff349ae13f56
810
)
911

1012
require (
1113
github.com/cli/safeexec v1.0.1 // indirect
12-
golang.org/x/text v0.21.0 // indirect
14+
github.com/distatus/battery v0.11.0 // indirect
15+
github.com/gdamore/encoding v1.0.0 // indirect
16+
github.com/gdamore/tcell v1.4.0 // indirect
17+
github.com/gek64/displayController v1.0.2 // indirect
18+
github.com/go-ole/go-ole v1.3.0 // indirect
19+
github.com/godbus/dbus/v5 v5.1.0 // indirect
20+
github.com/itchyny/volume-go v0.2.2 // indirect
21+
github.com/jfreymuth/pulse v0.1.1 // indirect
22+
github.com/lucasb-eyer/go-colorful v1.0.3 // indirect
23+
github.com/mattn/go-runewidth v0.0.7 // indirect
24+
github.com/moutend/go-wca v0.3.0 // indirect
25+
golang.org/x/sys v0.30.0 // indirect
26+
golang.org/x/text v0.22.0 // indirect
1327
google.golang.org/protobuf v1.36.4 // indirect
1428
gopkg.in/ini.v1 v1.67.0 // indirect
29+
howett.net/plist v1.0.1 // indirect
1530
)

go.sum

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
22
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
3+
github.com/MiracleOS-Team/desktoplib v0.0.0-20250203164533-9daac46041b5 h1:bnMP6ciWaT2zl+IJcWDfwhDFbp9iF4vZ9g50HRQkWC8=
4+
github.com/MiracleOS-Team/desktoplib v0.0.0-20250203164533-9daac46041b5/go.mod h1:LvzdmHbq2om/X8sPOcR3faqsZQRHTVMCm58NFp2aLIU=
5+
github.com/MiracleOS-Team/desktoplib v0.0.0-20250203213240-ff0177e4ccaa h1:yAqSw/ahPqVO7O5LxpzJpNuZlW5Q366BKUwZWIJ2nDE=
6+
github.com/MiracleOS-Team/desktoplib v0.0.0-20250203213240-ff0177e4ccaa/go.mod h1:LvzdmHbq2om/X8sPOcR3faqsZQRHTVMCm58NFp2aLIU=
7+
github.com/MiracleOS-Team/desktoplib v0.0.0-20250204155824-a42d5b7c24e3 h1:+UZtfbdcpSCXIap83dOHxWcMOqc42jCpYepfidv6xGY=
8+
github.com/MiracleOS-Team/desktoplib v0.0.0-20250204155824-a42d5b7c24e3/go.mod h1:lsr1apHlN/KIBNQdH2ngannvIIBKnYRvyo8oCgBoaVE=
39
github.com/MiracleOS-Team/libxdg-go v0.0.0-20250126160842-bc18282c37ee h1:jsl3imeBR+qACjnTzGHJt1zrvrkW5MkHyFFpsmYnzxk=
410
github.com/MiracleOS-Team/libxdg-go v0.0.0-20250126160842-bc18282c37ee/go.mod h1:mKskdRQzPihHpgc1aUN06dlR2ECTxQWgPzOY3u2To+I=
511
github.com/MiracleOS-Team/libxdg-go v0.0.0-20250130123149-66a2b3e59a66 h1:zax0cvv63QOakMKGH4p1UN9UfVW9bRHEe1Q2GGRPt00=
612
github.com/MiracleOS-Team/libxdg-go v0.0.0-20250130123149-66a2b3e59a66/go.mod h1:mKskdRQzPihHpgc1aUN06dlR2ECTxQWgPzOY3u2To+I=
13+
github.com/MiracleOS-Team/libxdg-go v0.0.0-20250203122932-0d6a9fc71582 h1:Ce5u6O6M1586/JQxVvGr/GCClbxUJbtRPckg4ZfFawY=
14+
github.com/MiracleOS-Team/libxdg-go v0.0.0-20250203122932-0d6a9fc71582/go.mod h1:mKskdRQzPihHpgc1aUN06dlR2ECTxQWgPzOY3u2To+I=
715
github.com/bep/godartsass v1.2.0 h1:E2VvQrxAHAFwbjyOIExAMmogTItSKodoKuijNrGm5yU=
816
github.com/bep/godartsass v1.2.0/go.mod h1:6LvK9RftsXMxGfsA0LDV12AGc4Jylnu6NgHL+Q5/pE8=
917
github.com/bep/godartsass/v2 v2.3.2 h1:meuc76J1C1soSCAnlnJRdGqJ5S4m6/GW+8hmOe9tOog=
@@ -15,10 +23,27 @@ github.com/cli/safeexec v1.0.1 h1:e/C79PbXF4yYTN/wauC4tviMxEV13BwljGj0N9j+N00=
1523
github.com/cli/safeexec v1.0.1/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q=
1624
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
1725
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
26+
github.com/distatus/battery v0.11.0 h1:KJk89gz90Iq/wJtbjjM9yUzBXV+ASV/EG2WOOL7N8lc=
27+
github.com/distatus/battery v0.11.0/go.mod h1:KmVkE8A8hpIX4T78QRdMktYpEp35QfOL8A8dwZBxq2k=
28+
github.com/dlasky/gotk3-layershell v0.0.0-20240515133811-5c5115f0d774 h1:o87OVL4olQBlVwN3+NSVQpS6gj9FWUYtxOfHXWZigUE=
29+
github.com/dlasky/gotk3-layershell v0.0.0-20240515133811-5c5115f0d774/go.mod h1:JHLx2Wz4mAPVwn4PFhC69ydwyHP4A3wQvlg7HKVVc1U=
1830
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
1931
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
2032
github.com/frankban/quicktest v1.14.2 h1:SPb1KFFmM+ybpEjPUhCCkZOM5xlovT5UbrMvWnXyBns=
2133
github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
34+
github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
35+
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
36+
github.com/gdamore/tcell v1.4.0 h1:vUnHwJRvcPQa3tzi+0QI4U9JINXYJlOz9yiaiPQ2wMU=
37+
github.com/gdamore/tcell v1.4.0/go.mod h1:vxEiSDZdW3L+Uhjii9c3375IlDmR05bzxY404ZVSMo0=
38+
github.com/gek64/displayController v1.0.2 h1:xx1Um0aBResxS6eVjhEXU4U0LqjH723E9UPTDsC/j7M=
39+
github.com/gek64/displayController v1.0.2/go.mod h1:N9v4SImJeiH2Ep/epdg2OvGPeRhqVRthu04WhhF/S6Q=
40+
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
41+
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
42+
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
43+
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
44+
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
45+
github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
46+
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
2247
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
2348
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
2449
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -36,15 +61,29 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
3661
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
3762
github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
3863
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
64+
github.com/gotk3/gotk3 v0.6.1/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
3965
github.com/gotk3/gotk3 v0.6.5-0.20240618185848-ff349ae13f56 h1:eR+xxC8qqKuPMTucZqaklBxLIT7/4L7dzhlwKMrDbj8=
4066
github.com/gotk3/gotk3 v0.6.5-0.20240618185848-ff349ae13f56/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
67+
github.com/itchyny/volume-go v0.2.2 h1:v+FX58TV+g/IelerseqMO1LmdRoIuSS2uB26Ggljzx0=
68+
github.com/itchyny/volume-go v0.2.2/go.mod h1:0JOgisElMS/72B2DI4ha8CH2JXPUPTbe1agjk8jTU3s=
69+
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
70+
github.com/jfreymuth/pulse v0.1.1 h1:9WLNBNCijmtZ14ZJpatgJPu/NjwAl3TIKItSFnTh+9A=
71+
github.com/jfreymuth/pulse v0.1.1/go.mod h1:cpYspI6YljhkUf1WLXLLDmeaaPFc3CnGLjDZf9dZ4no=
4172
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
4273
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
4374
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
4475
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
4576
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
4677
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
4778
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
79+
github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac=
80+
github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
81+
github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54=
82+
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
83+
github.com/moutend/go-wca v0.2.0 h1:AEzY6ltC5zPCldKyMYdyXv3TaLqwxSW1TIradqNqRpU=
84+
github.com/moutend/go-wca v0.2.0/go.mod h1:L/ka++dPvkHYz0UuQ/PIQ3aTuecoXOIM1RSAesh6RYU=
85+
github.com/moutend/go-wca v0.3.0 h1:IzhsQ44zBzMdT42xlBjiLSVya9cPYOoKx9E+yXVhFo8=
86+
github.com/moutend/go-wca v0.3.0/go.mod h1:7VrPO512jnjFGJ6rr+zOoCfiYjOHRPNfbttJuxAurcw=
4887
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
4988
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
5089
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
@@ -63,9 +102,19 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ
63102
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
64103
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
65104
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
105+
golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756 h1:9nuHUbU8dRnRRfj9KjWUVrJeoexdbeMjttk6Oh1rD10=
106+
golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
107+
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
108+
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
109+
golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s=
110+
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
111+
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
112+
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
66113
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
67114
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
68115
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
116+
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
117+
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
69118
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
70119
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
71120
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
@@ -91,9 +140,15 @@ google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4
91140
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
92141
google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM=
93142
google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
143+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
94144
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
95145
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
96146
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
97147
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
148+
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg=
98149
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
99150
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
151+
howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM=
152+
howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g=
153+
howett.net/plist v1.0.1 h1:37GdZ8tP09Q35o9ych3ehygcsL+HqKSwzctveSlarvM=
154+
howett.net/plist v1.0.1/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g=

images/logo-rs.png

1.14 KB
Loading

images/logo.png

1000 KB
Loading

images/pp.png

2.56 KB
Loading

0 commit comments

Comments
 (0)