{ config, lib, pkgs, ... }: let cfg = config.programs.vscode; in { options.programs.vscode = with lib; { languages = { c.enable = mkEnableOption "C"; docker.enable = mkEnableOption "Docker"; go.enable = mkEnableOption "Go"; java.enable = mkEnableOption "Java"; jinja.enable = mkEnableOption "Jinja"; lua.enable = mkEnableOption "Lua"; markdown.enable = mkEnableOption "Markdown"; nix.enable = mkEnableOption "Nix"; python.enable = mkEnableOption "Python"; rest.enable = mkEnableOption "REST"; rust.enable = mkEnableOption "Rust"; sas.enable = mkEnableOption "SAS"; sops.enable = mkEnableOption "SOPS"; svelte.enable = mkEnableOption "Svelte"; typescript.enable = mkEnableOption "TypeScript"; yaml.enable = mkEnableOption "YAML"; }; copilot.enable = mkEnableOption "GitHub Copilot"; }; imports = [ ./langs/c ./langs/docker ./langs/go ./langs/java ./langs/jinja ./langs/lua ./langs/markdown ./langs/nix ./langs/python ./langs/rest ./langs/rust ./langs/sas ./langs/sops ./langs/svelte ./langs/typescript ./langs/yaml ]; config = { programs.vscode.profiles.default = { extensions = with pkgs.vscode-extensions; [ ] ++ lib.lists.optionals cfg.copilot.enable [ github.copilot github.copilot-chat ]; userSettings = lib.mkMerge [ (lib.mkIf cfg.copilot.enable { "github.copilot.enable" = { "*" = true; "plaintext" = true; "markdown" = true; }; "chat.editing.alwaysSaveWithGeneratedChanges" = true; }) ]; }; }; }