diff options
Diffstat (limited to 'cli.go')
| -rw-r--r-- | cli.go | 67 |
1 files changed, 67 insertions, 0 deletions
@@ -0,0 +1,67 @@ +package main + +import ( + "errors" + "flag" + "fmt" + "os" + "os/user" +) + +var ( + ego *user.User + command []string + verbose bool + method = machinectl + + userName string + methodFlags [2]bool + printVersion bool +) + +const ( + machinectl uint8 = iota + machinectlBare + sudo +) + +func init() { + flag.StringVar(&userName, "u", "ego", "Specify a username") + flag.BoolVar(&methodFlags[0], "sudo", false, "Use 'sudo' to change user") + flag.BoolVar(&methodFlags[1], "bare", false, "Use 'machinectl' but skip xdg-desktop-portal setup") + flag.BoolVar(&verbose, "v", false, "Verbose output") + flag.BoolVar(&printVersion, "V", false, "Print version") +} + +func copyArgs() { + if printVersion { + fmt.Println(Version) + os.Exit(0) + } + + command = flag.Args() + + switch { // zero value is machinectl + case methodFlags[0]: + method = sudo + case methodFlags[1]: + method = machinectlBare + } + + if u, err := user.Lookup(userName); err != nil { + if errors.As(err, new(user.UnknownUserError)) { + fmt.Println("unknown user", userName) + } else { + // unreachable + panic(err) + } + + os.Exit(1) + } else { + ego = u + } + + if verbose { + fmt.Println("Running command", command, "as user", ego.Username, "("+ego.Uid+")") + } +} |
