# Installation

All Universe code must be accessed locally. So if your computer is on the Momentum network (you're inside an office) then you should be able to just install VS Code (opens new window) on your computer.

However, if you are working remotely, the only way to access Universe code is via Citrix. Chris was nice enough to install VS Code on Citrix. The only bad part was that it is not able to self-update.

Another downside to Citrix is that you can not install fonts so you're stuck with the system fonts. You'll want to keep with the monospaced fonts when choosing. My favorite system font is Consolas.

# Settings

Everything is customizable in VS Code. And, while VS Code is pretty awesome, a lot of defaults are not the best for some. For me, I like my editor to be clean and free of clutter. I like to hide away most things and rely on keyboard shortcuts or the command palette(ctrl + shift + p).

Here are my settings that are stored in the settings.json file (open command palette and search Settings (JSON))

{
   /**
    * Better Defaults
    **/
   "editor.copyWithSyntaxHighlighting": true,
   "diffEditor.ignoreTrimWhitespace": true,
   "editor.emptySelectionClipboard": false,
   "workbench.editor.enablePreview": false,
   "window.newWindowDimensions": "inherit",
   "editor.multiCursorModifier": "ctrlCmd",
   "files.trimTrailingWhitespace": true,
   "diffEditor.renderSideBySide": true,
   "editor.snippetSuggestions": "top",
   "editor.detectIndentation": false,
   "window.nativeFullScreen": false,
   "files.insertFinalNewline": true,
   "files.trimFinalNewlines": true,
   /**
    * Hide Everything
    */
   "workbench.activityBar.visible": false,
   "workbench.sideBar.location": "right",
   "workbench.statusBar.visible": false,
   "workbench.editor.showTabs": false,
   "editor.renderIndentGuides": false,
   "editor.minimap.enabled": false,
   "editor.lineNumbers": "on",
   /**
    * Silence The Noise
    */
   "breadcrumbs.enabled": true,
   "scm.diffDecorations": "none",
   "editor.hover.enabled": true,
   "editor.matchBrackets": "never",
   "workbench.tips.enabled": false,
   "editor.colorDecorators": false,
   "git.decorations.enabled": false,
   "workbench.startupEditor": "none",
   "editor.lightbulb.enabled": false,
   "editor.selectionHighlight": false,
   "editor.overviewRulerBorder": false,
   "editor.renderLineHighlight": "none",
   "editor.occurrencesHighlight": false,
   "problems.decorations.enabled": false,
   "editor.renderControlCharacters": false,
   "editor.hideCursorInOverviewRuler": true,
   "editor.gotoLocation.multipleReferences": "goto",
   "editor.gotoLocation.multipleDefinitions": "goto",
   "editor.gotoLocation.multipleDeclarations": "goto",
   "workbench.editor.enablePreviewFromQuickOpen": false,
   "editor.gotoLocation.multipleImplementations": "goto",
   "editor.gotoLocation.multipleTypeDefinitions": "goto",
   /**
    * Typography
    **/
   "workbench.colorTheme": "Community Material Theme Palenight",
   "editor.fontFamily": "Consolas,Fira Code",
   "editor.fontSize": 18,
   "editor.letterSpacing": 1.3,
   "editor.fontWeight": "500",
   "editor.lineHeight": 45,
   "editor.suggestFontSize": 15,
   "editor.suggestLineHeight": 28,
   "terminal.integrated.fontSize": 15,
   "terminal.integrated.lineHeight": 1.5,
   /**
    * Find
    **/
   "search.useIgnoreFiles": false,
   "search.exclude": {
      // Hide everything in /vendor, except the "laravel" and "livewire" folder.
      "**/vendor/{[^l],?[^ai]}*": true,
      // Hide everything in /public, except "index.php"
      "**/public/{[^i],?[^n]}*": true,
      "**/node_modules": true,
      "**/dist": true,
      "**/_ide_helper.php": true,
      "**/composer.lock": true,
      "**/package-lock.json": true,
      "storage": true,
      ".phpunit.result.cache": true
   },
   /**
    * Code
    **/
   // Include "-" in word selection.
   "editor.wordSeparators": "`~!@#%^&*()=+[{]}\\|;:'\",.<>/?",
   "emmet.includeLanguages": {
      "blade": "html",
      "vue-html": "html",
      "vue": "html"
   },
   "files.associations": {
      ".php_cs": "php",
      ".php_cs.dist": "php"
   },
   /**
    * PHP
    **/
   "php.suggest.basic": false,
   /**
    * PHP CS Fixer
    **/
   "[php]": {
      "editor.defaultFormatter": "junstyle.php-cs-fixer"
   },
   "php-cs-fixer.onsave": true,
   "php-cs-fixer.showOutput": false,
   "php-cs-fixer.autoFixByBracket": false,
   "php-cs-fixer.rules": "@PSR2",
   /**
    * Prettier
    **/
   "[javascript]": {
      "editor.defaultFormatter": "esbenp.prettier-vscode",
      "editor.formatOnSave": true
   },
   "prettier.requireConfig": true,
   "prettier.useEditorConfig": false,
   /**
    * Window Settings
    **/
   // Note for Windows users:
   // Unfortunately, "Full-bleed" isn't possible in Windows.
   // The best you can do is use the native "Windows" window
   // style and add these CSS selectors to clean it up further.
   "window.menuBarVisibility": "toggle",
   "customizeUI.stylesheet": {
      ".editor .title": "background: transparent !important;",
      ".editor .title .label-container": "visibility: hidden;",
      // Hide top-right buttons
      ".editor .title .actions-container .action-item a": "visibility: hidden;",
      // Show top-right "settings goto icon"
      ".editor .title .actions-container .action-item a[title=\"Open Settings (UI)\"]": "visibility: initial;",
      ".editor .title .actions-container .action-item a[title=\"Open Settings (JSON)\"]": "visibility: initial;",
      // Make it the "right-most" icon.
      ".editor .title .actions-container": "flex-direction: row-reverse;",
      // Only show the scrollbar on hover.
      ".editor .scrollbar .slider": "visibility: hidden",
      ".editor .scrollbar:hover .slider": "visibility: initial",
      // Change cursor color.
      ".monaco-editor .cursor": "background: linear-gradient(to bottom, #7f00ff, #e100ff) !important; color: #292D3E !important"
   },
   "php-cs-fixer.executablePath": "${extensionPath}/php-cs-fixer.phar",
   "php-cs-fixer.lastDownload": 1597263633437,
   "editor.tokenColorCustomizations": {
      "textMateRules": [
         {
            "scope": "text.html.markdown.journal.task.open.bullet",
            "settings": {
               "foreground": "#FFFF00"
            }
         },
         {
            "scope": "text.html.markdown.journal.task.open.marker",
            "settings": {
               "foreground": "#FFFF00"
            }
         },
         {
            "scope": "text.html.markdown.journal.task.open.keyword",
            "settings": {
               "fontStyle": "italic"
            }
         },
         {
            "scope": "text.html.markdown.journal.task.open.text",
            "settings": {}
         },
         {
            "scope": "text.html.markdown.journal.task.completed.keyword",
            "settings": {
               "fontStyle": "italic"
            }
         },
         {
            "scope": "text.html.markdown.journal.task.completed.marker",
            "settings": {
               "foreground": "#AAAAAA"
            }
         },
         {
            "scope": "text.html.markdown.journal.task.completed.text",
            "settings": {
               "foreground": "#AAAAAA"
            }
         },
         {
            "scope": "text.html.markdown.journal.task.completed.bullet",
            "settings": {
               "foreground": "#FFFF00"
            }
         },
         {
            "scope": "text.html.markdown.journal.memo.keyword",
            "settings": {
               "fontStyle": "italic"
            }
         },
         {
            "scope": "text.html.markdown.journal.memo.bullet",
            "settings": {
               "foreground": "#FFFF00"
            }
         },
         {
            "scope": "text.html.markdown.journal.scope",
            "settings": {
               "foreground": "#FFFF00"
            }
         },
         {
            "scope": "text.html.markdown.journal.link.keyword",
            "settings": {
               "fontStyle": "italic"
            }
         },
         {
            "scope": "text.html.markdown.journal.link.bullet",
            "settings": {
               "foreground": "#FFFF00"
            }
         }
      ]
   },
"window.zoomLevel": 0,
"editor.tabSize": 3,
"MVBasic.margin": 6,
"MVBasic.languageType": "UniVerse",
"MVBasic.useCamelCase": false,
"files.encoding": "iso88591",
"codesnap.showWindowControls": false,
"codesnap.showLineNumbers": false,
"MVBasic.userVariablesEnabled": true
}

# Keyboard bindings

Another thing that is highly customizable and powerful are the keyboard shortcuts. Here are is a list of mine (pulled from keyboard.json)

[
    /**
     * Panels
     */
    {
       "key": "ctrl+k ctrl+e",
       "command": "workbench.view.explorer"
    },
    {
       "key": "ctrl+k ctrl+g",
       "command": "workbench.view.scm"
    },
    {
       "key": "ctrl+k ctrl+d",
       "command": "workbench.view.debug"
    },
    {
       "key": "ctrl+k ctrl+x",
       "command": "workbench.extensions.action.showInstalledExtensions"
    },
    {
       "key": "ctrl+k ctrl+b",
       "command": "workbench.action.toggleSidebarVisibility"
    },
    {
       "key": "ctrl+e",
       "command": "workbench.action.focusActiveEditorGroup"
    },
    {
       "key": "ctrl+t",
       "command": "workbench.action.terminal.toggleTerminal"
    },
    /**
     * Toggle Font Size
     **/
    {
       "key": "ctrl+k ctrl+k",
       "command": "toggle",
       "when": "editorTextFocus",
       "args": {
          "id": "fontSize",
          "value": [
             {
                "editor.fontSize": 18,
                "editor.lineHeight": 45,
             },
             {
                "editor.fontSize": 12,
                "editor.lineHeight": 0,
             }
          ]
       }
    },
    /**
     * Fold/Unfold
     **/
    {
       "key": "shift+ctrl+[",
       "command": "editor.fold",
       "when": "editorFocus"
    },
    {
       "key": "shift+ctrl+]",
       "command": "editor.unfold",
       "when": "editorFocus"
    },
    /**
     * Line Manipulation
     **/
    {
       "key": "ctrl+l",
       "command": "editor.action.copyLinesDownAction",
       "when": "editorTextFocus"
    },
    {
       "key": "ctrl+j",
       "command": "editor.action.joinLines",
       "when": "editorTextFocus"
    },
    /**
     * File Explorer
     **/
    {
       "key": "ctrl+d",
       "command": "duplicate.execute",
       "when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !inputFocus"
    },
    {
       "key": "ctrl+n",
       "command": "explorer.newFile",
       "when": "explorerViewletVisible && filesExplorerFocus && !inputFocus"
    },
    {
       "key": "shift+ctrl+n",
       "command": "explorer.newFolder",
       "when": "explorerViewletVisible && filesExplorerFocus && !inputFocus"
    },
    /**
     * Multi-Cursor
     **/
    {
       "key": "ctrl+backspace",
       "command": "editor.action.moveSelectionToPreviousFindMatch",
       "when": "editorFocus && editorHasMultipleSelections"
    },
    {
       "key": "ctrl+k ctrl+d",
       "command": "editor.action.moveSelectionToNextFindMatch",
       "when": "editorFocus && editorHasMultipleSelections"
    },
    {
       "key": "ctrl+right",
       "command": "editor.action.insertCursorAtEndOfEachLineSelected",
       "when": "editorFocus && editorHasSelection"
    },
    /**
     * Split Panels
     **/
    {
       "key": "alt+w",
       "command": "workbench.action.joinAllGroups",
       "when": "editorFocus"
    },
    {
       "key": "alt+n",
       "command": "workbench.action.splitEditor",
       "when": "editorFocus"
    },
    {
       "key": "alt+l",
       "command": "workbench.action.navigateRight",
       "when": "editorFocus"
    },
    {
       "key": "alt+h",
       "command": "workbench.action.navigateLeft",
       "when": "editorFocus"
    },
    {
       "key": "alt+=",
       "command": "workbench.action.increaseViewSize",
       "when": "editorFocus"
    },
    {
       "key": "alt+-",
       "command": "workbench.action.decreaseViewSize",
       "when": "editorFocus"
    },
    /**
     * Terminal Split Panel
     **/
    {
       "key": "alt+n",
       "command": "workbench.action.terminal.split",
       "when": "terminalFocus"
    },
    {
       "key": "alt+l",
       "command": "workbench.action.terminal.focusNextPane",
       "when": "terminalFocus"
    },
    {
       "key": "alt+h",
       "command": "workbench.action.terminal.focusPreviousPane",
       "when": "terminalFocus"
    },
    {
       "key": "alt+w",
       "command": "workbench.action.terminal.kill",
       "when": "terminalFocus"
    },
    /**
     * Emmet
     **/
    {
       "key": "ctrl+m ctrl+i",
       "command": "editor.emmet.action.balanceIn",
       "when": "editorTextFocus"
    },
    {
       "key": "ctrl+m ctrl+o",
       "command": "editor.emmet.action.balanceOut",
       "when": "editorTextFocus"
    },
    {
       "key": "ctrl+m ctrl+w",
       "command": "editor.emmet.action.wrapWithAbbreviation",
       "when": "editorTextFocus"
    },
    {
       "key": "ctrl+m ctrl+m",
       "command": "editor.emmet.action.matchTag",
       "when": "editorTextFocus"
    },
    {
       "key": "ctrl+m ctrl+e",
       "command": "editor.action.smartSelect.expand",
       "when": "editorTextFocus"
    },
    {
       "key": "ctrl+m ctrl+r",
       "command": "editor.emmet.action.updateTag",
       "when": "editorTextFocus"
    },
    {
       "key": "ctrl+m ctrl+backspace",
       "command": "editor.emmet.action.removeTag",
       "when": "editorTextFocus"
    },
    /**
     * amVim Finder Fix
     **/
    {
       "key": "enter",
       "command": "editor.action.nextMatchFindAction",
       "when": "findWidgetVisible"
    },
    {
       "key": "shift+enter",
       "command": "editor.action.previousMatchFindAction",
       "when": "findWidgetVisible"
    },
    /**
     * IntelliSense
     **/
    {
       "key": "ctrl+r",
       "command": "workbench.action.gotoSymbol",
    },
    {
       "key": "ctrl+shift+r",
       "command": "workbench.action.showAllSymbols"
    },
    {
       "key": "ctrl+k ctrl+enter",
       "command": "editor.action.goToDeclaration",
       "when": "editorTextFocus"
    },
    {
       "key": "ctrl+k ctrl+i",
       "command": "namespaceResolver.import"
    },
    /**
     * Project Switching
     **/
    {
       "key": "ctrl+;",
       "command": "workbench.action.switchWindow",
       "when": "! config.simple-project-switcher.present"
    },
    {
       "key": "alt+ctrl+right",
       "command": "workbench.action.showNextWindowTab"
    },
    {
       "key": "alt+ctrl+left",
       "command": "workbench.action.showPreviousWindowTab"
    },
    /**
     * Open DevTools
     **/
    {
       "key": "alt+ctrl+i",
       "command": "workbench.action.toggleDevTools"
    },
    /**
     * Hide Toaster Notifications
     **/
    {
       "key": "escape",
       "command": "notifications.hideToasts",
       "when": "notificationToastsVisible"
 },
 {
     "key": "ctrl+k ctrl+r",
     "command": "better-phpunit.run",
     "when": "editorLangId == 'php'"
 },
 {
     "key": "win+k win+r",
     "command": "-better-phpunit.run",
     "when": "editorLangId == 'php'"
 },
 {
     "key": "ctrl+k ctrl+p",
     "command": "better-phpunit.run-previous",
     "when": "editorLangId == 'php'"
 },
 {
     "key": "win+k win+p",
     "command": "-better-phpunit.run-previous",
     "when": "editorLangId == 'php'"
},
{
    "key": "ctrl+d",
    "command": "-geeebe.duplicateText",
    "when": "editorTextFocus"
}
 ]

# Pick Extension

# Proc Extension