From f844bdff2fabf0ffdd9558c9c9b67cb52aa1eca4 Mon Sep 17 00:00:00 2001 From: Daniel Winkler Date: Sat, 23 May 2026 19:58:10 +1000 Subject: [PATCH] refactor for better runtime dep management --- templates/ed/.gitignore | 1 + templates/ed/flake.nix | 127 ++++++++++++++++++++++++++-------------- 2 files changed, 83 insertions(+), 45 deletions(-) diff --git a/templates/ed/.gitignore b/templates/ed/.gitignore index 52e8a70..ffc0e1a 100644 --- a/templates/ed/.gitignore +++ b/templates/ed/.gitignore @@ -1 +1,2 @@ .nvimcom +.commandcode/ diff --git a/templates/ed/flake.nix b/templates/ed/flake.nix index b674c62..2dbe4db 100644 --- a/templates/ed/flake.nix +++ b/templates/ed/flake.nix @@ -28,7 +28,6 @@ rPackages = pkgs: (with pkgs.rpkgs.rPackages; [ fixest - # pkgs.extraRPackages.musicMetadata ]) ++ ( if builtins.pathExists ./r-packages.nix @@ -58,11 +57,89 @@ else [] ); + # ── Per-language runtime dependencies ────────────────────────── + # Single source of truth for system/toolchain packages that + # flow to both runtimePkgs (wrapper PATH) and devShells. + mkRuntimeDeps = pkgs: { + always = [ + pkgs.git + pkgs.pre-commit + pkgs.cowsay + ]; + nix = [ + pkgs.nil + pkgs.nixfmt + ]; + r = let + r_packages = (pkgs.baseRPackages or []) ++ rPackages pkgs; + in [ + (pkgs.rWrapper.override {packages = r_packages;}) + pkgs.radianWrapper + pkgs.air-formatter + pkgs.yaml-language-server + pkgs.nvimcom + pkgs.rnvimserver + ]; + python = [ + (pkgs.python3.withPackages (ps: + (pkgs.basePythonPackages or (_: [])) ps + ++ pythonPackages pkgs)) + pkgs.nodejs + pkgs.ruff + pkgs.basedpyright + pkgs.uv + ]; + julia = [ + (pkgs.julia-bin.withPackages juliaPackages) + ]; + markdown = let + r_packages = (pkgs.baseRPackages or []) ++ rPackages pkgs; + quarto = + if cats.r + then pkgs.quarto.override {extraRPackages = r_packages;} + else pkgs.quarto; + in [ + pkgs.python313Packages.pylatexenc + quarto + pkgs.zk + ]; + }; + + enabledRuntimeDeps = pkgs: let + deps = mkRuntimeDeps pkgs; + in + deps.always + ++ ( + if cats.nix + then deps.nix + else [] + ) + ++ ( + if cats.r + then deps.r + else [] + ) + ++ ( + if cats.python + then deps.python + else [] + ) + ++ ( + if cats.julia + then deps.julia + else [] + ) + ++ ( + if cats.markdown + then deps.markdown + else [] + ); + systems = ["aarch64-darwin" "x86_64-linux" "aarch64-linux"]; forAllSystems = nixpkgs.lib.genAttrs systems; overlays = [inputs.nvimConfig.overlays.dependencies]; in { - formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.nixfmt-rfc-style); + formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.nixfmt); packages = forAllSystems (system: let pkgs = import nixpkgs { @@ -92,12 +169,10 @@ IS_PROJECT_EDITOR = "1"; }; - runtimePkgs = with pkgs; [ - cowsay - ]; + runtimePkgs = enabledRuntimeDeps pkgs; specs.extraLua = let - name = builtins.baseNameOf (builtins.toString ./.); + name = builtins.baseNameOf (builtins.toString "${self.outPath}"); in { data = pkgs.vimPlugins.mini-notify; before = ["INIT_MAIN"]; @@ -137,47 +212,9 @@ packages = [ nv - pkgs.git - pkgs.pre-commit pkgs.nushell ] - # ── R toolchain (R REPL, quarto, LSP, formatter) ───── - ++ pkgs.lib.optionals cats.r (let - r_packages = (pkgs.baseRPackages or []) ++ rPackages pkgs; - in [ - (pkgs.rWrapper.override {packages = r_packages;}) - pkgs.radianWrapper - pkgs.air-formatter - pkgs.yaml-language-server - pkgs.nvimcom - pkgs.rnvimserver - ]) - # ── Python toolchain (interpreter, LSP, formatter) ──── - ++ pkgs.lib.optionals cats.python [ - (pkgs.python3.withPackages (ps: pkgs.basePythonPackages ps ++ pythonPackages pkgs)) - pkgs.nodejs - pkgs.ruff - pkgs.basedpyright - pkgs.uv - ] - # ── Julia toolchain ─────────────────────────────────── - ++ pkgs.lib.optionals cats.julia [ - pkgs.julia-bin.withPackages - juliaPackages - ] - # ── Markdown toolchain (quarto, zk) ─────────────────── - ++ (let - r_packages = (pkgs.baseRPackages or []) ++ rPackages pkgs; - quarto = - if cats.r - then pkgs.quarto.override {extraRPackages = r_packages;} - else pkgs.quarto; - in - pkgs.lib.optionals cats.markdown [ - pkgs.python313Packages.pylatexenc - quarto - pkgs.zk - ]); + ++ enabledRuntimeDeps pkgs; }; }); };