gotextlog

gotextlog
git clone https://git.ryansepassi.com/git/gotextlog.git
Log | Files | Refs | README

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:
AREADME.md | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mcmd/textlog/main.go | 6+++---
Mgo.mod | 2+-
Minternal/domain/domain.go | 2+-
Minternal/domain/domain_test.go | 2+-
Minternal/tui/backend.go | 4++--
Minternal/tui/backend_test.go | 2+-
Minternal/tui/model.go | 6+++---
Minternal/tui/model_test.go | 4++--
Minternal/tui/view.go | 6+++---
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 }