diff --git a/main.go b/main.go index 29ec770..8cafdb2 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import ( "net" "os" "os/signal" + "path/filepath" "slices" "strings" "syscall" @@ -26,8 +27,6 @@ import ( "github.com/charmbracelet/x/term" ) -var docStyle = lipgloss.NewStyle().Margin(1, 2) - type errMsg error type item struct { @@ -61,6 +60,9 @@ const ( ) type model struct { + renderer *lipgloss.Renderer + termRenderer *glamour.TermRenderer + list list.Model allPosts []string @@ -75,15 +77,14 @@ type model struct { page Page - viewport viewport.Model - termRenderer *glamour.TermRenderer + viewport viewport.Model err error } -func getViewPort(width int, height int) viewport.Model { +func getViewPort(renderer *lipgloss.Renderer, width int, height int) viewport.Model { vp := viewport.New(width, height) - vp.Style = lipgloss.NewStyle(). + vp.Style = renderer.NewStyle(). BorderStyle(lipgloss.RoundedBorder()). BorderForeground(lipgloss.Color("62")). PaddingRight(2) @@ -91,8 +92,8 @@ func getViewPort(width int, height int) viewport.Model { return vp } -func initialModel(w int, h int) model { - posts, err := getAllPosts("/home/johnc/Code/JohnTech/content/blog") +func initialModel(renderer *lipgloss.Renderer, w int, h int) model { + posts, err := getAllPosts(filepath.Join(os.Getenv("BLOG_PATH"), "content/blog")) if err != nil { panic(err) } @@ -111,7 +112,7 @@ func initialModel(w int, h int) model { list.SetShowTitle(false) // -1 to allow for the initial height of the nav model - vp := getViewPort(w, h-3) + vp := getViewPort(renderer, w, h-3) // We need to adjust the width of the glamour render from our main width // to account for a few things: @@ -124,7 +125,7 @@ func initialModel(w int, h int) model { const glamourGutter = 2 glamourRenderWidth := w - vp.Style.GetHorizontalFrameSize() - glamourGutter - renderer, err := glamour.NewTermRenderer( + termRenderer, err := glamour.NewTermRenderer( glamour.WithAutoStyle(), glamour.WithWordWrap(glamourRenderWidth), ) @@ -132,7 +133,7 @@ func initialModel(w int, h int) model { panic(err) } - frontPageContent, err := os.ReadFile("/home/johnc/Code/JohnTech/content/_index.md") + frontPageContent, err := os.ReadFile(filepath.Join(os.Getenv("BLOG_PATH"), "content/_index.md")) if err != nil { panic(err) } @@ -142,7 +143,7 @@ func initialModel(w int, h int) model { panic(err) } - frontPageModel, err := createMarkdownPostModel(processedFrontPage, renderer, vp) + frontPageModel, err := createMarkdownPostModel(processedFrontPage, termRenderer, vp) if err != nil { panic(err) } @@ -151,13 +152,13 @@ func initialModel(w int, h int) model { list: list, allPosts: posts, page: FRONT, - termRenderer: renderer, + termRenderer: termRenderer, viewport: vp, frontPageModel: frontPageModel, frontPageContent: processedFrontPage, width: w, height: h, - navModel: createNavModel(w), + navModel: createNavModel(renderer, w), } } @@ -212,11 +213,11 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, nil } case tea.WindowSizeMsg: - h, v := docStyle.GetFrameSize() - m.list.SetSize(msg.Width-h, msg.Height-v) - - m.height = msg.Height - m.width = msg.Width + // h, v := m.termRenderer.GetFrameSize() + // m.list.SetSize(msg.Width-h, msg.Height-v) + // + // m.height = msg.Height + // m.width = msg.Width } list, cmd := m.list.Update(msg) @@ -245,7 +246,7 @@ func (m model) View() string { case FRONT: return m.navModel.View() + "\n" + m.frontPageModel.View() case POST_LIST: - return m.navModel.View() + docStyle.Render(m.list.View()) + return m.navModel.View() + m.renderer.NewStyle().Margin(1, 2).Render(m.list.View()) case POST: return m.navModel.View() + "\n" + m.postModel.View() default: @@ -261,7 +262,7 @@ const ( func initServer() { s, err := wish.NewServer( wish.WithAddress(net.JoinHostPort(host, port)), - wish.WithHostKeyPath(".ssh/id_rsa"), + wish.WithHostKeyPath("./.ssh/id_rsa"), wish.WithMiddleware( bubbletea.Middleware(teaHandler), activeterm.Middleware(), // Bubble Tea apps usually require a PTY. @@ -305,7 +306,7 @@ func main() { panic(err) } - p := tea.NewProgram(initialModel(w, h)) + p := tea.NewProgram(initialModel(lipgloss.DefaultRenderer(), w, h)) if _, err := p.Run(); err != nil { log.Fatal(err) } @@ -329,15 +330,8 @@ func teaHandler(s ssh.Session) (tea.Model, []tea.ProgramOption) { // use it to create the styles. // The recommended way to use these styles is to then pass them down to // your Bubble Tea model. - // renderer := bubbletea.MakeRenderer(s) - // txtStyle := renderer.NewStyle().Foreground(lipgloss.Color("10")) - // quitStyle := renderer.NewStyle().Foreground(lipgloss.Color("8")) - // - // bg := "light" - // if renderer.HasDarkBackground() { - // bg = "dark" - // } + renderer := bubbletea.MakeRenderer(s) - m := initialModel(pty.Window.Width, pty.Window.Height) + m := initialModel(renderer, pty.Window.Width, pty.Window.Height) return m, []tea.ProgramOption{tea.WithAltScreen()} } diff --git a/nav.go b/nav.go index b697414..1819435 100644 --- a/nav.go +++ b/nav.go @@ -6,7 +6,8 @@ import ( ) type navModel struct { - style lipgloss.Style + renderer *lipgloss.Renderer + style lipgloss.Style } func (m navModel) Init() tea.Cmd { @@ -18,13 +19,13 @@ func (m navModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { } func (m navModel) View() string { - nameStyle := lipgloss.NewStyle().Bold(true) + nameStyle := m.renderer.NewStyle().Bold(true) - blogStyle := lipgloss.NewStyle(). + blogStyle := m.renderer.NewStyle(). Bold(true). Underline(true) - shortcutStyle := lipgloss.NewStyle(). + shortcutStyle := m.renderer.NewStyle(). Faint(true) name := nameStyle.Render("John Costa") @@ -47,14 +48,15 @@ func (m navModel) View() string { return m.style.Render(rightSide) } -func createNavModel(width int) navModel { - style := lipgloss.NewStyle(). +func createNavModel(renderer *lipgloss.Renderer, width int) navModel { + style := renderer.NewStyle(). BorderStyle(lipgloss.RoundedBorder()). BorderForeground(lipgloss.Color("62")) style = style.Width(width - style.GetHorizontalFrameSize()) return navModel{ - style: style, + renderer: renderer, + style: style, } }