72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"net/http"
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
|
|
"github.com/neovim/go-client/nvim"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var nvim_config_dir string
|
|
|
|
var syntaxes = map[string]string{
|
|
"djot.vim": "https://github.com/jgm/djot/raw/main/editors/vim/syntax/djot.vim",
|
|
"jinja.vim": "https://gitlab.com/HiPhish/jinja.vim/-/raw/master/syntax/jinja.vim",
|
|
"kcl.vim": "https://github.com/kcl-lang/kcl.nvim/raw/main/syntax/kcl.vim",
|
|
"nftables.vim": "https://github.com/nfnty/vim-nftables/raw/master/syntax/nftables.vim",
|
|
"rescript.vim": "https://github.com/rescript-lang/vim-rescript/raw/master/syntax/rescript.vim",
|
|
"vifm.vim": "https://github.com/vifm/vifm.vim/raw/master/syntax/vifm.vim",
|
|
}
|
|
|
|
func main() {
|
|
logrus.SetFormatter(&logrus.TextFormatter{
|
|
DisableTimestamp: true,
|
|
DisableQuote: true,
|
|
})
|
|
logrus.SetOutput(os.Stderr)
|
|
logrus.SetLevel(logrus.InfoLevel)
|
|
|
|
// Intentionally don't handle any errors from this point (only log them to stderr).
|
|
// They're not really important in this small program.
|
|
|
|
vim, err := nvim.NewChildProcess(nvim.ChildProcessArgs("--embed"))
|
|
if err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
if err := vim.ExecLua("return vim.fn.stdpath(...)", &nvim_config_dir, "config"); err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
vim.Close()
|
|
|
|
var wg sync.WaitGroup
|
|
for name, url := range syntaxes {
|
|
wg.Add(1)
|
|
go func(name, url string) {
|
|
defer wg.Done()
|
|
|
|
resp, err := http.Get(url)
|
|
if err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
out, err := os.OpenFile(filepath.Join(nvim_config_dir, "after", "syntax", name), os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0o644)
|
|
if err != nil {
|
|
logrus.Error(err)
|
|
return
|
|
}
|
|
defer out.Close()
|
|
|
|
_, err = out.ReadFrom(resp.Body)
|
|
if err != nil {
|
|
logrus.Error(err)
|
|
}
|
|
}(name, url)
|
|
}
|
|
wg.Wait()
|
|
}
|