{
  //
  // ===========================================================================
  // MARK: Appearance
  // ===========================================================================
  //
  // Dark/Light mode detection
  "window.autoDetectColorScheme": true,
  "window.systemColorTheme": "auto",
  //
  // Theme
  "workbench.colorTheme": "One Dark Pro",
  "workbench.iconTheme": "material-icon-theme",
  "workbench.preferredDarkColorTheme": "One Dark Pro",
  "workbench.preferredLightColorTheme": "Solarized Light",
  //
  // One Dark Pro theme settings
  "oneDarkPro.vivid": true,
  //
  // ===========================================================================
  // MARK: Window
  // ===========================================================================
  //
  "window.commandCenter": true,
  "window.customTitleBarVisibility": "auto",
  "window.nativeFullScreen": false, // Does not work with nativeTabs enabled.
  "window.nativeTabs": true,
  "window.title": "${rootName}${separator}${profileName}",
  //
  // ===========================================================================
  // MARK: Cursor (Text Editor)
  // ===========================================================================
  //
  "cursor.aipreview.enabled": true,
  "cursor.cpp.enablePartialAccepts": true,
  "cursor.diffs.useCharacterLevelDiffs": true,
  "cursor.terminal.usePreviewBox": true,
  "cursor.general.enableShadowWorkspace": true,
  //
  // ===========================================================================
  // MARK: Windsurf (Text Editor)
  // ===========================================================================
  //
  "windsurf.autocompleteSpeed": "fast",
  //
  // ===========================================================================
  // MARK: Editor
  // ===========================================================================
  //
  // Font
  "editor.fontFamily": "'Menlo Nerd Font Mono', 'Menlo Nerd Font', Menlo, Monaco, 'Courier New', monospace",
  "editor.fontLigatures": false,
  "editor.fontWeight": "normal",
  "editor.fontSize": 12,
  //
  // Cursor
  "editor.cursorSurroundingLines": 5,
  //
  // Whitespace
  "editor.renderWhitespace": "boundary",
  //
  // Formatting
  "editor.formatOnSave": true,
  "editor.formatOnPaste": true,
  "editor.formatOnSaveMode": "file",
  //
  // Rulers
  "editor.rulers": [
    80,
    100,
    120
  ],
  //
  // Semantic Highlighting
  "editor.semanticHighlighting.enabled": true,
  //
  // Minimap
  "editor.minimap.enabled": true,
  "editor.minimap.showSlider": "always",
  //
  // Modified Tabs
  "workbench.editor.highlightModifiedTabs": true,
  //
  // Accessibility
  "editor.accessibilitySupport": "off",
  //
  // ===========================================================================
  // MARK: Workbench
  // ===========================================================================
  //
  // Activity Bar
  "workbench.activityBar.location": "top",
  "workbench.activityBar.orientation": "horizontal",
  //
  // Command Palette
  "workbench.commandPalette.history": 250,
  "workbench.commandPalette.preserveInput": true,
  //
  // Hover
  "workbench.hover.delay": 200,
  //
  // Local History
  "workbench.localHistory.maxFileEntries": 250,
  "workbench.localHistory.maxFileSize": 512,
  //
  // Tree
  "workbench.tree.indent": 18,
  "workbench.tree.renderIndentGuides": "always",
  //
  // ===========================================================================
  // MARK: Explorer
  // ===========================================================================
  //
  "explorer.sortOrder": "mixed",
  "explorer.sortOrderLexicographicOptions": "unicode",
  //
  // ===========================================================================
  // MARK: Files
  // ===========================================================================
  //
  // Associations
  "files.associations": {
    "gitconfig": "gitconfig",
    "gitignore": "gitignore"
  },
  //
  // Encoding
  "files.autoGuessEncoding": true,
  //
  // Formatting
  "files.insertFinalNewline": true,
  "files.trimFinalNewlines": true,
  "files.trimTrailingWhitespace": true,
  //
  // Read-only
  "files.readonlyFromPermissions": true,
  //
  // ===========================================================================
  // MARK: Git
  // ===========================================================================
  //
  "git.blame.editorDecoration.enabled": false,
  "scm.defaultViewMode": "tree",
  //
  // ===========================================================================
  // MARK: Diffs
  // ===========================================================================
  //
  "diffEditor.ignoreTrimWhitespace": false,
  //
  // ===========================================================================
  // MARK: Terminal
  // ===========================================================================
  //
  "terminal.integrated.allowChords": false,
  "terminal.integrated.macOptionIsMeta": true,
  "terminal.integrated.persistentSessionScrollback": 1000,
  "terminal.integrated.scrollback": 50000,
  "terminal.integrated.sendKeybindingsToShell": true,
  //
  // ===========================================================================
  // MARK: Awesome Emacs Keybindings
  // ===========================================================================
  // Extension:
  // - https://marketplace.visualstudio.com/items?itemName=tuttieee.emacs-mcx
  //
  "emacs-mcx.emacsLikeTab": false, // Done via custom keybinding instead.
  "emacs-mcx.killRingMax": 120,
  "emacs-mcx.markRingMax": 32,
  //
  // ===========================================================================
  // MARK: File Browser
  // ===========================================================================
  // Extension:
  // - https://marketplace.visualstudio.com/items?itemName=bodil.file-browser
  //
  "file-browser.hideDotfiles": false,
  "file-browser.labelIgnoredFiles": true,
  //
  // ===========================================================================
  // MARK: Project Manager
  // ===========================================================================
  // Extension:
  // - https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager
  //
  "projectManager.git.baseFolders": [
    "~/Projects",
    "~/.dotfiles",
    "~/.config"
  ],
  "projectManager.git.ignoredFolders": [
    "node_modules",
    "out",
    "typings",
    "test",
    ".haxelib",
    "tmp",
    "vendor",
    "straight",
    "elpaca"
  ],
  "projectManager.any.ignoredFolders": [
    "node_modules",
    "out",
    "typings",
    "test",
    "tmp",
    "vendor",
    "straight",
    "elpaca"
  ],
  "projectManager.hg.ignoredFolders": [
    "node_modules",
    "out",
    "typings",
    "test",
    ".haxelib",
    "straight",
    "elpaca"
  ],
  "projectManager.svn.ignoredFolders": [
    "node_modules",
    "out",
    "typings",
    "test",
    "straight",
    "elpaca"
  ],
  "projectManager.vscode.ignoredFolders": [
    "node_modules",
    "out",
    "typings",
    "test",
    "straight",
    "elpaca"
  ],
  //
  // ===========================================================================
  // MARK: GitHub
  // ===========================================================================
  // Extensions:
  // - https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github
  // - https://marketplace.visualstudio.com/items?itemName=GitHub.remotehub
  //
  "githubRepositories.autoFetch.enabled": false,
  //
  // ===========================================================================
  // MARK: Mise (https://mise.jdx.dev/)
  // ===========================================================================
  // Extension:
  // - https://marketplace.visualstudio.com/items?itemName=hverlin.mise-vscode
  //
  "mise.updateOpenTerminalsEnvAutomatically": true,
  //
  // ===========================================================================
  // MARK: Hex editor
  // ===========================================================================
  // Extension:
  // - https://marketplace.visualstudio.com/items?itemName=ms-vscode.hexeditor
  //
  "workbench.editor.defaultBinaryEditor": "hexEditor.hexedit",
  //
  // ===========================================================================
  // MARK: Go
  // ===========================================================================
  // Extensions:
  // - https://marketplace.visualstudio.com/items?itemName=golang.go
  // - https://marketplace.visualstudio.com/items?itemName=gofenix.go-lines
  //
  "go-lines.lineLength": 120,
  "go.coverOnSingleTest": true,
  "go.coverShowCounts": true,
  "go.formatTool": "gofumpt",
  "go.inlayHints.constantValues": true,
  "go.lintOnSave": "workspace",
  "go.lintTool": "golangci-lint",
  "go.testExplorer.packageDisplayMode": "nested",
  "go.testExplorer.showDynamicSubtestsInEditor": true,
  "go.testFlags": [
    "-count=1"
  ],
  "go.useLanguageServer": true,
  "gopls": {
    "ui.diagnostic.analyses": {
      "shadow": true
    },
    "ui.diagnostic.staticcheck": true
  },
  //
  // ===========================================================================
  // MARK: JSON
  // ===========================================================================
  //
  "[json]": {
    "editor.insertSpaces": true,
    "editor.tabSize": 2
  },
  //
  // ===========================================================================
  // MARK: Lua
  // ===========================================================================
  // Extensions:
  // - https://marketplace.visualstudio.com/items?itemName=sumneko.lua
  //
  "Lua.codeLens.enable": true,
  "Lua.diagnostics.globals": [
    // Hammerspoon
    "hs",
    "spoon"
  ],
  "Lua.diagnostics.workspaceEvent": "OnChange",
  "Lua.hint.enable": true,
  //
  // ===========================================================================
  // MARK: Ruby
  // ===========================================================================
  // Extensions:
  // - https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-extensions-pack
  // - https://marketplace.visualstudio.com/items?itemName=connorshea.vscode-ruby-test-adapter
  //
  "[ruby]": {
    "editor.defaultFormatter": "Shopify.ruby-lsp",
    "editor.formatOnSave": true,
    "editor.formatOnType": true,
    "editor.insertSpaces": true,
    "editor.tabSize": 2
  },
  // Ruby Test Explorer
  "rubyTestExplorer.logpanel": false,
  // Use mise to execute ruby test explorer bundler commands to ensure correct
  // version of Ruby is used.
  "rubyTestExplorer.minitestCommand": "mise x -- bundle exec rake",
  "rubyTestExplorer.rspecCommand": "mise x -- bundle exec rspec",
  //
  // ===========================================================================
  // MARK: Shellscript
  // ===========================================================================
  // Extensions:
  // - https://marketplace.visualstudio.com/items?itemName=foxundermoon.shell-format
  //
  "[shellscript]": {
    "editor.tabSize": 2,
    "editor.insertSpaces": true
  },
  "[sh]": {
    "editor.tabSize": 2,
    "editor.insertSpaces": true
  },
  "[zsh]": {
    "editor.tabSize": 2,
    "editor.insertSpaces": true
  },
  "shellformat.useEditorConfig": true,
  "shellformat.flag": "-i 2 -ci -sr",
  //
  // ===========================================================================
  // MARK: YAML
  // ===========================================================================
  // Extensions:
  // - https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml
  // - https://marketplace.visualstudio.com/items?itemName=arahata.linter-actionlint
  //
  "redhat.telemetry.enabled": false,
  //
  // ===========================================================================
  // MARK: Makefile
  // ===========================================================================
  // Extensions:
  // - https://marketplace.visualstudio.com/items?itemName=carlos-algms.make-task-provider
  //
  "makefile.configureOnOpen": false,
  "make-task-provider.telemetry": false,
  //
  // ===========================================================================
  // MARK: Sort Lines
  // ===========================================================================
  // Extensions:
  // - https://marketplace.visualstudio.com/items?itemName=Tyriar.sort-lines
  //
  "sortLines.filterBlankLines": true,
  "sortLines.ignoreUnselectedLastLine": true,
  //
  // ===========================================================================
  // MARK: vscode-color-picker
  // ===========================================================================
  // Extension:
  // - https://marketplace.visualstudio.com/items?itemName=AntiAntiSepticeye.vscode-color-picker
  //
  "vscode-color-picker.languages": [
    "css",
    "go",
    "javascript",
    "less",
    "postcss",
    "python",
    "ruby",
    "sass",
    "scss",
    "sss",
    "stylus",
    "svg",
    "typescript",
    "xml"
  ],
  //
  // ===========================================================================
  // MARK: Run on Save callbacks
  // ===========================================================================
  // Extension:
  // - https://marketplace.visualstudio.com/items?itemName=emeraldwalk.RunOnSave
  //
  "emeraldwalk.runonsave": {
    "commands": [
      { // Automatically chmod +x script files (first two bytes are `#!`).
        "match": ".*",
        "cmd": "if [ ! -x \"${file}\" ] && head -n 1 \"${file}\" | grep -q '^#!'; then echo \"Marking ${relativeFile} as executable...\" && chmod +x \"${file}\"; fi"
      }
    ]
  },
  //
  // ===========================================================================
  // MARK: Command aliases
  // ===========================================================================
  //
  "command aliases": {
    // Sort Lines.
    // Extension: https://marketplace.visualstudio.com/items?itemName=Tyriar.sort-lines
    "sortLines.sortLines": "sl"
  },
  //
  // ===========================================================================
  // MARK: Macros
  // ===========================================================================
  // Extension:
  // - https://marketplace.visualstudio.com/items?itemName=ctf0.macros
  //
  "macros.list": {
    //
    // cycleSpacing is a basic emulation Emacs' built-in cycle-spacing command.
    // It doesn't actually cycle spacing, but it performs the first step which
    // is to replace all spacing surrounding the cursor with a single space.
    //
    "cycleSpacing": [
      "emacs-mcx.deleteHorizontalSpace",
      {
        "command": "type",
        "args": {
          "text": " "
        }
      }
    ],
    //
    // Run test macros which re-focus back into the editor after being
    // triggered. The test commands changes focus to the Test Results panel, and
    // no settings I found avoids this. Hence these macros trigger relevant test
    // running commands and then switches focus back to the editor.
    //
    // The 1 ms delay between the running tests and switch focus back allows for
    // the Test Results panel to appear and steal focus before we try and focus
    // back into the editor. Without the delay the focus commands runs before
    // Test Results appear and steal focus.
    //
    "runTestCurrentFile": [
      "testing.runCurrentFile",
      {
        "command": "$delay",
        "args": {
          "delay": 1
        }
      },
      "workbench.action.focusActiveEditorGroup"
    ],
    "runTestCoverageCurrentFile": [
      "testing.coverageCurrentFile",
      {
        "command": "$delay",
        "args": {
          "delay": 1
        }
      },
      "workbench.action.focusActiveEditorGroup"
    ],
    "runTestAtCursor": [
      "testing.runAtCursor",
      {
        "command": "$delay",
        "args": {
          "delay": 1
        }
      },
      "workbench.action.focusActiveEditorGroup"
    ],
    "runTestCoverageAtCursor": [
      "testing.coverageAtCursor",
      {
        "command": "$delay",
        "args": {
          "delay": 1
        }
      },
      "workbench.action.focusActiveEditorGroup"
    ],
    "runTestAll": [
      "testing.runAll",
      {
        "command": "$delay",
        "args": {
          "delay": 1
        }
      },
      "workbench.action.focusActiveEditorGroup"
    ],
    "runTestCoverageAll": [
      "testing.coverageAll",
      {
        "command": "$delay",
        "args": {
          "delay": 1
        }
      },
      "workbench.action.focusActiveEditorGroup"
    ],
    "runTestReRunLastRun": [
      "testing.reRunLastRun",
      {
        "command": "$delay",
        "args": {
          "delay": 1
        }
      },
      "workbench.action.focusActiveEditorGroup"
    ],
    "runTestCoverageLastRun": [
      "testing.coverageLastRun",
      {
        "command": "$delay",
        "args": {
          "delay": 1
        }
      },
      "workbench.action.focusActiveEditorGroup"
    ],
    "runTestReRunFailTests": [
      "testing.reRunFailTests",
      {
        "command": "$delay",
        "args": {
          "delay": 1
        }
      },
      "workbench.action.focusActiveEditorGroup"
    ],
    "runTestDebugFailTests": [
      "testing.debugFailTests",
      {
        "command": "$delay",
        "args": {
          "delay": 1
        }
      },
      "workbench.action.focusActiveEditorGroup"
    ],
    "runTestDebugLastRun": [
      "testing.debugLastRun",
      {
        "command": "$delay",
        "args": {
          "delay": 1
        }
      },
      "workbench.action.focusActiveEditorGroup"
    ]
  }
}
