diff options
feat: initial commit with nixCats
Diffstat (limited to '')
| -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; +  }); + +} | 
