create my own plugins import
parent
d2beb68021
commit
66e34133b8
|
@ -0,0 +1,3 @@
|
|||
dotfiles/neovim/plugins.nix: dotfiles/neovim/plugins.json dotfiles/neovim/plugins.py
|
||||
nix-shell -p python37 --run "python dotfiles/neovim/plugins.py $< > $@"
|
||||
./nixfmt.sh $@
|
|
@ -1,2 +1,3 @@
|
|||
HERE="$(realpath $(dirname $0))"
|
||||
make
|
||||
darwin-rebuild $@ -I "darwin-config=$HERE/darwin/default.nix"
|
||||
|
|
|
@ -1,15 +1,6 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
let
|
||||
fzfDotVim = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "fzf.vim";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "junegunn";
|
||||
repo = "fzf.vim";
|
||||
rev = "359a80e3a34aacbd5257713b6a88aa085337166f";
|
||||
sha256 = "0a01g0gw59m57zizidvm9n89qh8lvj0aq4kyxy27i72ysclp3wsf";
|
||||
};
|
||||
};
|
||||
let plugins = import ./neovim/plugins.nix { inherit pkgs; };
|
||||
in {
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
|
@ -68,14 +59,16 @@ in {
|
|||
'';
|
||||
|
||||
packages.myVimPackage = {
|
||||
start = with pkgs.vimPlugins; [
|
||||
vim-sensible
|
||||
vim-surround
|
||||
start = with plugins; [
|
||||
tpope.vim-sensible
|
||||
tpope.vim-surround
|
||||
|
||||
# fzf
|
||||
pkgs.fzf
|
||||
fzfDotVim
|
||||
junegunn."fzf.vim"
|
||||
|
||||
# filetypes
|
||||
vim-nix
|
||||
LnL7.vim-nix
|
||||
];
|
||||
opt = with pkgs.vimPlugins; [ ];
|
||||
};
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
[
|
||||
"https://github.com/LnL7/vim-nix#a3eed01f4de995a51dfdd06287e44fcb231f6adf",
|
||||
"https://github.com/junegunn/fzf.vim#359a80e3a34aacbd5257713b6a88aa085337166f",
|
||||
"https://github.com/tpope/vim-sensible#67fe033b2b56b6f631a4c7a1179865178665f2a4",
|
||||
"https://github.com/tpope/vim-surround#fab8621670f71637e9960003af28365129b1dfd0"
|
||||
]
|
|
@ -0,0 +1,45 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
LnL7.vim-nix = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "vim-nix";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "LnL7";
|
||||
repo = "vim-nix";
|
||||
rev = "a3eed01f4de995a51dfdd06287e44fcb231f6adf";
|
||||
sha256 = "0pwdfwws1dj3705m00ghw3dvym5zbm00bfsj023gmbp6vr8wn6yi";
|
||||
};
|
||||
};
|
||||
|
||||
junegunn."fzf.vim" = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "fzf.vim";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "junegunn";
|
||||
repo = "fzf.vim";
|
||||
rev = "359a80e3a34aacbd5257713b6a88aa085337166f";
|
||||
sha256 = "0a01g0gw59m57zizidvm9n89qh8lvj0aq4kyxy27i72ysclp3wsf";
|
||||
};
|
||||
};
|
||||
|
||||
tpope.vim-sensible = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "vim-sensible";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "tpope";
|
||||
repo = "vim-sensible";
|
||||
rev = "67fe033b2b56b6f631a4c7a1179865178665f2a4";
|
||||
sha256 = "1jhj88n0xj6s6xjx5zs5906y6wwzr855wczk3f5myzs8z8y5cih5";
|
||||
};
|
||||
};
|
||||
|
||||
tpope.vim-surround = pkgs.vimUtils.buildVimPlugin {
|
||||
name = "vim-surround";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "tpope";
|
||||
repo = "vim-surround";
|
||||
rev = "fab8621670f71637e9960003af28365129b1dfd0";
|
||||
sha256 = "0lkc0isv1cqv34qfia9mjvnp1nzz0qqy3k47z8r3xzb7dxgymkw8";
|
||||
};
|
||||
};
|
||||
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
#!/usr/bin/env python
|
||||
import argparse
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
import textwrap
|
||||
from urllib.parse import urlparse
|
||||
from urllib.request import urlopen
|
||||
|
||||
def escape(input_):
|
||||
if '.' in input_:
|
||||
return '"{}"'.format(input_)
|
||||
return input_
|
||||
|
||||
|
||||
class GithubPackage:
|
||||
def __init__(self, url):
|
||||
self.url = url
|
||||
self._rev = url.fragment or None
|
||||
self._sha256 = None
|
||||
|
||||
def __str__(self):
|
||||
return '{} = {};'.format(self.attr(), self.expression())
|
||||
|
||||
def owner(self):
|
||||
return self.url.path.split('/')[1]
|
||||
|
||||
def repo(self):
|
||||
return self.url.path.split('/')[2]
|
||||
|
||||
def attr(self):
|
||||
return '{}.{}'.format(
|
||||
escape(self.owner()),
|
||||
escape(self.repo()),
|
||||
)
|
||||
|
||||
def rev(self):
|
||||
if self._rev is None:
|
||||
print('determining latest hash for {}'.format(self.attr()), file=sys.stderr)
|
||||
with urlopen('https://api.github.com/repos/{}/{}/commits'.format(self.owner(), self.repo())) as resp:
|
||||
self._rev = json.load(resp)[0]["sha"]
|
||||
|
||||
return self._rev
|
||||
|
||||
def sha256(self):
|
||||
if self._sha256 is None:
|
||||
print('prefetching sha256 for {}'.format(self.attr()), file=sys.stderr)
|
||||
self._sha256 = subprocess.check_output([
|
||||
'nix-prefetch-url',
|
||||
'--unpack',
|
||||
'https://github.com/{}/{}/archive/{}.tar.gz'.format(
|
||||
self.owner(),
|
||||
self.repo(),
|
||||
self.rev(),
|
||||
),
|
||||
]).decode('utf-8').strip()
|
||||
|
||||
return self._sha256
|
||||
|
||||
def expression(self):
|
||||
return textwrap.dedent('''\
|
||||
pkgs.vimUtils.buildVimPlugin {
|
||||
name = "%s";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "%s";
|
||||
repo = "%s";
|
||||
rev = "%s";
|
||||
sha256 = "%s";
|
||||
};
|
||||
}
|
||||
''') % (
|
||||
self.repo(),
|
||||
self.owner(),
|
||||
self.repo(),
|
||||
self.rev(),
|
||||
self.sha256(),
|
||||
)
|
||||
|
||||
def main(args):
|
||||
packages = []
|
||||
|
||||
for package in json.load(args.packages):
|
||||
url = urlparse(package)
|
||||
if 'github.com' in url.netloc:
|
||||
packages.append(GithubPackage(url))
|
||||
else:
|
||||
print("I don't know how to resolve {}".format(package), file=sys.stderr)
|
||||
return 1
|
||||
|
||||
print('{ pkgs, ... }:\n\n{\n')
|
||||
for package in packages:
|
||||
print('resolving {}'.format(package.attr()), file=sys.stderr)
|
||||
print(textwrap.indent(str(package), ' ') + '\n', file=sys.stdout)
|
||||
print('}')
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('packages', type=open)
|
||||
sys.exit(main(parser.parse_args()))
|
Reference in New Issue