diff --git a/modules/neovim/default.nix b/modules/neovim/default.nix
index 8fc88e8..ea41375 100644
--- a/modules/neovim/default.nix
+++ b/modules/neovim/default.nix
@@ -68,7 +68,14 @@ in
lsp = import ./plugins/lsp.nix;
lspkind.enable = true;
lualine.enable = true;
- luasnip.enable = true;
+ luasnip = {
+ enable = true;
+ fromVscode = [
+ {
+ paths = ./snippets;
+ }
+ ];
+ };
nix.enable = true;
nvim-autopairs.enable = true;
telescope = import ./plugins/telescope.nix;
diff --git a/modules/neovim/snippets/go.json b/modules/neovim/snippets/go.json
new file mode 100644
index 0000000..aa470f1
--- /dev/null
+++ b/modules/neovim/snippets/go.json
@@ -0,0 +1,71 @@
+{
+ "type function declaration": {
+ "prefix": "tyf",
+ "body": "type ${1:name} func($3) $4",
+ "description": "Snippet for a type function declaration"
+ },
+ "type interface declaration": {
+ "prefix": "tyi",
+ "body": "type ${1:name} interface {\n\t$0\n}",
+ "description": "Snippet for a type interface"
+ },
+ "type struct declaration": {
+ "prefix": "tys",
+ "body": "type ${1:name} struct {\n\t$0\n}",
+ "description": "Snippet for a struct declaration"
+ },
+ "package main and main function": {
+ "prefix": "pkgm",
+ "body": "package main\n\nfunc main() {\n\t$0\n}",
+ "description": "Snippet for main package & function"
+ },
+ "function declaration": {
+ "prefix": "func",
+ "body": "func $1($2) $3 {\n\t$0\n}",
+ "description": "Snippet for function declaration"
+ },
+ "if err != nil": {
+ "prefix": "ir",
+ "body": "if err != nil {\n\t${1:return ${2:nil, }${3:err}}\n}",
+ "description": "Snippet for if err != nil"
+ },
+ "http handler declaration": {
+ "prefix": "hand",
+ "body": "func $1(${2:w} http.ResponseWriter, ${3:r} *http.Request) {\n\t$0\n}",
+ "description": "Snippet for http handler declaration"
+ },
+ "table driven test": {
+ "prefix": "tdt",
+ "body": "func Test$1(t *testing.T) {\n\ttestCases := []struct {\n\t\tdesc\tstring\n\t\t$2\n\t}{\n\t\t{\n\t\t\tdesc: \"$3\",\n\t\t\t$4\n\t\t},\n\t}\n\tfor _, tC := range testCases {\n\t\tt.Run(tC.desc, func(t *testing.T) {\n\t\t\t$0\n\t\t})\n\t}\n}",
+ "description": "Snippet for table driven test"
+ },
+ "json tag": {
+ "prefix": "json",
+ "body": "`json:\"$1\"`",
+ "description": "Snippet for struct json tag"
+ },
+ "for range statement": {
+ "prefix": "forr",
+ "body": "for ${1:_, }${2:v} := range ${3:v} {\n\t$0\n}",
+ "description": "Snippet for a for range loop"
+ },
+ "for statement": {
+ "prefix": "for",
+ "body": "for ${1}{\n\t$0\n}",
+ "description": "Snippet for a pure for loop"
+ },
+ "for n statement": {
+ "prefix": "fori",
+ "body": "for ${1:i} := ${2:0}; $1 < ${3:count}; $1${4:++} {\n\t$0\n}",
+ "description": "Snippet for a for loop"
+ },
+ "map declaration": {
+ "prefix": "map",
+ "body": "map[${1:type}]${2:type}",
+ "description": "Snippet for a map"
+ },
+ "if err := func(); err != nil": {
+ "pref": "ief",
+ "body": "if err := $1; err != nil {\n\t${2:return}}"
+ }
+}
diff --git a/modules/neovim/snippets/html.json b/modules/neovim/snippets/html.json
new file mode 100644
index 0000000..3e39743
--- /dev/null
+++ b/modules/neovim/snippets/html.json
@@ -0,0 +1,964 @@
+{
+ "doctype": {
+ "prefix": "doctype",
+ "body": [
+ "",
+ "$1"
+ ],
+ "description": "HTML - Defines the document type",
+ "scope": "text.html"
+ },
+ "a": {
+ "prefix": "a",
+ "body": "$2$3",
+ "description": "HTML - Defines a hyperlink",
+ "scope": "text.html"
+ },
+ "abbr": {
+ "prefix": "abbr",
+ "body": "$2$3",
+ "description": "HTML - Defines an abbreviation",
+ "scope": "text.html"
+ },
+ "address": {
+ "prefix": "address",
+ "body": [
+ "
",
+ "$1",
+ ""
+ ],
+ "description": "HTML - Defines an address element",
+ "scope": "text.html"
+ },
+ "area": {
+ "prefix": "area",
+ "body": "$5",
+ "description": "HTML - Defines an area inside an image map",
+ "scope": "text.html"
+ },
+ "article": {
+ "prefix": "article",
+ "body": [
+ "",
+ "\t$1",
+ ""
+ ],
+ "description": "HTML - Defines an article",
+ "scope": "text.html"
+ },
+ "aside": {
+ "prefix": "aside",
+ "body": [
+ "$2"
+ ],
+ "description": "HTML - Defines content aside from the page content",
+ "scope": "text.html"
+ },
+ "audio": {
+ "prefix": "audio",
+ "body": [
+ ""
+ ],
+ "description": "HTML - Defines sounds content",
+ "scope": "text.html"
+ },
+ "b": {
+ "prefix": "b",
+ "body": "$1$2",
+ "description": "HTML - Defines bold text",
+ "scope": "text.html"
+ },
+ "base": {
+ "prefix": "base",
+ "body": "$3",
+ "description": "HTML - Defines a base URL for all the links in a page",
+ "scope": "text.html"
+ },
+ "bdi": {
+ "prefix": "bdi",
+ "body": "$1$2",
+ "description": "HTML - Used to isolate text that is of unknown directionality",
+ "scope": "text.html"
+ },
+ "bdo": {
+ "prefix": "bdo",
+ "body": [
+ "",
+ "$2",
+ ""
+ ],
+ "description": "HTML - Defines the direction of text display",
+ "scope": "text.html"
+ },
+ "big": {
+ "prefix": "big",
+ "body": "$1$2",
+ "description": "HTML - Used to make text bigger",
+ "scope": "text.html"
+ },
+ "blockquote": {
+ "prefix": "blockquote",
+ "body": [
+ "",
+ "\t$1",
+ "
"
+ ],
+ "description": "HTML - Defines a long quotation",
+ "scope": "text.html"
+ },
+ "body": {
+ "prefix": "body",
+ "body": [
+ "",
+ "\t$0",
+ ""
+ ],
+ "description": "HTML - Defines the body element",
+ "scope": "text.html"
+ },
+ "br": {
+ "prefix": "br",
+ "body": "
",
+ "description": "HTML - Inserts a single line break",
+ "scope": "text.html"
+ },
+ "button": {
+ "prefix": "button",
+ "body": "$3",
+ "description": "HTML - Defines a push button",
+ "scope": "text.html"
+ },
+ "canvas": {
+ "prefix": "canvas",
+ "body": "$3",
+ "description": "HTML - Defines graphics",
+ "scope": "text.html"
+ },
+ "caption": {
+ "prefix": "caption",
+ "body": "$1$2",
+ "description": "HTML - Defines a table caption",
+ "scope": "text.html"
+ },
+ "cite": {
+ "prefix": "cite",
+ "body": "$1$2",
+ "description": "HTML - Defines a citation",
+ "scope": "text.html"
+ },
+ "code": {
+ "prefix": "code",
+ "body": "$1
$2",
+ "description": "HTML - Defines computer code text",
+ "scope": "text.html"
+ },
+ "col": {
+ "prefix": "col",
+ "body": "$2",
+ "description": "HTML - Defines attributes for table columns",
+ "scope": "text.html"
+ },
+ "colgroup": {
+ "prefix": "colgroup",
+ "body": [
+ "",
+ "\t$1",
+ ""
+ ],
+ "description": "HTML - Defines group of table columns",
+ "scope": "text.html"
+ },
+ "command": {
+ "prefix": "command",
+ "body": "$1$2",
+ "description": "HTML - Defines a command button [not supported]",
+ "scope": "text.html"
+ },
+ "datalist": {
+ "prefix": "datalist",
+ "body": [
+ ""
+ ],
+ "description": "HTML - Defines a dropdown list",
+ "scope": "text.html"
+ },
+ "dd": {
+ "prefix": "dd",
+ "body": "$1$2",
+ "description": "HTML - Defines a definition description",
+ "scope": "text.html"
+ },
+ "del": {
+ "prefix": "del",
+ "body": "$1$2",
+ "description": "HTML - Defines deleted text",
+ "scope": "text.html"
+ },
+ "details": {
+ "prefix": "details",
+ "body": [
+ "",
+ "\t$1",
+ " "
+ ],
+ "description": "HTML - Defines details of an element",
+ "scope": "text.html"
+ },
+ "dialog": {
+ "prefix": "dialog",
+ "body": "$2",
+ "description": "HTML - Defines a dialog (conversation)",
+ "scope": "text.html"
+ },
+ "dfn": {
+ "prefix": "dfn",
+ "body": "$1$2",
+ "description": "HTML - Defines a definition term",
+ "scope": "text.html"
+ },
+ "div": {
+ "prefix": "div",
+ "body": [
+ "",
+ "\t$1",
+ "
"
+ ],
+ "description": "HTML - Defines a section in a document",
+ "scope": "text.html"
+ },
+ "dl": {
+ "prefix": "dl",
+ "body": [
+ "",
+ "\t$1",
+ "
"
+ ],
+ "description": "HTML - Defines a definition list",
+ "scope": "text.html"
+ },
+ "dt": {
+ "prefix": "dt",
+ "body": "$1$2",
+ "description": "HTML - Defines a definition term",
+ "scope": "text.html"
+ },
+ "em": {
+ "prefix": "em",
+ "body": "$1$2",
+ "description": "HTML - Defines emphasized text",
+ "scope": "text.html"
+ },
+ "embed": {
+ "prefix": "embed",
+ "body": "