diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore index e916800..2f05c58 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ result /.pre-commit-config.yaml home/emacs/config/var +.direnv diff --git a/home/shell/bin/b b/bin/b similarity index 100% rename from home/shell/bin/b rename to bin/b diff --git a/home/shell/bin/cb b/bin/cb similarity index 100% rename from home/shell/bin/cb rename to bin/cb diff --git a/home/shell/bin/clear-pbcopy b/bin/clear-pbcopy similarity index 100% rename from home/shell/bin/clear-pbcopy rename to bin/clear-pbcopy diff --git a/home/shell/bin/e b/bin/e similarity index 100% rename from home/shell/bin/e rename to bin/e diff --git a/home/shell/bin/x-open b/bin/x-open similarity index 100% rename from home/shell/bin/x-open rename to bin/x-open diff --git a/home/emacs/config/.gitignore b/config/emacs/.gitignore similarity index 100% rename from home/emacs/config/.gitignore rename to config/emacs/.gitignore diff --git a/home/emacs/config/lib/naysayer-light-theme.el b/config/emacs/lib/naysayer-light-theme.el similarity index 100% rename from home/emacs/config/lib/naysayer-light-theme.el rename to config/emacs/lib/naysayer-light-theme.el diff --git a/home/emacs/config/lib/naysayer-theme.el b/config/emacs/lib/naysayer-theme.el similarity index 100% rename from home/emacs/config/lib/naysayer-theme.el rename to config/emacs/lib/naysayer-theme.el diff --git a/home/emacs/config/lib/witness b/config/emacs/lib/witness similarity index 100% rename from home/emacs/config/lib/witness rename to config/emacs/lib/witness diff --git a/home/emacs/config/post-init.el b/config/emacs/post-init.el similarity index 100% rename from home/emacs/config/post-init.el rename to config/emacs/post-init.el diff --git a/home/emacs/config/pre-early-init.el b/config/emacs/pre-early-init.el similarity index 100% rename from home/emacs/config/pre-early-init.el rename to config/emacs/pre-early-init.el diff --git a/home/emacs/config/pre-init.el b/config/emacs/pre-init.el similarity index 100% rename from home/emacs/config/pre-init.el rename to config/emacs/pre-init.el diff --git a/config/fish/config.fish b/config/fish/config.fish new file mode 100644 index 0000000..318fcae --- /dev/null +++ b/config/fish/config.fish @@ -0,0 +1,51 @@ +set fish_greeting + +function sesh-sessions + set -l session (sesh list -t -c | fzf --height 40% --reverse --border-label ' sesh ' --border --prompt 'โšก ') + commandline -f repaint + if test -z "$session" + return + end + sesh connect $session +end + +function sesh-list + set -l session (sesh list --icons | fzf \ + --height 40% \ + --reverse \ + --border-label ' sesh ' \ + --border \ + --no-sort --ansi --border-label ' sesh ' --prompt 'โšก ' \ + --header ' ^a all ^t tmux ^g configs ^x zoxide ^d tmux kill ^f find' \ + --bind 'tab:down,btab:up' \ + --bind 'ctrl-a:change-prompt(โšก )+reload(sesh list --icons)' \ + --bind 'ctrl-t:change-prompt(๐ŸชŸ )+reload(sesh list -t --icons)' \ + --bind 'ctrl-g:change-prompt(โš™๏ธ )+reload(sesh list -c --icons)' \ + --bind 'ctrl-x:change-prompt(๐Ÿ“ )+reload(sesh list -z --icons)' \ + --bind 'ctrl-f:change-prompt(๐Ÿ”Ž )+reload(fd -H -d 2 -t d -E .Trash . ~)' \ + --bind 'ctrl-d:execute(tmux kill-session -t {2..})+change-prompt(โšก )+reload(sesh list --icons)' \ + --preview-window 'right:55%' \ + --preview 'sesh preview {}' \ + --prompt 'โšก ') + commandline -f repaint + if test -z "$session" + return + end + sesh connect $session +end + +# Keybinding: Alt-s +if functions -q fish_vi_key_bindings + bind -M default \es sesh-sessions + bind -M insert \es sesh-sessions +else + bind \es sesh-sessions +end + +# Keybinding: Alt-t +if functions -q fish_vi_key_bindings + bind -M default \et sesh-list + bind -M insert \et sesh-list +else + bind \et sesh-list +end diff --git a/home/ghostty/config/config b/config/ghostty/config similarity index 94% rename from home/ghostty/config/config rename to config/ghostty/config index f091e3b..e91590a 100644 --- a/home/ghostty/config/config +++ b/config/ghostty/config @@ -1,3 +1,4 @@ +command = /etc/profiles/per-user/rayandrew/bin/fish --login --interactive gtk-single-instance = true gtk-titlebar = false window-decoration = server diff --git a/home/neovim/config/.gitignore b/config/nvim/.gitignore similarity index 100% rename from home/neovim/config/.gitignore rename to config/nvim/.gitignore diff --git a/home/neovim/config/.stylua.toml b/config/nvim/.stylua.toml similarity index 100% rename from home/neovim/config/.stylua.toml rename to config/nvim/.stylua.toml diff --git a/home/neovim/config/init.lua b/config/nvim/init.lua similarity index 97% rename from home/neovim/config/init.lua rename to config/nvim/init.lua index 709d7cd..e8137ff 100644 --- a/home/neovim/config/init.lua +++ b/config/nvim/init.lua @@ -53,6 +53,9 @@ add 'coder/claudecode.nvim' add 'mbbill/undotree' add 'cbochs/grapple.nvim' add 'fang2hou/blink-copilot' +add 'aserowy/tmux.nvim' +add 'NMAC427/guess-indent.nvim' +add 'wakatime/vim-wakatime' now(function() require('mini.icons').setup { @@ -72,6 +75,8 @@ now(function() end) later(function() + require('guess-indent').setup {} + require('snacks').setup { picker = { prompt = '๓ฐ‰ ', @@ -223,6 +228,8 @@ later(function() scope = 'git_branch', icons = false, } + + require('tmux').setup {} end) later(function() @@ -242,6 +249,7 @@ later(function() css = { 'prettierd', 'prettier', stop_after_first = true }, c = { 'clang_format' }, cpp = { 'clang_format' }, + nix = { 'nixfmt' }, }, } @@ -467,8 +475,14 @@ later(function() root_markers = { 'compile_commands.json', 'compile_flags.txt', '.clangd', '.git' }, } + -- Nix + vim.lsp.config.nixd = { + cmd = { 'nixd' }, + root_markers = { 'flake.nix', 'default.nix', 'shell.nix', '.git' }, + } + -- Enable language servers - vim.lsp.enable { 'lua_ls', 'ts_ls', 'pyright', 'rust_analyzer', 'clangd', 'copilot' } + vim.lsp.enable { 'lua_ls', 'ts_ls', 'pyright', 'rust_analyzer', 'clangd', 'copilot', 'nixd' } end) local map = function(mode, lhs, rhs, opts) @@ -484,9 +498,10 @@ map('n', 'fr', function() require('snacks').picker.recent() end, 'Find r map('n', ':', function() require('snacks').picker.command_history() end, 'Command history') -- map('n', 'ex', function() require('snacks').explorer() end, 'Toggle file tree') map('n', 'bb', function() require('snacks').picker.buffers() end, 'List buffers') +map('n', '', function() require('snacks').picker.buffers() end, 'List buffers') map('n', 'bd', function() require('snacks').bufdelete() end, 'Buffer delete') map('n', '.', function() require('snacks').scratch() end, 'Scratch buffer') -map('n', 'sf', function() require('snacks').picker.files() end, 'Search file') +map('n', 'sf', function() require('snacks').picker.git_files() end, 'Search file') map('n', 'sg', function() require('snacks').picker.grep() end, 'Search grep') map('n', 'sw', function() require('snacks').picker.grep_word() end, 'Search grep word') map('n', 'sb', function() require('snacks').picker.lines() end, 'Buffer lines') diff --git a/home/neovim/config/lua/compile-mode.lua b/config/nvim/lua/compile-mode.lua similarity index 100% rename from home/neovim/config/lua/compile-mode.lua rename to config/nvim/lua/compile-mode.lua diff --git a/home/neovim/config/lua/find-file.lua b/config/nvim/lua/find-file.lua similarity index 100% rename from home/neovim/config/lua/find-file.lua rename to config/nvim/lua/find-file.lua diff --git a/config/sesh/sesh.toml b/config/sesh/sesh.toml new file mode 100644 index 0000000..c70e98f --- /dev/null +++ b/config/sesh/sesh.toml @@ -0,0 +1,27 @@ +[[session]] +name = "Downloads" +path = "~/Downloads" +startup_command = "ls" + +[[session]] +name = "dotfiles" +path = "~/dotfiles" +startup_command = "nvim" + +[[session]] +name = "notes" +path = "~/NPersonal" +startup_command = "nvim" + +[[session]] +name = "tmux config" +path = "~/.config/tmux" +startup_command = "nvim tmux.conf" +preview_command = "bat --color=always ~/.config/tmux/tmux.conf" + +[[session]] +name = "nvim config" +path = "~/.config/nvim" +startup_command = "nvim init.lua" +preview_command = "bat --color=always ~/.config/nvim/init.lua" + diff --git a/darwin/default.nix b/darwin/default.nix index 41c45d2..c7e9898 100644 --- a/darwin/default.nix +++ b/darwin/default.nix @@ -1,10 +1,7 @@ { - inputs, lib, config, pkgs, - system, - host, user, ... }: diff --git a/flake.nix b/flake.nix index 09e98e0..23c8695 100644 --- a/flake.nix +++ b/flake.nix @@ -46,13 +46,10 @@ { self, nixpkgs, - home-manager, treefmt-nix, ... }@inputs: let - inherit (self) outputs; - user = "rayandrew"; lib = nixpkgs.lib; commonArgs = { inherit @@ -104,7 +101,6 @@ // { checks = forAllSystems ( { - pkgs, system, ... }: @@ -145,7 +141,7 @@ sops age ssh-to-age - # nixfmt-rfc-style + nixfmt-rfc-style ]; DIRENV_LOG_FORMAT = ""; }; diff --git a/home/default.nix b/home/default.nix index d755b41..8ad03df 100644 --- a/home/default.nix +++ b/home/default.nix @@ -1,9 +1,6 @@ { - inputs, - lib, config, pkgs, - system, dots, ... }: @@ -14,43 +11,13 @@ ./git.nix ./gui.nix ./latex.nix + ./neovim ./ssh ./shell - ./neovim + ./tmux ]; config = { - home.packages = - with pkgs; - [ - fd - fx - jq - sd - ugrep - unzip - fastfetch - # gpclient - openconnect - fd - ripgrep - yazi - tree - gnumake - texinfo - devenv - fontconfig - pandoc - duckdb - hyperfine - (pkgs.python311.withPackages (ppkgs: [ - ppkgs.numpy - ])) - aider-chat - ] - ++ lib.optionals pkgs.stdenv.isDarwin [ coreutils ] - ++ (lib.attrValues config.custom.shell.packages); - services = { gpg-agent = { enable = true; @@ -69,20 +36,12 @@ flake = dots; }; home-manager.enable = true; - bash = { - enable = true; - enableVteIntegration = true; - }; direnv = { enable = true; enableBashIntegration = config.programs.bash.enable; - enableFishIntegration = config.programs.fish.enable; + # enableFishIntegration = config.programs.fish.enable; enableZshIntegration = config.programs.zsh.enable; }; - zsh = { - enable = true; - enableVteIntegration = true; - }; gpg = { enable = true; }; diff --git a/home/emacs/default.nix b/home/emacs/default.nix index 2185c54..5c94f89 100644 --- a/home/emacs/default.nix +++ b/home/emacs/default.nix @@ -1,7 +1,6 @@ { lib, pkgs, - inputs, config, dots, ... @@ -25,6 +24,6 @@ source = "${pkgs.custom.minimal-emacs-d}"; }; - xdg.configFile."emacs".source = config.lib.file.mkOutOfStoreSymlink "${dots}/home/emacs/config"; + xdg.configFile."emacs".source = config.lib.file.mkOutOfStoreSymlink "${dots}/config/emacs"; }; } diff --git a/home/ghostty/default.nix b/home/ghostty/default.nix index cba0724..2f6684c 100644 --- a/home/ghostty/default.nix +++ b/home/ghostty/default.nix @@ -3,7 +3,6 @@ pkgs, inputs, lib, - system-font, dots, ... }: @@ -22,6 +21,6 @@ inputs.ghostty.packages."${system}".default ] ); - xdg.configFile."ghostty".source = config.lib.file.mkOutOfStoreSymlink "${dots}/home/ghostty/config"; + xdg.configFile."ghostty".source = config.lib.file.mkOutOfStoreSymlink "${dots}/config/ghostty"; }; } diff --git a/home/neovim/default.nix b/home/neovim/default.nix index d585ee6..7acd1d7 100644 --- a/home/neovim/default.nix +++ b/home/neovim/default.nix @@ -1,7 +1,6 @@ { lib, pkgs, - inputs, config, dots, ... @@ -18,6 +17,6 @@ (neovim.override { withNodeJs = true; }) ]; - xdg.configFile."nvim".source = config.lib.file.mkOutOfStoreSymlink "${dots}/home/neovim/config"; + xdg.configFile."nvim".source = config.lib.file.mkOutOfStoreSymlink "${dots}/config/nvim"; }; } diff --git a/home/neovim/old_config/.gitignore b/home/neovim/old_config/.gitignore deleted file mode 100644 index 8a192ca..0000000 --- a/home/neovim/old_config/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -tags -test.sh -.luarc.json -nvim - -spell/ diff --git a/home/neovim/old_config/.stylua.toml b/home/neovim/old_config/.stylua.toml deleted file mode 100644 index 139e939..0000000 --- a/home/neovim/old_config/.stylua.toml +++ /dev/null @@ -1,6 +0,0 @@ -column_width = 160 -line_endings = "Unix" -indent_type = "Spaces" -indent_width = 2 -quote_style = "AutoPreferSingle" -call_parentheses = "None" diff --git a/home/neovim/old_config/init.lua b/home/neovim/old_config/init.lua deleted file mode 100644 index 24a64f2..0000000 --- a/home/neovim/old_config/init.lua +++ /dev/null @@ -1,905 +0,0 @@ --- Set as the leader key --- See `:help mapleader` --- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used) -vim.g.mapleader = ' ' -vim.g.maplocalleader = ' ' - --- Set to true if you have a Nerd Font installed and selected in the terminal -vim.g.have_nerd_font = false - --- [[ Setting options ]] --- See `:help vim.opt` --- NOTE: You can change these options as you wish! --- For more options, you can see `:help option-list` - --- Make line numbers default -vim.opt.number = true --- You can also add relative line numbers, to help with jumping. --- Experiment for yourself to see if you like it! --- vim.opt.relativenumber = true - --- Enable mouse mode, can be useful for resizing splits for example! -vim.opt.mouse = 'a' - --- Don't show the mode, since it's already in the status line -vim.opt.showmode = false - --- Sync clipboard between OS and Neovim. --- Schedule the setting after `UiEnter` because it can increase startup-time. --- Remove this option if you want your OS clipboard to remain independent. --- See `:help 'clipboard'` -vim.schedule(function() - vim.opt.clipboard = 'unnamedplus' -end) - --- Enable break indent -vim.opt.breakindent = true - --- Save undo history -vim.opt.undofile = true - --- Case-insensitive searching UNLESS \C or one or more capital letters in the search term -vim.opt.ignorecase = true -vim.opt.smartcase = true - --- Keep signcolumn on by default -vim.opt.signcolumn = 'yes' - --- Decrease update time -vim.opt.updatetime = 250 - --- Decrease mapped sequence wait time -vim.opt.timeoutlen = 300 - --- Configure how new splits should be opened -vim.opt.splitright = true -vim.opt.splitbelow = true - --- Sets how neovim will display certain whitespace characters in the editor. --- See `:help 'list'` --- and `:help 'listchars'` -vim.opt.list = true -vim.opt.listchars = { tab = 'ยป ', trail = 'ยท', nbsp = 'โฃ' } - --- Preview substitutions live, as you type! -vim.opt.inccommand = 'split' - --- Show which line your cursor is on -vim.opt.cursorline = true - --- Minimal number of screen lines to keep above and below the cursor. -vim.opt.scrolloff = 10 - --- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`), --- instead raise a dialog asking if you wish to save the current file(s) --- See `:help 'confirm'` -vim.opt.confirm = true - --- [[ Basic Keymaps ]] --- See `:help vim.keymap.set()` - --- Clear highlights on search when pressing in normal mode --- See `:help hlsearch` -vim.keymap.set('n', '', 'nohlsearch') - --- Diagnostic keymaps -vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' }) - --- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier --- for people to discover. Otherwise, you normally need to press , which --- is not what someone will guess without a bit more experience. --- --- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping --- or just use to exit terminal mode -vim.keymap.set('t', '', '', { desc = 'Exit terminal mode' }) - --- TIP: Disable arrow keys in normal mode --- vim.keymap.set('n', '', 'echo "Use h to move!!"') --- vim.keymap.set('n', '', 'echo "Use l to move!!"') --- vim.keymap.set('n', '', 'echo "Use k to move!!"') --- vim.keymap.set('n', '', 'echo "Use j to move!!"') - --- Keybinds to make split navigation easier. --- Use CTRL+ to switch between windows --- --- See `:help wincmd` for a list of all window commands -vim.keymap.set('n', '', '', { desc = 'Move focus to the left window' }) -vim.keymap.set('n', '', '', { desc = 'Move focus to the right window' }) -vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' }) -vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) - --- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes --- vim.keymap.set("n", "", "H", { desc = "Move window to the left" }) --- vim.keymap.set("n", "", "L", { desc = "Move window to the right" }) --- vim.keymap.set("n", "", "J", { desc = "Move window to the lower" }) --- vim.keymap.set("n", "", "K", { desc = "Move window to the upper" }) - --- [[ Basic Autocommands ]] --- See `:help lua-guide-autocommands` - --- Highlight when yanking (copying) text --- Try it with `yap` in normal mode --- See `:help vim.highlight.on_yank()` -vim.api.nvim_create_autocmd('TextYankPost', { - desc = 'Highlight when yanking (copying) text', - group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }), - callback = function() - vim.highlight.on_yank() - end, -}) - --- [[ Install `lazy.nvim` plugin manager ]] --- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info -local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' -if not (vim.uv or vim.loop).fs_stat(lazypath) then - local lazyrepo = 'https://github.com/folke/lazy.nvim.git' - local out = vim.fn.system { 'git', 'clone', '--filter=blob:none', '--branch=stable', lazyrepo, lazypath } - if vim.v.shell_error ~= 0 then - error('Error cloning lazy.nvim:\n' .. out) - end -end ---@diagnostic disable-next-line: undefined-field -vim.opt.rtp:prepend(lazypath) - --- [[ Configure and install plugins ]] --- --- To check the current status of your plugins, run --- :Lazy --- --- You can press `?` in this menu for help. Use `:q` to close the window --- --- To update plugins you can run --- :Lazy update --- --- NOTE: Here is where you install your plugins. -require('lazy').setup({ - -- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link). - 'tpope/vim-sleuth', -- Detect tabstop and shiftwidth automatically - - -- NOTE: Plugins can also be added by using a table, - -- with the first argument being the link and the following - -- keys can be used to configure plugin behavior/loading/etc. - -- - -- Use `opts = {}` to automatically pass options to a plugin's `setup()` function, forcing the plugin to be loaded. - -- - - -- Alternatively, use `config = function() ... end` for full control over the configuration. - -- If you prefer to call `setup` explicitly, use: - -- { - -- 'lewis6991/gitsigns.nvim', - -- config = function() - -- require('gitsigns').setup({ - -- -- Your gitsigns configuration here - -- }) - -- end, - -- } - -- - -- Here is a more advanced example where we pass configuration - -- options to `gitsigns.nvim`. - -- - -- See `:help gitsigns` to understand what the configuration keys do - { -- Adds git related signs to the gutter, as well as utilities for managing changes - 'lewis6991/gitsigns.nvim', - opts = { - signs = { - add = { text = '+' }, - change = { text = '~' }, - delete = { text = '_' }, - topdelete = { text = 'โ€พ' }, - changedelete = { text = '~' }, - }, - }, - }, - - -- NOTE: Plugins can also be configured to run Lua code when they are loaded. - -- - -- This is often very useful to both group configuration, as well as handle - -- lazy loading plugins that don't need to be loaded immediately at startup. - -- - -- For example, in the following configuration, we use: - -- event = 'VimEnter' - -- - -- which loads which-key before all the UI elements are loaded. Events can be - -- normal autocommands events (`:help autocmd-events`). - -- - -- Then, because we use the `opts` key (recommended), the configuration runs - -- after the plugin has been loaded as `require(MODULE).setup(opts)`. - - { -- Useful plugin to show you pending keybinds. - 'folke/which-key.nvim', - event = 'VimEnter', -- Sets the loading event to 'VimEnter' - opts = { - -- delay between pressing a key and opening which-key (milliseconds) - -- this setting is independent of vim.opt.timeoutlen - delay = 0, - icons = { - -- set icon mappings to true if you have a Nerd Font - mappings = vim.g.have_nerd_font, - -- If you are using a Nerd Font: set icons.keys to an empty table which will use the - -- default which-key.nvim defined Nerd Font icons, otherwise define a string table - keys = vim.g.have_nerd_font and {} or { - Up = ' ', - Down = ' ', - Left = ' ', - Right = ' ', - C = ' ', - M = ' ', - D = ' ', - S = ' ', - CR = ' ', - Esc = ' ', - ScrollWheelDown = ' ', - ScrollWheelUp = ' ', - NL = ' ', - BS = ' ', - Space = ' ', - Tab = ' ', - F1 = '', - F2 = '', - F3 = '', - F4 = '', - F5 = '', - F6 = '', - F7 = '', - F8 = '', - F9 = '', - F10 = '', - F11 = '', - F12 = '', - }, - }, - - -- Document existing key chains - spec = { - { 's', group = '[S]earch' }, - { 't', group = '[T]oggle' }, - { 'h', group = 'Git [H]unk', mode = { 'n', 'v' } }, - }, - }, - }, - - -- NOTE: Plugins can specify dependencies. - -- - -- The dependencies are proper plugin specifications as well - anything - -- you do for a plugin at the top level, you can do for a dependency. - -- - -- Use the `dependencies` key to specify the dependencies of a particular plugin - - { -- Fuzzy Finder (files, lsp, etc) - 'nvim-telescope/telescope.nvim', - event = 'VimEnter', - dependencies = { - 'nvim-lua/plenary.nvim', - { -- If encountering errors, see telescope-fzf-native README for installation instructions - 'nvim-telescope/telescope-fzf-native.nvim', - - -- `build` is used to run some command when the plugin is installed/updated. - -- This is only run then, not every time Neovim starts up. - build = 'make', - - -- `cond` is a condition used to determine whether this plugin should be - -- installed and loaded. - cond = function() - return vim.fn.executable 'make' == 1 - end, - }, - { 'nvim-telescope/telescope-ui-select.nvim' }, - - -- Useful for getting pretty icons, but requires a Nerd Font. - { 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font }, - }, - config = function() - -- Telescope is a fuzzy finder that comes with a lot of different things that - -- it can fuzzy find! It's more than just a "file finder", it can search - -- many different aspects of Neovim, your workspace, LSP, and more! - -- - -- The easiest way to use Telescope, is to start by doing something like: - -- :Telescope help_tags - -- - -- After running this command, a window will open up and you're able to - -- type in the prompt window. You'll see a list of `help_tags` options and - -- a corresponding preview of the help. - -- - -- Two important keymaps to use while in Telescope are: - -- - Insert mode: - -- - Normal mode: ? - -- - -- This opens a window that shows you all of the keymaps for the current - -- Telescope picker. This is really useful to discover what Telescope can - -- do as well as how to actually do it! - - -- [[ Configure Telescope ]] - -- See `:help telescope` and `:help telescope.setup()` - require('telescope').setup { - -- You can put your default mappings / updates / etc. in here - -- All the info you're looking for is in `:help telescope.setup()` - -- - -- defaults = { - -- mappings = { - -- i = { [''] = 'to_fuzzy_refine' }, - -- }, - -- }, - -- pickers = {} - extensions = { - ['ui-select'] = { - require('telescope.themes').get_dropdown(), - }, - }, - } - - -- Enable Telescope extensions if they are installed - pcall(require('telescope').load_extension, 'fzf') - pcall(require('telescope').load_extension, 'ui-select') - - -- See `:help telescope.builtin` - local builtin = require 'telescope.builtin' - vim.keymap.set('n', 'sh', builtin.help_tags, { desc = '[S]earch [H]elp' }) - vim.keymap.set('n', 'sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' }) - vim.keymap.set('n', 'sf', builtin.find_files, { desc = '[S]earch [F]iles' }) - vim.keymap.set('n', 'ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' }) - vim.keymap.set('n', 'sw', builtin.grep_string, { desc = '[S]earch current [W]ord' }) - vim.keymap.set('n', 'sg', builtin.live_grep, { desc = '[S]earch by [G]rep' }) - vim.keymap.set('n', 'sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' }) - vim.keymap.set('n', 'sr', builtin.resume, { desc = '[S]earch [R]esume' }) - vim.keymap.set('n', 's.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' }) - vim.keymap.set('n', '', builtin.buffers, { desc = '[ ] Find existing buffers' }) - - -- Slightly advanced example of overriding default behavior and theme - vim.keymap.set('n', '/', function() - -- You can pass additional configuration to Telescope to change the theme, layout, etc. - builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { - winblend = 10, - previewer = false, - }) - end, { desc = '[/] Fuzzily search in current buffer' }) - - -- It's also possible to pass additional configuration options. - -- See `:help telescope.builtin.live_grep()` for information about particular keys - vim.keymap.set('n', 's/', function() - builtin.live_grep { - grep_open_files = true, - prompt_title = 'Live Grep in Open Files', - } - end, { desc = '[S]earch [/] in Open Files' }) - - -- Shortcut for searching your Neovim configuration files - vim.keymap.set('n', 'sn', function() - builtin.find_files { cwd = vim.fn.stdpath 'config' } - end, { desc = '[S]earch [N]eovim files' }) - end, - }, - - -- LSP Plugins - { - -- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins - -- used for completion, annotations and signatures of Neovim apis - 'folke/lazydev.nvim', - ft = 'lua', - opts = { - library = { - -- Load luvit types when the `vim.uv` word is found - { path = '${3rd}/luv/library', words = { 'vim%.uv' } }, - }, - }, - }, - { - -- Main LSP Configuration - 'neovim/nvim-lspconfig', - dependencies = { - -- Automatically install LSPs and related tools to stdpath for Neovim - -- Mason must be loaded before its dependents so we need to set it up here. - -- NOTE: `opts = {}` is the same as calling `require('mason').setup({})` - { 'williamboman/mason.nvim', opts = {} }, - 'williamboman/mason-lspconfig.nvim', - 'WhoIsSethDaniel/mason-tool-installer.nvim', - - -- Useful status updates for LSP. - { 'j-hui/fidget.nvim', opts = {} }, - - -- Allows extra capabilities provided by blink.cmp - 'saghen/blink.cmp', - }, - config = function() - -- Brief aside: **What is LSP?** - -- - -- LSP is an initialism you've probably heard, but might not understand what it is. - -- - -- LSP stands for Language Server Protocol. It's a protocol that helps editors - -- and language tooling communicate in a standardized fashion. - -- - -- In general, you have a "server" which is some tool built to understand a particular - -- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers - -- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone - -- processes that communicate with some "client" - in this case, Neovim! - -- - -- LSP provides Neovim with features like: - -- - Go to definition - -- - Find references - -- - Autocompletion - -- - Symbol Search - -- - and more! - -- - -- Thus, Language Servers are external tools that must be installed separately from - -- Neovim. This is where `mason` and related plugins come into play. - -- - -- If you're wondering about lsp vs treesitter, you can check out the wonderfully - -- and elegantly composed help section, `:help lsp-vs-treesitter` - - -- This function gets run when an LSP attaches to a particular buffer. - -- That is to say, every time a new file is opened that is associated with - -- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this - -- function will be executed to configure the current buffer - vim.api.nvim_create_autocmd('LspAttach', { - group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }), - callback = function(event) - -- NOTE: Remember that Lua is a real programming language, and as such it is possible - -- to define small helper and utility functions so you don't have to repeat yourself. - -- - -- In this case, we create a function that lets us more easily define mappings specific - -- for LSP related items. It sets the mode, buffer and description for us each time. - local map = function(keys, func, desc, mode) - mode = mode or 'n' - vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc }) - end - - -- Rename the variable under your cursor. - -- Most Language Servers support renaming across files, etc. - map('grn', vim.lsp.buf.rename, '[R]e[n]ame') - - -- Execute a code action, usually your cursor needs to be on top of an error - -- or a suggestion from your LSP for this to activate. - map('gra', vim.lsp.buf.code_action, '[G]oto Code [A]ction', { 'n', 'x' }) - - -- Find references for the word under your cursor. - map('grr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') - - -- Jump to the implementation of the word under your cursor. - -- Useful when your language has ways of declaring types without an actual implementation. - map('gri', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') - - -- Jump to the definition of the word under your cursor. - -- This is where a variable was first declared, or where a function is defined, etc. - -- To jump back, press . - map('grd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition') - - -- WARN: This is not Goto Definition, this is Goto Declaration. - -- For example, in C this would take you to the header. - map('grD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') - - -- Fuzzy find all the symbols in your current document. - -- Symbols are things like variables, functions, types, etc. - map('gO', require('telescope.builtin').lsp_document_symbols, 'Open Document Symbols') - - -- Fuzzy find all the symbols in your current workspace. - -- Similar to document symbols, except searches over your entire project. - map('gW', require('telescope.builtin').lsp_dynamic_workspace_symbols, 'Open Workspace Symbols') - - -- Jump to the type of the word under your cursor. - -- Useful when you're not sure what type a variable is and you want to see - -- the definition of its *type*, not where it was *defined*. - map('grt', require('telescope.builtin').lsp_type_definitions, '[G]oto [T]ype Definition') - - -- This function resolves a difference between neovim nightly (version 0.11) and stable (version 0.10) - ---@param client vim.lsp.Client - ---@param method vim.lsp.protocol.Method - ---@param bufnr? integer some lsp support methods only in specific files - ---@return boolean - local function client_supports_method(client, method, bufnr) - if vim.fn.has 'nvim-0.11' == 1 then - return client:supports_method(method, bufnr) - else - return client.supports_method(method, { bufnr = bufnr }) - end - end - - -- The following two autocommands are used to highlight references of the - -- word under your cursor when your cursor rests there for a little while. - -- See `:help CursorHold` for information about when this is executed - -- - -- When you move your cursor, the highlights will be cleared (the second autocommand). - local client = vim.lsp.get_client_by_id(event.data.client_id) - if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_documentHighlight, event.buf) then - local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false }) - vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { - buffer = event.buf, - group = highlight_augroup, - callback = vim.lsp.buf.document_highlight, - }) - - vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { - buffer = event.buf, - group = highlight_augroup, - callback = vim.lsp.buf.clear_references, - }) - - vim.api.nvim_create_autocmd('LspDetach', { - group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }), - callback = function(event2) - vim.lsp.buf.clear_references() - vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf } - end, - }) - end - - -- The following code creates a keymap to toggle inlay hints in your - -- code, if the language server you are using supports them - -- - -- This may be unwanted, since they displace some of your code - if client and client_supports_method(client, vim.lsp.protocol.Methods.textDocument_inlayHint, event.buf) then - map('th', function() - vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) - end, '[T]oggle Inlay [H]ints') - end - end, - }) - - -- Diagnostic Config - -- See :help vim.diagnostic.Opts - vim.diagnostic.config { - severity_sort = true, - float = { border = 'rounded', source = 'if_many' }, - underline = { severity = vim.diagnostic.severity.ERROR }, - signs = vim.g.have_nerd_font and { - text = { - [vim.diagnostic.severity.ERROR] = '๓ฐ…š ', - [vim.diagnostic.severity.WARN] = '๓ฐ€ช ', - [vim.diagnostic.severity.INFO] = '๓ฐ‹ฝ ', - [vim.diagnostic.severity.HINT] = '๓ฐŒถ ', - }, - } or {}, - virtual_text = { - source = 'if_many', - spacing = 2, - format = function(diagnostic) - local diagnostic_message = { - [vim.diagnostic.severity.ERROR] = diagnostic.message, - [vim.diagnostic.severity.WARN] = diagnostic.message, - [vim.diagnostic.severity.INFO] = diagnostic.message, - [vim.diagnostic.severity.HINT] = diagnostic.message, - } - return diagnostic_message[diagnostic.severity] - end, - }, - } - - -- LSP servers and clients are able to communicate to each other what features they support. - -- By default, Neovim doesn't support everything that is in the LSP specification. - -- When you add blink.cmp, luasnip, etc. Neovim now has *more* capabilities. - -- So, we create new capabilities with blink.cmp, and then broadcast that to the servers. - local capabilities = require('blink.cmp').get_lsp_capabilities() - - -- Enable the following language servers - -- Feel free to add/remove any LSPs that you want here. They will automatically be installed. - -- - -- Add any additional override configuration in the following tables. Available keys are: - -- - cmd (table): Override the default command used to start the server - -- - filetypes (table): Override the default list of associated filetypes for the server - -- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features. - -- - settings (table): Override the default settings passed when initializing the server. - -- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/ - local servers = { - -- clangd = {}, - -- gopls = {}, - -- pyright = {}, - -- rust_analyzer = {}, - -- ... etc. See `:help lspconfig-all` for a list of all the pre-configured LSPs - -- - -- Some languages (like typescript) have entire language plugins that can be useful: - -- https://github.com/pmizio/typescript-tools.nvim - -- - -- But for many setups, the LSP (`ts_ls`) will work just fine - -- ts_ls = {}, - -- - - lua_ls = { - -- cmd = { ... }, - -- filetypes = { ... }, - -- capabilities = {}, - settings = { - Lua = { - completion = { - callSnippet = 'Replace', - }, - -- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings - -- diagnostics = { disable = { 'missing-fields' } }, - }, - }, - }, - } - - -- Ensure the servers and tools above are installed - -- - -- To check the current status of installed tools and/or manually install - -- other tools, you can run - -- :Mason - -- - -- You can press `g?` for help in this menu. - -- - -- `mason` had to be setup earlier: to configure its options see the - -- `dependencies` table for `nvim-lspconfig` above. - -- - -- You can add other tools here that you want Mason to install - -- for you, so that they are available from within Neovim. - local ensure_installed = vim.tbl_keys(servers or {}) - vim.list_extend(ensure_installed, { - 'stylua', -- Used to format Lua code - }) - require('mason-tool-installer').setup { ensure_installed = ensure_installed } - - require('mason-lspconfig').setup { - ensure_installed = {}, -- explicitly set to an empty table (Kickstart populates installs via mason-tool-installer) - automatic_installation = false, - handlers = { - function(server_name) - local server = servers[server_name] or {} - -- This handles overriding only values explicitly passed - -- by the server configuration above. Useful when disabling - -- certain features of an LSP (for example, turning off formatting for ts_ls) - server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {}) - require('lspconfig')[server_name].setup(server) - end, - }, - } - end, - }, - - { -- Autoformat - 'stevearc/conform.nvim', - event = { 'BufWritePre' }, - cmd = { 'ConformInfo' }, - keys = { - { - 'f', - function() - require('conform').format { async = true, lsp_format = 'fallback' } - end, - mode = '', - desc = '[F]ormat buffer', - }, - }, - opts = { - notify_on_error = false, - format_on_save = function(bufnr) - -- Disable "format_on_save lsp_fallback" for languages that don't - -- have a well standardized coding style. You can add additional - -- languages here or re-enable it for the disabled ones. - local disable_filetypes = { c = true, cpp = true } - if disable_filetypes[vim.bo[bufnr].filetype] then - return nil - else - return { - timeout_ms = 500, - lsp_format = 'fallback', - } - end - end, - formatters_by_ft = { - lua = { 'stylua' }, - -- Conform can also run multiple formatters sequentially - -- python = { "isort", "black" }, - -- - -- You can use 'stop_after_first' to run the first available formatter from the list - -- javascript = { "prettierd", "prettier", stop_after_first = true }, - }, - }, - }, - - { -- Autocompletion - 'saghen/blink.cmp', - event = 'VimEnter', - version = '1.*', - dependencies = { - -- Snippet Engine - { - 'L3MON4D3/LuaSnip', - version = '2.*', - build = (function() - -- Build Step is needed for regex support in snippets. - -- This step is not supported in many windows environments. - -- Remove the below condition to re-enable on windows. - if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then - return - end - return 'make install_jsregexp' - end)(), - dependencies = { - -- `friendly-snippets` contains a variety of premade snippets. - -- See the README about individual language/framework/plugin snippets: - -- https://github.com/rafamadriz/friendly-snippets - -- { - -- 'rafamadriz/friendly-snippets', - -- config = function() - -- require('luasnip.loaders.from_vscode').lazy_load() - -- end, - -- }, - }, - opts = {}, - }, - 'folke/lazydev.nvim', - }, - --- @module 'blink.cmp' - --- @type blink.cmp.Config - opts = { - keymap = { - -- 'default' (recommended) for mappings similar to built-in completions - -- to accept ([y]es) the completion. - -- This will auto-import if your LSP supports it. - -- This will expand snippets if the LSP sent a snippet. - -- 'super-tab' for tab to accept - -- 'enter' for enter to accept - -- 'none' for no mappings - -- - -- For an understanding of why the 'default' preset is recommended, - -- you will need to read `:help ins-completion` - -- - -- No, but seriously. Please read `:help ins-completion`, it is really good! - -- - -- All presets have the following mappings: - -- /: move to right/left of your snippet expansion - -- : Open menu or open docs if already open - -- / or /: Select next/previous item - -- : Hide menu - -- : Toggle signature help - -- - -- See :h blink-cmp-config-keymap for defining your own keymap - preset = 'default', - - -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: - -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps - }, - - appearance = { - -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' - -- Adjusts spacing to ensure icons are aligned - nerd_font_variant = 'mono', - }, - - completion = { - -- By default, you may press `` to show the documentation. - -- Optionally, set `auto_show = true` to show the documentation after a delay. - documentation = { auto_show = false, auto_show_delay_ms = 500 }, - }, - - sources = { - default = { 'lsp', 'path', 'snippets', 'lazydev' }, - providers = { - lazydev = { module = 'lazydev.integrations.blink', score_offset = 100 }, - }, - }, - - snippets = { preset = 'luasnip' }, - - -- Blink.cmp includes an optional, recommended rust fuzzy matcher, - -- which automatically downloads a prebuilt binary when enabled. - -- - -- By default, we use the Lua implementation instead, but you may enable - -- the rust implementation via `'prefer_rust_with_warning'` - -- - -- See :h blink-cmp-config-fuzzy for more information - fuzzy = { implementation = 'lua' }, - - -- Shows a signature help window while you type arguments for a function - signature = { enabled = true }, - }, - }, - - -- { -- You can easily change to a different colorscheme. - -- -- Change the name of the colorscheme plugin below, and then - -- -- change the command in the config to whatever the name of that colorscheme is. - -- -- - -- -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`. - -- 'folke/tokyonight.nvim', - -- priority = 1000, -- Make sure to load this before all the other start plugins. - -- config = function() - -- ---@diagnostic disable-next-line: missing-fields - -- require('tokyonight').setup { - -- styles = { - -- comments = { italic = false }, -- Disable italics in comments - -- }, - -- } - -- - -- -- Load the colorscheme here. - -- -- Like many other themes, this one has different styles, and you could load - -- -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. - -- vim.cmd.colorscheme 'tokyonight-night' - -- end, - -- }, - - { - "whizikxd/naysayer-colors.nvim", - priority = 1000, - config = function() - vim.cmd.colorscheme "naysayer" - end - }, - - -- Highlight todo, notes, etc in comments - { 'folke/todo-comments.nvim', event = 'VimEnter', dependencies = { 'nvim-lua/plenary.nvim' }, opts = { signs = false } }, - - { -- Collection of various small independent plugins/modules - 'echasnovski/mini.nvim', - config = function() - -- Better Around/Inside textobjects - -- - -- Examples: - -- - va) - [V]isually select [A]round [)]paren - -- - yinq - [Y]ank [I]nside [N]ext [Q]uote - -- - ci' - [C]hange [I]nside [']quote - require('mini.ai').setup { n_lines = 500 } - - -- Add/delete/replace surroundings (brackets, quotes, etc.) - -- - -- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren - -- - sd' - [S]urround [D]elete [']quotes - -- - sr)' - [S]urround [R]eplace [)] ['] - require('mini.surround').setup() - - -- Simple and easy statusline. - -- You could remove this setup call if you don't like it, - -- and try some other statusline plugin - local statusline = require 'mini.statusline' - -- set use_icons to true if you have a Nerd Font - statusline.setup { use_icons = vim.g.have_nerd_font } - - -- You can configure sections in the statusline by overriding their - -- default behavior. For example, here we set the section for - -- cursor location to LINE:COLUMN - ---@diagnostic disable-next-line: duplicate-set-field - statusline.section_location = function() - return '%2l:%-2v' - end - - -- ... and there is more! - -- Check out: https://github.com/echasnovski/mini.nvim - end, - }, - { -- Highlight, edit, and navigate code - 'nvim-treesitter/nvim-treesitter', - build = ':TSUpdate', - main = 'nvim-treesitter.configs', -- Sets main module to use for opts - -- [[ Configure Treesitter ]] See `:help nvim-treesitter` - opts = { - ensure_installed = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc' }, - -- Autoinstall languages that are not installed - auto_install = true, - highlight = { - enable = true, - -- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules. - -- If you are experiencing weird indenting issues, add the language to - -- the list of additional_vim_regex_highlighting and disabled languages for indent. - additional_vim_regex_highlighting = { 'ruby' }, - }, - indent = { enable = true, disable = { 'ruby' } }, - }, - -- There are additional nvim-treesitter modules that you can use to interact - -- with nvim-treesitter. You should go explore a few and see what interests you: - -- - -- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod` - -- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context - -- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects - }, - - { import = 'rayandrew.plugins' }, -}, { - ui = { - -- If you are using a Nerd Font: set icons to an empty table which will use the - -- default lazy.nvim defined Nerd Font icons, otherwise define a unicode icons table - icons = vim.g.have_nerd_font and {} or { - cmd = 'โŒ˜', - config = '๐Ÿ› ', - event = '๐Ÿ“…', - ft = '๐Ÿ“‚', - init = 'โš™', - keys = '๐Ÿ—', - plugin = '๐Ÿ”Œ', - runtime = '๐Ÿ’ป', - require = '๐ŸŒ™', - source = '๐Ÿ“„', - start = '๐Ÿš€', - task = '๐Ÿ“Œ', - lazy = '๐Ÿ’ค ', - }, - }, -}) - --- The line beneath this is called `modeline`. See `:help modeline` --- vim: ts=2 sts=2 sw=2 et diff --git a/home/neovim/old_config/lazy-lock.json b/home/neovim/old_config/lazy-lock.json deleted file mode 100644 index 270b42b..0000000 --- a/home/neovim/old_config/lazy-lock.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "LuaSnip": { "branch": "master", "commit": "03c8e67eb7293c404845b3982db895d59c0d1538" }, - "blink.cmp": { "branch": "main", "commit": "cb5e346d9e0efa7a3eee7fd4da0b690c48d2a98e" }, - "conform.nvim": { "branch": "master", "commit": "eebc724d12c5579d733d1f801386e0ceb909d001" }, - "fidget.nvim": { "branch": "main", "commit": "d9ba6b7bfe29b3119a610892af67602641da778e" }, - "gitsigns.nvim": { "branch": "main", "commit": "fcfa7a989cd6fed10abf02d9880dc76d7a38167d" }, - "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, - "lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" }, - "mason-tool-installer.nvim": { "branch": "main", "commit": "1255518cb067e038a4755f5cb3e980f79b6ab89c" }, - "mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" }, - "mini.nvim": { "branch": "main", "commit": "b418d585d99bd1c1a4b04dc8b2c585471665173a" }, - "naysayer-colors.nvim": { "branch": "master", "commit": "5180bc5c1e25168a3a5c52a6996aba07ff934480" }, - "nvim-autopairs": { "branch": "master", "commit": "4d74e75913832866aa7de35e4202463ddf6efd1b" }, - "nvim-lspconfig": { "branch": "master", "commit": "81920264a264144bd075f7f48f0c4356fc2c6236" }, - "nvim-treesitter": { "branch": "master", "commit": "7bbed4b548d9a81c14351bda93d16336edefd067" }, - "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, - "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, - "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, - "telescope.nvim": { "branch": "master", "commit": "a4ed82509cecc56df1c7138920a1aeaf246c0ac5" }, - "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" }, - "vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" }, - "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } -} diff --git a/home/neovim/old_config/lua/rayandrew/health.lua b/home/neovim/old_config/lua/rayandrew/health.lua deleted file mode 100644 index b59d086..0000000 --- a/home/neovim/old_config/lua/rayandrew/health.lua +++ /dev/null @@ -1,52 +0,0 @@ ---[[ --- --- This file is not required for your own configuration, --- but helps people determine if their system is setup correctly. --- ---]] - -local check_version = function() - local verstr = tostring(vim.version()) - if not vim.version.ge then - vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr)) - return - end - - if vim.version.ge(vim.version(), '0.10-dev') then - vim.health.ok(string.format("Neovim version is: '%s'", verstr)) - else - vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr)) - end -end - -local check_external_reqs = function() - -- Basic utils: `git`, `make`, `unzip` - for _, exe in ipairs { 'git', 'make', 'unzip', 'rg' } do - local is_executable = vim.fn.executable(exe) == 1 - if is_executable then - vim.health.ok(string.format("Found executable: '%s'", exe)) - else - vim.health.warn(string.format("Could not find executable: '%s'", exe)) - end - end - - return true -end - -return { - check = function() - vim.health.start 'kickstart.nvim' - - vim.health.info [[NOTE: Not every warning is a 'must-fix' in `:checkhealth` - - Fix only warnings for plugins and languages you intend to use. - Mason will give warnings for languages that are not installed. - You do not need to install, unless you want to use those languages!]] - - local uv = vim.uv or vim.loop - vim.health.info('System Information: ' .. vim.inspect(uv.os_uname())) - - check_version() - check_external_reqs() - end, -} diff --git a/home/neovim/old_config/lua/rayandrew/plugins/autopairs.lua b/home/neovim/old_config/lua/rayandrew/plugins/autopairs.lua deleted file mode 100644 index 2106204..0000000 --- a/home/neovim/old_config/lua/rayandrew/plugins/autopairs.lua +++ /dev/null @@ -1,5 +0,0 @@ -return { - 'windwp/nvim-autopairs', - event = 'InsertEnter', - opts = {}, -} diff --git a/home/neovim/old_config/lua/rayandrew/plugins/init.lua b/home/neovim/old_config/lua/rayandrew/plugins/init.lua deleted file mode 100644 index a564707..0000000 --- a/home/neovim/old_config/lua/rayandrew/plugins/init.lua +++ /dev/null @@ -1 +0,0 @@ -return {} diff --git a/home/shell/default.nix b/home/shell/default.nix index cfb5aea..f268a49 100644 --- a/home/shell/default.nix +++ b/home/shell/default.nix @@ -32,39 +32,72 @@ } ''; }; - # additionalSourceFile = mkOption { - # type = - # with types; - # nullOr (oneOf [ - # path - # str - # ]); - # default = "${dots}/src/home/shell/custom.sh"; - # }; }; }; config = { - # xdg.configFile."emacs".source = config.lib.file.mkOutOfStoreSymlink "${dots}/home/emacs/config"; + home.packages = + with pkgs; + [ + nixd + nixfmt-rfc-style + fd + fx + jq + sd + ugrep + unzip + fastfetch + openconnect + fd + ripgrep + yazi + tree + gnumake + texinfo + devenv + fontconfig + pandoc + duckdb + hyperfine + (pkgs.python311.withPackages (ppkgs: [ + ppkgs.numpy + ])) + gum + ] + ++ lib.optionals pkgs.stdenv.isDarwin [ coreutils ] + ++ (lib.attrValues config.custom.shell.packages); + programs.bash = { + enable = true; + enableVteIntegration = true; bashrcExtra = lib.mkAfter '' - export PATH="${dots}/home/shell/bin:$PATH" + export PATH="${dots}/bin:$PATH" ''; }; programs.zsh = { + enable = true; + enableVteIntegration = true; initContent = lib.mkAfter '' - export PATH="${dots}/home/shell/bin:$PATH" + export PATH="${dots}/bin:$PATH" ''; }; - # programs.bash = lib.mkIf (config.custom.shell.additionalSourceFile != null) { - # bashrcExtra = lib.mkAfter '' - # source ${config.custom.shell.additionalSourceFile} - # ''; - # }; - # programs.zsh = lib.mkIf (config.custom.shell.additionalSourceFile != null) { - # initExtra = lib.mkAfter '' - # source ${config.custom.shell.additionalSourceFile} - # ''; - # }; + programs.fish = { + enable = true; + shellInit = lib.mkAfter '' + fish_add_path "${dots}/bin" + ''; + interactiveShellInit = lib.mkAfter '' + source "${dots}/config/fish/config.fish" + ''; + }; + programs.zoxide = { + enable = true; + enableBashIntegration = config.programs.bash.enable; + enableZshIntegration = config.programs.zsh.enable; + enableFishIntegration = config.programs.fish.enable; + }; + + xdg.configFile."sesh".source = config.lib.file.mkOutOfStoreSymlink "${dots}/config/sesh"; }; } diff --git a/home/tmux/config/tmux.conf b/home/tmux/config/tmux.conf new file mode 100644 index 0000000..c87e19a --- /dev/null +++ b/home/tmux/config/tmux.conf @@ -0,0 +1,167 @@ +################ +### SETTINGS ### +################ + +set -g default-terminal "screen-256color" +set -g base-index 1 +setw -g pane-base-index 1 +set -g default-shell "/etc/profiles/per-user/rayandrew/bin/fish" + +set -g status-keys vi +set -g mode-keys vi + +set -g mouse on +set -g focus-events off +setw -g aggressive-resize off +setw -g clock-mode-style 12 +set -s escape-time 500 +set -g history-limit 2000 + +set-option -g detach-on-destroy off +set-option -g status-position bottom # top + +set-option -g default-terminal 'tmux-256color' +set-option -sa terminal-features ',xterm-kitty:RGB' +# set -g default-terminal "screen-256color" +# set -ga terminal-overrides ",xterm-256color*:Tc" + +# https://github.com/folke/tokyonight.nvim#making-undercurls-work-properly-in-tmux +set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm' # undercurl support +set -as terminal-overrides ',*:Setulc=\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m' + +setw -g automatic-rename on # rename window to reflect current program +set -g renumber-windows on # renumber windows when a window is closed + +set -g set-titles on # set terminal title + +set -g display-panes-time 800 # slightly longer pane indicators display time +set -g display-time 1000 # slightly longer status messages display time + +# activity +set -g monitor-activity on +set -g visual-activity off +set -gq allow-passthrough on + +set -g detach-on-destroy off + +################ +### BINDINGS ### +################ + +# rebind main key: C-Space +unbind C-b +set -g prefix C-Space +bind -n -N "Send the prefix key through to the application" \ + C-Space send-prefix + +# bind -n C-l send-keys C-l \; run 'sleep 1.1' \; clear-history +bind C-c command-prompt -p "New Session:" "new-session -A -s '%%'" # create session +bind C-k confirm kill-session # kill session +# bind r source-file /Users/rayandrew/.config/tmux/tmux.conf # reload tmux conf +bind C-f command-prompt -p find-session 'switch-client -t %%' # find session +bind c new-window -c "#{pane_current_path}" # create new window +bind - split-window -v -c "#{pane_current_path}" # split current window horizontally +bind _ split-window -h -c "#{pane_current_path}" # split current window vertically +bind-key x kill-pane + +# Sessions +bind -N "switch to root session (via sesh) " 9 run-shell "sesh connect --root $(pwd)" +bind-key "R" display-popup -E -w 40% "sesh connect \"$( + sesh list -i -H | gum filter --value \"$(sesh root)\" --limit 1 --fuzzy --no-sort --placeholder 'Pick a sesh' --prompt='โšก 'readme --no-strip-ansi +)\"" +bind -N "last-session (via sesh) " l run-shell "sesh last" +bind-key "t" display-popup -E -w 40% "sesh connect \"$( + sesh list --icons | gum filter --limit 1 --placeholder 'Pick a sesh' --prompt='โšก ' --no-strip-ansi +)\"" +bind-key "T" run-shell "sesh connect \"$( + sesh list --icons | fzf-tmux -p 80%,70% \ + --no-sort --ansi --border-label ' sesh ' --prompt 'โšก ' \ + --header ' ^a all ^t tmux ^g configs ^x zoxide ^d tmux kill ^f find' \ + --bind 'tab:down,btab:up' \ + --bind 'ctrl-a:change-prompt(โšก )+reload(sesh list --icons)' \ + --bind 'ctrl-t:change-prompt(๐ŸชŸ )+reload(sesh list -t --icons)' \ + --bind 'ctrl-g:change-prompt(โš™๏ธ )+reload(sesh list -c --icons)' \ + --bind 'ctrl-x:change-prompt(๐Ÿ“ )+reload(sesh list -z --icons)' \ + --bind 'ctrl-f:change-prompt(๐Ÿ”Ž )+reload(fd -H -d 2 -t d -E .Trash . ~)' \ + --bind 'ctrl-d:execute(tmux kill-session -t {2..})+change-prompt(โšก )+reload(sesh list --icons)' \ + --preview-window 'right:55%' \ + --preview 'sesh preview {}' +)\"" + +# pane navigation +# bind -r h select-pane -L # move left +# bind -r j select-pane -D # move down +# bind -r k select-pane -U # move up +# bind -r l select-pane -R # move right +bind > swap-pane -D # swap current pane with the next one +bind < swap-pane -U # swap current pane with the previous one + +# pane resizing +bind -r H resize-pane -L 2 +bind -r J resize-pane -D 2 +bind -r K resize-pane -U 2 +bind -r L resize-pane -R 2 + +# window navigation +unbind n +unbind p +bind -r C-h previous-window # select previous window +bind -r C-l next-window # select next window +bind Tab last-window # move to last active window + +# copy mode +set -g set-clipboard on +bind Enter copy-mode # enter copy mode + +run -b 'tmux bind -t vi-copy v begin-selection 2> /dev/null || true' + +run -b 'tmux bind -T copy-mode-vi v send -X begin-selection 2> /dev/null || true' +run -b 'tmux bind -t vi-copy C-v rectangle-toggle 2> /dev/null || true' +run -b 'tmux bind -T copy-mode-vi C-v send -X rectangle-toggle 2> /dev/null || true' +run -b 'tmux bind -t vi-copy y copy-selection 2> /dev/null || true' +# run -b 'tmux bind -T copy-mode-vi y send -X copy-selection-and-cancel 2> /dev/null || true' +run -b 'tmux bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard" 2> /dev/null || true' +run -b 'tmux bind -t vi-copy Escape cancel 2> /dev/null || true' +run -b 'tmux bind -T copy-mode-vi Escape send -X cancel 2> /dev/null || true' +run -b 'tmux bind -t vi-copy H start-of-line 2> /dev/null || true' +run -b 'tmux bind -T copy-mode-vi H send -X start-of-line 2> /dev/null || true' +run -b 'tmux bind -t vi-copy L end-of-line 2> /dev/null || true' +run -b 'tmux bind -T copy-mode-vi L send -X end-of-line 2> /dev/null || true' + +# copy to X11 clipboard +if -b 'command -v xsel > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xsel -i -b"' +if -b '! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xclip -i -selection clipboard >/dev/null 2>&1"' +# copy to macOS clipboard +if -b 'command -v pbcopy > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | pbcopy"' +if -b 'command -v reattach-to-user-namespace > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | reattach-to-user-namespace pbcopy"' +# copy to Windows clipboard +if -b 'command -v clip.exe > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | clip.exe"' +if -b '[ -c /dev/clipboard ]' 'bind y run -b "tmux save-buffer - > /dev/clipboard"' + +# status line +set -g status "on" +set -g status-justify "left" + +set -g status-left-length "100" +set -g status-right-length "100" + +set -g status-left-style NONE +set -g status-right-style NONE + +# set -g status-style bg=default +set -g status-right "#H" +# set -g status-interval 10 # redraw status line every 10 seconds + +# https://github.com/christoomey/vim-tmux-navigator +# disable wrapping +is_vim="ps -o state= -o comm= -t '#{pane_tty}' \ +| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|l?n?vim?x?)(diff)?$'" +bind-key -n 'C-h' if-shell "$is_vim" { send-keys C-h } { if-shell -F '#{pane_at_left}' {} { select-pane -L } } +bind-key -n 'C-j' if-shell "$is_vim" { send-keys C-j } { if-shell -F '#{pane_at_bottom}' {} { select-pane -D } } +bind-key -n 'C-k' if-shell "$is_vim" { send-keys C-k } { if-shell -F '#{pane_at_top}' {} { select-pane -U } } +bind-key -n 'C-l' if-shell "$is_vim" { send-keys C-l } { if-shell -F '#{pane_at_right}' {} { select-pane -R } } + +bind-key -T copy-mode-vi 'C-h' if-shell -F '#{pane_at_left}' {} { select-pane -L } +bind-key -T copy-mode-vi 'C-j' if-shell -F '#{pane_at_bottom}' {} { select-pane -D } +bind-key -T copy-mode-vi 'C-k' if-shell -F '#{pane_at_top}' {} { select-pane -U } +bind-key -T copy-mode-vi 'C-l' if-shell -F '#{pane_at_right}' {} { select-pane -R } diff --git a/home/tmux/default.nix b/home/tmux/default.nix new file mode 100644 index 0000000..ac20d9b --- /dev/null +++ b/home/tmux/default.nix @@ -0,0 +1,33 @@ +{ + config, + lib, + pkgs, + dots, + ... +}: + +{ + options.custom = with lib; { + tmux = { + enable = mkEnableOption "Enable tmux"; + }; + }; + + config = lib.mkIf config.custom.tmux.enable { + home.packages = with pkgs; [ + sesh + tmux + (writeShellScriptBin "tmuxa" '' + # + # tmuxa + # + # Tmux create new session or attach + # + ${pkgs.tmux}/bin/tmux attach || ${pkgs.tmux}/bin/tmux + '') + gitmux + ]; + + xdg.configFile."tmux".source = config.lib.file.mkOutOfStoreSymlink "${dots}/home/tmux/config"; + }; +} diff --git a/hosts/dango/default.nix b/hosts/dango/default.nix index f8934ca..1aa9da3 100644 --- a/hosts/dango/default.nix +++ b/hosts/dango/default.nix @@ -1,13 +1,5 @@ { - inputs, - lib, - config, pkgs, - system, - dots, - user, - hm, - host, ... }: { @@ -86,6 +78,7 @@ emacs.enable = true; neovim.enable = true; latex.enable = true; + tmux.enable = true; gui = { default.enable = true; darwin.enable = true; diff --git a/hosts/default.nix b/hosts/default.nix index 98fac02..e8aa007 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -1,6 +1,5 @@ { inputs, - lib, specialArgs, user ? "rayandrew", ... @@ -38,6 +37,7 @@ let modules = [ inputs.disko.nixosModules.default + ./shared.nix ./${host} ./${host}/hardware.nix ../nixos @@ -60,7 +60,8 @@ let inputs.nix-index-database.homeModules.nix-index inputs.sops-nix.homeManagerModules.sops ../home - ] ++ lib.optional (builtins.pathExists ./${host}/home.nix) ./${host}/home.nix; + ] + ++ lib.optional (builtins.pathExists ./${host}/home.nix) ./${host}/home.nix; }; }; } @@ -111,6 +112,7 @@ let }; modules = [ + ./shared.nix ./${host} ../darwin ( @@ -133,7 +135,8 @@ let inputs.sops-nix.homeManagerModules.sops inputs.mac-app-util.homeManagerModules.default ../home - ] ++ lib.optional (builtins.pathExists ./${host}/home.nix) ./${host}/home.nix; + ] + ++ lib.optional (builtins.pathExists ./${host}/home.nix) ./${host}/home.nix; }; }; } diff --git a/hosts/shared.nix b/hosts/shared.nix new file mode 100644 index 0000000..1cbdafd --- /dev/null +++ b/hosts/shared.nix @@ -0,0 +1,15 @@ +{ + # user, + # pkgs, + ... +}: + +{ + # users.users.${user} = { + # shell = pkgs.fish; + # }; + # + programs.bash.enable = true; + programs.zsh.enable = true; + programs.fish.enable = true; +} diff --git a/nixos/default.nix b/nixos/default.nix index fad52a8..bd2b863 100644 --- a/nixos/default.nix +++ b/nixos/default.nix @@ -1,9 +1,7 @@ { - inputs, lib, config, pkgs, - system, host, ... }: