about summary refs log blame commit diff stats
path: root/modules/by-name/nv/nvim/mappings/default.nix
blob: 4b6344c2cc9b1893c11395ef21bf3319557d764d (plain) (tree)
















































































































































































































































































































                                                                                                                                                                  
{
  config,
  lib,
  ...
}: let
  cfg = config.soispha.programs.nvim;
in {
  config.home-manager.users.soispha = lib.mkIf cfg.enable {
    programs.nixvim = {
      globals = {
        mapleader = " ";
        maplocalleader = " ";
      };
      keymaps = [
        {
          mode = ["n" "i"];
          key = "<Esc>";
          action = "<cmd>noh<CR><Esc>";
          options.desc = "Disable the search highlighting and send Escape";
        }
        {
          key = "hh";
          mode = ["i"];
          action.__raw = ''
            function()
              local cmp = require('cmp');
              local luasnip = require('luasnip');

              if cmp.visible() then
                  cmp.select_next_item()
              elseif luasnip.expand_or_locally_jumpable() then
                  luasnip.expand_or_jump()
              end
            end
          '';
          options.desc = "completion trigger/ forward in completen menu";
        }
        {
          key = "uu";
          mode = ["i"];
          action.__raw = ''
            function()
              local cmp = require('cmp');
              cmp.confirm()
            end
          '';
          options.desc = "confirm the selected item";
        }

        {
          key = "<C-Tab>";
          action = "<cmd>tabnext<CR>";
          options.desc = "cycle to the next tab";
        }
        {
          key = "<S-C-Tab>";
          action = "<cmd>tabprevious<CR>";
          options.desc = "cycle to the previous tab";
        }

        # yank/ cut to the system clipboard
        {
          key = "<leader>y";
          action = "\"+y";
          options.desc = "yank to the system clipboard";
        }
        {
          key = "<leader>Y";
          action = "\"+Y";
          options.desc = "yank until the end of the line to the system clipboard";
        }

        # Unmap some old keys
        #{key = "s"; action = "'<Nop>'";}
        #{key = "t"; action = "'<Nop>'";}
        {
          key = "<Up>";
          action = "<Nop>";
        }
        {
          key = "<Down>";
          action = "<Nop>";
        }
        {
          key = "<Left>";
          action = "<Nop>";
        }
        {
          key = "<Right>";
          action = "<Nop>";
        }

        # Center the cursor vertically when moving to the next word during a search.
        {
          key = "l";
          action = "nzzzv";
          options.desc = "Center the cursor vertically when moving to the next word during a search.";
        }
        {
          key = "L";
          action = "Nzzzv";
          options.desc = "Center the cursor vertically when moving to the next word during a search.";
        }
        # remap the other keys to dvorak
        {
          key = "k";
          action = "t";
          options.desc = "go the the right on char";
        }
        {
          key = "K";
          action = "T";
          options.desc = "go to the left on char";
        }
        {
          key = "j";
          action = "k";
          options.desc = "go to the right before the char";
        }
        {
          key = "J";
          action = "K";
          options.desc = "go to the left before the char";
        }

        # Change Vim-keys
        {
          key = "h";
          action = "<left>";
          options.desc = "go left";
        }
        {
          key = "t";
          action = "g<down>";
          options.desc = "go down, with displaylines";
        }
        {
          key = "n";
          action = "g<up>";
          options.desc = "go up, with displaylines";
        }
        {
          key = "s";
          action = "<right>";
          options.desc = "go right";
        }

        # Move display lines
        {
          key = "0";
          action = "g0";
          options.desc = "go to the leftmost character in the screen line";
        }
        {
          key = "$";
          action = "g$";
          options.desc = "go to the rightmost character in the screen line";
        }
        {
          mode = ["n"];
          key = "<Enter>";
          action = "gf";
          options.desc = "open file/url under cursor";
        }
        {
          mode = ["n"];
          key = "<Tab>";
          action = ":";
          options.desc = "jump to command line";
        }

        {
          mode = ["n"];
          key = "\\f";
          action.__raw = "function() require('lf').start() end";
          options.desc = "open lf in a floating window";
        }

        # Splits
        {
          mode = ["n"];
          key = "<C-t>";
          action = "<C-w>p";
          options.desc = "go to previous split";
        }
        {
          mode = ["n"];
          key = "<C-n>";
          action = "<C-w>w";
          options.desc = "go to next split";
        }
        {
          mode = ["n"];
          key = "<leader>-";
          action = "<C-W>s";
          options.desc = "New horizontal split";
        }
        {
          mode = ["n"];
          key = "<leader>|";
          action = "<C-W>v";
          options.desc = "New vertical split";
        }

        {
          mode = ["n"];
          key = "<leader>p";
          action = "\"_dP";
          options.desc = "keep the cut thing in the base register";
        }
        {
          mode = ["n"];
          key = "<leader>c";
          action = "\"_c";
          options.desc = "change without saving to register";
        }

        {
          mode = ["n"];
          key = "<leader>d";
          action = "\"_d";
          options.desc = "delete without saving to register";
        }
        {
          key = "x";
          mode = ["n"];
          action.__raw = ''
            function()
              local col = vim.api.nvim_win_get_cursor(0)[2]
              local char = vim.api.nvim_get_current_line():sub(col+1,col+1)
              if char:match("%s") then
                return '"_x'
              else
                return "x"
              end
            end
          '';
          options = {
            desc = "Pipe all space only deletions to the blackhole register";
            expr = true;
            silent = true;
          };
        }
        {
          key = "dd";
          mode = ["n"];
          action.__raw = ''
            function()
              if vim.api.nvim_get_current_line():match("^%s*$") then
                return '"_dd'
              else
                return "dd"
              end
            end
          '';
          options = {
            desc = "Pipe all blank line deletions to the blackhole register";
            expr = true;
            silent = true;
          };
        }

        {
          mode = ["n"];
          key = "<leader>s";
          action = ":%s/\\<<C-r><C-w>\\>/<C-r><C-w>/gI<Left><Left><Left>";
          options.desc = "replace for the word under the cursor";
        }

        {
          mode = ["n"];
          key = "<C-s>";
          action = "<cmd>mksession! <CR>";
          options.desc = "overwrite/create a session";
        }

        {
          mode = ["n"];
          key = "<leader>X";
          action = "!!$SHELL <CR>";
          options.desc = "Read the current line and execute that line in your $SHELL. The resulting output will replace the curent line that was being executed.";
        }
        {
          mode = ["t"];
          key = "<Esc><Esc>";
          action = "<C-\\><C-n>";
          options.desc = "Exit terminal mode with <Esc><Esc>";
        }

        # move selected lines in visual mode
        {
          mode = ["v"];
          key = "T";
          action = ":m '>+1<CR>gv=gv";
          options.desc = "move selected lines in visual mode down";
        }
        {
          mode = ["v"];
          key = "N";
          action = ":m '<-2<CR>gv=gv";
          options.desc = "move selected lines in visual mode up";
        }
      ];
    };
  };
}