feat(nvim): Provide an nixvim standalone config
This allows me to test the neovim configuration much easier and also adds neovim checks to the flake.
This commit is contained in:
parent
c520e4f1c5
commit
f1991245fe
5 changed files with 138 additions and 92 deletions
|
@ -3,6 +3,11 @@
|
||||||
This is only intended for my use, but you can see how I overengineer stuff by
|
This is only intended for my use, but you can see how I overengineer stuff by
|
||||||
looking at it :p (maybe you can also learn some stuff on the way).
|
looking at it :p (maybe you can also learn some stuff on the way).
|
||||||
|
|
||||||
|
This README only has a small amount of information, if you want to see the full
|
||||||
|
documentation then go to <https://jalil-salame.github.com/configuration.nix>. I
|
||||||
|
also overengineerd this c: (if you want to copy this for your own project, then
|
||||||
|
take a look at [the docs folder](./docs/default.nix).
|
||||||
|
|
||||||
## Try out in a VM
|
## Try out in a VM
|
||||||
|
|
||||||
If you already have nix you can run the following commands:
|
If you already have nix you can run the following commands:
|
||||||
|
|
|
@ -20,7 +20,9 @@ inspiration from what I have done c:.
|
||||||
First you want to see what your environment is; if you are using NixOS then you
|
First you want to see what your environment is; if you are using NixOS then you
|
||||||
want to look at the [NixOS Module Setup](#nixos-module-setup), if you are just
|
want to look at the [NixOS Module Setup](#nixos-module-setup), if you are just
|
||||||
using home-manager, then you should look at the [homa-manager Module
|
using home-manager, then you should look at the [homa-manager Module
|
||||||
Setup](#home-manager-module-setup).
|
Setup](#home-manager-module-setup). Or if you just want to use my NeoVIM
|
||||||
|
configuration then look at the [NeoVIM standalone
|
||||||
|
setup](#neovim-standalone-setup).
|
||||||
|
|
||||||
### NixOS Module Setup
|
### NixOS Module Setup
|
||||||
|
|
||||||
|
@ -140,3 +142,22 @@ for more information):
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### NeoVIM Standalone setup
|
||||||
|
|
||||||
|
My NeoVIM configuration is managed by
|
||||||
|
[NixVIM](https://github.com/nix-community/nixvim), so check that project out if
|
||||||
|
you want to understand how it works. You can use [this
|
||||||
|
tutorial](https://nix-community.github.io/nixvim/user-guide/extending-config.html)
|
||||||
|
to extend my configuration without forking this repo or copying its files.
|
||||||
|
|
||||||
|
If you want to test out my configuration then you can run this handy nix
|
||||||
|
command:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ nix run github:jalil-salame/configuration.nix#nvim
|
||||||
|
```
|
||||||
|
|
||||||
|
It will download and build my NeoVIM configuration and run NeoVIM. Alternatively
|
||||||
|
you can replace `nix run` with `nix shell` which will temporarily add my NeoVIM
|
||||||
|
configuration to your shell and when you run `nvim` it will launch it.
|
||||||
|
|
20
flake.nix
20
flake.nix
|
@ -55,11 +55,14 @@
|
||||||
inherit system;
|
inherit system;
|
||||||
pkgs = import nixpkgs { inherit system; };
|
pkgs = import nixpkgs { inherit system; };
|
||||||
});
|
});
|
||||||
# Module documentation
|
overlays = builtins.attrValues self.overlays;
|
||||||
doc = forEachSupportedSystem ({ pkgs, system }: import ./docs { inherit pkgs lib; });
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
checks = forEachSupportedSystem ({ pkgs, system }: {
|
checks = forEachSupportedSystem ({ pkgs, system }: {
|
||||||
|
nvim = nixvim.lib.${system}.check.mkTestDerivationFromNixvimModule {
|
||||||
|
pkgs = import nixpkgs { inherit system overlays; };
|
||||||
|
module = ./nvim/nixvim.nix;
|
||||||
|
};
|
||||||
pre-commit-check = pre-commit-hooks.lib.${system}.run {
|
pre-commit-check = pre-commit-hooks.lib.${system}.run {
|
||||||
src = builtins.path { path = ./.; name = "configuration.nix"; };
|
src = builtins.path { path = ./.; name = "configuration.nix"; };
|
||||||
hooks.typos.enable = true;
|
hooks.typos.enable = true;
|
||||||
|
@ -67,7 +70,14 @@
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
packages = doc;
|
packages = forEachSupportedSystem ({ pkgs, system }: {
|
||||||
|
inherit (import ./docs { inherit pkgs lib; }) docs nixos-markdown nvim-markdown home-markdown;
|
||||||
|
# Nvim standalone module
|
||||||
|
nvim = nixvim.legacyPackages.${system}.makeNixvimWithModule {
|
||||||
|
pkgs = import nixpkgs { inherit system overlays; };
|
||||||
|
module = ./nvim/nixvim.nix;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
# Provide necessary overlays
|
# Provide necessary overlays
|
||||||
overlays = {
|
overlays = {
|
||||||
|
@ -84,11 +94,9 @@
|
||||||
nixosConfigurations.vm =
|
nixosConfigurations.vm =
|
||||||
let
|
let
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
overlays = builtins.attrValues self.overlays;
|
|
||||||
config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
|
config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
|
||||||
"steam-original"
|
"steam-original"
|
||||||
];
|
];
|
||||||
# config.allowUnfree = true;
|
|
||||||
pkgs = import nixpkgs { inherit system overlays config; };
|
pkgs = import nixpkgs { inherit system overlays config; };
|
||||||
in
|
in
|
||||||
lib.nixosSystem
|
lib.nixosSystem
|
||||||
|
@ -163,7 +171,7 @@
|
||||||
devShells = forEachSupportedSystem ({ pkgs, system }: {
|
devShells = forEachSupportedSystem ({ pkgs, system }: {
|
||||||
default = pkgs.mkShell {
|
default = pkgs.mkShell {
|
||||||
inherit (self.checks.${system}.pre-commit-check) shellHook;
|
inherit (self.checks.${system}.pre-commit-check) shellHook;
|
||||||
buildInputs = with pkgs; [ just ];
|
buildInputs = with pkgs; [ just self.packages.${system}.nvim ];
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,90 +1,7 @@
|
||||||
{ pkgs, config, lib, ... }:
|
{ pkgs, ... } @ opts: {
|
||||||
let
|
|
||||||
cfg = config.jhome.nvim;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
imports = [
|
imports = [
|
||||||
./options.nix
|
./options.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config.programs.nixvim = (import ./nixvim.nix opts).config;
|
||||||
programs.nixvim = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.neovim-nightly;
|
|
||||||
defaultEditor = true;
|
|
||||||
globals.mapleader = " ";
|
|
||||||
# Appearance
|
|
||||||
colorschemes.gruvbox.enable = true;
|
|
||||||
colorschemes.gruvbox.settings.bold = true;
|
|
||||||
colorschemes.gruvbox.settings.transparent_mode = true;
|
|
||||||
colorschemes.gruvbox.settings.terminal_colors = true;
|
|
||||||
options.number = true;
|
|
||||||
options.relativenumber = true;
|
|
||||||
options.colorcolumn = "+1";
|
|
||||||
options.cursorline = true;
|
|
||||||
options.wrap = false;
|
|
||||||
options.splitright = true;
|
|
||||||
# Tabs & indentation
|
|
||||||
options.smarttab = true;
|
|
||||||
options.autoindent = true;
|
|
||||||
options.smartindent = true;
|
|
||||||
# Search path
|
|
||||||
options.path = ".,/usr/include,**";
|
|
||||||
options.wildmenu = true;
|
|
||||||
options.hlsearch = true;
|
|
||||||
options.incsearch = true;
|
|
||||||
options.ignorecase = true; # Search ignores cases
|
|
||||||
options.smartcase = true; # Unless it has a capital letter
|
|
||||||
# Enable local configuration :h 'exrc'
|
|
||||||
options.exrc = true; # safe since nvim 0.9
|
|
||||||
plugins = import ./plugins.nix { inherit lib; };
|
|
||||||
keymaps = import ./mappings.nix;
|
|
||||||
inherit (import ./augroups.nix) autoGroups autoCmd;
|
|
||||||
extraPlugins = with pkgs.vimPlugins; [
|
|
||||||
lualine-lsp-progress
|
|
||||||
nvim-web-devicons
|
|
||||||
FTerm-nvim
|
|
||||||
cmp-cmdline
|
|
||||||
];
|
|
||||||
# Formatting
|
|
||||||
extraPackages = with pkgs; [
|
|
||||||
stylua
|
|
||||||
shfmt
|
|
||||||
taplo
|
|
||||||
yamlfmt
|
|
||||||
nixpkgs-fmt
|
|
||||||
rust-analyzer
|
|
||||||
];
|
|
||||||
extraConfigLuaPre = ''
|
|
||||||
-- Lua Pre Config
|
|
||||||
if vim.fn.has 'termguicolors' then
|
|
||||||
-- Enable RGB colors
|
|
||||||
vim.g.termguicolors = true
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Useful function
|
|
||||||
local has_words_before = function()
|
|
||||||
-- unpack = unpack or table.unpack
|
|
||||||
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
|
||||||
return col ~= 0
|
|
||||||
and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match '%s' == nil
|
|
||||||
end
|
|
||||||
-- END: Lua Pre Config
|
|
||||||
'';
|
|
||||||
extraConfigLuaPost = ''
|
|
||||||
-- Lua Post Config
|
|
||||||
do -- Setup cmp-cmdline
|
|
||||||
local cmp = require "cmp"
|
|
||||||
cmp.setup.cmdline("/", {
|
|
||||||
mapping = cmp.mapping.preset.cmdline(),
|
|
||||||
sources = cmp.config.sources { {name = "rg" }, { name = "buffer" } },
|
|
||||||
})
|
|
||||||
cmp.setup.cmdline(":", {
|
|
||||||
mapping = cmp.mapping.preset.cmdline(),
|
|
||||||
sources = cmp.config.sources({ { name = "path" } }, { { name = "cmdline" } })
|
|
||||||
})
|
|
||||||
end
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
95
nvim/nixvim.nix
Normal file
95
nvim/nixvim.nix
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
{ pkgs, lib, config, ... } @ args:
|
||||||
|
let
|
||||||
|
cfg = config.jhome.nvim;
|
||||||
|
hmAvailable = args ? hmConfig;
|
||||||
|
nixosAvailable = args ? nixosConfig;
|
||||||
|
darwinAvailable = args ? darwinConfig;
|
||||||
|
canSetAsDefault = hmAvailable || nixosAvailable;
|
||||||
|
notStandalone = hmAvailable || nixosAvailable || darwinAvailable;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./options.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
config = lib.mkMerge [
|
||||||
|
(lib.optionalAttrs canSetAsDefault { defaultEditor = lib.mkDefault true; })
|
||||||
|
(lib.optionalAttrs notStandalone { enable = lib.mkDefault true; })
|
||||||
|
(lib.mkIf cfg.enable {
|
||||||
|
package = pkgs.neovim-nightly;
|
||||||
|
globals.mapleader = " ";
|
||||||
|
# Appearance
|
||||||
|
colorschemes.gruvbox.enable = true;
|
||||||
|
colorschemes.gruvbox.settings.bold = true;
|
||||||
|
colorschemes.gruvbox.settings.transparent_mode = true;
|
||||||
|
colorschemes.gruvbox.settings.terminal_colors = true;
|
||||||
|
options.number = true;
|
||||||
|
options.relativenumber = true;
|
||||||
|
options.colorcolumn = "+1";
|
||||||
|
options.cursorline = true;
|
||||||
|
options.wrap = false;
|
||||||
|
options.splitright = true;
|
||||||
|
# Tabs & indentation
|
||||||
|
options.smarttab = true;
|
||||||
|
options.autoindent = true;
|
||||||
|
options.smartindent = true;
|
||||||
|
# Search path
|
||||||
|
options.path = ".,/usr/include,**";
|
||||||
|
options.wildmenu = true;
|
||||||
|
options.hlsearch = true;
|
||||||
|
options.incsearch = true;
|
||||||
|
options.ignorecase = true; # Search ignores cases
|
||||||
|
options.smartcase = true; # Unless it has a capital letter
|
||||||
|
# Enable local configuration :h 'exrc'
|
||||||
|
options.exrc = true; # safe since nvim 0.9
|
||||||
|
plugins = import ./plugins.nix { inherit lib; };
|
||||||
|
keymaps = import ./mappings.nix;
|
||||||
|
inherit (import ./augroups.nix) autoGroups autoCmd;
|
||||||
|
extraPlugins = with pkgs.vimPlugins; [
|
||||||
|
lualine-lsp-progress
|
||||||
|
nvim-web-devicons
|
||||||
|
FTerm-nvim
|
||||||
|
cmp-cmdline
|
||||||
|
];
|
||||||
|
# Formatting
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
stylua
|
||||||
|
shfmt
|
||||||
|
taplo
|
||||||
|
yamlfmt
|
||||||
|
nixpkgs-fmt
|
||||||
|
rust-analyzer
|
||||||
|
];
|
||||||
|
extraConfigLuaPre = ''
|
||||||
|
-- Lua Pre Config
|
||||||
|
if vim.fn.has 'termguicolors' then
|
||||||
|
-- Enable RGB colors
|
||||||
|
vim.g.termguicolors = true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Useful function
|
||||||
|
local has_words_before = function()
|
||||||
|
-- unpack = unpack or table.unpack
|
||||||
|
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
||||||
|
return col ~= 0
|
||||||
|
and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match '%s' == nil
|
||||||
|
end
|
||||||
|
-- END: Lua Pre Config
|
||||||
|
'';
|
||||||
|
extraConfigLuaPost = ''
|
||||||
|
-- Lua Post Config
|
||||||
|
do -- Setup cmp-cmdline
|
||||||
|
local cmp = require "cmp"
|
||||||
|
cmp.setup.cmdline("/", {
|
||||||
|
mapping = cmp.mapping.preset.cmdline(),
|
||||||
|
sources = cmp.config.sources { {name = "rg" }, { name = "buffer" } },
|
||||||
|
})
|
||||||
|
cmp.setup.cmdline(":", {
|
||||||
|
mapping = cmp.mapping.preset.cmdline(),
|
||||||
|
sources = cmp.config.sources({ { name = "path" } }, { { name = "cmdline" } })
|
||||||
|
})
|
||||||
|
end
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue