From e9c99811d4b8684814608c7bff89dd5bb4d20cda Mon Sep 17 00:00:00 2001 From: Daniel Winkler Date: Sun, 3 May 2026 16:35:56 +1000 Subject: [PATCH 1/2] feat(devshell): add language tools conditionally based on cats - Extract mkWrapperConfig to share cats/settings between package and devshell - Add python, R, julia, and markdown packages to devShells when their cats are enabled - Reuse same package construction logic as specs/deps.nix for consistency - Keep lang_packages overridable via lib.mkDefault for downstream flakes --- flake.nix | 120 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 88 insertions(+), 32 deletions(-) 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 = ""; }; From c67fc21f1e25880ce541c7ba452e849a87c64987 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 4 May 2026 06:17:37 +0000 Subject: [PATCH 2/2] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:nixos/nixpkgs/4bd9165' (2026-04-14) → 'github:nixos/nixpkgs/15f4ee4' (2026-04-30) • Updated input 'plugins-r': 'github:R-nvim/R.nvim/b9cfffe' (2026-04-16) → 'github:R-nvim/R.nvim/93077db' (2026-05-03) • Updated input 'wrappers': 'github:BirdeeHub/nix-wrapper-modules/f11469c' (2026-04-16) → 'github:BirdeeHub/nix-wrapper-modules/b1308b5' (2026-05-03) --- flake.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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": {