diff --git a/flake.lock b/flake.lock index 78a5bd8..8b17cf2 100644 --- a/flake.lock +++ b/flake.lock @@ -22,11 +22,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1776169885, - "narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=", + "lastModified": 1777578337, + "narHash": "sha256-Ad49moKWeXtKBJNy2ebiTQUEgdLyvGmTeykAQ9xM+Z4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9", + "rev": "15f4ee454b1dce334612fa6843b3e05cf546efab", "type": "github" }, "original": { @@ -55,11 +55,11 @@ "plugins-r": { "flake": false, "locked": { - "lastModified": 1776340770, - "narHash": "sha256-o/8UZIc/Bq9dWTjA+MpSR5uMUpE7KHTErk+TwWID8Ww=", + "lastModified": 1777830151, + "narHash": "sha256-Ux4Nslz1ts2EnhWylArClMHeVB+WsY0rfD5ZGMIYqoA=", "owner": "R-nvim", "repo": "R.nvim", - "rev": "b9cfffeb9b4e484aa9e13f01c0eb80230aada455", + "rev": "93077db270c44814ea7e3d9a66461665f8f2d74a", "type": "github" }, "original": { @@ -101,11 +101,11 @@ ] }, "locked": { - "lastModified": 1776375800, - "narHash": "sha256-/SSAR77Brr9fbapsh1cb2K47JXCbvwS1GjM4yyDxle8=", + "lastModified": 1777827587, + "narHash": "sha256-Tz3QSgl1wwWH1jf0BngEkNhoWDIIWSBDE/RI+RpVemc=", "owner": "BirdeeHub", "repo": "nix-wrapper-modules", - "rev": "f11469ca69068bac13d9e163b2bd268cc06dff57", + "rev": "b1308b562306f59c7732357655d19cedb292d5e1", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index cce0107..6dc8545 100644 --- a/flake.nix +++ b/flake.nix @@ -36,45 +36,58 @@ wrappers, ... } @ inputs: let + mkWrapperConfig = pkgs: { + cats = { + clickhouse = false; + gitPlugins = true; + julia = false; + lua = true; + markdown = false; + nix = true; + optional = false; + python = false; + r = false; + }; + settings = { + lang_packages = { + python = with pkgs.python3Packages; [ + duckdb + polars + ]; + r = with pkgs.rpkgs.rPackages; [ + arrow + broom + data_table + janitor + styler + ]; + julia = ["DataFramesMeta" "QuackIO"]; + }; + colorscheme = "cyberdream"; + background = "dark"; + wrapRc = true; + }; + binName = "vv"; + }; + wrapperSettings = pkgs: let + cfg = mkWrapperConfig pkgs; def = pkgs.lib.mkDefault; in wrapper.config.wrap { inherit pkgs; - cats = { - clickhouse = def false; - gitPlugins = def true; - julia = def false; - lua = def true; - markdown = def false; - nix = def true; - optional = def false; - python = def false; - r = def false; - }; - + cats = pkgs.lib.mapAttrs (_: v: def v) cfg.cats; settings = { lang_packages = { - python = with pkgs.python3Packages; [ - duckdb - polars - ]; - - r = with pkgs.rpkgs.rPackages; [ - arrow - broom - data_table - janitor - styler - ]; - - julia = ["DataFramesMeta" "QuackIO"]; + python = def cfg.settings.lang_packages.python; + r = def cfg.settings.lang_packages.r; + julia = def cfg.settings.lang_packages.julia; }; - colorscheme = def "cyberdream"; - background = def "dark"; - wrapRc = def true; + colorscheme = def cfg.settings.colorscheme; + background = def cfg.settings.background; + wrapRc = def cfg.settings.wrapRc; }; - binName = def "vv"; + binName = def cfg.binName; }; systems = [ @@ -146,12 +159,55 @@ devShells = forAllSystems ( system: let pkgs = mkPkgs system; + cfg = mkWrapperConfig pkgs; nvimPkg = wrapperSettings pkgs; + + pythonPackages = let + python_packages_fn = + if pkgs ? basePythonPackages + then ps: pkgs.basePythonPackages ps ++ cfg.settings.lang_packages.python + else _: cfg.settings.lang_packages.python; + in + with pkgs; [ + (python3.withPackages python_packages_fn) + nodejs + ruff + basedpyright + uv + ]; + + rPackages = let + r_packages = (pkgs.baseRPackages or []) ++ cfg.settings.lang_packages.r; + in + with pkgs; [ + (rWrapper.override {packages = r_packages;}) + radianWrapper + (quarto.override {extraRPackages = r_packages;}) + air-formatter + yaml-language-server + updateR + ]; + + juliaPackages = let + julia_with_packages = pkgs.julia-bin.withPackages cfg.settings.lang_packages.julia; + in [julia_with_packages]; + + markdownPackages = with pkgs; [ + python313Packages.pylatexenc + quarto + zk + ]; + + shellPackages = [nvimPkg] + ++ pkgs.lib.optionals cfg.cats.python pythonPackages + ++ pkgs.lib.optionals cfg.cats.r rPackages + ++ pkgs.lib.optionals cfg.cats.julia juliaPackages + ++ pkgs.lib.optionals cfg.cats.markdown markdownPackages; in { default = pkgs.mkShell { name = "vShell"; - packages = [nvimPkg]; - nativeBuildInputs = with pkgs; [] ++ (pkgs.lib.optionals self.wrappers.default.cats.optional [devenv]); + packages = shellPackages; + nativeBuildInputs = with pkgs; [] ++ (pkgs.lib.optionals cfg.cats.optional [devenv]); inputsFrom = []; shellHook = ""; };