package main import ( "flag" "fmt" "io/ioutil" "os" "os/exec" "path/filepath" "strings" ) var ( envFile = flag.String("env", "$HOME/.config/i3-wrapper/environment", "environment file with variable definitions") ) func main() { logFile, err := os.Create(filepath.Join(os.Getenv("HOME"), ".i3.log")) if err != nil { fmt.Fprintln(os.Stderr, err) } defer logFile.Close() os.Stdout = logFile os.Stderr = logFile for { cmd := exec.Command("i3") cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.Env = os.Environ() if envData, err := ioutil.ReadFile(os.ExpandEnv(*envFile)); err == nil { cmd.Env = append(cmd.Env, strings.Split(string(envData), "\n")...) } else { fmt.Println(err) } err = cmd.Start() if err != nil { fmt.Fprintln(os.Stderr, err) } err = cmd.Wait() if err != nil { fmt.Fprintln(os.Stderr, err) } if _, ok := err.(*exec.ExitError); ok { break } } }