# Defines the kakrc. { # Feature flags typescript ? false, haskell ? false, python ? false, rust ? false, nix ? true, # Color theme theme, # Build tools pkgs, lib, }: # If any of the language features are enabled, enable the # extra language server-related keybinds and options. let ide = typescript || haskell || python || rust || nix; # Generic keybinds keybinds = '' ''; # IDE mode enables the language server protocol client # and adds keybinds for lsp-hover and lsp-code-actions. # If `rust` is enabled, lsp-semantic-tokens is also used. ide-config = (lib.optionalString ide '' ''); # Sometimes work requires me to touch the frontend. Ew typescript-config = (lib.optionalString typescript '' ''); # Haskell development haskell-config = (lib.optionalString haskell '' ''); # Python-related config python-config = (lib.optionalString python '' ''); # Rust development rust-config = (lib.optionalString rust '' ''); # Nix hacking-related configuration nix-config = (lib.optionalString nix '' ''); in pkgs.writeTextFile (rec { name = "kakrc.kak"; destination = "/share/kak/autoload/${name}"; text = with theme; '' '' ++ keybinds ++ typescript-config ++ haskell-config ++ python-config ++ rust-config ++ nix-config; })