You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.3 KiB
98 lines
2.3 KiB
package main
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/akamensky/argparse"
|
|
)
|
|
|
|
func main() {
|
|
parser := argparse.NewParser("create-desktop-shortcut", "Create Linux desktop shortcut")
|
|
filepath := parser.StringPositional(nil)
|
|
entryName := parser.String("n", "name", &argparse.Options{Required: false, Help: "Name of the desktop entry"})
|
|
iconPath := parser.String("i", "icon", &argparse.Options{Required: false, Help: "Path to the icon"})
|
|
|
|
err := parser.Parse(os.Args)
|
|
if err != nil {
|
|
fmt.Println(parser.Usage(err))
|
|
return
|
|
}
|
|
|
|
// Start generating all options
|
|
if *entryName == "" {
|
|
*entryName = *filepath
|
|
}
|
|
|
|
currPath, err := os.Getwd()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
if !strings.HasPrefix(*filepath, "/") {
|
|
*filepath = currPath + "/" + *filepath
|
|
}
|
|
|
|
if *iconPath == "" {
|
|
*iconPath = *filepath
|
|
} else if !strings.HasPrefix(*iconPath, "/") {
|
|
*iconPath = currPath + "/" + *iconPath
|
|
}
|
|
|
|
if !strings.HasPrefix(*filepath, "/") {
|
|
*filepath = currPath + "/" + *filepath
|
|
}
|
|
// End generating all options
|
|
|
|
reader := bufio.NewReader(os.Stdin)
|
|
fmt.Printf("Confirm if the filepath is %s [Y/n]: ", *filepath)
|
|
userChoice, err := reader.ReadString('\n')
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
if userChoice == "\n" || strings.ToUpper(userChoice) == "Y\n" {
|
|
fmt.Printf("Confirming the filepath (%s)...\n", *filepath)
|
|
} else {
|
|
fmt.Println("Aborted")
|
|
return
|
|
}
|
|
|
|
desktopFilepath := "/.local/share/applications/" + *entryName + ".desktop"
|
|
homePath, err := os.UserHomeDir()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
desktopFilepath = homePath + desktopFilepath
|
|
|
|
fmt.Printf("\n")
|
|
fmt.Printf("Program Path: %s\n", *filepath)
|
|
fmt.Printf("Program Name: %s\n", *entryName)
|
|
fmt.Printf("Icon Path: %s\n", *iconPath)
|
|
fmt.Printf("\n")
|
|
|
|
fmt.Printf("Confirm if the file should be auto-generated in %s [Y/n]: ", desktopFilepath)
|
|
userChoice, err = reader.ReadString('\n')
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
generatedDesktopFormat := generateDesktopFormat(*entryName, *filepath, *iconPath)
|
|
|
|
if userChoice == "\n" || strings.ToUpper(userChoice) == "Y\n" {
|
|
err = os.WriteFile(*&desktopFilepath, []byte(generatedDesktopFormat), 0644)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
fmt.Printf("\nFile created successfully to %s", *&desktopFilepath)
|
|
} else {
|
|
fmt.Println("\nGenerated desktop format:\n")
|
|
fmt.Println(generatedDesktopFormat)
|
|
return
|
|
}
|
|
|
|
}
|