Added basic functionality
This commit is contained in:
parent
27a76864b1
commit
78b9f1f2e7
18
.gitignore
vendored
18
.gitignore
vendored
@ -1,25 +1,9 @@
|
|||||||
# ---> Go.AllowList
|
|
||||||
# Allowlisting gitignore template for GO projects prevents us
|
|
||||||
# from adding various unwanted local files, such as generated
|
|
||||||
# files, developer configurations or IDE-specific files etc.
|
|
||||||
#
|
|
||||||
# Recommended: Go.AllowList.gitignore
|
|
||||||
|
|
||||||
# Ignore everything
|
|
||||||
*
|
*
|
||||||
|
|
||||||
# But not these files...
|
|
||||||
!/.gitignore
|
!/.gitignore
|
||||||
|
|
||||||
!*.go
|
!*.go
|
||||||
|
!*.sh
|
||||||
!go.sum
|
!go.sum
|
||||||
!go.mod
|
!go.mod
|
||||||
|
|
||||||
!README.md
|
!README.md
|
||||||
!LICENSE
|
!LICENSE
|
||||||
|
|
||||||
# !Makefile
|
|
||||||
|
|
||||||
# ...even if they are in subdirectories
|
|
||||||
!*/
|
!*/
|
||||||
|
|
||||||
|
2
LICENSE
2
LICENSE
@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2023 cli
|
Copyright (c) 2023 Eduard Urbach
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
16
README.md
16
README.md
@ -1,3 +1,17 @@
|
|||||||
# dash
|
# dash
|
||||||
|
|
||||||
Dashboard for my terminal
|
Dashboard for my terminal.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
- Run your terminal in fullscreen
|
||||||
|
- Set the terminal opacity to 50%
|
||||||
|
- Start `dash`
|
||||||
|
|
||||||
|
## alacritty
|
||||||
|
|
||||||
|
If you're using alacritty you can set the opacity for a single instance via:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
alacritty msg config window.opacity=0.5
|
||||||
|
```
|
||||||
|
35
clock/clock.go
Normal file
35
clock/clock.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package clock
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gdamore/tcell/v2"
|
||||||
|
"github.com/rivo/tview"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
interval = 1 * time.Second
|
||||||
|
format = "15:04:05"
|
||||||
|
)
|
||||||
|
|
||||||
|
func New(app *tview.Application) *tview.TextView {
|
||||||
|
view := tview.NewTextView()
|
||||||
|
view.SetTextAlign(tview.AlignCenter)
|
||||||
|
view.SetBackgroundColor(tcell.ColorDefault)
|
||||||
|
view.SetText(time.Now().Format(format))
|
||||||
|
view.SetBorderPadding(1, 1, 1, 1)
|
||||||
|
go refresh(app, view)
|
||||||
|
return view
|
||||||
|
}
|
||||||
|
|
||||||
|
func refresh(app *tview.Application, view *tview.TextView) {
|
||||||
|
tick := time.NewTicker(interval)
|
||||||
|
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-tick.C:
|
||||||
|
view.SetText(time.Now().Format(format))
|
||||||
|
app.Draw()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
14
editor/editor.go
Normal file
14
editor/editor.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package editor
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gdamore/tcell/v2"
|
||||||
|
"github.com/rivo/tview"
|
||||||
|
)
|
||||||
|
|
||||||
|
func New(app *tview.Application) *tview.TextArea {
|
||||||
|
view := tview.NewTextArea()
|
||||||
|
view.SetBackgroundColor(tcell.ColorDefault)
|
||||||
|
view.SetTextStyle(tcell.StyleDefault)
|
||||||
|
view.SetText("Having been erased,\nThe document you're seeking\nMust now be retyped.", true)
|
||||||
|
return view
|
||||||
|
}
|
13
empty/empty.go
Normal file
13
empty/empty.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package empty
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gdamore/tcell/v2"
|
||||||
|
"github.com/rivo/tview"
|
||||||
|
)
|
||||||
|
|
||||||
|
func New(app *tview.Application) *tview.Box {
|
||||||
|
view := tview.NewBox()
|
||||||
|
view.SetBackgroundColor(tcell.ColorDefault)
|
||||||
|
view.SetBorderPadding(1, 1, 1, 1)
|
||||||
|
return view
|
||||||
|
}
|
18
go.mod
Normal file
18
go.mod
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module git.akyoto.dev/cli/dash
|
||||||
|
|
||||||
|
go 1.21.0
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/gdamore/tcell/v2 v2.6.0
|
||||||
|
github.com/rivo/tview v0.0.0-20230814110005-ccc2c8119703
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/gdamore/encoding v1.0.0 // indirect
|
||||||
|
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||||
|
github.com/mattn/go-runewidth v0.0.14 // indirect
|
||||||
|
github.com/rivo/uniseg v0.4.3 // indirect
|
||||||
|
golang.org/x/sys v0.5.0 // indirect
|
||||||
|
golang.org/x/term v0.5.0 // indirect
|
||||||
|
golang.org/x/text v0.7.0 // indirect
|
||||||
|
)
|
42
go.sum
Normal file
42
go.sum
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
|
||||||
|
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
|
||||||
|
github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg=
|
||||||
|
github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y=
|
||||||
|
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
|
||||||
|
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
|
||||||
|
github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
|
||||||
|
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||||
|
github.com/rivo/tview v0.0.0-20230814110005-ccc2c8119703 h1:ZyM/+FYnpbZsFWuCohniM56kRoHRB4r5EuIzXEYkpxo=
|
||||||
|
github.com/rivo/tview v0.0.0-20230814110005-ccc2c8119703/go.mod h1:nVwGv4MP47T0jvlk7KuTTjjuSmrGO4JF0iaiNt4bufE=
|
||||||
|
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
|
github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw=
|
||||||
|
github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||||
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
|
||||||
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY=
|
||||||
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
|
golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo=
|
||||||
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
48
main.go
Normal file
48
main.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.akyoto.dev/cli/dash/clock"
|
||||||
|
"git.akyoto.dev/cli/dash/editor"
|
||||||
|
"git.akyoto.dev/cli/dash/empty"
|
||||||
|
"git.akyoto.dev/cli/dash/osinfo"
|
||||||
|
"github.com/gdamore/tcell/v2"
|
||||||
|
"github.com/rivo/tview"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
app := tview.NewApplication()
|
||||||
|
|
||||||
|
header := clock.New(app)
|
||||||
|
main := editor.New(app)
|
||||||
|
footer := osinfo.New(app)
|
||||||
|
left := empty.New(app)
|
||||||
|
right := empty.New(app)
|
||||||
|
|
||||||
|
grid := tview.NewGrid()
|
||||||
|
grid.SetRows(3, 0, 3)
|
||||||
|
grid.SetColumns(0, 80, 0)
|
||||||
|
grid.SetBorders(false)
|
||||||
|
grid.SetBackgroundColor(tcell.ColorDefault)
|
||||||
|
|
||||||
|
grid.AddItem(header, 0, 0, 1, 3, 0, 0, false)
|
||||||
|
grid.AddItem(footer, 2, 0, 1, 3, 0, 0, false)
|
||||||
|
|
||||||
|
// Layout for screens narrower than 100 cells (menu and side bar are hidden).
|
||||||
|
grid.AddItem(left, 0, 0, 0, 0, 0, 0, false)
|
||||||
|
grid.AddItem(main, 1, 0, 1, 3, 0, 0, false)
|
||||||
|
grid.AddItem(right, 0, 0, 0, 0, 0, 0, false)
|
||||||
|
|
||||||
|
// Layout for screens wider than 100 cells.
|
||||||
|
grid.AddItem(left, 1, 0, 1, 1, 0, 100, false)
|
||||||
|
grid.AddItem(main, 1, 1, 1, 1, 0, 100, false)
|
||||||
|
grid.AddItem(right, 1, 2, 1, 1, 0, 100, false)
|
||||||
|
|
||||||
|
app.SetRoot(grid, true)
|
||||||
|
app.SetFocus(main)
|
||||||
|
|
||||||
|
err := app.Run()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
2
opacity.sh
Executable file
2
opacity.sh
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
alacritty msg config window.opacity=0.5
|
24
osinfo/osinfo.go
Normal file
24
osinfo/osinfo.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package osinfo
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os/exec"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/gdamore/tcell/v2"
|
||||||
|
"github.com/rivo/tview"
|
||||||
|
)
|
||||||
|
|
||||||
|
func New(app *tview.Application) *tview.TextView {
|
||||||
|
view := tview.NewTextView()
|
||||||
|
view.SetTextAlign(tview.AlignCenter)
|
||||||
|
view.SetBackgroundColor(tcell.ColorDefault)
|
||||||
|
view.SetBorderPadding(1, 1, 1, 1)
|
||||||
|
|
||||||
|
out, _ := exec.Command("lsb_release", "-sd").Output()
|
||||||
|
distro := string(out)
|
||||||
|
distro = strings.TrimSpace(distro)
|
||||||
|
distro = strings.Trim(distro, "\"")
|
||||||
|
view.SetText(distro)
|
||||||
|
|
||||||
|
return view
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user