chore: setup hyprland repo for go setup

This commit is contained in:
hesam-init 2024-08-22 14:06:26 +03:30
parent 1a20366108
commit f7b7da9cf4
2 changed files with 120 additions and 54 deletions

View file

@ -4,27 +4,29 @@ import (
"flag" "flag"
"fmt" "fmt"
"hyprland-setup/utils" "hyprland-setup/utils"
"log"
"os" "os"
"path/filepath" "path/filepath"
) )
var ( const (
updateXbps bool installHyprland bool = true
updatePkgs bool installPipewire bool = true
clearCache bool updateXbps bool = false
disableGrubMenu bool updatePkgs bool = false
ttfFontsDir = "host/ui/fonts/TTF" clearCache bool = false
disableGrubMenu bool = false
ttfFontsDir string = "host/ui/fonts/TTF"
hyprlandRepo string = "https://github.com/void-land/hyprland-void-packages/releases/latest/download/"
) )
var packages = map[string][]string{ var packages = map[string][]string{
"VOID_REPOS": {"void-repo-multilib", "void-repo-nonfree"}, "VOID_REPOS": {"void-repo-multilib2", "void-repo-nonfree"},
"CONTAINER_PACKAGES": {"podman", "podman-compose", "catatonit"}, "CONTAINER_PACKAGES": {"podman", "podman-compose", "catatonit"},
"BASE_PACKAGES": {"fontconfig", "fontconfig-32bit", "inetutils", "v4l2loopback", "bind-utils", "zellij", "bat", "dust", "aria2", "fzf", "neofetch", "bat", "zsh", "fish-shell", "brightnessctl", "bluez", "cronie", "git", "stow", "eza", "dbus", "seatd", "elogind", "polkit", "NetworkManager", "gnome-keyring", "polkit-gnome", "pipewire", "wireplumber", "inotify-tools", "xorg", "gnome-keyring", "polkit-gnome", "mtpfs", "ffmpeg", "libnotify"}, "BASE_PACKAGES": {"fontconfig", "fontconfig-32bit", "inetutils", "v4l2loopback", "bind-utils", "zellij", "bat", "dust", "aria2", "fzf", "neofetch", "bat", "zsh", "fish-shell", "brightnessctl", "bluez", "cronie", "git", "stow", "eza", "dbus", "seatd", "elogind", "polkit", "NetworkManager", "gnome-keyring", "polkit-gnome", "pipewire", "wireplumber", "inotify-tools", "xorg", "gnome-keyring", "polkit-gnome", "mtpfs", "ffmpeg", "libnotify"},
"DEVEL_PACKAGES": {"glib", "pango-devel", "gdk-pixbuf-devel", "libdbusmenu-gtk3-devel", "glib-devel", "gtk+3-devel", "gtk-layer-shell-devel", "base-devel", "startup-notification-devel", "cairo-devel", "xcb-util-devel", "xcb-util-cursor-devel", "xcb-util-xrm-devel", "xcb-util-wm-devel"}, "DEVEL_PACKAGES": {"cmake", "glib", "pango-devel", "gdk-pixbuf-devel", "libdbusmenu-gtk3-devel", "glib-devel", "gtk+3-devel", "gtk-layer-shell-devel", "base-devel", "startup-notification-devel", "cairo-devel", "xcb-util-devel", "xcb-util-cursor-devel", "xcb-util-xrm-devel", "xcb-util-wm-devel"},
"AMD_DRIVERS": {"opencl2-headers", "mesa-32bit", "mesa-dri", "mesa-vaapi", "mesa-dri-32bit", "mesa-vaapi-32bit", "libglvnd-32bit", "libglapi-32bit", "opencv", "Vulkan-Headers", "Vulkan-Tools", "Vulkan-ValidationLayers-32bit", "mesa-vulkan-radeon", "mesa-vulkan-radeon-32bit", "vulkan-loader", "vulkan-loader-32bit", "libspa-vulkan", "libspa-vulkan-32bit", "amdvlk"}, "AMD_DRIVERS": {"opencl2-headers", "mesa-32bit", "mesa-dri", "mesa-vaapi", "mesa-dri-32bit", "mesa-vaapi-32bit", "libglvnd-32bit", "libglapi-32bit", "opencv", "Vulkan-Headers", "Vulkan-Tools", "Vulkan-ValidationLayers-32bit", "mesa-vulkan-radeon", "mesa-vulkan-radeon-32bit", "vulkan-loader", "vulkan-loader-32bit", "libspa-vulkan", "libspa-vulkan-32bit", "amdvlk"},
"HYPRLAND_PACKAGES": {"qt5-wayland", "qt6-wayland", "qt6ct", "qt5ct", "noto-fonts-emoji", "ddcutil", "socat", "eww", "nerd-fonts-symbols-ttf", "Waybar", "avizo", "dunst", "swaybg", "mpvpaper", "grim", "jq", "slurp", "cliphist", "wl-clipboard", "swayidle", "pavucontrol", "nemo", "eog", "pavucontrol", "evince", "xorg-server-xwayland", "xdg-desktop-portal-gtk", "xdg-desktop-portal-wlr", "xdg-utils", "xdg-user-dirs", "xdg-user-dirs-gtk", "qt5-x11extras"}, "HYPRLAND_REQUIRED_PACKAGES": {"qt5-wayland", "qt6-wayland", "qt6ct", "qt5ct", "noto-fonts-emoji", "ddcutil", "socat", "eww", "nerd-fonts-symbols-ttf", "Waybar", "avizo", "dunst", "swaybg", "mpvpaper", "grim", "jq", "slurp", "cliphist", "wl-clipboard", "swayidle", "pavucontrol", "nemo", "eog", "pavucontrol", "evince", "xorg-server-xwayland", "xdg-desktop-portal-gtk", "xdg-desktop-portal-wlr", "xdg-utils", "xdg-user-dirs", "xdg-user-dirs-gtk", "qt5-x11extras"},
"SYSTEM_APPS": {"alacritty", "octoxbps", "blueman", "wifish", "wpa_gui", "glow"}, "SYSTEM_APPS": {"alacritty", "octoxbps", "blueman", "wifish", "wpa_gui", "glow"},
} }
var services = []string{ var services = []string{
@ -39,8 +41,11 @@ var services = []string{
func main() { func main() {
fullInstall := flag.Bool("s", false, "Full install") fullInstall := flag.Bool("s", false, "Full install")
installFonts := flag.Bool("f", false, "Install host fonts") installFonts := flag.Bool("f", false, "Install host fonts")
showHelp := flag.Bool("h", false, "Show help") showHelp := flag.Bool("h", false, "Show help")
flag.Parse() flag.Parse()
if *showHelp || (!*fullInstall && !*installFonts) { if *showHelp || (!*fullInstall && !*installFonts) {
@ -52,21 +57,25 @@ func main() {
if *fullInstall { if *fullInstall {
utils.CheckSudo() utils.CheckSudo()
updateSystem() // updateSystem()
clearPkgsCache() // clearPackagesCache()
installPackages() // setupHyprlandRepo()
addUserToGroups() // syncXbps()
enableServices() setupPackages()
enablePipewire() // addUserToGroups()
// setupServices()
setupPipewire()
disableGrubMenuFunc() disableGrubMenuFunc()
log.Println("Setup is done, please log out and log in") utils.LogColoredMessage("Setup is done, please log out and log in", utils.ColorGreen)
} }
if *installFonts { if *installFonts {
@ -101,7 +110,7 @@ func updateSystem() {
} }
} }
func clearPkgsCache() { func clearPackagesCache() {
if clearCache { if clearCache {
utils.LogMessage("Clear package manager cache \n") utils.LogMessage("Clear package manager cache \n")
@ -115,77 +124,96 @@ func clearPkgsCache() {
} }
} }
func packagesInstaller(packageList []string) { func setupHyprlandRepo() {
utils.LogColoredMessage(fmt.Sprintf("Installing %s \n", packageList), utils.ColorGreen) utils.LogColoredMessage("Installing hyprland repo \n")
args := append([]string{"xbps-install", "-Sy"}, packageList...) filePath := "/etc/xbps.d/hyprland-packages.conf"
utils.RunCommand("sudo", args...) content := fmt.Sprintf("repository=%s", hyprlandRepo)
// utils.LogColoredMessage(fmt.Sprintf("%s packages installed", setName), utils.ColorGreen) err := utils.WriteToFile(filePath, content)
if err != nil {
fmt.Println("Error:", err)
} else {
utils.LogColoredMessage(fmt.Sprintf("Repo added to %s \n", filePath), utils.ColorGreen)
}
} }
func installPackages() { func syncXbps() {
utils.LogColoredMessage("Syncing repos \n")
utils.RunCommand("sudo", "xbps-install", "-S")
}
func setupPackages() {
utils.LogColoredMessage("Installing required packages \n") utils.LogColoredMessage("Installing required packages \n")
for _, packageSet := range packages { for _, packageList := range packages {
packagesInstaller(packageSet) args := append([]string{"xbps-install", "-y"}, packageList...)
utils.RunCommand("sudo", args...)
} }
} }
func addUserToGroups() { func addUserToGroups() {
utils.LogMessage("Add user to needed groups") utils.LogMessage("Add user to needed groups \n")
utils.RunCommand("sudo", "usermod", "-a", os.Getenv("USER"), "-G", "_seatd") utils.RunCommand("sudo", "usermod", "-a", os.Getenv("USER"), "-G", "_seatd")
utils.RunCommand("sudo", "usermod", "-a", os.Getenv("USER"), "-G", "bluetooth") utils.RunCommand("sudo", "usermod", "-a", os.Getenv("USER"), "-G", "bluetooth")
utils.LogMessage("User added to needed groups")
utils.LogMessage("User added to needed groups \n")
} }
func enableServices() { func setupServices() {
utils.LogMessage("Enable services") utils.LogMessage("Enable services")
for _, service := range services { for _, service := range services {
targetService := filepath.Join("/etc/sv", service) targetService := filepath.Join("/etc/sv", service)
if _, err := os.Stat(filepath.Join("/var/service", service)); err == nil { if _, err := os.Stat(filepath.Join("/var/service", service)); err == nil {
utils.LogMessage(fmt.Sprintf("Service %s already exists, skipping", targetService)) utils.LogMessage(fmt.Sprintf("Service %s already exists, skipping", targetService))
} else if _, err := os.Stat(targetService); os.IsNotExist(err) { } else if _, err := os.Stat(targetService); os.IsNotExist(err) {
utils.LogMessage(fmt.Sprintf("Service %s is not installed", targetService)) utils.LogMessage(fmt.Sprintf("Service %s is not installed", targetService))
} else { } else {
utils.RunCommand("sudo", "ln", "-s", targetService, "/var/service") utils.RunCommand("sudo", "ln", "-s", targetService, "/var/service")
utils.LogMessage(fmt.Sprintf("Service %s enabled", service)) utils.LogMessage(fmt.Sprintf("Service %s enabled", service))
} }
} }
utils.LogMessage("Services enabled") utils.LogMessage("Services enabled")
} }
func enablePipewire() { func setupPipewire() {
utils.LogMessage("Enable Pipewire") if installPipewire {
utils.RunCommand("sudo", "ln", "-s", "/usr/share/applications/pipewire.desktop", "/etc/xdg/autostart") utils.LogMessage("Setup pipwire \n")
utils.RunCommand("sudo", "ln", "-s", "/usr/share/applications/pipewire-pulse.desktop", "/etc/xdg/autostart")
utils.RunCommand("sudo", "ln", "-s", "/usr/share/applications/wireplumber.desktop", "/etc/xdg/autostart") utils.RunCommand("sudo", "ln", "-sf", "/usr/share/applications/pipewire.desktop", "/etc/xdg/autostart")
utils.LogMessage("Pipewire enabled") utils.RunCommand("sudo", "ln", "-sf", "/usr/share/applications/pipewire-pulse.desktop", "/etc/xdg/autostart")
utils.RunCommand("sudo", "ln", "-sf", "/usr/share/applications/wireplumber.desktop", "/etc/xdg/autostart")
} else {
utils.LogColoredMessage("Skipping pipewire setup \n", utils.ColorRed)
}
} }
func disableGrubMenuFunc() { func disableGrubMenuFunc() {
if disableGrubMenu { if disableGrubMenu {
utils.LogMessage("Disable grub menu") utils.LogMessage("Disable grub menu")
appendToFile("/etc/default/grub", "GRUB_TIMEOUT=0")
appendToFile("/etc/default/grub", "GRUB_TIMEOUT_STYLE=hidden") utils.AppendToFile("/etc/default/grub", "GRUB_TIMEOUT=0")
appendToFile("/etc/default/grub", `GRUB_CMDLINE_LINUX_DEFAULT="loglevel=1 quiet splash"`) utils.AppendToFile("/etc/default/grub", "GRUB_TIMEOUT_STYLE=hidden")
utils.AppendToFile("/etc/default/grub", `GRUB_CMDLINE_LINUX_DEFAULT="loglevel=1 quiet splash"`)
utils.RunCommand("sudo", "update-grub") utils.RunCommand("sudo", "update-grub")
utils.LogMessage("Grub menu disabled") utils.LogMessage("Grub menu disabled")
} else { } else {
utils.LogMessage("Skipping grub menu disable") utils.LogColoredMessage("Skipping grub menu disable \n", utils.ColorRed)
} }
} }
func appendToFile(filename, text string) {
f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644)
utils.Check(err, fmt.Sprintf("open file %s", filename))
defer f.Close()
_, err = f.WriteString(text + "\n")
utils.Check(err, fmt.Sprintf("write to file %s", filename))
}
func installTtfFonts() { func installTtfFonts() {
files, err := filepath.Glob(filepath.Join(ttfFontsDir, "*")) files, err := filepath.Glob(filepath.Join(ttfFontsDir, "*"))

View file

@ -49,11 +49,49 @@ func Check(err error, message string) {
} }
func RunCommand(cmd string, args ...string) { func RunCommand(cmd string, args ...string) {
LogMessage(fmt.Sprintf("Running command: %s %s", cmd, strings.Join(args, " "))) LogColoredMessage(fmt.Sprintf("Running command: %s %s", cmd, strings.Join(args, " ")), ColorPurple)
out, err := exec.Command(cmd, args...).CombinedOutput() out, err := exec.Command(cmd, args...).CombinedOutput()
Check(err, fmt.Sprintf("%s %s", cmd, strings.Join(args, " "))) if err != nil {
// LogMessage(fmt.Sprintf("Command failed: %s %s\nError: %v", cmd, strings.Join(args, " "), err))
LogMessage(string(out)) LogColoredMessage(fmt.Sprintf("Error Output: %s", string(out)), ColorRed)
return
}
if len(out) > 0 {
LogColoredMessage(string(out), ColorCyan)
}
}
func WriteToFile(filePath, content string) error {
file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
if err != nil {
return fmt.Errorf("failed to open file: %w", err)
}
defer file.Close()
_, err = file.WriteString(content)
if err != nil {
return fmt.Errorf("failed to write to file: %w", err)
}
return nil
}
func AppendToFile(filename, text string) {
f, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0644)
Check(err, fmt.Sprintf("open file %s", filename))
defer f.Close()
_, err = f.WriteString(text + "\n")
Check(err, fmt.Sprintf("write to file %s", filename))
} }