From 3df6aa402ab5d17d700d8a05a148720c268bc0a8 Mon Sep 17 00:00:00 2001 From: Atridad Lahiji Date: Tue, 23 Dec 2025 11:07:06 -0700 Subject: [PATCH] Fuck --- go.mod | 2 +- main.go | 66 +++++++++++++++++++++++---------------------------------- 2 files changed, 28 insertions(+), 40 deletions(-) diff --git a/go.mod b/go.mod index ca85084..9e63298 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/charmbracelet/lipgloss v1.1.0 github.com/charmbracelet/ssh v0.0.0-20250826160808-ebfa259c7309 github.com/charmbracelet/wish v1.4.7 + github.com/muesli/termenv v0.16.0 ) require ( @@ -35,7 +36,6 @@ require ( github.com/mattn/go-runewidth v0.0.19 // indirect github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect - github.com/muesli/termenv v0.16.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect golang.org/x/crypto v0.46.0 // indirect diff --git a/main.go b/main.go index 844207e..3a0e85e 100644 --- a/main.go +++ b/main.go @@ -19,6 +19,7 @@ import ( "github.com/charmbracelet/wish/activeterm" "github.com/charmbracelet/wish/bubbletea" "github.com/charmbracelet/wish/logging" + "github.com/muesli/termenv" ) const ( @@ -66,7 +67,9 @@ func main() { func teaHandler(s ssh.Session) (tea.Model, []tea.ProgramOption) { pty, _, _ := s.Pty() - m := newModel(pty.Window.Width, pty.Window.Height) + renderer := bubbletea.MakeRenderer(s) + renderer.SetColorProfile(termenv.ANSI256) + m := newModel(pty.Window.Width, pty.Window.Height, renderer) return m, []tea.ProgramOption{tea.WithAltScreen()} } @@ -77,9 +80,10 @@ type model struct { height int viewport viewport.Model buffer []int + renderer *lipgloss.Renderer } -func newModel(width, height int) model { +func newModel(width, height int, renderer *lipgloss.Renderer) model { vp := viewport.New(width, height) size := width * height return model{ @@ -87,6 +91,7 @@ func newModel(width, height int) model { height: height, viewport: vp, buffer: make([]int, size+width+1), + renderer: renderer, } } @@ -159,58 +164,40 @@ func (m model) View() string { return m.renderFire() } -// ANSI 256-color palette for fire effect (from dark to bright) -var fireStyles = []lipgloss.Style{ - lipgloss.NewStyle().Foreground(lipgloss.Color("0")), // black - lipgloss.NewStyle().Foreground(lipgloss.Color("52")), // dark red - lipgloss.NewStyle().Foreground(lipgloss.Color("88")), // dark red 2 - lipgloss.NewStyle().Foreground(lipgloss.Color("124")), // red - lipgloss.NewStyle().Foreground(lipgloss.Color("160")), // red 2 - lipgloss.NewStyle().Foreground(lipgloss.Color("196")), // bright red - lipgloss.NewStyle().Foreground(lipgloss.Color("202")), // orange-red - lipgloss.NewStyle().Foreground(lipgloss.Color("208")), // orange - lipgloss.NewStyle().Foreground(lipgloss.Color("214")), // orange-yellow - lipgloss.NewStyle().Foreground(lipgloss.Color("220")), // yellow - lipgloss.NewStyle().Foreground(lipgloss.Color("226")), // bright yellow - lipgloss.NewStyle().Foreground(lipgloss.Color("227")), // light yellow - lipgloss.NewStyle().Foreground(lipgloss.Color("228")), // pale yellow - lipgloss.NewStyle().Foreground(lipgloss.Color("229")), // near white - lipgloss.NewStyle().Foreground(lipgloss.Color("230")), // white-yellow -} - +var fireColors = []string{"0", "52", "88", "124", "160", "196", "202", "208", "214", "220", "226", "227", "228", "229", "230"} var fireChars = []rune{' ', '.', ':', '^', '*', 'x', 's', 'S', '#', '$'} -func getFireStyle(v int) lipgloss.Style { +func getFireColorIndex(v int) int { if v <= 0 { - return fireStyles[0] + return 0 } else if v <= 2 { - return fireStyles[1] + return 1 } else if v <= 4 { - return fireStyles[2] + return 2 } else if v <= 6 { - return fireStyles[3] + return 3 } else if v <= 8 { - return fireStyles[4] + return 4 } else if v <= 10 { - return fireStyles[5] + return 5 } else if v <= 13 { - return fireStyles[6] + return 6 } else if v <= 16 { - return fireStyles[7] + return 7 } else if v <= 20 { - return fireStyles[8] + return 8 } else if v <= 25 { - return fireStyles[9] + return 9 } else if v <= 30 { - return fireStyles[10] + return 10 } else if v <= 40 { - return fireStyles[11] + return 11 } else if v <= 50 { - return fireStyles[12] + return 12 } else if v <= 60 { - return fireStyles[13] + return 13 } - return fireStyles[14] + return 14 } func (m model) renderFire() string { @@ -232,7 +219,8 @@ func (m model) renderFire() string { v = m.buffer[i] } - style := getFireStyle(v) + colorIdx := getFireColorIndex(v) + style := m.renderer.NewStyle().Foreground(lipgloss.Color(fireColors[colorIdx])) chIdx := v if chIdx > 9 { @@ -248,7 +236,7 @@ func (m model) renderFire() string { } footer := "Press 'q' to exit" - footerStyle := lipgloss.NewStyle(). + footerStyle := m.renderer.NewStyle(). Foreground(lipgloss.Color("240")). Width(width). Align(lipgloss.Center)