mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-06 05:25:41 -05:00
86 lines
2.1 KiB
Go
86 lines
2.1 KiB
Go
package tui
|
|
|
|
import (
|
|
"strings"
|
|
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
)
|
|
|
|
func (m Model) viewMissingWMInstructions() string {
|
|
var b strings.Builder
|
|
|
|
b.WriteString(m.renderBanner())
|
|
b.WriteString("\n\n")
|
|
|
|
// Determine which WM is missing
|
|
wmName := "Niri"
|
|
installCmd := `environment.systemPackages = with pkgs; [
|
|
niri
|
|
];`
|
|
alternateCmd := `# Or enable the module if available:
|
|
# programs.niri.enable = true;`
|
|
|
|
if m.selectedWM == 1 {
|
|
wmName = "Hyprland"
|
|
installCmd = `programs.hyprland.enable = true;`
|
|
alternateCmd = `# Or add to systemPackages:
|
|
# environment.systemPackages = with pkgs; [
|
|
# hyprland
|
|
# ];`
|
|
}
|
|
|
|
// Title
|
|
title := m.styles.Title.Render("⚠️ " + wmName + " Not Installed")
|
|
b.WriteString(title)
|
|
b.WriteString("\n\n")
|
|
|
|
// Explanation
|
|
explanation := m.styles.Normal.Render(wmName + " needs to be installed system-wide on NixOS.")
|
|
b.WriteString(explanation)
|
|
b.WriteString("\n\n")
|
|
|
|
// Instructions
|
|
instructions := m.styles.Subtle.Render("To install " + wmName + ", add this to your /etc/nixos/configuration.nix:")
|
|
b.WriteString(instructions)
|
|
b.WriteString("\n\n")
|
|
|
|
// Command box
|
|
cmdBox := m.styles.CodeBlock.Render(installCmd)
|
|
b.WriteString(cmdBox)
|
|
b.WriteString("\n\n")
|
|
|
|
// Alternate command
|
|
altBox := m.styles.Subtle.Render(alternateCmd)
|
|
b.WriteString(altBox)
|
|
b.WriteString("\n\n")
|
|
|
|
// Rebuild instruction
|
|
rebuildInstruction := m.styles.Normal.Render("Then rebuild your system:")
|
|
b.WriteString(rebuildInstruction)
|
|
b.WriteString("\n")
|
|
|
|
rebuildCmd := m.styles.CodeBlock.Render("sudo nixos-rebuild switch")
|
|
b.WriteString(rebuildCmd)
|
|
b.WriteString("\n\n")
|
|
|
|
// Navigation help
|
|
help := m.styles.Subtle.Render("Press Esc to go back and select a different window manager, or Ctrl+C to exit")
|
|
b.WriteString(help)
|
|
|
|
return b.String()
|
|
}
|
|
|
|
func (m Model) updateMissingWMInstructionsState(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
if keyMsg, ok := msg.(tea.KeyMsg); ok {
|
|
switch keyMsg.String() {
|
|
case "esc":
|
|
// Go back to window manager selection
|
|
m.state = StateSelectWindowManager
|
|
return m, m.listenForLogs()
|
|
case "ctrl+c":
|
|
return m, tea.Quit
|
|
}
|
|
}
|
|
return m, m.listenForLogs()
|
|
}
|