mirror of
https://github.com/dwinkler1/nvimConfig.git
synced 2026-05-22 12:03:31 -04:00
Simplified codebase
This commit is contained in:
parent
ad9473a916
commit
74600519a5
15 changed files with 83 additions and 280 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
# nix
|
# nix
|
||||||
- For R.nvim in the Nix wrapper, both RNVIM_COMPLDIR (C server compilation) and a writable R_LIBS_USER directory (nvimcom R package installation) must be configured — fixing only one leaves permission errors in the other. Confidence: 0.65
|
- For R.nvim in the Nix wrapper, both RNVIM_COMPLDIR (C server compilation) and a writable R_LIBS_USER directory (nvimcom R package installation) must be configured — fixing only one leaves permission errors in the other. Confidence: 0.65
|
||||||
- For R.nvim writable directories (RNVIM_COMPLDIR, R_LIBS_USER, TMPDIR), prefer project-local paths (e.g., $PWD/.Rlibs) over global cache paths — the cache approach may let the build succeed but still fail at runtime. Confidence: 0.70
|
- For R.nvim writable directories (RNVIM_COMPLDIR, R_LIBS_USER, TMPDIR), prefer project-local paths (e.g., $PWD/.Rlibs) over global cache paths — the cache approach may let the build succeed but still fail at runtime. Confidence: 0.70
|
||||||
|
- Do not use lib.mkDefault on values consumed by lib.optionals or other boolean-checking functions — mkDefault wraps values in a priority set that fails "expected a Boolean" at evaluation time. Use plain booleans for inline conditionals, reserving mkDefault for module options resolved by the merge system. Confidence: 0.70
|
||||||
|
|
||||||
# Taste (Continuously Learned by [CommandCode][cmd])
|
# Taste (Continuously Learned by [CommandCode][cmd])
|
||||||
|
|
||||||
|
|
|
||||||
6
flake.lock
generated
6
flake.lock
generated
|
|
@ -126,11 +126,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1779145538,
|
"lastModified": 1779297405,
|
||||||
"narHash": "sha256-j2RQqBLYhPuddU6C8n5hGKboXq1tDLCZ7bWe5/LgTHM=",
|
"narHash": "sha256-VFoBwH7ZjVxCnvZTb5ODRXt70sLtWMxstive0N+RS50=",
|
||||||
"owner": "BirdeeHub",
|
"owner": "BirdeeHub",
|
||||||
"repo": "nix-wrapper-modules",
|
"repo": "nix-wrapper-modules",
|
||||||
"rev": "597b35c93dd0ab0ae38758e3193582b2fd259aa1",
|
"rev": "e7ed7a1205945befdf2e0d73ba7df91d935e5af1",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
||||||
105
flake.nix
105
flake.nix
|
|
@ -1,11 +1,10 @@
|
||||||
# Copyright (c) 2026 BirdeeHub
|
# Copyright (c) 2026 Daniel
|
||||||
# Licensed under the MIT license
|
# Licensed under the MIT license
|
||||||
{
|
{
|
||||||
description = "Daniel's NixCats";
|
description = "Daniel's NixCats";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
#nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
|
|
||||||
wrappers = {
|
wrappers = {
|
||||||
url = "github:BirdeeHub/nix-wrapper-modules";
|
url = "github:BirdeeHub/nix-wrapper-modules";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
@ -40,13 +39,15 @@
|
||||||
wrappers,
|
wrappers,
|
||||||
...
|
...
|
||||||
} @ inputs: let
|
} @ inputs: let
|
||||||
mkWrapperConfig = pkgs: {
|
mkWrapperConfig = pkgs: let
|
||||||
cats = {
|
def = pkgs.lib.mkDefault;
|
||||||
|
in {
|
||||||
|
cats = pkgs.lib.mapAttrs (_: v: def v) {
|
||||||
clickhouse = false;
|
clickhouse = false;
|
||||||
gitPlugins = true;
|
gitPlugins = true;
|
||||||
julia = false;
|
julia = false;
|
||||||
lua = true;
|
lua = true;
|
||||||
markdown = false;
|
markdown = true;
|
||||||
nix = true;
|
nix = true;
|
||||||
optional = false;
|
optional = false;
|
||||||
python = false;
|
python = false;
|
||||||
|
|
@ -54,46 +55,30 @@
|
||||||
};
|
};
|
||||||
settings = {
|
settings = {
|
||||||
lang_packages = {
|
lang_packages = {
|
||||||
python = with pkgs.python3Packages; [
|
python = def (with pkgs.python3Packages; [
|
||||||
duckdb
|
duckdb
|
||||||
polars
|
polars
|
||||||
];
|
]);
|
||||||
r = with pkgs.rpkgs.rPackages; [
|
r = def ((with pkgs.rpkgs.rPackages; [
|
||||||
arrow
|
arrow
|
||||||
broom
|
broom
|
||||||
data_table
|
data_table
|
||||||
janitor
|
janitor
|
||||||
languageserver
|
languageserver
|
||||||
styler
|
styler
|
||||||
pkgs.nvimcom
|
]) ++ [ pkgs.nvimcom ]);
|
||||||
];
|
julia = def ["DataFramesMeta" "QuackIO"];
|
||||||
julia = ["DataFramesMeta" "QuackIO"];
|
|
||||||
};
|
};
|
||||||
colorscheme = "cyberdream";
|
|
||||||
background = "dark";
|
|
||||||
wrapRc = true;
|
|
||||||
};
|
};
|
||||||
binName = "vv";
|
binName = def "vv";
|
||||||
};
|
};
|
||||||
|
|
||||||
wrapperSettings = pkgs: let
|
wrapperSettings = pkgs: let
|
||||||
cfg = mkWrapperConfig pkgs;
|
cfg = mkWrapperConfig pkgs;
|
||||||
def = pkgs.lib.mkDefault;
|
|
||||||
in
|
in
|
||||||
wrapper.config.wrap {
|
wrapper.config.wrap {
|
||||||
inherit pkgs;
|
inherit pkgs;
|
||||||
cats = pkgs.lib.mapAttrs (_: v: def v) cfg.cats;
|
inherit (cfg) cats settings binName;
|
||||||
settings = {
|
|
||||||
lang_packages = {
|
|
||||||
python = def cfg.settings.lang_packages.python;
|
|
||||||
r = def cfg.settings.lang_packages.r;
|
|
||||||
julia = def cfg.settings.lang_packages.julia;
|
|
||||||
};
|
|
||||||
colorscheme = def cfg.settings.colorscheme;
|
|
||||||
background = def cfg.settings.background;
|
|
||||||
wrapRc = def cfg.settings.wrapRc;
|
|
||||||
};
|
|
||||||
binName = def cfg.binName;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
systems = [
|
systems = [
|
||||||
|
|
@ -104,54 +89,39 @@
|
||||||
|
|
||||||
forAllSystems = nixpkgs.lib.genAttrs systems;
|
forAllSystems = nixpkgs.lib.genAttrs systems;
|
||||||
|
|
||||||
extra_pkg_config = {
|
|
||||||
allowUnfree = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
overlayDefs = import ./overlays inputs;
|
overlayDefs = import ./overlays inputs;
|
||||||
|
|
||||||
dependencyOverlays = overlayDefs.dependencyOverlays;
|
|
||||||
|
|
||||||
dependencyOverlay = overlayDefs.dependencyOverlay;
|
|
||||||
|
|
||||||
mkPkgs = system:
|
mkPkgs = system:
|
||||||
import nixpkgs {
|
import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
config = extra_pkg_config;
|
config = { allowUnfree = true; };
|
||||||
overlays = [dependencyOverlay];
|
overlays = [ overlayDefs.dependencyOverlay ];
|
||||||
};
|
};
|
||||||
|
|
||||||
module = nixpkgs.lib.modules.importApply ./modules/neovim.nix inputs;
|
module = (import ./modules/neovim.nix) inputs;
|
||||||
wrapper = wrappers.lib.evalModule module;
|
wrapper = wrappers.lib.evalModule module;
|
||||||
in {
|
in {
|
||||||
overlays = {
|
overlays = {
|
||||||
|
# overlay `vv` wraps the module with default settings only.
|
||||||
|
# For the fully-configured binary (including mkWrapperConfig overrides),
|
||||||
|
# use `packages.<system>.default` instead.
|
||||||
default = nixpkgs.lib.composeManyExtensions [
|
default = nixpkgs.lib.composeManyExtensions [
|
||||||
dependencyOverlay
|
overlayDefs.dependencyOverlay
|
||||||
(final: prev: {
|
(final: prev: {
|
||||||
vv = wrapper.config.wrap {pkgs = final;};
|
vv = wrapper.config.wrap {pkgs = final;};
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
dependencies = dependencyOverlay;
|
dependencies = overlayDefs.dependencyOverlay;
|
||||||
vv = self.overlays.default;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
wrapperModules = {
|
wrapperModules.default = module;
|
||||||
default = module;
|
wrapperConfigs.default = wrapper.config;
|
||||||
neovim = self.wrapperModules.default;
|
|
||||||
};
|
|
||||||
|
|
||||||
wrappers = {
|
|
||||||
default = wrapper.config;
|
|
||||||
neovim = self.wrappers.default;
|
|
||||||
};
|
|
||||||
|
|
||||||
packages = forAllSystems (
|
packages = forAllSystems (
|
||||||
system: let
|
system: let
|
||||||
pkgs = mkPkgs system;
|
pkgs = mkPkgs system;
|
||||||
nvimPkg = wrapperSettings pkgs;
|
|
||||||
in {
|
in {
|
||||||
default = nvimPkg;
|
default = wrapperSettings pkgs;
|
||||||
vv = nvimPkg;
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -208,16 +178,15 @@
|
||||||
|
|
||||||
shellPackages =
|
shellPackages =
|
||||||
[nvimPkg]
|
[nvimPkg]
|
||||||
++ pkgs.lib.optionals cfg.cats.python pythonPackages
|
++ pkgs.lib.optionals wrapper.config.cats.python pythonPackages
|
||||||
++ pkgs.lib.optionals cfg.cats.r rPackages
|
++ pkgs.lib.optionals wrapper.config.cats.r rPackages
|
||||||
++ pkgs.lib.optionals cfg.cats.julia juliaPackages
|
++ pkgs.lib.optionals wrapper.config.cats.julia juliaPackages
|
||||||
++ pkgs.lib.optionals cfg.cats.markdown markdownPackages;
|
++ pkgs.lib.optionals wrapper.config.cats.markdown markdownPackages;
|
||||||
in {
|
in {
|
||||||
default = pkgs.mkShell {
|
default = pkgs.mkShell {
|
||||||
name = "vShell";
|
name = "vShell";
|
||||||
packages = shellPackages;
|
packages = shellPackages;
|
||||||
nativeBuildInputs = with pkgs; [] ++ (pkgs.lib.optionals cfg.cats.optional [devenv]);
|
nativeBuildInputs = pkgs.lib.optionals wrapper.config.cats.optional [ pkgs.devenv ];
|
||||||
inputsFrom = [];
|
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
echo 'I am a NixShell'
|
echo 'I am a NixShell'
|
||||||
export R_HOME=$(R RHOME)
|
export R_HOME=$(R RHOME)
|
||||||
|
|
@ -234,18 +203,11 @@
|
||||||
pkgs = mkPkgs system;
|
pkgs = mkPkgs system;
|
||||||
nvimPkg = wrapperSettings pkgs;
|
nvimPkg = wrapperSettings pkgs;
|
||||||
in {
|
in {
|
||||||
default = nvimPkg;
|
default = pkgs.runCommand "check-vv" {} ''
|
||||||
module-eval = let
|
|
||||||
_ = wrapper.config;
|
|
||||||
in
|
|
||||||
pkgs.runCommand "check-module-eval" {} ''
|
|
||||||
echo "Module evaluation successful" > $out
|
|
||||||
'';
|
|
||||||
package-build = pkgs.runCommand "check-vv" {} ''
|
|
||||||
BINARY_PATH="${nvimPkg}/bin/vv"
|
BINARY_PATH="${nvimPkg}/bin/vv"
|
||||||
|
|
||||||
if [ ! -x "$BINARY_PATH" ]; then
|
if [ ! -x "$BINARY_PATH" ]; then
|
||||||
echo "Error: Binary n not found or not executable"
|
echo "Error: Binary not found or not executable"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -258,6 +220,11 @@
|
||||||
cat version_output.txt >> $out
|
cat version_output.txt >> $out
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
|
module-eval =
|
||||||
|
let _ = wrapper.config;
|
||||||
|
in pkgs.runCommand "check-module-eval" {} ''
|
||||||
|
echo "Module evaluation successful" > $out
|
||||||
|
'';
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@
|
||||||
|
|
||||||
Available categories:
|
Available categories:
|
||||||
- clickhouse: Clickhouse client and tools
|
- clickhouse: Clickhouse client and tools
|
||||||
- customPlugins: local plugin specs
|
|
||||||
- external: external tools and integrations
|
- external: external tools and integrations
|
||||||
- general: core Neovim plugins/features
|
- general: core Neovim plugins/features
|
||||||
- gitPlugins: git-related plugins
|
- gitPlugins: git-related plugins
|
||||||
|
|
@ -25,7 +24,6 @@
|
||||||
- optional: optional tools and utilities
|
- optional: optional tools and utilities
|
||||||
- python: Python tooling and plugins
|
- python: Python tooling and plugins
|
||||||
- r: R tooling and plugins
|
- r: R tooling and plugins
|
||||||
- test: test-only tooling (disabled by default)
|
|
||||||
- treesitterParsers: Treesitter parsers
|
- treesitterParsers: Treesitter parsers
|
||||||
- utils: general utilities
|
- utils: general utilities
|
||||||
'';
|
'';
|
||||||
|
|
@ -33,18 +31,16 @@
|
||||||
|
|
||||||
config.cats = {
|
config.cats = {
|
||||||
clickhouse = lib.mkDefault false;
|
clickhouse = lib.mkDefault false;
|
||||||
customPlugins = lib.mkDefault true;
|
|
||||||
external = lib.mkDefault true;
|
external = lib.mkDefault true;
|
||||||
general = lib.mkDefault true;
|
general = lib.mkDefault true;
|
||||||
gitPlugins = lib.mkDefault true;
|
gitPlugins = lib.mkDefault true;
|
||||||
julia = lib.mkDefault false;
|
julia = lib.mkDefault false;
|
||||||
lua = lib.mkDefault true;
|
lua = lib.mkDefault true;
|
||||||
markdown = lib.mkDefault false;
|
markdown = lib.mkDefault true;
|
||||||
nix = lib.mkDefault true;
|
nix = lib.mkDefault true;
|
||||||
optional = lib.mkDefault false;
|
optional = lib.mkDefault false;
|
||||||
python = lib.mkDefault false;
|
python = lib.mkDefault false;
|
||||||
r = lib.mkDefault true;
|
r = lib.mkDefault true;
|
||||||
test = lib.mkDefault false;
|
|
||||||
treesitterParsers = lib.mkDefault true;
|
treesitterParsers = lib.mkDefault true;
|
||||||
utils = lib.mkDefault true;
|
utils = lib.mkDefault true;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
# Lua packages available to neovim (for :lua require())
|
# Lua packages available to neovim (for :lua require())
|
||||||
config.settings.nvim_lua_env = lp:
|
config.settings.nvim_lua_env = lp:
|
||||||
lib.optionals (config.cats.general or false) [ lp.tiktoken_core ];
|
lib.optionals (config.cats.general or true) [ lp.tiktoken_core ];
|
||||||
|
|
||||||
# Binary name for the wrapper
|
# Binary name for the wrapper
|
||||||
config.binName = lib.mkDefault "vv";
|
config.binName = lib.mkDefault "vv";
|
||||||
|
|
@ -25,10 +25,10 @@
|
||||||
config.settings.block_normal_config = true;
|
config.settings.block_normal_config = true;
|
||||||
|
|
||||||
# Don't symlink the config (we wrap it instead)
|
# Don't symlink the config (we wrap it instead)
|
||||||
config.settings.dont_link = false;
|
config.settings.dont_link = lib.mkDefault false;
|
||||||
|
|
||||||
# Create additional aliases for the binary
|
# Create additional aliases for the binary
|
||||||
config.settings.aliases = [ "vvim" ];
|
config.settings.aliases = lib.mkDefault [ "vvim" ];
|
||||||
|
|
||||||
# Enable wrapper handling of spec runtimeDeps (template pattern).
|
# Enable wrapper handling of spec runtimeDeps (template pattern).
|
||||||
config.settings.autowrapRuntimeDeps = true;
|
config.settings.autowrapRuntimeDeps = true;
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,11 @@
|
||||||
# Environment variables set for the wrapper.
|
# Environment variables set for the wrapper.
|
||||||
# These are available when running neovim.
|
# These are available when running neovim.
|
||||||
config.env = lib.mkMerge [
|
config.env = lib.mkMerge [
|
||||||
(lib.mkIf (config.cats.python or false) {
|
(lib.mkIf (config.cats.python or true) {
|
||||||
UV_PYTHON_DOWNLOADS = "never";
|
UV_PYTHON_DOWNLOADS = "never";
|
||||||
UV_PYTHON = pkgs.python.interpreter;
|
UV_PYTHON = pkgs.python.interpreter;
|
||||||
})
|
})
|
||||||
(lib.mkIf (config.cats.r or false) {
|
(lib.mkIf (config.cats.r or true) {
|
||||||
RNVIM_COMPLDIR = "$PWD/.r-compl";
|
RNVIM_COMPLDIR = "$PWD/.r-compl";
|
||||||
R_LIBS_USER = "${pkgs.nvimcom}/library:$PWD/.Rlibs";
|
R_LIBS_USER = "${pkgs.nvimcom}/library:$PWD/.Rlibs";
|
||||||
TMPDIR = "$PWD/.r-tmp";
|
TMPDIR = "$PWD/.r-tmp";
|
||||||
|
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
# Environment variables with defaults (can be overridden by user)
|
# Environment variables with defaults (can be overridden by user)
|
||||||
config.envDefault = lib.mkMerge [
|
config.envDefault = lib.mkMerge [
|
||||||
(lib.mkIf (config.cats.r or false) {
|
(lib.mkIf (config.cats.r or true) {
|
||||||
R_LIBS_USER = "${pkgs.nvimcom}/library:$PWD/.Rlibs";
|
R_LIBS_USER = "${pkgs.nvimcom}/library:$PWD/.Rlibs";
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
nvim-host.enable = true;
|
nvim-host.enable = true;
|
||||||
nvim-host.package = "${pkgs.neovide}/bin/neovide";
|
nvim-host.package = "${pkgs.neovide}/bin/neovide";
|
||||||
nvim-host.argv0 = "neovide";
|
nvim-host.argv0 = "neovide";
|
||||||
nvim-host.flags."--neovim-bin" = "${placeholder "out"}/bin/${config.binName}";
|
nvim-host.flags."--neovim-bin" = "${builtins.placeholder "out"}/bin/${config.binName}";
|
||||||
};
|
};
|
||||||
|
|
||||||
m = {
|
m = {
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
};
|
};
|
||||||
default = { };
|
default = { };
|
||||||
description = ''
|
description = ''
|
||||||
Language-specific package overrides appended to each language spec's extraPackages.
|
Language-specific package overrides appended to each language spec's runtimePackages.
|
||||||
Intended for flake.nix overrides via wrapper.config.wrap.
|
Intended for flake.nix overrides via wrapper.config.wrap.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,13 @@ let
|
||||||
let
|
let
|
||||||
is_enabled = if spec ? enable then spec.enable else true;
|
is_enabled = if spec ? enable then spec.enable else true;
|
||||||
has_runtime_deps = (spec.runtimeDeps or false) == runtime_deps_type;
|
has_runtime_deps = (spec.runtimeDeps or false) == runtime_deps_type;
|
||||||
packages = spec.extraPackages or [ ];
|
packages = spec.runtimePackages or [ ];
|
||||||
in
|
in
|
||||||
acc ++ lib.optionals (is_enabled && has_runtime_deps) packages
|
acc ++ lib.optionals (is_enabled && has_runtime_deps) packages
|
||||||
)
|
)
|
||||||
[ ];
|
[ ];
|
||||||
|
|
||||||
prefix_packages = collect_runtime_packages "prefix";
|
prefix_packages = collect_runtime_packages "prefix";
|
||||||
suffix_packages = collect_runtime_packages "suffix";
|
|
||||||
|
|
||||||
to_path_specs = packages: [
|
to_path_specs = packages: [
|
||||||
{
|
{
|
||||||
|
|
@ -31,5 +30,4 @@ let
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
config.prefixVar = lib.optionals (prefix_packages != [ ]) (to_path_specs prefix_packages);
|
config.prefixVar = lib.optionals (prefix_packages != [ ]) (to_path_specs prefix_packages);
|
||||||
config.suffixVar = lib.optionals (suffix_packages != [ ]) (to_path_specs suffix_packages);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,51 +0,0 @@
|
||||||
{ config, lib, ... }:
|
|
||||||
{
|
|
||||||
# This module implements category-based enabling of specs.
|
|
||||||
# It runs early (order 200) so other specMaps can see the enable flags.
|
|
||||||
#
|
|
||||||
# How it works:
|
|
||||||
# 1. For each spec, extract its name (removing -lazy suffix if present)
|
|
||||||
# 2. Check if there's a corresponding cats.<name> toggle
|
|
||||||
# 3. Set spec.value.enable based on the cats toggle (default: true)
|
|
||||||
# 4. This allows specs to be conditionally included based on config.cats settings
|
|
||||||
#
|
|
||||||
# Example: If config.cats.python = false, then specs.python.enable = false
|
|
||||||
|
|
||||||
config.specMaps = lib.mkOrder 200 [
|
|
||||||
{
|
|
||||||
name = "CATS_ENABLE";
|
|
||||||
data =
|
|
||||||
list:
|
|
||||||
map (
|
|
||||||
v:
|
|
||||||
if v.type == "spec" || v.type == "parent" then
|
|
||||||
let
|
|
||||||
# Extract spec name, handling lazy specs (remove -lazy suffix)
|
|
||||||
specName =
|
|
||||||
if v.name == null then
|
|
||||||
null
|
|
||||||
else if lib.hasSuffix "-lazy" v.name then
|
|
||||||
lib.removeSuffix "-lazy" v.name
|
|
||||||
else
|
|
||||||
v.name;
|
|
||||||
|
|
||||||
# Check if this spec has a corresponding cat toggle
|
|
||||||
catEnabled =
|
|
||||||
if specName != null && builtins.hasAttr specName config.cats then
|
|
||||||
config.cats.${specName}
|
|
||||||
else
|
|
||||||
true; # Default to enabled if no cat toggle exists
|
|
||||||
in
|
|
||||||
v
|
|
||||||
// {
|
|
||||||
value = v.value // {
|
|
||||||
# Use explicit enable if set, otherwise use cat toggle
|
|
||||||
enable = if v.value ? enable then v.value.enable else catEnabled;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else
|
|
||||||
v
|
|
||||||
) list;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
@ -5,24 +5,14 @@
|
||||||
wlib,
|
wlib,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
# ============================================================================
|
|
||||||
# SPEC MODULE DEFAULTS
|
|
||||||
# ============================================================================
|
|
||||||
# Define default options available to all specs
|
|
||||||
|
|
||||||
config.specMods = {parentSpec ? null, ...}: {
|
config.specMods = {parentSpec ? null, ...}: {
|
||||||
options.extraPackages = lib.mkOption {
|
options.runtimePkgs = lib.mkOption {
|
||||||
type = lib.types.listOf wlib.types.stringable;
|
type = lib.types.listOf wlib.types.stringable;
|
||||||
default = [];
|
default = [];
|
||||||
description = "a extraPackages spec field to put packages to suffix to the PATH";
|
description = "a runtimePkgs spec field to put packages to suffix to the PATH";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# ============================================================================
|
|
||||||
# EXTERNAL TOOLS SPEC
|
|
||||||
# ============================================================================
|
|
||||||
# Core system tools and utilities
|
|
||||||
|
|
||||||
config.specs.external = {
|
config.specs.external = {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
before = ["INIT_MAIN"];
|
before = ["INIT_MAIN"];
|
||||||
|
|
@ -30,7 +20,7 @@
|
||||||
vim.o.shell = "${pkgs.zsh}/bin/zsh"
|
vim.o.shell = "${pkgs.zsh}/bin/zsh"
|
||||||
'';
|
'';
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
extraPackages = with pkgs; [
|
runtimePkgs = with pkgs; [
|
||||||
perl
|
perl
|
||||||
ruby
|
ruby
|
||||||
shfmt
|
shfmt
|
||||||
|
|
@ -39,15 +29,11 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# ============================================================================
|
|
||||||
# OPTIONAL TOOLS SPEC
|
|
||||||
# ============================================================================
|
|
||||||
|
|
||||||
config.specs.optional = lib.mkIf (config.cats.optional or true) {
|
config.specs.optional = lib.mkIf (config.cats.optional or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
before = ["INIT_MAIN"];
|
before = ["INIT_MAIN"];
|
||||||
extraPackages = with pkgs; [
|
runtimePkgs = with pkgs; [
|
||||||
bat
|
bat
|
||||||
broot
|
broot
|
||||||
devenv
|
devenv
|
||||||
|
|
@ -76,54 +62,38 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# ============================================================================
|
|
||||||
# MARKDOWN SPEC
|
|
||||||
# ============================================================================
|
|
||||||
|
|
||||||
config.specs.markdown = lib.mkIf (config.cats.markdown or true) {
|
config.specs.markdown = lib.mkIf (config.cats.markdown or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
extraPackages = with pkgs; [
|
runtimePkgs = with pkgs; [
|
||||||
python313Packages.pylatexenc
|
python313Packages.pylatexenc
|
||||||
quarto
|
quarto
|
||||||
zk
|
zk
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# ============================================================================
|
|
||||||
# NIX SPEC
|
|
||||||
# ============================================================================
|
|
||||||
|
|
||||||
config.specs.nix = lib.mkIf (config.cats.nix or true) {
|
config.specs.nix = lib.mkIf (config.cats.nix or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
extraPackages = with pkgs; [
|
runtimePkgs = with pkgs; [
|
||||||
alejandra
|
alejandra
|
||||||
nix-doc
|
nix-doc
|
||||||
nixd
|
nixd
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# ============================================================================
|
|
||||||
# LUA SPEC
|
|
||||||
# ============================================================================
|
|
||||||
|
|
||||||
config.specs.lua = lib.mkIf (config.cats.lua or true) {
|
config.specs.lua = lib.mkIf (config.cats.lua or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
extraPackages = with pkgs; [
|
runtimePkgs = with pkgs; [
|
||||||
lua-language-server
|
lua-language-server
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# ============================================================================
|
|
||||||
# PYTHON SPEC
|
|
||||||
# ============================================================================
|
|
||||||
|
|
||||||
config.specs.python = lib.mkIf (config.cats.python or true) {
|
config.specs.python = lib.mkIf (config.cats.python or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
extraPackages = let
|
runtimePkgs = let
|
||||||
python_packages_fn =
|
python_packages_fn =
|
||||||
if pkgs ? basePythonPackages
|
if pkgs ? basePythonPackages
|
||||||
then ps: pkgs.basePythonPackages ps ++ config.settings.lang_packages.python
|
then ps: pkgs.basePythonPackages ps ++ config.settings.lang_packages.python
|
||||||
|
|
@ -139,14 +109,10 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# ============================================================================
|
|
||||||
# R SPEC
|
|
||||||
# ============================================================================
|
|
||||||
|
|
||||||
config.specs.r = lib.mkIf (config.cats.r or true) {
|
config.specs.r = lib.mkIf (config.cats.r or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
extraPackages = let
|
runtimePkgs = let
|
||||||
r_packages = (pkgs.baseRPackages or []) ++ config.settings.lang_packages.r;
|
r_packages = (pkgs.baseRPackages or []) ++ config.settings.lang_packages.r;
|
||||||
in
|
in
|
||||||
with pkgs; [
|
with pkgs; [
|
||||||
|
|
@ -159,30 +125,22 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# ============================================================================
|
|
||||||
# JULIA SPEC
|
|
||||||
# ============================================================================
|
|
||||||
|
|
||||||
config.specs.julia = lib.mkIf (config.cats.julia or true) {
|
config.specs.julia = lib.mkIf (config.cats.julia or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
extraPackages = let
|
runtimePkgs = let
|
||||||
julia_with_packages =
|
julia_with_packages =
|
||||||
pkgs.julia-bin.withPackages config.settings.lang_packages.julia;
|
pkgs.julia-bin.withPackages config.settings.lang_packages.julia;
|
||||||
in [julia_with_packages];
|
in [julia_with_packages];
|
||||||
};
|
};
|
||||||
|
|
||||||
# ============================================================================
|
|
||||||
# CLICKHOUSE SPEC
|
|
||||||
# ============================================================================
|
|
||||||
|
|
||||||
config.specs.clickhouse = lib.mkIf (config.cats.clickhouse or true) {
|
config.specs.clickhouse = lib.mkIf (config.cats.clickhouse or true) {
|
||||||
data = lib.mkDefault null;
|
data = lib.mkDefault null;
|
||||||
runtimeDeps = "prefix";
|
runtimeDeps = "prefix";
|
||||||
extraPackages = with pkgs; [
|
runtimePkgs = with pkgs; [
|
||||||
clickhouse-lts
|
clickhouse-lts
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.extraPackages = config.specCollect (acc: v: acc ++ (v.extraPackages or [])) [];
|
config.runtimePkgs = config.specCollect (acc: v: acc ++ (v.runtimePkgs or [])) [];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,11 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
config.specs.gitPlugins = {
|
config.specs.gitPlugins = lib.mkIf (config.cats.gitPlugins or true) {
|
||||||
data = [];
|
data = [];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.r = {
|
config.specs.r = lib.mkIf (config.cats.r or true) {
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
pkgs.r-nvim
|
pkgs.r-nvim
|
||||||
quarto-nvim
|
quarto-nvim
|
||||||
|
|
@ -19,14 +19,14 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.markdown-lazy = {
|
config.specs.markdown-lazy = lib.mkIf (config.cats.markdown or true) {
|
||||||
lazy = true;
|
lazy = true;
|
||||||
data = [
|
data = [
|
||||||
config.nvim-lib.neovimPlugins.cmp-pandoc-references
|
config.nvim-lib.neovimPlugins.cmp-pandoc-references
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.general = {
|
config.specs.general = lib.mkIf (config.cats.general or true) {
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
lze
|
lze
|
||||||
lzextras
|
lzextras
|
||||||
|
|
@ -79,7 +79,7 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.lua = {
|
config.specs.lua = lib.mkIf (config.cats.lua or true) {
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
luvit-meta
|
luvit-meta
|
||||||
{
|
{
|
||||||
|
|
@ -89,7 +89,7 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.markdown = {
|
config.specs.markdown = lib.mkIf (config.cats.markdown or true) {
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
quarto-nvim
|
quarto-nvim
|
||||||
render-markdown-nvim
|
render-markdown-nvim
|
||||||
|
|
@ -104,7 +104,7 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.utils = {
|
config.specs.utils = lib.mkIf (config.cats.utils or true) {
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
blink-cmp
|
blink-cmp
|
||||||
nvim-lspconfig
|
nvim-lspconfig
|
||||||
|
|
@ -119,7 +119,7 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.treesitterParsers = {
|
config.specs.treesitterParsers = lib.mkIf (config.cats.treesitterParsers or true) {
|
||||||
data = with pkgs.vimPlugins.nvim-treesitter-parsers; [
|
data = with pkgs.vimPlugins.nvim-treesitter-parsers; [
|
||||||
bash
|
bash
|
||||||
c
|
c
|
||||||
|
|
@ -158,7 +158,7 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.utils-lazy = {
|
config.specs.utils-lazy = lib.mkIf (config.cats.utils or true) {
|
||||||
lazy = true;
|
lazy = true;
|
||||||
data = with pkgs.vimPlugins; [
|
data = with pkgs.vimPlugins; [
|
||||||
blink-compat
|
blink-compat
|
||||||
|
|
@ -175,7 +175,7 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
config.specs.gitPlugins-lazy = {
|
config.specs.gitPlugins-lazy = lib.mkIf (config.cats.gitPlugins or true) {
|
||||||
lazy = true;
|
lazy = true;
|
||||||
data = [];
|
data = [];
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -7,16 +7,10 @@ inputs:
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
# ============================================================================
|
|
||||||
# IMPORTS
|
|
||||||
# ============================================================================
|
|
||||||
# Import the base neovim wrapper module and all configuration modules
|
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
wlib.wrapperModules.neovim
|
wlib.wrapperModules.neovim
|
||||||
./module/specs/deps.nix
|
./module/specs/deps.nix
|
||||||
./module/specs/plugins.nix
|
./module/specs/plugins.nix
|
||||||
./module/specs/cats-enable.nix
|
|
||||||
./module/settings/core.nix
|
./module/settings/core.nix
|
||||||
./module/settings/cats.nix
|
./module/settings/cats.nix
|
||||||
./module/settings/env.nix
|
./module/settings/env.nix
|
||||||
|
|
@ -25,11 +19,6 @@ inputs:
|
||||||
./module/settings/runtime-path.nix
|
./module/settings/runtime-path.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
# ============================================================================
|
|
||||||
# HELPER FUNCTIONS
|
|
||||||
# ============================================================================
|
|
||||||
# Utilities for working with plugin inputs
|
|
||||||
|
|
||||||
options.nvim-lib.neovimPlugins = lib.mkOption {
|
options.nvim-lib.neovimPlugins = lib.mkOption {
|
||||||
readOnly = true;
|
readOnly = true;
|
||||||
type = lib.types.attrsOf wlib.types.stringable;
|
type = lib.types.attrsOf wlib.types.stringable;
|
||||||
|
|
@ -58,11 +47,6 @@ inputs:
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# ============================================================================
|
|
||||||
# CONFIGURATION
|
|
||||||
# ============================================================================
|
|
||||||
# Pass cats configuration to neovim and expose metadata
|
|
||||||
|
|
||||||
config.settings.cats = config.cats;
|
config.settings.cats = config.cats;
|
||||||
config.info.cats = config.cats;
|
config.info.cats = config.cats;
|
||||||
config.info.nixCats_config_location = config.settings.config_directory;
|
config.info.nixCats_config_location = config.settings.config_directory;
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,8 @@ let
|
||||||
|
|
||||||
rOverlay = import ./r.nix {inherit inputs;};
|
rOverlay = import ./r.nix {inherit inputs;};
|
||||||
rNvimNixOverlay = inputs.r-nvim-nix.overlays.default;
|
rNvimNixOverlay = inputs.r-nvim-nix.overlays.default;
|
||||||
franOverlay = inputs.fran.overlays.default;
|
pythonOverlay = import ./python.nix {inherit inputs;};
|
||||||
pythonOverlay = import ./python.nix inputs;
|
pluginsOverlay = import ./plugins.nix {inherit inputs;};
|
||||||
pluginsOverlay = import ./plugins.nix inputs;
|
|
||||||
|
|
||||||
dependencyOverlays = [
|
dependencyOverlays = [
|
||||||
rOverlay
|
rOverlay
|
||||||
|
|
@ -15,6 +14,11 @@ let
|
||||||
pluginsOverlay
|
pluginsOverlay
|
||||||
];
|
];
|
||||||
dependencyOverlay = lib.composeManyExtensions dependencyOverlays;
|
dependencyOverlay = lib.composeManyExtensions dependencyOverlays;
|
||||||
|
|
||||||
|
# franOverlay provides R-specific tooling (radianWrapper, air-formatter).
|
||||||
|
# It is scoped to rixpkgs (via overlays/r.nix) rather than the global
|
||||||
|
# package set, since it only applies to R package derivations.
|
||||||
|
franOverlay = inputs.fran.overlays.default;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
inherit
|
inherit
|
||||||
|
|
@ -26,20 +30,6 @@ in
|
||||||
dependencyOverlays
|
dependencyOverlays
|
||||||
dependencyOverlay;
|
dependencyOverlay;
|
||||||
|
|
||||||
# Named exports for downstream composition.
|
|
||||||
default = dependencyOverlay;
|
default = dependencyOverlay;
|
||||||
dependencies = dependencyOverlays;
|
dependencies = dependencyOverlays;
|
||||||
|
|
||||||
overlays = {
|
|
||||||
inherit
|
|
||||||
rOverlay
|
|
||||||
rNvimNixOverlay
|
|
||||||
franOverlay
|
|
||||||
pythonOverlay
|
|
||||||
pluginsOverlay
|
|
||||||
dependencyOverlays
|
|
||||||
dependencyOverlay;
|
|
||||||
default = dependencyOverlay;
|
|
||||||
dependencies = dependencyOverlays;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,55 +1,15 @@
|
||||||
# R packages overlay (rix)
|
|
||||||
#
|
|
||||||
# This overlay provides access to R packages from rstats-on-nix.
|
|
||||||
#
|
|
||||||
# rstats-on-nix maintains snapshots of CRAN packages built with Nix:
|
|
||||||
# - Provides reproducible R package versions
|
|
||||||
# - Ensures binary cache availability for faster builds
|
|
||||||
# - Maintained by the rstats-on-nix community
|
|
||||||
#
|
|
||||||
# Available attributes after applying this overlay:
|
|
||||||
# - pkgs.rpkgs: R packages from rstats-on-nix
|
|
||||||
# - pkgs.rpkgs.rPackages: All CRAN packages
|
|
||||||
# - pkgs.rpkgs.quarto: Quarto publishing system
|
|
||||||
# - pkgs.rpkgs.rWrapper: R with package management
|
|
||||||
# - pkgs.rWrapper: R wrapper with standard packages pre-configured
|
|
||||||
# - pkgs.quarto: Quarto with R integration and standard packages
|
|
||||||
#
|
|
||||||
# Custom R packages and tools (radianWrapper, air-formatter) come from
|
|
||||||
# the fran overlay which should be applied separately.
|
|
||||||
#
|
|
||||||
# To use specific R packages, reference them via:
|
|
||||||
# with pkgs.rpkgs.rPackages; [ package1 package2 ]
|
|
||||||
#
|
|
||||||
# Update the R snapshot date in flake.nix inputs section:
|
|
||||||
# rixpkgs.url = "github:rstats-on-nix/nixpkgs/YYYY-MM-DD"
|
|
||||||
{
|
{
|
||||||
inputs,
|
inputs,
|
||||||
...
|
...
|
||||||
}: final: prev: let
|
}: final: prev: let
|
||||||
# R packages from rstats-on-nix for the current system
|
|
||||||
rpkgs = import inputs.rixpkgs {
|
rpkgs = import inputs.rixpkgs {
|
||||||
system = prev.stdenv.hostPlatform.system;
|
system = prev.stdenv.hostPlatform.system;
|
||||||
overlays = [inputs.fran.overlays.default];
|
overlays = [inputs.fran.overlays.default];
|
||||||
}; # rixpkgs.legacyPackages.${prev.stdenv.hostPlatform.system};
|
};
|
||||||
|
|
||||||
# nvimcom and rnvimserver are provided by the r-nvim-nix flake overlay
|
|
||||||
# (inputs.r-nvim-nix.overlays.default)
|
|
||||||
|
|
||||||
# Standard R packages used by default in rWrapper and quarto
|
|
||||||
reqPkgs = with rpkgs.rPackages; [
|
|
||||||
# languageserver
|
|
||||||
];
|
|
||||||
in {
|
in {
|
||||||
inherit rpkgs;
|
inherit rpkgs;
|
||||||
baseRPackages = reqPkgs;
|
baseRPackages = [ ];
|
||||||
|
rWrapper = rpkgs.rWrapper.override {packages = [ ];};
|
||||||
# R wrapper with standard packages
|
quarto = rpkgs.quarto.override {extraRPackages = [ ];};
|
||||||
rWrapper = rpkgs.rWrapper.override {packages = reqPkgs;};
|
|
||||||
|
|
||||||
# Quarto with R integration
|
|
||||||
quarto = rpkgs.quarto.override {extraRPackages = reqPkgs;};
|
|
||||||
|
|
||||||
# Update helper for rix
|
|
||||||
updateR = import ../scripts/updater.nix {pkgs = final;};
|
updateR = import ../scripts/updater.nix {pkgs = final;};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue