|
| 1 | +{inputs}: let |
| 2 | + # Currently emacats requires `inputs.nixpkgs` and `inputs.emacs-overlay` |
| 3 | + # to import packages and utility functions respectively. |
| 4 | + inherit (builtins) foldl' attrNames elem; |
| 5 | + lib = inputs.nixpkgs.lib; |
| 6 | + |
| 7 | + /* From github:birdee/nixCats-nvim */ |
| 8 | + eachSystem = systems: f: let |
| 9 | + # get function result and insert system variable |
| 10 | + op = attrs: system: let |
| 11 | + ret = f system; |
| 12 | + op = attrs: key: attrs // { |
| 13 | + ${key} = (attrs.${key} or { }) |
| 14 | + // { ${system} = ret.${key}; }; |
| 15 | + }; |
| 16 | + in foldl' op attrs (attrNames ret); |
| 17 | + # Merge together the outputs for all systems. |
| 18 | + in foldl' op { } (systems ++ |
| 19 | + (if builtins ? currentSystem && ! elem builtins.currentSystem systems |
| 20 | + # add the current system if --impure is used |
| 21 | + then [ builtins.currentSystem ] |
| 22 | + else [])); |
| 23 | + |
| 24 | + # Make the derivation buildable by all available platforms in nixpkgs |
| 25 | + forEachSystem = eachSystem lib.platforms.all; |
| 26 | + |
| 27 | + |
| 28 | + # Function that gives a list of treesitter grammers |
| 29 | + # Use this instead of `epkgs.treesit-grammers.with-all-grammers` |
| 30 | + mkTreeSitterGrammers = epkgs: with epkgs; [ |
| 31 | + tree-sitter |
| 32 | + (treesit-grammars.with-grammars (g: with g; [ |
| 33 | + tree-sitter-bash tree-sitter-c tree-sitter-c-sharp tree-sitter-clojure tree-sitter-cmake tree-sitter-comment tree-sitter-commonlisp tree-sitter-cpp tree-sitter-css tree-sitter-dockerfile tree-sitter-elisp tree-sitter-elm tree-sitter-fennel tree-sitter-haskell tree-sitter-html tree-sitter-http tree-sitter-hyprlang tree-sitter-java tree-sitter-javascript tree-sitter-jsdoc tree-sitter-json tree-sitter-json5 tree-sitter-kotlin tree-sitter-lua tree-sitter-make tree-sitter-markdown tree-sitter-markdown-inline tree-sitter-nix tree-sitter-python tree-sitter-query tree-sitter-regex tree-sitter-rust tree-sitter-scheme tree-sitter-scss tree-sitter-sql tree-sitter-toml tree-sitter-tsx tree-sitter-typescript tree-sitter-typst tree-sitter-vim tree-sitter-yaml tree-sitter-zig |
| 34 | + ])) |
| 35 | + ]; |
| 36 | + |
| 37 | +in forEachSystem (system: let |
| 38 | + pkgs = import inputs.nixpkgs {inherit system;}; |
| 39 | + elib = inputs.emacs-overlay.lib.${system}; |
| 40 | + |
| 41 | + # These are runtime dependencies which include things like LSPs, Linters, |
| 42 | + # Formatters, Compilers etc. |
| 43 | + EmacsRuntimeDeps = (with pkgs; [ |
| 44 | + prettierd |
| 45 | + nixd |
| 46 | + vscode-langservers-extracted |
| 47 | + typst |
| 48 | + tinymist |
| 49 | + ]); |
| 50 | + |
| 51 | + # Parse and add all packages defined with `use-package` inside init file. |
| 52 | + # https://github.com/nix-community/emacs-overlay/blob/master/README.org#extra-library-functionality |
| 53 | + defaultPackage = elib.emacsWithPackagesFromUsePackage { |
| 54 | + config = ./init.el; |
| 55 | + defaultInitFile = true; |
| 56 | + alwaysEnsure = true; |
| 57 | + package = pkgs.emacs-pgtk; |
| 58 | + extraEmacsPackages = epkgs: |
| 59 | + (mkTreeSitterGrammers epkgs) |
| 60 | + ++ EmacsRuntimeDeps; |
| 61 | + }; |
| 62 | +in { |
| 63 | + packages.emacats = defaultPackage; |
| 64 | +}) |
0 commit comments