Detailed changes
@@ -5,9 +5,9 @@ import (
"path/filepath"
"time"
- "github.com/charmbracelet/bubbles/v2/key"
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/lipgloss/v2"
+ "charm.land/bubbles/v2/key"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/lipgloss/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
@@ -58,10 +58,7 @@ var Command = &cobra.Command{
}
m.footer = footer.New(c, m)
- p := tea.NewProgram(m,
- tea.WithAltScreen(),
- tea.WithMouseCellMotion(),
- )
+ p := tea.NewProgram(m)
_, err = p.Run()
return err
@@ -202,7 +199,11 @@ func (m *model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
// View implements tea.Model.
-func (m *model) View() string {
+func (m *model) View() tea.View {
+ var v tea.View
+ v.AltScreen = true
+ v.MouseMode = tea.MouseModeCellMotion
+
style := m.common.Styles.App
wm, hm := style.GetHorizontalFrameSize(), style.GetVerticalFrameSize()
if m.showFooter {
@@ -230,7 +231,8 @@ func (m *model) View() string {
view = lipgloss.JoinVertical(lipgloss.Left, view, m.footer.View())
}
- return m.common.Zone.Scan(style.Render(view))
+ v.Content = m.common.Zone.Scan(style.Render(view))
+ return v
}
type repository struct {
@@ -12,7 +12,7 @@ import (
"path/filepath"
"strings"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/cmd"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
@@ -8,7 +8,7 @@ import (
"strconv"
"github.com/charmbracelet/colorprofile"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/cmd/soft/admin"
"github.com/charmbracelet/soft-serve/cmd/soft/browse"
"github.com/charmbracelet/soft-serve/cmd/soft/hook"
@@ -6,7 +6,7 @@ import (
"fmt"
"net/http"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
@@ -1,24 +1,24 @@
module github.com/charmbracelet/soft-serve
-go 1.24.0
+go 1.24.2
require (
+ charm.land/bubbles/v2 v2.0.0-rc.1.0.20251208171859-93a004ab70c8
+ charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251216153312-819e2e89c62e
+ charm.land/glamour/v2 v2.0.0-20251110203732-69649f93d3b1
+ charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251205162909-7869489d8971
+ charm.land/log/v2 v2.0.0-20251110204020-529bb77f35da
+ charm.land/wish/v2 v2.0.0-20251118130305-6cd7463a7b97
github.com/alecthomas/chroma/v2 v2.20.0
- github.com/aymanbagabas/bubblezone/v2 v2.0.0-20250319214444-bb232f16d5e3
+ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be
github.com/aymanbagabas/git-module v1.8.4-0.20250826192401-1f81c5471e53
github.com/caarlos0/duration v0.0.0-20240108180406-5d492514f3c7
github.com/caarlos0/env/v11 v11.3.1
- github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1.0.20250603123720-56bbc4a1ba66
- github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.3.0.20250617194119-3f1d09f7d826
- github.com/charmbracelet/colorprofile v0.3.2
+ github.com/charmbracelet/colorprofile v0.4.1
github.com/charmbracelet/git-lfs-transfer v0.1.1-0.20240708204110-bacbfdb68d92
- github.com/charmbracelet/glamour/v2 v2.0.0-20250516160903-6f1e2c8f9ebe
- github.com/charmbracelet/keygen v0.5.3
- github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.2.0.20250703152125-8e1c474f8a71
- github.com/charmbracelet/log/v2 v2.0.0-20250226163916-c379e29ff706
- github.com/charmbracelet/ssh v0.0.0-20250128164007-98fd5ae11894
- github.com/charmbracelet/wish/v2 v2.0.0-20250505151211-5996fc7c1f33
- github.com/charmbracelet/x/ansi v0.10.1
+ github.com/charmbracelet/keygen v0.5.4
+ github.com/charmbracelet/ssh v0.0.0-20250826160808-ebfa259c7309
+ github.com/charmbracelet/x/ansi v0.11.3
github.com/dustin/go-humanize v1.0.1
github.com/go-git/go-git/v5 v5.16.2
github.com/go-jose/go-jose/v3 v3.0.4
@@ -31,6 +31,7 @@ require (
github.com/hashicorp/golang-lru/v2 v2.0.7
github.com/jmoiron/sqlx v1.4.0
github.com/lib/pq v1.10.9
+ github.com/lrstanley/bubblezone/v2 v2.0.0-alpha.3
github.com/matryer/is v1.4.1
github.com/muesli/mango-cobra v1.2.0
github.com/muesli/reflow v0.3.0
@@ -40,6 +41,7 @@ require (
github.com/rogpeppe/go-internal v1.14.1
github.com/sergi/go-diff v1.4.0
github.com/spf13/cobra v1.9.1
+ github.com/stretchr/testify v1.10.0
go.uber.org/automaxprocs v1.6.0
golang.org/x/crypto v0.45.0
golang.org/x/sync v0.18.0
@@ -48,30 +50,32 @@ require (
)
require (
- github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be // indirect
github.com/atotto/clipboard v0.1.4 // indirect
github.com/aymerick/douceur v0.2.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
- github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa // indirect
- github.com/charmbracelet/x/conpty v0.1.0 // indirect
- github.com/charmbracelet/x/errors v0.0.0-20240725160154-f9f6568126ec // indirect
+ github.com/charmbracelet/ultraviolet v0.0.0-20251212194010-b927aa605560 // indirect
+ github.com/charmbracelet/x/conpty v0.1.1 // indirect
+ github.com/charmbracelet/x/errors v0.0.0-20251110184232-6ab307057ac7 // indirect
github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf // indirect
- github.com/charmbracelet/x/input v0.3.5-0.20250509021451-13796e822d86 // indirect
- github.com/charmbracelet/x/term v0.2.1 // indirect
- github.com/charmbracelet/x/termios v0.1.0 // indirect
- github.com/charmbracelet/x/windows v0.2.1 // indirect
- github.com/creack/pty v1.1.21 // indirect
+ github.com/charmbracelet/x/term v0.2.2 // indirect
+ github.com/charmbracelet/x/termios v0.1.1 // indirect
+ github.com/charmbracelet/x/windows v0.2.2 // indirect
+ github.com/clipperhouse/displaywidth v0.6.1 // indirect
+ github.com/clipperhouse/stringish v0.1.1 // indirect
+ github.com/clipperhouse/uax29/v2 v2.3.0 // indirect
+ github.com/creack/pty v1.1.24 // indirect
+ github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dlclark/regexp2 v1.11.5 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/git-lfs/pktline v0.0.0-20230103162542-ca444d533ef1 // indirect
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
- github.com/go-logfmt/logfmt v0.6.0 // indirect
+ github.com/go-logfmt/logfmt v0.6.1 // indirect
github.com/gorilla/css v1.0.1 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
+ github.com/lucasb-eyer/go-colorful v1.3.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
- github.com/mattn/go-runewidth v0.0.16 // indirect
+ github.com/mattn/go-runewidth v0.0.19 // indirect
github.com/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2 // indirect
github.com/microcosm-cc/bluemonday v1.0.27 // indirect
github.com/muesli/cancelreader v0.2.2 // indirect
@@ -79,6 +83,7 @@ require (
github.com/muesli/mango-pflag v0.1.0 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/ncruces/go-strftime v0.1.9 // indirect
+ github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_model v0.6.2 // indirect
github.com/prometheus/common v0.65.0 // indirect
github.com/prometheus/procfs v0.16.1 // indirect
@@ -89,7 +94,7 @@ require (
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
github.com/yuin/goldmark v1.7.8 // indirect
github.com/yuin/goldmark-emoji v1.0.5 // indirect
- golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect
+ golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 // indirect
golang.org/x/net v0.47.0 // indirect
golang.org/x/sys v0.38.0 // indirect
golang.org/x/text v0.31.0 // indirect
@@ -1,3 +1,15 @@
+charm.land/bubbles/v2 v2.0.0-rc.1.0.20251208171859-93a004ab70c8 h1:mBFNMn9ABYmHqHhYlaWugfFET6mZs2w8tD9/cDlUqeQ=
+charm.land/bubbles/v2 v2.0.0-rc.1.0.20251208171859-93a004ab70c8/go.mod h1:5AbN6cEd/47gkEf8TgiQ2O3RZ5QxMS14l9W+7F9fPC4=
+charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251216153312-819e2e89c62e h1:tXwTmgGpwZT7ParKF5xbEQBVjM2e1uKhKi/GpfU3mYQ=
+charm.land/bubbletea/v2 v2.0.0-rc.2.0.20251216153312-819e2e89c62e/go.mod h1:pDM18flq3Z4njKZPA3zCvyVSSIJbMcoqlE82BdGUtL8=
+charm.land/glamour/v2 v2.0.0-20251110203732-69649f93d3b1 h1:9q4+yyU7105T3OrOx0csMyKnw89yMSijJ+rVld/Z2ek=
+charm.land/glamour/v2 v2.0.0-20251110203732-69649f93d3b1/go.mod h1:J3kVhY6oHXZq5f+8vC3hmDO95fEvbqj3z7xDwxrfzU8=
+charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251205162909-7869489d8971 h1:xZFcNsJMiIDbFtWRyDmkKNk1sjojfaom4Zoe0cyH/8c=
+charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251205162909-7869489d8971/go.mod h1:i61Y3FmdbcBNSKa+pKB3DaE4uVQmBLMs/xlvRyHcXAE=
+charm.land/log/v2 v2.0.0-20251110204020-529bb77f35da h1:vZa/Ow0uLclpfaDY0ubjzE+B0eLQqi2zanmpeALanow=
+charm.land/log/v2 v2.0.0-20251110204020-529bb77f35da/go.mod h1:Tj12StbPc4GwksDF6XwhC9wdXouinIVxRGKKmmmzdSU=
+charm.land/wish/v2 v2.0.0-20251118130305-6cd7463a7b97 h1:71lxKLcPBqntp/99s+nD2/UHyd7GIzOOW9TFIzy1y9A=
+charm.land/wish/v2 v2.0.0-20251118130305-6cd7463a7b97/go.mod h1:FsbVEDgo+gQ86lu5Aqe8D1V6UtOF7U1J8iKQKycdbc0=
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
@@ -10,12 +22,10 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFI
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
-github.com/aymanbagabas/bubblezone/v2 v2.0.0-20250319214444-bb232f16d5e3 h1:1z2ihw0YUYUhNmRaavyXvG9ZU/9Tj0vj6sA3z5DFIJ8=
-github.com/aymanbagabas/bubblezone/v2 v2.0.0-20250319214444-bb232f16d5e3/go.mod h1:sJwqZoo/BSKSizmr0pSJ758RuRsnjlkrOaxPtwlWtOs=
github.com/aymanbagabas/git-module v1.8.4-0.20250826192401-1f81c5471e53 h1:KfKp+gVsQtuM9qb8Putvkx1jjAWqlvI1vdv5x9hdFoQ=
github.com/aymanbagabas/git-module v1.8.4-0.20250826192401-1f81c5471e53/go.mod h1:d4gQ7/3/S2sPq4NnKdtAgUOVr6XtLpWFtxyVV5/+76U=
-github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWpi6yML8=
-github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA=
+github.com/aymanbagabas/go-udiff v0.3.1 h1:LV+qyBQ2pqe0u42ZsUEtPiCaUoqgA9gYRDs3vj1nolY=
+github.com/aymanbagabas/go-udiff v0.3.1/go.mod h1:G0fsKmG+P6ylD0r6N/KgQD/nWzgfnl8ZBcNLgcbrw8E=
github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
@@ -26,49 +36,41 @@ github.com/caarlos0/env/v11 v11.3.1 h1:cArPWC15hWmEt+gWk7YBi7lEXTXCvpaSdCiZE2X5m
github.com/caarlos0/env/v11 v11.3.1/go.mod h1:qupehSf/Y0TUTsxKywqRt/vJjN5nz6vauiYEUUr8P4U=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1.0.20250603123720-56bbc4a1ba66 h1:LDUnLzW0DZ4riy4juBAXJWeE94vvVChgZwzhZL/4wuk=
-github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1.0.20250603123720-56bbc4a1ba66/go.mod h1:6HamsBKWqEC/FVHuQMHgQL+knPyvHH55HwJDHl/adMw=
-github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.3.0.20250617194119-3f1d09f7d826 h1:pQxCWMojVjHePqGzWsANhplourZYsD6AuR6eR2Hi5yc=
-github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.3.0.20250617194119-3f1d09f7d826/go.mod h1:bfzSaUDPMKrWDjD6wo/ato9lfDdEX83rZgwcXHYWJ98=
-github.com/charmbracelet/colorprofile v0.3.2 h1:9J27WdztfJQVAQKX2WOlSSRB+5gaKqqITmrvb1uTIiI=
-github.com/charmbracelet/colorprofile v0.3.2/go.mod h1:mTD5XzNeWHj8oqHb+S1bssQb7vIHbepiebQ2kPKVKbI=
+github.com/charmbracelet/colorprofile v0.4.1 h1:a1lO03qTrSIRaK8c3JRxJDZOvhvIeSco3ej+ngLk1kk=
+github.com/charmbracelet/colorprofile v0.4.1/go.mod h1:U1d9Dljmdf9DLegaJ0nGZNJvoXAhayhmidOdcBwAvKk=
github.com/charmbracelet/git-lfs-transfer v0.1.1-0.20240708204110-bacbfdb68d92 h1:KtQlsiHfY3K4AoIEh0yUE/wCLHteZ9EzV1hKmx+p7U8=
github.com/charmbracelet/git-lfs-transfer v0.1.1-0.20240708204110-bacbfdb68d92/go.mod h1:UrXUCm3xLQkq15fu7qlXHUMlrhdlXHoi13KH2Dfiits=
-github.com/charmbracelet/glamour/v2 v2.0.0-20250516160903-6f1e2c8f9ebe h1:i6ce4CcAlPpTj2ER69m1DBeLZ3RRcHnKExuwhKa3GfY=
-github.com/charmbracelet/glamour/v2 v2.0.0-20250516160903-6f1e2c8f9ebe/go.mod h1:p3Q+aN4eQKeM5jhrmXPMgPrlKbmc59rWSnMsSA3udhk=
-github.com/charmbracelet/keygen v0.5.3 h1:2MSDC62OUbDy6VmjIE2jM24LuXUvKywLCmaJDmr/Z/4=
-github.com/charmbracelet/keygen v0.5.3/go.mod h1:TcpNoMAO5GSmhx3SgcEMqCrtn8BahKhB8AlwnLjRUpk=
-github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.2.0.20250703152125-8e1c474f8a71 h1:X0tsNa2UHCKNw+illiavosasVzqioRo32SRV35iwr2I=
-github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.2.0.20250703152125-8e1c474f8a71/go.mod h1:EJWvaCrhOhNGVZMvcjc0yVryl4qqpMs8tz0r9WyEkdQ=
-github.com/charmbracelet/log/v2 v2.0.0-20250226163916-c379e29ff706 h1:WkwO6Ks3mSIGnGuSdKl9qDSyfbYK50z2wc2gGMggegE=
-github.com/charmbracelet/log/v2 v2.0.0-20250226163916-c379e29ff706/go.mod h1:mjJGp00cxcfvD5xdCa+bso251Jt4owrQvuimJtVmEmM=
-github.com/charmbracelet/ssh v0.0.0-20250128164007-98fd5ae11894 h1:Ffon9TbltLGBsT6XE//YvNuu4OAaThXioqalhH11xEw=
-github.com/charmbracelet/ssh v0.0.0-20250128164007-98fd5ae11894/go.mod h1:hg+I6gvlMl16nS9ZzQNgBIrrCasGwEw0QiLsDcP01Ko=
-github.com/charmbracelet/wish/v2 v2.0.0-20250505151211-5996fc7c1f33 h1:/TlxP6Lw9Z7NJCQ7TSbuvfO3/AL0UXGDPwH1zO9pV8U=
-github.com/charmbracelet/wish/v2 v2.0.0-20250505151211-5996fc7c1f33/go.mod h1:Tssk2d4IKqV3tNiPgwrYSvJMQu+nN9J4JlGmYaXpiR4=
-github.com/charmbracelet/x/ansi v0.10.1 h1:rL3Koar5XvX0pHGfovN03f5cxLbCF2YvLeyz7D2jVDQ=
-github.com/charmbracelet/x/ansi v0.10.1/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE=
-github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa h1:lphz0Z3rsiOtMYiz8axkT24i9yFiueDhJbzyNUADmME=
-github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa/go.mod h1:xBlh2Yi3DL3zy/2n15kITpg0YZardf/aa/hgUaIM6Rk=
-github.com/charmbracelet/x/conpty v0.1.0 h1:4zc8KaIcbiL4mghEON8D72agYtSeIgq8FSThSPQIb+U=
-github.com/charmbracelet/x/conpty v0.1.0/go.mod h1:rMFsDJoDwVmiYM10aD4bH2XiRgwI7NYJtQgl5yskjEQ=
-github.com/charmbracelet/x/errors v0.0.0-20240725160154-f9f6568126ec h1:O8c7pFFK0imuHH5JBqv5smlbVoFn4CZKGjtvCQKu1WE=
-github.com/charmbracelet/x/errors v0.0.0-20240725160154-f9f6568126ec/go.mod h1:2P0UgXMEa6TsToMSuFqKFQR+fZTO9CNGUNokkPatT/0=
-github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a h1:FsHEJ52OC4VuTzU8t+n5frMjLvpYWEznSr/u8tnkCYw=
-github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
+github.com/charmbracelet/keygen v0.5.4 h1:XQYgf6UEaTGgQSSmiPpIQ78WfseNQp4Pz8N/c1OsrdA=
+github.com/charmbracelet/keygen v0.5.4/go.mod h1:t4oBRr41bvK7FaJsAaAQhhkUuHslzFXVjOBwA55CZNM=
+github.com/charmbracelet/ssh v0.0.0-20250826160808-ebfa259c7309 h1:dCVbCRRtg9+tsfiTXTp0WupDlHruAXyp+YoxGVofHHc=
+github.com/charmbracelet/ssh v0.0.0-20250826160808-ebfa259c7309/go.mod h1:R9cISUs5kAH4Cq/rguNbSwcR+slE5Dfm8FEs//uoIGE=
+github.com/charmbracelet/ultraviolet v0.0.0-20251212194010-b927aa605560 h1:j3PW2hypGoPKBy3ooKzW0TFxaxhyHK3NbkLLn4KeRFc=
+github.com/charmbracelet/ultraviolet v0.0.0-20251212194010-b927aa605560/go.mod h1:VWATWLRwYP06VYCEur7FsNR2B1xAo7Y+xl1PTbd1ePc=
+github.com/charmbracelet/x/ansi v0.11.3 h1:6DcVaqWI82BBVM/atTyq6yBoRLZFBsnoDoX9GCu2YOI=
+github.com/charmbracelet/x/ansi v0.11.3/go.mod h1:yI7Zslym9tCJcedxz5+WBq+eUGMJT0bM06Fqy1/Y4dI=
+github.com/charmbracelet/x/conpty v0.1.1 h1:s1bUxjoi7EpqiXysVtC+a8RrvPPNcNvAjfi4jxsAuEs=
+github.com/charmbracelet/x/conpty v0.1.1/go.mod h1:OmtR77VODEFbiTzGE9G1XiRJAga6011PIm4u5fTNZpk=
+github.com/charmbracelet/x/errors v0.0.0-20251110184232-6ab307057ac7 h1:4EG8pCHK5fa8dIxv97VHC8hdkJAz6QNm1WB9BuD/WhY=
+github.com/charmbracelet/x/errors v0.0.0-20251110184232-6ab307057ac7/go.mod h1:O2BTD/aMVQDmrvqroIO3fB6zXUuU07ZpVt21QTmZjRg=
+github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f h1:pk6gmGpCE7F3FcjaOEKYriCvpmIN4+6OS/RD0vm4uIA=
+github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f/go.mod h1:IfZAMTHB6XkZSeXUqriemErjAWCCzT0LwjKFYCZyw0I=
github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf h1:rLG0Yb6MQSDKdB52aGX55JT1oi0P0Kuaj7wi1bLUpnI=
github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf/go.mod h1:B3UgsnsBZS/eX42BlaNiJkD1pPOUa+oF1IYC6Yd2CEU=
-github.com/charmbracelet/x/input v0.3.5-0.20250509021451-13796e822d86 h1:BxAEmOBIDajkgao3EsbBxKQCYvgYPGdT62WASLvtf4Y=
-github.com/charmbracelet/x/input v0.3.5-0.20250509021451-13796e822d86/go.mod h1:62Rp/6EtTxoeJDSdtpA3tJp3y3ZRpsiekBSje+K8htA=
-github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
-github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
-github.com/charmbracelet/x/termios v0.1.0 h1:y4rjAHeFksBAfGbkRDmVinMg7x7DELIGAFbdNvxg97k=
-github.com/charmbracelet/x/termios v0.1.0/go.mod h1:H/EVv/KRnrYjz+fCYa9bsKdqF3S8ouDK0AZEbG7r+/U=
-github.com/charmbracelet/x/windows v0.2.1 h1:3x7vnbpQrjpuq/4L+I4gNsG5htYoCiA5oe9hLjAij5I=
-github.com/charmbracelet/x/windows v0.2.1/go.mod h1:ptZp16h40gDYqs5TSawSVW+yiLB13j4kSMA0lSCHL0M=
+github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
+github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI=
+github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY=
+github.com/charmbracelet/x/termios v0.1.1/go.mod h1:rB7fnv1TgOPOyyKRJ9o+AsTU/vK5WHJ2ivHeut/Pcwo=
+github.com/charmbracelet/x/windows v0.2.2 h1:IofanmuvaxnKHuV04sC0eBy/smG6kIKrWG2/jYn2GuM=
+github.com/charmbracelet/x/windows v0.2.2/go.mod h1:/8XtdKZzedat74NQFn0NGlGL4soHB0YQZrETF96h75k=
+github.com/clipperhouse/displaywidth v0.6.1 h1:/zMlAezfDzT2xy6acHBzwIfyu2ic0hgkT83UX5EY2gY=
+github.com/clipperhouse/displaywidth v0.6.1/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o=
+github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs=
+github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA=
+github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4=
+github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
-github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0=
-github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
+github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s=
+github.com/creack/pty v1.1.24/go.mod h1:08sCNb52WyoAwi2QDyzUCTgcvVFhUzewun7wtTfvcwE=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -86,8 +88,8 @@ github.com/go-git/go-git/v5 v5.16.2 h1:fT6ZIOjE5iEnkzKyxTHK1W4HGAsPhqEqiSAssSO77
github.com/go-git/go-git/v5 v5.16.2/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8=
github.com/go-jose/go-jose/v3 v3.0.4 h1:Wp5HA7bLQcKnf6YYao/4kpRpVMp/yf6+pJKV8WFSaNY=
github.com/go-jose/go-jose/v3 v3.0.4/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
-github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
-github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
+github.com/go-logfmt/logfmt v0.6.1 h1:4hvbpePJKnIzH1B+8OR/JPbTx37NktoI9LE2QZBBkvE=
+github.com/go-logfmt/logfmt v0.6.1/go.mod h1:EV2pOAQoZaT1ZXZbqDl5hrymndi4SY9ED9/z6CO0XAk=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
@@ -131,15 +133,17 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
-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/lrstanley/bubblezone/v2 v2.0.0-alpha.3 h1:hFH0W7GQO1tCu9p0ljSxxr0PLWjrp/9NgHXEMWoCL70=
+github.com/lrstanley/bubblezone/v2 v2.0.0-alpha.3/go.mod h1:O2jUHrhH1gDH/VhsqNIv35PN8+7zyAQqZ16rQPpCJxU=
+github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag=
+github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ=
github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
-github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
-github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
+github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
+github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/mcuadros/go-version v0.0.0-20190308113854-92cdf37c5b75/go.mod h1:76rfSfYPWj01Z85hUf/ituArm797mNKcvINh1OlsZKo=
@@ -224,8 +228,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
-golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o=
-golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8=
+golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY=
+golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
@@ -5,7 +5,7 @@ import (
"crypto/sha256"
"encoding/hex"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"golang.org/x/crypto/bcrypt"
)
@@ -3,7 +3,7 @@ package backend
import (
"context"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/db"
"github.com/charmbracelet/soft-serve/pkg/store"
@@ -4,7 +4,7 @@ import (
"context"
"encoding/json"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/db"
"github.com/charmbracelet/soft-serve/pkg/db/models"
"github.com/charmbracelet/soft-serve/pkg/proto"
@@ -4,7 +4,7 @@ import (
"context"
"time"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/robfig/cron/v3"
)
@@ -6,7 +6,7 @@ import (
"fmt"
"testing"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
)
func TestCronLogger(t *testing.T) {
@@ -12,7 +12,7 @@ import (
"sync/atomic"
"time"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/access"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
@@ -6,7 +6,7 @@ import (
"errors"
"fmt"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/jmoiron/sqlx"
_ "github.com/lib/pq" // postgres driver
@@ -5,7 +5,7 @@ import (
"database/sql"
"strings"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/jmoiron/sqlx"
)
@@ -6,7 +6,7 @@ import (
"path/filepath"
"strconv"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/db"
"github.com/charmbracelet/soft-serve/pkg/db/models"
@@ -6,7 +6,7 @@ import (
"errors"
"fmt"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/db"
)
@@ -9,7 +9,7 @@ import (
"strings"
gitm "github.com/aymanbagabas/git-module"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/go-git/go-git/v5/plumbing/format/pktline"
)
@@ -12,7 +12,7 @@ import (
"time"
"github.com/charmbracelet/git-lfs-transfer/transfer"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/db"
"github.com/charmbracelet/soft-serve/pkg/db/models"
@@ -7,7 +7,7 @@ import (
"fmt"
"time"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/jwk"
"github.com/charmbracelet/soft-serve/pkg/lfs"
@@ -2,7 +2,7 @@ package git
import (
"github.com/charmbracelet/git-lfs-transfer/transfer"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
)
type lfsLogger struct {
@@ -10,7 +10,7 @@ import (
"strings"
"sync"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
)
// Service is a Git daemon service.
@@ -7,7 +7,7 @@ import (
"path/filepath"
"text/template"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/utils"
)
@@ -7,7 +7,7 @@ import (
"runtime"
"strings"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
@@ -9,7 +9,7 @@ import (
"io"
"net/http"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
)
// BasicTransferAdapter implements the "basic" adapter
@@ -8,7 +8,7 @@ import (
"fmt"
"net/http"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
)
// httpClient is a Git LFS client to communicate with a LFS source API.
@@ -5,7 +5,7 @@ import (
"strings"
"time"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/config"
)
@@ -5,7 +5,7 @@ import (
"strings"
"time"
- gansi "github.com/charmbracelet/glamour/v2/ansi"
+ gansi "charm.land/glamour/v2/ansi"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
@@ -6,7 +6,7 @@ import (
"strings"
"time"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/access"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
@@ -3,7 +3,7 @@ package cmd
import (
"strings"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/proto"
@@ -6,7 +6,7 @@ import (
"time"
"github.com/caarlos0/duration"
- "github.com/charmbracelet/lipgloss/v2/table"
+ "charm.land/lipgloss/v2/table"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/dustin/go-humanize"
@@ -5,7 +5,7 @@ import (
"strconv"
"strings"
- "github.com/charmbracelet/lipgloss/v2/table"
+ "charm.land/lipgloss/v2/table"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/utils"
"github.com/charmbracelet/soft-serve/pkg/webhook"
@@ -4,7 +4,7 @@ import (
"fmt"
"time"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/db"
@@ -13,7 +13,7 @@ import (
"github.com/charmbracelet/soft-serve/pkg/sshutils"
"github.com/charmbracelet/soft-serve/pkg/store"
"github.com/charmbracelet/ssh"
- "github.com/charmbracelet/wish/v2"
+ "charm.land/wish/v2"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/spf13/cobra"
@@ -3,15 +3,15 @@ package ssh
import (
"time"
- tea "github.com/charmbracelet/bubbletea/v2"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/wish/v2"
+ bm "charm.land/wish/v2/bubbletea"
"github.com/charmbracelet/soft-serve/pkg/access"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
"github.com/charmbracelet/ssh"
- "github.com/charmbracelet/wish/v2"
- bm "github.com/charmbracelet/wish/v2/bubbletea"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
)
@@ -54,9 +54,7 @@ func SessionHandler(s ssh.Session) *tea.Program {
opts := bm.MakeOptions(s)
opts = append(opts,
- tea.WithAltScreen(),
tea.WithoutCatchPanics(),
- tea.WithMouseCellMotion(),
tea.WithContext(ctx),
tea.WithColorProfile(common.DefaultColorProfile),
)
@@ -8,7 +8,7 @@ import (
"testing"
"time"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/db"
@@ -17,8 +17,8 @@ import (
"github.com/charmbracelet/soft-serve/pkg/store/database"
"github.com/charmbracelet/soft-serve/pkg/test"
"github.com/charmbracelet/ssh"
- bm "github.com/charmbracelet/wish/v2/bubbletea"
- "github.com/charmbracelet/wish/v2/testsession"
+ bm "charm.land/wish/v2/bubbletea"
+ "charm.land/wish/v2/testsession"
"github.com/matryer/is"
gossh "golang.org/x/crypto/ssh"
_ "modernc.org/sqlite" // sqlite driver
@@ -9,16 +9,16 @@ import (
"time"
"github.com/charmbracelet/keygen"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/db"
"github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/charmbracelet/soft-serve/pkg/store"
"github.com/charmbracelet/ssh"
- "github.com/charmbracelet/wish/v2"
- bm "github.com/charmbracelet/wish/v2/bubbletea"
- rm "github.com/charmbracelet/wish/v2/recover"
+ "charm.land/wish/v2"
+ bm "charm.land/wish/v2/bubbletea"
+ rm "charm.land/wish/v2/recover"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
gossh "golang.org/x/crypto/ssh"
@@ -3,10 +3,10 @@ package ssh
import (
"errors"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/list"
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/lipgloss/v2"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/list"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/lipgloss/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
@@ -256,7 +256,11 @@ func (ui *UI) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
// View implements tea.Model.
-func (ui *UI) View() string {
+func (ui *UI) View() tea.View {
+ var v tea.View
+ v.AltScreen = true
+ v.MouseMode = tea.MouseModeCellMotion
+
var view string
wm, hm := ui.getMargins()
switch ui.state {
@@ -284,9 +288,10 @@ func (ui *UI) View() string {
if ui.showFooter {
view = lipgloss.JoinVertical(lipgloss.Left, view, ui.footer.View())
}
- return ui.common.Zone.Scan(
+ v.Content = ui.common.Zone.Scan(
ui.common.Styles.App.Render(view),
)
+ return v
}
func (ui *UI) openRepo(rn string) (proto.Repository, error) {
@@ -3,7 +3,7 @@ package database
import (
"context"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/db"
"github.com/charmbracelet/soft-serve/pkg/store"
@@ -4,15 +4,15 @@ import (
"context"
"fmt"
+ "charm.land/log/v2"
"github.com/alecthomas/chroma/v2/lexers"
- zone "github.com/aymanbagabas/bubblezone/v2"
- "github.com/charmbracelet/log/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/ui/keymap"
"github.com/charmbracelet/soft-serve/pkg/ui/styles"
"github.com/charmbracelet/ssh"
+ zone "github.com/lrstanley/bubblezone/v2"
)
type contextKey struct {
@@ -1,14 +1,20 @@
package common
import (
- "github.com/charmbracelet/bubbles/v2/help"
- tea "github.com/charmbracelet/bubbletea/v2"
+ "charm.land/bubbles/v2/help"
+ tea "charm.land/bubbletea/v2"
)
+// Model represents a simple UI model.
+type Model interface {
+ Init() tea.Cmd
+ Update(tea.Msg) (Model, tea.Cmd)
+ View() string
+}
+
// Component represents a Bubble Tea model that implements a SetSize function.
type Component interface {
- tea.Model
- tea.ViewModel
+ Model
help.KeyMap
SetSize(width, height int)
}
@@ -3,7 +3,7 @@ package common
import (
"errors"
- tea "github.com/charmbracelet/bubbletea/v2"
+ tea "charm.land/bubbletea/v2"
)
// ErrMissingRepo indicates that the requested repository could not be found.
@@ -6,7 +6,7 @@ import (
"strings"
"github.com/alecthomas/chroma/v2/lexers"
- gansi "github.com/charmbracelet/glamour/v2/ansi"
+ gansi "charm.land/glamour/v2/ansi"
"github.com/charmbracelet/soft-serve/pkg/ui/styles"
)
@@ -2,8 +2,8 @@ package common
import (
"github.com/charmbracelet/colorprofile"
- gansi "github.com/charmbracelet/glamour/v2/ansi"
- "github.com/charmbracelet/glamour/v2/styles"
+ gansi "charm.land/glamour/v2/ansi"
+ "charm.land/glamour/v2/styles"
)
// DefaultColorProfile is the default color profile used by the SSH server.
@@ -5,11 +5,11 @@ import (
"strings"
"sync"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/glamour/v2"
+ gansi "charm.land/glamour/v2/ansi"
+ "charm.land/lipgloss/v2"
"github.com/alecthomas/chroma/v2/lexers"
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/glamour/v2"
- gansi "github.com/charmbracelet/glamour/v2/ansi"
- "github.com/charmbracelet/lipgloss/v2"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
vp "github.com/charmbracelet/soft-serve/pkg/ui/components/viewport"
)
@@ -132,7 +132,7 @@ func (r *Code) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (r *Code) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+func (r *Code) Update(msg tea.Msg) (common.Model, tea.Cmd) {
cmds := make([]tea.Cmd, 0)
switch msg.(type) {
case tea.WindowSizeMsg:
@@ -1,10 +1,10 @@
package footer
import (
- "github.com/charmbracelet/bubbles/v2/help"
- "github.com/charmbracelet/bubbles/v2/key"
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/lipgloss/v2"
+ "charm.land/bubbles/v2/help"
+ "charm.land/bubbles/v2/key"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/lipgloss/v2"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
)
@@ -37,8 +37,8 @@ func New(c common.Common, keymap help.KeyMap) *Footer {
// SetSize implements common.Component.
func (f *Footer) SetSize(width, height int) {
f.common.SetSize(width, height)
- f.help.Width = width -
- f.common.Styles.Footer.GetHorizontalFrameSize()
+ f.help.SetWidth(width -
+ f.common.Styles.Footer.GetHorizontalFrameSize())
}
// Init implements tea.Model.
@@ -47,7 +47,7 @@ func (f *Footer) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (f *Footer) Update(_ tea.Msg) (tea.Model, tea.Cmd) {
+func (f *Footer) Update(_ tea.Msg) (common.Model, tea.Cmd) {
return f, nil
}
@@ -3,7 +3,7 @@ package header
import (
"strings"
- tea "github.com/charmbracelet/bubbletea/v2"
+ tea "charm.land/bubbletea/v2"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
)
@@ -32,7 +32,7 @@ func (h *Header) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (h *Header) Update(_ tea.Msg) (tea.Model, tea.Cmd) {
+func (h *Header) Update(_ tea.Msg) (common.Model, tea.Cmd) {
return h, nil
}
@@ -3,9 +3,9 @@ package selector
import (
"sync"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/list"
- tea "github.com/charmbracelet/bubbletea/v2"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/list"
+ tea "charm.land/bubbletea/v2"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
)
@@ -227,7 +227,7 @@ func (s *Selector) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (s *Selector) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+func (s *Selector) Update(msg tea.Msg) (common.Model, tea.Cmd) {
cmds := make([]tea.Cmd, 0)
switch msg := msg.(type) {
case tea.MouseClickMsg:
@@ -1,8 +1,8 @@
package statusbar
import (
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/lipgloss/v2"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/lipgloss/v2"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
"github.com/charmbracelet/x/ansi"
)
@@ -52,7 +52,7 @@ func (s *Model) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (s *Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+func (s *Model) Update(msg tea.Msg) (common.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.WindowSizeMsg:
s.SetSize(msg.Width, msg.Height)
@@ -3,8 +3,8 @@ package tabs
import (
"strings"
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/lipgloss/v2"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/lipgloss/v2"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
)
@@ -51,7 +51,7 @@ func (t *Tabs) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (t *Tabs) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+func (t *Tabs) Update(msg tea.Msg) (common.Model, tea.Cmd) {
cmds := make([]tea.Cmd, 0)
switch msg := msg.(type) {
case tea.KeyPressMsg:
@@ -1,9 +1,9 @@
package viewport
import (
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/viewport"
- tea "github.com/charmbracelet/bubbletea/v2"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/viewport"
+ tea "charm.land/bubbletea/v2"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
)
@@ -38,7 +38,7 @@ func (v *Viewport) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (v *Viewport) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+func (v *Viewport) Update(msg tea.Msg) (common.Model, tea.Cmd) {
switch msg := msg.(type) {
case tea.KeyPressMsg:
switch {
@@ -1,6 +1,6 @@
package keymap
-import "github.com/charmbracelet/bubbles/v2/key"
+import "charm.land/bubbles/v2/key"
// KeyMap is a map of key bindings for the UI.
type KeyMap struct {
@@ -6,10 +6,10 @@ import (
"path/filepath"
"strings"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/spinner"
+ tea "charm.land/bubbletea/v2"
gitm "github.com/aymanbagabas/git-module"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/spinner"
- tea "github.com/charmbracelet/bubbletea/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
@@ -220,7 +220,7 @@ func (f *Files) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (f *Files) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+func (f *Files) Update(msg tea.Msg) (common.Model, tea.Cmd) {
cmds := make([]tea.Cmd, 0)
switch msg := msg.(type) {
case RepoMsg:
@@ -6,10 +6,10 @@ import (
"io/fs"
"strings"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/list"
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/lipgloss/v2"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/list"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/lipgloss/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
"github.com/dustin/go-humanize"
@@ -5,11 +5,11 @@ import (
"strings"
"time"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/spinner"
- tea "github.com/charmbracelet/bubbletea/v2"
- gansi "github.com/charmbracelet/glamour/v2/ansi"
- "github.com/charmbracelet/lipgloss/v2"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/spinner"
+ tea "charm.land/bubbletea/v2"
+ gansi "charm.land/glamour/v2/ansi"
+ "charm.land/lipgloss/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
@@ -203,7 +203,7 @@ func (l *Log) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (l *Log) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+func (l *Log) Update(msg tea.Msg) (common.Model, tea.Cmd) {
cmds := make([]tea.Cmd, 0)
switch msg := msg.(type) {
case RepoMsg:
@@ -6,10 +6,10 @@ import (
"strings"
"time"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/list"
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/lipgloss/v2"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/list"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/lipgloss/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
"github.com/muesli/reflow/truncate"
@@ -3,9 +3,9 @@ package repo
import (
"path/filepath"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/spinner"
- tea "github.com/charmbracelet/bubbletea/v2"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/spinner"
+ tea "charm.land/bubbletea/v2"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
@@ -95,7 +95,7 @@ func (r *Readme) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (r *Readme) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+func (r *Readme) Update(msg tea.Msg) (common.Model, tea.Cmd) {
cmds := make([]tea.Cmd, 0)
switch msg := msg.(type) {
case RepoMsg:
@@ -5,9 +5,9 @@ import (
"sort"
"strings"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/spinner"
- tea "github.com/charmbracelet/bubbletea/v2"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/spinner"
+ tea "charm.land/bubbletea/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
@@ -119,7 +119,7 @@ func (r *Refs) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (r *Refs) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+func (r *Refs) Update(msg tea.Msg) (common.Model, tea.Cmd) {
cmds := make([]tea.Cmd, 0)
switch msg := msg.(type) {
case RepoMsg:
@@ -6,10 +6,10 @@ import (
"strings"
"time"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/list"
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/lipgloss/v2"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/list"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/lipgloss/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
"github.com/dustin/go-humanize"
@@ -4,11 +4,11 @@ import (
"fmt"
"strings"
- "github.com/charmbracelet/bubbles/v2/help"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/spinner"
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/lipgloss/v2"
+ "charm.land/bubbles/v2/help"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/spinner"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/lipgloss/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
@@ -147,7 +147,7 @@ func (r *Repo) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (r *Repo) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+func (r *Repo) Update(msg tea.Msg) (common.Model, tea.Cmd) {
cmds := make([]tea.Cmd, 0)
switch msg := msg.(type) {
case RepoMsg:
@@ -3,11 +3,11 @@ package repo
import (
"fmt"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/spinner"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/lipgloss/v2"
gitm "github.com/aymanbagabas/git-module"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/spinner"
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/lipgloss/v2"
"github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
@@ -146,7 +146,7 @@ func (s *Stash) Init() tea.Cmd {
}
// Update updates the model.
-func (s *Stash) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+func (s *Stash) Update(msg tea.Msg) (common.Model, tea.Cmd) {
cmds := make([]tea.Cmd, 0)
switch msg := msg.(type) {
case RepoMsg:
@@ -5,9 +5,9 @@ import (
"io"
gitm "github.com/aymanbagabas/git-module"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/list"
- tea "github.com/charmbracelet/bubbletea/v2"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/list"
+ tea "charm.land/bubbletea/v2"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
)
@@ -7,10 +7,10 @@ import (
"strings"
"time"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/list"
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/lipgloss/v2"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/list"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/lipgloss/v2"
"github.com/charmbracelet/soft-serve/pkg/proto"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
"github.com/dustin/go-humanize"
@@ -4,10 +4,10 @@ import (
"fmt"
"sort"
- "github.com/charmbracelet/bubbles/v2/key"
- "github.com/charmbracelet/bubbles/v2/list"
- tea "github.com/charmbracelet/bubbletea/v2"
- "github.com/charmbracelet/lipgloss/v2"
+ "charm.land/bubbles/v2/key"
+ "charm.land/bubbles/v2/list"
+ tea "charm.land/bubbletea/v2"
+ "charm.land/lipgloss/v2"
"github.com/charmbracelet/soft-serve/pkg/access"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/ui/common"
@@ -236,7 +236,7 @@ func (s *Selection) Init() tea.Cmd {
}
// Update implements tea.Model.
-func (s *Selection) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
+func (s *Selection) Update(msg tea.Msg) (common.Model, tea.Cmd) {
cmds := make([]tea.Cmd, 0)
switch msg := msg.(type) {
case tea.WindowSizeMsg:
@@ -3,7 +3,7 @@ package styles
import (
"image/color"
- "github.com/charmbracelet/lipgloss/v2"
+ "charm.land/lipgloss/v2"
)
// XXX: For now, this is in its own package so that it can be shared between
@@ -7,7 +7,7 @@ import (
"net/http"
"strings"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/proto"
@@ -4,7 +4,7 @@ import (
"context"
"net/http"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/db"
@@ -14,7 +14,7 @@ import (
"strings"
"time"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
gitb "github.com/charmbracelet/soft-serve/git"
"github.com/charmbracelet/soft-serve/pkg/access"
"github.com/charmbracelet/soft-serve/pkg/backend"
@@ -13,7 +13,7 @@ import (
"strconv"
"strings"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/access"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
@@ -6,7 +6,7 @@ import (
"path"
"text/template"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/backend"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/charmbracelet/soft-serve/pkg/utils"
@@ -4,7 +4,7 @@ import (
"context"
"net/http"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/db"
"github.com/gorilla/mux"
)
@@ -5,7 +5,7 @@ import (
"net/http"
"time"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/config"
)
@@ -7,7 +7,7 @@ import (
"net/http"
"time"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/dustin/go-humanize"
)
@@ -4,7 +4,7 @@ import (
"context"
"net/http"
- "github.com/charmbracelet/log/v2"
+ "charm.land/log/v2"
"github.com/charmbracelet/soft-serve/pkg/config"
"github.com/gorilla/handlers"
"github.com/gorilla/mux"