{ lib, pkgs, config, ... }: let pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version; pkgsRepository = pkgsRepositories.vscode-marketplace; in { options.programs.vscode.profiles = lib.mkOption { type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { options = { extraExtensions.conventionalCommits = { enable = lib.mkEnableOption "Enable VSCode Conventional Commits extension"; extension = lib.mkPackageOption pkgsRepository "conventional-commits" { default = ["vivaxy" "vscode-conventional-commits"]; }; gitmoji = lib.mkEnableOption "should emoji be prompted for as a part of the commit message./"; promptScopes = lib.mkEnableOption "prompting for scopes in conventional commits"; promptFooter = lib.mkEnableOption "prompting for footer in conventional commits"; showNewVersionNotes = lib.mkEnableOption "showing new version notes for conventional commits"; }; }; config = lib.mkIf config.extraExtensions.conventionalCommits.enable { extensions = [config.extraExtensions.conventionalCommits.extension]; userSettings = { "conventionalCommits.gitmoji" = config.extraExtensions.conventionalCommits.gitmoji; "conventionalCommits.promptScopes" = config.extraExtensions.conventionalCommits.promptScopes; "conventionalCommits.promptFooter" = config.extraExtensions.conventionalCommits.promptFooter; "conventionalCommits.showNewVersionNotes" = config.extraExtensions.conventionalCommits.showNewVersionNotes; }; }; })); }; }