Initial commit

main
Torpenn 2025-07-16 19:22:02 +02:00
parent db14bb9ac4
commit 3a820d6b4d
30 changed files with 1886 additions and 173 deletions

173
dot_zshrc
View File

@ -1,173 +0,0 @@
export ZSH="/home/torrpenn/.oh-my-zsh"
ZSH_THEME="robbyrussell"
plugins=(git history zsh-autosuggestions)
source $ZSH/oh-my-zsh.sh
# nvim configuration
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
alias vim="nvim"
alias vi="nvim"
alias ls="lsd -l"
# tmux config
export TERM="xterm-256color"
alias tmux="tmux -2"
# This alias runs the Cursor Setup Wizard, simplifying installation and configuration.
# For more details, visit: https://github.com/jorcelinojunior/cursor-setup-wizard
alias cursor-setup="/home/theodugautier/cursor-setup-wizard/cursor_setup.sh"
# =============================================================================
#
# Utility functions for zoxide.
#
# pwd based on the value of _ZO_RESOLVE_SYMLINKS.
function __zoxide_pwd() {
\builtin pwd -L
}
# cd + custom logic based on the value of _ZO_ECHO.
function __zoxide_cd() {
# shellcheck disable=SC2164
\builtin cd -- "$@"
}
# =============================================================================
#
# Hook configuration for zoxide.
#
# Hook to add new entries to the database.
function __zoxide_hook() {
# shellcheck disable=SC2312
\command zoxide add -- "$(__zoxide_pwd)"
}
# Initialize hook.
\builtin typeset -ga precmd_functions
\builtin typeset -ga chpwd_functions
# shellcheck disable=SC2034,SC2296
precmd_functions=("${(@)precmd_functions:#__zoxide_hook}")
# shellcheck disable=SC2034,SC2296
chpwd_functions=("${(@)chpwd_functions:#__zoxide_hook}")
chpwd_functions+=(__zoxide_hook)
# Report common issues.
function __zoxide_doctor() {
[[ ${_ZO_DOCTOR:-1} -ne 0 ]] || return 0
[[ ${chpwd_functions[(Ie)__zoxide_hook]:-} -eq 0 ]] || return 0
_ZO_DOCTOR=0
\builtin printf '%s\n' \
'zoxide: detected a possible configuration issue.' \
'Please ensure that zoxide is initialized right at the end of your shell configuration file (usually ~/.zshrc).' \
'' \
'If the issue persists, consider filing an issue at:' \
'https://github.com/ajeetdsouza/zoxide/issues' \
'' \
'Disable this message by setting _ZO_DOCTOR=0.' \
'' >&2
}
# =============================================================================
#
# When using zoxide with --no-cmd, alias these internal functions as desired.
#
# Jump to a directory using only keywords.
function __zoxide_z() {
__zoxide_doctor
if [[ "$#" -eq 0 ]]; then
__zoxide_cd ~
elif [[ "$#" -eq 1 ]] && { [[ -d "$1" ]] || [[ "$1" = '-' ]] || [[ "$1" =~ ^[-+][0-9]$ ]]; }; then
__zoxide_cd "$1"
elif [[ "$#" -eq 2 ]] && [[ "$1" = "--" ]]; then
__zoxide_cd "$2"
else
\builtin local result
# shellcheck disable=SC2312
result="$(\command zoxide query --exclude "$(__zoxide_pwd)" -- "$@")" && __zoxide_cd "${result}"
fi
}
# Jump to a directory using interactive search.
function __zoxide_zi() {
__zoxide_doctor
\builtin local result
result="$(\command zoxide query --interactive -- "$@")" && __zoxide_cd "${result}"
}
# =============================================================================
#
# Commands for zoxide. Disable these using --no-cmd.
#
function z() {
__zoxide_z "$@"
}
function zi() {
__zoxide_zi "$@"
}
# Completions.
if [[ -o zle ]]; then
__zoxide_result=''
function __zoxide_z_complete() {
# Only show completions when the cursor is at the end of the line.
# shellcheck disable=SC2154
[[ "${#words[@]}" -eq "${CURRENT}" ]] || return 0
if [[ "${#words[@]}" -eq 2 ]]; then
# Show completions for local directories.
_cd -/
elif [[ "${words[-1]}" == '' ]]; then
# Show completions for Space-Tab.
# shellcheck disable=SC2086
__zoxide_result="$(\command zoxide query --exclude "$(__zoxide_pwd || \builtin true)" --interactive -- ${words[2,-1]})" || __zoxide_result=''
# Set a result to ensure completion doesn't re-run
compadd -Q ""
# Bind '\e[0n' to helper function.
\builtin bindkey '\e[0n' '__zoxide_z_complete_helper'
# Sends query device status code, which results in a '\e[0n' being sent to console input.
\builtin printf '\e[5n'
# Report that the completion was successful, so that we don't fall back
# to another completion function.
return 0
fi
}
function __zoxide_z_complete_helper() {
if [[ -n "${__zoxide_result}" ]]; then
# shellcheck disable=SC2034,SC2296
BUFFER="z ${(q-)__zoxide_result}"
__zoxide_result=''
\builtin zle reset-prompt
\builtin zle accept-line
else
\builtin zle reset-prompt
fi
}
\builtin zle -N __zoxide_z_complete_helper
[[ "${+functions[compdef]}" -ne 0 ]] && \compdef __zoxide_z_complete z
fi
# =============================================================================
#
# To initialize zoxide, add this to your shell configuration file (usually ~/.zshrc):
#
# eval "$(zoxide init zsh)"

View File

@ -0,0 +1,6 @@
local ok, autopairs = pcall(require, "nvim-autopairs")
if (not ok) then return end
autopairs.setup({
disable_filetype = { "TelescopePrompt" , "vim" },
})

View File

@ -0,0 +1,69 @@
local ok, cmp = pcall(require, "cmp")
if (not ok) then return end
local lspkind = require 'lspkind'
local luasnip = require 'luasnip'
local has_words_before = function()
if vim.api.nvim_buf_get_option(0, "buftype") == "prompt" then return false end
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_text(0, line-1, 0, line-1, col, {})[1]:match("^%s*$") == nil
end
cmp.setup({
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<Tab>"] = vim.schedule_wrap(function(fallback)
if cmp.visible() and has_words_before() then
cmp.select_next_item({ behavior = cmp.SelectBehavior.Select })
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.close(),
['<CR>'] = cmp.mapping.confirm({
behavior = cmp.ConfirmBehavior.Replace,
select = true
}),
}),
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
{
name = 'buffer',
option = {
get_bufnrs = function ()
return vim.api.nvim_list_bufs()
end
}
},
{ name = 'path' },
{ name = 'luasnip' }
}),
formatting = {
format = lspkind.cmp_format({ with_text = false, maxwidth = 50 })
}
})
vim.cmd [[
set completeopt=menuone,noinsert,noselect
highlight! default link CmpItemKind CmpItemMenuDefault
]]

View File

@ -0,0 +1,4 @@
local ok, comment = pcall(require, "Comment")
if (not ok) then return end
comment.setup()

View File

@ -0,0 +1,47 @@
local ok, copilot = pcall(require, 'copilot')
if (not ok) then return end
copilot.setup({
panel = {
enabled = true, -- false for copilot-cmp
auto_refresh = false,
keymap = {
jump_prev = "[[",
jump_next = "]]",
accept = "<CR>",
refresh = "gr",
open = "<M-CR>"
},
layout = {
position = "bottom", -- | top | left | right
ratio = 0.4
},
},
suggestion = {
enabled = true, -- false for copilot-cmp
auto_trigger = true,
hide_during_completion = true,
debounce = 75,
keymap = {
accept = "<C-J>",
accept_word = false,
accept_line = false,
next = "<M-]>",
prev = "<M-[>",
dismiss = "<C-]>",
},
},
filetypes = {
yaml = true,
markdown = false,
help = false,
gitcommit = false,
gitrebase = false,
hgcommit = false,
svn = false,
cvs = false,
["."] = false,
},
copilot_node_command = 'node', -- Node.js version must be > 18.x
server_opts_overrides = {},
})

View File

@ -0,0 +1,33 @@
local ok, _ = pcall(require, 'formatter')
if (not ok) then return end
local util = require "formatter.util"
-- Provides the Format, FormatWrite, FormatLock, and FormatWriteLock commands
require("formatter").setup {
-- Enable or disable logging
logging = true,
-- Set the log level
log_level = vim.log.levels.WARN,
-- All formatter configurations are opt-in
filetype = {
ruby = {
function()
return {
exe = 'bundle exec rubocop',
args = {
'--fix-layout',
'--stdin',
util.escape_path(util.get_current_buffer_file_name()),
'--format',
'files',
'|',
"awk 'f; /^====================$/{f=1}'",
},
stdin = true,
}
end
}
}
}

View File

@ -0,0 +1,20 @@
local ok, _ = pcall(require, 'git-conflict')
if (not ok) then return end
require'git-conflict'.setup {
default_commands = true, -- disable commands created by this plugin
disable_diagnostics = false, -- This will disable the diagnostics in a buffer whilst it is conflicted
list_opener = 'copen', -- command or function to open the conflicts list
highlights = { -- They must have background color, otherwise the default color will be used
incoming = 'DiffAdd',
current = 'DiffText',
},
default_mappings = {
ours = 'o',
theirs = 't',
none = '0',
both = 'b',
next = 'n',
prev = 'p',
},
}

View File

@ -0,0 +1,10 @@
local ok, _ = pcall(require, "gitblame")
if (not ok) then return end
require('gitblame').setup {
--Note how the `gitblame_` prefix is omitted in `setup`
enabled = false,
display_virtual_text = false,
message_template = '<author> • <date>',
date_format = '%r'
}

View File

@ -0,0 +1,4 @@
local ok, gitsigns = pcall(require, "gitsigns")
if (not ok) then return end
gitsigns.setup {}

View File

@ -0,0 +1,47 @@
local ok, lspkind = pcall(require, "lspkind")
if (not ok) then return end
lspkind.init({
-- enables text annotations
--
-- default: true
mode = 'symbol',
-- default symbol map
-- can be either 'default' (requires nerd-fonts font) or
-- 'codicons' for codicon preset (requires vscode-codicons font)
--
-- default: 'default'
preset = 'codicons',
-- override preset symbols
--
-- default: {}
symbol_map = {
Text = "",
Method = "",
Function = "",
Constructor = "",
Field = "",
Variable = "",
Class = "",
Interface = "",
Module = "",
Property = "",
Unit = "",
Value = "",
Enum = "",
Keyword = "",
Snippet = "",
Color = "",
File = "",
Reference = "",
Folder = "",
EnumMember = "",
Constant = "",
Struct = "פּ",
Event = "",
Operator = "",
TypeParameter = ""
},
})

View File

@ -0,0 +1,47 @@
local ok, lualine = pcall(require, "lualine")
local git_blame = require('gitblame')
if (not ok) then return end
require('lualine').setup {
options = {
icons_enabled = true,
theme = 'auto',
component_separators = { left = '', right = ''},
section_separators = { left = '', right = ''},
disabled_filetypes = {
statusline = {},
winbar = {},
},
ignore_focus = {},
always_divide_middle = true,
globalstatus = false,
refresh = {
statusline = 1000,
tabline = 1000,
winbar = 1000,
}
},
sections = {
lualine_a = {'mode'},
lualine_b = {'branch', 'filename'},
-- add git blame text
lualine_c = {
{ git_blame.get_current_blame_text, cond = git_blame.is_blame_text_available }
},
lualine_x = {'encoding', 'fileformat', 'filetype'},
lualine_y = {'progress'},
lualine_z = {'location'}
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = {'filename'},
lualine_x = {'location'},
lualine_y = {},
lualine_z = {}
},
tabline = {},
winbar = {},
inactive_winbar = {},
extensions = {}
}

View File

@ -0,0 +1,3 @@
require('luasnip.loaders.from_snipmate').lazy_load()
require('luasnip.loaders.from_vscode').lazy_load()

View File

@ -0,0 +1,61 @@
local ok, mason = pcall(require, "mason")
if (not ok) then return end
mason.setup()
local ok, mason_lspconfig = pcall(require, "mason-lspconfig")
if (not ok) then return end
mason_lspconfig.setup()
-- Fonction on_attach avec les raccourcis
local on_attach = function(client, bufnr)
local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end
local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end
buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
local opts = { noremap = true, silent = true }
-- Raccourcis LSP
buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts)
buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts)
buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
buf_set_keymap('n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
buf_set_keymap('n', '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
end
-- Configuration automatique pour TOUS les serveurs installés
mason_lspconfig.setup({
handlers = {
-- Handler par défaut pour tous les serveurs
function(server_name)
require("lspconfig")[server_name].setup({
on_attach = on_attach,
capabilities = require('cmp_nvim_lsp').default_capabilities(),
})
end,
}
})
-- Configuration globale des raccourcis LSP (au cas où on_attach ne fonctionne pas)
vim.api.nvim_create_autocmd("LspAttach", {
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
local bufnr = args.buf
print("LspAttach autocmd triggered for: " .. client.name) -- Debug
local opts = { noremap = true, silent = true, buffer = bufnr }
vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, opts)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opts)
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, opts)
vim.keymap.set('n', 'K', vim.lsp.buf.hover, opts)
vim.keymap.set('n', 'gr', vim.lsp.buf.references, opts)
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, opts)
vim.keymap.set('n', '<leader>ca', vim.lsp.buf.code_action, opts)
end,
})

View File

@ -0,0 +1,174 @@
local status, neotree = pcall(require, "neo-tree")
if not status then
return
end
neotree.setup({
close_if_last_window = false,
popup_border_style = "rounded",
enable_git_status = true,
enable_diagnostics = true,
default_component_configs = {
container = {
enable_character_fade = true
},
indent = {
indent_size = 2,
padding = 1,
with_markers = true,
indent_marker = "",
last_indent_marker = "",
highlight = "NeoTreeIndentMarker",
with_expanders = nil,
expander_collapsed = "",
expander_expanded = "",
expander_highlight = "NeoTreeExpander",
},
icon = {
folder_closed = "",
folder_open = "",
folder_empty = "",
default = "",
highlight = "NeoTreeFileIcon"
},
modified = {
symbol = "[+]",
highlight = "NeoTreeModified",
},
name = {
trailing_slash = false,
use_git_status_colors = true,
highlight = "NeoTreeFileName",
},
git_status = {
symbols = {
added = "",
modified = "",
deleted = "",
renamed = "󰁕",
untracked = "",
ignored = "",
unstaged = "󰄱",
staged = "",
conflict = "",
}
},
},
window = {
position = "left",
width = 30,
mapping_options = {
noremap = true,
nowait = true,
},
mappings = {
["<space>"] = {
"toggle_node",
nowait = false,
},
["<2-LeftMouse>"] = "open",
["<cr>"] = "open",
["o"] = "open",
["S"] = "open_split",
["s"] = "open_vsplit",
["t"] = "open_tabnew",
["w"] = "open_with_window_picker",
["C"] = "close_node",
["z"] = "close_all_nodes",
["a"] = {
"add",
config = {
show_path = "none"
}
},
["A"] = "add_directory",
["d"] = "delete",
["r"] = "rename",
["y"] = "copy_to_clipboard",
["x"] = "cut_to_clipboard",
["p"] = "paste_from_clipboard",
["c"] = "copy",
["m"] = "move",
["q"] = "close_window",
["R"] = "refresh",
["?"] = "show_help",
["<"] = "prev_source",
[">"] = "next_source",
}
},
filesystem = {
filtered_items = {
visible = false,
hide_dotfiles = false,
hide_gitignored = false,
hide_hidden = true,
hide_by_name = {
"node_modules"
},
hide_by_pattern = {
"*.meta",
"*/src/*/tsconfig.json",
},
always_show = {
".gitignore"
},
never_show = {
".DS_Store",
"thumbs.db"
},
},
follow_current_file = {
enabled = true,
leave_dirs_open = false,
},
group_empty_dirs = false,
hijack_netrw_behavior = "open_default",
use_libuv_file_watcher = false,
window = {
mappings = {
["<bs>"] = "navigate_up",
["."] = "set_root",
["H"] = "toggle_hidden",
["/"] = "fuzzy_finder",
["D"] = "fuzzy_finder_directory",
["f"] = "filter_on_submit",
["<c-x>"] = "clear_filter",
["[g"] = "prev_git_modified",
["]g"] = "next_git_modified",
}
}
},
buffers = {
follow_current_file = {
enabled = true,
leave_dirs_open = false,
},
group_empty_dirs = true,
show_unloaded = true,
window = {
mappings = {
["bd"] = "buffer_delete",
["<bs>"] = "navigate_up",
["."] = "set_root",
}
},
},
git_status = {
window = {
position = "float",
mappings = {
["A"] = "git_add_all",
["gu"] = "git_unstage_file",
["ga"] = "git_add_file",
["gr"] = "git_revert_file",
["gc"] = "git_commit",
["gp"] = "git_push",
["gg"] = "git_commit_and_push",
}
}
}
})
-- Raccourcis clavier
vim.keymap.set('n', '<c-t>', ':Neotree toggle<CR>', { noremap = true, silent = true })
vim.keymap.set('n', '<c-f>', ':Neotree focus<CR>', { noremap = true, silent = true })

View File

@ -0,0 +1,4 @@
local ok, stabilize = pcall(require, 'stabilize')
if (not ok) then return end
stabilize.setup()

View File

@ -0,0 +1,48 @@
local ok, telescope = pcall(require, 'telescope')
if (not ok) then return end
local actions = require('telescope.actions')
local builtin = require('telescope.builtin')
telescope.setup {
defaults = {
mappings = {
n = {
["q"] = actions.close
},
},
},
pickers = {
git_files = {
theme = 'dropdown',
}
},
}
vim.keymap.set('n', '<C-p>', function()
builtin.find_files({
hidden = true
})
end)
vim.keymap.set('n', ';r', function()
builtin.live_grep()
end)
vim.keymap.set('n', '\\\\', function()
builtin.buffers()
end)
vim.keymap.set('n', ';g', function()
builtin.git_status()
end)
vim.keymap.set('n', ';;', function()
builtin.resume()
end)
vim.keymap.set('n', ';e', function()
builtin.diagnostics()
end)
telescope.load_extension("ag")

View File

@ -0,0 +1,171 @@
--vim.lsp.set_log_level("debug")
local status, nvim_lsp = pcall(require, "lspconfig")
if (not status) then return end
local protocol = require('vim.lsp.protocol')
-- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer
local on_attach = function(client, bufnr)
local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end
local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end
--Enable completion triggered by <c-x><c-o>
buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
-- Mappings.
local opts = { noremap = true, silent = true }
-- See `:help vim.lsp.*` for documentation on any of the below functions
buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts)
buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts)
buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
--buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts)
end
protocol.CompletionItemKind = {
'', -- Text
'', -- Method
'', -- Function
'', -- Constructor
'', -- Field
'', -- Variable
'', -- Class
'', -- Interface
'', -- Module
'', -- Property
'', -- Unit
'', -- Value
'', -- Enum
'', -- Keyword
'', -- Snippet
'', -- Color
'', -- File
'', -- Reference
'', -- Folder
'', -- EnumMember
'', -- Constant
'', -- Struct
'', -- Event
'', -- Operator
'', -- TypeParameter
}
-- Set up completion using nvim_cmp with LSP source
local capabilities = require('cmp_nvim_lsp').default_capabilities(
vim.lsp.protocol.make_client_capabilities()
)
nvim_lsp.flow.setup {
on_attach = on_attach,
capabilities = capabilities
}
-- nvim_lsp.solargraph.setup {}
nvim_lsp.ts_ls.setup {
on_attach = on_attach,
filetypes = { "typescript", "typescriptreact", "typescript.tsx", "javascript", "vue" },
cmd = { "typescript-language-server", "--stdio" },
capabilities = capabilities
}
nvim_lsp.sourcekit.setup {
on_attach = on_attach,
}
nvim_lsp.lua_ls.setup {
on_attach = on_attach,
settings = {
Lua = {
diagnostics = {
-- Get the language server to recognize the `vim` global
globals = { 'vim' },
},
workspace = {
-- Make the server aware of Neovim runtime files
library = vim.api.nvim_get_runtime_file("", true),
checkThirdParty = false
},
},
},
}
vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
vim.lsp.diagnostic.on_publish_diagnostics, {
underline = true,
update_in_insert = false,
virtual_text = { spacing = 4, prefix = "" },
severity_sort = true,
}
)
-- Diagnostic symbols in the sign column (gutter)
local signs = { Error = "", Warn = "", Hint = "", Info = "" }
for type, icon in pairs(signs) do
local hl = "DiagnosticSign" .. type
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = "" })
end
vim.diagnostic.config({
virtual_text = {
prefix = ''
},
update_in_insert = true,
float = {
source = "always", -- Or "if_many"
},
})
_timers = {}
local function setup_diagnostics(client, buffer)
if require("vim.lsp.diagnostic")._enable then
return
end
local diagnostic_handler = function()
local params = vim.lsp.util.make_text_document_params(buffer)
client.request("textDocument/diagnostic", { textDocument = params }, function(err, result)
if err then
local err_msg = string.format("diagnostics error - %s", vim.inspect(err))
vim.lsp.log.error(err_msg)
end
local diagnostic_items = {}
if result then
diagnostic_items = result.items
end
vim.lsp.diagnostic.on_publish_diagnostics(
nil,
vim.tbl_extend("keep", params, { diagnostics = diagnostic_items }),
{ client_id = client.id }
)
end)
end
diagnostic_handler() -- to request diagnostics on buffer when first attaching
vim.api.nvim_buf_attach(buffer, false, {
on_lines = function()
if _timers[buffer] then
vim.fn.timer_stop(_timers[buffer])
end
_timers[buffer] = vim.fn.timer_start(200, diagnostic_handler)
end,
on_detach = function()
if _timers[buffer] then
vim.fn.timer_stop(_timers[buffer])
end
end,
})
end
require("lspconfig").ruby_lsp.setup({
on_attach = function(client, buffer)
setup_diagnostics(client, buffer)
end,
})

View File

@ -0,0 +1,10 @@
local status, saga = pcall(require, "lspsaga")
if (not status) then return end
local opts = { noremap = true, silent = true }
vim.keymap.set('n', '<C-j>', '<Cmd>Lspsaga diagnostic_jump_next<CR>', opts)
vim.keymap.set('n', 'K', '<Cmd>Lspsaga hover_doc<CR>', opts)
-- vim.keymap.set('n', 'gd', '<Cmd>Lspsaga lsp_finder<CR>', opts)
vim.keymap.set('i', '<C-k>', '<Cmd>Lspsaga signature_help<CR>', opts)
vim.keymap.set('n', 'gp', '<Cmd>Lspsaga preview_definition<CR>', opts)
vim.keymap.set('n', 'gr', '<Cmd>Lspsaga rename<CR>', opts)

View File

@ -0,0 +1,107 @@
local ensure_packer = function()
local fn = vim.fn
local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'
if fn.empty(fn.glob(install_path)) > 0 then
fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
vim.cmd [[packadd packer.nvim]]
return true
end
return false
end
local packer_bootstrap = ensure_packer()
local status, packer = pcall(require, "packer")
if (not status) then
print("Packer is not installed")
return
end
return packer.startup(function(use)
use 'wbthomason/packer.nvim'
-- appearances
use 'projekt0n/github-nvim-theme'
use 'nvim-lualine/lualine.nvim' -- Statusline
-- LSP and completion
use 'nvim-lua/plenary.nvim' -- Common utilities
use 'neovim/nvim-lspconfig' -- LSP
use 'onsails/lspkind-nvim' -- vscode-like pictograms
use 'hrsh7th/cmp-buffer' -- nvim-cmp source for buffer words
use 'hrsh7th/cmp-path' -- completion pathname
use 'hrsh7th/cmp-nvim-lsp' -- nvim-cmp source for neovim's built-in LSP
use 'hrsh7th/nvim-cmp' -- Completion
use 'jose-elias-alvarez/null-ls.nvim' -- inject LSP diagnostics, code actions
use 'glepnir/lspsaga.nvim' -- LSP UIs
use 'mason-org/mason.nvim' -- manage lsp
use "mason-org/mason-lspconfig.nvim" -- bridge mason with lspconfig
-- Snippets
use 'L3MON4D3/LuaSnip'
use 'honza/vim-snippets'
-- code fasters
use 'Raimondi/delimitMate' -- auto close colon
use 'mattn/emmet-vim' -- emmet for vim
use 'tpope/vim-surround' -- just tpope the GOD OF VIM
use 'ap/vim-css-color' -- colors display
use 'numToStr/Comment.nvim' -- comments tools
use 'mhartington/formatter.nvim' -- format code
use 'AndrewRadev/splitjoin.vim' -- refactor plugin
use 'RRethy/vim-illuminate' -- highlight other uses of the word under the cursor
use 'folke/trouble.nvim' -- better diagnostics
-- Ruby development
use 'vim-ruby/vim-ruby'
use 'tpope/vim-rails'
use 'tpope/vim-endwise' -- autoclose function
-- javacript development
use 'peitalin/vim-jsx-typescript'
use 'pangloss/vim-javascript'
use 'leafgarland/typescript-vim'
-- GraphQl
use 'jparise/vim-graphql'
-- Rust development
use 'rust-lang/rust.vim'
use { 'saecki/crates.nvim', requires = { 'nvim-lua/plenary.nvim' } }
-- IA
use { "zbirenbaum/copilot.lua" }
-- Testing
use { 'vim-test/vim-test' }
-- others utilities
use 'nvim-telescope/telescope.nvim' -- equivalent ctrl-p, fzf
use({ "kelly-lin/telescope-ag", requires = { { "nvim-telescope/telescope.nvim" } } }) -- silver search with telescope
use 'windwp/nvim-autopairs' -- auto brackets pairing
use 'lewis6991/gitsigns.nvim' -- git graphic helpers
use 'bronson/vim-trailing-whitespace' -- detect trailing-whitespace
use 'nvim-tree/nvim-web-devicons' -- use devicons
-- File explorer moderne
use {
'nvim-neo-tree/neo-tree.nvim',
branch = 'v3.x',
requires = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons',
'MunifTanjim/nui.nvim',
}
}
use "luukvbaal/stabilize.nvim" -- to fix my fucking headache when openclosed panes
use 'f-person/git-blame.nvim'
use {'akinsho/git-conflict.nvim', tag = "*", config = function() -- conflict management
require('git-conflict').setup()
end}
if packer_bootstrap then
require('packer').sync()
end
end)

View File

@ -0,0 +1,5 @@
if vim.fn.has("termguicolors") == 1 then
vim.opt.termguicolors = true
end
vim.opt.background = 'dark'

View File

@ -0,0 +1,18 @@
vim.cmd('filetype plugin indent on')
vim.api.nvim_exec([[
autocmd BufNewFile,BufRead /tmp/mutt-* set filetype=mail
autocmd BufNewFile,BufRead /*.rasi setf css
autocmd BufNewFile,BufRead *.tsx,*.jsx set filetype=typescriptreact
augroup ruby_subtypes
autocmd!
autocmd BufNewFile,BufRead *.pdf.erb let b:eruby_subtype='html'
autocmd BufNewFile,BufRead *.pdf.erb set filetype=eruby
augroup END
au BufNewFile,BufRead *.arb set filetype=ruby
au BufRead,BufNewFile *.ejs setfiletype html
au FileType TelescopePrompt setlocal nocursorline
au BufRead,BufNewFile *.ex,*.exs set filetype=elixir
au BufRead,BufNewFile *.eex,*.heex,*.leex,*.sface,*.lexs set filetype=eelixir
au BufRead,BufNewFile mix.lock set filetype=elixir
]], true)

View File

@ -0,0 +1,35 @@
vim.cmd("autocmd!")
vim.scriptencoding = 'utf-8'
vim.opt.encoding = 'utf-8'
vim.opt.fileencoding = 'utf-8'
vim.opt.clipboard:append { 'unnamedplus' }
vim.opt.autoread = true
vim.opt.showmatch = true -- show matching
vim.opt.ignorecase = true -- case insensitive
vim.opt.mouse = 'v' -- middle-click paste with
vim.opt.hlsearch = true -- highlight search
vim.opt.incsearch = true -- incremental search
vim.opt.tabstop = 4 -- number of columns occupied by a tab
vim.opt.softtabstop = 4 -- see multiple spaces as tabstops so <BS> does the right thing
vim.opt.expandtab = true -- converts tabs to white space
vim.opt.shiftwidth = 2 -- width for autoindents
vim.opt.autoindent = true -- indent a new line the same amount as the line just typed
vim.wo.number = true -- add line numbers
vim.opt.relativenumber = true
vim.opt.wildmode = 'longest,list' -- get bash-like tab completions
vim.opt.cc = '80' -- set an 80 column border for good coding style
vim.opt.clipboard = 'unnamedplus' -- using system clipboard
vim.opt.cursorline = true -- highlight current cursorline
vim.opt.ttyfast = true -- Speed up scrolling in Vim
vim.opt.wildignore:append { '*/node_modules/*' }
vim.cmd('syntax on')
vim.opt.formatoptions:append { 'r' } -- Add asterisks in block comments
vim.opt.cursorline = true
vim.opt.winblend = 0
vim.opt.wildoptions = 'pum'
vim.opt.pumblend = 5

View File

@ -0,0 +1,20 @@
local keymap = vim.keymap
vim.g.mapleader = ','
keymap.set('n', 'x', '"_x')
-- no arrow keys
keymap.set('i', '<up>', '<nop>')
keymap.set('i', '<left>', '<nop>')
keymap.set('i', '<right>', '<nop>')
keymap.set('i', '<down>', '<nop>')
keymap.set('', '<up>', '<nop>')
keymap.set('', '<left>', '<nop>')
keymap.set('', '<right>', '<nop>')
keymap.set('', '<down>', '<nop>')
keymap.set('n', '<C-w><down>', '<C-w>-')
-- Indent all files
keymap.set('n', '<leader>i', 'mmgg=G`m')

View File

@ -0,0 +1,22 @@
require('github-theme').setup({
options = {
styles = {
functions = "NONE"
},
darken = { -- Darken floating windows and sidebar-like windows
floats = false,
sidebars = {
enable = true,
list = {"qf", "vista_kind", "terminal", "packer"}, -- Apply dark background to specific windows
},
},
},
palettes = {
all = {
hint = "orange",
error = "#ff0000"
},
},
})
vim.cmd[[colorscheme github_dark_high_contrast]]

View File

@ -0,0 +1,329 @@
-- Automatically generated packer.nvim plugin loader code
if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then
vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"')
return
end
vim.api.nvim_command('packadd packer.nvim')
local no_errors, error_msg = pcall(function()
_G._packer = _G._packer or {}
_G._packer.inside_compile = true
local time
local profile_info
local should_profile = false
if should_profile then
local hrtime = vim.loop.hrtime
profile_info = {}
time = function(chunk, start)
if start then
profile_info[chunk] = hrtime()
else
profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6
end
end
else
time = function(chunk, start) end
end
local function save_profiles(threshold)
local sorted_times = {}
for chunk_name, time_taken in pairs(profile_info) do
sorted_times[#sorted_times + 1] = {chunk_name, time_taken}
end
table.sort(sorted_times, function(a, b) return a[2] > b[2] end)
local results = {}
for i, elem in ipairs(sorted_times) do
if not threshold or threshold and elem[2] > threshold then
results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms'
end
end
if threshold then
table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)')
end
_G._packer.profile_output = results
end
time([[Luarocks path setup]], true)
local package_path_str = "/Users/torpenn/.cache/nvim/packer_hererocks/2.1.1744318430/share/lua/5.1/?.lua;/Users/torpenn/.cache/nvim/packer_hererocks/2.1.1744318430/share/lua/5.1/?/init.lua;/Users/torpenn/.cache/nvim/packer_hererocks/2.1.1744318430/lib/luarocks/rocks-5.1/?.lua;/Users/torpenn/.cache/nvim/packer_hererocks/2.1.1744318430/lib/luarocks/rocks-5.1/?/init.lua"
local install_cpath_pattern = "/Users/torpenn/.cache/nvim/packer_hererocks/2.1.1744318430/lib/lua/5.1/?.so"
if not string.find(package.path, package_path_str, 1, true) then
package.path = package.path .. ';' .. package_path_str
end
if not string.find(package.cpath, install_cpath_pattern, 1, true) then
package.cpath = package.cpath .. ';' .. install_cpath_pattern
end
time([[Luarocks path setup]], false)
time([[try_loadstring definition]], true)
local function try_loadstring(s, component, name)
local success, result = pcall(loadstring(s), name, _G.packer_plugins[name])
if not success then
vim.schedule(function()
vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {})
end)
end
return result
end
time([[try_loadstring definition]], false)
time([[Defining packer_plugins]], true)
_G.packer_plugins = {
LuaSnip = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/LuaSnip",
url = "https://github.com/L3MON4D3/LuaSnip"
},
["cmp-buffer"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/cmp-buffer",
url = "https://github.com/hrsh7th/cmp-buffer"
},
["cmp-nvim-lsp"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/cmp-nvim-lsp",
url = "https://github.com/hrsh7th/cmp-nvim-lsp"
},
["cmp-path"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/cmp-path",
url = "https://github.com/hrsh7th/cmp-path"
},
["copilot.lua"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/copilot.lua",
url = "https://github.com/zbirenbaum/copilot.lua"
},
["crates.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/crates.nvim",
url = "https://github.com/saecki/crates.nvim"
},
delimitMate = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/delimitMate",
url = "https://github.com/Raimondi/delimitMate"
},
["emmet-vim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/emmet-vim",
url = "https://github.com/mattn/emmet-vim"
},
["formatter.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/formatter.nvim",
url = "https://github.com/mhartington/formatter.nvim"
},
["git-blame.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/git-blame.nvim",
url = "https://github.com/f-person/git-blame.nvim"
},
["git-conflict.nvim"] = {
config = { "\27LJ\2\n:\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\17git-conflict\frequire\0" },
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/git-conflict.nvim",
url = "https://github.com/akinsho/git-conflict.nvim"
},
["github-nvim-theme"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/github-nvim-theme",
url = "https://github.com/projekt0n/github-nvim-theme"
},
["gitsigns.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/gitsigns.nvim",
url = "https://github.com/lewis6991/gitsigns.nvim"
},
["lspkind-nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/lspkind-nvim",
url = "https://github.com/onsails/lspkind-nvim"
},
["lspsaga.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/lspsaga.nvim",
url = "https://github.com/glepnir/lspsaga.nvim"
},
["lualine.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/lualine.nvim",
url = "https://github.com/nvim-lualine/lualine.nvim"
},
["mason-lspconfig.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/mason-lspconfig.nvim",
url = "https://github.com/mason-org/mason-lspconfig.nvim"
},
["mason.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/mason.nvim",
url = "https://github.com/mason-org/mason.nvim"
},
["null-ls.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/null-ls.nvim",
url = "https://github.com/jose-elias-alvarez/null-ls.nvim"
},
["nvim-autopairs"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/nvim-autopairs",
url = "https://github.com/windwp/nvim-autopairs"
},
["nvim-cmp"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/nvim-cmp",
url = "https://github.com/hrsh7th/nvim-cmp"
},
["nvim-comment"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/nvim-comment",
url = "https://github.com/terrortylor/nvim-comment"
},
["nvim-lspconfig"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/nvim-lspconfig",
url = "https://github.com/neovim/nvim-lspconfig"
},
["nvim-tree.lua"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/nvim-tree.lua",
url = "https://github.com/nvim-tree/nvim-tree.lua"
},
["nvim-web-devicons"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/nvim-web-devicons",
url = "https://github.com/nvim-tree/nvim-web-devicons"
},
["packer.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/packer.nvim",
url = "https://github.com/wbthomason/packer.nvim"
},
["plenary.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/plenary.nvim",
url = "https://github.com/nvim-lua/plenary.nvim"
},
["rust.vim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/rust.vim",
url = "https://github.com/rust-lang/rust.vim"
},
["splitjoin.vim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/splitjoin.vim",
url = "https://github.com/AndrewRadev/splitjoin.vim"
},
["stabilize.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/stabilize.nvim",
url = "https://github.com/luukvbaal/stabilize.nvim"
},
["telescope-ag"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/telescope-ag",
url = "https://github.com/kelly-lin/telescope-ag"
},
["telescope.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/telescope.nvim",
url = "https://github.com/nvim-telescope/telescope.nvim"
},
["trouble.nvim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/trouble.nvim",
url = "https://github.com/folke/trouble.nvim"
},
["typescript-vim"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/typescript-vim",
url = "https://github.com/leafgarland/typescript-vim"
},
["vim-css-color"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/vim-css-color",
url = "https://github.com/ap/vim-css-color"
},
["vim-endwise"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/vim-endwise",
url = "https://github.com/tpope/vim-endwise"
},
["vim-graphql"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/vim-graphql",
url = "https://github.com/jparise/vim-graphql"
},
["vim-illuminate"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/vim-illuminate",
url = "https://github.com/RRethy/vim-illuminate"
},
["vim-javascript"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/vim-javascript",
url = "https://github.com/pangloss/vim-javascript"
},
["vim-jsx-typescript"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/vim-jsx-typescript",
url = "https://github.com/peitalin/vim-jsx-typescript"
},
["vim-rails"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/vim-rails",
url = "https://github.com/tpope/vim-rails"
},
["vim-ruby"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/vim-ruby",
url = "https://github.com/vim-ruby/vim-ruby"
},
["vim-snippets"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/vim-snippets",
url = "https://github.com/honza/vim-snippets"
},
["vim-surround"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/vim-surround",
url = "https://github.com/tpope/vim-surround"
},
["vim-test"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/vim-test",
url = "https://github.com/vim-test/vim-test"
},
["vim-trailing-whitespace"] = {
loaded = true,
path = "/Users/torpenn/.local/share/nvim/site/pack/packer/start/vim-trailing-whitespace",
url = "https://github.com/bronson/vim-trailing-whitespace"
}
}
time([[Defining packer_plugins]], false)
-- Config for: git-conflict.nvim
time([[Config for git-conflict.nvim]], true)
try_loadstring("\27LJ\2\n:\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\17git-conflict\frequire\0", "config", "git-conflict.nvim")
time([[Config for git-conflict.nvim]], false)
_G._packer.inside_compile = false
if _G._packer.needs_bufread == true then
vim.cmd("doautocmd BufRead")
end
_G._packer.needs_bufread = false
if should_profile then save_profiles() end
end)
if not no_errors then
error_msg = error_msg:gsub('"', '\\"')
vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None')
end

View File

@ -0,0 +1,177 @@
{
"HTML5 boilerplate": {
"prefix": "html5",
"body": [
"<!DOCTYPE html>",
"<html lang=\"$1\">",
"<head>",
" <meta charset=\"UTF-8\">",
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
" <title>$2</title>",
"</head>",
"<body>",
" $3",
"</body>",
"</html>"
],
"description": "HTML5 boilerplate"
},
"Div with class": {
"prefix": "div",
"body": [
"<div class=\"$1\">",
" $2",
"</div>"
],
"description": "Div with class"
},
"Div with id": {
"prefix": "divid",
"body": [
"<div id=\"$1\">",
" $2",
"</div>"
],
"description": "Div with id"
},
"Link": {
"prefix": "a",
"body": ["<a href=\"$1\">$2</a>"],
"description": "Link"
},
"Image": {
"prefix": "img",
"body": ["<img src=\"$1\" alt=\"$2\">"],
"description": "Image"
},
"Button": {
"prefix": "btn",
"body": ["<button class=\"$1\">$2</button>"],
"description": "Button"
},
"Input": {
"prefix": "input",
"body": ["<input type=\"$1\" name=\"$2\" placeholder=\"$3\">"],
"description": "Input"
},
"Form": {
"prefix": "form",
"body": [
"<form action=\"$1\" method=\"$2\">",
" $3",
"</form>"
],
"description": "Form"
},
"Unordered list": {
"prefix": "ul",
"body": [
"<ul>",
" <li>$1</li>",
"</ul>"
],
"description": "Unordered list"
},
"Ordered list": {
"prefix": "ol",
"body": [
"<ol>",
" <li>$1</li>",
"</ol>"
],
"description": "Ordered list"
},
"List item": {
"prefix": "li",
"body": ["<li>$1</li>"],
"description": "List item"
},
"Table": {
"prefix": "table",
"body": [
"<table>",
" <thead>",
" <tr>",
" <th>$1</th>",
" </tr>",
" </thead>",
" <tbody>",
" <tr>",
" <td>$2</td>",
" </tr>",
" </tbody>",
"</table>"
],
"description": "Table"
},
"Paragraph": {
"prefix": "p",
"body": ["<p>$1</p>"],
"description": "Paragraph"
},
"Heading 1": {
"prefix": "h1",
"body": ["<h1>$1</h1>"],
"description": "Heading 1"
},
"Heading 2": {
"prefix": "h2",
"body": ["<h2>$1</h2>"],
"description": "Heading 2"
},
"Heading 3": {
"prefix": "h3",
"body": ["<h3>$1</h3>"],
"description": "Heading 3"
},
"Span": {
"prefix": "span",
"body": ["<span class=\"$1\">$2</span>"],
"description": "Span"
},
"Section": {
"prefix": "section",
"body": [
"<section>",
" $1",
"</section>"
],
"description": "Section"
},
"Article": {
"prefix": "article",
"body": [
"<article>",
" $1",
"</article>"
],
"description": "Article"
},
"Header": {
"prefix": "header",
"body": [
"<header>",
" $1",
"</header>"
],
"description": "Header"
},
"Footer": {
"prefix": "footer",
"body": [
"<footer>",
" $1",
"</footer>"
],
"description": "Footer"
},
"Nav": {
"prefix": "nav",
"body": [
"<nav>",
" $1",
"</nav>"
],
"description": "Navigation"
}
}

View File

@ -0,0 +1,89 @@
{
"Console log": {
"prefix": "cl",
"body": ["console.log($1)"],
"description": "Console log"
},
"Function": {
"prefix": "fn",
"body": [
"function $1($2) {",
" $3",
"}"
],
"description": "Function"
},
"Arrow function": {
"prefix": "af",
"body": ["const $1 = ($2) => {", " $3", "}"],
"description": "Arrow function"
},
"Arrow function inline": {
"prefix": "afi",
"body": ["const $1 = ($2) => $3"],
"description": "Arrow function inline"
},
"Import": {
"prefix": "imp",
"body": ["import $1 from '$2'"],
"description": "Import statement"
},
"Import destructured": {
"prefix": "impd",
"body": ["import { $1 } from '$2'"],
"description": "Import destructured"
},
"Export": {
"prefix": "exp",
"body": ["export const $1 = $2"],
"description": "Export statement"
},
"Export default": {
"prefix": "expd",
"body": ["export default $1"],
"description": "Export default"
},
"Try catch": {
"prefix": "try",
"body": [
"try {",
" $1",
"} catch (error) {",
" $2",
"}"
],
"description": "Try catch block"
},
"For loop": {
"prefix": "for",
"body": [
"for (let $1 = 0; $1 < $2; $1++) {",
" $3",
"}"
],
"description": "For loop"
},
"For of loop": {
"prefix": "forof",
"body": [
"for (const $1 of $2) {",
" $3",
"}"
],
"description": "For of loop"
},
"Async function": {
"prefix": "async",
"body": [
"async function $1($2) {",
" $3",
"}"
],
"description": "Async function"
},
"Async arrow function": {
"prefix": "asyncaf",
"body": ["const $1 = async ($2) => {", " $3", "}"],
"description": "Async arrow function"
}
}

View File

@ -0,0 +1,109 @@
{
"Method": {
"prefix": "def",
"body": [
"def $1($2)",
" $3",
"end"
],
"description": "Ruby method"
},
"Class": {
"prefix": "class",
"body": [
"class $1",
" def initialize($2)",
" $3",
" end",
"",
" $4",
"end"
],
"description": "Ruby class"
},
"Each loop": {
"prefix": "each",
"body": [
"$1.each do |$2|",
" $3",
"end"
],
"description": "Ruby each loop"
},
"Each with index": {
"prefix": "eachi",
"body": [
"$1.each_with_index do |$2, $3|",
" $4",
"end"
],
"description": "Ruby each with index"
},
"Map": {
"prefix": "map",
"body": [
"$1.map do |$2|",
" $3",
"end"
],
"description": "Ruby map"
},
"Select": {
"prefix": "select",
"body": [
"$1.select do |$2|",
" $3",
"end"
],
"description": "Ruby select"
},
"If statement": {
"prefix": "if",
"body": [
"if $1",
" $2",
"end"
],
"description": "Ruby if statement"
},
"Unless": {
"prefix": "unless",
"body": [
"unless $1",
" $2",
"end"
],
"description": "Ruby unless statement"
},
"Case when": {
"prefix": "case",
"body": [
"case $1",
"when $2",
" $3",
"else",
" $4",
"end"
],
"description": "Ruby case when"
},
"Module": {
"prefix": "module",
"body": [
"module $1",
" $2",
"end"
],
"description": "Ruby module"
},
"Puts": {
"prefix": "puts",
"body": ["puts $1"],
"description": "Ruby puts"
},
"Print": {
"prefix": "p",
"body": ["p $1"],
"description": "Ruby print"
}
}

View File

@ -0,0 +1,142 @@
{
"Function": {
"prefix": "fn",
"body": [
"fn $1($2) -> $3 {",
" $4",
"}"
],
"description": "Rust function"
},
"Public function": {
"prefix": "pubfn",
"body": [
"pub fn $1($2) -> $3 {",
" $4",
"}"
],
"description": "Rust public function"
},
"Main function": {
"prefix": "main",
"body": [
"fn main() {",
" $1",
"}"
],
"description": "Rust main function"
},
"Struct": {
"prefix": "struct",
"body": [
"struct $1 {",
" $2",
"}"
],
"description": "Rust struct"
},
"Public struct": {
"prefix": "pubstruct",
"body": [
"pub struct $1 {",
" $2",
"}"
],
"description": "Rust public struct"
},
"Enum": {
"prefix": "enum",
"body": [
"enum $1 {",
" $2,",
"}"
],
"description": "Rust enum"
},
"Impl block": {
"prefix": "impl",
"body": [
"impl $1 {",
" $2",
"}"
],
"description": "Rust impl block"
},
"Match statement": {
"prefix": "match",
"body": [
"match $1 {",
" $2 => $3,",
" _ => $4,",
"}"
],
"description": "Rust match statement"
},
"If let": {
"prefix": "iflet",
"body": [
"if let $1 = $2 {",
" $3",
"}"
],
"description": "Rust if let"
},
"While let": {
"prefix": "whilelet",
"body": [
"while let $1 = $2 {",
" $3",
"}"
],
"description": "Rust while let"
},
"For loop": {
"prefix": "for",
"body": [
"for $1 in $2 {",
" $3",
"}"
],
"description": "Rust for loop"
},
"Test function": {
"prefix": "test",
"body": [
"#[test]",
"fn $1() {",
" $2",
"}"
],
"description": "Rust test function"
},
"Derive": {
"prefix": "derive",
"body": ["#[derive($1)]"],
"description": "Rust derive attribute"
},
"Println": {
"prefix": "println",
"body": ["println!(\"$1\");"],
"description": "Rust println macro"
},
"Print": {
"prefix": "print",
"body": ["print!(\"$1\");"],
"description": "Rust print macro"
},
"Vec": {
"prefix": "vec",
"body": ["let $1: Vec<$2> = vec![$3];"],
"description": "Rust vector"
},
"Result": {
"prefix": "result",
"body": ["Result<$1, $2>"],
"description": "Rust Result type"
},
"Option": {
"prefix": "option",
"body": ["Option<$1>"],
"description": "Rust Option type"
}
}

View File

@ -0,0 +1,75 @@
{
"Interface": {
"prefix": "int",
"body": [
"interface $1 {",
" $2",
"}"
],
"description": "TypeScript interface"
},
"Type": {
"prefix": "type",
"body": ["type $1 = $2"],
"description": "TypeScript type"
},
"Function with types": {
"prefix": "fn",
"body": [
"function $1($2): $3 {",
" $4",
"}"
],
"description": "Function with types"
},
"Arrow function with types": {
"prefix": "af",
"body": ["const $1 = ($2): $3 => {", " $4", "}"],
"description": "Arrow function with types"
},
"Async function with types": {
"prefix": "async",
"body": [
"async function $1($2): Promise<$3> {",
" $4",
"}"
],
"description": "Async function with types"
},
"Enum": {
"prefix": "enum",
"body": [
"enum $1 {",
" $2",
"}"
],
"description": "TypeScript enum"
},
"Class": {
"prefix": "class",
"body": [
"class $1 {",
" constructor($2) {",
" $3",
" }",
"",
" $4",
"}"
],
"description": "TypeScript class"
},
"Generic function": {
"prefix": "genfn",
"body": [
"function $1<$2>($3): $4 {",
" $5",
"}"
],
"description": "Generic function"
},
"Import type": {
"prefix": "impt",
"body": ["import type { $1 } from '$2'"],
"description": "Import type"
}
}