code: func IsUpdateable(ctx context.Context) error {
  	fn, err := executable(ctx)
  	if err != nil {
  		return err
  	}
  	out.Debug(ctx, "isUpdateable - File: %s", fn)
  	// check if this is a test binary
  	if strings.HasSuffix(filepath.Base(fn), ".test") {
  		return nil
  	}
  
  	// check if we want to force updateability
  	if uf := os.Getenv("GOPASS_FORCE_UPDATE"); uf != "" {
  		out.Debug(ctx, "updateable due to force flag")
  		return nil
  	}
  
  	// check if file is in GOPATH
  	if gp := os.Getenv("GOPATH"); strings.HasPrefix(fn, gp) {
  		return fmt.Errorf("use go get -u to update binary in GOPATH")
  	}
  
  	// check file
  	fi, err := os.Stat(fn)
  	if err != nil {
  		return err
  	}
  	if !fi.Mode().IsRegular() {
  		return fmt.Errorf("not a regular file")
  	}
  	if err := unix.Access(fn, unix.W_OK); err != nil {
  		return err
  	}
  
  	// check dir
  	fdir := filepath.Dir(fn)
  	return unix.Access(fdir, unix.W_OK)
  }
docs: // IsUpdateable returns an error if this binary is not updateable