diff --git a/dotfiles/fish/config.fish b/dotfiles/fish/config.fish new file mode 100644 index 0000000..428fa5c --- /dev/null +++ b/dotfiles/fish/config.fish @@ -0,0 +1,9 @@ +if status is-interactive + # Commands to run in interactive sessions can go here + # starship + starship init fish | source +end + + +# opam configuration +source /home/qwjyh/.opam/opam-init/init.fish > /dev/null 2> /dev/null; or true diff --git a/dotfiles/neovim/init.lua b/dotfiles/neovim/init.lua new file mode 100644 index 0000000..d7bdd8e --- /dev/null +++ b/dotfiles/neovim/init.lua @@ -0,0 +1,140 @@ +----------------------------------------------------------- +-- basic configurations +vim.o.number = true +vim.o.relativenumber = true +vim.cmd([[ +highlight LineNr cterm=none ctermfg=256 +]]) +vim.o.tabstop = 4 +vim.o.shiftwidth = 4 +vim.o.autoindent = true +vim.o.cursorcolumn = true +vim.o.cursorline = true +vim.cmd([[ +highlight cursorline term=reverse cterm=none ctermbg=239 +highlight cursorcolumn ctermbg=235 +]]) +vim.o.mouse = 'a' +vim.o.signcolumn = 'yes' +vim.o.ignorecase = true +vim.o.smartcase = true + +----------------------------------------------------------- +-- to use PowerShell on Windows +-- original code from :h powershell +-- vim script func returns 1/0, while lua evals false only if gets false or nil +-- so be sure to compare with 1/0 +if vim.fn.has('win32') == 1 then + if vim.fn.executable('pwsh') == 1 then + vim.opt.shell = 'pwsh' + else + vim.opt.shell = 'powershell' + end + vim.opt.shellcmdflag = '-NoLogo -NoProfile -ExecutionPolicy RemoteSigned -Command [Console]::InputEncoding=[Console]::OutputEncoding=[System.Text.Encoding]::UTF8;' + vim.opt.shellredir = '-RedirectStandardOutput %s -NoNewWindow -Wait' + vim.opt.shellpipe = '2>&1 | Out-File -Encoding UTF8 %s; exit $LastExitCode' + vim.opt.shellquote = '' + vim.opt.shellxquote = '' +end + + +----------------------------------------------------------- +-- Plugins +require 'plugins' +vim.cmd [[autocmd BufWritePost plugins.lua PackerCompile]] + + +-- LSP +-- https://zenn.dev/botamotch/articles/21073d78bc68bf +-- 1. LSP Sever management +require('mason').setup() +require('mason-lspconfig').setup_handlers({ function(server) + local opt = { + -- -- Function executed when the LSP server startup + -- on_attach = function(client, bufnr) + -- local opts = { noremap=true, silent=true } + -- vim.api.nvim_buf_set_keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()', opts) + -- vim.cmd 'autocmd BufWritePre * lua vim.lsp.buf.formatting_sync(nil, 1000)' + -- end, + capabilities = require('cmp_nvim_lsp').update_capabilities( + vim.lsp.protocol.make_client_capabilities() + ) + } + require('lspconfig')[server].setup(opt) +end }) + +-- 2. build-in LSP function +-- keyboard shortcut +vim.keymap.set('n', 'K', 'lua vim.lsp.buf.hover()') +vim.keymap.set('n', 'gf', 'lua vim.lsp.buf.formatting()') +vim.keymap.set('n', 'gr', 'lua vim.lsp.buf.references()') +vim.keymap.set('n', 'gd', 'lua vim.lsp.buf.definition()') +vim.keymap.set('n', 'gD', 'lua vim.lsp.buf.declaration()') +vim.keymap.set('n', 'gi', 'lua vim.lsp.buf.implementation()') +vim.keymap.set('n', 'gt', 'lua vim.lsp.buf.type_definition()') +vim.keymap.set('n', 'gn', 'lua vim.lsp.buf.rename()') +vim.keymap.set('n', 'ga', 'lua vim.lsp.buf.code_action()') +vim.keymap.set('n', 'ge', 'lua vim.diagnostic.open_float()') +vim.keymap.set('n', 'g]', 'lua vim.diagnostic.goto_next()') +vim.keymap.set('n', 'g[', 'lua vim.diagnostic.goto_prev()') +-- LSP handlers +vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with( + vim.lsp.diagnostic.on_publish_diagnostics, { virtual_text = false } +) +-- Reference highlight +vim.cmd [[ +set updatetime=500 +highlight LspReferenceText cterm=underline ctermfg=1 ctermbg=8 gui=underline guifg=#A00000 guibg=#104040 +highlight LspReferenceRead cterm=underline ctermfg=1 ctermbg=8 gui=underline guifg=#A00000 guibg=#104040 +highlight LspReferenceWrite cterm=underline ctermfg=1 ctermbg=8 gui=underline guifg=#A00000 guibg=#104040 +augroup lsp_document_highlight + autocmd! + autocmd CursorHold,CursorHoldI * lua vim.lsp.buf.document_highlight() + autocmd CursorMoved,CursorMovedI * lua vim.lsp.buf.clear_references() +augroup END +]] + +-- 3. completion (hrsh7th/nvim-cmp) +local cmp = require("cmp") +cmp.setup({ + snippet = { + expand = function(args) + vim.fn["vsnip#anonymous"](args.body) + end, + }, + sources = { + { name = "nvim_lsp" }, + -- { name = "buffer" }, + -- { name = "path" }, + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.select_prev_item(), + [""] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.complete(), + [''] = cmp.mapping.abort(), + [""] = cmp.mapping.confirm { select = true }, + }), + experimental = { + ghost_text = true, + }, +}) +-- cmp.setup.cmdline('/', { +-- mapping = cmp.mapping.preset.cmdline(), +-- sources = { +-- { name = 'buffer' } +-- } +-- }) +-- cmp.setup.cmdline(":", { +-- mapping = cmp.mapping.preset.cmdline(), +-- sources = { +-- { name = "path" }, +-- { name = "cmdline" }, +-- }, +-- }) + + +----------------------------------------------------------- +-- Ctrl + P to invoke fzf file search +vim.api.nvim_set_keymap('n', '', + "lua require('fzf-lua').files()", + { noremap = true, silent = true }) diff --git a/dotfiles/neovim/lua/plugins.lua b/dotfiles/neovim/lua/plugins.lua new file mode 100644 index 0000000..86506f7 --- /dev/null +++ b/dotfiles/neovim/lua/plugins.lua @@ -0,0 +1,23 @@ +vim.cmd [[packadd packer.nvim]] + +return require('packer').startup(function(use) + use 'wbthomason/packer.nvim' + + -- fzf + use { 'ibhagwan/fzf-lua', + -- optional icon + --requires = { 'kyazdan142/nvim-web/devicons' } -- not found + } + + -- LSP + use 'neovim/nvim-lspconfig' + use "williamboman/mason.nvim" + use "williamboman/mason-lspconfig.nvim" + use "hrsh7th/nvim-cmp" + use "hrsh7th/cmp-nvim-lsp" + use "hrsh7th/vim-vsnip" + + -- Julia + use "JuliaEditorSupport/julia-vim" + +end) diff --git a/dotfiles/tmux.conf b/dotfiles/tmux.conf new file mode 100644 index 0000000..11508f6 --- /dev/null +++ b/dotfiles/tmux.conf @@ -0,0 +1,40 @@ +# tmux conf + +# ----------------------------------------------- +set -g history-limit 50000 + +set-option -g default-command fish + +# ----------------------------------------------- +# general inputs config +set -g mouse on +setw -g mode-keys vi + +# select panes with vi key bindings +bind-key -T prefix h select-pane -L +bind-key -T prefix j select-pane -D +bind-key -T prefix k select-pane -U +bind-key -T prefix l select-pane -R +# split pane +bind-key -T prefix | split-window -h +bind-key -T prefix \\ split-window -h +bind-key -T prefix - split-window -v +# copy mode +bind-key -T copy-mode-vi v send-keys -X begin-selection +bind-key -T copy-mode-vi y send-keys -X copy-selection + + +# ----------------------------------------------- +# start window index at 1 +set -g base-index 1 +# start pane index at 1 +setw -g pane-base-index 1 + + +# ----------------------------------------------- +# status line configs +set-option -g status-right "#[bg=colour156] #T | %y/%m/%d %H:%M:%S" +#set-window-option -g window-status-format "#[bg=green]#I:#W-" # default +set-window-option -g window-status-current-format "#[bg=colour156]#I:#W*" + +set -s escape-time 100