mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-06 05:25:41 -05:00
```sh
❯ dms
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0xb2fbe5]
goroutine 1 [running]:
github.com/AvengeMedia/DankMaterialShell/core/internal/dms.(*Detector).GetDependencyStatus(0x0)
github.com/AvengeMedia/DankMaterialShell/core/internal/dms/detector.go:56 +0x25
github.com/AvengeMedia/DankMaterialShell/core/internal/dms.(*Detector).GetInstalledComponents(0x421dd1?)
github.com/AvengeMedia/DankMaterialShell/core/internal/dms/detector.go:120 +0x1f
github.com/AvengeMedia/DankMaterialShell/core/internal/dms.NewModel({_, _})
github.com/AvengeMedia/DankMaterialShell/core/internal/dms/app.go:108 +0x67
main.runInteractiveMode(0xc0001e3000?, {0xdabb80?, 0x4?, 0xdabae0?})
github.com/AvengeMedia/DankMaterialShell/core/cmd/dms/commands_root.go:85 +0x85
github.com/spf13/cobra.(*Command).execute(0x1549460, {0xc0000360d0, 0x0, 0x0})
github.com/spf13/cobra@v1.10.1/command.go:1019 +0xae7
github.com/spf13/cobra.(*Command).ExecuteC(0x1549460)
github.com/spf13/cobra@v1.10.1/command.go:1148 +0x465
github.com/spf13/cobra.(*Command).Execute(...)
github.com/spf13/cobra@v1.10.1/command.go:1071
main.main()
github.com/AvengeMedia/DankMaterialShell/core/cmd/dms/main.go:41 +0x6a
```
153 lines
4.1 KiB
Go
153 lines
4.1 KiB
Go
package dms
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/AvengeMedia/DankMaterialShell/core/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")
|
|
if len(m.dependencies) == 0 {
|
|
b.WriteString(normalStyle.Render("\n Component detection not supported on this platform."))
|
|
}
|
|
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)
|
|
}
|