mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-05 21:15:38 -05:00
150 lines
4.0 KiB
Go
150 lines
4.0 KiB
Go
package dms
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/AvengeMedia/DankMaterialShell/backend/internal/tui"
|
|
"github.com/charmbracelet/lipgloss"
|
|
)
|
|
|
|
func (m Model) renderMainMenu() string {
|
|
var b strings.Builder
|
|
|
|
b.WriteString(m.renderBanner())
|
|
b.WriteString("\n")
|
|
|
|
headerStyle := lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color("#FFFFFF")).
|
|
Bold(true).
|
|
MarginBottom(1)
|
|
|
|
b.WriteString(headerStyle.Render("dms"))
|
|
b.WriteString("\n")
|
|
|
|
selectedStyle := lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color("#00D4AA")).
|
|
Bold(true)
|
|
|
|
normalStyle := lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color("#FFFFFF"))
|
|
|
|
for i, item := range m.menuItems {
|
|
if i == m.selectedItem {
|
|
b.WriteString(selectedStyle.Render(fmt.Sprintf("▶ %s", item.Label)))
|
|
} else {
|
|
b.WriteString(normalStyle.Render(fmt.Sprintf(" %s", item.Label)))
|
|
}
|
|
b.WriteString("\n")
|
|
}
|
|
|
|
b.WriteString("\n")
|
|
instructionStyle := lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color("#888888")).
|
|
MarginTop(1)
|
|
|
|
instructions := "↑/↓: Navigate, Enter: Select, q/Esc: Exit"
|
|
b.WriteString(instructionStyle.Render(instructions))
|
|
|
|
return b.String()
|
|
}
|
|
|
|
func (m Model) renderShellView() string {
|
|
var b strings.Builder
|
|
|
|
b.WriteString(m.renderBanner())
|
|
b.WriteString("\n")
|
|
|
|
headerStyle := lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color("#FFFFFF")).
|
|
Bold(true).
|
|
MarginBottom(1)
|
|
|
|
b.WriteString(headerStyle.Render("Shell"))
|
|
b.WriteString("\n\n")
|
|
|
|
normalStyle := lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color("#FFFFFF"))
|
|
|
|
b.WriteString(normalStyle.Render("Opening interactive shell..."))
|
|
b.WriteString("\n")
|
|
b.WriteString(normalStyle.Render("This will launch a shell with DMS environment loaded."))
|
|
b.WriteString("\n\n")
|
|
|
|
instructionStyle := lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color("#888888")).
|
|
MarginTop(1)
|
|
|
|
instructions := "Press any key to launch shell, Esc: Back"
|
|
b.WriteString(instructionStyle.Render(instructions))
|
|
|
|
return b.String()
|
|
}
|
|
|
|
func (m Model) renderAboutView() string {
|
|
var b strings.Builder
|
|
|
|
b.WriteString(m.renderBanner())
|
|
b.WriteString("\n")
|
|
|
|
headerStyle := lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color("#FFFFFF")).
|
|
Bold(true).
|
|
MarginBottom(1)
|
|
|
|
b.WriteString(headerStyle.Render("About DankMaterialShell"))
|
|
b.WriteString("\n\n")
|
|
|
|
normalStyle := lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color("#FFFFFF"))
|
|
|
|
b.WriteString(normalStyle.Render(fmt.Sprintf("DMS Management Interface %s", m.version)))
|
|
b.WriteString("\n\n")
|
|
b.WriteString(normalStyle.Render("DankMaterialShell is a comprehensive desktop environment"))
|
|
b.WriteString("\n")
|
|
b.WriteString(normalStyle.Render("built around Quickshell, providing a modern Material Design"))
|
|
b.WriteString("\n")
|
|
b.WriteString(normalStyle.Render("experience for Wayland compositors."))
|
|
b.WriteString("\n\n")
|
|
|
|
b.WriteString(normalStyle.Render("Components:"))
|
|
b.WriteString("\n")
|
|
for _, dep := range m.dependencies {
|
|
status := "✗"
|
|
if dep.Status == 1 {
|
|
status = "✓"
|
|
}
|
|
b.WriteString(normalStyle.Render(fmt.Sprintf(" %s %s", status, dep.Name)))
|
|
b.WriteString("\n")
|
|
}
|
|
|
|
b.WriteString("\n")
|
|
instructionStyle := lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color("#888888")).
|
|
MarginTop(1)
|
|
|
|
instructions := "Esc: Back to main menu"
|
|
b.WriteString(instructionStyle.Render(instructions))
|
|
|
|
return b.String()
|
|
}
|
|
|
|
func (m Model) renderBanner() string {
|
|
theme := tui.TerminalTheme()
|
|
|
|
logo := `
|
|
██████╗ █████╗ ███╗ ██╗██╗ ██╗
|
|
██╔══██╗██╔══██╗████╗ ██║██║ ██╔╝
|
|
██║ ██║███████║██╔██╗ ██║█████╔╝
|
|
██║ ██║██╔══██║██║╚██╗██║██╔═██╗
|
|
██████╔╝██║ ██║██║ ╚████║██║ ██╗
|
|
╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝`
|
|
|
|
titleStyle := lipgloss.NewStyle().
|
|
Foreground(lipgloss.Color(theme.Primary)).
|
|
Bold(true).
|
|
MarginBottom(1)
|
|
|
|
return titleStyle.Render(logo)
|
|
}
|