aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/app/run.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/app/run.go')
-rw-r--r--internal/app/run.go52
1 files changed, 19 insertions, 33 deletions
diff --git a/internal/app/run.go b/internal/app/run.go
index b5eec825..0871e899 100644
--- a/internal/app/run.go
+++ b/internal/app/run.go
@@ -17,15 +17,9 @@ const (
sudoAskPass = "SUDO_ASKPASS"
)
const (
- LaunchMethodSudo = iota
+ LaunchMethodSudo uint8 = iota
+ LaunchMethodBwrap
LaunchMethodMachineCtl
-
- launchOptionLength
-)
-
-var (
- // LaunchOptions is set in main's cli.go
- LaunchOptions [launchOptionLength]bool
)
func (a *App) Run() {
@@ -34,34 +28,20 @@ func (a *App) Run() {
a.AppendEnv(term, t)
}
- commandBuilder := a.commandBuilderSudo
+ var commandBuilder func() (args []string)
- var toolPath string
-
- // dependency checks
- const sudoFallback = "Falling back to 'sudo', some desktop integration features may not work"
- if LaunchOptions[LaunchMethodMachineCtl] && !LaunchOptions[LaunchMethodSudo] { // sudo argument takes priority
- if !util.SdBooted() {
- fmt.Println("This system was not booted through systemd")
- fmt.Println(sudoFallback)
- } else if machineCtlPath, ok := util.Which("machinectl"); !ok {
- fmt.Println("Did not find 'machinectl' in PATH")
- fmt.Println(sudoFallback)
- } else {
- toolPath = machineCtlPath
- commandBuilder = a.commandBuilderMachineCtl
- }
- } else if sudoPath, ok := util.Which("sudo"); !ok {
- state.Fatal("Did not find 'sudo' in PATH")
- } else {
- toolPath = sudoPath
+ switch a.launchOption {
+ case LaunchMethodSudo:
+ commandBuilder = a.commandBuilderSudo
+ case LaunchMethodBwrap:
+ commandBuilder = a.commandBuilderBwrap
+ case LaunchMethodMachineCtl:
+ commandBuilder = a.commandBuilderMachineCtl
+ default:
+ panic("unreachable")
}
- if system.V.Verbose {
- fmt.Printf("Selected launcher '%s'\n", toolPath)
- }
-
- cmd := exec.Command(toolPath, commandBuilder()...)
+ cmd := exec.Command(a.toolPath, commandBuilder()...)
cmd.Env = []string{}
cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout
@@ -122,6 +102,12 @@ func (a *App) commandBuilderSudo() (args []string) {
return
}
+func (a *App) commandBuilderBwrap() (args []string) {
+ // TODO: build bwrap command
+ state.Fatal("bwrap")
+ panic("unreachable")
+}
+
func (a *App) commandBuilderMachineCtl() (args []string) {
args = make([]string, 0, 9+len(a.env))