1
1
package system
2
2
3
3
import (
4
+ "bufio"
5
+ "strings"
4
6
"fmt"
5
7
"log"
6
8
"os"
@@ -14,39 +16,88 @@ func Run() {
14
16
osType := runtime .GOOS
15
17
fmt .Println ("Detected OS Type:" , osType )
16
18
17
- switch osType {
18
- case "darwin" :
19
- fmt .Println ("MacOS is not supported" )
20
- case "windows" :
21
- fmt .Println ("Windows is not supported" )
22
- case "linux" :
23
- distro , baseDistro := utils .DetectDistro ()
24
- if distro == "unknown" && baseDistro == "unknown" {
25
- log .Println ("Failed to fetch the details of your distro" )
26
- }
27
- fmt .Println ("Distribution:" , distro )
28
- fmt .Println ("Built On:" , baseDistro )
29
- packages := utils .FetchPackages (baseDistro )
30
- jsonObj , err := output .BuildSystemJSON (osType , distro , baseDistro , packages )
31
- if err != nil {
32
- log .Println ("Error marshalling JSON:" , err )
33
- } else {
34
- if err := os .MkdirAll (outputSysDir , 0744 ); err != nil {
35
- log .Println ("Error creating sys output directory:" , err )
36
- }
37
- if err := os .WriteFile (jsonOutputPath , jsonObj , 0644 ); err != nil {
38
- log .Println ("Error writing JSON output:" , err )
39
- }
40
- if err := os .MkdirAll (outputScriptsDir , 0744 ); err != nil {
41
- log .Println ("Error creating scripts output directory:" , err )
42
- }
43
- if err := output .GenerateInstallScript (baseDistro , packages , scriptOutputPath ); err != nil {
44
- log .Println ("Error generating install script:" , err )
45
- } else {
46
- fmt .Println ("Script generated successfully at:" , scriptOutputPath )
47
- }
48
- }
49
- default :
50
- fmt .Println ("OS not supported" )
51
- }
19
+ switch osType {
20
+ case "darwin" :
21
+ fmt .Println ("MacOS is not supported" )
22
+ return
23
+ case "windows" :
24
+ fmt .Println ("Windows is not supported" )
25
+ return
26
+ case "linux" :
27
+ showMenu () ////main menu component
28
+ default :
29
+ fmt .Println ("OS not supported" )
30
+ }
31
+ }
32
+
33
+ //showMenu displays the main menu for Linux users
34
+ //MUST BE CHANGED IN THE FUTURE
35
+ func showMenu () {
36
+ scanner := bufio .NewScanner (os .Stdin )
37
+
38
+ for {
39
+ fmt .Println ("\n === SysReplicate - Distro Hopping Tool ===" )
40
+ fmt .Println ("1. Generate package replication files" )
41
+ fmt .Println ("2. Backup SSH/GPG keys" )
42
+ fmt .Println ("3. Exit" )
43
+ fmt .Print ("Choose an option (1-3): " )
44
+
45
+ if ! scanner .Scan () {
46
+ break
47
+ }
48
+
49
+ choice := strings .TrimSpace (scanner .Text ())
50
+
51
+ switch choice {
52
+ case "1" :
53
+ runPackageReplication ()
54
+ case "2" :
55
+ RunBackup ()
56
+ case "3" :
57
+ fmt .Println () //exit
58
+ return
59
+ default :
60
+ fmt .Println ("Invalid choice. Please select 1, 2, or 3." )
61
+ }
62
+ }
63
+ }
64
+
65
+ //this handles the original package replication functionality
66
+ func runPackageReplication () {
67
+ distro , baseDistro := utils .DetectDistro ()
68
+ if distro == "unknown" && baseDistro == "unknown" {
69
+ log .Println ("Failed to fetch the details of your distro" )
70
+ return
71
+ }
72
+
73
+ fmt .Println ("Distribution:" , distro )
74
+ fmt .Println ("Built On:" , baseDistro )
75
+
76
+ packages := utils .FetchPackages (baseDistro )
77
+ jsonObj , err := output .BuildSystemJSON ("linux" , distro , baseDistro , packages )
78
+ if err != nil {
79
+ log .Println ("Error marshalling JSON:" , err )
80
+ return
81
+ }
82
+
83
+ if err := os .MkdirAll (outputSysDir , 0744 ); err != nil {
84
+ log .Println ("Error creating sys output directory:" , err )
85
+ return
86
+ }
87
+
88
+ if err := os .WriteFile (jsonOutputPath , jsonObj , 0644 ); err != nil {
89
+ log .Println ("Error writing JSON output:" , err )
90
+ return
91
+ }
92
+
93
+ if err := os .MkdirAll (outputScriptsDir , 0744 ); err != nil {
94
+ log .Println ("Error creating scripts output directory:" , err )
95
+ return
96
+ }
97
+
98
+ if err := output .GenerateInstallScript (baseDistro , packages , scriptOutputPath ); err != nil {
99
+ log .Println ("Error generating install script:" , err )
100
+ } else {
101
+ fmt .Println ("Script generated successfully at:" , scriptOutputPath )
102
+ }
52
103
}
0 commit comments