commit 24a699fd7e3c497b882b21fb0091238e10c802b1
parent 3805112bc376460f6da1ff6eaac97f399ec94a1d
Author: Ryan Sepassi <rsepassi@gmail.com>
Date: Tue, 25 Aug 2026 23:28:08 -0700
Document installation and update module path
Diffstat:
10 files changed, 98 insertions(+), 17 deletions(-)
diff --git a/README.md b/README.md
@@ -0,0 +1,81 @@
+# gotextlog
+
+`textlog` is a keyboard-first terminal client for [Textlog](https://textlog.cc), built with Bubble Tea.
+
+## Features
+
+- Hot, latest, personalized, and live feeds
+- Full reply threads with parent context and foldable reply branches
+- Search, profiles, tags, follows, blocks, and reporting
+- Email-code sign-in, posting, replies, editing, and account settings
+- Rich terminal rendering for links, mentions, tags, code, and ASCII art
+- Configurable Textlog-compatible instance and light, dark, or automatic themes
+
+## Install
+
+Go 1.24.2 or newer is required.
+
+`gotextlog` uses its Git repository URL as its Go module path, including the
+`.git` suffix. This lets the Go tool locate the repository without a separate
+vanity import server.
+
+```sh
+go install git.ryansepassi.com/git/gotextlog.git/cmd/textlog@latest
+```
+
+The command is installed as `textlog`. Ensure `$(go env GOPATH)/bin` is on
+`PATH` if the shell cannot find it. Use `go install` for the executable;
+`go get` is intended to add module dependencies to another Go project.
+
+To build from a checkout:
+
+```sh
+git clone https://git.ryansepassi.com/git/gotextlog.git
+cd gotextlog
+go build -o bin/textlog ./cmd/textlog
+./bin/textlog
+```
+
+The client requires an interactive terminal.
+
+## Usage
+
+Run `textlog` to connect to [textlog.cc](https://textlog.cc), or select a
+compatible instance:
+
+```sh
+textlog --url https://textlog.example
+```
+
+Common controls:
+
+- `j`/`k` or arrow keys move through lists; Enter opens the selection.
+- `1`–`5` switch feeds, depending on whether the client is signed in.
+- `/` searches, `w` writes, `r` replies, and `?` opens help.
+- Space folds or unfolds reply branches in a thread and pauses the live feed.
+- `q`, Escape, `h`, or left arrow goes back.
+
+Command-line options:
+
+```text
+--url <origin> Textlog-compatible instance
+--theme <auto|light|dark> Color theme
+--help Show help
+--version Show version
+```
+
+Environment overrides are `TEXTLOG_URL`, `TEXTLOG_TOKEN`,
+`TEXTLOG_THEME`, and `NO_COLOR`. Session and UI settings are stored in the
+platform user configuration directory.
+
+See [doc/usage.md](doc/usage.md) for the complete controls, configuration, and
+API coverage.
+
+## Development
+
+```sh
+go test ./...
+go test -race ./...
+go vet ./...
+go build ./cmd/textlog
+```
diff --git a/cmd/textlog/main.go b/cmd/textlog/main.go
@@ -9,11 +9,11 @@ import (
"os/exec"
"runtime"
+ "git.ryansepassi.com/git/gotextlog.git/internal/config"
+ "git.ryansepassi.com/git/gotextlog.git/internal/textlog"
+ "git.ryansepassi.com/git/gotextlog.git/internal/tui"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/x/term"
- "github.com/ryan/gotextlog/internal/config"
- "github.com/ryan/gotextlog/internal/textlog"
- "github.com/ryan/gotextlog/internal/tui"
)
const version = "1.0.0"
diff --git a/go.mod b/go.mod
@@ -1,4 +1,4 @@
-module github.com/ryan/gotextlog
+module git.ryansepassi.com/git/gotextlog.git
go 1.24.2
diff --git a/internal/domain/domain.go b/internal/domain/domain.go
@@ -9,7 +9,7 @@ import (
"unicode"
"unicode/utf8"
- "github.com/ryan/gotextlog/internal/textlog"
+ "git.ryansepassi.com/git/gotextlog.git/internal/textlog"
)
const (
diff --git a/internal/domain/domain_test.go b/internal/domain/domain_test.go
@@ -5,7 +5,7 @@ import (
"testing"
"time"
- "github.com/ryan/gotextlog/internal/textlog"
+ "git.ryansepassi.com/git/gotextlog.git/internal/textlog"
)
func TestNoteValidationTimeAndRedaction(t *testing.T) {
diff --git a/internal/tui/backend.go b/internal/tui/backend.go
@@ -5,8 +5,8 @@ import (
"encoding/json"
"fmt"
- "github.com/ryan/gotextlog/internal/config"
- "github.com/ryan/gotextlog/internal/textlog"
+ "git.ryansepassi.com/git/gotextlog.git/internal/config"
+ "git.ryansepassi.com/git/gotextlog.git/internal/textlog"
)
type OperationKind string
diff --git a/internal/tui/backend_test.go b/internal/tui/backend_test.go
@@ -9,7 +9,7 @@ import (
"reflect"
"testing"
- "github.com/ryan/gotextlog/internal/textlog"
+ "git.ryansepassi.com/git/gotextlog.git/internal/textlog"
)
func TestThreadBackendLoadsRootAndAllReplyPagesForFocusedReply(t *testing.T) {
diff --git a/internal/tui/model.go b/internal/tui/model.go
@@ -11,9 +11,9 @@ import (
"github.com/charmbracelet/bubbles/spinner"
tea "github.com/charmbracelet/bubbletea"
- "github.com/ryan/gotextlog/internal/config"
- "github.com/ryan/gotextlog/internal/domain"
- "github.com/ryan/gotextlog/internal/textlog"
+ "git.ryansepassi.com/git/gotextlog.git/internal/config"
+ "git.ryansepassi.com/git/gotextlog.git/internal/domain"
+ "git.ryansepassi.com/git/gotextlog.git/internal/textlog"
)
type screenKind string
diff --git a/internal/tui/model_test.go b/internal/tui/model_test.go
@@ -7,11 +7,11 @@ import (
"testing"
"time"
+ "git.ryansepassi.com/git/gotextlog.git/internal/config"
+ "git.ryansepassi.com/git/gotextlog.git/internal/textlog"
"github.com/charmbracelet/bubbles/spinner"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/lipgloss"
- "github.com/ryan/gotextlog/internal/config"
- "github.com/ryan/gotextlog/internal/textlog"
)
type acceptanceBackend struct{ calls []Operation }
diff --git a/internal/tui/view.go b/internal/tui/view.go
@@ -5,10 +5,10 @@ import (
"strings"
"time"
+ "git.ryansepassi.com/git/gotextlog.git/internal/config"
+ "git.ryansepassi.com/git/gotextlog.git/internal/domain"
+ "git.ryansepassi.com/git/gotextlog.git/internal/textlog"
"github.com/charmbracelet/lipgloss"
- "github.com/ryan/gotextlog/internal/config"
- "github.com/ryan/gotextlog/internal/domain"
- "github.com/ryan/gotextlog/internal/textlog"
)
type palette struct{ ink, muted, soft, accent, danger, success, quote lipgloss.Color }