summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--flake.lock43
-rw-r--r--flake.nix265
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;
+ });
+
+}