From cbbb0e4226590946d62f800021b130c5e03e1318 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Tue, 17 Sep 2024 01:51:34 -0700 Subject: [PATCH 01/40] Cut over to new style --- codedown.nix | 85 ++++++++++-------------------- codedown/evaluate-config.nix | 45 ++++++++++++++++ codedown/makeEnvironment.nix | 42 ++------------- codedown/mkCodeDownEnvironment.nix | 76 -------------------------- flake.nix | 2 +- languages/cpp/full.nix | 4 +- languages/python/default.nix | 9 ++++ 7 files changed, 88 insertions(+), 175 deletions(-) create mode 100644 codedown/evaluate-config.nix delete mode 100644 codedown/mkCodeDownEnvironment.nix diff --git a/codedown.nix b/codedown.nix index 64f23f2..c82769a 100644 --- a/codedown.nix +++ b/codedown.nix @@ -10,36 +10,6 @@ let callPackage = pkgsStable.callPackage; - # Languages - # First argument controls whether attributes get filtered to the valid ones. - # This can be expensive to evaluate for languages like Haskell where there are tons of - # Stackage snapshots and one nix file for each. So, we don't bother with that when evaluating - # the languages attrset normally--only when building the languagesSearcher. - languagesFn = filterToValid: pkgsStable.lib.zipAttrsWith (n: v: pkgsStable.lib.head v) [ - (callPackage ./languages/bash {}) - (callPackage ./languages/clojure {}) - (callPackage ./languages/coq {}) - (pkgsMaster.callPackage ./languages/cpp {}) - (callPackage ./languages/go {}) - (pkgsMaster.callPackage ./languages/haskell {}) - (callPackage ./languages/julia {}) - (callPackage ./languages/octave {}) - (callPackage ./languages/postgres {}) - (callPackage ./languages/python { - poetry2nix = import (pkgsStable.fetchFromGitHub { - owner = "nix-community"; - repo = "poetry2nix"; - rev = "78fc8882411c29c8eb5f162b09fcafe08b8b03a3"; - sha256 = "1dfgm286c48ac6yrk16xz41d0rsg6bv08122ngy420b0z88la9nj"; - }) { - pkgs = pkgsStable; - }; - }) - (callPackage ./languages/r {}) - (pkgsMaster.callPackage ./languages/ruby {}) - (pkgsMaster.callPackage ./languages/rust {}) - ]; - lib = pkgsStable.lib; in @@ -47,19 +17,6 @@ in rec { spellchecker = pkgsUnstable.callPackage ./language_servers/markdown-spellcheck-lsp {}; - languages = languagesFn false; - - shells = { - zsh = callPackage ./shells/zsh {}; - fish = callPackage ./shells/fish {}; - bash = callPackage ./shells/bash {}; - }; - - exporters = { - nbconvert-small = pkgsMaster.callPackage ./exporters/nbconvert.nix { texliveScheme = pkgsStable.texlive.combined.scheme-small; }; - nbconvert-large = pkgsMaster.callPackage ./exporters/nbconvert.nix { texliveScheme = pkgsStable.texlive.combined.scheme-full; }; - }; - testing = { builds-forever = pkgsMaster.callPackage ./misc/builds-forever.nix {}; }; @@ -67,27 +24,39 @@ rec { # Exported so clients can build searchers for other package sets, like "codedown.searcher nixpkgs" searcher = common.searcher; - codedownSearcher = common.searcher' { - # Note that we deliberately don't include "testing" packages in the searcher - packages = languagesFn true - // (lib.mapAttrs' (n: v: lib.nameValuePair ("shells." + n) v) shells) - // (lib.mapAttrs' (n: v: lib.nameValuePair ("exporters." + n) v) exporters) - // { inherit spellchecker; }; - }; - - languagesIcons = common.searcherIcons' { - packages = languagesFn true; - packageMustBeDerivation = false; - }; - settingsSchemas = lib.mapAttrs (attr: value: common.safeEval (lib.attrByPath ["meta" "settingsSchema"] [] value) ) languages; - mkCodeDownEnvironment = callPackage ./codedown/mkCodeDownEnvironment.nix { - inherit requiredPackages languages; + evaluateConfig = callPackage ./codedown/evaluate-config.nix { + pkgs = pkgsStable; }; + everythingConfig = let + base = evaluateConfig {}; + kernelNames = builtins.attrNames base.options.kernels; + shellNames = builtins.attrNames base.options.shells; + exporterNames = builtins.attrNames base.options.exporters; + in + builtins.foldl' lib.recursiveUpdate {} ( + (map (n: { kernels.${n}.enable = true; }) kernelNames) + ++ (map (n: { shells.${n}.enable = true; }) shellNames) + ++ (map (n: { exporters.${n}.enable = true; }) exporterNames) + ); + + everythingEnv = evaluateConfig everythingConfig; + + codedownSearcher = common.searcher' { + # Note that we deliberately don't include "testing" packages in the searcher + packages = everythingEnv.config.builtKernels + // everythingEnv.config.builtShells + // everythingEnv.config.builtExporters + // { inherit spellchecker; } + ; + }; + + languages = everythingEnv.config.builtKernels; + makeEnvironment = callPackage ./codedown/makeEnvironment.nix { inherit pkgsStable pkgsUnstable pkgsMaster; }; diff --git a/codedown/evaluate-config.nix b/codedown/evaluate-config.nix new file mode 100644 index 0000000..8af05bf --- /dev/null +++ b/codedown/evaluate-config.nix @@ -0,0 +1,45 @@ +{ lib +, pkgs +}: + +config: + +lib.evalModules { + specialArgs = { + nixosOptionsToSettingsSchema = pkgs.callPackage ../modules/base/nixos-options-to-settings-schema.nix {}; + }; + modules = [ + ../modules/base.nix + + ../exporters/module.nix + + ../languages/bash/module.nix + ../languages/clojure/module.nix + ../languages/coq/module.nix + ../languages/cpp/module.nix + ../languages/go/module.nix + ../languages/haskell/module.nix + ../languages/julia/module.nix + ../languages/octave/module.nix + ../languages/postgres/module.nix + ../languages/python/module.nix + ../languages/r/module.nix + ../languages/ruby/module.nix + ../languages/rust/module.nix + + ../language_servers/markdown-spellcheck-lsp/module.nix + + ../shells/bash/module.nix + ../shells/fish/module.nix + ../shells/zsh/module.nix + + { + config = { + inherit pkgs; + }; + } + { + inherit config; + } + ]; +} diff --git a/codedown/makeEnvironment.nix b/codedown/makeEnvironment.nix index 326d379..56ea1f3 100644 --- a/codedown/makeEnvironment.nix +++ b/codedown/makeEnvironment.nix @@ -19,46 +19,12 @@ config: with lib; let - evaluated = lib.evalModules { - specialArgs = { - nixosOptionsToSettingsSchema = pkgsStable.callPackage ../modules/base/nixos-options-to-settings-schema.nix {}; - }; - modules = [ - ../modules/base.nix - - ../exporters/module.nix - - ../languages/bash/module.nix - ../languages/clojure/module.nix - ../languages/coq/module.nix - ../languages/cpp/module.nix - ../languages/go/module.nix - ../languages/haskell/module.nix - ../languages/julia/module.nix - ../languages/octave/module.nix - ../languages/postgres/module.nix - ../languages/python/module.nix - ../languages/r/module.nix - ../languages/ruby/module.nix - ../languages/rust/module.nix - - ../language_servers/markdown-spellcheck-lsp/module.nix - - ../shells/bash/module.nix - ../shells/fish/module.nix - ../shells/zsh/module.nix - - { - config = { - pkgs = pkgsStable; - }; - } - { - inherit config; - } - ]; + evaluateConfig = callPackage ./evaluate-config.nix { + pkgs = pkgsStable; }; + evaluated = evaluateConfig config; + builtKernels = mapAttrs (_: kernel: kernel.overrideAttrs (old: { passthru = old.passthru // { diff --git a/codedown/mkCodeDownEnvironment.nix b/codedown/mkCodeDownEnvironment.nix deleted file mode 100644 index 7d3b702..0000000 --- a/codedown/mkCodeDownEnvironment.nix +++ /dev/null @@ -1,76 +0,0 @@ -{ callPackage -, lib -, linkFarm -, symlinkJoin -, writeText -, writeTextDir - -, requiredPackages -, languages -}: - -args@{ - channels - , environmentName ? "codedown-environment" - , kernels ? [] - , otherPackages ? [] -}: - -with lib; - -let - languagesCommon = callPackage ../languages/common.nix {}; - shellsCommon = callPackage ../shells/common.nix {}; - - builtKernels = map (x: let kernel = (getAttr x.name languages).override x.args; in - kernel.overrideAttrs (old: { - passthru = old.passthru // { - name = x.name; - channel = x.channel; - }; - })) kernels; - - shells = filter (x: lib.hasPrefix "shells." x.attr) otherPackages; - - exporters = filter (x: lib.hasPrefix "exporters." x.attr) otherPackages; - exporterInfos = concatMap (exporter: exporter.contents.meta.exporterInfos) exporters; - - repls = let - shellToReplInfo = shell: { - name = shell.contents.name; - display_name = shell.contents.displayName; - attr = shell.contents.attr; - args = ["${shell.contents}/lib/codedown/shell"]; - icon = shell.contents.icon; - }; - in - map shellToReplInfo shells - ++ concatMap (kernel: lib.mapAttrsToList (name: value: value // { inherit name; }) (if kernel.passthru ? "repls" then kernel.passthru.repls else {})) builtKernels - ; - - uiMetadata = callPackage ./uiMetadata.nix {}; - -in - -symlinkJoin { - name = environmentName; - paths = builtKernels - ++ [(shellsCommon.wrapShells shells)] - ++ (map (x: x.contents) otherPackages) - ++ requiredPackages - ++ [(writeTextDir "lib/codedown/repls.yaml" (lib.generators.toYAML {} repls))] - ++ [(writeTextDir "lib/codedown/exporters.yaml" (lib.generators.toYAML {} exporterInfos))] - ; - - passthru = rec { - ui_metadata = { - # channels = lib.mapAttrsToList uiMetadata.mkChannelUiMetadata channels; - - kernels = map uiMetadata.mkKernelUiMetadata builtKernels; - - other_packages = map uiMetadata.mkOtherPackageUiMetadata otherPackages; - }; - - ui_metadata_yaml = writeText "ui-metadata.yaml" (lib.generators.toYAML {} ui_metadata); - }; -} diff --git a/flake.nix b/flake.nix index eaeb875..bcfd2b2 100644 --- a/flake.nix +++ b/flake.nix @@ -20,7 +20,7 @@ in rec { packages = { - # inherit (codedown) spellchecker codedownSearcher languagesIcons; + # inherit codedown; jupyter-runner = pkgsMaster.callPackage ./nix/jupyter-runner.nix {}; diff --git a/languages/cpp/full.nix b/languages/cpp/full.nix index b3fda08..170ddc4 100644 --- a/languages/cpp/full.nix +++ b/languages/cpp/full.nix @@ -60,10 +60,10 @@ symlinkJoin { passthru = { meta = clang.meta // { - baseName = x; + baseName = "cpp"; inherit displayName; version = clang.version; - icon = getAttr x icons; + icon = getAttr flavor icons; inherit settingsSchema; }; inherit packageOptions packageSearch; diff --git a/languages/python/default.nix b/languages/python/default.nix index 2a637df..30ea3be 100644 --- a/languages/python/default.nix +++ b/languages/python/default.nix @@ -8,6 +8,15 @@ , stdenv }: +# poetry2nix = import (pkgsStable.fetchFromGitHub { +# owner = "nix-community"; +# repo = "poetry2nix"; +# rev = "78fc8882411c29c8eb5f162b09fcafe08b8b03a3"; +# sha256 = "1dfgm286c48ac6yrk16xz41d0rsg6bv08122ngy420b0z88la9nj"; +# }) { +# pkgs = pkgsStable; +# }; + let common = callPackage ../common.nix {}; From 449625f1070059efc9a265c5aa8eb5558be3495f Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Tue, 17 Sep 2024 13:18:45 -0700 Subject: [PATCH 02/40] More fixes --- flake.nix | 9 ++++++++- languages/go/full.nix | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index bcfd2b2..8a01bb9 100644 --- a/flake.nix +++ b/flake.nix @@ -20,7 +20,14 @@ in rec { packages = { - # inherit codedown; + # For nix repl debugging + inherit codedown; + + # Tests use flake to do packageSearch builds + inherit (codedown) languages; + + # For .envrc + nixpkgsPath = pkgsStable.writeShellScriptBin "nixpkgsPath.sh" "echo -n ${pkgsStable.path}"; jupyter-runner = pkgsMaster.callPackage ./nix/jupyter-runner.nix {}; diff --git a/languages/go/full.nix b/languages/go/full.nix index 2e2989e..3d20e33 100644 --- a/languages/go/full.nix +++ b/languages/go/full.nix @@ -44,7 +44,7 @@ symlinkJoin { passthru = { meta = go.meta // { - baseName = x; + baseName = "go"; displayName = "Go"; version = go.version; icon = ./go-logo-64x64.png; From 0e3a5685fb8ad23348edd95ebd6e2ce228eddb4d Mon Sep 17 00:00:00 2001 From: thomasjm Date: Tue, 17 Sep 2024 15:03:23 -0700 Subject: [PATCH 03/40] More on codedownSearcher --- codedown.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/codedown.nix b/codedown.nix index c82769a..bc23848 100644 --- a/codedown.nix +++ b/codedown.nix @@ -49,8 +49,8 @@ rec { codedownSearcher = common.searcher' { # Note that we deliberately don't include "testing" packages in the searcher packages = everythingEnv.config.builtKernels - // everythingEnv.config.builtShells - // everythingEnv.config.builtExporters + // (lib.mapAttrs' (n: v: lib.nameValuePair ("shells." + n) v) everythingEnv.config.builtShells) + // (lib.mapAttrs' (n: v: lib.nameValuePair ("exporters." + n) v) everythingEnv.config.builtExporters) // { inherit spellchecker; } ; }; From 013463002b6b1d790f6f548458ef56f640067ec3 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Tue, 17 Sep 2024 15:07:19 -0700 Subject: [PATCH 04/40] Working on fixing up tests --- languages/cpp/full.nix | 2 +- languages/cpp/kernel_xeus.nix | 6 +-- languages/cpp/module.nix | 13 ++++-- languages/julia/full.nix | 2 +- languages/ruby/full.nix | 8 ++-- languages/ruby/solargraph.nix | 3 +- languages/rust/full.nix | 2 +- tests/app/Spec/Tests/Haskell.hs | 45 ++++++++++--------- tests/app/Spec/Tests/Haskell/Common.hs | 11 ++--- tests/app/Spec/Tests/Haskell/Diagnostics.hs | 10 ++--- .../Spec/Tests/Haskell/DocumentHighlight.hs | 2 +- tests/app/Spec/Tests/Haskell/Statements.hs | 6 +-- tests/app/Spec/Tests/Julia.hs | 26 ++++++----- tests/app/Spec/Tests/Ruby.hs | 26 ++++++----- tests/app/Spec/Tests/Searchers.hs | 2 +- 15 files changed, 90 insertions(+), 74 deletions(-) diff --git a/languages/cpp/full.nix b/languages/cpp/full.nix index 170ddc4..28db8d7 100644 --- a/languages/cpp/full.nix +++ b/languages/cpp/full.nix @@ -52,7 +52,7 @@ symlinkJoin { xeus-cling = xeusClingToUse; inherit attrs displayName extensions; std = flavor; - attrName = head attrs; + kernelName = "cpp"; }) cling ] diff --git a/languages/cpp/kernel_xeus.nix b/languages/cpp/kernel_xeus.nix index 982ed4c..c12d261 100644 --- a/languages/cpp/kernel_xeus.nix +++ b/languages/cpp/kernel_xeus.nix @@ -9,7 +9,7 @@ , cling , xeus-cling -, attrName +, kernelName , attrs , displayName , extensions @@ -25,7 +25,7 @@ in common.makeJupyterKernel ( listToAttrs [{ - name = attrName; + name = kernelName; value = { displayName = displayName; argv = [ @@ -40,7 +40,7 @@ common.makeJupyterKernel ( # "-v" "-f" "{connection_file}" ]; - language = attrName; + language = kernelName; logo32 = fetchurl { url = https://upload.wikimedia.org/wikipedia/commons/thumb/1/18/ISO_C%2B%2B_Logo.svg/32px-ISO_C%2B%2B_Logo.svg.png; hash = "sha256-cr0TB8/j2mkcFhfCkz9F7ZANOuTlWA2OcWtDcXyOjHw="; diff --git a/languages/cpp/module.nix b/languages/cpp/module.nix index 75f5f52..4c2e29f 100644 --- a/languages/cpp/module.nix +++ b/languages/cpp/module.nix @@ -22,13 +22,20 @@ with lib; "c++17" "c++20" "c++23" + + "gnu++11" + "gnu++14" + "gnu++17" + "gnu++20" + "gnu++23" ]; + default = "c++20"; }; attrs = mkOption { type = types.listOf types.str; - default = ["c++"]; + default = ["cpp"]; }; extensions = mkOption { @@ -36,9 +43,7 @@ with lib; default = ["cpp" "hpp" "cxx" "hxx" "c" "h"]; }; - settings = { - - }; + settings = {}; }; }; diff --git a/languages/julia/full.nix b/languages/julia/full.nix index 3526ef2..a09d8b1 100644 --- a/languages/julia/full.nix +++ b/languages/julia/full.nix @@ -98,7 +98,7 @@ symlinkJoin { passthru = { meta = julia.meta // { - baseName = attr; + baseName = "julia"; inherit displayName settingsSchema; version = julia.version; icon = ./julia-logo-64x64.png; diff --git a/languages/ruby/full.nix b/languages/ruby/full.nix index c24de1b..d586759 100644 --- a/languages/ruby/full.nix +++ b/languages/ruby/full.nix @@ -24,14 +24,14 @@ let rubyPackages = recurseIntoAttrs ruby.gems; + packageOptions = rubyPackages; + packageSearch = common.searcher packageOptions; + languageServers = [] ++ lib.optionals settings.lsp.solargraph.enable [(callPackage ./solargraph.nix { rubyPackages = packageOptions; inherit kernelName; })] ; - packageOptions = rubyPackages; - packageSearch = common.searcher packageOptions; - in symlinkJoin { @@ -47,7 +47,7 @@ symlinkJoin { ; passthru = { meta = ruby.meta // { - baseName = x; + baseName = "ruby"; displayName = "Ruby"; version = ruby.version; icon = ./iruby-64x64.png; diff --git a/languages/ruby/solargraph.nix b/languages/ruby/solargraph.nix index 68f1855..c5f80c4 100644 --- a/languages/ruby/solargraph.nix +++ b/languages/ruby/solargraph.nix @@ -2,7 +2,6 @@ , lib , rubyPackages -, solargraph ? rubyPackages.solargraph , kernelName }: @@ -11,6 +10,8 @@ let languageServerName = "solargraph"; + solargraph = rubyPackages.solargraph; + passthru = { inherit languageServerName; }; diff --git a/languages/rust/full.nix b/languages/rust/full.nix index 254102b..876dede 100644 --- a/languages/rust/full.nix +++ b/languages/rust/full.nix @@ -80,7 +80,7 @@ symlinkJoin { passthru = { meta = rustPackages.rustc.meta // { - baseName = x; + baseName = "rust"; inherit displayName; icon = ./rust-logo-64x64.png; inherit settingsSchema; diff --git a/tests/app/Spec/Tests/Haskell.hs b/tests/app/Spec/Tests/Haskell.hs index 298ba5b..699ed17 100644 --- a/tests/app/Spec/Tests/Haskell.hs +++ b/tests/app/Spec/Tests/Haskell.hs @@ -30,44 +30,47 @@ tests = do -- haskellCommonTests "haskell-ghc810" -- haskellCommonTests "haskell-ghc90" - haskellCommonTests "haskell-ghc92" - haskellCommonTests "haskell-ghc94" - haskellCommonTests "haskell-ghc96" - haskellCommonTests "haskell-ghc98" + haskellCommonTests "ghc92" + haskellCommonTests "ghc94" + haskellCommonTests "ghc96" + haskellCommonTests "ghc98" +kernelName :: Text -> Text +kernelName _ghcPackage = "haskell" haskellCommonTests :: Text -> LanguageSpec -haskellCommonTests lang = do - describe [i|Haskell #{lang} with hlint output|] $ introduceNixEnvironment [kernelSpecWithHlintOutput lang] [] "Haskell" $ do +haskellCommonTests ghcPackage = do + describe [i|Haskell #{ghcPackage} with hlint output|] $ introduceNixEnvironment [kernelSpecWithHlintOutput ghcPackage] [] "Haskell" $ do describe "Kernel" $ do -- With the setting turned on, we should get hlint output - itHasDisplayTexts lang etaExpandCode [Just (A.Array $ V.fromList [ - String "Line 7: Eta reduce\n" - , String "Found:\n" - , String "baz2 x = baz x\n" - , String "Why not:\n" - , String "baz2 = baz" - ])] + itHasDisplayTexts (kernelName ghcPackage) etaExpandCode [ + Just (A.Array $ V.fromList [ + String "Line 7: Eta reduce\n" + , String "Found:\n" + , String "baz2 x = baz x\n" + , String "Why not:\n" + , String "baz2 = baz" + ])] - describe [i|Haskell #{lang}|] $ introduceNixEnvironment [kernelSpec lang] [] "Haskell" $ do + describe [i|Haskell #{ghcPackage}|] $ introduceNixEnvironment [kernelSpec ghcPackage] [] "Haskell" $ do introduceJupyterRunner $ do - testKernelSearchersNonempty lang - testHasExpectedFields lang + testKernelSearchersNonempty (kernelName ghcPackage) + testHasExpectedFields (kernelName ghcPackage) describe "Kernel" $ do - itHasDisplayDatas lang [__i|putStrLn "hi"|] [M.fromList [(MimeType "text/plain", A.Array (V.fromList [A.String "hi"]))]] + itHasDisplayDatas (kernelName ghcPackage) [__i|putStrLn "hi"|] [M.fromList [(MimeType "text/plain", A.Array (V.fromList [A.String "hi"]))]] - itHasDisplayDatas lang [__i|:info String|] [stringInfo] + itHasDisplayDatas (kernelName ghcPackage) [__i|:info String|] [stringInfo] -- We shouldn't get hlint output by default - itHasDisplayDatas lang etaExpandCode [] + itHasDisplayDatas (kernelName ghcPackage) etaExpandCode [] describe "LSP" $ do codeActionsTests - diagnosticsTests lang lsName + diagnosticsTests ghcPackage lsName documentHighlightTests hoverTests - statementsTests lang + statementsTests ghcPackage symbolsTests diff --git a/tests/app/Spec/Tests/Haskell/Common.hs b/tests/app/Spec/Tests/Haskell/Common.hs index 46ba513..4aa5871 100644 --- a/tests/app/Spec/Tests/Haskell/Common.hs +++ b/tests/app/Spec/Tests/Haskell/Common.hs @@ -11,21 +11,22 @@ lsName :: Text lsName = "haskell-language-server" kernelSpec :: Text -> NixKernelSpec -kernelSpec lang = NixKernelSpec { - nixKernelName = lang +kernelSpec ghcPackage = NixKernelSpec { + nixKernelName = "haskell" , nixKernelChannel = "codedown" - , nixKernelDisplayName = Just [i|Haskell (#{lang})|] + , nixKernelDisplayName = Just [i|Haskell (#{ghcPackage})|] , nixKernelPackages = [nameOnly "aeson", nameOnly "bytestring"] , nixKernelMeta = Nothing , nixKernelIcon = Nothing , nixKernelExtraConfig = Just [ - "settings.lsp.haskell-language-server.debug = true" + [i|ghcPackage = "#{ghcPackage}"|] + , "settings.lsp.haskell-language-server.debug = true" -- , "settings.lsp.haskell-language-server.super-debug = true" ] } kernelSpecWithHlintOutput :: Text -> NixKernelSpec -kernelSpecWithHlintOutput lang = (kernelSpec lang) { +kernelSpecWithHlintOutput ghcPackage = (kernelSpec ghcPackage) { nixKernelExtraConfig = Just [ "settings.enableHlintOutput = true" ] diff --git a/tests/app/Spec/Tests/Haskell/Diagnostics.hs b/tests/app/Spec/Tests/Haskell/Diagnostics.hs index ee76d55..5ec8f91 100644 --- a/tests/app/Spec/Tests/Haskell/Diagnostics.hs +++ b/tests/app/Spec/Tests/Haskell/Diagnostics.hs @@ -19,14 +19,14 @@ import TestLib.NixEnvironmentContext diagnosticsTests :: (LspContext context m) => Text -> Text -> SpecFree context m () -diagnosticsTests lang lsName = describe "Diagnostics" $ do +diagnosticsTests ghcPackage lsName = describe "Diagnostics" $ do describe "Foo.hs" $ do testDiagnosticsLabel "Out of scope variable" lsName "Foo.hs" Nothing [__i|module Foo where foo = bar |] $ \diagnostics -> do assertDiagnosticRanges diagnostics [(Range (Position 1 6) (Position 1 9), Just (InR "-Wdeferred-out-of-scope-variables"))] - when (lang /= "haskell-ghc98") $ -- TODO: re-enable hlint test with haskell-language-server 2.8.0.0 + when (ghcPackage /= "haskell-ghc98") $ -- TODO: re-enable hlint test with haskell-language-server 2.8.0.0 testDiagnosticsLabel "Eta reduce" lsName "Foo.hs" Nothing etaExpandCode $ \diagnostics -> do assertDiagnosticRanges diagnostics [(Range (Position 6 0) (Position 6 14), Just (InR "refact:Eta reduce"))] @@ -77,8 +77,8 @@ etaExpandCode = [__i|module Foo where main :: IO () main = runSandwichWithCommandLineArgs Sandwich.defaultOptions $ - introduceNixEnvironment [kernelSpec lang] [] "Haskell" $ + introduceNixEnvironment [kernelSpec ghcPackage] [] "Haskell" $ introduceJustBubblewrap $ - diagnosticsTests lang HaskellCommon.lsName + diagnosticsTests ghcPackage HaskellCommon.lsName where - lang = "haskell-ghc92" + ghcPackage = "ghc92" diff --git a/tests/app/Spec/Tests/Haskell/DocumentHighlight.hs b/tests/app/Spec/Tests/Haskell/DocumentHighlight.hs index 478d89e..40a9219 100644 --- a/tests/app/Spec/Tests/Haskell/DocumentHighlight.hs +++ b/tests/app/Spec/Tests/Haskell/DocumentHighlight.hs @@ -49,5 +49,5 @@ documentHighlightCodeRegular = [__i|foo = "hello" -- main :: IO () -- main = runSandwichWithCommandLineArgs Sandwich.defaultOptions $ do --- introduceNixEnvironment [kernelSpec "haskell-ghc92"] [] "Haskell" $ do +-- introduceNixEnvironment [kernelSpec "ghc92"] [] "Haskell" $ do -- documentHighlightTests diff --git a/tests/app/Spec/Tests/Haskell/Statements.hs b/tests/app/Spec/Tests/Haskell/Statements.hs index b796f74..5cc40d2 100644 --- a/tests/app/Spec/Tests/Haskell/Statements.hs +++ b/tests/app/Spec/Tests/Haskell/Statements.hs @@ -14,13 +14,13 @@ import UnliftIO.Timeout statementsTests :: (LspContext context m) => Text -> SpecFree context m () -statementsTests lang = describe "Statements" $ do +statementsTests ghcPackage = describe "Statements" $ do describe "Single-line" $ do it "doesn't choke" $ doNotebookSession lsName statementsCode $ \filename -> do ident <- openDoc filename "haskell" timeout 120_000_000 (getHighlights ident (Position 0 1)) >>= (`shouldBe` (Just documentHighlightResults)) - when (lang /= "haskell-ghc98") $ -- TODO: re-enable hlint test with haskell-language-server 2.8.0.0 + when (ghcPackage /= "ghc98") $ -- TODO: re-enable hlint test with haskell-language-server 2.8.0.0 testDiagnosticsLabel "Empty diagnostics" lsName "main.ipynb" Nothing statementsCode $ \diagnostics -> do -- Note: normally the server wouldn't send empty diagnostics. But the statement inserts "= unsafePerformIO $ ", -- which causes it to emit a "redundant bracket" diagnostic, which then gets filtered out by untransformPosition @@ -31,7 +31,7 @@ statementsTests lang = describe "Statements" $ do ident <- openDoc filename "haskell" timeout 120_000_000 (getHighlights ident (Position 0 1)) >>= (`shouldBe` (Just documentHighlightResults)) - when (lang /= "haskell-ghc98") $ -- TODO: re-enable hlint test with haskell-language-server 2.8.0.0 + when (ghcPackage /= "ghc98") $ -- TODO: re-enable hlint test with haskell-language-server 2.8.0.0 testDiagnosticsLabel "Redundant bracket" lsName "main.ipynb" Nothing statementsCodeMultiline $ \diagnostics -> do info [i|Got diagnostics: #{diagnostics}|] assertDiagnosticRanges diagnostics [(Range (Position 1 9) (Position 1 14), Just (InR "refact:Redundant bracket"))] diff --git a/tests/app/Spec/Tests/Julia.hs b/tests/app/Spec/Tests/Julia.hs index 7a1e4ab..7e618b5 100644 --- a/tests/app/Spec/Tests/Julia.hs +++ b/tests/app/Spec/Tests/Julia.hs @@ -22,20 +22,21 @@ import TestLib.Types tests :: LanguageSpec tests = do - juliaTests "julia16" - -- juliaTests "julia18" -- EOL - juliaTests "julia19" - juliaTests "julia110" + juliaTests "julia_19" + juliaTests "julia_110" + +kernelName :: Text -> Text +kernelName _juliaPackage = "julia" juliaTests :: Text -> LanguageSpec -juliaTests lang = describe [i|Julia (#{lang})|] $ introduceNixEnvironment [kernelSpec lang] [] [i|Julia (#{lang})|] $ introduceJupyterRunner $ do - testKernelSearchersNonempty lang - testHasExpectedFields lang +juliaTests juliaPackage = describe [i|Julia (#{juliaPackage})|] $ introduceNixEnvironment [kernelSpec juliaPackage] [] [i|Julia (#{juliaPackage})|] $ introduceJupyterRunner $ do + testKernelSearchersNonempty (kernelName juliaPackage) + testHasExpectedFields (kernelName juliaPackage) - testKernelStdout lang [i|println("hi")|] "hi\n" + testKernelStdout (kernelName juliaPackage) [i|println("hi")|] "hi\n" describe "LSP" $ do - diagnosticsTests lang lsName + diagnosticsTests (kernelName juliaPackage) lsName itHasHoverSatisfying lsName "test.jl" Nothing [__i|print("hi")|] (Position 0 2) $ \hover -> do let InL (MarkupContent MarkupKind_Markdown text) = hover ^. contents @@ -60,10 +61,10 @@ lsName :: Text lsName = "LanguageServer" kernelSpec :: Text -> NixKernelSpec -kernelSpec lang = NixKernelSpec { - nixKernelName = lang +kernelSpec juliaPackage = NixKernelSpec { + nixKernelName = kernelName juliaPackage , nixKernelChannel = "codedown" - , nixKernelDisplayName = Just [i|Julia (#{lang})|] + , nixKernelDisplayName = Just [i|Julia (#{juliaPackage})|] , nixKernelPackages = [ nameOnly "JSON3" , nameOnly "Plots" @@ -75,6 +76,7 @@ kernelSpec lang = NixKernelSpec { "settings.lsp.LanguageServer.enable = true" , "settings.lsp.LanguageServer.debug = true" , "settings.lsp.LanguageServer.index = true" + , [i|juliaPackage = "#{juliaPackage}"|] ] } diff --git a/tests/app/Spec/Tests/Ruby.hs b/tests/app/Spec/Tests/Ruby.hs index e20894c..b10c412 100644 --- a/tests/app/Spec/Tests/Ruby.hs +++ b/tests/app/Spec/Tests/Ruby.hs @@ -27,20 +27,23 @@ tests = describe "Ruby" $ do kernelTests "ruby_3_3" +kernelName :: Text -> Text +kernelName _rubyPackage = "ruby" + kernelTests :: Text -> LanguageSpec -kernelTests lang = do - describe (T.unpack lang) $ introduceNixEnvironment [kernelSpec lang] [] [i|Ruby (#{lang})|] $ introduceJupyterRunner $ do - testKernelSearchersNonempty lang - testHasExpectedFields lang +kernelTests rubyPackage = do + describe (T.unpack rubyPackage) $ introduceNixEnvironment [kernelSpec rubyPackage] [] [i|Ruby (#{rubyPackage})|] $ introduceJupyterRunner $ do + testKernelSearchersNonempty (kernelName rubyPackage) + testHasExpectedFields (kernelName rubyPackage) - testKernelStdout lang [__i|puts "hi"|] "hi\n" + testKernelStdout (kernelName rubyPackage) [__i|puts "hi"|] "hi\n" - when ("_" `T.isInfixOf` lang) $ do - let versionString = lang + when ("_" `T.isInfixOf` rubyPackage) $ do + let versionString = rubyPackage & T.drop 5 & T.replace "_" "." it [i|The Ruby version contains the string '#{versionString}'|] $ do - testKernelStdout'' lang [__i|puts RUBY_VERSION|] $ \case + testKernelStdout'' (kernelName rubyPackage) [__i|puts RUBY_VERSION|] $ \case Nothing -> expectationFailure [i|Got no stdout|] Just t -> do info [i|RUBY_VERSION result: #{t}|] @@ -52,15 +55,16 @@ kernelTests lang = do text `textShouldContain` "$stdout.puts(obj" kernelSpec :: Text -> NixKernelSpec -kernelSpec lang = NixKernelSpec { - nixKernelName = lang +kernelSpec rubyPackage = NixKernelSpec { + nixKernelName = kernelName rubyPackage , nixKernelChannel = "codedown" - , nixKernelDisplayName = Just [i|Ruby (#{lang})|] + , nixKernelDisplayName = Just [i|Ruby (#{rubyPackage})|] , nixKernelPackages = [] , nixKernelMeta = Nothing , nixKernelIcon = Nothing , nixKernelExtraConfig = Just [ "settings.lsp.solargraph.enable = true" + , [i|rubyPackage = "#{rubyPackage}"|] ] } diff --git a/tests/app/Spec/Tests/Searchers.hs b/tests/app/Spec/Tests/Searchers.hs index 71b069a..4a3f633 100644 --- a/tests/app/Spec/Tests/Searchers.hs +++ b/tests/app/Spec/Tests/Searchers.hs @@ -8,7 +8,7 @@ import TestLib.TestSearchers tests :: TopSpec tests = describe "Searchers" $ do - it "searcher has some results" $ testSearcherHasNonemptyResults ".#codedownSearcher" + it "searcher has some results" $ testSearcherHasNonemptyResults ".#codedown.codedownSearcher" main :: IO () main = runSandwichWithCommandLineArgs Sandwich.defaultOptions tests From 49e194f4941f07956a0a6c26147e2303533937dc Mon Sep 17 00:00:00 2001 From: thomasjm Date: Tue, 17 Sep 2024 15:14:25 -0700 Subject: [PATCH 05/40] Replace default.nix with full.nix files --- languages/bash/default.nix | 104 ++++++------ languages/bash/full.nix | 62 -------- languages/bash/module.nix | 2 +- languages/clojure/default.nix | 106 +++++-------- languages/clojure/full.nix | 74 --------- languages/clojure/module.nix | 2 +- languages/coq/default.nix | 134 ++++++---------- languages/coq/full.nix | 66 -------- languages/coq/module.nix | 2 +- languages/cpp/default.nix | 142 +++++++---------- languages/cpp/full.nix | 95 ----------- languages/cpp/module.nix | 2 +- languages/go/default.nix | 114 +++++--------- languages/go/full.nix | 69 -------- languages/go/module.nix | 2 +- languages/haskell/default.nix | 158 ++++++++----------- languages/haskell/full.nix | 105 ------------- languages/haskell/module.nix | 2 +- languages/julia/default.nix | 199 +++++++++-------------- languages/julia/full.nix | 120 -------------- languages/julia/module.nix | 2 +- languages/octave/default.nix | 157 ++++++++----------- languages/octave/full.nix | 88 ----------- languages/octave/module.nix | 2 +- languages/postgres/default.nix | 83 +++++----- languages/postgres/full.nix | 60 ------- languages/postgres/module.nix | 2 +- languages/python/default.nix | 278 +++++++++------------------------ languages/python/full.nix | 103 ------------ languages/python/module.nix | 4 +- languages/r/default.nix | 135 +++++++--------- languages/r/full.nix | 86 ---------- languages/r/module.nix | 2 +- languages/ruby/default.nix | 134 ++++++---------- languages/ruby/full.nix | 71 --------- languages/ruby/module.nix | 2 +- languages/rust/default.nix | 181 ++++++++------------- languages/rust/full.nix | 106 ------------- languages/rust/module.nix | 2 +- 39 files changed, 719 insertions(+), 2339 deletions(-) delete mode 100644 languages/bash/full.nix delete mode 100644 languages/clojure/full.nix delete mode 100644 languages/coq/full.nix delete mode 100644 languages/cpp/full.nix delete mode 100644 languages/go/full.nix delete mode 100644 languages/haskell/full.nix delete mode 100644 languages/julia/full.nix delete mode 100644 languages/octave/full.nix delete mode 100644 languages/postgres/full.nix delete mode 100644 languages/python/full.nix delete mode 100644 languages/r/full.nix delete mode 100644 languages/ruby/full.nix delete mode 100644 languages/rust/full.nix diff --git a/languages/bash/default.nix b/languages/bash/default.nix index 4e35a38..92fd3ed 100644 --- a/languages/bash/default.nix +++ b/languages/bash/default.nix @@ -5,72 +5,58 @@ , nodePackages , symlinkJoin , writeTextDir + +, bash +, attrs +, extensions +, settings +, settingsSchema }: let - common = callPackage ../common.nix {}; + kernelName = "bash"; - baseCandidates = [ - "bash" - ]; + common = callPackage ../common.nix {}; - settingsSchema = [ - { - target = "lsp.bash-language-server.enable"; - title = "Enable Bash language server"; - type = "boolean"; - defaultValue = true; - } - ]; + languageServers = lib.optionals settings.lsp.bash-language-server.enable + [(callPackage ./language_server_bash { inherit kernelName; })]; in -lib.listToAttrs (map (x: { - name = x; - value = - lib.makeOverridable ({ - packages ? [] - , attrs ? ["bash"] - , extensions ? ["sh" "bash"] - , settings ? {} - }@args: - let - bash = lib.getAttr x pkgs; - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; - languageServers = lib.optionals (common.isTrue settings "lsp.bash-language-server.enable") [(callPackage ./language_server_bash { kernelName = x; })]; - in symlinkJoin { - name = "bash"; +symlinkJoin { + name = "bash"; - paths = [ - (callPackage ./kernel.nix { inherit attrs extensions; }) - (callPackage ./man-with-pages.nix {}) - ] - ++ languageServers - ; + paths = [ + (callPackage ./kernel.nix { inherit attrs extensions; }) + (callPackage ./man-with-pages.nix {}) + ] + ++ languageServers + ; - passthru = { - args = args // { baseName = x; }; - meta = bash.meta // { - baseName = x; - displayName = "Bash " + bash.version; - version = bash.version; - icon = ./bash-logo-128x128.png; - inherit settingsSchema; - }; - versions = { - bash = bash.version; - bash-language-server = nodePackages.bash-language-server.version; - bash_kernel = python3.pkgs.bash_kernel.version; - }; - packageOptions = {}; - packageSearch = common.searcher {}; - inherit settingsSchema settings; - modes = { - inherit attrs extensions; - code_mirror_mode = "shell"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; - } - ) {}; -}) (lib.filter (x: lib.hasAttr x pkgs) baseCandidates)) + passthru = { + args = { + inherit attrs extensions settings; + packages = []; + }; + meta = bash.meta // { + baseName = kernelName; + displayName = "Bash " + bash.version; + version = bash.version; + icon = ./bash-logo-128x128.png; + inherit settingsSchema; + }; + versions = { + bash = bash.version; + bash-language-server = nodePackages.bash-language-server.version; + bash_kernel = python3.pkgs.bash_kernel.version; + }; + packageOptions = {}; + packageSearch = common.searcher {}; + inherit settingsSchema settings; + modes = { + inherit attrs extensions; + code_mirror_mode = "shell"; + }; + languageServerNames = map (x: x.languageServerName) languageServers; + }; +} diff --git a/languages/bash/full.nix b/languages/bash/full.nix deleted file mode 100644 index 92fd3ed..0000000 --- a/languages/bash/full.nix +++ /dev/null @@ -1,62 +0,0 @@ -{ callPackage -, lib -, pkgs -, python3 -, nodePackages -, symlinkJoin -, writeTextDir - -, bash -, attrs -, extensions -, settings -, settingsSchema -}: - -let - kernelName = "bash"; - - common = callPackage ../common.nix {}; - - languageServers = lib.optionals settings.lsp.bash-language-server.enable - [(callPackage ./language_server_bash { inherit kernelName; })]; - -in - -symlinkJoin { - name = "bash"; - - paths = [ - (callPackage ./kernel.nix { inherit attrs extensions; }) - (callPackage ./man-with-pages.nix {}) - ] - ++ languageServers - ; - - passthru = { - args = { - inherit attrs extensions settings; - packages = []; - }; - meta = bash.meta // { - baseName = kernelName; - displayName = "Bash " + bash.version; - version = bash.version; - icon = ./bash-logo-128x128.png; - inherit settingsSchema; - }; - versions = { - bash = bash.version; - bash-language-server = nodePackages.bash-language-server.version; - bash_kernel = python3.pkgs.bash_kernel.version; - }; - packageOptions = {}; - packageSearch = common.searcher {}; - inherit settingsSchema settings; - modes = { - inherit attrs extensions; - code_mirror_mode = "shell"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; -} diff --git a/languages/bash/module.nix b/languages/bash/module.nix index 97a1d71..f52dc9a 100644 --- a/languages/bash/module.nix +++ b/languages/bash/module.nix @@ -29,7 +29,7 @@ with lib; }; config = mkIf config.kernels.bash.enable { - builtKernels.bash = config.pkgs.callPackage ./full.nix { + builtKernels.bash = config.pkgs.callPackage ./. { bash = config.pkgs.bash; inherit (config.kernels.bash) attrs extensions settings; settingsSchema = nixosOptionsToSettingsSchema options.kernels.bash; diff --git a/languages/clojure/default.nix b/languages/clojure/default.nix index 26e1a27..f25ea1f 100644 --- a/languages/clojure/default.nix +++ b/languages/clojure/default.nix @@ -1,22 +1,21 @@ { lib , pkgs , callPackage +, clojure , stdenv , writeTextDir , symlinkJoin + +, bash +, attrs +, extensions +, settings +, settingsSchema }: let common = callPackage ../common.nix {}; - baseCandidates = [ - "clojure" - ]; - - packagesLookup = { - clojure = {}; - }; - repls = clojure: { clojure = { display_name = "Clojure " + clojure.version; @@ -26,79 +25,50 @@ let }; }; - settingsSchema = [ - { - target = "lsp.clojure-lsp.enable"; - title = "Enable clojure-lsp language server"; - type = "boolean"; - defaultValue = true; - } - ]; - clojure-lsp = callPackage ./clojure-lsp.nix {}; - chooseLanguageServers = settings: kernelName: - [] - ++ lib.optionals (common.isTrue settings "lsp.clojure-lsp.enable") [(callPackage ./language-server.nix { inherit clojure-lsp kernelName; })] - ; + packageOptions = {}; + packageSearch = common.searcher packageOptions; -in + kernelName = "clojure"; -with lib; + languageServers = [] + ++ lib.optionals settings.lsp.clojure-lsp.enable [(callPackage ./language-server.nix { inherit clojure-lsp kernelName; })]; -listToAttrs (map (x: - let - clojure = getAttr x pkgs; +in +symlinkJoin { + name = "clojure"; + paths = [ + (callPackage ./kernel.nix { inherit attrs extensions; version = clojure.version; }) + clojure + ] + ++ languageServers + ; + + passthru = { meta = clojure.meta // { - baseName = x; + baseName = "clojure"; displayName = "Clojure"; version = clojure.version; icon = ./clojure-logo-64x64.png; inherit settingsSchema; }; - - packageOptions = getAttr x packagesLookup; - packageSearch = common.searcher packageOptions; + inherit packageOptions packageSearch; versions = { clojure = clojure.version; clojure-lsp = clojure-lsp.version; }; - - in { - name = x; - value = lib.makeOverridable (args@{ - packages ? [] - , settings ? {} - , attrs ? ["clojure"] - , extensions ? ["clj"] - }: - let - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; - languageServers = chooseLanguageServers settingsToUse x; - in symlinkJoin { - name = "clojure"; - paths = [ - (callPackage ./kernel.nix { inherit attrs extensions version; }) - clojure - ] - ++ languageServers - ; - - passthru = { - inherit meta packageOptions packageSearch versions; - inherit settingsSchema settings; - args = args // { baseName = x; }; - repls = repls clojure; - modes = { - inherit attrs extensions; - code_mirror_mode = "clojure"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; - } - ) {} - ; - } - -) (filter (x: (common.hasAttrSafe x pkgs) && !(attrByPath [x "meta" "broken"] false pkgs)) baseCandidates)) + inherit settingsSchema settings; + args = { + inherit attrs extensions settings; + packages = []; + }; + repls = repls clojure; + modes = { + inherit attrs extensions; + code_mirror_mode = "clojure"; + }; + languageServerNames = map (x: x.languageServerName) languageServers; + }; +} diff --git a/languages/clojure/full.nix b/languages/clojure/full.nix deleted file mode 100644 index f25ea1f..0000000 --- a/languages/clojure/full.nix +++ /dev/null @@ -1,74 +0,0 @@ -{ lib -, pkgs -, callPackage -, clojure -, stdenv -, writeTextDir -, symlinkJoin - -, bash -, attrs -, extensions -, settings -, settingsSchema -}: - -let - common = callPackage ../common.nix {}; - - repls = clojure: { - clojure = { - display_name = "Clojure " + clojure.version; - attr = "clojure"; - args = ["${clojure}/bin/clojure"]; - icon = ./clojure-logo-64x64.png; - }; - }; - - clojure-lsp = callPackage ./clojure-lsp.nix {}; - - packageOptions = {}; - packageSearch = common.searcher packageOptions; - - kernelName = "clojure"; - - languageServers = [] - ++ lib.optionals settings.lsp.clojure-lsp.enable [(callPackage ./language-server.nix { inherit clojure-lsp kernelName; })]; - -in - -symlinkJoin { - name = "clojure"; - paths = [ - (callPackage ./kernel.nix { inherit attrs extensions; version = clojure.version; }) - clojure - ] - ++ languageServers - ; - - passthru = { - meta = clojure.meta // { - baseName = "clojure"; - displayName = "Clojure"; - version = clojure.version; - icon = ./clojure-logo-64x64.png; - inherit settingsSchema; - }; - inherit packageOptions packageSearch; - versions = { - clojure = clojure.version; - clojure-lsp = clojure-lsp.version; - }; - inherit settingsSchema settings; - args = { - inherit attrs extensions settings; - packages = []; - }; - repls = repls clojure; - modes = { - inherit attrs extensions; - code_mirror_mode = "clojure"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; -} diff --git a/languages/clojure/module.nix b/languages/clojure/module.nix index db38715..06c2999 100644 --- a/languages/clojure/module.nix +++ b/languages/clojure/module.nix @@ -29,7 +29,7 @@ with lib; }; config = mkIf config.kernels.clojure.enable { - builtKernels.clojure = config.pkgs.callPackage ./full.nix { + builtKernels.clojure = config.pkgs.callPackage ./. { clojure = config.pkgs.clojure; inherit (config.kernels.clojure) attrs extensions settings; settingsSchema = nixosOptionsToSettingsSchema options.kernels.clojure; diff --git a/languages/coq/default.nix b/languages/coq/default.nix index b60e1fa..cd7fc56 100644 --- a/languages/coq/default.nix +++ b/languages/coq/default.nix @@ -3,110 +3,64 @@ , callPackage , symlinkJoin , stdenv + +, coqPackages + +, packages +, attrs +, extensions +, settings +, settingsSchema }: let common = callPackage ../common.nix {}; - repls = coq: {}; - coq_jupyter = callPackage ./coq_jupyter {}; - baseCandidates = [ - "coqPackages" - "coqPackages_8_5" - "coqPackages_8_6" - "coqPackages_8_7" - "coqPackages_8_8" - "coqPackages_8_9" - "coqPackages_8_10" - "coqPackages_8_11" - "coqPackages_8_12" - "coqPackages_8_13" - "coqPackages_8_14" - "coqPackages_8_15" - "coqPackages_8_16" - "coqPackages_8_17" - "coqPackages_8_18" - "coqPackages_8_19" - "coqPackages_8_20" - "coqPackages_8_21" - "coqPackages_8_22" - "coqPackages_8_23" - "coqPackages_8_24" - "coqPackages_8_25" - ]; + coq = coqPackages.coq; - latestAvailable = lib.last (lib.filter (x: lib.hasAttr x pkgs) baseCandidates); + displayName = "Coq"; - isLessCommon = candidate: !(lib.elem candidate ["coqPackages" latestAvailable]); + packageOptions = coqPackages; + packageSearch = common.searcher packageOptions; - settingsSchema = []; +in - chooseLanguageServers = settings: coq: kernelName: - [] - ; +symlinkJoin { + name = coq.name; -in + paths = [ + (callPackage ./kernel.nix { + inherit coq displayName attrs extensions; + enableVariableInspector = settings.enableVariableInspector; + chosenPackages = map (x: builtins.getAttr x packageOptions) packages; + }) + + coq + ] + ++ [] + ; -lib.listToAttrs (map (x: - let - coqPackages = lib.getAttr x pkgs; - baseCoq = coqPackages.coq; - baseName = with builtins; (substring 0 3 x) + (substring 11 (stringLength x - 11) x); - displayName = "Coq"; - meta = baseCoq.meta // { - inherit baseName displayName settingsSchema; - version = baseCoq.version; + passthru = { + meta = coq.meta // { + inherit displayName settingsSchema; + version = coq.version; icon = coq_jupyter.sizedLogo "64"; - lessCommon = isLessCommon x; }; - - packageOptions = coqPackages; - packageSearch = common.searcher packageOptions; + inherit packageOptions packageSearch; versions = { - coq = baseCoq.version; + coq = coq.version; }; - - in { - name = baseName; - value = lib.makeOverridable ({ - packages ? [] - , attrs ? [baseName "coq"] - , extensions ? ["v"] - , settings ? {} - }@args: - let - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; - - coq = baseCoq; - - in symlinkJoin { - name = baseName; - - paths = [ - (callPackage ./kernel.nix { - inherit coq displayName attrs extensions; - enableVariableInspector = settingsToUse.enableVariableInspector; - chosenPackages = map (x: builtins.getAttr x packageOptions) packages; - }) - - coq - ] - ++ (chooseLanguageServers settingsToUse coq baseName) - ; - - passthru = { - inherit meta packageOptions packageSearch versions; - inherit settings settingsSchema; - args = args // { inherit baseName; }; - repls = repls coq; - modes = { - inherit attrs extensions; - code_mirror_mode = "coq"; - }; - }; - } - ) {}; - } -) (lib.filter (x: lib.hasAttr x pkgs) baseCandidates)) + inherit settings settingsSchema; + args = { + inherit attrs extensions settings; + packages = []; + }; + repls = {}; + modes = { + inherit attrs extensions; + code_mirror_mode = "coq"; + }; + }; +} diff --git a/languages/coq/full.nix b/languages/coq/full.nix deleted file mode 100644 index cd7fc56..0000000 --- a/languages/coq/full.nix +++ /dev/null @@ -1,66 +0,0 @@ -{ pkgs -, lib -, callPackage -, symlinkJoin -, stdenv - -, coqPackages - -, packages -, attrs -, extensions -, settings -, settingsSchema -}: - -let - common = callPackage ../common.nix {}; - - coq_jupyter = callPackage ./coq_jupyter {}; - - coq = coqPackages.coq; - - displayName = "Coq"; - - packageOptions = coqPackages; - packageSearch = common.searcher packageOptions; - -in - -symlinkJoin { - name = coq.name; - - paths = [ - (callPackage ./kernel.nix { - inherit coq displayName attrs extensions; - enableVariableInspector = settings.enableVariableInspector; - chosenPackages = map (x: builtins.getAttr x packageOptions) packages; - }) - - coq - ] - ++ [] - ; - - passthru = { - meta = coq.meta // { - inherit displayName settingsSchema; - version = coq.version; - icon = coq_jupyter.sizedLogo "64"; - }; - inherit packageOptions packageSearch; - versions = { - coq = coq.version; - }; - inherit settings settingsSchema; - args = { - inherit attrs extensions settings; - packages = []; - }; - repls = {}; - modes = { - inherit attrs extensions; - code_mirror_mode = "coq"; - }; - }; -} diff --git a/languages/coq/module.nix b/languages/coq/module.nix index 390a8c0..335cff0 100644 --- a/languages/coq/module.nix +++ b/languages/coq/module.nix @@ -37,7 +37,7 @@ with lib; }; config = mkIf config.kernels.coq.enable { - builtKernels.coq = config.pkgs.callPackage ./full.nix { + builtKernels.coq = config.pkgs.callPackage ./. { coqPackages = getAttr config.kernels.coq.coqPackages config.pkgs; inherit (config.kernels.coq) packages attrs extensions; diff --git a/languages/cpp/default.nix b/languages/cpp/default.nix index 1b512dc..28db8d7 100644 --- a/languages/cpp/default.nix +++ b/languages/cpp/default.nix @@ -6,11 +6,22 @@ , clang , llvmPackages_13 , xeus-cling + +, flavor +, packages +, attrs +, extensions +, settings +, settingsSchema }: +with lib; + let common = callPackage ../common.nix {}; + displayName = "C++"; + # Fix for https://github.com/NixOS/nixpkgs/issues/306782 clingToUse = cling.override { llvmPackages_13 = llvmPackages_13.override { enableSharedLibraries = false; }; @@ -19,107 +30,66 @@ let cling = clingToUse; }; - baseCandidates = [ - # "cpp98" - "cpp11" - "cpp14" - "cpp17" - "cpp20" - "cpp23" - ]; - icons = { # cpp98 = ./cpp11-logo-64x64.png; # TODO - cpp11 = ./cpp11-logo-64x64.png; - cpp14 = ./cpp14-logo-64x64.png; - cpp17 = ./cpp17-logo-64x64.png; - cpp20 = ./cpp2a-logo-64x64.png; # TODO - cpp23 = ./cpp2a-logo-64x64.png; # TODO + "c++11" = ./cpp11-logo-64x64.png; + "c++14" = ./cpp14-logo-64x64.png; + "c++17" = ./cpp17-logo-64x64.png; + "c++20" = ./cpp2a-logo-64x64.png; # TODO + "c++23" = ./cpp2a-logo-64x64.png; # TODO }; - stds = { - # cpp98 = "c++98"; - cpp11 = "c++11"; - cpp14 = "c++14"; - cpp17 = "c++17"; - cpp20 = "c++20"; - cpp23 = "c++23"; - }; - - settingsSchema = []; - - repls = icon: { - cling = { - display_name = "Cling " + clingToUse.unwrapped.version; - attr = "cling"; - args = ["${clingToUse}/bin/cling"]; - icon = icon; - }; - }; + packageOptions = {}; + packageSearch = common.searcher packageOptions; in -with lib; - -listToAttrs (map (x: - let - std = getAttr x stds; - - displayName = "C++"; +symlinkJoin { + name = "cpp"; + paths = [ + (callPackage ./kernel_xeus.nix { + cling = clingToUse; + xeus-cling = xeusClingToUse; + inherit attrs displayName extensions; + std = flavor; + kernelName = "cpp"; + }) + cling + ] + ; + passthru = { meta = clang.meta // { - baseName = x; + baseName = "cpp"; inherit displayName; version = clang.version; - icon = getAttr x icons; + icon = getAttr flavor icons; inherit settingsSchema; }; - - packageOptions = {}; - packageSearch = common.searcher packageOptions; + inherit packageOptions packageSearch; versions = { clang = clang.version; cling = cling.unwrapped.version; xeus-cling = xeus-cling.version; - std = std; + std = flavor; }; - - in { - name = x; - value = lib.makeOverridable ({ - packages ? [] - , settings ? {} - , attrs ? [x "cpp"] - , extensions ? ["cpp" "hpp" "cxx" "hxx" "c" "h"] - }@args: - let - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; - in symlinkJoin { - name = x; - paths = [ - ((callPackage ./kernel_xeus.nix { - cling = clingToUse; - xeus-cling = xeusClingToUse; - inherit attrs displayName extensions std; - attrName = x; - })) - cling - ] - ; - - passthru = { - inherit meta packageOptions packageSearch versions; - inherit settings settingsSchema; - args = args // { baseName = x; }; - repls = repls (getAttr x icons); - modes = { - inherit attrs extensions; - code_mirror_mode = "clike"; - code_mirror_mime_type = "text/x-c++src"; - }; - languageServerNames = []; - }; - } - ) {}; - } -) baseCandidates) + inherit settings settingsSchema; + args = { + inherit attrs extensions settings packages; + }; + repls = { + cling = { + display_name = "Cling " + clingToUse.unwrapped.version; + attr = "cling"; + args = ["${clingToUse}/bin/cling"]; + icon = icons.${flavor}; + }; + }; + modes = { + inherit attrs extensions; + code_mirror_mode = "clike"; + code_mirror_mime_type = "text/x-c++src"; + }; + languageServerNames = []; + }; +} diff --git a/languages/cpp/full.nix b/languages/cpp/full.nix deleted file mode 100644 index 28db8d7..0000000 --- a/languages/cpp/full.nix +++ /dev/null @@ -1,95 +0,0 @@ -{ lib -, callPackage -, writeTextDir -, symlinkJoin -, cling -, clang -, llvmPackages_13 -, xeus-cling - -, flavor -, packages -, attrs -, extensions -, settings -, settingsSchema -}: - -with lib; - -let - common = callPackage ../common.nix {}; - - displayName = "C++"; - - # Fix for https://github.com/NixOS/nixpkgs/issues/306782 - clingToUse = cling.override { - llvmPackages_13 = llvmPackages_13.override { enableSharedLibraries = false; }; - }; - xeusClingToUse = xeus-cling.override { - cling = clingToUse; - }; - - icons = { - # cpp98 = ./cpp11-logo-64x64.png; # TODO - "c++11" = ./cpp11-logo-64x64.png; - "c++14" = ./cpp14-logo-64x64.png; - "c++17" = ./cpp17-logo-64x64.png; - "c++20" = ./cpp2a-logo-64x64.png; # TODO - "c++23" = ./cpp2a-logo-64x64.png; # TODO - }; - - packageOptions = {}; - packageSearch = common.searcher packageOptions; - -in - -symlinkJoin { - name = "cpp"; - paths = [ - (callPackage ./kernel_xeus.nix { - cling = clingToUse; - xeus-cling = xeusClingToUse; - inherit attrs displayName extensions; - std = flavor; - kernelName = "cpp"; - }) - cling - ] - ; - - passthru = { - meta = clang.meta // { - baseName = "cpp"; - inherit displayName; - version = clang.version; - icon = getAttr flavor icons; - inherit settingsSchema; - }; - inherit packageOptions packageSearch; - versions = { - clang = clang.version; - cling = cling.unwrapped.version; - xeus-cling = xeus-cling.version; - std = flavor; - }; - inherit settings settingsSchema; - args = { - inherit attrs extensions settings packages; - }; - repls = { - cling = { - display_name = "Cling " + clingToUse.unwrapped.version; - attr = "cling"; - args = ["${clingToUse}/bin/cling"]; - icon = icons.${flavor}; - }; - }; - modes = { - inherit attrs extensions; - code_mirror_mode = "clike"; - code_mirror_mime_type = "text/x-c++src"; - }; - languageServerNames = []; - }; -} diff --git a/languages/cpp/module.nix b/languages/cpp/module.nix index 4c2e29f..2622f74 100644 --- a/languages/cpp/module.nix +++ b/languages/cpp/module.nix @@ -48,7 +48,7 @@ with lib; }; config = mkIf config.kernels.cpp.enable { - builtKernels.cpp = config.pkgs.callPackage ./full.nix { + builtKernels.cpp = config.pkgs.callPackage ./. { inherit (config.kernels.cpp) flavor packages extensions settings; attrs = [config.kernels.cpp.flavor] ++ config.kernels.cpp.attrs; diff --git a/languages/go/default.nix b/languages/go/default.nix index 88605cb..3d20e33 100644 --- a/languages/go/default.nix +++ b/languages/go/default.nix @@ -3,99 +3,67 @@ , lib , pkgs , symlinkJoin + +, go + +, packages +, attrs +, extensions +, settings +, settingsSchema }: +with lib; + let common = callPackage ../common.nix {}; - baseCandidates = [ - "go" - "go_1_17" - "go_1_18" - "go_1_19" - ]; + kernelName = "go"; - settingsSchema = [ - { - target = "lsp.gopls.enable"; - title = "Enable gopls language server"; - type = "boolean"; - defaultValue = true; - } - - { - target = "go.gocache"; - title = "Value of GOCACHE environment variable"; - type = "string"; - defaultValue = "/home/.gocache"; - } - ]; - - chooseLanguageServers = settings: go: attrs: kernelName: + languageServers = [] - ++ lib.optionals (common.isTrue settings "lsp.gopls.enable") [(callPackage ./language-server-gopls.nix { inherit go attrs; inherit kernelName; })] + ++ lib.optionals settings.lsp.gopls.enable [(callPackage ./language-server-gopls.nix { inherit go attrs; inherit kernelName; })] ; - repls = go: {}; + packageOptions = {}; + packageSearch = common.searcher packageOptions; in -with lib; - -listToAttrs (map (x: - let - go = getAttr x pkgs; +symlinkJoin { + name = "go"; + paths = [ + (callPackage ./kernel.nix { + inherit attrs extensions; + version = go.version; + }) + go + ] + ++ languageServers + ; + passthru = { meta = go.meta // { - baseName = x; + baseName = "go"; displayName = "Go"; version = go.version; icon = ./go-logo-64x64.png; inherit settingsSchema; }; - - packageOptions = {}; - packageSearch = common.searcher packageOptions; + args = { + inherit packages attrs extensions settings; + }; + inherit packageOptions packageSearch; versions = { go = go.version; gopls = gopls.version; }; - - in { - name = x; - value = lib.makeOverridable ({ - packages ? [] - , settings ? {} - , attrs ? ["go"] - , extensions ? ["go"] - }@args: - let - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; - languageServers = chooseLanguageServers settingsToUse go attrs x; - in symlinkJoin { - name = "go"; - paths = [ - (callPackage ./kernel.nix { - inherit attrs extensions; - version = go.version; - }) - go - ] - ++ languageServers - ; - - passthru = { - inherit meta packageOptions packageSearch versions; - inherit settingsSchema settings; - args = args // { baseName = x; }; - repls = repls go; - modes = { - inherit attrs extensions; - code_mirror_mode = "go"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; - } - ) {}; - } -) (lib.filter (x: lib.hasAttr x pkgs) baseCandidates)) + inherit settingsSchema settings; + repls = {}; + modes = { + inherit attrs extensions; + code_mirror_mode = "go"; + }; + languageServerNames = map (x: x.languageServerName) languageServers; + }; +} diff --git a/languages/go/full.nix b/languages/go/full.nix deleted file mode 100644 index 3d20e33..0000000 --- a/languages/go/full.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ callPackage -, gopls -, lib -, pkgs -, symlinkJoin - -, go - -, packages -, attrs -, extensions -, settings -, settingsSchema -}: - -with lib; - -let - common = callPackage ../common.nix {}; - - kernelName = "go"; - - languageServers = - [] - ++ lib.optionals settings.lsp.gopls.enable [(callPackage ./language-server-gopls.nix { inherit go attrs; inherit kernelName; })] - ; - - packageOptions = {}; - packageSearch = common.searcher packageOptions; - -in - -symlinkJoin { - name = "go"; - paths = [ - (callPackage ./kernel.nix { - inherit attrs extensions; - version = go.version; - }) - go - ] - ++ languageServers - ; - - passthru = { - meta = go.meta // { - baseName = "go"; - displayName = "Go"; - version = go.version; - icon = ./go-logo-64x64.png; - inherit settingsSchema; - }; - args = { - inherit packages attrs extensions settings; - }; - inherit packageOptions packageSearch; - versions = { - go = go.version; - gopls = gopls.version; - }; - inherit settingsSchema settings; - repls = {}; - modes = { - inherit attrs extensions; - code_mirror_mode = "go"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; -} diff --git a/languages/go/module.nix b/languages/go/module.nix index 47ada00..7776230 100644 --- a/languages/go/module.nix +++ b/languages/go/module.nix @@ -51,7 +51,7 @@ with lib; }; config = mkIf config.kernels.go.enable { - builtKernels.go = config.pkgs.callPackage ./full.nix { + builtKernels.go = config.pkgs.callPackage ./. { go = getAttr config.kernels.go.goPackage config.pkgs; inherit (config.kernels.go) packages attrs extensions settings; diff --git a/languages/haskell/default.nix b/languages/haskell/default.nix index 4c46083..f79d370 100644 --- a/languages/haskell/default.nix +++ b/languages/haskell/default.nix @@ -6,8 +6,16 @@ , symlinkJoin , makeWrapper -, haskell , ltsOnly ? true + +, compilerName +, snapshot + +, packages +, attrs +, extensions +, settings +, settingsSchema }: with lib; @@ -17,39 +25,56 @@ let hasHlsSupport = version: builtins.compareVersions version "9.0" >= 0; - chooseLanguageServers = settings: snapshot: ghc: kernelName: + version = snapshot.ghc.version; + displayName = "Haskell"; + kernelName = "haskell"; + + settingsSchema = callPackage ./settings_schema.nix { inherit version; }; + + packageOptions = snapshot; + + # Grab the meta from the library component + # Could also search over other components? + packageSearch = common.searcher (mapAttrs (name: value: + let meta = (attrByPath ["components" "library" "meta"] null value); in + if meta == null then value else value // { inherit meta; }) packageOptions); + + ghc = snapshot.ghcWithPackages (ps: + [ps.directory] + ++ (map (x: builtins.getAttr x ps) packages) + ++ (if settings.lsp.haskell-language-server.enable then [ps.haskell-language-server] else []) + ); + languageServers = [] - ++ lib.optionals (common.isTrue settings "lsp.haskell-language-server.enable" && hasHlsSupport ghc.version) - [((callPackage ./language-server-hls {}) snapshot ghc kernelName (common.focusSettings "lsp.haskell-language-server." settings))] + ++ lib.optionals (settings.lsp.haskell-language-server.enable && hasHlsSupport ghc.version) + [((callPackage ./language-server-hls {}) snapshot ghc kernelName settings.lsp.haskell-language-server)] ; - compilers = callPackage ./compilers.nix { - ihaskell-source = fetchFromGitHub { - owner = "codedownio"; - repo = "IHaskell"; - rev = "72e663bcc1af12fc136d19941cf21efdf7341379"; - sha256 = "WSXrx+/iAiGa8qIJc7Wt6VxL9adw5KFt6FfaiOH/mjg="; - }; - }; +in - repls = ghc: { - ghci = { - display_name = "GHCi " + ghc.version; - attr = "ghci"; - args = ["${ghc}/bin/ghci"]; - icon = ./haskell-logo-64x64.png; - }; - }; +symlinkJoin { + name = "haskell-" + compilerName; -in + paths = [ + (callPackage ./kernel.nix { + inherit displayName attrs extensions snapshot; + + language = "haskell"; -listToAttrs (mapAttrsToList (compilerName: snapshot: - let - version = snapshot.ghc.version; - displayName = "Haskell"; + ihaskell = if settings.enableHlintOutput then snapshot.ihaskell else snapshot.ihaskell.overrideAttrs (oldAttrs: { + configureFlags = ["-f" "-use-hlint"]; + }); + inherit ghc; - settingsSchema = callPackage ./settings_schema.nix { inherit version; }; + # enableVariableInspector = settings.enableVariableInspector; + }) + + ghc + ] + ++ languageServers + ; + passthru = { meta = { baseName = "haskell-" + compilerName; name = "haskell-" + compilerName; @@ -57,71 +82,24 @@ listToAttrs (mapAttrsToList (compilerName: snapshot: inherit version displayName settingsSchema; icon = ./haskell-logo-64x64.png; }; - - packageOptions = snapshot; + inherit packageOptions packageSearch; versions = { ghc = snapshot.ghc.version; haskell-language-server = snapshot.haskell-language-server.version; }; - - # Grab the meta from the library component - # Could also search over other components? - packageSearch = common.searcher (mapAttrs (name: value: - let meta = (attrByPath ["components" "library" "meta"] null value); in - if meta == null then value else value // { inherit meta; }) packageOptions); - - in { - name = meta.baseName; - value = lib.makeOverridable ({ - packages ? [] - , attrs ? [meta.baseName "haskell"] - , extensions ? ["hs"] - , settings ? {} - }@args: - let - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; - ghc = snapshot.ghcWithPackages (ps: - [ps.directory] - ++ (map (x: builtins.getAttr x ps) packages) - ++ (if (common.isTrue settingsToUse "lsp.haskell-language-server.enable") then [ps.haskell-language-server] else []) - ); - languageServers = chooseLanguageServers settingsToUse snapshot ghc meta.baseName; - - in symlinkJoin { - name = meta.baseName; - - paths = [ - (callPackage ./kernel.nix { - inherit displayName attrs extensions snapshot; - - language = "haskell"; - - ihaskell = if settingsToUse.enableHlintOutput then snapshot.ihaskell else snapshot.ihaskell.overrideAttrs (oldAttrs: { - configureFlags = ["-f" "-use-hlint"]; - }); - inherit ghc; - - # enableVariableInspector = settingsToUse.enableVariableInspector; - }) - - ghc - ] - ++ languageServers - ; - - passthru = { - args = args // { baseName = meta.baseName; }; - inherit meta packageOptions packageSearch versions; - inherit settingsSchema settings; - repls = repls ghc; - modes = { - inherit attrs extensions; - code_mirror_mode = "haskell"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; - } - ) {} - ; - } -) (lib.filterAttrs (k: _: !(hasPrefix "override") k) compilers)) + inherit settingsSchema settings; + repls = { + ghci = { + display_name = "GHCi " + ghc.version; + attr = "ghci"; + args = ["${ghc}/bin/ghci"]; + icon = ./haskell-logo-64x64.png; + }; + }; + modes = { + inherit attrs extensions; + code_mirror_mode = "haskell"; + }; + languageServerNames = map (x: x.languageServerName) languageServers; + }; +} diff --git a/languages/haskell/full.nix b/languages/haskell/full.nix deleted file mode 100644 index f79d370..0000000 --- a/languages/haskell/full.nix +++ /dev/null @@ -1,105 +0,0 @@ -{ lib -, callPackage -, runCommand -, fetchFromGitHub -, stdenv -, symlinkJoin -, makeWrapper - -, ltsOnly ? true - -, compilerName -, snapshot - -, packages -, attrs -, extensions -, settings -, settingsSchema -}: - -with lib; - -let - common = callPackage ../common.nix {}; - - hasHlsSupport = version: builtins.compareVersions version "9.0" >= 0; - - version = snapshot.ghc.version; - displayName = "Haskell"; - kernelName = "haskell"; - - settingsSchema = callPackage ./settings_schema.nix { inherit version; }; - - packageOptions = snapshot; - - # Grab the meta from the library component - # Could also search over other components? - packageSearch = common.searcher (mapAttrs (name: value: - let meta = (attrByPath ["components" "library" "meta"] null value); in - if meta == null then value else value // { inherit meta; }) packageOptions); - - ghc = snapshot.ghcWithPackages (ps: - [ps.directory] - ++ (map (x: builtins.getAttr x ps) packages) - ++ (if settings.lsp.haskell-language-server.enable then [ps.haskell-language-server] else []) - ); - languageServers = - [] - ++ lib.optionals (settings.lsp.haskell-language-server.enable && hasHlsSupport ghc.version) - [((callPackage ./language-server-hls {}) snapshot ghc kernelName settings.lsp.haskell-language-server)] - ; - -in - -symlinkJoin { - name = "haskell-" + compilerName; - - paths = [ - (callPackage ./kernel.nix { - inherit displayName attrs extensions snapshot; - - language = "haskell"; - - ihaskell = if settings.enableHlintOutput then snapshot.ihaskell else snapshot.ihaskell.overrideAttrs (oldAttrs: { - configureFlags = ["-f" "-use-hlint"]; - }); - inherit ghc; - - # enableVariableInspector = settings.enableVariableInspector; - }) - - ghc - ] - ++ languageServers - ; - - passthru = { - meta = { - baseName = "haskell-" + compilerName; - name = "haskell-" + compilerName; - description = "An advanced, purely functional programming language (GHC ${version})"; - inherit version displayName settingsSchema; - icon = ./haskell-logo-64x64.png; - }; - inherit packageOptions packageSearch; - versions = { - ghc = snapshot.ghc.version; - haskell-language-server = snapshot.haskell-language-server.version; - }; - inherit settingsSchema settings; - repls = { - ghci = { - display_name = "GHCi " + ghc.version; - attr = "ghci"; - args = ["${ghc}/bin/ghci"]; - icon = ./haskell-logo-64x64.png; - }; - }; - modes = { - inherit attrs extensions; - code_mirror_mode = "haskell"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; -} diff --git a/languages/haskell/module.nix b/languages/haskell/module.nix index f68bd54..865c214 100644 --- a/languages/haskell/module.nix +++ b/languages/haskell/module.nix @@ -70,7 +70,7 @@ with lib; in - pkgs.callPackage ./full.nix { + pkgs.callPackage ./. { compilerName = config.kernels.haskell.ghcPackage; snapshot = getAttr config.kernels.haskell.ghcPackage compilers; diff --git a/languages/julia/default.nix b/languages/julia/default.nix index 4c27a73..a09d8b1 100644 --- a/languages/julia/default.nix +++ b/languages/julia/default.nix @@ -1,8 +1,4 @@ { lib -, julia_16-bin -, julia_18 -, julia_19 -, julia_110 , python3 , callPackage , fetchFromGitHub @@ -10,51 +6,20 @@ , stdenv , runCommand , symlinkJoin -}: -let - common = callPackage ../common.nix {}; +, julia - juliaWithPackages = callPackage ./julia-modules {}; +, packages +, attrs +, extensions +, settings +, settingsSchema +}: - settingsSchema = [ - { - target = "precompile"; - title = "Precompile environment"; - description = "Whether to precompile Julia code when building the environment for faster imports. In some cases, precompilation can make the build fail, so turning this off can help."; - type = "boolean"; - defaultValue = true; - } - { - target = "lsp.LanguageServer.enable"; - title = "Enable LanguageServer language server"; - type = "boolean"; - defaultValue = true; - } - { - target = "lsp.LanguageServer.index"; - title = "LanguageServer: auto-index packages when building environment"; - description = "Automatically build SymbolServer.jl indices when realizing environment (may increase build time)."; - type = "boolean"; - defaultValue = true; - } - { - target = "lsp.LanguageServer.debug"; - title = "LanguageServer: stderr debugging"; - description = "Log debug messages to stderr."; - type = "boolean"; - defaultValue = false; - } - ]; +with lib; - chooseLanguageServers = settings: attrs: attr: julia: - [] - ++ lib.optionals (common.isTrue settings "lsp.LanguageServer.enable") [(callPackage ./language-server-LanguageServer.nix { - inherit attrs julia; - kernelName = attr; - settings = common.focusSettings "lsp.LanguageServer." settings; - })] - ; +let + common = callPackage ../common.nix {}; packageOverrides = { "LanguageServer" = fetchFromGitHub { @@ -75,101 +40,81 @@ let rev = "1badb724cebef0ae867c8c1f73cb08efe5b6e291"; sha256 = "0j4cjj50mp0cm6aq684kasijk11pwagp3v9d1mf39isk6afa7inn"; }; - - # "LanguageServer" = /home/tom/tools/LanguageServer.jl; - # "StaticLint" = /home/tom/tools/StaticLint.jl; - # "SymbolServer" = /home/tom/tools/SymbolServer.jl; }; - baseCandidates = rec { - julia = julia110; - - julia16 = juliaWithPackages.override { inherit packageOverrides; julia = julia_16-bin; }; - - # Removed as EOL in release 24.05 - # julia18 = juliaWithPackages.override { inherit packageOverrides; julia = julia_18; }; - - julia19 = juliaWithPackages.override { inherit packageOverrides; julia = julia_19; }; - - julia110 = juliaWithPackages.override { inherit packageOverrides; julia = julia_110; }; + juliaWithPackages = (callPackage ./julia-modules {}).override { + inherit packageOverrides julia; + inherit (settings) precompile; }; - packageSet = lib.listToAttrs (map (x: { - name = x; - value = { - meta = { - name = x; - displayName = x; + displayName = "Julia"; + kernelName = "julia"; + + packageOptions = {}; + packageSearch = common.searcher' { + packages = lib.listToAttrs (map (x: { + name = x; + value = { + meta = { + name = x; + displayName = x; + }; }; - }; - }) (import ./julia-modules/package-names.nix)); + }) (import ./julia-modules/package-names.nix)); + packageMustBeDerivation = false; + }; -in + juliaToUse = juliaWithPackages ( + ["IJulia"] + ++ packages + ++ lib.optionals settings.lsp.LanguageServer.enable ["LanguageServer" "SymbolServer"] + ); -with lib; + languageServers = + [] + ++ lib.optionals settings.lsp.LanguageServer.enable [(callPackage ./language-server-LanguageServer.nix { + inherit attrs; + julia = juliaToUse; + inherit kernelName; + settings = settings.lsp.LanguageServer; + })] + ; -mapAttrs (attr: value: - let - baseJulia = (value []).julia; +in - displayName = "Julia"; +symlinkJoin { + name = "julia"; + + paths = [ + (callPackage ./kernel.nix { + inherit attrs extensions displayName; + julia = juliaToUse; + python = python3; + }) + juliaToUse + ] + ++ languageServers + ; - meta = baseJulia.meta // { - baseName = attr; + passthru = { + meta = julia.meta // { + baseName = "julia"; inherit displayName settingsSchema; - version = baseJulia.version; + version = julia.version; icon = ./julia-logo-64x64.png; }; - - python = python3; - - packageOptions = {}; - packageSearch = common.searcher' { - packages = packageSet; - packageMustBeDerivation = false; + args = { + inherit attrs extensions settings packages; }; + inherit packageOptions packageSearch; versions = { - julia = baseJulia.version; + julia = julia.version; }; - - in - lib.makeOverridable ({ - packages ? [] - , attrs ? [attr "julia"] - , extensions ? ["jl"] - , settings ? {} - }@args: - let - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; - - julia = (value.override { inherit (settingsToUse) precompile; }) ( - ["IJulia"] - ++ packages - ++ lib.optionals (common.isTrue settingsToUse "lsp.LanguageServer.enable") ["LanguageServer" "SymbolServer"] - ); - - languageServers = chooseLanguageServers settingsToUse attrs attr julia; - in - symlinkJoin { - name = attr; - - paths = [ - (callPackage ./kernel.nix { inherit julia python attrs extensions displayName; }) - julia - ] - ++ languageServers - ; - - passthru = { - args = args // { baseName = attr; }; - inherit meta packageOptions packageSearch versions; - inherit settingsSchema settings; - modes = { - inherit attrs extensions; - code_mirror_mode = "julia"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; - } - ) {} -) baseCandidates + inherit settingsSchema settings; + modes = { + inherit attrs extensions; + code_mirror_mode = "julia"; + }; + languageServerNames = map (x: x.languageServerName) languageServers; + }; +} diff --git a/languages/julia/full.nix b/languages/julia/full.nix deleted file mode 100644 index a09d8b1..0000000 --- a/languages/julia/full.nix +++ /dev/null @@ -1,120 +0,0 @@ -{ lib -, python3 -, callPackage -, fetchFromGitHub -, writeTextDir -, stdenv -, runCommand -, symlinkJoin - -, julia - -, packages -, attrs -, extensions -, settings -, settingsSchema -}: - -with lib; - -let - common = callPackage ../common.nix {}; - - packageOverrides = { - "LanguageServer" = fetchFromGitHub { - owner = "julia-vscode"; - repo = "LanguageServer.jl"; - rev = "3a000de8d80b2d374d46517a813882ff1aeb895c"; - sha256 = "0pjwmz6g7fvkqhr4axh4bl7lkpk8fgv7193m7ql8pw9lif8mqx37"; - }; - "StaticLint" = fetchFromGitHub { - owner = "julia-vscode"; - repo = "StaticLint.jl"; - rev = "8334959b9fe1a7f3169621a250eb8ff98db64775"; - sha256 = "0sxn05b3m1fqcsyp28zddslh7dy4wsrkvhc57nx6y89j30ldbpw1"; - }; - "SymbolServer" = fetchFromGitHub { - owner = "codedownio"; - repo = "SymbolServer.jl"; - rev = "1badb724cebef0ae867c8c1f73cb08efe5b6e291"; - sha256 = "0j4cjj50mp0cm6aq684kasijk11pwagp3v9d1mf39isk6afa7inn"; - }; - }; - - juliaWithPackages = (callPackage ./julia-modules {}).override { - inherit packageOverrides julia; - inherit (settings) precompile; - }; - - displayName = "Julia"; - kernelName = "julia"; - - packageOptions = {}; - packageSearch = common.searcher' { - packages = lib.listToAttrs (map (x: { - name = x; - value = { - meta = { - name = x; - displayName = x; - }; - }; - }) (import ./julia-modules/package-names.nix)); - packageMustBeDerivation = false; - }; - - juliaToUse = juliaWithPackages ( - ["IJulia"] - ++ packages - ++ lib.optionals settings.lsp.LanguageServer.enable ["LanguageServer" "SymbolServer"] - ); - - languageServers = - [] - ++ lib.optionals settings.lsp.LanguageServer.enable [(callPackage ./language-server-LanguageServer.nix { - inherit attrs; - julia = juliaToUse; - inherit kernelName; - settings = settings.lsp.LanguageServer; - })] - ; - -in - -symlinkJoin { - name = "julia"; - - paths = [ - (callPackage ./kernel.nix { - inherit attrs extensions displayName; - julia = juliaToUse; - python = python3; - }) - juliaToUse - ] - ++ languageServers - ; - - passthru = { - meta = julia.meta // { - baseName = "julia"; - inherit displayName settingsSchema; - version = julia.version; - icon = ./julia-logo-64x64.png; - }; - args = { - inherit attrs extensions settings packages; - }; - inherit packageOptions packageSearch; - versions = { - julia = julia.version; - }; - inherit settingsSchema settings; - modes = { - inherit attrs extensions; - code_mirror_mode = "julia"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; -} diff --git a/languages/julia/module.nix b/languages/julia/module.nix index fe8d278..f2b0cd5 100644 --- a/languages/julia/module.nix +++ b/languages/julia/module.nix @@ -63,7 +63,7 @@ with lib; }; config = mkIf config.kernels.julia.enable { - builtKernels.julia = config.pkgs.callPackage ./full.nix { + builtKernels.julia = config.pkgs.callPackage ./. { julia = getAttr config.kernels.julia.juliaPackage config.pkgs; inherit (config.kernels.julia) packages attrs extensions settings; diff --git a/languages/octave/default.nix b/languages/octave/default.nix index 68a11c4..bb940b4 100644 --- a/languages/octave/default.nix +++ b/languages/octave/default.nix @@ -7,115 +7,82 @@ , runCommand , symlinkJoin , writeTextDir + +, packages +, attrs +, extensions +, octave +, settings +, settingsSchema }: +with lib; + let common = callPackage ../common.nix {}; - baseCandidates = [ - "octave" - ]; + packageOptions = octave.pkgs; + packageSearch = common.searcher packageOptions; - settingsSchema = []; - - repls = octave: version: { - octave = { - display_name = "Octave " + version; - attr = "octave"; - args = ["${octave}/bin/octave"]; - icon = ./octave-logo-64x64.png; - }; + octaveComplete = octave.override { + python3 = python3; }; -in + octaveWithPackages = if lib.hasAttr "withPackages" octaveComplete + then + let chosenPackages = map (x: lib.getAttr x octaveComplete.pkgs) packages; in + if chosenPackages == [] then octaveComplete else octaveComplete.withPackages (ps: chosenPackages) + else octaveComplete; -with lib; + chosenPackages = if lib.hasAttr "pkgs" octave + then octave.pkgs + else []; + + # Wrapper derivation that only has "octave" and "octave-cli" binaries, + # perfect for including in binaries and passing to the kernel + octaveToUse = callPackage ./octave.nix { octaveComplete = octaveWithPackages; }; -listToAttrs (map (x: - let - baseOctave = getAttr x pkgs; +in - meta = baseOctave.meta // { +symlinkJoin { + name = "octave"; + paths = [ + (callPackage ./kernel.nix { + inherit attrs extensions; + inherit (settings) extraJupyterConfig; + octave = octaveToUse; + version = octave.version; + }) + octaveToUse + ]; + passthru = { + args = { + inherit attrs extensions settings; + packages = []; + }; + meta = octave.meta // { baseName = x; - displayName = "Octave " + baseOctave.version; - version = baseOctave.version; + displayName = "Octave " + octave.version; + version = octave.version; icon = ./octave-logo-64x64.png; inherit settingsSchema; }; - - packageOptions = baseOctave.pkgs; - packageSearch = common.searcher packageOptions; versions = { - octave = baseOctave.version; + octave = octave.version; }; - - in { - name = x; - value = lib.makeOverridable ({ - packages ? [] - , settings ? {} - , extraJupyterConfig ? null - , attrs ? ["octave"] - , extensions ? ["m"] - }@args: - let - octaveComplete = baseOctave.override { - python3 = python3; - }; - - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; - - octaveWithPackages = if lib.hasAttr "withPackages" octaveComplete - then - let chosenPackages = map (x: lib.getAttr x octaveComplete.pkgs) packages; in - if chosenPackages == [] then octaveComplete else octaveComplete.withPackages (ps: chosenPackages) - else octaveComplete; - - chosenPackages = if lib.hasAttr "pkgs" baseOctave - then baseOctave.pkgs - else []; - - # Wrapper derivation that only has "octave" and "octave-cli" binaries, - # perfect for including in binaries and passing to the kernel - octave = callPackage ./octave.nix { octaveComplete = octaveWithPackages; }; - - in symlinkJoin { - name = "octave"; - paths = [ - (callPackage ./kernel.nix { - inherit octave extraJupyterConfig attrs extensions; - version = baseOctave.version; - }) - octave - ]; - passthru = { - inherit meta packageOptions packageSearch versions; - args = args // { baseName = x; }; - repls = repls octaveWithPackages baseOctave.version; - inherit settingsSchema settings; - modes = { - inherit attrs extensions; - code_mirror_mode = "octave"; - }; - }; - } - ) {}; - }) - (filter (x: hasAttr x pkgs) baseCandidates) -) - - # extraGitIgnoreLines = [ - # ".octaverc" - # ".octave_hist" - # ]; - - - # Solution for problem that was arising when Octave calls makeinfo from the texinfo - # package, for example when running the command help('magic'). We were getting a perl - # warning about failing to set the locale. - # https://github.com/NixOS/nixpkgs/issues/38991 - # Env = [ - # ''LOCALE_ARCHIVE_2_11=${glibcLocales}/lib/locale/locale-archive'' - # ''LOCALE_ARCHIVE_2_27=${glibcLocales}/lib/locale/locale-archive'' - # ''LOCALE_ARCHIVE=/usr/bin/locale'' - # ]; + inherit packageOptions packageSearch; + repls = { + octave = { + display_name = "Octave " + octave.version; + attr = "octave"; + args = ["${octaveWithPackages}/bin/octave"]; + icon = ./octave-logo-64x64.png; + }; + }; + inherit settingsSchema settings; + modes = { + inherit attrs extensions; + code_mirror_mode = "octave"; + }; + }; +} diff --git a/languages/octave/full.nix b/languages/octave/full.nix deleted file mode 100644 index bb940b4..0000000 --- a/languages/octave/full.nix +++ /dev/null @@ -1,88 +0,0 @@ -{ lib -, pkgs - -, callPackage -, jupyter-kernel -, python3 -, runCommand -, symlinkJoin -, writeTextDir - -, packages -, attrs -, extensions -, octave -, settings -, settingsSchema -}: - -with lib; - -let - common = callPackage ../common.nix {}; - - packageOptions = octave.pkgs; - packageSearch = common.searcher packageOptions; - - octaveComplete = octave.override { - python3 = python3; - }; - - octaveWithPackages = if lib.hasAttr "withPackages" octaveComplete - then - let chosenPackages = map (x: lib.getAttr x octaveComplete.pkgs) packages; in - if chosenPackages == [] then octaveComplete else octaveComplete.withPackages (ps: chosenPackages) - else octaveComplete; - - chosenPackages = if lib.hasAttr "pkgs" octave - then octave.pkgs - else []; - - # Wrapper derivation that only has "octave" and "octave-cli" binaries, - # perfect for including in binaries and passing to the kernel - octaveToUse = callPackage ./octave.nix { octaveComplete = octaveWithPackages; }; - -in - -symlinkJoin { - name = "octave"; - paths = [ - (callPackage ./kernel.nix { - inherit attrs extensions; - inherit (settings) extraJupyterConfig; - octave = octaveToUse; - version = octave.version; - }) - octaveToUse - ]; - passthru = { - args = { - inherit attrs extensions settings; - packages = []; - }; - meta = octave.meta // { - baseName = x; - displayName = "Octave " + octave.version; - version = octave.version; - icon = ./octave-logo-64x64.png; - inherit settingsSchema; - }; - versions = { - octave = octave.version; - }; - inherit packageOptions packageSearch; - repls = { - octave = { - display_name = "Octave " + octave.version; - attr = "octave"; - args = ["${octaveWithPackages}/bin/octave"]; - icon = ./octave-logo-64x64.png; - }; - }; - inherit settingsSchema settings; - modes = { - inherit attrs extensions; - code_mirror_mode = "octave"; - }; - }; -} diff --git a/languages/octave/module.nix b/languages/octave/module.nix index 9adc8f3..0e661bf 100644 --- a/languages/octave/module.nix +++ b/languages/octave/module.nix @@ -34,7 +34,7 @@ with lib; }; config = mkIf config.kernels.octave.enable { - builtKernels.octave = config.pkgs.callPackage ./full.nix { + builtKernels.octave = config.pkgs.callPackage ./. { octave = config.pkgs.octave; inherit (config.kernels.octave) packages attrs extensions settings; settingsSchema = nixosOptionsToSettingsSchema options.kernels.octave; diff --git a/languages/postgres/default.nix b/languages/postgres/default.nix index e741442..c9d3afb 100644 --- a/languages/postgres/default.nix +++ b/languages/postgres/default.nix @@ -3,6 +3,12 @@ , callPackage , writeTextDir , symlinkJoin + +, packages +, attrs +, extensions +, settings +, settingsSchema }: let @@ -11,55 +17,44 @@ let packageOptions = {}; packageSearch = common.searcher packageOptions; - settingsSchema = []; + languageServers = []; - chooseLanguageServers = settings: - [] - ; + kernel = callPackage ./kernel.nix { inherit attrs extensions; }; - meta = { - name = "postgres"; - baseName = "postgres"; - displayName = "PostgreSQL"; - description = "A simple Jupyter kernel for PostgreSQL"; - icon = ./postgres-logo-64x64.png; - version = "0.1"; - inherit settingsSchema; - }; - - versions = { - postgres-kernel = meta.version; - }; + version = "0.1"; in -{ - postgres = lib.makeOverridable ({ - packages ? [] - , settings ? [] - , attrs ? ["postgres"] - , extensions ? ["sql"] - }@args: - let - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; - in symlinkJoin { - name = "postgres"; +symlinkJoin { + name = "postgres"; - paths = [ - (callPackage ./kernel.nix { inherit attrs extensions; }) - ] - ++ (chooseLanguageServers settingsToUse) - ; + paths = [ + kernel + ] + ++ languageServers + ; - passthru = { - args = args // { baseName = "postgres"; }; - inherit meta packageOptions packageSearch versions; - inherit settingsSchema settings; - modes = { - inherit attrs extensions; - code_mirror_mode = "sql"; - }; - }; - } - ) {}; + passthru = { + args = { + inherit attrs extensions settings packages; + }; + meta = { + name = "postgres"; + baseName = "postgres"; + displayName = "PostgreSQL"; + description = "A simple Jupyter kernel for PostgreSQL"; + icon = ./postgres-logo-64x64.png; + inherit version; + inherit settingsSchema; + }; + inherit packageOptions packageSearch; + versions = { + postgres-kernel = version; + }; + inherit settingsSchema settings; + modes = { + inherit attrs extensions; + code_mirror_mode = "sql"; + }; + }; } diff --git a/languages/postgres/full.nix b/languages/postgres/full.nix deleted file mode 100644 index c9d3afb..0000000 --- a/languages/postgres/full.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ pkgs -, lib -, callPackage -, writeTextDir -, symlinkJoin - -, packages -, attrs -, extensions -, settings -, settingsSchema -}: - -let - common = callPackage ../common.nix {}; - - packageOptions = {}; - packageSearch = common.searcher packageOptions; - - languageServers = []; - - kernel = callPackage ./kernel.nix { inherit attrs extensions; }; - - version = "0.1"; - -in - -symlinkJoin { - name = "postgres"; - - paths = [ - kernel - ] - ++ languageServers - ; - - passthru = { - args = { - inherit attrs extensions settings packages; - }; - meta = { - name = "postgres"; - baseName = "postgres"; - displayName = "PostgreSQL"; - description = "A simple Jupyter kernel for PostgreSQL"; - icon = ./postgres-logo-64x64.png; - inherit version; - inherit settingsSchema; - }; - inherit packageOptions packageSearch; - versions = { - postgres-kernel = version; - }; - inherit settingsSchema settings; - modes = { - inherit attrs extensions; - code_mirror_mode = "sql"; - }; - }; -} diff --git a/languages/postgres/module.nix b/languages/postgres/module.nix index fb37778..3102195 100644 --- a/languages/postgres/module.nix +++ b/languages/postgres/module.nix @@ -30,7 +30,7 @@ with lib; }; config = mkIf config.kernels.postgres.enable { - builtKernels.postgres = config.pkgs.callPackage ./full.nix { + builtKernels.postgres = config.pkgs.callPackage ./. { inherit (config.kernels.postgres) packages attrs extensions settings; settingsSchema = nixosOptionsToSettingsSchema options.kernels.postgres; }; diff --git a/languages/python/default.nix b/languages/python/default.nix index 30ea3be..52781f5 100644 --- a/languages/python/default.nix +++ b/languages/python/default.nix @@ -6,16 +6,15 @@ , pyright , symlinkJoin , stdenv -}: -# poetry2nix = import (pkgsStable.fetchFromGitHub { -# owner = "nix-community"; -# repo = "poetry2nix"; -# rev = "78fc8882411c29c8eb5f162b09fcafe08b8b03a3"; -# sha256 = "1dfgm286c48ac6yrk16xz41d0rsg6bv08122ngy420b0z88la9nj"; -# }) { -# pkgs = pkgsStable; -# }; +, python3 + +, packages +, attrs +, extensions +, settings +, settingsSchema +}: let common = callPackage ../common.nix {}; @@ -23,219 +22,82 @@ let hasPythonLspServer = python: (lib.hasAttr "python-lsp-server" python.pkgs) && (lib.versionAtLeast python.pythonVersion "3.7"); hasPythonLanguageServer = python: lib.hasAttr "python-language-server" python.pkgs; - chooseLanguageServers = settings: pythonWithPackages: kernelName: - [] - ++ lib.optionals (common.isTrue settings "lsp.jedi.enable") [(callPackage ./language_servers/language_server_jedi/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals (common.isTrue settings "lsp.pyright.enable") [(callPackage ./language_servers/language_server_pyright/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals (common.isTrue settings "lsp.pylint.enable") [(callPackage ./language_servers/language_server_pylint/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals (common.isTrue settings "lsp.flake8.enable") [(callPackage ./language_servers/language_server_flake8/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals (common.isTrue settings "lsp.pycodestyle.enable") [(callPackage ./language_servers/language_server_pycodestyle/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals (common.isTrue settings "lsp.microsoft.enable") [(callPackage ./language_servers/language_server_microsoft/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals (common.isTrue settings "lsp.python-lsp-server.enable" && (hasPythonLspServer (pythonWithPackages (ps: [])))) [(callPackage ./language_servers/language_server_pythonlsp/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals (common.isTrue settings "lsp.python-language-server.enable" && (hasPythonLanguageServer (pythonWithPackages (ps: [])))) [(callPackage ./language_servers/language_server_palantir/config.nix { inherit pythonWithPackages kernelName; })] - ; + displayName = "Python " + python3.version; + kernelName = "python3"; - repls = python: { - ipython = { - display_name = "IPython " + python.pkgs.ipython.version; - attr = "ipython"; - args = ["${python}/bin/ipython"]; - icon = ./python-logo-64x64.png; - }; - }; - - # Fine-grained candidates - # These don't work for now because Nixpkgs only keeps one set of Python packages, - # aimed at the currently supported Python. - # baseCandidates = [ - # "python" - # "python2" "python27" - # "python3" "python36" "python37" "python38" "python39" "python310" "python311" "python312" "python313" "python314" "python315" - - # "pypy" - # "pypy2" "pypy27" - # "pypy3" "pypy36" "pypy37" "pypy38" "pypy39" "pypy310" "pypy311" "pypy312" "pypy313" "pypy314" "pypy315" - # ]; - - baseCandidates = [ - "python" - "python3" + packageOptions = python3.pkgs; + packageSearch = common.searcher packageOptions; + allPackages = + [packageOptions.ipykernel packageOptions.ipywidgets] + ++ map (x: builtins.getAttr x packageOptions) (map common.packageName packages) + ; - # Reached EOL: Nixpkgs won't build without complaints - # "python2" + pythonWithPackages = f: python3.withPackages (_: allPackages ++ f packageOptions); - # Currently pypy3 nose marked as broken - # "pypy" - # "pypy2" - # "pypy3" - ]; + languageServers = + [] + ++ lib.optionals settings.lsp.jedi.enable [(callPackage ./language_servers/language_server_jedi/config.nix { inherit pythonWithPackages kernelName; })] + ++ lib.optionals settings.lsp.pyright.enable [(callPackage ./language_servers/language_server_pyright/config.nix { inherit pythonWithPackages kernelName; })] + ++ lib.optionals settings.lsp.pylint.enable [(callPackage ./language_servers/language_server_pylint/config.nix { inherit pythonWithPackages kernelName; })] + ++ lib.optionals settings.lsp.flake8.enable [(callPackage ./language_servers/language_server_flake8/config.nix { inherit pythonWithPackages kernelName; })] + ++ lib.optionals settings.lsp.pycodestyle.enable [(callPackage ./language_servers/language_server_pycodestyle/config.nix { inherit pythonWithPackages kernelName; })] + ++ lib.optionals settings.lsp.microsoft.enable [(callPackage ./language_servers/language_server_microsoft/config.nix { inherit pythonWithPackages kernelName; })] + ++ lib.optionals (settings.lsp.python-lsp-server.enable && (hasPythonLspServer (pythonWithPackages (ps: [])))) [(callPackage ./language_servers/language_server_pythonlsp/config.nix { inherit pythonWithPackages kernelName; })] + ++ lib.optionals (settings.lsp.python-language-server.enable && (hasPythonLanguageServer (pythonWithPackages (ps: [])))) [(callPackage ./language_servers/language_server_palantir/config.nix { inherit pythonWithPackages kernelName; })] + ; - # Pythons that don't work with the ipykernel, ipywidgets, etc. of the Nixpkgs Python package set, - # so we have a special package checked in under ./envs - specialEnvPythons = { - "python38" = pkgs.python38; - "python39" = pkgs.python39; - "python312" = pkgs.python312; - }; + pythonToUse = python3.withPackages (_: allPackages); in -lib.listToAttrs (map (x: - let - basePython = - if lib.hasAttr x specialEnvPythons then (poetry2nix.mkPoetryEnv { - projectDir = ./envs/${x}; - python = specialEnvPythons.${x}; - overrides = import ./envs/${x}/poetry-overrides.nix { inherit poetry2nix; }; - }).overrideAttrs (_: { version = specialEnvPythons.${x}.version; }) - else lib.getAttr x pkgs; +symlinkJoin { + name = kernelName; - displayName = "Python " + basePython.version; + paths = [ + (callPackage ./kernel.nix { + python = pythonToUse; + inherit displayName attrs extensions; + enableVariableInspector = settings.enableVariableInspector; + }) - settingsSchema = [ - { - title = "Language servers"; - level = 1; - type = "heading"; - } - { - target = "lsp.jedi.enable"; - title = "Enable Jedi language server"; - type = "boolean"; - defaultValue = true; - } - { - target = "lsp.pyright.enable"; - title = "Enable Pyright language server"; - type = "boolean"; - defaultValue = false; - } - { - target = "lsp.pylint.enable"; - title = "Enable Pylint language server"; - type = "boolean"; - defaultValue = false; - } - { - target = "lsp.flake8.enable"; - title = "Enable Flake8 language server"; - type = "boolean"; - defaultValue = false; - } - { - target = "lsp.pycodestyle.enable"; - title = "Enable pycodestyle language server"; - type = "boolean"; - defaultValue = false; - } - ] ++ lib.optionals (lib.hasAttr "python-language-server" pkgs) [ - { - target = "lsp.microsoft.enable"; - title = "Enable Microsoft Python language server"; - type = "boolean"; - defaultValue = false; - } - ] ++ lib.optionals (hasPythonLspServer basePython) [ - { - target = "lsp.python-lsp-server.enable"; - title = "Enable python-lsp-server language server"; - type = "boolean"; - defaultValue = false; - } - ] ++ lib.optionals (hasPythonLanguageServer basePython) [ - { - target = "lsp.python-language-server.enable"; - title = "Enable python-language-server language server"; - type = "boolean"; - defaultValue = false; - } - ] ++ [ - { - title = "Miscellaneous"; - level = 1; - type = "heading"; - } - { - target = "permitUserSite"; - title = "Permit user site-packages"; - description = "Skip setting the PYTHONNOUSERSITE variable. This will allow your Python code to import local packages (e.g. from ~/.local/lib). This is useful if you want to use pip to install Python packages independently of Nix."; - type = "boolean"; - defaultValue = false; - } - { - target = "enableVariableInspector"; - title = "Enable variable inspector"; - description = "Enable the variable inspector, which will fetch runtime values of variables to show in the variables list."; - type = "boolean"; - defaultValue = true; - } - ]; + pythonToUse + packageOptions.ipython + ] + ++ languageServers + ; - meta = basePython.meta // { - baseName = x; + passthru = { + meta = python3.meta // { + baseName = kernelName; inherit displayName settingsSchema; - version = basePython.version; + version = python3.version; icon = ./python-logo-64x64.png; }; - - packageOptions = basePython.pkgs; - packageSearch = common.searcher packageOptions; + inherit packageOptions packageSearch; versions = { - python = basePython.version; - jedi-language-server = basePython.pkgs.jedi-language-server.version; + python = python3.version; + jedi-language-server = python3.pkgs.jedi-language-server.version; pyright = pyright.version; - pylint = basePython.pkgs.pylint.version; - flake8 = basePython.pkgs.flake8.version; - pycodestyle = basePython.pkgs.pycodestyle.version; + pylint = python3.pkgs.pylint.version; + flake8 = python3.pkgs.flake8.version; + pycodestyle = python3.pkgs.pycodestyle.version; } - // lib.optionalAttrs (hasPythonLspServer basePython) { python-lsp-server = basePython.pkgs.python-lsp-server.version; } + // lib.optionalAttrs (hasPythonLspServer python3) { python-lsp-server = python3.pkgs.python-lsp-server.version; } ; - - in - { - name = x; - value = lib.makeOverridable ({ - packages ? [] - , attrs ? [x "python"] - , extensions ? ["py"] - , settings ? {} - }@args: - let - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; - ps = packageOptions; - chosenPackages = map (x: builtins.getAttr x ps) (map common.packageName packages); - allPackages = [ps.ipykernel ps.ipywidgets] ++ chosenPackages; - python = basePython.withPackages (_: allPackages); - pythonWithPackages = f: basePython.withPackages (_: allPackages ++ f ps); - languageServers = chooseLanguageServers settingsToUse pythonWithPackages x; - - in symlinkJoin { - name = x; - - paths = [ - (callPackage ./kernel.nix { - inherit python displayName attrs extensions; - enableVariableInspector = settingsToUse.enableVariableInspector; - }) - - python - ps.ipython - ] - ++ languageServers - ; - - passthru = { - inherit meta packageOptions packageSearch versions; - inherit settingsSchema settings; - args = args // { baseName = x; }; - repls = repls python; - modes = { - inherit attrs extensions; - code_mirror_mode = "python"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; - } - ) {}; - } -) (lib.filter (x: lib.hasAttr x pkgs) baseCandidates)) + inherit settingsSchema settings; + args = { inherit attrs extensions settings packages; }; + repls = { + ipython = { + display_name = "IPython " + pythonToUse.pkgs.ipython.version; + attr = "ipython"; + args = ["${pythonToUse}/bin/ipython"]; + icon = ./python-logo-64x64.png; + }; + }; + modes = { + inherit attrs extensions; + code_mirror_mode = "python"; + }; + languageServerNames = map (x: x.languageServerName) languageServers; + }; +} diff --git a/languages/python/full.nix b/languages/python/full.nix deleted file mode 100644 index 52781f5..0000000 --- a/languages/python/full.nix +++ /dev/null @@ -1,103 +0,0 @@ -{ callPackage -, lib -, pkgs -, poetry2nix -, python-language-server -, pyright -, symlinkJoin -, stdenv - -, python3 - -, packages -, attrs -, extensions -, settings -, settingsSchema -}: - -let - common = callPackage ../common.nix {}; - - hasPythonLspServer = python: (lib.hasAttr "python-lsp-server" python.pkgs) && (lib.versionAtLeast python.pythonVersion "3.7"); - hasPythonLanguageServer = python: lib.hasAttr "python-language-server" python.pkgs; - - displayName = "Python " + python3.version; - kernelName = "python3"; - - packageOptions = python3.pkgs; - packageSearch = common.searcher packageOptions; - allPackages = - [packageOptions.ipykernel packageOptions.ipywidgets] - ++ map (x: builtins.getAttr x packageOptions) (map common.packageName packages) - ; - - pythonWithPackages = f: python3.withPackages (_: allPackages ++ f packageOptions); - - languageServers = - [] - ++ lib.optionals settings.lsp.jedi.enable [(callPackage ./language_servers/language_server_jedi/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals settings.lsp.pyright.enable [(callPackage ./language_servers/language_server_pyright/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals settings.lsp.pylint.enable [(callPackage ./language_servers/language_server_pylint/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals settings.lsp.flake8.enable [(callPackage ./language_servers/language_server_flake8/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals settings.lsp.pycodestyle.enable [(callPackage ./language_servers/language_server_pycodestyle/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals settings.lsp.microsoft.enable [(callPackage ./language_servers/language_server_microsoft/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals (settings.lsp.python-lsp-server.enable && (hasPythonLspServer (pythonWithPackages (ps: [])))) [(callPackage ./language_servers/language_server_pythonlsp/config.nix { inherit pythonWithPackages kernelName; })] - ++ lib.optionals (settings.lsp.python-language-server.enable && (hasPythonLanguageServer (pythonWithPackages (ps: [])))) [(callPackage ./language_servers/language_server_palantir/config.nix { inherit pythonWithPackages kernelName; })] - ; - - pythonToUse = python3.withPackages (_: allPackages); - -in - -symlinkJoin { - name = kernelName; - - paths = [ - (callPackage ./kernel.nix { - python = pythonToUse; - inherit displayName attrs extensions; - enableVariableInspector = settings.enableVariableInspector; - }) - - pythonToUse - packageOptions.ipython - ] - ++ languageServers - ; - - passthru = { - meta = python3.meta // { - baseName = kernelName; - inherit displayName settingsSchema; - version = python3.version; - icon = ./python-logo-64x64.png; - }; - inherit packageOptions packageSearch; - versions = { - python = python3.version; - jedi-language-server = python3.pkgs.jedi-language-server.version; - pyright = pyright.version; - pylint = python3.pkgs.pylint.version; - flake8 = python3.pkgs.flake8.version; - pycodestyle = python3.pkgs.pycodestyle.version; - } - // lib.optionalAttrs (hasPythonLspServer python3) { python-lsp-server = python3.pkgs.python-lsp-server.version; } - ; - inherit settingsSchema settings; - args = { inherit attrs extensions settings packages; }; - repls = { - ipython = { - display_name = "IPython " + pythonToUse.pkgs.ipython.version; - attr = "ipython"; - args = ["${pythonToUse}/bin/ipython"]; - icon = ./python-logo-64x64.png; - }; - }; - modes = { - inherit attrs extensions; - code_mirror_mode = "python"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; -} diff --git a/languages/python/module.nix b/languages/python/module.nix index 9a1a67c..ecb6a25 100644 --- a/languages/python/module.nix +++ b/languages/python/module.nix @@ -122,7 +122,7 @@ in }).overrideAttrs (_: { version = specialEnvPythons.${x}.version; }) else lib.getAttr x config.pkgs; in - config.pkgs.callPackage ./full.nix { + config.pkgs.callPackage ./. { python3 = basePython; inherit (config.kernels.python3) packages attrs extensions settings; @@ -132,7 +132,7 @@ in (mkIf config.kernels.pypy3.enable { builtKernels.pypy3 = - config.pkgs.callPackage ./full.nix { + config.pkgs.callPackage ./. { python3 = lib.getAttr config.kernels.pypy3.python3Package config.pkgs; inherit (config.kernels.pypy3) packages attrs extensions settings; diff --git a/languages/r/default.nix b/languages/r/default.nix index f62c058..d9dd445 100644 --- a/languages/r/default.nix +++ b/languages/r/default.nix @@ -5,49 +5,32 @@ , R , rPackages , rWrapper + +, packages +, attrs +, extensions +, settings +, settingsSchema }: +with lib; + let common = callPackage ../common.nix {}; - settingsSchema = [ - { - target = "lsp.languageserver.enable"; - title = "Enable languageserver"; - type = "boolean"; - defaultValue = true; - } - ]; + basePackages = [rPackages.IRkernel] ++ (map (x: lib.getAttr x rPackages) (map common.packageName packages)); - chooseLanguageServers = settings: rPackages: rWrapper: basePackages: kernelName: - [] - ++ lib.optionals (common.isTrue settings "lsp.languageserver.enable") [( - let + kernelName = "R"; + + languageServers = [] + ++ lib.optionals settings.lsp.languageserver.enable [( + (callPackage ./language-server-languageserver { + inherit rPackages rWrapper basePackages kernelName; languageserver = callPackage ./language-server-languageserver/languageserver.nix { inherit rPackages rWrapper; }; - in - (callPackage ./language-server-languageserver { - inherit rPackages rWrapper basePackages kernelName; - inherit languageserver; - }) + }) )] ; - meta = R.meta // { - baseName = "R"; - displayName = "R"; - version = R.version; - icon = ./r-logo-64x64.png; - }; - - repls = rWithPackages: version: { - r = { - display_name = "R"; - attr = "r"; - args = ["${rWithPackages}/bin/R"]; - icon = ./r-logo-64x64.png; - }; - }; - packageOptions = rPackages; packageSearch = common.searcher packageOptions; versions = { @@ -55,53 +38,49 @@ let languageserver = (callPackage ./language-server-languageserver/languageserver.nix {}).version; }; -in + rWithPackages = rWrapper.override { + packages = basePackages; + }; -with lib; +in -listToAttrs [{ - name = "R"; - value = lib.makeOverridable ({ - packages ? [] - , settings ? {} - , attrs ? ["r" "R"] - , extensions ? ["r"] - }@args: - let - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; +symlinkJoin { + name = "r"; - basePackages = [rPackages.IRkernel] ++ (map (x: lib.getAttr x rPackages) (map common.packageName packages)); + paths = [ + (callPackage ./kernel.nix { + inherit rWithPackages attrs extensions; + version = R.version; + }) + rWithPackages + ] + ++ languageServers + ; - rWithPackages = rWrapper.override { - packages = basePackages; + passthru = { + args = { + inherit attrs extensions settings packages; + }; + meta = R.meta // { + baseName = "R"; + displayName = "R"; + version = R.version; + icon = ./r-logo-64x64.png; + }; + inherit packageOptions packageSearch versions; + inherit settingsSchema settings; + repls = { + r = { + display_name = "R"; + attr = "r"; + args = ["${rWithPackages}/bin/R"]; + icon = ./r-logo-64x64.png; }; - - languageServers = chooseLanguageServers settingsToUse rPackages rWrapper basePackages "R"; - in - symlinkJoin { - name = "r"; - - paths = [ - (callPackage ./kernel.nix { - inherit rWithPackages attrs extensions; - version = R.version; - }) - rWithPackages - ] - ++ languageServers - ; - - passthru = { - inherit meta packageOptions packageSearch versions; - inherit settingsSchema settings; - args = args // { baseName = "R"; }; - repls = repls rWithPackages R.version; - modes = { - inherit attrs extensions; - code_mirror_mode = "r"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; - } - ) {}; -}] + }; + modes = { + inherit attrs extensions; + code_mirror_mode = "r"; + }; + languageServerNames = map (x: x.languageServerName) languageServers; + }; +} diff --git a/languages/r/full.nix b/languages/r/full.nix deleted file mode 100644 index d9dd445..0000000 --- a/languages/r/full.nix +++ /dev/null @@ -1,86 +0,0 @@ -{pkgs -, lib -, callPackage -, symlinkJoin -, R -, rPackages -, rWrapper - -, packages -, attrs -, extensions -, settings -, settingsSchema -}: - -with lib; - -let - common = callPackage ../common.nix {}; - - basePackages = [rPackages.IRkernel] ++ (map (x: lib.getAttr x rPackages) (map common.packageName packages)); - - kernelName = "R"; - - languageServers = [] - ++ lib.optionals settings.lsp.languageserver.enable [( - (callPackage ./language-server-languageserver { - inherit rPackages rWrapper basePackages kernelName; - languageserver = callPackage ./language-server-languageserver/languageserver.nix { inherit rPackages rWrapper; }; - }) - )] - ; - - packageOptions = rPackages; - packageSearch = common.searcher packageOptions; - versions = { - r = R.version; - languageserver = (callPackage ./language-server-languageserver/languageserver.nix {}).version; - }; - - rWithPackages = rWrapper.override { - packages = basePackages; - }; - -in - -symlinkJoin { - name = "r"; - - paths = [ - (callPackage ./kernel.nix { - inherit rWithPackages attrs extensions; - version = R.version; - }) - rWithPackages - ] - ++ languageServers - ; - - passthru = { - args = { - inherit attrs extensions settings packages; - }; - meta = R.meta // { - baseName = "R"; - displayName = "R"; - version = R.version; - icon = ./r-logo-64x64.png; - }; - inherit packageOptions packageSearch versions; - inherit settingsSchema settings; - repls = { - r = { - display_name = "R"; - attr = "r"; - args = ["${rWithPackages}/bin/R"]; - icon = ./r-logo-64x64.png; - }; - }; - modes = { - inherit attrs extensions; - code_mirror_mode = "r"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; -} diff --git a/languages/r/module.nix b/languages/r/module.nix index 66e4222..8beb4d1 100644 --- a/languages/r/module.nix +++ b/languages/r/module.nix @@ -34,7 +34,7 @@ with lib; }; config = mkIf config.kernels.R.enable { - builtKernels.R = config.pkgs.callPackage ./full.nix { + builtKernels.R = config.pkgs.callPackage ./. { R = config.pkgs.R; inherit (config.kernels.R) packages attrs extensions settings; settingsSchema = nixosOptionsToSettingsSchema options.kernels.R; diff --git a/languages/ruby/default.nix b/languages/ruby/default.nix index 4b5683a..d586759 100644 --- a/languages/ruby/default.nix +++ b/languages/ruby/default.nix @@ -1,117 +1,71 @@ { lib -, pkgs , callPackage +, pkgs +, recurseIntoAttrs , stdenv -, writeTextDir , symlinkJoin -}: +, writeTextDir -let - common = callPackage ../common.nix {}; +, ruby - filterFn = x: (common.hasAttrSafe x pkgs) && !(lib.attrByPath [x "meta" "broken"] false pkgs); +, packages +, attrs +, extensions +, settings +, settingsSchema +}: - baseCandidates = lib.filter filterFn [ - # "ruby_2_4" - # "ruby_2_4_3" - # "ruby_2_5" - # "ruby_2_5_0" - # "ruby_2_6" - # "ruby_2_7" +with lib; - "ruby" - "ruby_3_0" - "ruby_3_1" - "ruby_3_2" - "ruby_3_3" - ]; +let + common = callPackage ../common.nix {}; - packagesLookup = lib.filterAttrs (k: v: filterFn k) { - # ruby_2_4 = pkgs.rubyPackages_2_4; - # ruby_2_4_3 = pkgs.rubyPackages_2_4; - # ruby_2_5 = pkgs.rubyPackages_2_5; - # ruby_2_5_0 = pkgs.rubyPackages_2_5; - # ruby_2_6 = pkgs.rubyPackages_2_6; - # ruby_2_7 = pkgs.rubyPackages_2_7; + kernelName = "ruby"; - ruby = pkgs.rubyPackages; - ruby_3_0 = pkgs.rubyPackages_3_0; - ruby_3_1 = pkgs.rubyPackages_3_1; - ruby_3_2 = pkgs.rubyPackages_3_2; - ruby_3_3 = pkgs.rubyPackages_3_3; - }; + rubyPackages = recurseIntoAttrs ruby.gems; - settingsSchema = [ - { - target = "lsp.solargraph.enable"; - title = "Enable Solargraph language server"; - type = "boolean"; - defaultValue = true; - } - ]; + packageOptions = rubyPackages; + packageSearch = common.searcher packageOptions; - chooseLanguageServers = settings: packageOptions: kernelName: + languageServers = [] - ++ lib.optionals (common.isTrue settings "lsp.solargraph.enable") [(callPackage ./solargraph.nix { rubyPackages = packageOptions; inherit kernelName; })] + ++ lib.optionals settings.lsp.solargraph.enable [(callPackage ./solargraph.nix { rubyPackages = packageOptions; inherit kernelName; })] ; in -with lib; - -listToAttrs (map (x: - let - ruby = getAttr x pkgs; - +symlinkJoin { + name = "ruby"; + paths = [ + (callPackage ./kernel.nix { + iruby = (callPackage ./iruby { inherit ruby; }).iruby; + inherit attrs extensions version; + }) + ruby + ] + ++ languageServers + ; + passthru = { meta = ruby.meta // { - baseName = x; + baseName = "ruby"; displayName = "Ruby"; version = ruby.version; icon = ./iruby-64x64.png; inherit settingsSchema; }; - - packageOptions = getAttr x packagesLookup; - packageSearch = common.searcher packageOptions; + args = { + inherit attrs extensions settings packages; + }; versions = { ruby = builtins.toString ruby.version; solargraph = packageOptions.solargraph.version; }; - - in { - name = x; - value = lib.makeOverridable ({ - packages ? [] - , settings ? {} - , attrs ? [x "ruby"] - , extensions ? ["rb"] - }@args: - let - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; - languageServers = chooseLanguageServers settingsToUse packageOptions x; - in symlinkJoin { - name = x; - paths = [ - (callPackage ./kernel.nix { - iruby = (callPackage ./iruby { inherit ruby; }).iruby; - inherit attrs extensions version; - }) - ruby - ] - ++ languageServers - ; - passthru = { - inherit meta packageOptions packageSearch versions; - inherit settingsSchema settings; - args = args // { baseName = x; }; - modes = { - inherit attrs extensions; - code_mirror_mode = "ruby"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; - } - ) {}; - } - -) baseCandidates) + inherit packageOptions packageSearch; + inherit settingsSchema settings; + modes = { + inherit attrs extensions; + code_mirror_mode = "ruby"; + }; + languageServerNames = map (x: x.languageServerName) languageServers; + }; +} diff --git a/languages/ruby/full.nix b/languages/ruby/full.nix deleted file mode 100644 index d586759..0000000 --- a/languages/ruby/full.nix +++ /dev/null @@ -1,71 +0,0 @@ -{ lib -, callPackage -, pkgs -, recurseIntoAttrs -, stdenv -, symlinkJoin -, writeTextDir - -, ruby - -, packages -, attrs -, extensions -, settings -, settingsSchema -}: - -with lib; - -let - common = callPackage ../common.nix {}; - - kernelName = "ruby"; - - rubyPackages = recurseIntoAttrs ruby.gems; - - packageOptions = rubyPackages; - packageSearch = common.searcher packageOptions; - - languageServers = - [] - ++ lib.optionals settings.lsp.solargraph.enable [(callPackage ./solargraph.nix { rubyPackages = packageOptions; inherit kernelName; })] - ; - -in - -symlinkJoin { - name = "ruby"; - paths = [ - (callPackage ./kernel.nix { - iruby = (callPackage ./iruby { inherit ruby; }).iruby; - inherit attrs extensions version; - }) - ruby - ] - ++ languageServers - ; - passthru = { - meta = ruby.meta // { - baseName = "ruby"; - displayName = "Ruby"; - version = ruby.version; - icon = ./iruby-64x64.png; - inherit settingsSchema; - }; - args = { - inherit attrs extensions settings packages; - }; - versions = { - ruby = builtins.toString ruby.version; - solargraph = packageOptions.solargraph.version; - }; - inherit packageOptions packageSearch; - inherit settingsSchema settings; - modes = { - inherit attrs extensions; - code_mirror_mode = "ruby"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; -} diff --git a/languages/ruby/module.nix b/languages/ruby/module.nix index e87d57c..3853ac3 100644 --- a/languages/ruby/module.nix +++ b/languages/ruby/module.nix @@ -43,7 +43,7 @@ with lib; }; config = mkIf config.kernels.ruby.enable { - builtKernels.ruby = config.pkgs.callPackage ./full.nix { + builtKernels.ruby = config.pkgs.callPackage ./. { ruby = getAttr config.kernels.ruby.rubyPackage config.pkgs; inherit (config.kernels.ruby) packages attrs extensions settings; diff --git a/languages/rust/default.nix b/languages/rust/default.nix index c7fb66e..876dede 100644 --- a/languages/rust/default.nix +++ b/languages/rust/default.nix @@ -6,6 +6,14 @@ , darwin , rust-analyzer + +, rust + +, packages +, attrs +, extensions +, settings +, settingsSchema }: with lib; @@ -13,137 +21,86 @@ with lib; let common = callPackage ../common.nix {}; - settingsSchema = [ - { - target = "lsp.rust-analyzer.enable"; - title = "Enable rust-analyzer"; - type = "boolean"; - defaultValue = true; - } - { - target = "lsp.rust-analyzer.debug"; - title = "Rust-analyzer: enable debug output"; - description = "Print verbose debug output."; - type = "boolean"; - defaultValue = false; - } - ]; - - chooseLanguageServers = settings: rust: cargoHome: kernelName: + evcxr = ((callPackage ./evcxr { + inherit (darwin.apple_sdk.frameworks) CoreServices Security; + }).override { + rustPlatform = rustPackages.rustPlatform; + cargo = rustPackages.cargo; + }).withPackages packages; + + kernelName = "rust"; + + languageServers = [] - ++ lib.optionals (common.isTrue settings "lsp.rust-analyzer.enable") [(callPackage ./language_server_rust_analyzer/config.nix { - inherit rust cargoHome kernelName; - settings = common.focusSettings "lsp.rust-analyzer." settings; + ++ lib.optionals settings.lsp.rust-analyzer.enable [(callPackage ./language_server_rust_analyzer/config.nix { + inherit rust kernelName; + cargoHome = evcxr.cargoHome; + settings = settings.lsp.rust-analyzer; })] ; allPackageNames = import ./all_package_names.nix; - # Note: update this when the base Nixpkgs is bumped - baseCandidates = [ - "rust" - "rust_1_70" - "rust_1_71" - "rust_1_72" - "rust_1_73" - "rust_1_74" - "rust_1_75" - "rust_1_76" - "rust_1_77" - "rust_1_78" - "rust_1_79" - "rust_1_80" - "rust_1_81" - "rust_1_82" - ]; + rustPackages = rust.packages.stable; -in + displayName = "Rust"; -with lib; + packageOptions = listToAttrs (map (x: { + name = x; + value = { + meta = { + name = x; + }; + }; + }) allPackageNames); -listToAttrs (map (x: - let - rust = getAttr x pkgs; - rustPackages = rust.packages.stable; + packageSearch = common.searcher' { + packageMustBeDerivation = false; + packages = packageOptions; + }; + +in - displayName = "Rust"; +symlinkJoin { + name = "rust"; + + paths = [ + (callPackage ./kernel.nix { + inherit evcxr; + inherit displayName attrs extensions; + version = rustPackages.rustc.version; + }) + + rustPackages.rustc + rustPackages.cargo + pkgs.gcc + ] + ++ languageServers + ; + passthru = { meta = rustPackages.rustc.meta // { - baseName = x; + baseName = "rust"; inherit displayName; icon = ./rust-logo-64x64.png; inherit settingsSchema; }; - - evcxrBase = callPackage ./evcxr { - inherit (darwin.apple_sdk.frameworks) CoreServices Security; - }; - - packageOptions = listToAttrs (map (x: { - name = x; - value = { - meta = { - name = x; - }; - }; - }) allPackageNames); - - packageSearch = common.searcher' { - packageMustBeDerivation = false; - packages = packageOptions; + args = { + inherit attrs extensions settings packages; }; - + inherit packageOptions packageSearch; versions = { cargo = rustPackages.cargo.version; - evcxr = evcxrBase.version; + evcxr = evcxr.version; rust = rustPackages.rustc.version; rust-analyzer = rust-analyzer.version; }; - - in { - name = x; - value = lib.makeOverridable ({ - packages ? [] - , attrs ? [x "rust"] - , extensions ? ["rs" "rlib"] - , settings ? {} - }@args: let - evcxr = (evcxrBase.override { - rustPlatform = rustPackages.rustPlatform; - cargo = rustPackages.cargo; - }).withPackages packages; - - settingsToUse = (common.makeDefaultSettings settingsSchema) // settings; - languageServers = chooseLanguageServers settingsToUse rust evcxr.cargoHome x; - in symlinkJoin { - name = "rust"; - - paths = [ - (callPackage ./kernel.nix { - inherit evcxr; - inherit displayName attrs extensions; - version = rustPackages.rustc.version; - }) - - rustPackages.rustc - rustPackages.cargo - pkgs.gcc - ] - ++ languageServers - ; - - passthru = { - args = args // { baseName = x; }; - inherit meta packageOptions packageSearch versions; - inherit settingsSchema settings; - inherit (evcxr) cratesIndex; - modes = { - inherit attrs extensions; - code_mirror_mode = "rust"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; - } - ) {}; - } -) (filter (x: hasAttr x pkgs) baseCandidates)) + inherit settingsSchema settings; + inherit (evcxr) cratesIndex; + modes = { + inherit attrs extensions; + code_mirror_mode = "rust"; + }; + languageServerNames = map (x: x.languageServerName) languageServers; + }; +} diff --git a/languages/rust/full.nix b/languages/rust/full.nix deleted file mode 100644 index 876dede..0000000 --- a/languages/rust/full.nix +++ /dev/null @@ -1,106 +0,0 @@ -{ lib -, pkgs -, callPackage -, writeTextDir -, symlinkJoin - -, darwin -, rust-analyzer - -, rust - -, packages -, attrs -, extensions -, settings -, settingsSchema -}: - -with lib; - -let - common = callPackage ../common.nix {}; - - evcxr = ((callPackage ./evcxr { - inherit (darwin.apple_sdk.frameworks) CoreServices Security; - }).override { - rustPlatform = rustPackages.rustPlatform; - cargo = rustPackages.cargo; - }).withPackages packages; - - kernelName = "rust"; - - languageServers = - [] - ++ lib.optionals settings.lsp.rust-analyzer.enable [(callPackage ./language_server_rust_analyzer/config.nix { - inherit rust kernelName; - cargoHome = evcxr.cargoHome; - settings = settings.lsp.rust-analyzer; - })] - ; - - allPackageNames = import ./all_package_names.nix; - - rustPackages = rust.packages.stable; - - displayName = "Rust"; - - packageOptions = listToAttrs (map (x: { - name = x; - value = { - meta = { - name = x; - }; - }; - }) allPackageNames); - - packageSearch = common.searcher' { - packageMustBeDerivation = false; - packages = packageOptions; - }; - -in - -symlinkJoin { - name = "rust"; - - paths = [ - (callPackage ./kernel.nix { - inherit evcxr; - inherit displayName attrs extensions; - version = rustPackages.rustc.version; - }) - - rustPackages.rustc - rustPackages.cargo - pkgs.gcc - ] - ++ languageServers - ; - - passthru = { - meta = rustPackages.rustc.meta // { - baseName = "rust"; - inherit displayName; - icon = ./rust-logo-64x64.png; - inherit settingsSchema; - }; - args = { - inherit attrs extensions settings packages; - }; - inherit packageOptions packageSearch; - versions = { - cargo = rustPackages.cargo.version; - evcxr = evcxr.version; - rust = rustPackages.rustc.version; - rust-analyzer = rust-analyzer.version; - }; - inherit settingsSchema settings; - inherit (evcxr) cratesIndex; - modes = { - inherit attrs extensions; - code_mirror_mode = "rust"; - }; - languageServerNames = map (x: x.languageServerName) languageServers; - }; -} diff --git a/languages/rust/module.nix b/languages/rust/module.nix index 2a59efd..d7f3eb6 100644 --- a/languages/rust/module.nix +++ b/languages/rust/module.nix @@ -51,7 +51,7 @@ with lib; }; config = mkIf config.kernels.rust.enable { - builtKernels.rust = config.pkgs.callPackage ./full.nix { + builtKernels.rust = config.pkgs.callPackage ./. { rust = getAttr config.kernels.rust.rustPackage config.pkgs; inherit (config.kernels.rust) packages attrs extensions settings; From dc58ed5ce0fd7a0553e326587c49f09964d03ec5 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Tue, 17 Sep 2024 15:39:09 -0700 Subject: [PATCH 06/40] More test fixes --- languages/octave/default.nix | 2 +- languages/python/default.nix | 2 +- languages/python/kernel.nix | 6 ++++-- tests/app/Spec/Tests/Shells/Zsh.hs | 10 +++++----- tests/app/Spec/Tests/Spellchecker.hs | 9 ++++----- tests/src/TestLib/NixEnvironmentContext.hs | 11 ++++++++--- tests/src/TestLib/NixRendering.hs | 2 ++ tests/src/TestLib/NixTypes.hs | 2 +- 8 files changed, 26 insertions(+), 18 deletions(-) diff --git a/languages/octave/default.nix b/languages/octave/default.nix index bb940b4..189e51e 100644 --- a/languages/octave/default.nix +++ b/languages/octave/default.nix @@ -61,7 +61,7 @@ symlinkJoin { packages = []; }; meta = octave.meta // { - baseName = x; + baseName = "octave"; displayName = "Octave " + octave.version; version = octave.version; icon = ./octave-logo-64x64.png; diff --git a/languages/python/default.nix b/languages/python/default.nix index 52781f5..c785384 100644 --- a/languages/python/default.nix +++ b/languages/python/default.nix @@ -56,7 +56,7 @@ symlinkJoin { paths = [ (callPackage ./kernel.nix { python = pythonToUse; - inherit displayName attrs extensions; + inherit displayName kernelName attrs extensions; enableVariableInspector = settings.enableVariableInspector; }) diff --git a/languages/python/kernel.nix b/languages/python/kernel.nix index 05b3718..2b126c2 100644 --- a/languages/python/kernel.nix +++ b/languages/python/kernel.nix @@ -1,6 +1,8 @@ { lib , callPackage , python + +, kernelName , displayName , enableVariableInspector @@ -24,10 +26,10 @@ in common.makeJupyterKernel ( listToAttrs [{ - name = head attrs; + name = kernelName; value = { displayName = displayName; - language = head attrs; + language = kernelName; argv = [ "${python}/bin/python" "-m" diff --git a/tests/app/Spec/Tests/Shells/Zsh.hs b/tests/app/Spec/Tests/Shells/Zsh.hs index 918313c..56b93f7 100644 --- a/tests/app/Spec/Tests/Shells/Zsh.hs +++ b/tests/app/Spec/Tests/Shells/Zsh.hs @@ -3,19 +3,19 @@ module Spec.Tests.Shells.Zsh (tests) where import Data.String.Interpolate +import Data.Text import Test.Sandwich as Sandwich import TestLib.NixEnvironmentContext -import TestLib.NixTypes import TestLib.Types -otherPackages :: [ChannelAndAttr] -otherPackages = [ - channelAndAttr "codedown" "shells.zsh" +otherConfig :: [Text] +otherConfig = [ + "shells.zsh.enable = true;" ] tests :: TopSpec -tests = describe "ZSH" $ introduceNixEnvironment [] otherPackages "ZSH environment" $ do +tests = describe "ZSH" $ introduceNixEnvironment [] otherConfig "ZSH environment" $ do it "can run a command" $ do nixEnv <- getContext nixEnvironment info [i|Got nixEnv: #{nixEnv}|] diff --git a/tests/app/Spec/Tests/Spellchecker.hs b/tests/app/Spec/Tests/Spellchecker.hs index d51e36c..6f558ab 100644 --- a/tests/app/Spec/Tests/Spellchecker.hs +++ b/tests/app/Spec/Tests/Spellchecker.hs @@ -18,17 +18,16 @@ import Test.Sandwich.Contexts.Waits (waitUntil) import TestLib.JupyterRunnerContext import TestLib.LSP import TestLib.NixEnvironmentContext -import TestLib.NixTypes import UnliftIO.Directory -otherPackages :: [ChannelAndAttr] -otherPackages = [ - channelAndAttr "codedown" "spellchecker" +otherConfig :: [Text] +otherConfig = [ + "language-servers.spellchecker.enable = true;" ] tests :: TopSpec -tests = describe "Spellchecker" $ introduceNixEnvironment [] otherPackages "Spellchecker env" $ introduceJustBubblewrap $ do +tests = describe "Spellchecker" $ introduceNixEnvironment [] otherConfig "Spellchecker env" $ introduceJustBubblewrap $ do it "Gets diagnostics and a working code action" $ do withLspSession' id "spellchecker" "test.md" [i|\# This is mispelled|] [] $ \lspHomeDir -> do ident <- openDoc "test.md" "spellchecker" diff --git a/tests/src/TestLib/NixEnvironmentContext.hs b/tests/src/TestLib/NixEnvironmentContext.hs index 13dff8c..9f15b3a 100644 --- a/tests/src/TestLib/NixEnvironmentContext.hs +++ b/tests/src/TestLib/NixEnvironmentContext.hs @@ -25,8 +25,13 @@ import UnliftIO.Temporary introduceNixEnvironment :: ( HasBaseContext context, MonadIO m, MonadMask m, MonadUnliftIO m, MonadBaseControl IO m - ) => [NixKernelSpec] -> [ChannelAndAttr] -> Text -> SpecFree (LabelValue "nixEnvironment" FilePath :> context) m () -> SpecFree context m () -introduceNixEnvironment kernels otherPackages label = introduceWith [i|#{label} Nix|] nixEnvironment $ \action -> do + ) + => [NixKernelSpec] + -> [Text] + -> Text + -> SpecFree (LabelValue "nixEnvironment" FilePath :> context) m () + -> SpecFree context m () +introduceNixEnvironment kernels otherConfig label = introduceWith [i|#{label} Nix|] nixEnvironment $ \action -> do rootDir <- findFirstParentMatching (\x -> doesPathExist (x ".git")) metadata :: A.Object <- withFile "/dev/null" WriteMode $ \devNullHandle -> do @@ -49,7 +54,7 @@ introduceNixEnvironment kernels otherPackages label = introduceWith [i|#{label} , lockedToNixSrcSpec "nixpkgs" nixpkgsLocked ] , nixEnvironmentKernels = kernels - , nixEnvironmentOtherPackages = otherPackages + , nixEnvironmentOtherConfig = otherConfig } let rendered = renderNixEnvironment "" nixEnv diff --git a/tests/src/TestLib/NixRendering.hs b/tests/src/TestLib/NixRendering.hs index 59b6e88..83bb155 100644 --- a/tests/src/TestLib/NixRendering.hs +++ b/tests/src/TestLib/NixRendering.hs @@ -43,6 +43,8 @@ in (import channels.codedown { inherit fetchFromGitHub; }).makeEnvironment { #{T.intercalate "\n\n" [renderKernel x | x <- nixEnvironmentKernels]} + +#{T.intercalate "\n" [t | t <- nixEnvironmentOtherConfig]} } |] diff --git a/tests/src/TestLib/NixTypes.hs b/tests/src/TestLib/NixTypes.hs index d40c333..a5b1197 100644 --- a/tests/src/TestLib/NixTypes.hs +++ b/tests/src/TestLib/NixTypes.hs @@ -63,6 +63,6 @@ deriveJSON toSnake2 ''NixKernelSpec data NixEnvironment = NixEnvironment { nixEnvironmentChannels :: [NixSrcSpec] , nixEnvironmentKernels :: [NixKernelSpec] - , nixEnvironmentOtherPackages :: [ChannelAndAttr] + , nixEnvironmentOtherConfig :: [Text] } deriving (Show, Eq, Ord) deriveJSON toSnake2 ''NixEnvironment From 1c3ffc2512bca1016fa53203fe4c3127fb1c0c5b Mon Sep 17 00:00:00 2001 From: thomasjm Date: Tue, 17 Sep 2024 15:40:28 -0700 Subject: [PATCH 07/40] Update spellchecker attr --- codedown.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/codedown.nix b/codedown.nix index bc23848..eecd190 100644 --- a/codedown.nix +++ b/codedown.nix @@ -51,7 +51,7 @@ rec { packages = everythingEnv.config.builtKernels // (lib.mapAttrs' (n: v: lib.nameValuePair ("shells." + n) v) everythingEnv.config.builtShells) // (lib.mapAttrs' (n: v: lib.nameValuePair ("exporters." + n) v) everythingEnv.config.builtExporters) - // { inherit spellchecker; } + // { "language-servers.spellchecker" = spellchecker; } ; }; From d0c5df4727179687f1c1510ba1c0440b3a48436f Mon Sep 17 00:00:00 2001 From: thomasjm Date: Tue, 17 Sep 2024 15:59:58 -0700 Subject: [PATCH 08/40] Fix solargraph --- codedown.nix | 2 +- codedown/evaluate-config.nix | 8 +++++--- codedown/makeEnvironment.nix | 4 +--- languages/ruby/module.nix | 13 +++++++++---- modules/base.nix | 5 +++++ nix/sample-outputs.nix | 4 ++-- 6 files changed, 23 insertions(+), 13 deletions(-) diff --git a/codedown.nix b/codedown.nix index eecd190..0aec05c 100644 --- a/codedown.nix +++ b/codedown.nix @@ -29,7 +29,7 @@ rec { ) languages; evaluateConfig = callPackage ./codedown/evaluate-config.nix { - pkgs = pkgsStable; + inherit pkgsStable pkgsMaster; }; everythingConfig = let diff --git a/codedown/evaluate-config.nix b/codedown/evaluate-config.nix index 8af05bf..981f7ce 100644 --- a/codedown/evaluate-config.nix +++ b/codedown/evaluate-config.nix @@ -1,12 +1,13 @@ { lib -, pkgs +, pkgsStable +, pkgsMaster }: config: lib.evalModules { specialArgs = { - nixosOptionsToSettingsSchema = pkgs.callPackage ../modules/base/nixos-options-to-settings-schema.nix {}; + nixosOptionsToSettingsSchema = pkgsStable.callPackage ../modules/base/nixos-options-to-settings-schema.nix {}; }; modules = [ ../modules/base.nix @@ -35,7 +36,8 @@ lib.evalModules { { config = { - inherit pkgs; + pkgs = pkgsStable; + inherit pkgsMaster; }; } { diff --git a/codedown/makeEnvironment.nix b/codedown/makeEnvironment.nix index 56ea1f3..a81665c 100644 --- a/codedown/makeEnvironment.nix +++ b/codedown/makeEnvironment.nix @@ -19,9 +19,7 @@ config: with lib; let - evaluateConfig = callPackage ./evaluate-config.nix { - pkgs = pkgsStable; - }; + evaluateConfig = callPackage ./evaluate-config.nix { inherit pkgsStable pkgsMaster; }; evaluated = evaluateConfig config; diff --git a/languages/ruby/module.nix b/languages/ruby/module.nix index 3853ac3..206b9e7 100644 --- a/languages/ruby/module.nix +++ b/languages/ruby/module.nix @@ -1,7 +1,12 @@ -{ config, options, lib, pkgs, nixosOptionsToSettingsSchema, ... }: +{ config, options, lib, nixosOptionsToSettingsSchema, ... }: with lib; +let + pkgs = config.pkgsMaster; + +in + { options = { kernels.ruby = { @@ -19,7 +24,7 @@ with lib; type = types.enum ( ["ruby"] ++ (builtins.filter (name: builtins.substring 0 (builtins.stringLength "ruby_") name == "ruby_") - (builtins.attrNames config.pkgs)) + (builtins.attrNames pkgs)) ); default = "ruby"; }; @@ -43,8 +48,8 @@ with lib; }; config = mkIf config.kernels.ruby.enable { - builtKernels.ruby = config.pkgs.callPackage ./. { - ruby = getAttr config.kernels.ruby.rubyPackage config.pkgs; + builtKernels.ruby = pkgs.callPackage ./. { + ruby = getAttr config.kernels.ruby.rubyPackage pkgs; inherit (config.kernels.ruby) packages attrs extensions settings; settingsSchema = nixosOptionsToSettingsSchema options.kernels.ruby; diff --git a/modules/base.nix b/modules/base.nix index ca17bcd..ca52496 100644 --- a/modules/base.nix +++ b/modules/base.nix @@ -9,6 +9,11 @@ with lib; default = pkgs; }; + pkgsMaster = lib.mkOption { + type = lib.types.attrs; + default = pkgs; + }; + builtExporters = lib.mkOption { type = types.attrsOf types.package; default = {}; diff --git a/nix/sample-outputs.nix b/nix/sample-outputs.nix index e0ab888..555e497 100644 --- a/nix/sample-outputs.nix +++ b/nix/sample-outputs.nix @@ -32,8 +32,8 @@ in printVersions = let versionsMap = with lib; - mapAttrs (lang: value: if (hasAttr "versions" value) then (value.versions) else {}) - (filterAttrs (k: _: !(hasPrefix "override") k) languages); + mapAttrs (lang: value: if (hasAttr "versions" value) then value.versions else {}) + (filterAttrs (k: _: !(hasPrefix "override") k) codedown.languages); file = writeTextFile { name = "versions.yaml"; From 9e8c3e2fdcbb47cd7a58424dd902c87865be0503 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Tue, 17 Sep 2024 16:39:40 -0700 Subject: [PATCH 09/40] Get rid of unstable input --- channels.nix | 37 ------------------------------------ codedown.nix | 7 +++---- codedown/makeEnvironment.nix | 1 - default.nix | 9 +-------- flake.lock | 19 +----------------- flake.nix | 6 ++---- tests/flake.lock | 19 +----------------- tests/flake.nix | 5 +---- 8 files changed, 9 insertions(+), 94 deletions(-) delete mode 100644 channels.nix diff --git a/channels.nix b/channels.nix deleted file mode 100644 index 55e0683..0000000 --- a/channels.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ lib -, fetchFromGitHub -, fetchgit -, overlays -}: - -let - - channelSpecToChannel = name: channel: - if (channel.tag == "fetch_from_github") then fetchFromGitHub ((removeAttrs channel ["tag" "name"])) - else if (channel.tag == "fetch_git") then fetchgit (removeAttrs channel ["tag" "name"]) - else if (channel.tag == "path") then channel.path else null; - -in - -rec { - channels = { - nixpkgs = { - tag = "fetch_from_github"; - owner = "NixOS"; - repo = "nixpkgs"; - rev = "973910f5c31b9ba6c171c33a8bd7199990b14c72"; - sha256 = "1n1kibmn1fcjazaxp8lydwdx646lknqksv5b2fm33fdq2dvafvj7"; - }; - - nixpkgs-unstable = { - tag = "fetch_from_github"; - owner = "NixOS"; - repo = "nixpkgs"; - rev = "ecaf3da9340231e5493eccc3db87604a3705da42"; - sha256 = "049dcpzklpjj0c7g172njfcqb9xvxkpyf7qjiwvaf8klgd5cippa"; - }; - }; - - importedOverlays = lib.mapAttrsToList (name: value: import (channelSpecToChannel name value)) overlays; - importedChannels = lib.mapAttrs (name: value: import (channelSpecToChannel name value) { overlays = importedOverlays; }) channels; -} diff --git a/codedown.nix b/codedown.nix index 0aec05c..9d6a6a9 100644 --- a/codedown.nix +++ b/codedown.nix @@ -1,5 +1,4 @@ { pkgsStable -, pkgsUnstable , pkgsMaster , requiredPackages ? [] , system ? "x86_64-linux" @@ -15,7 +14,7 @@ let in rec { - spellchecker = pkgsUnstable.callPackage ./language_servers/markdown-spellcheck-lsp {}; + spellchecker = pkgsMaster.callPackage ./language_servers/markdown-spellcheck-lsp {}; testing = { builds-forever = pkgsMaster.callPackage ./misc/builds-forever.nix {}; @@ -58,11 +57,11 @@ rec { languages = everythingEnv.config.builtKernels; makeEnvironment = callPackage ./codedown/makeEnvironment.nix { - inherit pkgsStable pkgsUnstable pkgsMaster; + inherit pkgsStable pkgsMaster; }; validateCodeDownEnvironment = callPackage ./codedown/validateCodeDownEnvironment.nix {}; # Exposed so it's easier to compute build dependencies in the presence of IFD - inherit pkgsStable pkgsUnstable requiredPackages; + inherit pkgsStable pkgsMaster requiredPackages; } diff --git a/codedown/makeEnvironment.nix b/codedown/makeEnvironment.nix index a81665c..8cc2be8 100644 --- a/codedown/makeEnvironment.nix +++ b/codedown/makeEnvironment.nix @@ -8,7 +8,6 @@ , writeText , pkgsStable -, pkgsUnstable , pkgsMaster , name ? "codedown-environment" diff --git a/default.nix b/default.nix index 10f3bb3..4b80bf5 100644 --- a/default.nix +++ b/default.nix @@ -12,13 +12,6 @@ let hash = "sha256-D2YTs7K33zAzoQdAcVzePgDn6bdIEexGgHluoB07+Yw="; # nixpkgs-sha256 }) { inherit overlays; }; - pkgsUnstable = import (fetchFromGitHub { - owner = "NixOS"; - repo = "nixpkgs"; - rev = "ab82a9612aa45284d4adf69ee81871a389669a9e"; # nixpkgs-unstable-rev - hash = "sha256-5r0pInVo5d6Enti0YwUSQK4TebITypB42bWy5su3MrQ="; # nixpkgs-unstable-sha256 - }) { inherit overlays; }; - pkgsMaster = import (fetchFromGitHub { owner = "NixOS"; repo = "nixpkgs"; @@ -28,4 +21,4 @@ let in -pkgsStable.callPackage ./codedown.nix { inherit pkgsStable pkgsUnstable pkgsMaster; } +pkgsStable.callPackage ./codedown.nix { inherit pkgsStable pkgsMaster; } diff --git a/flake.lock b/flake.lock index 9d4906a..1e83b64 100644 --- a/flake.lock +++ b/flake.lock @@ -47,28 +47,11 @@ "type": "github" } }, - "nixpkgs-unstable": { - "locked": { - "lastModified": 1720368505, - "narHash": "sha256-5r0pInVo5d6Enti0YwUSQK4TebITypB42bWy5su3MrQ=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "ab82a9612aa45284d4adf69ee81871a389669a9e", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "root": { "inputs": { "flake-utils": "flake-utils", "nixpkgs": "nixpkgs", - "nixpkgs-master": "nixpkgs-master", - "nixpkgs-unstable": "nixpkgs-unstable" + "nixpkgs-master": "nixpkgs-master" } } }, diff --git a/flake.nix b/flake.nix index 8a01bb9..0499acc 100644 --- a/flake.nix +++ b/flake.nix @@ -2,20 +2,18 @@ description = "CodeDown languages"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/release-24.05"; - inputs.nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; inputs.nixpkgs-master.url = "github:NixOS/nixpkgs/master"; inputs.flake-utils.url = "github:numtide/flake-utils"; - outputs = { self, nixpkgs, nixpkgs-unstable, nixpkgs-master, flake-utils }@inputs: + outputs = { self, nixpkgs, nixpkgs-master, flake-utils }@inputs: flake-utils.lib.eachDefaultSystem (system: let overlays = [(import ./overlays.nix)]; pkgsStable = import nixpkgs { inherit system overlays; }; - pkgsUnstable = import nixpkgs-unstable { inherit system overlays; }; pkgsMaster = import nixpkgs-master { inherit system overlays; }; - codedown = import ./codedown.nix { inherit pkgsStable pkgsUnstable pkgsMaster; }; + codedown = import ./codedown.nix { inherit pkgsStable pkgsMaster; }; in rec { diff --git a/tests/flake.lock b/tests/flake.lock index 4cfc1c1..364e470 100644 --- a/tests/flake.lock +++ b/tests/flake.lock @@ -31,27 +31,10 @@ "type": "github" } }, - "nixpkgsUnstable": { - "locked": { - "lastModified": 1721080040, - "narHash": "sha256-USDsS90/88RJibP3gEcH1AaVt+JpnX4XCUD9bAJP5I4=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "b2c1f10bfbb3f617ea8e8669ac13f3f56ceb2ea2", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "root": { "inputs": { "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs", - "nixpkgsUnstable": "nixpkgsUnstable" + "nixpkgs": "nixpkgs" } } }, diff --git a/tests/flake.nix b/tests/flake.nix index 7779795..0a3f270 100644 --- a/tests/flake.nix +++ b/tests/flake.nix @@ -1,15 +1,13 @@ { inputs.nixpkgs.url = "github:NixOS/nixpkgs/release-24.05"; - inputs.nixpkgsUnstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; inputs.flake-utils.url = "github:numtide/flake-utils"; - outputs = { self, nixpkgs, nixpkgsUnstable, flake-utils }@inputs: + outputs = { self, nixpkgs, flake-utils }@inputs: # flake-utils.lib.eachDefaultSystem (system: flake-utils.lib.eachSystem ["x86_64-linux"] (system: let pkgs = import nixpkgs { inherit system; }; - pkgsUnstable = import nixpkgsUnstable { inherit system; }; tests = pkgs.haskell.packages.ghc965.callPackage ./tests.nix {}; in rec { @@ -18,7 +16,6 @@ inherit (pkgs) cabal2nix; nixpkgsPath = pkgs.writeShellScriptBin "nixpkgsPath.sh" "echo -n ${pkgs.path}"; - nixpkgsUnstablePath = pkgsUnstable.writeShellScriptBin "nixpkgsPath.sh" "echo -n ${pkgsUnstable.path}"; # Print a trivial PATH that we can use to run kernel and LSP tests, to ensure # they aren't depending on anything on the test machine's PATH. From 02b32393446a9fbdb4056f9a82fdc16bef36afb5 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Tue, 17 Sep 2024 18:56:38 -0700 Subject: [PATCH 10/40] Move modules around --- codedown.nix | 12 ++--- codedown/evaluate-config.nix | 47 ------------------ default.nix | 2 +- flake.nix | 2 +- .../exporters}/fix-asciidoc.patch | 0 {exporters => modules/exporters}/module.nix | 0 .../exporters}/nbconvert.nix | 0 .../exporters}/nbconvert/beamer.nix | 0 .../exporters}/nbconvert/slidy.nix | 0 .../diagnostic-languageserver/default.nix | 0 .../diagnostic-languageserver/generate.sh | 0 .../diagnostic-languageserver/node-env.nix | 0 .../node-packages.json | 0 .../node-packages.nix | 0 .../markdown-spellcheck-lsp/default.nix | 0 .../markdown-spellcheck-lsp/module.nix | 0 .../markdown-spellcheck-lsp/pen-alt.png | Bin .../markdown-spellcheck-lsp/pen-alt.svg | 0 {languages => modules/languages}/.gitignore | 0 .../languages}/bash/bash-logo-128x128.png | Bin .../languages}/bash/default.nix | 0 .../languages}/bash/kernel.nix | 0 .../bash/language_server_bash/default.nix | 0 .../languages}/bash/man-with-pages.nix | 0 .../languages}/bash/metadata.nix | 0 .../languages}/bash/module.nix | 0 .../languages}/clojure/clojure-logo-32x32.png | Bin .../languages}/clojure/clojure-logo-64x64.png | Bin .../languages}/clojure/clojure-lsp.nix | 0 .../languages}/clojure/default.nix | 0 .../home_folder/.config/clojupyter.edn | 0 .../clojure/home_folder/project.clj | 0 .../clojure/home_folder/src/project/core.clj | 0 .../home_folder/test/project/core_test.clj | 0 .../languages}/clojure/kernel.nix | 0 .../languages}/clojure/language-server.nix | 0 .../languages}/clojure/module.nix | 0 {languages => modules/languages}/common.nix | 0 .../languages}/coq/coq_jupyter/default.nix | 0 .../languages}/coq/coq_jupyter/kernel.nix | 0 .../languages}/coq/default.nix | 0 .../languages}/coq/kernel.nix | 0 .../languages}/coq/module.nix | 0 {languages => modules/languages}/cpp/ccls.nix | 0 .../languages}/cpp/cpp11-logo-64x64.png | Bin .../languages}/cpp/cpp14-logo-64x64.png | Bin .../languages}/cpp/cpp17-logo-64x64.png | Bin .../languages}/cpp/cpp2a-logo-64x64.png | Bin .../languages}/cpp/default.nix | 0 .../languages}/cpp/kernel_xeus.nix | 0 .../languages}/cpp/module.nix | 0 .../languages}/cpp/old/kernel_cling.nix | 0 .../languages}/cpp/xeus-cling.svg | 0 .../0001-Fix-bug-in-extract_filename.patch | 0 ...a-includes-configure-this-with-flags.patch | 0 .../languages}/cpp/xeus-cling/xeus-cling.nix | 0 .../languages}/cpp/xeusMisc.nix | 0 .../languages}/go/default.nix | 0 .../languages}/go/go-logo-32x32.png | Bin .../languages}/go/go-logo-64x64.png | Bin .../languages}/go/kernel.nix | 0 .../languages}/go/language-server-gopls.nix | 0 .../languages}/go/module.nix | 0 .../languages}/haskell/compilers.nix | 0 .../languages}/haskell/default.nix | 0 .../languages}/haskell/haskell-logo-32x32.png | Bin .../languages}/haskell/haskell-logo-64x64.png | Bin .../languages}/haskell/kernel.nix | 0 .../haskell/language-server-hls/config.nix | 0 .../haskell/language-server-hls/default.nix | 0 .../language-server-hls/hls-icon-64x64.png | Bin .../haskell/language-server-hls/hls-logo.png | Bin .../language-server-hls/hnls-version.nix | 0 .../haskell/language-server-hls/hnls.nix | 0 .../language-server-hls/hnls_update.sh | 0 .../language-server-hls/icon_64x64.xcf | Bin .../haskell/language-server-hls/lsp-types.nix | 0 .../language-server-hls/myers-diff.nix | 0 .../languages}/haskell/module.nix | 0 .../languages}/haskell/old/compilers.nix | 0 .../haskell/old/default_haskellnix.nix | 0 .../languages}/haskell/old/generate.nix | 0 .../languages}/haskell/old/ihaskell.nix | 0 .../languages}/haskell/old/util.nix | 0 .../languages}/haskell/settings_schema.nix | 0 .../languages}/haskell/util.nix | 0 .../languages}/julia/default.nix | 0 .../languages}/julia/julia-logo-32x32.png | Bin .../languages}/julia/julia-logo-64x64.png | Bin .../julia/julia-modules/default.nix | 0 .../languages}/julia/julia-modules/depot.nix | 0 .../julia/julia-modules/extra-libs.nix | 0 .../julia-modules/extra-python-packages.nix | 0 .../julia/julia-modules/extract_artifacts.jl | 0 .../julia-modules/extract_artifacts_16.jl | 0 .../julia-modules/generate-package-names.nix | 0 .../julia-modules/generate_packages_names.sh | 0 .../julia-modules/indexing/combine_indices.py | 0 .../julia/julia-modules/indexing/default.nix | 0 .../julia-modules/indexing/index-stdlib.jl | 0 .../julia-modules/indexing/index_packages.py | 0 .../julia-modules/indexing/indexpackage.jl | 0 .../julia/julia-modules/package-closure.nix | 0 .../julia/julia-modules/package-names.nix | 0 .../julia/julia-modules/python/dag.py | 0 .../julia-modules/python/dedup_overrides.py | 0 .../julia-modules/python/extract_artifacts.py | 0 .../python/find_package_implications.py | 0 .../julia-modules/python/format_overrides.py | 0 .../julia-modules/python/minimal_registry.py | 0 .../julia/julia-modules/python/sources_nix.py | 0 .../julia/julia-modules/python/util.py | 0 .../julia/julia-modules/registry.nix | 0 .../julia/julia-modules/tests/.gitignore | 0 .../julia/julia-modules/tests/README.md | 0 .../tests/julia-top-n/app/Main.hs | 0 .../tests/julia-top-n/default.nix | 0 .../tests/julia-top-n/julia-top-n.cabal | 0 .../tests/julia-top-n/package.yaml | 0 .../tests/julia-top-n/stack.yaml | 0 .../tests/julia-top-n/stack.yaml.lock | 0 .../julia-modules/tests/process_top_n.py | 0 .../julia/julia-modules/tests/run_tests.sh | 0 .../tests/top-julia-packages.nix | 0 .../languages}/julia/julia-modules/util.nix | 0 .../languages}/julia/kernel.nix | 0 .../julia/language-server-LanguageServer.nix | 0 .../languages}/julia/module.nix | 0 .../languages}/octave/default.nix | 0 .../languages}/octave/kernel.nix | 0 .../languages}/octave/metadata.nix | 0 .../languages}/octave/module.nix | 0 .../languages}/octave/octave-logo-32x32.png | Bin .../languages}/octave/octave-logo-64x64.png | Bin .../languages}/octave/octave.nix | 0 .../languages}/postgres/default.nix | 0 .../languages}/postgres/kernel.nix | 0 .../languages}/postgres/logo.svg | 0 .../languages}/postgres/module.nix | 0 .../postgres/postgres-logo-32x32.png | Bin .../postgres/postgres-logo-64x64.png | Bin .../languages}/python/default.nix | 0 .../languages}/python/envs/.gitignore | 0 .../python/envs/python311/poetry.lock | 0 .../python/envs/python311/pyproject.toml | 0 .../envs/python311/python311/__init__.py | 0 .../python/envs/python38/poetry-overrides.nix | 0 .../python/envs/python38/poetry.lock | 0 .../python/envs/python38/pyproject.toml | 0 .../python/envs/python38/python38/__init__.py | 0 .../languages}/python/envs/python38/shell.nix | 0 .../python/envs/python39/poetry.lock | 0 .../python/envs/python39/pyproject.toml | 0 .../python/envs/python39/python39/__init__.py | 0 .../python/home_folder/.config/pycodestyle | 0 .../profile_default/ipython_config.py | 0 .../python/home_folder/ipython_config.py | 0 .../languages}/python/home_folder/pycodestyle | 0 .../languages}/python/kernel.nix | 0 .../language_server_flake8/config.nix | 0 .../language_server_jedi/config.nix | 0 .../language_server_jedi/jedi-logo.png | Bin .../language_server_microsoft/config.nix | 0 .../generate_cache.py | 0 .../language_server_palantir/config.nix | 0 .../language_server_pycodestyle/config.nix | 0 .../language_server_pylint/config.nix | 0 .../language_server_pylint/pylint-logo.png | Bin .../language_server_pyright/config.nix | 0 .../language_server_pyright/icon.png | Bin .../language_server_pyright/icon_scaled.xcf | Bin .../icon_scaled_64x64.png | Bin .../icon_scaled_64x64.xcf | Bin .../language_server_pythonlsp/config.nix | 0 .../pylsp_initialization_options.nix | 0 .../languages}/python/manylinux1.nix | 0 .../languages}/python/module.nix | 0 .../languages}/python/python-logo-32x32.png | Bin .../languages}/python/python-logo-64x64.png | Bin .../languages}/python/variable_inspector.py | 0 .../languages}/r/default.nix | 0 {languages => modules/languages}/r/kernel.nix | 0 .../default.nix | 0 .../languageserver.nix | 0 {languages => modules/languages}/r/module.nix | 0 .../languages}/r/r-logo-64x64.png | Bin .../languages}/ruby/default.nix | 0 .../languages}/ruby/iruby-32x32.png | Bin .../languages}/ruby/iruby-64x64.png | Bin .../languages}/ruby/iruby/Gemfile | 0 .../languages}/ruby/iruby/Gemfile.lock | 0 .../languages}/ruby/iruby/default.nix | 0 .../languages}/ruby/iruby/gemset.nix | 0 .../languages}/ruby/iruby/shell.nix | 0 .../languages}/ruby/kernel.nix | 0 .../languages}/ruby/module.nix | 0 .../languages}/ruby/solargraph.nix | 0 .../languages}/rust/all_package_names.nix | 0 .../languages}/rust/default.nix | 0 .../languages}/rust/evcxr/default.nix | 0 .../rust/evcxr/python/build_init_evcxr.py | 0 .../languages}/rust/evcxr/withPackages.nix | 0 .../rust/generate_all_package_names.sh | 0 .../languages}/rust/kernel.nix | 0 .../language_server_rust_analyzer/Cargo.toml | 0 .../language_server_rust_analyzer/config.nix | 0 .../logo-square.svg | 0 .../lsp-types.nix | 0 .../myers-diff.nix | 0 .../language_server_rust_analyzer/rnls.nix | 0 .../rust-analyzer-logo-64x64.png | Bin .../languages}/rust/logo-LICENSE.md | 0 .../languages}/rust/module.nix | 0 .../languages}/rust/rust-logo-32x32.png | Bin .../languages}/rust/rust-logo-64x64.png | Bin {shells => modules/shells}/ICON_LICENSE.txt | 0 {shells => modules/shells}/bash/default.nix | 0 {shells => modules/shells}/bash/module.nix | 0 {shells => modules/shells}/common.nix | 0 {shells => modules/shells}/default_icon.png | Bin {shells => modules/shells}/default_icon.xcf | Bin .../shells}/default_icon_64x64.png | Bin .../shells}/default_icon_64x64.xcf | Bin {shells => modules/shells}/fish/color.sh | 0 {shells => modules/shells}/fish/default.nix | 0 {shells => modules/shells}/fish/fish.nix | 0 .../shells}/fish/icon-64x64.png | Bin .../shells}/fish/icon-64x64.xcf | Bin {shells => modules/shells}/fish/icon.xcf | Bin {shells => modules/shells}/fish/module.nix | 0 {shells => modules/shells}/zsh/default.nix | 0 {shells => modules/shells}/zsh/module.nix | 0 .../shells}/zsh/zsh-with-theme/color.sh | 0 .../shells}/zsh/zsh-with-theme/default.nix | 0 {misc => modules/testing}/builds-forever.nix | 0 .../tools}/fuse-indexer/default.nix | 0 .../tools}/powerline/config/colors.json | 0 .../config/colorschemes/default.json | 0 .../config/colorschemes/ipython/__main__.json | 0 .../config/colorschemes/pdb/__main__.json | 0 .../config/colorschemes/pdb/default.json | 0 .../config/colorschemes/pdb/solarized.json | 0 .../config/colorschemes/shell/__main__.json | 0 .../config/colorschemes/shell/default.json | 0 .../config/colorschemes/shell/solarized.json | 0 .../config/colorschemes/solarized.json | 0 .../config/colorschemes/tmux/default.json | 0 .../config/colorschemes/tmux/solarized.json | 0 .../config/colorschemes/vim/__main__.json | 0 .../config/colorschemes/vim/default.json | 0 .../config/colorschemes/vim/solarized.json | 0 .../colorschemes/vim/solarizedlight.json | 0 .../tools}/powerline/config/config.json | 0 .../tools}/powerline/config/themes/ascii.json | 0 .../powerline/config/themes/ipython/in.json | 0 .../powerline/config/themes/ipython/in2.json | 0 .../powerline/config/themes/ipython/out.json | 0 .../config/themes/ipython/rewrite.json | 0 .../powerline/config/themes/pdb/default.json | 0 .../powerline/config/themes/powerline.json | 0 .../config/themes/powerline_terminus.json | 0 .../config/themes/powerline_unicode7.json | 0 .../config/themes/shell/__main__.json | 0 .../config/themes/shell/continuation.json | 0 .../config/themes/shell/default.json | 0 .../config/themes/shell/default_leftonly.json | 0 .../powerline/config/themes/shell/select.json | 0 .../powerline/config/themes/tmux/default.json | 0 .../powerline/config/themes/unicode.json | 0 .../config/themes/unicode_terminus.json | 0 .../themes/unicode_terminus_condensed.json | 0 .../powerline/config/themes/vim/__main__.json | 0 .../powerline/config/themes/vim/cmdwin.json | 0 .../powerline/config/themes/vim/default.json | 0 .../powerline/config/themes/vim/help.json | 0 .../config/themes/vim/plugin_commandt.json | 0 .../themes/vim/plugin_gundo-preview.json | 0 .../config/themes/vim/plugin_gundo.json | 0 .../config/themes/vim/plugin_nerdtree.json | 0 .../powerline/config/themes/vim/quickfix.json | 0 .../powerline/config/themes/vim/tabline.json | 0 .../powerline/config/themes/wm/default.json | 0 .../tools}/powerline/default.nix | 0 .../tools}/powerline/tmux-mem-cpu-load.nix | 0 .../tools}/sqlite-indexer/default.nix | 2 +- nix/evaluate-config.nix | 47 ++++++++++++++++++ {codedown => nix}/makeEnvironment.nix | 0 {codedown => nix}/uiMetadata.nix | 0 .../validateCodeDownEnvironment.nix | 0 overlays.nix | 3 -- shell.nix | 14 ------ 291 files changed, 56 insertions(+), 73 deletions(-) delete mode 100644 codedown/evaluate-config.nix rename {exporters => modules/exporters}/fix-asciidoc.patch (100%) rename {exporters => modules/exporters}/module.nix (100%) rename {exporters => modules/exporters}/nbconvert.nix (100%) rename {exporters => modules/exporters}/nbconvert/beamer.nix (100%) rename {exporters => modules/exporters}/nbconvert/slidy.nix (100%) rename {language_servers => modules/language_servers}/diagnostic-languageserver/default.nix (100%) rename {language_servers => modules/language_servers}/diagnostic-languageserver/generate.sh (100%) rename {language_servers => modules/language_servers}/diagnostic-languageserver/node-env.nix (100%) rename {language_servers => modules/language_servers}/diagnostic-languageserver/node-packages.json (100%) rename {language_servers => modules/language_servers}/diagnostic-languageserver/node-packages.nix (100%) rename {language_servers => modules/language_servers}/markdown-spellcheck-lsp/default.nix (100%) rename {language_servers => modules/language_servers}/markdown-spellcheck-lsp/module.nix (100%) rename {language_servers => modules/language_servers}/markdown-spellcheck-lsp/pen-alt.png (100%) rename {language_servers => modules/language_servers}/markdown-spellcheck-lsp/pen-alt.svg (100%) rename {languages => modules/languages}/.gitignore (100%) rename {languages => modules/languages}/bash/bash-logo-128x128.png (100%) rename {languages => modules/languages}/bash/default.nix (100%) rename {languages => modules/languages}/bash/kernel.nix (100%) rename {languages => modules/languages}/bash/language_server_bash/default.nix (100%) rename {languages => modules/languages}/bash/man-with-pages.nix (100%) rename {languages => modules/languages}/bash/metadata.nix (100%) rename {languages => modules/languages}/bash/module.nix (100%) rename {languages => modules/languages}/clojure/clojure-logo-32x32.png (100%) rename {languages => modules/languages}/clojure/clojure-logo-64x64.png (100%) rename {languages => modules/languages}/clojure/clojure-lsp.nix (100%) rename {languages => modules/languages}/clojure/default.nix (100%) rename {languages => modules/languages}/clojure/home_folder/.config/clojupyter.edn (100%) rename {languages => modules/languages}/clojure/home_folder/project.clj (100%) rename {languages => modules/languages}/clojure/home_folder/src/project/core.clj (100%) rename {languages => modules/languages}/clojure/home_folder/test/project/core_test.clj (100%) rename {languages => modules/languages}/clojure/kernel.nix (100%) rename {languages => modules/languages}/clojure/language-server.nix (100%) rename {languages => modules/languages}/clojure/module.nix (100%) rename {languages => modules/languages}/common.nix (100%) rename {languages => modules/languages}/coq/coq_jupyter/default.nix (100%) rename {languages => modules/languages}/coq/coq_jupyter/kernel.nix (100%) rename {languages => modules/languages}/coq/default.nix (100%) rename {languages => modules/languages}/coq/kernel.nix (100%) rename {languages => modules/languages}/coq/module.nix (100%) rename {languages => modules/languages}/cpp/ccls.nix (100%) rename {languages => modules/languages}/cpp/cpp11-logo-64x64.png (100%) rename {languages => modules/languages}/cpp/cpp14-logo-64x64.png (100%) rename {languages => modules/languages}/cpp/cpp17-logo-64x64.png (100%) rename {languages => modules/languages}/cpp/cpp2a-logo-64x64.png (100%) rename {languages => modules/languages}/cpp/default.nix (100%) rename {languages => modules/languages}/cpp/kernel_xeus.nix (100%) rename {languages => modules/languages}/cpp/module.nix (100%) rename {languages => modules/languages}/cpp/old/kernel_cling.nix (100%) rename {languages => modules/languages}/cpp/xeus-cling.svg (100%) rename {languages => modules/languages}/cpp/xeus-cling/0001-Fix-bug-in-extract_filename.patch (100%) rename {languages => modules/languages}/cpp/xeus-cling/0002-Don-t-pass-extra-includes-configure-this-with-flags.patch (100%) rename {languages => modules/languages}/cpp/xeus-cling/xeus-cling.nix (100%) rename {languages => modules/languages}/cpp/xeusMisc.nix (100%) rename {languages => modules/languages}/go/default.nix (100%) rename {languages => modules/languages}/go/go-logo-32x32.png (100%) rename {languages => modules/languages}/go/go-logo-64x64.png (100%) rename {languages => modules/languages}/go/kernel.nix (100%) rename {languages => modules/languages}/go/language-server-gopls.nix (100%) rename {languages => modules/languages}/go/module.nix (100%) rename {languages => modules/languages}/haskell/compilers.nix (100%) rename {languages => modules/languages}/haskell/default.nix (100%) rename {languages => modules/languages}/haskell/haskell-logo-32x32.png (100%) rename {languages => modules/languages}/haskell/haskell-logo-64x64.png (100%) rename {languages => modules/languages}/haskell/kernel.nix (100%) rename {languages => modules/languages}/haskell/language-server-hls/config.nix (100%) rename {languages => modules/languages}/haskell/language-server-hls/default.nix (100%) rename {languages => modules/languages}/haskell/language-server-hls/hls-icon-64x64.png (100%) rename {languages => modules/languages}/haskell/language-server-hls/hls-logo.png (100%) rename {languages => modules/languages}/haskell/language-server-hls/hnls-version.nix (100%) rename {languages => modules/languages}/haskell/language-server-hls/hnls.nix (100%) rename {languages => modules/languages}/haskell/language-server-hls/hnls_update.sh (100%) rename {languages => modules/languages}/haskell/language-server-hls/icon_64x64.xcf (100%) rename {languages => modules/languages}/haskell/language-server-hls/lsp-types.nix (100%) rename {languages => modules/languages}/haskell/language-server-hls/myers-diff.nix (100%) rename {languages => modules/languages}/haskell/module.nix (100%) rename {languages => modules/languages}/haskell/old/compilers.nix (100%) rename {languages => modules/languages}/haskell/old/default_haskellnix.nix (100%) rename {languages => modules/languages}/haskell/old/generate.nix (100%) rename {languages => modules/languages}/haskell/old/ihaskell.nix (100%) rename {languages => modules/languages}/haskell/old/util.nix (100%) rename {languages => modules/languages}/haskell/settings_schema.nix (100%) rename {languages => modules/languages}/haskell/util.nix (100%) rename {languages => modules/languages}/julia/default.nix (100%) rename {languages => modules/languages}/julia/julia-logo-32x32.png (100%) rename {languages => modules/languages}/julia/julia-logo-64x64.png (100%) rename {languages => modules/languages}/julia/julia-modules/default.nix (100%) rename {languages => modules/languages}/julia/julia-modules/depot.nix (100%) rename {languages => modules/languages}/julia/julia-modules/extra-libs.nix (100%) rename {languages => modules/languages}/julia/julia-modules/extra-python-packages.nix (100%) rename {languages => modules/languages}/julia/julia-modules/extract_artifacts.jl (100%) rename {languages => modules/languages}/julia/julia-modules/extract_artifacts_16.jl (100%) rename {languages => modules/languages}/julia/julia-modules/generate-package-names.nix (100%) rename {languages => modules/languages}/julia/julia-modules/generate_packages_names.sh (100%) rename {languages => modules/languages}/julia/julia-modules/indexing/combine_indices.py (100%) rename {languages => modules/languages}/julia/julia-modules/indexing/default.nix (100%) rename {languages => modules/languages}/julia/julia-modules/indexing/index-stdlib.jl (100%) rename {languages => modules/languages}/julia/julia-modules/indexing/index_packages.py (100%) rename {languages => modules/languages}/julia/julia-modules/indexing/indexpackage.jl (100%) rename {languages => modules/languages}/julia/julia-modules/package-closure.nix (100%) rename {languages => modules/languages}/julia/julia-modules/package-names.nix (100%) rename {languages => modules/languages}/julia/julia-modules/python/dag.py (100%) rename {languages => modules/languages}/julia/julia-modules/python/dedup_overrides.py (100%) rename {languages => modules/languages}/julia/julia-modules/python/extract_artifacts.py (100%) rename {languages => modules/languages}/julia/julia-modules/python/find_package_implications.py (100%) rename {languages => modules/languages}/julia/julia-modules/python/format_overrides.py (100%) rename {languages => modules/languages}/julia/julia-modules/python/minimal_registry.py (100%) rename {languages => modules/languages}/julia/julia-modules/python/sources_nix.py (100%) rename {languages => modules/languages}/julia/julia-modules/python/util.py (100%) rename {languages => modules/languages}/julia/julia-modules/registry.nix (100%) rename {languages => modules/languages}/julia/julia-modules/tests/.gitignore (100%) rename {languages => modules/languages}/julia/julia-modules/tests/README.md (100%) rename {languages => modules/languages}/julia/julia-modules/tests/julia-top-n/app/Main.hs (100%) rename {languages => modules/languages}/julia/julia-modules/tests/julia-top-n/default.nix (100%) rename {languages => modules/languages}/julia/julia-modules/tests/julia-top-n/julia-top-n.cabal (100%) rename {languages => modules/languages}/julia/julia-modules/tests/julia-top-n/package.yaml (100%) rename {languages => modules/languages}/julia/julia-modules/tests/julia-top-n/stack.yaml (100%) rename {languages => modules/languages}/julia/julia-modules/tests/julia-top-n/stack.yaml.lock (100%) rename {languages => modules/languages}/julia/julia-modules/tests/process_top_n.py (100%) rename {languages => modules/languages}/julia/julia-modules/tests/run_tests.sh (100%) rename {languages => modules/languages}/julia/julia-modules/tests/top-julia-packages.nix (100%) rename {languages => modules/languages}/julia/julia-modules/util.nix (100%) rename {languages => modules/languages}/julia/kernel.nix (100%) rename {languages => modules/languages}/julia/language-server-LanguageServer.nix (100%) rename {languages => modules/languages}/julia/module.nix (100%) rename {languages => modules/languages}/octave/default.nix (100%) rename {languages => modules/languages}/octave/kernel.nix (100%) rename {languages => modules/languages}/octave/metadata.nix (100%) rename {languages => modules/languages}/octave/module.nix (100%) rename {languages => modules/languages}/octave/octave-logo-32x32.png (100%) rename {languages => modules/languages}/octave/octave-logo-64x64.png (100%) rename {languages => modules/languages}/octave/octave.nix (100%) rename {languages => modules/languages}/postgres/default.nix (100%) rename {languages => modules/languages}/postgres/kernel.nix (100%) rename {languages => modules/languages}/postgres/logo.svg (100%) rename {languages => modules/languages}/postgres/module.nix (100%) rename {languages => modules/languages}/postgres/postgres-logo-32x32.png (100%) rename {languages => modules/languages}/postgres/postgres-logo-64x64.png (100%) rename {languages => modules/languages}/python/default.nix (100%) rename {languages => modules/languages}/python/envs/.gitignore (100%) rename {languages => modules/languages}/python/envs/python311/poetry.lock (100%) rename {languages => modules/languages}/python/envs/python311/pyproject.toml (100%) rename {languages => modules/languages}/python/envs/python311/python311/__init__.py (100%) rename {languages => modules/languages}/python/envs/python38/poetry-overrides.nix (100%) rename {languages => modules/languages}/python/envs/python38/poetry.lock (100%) rename {languages => modules/languages}/python/envs/python38/pyproject.toml (100%) rename {languages => modules/languages}/python/envs/python38/python38/__init__.py (100%) rename {languages => modules/languages}/python/envs/python38/shell.nix (100%) rename {languages => modules/languages}/python/envs/python39/poetry.lock (100%) rename {languages => modules/languages}/python/envs/python39/pyproject.toml (100%) rename {languages => modules/languages}/python/envs/python39/python39/__init__.py (100%) rename {languages => modules/languages}/python/home_folder/.config/pycodestyle (100%) rename {languages => modules/languages}/python/home_folder/.ipython/profile_default/ipython_config.py (100%) rename {languages => modules/languages}/python/home_folder/ipython_config.py (100%) rename {languages => modules/languages}/python/home_folder/pycodestyle (100%) rename {languages => modules/languages}/python/kernel.nix (100%) rename {languages => modules/languages}/python/language_servers/language_server_flake8/config.nix (100%) rename {languages => modules/languages}/python/language_servers/language_server_jedi/config.nix (100%) rename {languages => modules/languages}/python/language_servers/language_server_jedi/jedi-logo.png (100%) rename {languages => modules/languages}/python/language_servers/language_server_microsoft/config.nix (100%) rename {languages => modules/languages}/python/language_servers/language_server_microsoft/generate_cache.py (100%) rename {languages => modules/languages}/python/language_servers/language_server_palantir/config.nix (100%) rename {languages => modules/languages}/python/language_servers/language_server_pycodestyle/config.nix (100%) rename {languages => modules/languages}/python/language_servers/language_server_pylint/config.nix (100%) rename {languages => modules/languages}/python/language_servers/language_server_pylint/pylint-logo.png (100%) rename {languages => modules/languages}/python/language_servers/language_server_pyright/config.nix (100%) rename {languages => modules/languages}/python/language_servers/language_server_pyright/icon.png (100%) rename {languages => modules/languages}/python/language_servers/language_server_pyright/icon_scaled.xcf (100%) rename {languages => modules/languages}/python/language_servers/language_server_pyright/icon_scaled_64x64.png (100%) rename {languages => modules/languages}/python/language_servers/language_server_pyright/icon_scaled_64x64.xcf (100%) rename {languages => modules/languages}/python/language_servers/language_server_pythonlsp/config.nix (100%) rename {languages => modules/languages}/python/language_servers/pylsp_initialization_options.nix (100%) rename {languages => modules/languages}/python/manylinux1.nix (100%) rename {languages => modules/languages}/python/module.nix (100%) rename {languages => modules/languages}/python/python-logo-32x32.png (100%) rename {languages => modules/languages}/python/python-logo-64x64.png (100%) rename {languages => modules/languages}/python/variable_inspector.py (100%) rename {languages => modules/languages}/r/default.nix (100%) rename {languages => modules/languages}/r/kernel.nix (100%) rename {languages => modules/languages}/r/language-server-languageserver/default.nix (100%) rename {languages => modules/languages}/r/language-server-languageserver/languageserver.nix (100%) rename {languages => modules/languages}/r/module.nix (100%) rename {languages => modules/languages}/r/r-logo-64x64.png (100%) rename {languages => modules/languages}/ruby/default.nix (100%) rename {languages => modules/languages}/ruby/iruby-32x32.png (100%) rename {languages => modules/languages}/ruby/iruby-64x64.png (100%) rename {languages => modules/languages}/ruby/iruby/Gemfile (100%) rename {languages => modules/languages}/ruby/iruby/Gemfile.lock (100%) rename {languages => modules/languages}/ruby/iruby/default.nix (100%) rename {languages => modules/languages}/ruby/iruby/gemset.nix (100%) rename {languages => modules/languages}/ruby/iruby/shell.nix (100%) rename {languages => modules/languages}/ruby/kernel.nix (100%) rename {languages => modules/languages}/ruby/module.nix (100%) rename {languages => modules/languages}/ruby/solargraph.nix (100%) rename {languages => modules/languages}/rust/all_package_names.nix (100%) rename {languages => modules/languages}/rust/default.nix (100%) rename {languages => modules/languages}/rust/evcxr/default.nix (100%) rename {languages => modules/languages}/rust/evcxr/python/build_init_evcxr.py (100%) rename {languages => modules/languages}/rust/evcxr/withPackages.nix (100%) rename {languages => modules/languages}/rust/generate_all_package_names.sh (100%) rename {languages => modules/languages}/rust/kernel.nix (100%) rename {languages => modules/languages}/rust/language_server_rust_analyzer/Cargo.toml (100%) rename {languages => modules/languages}/rust/language_server_rust_analyzer/config.nix (100%) rename {languages => modules/languages}/rust/language_server_rust_analyzer/logo-square.svg (100%) rename {languages => modules/languages}/rust/language_server_rust_analyzer/lsp-types.nix (100%) rename {languages => modules/languages}/rust/language_server_rust_analyzer/myers-diff.nix (100%) rename {languages => modules/languages}/rust/language_server_rust_analyzer/rnls.nix (100%) rename {languages => modules/languages}/rust/language_server_rust_analyzer/rust-analyzer-logo-64x64.png (100%) rename {languages => modules/languages}/rust/logo-LICENSE.md (100%) rename {languages => modules/languages}/rust/module.nix (100%) rename {languages => modules/languages}/rust/rust-logo-32x32.png (100%) rename {languages => modules/languages}/rust/rust-logo-64x64.png (100%) rename {shells => modules/shells}/ICON_LICENSE.txt (100%) rename {shells => modules/shells}/bash/default.nix (100%) rename {shells => modules/shells}/bash/module.nix (100%) rename {shells => modules/shells}/common.nix (100%) rename {shells => modules/shells}/default_icon.png (100%) rename {shells => modules/shells}/default_icon.xcf (100%) rename {shells => modules/shells}/default_icon_64x64.png (100%) rename {shells => modules/shells}/default_icon_64x64.xcf (100%) rename {shells => modules/shells}/fish/color.sh (100%) rename {shells => modules/shells}/fish/default.nix (100%) rename {shells => modules/shells}/fish/fish.nix (100%) rename {shells => modules/shells}/fish/icon-64x64.png (100%) rename {shells => modules/shells}/fish/icon-64x64.xcf (100%) rename {shells => modules/shells}/fish/icon.xcf (100%) rename {shells => modules/shells}/fish/module.nix (100%) rename {shells => modules/shells}/zsh/default.nix (100%) rename {shells => modules/shells}/zsh/module.nix (100%) rename {shells => modules/shells}/zsh/zsh-with-theme/color.sh (100%) rename {shells => modules/shells}/zsh/zsh-with-theme/default.nix (100%) rename {misc => modules/testing}/builds-forever.nix (100%) rename {tools => modules/tools}/fuse-indexer/default.nix (100%) rename {tools => modules/tools}/powerline/config/colors.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/default.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/ipython/__main__.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/pdb/__main__.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/pdb/default.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/pdb/solarized.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/shell/__main__.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/shell/default.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/shell/solarized.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/solarized.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/tmux/default.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/tmux/solarized.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/vim/__main__.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/vim/default.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/vim/solarized.json (100%) rename {tools => modules/tools}/powerline/config/colorschemes/vim/solarizedlight.json (100%) rename {tools => modules/tools}/powerline/config/config.json (100%) rename {tools => modules/tools}/powerline/config/themes/ascii.json (100%) rename {tools => modules/tools}/powerline/config/themes/ipython/in.json (100%) rename {tools => modules/tools}/powerline/config/themes/ipython/in2.json (100%) rename {tools => modules/tools}/powerline/config/themes/ipython/out.json (100%) rename {tools => modules/tools}/powerline/config/themes/ipython/rewrite.json (100%) rename {tools => modules/tools}/powerline/config/themes/pdb/default.json (100%) rename {tools => modules/tools}/powerline/config/themes/powerline.json (100%) rename {tools => modules/tools}/powerline/config/themes/powerline_terminus.json (100%) rename {tools => modules/tools}/powerline/config/themes/powerline_unicode7.json (100%) rename {tools => modules/tools}/powerline/config/themes/shell/__main__.json (100%) rename {tools => modules/tools}/powerline/config/themes/shell/continuation.json (100%) rename {tools => modules/tools}/powerline/config/themes/shell/default.json (100%) rename {tools => modules/tools}/powerline/config/themes/shell/default_leftonly.json (100%) rename {tools => modules/tools}/powerline/config/themes/shell/select.json (100%) rename {tools => modules/tools}/powerline/config/themes/tmux/default.json (100%) rename {tools => modules/tools}/powerline/config/themes/unicode.json (100%) rename {tools => modules/tools}/powerline/config/themes/unicode_terminus.json (100%) rename {tools => modules/tools}/powerline/config/themes/unicode_terminus_condensed.json (100%) rename {tools => modules/tools}/powerline/config/themes/vim/__main__.json (100%) rename {tools => modules/tools}/powerline/config/themes/vim/cmdwin.json (100%) rename {tools => modules/tools}/powerline/config/themes/vim/default.json (100%) rename {tools => modules/tools}/powerline/config/themes/vim/help.json (100%) rename {tools => modules/tools}/powerline/config/themes/vim/plugin_commandt.json (100%) rename {tools => modules/tools}/powerline/config/themes/vim/plugin_gundo-preview.json (100%) rename {tools => modules/tools}/powerline/config/themes/vim/plugin_gundo.json (100%) rename {tools => modules/tools}/powerline/config/themes/vim/plugin_nerdtree.json (100%) rename {tools => modules/tools}/powerline/config/themes/vim/quickfix.json (100%) rename {tools => modules/tools}/powerline/config/themes/vim/tabline.json (100%) rename {tools => modules/tools}/powerline/config/themes/wm/default.json (100%) rename {tools => modules/tools}/powerline/default.nix (100%) rename {tools => modules/tools}/powerline/tmux-mem-cpu-load.nix (100%) rename {tools => modules/tools}/sqlite-indexer/default.nix (98%) create mode 100644 nix/evaluate-config.nix rename {codedown => nix}/makeEnvironment.nix (100%) rename {codedown => nix}/uiMetadata.nix (100%) rename {codedown => nix}/validateCodeDownEnvironment.nix (100%) delete mode 100644 overlays.nix delete mode 100644 shell.nix diff --git a/codedown.nix b/codedown.nix index 9d6a6a9..81bc8fb 100644 --- a/codedown.nix +++ b/codedown.nix @@ -5,7 +5,7 @@ }: let - common = pkgsStable.callPackage ./languages/common.nix {}; + common = pkgsStable.callPackage ./modules/languages/common.nix {}; callPackage = pkgsStable.callPackage; @@ -14,10 +14,10 @@ let in rec { - spellchecker = pkgsMaster.callPackage ./language_servers/markdown-spellcheck-lsp {}; + spellchecker = pkgsMaster.callPackage ./modules/language_servers/markdown-spellcheck-lsp {}; testing = { - builds-forever = pkgsMaster.callPackage ./misc/builds-forever.nix {}; + builds-forever = pkgsMaster.callPackage ./modules/testing/builds-forever.nix {}; }; # Exported so clients can build searchers for other package sets, like "codedown.searcher nixpkgs" @@ -27,7 +27,7 @@ rec { common.safeEval (lib.attrByPath ["meta" "settingsSchema"] [] value) ) languages; - evaluateConfig = callPackage ./codedown/evaluate-config.nix { + evaluateConfig = callPackage ./nix/evaluate-config.nix { inherit pkgsStable pkgsMaster; }; @@ -56,11 +56,11 @@ rec { languages = everythingEnv.config.builtKernels; - makeEnvironment = callPackage ./codedown/makeEnvironment.nix { + makeEnvironment = callPackage ./nix/makeEnvironment.nix { inherit pkgsStable pkgsMaster; }; - validateCodeDownEnvironment = callPackage ./codedown/validateCodeDownEnvironment.nix {}; + validateCodeDownEnvironment = callPackage ./nix/validateCodeDownEnvironment.nix {}; # Exposed so it's easier to compute build dependencies in the presence of IFD inherit pkgsStable pkgsMaster requiredPackages; diff --git a/codedown/evaluate-config.nix b/codedown/evaluate-config.nix deleted file mode 100644 index 981f7ce..0000000 --- a/codedown/evaluate-config.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ lib -, pkgsStable -, pkgsMaster -}: - -config: - -lib.evalModules { - specialArgs = { - nixosOptionsToSettingsSchema = pkgsStable.callPackage ../modules/base/nixos-options-to-settings-schema.nix {}; - }; - modules = [ - ../modules/base.nix - - ../exporters/module.nix - - ../languages/bash/module.nix - ../languages/clojure/module.nix - ../languages/coq/module.nix - ../languages/cpp/module.nix - ../languages/go/module.nix - ../languages/haskell/module.nix - ../languages/julia/module.nix - ../languages/octave/module.nix - ../languages/postgres/module.nix - ../languages/python/module.nix - ../languages/r/module.nix - ../languages/ruby/module.nix - ../languages/rust/module.nix - - ../language_servers/markdown-spellcheck-lsp/module.nix - - ../shells/bash/module.nix - ../shells/fish/module.nix - ../shells/zsh/module.nix - - { - config = { - pkgs = pkgsStable; - inherit pkgsMaster; - }; - } - { - inherit config; - } - ]; -} diff --git a/default.nix b/default.nix index 4b80bf5..e0f38e7 100644 --- a/default.nix +++ b/default.nix @@ -3,7 +3,7 @@ }: let - overlays = [(import ./overlays.nix)]; + overlays = []; pkgsStable = import (fetchFromGitHub { owner = "NixOS"; diff --git a/flake.nix b/flake.nix index 0499acc..0da83a5 100644 --- a/flake.nix +++ b/flake.nix @@ -9,7 +9,7 @@ outputs = { self, nixpkgs, nixpkgs-master, flake-utils }@inputs: flake-utils.lib.eachDefaultSystem (system: let - overlays = [(import ./overlays.nix)]; + overlays = []; pkgsStable = import nixpkgs { inherit system overlays; }; pkgsMaster = import nixpkgs-master { inherit system overlays; }; diff --git a/exporters/fix-asciidoc.patch b/modules/exporters/fix-asciidoc.patch similarity index 100% rename from exporters/fix-asciidoc.patch rename to modules/exporters/fix-asciidoc.patch diff --git a/exporters/module.nix b/modules/exporters/module.nix similarity index 100% rename from exporters/module.nix rename to modules/exporters/module.nix diff --git a/exporters/nbconvert.nix b/modules/exporters/nbconvert.nix similarity index 100% rename from exporters/nbconvert.nix rename to modules/exporters/nbconvert.nix diff --git a/exporters/nbconvert/beamer.nix b/modules/exporters/nbconvert/beamer.nix similarity index 100% rename from exporters/nbconvert/beamer.nix rename to modules/exporters/nbconvert/beamer.nix diff --git a/exporters/nbconvert/slidy.nix b/modules/exporters/nbconvert/slidy.nix similarity index 100% rename from exporters/nbconvert/slidy.nix rename to modules/exporters/nbconvert/slidy.nix diff --git a/language_servers/diagnostic-languageserver/default.nix b/modules/language_servers/diagnostic-languageserver/default.nix similarity index 100% rename from language_servers/diagnostic-languageserver/default.nix rename to modules/language_servers/diagnostic-languageserver/default.nix diff --git a/language_servers/diagnostic-languageserver/generate.sh b/modules/language_servers/diagnostic-languageserver/generate.sh similarity index 100% rename from language_servers/diagnostic-languageserver/generate.sh rename to modules/language_servers/diagnostic-languageserver/generate.sh diff --git a/language_servers/diagnostic-languageserver/node-env.nix b/modules/language_servers/diagnostic-languageserver/node-env.nix similarity index 100% rename from language_servers/diagnostic-languageserver/node-env.nix rename to modules/language_servers/diagnostic-languageserver/node-env.nix diff --git a/language_servers/diagnostic-languageserver/node-packages.json b/modules/language_servers/diagnostic-languageserver/node-packages.json similarity index 100% rename from language_servers/diagnostic-languageserver/node-packages.json rename to modules/language_servers/diagnostic-languageserver/node-packages.json diff --git a/language_servers/diagnostic-languageserver/node-packages.nix b/modules/language_servers/diagnostic-languageserver/node-packages.nix similarity index 100% rename from language_servers/diagnostic-languageserver/node-packages.nix rename to modules/language_servers/diagnostic-languageserver/node-packages.nix diff --git a/language_servers/markdown-spellcheck-lsp/default.nix b/modules/language_servers/markdown-spellcheck-lsp/default.nix similarity index 100% rename from language_servers/markdown-spellcheck-lsp/default.nix rename to modules/language_servers/markdown-spellcheck-lsp/default.nix diff --git a/language_servers/markdown-spellcheck-lsp/module.nix b/modules/language_servers/markdown-spellcheck-lsp/module.nix similarity index 100% rename from language_servers/markdown-spellcheck-lsp/module.nix rename to modules/language_servers/markdown-spellcheck-lsp/module.nix diff --git a/language_servers/markdown-spellcheck-lsp/pen-alt.png b/modules/language_servers/markdown-spellcheck-lsp/pen-alt.png similarity index 100% rename from language_servers/markdown-spellcheck-lsp/pen-alt.png rename to modules/language_servers/markdown-spellcheck-lsp/pen-alt.png diff --git a/language_servers/markdown-spellcheck-lsp/pen-alt.svg b/modules/language_servers/markdown-spellcheck-lsp/pen-alt.svg similarity index 100% rename from language_servers/markdown-spellcheck-lsp/pen-alt.svg rename to modules/language_servers/markdown-spellcheck-lsp/pen-alt.svg diff --git a/languages/.gitignore b/modules/languages/.gitignore similarity index 100% rename from languages/.gitignore rename to modules/languages/.gitignore diff --git a/languages/bash/bash-logo-128x128.png b/modules/languages/bash/bash-logo-128x128.png similarity index 100% rename from languages/bash/bash-logo-128x128.png rename to modules/languages/bash/bash-logo-128x128.png diff --git a/languages/bash/default.nix b/modules/languages/bash/default.nix similarity index 100% rename from languages/bash/default.nix rename to modules/languages/bash/default.nix diff --git a/languages/bash/kernel.nix b/modules/languages/bash/kernel.nix similarity index 100% rename from languages/bash/kernel.nix rename to modules/languages/bash/kernel.nix diff --git a/languages/bash/language_server_bash/default.nix b/modules/languages/bash/language_server_bash/default.nix similarity index 100% rename from languages/bash/language_server_bash/default.nix rename to modules/languages/bash/language_server_bash/default.nix diff --git a/languages/bash/man-with-pages.nix b/modules/languages/bash/man-with-pages.nix similarity index 100% rename from languages/bash/man-with-pages.nix rename to modules/languages/bash/man-with-pages.nix diff --git a/languages/bash/metadata.nix b/modules/languages/bash/metadata.nix similarity index 100% rename from languages/bash/metadata.nix rename to modules/languages/bash/metadata.nix diff --git a/languages/bash/module.nix b/modules/languages/bash/module.nix similarity index 100% rename from languages/bash/module.nix rename to modules/languages/bash/module.nix diff --git a/languages/clojure/clojure-logo-32x32.png b/modules/languages/clojure/clojure-logo-32x32.png similarity index 100% rename from languages/clojure/clojure-logo-32x32.png rename to modules/languages/clojure/clojure-logo-32x32.png diff --git a/languages/clojure/clojure-logo-64x64.png b/modules/languages/clojure/clojure-logo-64x64.png similarity index 100% rename from languages/clojure/clojure-logo-64x64.png rename to modules/languages/clojure/clojure-logo-64x64.png diff --git a/languages/clojure/clojure-lsp.nix b/modules/languages/clojure/clojure-lsp.nix similarity index 100% rename from languages/clojure/clojure-lsp.nix rename to modules/languages/clojure/clojure-lsp.nix diff --git a/languages/clojure/default.nix b/modules/languages/clojure/default.nix similarity index 100% rename from languages/clojure/default.nix rename to modules/languages/clojure/default.nix diff --git a/languages/clojure/home_folder/.config/clojupyter.edn b/modules/languages/clojure/home_folder/.config/clojupyter.edn similarity index 100% rename from languages/clojure/home_folder/.config/clojupyter.edn rename to modules/languages/clojure/home_folder/.config/clojupyter.edn diff --git a/languages/clojure/home_folder/project.clj b/modules/languages/clojure/home_folder/project.clj similarity index 100% rename from languages/clojure/home_folder/project.clj rename to modules/languages/clojure/home_folder/project.clj diff --git a/languages/clojure/home_folder/src/project/core.clj b/modules/languages/clojure/home_folder/src/project/core.clj similarity index 100% rename from languages/clojure/home_folder/src/project/core.clj rename to modules/languages/clojure/home_folder/src/project/core.clj diff --git a/languages/clojure/home_folder/test/project/core_test.clj b/modules/languages/clojure/home_folder/test/project/core_test.clj similarity index 100% rename from languages/clojure/home_folder/test/project/core_test.clj rename to modules/languages/clojure/home_folder/test/project/core_test.clj diff --git a/languages/clojure/kernel.nix b/modules/languages/clojure/kernel.nix similarity index 100% rename from languages/clojure/kernel.nix rename to modules/languages/clojure/kernel.nix diff --git a/languages/clojure/language-server.nix b/modules/languages/clojure/language-server.nix similarity index 100% rename from languages/clojure/language-server.nix rename to modules/languages/clojure/language-server.nix diff --git a/languages/clojure/module.nix b/modules/languages/clojure/module.nix similarity index 100% rename from languages/clojure/module.nix rename to modules/languages/clojure/module.nix diff --git a/languages/common.nix b/modules/languages/common.nix similarity index 100% rename from languages/common.nix rename to modules/languages/common.nix diff --git a/languages/coq/coq_jupyter/default.nix b/modules/languages/coq/coq_jupyter/default.nix similarity index 100% rename from languages/coq/coq_jupyter/default.nix rename to modules/languages/coq/coq_jupyter/default.nix diff --git a/languages/coq/coq_jupyter/kernel.nix b/modules/languages/coq/coq_jupyter/kernel.nix similarity index 100% rename from languages/coq/coq_jupyter/kernel.nix rename to modules/languages/coq/coq_jupyter/kernel.nix diff --git a/languages/coq/default.nix b/modules/languages/coq/default.nix similarity index 100% rename from languages/coq/default.nix rename to modules/languages/coq/default.nix diff --git a/languages/coq/kernel.nix b/modules/languages/coq/kernel.nix similarity index 100% rename from languages/coq/kernel.nix rename to modules/languages/coq/kernel.nix diff --git a/languages/coq/module.nix b/modules/languages/coq/module.nix similarity index 100% rename from languages/coq/module.nix rename to modules/languages/coq/module.nix diff --git a/languages/cpp/ccls.nix b/modules/languages/cpp/ccls.nix similarity index 100% rename from languages/cpp/ccls.nix rename to modules/languages/cpp/ccls.nix diff --git a/languages/cpp/cpp11-logo-64x64.png b/modules/languages/cpp/cpp11-logo-64x64.png similarity index 100% rename from languages/cpp/cpp11-logo-64x64.png rename to modules/languages/cpp/cpp11-logo-64x64.png diff --git a/languages/cpp/cpp14-logo-64x64.png b/modules/languages/cpp/cpp14-logo-64x64.png similarity index 100% rename from languages/cpp/cpp14-logo-64x64.png rename to modules/languages/cpp/cpp14-logo-64x64.png diff --git a/languages/cpp/cpp17-logo-64x64.png b/modules/languages/cpp/cpp17-logo-64x64.png similarity index 100% rename from languages/cpp/cpp17-logo-64x64.png rename to modules/languages/cpp/cpp17-logo-64x64.png diff --git a/languages/cpp/cpp2a-logo-64x64.png b/modules/languages/cpp/cpp2a-logo-64x64.png similarity index 100% rename from languages/cpp/cpp2a-logo-64x64.png rename to modules/languages/cpp/cpp2a-logo-64x64.png diff --git a/languages/cpp/default.nix b/modules/languages/cpp/default.nix similarity index 100% rename from languages/cpp/default.nix rename to modules/languages/cpp/default.nix diff --git a/languages/cpp/kernel_xeus.nix b/modules/languages/cpp/kernel_xeus.nix similarity index 100% rename from languages/cpp/kernel_xeus.nix rename to modules/languages/cpp/kernel_xeus.nix diff --git a/languages/cpp/module.nix b/modules/languages/cpp/module.nix similarity index 100% rename from languages/cpp/module.nix rename to modules/languages/cpp/module.nix diff --git a/languages/cpp/old/kernel_cling.nix b/modules/languages/cpp/old/kernel_cling.nix similarity index 100% rename from languages/cpp/old/kernel_cling.nix rename to modules/languages/cpp/old/kernel_cling.nix diff --git a/languages/cpp/xeus-cling.svg b/modules/languages/cpp/xeus-cling.svg similarity index 100% rename from languages/cpp/xeus-cling.svg rename to modules/languages/cpp/xeus-cling.svg diff --git a/languages/cpp/xeus-cling/0001-Fix-bug-in-extract_filename.patch b/modules/languages/cpp/xeus-cling/0001-Fix-bug-in-extract_filename.patch similarity index 100% rename from languages/cpp/xeus-cling/0001-Fix-bug-in-extract_filename.patch rename to modules/languages/cpp/xeus-cling/0001-Fix-bug-in-extract_filename.patch diff --git a/languages/cpp/xeus-cling/0002-Don-t-pass-extra-includes-configure-this-with-flags.patch b/modules/languages/cpp/xeus-cling/0002-Don-t-pass-extra-includes-configure-this-with-flags.patch similarity index 100% rename from languages/cpp/xeus-cling/0002-Don-t-pass-extra-includes-configure-this-with-flags.patch rename to modules/languages/cpp/xeus-cling/0002-Don-t-pass-extra-includes-configure-this-with-flags.patch diff --git a/languages/cpp/xeus-cling/xeus-cling.nix b/modules/languages/cpp/xeus-cling/xeus-cling.nix similarity index 100% rename from languages/cpp/xeus-cling/xeus-cling.nix rename to modules/languages/cpp/xeus-cling/xeus-cling.nix diff --git a/languages/cpp/xeusMisc.nix b/modules/languages/cpp/xeusMisc.nix similarity index 100% rename from languages/cpp/xeusMisc.nix rename to modules/languages/cpp/xeusMisc.nix diff --git a/languages/go/default.nix b/modules/languages/go/default.nix similarity index 100% rename from languages/go/default.nix rename to modules/languages/go/default.nix diff --git a/languages/go/go-logo-32x32.png b/modules/languages/go/go-logo-32x32.png similarity index 100% rename from languages/go/go-logo-32x32.png rename to modules/languages/go/go-logo-32x32.png diff --git a/languages/go/go-logo-64x64.png b/modules/languages/go/go-logo-64x64.png similarity index 100% rename from languages/go/go-logo-64x64.png rename to modules/languages/go/go-logo-64x64.png diff --git a/languages/go/kernel.nix b/modules/languages/go/kernel.nix similarity index 100% rename from languages/go/kernel.nix rename to modules/languages/go/kernel.nix diff --git a/languages/go/language-server-gopls.nix b/modules/languages/go/language-server-gopls.nix similarity index 100% rename from languages/go/language-server-gopls.nix rename to modules/languages/go/language-server-gopls.nix diff --git a/languages/go/module.nix b/modules/languages/go/module.nix similarity index 100% rename from languages/go/module.nix rename to modules/languages/go/module.nix diff --git a/languages/haskell/compilers.nix b/modules/languages/haskell/compilers.nix similarity index 100% rename from languages/haskell/compilers.nix rename to modules/languages/haskell/compilers.nix diff --git a/languages/haskell/default.nix b/modules/languages/haskell/default.nix similarity index 100% rename from languages/haskell/default.nix rename to modules/languages/haskell/default.nix diff --git a/languages/haskell/haskell-logo-32x32.png b/modules/languages/haskell/haskell-logo-32x32.png similarity index 100% rename from languages/haskell/haskell-logo-32x32.png rename to modules/languages/haskell/haskell-logo-32x32.png diff --git a/languages/haskell/haskell-logo-64x64.png b/modules/languages/haskell/haskell-logo-64x64.png similarity index 100% rename from languages/haskell/haskell-logo-64x64.png rename to modules/languages/haskell/haskell-logo-64x64.png diff --git a/languages/haskell/kernel.nix b/modules/languages/haskell/kernel.nix similarity index 100% rename from languages/haskell/kernel.nix rename to modules/languages/haskell/kernel.nix diff --git a/languages/haskell/language-server-hls/config.nix b/modules/languages/haskell/language-server-hls/config.nix similarity index 100% rename from languages/haskell/language-server-hls/config.nix rename to modules/languages/haskell/language-server-hls/config.nix diff --git a/languages/haskell/language-server-hls/default.nix b/modules/languages/haskell/language-server-hls/default.nix similarity index 100% rename from languages/haskell/language-server-hls/default.nix rename to modules/languages/haskell/language-server-hls/default.nix diff --git a/languages/haskell/language-server-hls/hls-icon-64x64.png b/modules/languages/haskell/language-server-hls/hls-icon-64x64.png similarity index 100% rename from languages/haskell/language-server-hls/hls-icon-64x64.png rename to modules/languages/haskell/language-server-hls/hls-icon-64x64.png diff --git a/languages/haskell/language-server-hls/hls-logo.png b/modules/languages/haskell/language-server-hls/hls-logo.png similarity index 100% rename from languages/haskell/language-server-hls/hls-logo.png rename to modules/languages/haskell/language-server-hls/hls-logo.png diff --git a/languages/haskell/language-server-hls/hnls-version.nix b/modules/languages/haskell/language-server-hls/hnls-version.nix similarity index 100% rename from languages/haskell/language-server-hls/hnls-version.nix rename to modules/languages/haskell/language-server-hls/hnls-version.nix diff --git a/languages/haskell/language-server-hls/hnls.nix b/modules/languages/haskell/language-server-hls/hnls.nix similarity index 100% rename from languages/haskell/language-server-hls/hnls.nix rename to modules/languages/haskell/language-server-hls/hnls.nix diff --git a/languages/haskell/language-server-hls/hnls_update.sh b/modules/languages/haskell/language-server-hls/hnls_update.sh similarity index 100% rename from languages/haskell/language-server-hls/hnls_update.sh rename to modules/languages/haskell/language-server-hls/hnls_update.sh diff --git a/languages/haskell/language-server-hls/icon_64x64.xcf b/modules/languages/haskell/language-server-hls/icon_64x64.xcf similarity index 100% rename from languages/haskell/language-server-hls/icon_64x64.xcf rename to modules/languages/haskell/language-server-hls/icon_64x64.xcf diff --git a/languages/haskell/language-server-hls/lsp-types.nix b/modules/languages/haskell/language-server-hls/lsp-types.nix similarity index 100% rename from languages/haskell/language-server-hls/lsp-types.nix rename to modules/languages/haskell/language-server-hls/lsp-types.nix diff --git a/languages/haskell/language-server-hls/myers-diff.nix b/modules/languages/haskell/language-server-hls/myers-diff.nix similarity index 100% rename from languages/haskell/language-server-hls/myers-diff.nix rename to modules/languages/haskell/language-server-hls/myers-diff.nix diff --git a/languages/haskell/module.nix b/modules/languages/haskell/module.nix similarity index 100% rename from languages/haskell/module.nix rename to modules/languages/haskell/module.nix diff --git a/languages/haskell/old/compilers.nix b/modules/languages/haskell/old/compilers.nix similarity index 100% rename from languages/haskell/old/compilers.nix rename to modules/languages/haskell/old/compilers.nix diff --git a/languages/haskell/old/default_haskellnix.nix b/modules/languages/haskell/old/default_haskellnix.nix similarity index 100% rename from languages/haskell/old/default_haskellnix.nix rename to modules/languages/haskell/old/default_haskellnix.nix diff --git a/languages/haskell/old/generate.nix b/modules/languages/haskell/old/generate.nix similarity index 100% rename from languages/haskell/old/generate.nix rename to modules/languages/haskell/old/generate.nix diff --git a/languages/haskell/old/ihaskell.nix b/modules/languages/haskell/old/ihaskell.nix similarity index 100% rename from languages/haskell/old/ihaskell.nix rename to modules/languages/haskell/old/ihaskell.nix diff --git a/languages/haskell/old/util.nix b/modules/languages/haskell/old/util.nix similarity index 100% rename from languages/haskell/old/util.nix rename to modules/languages/haskell/old/util.nix diff --git a/languages/haskell/settings_schema.nix b/modules/languages/haskell/settings_schema.nix similarity index 100% rename from languages/haskell/settings_schema.nix rename to modules/languages/haskell/settings_schema.nix diff --git a/languages/haskell/util.nix b/modules/languages/haskell/util.nix similarity index 100% rename from languages/haskell/util.nix rename to modules/languages/haskell/util.nix diff --git a/languages/julia/default.nix b/modules/languages/julia/default.nix similarity index 100% rename from languages/julia/default.nix rename to modules/languages/julia/default.nix diff --git a/languages/julia/julia-logo-32x32.png b/modules/languages/julia/julia-logo-32x32.png similarity index 100% rename from languages/julia/julia-logo-32x32.png rename to modules/languages/julia/julia-logo-32x32.png diff --git a/languages/julia/julia-logo-64x64.png b/modules/languages/julia/julia-logo-64x64.png similarity index 100% rename from languages/julia/julia-logo-64x64.png rename to modules/languages/julia/julia-logo-64x64.png diff --git a/languages/julia/julia-modules/default.nix b/modules/languages/julia/julia-modules/default.nix similarity index 100% rename from languages/julia/julia-modules/default.nix rename to modules/languages/julia/julia-modules/default.nix diff --git a/languages/julia/julia-modules/depot.nix b/modules/languages/julia/julia-modules/depot.nix similarity index 100% rename from languages/julia/julia-modules/depot.nix rename to modules/languages/julia/julia-modules/depot.nix diff --git a/languages/julia/julia-modules/extra-libs.nix b/modules/languages/julia/julia-modules/extra-libs.nix similarity index 100% rename from languages/julia/julia-modules/extra-libs.nix rename to modules/languages/julia/julia-modules/extra-libs.nix diff --git a/languages/julia/julia-modules/extra-python-packages.nix b/modules/languages/julia/julia-modules/extra-python-packages.nix similarity index 100% rename from languages/julia/julia-modules/extra-python-packages.nix rename to modules/languages/julia/julia-modules/extra-python-packages.nix diff --git a/languages/julia/julia-modules/extract_artifacts.jl b/modules/languages/julia/julia-modules/extract_artifacts.jl similarity index 100% rename from languages/julia/julia-modules/extract_artifacts.jl rename to modules/languages/julia/julia-modules/extract_artifacts.jl diff --git a/languages/julia/julia-modules/extract_artifacts_16.jl b/modules/languages/julia/julia-modules/extract_artifacts_16.jl similarity index 100% rename from languages/julia/julia-modules/extract_artifacts_16.jl rename to modules/languages/julia/julia-modules/extract_artifacts_16.jl diff --git a/languages/julia/julia-modules/generate-package-names.nix b/modules/languages/julia/julia-modules/generate-package-names.nix similarity index 100% rename from languages/julia/julia-modules/generate-package-names.nix rename to modules/languages/julia/julia-modules/generate-package-names.nix diff --git a/languages/julia/julia-modules/generate_packages_names.sh b/modules/languages/julia/julia-modules/generate_packages_names.sh similarity index 100% rename from languages/julia/julia-modules/generate_packages_names.sh rename to modules/languages/julia/julia-modules/generate_packages_names.sh diff --git a/languages/julia/julia-modules/indexing/combine_indices.py b/modules/languages/julia/julia-modules/indexing/combine_indices.py similarity index 100% rename from languages/julia/julia-modules/indexing/combine_indices.py rename to modules/languages/julia/julia-modules/indexing/combine_indices.py diff --git a/languages/julia/julia-modules/indexing/default.nix b/modules/languages/julia/julia-modules/indexing/default.nix similarity index 100% rename from languages/julia/julia-modules/indexing/default.nix rename to modules/languages/julia/julia-modules/indexing/default.nix diff --git a/languages/julia/julia-modules/indexing/index-stdlib.jl b/modules/languages/julia/julia-modules/indexing/index-stdlib.jl similarity index 100% rename from languages/julia/julia-modules/indexing/index-stdlib.jl rename to modules/languages/julia/julia-modules/indexing/index-stdlib.jl diff --git a/languages/julia/julia-modules/indexing/index_packages.py b/modules/languages/julia/julia-modules/indexing/index_packages.py similarity index 100% rename from languages/julia/julia-modules/indexing/index_packages.py rename to modules/languages/julia/julia-modules/indexing/index_packages.py diff --git a/languages/julia/julia-modules/indexing/indexpackage.jl b/modules/languages/julia/julia-modules/indexing/indexpackage.jl similarity index 100% rename from languages/julia/julia-modules/indexing/indexpackage.jl rename to modules/languages/julia/julia-modules/indexing/indexpackage.jl diff --git a/languages/julia/julia-modules/package-closure.nix b/modules/languages/julia/julia-modules/package-closure.nix similarity index 100% rename from languages/julia/julia-modules/package-closure.nix rename to modules/languages/julia/julia-modules/package-closure.nix diff --git a/languages/julia/julia-modules/package-names.nix b/modules/languages/julia/julia-modules/package-names.nix similarity index 100% rename from languages/julia/julia-modules/package-names.nix rename to modules/languages/julia/julia-modules/package-names.nix diff --git a/languages/julia/julia-modules/python/dag.py b/modules/languages/julia/julia-modules/python/dag.py similarity index 100% rename from languages/julia/julia-modules/python/dag.py rename to modules/languages/julia/julia-modules/python/dag.py diff --git a/languages/julia/julia-modules/python/dedup_overrides.py b/modules/languages/julia/julia-modules/python/dedup_overrides.py similarity index 100% rename from languages/julia/julia-modules/python/dedup_overrides.py rename to modules/languages/julia/julia-modules/python/dedup_overrides.py diff --git a/languages/julia/julia-modules/python/extract_artifacts.py b/modules/languages/julia/julia-modules/python/extract_artifacts.py similarity index 100% rename from languages/julia/julia-modules/python/extract_artifacts.py rename to modules/languages/julia/julia-modules/python/extract_artifacts.py diff --git a/languages/julia/julia-modules/python/find_package_implications.py b/modules/languages/julia/julia-modules/python/find_package_implications.py similarity index 100% rename from languages/julia/julia-modules/python/find_package_implications.py rename to modules/languages/julia/julia-modules/python/find_package_implications.py diff --git a/languages/julia/julia-modules/python/format_overrides.py b/modules/languages/julia/julia-modules/python/format_overrides.py similarity index 100% rename from languages/julia/julia-modules/python/format_overrides.py rename to modules/languages/julia/julia-modules/python/format_overrides.py diff --git a/languages/julia/julia-modules/python/minimal_registry.py b/modules/languages/julia/julia-modules/python/minimal_registry.py similarity index 100% rename from languages/julia/julia-modules/python/minimal_registry.py rename to modules/languages/julia/julia-modules/python/minimal_registry.py diff --git a/languages/julia/julia-modules/python/sources_nix.py b/modules/languages/julia/julia-modules/python/sources_nix.py similarity index 100% rename from languages/julia/julia-modules/python/sources_nix.py rename to modules/languages/julia/julia-modules/python/sources_nix.py diff --git a/languages/julia/julia-modules/python/util.py b/modules/languages/julia/julia-modules/python/util.py similarity index 100% rename from languages/julia/julia-modules/python/util.py rename to modules/languages/julia/julia-modules/python/util.py diff --git a/languages/julia/julia-modules/registry.nix b/modules/languages/julia/julia-modules/registry.nix similarity index 100% rename from languages/julia/julia-modules/registry.nix rename to modules/languages/julia/julia-modules/registry.nix diff --git a/languages/julia/julia-modules/tests/.gitignore b/modules/languages/julia/julia-modules/tests/.gitignore similarity index 100% rename from languages/julia/julia-modules/tests/.gitignore rename to modules/languages/julia/julia-modules/tests/.gitignore diff --git a/languages/julia/julia-modules/tests/README.md b/modules/languages/julia/julia-modules/tests/README.md similarity index 100% rename from languages/julia/julia-modules/tests/README.md rename to modules/languages/julia/julia-modules/tests/README.md diff --git a/languages/julia/julia-modules/tests/julia-top-n/app/Main.hs b/modules/languages/julia/julia-modules/tests/julia-top-n/app/Main.hs similarity index 100% rename from languages/julia/julia-modules/tests/julia-top-n/app/Main.hs rename to modules/languages/julia/julia-modules/tests/julia-top-n/app/Main.hs diff --git a/languages/julia/julia-modules/tests/julia-top-n/default.nix b/modules/languages/julia/julia-modules/tests/julia-top-n/default.nix similarity index 100% rename from languages/julia/julia-modules/tests/julia-top-n/default.nix rename to modules/languages/julia/julia-modules/tests/julia-top-n/default.nix diff --git a/languages/julia/julia-modules/tests/julia-top-n/julia-top-n.cabal b/modules/languages/julia/julia-modules/tests/julia-top-n/julia-top-n.cabal similarity index 100% rename from languages/julia/julia-modules/tests/julia-top-n/julia-top-n.cabal rename to modules/languages/julia/julia-modules/tests/julia-top-n/julia-top-n.cabal diff --git a/languages/julia/julia-modules/tests/julia-top-n/package.yaml b/modules/languages/julia/julia-modules/tests/julia-top-n/package.yaml similarity index 100% rename from languages/julia/julia-modules/tests/julia-top-n/package.yaml rename to modules/languages/julia/julia-modules/tests/julia-top-n/package.yaml diff --git a/languages/julia/julia-modules/tests/julia-top-n/stack.yaml b/modules/languages/julia/julia-modules/tests/julia-top-n/stack.yaml similarity index 100% rename from languages/julia/julia-modules/tests/julia-top-n/stack.yaml rename to modules/languages/julia/julia-modules/tests/julia-top-n/stack.yaml diff --git a/languages/julia/julia-modules/tests/julia-top-n/stack.yaml.lock b/modules/languages/julia/julia-modules/tests/julia-top-n/stack.yaml.lock similarity index 100% rename from languages/julia/julia-modules/tests/julia-top-n/stack.yaml.lock rename to modules/languages/julia/julia-modules/tests/julia-top-n/stack.yaml.lock diff --git a/languages/julia/julia-modules/tests/process_top_n.py b/modules/languages/julia/julia-modules/tests/process_top_n.py similarity index 100% rename from languages/julia/julia-modules/tests/process_top_n.py rename to modules/languages/julia/julia-modules/tests/process_top_n.py diff --git a/languages/julia/julia-modules/tests/run_tests.sh b/modules/languages/julia/julia-modules/tests/run_tests.sh similarity index 100% rename from languages/julia/julia-modules/tests/run_tests.sh rename to modules/languages/julia/julia-modules/tests/run_tests.sh diff --git a/languages/julia/julia-modules/tests/top-julia-packages.nix b/modules/languages/julia/julia-modules/tests/top-julia-packages.nix similarity index 100% rename from languages/julia/julia-modules/tests/top-julia-packages.nix rename to modules/languages/julia/julia-modules/tests/top-julia-packages.nix diff --git a/languages/julia/julia-modules/util.nix b/modules/languages/julia/julia-modules/util.nix similarity index 100% rename from languages/julia/julia-modules/util.nix rename to modules/languages/julia/julia-modules/util.nix diff --git a/languages/julia/kernel.nix b/modules/languages/julia/kernel.nix similarity index 100% rename from languages/julia/kernel.nix rename to modules/languages/julia/kernel.nix diff --git a/languages/julia/language-server-LanguageServer.nix b/modules/languages/julia/language-server-LanguageServer.nix similarity index 100% rename from languages/julia/language-server-LanguageServer.nix rename to modules/languages/julia/language-server-LanguageServer.nix diff --git a/languages/julia/module.nix b/modules/languages/julia/module.nix similarity index 100% rename from languages/julia/module.nix rename to modules/languages/julia/module.nix diff --git a/languages/octave/default.nix b/modules/languages/octave/default.nix similarity index 100% rename from languages/octave/default.nix rename to modules/languages/octave/default.nix diff --git a/languages/octave/kernel.nix b/modules/languages/octave/kernel.nix similarity index 100% rename from languages/octave/kernel.nix rename to modules/languages/octave/kernel.nix diff --git a/languages/octave/metadata.nix b/modules/languages/octave/metadata.nix similarity index 100% rename from languages/octave/metadata.nix rename to modules/languages/octave/metadata.nix diff --git a/languages/octave/module.nix b/modules/languages/octave/module.nix similarity index 100% rename from languages/octave/module.nix rename to modules/languages/octave/module.nix diff --git a/languages/octave/octave-logo-32x32.png b/modules/languages/octave/octave-logo-32x32.png similarity index 100% rename from languages/octave/octave-logo-32x32.png rename to modules/languages/octave/octave-logo-32x32.png diff --git a/languages/octave/octave-logo-64x64.png b/modules/languages/octave/octave-logo-64x64.png similarity index 100% rename from languages/octave/octave-logo-64x64.png rename to modules/languages/octave/octave-logo-64x64.png diff --git a/languages/octave/octave.nix b/modules/languages/octave/octave.nix similarity index 100% rename from languages/octave/octave.nix rename to modules/languages/octave/octave.nix diff --git a/languages/postgres/default.nix b/modules/languages/postgres/default.nix similarity index 100% rename from languages/postgres/default.nix rename to modules/languages/postgres/default.nix diff --git a/languages/postgres/kernel.nix b/modules/languages/postgres/kernel.nix similarity index 100% rename from languages/postgres/kernel.nix rename to modules/languages/postgres/kernel.nix diff --git a/languages/postgres/logo.svg b/modules/languages/postgres/logo.svg similarity index 100% rename from languages/postgres/logo.svg rename to modules/languages/postgres/logo.svg diff --git a/languages/postgres/module.nix b/modules/languages/postgres/module.nix similarity index 100% rename from languages/postgres/module.nix rename to modules/languages/postgres/module.nix diff --git a/languages/postgres/postgres-logo-32x32.png b/modules/languages/postgres/postgres-logo-32x32.png similarity index 100% rename from languages/postgres/postgres-logo-32x32.png rename to modules/languages/postgres/postgres-logo-32x32.png diff --git a/languages/postgres/postgres-logo-64x64.png b/modules/languages/postgres/postgres-logo-64x64.png similarity index 100% rename from languages/postgres/postgres-logo-64x64.png rename to modules/languages/postgres/postgres-logo-64x64.png diff --git a/languages/python/default.nix b/modules/languages/python/default.nix similarity index 100% rename from languages/python/default.nix rename to modules/languages/python/default.nix diff --git a/languages/python/envs/.gitignore b/modules/languages/python/envs/.gitignore similarity index 100% rename from languages/python/envs/.gitignore rename to modules/languages/python/envs/.gitignore diff --git a/languages/python/envs/python311/poetry.lock b/modules/languages/python/envs/python311/poetry.lock similarity index 100% rename from languages/python/envs/python311/poetry.lock rename to modules/languages/python/envs/python311/poetry.lock diff --git a/languages/python/envs/python311/pyproject.toml b/modules/languages/python/envs/python311/pyproject.toml similarity index 100% rename from languages/python/envs/python311/pyproject.toml rename to modules/languages/python/envs/python311/pyproject.toml diff --git a/languages/python/envs/python311/python311/__init__.py b/modules/languages/python/envs/python311/python311/__init__.py similarity index 100% rename from languages/python/envs/python311/python311/__init__.py rename to modules/languages/python/envs/python311/python311/__init__.py diff --git a/languages/python/envs/python38/poetry-overrides.nix b/modules/languages/python/envs/python38/poetry-overrides.nix similarity index 100% rename from languages/python/envs/python38/poetry-overrides.nix rename to modules/languages/python/envs/python38/poetry-overrides.nix diff --git a/languages/python/envs/python38/poetry.lock b/modules/languages/python/envs/python38/poetry.lock similarity index 100% rename from languages/python/envs/python38/poetry.lock rename to modules/languages/python/envs/python38/poetry.lock diff --git a/languages/python/envs/python38/pyproject.toml b/modules/languages/python/envs/python38/pyproject.toml similarity index 100% rename from languages/python/envs/python38/pyproject.toml rename to modules/languages/python/envs/python38/pyproject.toml diff --git a/languages/python/envs/python38/python38/__init__.py b/modules/languages/python/envs/python38/python38/__init__.py similarity index 100% rename from languages/python/envs/python38/python38/__init__.py rename to modules/languages/python/envs/python38/python38/__init__.py diff --git a/languages/python/envs/python38/shell.nix b/modules/languages/python/envs/python38/shell.nix similarity index 100% rename from languages/python/envs/python38/shell.nix rename to modules/languages/python/envs/python38/shell.nix diff --git a/languages/python/envs/python39/poetry.lock b/modules/languages/python/envs/python39/poetry.lock similarity index 100% rename from languages/python/envs/python39/poetry.lock rename to modules/languages/python/envs/python39/poetry.lock diff --git a/languages/python/envs/python39/pyproject.toml b/modules/languages/python/envs/python39/pyproject.toml similarity index 100% rename from languages/python/envs/python39/pyproject.toml rename to modules/languages/python/envs/python39/pyproject.toml diff --git a/languages/python/envs/python39/python39/__init__.py b/modules/languages/python/envs/python39/python39/__init__.py similarity index 100% rename from languages/python/envs/python39/python39/__init__.py rename to modules/languages/python/envs/python39/python39/__init__.py diff --git a/languages/python/home_folder/.config/pycodestyle b/modules/languages/python/home_folder/.config/pycodestyle similarity index 100% rename from languages/python/home_folder/.config/pycodestyle rename to modules/languages/python/home_folder/.config/pycodestyle diff --git a/languages/python/home_folder/.ipython/profile_default/ipython_config.py b/modules/languages/python/home_folder/.ipython/profile_default/ipython_config.py similarity index 100% rename from languages/python/home_folder/.ipython/profile_default/ipython_config.py rename to modules/languages/python/home_folder/.ipython/profile_default/ipython_config.py diff --git a/languages/python/home_folder/ipython_config.py b/modules/languages/python/home_folder/ipython_config.py similarity index 100% rename from languages/python/home_folder/ipython_config.py rename to modules/languages/python/home_folder/ipython_config.py diff --git a/languages/python/home_folder/pycodestyle b/modules/languages/python/home_folder/pycodestyle similarity index 100% rename from languages/python/home_folder/pycodestyle rename to modules/languages/python/home_folder/pycodestyle diff --git a/languages/python/kernel.nix b/modules/languages/python/kernel.nix similarity index 100% rename from languages/python/kernel.nix rename to modules/languages/python/kernel.nix diff --git a/languages/python/language_servers/language_server_flake8/config.nix b/modules/languages/python/language_servers/language_server_flake8/config.nix similarity index 100% rename from languages/python/language_servers/language_server_flake8/config.nix rename to modules/languages/python/language_servers/language_server_flake8/config.nix diff --git a/languages/python/language_servers/language_server_jedi/config.nix b/modules/languages/python/language_servers/language_server_jedi/config.nix similarity index 100% rename from languages/python/language_servers/language_server_jedi/config.nix rename to modules/languages/python/language_servers/language_server_jedi/config.nix diff --git a/languages/python/language_servers/language_server_jedi/jedi-logo.png b/modules/languages/python/language_servers/language_server_jedi/jedi-logo.png similarity index 100% rename from languages/python/language_servers/language_server_jedi/jedi-logo.png rename to modules/languages/python/language_servers/language_server_jedi/jedi-logo.png diff --git a/languages/python/language_servers/language_server_microsoft/config.nix b/modules/languages/python/language_servers/language_server_microsoft/config.nix similarity index 100% rename from languages/python/language_servers/language_server_microsoft/config.nix rename to modules/languages/python/language_servers/language_server_microsoft/config.nix diff --git a/languages/python/language_servers/language_server_microsoft/generate_cache.py b/modules/languages/python/language_servers/language_server_microsoft/generate_cache.py similarity index 100% rename from languages/python/language_servers/language_server_microsoft/generate_cache.py rename to modules/languages/python/language_servers/language_server_microsoft/generate_cache.py diff --git a/languages/python/language_servers/language_server_palantir/config.nix b/modules/languages/python/language_servers/language_server_palantir/config.nix similarity index 100% rename from languages/python/language_servers/language_server_palantir/config.nix rename to modules/languages/python/language_servers/language_server_palantir/config.nix diff --git a/languages/python/language_servers/language_server_pycodestyle/config.nix b/modules/languages/python/language_servers/language_server_pycodestyle/config.nix similarity index 100% rename from languages/python/language_servers/language_server_pycodestyle/config.nix rename to modules/languages/python/language_servers/language_server_pycodestyle/config.nix diff --git a/languages/python/language_servers/language_server_pylint/config.nix b/modules/languages/python/language_servers/language_server_pylint/config.nix similarity index 100% rename from languages/python/language_servers/language_server_pylint/config.nix rename to modules/languages/python/language_servers/language_server_pylint/config.nix diff --git a/languages/python/language_servers/language_server_pylint/pylint-logo.png b/modules/languages/python/language_servers/language_server_pylint/pylint-logo.png similarity index 100% rename from languages/python/language_servers/language_server_pylint/pylint-logo.png rename to modules/languages/python/language_servers/language_server_pylint/pylint-logo.png diff --git a/languages/python/language_servers/language_server_pyright/config.nix b/modules/languages/python/language_servers/language_server_pyright/config.nix similarity index 100% rename from languages/python/language_servers/language_server_pyright/config.nix rename to modules/languages/python/language_servers/language_server_pyright/config.nix diff --git a/languages/python/language_servers/language_server_pyright/icon.png b/modules/languages/python/language_servers/language_server_pyright/icon.png similarity index 100% rename from languages/python/language_servers/language_server_pyright/icon.png rename to modules/languages/python/language_servers/language_server_pyright/icon.png diff --git a/languages/python/language_servers/language_server_pyright/icon_scaled.xcf b/modules/languages/python/language_servers/language_server_pyright/icon_scaled.xcf similarity index 100% rename from languages/python/language_servers/language_server_pyright/icon_scaled.xcf rename to modules/languages/python/language_servers/language_server_pyright/icon_scaled.xcf diff --git a/languages/python/language_servers/language_server_pyright/icon_scaled_64x64.png b/modules/languages/python/language_servers/language_server_pyright/icon_scaled_64x64.png similarity index 100% rename from languages/python/language_servers/language_server_pyright/icon_scaled_64x64.png rename to modules/languages/python/language_servers/language_server_pyright/icon_scaled_64x64.png diff --git a/languages/python/language_servers/language_server_pyright/icon_scaled_64x64.xcf b/modules/languages/python/language_servers/language_server_pyright/icon_scaled_64x64.xcf similarity index 100% rename from languages/python/language_servers/language_server_pyright/icon_scaled_64x64.xcf rename to modules/languages/python/language_servers/language_server_pyright/icon_scaled_64x64.xcf diff --git a/languages/python/language_servers/language_server_pythonlsp/config.nix b/modules/languages/python/language_servers/language_server_pythonlsp/config.nix similarity index 100% rename from languages/python/language_servers/language_server_pythonlsp/config.nix rename to modules/languages/python/language_servers/language_server_pythonlsp/config.nix diff --git a/languages/python/language_servers/pylsp_initialization_options.nix b/modules/languages/python/language_servers/pylsp_initialization_options.nix similarity index 100% rename from languages/python/language_servers/pylsp_initialization_options.nix rename to modules/languages/python/language_servers/pylsp_initialization_options.nix diff --git a/languages/python/manylinux1.nix b/modules/languages/python/manylinux1.nix similarity index 100% rename from languages/python/manylinux1.nix rename to modules/languages/python/manylinux1.nix diff --git a/languages/python/module.nix b/modules/languages/python/module.nix similarity index 100% rename from languages/python/module.nix rename to modules/languages/python/module.nix diff --git a/languages/python/python-logo-32x32.png b/modules/languages/python/python-logo-32x32.png similarity index 100% rename from languages/python/python-logo-32x32.png rename to modules/languages/python/python-logo-32x32.png diff --git a/languages/python/python-logo-64x64.png b/modules/languages/python/python-logo-64x64.png similarity index 100% rename from languages/python/python-logo-64x64.png rename to modules/languages/python/python-logo-64x64.png diff --git a/languages/python/variable_inspector.py b/modules/languages/python/variable_inspector.py similarity index 100% rename from languages/python/variable_inspector.py rename to modules/languages/python/variable_inspector.py diff --git a/languages/r/default.nix b/modules/languages/r/default.nix similarity index 100% rename from languages/r/default.nix rename to modules/languages/r/default.nix diff --git a/languages/r/kernel.nix b/modules/languages/r/kernel.nix similarity index 100% rename from languages/r/kernel.nix rename to modules/languages/r/kernel.nix diff --git a/languages/r/language-server-languageserver/default.nix b/modules/languages/r/language-server-languageserver/default.nix similarity index 100% rename from languages/r/language-server-languageserver/default.nix rename to modules/languages/r/language-server-languageserver/default.nix diff --git a/languages/r/language-server-languageserver/languageserver.nix b/modules/languages/r/language-server-languageserver/languageserver.nix similarity index 100% rename from languages/r/language-server-languageserver/languageserver.nix rename to modules/languages/r/language-server-languageserver/languageserver.nix diff --git a/languages/r/module.nix b/modules/languages/r/module.nix similarity index 100% rename from languages/r/module.nix rename to modules/languages/r/module.nix diff --git a/languages/r/r-logo-64x64.png b/modules/languages/r/r-logo-64x64.png similarity index 100% rename from languages/r/r-logo-64x64.png rename to modules/languages/r/r-logo-64x64.png diff --git a/languages/ruby/default.nix b/modules/languages/ruby/default.nix similarity index 100% rename from languages/ruby/default.nix rename to modules/languages/ruby/default.nix diff --git a/languages/ruby/iruby-32x32.png b/modules/languages/ruby/iruby-32x32.png similarity index 100% rename from languages/ruby/iruby-32x32.png rename to modules/languages/ruby/iruby-32x32.png diff --git a/languages/ruby/iruby-64x64.png b/modules/languages/ruby/iruby-64x64.png similarity index 100% rename from languages/ruby/iruby-64x64.png rename to modules/languages/ruby/iruby-64x64.png diff --git a/languages/ruby/iruby/Gemfile b/modules/languages/ruby/iruby/Gemfile similarity index 100% rename from languages/ruby/iruby/Gemfile rename to modules/languages/ruby/iruby/Gemfile diff --git a/languages/ruby/iruby/Gemfile.lock b/modules/languages/ruby/iruby/Gemfile.lock similarity index 100% rename from languages/ruby/iruby/Gemfile.lock rename to modules/languages/ruby/iruby/Gemfile.lock diff --git a/languages/ruby/iruby/default.nix b/modules/languages/ruby/iruby/default.nix similarity index 100% rename from languages/ruby/iruby/default.nix rename to modules/languages/ruby/iruby/default.nix diff --git a/languages/ruby/iruby/gemset.nix b/modules/languages/ruby/iruby/gemset.nix similarity index 100% rename from languages/ruby/iruby/gemset.nix rename to modules/languages/ruby/iruby/gemset.nix diff --git a/languages/ruby/iruby/shell.nix b/modules/languages/ruby/iruby/shell.nix similarity index 100% rename from languages/ruby/iruby/shell.nix rename to modules/languages/ruby/iruby/shell.nix diff --git a/languages/ruby/kernel.nix b/modules/languages/ruby/kernel.nix similarity index 100% rename from languages/ruby/kernel.nix rename to modules/languages/ruby/kernel.nix diff --git a/languages/ruby/module.nix b/modules/languages/ruby/module.nix similarity index 100% rename from languages/ruby/module.nix rename to modules/languages/ruby/module.nix diff --git a/languages/ruby/solargraph.nix b/modules/languages/ruby/solargraph.nix similarity index 100% rename from languages/ruby/solargraph.nix rename to modules/languages/ruby/solargraph.nix diff --git a/languages/rust/all_package_names.nix b/modules/languages/rust/all_package_names.nix similarity index 100% rename from languages/rust/all_package_names.nix rename to modules/languages/rust/all_package_names.nix diff --git a/languages/rust/default.nix b/modules/languages/rust/default.nix similarity index 100% rename from languages/rust/default.nix rename to modules/languages/rust/default.nix diff --git a/languages/rust/evcxr/default.nix b/modules/languages/rust/evcxr/default.nix similarity index 100% rename from languages/rust/evcxr/default.nix rename to modules/languages/rust/evcxr/default.nix diff --git a/languages/rust/evcxr/python/build_init_evcxr.py b/modules/languages/rust/evcxr/python/build_init_evcxr.py similarity index 100% rename from languages/rust/evcxr/python/build_init_evcxr.py rename to modules/languages/rust/evcxr/python/build_init_evcxr.py diff --git a/languages/rust/evcxr/withPackages.nix b/modules/languages/rust/evcxr/withPackages.nix similarity index 100% rename from languages/rust/evcxr/withPackages.nix rename to modules/languages/rust/evcxr/withPackages.nix diff --git a/languages/rust/generate_all_package_names.sh b/modules/languages/rust/generate_all_package_names.sh similarity index 100% rename from languages/rust/generate_all_package_names.sh rename to modules/languages/rust/generate_all_package_names.sh diff --git a/languages/rust/kernel.nix b/modules/languages/rust/kernel.nix similarity index 100% rename from languages/rust/kernel.nix rename to modules/languages/rust/kernel.nix diff --git a/languages/rust/language_server_rust_analyzer/Cargo.toml b/modules/languages/rust/language_server_rust_analyzer/Cargo.toml similarity index 100% rename from languages/rust/language_server_rust_analyzer/Cargo.toml rename to modules/languages/rust/language_server_rust_analyzer/Cargo.toml diff --git a/languages/rust/language_server_rust_analyzer/config.nix b/modules/languages/rust/language_server_rust_analyzer/config.nix similarity index 100% rename from languages/rust/language_server_rust_analyzer/config.nix rename to modules/languages/rust/language_server_rust_analyzer/config.nix diff --git a/languages/rust/language_server_rust_analyzer/logo-square.svg b/modules/languages/rust/language_server_rust_analyzer/logo-square.svg similarity index 100% rename from languages/rust/language_server_rust_analyzer/logo-square.svg rename to modules/languages/rust/language_server_rust_analyzer/logo-square.svg diff --git a/languages/rust/language_server_rust_analyzer/lsp-types.nix b/modules/languages/rust/language_server_rust_analyzer/lsp-types.nix similarity index 100% rename from languages/rust/language_server_rust_analyzer/lsp-types.nix rename to modules/languages/rust/language_server_rust_analyzer/lsp-types.nix diff --git a/languages/rust/language_server_rust_analyzer/myers-diff.nix b/modules/languages/rust/language_server_rust_analyzer/myers-diff.nix similarity index 100% rename from languages/rust/language_server_rust_analyzer/myers-diff.nix rename to modules/languages/rust/language_server_rust_analyzer/myers-diff.nix diff --git a/languages/rust/language_server_rust_analyzer/rnls.nix b/modules/languages/rust/language_server_rust_analyzer/rnls.nix similarity index 100% rename from languages/rust/language_server_rust_analyzer/rnls.nix rename to modules/languages/rust/language_server_rust_analyzer/rnls.nix diff --git a/languages/rust/language_server_rust_analyzer/rust-analyzer-logo-64x64.png b/modules/languages/rust/language_server_rust_analyzer/rust-analyzer-logo-64x64.png similarity index 100% rename from languages/rust/language_server_rust_analyzer/rust-analyzer-logo-64x64.png rename to modules/languages/rust/language_server_rust_analyzer/rust-analyzer-logo-64x64.png diff --git a/languages/rust/logo-LICENSE.md b/modules/languages/rust/logo-LICENSE.md similarity index 100% rename from languages/rust/logo-LICENSE.md rename to modules/languages/rust/logo-LICENSE.md diff --git a/languages/rust/module.nix b/modules/languages/rust/module.nix similarity index 100% rename from languages/rust/module.nix rename to modules/languages/rust/module.nix diff --git a/languages/rust/rust-logo-32x32.png b/modules/languages/rust/rust-logo-32x32.png similarity index 100% rename from languages/rust/rust-logo-32x32.png rename to modules/languages/rust/rust-logo-32x32.png diff --git a/languages/rust/rust-logo-64x64.png b/modules/languages/rust/rust-logo-64x64.png similarity index 100% rename from languages/rust/rust-logo-64x64.png rename to modules/languages/rust/rust-logo-64x64.png diff --git a/shells/ICON_LICENSE.txt b/modules/shells/ICON_LICENSE.txt similarity index 100% rename from shells/ICON_LICENSE.txt rename to modules/shells/ICON_LICENSE.txt diff --git a/shells/bash/default.nix b/modules/shells/bash/default.nix similarity index 100% rename from shells/bash/default.nix rename to modules/shells/bash/default.nix diff --git a/shells/bash/module.nix b/modules/shells/bash/module.nix similarity index 100% rename from shells/bash/module.nix rename to modules/shells/bash/module.nix diff --git a/shells/common.nix b/modules/shells/common.nix similarity index 100% rename from shells/common.nix rename to modules/shells/common.nix diff --git a/shells/default_icon.png b/modules/shells/default_icon.png similarity index 100% rename from shells/default_icon.png rename to modules/shells/default_icon.png diff --git a/shells/default_icon.xcf b/modules/shells/default_icon.xcf similarity index 100% rename from shells/default_icon.xcf rename to modules/shells/default_icon.xcf diff --git a/shells/default_icon_64x64.png b/modules/shells/default_icon_64x64.png similarity index 100% rename from shells/default_icon_64x64.png rename to modules/shells/default_icon_64x64.png diff --git a/shells/default_icon_64x64.xcf b/modules/shells/default_icon_64x64.xcf similarity index 100% rename from shells/default_icon_64x64.xcf rename to modules/shells/default_icon_64x64.xcf diff --git a/shells/fish/color.sh b/modules/shells/fish/color.sh similarity index 100% rename from shells/fish/color.sh rename to modules/shells/fish/color.sh diff --git a/shells/fish/default.nix b/modules/shells/fish/default.nix similarity index 100% rename from shells/fish/default.nix rename to modules/shells/fish/default.nix diff --git a/shells/fish/fish.nix b/modules/shells/fish/fish.nix similarity index 100% rename from shells/fish/fish.nix rename to modules/shells/fish/fish.nix diff --git a/shells/fish/icon-64x64.png b/modules/shells/fish/icon-64x64.png similarity index 100% rename from shells/fish/icon-64x64.png rename to modules/shells/fish/icon-64x64.png diff --git a/shells/fish/icon-64x64.xcf b/modules/shells/fish/icon-64x64.xcf similarity index 100% rename from shells/fish/icon-64x64.xcf rename to modules/shells/fish/icon-64x64.xcf diff --git a/shells/fish/icon.xcf b/modules/shells/fish/icon.xcf similarity index 100% rename from shells/fish/icon.xcf rename to modules/shells/fish/icon.xcf diff --git a/shells/fish/module.nix b/modules/shells/fish/module.nix similarity index 100% rename from shells/fish/module.nix rename to modules/shells/fish/module.nix diff --git a/shells/zsh/default.nix b/modules/shells/zsh/default.nix similarity index 100% rename from shells/zsh/default.nix rename to modules/shells/zsh/default.nix diff --git a/shells/zsh/module.nix b/modules/shells/zsh/module.nix similarity index 100% rename from shells/zsh/module.nix rename to modules/shells/zsh/module.nix diff --git a/shells/zsh/zsh-with-theme/color.sh b/modules/shells/zsh/zsh-with-theme/color.sh similarity index 100% rename from shells/zsh/zsh-with-theme/color.sh rename to modules/shells/zsh/zsh-with-theme/color.sh diff --git a/shells/zsh/zsh-with-theme/default.nix b/modules/shells/zsh/zsh-with-theme/default.nix similarity index 100% rename from shells/zsh/zsh-with-theme/default.nix rename to modules/shells/zsh/zsh-with-theme/default.nix diff --git a/misc/builds-forever.nix b/modules/testing/builds-forever.nix similarity index 100% rename from misc/builds-forever.nix rename to modules/testing/builds-forever.nix diff --git a/tools/fuse-indexer/default.nix b/modules/tools/fuse-indexer/default.nix similarity index 100% rename from tools/fuse-indexer/default.nix rename to modules/tools/fuse-indexer/default.nix diff --git a/tools/powerline/config/colors.json b/modules/tools/powerline/config/colors.json similarity index 100% rename from tools/powerline/config/colors.json rename to modules/tools/powerline/config/colors.json diff --git a/tools/powerline/config/colorschemes/default.json b/modules/tools/powerline/config/colorschemes/default.json similarity index 100% rename from tools/powerline/config/colorschemes/default.json rename to modules/tools/powerline/config/colorschemes/default.json diff --git a/tools/powerline/config/colorschemes/ipython/__main__.json b/modules/tools/powerline/config/colorschemes/ipython/__main__.json similarity index 100% rename from tools/powerline/config/colorschemes/ipython/__main__.json rename to modules/tools/powerline/config/colorschemes/ipython/__main__.json diff --git a/tools/powerline/config/colorschemes/pdb/__main__.json b/modules/tools/powerline/config/colorschemes/pdb/__main__.json similarity index 100% rename from tools/powerline/config/colorschemes/pdb/__main__.json rename to modules/tools/powerline/config/colorschemes/pdb/__main__.json diff --git a/tools/powerline/config/colorschemes/pdb/default.json b/modules/tools/powerline/config/colorschemes/pdb/default.json similarity index 100% rename from tools/powerline/config/colorschemes/pdb/default.json rename to modules/tools/powerline/config/colorschemes/pdb/default.json diff --git a/tools/powerline/config/colorschemes/pdb/solarized.json b/modules/tools/powerline/config/colorschemes/pdb/solarized.json similarity index 100% rename from tools/powerline/config/colorschemes/pdb/solarized.json rename to modules/tools/powerline/config/colorschemes/pdb/solarized.json diff --git a/tools/powerline/config/colorschemes/shell/__main__.json b/modules/tools/powerline/config/colorschemes/shell/__main__.json similarity index 100% rename from tools/powerline/config/colorschemes/shell/__main__.json rename to modules/tools/powerline/config/colorschemes/shell/__main__.json diff --git a/tools/powerline/config/colorschemes/shell/default.json b/modules/tools/powerline/config/colorschemes/shell/default.json similarity index 100% rename from tools/powerline/config/colorschemes/shell/default.json rename to modules/tools/powerline/config/colorschemes/shell/default.json diff --git a/tools/powerline/config/colorschemes/shell/solarized.json b/modules/tools/powerline/config/colorschemes/shell/solarized.json similarity index 100% rename from tools/powerline/config/colorschemes/shell/solarized.json rename to modules/tools/powerline/config/colorschemes/shell/solarized.json diff --git a/tools/powerline/config/colorschemes/solarized.json b/modules/tools/powerline/config/colorschemes/solarized.json similarity index 100% rename from tools/powerline/config/colorschemes/solarized.json rename to modules/tools/powerline/config/colorschemes/solarized.json diff --git a/tools/powerline/config/colorschemes/tmux/default.json b/modules/tools/powerline/config/colorschemes/tmux/default.json similarity index 100% rename from tools/powerline/config/colorschemes/tmux/default.json rename to modules/tools/powerline/config/colorschemes/tmux/default.json diff --git a/tools/powerline/config/colorschemes/tmux/solarized.json b/modules/tools/powerline/config/colorschemes/tmux/solarized.json similarity index 100% rename from tools/powerline/config/colorschemes/tmux/solarized.json rename to modules/tools/powerline/config/colorschemes/tmux/solarized.json diff --git a/tools/powerline/config/colorschemes/vim/__main__.json b/modules/tools/powerline/config/colorschemes/vim/__main__.json similarity index 100% rename from tools/powerline/config/colorschemes/vim/__main__.json rename to modules/tools/powerline/config/colorschemes/vim/__main__.json diff --git a/tools/powerline/config/colorschemes/vim/default.json b/modules/tools/powerline/config/colorschemes/vim/default.json similarity index 100% rename from tools/powerline/config/colorschemes/vim/default.json rename to modules/tools/powerline/config/colorschemes/vim/default.json diff --git a/tools/powerline/config/colorschemes/vim/solarized.json b/modules/tools/powerline/config/colorschemes/vim/solarized.json similarity index 100% rename from tools/powerline/config/colorschemes/vim/solarized.json rename to modules/tools/powerline/config/colorschemes/vim/solarized.json diff --git a/tools/powerline/config/colorschemes/vim/solarizedlight.json b/modules/tools/powerline/config/colorschemes/vim/solarizedlight.json similarity index 100% rename from tools/powerline/config/colorschemes/vim/solarizedlight.json rename to modules/tools/powerline/config/colorschemes/vim/solarizedlight.json diff --git a/tools/powerline/config/config.json b/modules/tools/powerline/config/config.json similarity index 100% rename from tools/powerline/config/config.json rename to modules/tools/powerline/config/config.json diff --git a/tools/powerline/config/themes/ascii.json b/modules/tools/powerline/config/themes/ascii.json similarity index 100% rename from tools/powerline/config/themes/ascii.json rename to modules/tools/powerline/config/themes/ascii.json diff --git a/tools/powerline/config/themes/ipython/in.json b/modules/tools/powerline/config/themes/ipython/in.json similarity index 100% rename from tools/powerline/config/themes/ipython/in.json rename to modules/tools/powerline/config/themes/ipython/in.json diff --git a/tools/powerline/config/themes/ipython/in2.json b/modules/tools/powerline/config/themes/ipython/in2.json similarity index 100% rename from tools/powerline/config/themes/ipython/in2.json rename to modules/tools/powerline/config/themes/ipython/in2.json diff --git a/tools/powerline/config/themes/ipython/out.json b/modules/tools/powerline/config/themes/ipython/out.json similarity index 100% rename from tools/powerline/config/themes/ipython/out.json rename to modules/tools/powerline/config/themes/ipython/out.json diff --git a/tools/powerline/config/themes/ipython/rewrite.json b/modules/tools/powerline/config/themes/ipython/rewrite.json similarity index 100% rename from tools/powerline/config/themes/ipython/rewrite.json rename to modules/tools/powerline/config/themes/ipython/rewrite.json diff --git a/tools/powerline/config/themes/pdb/default.json b/modules/tools/powerline/config/themes/pdb/default.json similarity index 100% rename from tools/powerline/config/themes/pdb/default.json rename to modules/tools/powerline/config/themes/pdb/default.json diff --git a/tools/powerline/config/themes/powerline.json b/modules/tools/powerline/config/themes/powerline.json similarity index 100% rename from tools/powerline/config/themes/powerline.json rename to modules/tools/powerline/config/themes/powerline.json diff --git a/tools/powerline/config/themes/powerline_terminus.json b/modules/tools/powerline/config/themes/powerline_terminus.json similarity index 100% rename from tools/powerline/config/themes/powerline_terminus.json rename to modules/tools/powerline/config/themes/powerline_terminus.json diff --git a/tools/powerline/config/themes/powerline_unicode7.json b/modules/tools/powerline/config/themes/powerline_unicode7.json similarity index 100% rename from tools/powerline/config/themes/powerline_unicode7.json rename to modules/tools/powerline/config/themes/powerline_unicode7.json diff --git a/tools/powerline/config/themes/shell/__main__.json b/modules/tools/powerline/config/themes/shell/__main__.json similarity index 100% rename from tools/powerline/config/themes/shell/__main__.json rename to modules/tools/powerline/config/themes/shell/__main__.json diff --git a/tools/powerline/config/themes/shell/continuation.json b/modules/tools/powerline/config/themes/shell/continuation.json similarity index 100% rename from tools/powerline/config/themes/shell/continuation.json rename to modules/tools/powerline/config/themes/shell/continuation.json diff --git a/tools/powerline/config/themes/shell/default.json b/modules/tools/powerline/config/themes/shell/default.json similarity index 100% rename from tools/powerline/config/themes/shell/default.json rename to modules/tools/powerline/config/themes/shell/default.json diff --git a/tools/powerline/config/themes/shell/default_leftonly.json b/modules/tools/powerline/config/themes/shell/default_leftonly.json similarity index 100% rename from tools/powerline/config/themes/shell/default_leftonly.json rename to modules/tools/powerline/config/themes/shell/default_leftonly.json diff --git a/tools/powerline/config/themes/shell/select.json b/modules/tools/powerline/config/themes/shell/select.json similarity index 100% rename from tools/powerline/config/themes/shell/select.json rename to modules/tools/powerline/config/themes/shell/select.json diff --git a/tools/powerline/config/themes/tmux/default.json b/modules/tools/powerline/config/themes/tmux/default.json similarity index 100% rename from tools/powerline/config/themes/tmux/default.json rename to modules/tools/powerline/config/themes/tmux/default.json diff --git a/tools/powerline/config/themes/unicode.json b/modules/tools/powerline/config/themes/unicode.json similarity index 100% rename from tools/powerline/config/themes/unicode.json rename to modules/tools/powerline/config/themes/unicode.json diff --git a/tools/powerline/config/themes/unicode_terminus.json b/modules/tools/powerline/config/themes/unicode_terminus.json similarity index 100% rename from tools/powerline/config/themes/unicode_terminus.json rename to modules/tools/powerline/config/themes/unicode_terminus.json diff --git a/tools/powerline/config/themes/unicode_terminus_condensed.json b/modules/tools/powerline/config/themes/unicode_terminus_condensed.json similarity index 100% rename from tools/powerline/config/themes/unicode_terminus_condensed.json rename to modules/tools/powerline/config/themes/unicode_terminus_condensed.json diff --git a/tools/powerline/config/themes/vim/__main__.json b/modules/tools/powerline/config/themes/vim/__main__.json similarity index 100% rename from tools/powerline/config/themes/vim/__main__.json rename to modules/tools/powerline/config/themes/vim/__main__.json diff --git a/tools/powerline/config/themes/vim/cmdwin.json b/modules/tools/powerline/config/themes/vim/cmdwin.json similarity index 100% rename from tools/powerline/config/themes/vim/cmdwin.json rename to modules/tools/powerline/config/themes/vim/cmdwin.json diff --git a/tools/powerline/config/themes/vim/default.json b/modules/tools/powerline/config/themes/vim/default.json similarity index 100% rename from tools/powerline/config/themes/vim/default.json rename to modules/tools/powerline/config/themes/vim/default.json diff --git a/tools/powerline/config/themes/vim/help.json b/modules/tools/powerline/config/themes/vim/help.json similarity index 100% rename from tools/powerline/config/themes/vim/help.json rename to modules/tools/powerline/config/themes/vim/help.json diff --git a/tools/powerline/config/themes/vim/plugin_commandt.json b/modules/tools/powerline/config/themes/vim/plugin_commandt.json similarity index 100% rename from tools/powerline/config/themes/vim/plugin_commandt.json rename to modules/tools/powerline/config/themes/vim/plugin_commandt.json diff --git a/tools/powerline/config/themes/vim/plugin_gundo-preview.json b/modules/tools/powerline/config/themes/vim/plugin_gundo-preview.json similarity index 100% rename from tools/powerline/config/themes/vim/plugin_gundo-preview.json rename to modules/tools/powerline/config/themes/vim/plugin_gundo-preview.json diff --git a/tools/powerline/config/themes/vim/plugin_gundo.json b/modules/tools/powerline/config/themes/vim/plugin_gundo.json similarity index 100% rename from tools/powerline/config/themes/vim/plugin_gundo.json rename to modules/tools/powerline/config/themes/vim/plugin_gundo.json diff --git a/tools/powerline/config/themes/vim/plugin_nerdtree.json b/modules/tools/powerline/config/themes/vim/plugin_nerdtree.json similarity index 100% rename from tools/powerline/config/themes/vim/plugin_nerdtree.json rename to modules/tools/powerline/config/themes/vim/plugin_nerdtree.json diff --git a/tools/powerline/config/themes/vim/quickfix.json b/modules/tools/powerline/config/themes/vim/quickfix.json similarity index 100% rename from tools/powerline/config/themes/vim/quickfix.json rename to modules/tools/powerline/config/themes/vim/quickfix.json diff --git a/tools/powerline/config/themes/vim/tabline.json b/modules/tools/powerline/config/themes/vim/tabline.json similarity index 100% rename from tools/powerline/config/themes/vim/tabline.json rename to modules/tools/powerline/config/themes/vim/tabline.json diff --git a/tools/powerline/config/themes/wm/default.json b/modules/tools/powerline/config/themes/wm/default.json similarity index 100% rename from tools/powerline/config/themes/wm/default.json rename to modules/tools/powerline/config/themes/wm/default.json diff --git a/tools/powerline/default.nix b/modules/tools/powerline/default.nix similarity index 100% rename from tools/powerline/default.nix rename to modules/tools/powerline/default.nix diff --git a/tools/powerline/tmux-mem-cpu-load.nix b/modules/tools/powerline/tmux-mem-cpu-load.nix similarity index 100% rename from tools/powerline/tmux-mem-cpu-load.nix rename to modules/tools/powerline/tmux-mem-cpu-load.nix diff --git a/tools/sqlite-indexer/default.nix b/modules/tools/sqlite-indexer/default.nix similarity index 98% rename from tools/sqlite-indexer/default.nix rename to modules/tools/sqlite-indexer/default.nix index 552cdb5..124f898 100644 --- a/tools/sqlite-indexer/default.nix +++ b/modules/tools/sqlite-indexer/default.nix @@ -22,7 +22,7 @@ let common = callPackage ../../languages/common.nix {}; - uiMetadata = callPackage ../../codedown/uiMetadata.nix {}; + uiMetadata = callPackage ../../../nix/uiMetadata.nix {}; numVersionComponents = 5; componentPadLength = 3; diff --git a/nix/evaluate-config.nix b/nix/evaluate-config.nix new file mode 100644 index 0000000..c7b8ae5 --- /dev/null +++ b/nix/evaluate-config.nix @@ -0,0 +1,47 @@ +{ lib +, pkgsStable +, pkgsMaster +}: + +config: + +lib.evalModules { + specialArgs = { + nixosOptionsToSettingsSchema = pkgsStable.callPackage ../modules/base/nixos-options-to-settings-schema.nix {}; + }; + modules = [ + ../modules/base.nix + + ../modules/exporters/module.nix + + ../modules/languages/bash/module.nix + ../modules/languages/clojure/module.nix + ../modules/languages/coq/module.nix + ../modules/languages/cpp/module.nix + ../modules/languages/go/module.nix + ../modules/languages/haskell/module.nix + ../modules/languages/julia/module.nix + ../modules/languages/octave/module.nix + ../modules/languages/postgres/module.nix + ../modules/languages/python/module.nix + ../modules/languages/r/module.nix + ../modules/languages/ruby/module.nix + ../modules/languages/rust/module.nix + + ../modules/language_servers/markdown-spellcheck-lsp/module.nix + + ../modules/shells/bash/module.nix + ../modules/shells/fish/module.nix + ../modules/shells/zsh/module.nix + + { + config = { + pkgs = pkgsStable; + inherit pkgsMaster; + }; + } + { + inherit config; + } + ]; +} diff --git a/codedown/makeEnvironment.nix b/nix/makeEnvironment.nix similarity index 100% rename from codedown/makeEnvironment.nix rename to nix/makeEnvironment.nix diff --git a/codedown/uiMetadata.nix b/nix/uiMetadata.nix similarity index 100% rename from codedown/uiMetadata.nix rename to nix/uiMetadata.nix diff --git a/codedown/validateCodeDownEnvironment.nix b/nix/validateCodeDownEnvironment.nix similarity index 100% rename from codedown/validateCodeDownEnvironment.nix rename to nix/validateCodeDownEnvironment.nix diff --git a/overlays.nix b/overlays.nix deleted file mode 100644 index 478c7b6..0000000 --- a/overlays.nix +++ /dev/null @@ -1,3 +0,0 @@ -self: super: { - -} diff --git a/shell.nix b/shell.nix deleted file mode 100644 index 21896b3..0000000 --- a/shell.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ pkgs -, environment -}: - -with pkgs; - -mkShell { - JUPYTER_PATH = "${environment}/lib/codedown"; - - buildInputs = [ - environment - (python3.withPackages (ps: with ps; [jupyter ipython])) - ]; -} From 2d287d8106ffad9693f4813dad8367b53ef49f39 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Tue, 17 Sep 2024 19:02:20 -0700 Subject: [PATCH 11/40] Another rename --- codedown.nix | 2 +- ...{validateCodeDownEnvironment.nix => validateEnvironment.nix} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename nix/{validateCodeDownEnvironment.nix => validateEnvironment.nix} (100%) diff --git a/codedown.nix b/codedown.nix index 81bc8fb..acaa046 100644 --- a/codedown.nix +++ b/codedown.nix @@ -60,7 +60,7 @@ rec { inherit pkgsStable pkgsMaster; }; - validateCodeDownEnvironment = callPackage ./nix/validateCodeDownEnvironment.nix {}; + validateEnvironment = callPackage ./nix/validateEnvironment.nix {}; # Exposed so it's easier to compute build dependencies in the presence of IFD inherit pkgsStable pkgsMaster requiredPackages; diff --git a/nix/validateCodeDownEnvironment.nix b/nix/validateEnvironment.nix similarity index 100% rename from nix/validateCodeDownEnvironment.nix rename to nix/validateEnvironment.nix From 0e3467dc1251ee61fbc1ba6a14812442c00e2cfc Mon Sep 17 00:00:00 2001 From: thomasjm Date: Tue, 17 Sep 2024 19:30:07 -0700 Subject: [PATCH 12/40] Fix another path --- modules/exporters/nbconvert.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/exporters/nbconvert.nix b/modules/exporters/nbconvert.nix index 8645a71..e78e7fc 100644 --- a/modules/exporters/nbconvert.nix +++ b/modules/exporters/nbconvert.nix @@ -52,7 +52,7 @@ symlinkJoin { name = "nbconvert-exporters"; description = "CodeDown exporters for PDF, HTML, LaTeX, slides, etc."; - icon = ../codedown-icon.png; + icon = ../../codedown-icon.png; # To separate these out in search results category = "Exporters"; From 330b8ddd4b647890893db4f83b3e801e6e1548f5 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Tue, 17 Sep 2024 19:30:20 -0700 Subject: [PATCH 13/40] Working on type conversion --- modules/base/convert-type.nix | 15 +++++++++++ .../base/nixos-options-to-settings-schema.nix | 25 +++++++++++++------ modules/languages/bash/module.nix | 4 ++- modules/languages/rust/module.nix | 4 ++- 4 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 modules/base/convert-type.nix diff --git a/modules/base/convert-type.nix b/modules/base/convert-type.nix new file mode 100644 index 0000000..0432c9d --- /dev/null +++ b/modules/base/convert-type.nix @@ -0,0 +1,15 @@ +{ config, lib, ... }: + +let + convertType = type: + if (type.name == "str") then "string" + else if (type.name == "anything") then "any" + else if (type.name == "bool") then "boolean" + else if (type.name == "listOf") then "[" + (convertType type.nestedTypes.elemType) + "]" + else if (type.name == "enum") then "(" + "asdf" + ")" + else builtins.throw "Can't convert type: ${toString type.name}" + ; + +in + +convertType diff --git a/modules/base/nixos-options-to-settings-schema.nix b/modules/base/nixos-options-to-settings-schema.nix index 3803266..d41537d 100644 --- a/modules/base/nixos-options-to-settings-schema.nix +++ b/modules/base/nixos-options-to-settings-schema.nix @@ -1,17 +1,26 @@ -{ config, lib, ... }: +{ config, lib, ... }@args: + +{ + componentsToDrop ? 0 +}: options: let + convertType = import ./convert-type.nix args; + flattened = lib.optionAttrSetToDocList options; - convert = v: { - target = v.name; - type = v.type; - loc = v.loc; - } - // lib.optionalAttrs (lib.hasAttr "default" v) { defaultValue = convertDefaultValue v.default; } - // lib.optionalAttrs (lib.hasAttr "description" v && builtins.typeOf v.description == "string") { description = v.description; } + convert = v: let + defaultItem = { type = { name = "unknown"; }; }; + in + { + target = v.name; + type = convertType (lib.attrByPath (lib.drop componentsToDrop v.loc) defaultItem options).type; + loc = v.loc; + } + // lib.optionalAttrs (lib.hasAttr "default" v) { defaultValue = convertDefaultValue v.default; } + // lib.optionalAttrs (lib.hasAttr "description" v && builtins.typeOf v.description == "string") { inherit (v) description; } ; evalString = str: builtins.scopedImport {} (builtins.toFile "expr.nix" str); diff --git a/modules/languages/bash/module.nix b/modules/languages/bash/module.nix index f52dc9a..1e74605 100644 --- a/modules/languages/bash/module.nix +++ b/modules/languages/bash/module.nix @@ -32,7 +32,9 @@ with lib; builtKernels.bash = config.pkgs.callPackage ./. { bash = config.pkgs.bash; inherit (config.kernels.bash) attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.bash; + settingsSchema = nixosOptionsToSettingsSchema { + componentsToDrop = 2; + } options.kernels.bash; }; }; } diff --git a/modules/languages/rust/module.nix b/modules/languages/rust/module.nix index d7f3eb6..00d9842 100644 --- a/modules/languages/rust/module.nix +++ b/modules/languages/rust/module.nix @@ -55,7 +55,9 @@ with lib; rust = getAttr config.kernels.rust.rustPackage config.pkgs; inherit (config.kernels.rust) packages attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.rust; + settingsSchema = nixosOptionsToSettingsSchema { + componentsToDrop = 2; + } options.kernels.rust; }; }; } From bf51f576cf0be8cf6cd0dadd0c2c7abc59e96878 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 01:44:08 -0700 Subject: [PATCH 14/40] Working on converting module types --- modules/base/convert-type.nix | 22 +++++++++++++++---- .../base/nixos-options-to-settings-schema.nix | 2 +- modules/languages/bash/module.nix | 4 +--- modules/languages/clojure/module.nix | 2 +- modules/languages/coq/module.nix | 2 +- modules/languages/cpp/module.nix | 2 +- modules/languages/go/module.nix | 2 +- modules/languages/haskell/module.nix | 2 +- modules/languages/julia/module.nix | 2 +- modules/languages/octave/module.nix | 2 +- modules/languages/postgres/module.nix | 2 +- modules/languages/python/module.nix | 4 ++-- modules/languages/r/module.nix | 2 +- modules/languages/ruby/module.nix | 2 +- modules/languages/rust/module.nix | 4 +--- 15 files changed, 33 insertions(+), 23 deletions(-) diff --git a/modules/base/convert-type.nix b/modules/base/convert-type.nix index 0432c9d..9c423b2 100644 --- a/modules/base/convert-type.nix +++ b/modules/base/convert-type.nix @@ -1,13 +1,27 @@ { config, lib, ... }: let - convertType = type: + convertType = target: type: if (type.name == "str") then "string" else if (type.name == "anything") then "any" else if (type.name == "bool") then "boolean" - else if (type.name == "listOf") then "[" + (convertType type.nestedTypes.elemType) + "]" - else if (type.name == "enum") then "(" + "asdf" + ")" - else builtins.throw "Can't convert type: ${toString type.name}" + else if (type.name == "attrs") then { + tag = "attrs"; + } + else if (type.name == "listOf") then { + tag = "list"; + value = convertType target type.nestedTypes.elemType; + } + else if (type.name == "enum") then { + tag = "enum"; + values = type.functor.payload; + } + else if (type.name == "either") then { + tag = "either"; + left = convertType target type.nestedTypes.left; + right = convertType target type.nestedTypes.right; + } + else builtins.throw "Can't convert type for '${target}': ${toString type.name}" ; in diff --git a/modules/base/nixos-options-to-settings-schema.nix b/modules/base/nixos-options-to-settings-schema.nix index d41537d..90b8c34 100644 --- a/modules/base/nixos-options-to-settings-schema.nix +++ b/modules/base/nixos-options-to-settings-schema.nix @@ -16,7 +16,7 @@ let in { target = v.name; - type = convertType (lib.attrByPath (lib.drop componentsToDrop v.loc) defaultItem options).type; + type = convertType v.name (lib.attrByPath (lib.drop componentsToDrop v.loc) defaultItem options).type; loc = v.loc; } // lib.optionalAttrs (lib.hasAttr "default" v) { defaultValue = convertDefaultValue v.default; } diff --git a/modules/languages/bash/module.nix b/modules/languages/bash/module.nix index 1e74605..2864f75 100644 --- a/modules/languages/bash/module.nix +++ b/modules/languages/bash/module.nix @@ -32,9 +32,7 @@ with lib; builtKernels.bash = config.pkgs.callPackage ./. { bash = config.pkgs.bash; inherit (config.kernels.bash) attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema { - componentsToDrop = 2; - } options.kernels.bash; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.bash; }; }; } diff --git a/modules/languages/clojure/module.nix b/modules/languages/clojure/module.nix index 06c2999..e192952 100644 --- a/modules/languages/clojure/module.nix +++ b/modules/languages/clojure/module.nix @@ -32,7 +32,7 @@ with lib; builtKernels.clojure = config.pkgs.callPackage ./. { clojure = config.pkgs.clojure; inherit (config.kernels.clojure) attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.clojure; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.clojure; }; }; } diff --git a/modules/languages/coq/module.nix b/modules/languages/coq/module.nix index 335cff0..72d5ed7 100644 --- a/modules/languages/coq/module.nix +++ b/modules/languages/coq/module.nix @@ -42,7 +42,7 @@ with lib; inherit (config.kernels.coq) packages attrs extensions; settings = {}; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.coq; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.coq; }; }; } diff --git a/modules/languages/cpp/module.nix b/modules/languages/cpp/module.nix index 2622f74..61bf6e0 100644 --- a/modules/languages/cpp/module.nix +++ b/modules/languages/cpp/module.nix @@ -53,7 +53,7 @@ with lib; attrs = [config.kernels.cpp.flavor] ++ config.kernels.cpp.attrs; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.cpp; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.cpp; }; }; } diff --git a/modules/languages/go/module.nix b/modules/languages/go/module.nix index 7776230..3005d58 100644 --- a/modules/languages/go/module.nix +++ b/modules/languages/go/module.nix @@ -55,7 +55,7 @@ with lib; go = getAttr config.kernels.go.goPackage config.pkgs; inherit (config.kernels.go) packages attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.go; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.go; }; }; } diff --git a/modules/languages/haskell/module.nix b/modules/languages/haskell/module.nix index 865c214..568f6b9 100644 --- a/modules/languages/haskell/module.nix +++ b/modules/languages/haskell/module.nix @@ -75,7 +75,7 @@ with lib; snapshot = getAttr config.kernels.haskell.ghcPackage compilers; inherit (config.kernels.haskell) packages attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.haskell; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.haskell; }; }; } diff --git a/modules/languages/julia/module.nix b/modules/languages/julia/module.nix index f2b0cd5..595de28 100644 --- a/modules/languages/julia/module.nix +++ b/modules/languages/julia/module.nix @@ -67,7 +67,7 @@ with lib; julia = getAttr config.kernels.julia.juliaPackage config.pkgs; inherit (config.kernels.julia) packages attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.julia; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.julia; }; }; } diff --git a/modules/languages/octave/module.nix b/modules/languages/octave/module.nix index 0e661bf..8f46404 100644 --- a/modules/languages/octave/module.nix +++ b/modules/languages/octave/module.nix @@ -37,7 +37,7 @@ with lib; builtKernels.octave = config.pkgs.callPackage ./. { octave = config.pkgs.octave; inherit (config.kernels.octave) packages attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.octave; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.octave; }; }; } diff --git a/modules/languages/postgres/module.nix b/modules/languages/postgres/module.nix index 3102195..3515cc0 100644 --- a/modules/languages/postgres/module.nix +++ b/modules/languages/postgres/module.nix @@ -32,7 +32,7 @@ with lib; config = mkIf config.kernels.postgres.enable { builtKernels.postgres = config.pkgs.callPackage ./. { inherit (config.kernels.postgres) packages attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.postgres; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.postgres; }; }; } diff --git a/modules/languages/python/module.nix b/modules/languages/python/module.nix index ecb6a25..efac61c 100644 --- a/modules/languages/python/module.nix +++ b/modules/languages/python/module.nix @@ -126,7 +126,7 @@ in python3 = basePython; inherit (config.kernels.python3) packages attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.python3; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.python3; }; }) @@ -136,7 +136,7 @@ in python3 = lib.getAttr config.kernels.pypy3.python3Package config.pkgs; inherit (config.kernels.pypy3) packages attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.pypy3; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.pypy3; }; }) ]; diff --git a/modules/languages/r/module.nix b/modules/languages/r/module.nix index 8beb4d1..5c9af48 100644 --- a/modules/languages/r/module.nix +++ b/modules/languages/r/module.nix @@ -37,7 +37,7 @@ with lib; builtKernels.R = config.pkgs.callPackage ./. { R = config.pkgs.R; inherit (config.kernels.R) packages attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.R; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.R; }; }; } diff --git a/modules/languages/ruby/module.nix b/modules/languages/ruby/module.nix index 206b9e7..759ff33 100644 --- a/modules/languages/ruby/module.nix +++ b/modules/languages/ruby/module.nix @@ -52,7 +52,7 @@ in ruby = getAttr config.kernels.ruby.rubyPackage pkgs; inherit (config.kernels.ruby) packages attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema options.kernels.ruby; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.ruby; }; }; } diff --git a/modules/languages/rust/module.nix b/modules/languages/rust/module.nix index 00d9842..ae539be 100644 --- a/modules/languages/rust/module.nix +++ b/modules/languages/rust/module.nix @@ -55,9 +55,7 @@ with lib; rust = getAttr config.kernels.rust.rustPackage config.pkgs; inherit (config.kernels.rust) packages attrs extensions settings; - settingsSchema = nixosOptionsToSettingsSchema { - componentsToDrop = 2; - } options.kernels.rust; + settingsSchema = nixosOptionsToSettingsSchema { componentsToDrop = 2; } options.kernels.rust; }; }; } From 3a6383bb28d11262b6156b4b7a0b1df4aaca7415 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 01:50:14 -0700 Subject: [PATCH 15/40] Use submodule for Rust package types --- modules/languages/rust/module.nix | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/modules/languages/rust/module.nix b/modules/languages/rust/module.nix index ae539be..0c86bae 100644 --- a/modules/languages/rust/module.nix +++ b/modules/languages/rust/module.nix @@ -11,7 +11,18 @@ with lib; }; packages = mkOption { - type = types.listOf (types.either types.str types.attrs); + type = types.listOf (types.either types.str (types.submodule { + options = { + name = mkOption rec { + type = types.str; + description = "Package name"; + }; + settings.features = mkOption rec { + type = types.listOf types.str; + description = "Features to enable for the package"; + }; + }; + })); default = []; }; From 2340591efb159107ecd4e894320d6f6bb9f21295 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 01:50:22 -0700 Subject: [PATCH 16/40] Stub submodule handling in convert-type.nix --- modules/base/convert-type.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/base/convert-type.nix b/modules/base/convert-type.nix index 9c423b2..90a9e84 100644 --- a/modules/base/convert-type.nix +++ b/modules/base/convert-type.nix @@ -21,6 +21,10 @@ let left = convertType target type.nestedTypes.left; right = convertType target type.nestedTypes.right; } + else if (type.name == "submodule") then { + tag = "submodule"; + foo = "BAR"; + } else builtins.throw "Can't convert type for '${target}': ${toString type.name}" ; From ac43fc0cd1901d351ccf89d8a5731d199d69667d Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 13:04:51 -0700 Subject: [PATCH 17/40] ui metadata farm build working --- modules/languages/haskell/default.nix | 3 +++ nix/makeEnvironment.nix | 25 +++++++++++-------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/modules/languages/haskell/default.nix b/modules/languages/haskell/default.nix index f79d370..7494289 100644 --- a/modules/languages/haskell/default.nix +++ b/modules/languages/haskell/default.nix @@ -75,6 +75,9 @@ symlinkJoin { ; passthru = { + args = { + inherit attrs extensions settings packages; + }; meta = { baseName = "haskell-" + compilerName; name = "haskell-" + compilerName; diff --git a/nix/makeEnvironment.nix b/nix/makeEnvironment.nix index 8cc2be8..171b7f4 100644 --- a/nix/makeEnvironment.nix +++ b/nix/makeEnvironment.nix @@ -18,9 +18,7 @@ config: with lib; let - evaluateConfig = callPackage ./evaluate-config.nix { inherit pkgsStable pkgsMaster; }; - - evaluated = evaluateConfig config; + evaluated = (callPackage ./evaluate-config.nix { inherit pkgsStable pkgsMaster; }) config; builtKernels = mapAttrs (_: kernel: kernel.overrideAttrs (old: { @@ -37,19 +35,15 @@ let shellToReplInfo = shell: { name = shell.name; display_name = shell.meta.displayName; - attr = shell.meta.attr; - args = shell.meta.args; - icon = shell.meta.icon; + inherit (shell.meta) attr args icon; }; in map shellToReplInfo (attrValues builtShells) - ++ concatMap (kernel: lib.mapAttrsToList (name: value: value // { inherit name; }) (if kernel.passthru ? "repls" then kernel.passthru.repls else {})) (attrValues builtKernels) + ++ concatMap (kernel: lib.mapAttrsToList (name: value: value // { inherit name; }) (kernel.repls or {})) (attrValues builtKernels) ; exporters = concatMap (exporter: exporter.meta.exporterInfos) (attrValues builtExporters); - uiMetadata = callPackage ./uiMetadata.nix {}; - in symlinkJoin { @@ -66,13 +60,16 @@ symlinkJoin { inherit channels; - ui_metadata = { - # channels = lib.mapAttrsToList uiMetadata.mkChannelUiMetadata channels; + ui_metadata = let + uiMetadata = callPackage ./uiMetadata.nix {}; + in + { + # channels = lib.mapAttrsToList uiMetadata.mkChannelUiMetadata channels; - kernels = map uiMetadata.mkKernelUiMetadata (attrValues builtKernels); + kernels = map uiMetadata.mkKernelUiMetadata (attrValues builtKernels); - # other_packages = map uiMetadata.mkOtherPackageUiMetadata otherPackages; - }; + # other_packages = map uiMetadata.mkOtherPackageUiMetadata otherPackages; + }; ui_metadata_yaml = writeText "ui-metadata.yaml" (lib.generators.toYAML {} ui_metadata); }; From 96a6f3aabc4815260f982f742f7327fa77c426c7 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 13:08:13 -0700 Subject: [PATCH 18/40] Fix verify-default-nix script --- .aliases/verify-default-nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.aliases/verify-default-nix b/.aliases/verify-default-nix index ff57339..fc78da6 100755 --- a/.aliases/verify-default-nix +++ b/.aliases/verify-default-nix @@ -9,16 +9,16 @@ SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd "$SCRIPTDIR/.." FLAKE_NIXPKGS_REV=$(nix flake metadata --json | jq -r .locks.nodes.nixpkgs.locked.rev) -FLAKE_NIXPKGS_UNSTABLE_REV=$(nix flake metadata --json | jq -r '.locks.nodes["nixpkgs-unstable"].locked.rev') +FLAKE_NIXPKGS_MASTER_REV=$(nix flake metadata --json | jq -r '.locks.nodes["nixpkgs-master"].locked.rev') echo "FLAKE_NIXPKGS_REV: $FLAKE_NIXPKGS_REV" -echo "FLAKE_NIXPKGS_UNSTABLE_REV: $FLAKE_NIXPKGS_UNSTABLE_REV" +echo "FLAKE_NIXPKGS_MASTER_REV: $FLAKE_NIXPKGS_MASTER_REV" DEFAULT_NIXPKGS_REV=$(cat default.nix | grep nixpkgs-rev | cut -d'"' -f2) -DEFAULT_NIXPKGS_UNSTABLE_REV=$(cat default.nix | grep nixpkgs-unstable-rev | cut -d'"' -f2) +DEFAULT_NIXPKGS_MASTER_REV=$(cat default.nix | grep nixpkgs-master-rev | cut -d'"' -f2) echo "DEFAULT_NIXPKGS_REV: $DEFAULT_NIXPKGS_REV" -echo "DEFAULT_NIXPKGS_UNSTABLE_REV: $DEFAULT_NIXPKGS_UNSTABLE_REV" +echo "DEFAULT_NIXPKGS_MASTER_REV: $DEFAULT_NIXPKGS_MASTER_REV" if [ "$FLAKE_NIXPKGS_REV" != "$DEFAULT_NIXPKGS_REV" ]; then @@ -26,7 +26,7 @@ if [ "$FLAKE_NIXPKGS_REV" != "$DEFAULT_NIXPKGS_REV" ]; then exit 1 fi -if [ "$FLAKE_NIXPKGS_UNSTABLE_REV" != "$DEFAULT_NIXPKGS_UNSTABLE_REV" ]; then - echo "nixpkgs-unstable rev differed between flake and default.nix" +if [ "$FLAKE_NIXPKGS_MASTER_REV" != "$DEFAULT_NIXPKGS_MASTER_REV" ]; then + echo "nixpkgs-master rev differed between flake and default.nix" exit 1 fi From b44948ea48f55e3cca1956bce5d2694e194d5d10 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 13:08:20 -0700 Subject: [PATCH 19/40] ci: add build of .#ui_metadata_farm --- .github/workflows/ci.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2c1f176..0c7e762 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,17 @@ jobs: if: "!contains(github.event.head_commit.message, 'noci')" run: ./.aliases/verify-default-nix + build-ui-metadata: + runs-on: self-hosted + + steps: + - uses: actions/checkout@v4 + + - name: verify-default-nix.sh + if: "!contains(github.event.head_commit.message, 'noci')" + run: | + nix build .#ui_metadata_farm + test: name: ${{matrix.suite.name}} (${{matrix.suite.flags}}) runs-on: self-hosted From 77a0f5397ae41bc2fc520a03669822197e05cb65 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 13:09:21 -0700 Subject: [PATCH 20/40] ci: try using nixpkgsPath --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0c7e762..904064d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,7 +69,7 @@ jobs: run: | cd tests - export NIX_PATH=nixpkgs=$(nix run .#nixpkgsUnstablePath) + export NIX_PATH=nixpkgs=$(nix run .#nixpkgsPath) export PATH=$(nix build --no-link .#stack.x86_64-linux --json | jq -r '.[0].outputs.out')/bin:$PATH echo "Got path: $PATH" @@ -85,7 +85,7 @@ jobs: echo "Got TEST_ROOT: $TEST_ROOT" echo TEST_ROOT="$TEST_ROOT" >> $GITHUB_ENV - export NIX_PATH=nixpkgs=$(nix run .#nixpkgsUnstablePath) + export NIX_PATH=nixpkgs=$(nix run .#nixpkgsPath) export PATH=$(nix build --no-link .#stack.x86_64-linux --json | jq -r '.[0].outputs.out')/bin:$PATH stack run --nix --no-nix-pure -- \ From ed657947b036c74303faa5324d7d53c1d794af53 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 13:34:01 -0700 Subject: [PATCH 21/40] Remove another nixpkgs unstable reference --- tests/.envrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/.envrc b/tests/.envrc index 7e2a130..8243ab1 100644 --- a/tests/.envrc +++ b/tests/.envrc @@ -1,2 +1,2 @@ -export NIX_PATH=nixpkgs=$(nix run .#nixpkgsUnstablePath) +export NIX_PATH=nixpkgs=$(nix run .#nixpkgsPath) From 292bfc5f1e55bbb7235e69de604b7ec0fa7628f1 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 13:34:23 -0700 Subject: [PATCH 22/40] Use sandwich-contexts postgres context --- tests/app/Spec/Tests/Postgres.hs | 10 +- tests/package.yaml | 2 +- tests/src/TestLib/Contexts/PostgresqlData.hs | 12 +- .../TestLib/Contexts/PostgresqlDatabase.hs | 218 ------------------ tests/tests.cabal | 5 +- tests/tests.nix | 21 +- 6 files changed, 27 insertions(+), 241 deletions(-) delete mode 100644 tests/src/TestLib/Contexts/PostgresqlDatabase.hs diff --git a/tests/app/Spec/Tests/Postgres.hs b/tests/app/Spec/Tests/Postgres.hs index 8b1f81a..cfc626e 100644 --- a/tests/app/Spec/Tests/Postgres.hs +++ b/tests/app/Spec/Tests/Postgres.hs @@ -8,8 +8,10 @@ import qualified Data.Map as M import Data.String.Interpolate import qualified Data.Vector as V import Test.Sandwich as Sandwich +import Test.Sandwich.Contexts.Nix (introduceNixContext, nixpkgsReleaseDefault) +import Test.Sandwich.Contexts.PostgreSQL import TestLib.Contexts.PostgresqlData -import TestLib.Contexts.PostgresqlDatabase +import TestLib.Contexts.PostgresqlData () import TestLib.JupyterRunnerContext import TestLib.JupyterTypes import TestLib.NixEnvironmentContext @@ -34,10 +36,10 @@ tests = describe "Postgres tests" $ introduceNixEnvironment [kernelSpec] [] "Pos testKernelSearchersBuild "postgres" testHasExpectedFields "postgres" - introducePostgres Nothing $ introducePostgresData $ do + introduceNixContext nixpkgsReleaseDefault $ introducePostgresViaNix defaultPostgresNixOptions $ introducePostgresData $ do it "selects from test_table" $ do - (_, ctx) <- getContext postgresDb - let connStr = postgresConnString ctx + PostgresContext {..} <- getContext postgres + let connStr = postgresConnString info [i|Connection string: #{connStr}|] displayDatasShouldSatisfy "postgres" [__i|-- connection: #{connStr} SELECT * FROM test_table diff --git a/tests/package.yaml b/tests/package.yaml index 6fb0072..35b3ced 100644 --- a/tests/package.yaml +++ b/tests/package.yaml @@ -72,7 +72,7 @@ library: - unliftio-core executables: - tests-exe: + tests: main: Main.hs source-dirs: app ghc-options: diff --git a/tests/src/TestLib/Contexts/PostgresqlData.hs b/tests/src/TestLib/Contexts/PostgresqlData.hs index d9bfa66..a98ecb5 100644 --- a/tests/src/TestLib/Contexts/PostgresqlData.hs +++ b/tests/src/TestLib/Contexts/PostgresqlData.hs @@ -7,20 +7,22 @@ module TestLib.Contexts.PostgresqlData ( import Control.Monad.Catch (MonadMask) import Control.Monad.IO.Unlift import Control.Monad.Trans.Control (MonadBaseControl) -import Data.Pool import Data.String.Interpolate import Data.Text as T +import Data.Text.Encoding import Database.PostgreSQL.Simple import Test.Sandwich -import TestLib.Contexts.PostgresqlDatabase +import Test.Sandwich.Contexts.PostgreSQL +import UnliftIO.Exception introducePostgresData :: ( - HasBaseContext context, MonadMask m, MonadBaseControl IO m, MonadUnliftIO m, HasPostgresDb context + MonadMask m, MonadBaseControl IO m, MonadUnliftIO m + , HasBaseContext context, HasLabel context "postgres" PostgresContext ) => SpecFree context m () -> SpecFree context m () introducePostgresData = before "Postgres data" $ do - (pool, PostgresDatabaseTestContext {}) <- getContext postgresDb - withResource pool $ \conn -> liftIO $ do + PostgresContext {..} <- getContext postgres + liftIO $ bracket (connectPostgreSQL (encodeUtf8 postgresConnString)) close $ \conn -> do _ <- execute_ conn [i|create table test_table (name varchar(40), num smallint)|] affected <- executeMany conn "insert into test_table (name, num) values (?, ?)" [ diff --git a/tests/src/TestLib/Contexts/PostgresqlDatabase.hs b/tests/src/TestLib/Contexts/PostgresqlDatabase.hs deleted file mode 100644 index 00fa21a..0000000 --- a/tests/src/TestLib/Contexts/PostgresqlDatabase.hs +++ /dev/null @@ -1,218 +0,0 @@ -{-# LANGUAGE GADTs #-} - -module TestLib.Contexts.PostgresqlDatabase ( - introducePostgres - , introducePostgres' - , postgresDb - , HasPostgresDb - - , PostgresDatabaseTestContext (..) - , withPostgresDatabase - - , createPostgresDatabase - , waitForPostgresDatabase - - , postgresConnString - ) where - -import Control.Monad -import Control.Monad.Catch (MonadMask, MonadThrow) -import Control.Monad.IO.Unlift -import Control.Monad.Logger -import Control.Monad.Reader -import Control.Monad.Trans.Control (MonadBaseControl) -import Control.Retry -import Data.Function -import Data.List as L -import Data.Map as M -import Data.Maybe -import Data.Pool -import Data.String.Interpolate -import Data.Text as T -import qualified Data.Text.Encoding as T -import qualified Database.PostgreSQL.LibPQ as LPQ -import qualified Database.PostgreSQL.Simple as PGS -import qualified Database.PostgreSQL.Simple.Internal as PGS -import GHC.Stack -import Network.Socket (PortNumber) -import Safe -import System.Exit -import System.Process -import qualified System.Random as R -import Test.Sandwich -import UnliftIO.Async -import UnliftIO.Concurrent -import UnliftIO.Exception - - --- * Labels - -postgresDb :: Label "postgresDb" (Pool PGS.Connection, PostgresDatabaseTestContext) -postgresDb = Label - -type HasPostgresDb context = HasLabel context "postgresDb" (Pool PGS.Connection, PostgresDatabaseTestContext) - --- * Introduce functions - -introducePostgres :: ( - HasBaseContext context, MonadMask m, MonadBaseControl IO m, MonadUnliftIO m - ) => Maybe Text -> SpecFree (LabelValue "postgresDb" (Pool PGS.Connection, PostgresDatabaseTestContext) :> context) m () -> SpecFree context m () -introducePostgres = introducePostgres' mempty - -introducePostgres' :: (MonadMask m, MonadBaseControl IO m, MonadUnliftIO m, HasBaseContext context) - => Map Text Text -> Maybe Text -> SpecFree (LabelValue "postgresDb" (Pool PGS.Connection, PostgresDatabaseTestContext) :> context) m () -> SpecFree context m () -introducePostgres' labels maybeContainerName = introduceWith "Postgres database" postgresDb $ \cb -> - withPostgresDatabase labels maybeContainerName $ \ctx@(PostgresDatabaseTestContext {..}) -> do - let databaseConfig = PostgresDatabaseConfig { - databaseHostname = postgresDatabaseLocalHostname - , databasePort = postgresDatabaseLocalPort - , databaseUsername = postgresDatabaseUsername - , databasePassword = postgresDatabasePassword - , databaseDatabase = postgresDatabaseDatabase - } - - -- Retry until we connect successfully, since apparently the Docker healthcheck using pg_isready isn't enough - let policy = constantDelay 50000 <> limitRetries 50 - _ <- recoverAll policy (\_ -> liftIO $ PGS.connectPostgreSQL (T.encodeUtf8 $ postgresConnString ctx)) - - withSqlPool 5 databaseConfig $ \(pool, _) -> - void $ cb (pool, ctx) - --- * Implementation - -withPostgresDatabase :: ( - HasCallStack, MonadUnliftIO m, MonadBaseControl IO m, MonadLoggerIO m, MonadMask m, MonadReader context m, HasBaseContext context - ) => Map Text Text -> Maybe Text -> (PostgresDatabaseTestContext -> m a) -> m a -withPostgresDatabase labels maybeContainerName action = do - -- ds <- getDockerState False - - bracket (createPostgresDatabase labels maybeContainerName) - (\(_, _, _, _, _, _containerID, containerName, _networkName) -> timeAction "cleanup Postgres database" $ do - info [i|Doing docker rm -f #{containerName}|] - void $ liftIO $ readCreateProcess (shell [i|docker rm -f #{containerName}|]) "" - -- void $ removeNetwork ds networkName - ) - (\args@(_, _, _, _, _, _, _, _networkName) -> do - ctx <- waitForPostgresDatabase args - -- testInContainer <- liftIO isInContainer - -- let wrapper = if testInContainer then withJoinOwnContainerToNetwork ds networkName else id - -- flip finally (removeNetwork ds networkName) $ - id (action ctx) - ) - -createPostgresDatabase :: ( - HasCallStack, MonadLoggerIO m, MonadUnliftIO m, MonadBaseControl IO m, MonadThrow m, MonadMask m, MonadReader context m, HasBaseContext context - ) => Map Text Text -> Maybe Text -> m (Text, PortNumber, Text, Text, Text, Text, Text, Text) -createPostgresDatabase labels maybeContainerName = timeAction "create Postgres database" $ do - containerName <- maybe (("postgres-" <>) <$> makeUUID' 8) return maybeContainerName - - let localHostname = "127.0.0.1" - let networkName = containerName <> "-network" - liftIO $ void $ readCreateProcess (proc "docker" ["network", "create", T.unpack networkName]) "" - - let password = "foo" - let database = "test" - let username = "test" - -- TODO: use shell escape on this - let labelArgs = [[i|-l #{k}=#{v}|] | (k, v) <- M.toList labels] - let cmd = [iii|docker run -e POSTGRES_PASSWORD=#{password} - -e POSTGRES_USER=#{username} - -p 5432 - #{T.unwords labelArgs} - --network #{networkName} - --health-cmd='pg_isready -U #{username}' - --health-interval=100ms - --name #{containerName} - -d postgres:13|] - - info [i|cmd: #{cmd}|] - (exitCode, sout, serr) <- liftIO $ readCreateProcessWithExitCode (shell $ T.unpack $ replace "\n" " " cmd) "" - - containerID <- case exitCode of - ExitSuccess -> return $ strip $ T.pack sout - _ -> expectationFailure [i|Failed to start Postgres container. Stdout: '#{sout}'. Stderr: '#{serr}'|] - - return (localHostname, 5432, username, password, database, containerID, containerName, networkName) - -waitForPostgresDatabase :: ( - MonadUnliftIO m, MonadBaseControl IO m, MonadLoggerIO m, MonadThrow m - ) => (Text, PortNumber, Text, Text, Text, Text, Text, Text) -> m PostgresDatabaseTestContext -waitForPostgresDatabase (localHostname, dockerPort, username, password, database, containerID, containerName, networkName) = do - rawPort <- (strip . T.pack) <$> (liftIO $ readCreateProcess (shell [i|docker inspect --format='{{index .NetworkSettings.Ports "5432/tcp" 0 "HostPort"}}' #{containerName}|]) "") - let localPort = fromMaybe (error [i|Couldn't read Docker port number: '#{rawPort}'|]) (readMay $ T.unpack rawPort) - - waitForHealth containerID - - let pdtc = PostgresDatabaseTestContext { - postgresDatabaseLocalHostname = localHostname - , postgresDatabaseLocalPort = localPort - , postgresDatabaseUsername = username - , postgresDatabasePassword = password - , postgresDatabaseDatabase = database - , postgresDatabaseDockerPort = dockerPort - , postgresDatabaseDockerNetwork = networkName - , postgresDatabaseContainerName = containerName - } - - -- waitForSimpleQuery pdtc - - return pdtc - - -data PostgresDatabaseTestContext = PostgresDatabaseTestContext { - postgresDatabaseLocalHostname :: Text - , postgresDatabaseLocalPort :: PortNumber - , postgresDatabaseUsername :: Text - , postgresDatabasePassword :: Text - , postgresDatabaseDatabase :: Text - , postgresDatabaseDockerPort :: PortNumber - , postgresDatabaseDockerNetwork :: Text - , postgresDatabaseContainerName :: Text } - deriving (Show, Eq) - -data PostgresDatabaseConfig = PostgresDatabaseConfig { - databaseHostname :: Text - , databasePort :: PortNumber - , databaseUsername :: Text - , databasePassword :: Text - , databaseDatabase :: Text - } deriving (Show, Eq) - -waitForHealth :: forall m. (HasCallStack, MonadLoggerIO m, MonadUnliftIO m, MonadBaseControl IO m, MonadThrow m) => Text -> m () -waitForHealth containerID = race (liftIO $ threadDelay 60_000_000) waitForHealthLoop >>= \case - Left () -> do - info [i|Failed to wait for container #{containerID} to be ready|] - expectationFailure [i|Failed to wait for container to be ready|] - Right () -> return () - where - waitForHealthLoop :: m () - waitForHealthLoop = fix $ \loop -> do - health <- (strip . T.pack) <$> (liftIO $ readCreateProcess (shell [i|docker inspect --format "{{json .State.Health.Status }}" #{containerID}|]) "") - case health of - "\"healthy\"" -> return () - _ -> liftIO (threadDelay 100_000) >> loop - -postgresConnString :: PostgresDatabaseTestContext -> Text -postgresConnString (PostgresDatabaseTestContext {..}) = [i|postgresql://#{postgresDatabaseUsername}:#{postgresDatabasePassword}@#{postgresDatabaseLocalHostname}:#{postgresDatabaseLocalPort}/#{postgresDatabaseDatabase}|] - -uuidLetters :: [Char] -uuidLetters = ['a'..'z'] ++ ['0'..'9'] - -numUUIDLetters :: Int -numUUIDLetters = L.length uuidLetters - -makeUUID' :: MonadIO m => Int -> m Text -makeUUID' n = T.pack <$> (replicateM n ((uuidLetters L.!!) <$> R.randomRIO (0, numUUIDLetters - 1))) - -withSqlPool :: forall m a. (MonadMask m, MonadIO m, MonadUnliftIO m) => Int -> PostgresDatabaseConfig -> ((Pool PGS.Connection, PostgresDatabaseConfig) -> m a) -> m a -withSqlPool n config action = do - bracket (liftIO $ createPool (connectPostgres config) PGS.close 1 30 (fromIntegral n)) - (liftIO . purgePool) - (\pool -> action (pool, config)) - -connectPostgres :: PostgresDatabaseConfig -> IO PGS.Connection -connectPostgres (PostgresDatabaseConfig {..}) = do - let connString = [i|postgresql://#{databaseUsername}:#{unpack databasePassword}@#{databaseHostname}:#{databasePort}/#{databaseDatabase}|] - conn <- PGS.connectPostgreSQL connString - withMVar (PGS.connectionHandle conn) LPQ.disableNoticeReporting - return conn diff --git a/tests/tests.cabal b/tests/tests.cabal index 9d35352..0f68bb1 100644 --- a/tests/tests.cabal +++ b/tests/tests.cabal @@ -1,6 +1,6 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.36.0. +-- This file has been generated from package.yaml by hpack version 0.37.0. -- -- see: https://github.com/sol/hpack @@ -20,7 +20,6 @@ library exposed-modules: TestLib.Aeson TestLib.Contexts.PostgresqlData - TestLib.Contexts.PostgresqlDatabase TestLib.JupyterRunnerContext TestLib.JupyterTypes TestLib.LSP @@ -88,7 +87,7 @@ library , vector default-language: Haskell2010 -executable tests-exe +executable tests main-is: Main.hs other-modules: Spec.Tests diff --git a/tests/tests.nix b/tests/tests.nix index dc1dadb..55d5f99 100644 --- a/tests/tests.nix +++ b/tests/tests.nix @@ -3,8 +3,8 @@ , filepath, lens, lib, lsp-test, lsp-types, monad-control , monad-logger, mtl, network, optparse-applicative , postgresql-libpq, postgresql-simple, process, random, retry -, row-types, safe, sandwich, string-interpolate, temporary, text -, time, unliftio, unliftio-core, vector +, row-types, safe, sandwich, sandwich-contexts, string-interpolate +, temporary, text, unliftio, unliftio-core, vector }: mkDerivation { pname = "tests"; @@ -15,17 +15,18 @@ mkDerivation { libraryHaskellDepends = [ aeson base bytestring conduit conduit-aeson containers data-default directory ex-pool exceptions filepath lens lsp-test lsp-types - monad-control monad-logger mtl network postgresql-libpq - postgresql-simple process random retry row-types safe sandwich - string-interpolate temporary text time unliftio unliftio-core - vector + monad-control monad-logger mtl network optparse-applicative + postgresql-libpq postgresql-simple process random retry row-types + safe sandwich sandwich-contexts string-interpolate temporary text + unliftio unliftio-core vector ]; executableHaskellDepends = [ - aeson base containers exceptions lens lsp-test lsp-types - monad-control monad-logger optparse-applicative safe sandwich - string-interpolate text vector + aeson base containers exceptions filepath lens lsp-test lsp-types + monad-control monad-logger mtl optparse-applicative row-types safe + sandwich sandwich-contexts string-interpolate text unliftio + unliftio-core vector ]; executableToolDepends = [ sandwich ]; license = lib.licenses.bsd3; - mainProgram = "tests-exe"; + mainProgram = "tests"; } From 086c47d06f7f6f561462ca38a618c78aeb50c3d7 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 13:36:55 -0700 Subject: [PATCH 23/40] One fix for postgres conn string --- tests/app/Spec/Tests/Postgres.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/app/Spec/Tests/Postgres.hs b/tests/app/Spec/Tests/Postgres.hs index cfc626e..074ec82 100644 --- a/tests/app/Spec/Tests/Postgres.hs +++ b/tests/app/Spec/Tests/Postgres.hs @@ -4,8 +4,10 @@ module Spec.Tests.Postgres (tests) where import Data.Aeson as A +import Data.Function import qualified Data.Map as M import Data.String.Interpolate +import qualified Data.Text as T import qualified Data.Vector as V import Test.Sandwich as Sandwich import Test.Sandwich.Contexts.Nix (introduceNixContext, nixpkgsReleaseDefault) @@ -40,6 +42,7 @@ tests = describe "Postgres tests" $ introduceNixEnvironment [kernelSpec] [] "Pos it "selects from test_table" $ do PostgresContext {..} <- getContext postgres let connStr = postgresConnString + & T.replace "localhost" "127.0.0.1" info [i|Connection string: #{connStr}|] displayDatasShouldSatisfy "postgres" [__i|-- connection: #{connStr} SELECT * FROM test_table From 0b1f482793b94281fa30c364c4cc37200ca74ade Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 13:40:51 -0700 Subject: [PATCH 24/40] Clean up test deps --- tests/package.yaml | 9 +-------- tests/tests.cabal | 7 ------- tests/tests.nix | 18 ++++++++---------- 3 files changed, 9 insertions(+), 25 deletions(-) diff --git a/tests/package.yaml b/tests/package.yaml index 35b3ced..8838bb6 100644 --- a/tests/package.yaml +++ b/tests/package.yaml @@ -40,7 +40,6 @@ dependencies: - monad-control - mtl - optparse-applicative -- safe - sandwich - sandwich-contexts - string-interpolate @@ -57,16 +56,9 @@ library: - conduit-aeson - data-default - directory - - ex-pool - monad-logger - - network - - postgresql-libpq - postgresql-simple - - process - - random - - retry - row-types - - safe - temporary - unliftio - unliftio-core @@ -83,6 +75,7 @@ executables: dependencies: - monad-logger - row-types + - safe - tests - unliftio - unliftio-core diff --git a/tests/tests.cabal b/tests/tests.cabal index 0f68bb1..a5533f9 100644 --- a/tests/tests.cabal +++ b/tests/tests.cabal @@ -59,7 +59,6 @@ library , containers , data-default , directory - , ex-pool , exceptions , filepath , lens @@ -68,15 +67,9 @@ library , monad-control , monad-logger , mtl - , network , optparse-applicative - , postgresql-libpq , postgresql-simple - , process - , random - , retry , row-types - , safe , sandwich , sandwich-contexts , string-interpolate diff --git a/tests/tests.nix b/tests/tests.nix index 55d5f99..a1820f5 100644 --- a/tests/tests.nix +++ b/tests/tests.nix @@ -1,10 +1,9 @@ { mkDerivation, aeson, base, bytestring, conduit, conduit-aeson -, containers, data-default, directory, ex-pool, exceptions -, filepath, lens, lib, lsp-test, lsp-types, monad-control -, monad-logger, mtl, network, optparse-applicative -, postgresql-libpq, postgresql-simple, process, random, retry -, row-types, safe, sandwich, sandwich-contexts, string-interpolate -, temporary, text, unliftio, unliftio-core, vector +, containers, data-default, directory, exceptions, filepath, lens +, lib, lsp-test, lsp-types, monad-control, monad-logger, mtl +, optparse-applicative, postgresql-simple, row-types, safe +, sandwich, sandwich-contexts, string-interpolate, temporary, text +, unliftio, unliftio-core, vector }: mkDerivation { pname = "tests"; @@ -14,10 +13,9 @@ mkDerivation { isExecutable = true; libraryHaskellDepends = [ aeson base bytestring conduit conduit-aeson containers data-default - directory ex-pool exceptions filepath lens lsp-test lsp-types - monad-control monad-logger mtl network optparse-applicative - postgresql-libpq postgresql-simple process random retry row-types - safe sandwich sandwich-contexts string-interpolate temporary text + directory exceptions filepath lens lsp-test lsp-types monad-control + monad-logger mtl optparse-applicative postgresql-simple row-types + sandwich sandwich-contexts string-interpolate temporary text unliftio unliftio-core vector ]; executableHaskellDepends = [ From 38399f85b21fefc50325fc11539fb7c3fa7e43bb Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 14:04:01 -0700 Subject: [PATCH 25/40] ci: split up Julia tests --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 904064d..7d259f2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,6 +48,9 @@ jobs: - name: haskell flags: "-f haskell-ghc98" - name: julia + flags: "-f julia_19" + - name: julia + flags: "-f julia_110" - name: octave - name: postgres - name: python From 4d1c85cdaabab2109be2ef7c3ff8d9e8a640c217 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 14:04:12 -0700 Subject: [PATCH 26/40] Add all_settings_schemas output --- nix/sample-outputs.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/nix/sample-outputs.nix b/nix/sample-outputs.nix index 555e497..65bce14 100644 --- a/nix/sample-outputs.nix +++ b/nix/sample-outputs.nix @@ -30,6 +30,14 @@ in sample_environments ); + all_settings_schemas = writeTextFile { + name = "all_settings_schemas.json"; + text = builtins.toJSON ( + lib.mapAttrs (n: v: lib.listToAttrs (map (x: lib.nameValuePair x.name x.meta.settings_schema) v.ui_metadata.kernels)) + sample_environments + ); + }; + printVersions = let versionsMap = with lib; mapAttrs (lang: value: if (hasAttr "versions" value) then value.versions else {}) From 5b76e3620844e58e4d0565fdf38787d801543933 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 14:40:33 -0700 Subject: [PATCH 27/40] Simplify rust packages schema --- modules/base/convert-type.nix | 5 ++++- modules/languages/rust/evcxr/python/build_init_evcxr.py | 6 +++--- modules/languages/rust/evcxr/withPackages.nix | 4 ++-- modules/languages/rust/module.nix | 2 +- sample_environments/rust.nix | 4 +--- tests/app/Spec/Tests/Rust.hs | 3 ++- tests/src/TestLib/NixRendering.hs | 6 +++--- tests/src/TestLib/NixTypes.hs | 2 +- tests/src/TestLib/Util.hs | 8 ++++++++ 9 files changed, 25 insertions(+), 15 deletions(-) diff --git a/modules/base/convert-type.nix b/modules/base/convert-type.nix index 90a9e84..28b1635 100644 --- a/modules/base/convert-type.nix +++ b/modules/base/convert-type.nix @@ -23,7 +23,10 @@ let } else if (type.name == "submodule") then { tag = "submodule"; - foo = "BAR"; + keys = lib.mapAttrsRecursiveCond + (x: !(x ? _type)) + (path: value: convertType target value.type) + (lib.removeAttrs (type.getSubOptions {}) ["_module"]); } else builtins.throw "Can't convert type for '${target}': ${toString type.name}" ; diff --git a/modules/languages/rust/evcxr/python/build_init_evcxr.py b/modules/languages/rust/evcxr/python/build_init_evcxr.py index 6182104..1ec1134 100644 --- a/modules/languages/rust/evcxr/python/build_init_evcxr.py +++ b/modules/languages/rust/evcxr/python/build_init_evcxr.py @@ -31,11 +31,11 @@ with open(out, "a") as f: for package in packages: package_name = package if isinstance(package, str) else package["name"] - settings = {} if isinstance(package, str) else package.get("settings", {}) + features = {} if isinstance(package, str) else package.get("features", {}) if package_name in name_to_dir: clauses = [f"""version = \"{name_to_version.get(package_name, "*")}\""""] - if "features" in settings: - clauses.append(f"""features = {json.dumps(settings["features"])}""") + if features: + clauses.append(f"""features = {json.dumps(features)}""") clauses_joined = ", ".join(clauses) diff --git a/modules/languages/rust/evcxr/withPackages.nix b/modules/languages/rust/evcxr/withPackages.nix index 860b83f..d7056bf 100644 --- a/modules/languages/rust/evcxr/withPackages.nix +++ b/modules/languages/rust/evcxr/withPackages.nix @@ -30,8 +30,8 @@ let renderPackage = pn: if builtins.isString pn then ''${pn} = "*"'' - else if builtins.isAttrs pn && lib.hasAttrByPath ["settings" "features"] pn - then ''${pn.name} = { version = "*", features = [${lib.concatStringsSep ", " (map (feat: ''"'' + feat + ''"'') pn.settings.features)}] }'' + else if builtins.isAttrs pn && lib.hasAttrByPath ["features"] pn + then ''${pn.name} = { version = "*", features = [${lib.concatStringsSep ", " (map (feat: ''"'' + feat + ''"'') pn.features)}] }'' else ''${pn.name} = { version = "*" }''; cargoToml = packages: writeTextFile { diff --git a/modules/languages/rust/module.nix b/modules/languages/rust/module.nix index 0c86bae..7414b4c 100644 --- a/modules/languages/rust/module.nix +++ b/modules/languages/rust/module.nix @@ -17,7 +17,7 @@ with lib; type = types.str; description = "Package name"; }; - settings.features = mkOption rec { + features = mkOption rec { type = types.listOf types.str; description = "Features to enable for the package"; }; diff --git a/sample_environments/rust.nix b/sample_environments/rust.nix index 234ad3b..0b88faf 100644 --- a/sample_environments/rust.nix +++ b/sample_environments/rust.nix @@ -9,9 +9,7 @@ codedown.makeEnvironment { "rand" { name = "serde"; - settings = { - features = ["derive"]; - }; + features = ["derive"]; } "serde_json" ]; diff --git a/tests/app/Spec/Tests/Rust.hs b/tests/app/Spec/Tests/Rust.hs index dd4920d..7cec8b9 100644 --- a/tests/app/Spec/Tests/Rust.hs +++ b/tests/app/Spec/Tests/Rust.hs @@ -17,6 +17,7 @@ import TestLib.NixEnvironmentContext import TestLib.NixTypes import TestLib.TestSearchers import TestLib.Types +import TestLib.Util tests :: LanguageSpec @@ -68,7 +69,7 @@ kernelSpec = NixKernelSpec { , nixKernelPackages = [ nameOnly "rand" - , NameAndSettings "serde" (Just (A.object [("features", A.Array (V.fromList ["derive"]))])) + , NameAndSettings "serde" (Just (aesonFromList [("features", A.Array (V.fromList ["derive"]))])) , nameOnly "serde_json" , nameOnly "serde_derive" ] diff --git a/tests/src/TestLib/NixRendering.hs b/tests/src/TestLib/NixRendering.hs index 83bb155..b0f3167 100644 --- a/tests/src/TestLib/NixRendering.hs +++ b/tests/src/TestLib/NixRendering.hs @@ -14,9 +14,9 @@ import qualified Data.Vector as V import TestLib.NixTypes #if MIN_VERSION_aeson(2,0,0) -import qualified Data.Aeson.KeyMap as HM +import qualified Data.Aeson.KeyMap as HM #else -import qualified Data.HashMap.Strict as HM +import qualified Data.HashMap.Strict as HM #endif @@ -87,7 +87,7 @@ renderKernel (NixKernelSpec {..}) = xs -> [i|kernels.#{nixKernelName}.packages = [#{T.unwords $ fmap renderKernelPackage xs}];|] renderKernelPackage (NameAndSettings name Nothing) = quote name - renderKernelPackage (NameAndSettings name (Just settings)) = aesonToNix (A.object [("name", A.String name), ("settings", settings)]) + renderKernelPackage (NameAndSettings name (Just settings)) = aesonToNix (A.object (("name", A.String name) : HM.toList settings)) & parenQuote parenQuote x = "(" <> x <> ")" diff --git a/tests/src/TestLib/NixTypes.hs b/tests/src/TestLib/NixTypes.hs index a5b1197..877b5f3 100644 --- a/tests/src/TestLib/NixTypes.hs +++ b/tests/src/TestLib/NixTypes.hs @@ -31,7 +31,7 @@ deriveJSON toSnakeBoth2 ''NixSrcSpec data NameAndSettings = NameAndSettings { nameAndSettingsName :: Text - , nameAndSettingsSettings :: Maybe Value + , nameAndSettingsSettings :: Maybe A.Object } deriving (Show, Eq, Ord) deriveJSON toSnake3 ''NameAndSettings diff --git a/tests/src/TestLib/Util.hs b/tests/src/TestLib/Util.hs index 486c4a3..e069bb2 100644 --- a/tests/src/TestLib/Util.hs +++ b/tests/src/TestLib/Util.hs @@ -44,3 +44,11 @@ aesonFromList xs = HM.fromList [(A.fromText k, v) | (k, v) <- xs] aesonFromList :: (Eq k, Hashable k) => [(Text, Value)] -> HM.HashMap A.Key v aesonFromList = HM.fromList #endif + +#if MIN_VERSION_aeson(2,0,0) +aesonToList :: HM.KeyMap Value -> [(Text, Value)] +aesonToList m = [(A.toText k, v) | (k, v) <- HM.toList m] +#else +aesonToList :: (Eq k, Hashable k) => HM.HashMap A.Key v -> [(Text, Value)] +aesonToList = HM.toList +#endif From f3c27958d9f067a07f1d88f7d2a68c24ff9f21cb Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 16:13:47 -0700 Subject: [PATCH 28/40] More ui metadata --- nix/makeEnvironment.nix | 11 +++++++++-- nix/uiMetadata.nix | 10 ---------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/nix/makeEnvironment.nix b/nix/makeEnvironment.nix index 171b7f4..90fb4e8 100644 --- a/nix/makeEnvironment.nix +++ b/nix/makeEnvironment.nix @@ -64,11 +64,18 @@ symlinkJoin { uiMetadata = callPackage ./uiMetadata.nix {}; in { - # channels = lib.mapAttrsToList uiMetadata.mkChannelUiMetadata channels; + # channels = lib.mapAttrsToList (name: channel: channel // { + # name = name; + # }) channels; + channels = []; kernels = map uiMetadata.mkKernelUiMetadata (attrValues builtKernels); - # other_packages = map uiMetadata.mkOtherPackageUiMetadata otherPackages; + other_packages = map (package: { + channel = "foo"; + attr = "bar"; + meta = if package ? "meta" then uiMetadata.chooseInterestingMeta package else {}; + }) evaluated.config.packages; }; ui_metadata_yaml = writeText "ui-metadata.yaml" (lib.generators.toYAML {} ui_metadata); diff --git a/nix/uiMetadata.nix b/nix/uiMetadata.nix index 21c0df7..059aa36 100644 --- a/nix/uiMetadata.nix +++ b/nix/uiMetadata.nix @@ -38,10 +38,6 @@ rec { language_server_names = contents.languageServerNames; }); - mkChannelUiMetadata = name: channel: channel // { - name = name; - }; - # This is duplicated from languages/common.nix, which we'd rather not import here packageName = p: if lib.isString p then p else p.name; @@ -65,10 +61,4 @@ rec { modes = kernel.modes; meta = chooseInterestingMeta kernel; }; - - mkOtherPackageUiMetadata = package: { - channel = package.channel; - attr = package.attr; - meta = if package.contents ? "meta" then chooseInterestingMeta package.contents else {}; - }; } From db6206db5a7ba0317e0bd821689261b13e8c2a39 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 19:42:28 -0700 Subject: [PATCH 29/40] Add labeledPackages option for computing UI metadata --- modules/base.nix | 23 +++++++++++++++++++++++ nix/makeEnvironment.nix | 11 ++++++----- sample_environments/mega.nix | 8 +++----- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/modules/base.nix b/modules/base.nix index ca52496..d0189f3 100644 --- a/modules/base.nix +++ b/modules/base.nix @@ -37,6 +37,29 @@ with lib; The set of packages that are symlinked into the environment. ''; }; + + labeledPackages = lib.mkOption { + type = lib.types.listOf (types.submodule { + options = { + channel = mkOption rec { + type = types.str; + description = "Channel name"; + }; + attr = mkOption rec { + type = types.str; + description = "Attr name"; + }; + contents = mkOption rec { + type = types.package; + description = "Package"; + }; + }; + }); + default = []; + description = '' + Packages that are labeled with channels and attributes. Used to generate UI metadata. + ''; + }; }; config = { diff --git a/nix/makeEnvironment.nix b/nix/makeEnvironment.nix index 90fb4e8..2ee0379 100644 --- a/nix/makeEnvironment.nix +++ b/nix/makeEnvironment.nix @@ -53,6 +53,7 @@ symlinkJoin { ++ lib.optionals (builtins.length repls > 0) [(writeTextDir "lib/codedown/repls.yaml" (lib.generators.toYAML {} repls))] ++ lib.optionals (builtins.length exporters > 0) [(writeTextDir "lib/codedown/exporters.yaml" (lib.generators.toYAML {} exporters))] ++ evaluated.config.packages + ++ map (x: x.contents) evaluated.config.labeledPackages ; passthru = rec { @@ -71,11 +72,11 @@ symlinkJoin { kernels = map uiMetadata.mkKernelUiMetadata (attrValues builtKernels); - other_packages = map (package: { - channel = "foo"; - attr = "bar"; - meta = if package ? "meta" then uiMetadata.chooseInterestingMeta package else {}; - }) evaluated.config.packages; + other_packages = map (p: { + channel = p.channel; + attr = p.attr; + meta = if p.contents ? "meta" then uiMetadata.chooseInterestingMeta p.contents else {}; + }) evaluated.config.labeledPackages; }; ui_metadata_yaml = writeText "ui-metadata.yaml" (lib.generators.toYAML {} ui_metadata); diff --git a/sample_environments/mega.nix b/sample_environments/mega.nix index 253208f..f423d32 100644 --- a/sample_environments/mega.nix +++ b/sample_environments/mega.nix @@ -63,9 +63,7 @@ codedown.makeEnvironment { exporters.nbconvert-exporters.enable = true; exporters.nbconvert-exporters.texliveScheme = "scheme-full"; - # otherPackages = [ - # { channel = "codedown"; attr = "spellchecker"; contents = codedown.spellchecker; } - - # { channel = "nixpkgs"; attr = "htop"; contents = pkgsStable.htop; } - # ]; + labeledPackages = [ + { channel = "nixpkgs"; attr = "htop"; contents = channels.nixpkgs.htop; } + ]; } From f8fd6c686493e49cb05bc81a6117ced0c432789c Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 20:16:02 -0700 Subject: [PATCH 30/40] Slight refactor --- nix/uiMetadata.nix | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/nix/uiMetadata.nix b/nix/uiMetadata.nix index 059aa36..df62b77 100644 --- a/nix/uiMetadata.nix +++ b/nix/uiMetadata.nix @@ -38,27 +38,28 @@ rec { language_server_names = contents.languageServerNames; }); - # This is duplicated from languages/common.nix, which we'd rather not import here - packageName = p: if lib.isString p then p else p.name; + mkKernelUiMetadata = let + # This is duplicated from languages/common.nix, which we'd rather not import here + packageName = p: if lib.isString p then p else p.name; - mkKernelPackageMetadata = kernel: p: { - name = packageName p; - meta = if lib.hasAttrByPath ["packageOptions" (packageName p)] kernel then chooseInterestingMeta (kernel.packageOptions.${packageName p}) else {}; - } // (lib.optionalAttrs (lib.isAttrs p && p ? "settings") { - inherit (p) settings; - }); - - mkKernelUiMetadata = kernel: { - # Dry - channel = kernel.channel; - name = kernel.name; - settings = if kernel ? "settings" then kernel.settings else {}; + mkKernelPackageMetadata = kernel: p: { + name = packageName p; + meta = if lib.hasAttrByPath ["packageOptions" (packageName p)] kernel then chooseInterestingMeta (kernel.packageOptions.${packageName p}) else {}; + } // (lib.optionalAttrs (lib.isAttrs p && p ? "settings") { + inherit (p) settings; + }); + in + kernel: { + # Dry + channel = kernel.channel; + name = kernel.name; + settings = if kernel ? "settings" then kernel.settings else {}; - # Different for hydrated - packages = map (p: mkKernelPackageMetadata kernel p) kernel.args.packages; + # Different for hydrated + packages = map (p: mkKernelPackageMetadata kernel p) kernel.args.packages; - # Hydrated - modes = kernel.modes; - meta = chooseInterestingMeta kernel; - }; + # Hydrated + modes = kernel.modes; + meta = chooseInterestingMeta kernel; + }; } From e83dae25852b2092bba4656cc17def8906abcc6f Mon Sep 17 00:00:00 2001 From: thomasjm Date: Wed, 18 Sep 2024 21:11:26 -0700 Subject: [PATCH 31/40] Pass through channels --- modules/base.nix | 32 ++++++++++++++++++++------------ nix/makeEnvironment.nix | 7 +++---- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/modules/base.nix b/modules/base.nix index d0189f3..d36871f 100644 --- a/modules/base.nix +++ b/modules/base.nix @@ -4,42 +4,50 @@ with lib; { options = { - pkgs = lib.mkOption { - type = lib.types.attrs; + pkgs = mkOption { + type = types.attrs; default = pkgs; }; - pkgsMaster = lib.mkOption { - type = lib.types.attrs; + pkgsMaster = mkOption { + type = types.attrs; default = pkgs; }; - builtExporters = lib.mkOption { + builtExporters = mkOption { type = types.attrsOf types.package; default = {}; }; - builtKernels = lib.mkOption { + builtKernels = mkOption { type = types.attrsOf types.package; default = {}; }; - builtShells = lib.mkOption { + builtShells = mkOption { type = types.attrsOf types.package; default = {}; }; - packages = lib.mkOption { - type = lib.types.listOf lib.types.package; + packages = mkOption { + type = types.listOf types.package; default = []; - example = lib.literalExpression "[ pkgs.firefox pkgs.thunderbird ]"; + example = literalExpression "[ pkgs.firefox pkgs.thunderbird ]"; description = '' The set of packages that are symlinked into the environment. ''; }; - labeledPackages = lib.mkOption { - type = lib.types.listOf (types.submodule { + channels = mkOption { + type = types.attrs; + default = {}; + description = '' + Channels, passed through to UI metadata. + ''; + }; + + labeledPackages = mkOption { + type = types.listOf (types.submodule { options = { channel = mkOption rec { type = types.str; diff --git a/nix/makeEnvironment.nix b/nix/makeEnvironment.nix index 2ee0379..049aa02 100644 --- a/nix/makeEnvironment.nix +++ b/nix/makeEnvironment.nix @@ -65,10 +65,9 @@ symlinkJoin { uiMetadata = callPackage ./uiMetadata.nix {}; in { - # channels = lib.mapAttrsToList (name: channel: channel // { - # name = name; - # }) channels; - channels = []; + channels = lib.mapAttrsToList (name: channel: channel // { + name = name; + }) evaluated.config.channels; kernels = map uiMetadata.mkKernelUiMetadata (attrValues builtKernels); From 616a3c1ca455049f3d5817deb7cc180305d9df6e Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Thu, 19 Sep 2024 18:11:36 -0700 Subject: [PATCH 32/40] Shorten exporters name --- modules/exporters/module.nix | 8 ++++---- sample_environments/exporters-full.nix | 4 ++-- sample_environments/exporters-small.nix | 2 +- sample_environments/mega.nix | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/exporters/module.nix b/modules/exporters/module.nix index f266351..f1a32d8 100644 --- a/modules/exporters/module.nix +++ b/modules/exporters/module.nix @@ -4,7 +4,7 @@ with lib; { options = { - exporters.nbconvert-exporters = { + exporters.nbconvert = { enable = mkOption { type = types.bool; default = false; @@ -27,9 +27,9 @@ with lib; }; }; - config = mkIf config.exporters.nbconvert-exporters.enable { - builtExporters.nbconvert-exporters = config.pkgs.callPackage ./nbconvert.nix { - texliveScheme = config.pkgs.texlive.combined.${config.exporters.nbconvert-exporters.texliveScheme}; + config = mkIf config.exporters.nbconvert.enable { + builtExporters.nbconvert = config.pkgs.callPackage ./nbconvert.nix { + texliveScheme = config.pkgs.texlive.combined.${config.exporters.nbconvert.texliveScheme}; }; }; } diff --git a/sample_environments/exporters-full.nix b/sample_environments/exporters-full.nix index f71b9f6..0260fa8 100644 --- a/sample_environments/exporters-full.nix +++ b/sample_environments/exporters-full.nix @@ -4,6 +4,6 @@ }: codedown.makeEnvironment { - exporters.nbconvert-exporters.enable = true; - exporters.nbconvert-exporters.texliveScheme = "scheme-full"; + exporters.nbconvert.enable = true; + exporters.nbconvert.texliveScheme = "scheme-full"; } diff --git a/sample_environments/exporters-small.nix b/sample_environments/exporters-small.nix index 3b8ab21..70dbe02 100644 --- a/sample_environments/exporters-small.nix +++ b/sample_environments/exporters-small.nix @@ -4,5 +4,5 @@ }: codedown.makeEnvironment { - exporters.nbconvert-exporters.enable = true; + exporters.nbconvert.enable = true; } diff --git a/sample_environments/mega.nix b/sample_environments/mega.nix index f423d32..35590f7 100644 --- a/sample_environments/mega.nix +++ b/sample_environments/mega.nix @@ -60,8 +60,8 @@ codedown.makeEnvironment { shells.fish.enable = true; shells.zsh.enable = true; - exporters.nbconvert-exporters.enable = true; - exporters.nbconvert-exporters.texliveScheme = "scheme-full"; + exporters.nbconvert.enable = true; + exporters.nbconvert.texliveScheme = "scheme-full"; labeledPackages = [ { channel = "nixpkgs"; attr = "htop"; contents = channels.nixpkgs.htop; } From 51ab6c41d1b1cc87bf09152e35804211065f7e30 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Thu, 19 Sep 2024 18:15:45 -0700 Subject: [PATCH 33/40] Organize mega.nix --- sample_environments/mega.nix | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/sample_environments/mega.nix b/sample_environments/mega.nix index 35590f7..f79504d 100644 --- a/sample_environments/mega.nix +++ b/sample_environments/mega.nix @@ -6,6 +6,13 @@ codedown.makeEnvironment { + ### Exporters ### + + exporters.nbconvert.enable = true; + exporters.nbconvert.texliveScheme = "scheme-full"; + + ### Kernels ### + kernels.bash.enable = true; kernels.clojure.enable = true; @@ -56,14 +63,13 @@ codedown.makeEnvironment { kernels.coq.enable = true; + ### Language servers ### + + language-servers.spellchecker.enable = true; + + ### Shells ### + shells.bash.enable = true; shells.fish.enable = true; shells.zsh.enable = true; - - exporters.nbconvert.enable = true; - exporters.nbconvert.texliveScheme = "scheme-full"; - - labeledPackages = [ - { channel = "nixpkgs"; attr = "htop"; contents = channels.nixpkgs.htop; } - ]; } From 51a0510b84890b595d9f844728015a9b5cf4bddf Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Thu, 19 Sep 2024 18:59:51 -0700 Subject: [PATCH 34/40] Add isCodeDown ? true arg for introspection --- default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/default.nix b/default.nix index e0f38e7..55db0e7 100644 --- a/default.nix +++ b/default.nix @@ -1,4 +1,5 @@ { fetchFromGitHub +, isCodeDown ? true # For introspection using builtins.functionArgs , ... }: From 8fd23e00db2017704af7f9fcb93121c45a386535 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Thu, 19 Sep 2024 19:50:15 -0700 Subject: [PATCH 35/40] Expose chooseInterestingMeta --- codedown.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/codedown.nix b/codedown.nix index acaa046..b2f1f40 100644 --- a/codedown.nix +++ b/codedown.nix @@ -23,9 +23,7 @@ rec { # Exported so clients can build searchers for other package sets, like "codedown.searcher nixpkgs" searcher = common.searcher; - settingsSchemas = lib.mapAttrs (attr: value: - common.safeEval (lib.attrByPath ["meta" "settingsSchema"] [] value) - ) languages; + settingsSchemas = lib.mapAttrs (attr: value: value.meta.settingsSchema or []) languages; evaluateConfig = callPackage ./nix/evaluate-config.nix { inherit pkgsStable pkgsMaster; @@ -62,6 +60,9 @@ rec { validateEnvironment = callPackage ./nix/validateEnvironment.nix {}; + # Exposed for consumers to pin and use to gather metadata from other channels like Nixpkgs + inherit (callPackage ./nix/uiMetadata.nix {}) chooseInterestingMeta; + # Exposed so it's easier to compute build dependencies in the presence of IFD inherit pkgsStable pkgsMaster requiredPackages; } From a9101998a8ee307b4e4e6a98767fd1af62fabcad Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Thu, 19 Sep 2024 19:59:29 -0700 Subject: [PATCH 36/40] Remove safeEval* and other weeds --- modules/languages/common.nix | 30 ------------------------ modules/tools/sqlite-indexer/default.nix | 17 +++++++++----- 2 files changed, 11 insertions(+), 36 deletions(-) diff --git a/modules/languages/common.nix b/modules/languages/common.nix index c551277..1250478 100644 --- a/modules/languages/common.nix +++ b/modules/languages/common.nix @@ -51,10 +51,6 @@ rec { inherit meta passthru; }); - writeShellScriptBinWithMeta = meta: path: text: (writeTextDir path text).overrideAttrs (old: { - inherit meta; - }); - writeShellScriptBinWithAttrs = attrs: path: text: (writeShellScriptBin path text).overrideAttrs (old: attrs); searcher = packages: (callPackage ../tools/sqlite-indexer { inherit packages; }).searcher; @@ -75,31 +71,5 @@ rec { in concatStrings withMaxComponents; - hasAttrSafe = x: set: hasAttr x set && (let - evaluated = builtins.tryEval (getAttr x set); - in - if evaluated.success then true else false); - - safeEval = safeEval' ""; - safeEval' = default: e: let - evaluated = builtins.tryEval e; - in - if evaluated.success then evaluated.value else default; - - isTrue = settings: name: hasAttr name settings && getAttr name settings == true; - - focusSettings = prefix: settings: with lib; let - filtered = lib.filterAttrs (n: _: hasPrefix prefix n) settings; - in - listToAttrs (mapAttrsToList (n: v: { - name = removePrefix prefix n; - value = v; - }) filtered); - - makeDefaultSettings = settingsSchema: listToAttrs (map (item: { - name = item.target; - value = item.defaultValue; - }) (filter (hasAttr "target") settingsSchema)); - packageName = p: if lib.isString p then p else p.name; } diff --git a/modules/tools/sqlite-indexer/default.nix b/modules/tools/sqlite-indexer/default.nix index 124f898..40aabf2 100644 --- a/modules/tools/sqlite-indexer/default.nix +++ b/modules/tools/sqlite-indexer/default.nix @@ -27,16 +27,21 @@ let numVersionComponents = 5; componentPadLength = 3; - filteredPackages = with lib; filterAttrs (name: value: common.safeEval' false ( - (!packageMustBeDerivation || isDerivation(value)) + safeEval' = default: e: let + evaluated = builtins.tryEval e; + in + if evaluated.success then evaluated.value else default; + + filteredPackages = with lib; filterAttrs (name: value: safeEval' false ( + (!packageMustBeDerivation || isDerivation value) && - (!packageMustHaveName || (lib.attrByPath ["meta" "name"] "" value != "")) + (!packageMustHaveName || ((value.meta.name or "") != "")) )) packages; json = writeText "packages-index-yaml.json" (lib.generators.toJSON {} (lib.mapAttrsToList (k: v: { attr = attrPrefix + k; - name = common.safeEval (lib.attrByPath ["meta" "name"] "" v); - version = common.safeEval (common.lexicographyVersionNumber' numVersionComponents componentPadLength (lib.attrByPath ["meta" "version"] "" v)); + name = v.meta.name or ""; + version = common.lexicographyVersionNumber' numVersionComponents componentPadLength (v.meta.version or ""); meta = uiMetadata.chooseInterestingMeta v; }) filteredPackages)); @@ -61,7 +66,7 @@ rec { ''; allIcons = let - uniquePaths = lib.mapAttrsToList (k: v: common.safeEval (lib.attrByPath ["meta" "icon"] null v)) filteredPackages; + uniquePaths = lib.mapAttrsToList (k: v: v.meta.icon or null) filteredPackages; in linkFarm "all-searcher-icons" (map (path: { name = builtins.hashString "md5" (toString path); From b600fcfe25bd15f2e02a7ba3c9e6f3ff5d2b1024 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Thu, 19 Sep 2024 20:01:49 -0700 Subject: [PATCH 37/40] ci: add separate build-sample-environments job --- .github/workflows/ci.yml | 14 ++++++++++++-- tests/app/Spec/Tests/SampleEnvironments.hs | 17 ----------------- 2 files changed, 12 insertions(+), 19 deletions(-) delete mode 100644 tests/app/Spec/Tests/SampleEnvironments.hs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7d259f2..e725044 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,11 +22,22 @@ jobs: steps: - uses: actions/checkout@v4 - - name: verify-default-nix.sh + - name: Build .#ui_metadata_farm if: "!contains(github.event.head_commit.message, 'noci')" run: | nix build .#ui_metadata_farm + build-sample-environments: + runs-on: self-hosted + + steps: + - uses: actions/checkout@v4 + + - name: Build .#sample_environments_farm + if: "!contains(github.event.head_commit.message, 'noci')" + run: | + nix build .#sample_environments_farm + test: name: ${{matrix.suite.name}} (${{matrix.suite.flags}}) runs-on: self-hosted @@ -57,7 +68,6 @@ jobs: - name: r - name: ruby - name: rust - - name: sample-environments - name: searchers - name: zsh - name: spellchecker diff --git a/tests/app/Spec/Tests/SampleEnvironments.hs b/tests/app/Spec/Tests/SampleEnvironments.hs deleted file mode 100644 index 5f9dbf0..0000000 --- a/tests/app/Spec/Tests/SampleEnvironments.hs +++ /dev/null @@ -1,17 +0,0 @@ -{-# OPTIONS_GHC -fno-warn-unused-top-binds #-} - -module Spec.Tests.SampleEnvironments (tests) where - -import Control.Monad.Logger -import Data.String.Interpolate -import Test.Sandwich as Sandwich -import TestLib.TestBuilding - - -tests :: TopSpec -tests = describe "Sample environments farm" $ do - it "builds the sample environments farm" $ do - testBuild' LevelInfo [i|.\#sample_environments_farm|] - -main :: IO () -main = runSandwichWithCommandLineArgs Sandwich.defaultOptions tests From d88a04bd4e4de43cbcf4f8a03fa26cb9ff125a4c Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Thu, 19 Sep 2024 20:05:29 -0700 Subject: [PATCH 38/40] Update tests.cabal --- tests/tests.cabal | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/tests.cabal b/tests/tests.cabal index a5533f9..0579746 100644 --- a/tests/tests.cabal +++ b/tests/tests.cabal @@ -110,7 +110,6 @@ executable tests Spec.Tests.Rust.Completion Spec.Tests.Rust.Diagnostics Spec.Tests.Rust.Hovers - Spec.Tests.SampleEnvironments Spec.Tests.Searchers Spec.Tests.Shells.Zsh Spec.Tests.Spellchecker From 983d4c1e23890dbb8cf9ad21ea192072e7d884a5 Mon Sep 17 00:00:00 2001 From: thomasjm Date: Fri, 20 Sep 2024 02:47:42 -0700 Subject: [PATCH 39/40] Remove a couple unnecessary fields from uiMetadata.nix --- nix/uiMetadata.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/nix/uiMetadata.nix b/nix/uiMetadata.nix index df62b77..42cea08 100644 --- a/nix/uiMetadata.nix +++ b/nix/uiMetadata.nix @@ -51,7 +51,6 @@ rec { in kernel: { # Dry - channel = kernel.channel; name = kernel.name; settings = if kernel ? "settings" then kernel.settings else {}; @@ -59,7 +58,6 @@ rec { packages = map (p: mkKernelPackageMetadata kernel p) kernel.args.packages; # Hydrated - modes = kernel.modes; meta = chooseInterestingMeta kernel; }; } From 5ca2917373998310574b93dada8064f82571be4c Mon Sep 17 00:00:00 2001 From: thomasjm Date: Fri, 20 Sep 2024 03:14:36 -0700 Subject: [PATCH 40/40] Working on UI metadata output --- modules/base.nix | 5 ++ .../markdown-spellcheck-lsp/module.nix | 4 +- nix/makeEnvironment.nix | 65 ++++++++++++++----- nix/uiMetadata.nix | 23 ------- 4 files changed, 53 insertions(+), 44 deletions(-) diff --git a/modules/base.nix b/modules/base.nix index d36871f..179fca3 100644 --- a/modules/base.nix +++ b/modules/base.nix @@ -24,6 +24,11 @@ with lib; default = {}; }; + builtLanguageServers = mkOption { + type = types.attrsOf types.package; + default = {}; + }; + builtShells = mkOption { type = types.attrsOf types.package; default = {}; diff --git a/modules/language_servers/markdown-spellcheck-lsp/module.nix b/modules/language_servers/markdown-spellcheck-lsp/module.nix index f1983a8..d379552 100644 --- a/modules/language_servers/markdown-spellcheck-lsp/module.nix +++ b/modules/language_servers/markdown-spellcheck-lsp/module.nix @@ -14,8 +14,6 @@ with lib; }; config = mkIf config.language-servers.spellchecker.enable { - packages = [ - (config.pkgs.callPackage ./default.nix {}) - ]; + builtLanguageServers.spellchecker = config.pkgs.callPackage ./default.nix {}; }; } diff --git a/nix/makeEnvironment.nix b/nix/makeEnvironment.nix index 049aa02..32160ec 100644 --- a/nix/makeEnvironment.nix +++ b/nix/makeEnvironment.nix @@ -20,16 +20,17 @@ with lib; let evaluated = (callPackage ./evaluate-config.nix { inherit pkgsStable pkgsMaster; }) config; + builtExporters = evaluated.config.builtExporters; builtKernels = mapAttrs (_: kernel: kernel.overrideAttrs (old: { passthru = old.passthru // { - name = kernel.name; + name = "kernels." + kernel.name; # channel = kernel.channel; channel = "codedown"; }; })) evaluated.config.builtKernels; + builtLanguageServers = evaluated.config.builtLanguageServers; builtShells = evaluated.config.builtShells; - builtExporters = evaluated.config.builtExporters; repls = let shellToReplInfo = shell: { @@ -44,12 +45,38 @@ let exporters = concatMap (exporter: exporter.meta.exporterInfos) (attrValues builtExporters); + uiMetadata = callPackage ./uiMetadata.nix {}; + + mkPackageUiMetadata = let + # This is duplicated from languages/common.nix, which we'd rather not import here + packageName = p: if lib.isString p then p else p.name; + + mkSubPackageMetadata = pkg: p: { + name = packageName p; + meta = if lib.hasAttrByPath ["packageOptions" (packageName p)] pkg then uiMetadata.chooseInterestingMeta (pkg.packageOptions.${packageName p}) else {}; + } // (lib.optionalAttrs (lib.isAttrs p && p ? "settings") { + inherit (p) settings; + }); + in + pkg: { + # Dry + name = pkg.name; + settings = if pkg ? "settings" then pkg.settings else {}; + + # Different for hydrated + packages = map (p: mkSubPackageMetadata pkg p) (pkg.args.packages or []); + + # Hydrated + meta = uiMetadata.chooseInterestingMeta pkg; + }; + in symlinkJoin { inherit name; paths = attrValues (evaluated.config.builtKernels) + ++ attrValues (evaluated.config.builtLanguageServers) ++ lib.optionals (builtins.length repls > 0) [(writeTextDir "lib/codedown/repls.yaml" (lib.generators.toYAML {} repls))] ++ lib.optionals (builtins.length exporters > 0) [(writeTextDir "lib/codedown/exporters.yaml" (lib.generators.toYAML {} exporters))] ++ evaluated.config.packages @@ -61,22 +88,24 @@ symlinkJoin { inherit channels; - ui_metadata = let - uiMetadata = callPackage ./uiMetadata.nix {}; - in - { - channels = lib.mapAttrsToList (name: channel: channel // { - name = name; - }) evaluated.config.channels; - - kernels = map uiMetadata.mkKernelUiMetadata (attrValues builtKernels); - - other_packages = map (p: { - channel = p.channel; - attr = p.attr; - meta = if p.contents ? "meta" then uiMetadata.chooseInterestingMeta p.contents else {}; - }) evaluated.config.labeledPackages; - }; + ui_metadata = { + channels = lib.mapAttrsToList (name: channel: channel // { + name = name; + }) evaluated.config.channels; + + packages = + (mapAttrs' (n: v: nameValuePair "exporters.${n}" (mkPackageUiMetadata v)) builtExporters) + // (mapAttrs' (n: v: nameValuePair "kernels.${n}" (mkPackageUiMetadata v)) builtKernels) + // (mapAttrs' (n: v: nameValuePair "language-servers.${n}" (mkPackageUiMetadata v)) builtLanguageServers) + // (mapAttrs' (n: v: nameValuePair "shells.${n}" (mkPackageUiMetadata v)) builtShells) + ; + + other_packages = map (p: { + channel = p.channel; + attr = p.attr; + meta = if p.contents ? "meta" then uiMetadata.chooseInterestingMeta p.contents else {}; + }) evaluated.config.labeledPackages; + }; ui_metadata_yaml = writeText "ui-metadata.yaml" (lib.generators.toYAML {} ui_metadata); }; diff --git a/nix/uiMetadata.nix b/nix/uiMetadata.nix index 42cea08..3b83fc2 100644 --- a/nix/uiMetadata.nix +++ b/nix/uiMetadata.nix @@ -37,27 +37,4 @@ rec { }) // (lib.optionalAttrs (contents ? "languageServerNames") { language_server_names = contents.languageServerNames; }); - - mkKernelUiMetadata = let - # This is duplicated from languages/common.nix, which we'd rather not import here - packageName = p: if lib.isString p then p else p.name; - - mkKernelPackageMetadata = kernel: p: { - name = packageName p; - meta = if lib.hasAttrByPath ["packageOptions" (packageName p)] kernel then chooseInterestingMeta (kernel.packageOptions.${packageName p}) else {}; - } // (lib.optionalAttrs (lib.isAttrs p && p ? "settings") { - inherit (p) settings; - }); - in - kernel: { - # Dry - name = kernel.name; - settings = if kernel ? "settings" then kernel.settings else {}; - - # Different for hydrated - packages = map (p: mkKernelPackageMetadata kernel p) kernel.args.packages; - - # Hydrated - meta = chooseInterestingMeta kernel; - }; }