Commit a2327ba
Changed files (5)
internal/golang/golang.go
@@ -48,18 +48,18 @@ func Install() error {
err := bashrcd()
if err != nil {
- return fmt.Errorf("failed to install bashrc.d env helper: %w", err)
+ return fmt.Errorf("installing bashrc.d env helper: %w", err)
}
goDir := filepath.Join(installDir, "go")
err = os.RemoveAll(goDir)
if err != nil {
- return fmt.Errorf("failed to cleanup old install: %w", err)
+ return fmt.Errorf("cleaning up old install: %w", err)
}
gr, err := gzip.NewReader(bytes.NewReader(goSrc))
if err != nil {
- return fmt.Errorf("failed to setup gzip reader: %w", err)
+ return fmt.Errorf("setting up gzip reader: %w", err)
}
tr := tar.NewReader(gr)
internal/nvim/nvim-linux-x86_64.tar.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02b808a3ee8fc30161e07fe3c3edfb24b28bd0295323ac5dbdd8ec7012cac67d
+size 10941468
internal/nvim/nvim.go
@@ -0,0 +1,125 @@
+package nvim
+
+import (
+ _ "embed"
+ "text/template"
+
+ "archive/tar"
+ "bytes"
+ "compress/gzip"
+ "errors"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "strings"
+)
+
+//go:embed nvim-linux-x86_64.tar.gz
+var nvimSrc []byte
+
+func bashrcd() error {
+ homeDir := os.Getenv("HOME")
+ installDir := filepath.Join(homeDir, ".local")
+ rcPath := filepath.Join(homeDir, ".bashrc.d", "nvim.sh")
+
+ const tmpl = `#!/bin/bash
+export PATH=$PATH:{{ .InstallDir }}/bin
+`
+
+ t, err := template.New("pathRC").Parse(tmpl)
+ if err != nil {
+ return err
+ }
+ f, err := os.Create(rcPath)
+ if err != nil {
+ return err
+ }
+ err = t.Execute(f, struct{ InstallDir string }{InstallDir: installDir})
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func Install() error {
+ homeDir := os.Getenv("HOME")
+ installDir := filepath.Join(homeDir, ".local")
+
+ err := bashrcd()
+ if err != nil {
+ err := fmt.Errorf("installing bashrc.d env helper: %w", err)
+ return err
+ }
+
+ nvimShareDir := filepath.Join(installDir, "share/nvim")
+ nvimLibDir := filepath.Join(installDir, "lib/nvim")
+ nvimBin := filepath.Join(installDir, "bin/nvim")
+ for _, path := range []string{nvimShareDir, nvimLibDir, nvimBin} {
+ err = os.RemoveAll(path)
+ if err != nil {
+ return fmt.Errorf("cleaning up old install path=%q: %w", path, err)
+ }
+ }
+
+ gr, err := gzip.NewReader(bytes.NewReader(nvimSrc))
+ if err != nil {
+ return fmt.Errorf("setting up gzip reader: %w", err)
+ }
+ tr := tar.NewReader(gr)
+
+ for {
+ header, err := tr.Next()
+ if err != nil {
+ if errors.Is(err, io.EOF) {
+ break
+ }
+ return err
+ }
+ mode := os.FileMode(header.Mode)
+
+ target := filepath.Join(installDir, header.Name)
+
+ // Strip the first component (nvim-linux-x86_64/)
+ parts := strings.Split(header.Name, "/")
+ if len(parts) > 0 {
+ parts = parts[1:]
+ if len(parts) == 0 {
+ continue
+ }
+ target = filepath.Join(append([]string{installDir}, parts...)...)
+ }
+
+ switch header.Typeflag {
+ case tar.TypeDir:
+ err = os.MkdirAll(target, mode)
+ if err != nil {
+ return err
+ }
+
+ case tar.TypeReg:
+ // Ensure parent directory exists
+ dir := filepath.Dir(target)
+ err = os.MkdirAll(dir, 0755)
+ if err != nil {
+ return err
+ }
+
+ flag := os.O_CREATE | os.O_WRONLY | os.O_TRUNC
+ f, err := os.OpenFile(target, flag, mode)
+ if err != nil {
+ return err
+ }
+ _, err = io.Copy(f, tr)
+ if err != nil {
+ return err
+ }
+ err = f.Close()
+ if err != nil {
+ return err
+ }
+ }
+ }
+
+ return nil
+}
.gitignore
@@ -0,0 +1,1 @@
+bindle
main.go
@@ -10,6 +10,7 @@ import (
"github.com/bryfry/bindle/internal/extractor"
"github.com/bryfry/bindle/internal/golang"
+ "github.com/bryfry/bindle/internal/nvim"
)
//go:embed home/**
@@ -41,4 +42,10 @@ func main() {
fmt.Println(err)
return // fmt.Errorf("config deploy failed: %w", path, err)
}
+
+ err = nvim.Install()
+ if err != nil {
+ fmt.Println(err)
+ return // fmt.Errorf("config deploy failed: %w", path, err)
+ }
}