My "Terminal" Setup
Tags: bash
Published: 2020-10-20 10:39:08

As someone that customizes my devices frequently, it's surprising that I've never really touched the terminal, or as it's known on Windows - the command prompt. It's probably because I've never used it very much - it's only when I started [learning Django](https://devlog.acord.software/voicebox-and-apis) that I used the command prompt on my computers for programming. 

In 2016, I discovered the joy of customization when I started installing launchers on my Samsung Core Prime smartphone. From Nova to Microsoft Launcher, I played around with icon packs, the app drawer and the notification center, and I'll be doing a post describing some unique setups for Android devices some time in the future. In 2017, I started using [rainmeter](http://rainmeter.net), which I still use today.

When I started programming, the main applications I used were Visual Studio Code, Unity, Github/Gitkraken and a web browser. It may seem odd, but until recently my main projects were bootstrap/react-powered websites and a series of interactive games (again, I'll be writing about my journey through programming soon). I never touched the terminal.

I'm now part of a proper team - for a long time, AC0/RD Software was primarily me - and just me - 99% of the time. When I added more people to my network, I started getting involved in python competitions and I learnt a lot about Raspberry Pis, robotics and programming in general. Right now, we're working on API services and I thought getting started with Django would be a good idea. I actually started with Django in April, when I was building the foundations for Arcadia, but after finishing the demo project I hadn't touched it for a while. I'd used the command prompt for things like `pip` and setting up virtual environments. When I determined that I'd need to use the terminal, or a bash application, frequently, I quickly came to the decision that I needed to beautify my setup. 

I have 4 weeks left of school (including exams), and after Year 12 finishes I'll be getting a new laptop. I don't want to have to go through the aches of re-learning Linux (I haven't used it since May, and the dualbooting process took several years off my life) or getting a Macbook while I'm preparing for my ATAR/WACE exams, so I decided to try and find terminal applications that work on all platforms - that way I'll be able to bring my setup along with me after school.

For now, I'm using HYPERJS. I discovered starship.rs and I fell in love with it, but it was a pain to install - well, I still haven't installed it (ha ha). Hyper was recommended to me by a friend and it looks just as good. If you haven't heard of Hyper, it's a terminal replacement that works on Mac OS, Windows & Linux. It supports a wide variety of open-source plugins and themes, which can be managed in the `.hyper.js` file. Here's mine for reference:

```js
// Future versions of Hyper may add additional config options,
// which will not automatically be merged into this file.
// See https://hyper.is#cfg for all currently supported options.

module.exports = {
  config: {
    // choose either `'stable'` for receiving highly polished,
    // or `'canary'` for less polished but more frequent updates
    updateChannel: 'stable',

    // default font size in pixels for all tabs
    fontSize: 12,

    // font family with optional fallbacks
    fontFamily: 'Menlo, "DejaVu Sans Mono", Consolas, "Lucida Console", monospace',

    // default font weight: 'normal' or 'bold'
    fontWeight: 'normal',

    // font weight for bold characters: 'normal' or 'bold'
    fontWeightBold: 'bold',

    // line height as a relative unit
    lineHeight: 1,

    // letter spacing as a relative unit
    letterSpacing: 0,

    // terminal cursor background color and opacity (hex, rgb, hsl, hsv, hwb or cmyk)
    cursorColor: 'rgba(248,28,229,0.8)',

    // terminal text color under BLOCK cursor
    cursorAccentColor: '#000',

    // `'BEAM'` for |, `'UNDERLINE'` for _, `'BLOCK'` for █
    cursorShape: 'BLOCK',

    // set to `true` (without backticks and without quotes) for blinking cursor
    cursorBlink: false,

    // color of the text
    foregroundColor: '#fff',

    // terminal background color
    // opacity is only supported on macOS
    backgroundColor: '#000',

    // terminal selection color
    selectionColor: 'rgba(248,28,229,0.3)',

    // border color (window, tabs)
    borderColor: '#333',

    // custom CSS to embed in the main window
    css: '',

    // custom CSS to embed in the terminal window
    termCSS: '',

    // if you're using a Linux setup which show native menus, set to false
    // default: `true` on Linux, `true` on Windows, ignored on macOS
    showHamburgerMenu: '',

    // set to `false` (without backticks and without quotes) if you want to hide the minimize, maximize and close buttons
    // additionally, set to `'left'` if you want them on the left, like in Ubuntu
    // default: `true` (without backticks and without quotes) on Windows and Linux, ignored on macOS
    showWindowControls: '',

    // custom padding (CSS format, i.e.: `top right bottom left`)
    padding: '12px 14px',

    // the full list. if you're going to provide the full color palette,
    // including the 6 x 6 color cubes and the grayscale map, just provide
    // an array here instead of a color map object
    colors: {
      black: '#000000',
      red: '#C51E14',
      green: '#1DC121',
      yellow: '#C7C329',
      blue: '#0A2FC4',
      magenta: '#C839C5',
      cyan: '#20C5C6',
      white: '#C7C7C7',
      lightBlack: '#686868',
      lightRed: '#FD6F6B',
      lightGreen: '#67F86F',
      lightYellow: '#FFFA72',
      lightBlue: '#6A76FB',
      lightMagenta: '#FD7CFC',
      lightCyan: '#68FDFE',
      lightWhite: '#FFFFFF',
    },

 

    // the shell to run when spawning a new session (i.e. /usr/local/bin/fish)
    // if left empty, your system's login shell will be used by default
    
    // Windows
    // - Make sure to use a full path if the binary name doesn't work
    // - Remove `--login` in shellArgs
    //
    // Bash on Windows
    // - Example: `C:\\Windows\\System32\\bash.exe`
    //
    // PowerShell on Windows
    // - Example: `C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`
    shells: [
      {
        name: "CMD",
        shell: 'cmd.exe',
        args: ['--login'],
      },
      {
        name: "Bash",
        group: [
          {
            name: "WSL",
            shell: 'C:\\Windows\\System32\\bash.exe',
            args: ['--login'],
          },
          {
            name: "Git",
            shell: "C:\\Program Files\\Git\\bin\\bash.exe",
            args: ["--login"],
          },
        ],
      },
      {
        name: "Powershell",
        shell: "powershell.exe",
        default: true,
      },
      {
        name: "Cygwin",
        shell: "C:\\cygwin64\\bin\\bash.exe",
        args: ["--login"],
      },
      {
        name: "Visual Studio",
        shell: "cmd.exe",
        args: [
          "/k",
          "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\vcvarsall.bat",
          "amd64",
        ],
      },
    ],
    


    // for environment variables
    env:{ TERM: 'cygwin' },



    // set to `false` for no bell
    bell: 'SOUND',

    // if `true` (without backticks and without quotes), selected text will automatically be copied to the clipboard
    copyOnSelect: false,

    // if `true` (without backticks and without quotes), hyper will be set as the default protocol client for SSH
    defaultSSHApp: true,

    // if `true` (without backticks and without quotes), on right click selected text will be copied or pasted if no
    // selection is present (`true` by default on Windows and disables the context menu feature)
    quickEdit: false,

    // choose either `'vertical'`, if you want the column mode when Option key is hold during selection (Default)
    // or `'force'`, if you want to force selection regardless of whether the terminal is in mouse events mode
    // (inside tmux or vim with mouse mode enabled for example).
    macOptionSelectionMode: 'vertical',

    // URL to custom bell
    // bellSoundURL: 'http://example.com/bell.mp3',

    // Whether to use the WebGL renderer. Set it to false to use canvas-based
    // rendering (slower, but supports transparent backgrounds)
    webGLRenderer: true,

    // for advanced config flags please refer to https://hyper.is/#cfg

    hyperTabs: {
      trafficButtons: true,
      }
  },

  // a list of plugins to fetch and install from npm
  // format: [@org/]project[#version]
  // examples:
  //   `hyperpower`
  //   `@company/project`
  //   `project#1.0.1`
  plugins: [
    "hyper-midnight",
    "hyper-tabs-enhanced",
    "hyper-active-tab",
    "hyperpower",
    "hyperborder",
    "hyper-letters",
    "hyper-dark-scrollbar",
  ],

  // in development, you can create a directory under
  // `~/.hyper_plugins/local/` and include it here
  // to load it and avoid it being `npm install`ed
  localPlugins: [],

  keymaps: {
    // Example
    // 'window:devtools': 'cmd+alt+o',
  },
};
```

And here's what it looks like:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/fate03v9rvxode3u36jz.PNG)
Just amazing.