diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | flake.lock | 43 | ||||
-rw-r--r-- | flake.nix | 265 |
3 files changed, 309 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c4a847d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/result diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..d691fc8 --- /dev/null +++ b/flake.lock @@ -0,0 +1,43 @@ +{ + "nodes": { + "nixCats": { + "locked": { + "lastModified": 1740837766, + "narHash": "sha256-LKeBL3gjm+Fg2yVDKqB2gIiVnccv4TSUtt5NmQcasrk=", + "owner": "BirdeeHub", + "repo": "nixCats-nvim", + "rev": "83264cfaf7d7438c52db28a95934d87ae45faaae", + "type": "github" + }, + "original": { + "owner": "BirdeeHub", + "repo": "nixCats-nvim", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1741037377, + "narHash": "sha256-SvtvVKHaUX4Owb+PasySwZsoc5VUeTf1px34BByiOxw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "02032da4af073d0f6110540c8677f16d4be0117f", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixCats": "nixCats", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..0f4ce50 --- /dev/null +++ b/flake.nix @@ -0,0 +1,265 @@ +# Copyright (c) 2023 BirdeeHub +# Licensed under the MIT license + +# This is an empty nixCats config. +# you may import this template directly into your nvim folder +# and then add plugins to categories here, +# and call the plugins with their default functions +# within your lua, rather than through the nvim package manager's method. +# Use the help, and the example config github:BirdeeHub/nixCats-nvim?dir=templates/example + +# It allows for easy adoption of nix, +# while still providing all the extra nix features immediately. +# Configure in lua, check for a few categories, set a few settings, +# output packages with combinations of those categories and settings. + +# All the same options you make here will be automatically exported in a form available +# in home manager and in nixosModules, as well as from other flakes. +# each section is tagged with its relevant help section. + +{ + description = "A Lua-natic's neovim flake, with extra cats! nixCats!"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + nixCats.url = "github:BirdeeHub/nixCats-nvim"; + + # neovim-nightly-overlay = { + # url = "github:nix-community/neovim-nightly-overlay"; + # }; + + # see :help nixCats.flake.inputs + # If you want your plugin to be loaded by the standard overlay, + # i.e. if it wasnt on nixpkgs, but doesnt have an extra build step. + # Then you should name it "plugins-something" + # If you wish to define a custom build step not handled by nixpkgs, + # then you should name it in a different format, and deal with that in the + # overlay defined for custom builds in the overlays directory. + # for specific tags, branches and commits, see: + # https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-flake.html#examples + + }; + + # see :help nixCats.flake.outputs + outputs = { self, nixpkgs, nixCats, ... }@inputs: let + inherit (nixCats) utils; + luaPath = "${./.}"; + forEachSystem = utils.eachSystem nixpkgs.lib.platforms.all; + # the following extra_pkg_config contains any values + # which you want to pass to the config set of nixpkgs + # import nixpkgs { config = extra_pkg_config; inherit system; } + # will not apply to module imports + # as that will have your system values + extra_pkg_config = { + # allowUnfree = true; + }; + # management of the system variable is one of the harder parts of using flakes. + + # so I have done it here in an interesting way to keep it out of the way. + # It gets resolved within the builder itself, and then passed to your + # categoryDefinitions and packageDefinitions. + + # this allows you to use ${pkgs.system} whenever you want in those sections + # without fear. + + # sometimes our overlays require a ${system} to access the overlay. + # Your dependencyOverlays can either be lists + # in a set of ${system}, or simply a list. + # the nixCats builder function will accept either. + # see :help nixCats.flake.outputs.overlays + dependencyOverlays = /* (import ./overlays inputs) ++ */ [ + # This overlay grabs all the inputs named in the format + # `plugins-<pluginName>` + # Once we add this overlay to our nixpkgs, we are able to + # use `pkgs.neovimPlugins`, which is a set of our plugins. + (utils.standardPluginOverlay inputs) + # add any other flake overlays here. + + # when other people mess up their overlays by wrapping them with system, + # you may instead call this function on their overlay. + # it will check if it has the system in the set, and if so return the desired overlay + # (utils.fixSystemizedOverlay inputs.codeium.overlays + # (system: inputs.codeium.overlays.${system}.default) + # ) + ]; + + # see :help nixCats.flake.outputs.categories + # and + # :help nixCats.flake.outputs.categoryDefinitions.scheme + categoryDefinitions = { pkgs, settings, categories, extra, name, mkNvimPlugin, ... }@packageDef: { + # to define and use a new category, simply add a new list to a set here, + # and later, you will include categoryname = true; in the set you + # provide when you build the package using this builder function. + # see :help nixCats.flake.outputs.packageDefinitions for info on that section. + + # lspsAndRuntimeDeps: + # this section is for dependencies that should be available + # at RUN TIME for plugins. Will be available to PATH within neovim terminal + # this includes LSPs + lspsAndRuntimeDeps = { + general = with pkgs; [ + ]; + }; + + # This is for plugins that will load at startup without using packadd: + startupPlugins = { + gitPlugins = with pkgs.neovimPlugins; [ ]; + general = with pkgs.vimPlugins; [ ]; + }; + + # not loaded automatically at startup. + # use with packadd and an autocommand in config to achieve lazy loading + optionalPlugins = { + gitPlugins = with pkgs.neovimPlugins; [ ]; + general = with pkgs.vimPlugins; [ ]; + }; + + # shared libraries to be added to LD_LIBRARY_PATH + # variable available to nvim runtime + sharedLibraries = { + general = with pkgs; [ + # libgit2 + ]; + }; + + # environmentVariables: + # this section is for environmentVariables that should be available + # at RUN TIME for plugins. Will be available to path within neovim terminal + environmentVariables = { + test = { + CATTESTVAR = "It worked!"; + }; + }; + + # If you know what these are, you can provide custom ones by category here. + # If you dont, check this link out: + # https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/setup-hooks/make-wrapper.sh + extraWrapperArgs = { + test = [ + '' --set CATTESTVAR2 "It worked again!"'' + ]; + }; + + # lists of the functions you would have passed to + # python.withPackages or lua.withPackages + + # get the path to this python environment + # in your lua config via + # vim.g.python3_host_prog + # or run from nvim terminal via :!<packagename>-python3 + extraPython3Packages = { + test = (_:[]); + }; + # populates $LUA_PATH and $LUA_CPATH + extraLuaPackages = { + test = [ (_:[]) ]; + }; + }; + + + + # And then build a package with specific categories from above here: + # All categories you wish to include must be marked true, + # but false may be omitted. + # This entire set is also passed to nixCats for querying within the lua. + + # see :help nixCats.flake.outputs.packageDefinitions + packageDefinitions = { + # These are the names of your packages + # you can include as many as you wish. + nvim = {pkgs , ... }: { + # they contain a settings set defined above + # see :help nixCats.flake.outputs.settings + settings = { + wrapRc = true; + # IMPORTANT: + # your alias may not conflict with your other packages. + aliases = [ "vim" ]; + # neovim-unwrapped = inputs.neovim-nightly-overlay.packages.${pkgs.system}.neovim; + }; + # and a set of categories that you want + # (and other information to pass to lua) + categories = { + general = true; + gitPlugins = true; + customPlugins = true; + test = true; + example = { + youCan = "add more than just booleans"; + toThisSet = [ + "and the contents of this categories set" + "will be accessible to your lua with" + "nixCats('path.to.value')" + "see :help nixCats" + ]; + }; + }; + }; + }; + # In this section, the main thing you will need to do is change the default package name + # to the name of the packageDefinitions entry you wish to use as the default. + defaultPackageName = "nvim"; + in + + + # see :help nixCats.flake.outputs.exports + forEachSystem (system: let + nixCatsBuilder = utils.baseBuilder luaPath { + inherit nixpkgs system dependencyOverlays extra_pkg_config; + } categoryDefinitions packageDefinitions; + defaultPackage = nixCatsBuilder defaultPackageName; + # this is just for using utils such as pkgs.mkShell + # The one used to build neovim is resolved inside the builder + # and is passed to our categoryDefinitions and packageDefinitions + pkgs = import nixpkgs { inherit system; }; + in + { + # these outputs will be wrapped with ${system} by utils.eachSystem + + # this will make a package out of each of the packageDefinitions defined above + # and set the default package to the one passed in here. + packages = utils.mkAllWithDefault defaultPackage; + + # choose your package for devShell + # and add whatever else you want in it. + devShells = { + default = pkgs.mkShell { + name = defaultPackageName; + packages = [ defaultPackage ]; + inputsFrom = [ ]; + shellHook = '' + ''; + }; + }; + + }) // (let + # we also export a nixos module to allow reconfiguration from configuration.nix + nixosModule = utils.mkNixosModules { + moduleNamespace = [ defaultPackageName ]; + inherit defaultPackageName dependencyOverlays luaPath + categoryDefinitions packageDefinitions extra_pkg_config nixpkgs; + }; + # and the same for home manager + homeModule = utils.mkHomeModules { + moduleNamespace = [ defaultPackageName ]; + inherit defaultPackageName dependencyOverlays luaPath + categoryDefinitions packageDefinitions extra_pkg_config nixpkgs; + }; + in { + + # these outputs will be NOT wrapped with ${system} + + # this will make an overlay out of each of the packageDefinitions defined above + # and set the default overlay to the one named here. + overlays = utils.makeOverlays luaPath { + inherit nixpkgs dependencyOverlays extra_pkg_config; + } categoryDefinitions packageDefinitions defaultPackageName; + + nixosModules.default = nixosModule; + homeModules.default = homeModule; + + inherit utils nixosModule homeModule; + inherit (utils) templates; + }); + +} |