{
    // Text Editor
    "editor.dragAndDrop": false,
    "editor.emptySelectionClipboard": false,
    "editor.parameterHints.cycle": true,
    "editor.renderControlCharacters": true,
    "editor.renderWhitespace": "boundary",
    "editor.wrappingIndent": "indent",

    // Text Editor: Cursor
    "editor.cursorBlinking": "phase",
    "editor.cursorStyle": "line-thin",

    // Text Editor: Diff Editor
    "diffEditor.ignoreTrimWhitespace": false,

    // Text Editor: Find
    "editor.find.autoFindInSelection": "multiline",
    "editor.find.seedSearchStringFromSelection": "never",

    // Text Editor: Minimap
    "editor.minimap.showSlider": "always",
    "editor.minimap.size": "fit",

    // Text Editor: Suggestions
    "editor.acceptSuggestionOnEnter": "smart",
    "editor.suggestSelection": "first",

    // Text Editor: Files
    "files.associations": {
        // Configuration files (usually INI syntax)
        "*.cnf": "ini",
        "*.inf": "ini",
        // NuGet restore cache files
        "project.nuget.cache": "json"
    },
    "files.autoSave": "onWindowChange",
    "files.hotExit": "onExitAndWindowClose",
    "files.trimFinalNewlines": true,
    "files.trimTrailingWhitespace": true,

    // Workbench
    "workbench.editor.untitled.hint": "hidden",
    "workbench.enableExperiments": false,
    "workbench.startupEditor": "readme",
    "workbench.editorAssociations": {
        "git-rebase-todo": "default"
    },

    // Workbench: Appearance
    "workbench.iconTheme": "vscode-icons",

    // Workbench: Editor Management
    "workbench.editor.highlightModifiedTabs": true,
    "workbench.editor.languageDetection": false,

    // Workbench: Settings Editor
    "workbench.settings.editor": "json",
    "workbench.settings.enableNaturalLanguageSearch": false,

    // Window: New Window
    "window.newWindowDimensions": "inherit",

    // Features: Explorer
    "explorer.autoReveal": "focusNoScroll",
    "explorer.confirmDelete": false,
    "explorer.confirmDragAndDrop": false,
    "explorer.incrementalNaming": "smart",

    // Features: Search
    "search.collapseResults": "auto",
    "search.smartCase": true,

    // Features: Terminal
    "terminal.integrated.copyOnSelection": true,
    "terminal.integrated.cursorStyle": "line",
    "terminal.integrated.fontFamily": "Hack NF",
    "terminal.integrated.fontSize": 12,
    "terminal.integrated.rightClickBehavior": "paste",
    "terminal.integrated.defaultProfile.windows": "PowerShell",
    "terminal.integrated.profiles.windows": {
        "PowerShell": {
            "source": "PowerShell",
            "icon": "terminal-powershell",
            "args": ["-NoLogo"]
        }
    },

    // Features: Remote
    "remote.autoForwardPorts": false,

    // Application: Telemetry
    "telemetry.telemetryLevel": "off",


    // ##################################################
    // ###             Built-in extensions            ###
    // ##################################################

    // Git
    "git.autoStash": true,
    "git.enableSmartCommit": true,
    "git.openRepositoryInParentFolders": "never",
    "git.timeline.date": "authored",

    // PHP Language Features
    "php.validate.executablePath": "C:\\DevEnvs\\PHP\\php.exe",

    // TypeScript and JavaScript Language Features
    "typescript.surveys.enabled": false,


    // ##################################################
    // ###                 Extensions                 ###
    // ##################################################

    // .NET Install Tool for Extension Authors
    "dotnetAcquisitionExtension.enableTelemetry": false,

    // AsciiDoc
    "asciidoc.useWorkspaceRoot": true,

    // Azure Repos
    "azureRepos.autoFetch.enabled": false,

    // C/C++
    "C_Cpp.autoAddFileAssociations": false,
    "C_Cpp.loggingLevel": "Warning",

    // C#
    "csharp.suppressHiddenDiagnostics": false,
    // Disabled due to conflict with Visual Studio
    // See: https://github.com/OmniSharp/omnisharp-roslyn/issues/2230
    "omnisharp.enableEditorConfigSupport": false,
    "omnisharp.enableRoslynAnalyzers": true,
    "omnisharp.loggingLevel": "warning",

    // CloudFormation Linter
    "cfnLint.format.singleQuote": true,
    "cfnLint.validateUsingJsonSchema": true,

    // CMake Tools
    "cmake.configureOnOpen": false,
    "cmake.configureOnEdit": false,

    // Debugger for Java
    "java.silentNotification": true,

    // Dev Containers
    "dotfiles.repository": "ralish/dotfiles",
    "dotfiles.installCommand": "dot-update -a",
    "dev.containers.copyGitConfig": false,
    "dev.containers.logLevel": "info",

    // DevSkim
    "devskim.enableBestPracticeRules": true,
    "devskim.enableManualReviewRules": true,
    "devskim.removeFindingsOnClose": true,
    "devskim.suppressionCommentPlacement": "line above finding",
    "devskim.suppressionDurationInDays": 0,

    // Doxygen Documentation Generator
    "doxdocgen.generic.useGitUserName": true,
    "doxdocgen.generic.useGitUserEmail": true,

    // Extension Pack for Java
    "java.help.showReleaseNotes": false,

    // Flow Language Support
    "flow.logLevel": "warn",

    // GitHub Repositories
    "githubRepositories.autoFetch.enabled": false,
    "githubRepositories.indexing.verboseDownloadNotification": false,

    // GitLens
    "gitlens.defaultDateStyle": "absolute",
    "gitlens.telemetry.enabled": false,

    // IntelliCode
    "vsintellicode.features.python.deepLearning": "enabled",
    "vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue",

    // IntelliCode API Usage Examples
    "intellicodeApiExamples.loggingLevel": "WARN",

    // isort
    "isort.logLevel": "warn",

    // Language Support for Java
    "java.project.importHint": false,

    // Lua
    "Lua.codeLens.enable": true,

    // markdownlint
    "markdownlint.config": {
        // Header style
        "MD003": { "style": "setext_with_atx" },
        // Trailing spaces
        "MD009": { "br_spaces": 2 },
        // Line length
        "MD013": false,
        // Trailing punctuation in header
        "MD026": { "punctuation": ".,;:!" }
    },

    // Maven for Java
    "maven.view": "hierarchical",
    "maven.showInExplorerContextMenu": false,

    // MinifyAll
    "MinifyAll.openMinifiedDocument": false,
    "MinifyAll.disableCodeContextMenu": true,
    "MinifyAll.disableFileExplorerContextMenu": true,

    // NSIS
    "nsis.showOutputView": "On Warnings & Errors",

    // PHP Intelephense
    "intelephense.telemetry.enabled": false,

    // PostgreSQL
    "pgsql.applyLocalization": true,
    "pgsql.format.keywordCasing": "uppercase",

    // PowerShell
    "powershell.promptToUpdatePowerShell": false,
    "powershell.integratedConsole.showOnStartup": false,
    "powershell.integratedConsole.suppressStartupBanner": true,
    "powershell.codeFormatting.autoCorrectAliases": true,
    "powershell.codeFormatting.avoidSemicolonsAsLineTerminators": true,
    "powershell.codeFormatting.newLineAfterCloseBrace": false,
    "powershell.codeFormatting.pipelineIndentationStyle": "IncreaseIndentationForFirstPipeline",
    "powershell.codeFormatting.trimWhitespaceAroundPipe": true,
    "powershell.codeFormatting.useConstantStrings": true,
    "powershell.codeFormatting.useCorrectCasing": true,
    "powershell.codeFormatting.whitespaceBetweenParameters": true,
    "powershell.pester.useLegacyCodeLens": false,
    "powershell.scriptAnalysis.settingsPath": "${env:DOTFILES}/posh/PSScriptAnalyzerSettings.psd1",

    // Prettier
    "prettier.endOfLine": "auto",
    "prettier.singleQuote": true,

    // Project Manager for Java
    "java.dependency.packagePresentation": "hierarchical",

    // Pylance
    "python.analysis.autoImportCompletions": true,
    "python.analysis.completeFunctionParens": true,
    "python.analysis.logLevel": "Warning",

    // Python
    "python.experiments.enabled": false,

    // Red Hat (multiple extensions)
    "redhat.telemetry.enabled": false,

    // Remote - SSH
    "remote.SSH.defaultExtensions": [
        // Select Line Status Bar
        "tomoki1207.selectline-statusbar"
    ],

    // Remote - Tunnels
    "remote.tunnels.alwaysUpdateCLI": true,

    // Remote Explorer
    "remote-explorer.foldersSortOrder": "alphabetical",

    // Select Line Status Bar
    "selectline.alignment": "right",
    "selectline.displayFormat": "%d lines",
    "selectline.statusbarPriority": 200,

    // shell-format
    "shellformat.useEditorConfig": true,

    // ShellCheck
    "shellcheck.executablePath": "shellcheck",
    "shellcheck.customArgs": [
        // Follow source directives
        "-x"
    ],
    "shellcheck.useWorkspaceRootAsCwd": true,
    "shellcheck.disableVersionCheck": true,
    "shellcheck.logLevel": "warn",

    // SonarLint
    "sonarlint.rules": {
        // Remove commented out code
        "javascript:S125": {
            "level": "off"
        },

        // Duplicate string literals
        "python:S1192": {
            "level": "off"
        }
    },
    "sonarlint.disableTelemetry": true,

    // vscode-icons
    "vsicons.associations.files": [
        {
            "icon": "git",
            "extensions": [".git-blame-ignore-revs"],
            "filename": true,
            "format": "svg"
        },
        {
            "icon": "json",
            "extensions": ["project.nuget.cache"],
            "filename": true,
            "format": "svg"
        },
        {
            "icon": "markdownlint",
            "extensions": [".markdownlintrc"],
            "filename": true,
            "format": "svg"
        },
        {
            "icon": "xml",
            "extensions": ["app.manifest"],
            "filename": true,
            "format": "svg"
        }
    ],
    "vsicons.dontShowNewVersionMessage": true,

    // WSL
    "remote.WSL.useShellEnvironment": false,

    // XML
    "xml.codeLens.enabled": true,
    "xml.validation.resolveExternalEntities": true,

    // XML Tools
    "xmlTools.enforcePrettySelfClosingTagOnFormat": true,
    "xmlTools.removeCommentsOnMinify": true,

    // YAML
    "yaml.format.singleQuote": true,


    // ##################################################
    // ###           Language customisations          ###
    // ##################################################

    "[git-commit]": {
        // Rewrap extension
        "rewrap.autoWrap.enabled": true,
        "rewrap.wrappingColumn": 72
    },

    "[html]": {
        // Use built-in formatter
        "editor.defaultFormatter": "vscode.html-language-features"
    },

    "[javascript]": {
        // Use built-in formatter
        "editor.defaultFormatter": "vscode.typescript-language-features"
    },

    "[json]": {
        // Use built-in formatter
        "editor.defaultFormatter": "vscode.json-language-features"
    },

    "[jsonc]": {
        // Use built-in formatter
        "editor.defaultFormatter": "vscode.json-language-features"
    },

    "[markdown]": {
        // Use Markdown All in One extension formatter
        "editor.defaultFormatter": "yzhang.markdown-all-in-one",

        // Trailing whitespace has special meaning
        "files.trimTrailingWhitespace": false,

        // Don't restore the last editor view state
        "workbench.editor.restoreViewState": false
    },

    "[python]": {
        "editor.codeActionsOnSave": {
            // Organise imports with isort
            "source.organizeImports": true
        }
    },

    "[xml]": {
        // Use Red Hat XML extension formatter
        "editor.defaultFormatter": "redhat.vscode-xml"
    },

    "[yaml]": {
        // Use Red Hat YAML extension formatter
        "editor.defaultFormatter": "redhat.vscode-yaml"
    }
}
