[
  {
    "path": "README.md",
    "content": "# StartTree\nA terminal-style home page replicating the tree command, modified from [this](https://notabug.org/nytly/home) start page, which no longer exists.\n\n<p align=\"center\">\n  <img src=\"/images/StartTree.png\", title=\"StartTree\"/>\n</p>\n\n<div align=\"center\">\n  <h1>\n    <a href=\"https://gideonwolfe.com/\">\n        <img style=\"vertical-align:middle\" src=\"/images/forest.png\", width=\"400\", />\n    </a>\n      <span style=\"\"> \n        <img style=\"vertical-align:middle\" src=\"/images/void.png\", width=\"400\", />\n        </a>\n      </span>\n  </h1>\n</div>\n\n# Usage\n## Requirements\nRequires the `bs4` python package.\n\n## Installation\nTo install StartTree for the first time, run the following commands:  \n(Note: If the `~/.config/StartTree` directory already exists, `init.sh` will not copy the example config to prevent accidentally overwriting a custom config. )\n```\ngit clone https://github.com/Paul-Houser/StartTree.git\ncd StartTree\nchmod +x init.sh\nchmod +x generate.py\n./init.sh\n./generate.py\n```\nThis will create the directory `~/.config/StartTree` containing the default `config.yaml`, install `starttree.py` to your `$PATH`, as well as generate the html/css, which you can view by pointing your browser at `$HOME/.cache/StartTree/index.html`.\n\n## Config\nThe config should be placed in `~/.config/StartTree/config.yaml`\n\n## Updating the HTML\nTo re-generate the html/css after editing the config, execute `starttree.py` from any directory.\n\n# Example Config\n```yaml\nfont_size: 22 # specify font size\ntheme: void # specify the name of a theme in the themes/ directory, or use 'pywal'\ntree_1: # each column should be named 'tree_X' where X is unique for each tree.\n  general: # Header name\n    github: \"https://www.github.com/\" # Link-text: url\n    gmail: \"https://mail.google.com/\"\n  reddit:\n    # the following is an example of naming a link something with a space,\n    # or containing characters that cannot be in a yaml variable name.\n    frontpage: \n      - \"https://www.reddit.com/\"\n      - \"front page\"\n    unixporn: \"https://www.reddit.com/r/unixporn/\"\ntree_2:\n  other:\n    archwiki: \n      - \"https://archlinux.org/\"\n      - \"arch wiki\"\n    hulu: \"https://www.hulu.com/\"\n    netflix: \"https://www.netflix.com/\"\n    youtube: \"https://www.youtube.com/\"\n```\n\n# Themes\n\nA variety of themes can be found in the `themes` directory. \n\nIf one wishes to dynamically theme from `pywal`, they may select `pywal` as their chosen theme in `config.yaml`.\n\n# Docker\n\nIn order to circumvent some restrictions on browsers for what is allowed as a \"Home\" and \"New Tab\" page, you can host StartTree as a lightweight `NGINX` server through `docker-compose`.\n\nTo set this up, one must have `docker` and `docker-compose` installed and configured. Then, go into the directory where you cloned `StartTree`, and run\n\n```bash\ncd docker\nvim docker-compose.yaml # edit specifics to your liking\ndocker-compose -f docker-compose.yaml up -d\n```\n\nThis will make the `NGINX` server persist across reboots. You can point your browser's new tab and home page to `localhost:<port#>` and you should see your startpage!\n"
  },
  {
    "path": "config.yaml",
    "content": "font_size: 22\ntheme: void\ntree_1:\n  general:\n    github: \"https://www.github.com/\"\n    gmail: \"https://mail.google.com/\"\n  reddit:\n    frontpage: \n      - \"https://www.reddit.com/\"\n      - \"front page\"\n    unixporn: \"https://www.reddit.com/r/unixporn/\"\ntree_2:\n  other:\n    archwiki: \n      - \"https://archlinux.org/\"\n      - \"arch wiki\"\n    hulu: \"https://www.hulu.com/\"\n    netflix: \"https://www.netflix.com/\"\n    youtube: \"https://www.youtube.com/\"\n"
  },
  {
    "path": "docker/data/default.conf",
    "content": "server {\n    listen       80;\n    listen  [::]:80;\n    server_name  localhost;\n\n    #charset koi8-r;\n    #access_log  /var/log/nginx/host.access.log  main;\n\n    location / {\n        root   /usr/share/nginx/html;\n        index  index.html index.htm;\n        expires -1;\n    }\n\n    #error_page  404              /404.html;\n\n    # redirect server error pages to the static page /50x.html\n    #\n    error_page   500 502 503 504  /50x.html;\n    location = /50x.html {\n        root   /usr/share/nginx/html;\n    }\n\n    # proxy the PHP scripts to Apache listening on 127.0.0.1:80\n    #\n    #location ~ \\.php$ {\n    #    proxy_pass   http://127.0.0.1;\n    #}\n\n    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000\n    #\n    #location ~ \\.php$ {\n    #    root           html;\n    #    fastcgi_pass   127.0.0.1:9000;\n    #    fastcgi_index  index.php;\n    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;\n    #    include        fastcgi_params;\n    #}\n\n    # deny access to .htaccess files, if Apache's document root\n    # concurs with nginx's one\n    #\n    #location ~ /\\.ht {\n    #    deny  all;\n    #}\n}\n"
  },
  {
    "path": "docker/docker-compose.yaml",
    "content": "version: '3'\nservices:\n\n  StartTree:\n    image: nginx\n    volumes:\n      - $HOME/.cache/StartTree/styles/colors.css:/usr/share/nginx/html/styles/colors.css # This needs to be changed depending on theme\n      - $HOME/.cache/StartTree/index.html:/usr/share/nginx/html/index.html\n      - $HOME/.cache/StartTree/styles/style.css:/usr/share/nginx/html/styles/style.css\n      - $HOME/.cache/StartTree/styles/Hack.ttf:/usr/share/nginx/html/styles/Hack.ttf\n      - $HOME/.cache/StartTree/default.conf:/etc/nginx/conf.d/default.conf # modified conf to disable page caching :)\n    ports:\n    - \"9876:80\"\n    environment:\n    - NGINX_PORT=80\n    restart: unless-stopped\n"
  },
  {
    "path": "generate.py",
    "content": "#!/bin/python3\n\nimport yaml\nfrom os.path import expanduser\nfrom shutil import copyfile\nfrom bs4 import BeautifulSoup\n\n# get home directory\nhome = expanduser(\"~\")\n\n# get config path\nconfig_dir = home + '/.config/StartTree'\nconfig_path = home + '/.config/StartTree/config.yaml'\n\n# get cache path\ncache_dir = home + '/.cache/StartTree'\n\ndef prettifyHTML(html):\n    soup = BeautifulSoup(html, 'html.parser')\n    prettyHTML = soup.prettify()\n    return prettyHTML\n\ndef parse_yaml():\n    with open(config_path, mode='r') as file:\n        file_dict = yaml.full_load(file)\n    return file_dict\n\ndef print_keys(dictionary):\n    for key in dictionary:\n        print(key)\n        if isinstance(dictionary[key], dict):\n            print_keys(dictionary[key])\n\ndef gen_list_indices(html_file, file_dict):\n    for key in file_dict:\n        value = file_dict[key]\n        print(key + \"->\" + str(value))\n        if not isinstance(value, list):\n            html_file.write(\"<li><a href=\\\"\" + value + \"\\\">\" + key + \"</a></li>\")\n        else:\n            html_file.write(\"<li><a href=\\\"\" + value[0] + \"\\\">\" + value[1] + \"</a></li>\")\n\ndef gen_col_headers(html_file, file_dict):\n    for key in file_dict:\n        html_file.write(\"<li>\\n\")\n        html_file.write(\"<h1>\" + key + \"</h1>\\n\")\n        html_file.write(\"<ul>\\n\")\n\n        # generate list indices\n        gen_list_indices(html_file, file_dict[key])\n\n        html_file.write(\"</ul>\\n\")\n        html_file.write(\"</li>\\n\")\n\ndef gen_columns(html_file, file_dict):\n    for key in file_dict:\n        if key.split(\"_\")[0] == \"tree\":\n            html_file.write(\"<div class=\\\"column\\\">\\n\")\n            html_file.write(\"<div class=\\\"tree\\\">\\n\")\n            html_file.write(\"<h1>.</h1>\\n\")\n            html_file.write(\"<ul>\\n\")\n\n            # generate the column headers\n            gen_col_headers(html_file, file_dict[key])\n\n            html_file.write(\"</ul>\\n\")\n            html_file.write(\"</div>\\n\")\n            html_file.write(\"</div>\\n\")\n\n\ndef gen_html(file_dict):\n    print(\"Generating index.html...\")\n\n    # open files\n    skeleton_html = open(cache_dir + '/skeletons/index.html', 'r')\n    cache_html = open(cache_dir + '/index.html', 'w+')\n\n    # copy skeleton_html to cache_html until Column Start comment\n    lines = skeleton_html.readlines()\n    for line in lines:\n        if line == \"<!-- Columns start -->\\n\":\n            gen_columns(cache_html, file_dict)\n        else:\n            cache_html.write(line)\n\n    #  prettify\n    cache_html.seek(0)\n    pretty_string = cache_html.read()\n    pretty_string = prettifyHTML(pretty_string)\n    cache_html.close()\n    cache_html = open(cache_dir + '/index.html', 'w')\n    cache_html.write(pretty_string)\n\n    # close files\n    skeleton_html.close()\n    cache_html.close()\n\n    print(\"Done!\")\n\ndef gen_style(file_dict):\n    skeleton_style = open(cache_dir + '/skeletons/style.css', 'r')\n    cache_style = open(cache_dir + '/styles/style.css', 'w')\n\n    # find style attributes in file_dict\n    font_size = 20\n    theme = \"void\"\n    for key in file_dict:\n        if key == \"font_size\":\n            font_size = file_dict[key]\n        if key == \"theme\":\n            theme = file_dict[key]\n\n    if theme == \"pywal\":\n        theme = home + '/.cache/wal/colors.css'\n    else:\n        theme = cache_dir + '/themes/' + theme + '.css'\n\n    copyfile(theme, home + '/.cache/StartTree/styles/colors.css')\n\n    cache_style.write(\"@import url('./colors.css');\\n\")\n\n    lines = skeleton_style.readlines()\n    for line in lines:\n        if line == \"/* font-size */\\n\":\n            cache_style.write(\"font-size: \" + str(font_size) + \"px;\\n\")\n        else:\n            cache_style.write(line)\n\ndef main():\n    file_dict = parse_yaml()\n    gen_style(file_dict)\n    gen_html(file_dict)\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "init.sh",
    "content": "#!/bin/bash\n\nconfig_dir=$HOME/.config/StartTree\nconfig_path=$HOME/.config/StartTree/config.yaml\ncache_dir=$HOME/.cache/StartTree\n\n# check if .config path exists\nif [ ! -d \"$HOME/.config\" ]; then\n  echo \"The directory '~/.config' does not exist, or you do not have permissions to edit it.\"\n  exit\nfi\n\n# check if .cache path exists\nif [ ! -d \"$HOME/.cache\" ]; then\n  echo \"The directory '~/.cache' does not exist, or you do not have permissions to edit it.\"\n  exit\nfi\n\n# check if .local/bin exists\nif [ ! -d \"$HOME/.local/bin\" ]; then\n  echo \"The directory '~/.local/bin' does not exist, or you do not have permissions to edit it.\"\n  exit\nfi\n\n# check if .config/StartTree exists, create it and config if not\nif [ ! -d \"$config_dir\" ]; then\n  echo \"Creating '~/.config/StartTree'...\"\n  mkdir $config_dir\n  echo \"Copying config.yaml...\"\n  cp ./config.yaml $config_path\n  echo\nfi\n\n# check if config.yaml exists\nif [ ! -f \"$config_path\" ]; then\n  echo \"No config.yaml found in '~/.config/StartTree'\"\n  echo \"Copy the example config with:\"\n  echo \"\\tcp ./config.yaml $HOME/.config/StartTree/config.yaml\"\n  echo \"or create your own in that directory.\"\n  exit\nfi\n\n# create directory structure in .cache\nif [ ! -d \"$cache_dir\" ]; then\n  echo \"Creating '$cache_dir'...\"\n  mkdir $cache_dir\n\n  echo \"Symlinking themes...\"\n  ln -s $(pwd)/themes $HOME/.cache/StartTree/themes\n\n  echo \"Symlinking skeleton files...\"\n  ln -s $(pwd)/skeletons $HOME/.cache/StartTree/skeletons\n\n  echo \"Creating '$cache_dir/styles'...\"\n  mkdir \"$cache_dir/styles\"\nfi\n\necho \"Creating style.css...\"\ncp \"./skeletons/style.css\" \"$cache_dir/styles/style.css\"\n\necho \"Creating Hack.ttf...\"\ncp \"./skeletons/Hack.ttf\" \"$cache_dir/styles/Hack.ttf\"\n\n# add to path\nFILEPATH=$(readlink -f \"generate.py\")\nln -s $FILEPATH $HOME/.local/bin/starttree.py\necho \"generate.py has been linked to $HOME/.local/bin/\"\necho \"Make sure this directory is in your \\$PATH\"\n\nFILEPATH=$(readlink -f \"docker/data/default.conf\")\nln -s $FILEPATH $HOME/.cache/StartTree/default.conf\n"
  },
  {
    "path": "skeletons/index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"./styles/style.css\">\n    <title>Home</title>\n  </head>\n  <body>\n    <div class=\"container\">\n      <div class=\"prompt\">~<span> λ</span> tree</div>\n      <div class=\"row\">\n<!-- Columns start -->\n      </div>\n      <div class=\"prompt\">~<span> λ</span> ddg</div>\n      <form action=\"https://duckduckgo.com/\" method=\"GET\">\n        <h1>search: </h1>\n        <input type=\"text\" name=\"q\" autofocus=\"autofocus\">\n      </form>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "skeletons/style.css",
    "content": "@font-face {\n    font-family: \"Roboto Mono\";\n    src: url(\"./Hack.ttf\");\n}\n\n:root {\n    --font: \"Roboto Mono\";\n    /* --background: var(--background) !important; */\n    /* --foreground: #fffffe; */\n    /* --pink: #e53170; */\n    /* --red: #f25f4c; */\n    /* --orange: #ff8906; */\n    /* --branch: 1px solid #a7a9be; */\n    --branch: 1px solid var(--color12);\n}\n\nhtml {\n/* font-size */\n}\n\nbody {\n    background: var(--background);\n}\n\n.container {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n}\n\n.prompt {\n    font-family: var(--font);\n    color: var(--color5);\n}\n\n.prompt~.prompt {\n    padding: 1.5rem 0 0.3125rem;\n}\n\nspan {\n    color: var(--color10);\n}\n\nh1 {\n    display: inline;\n    font-family: var(--font);\n    font-size: 1rem;\n    font-weight: normal;\n    color: var(--color9);\n}\n\n.tree > ul {\n    margin: 0;\n    padding-left: 1rem;\n    padding-right: 1rem;\n}\n\nul {\n    list-style: none;\n    padding-left: 2.5rem;\n    white-space:nowrap;\n}\n\nli {\n    position: relative;\n}\n\nli::before, li::after {\n    content: \"\";\n    position: absolute;\n    left: -0.75rem;\n}\n\nli::before {\n    border-top: var(--branch);\n    top: 0.75rem;\n    width: 0.5rem;\n}\n\nli::after {\n    border-left: var(--branch);\n    height: 100%;\n    top: 0.25rem;\n}\n\nli:last-child::after {\n    height: 0.5rem;\n}\n\na {\n    font-family: var(--font);\n    font-size: 1rem;\n    color: var(--color6);\n    text-decoration: none;\n    outline: none;\n}\n\na:hover {\n    color: var(--color12);\n    background: var(--background);\n}\n\nform h1 {\n    padding-left: 0.125rem;\n}\n\ninput {\n    font-family: var(--font);\n    font-size: 1rem;\n    color: var(--color6);\n    background-color: var(--background);\n    border-width: 1px;\n    border-color: var(--color12);\n    border-style: solid;\n    padding-top: 4px;\n    padding-bottom: 4px;\n}\n\n.column {\n  flex: 50%;\n  padding: 5px;\n}\n\n.row {\n  display: flex;\n}\n\n.row:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n"
  },
  {
    "path": "themes/black-ice.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #9a9c9f;\n    --cursor: #9a9c9f;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #04294d;\n    --color2: #2d2d2d;\n    --color3: #094c57;\n    --color4: #176485;\n    --color5: #585a5a;\n    --color6: #62909b;\n    --color7: #9a9c9f;\n    --color8: #36393f;\n    --color9: #04294d;\n    --color10: #2d2d2d;\n    --color11: #094c57;\n    --color12: #176485;\n    --color13: #585a5a;\n    --color14: #62909b;\n    --color15: #9a9c9f;\n}\n"
  },
  {
    "path": "themes/carnival.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #bfc7c7;\n    --cursor: #bfc7c7;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #0e9da8;\n    --color2: #82b4b9;\n    --color3: #1063aa;\n    --color4: #2e45aa;\n    --color5: #7e3ca9;\n    --color6: #b82589;\n    --color7: #bfc7c7;\n    --color8: #415758;\n    --color9: #0e9da8;\n    --color10: #82b4b9;\n    --color11: #1063aa;\n    --color12: #2e45aa;\n    --color13: #7e3ca9;\n    --color14: #b82589;\n    --color15: #bfc7c7;\n}\n"
  },
  {
    "path": "themes/cotton-candy.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #8fc5c6;\n    --cursor: #8fc5c6;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #9E2A5E;\n    --color2: #D03C6E;\n    --color3: #9D596B;\n    --color4: #378B77;\n    --color5: #346D8A;\n    --color6: #CD6A8C;\n    --color7: #8fc5c6;\n    --color8: #64898a;\n    --color9: #9E2A5E;\n    --color10: #D03C6E;\n    --color11: #9D596B;\n    --color12: #378B77;\n    --color13: #346D8A;\n    --color14: #CD6A8C;\n    --color15: #8fc5c6;\n}\n"
  },
  {
    "path": "themes/desert-sky.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #c8c4c2;\n    --cursor: #c8c4c2;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #b07247;\n    --color2: #a89e88;\n    --color3: #89c0c0;\n    --color4: #69a4b7;\n    --color5: #358ec0;\n    --color6: #1a6eae;\n    --color7: #c8c4c2;\n    --color8: #5a504a;\n    --color9: #b07247;\n    --color10: #a89e88;\n    --color11: #89c0c0;\n    --color12: #69a4b7;\n    --color13: #358ec0;\n    --color14: #1a6eae;\n    --color15: #c8c4c2;\n}\n"
  },
  {
    "path": "themes/ferns.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #a1bfa2;\n    --cursor: #a1bfa2;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #264D33;\n    --color2: #316B37;\n    --color3: #255546;\n    --color4: #316E4A;\n    --color5: #3E6848;\n    --color6: #3F8648;\n    --color7: #a1bfa2;\n    --color8: #708571;\n    --color9: #264D33;\n    --color10: #316B37;\n    --color11: #255546;\n    --color12: #316E4A;\n    --color13: #3E6848;\n    --color14: #3F8648;\n    --color15: #a1bfa2;\n}\n"
  },
  {
    "path": "themes/forest.css",
    "content": ":root {\n    /* Special */\n    --background: #020303;\n    --foreground: #9da0a0;\n    --cursor: #9da0a0;\n\n    /* Colors */\n    --color0: #020303;\n    --color1: #2b3d30;\n    --color2: #424a55;\n    --color3: #405642;\n    --color4: #5b6a55;\n    --color5: #7f8d76;\n    --color6: #82908c;\n    --color7: #9da0a0;\n    --color8: #3b4242;\n    --color9: #2b3d30;\n    --color10: #424a55;\n    --color11: #405642;\n    --color12: #5b6a55;\n    --color13: #7f8d76;\n    --color14: #82908c;\n    --color15: #9da0a0;\n}\n"
  },
  {
    "path": "themes/gruvbox.css",
    "content": "/* gruv for starttree */\n:root {\n\t--background: #282828;\n\t--foreground: #ebdbb2;\n\t--cursor: #bfc7c7;\n\n\t--color0: #282828;\n\t--color1: #cc241d;\n\t--color2: #98971a;\n\t--color3: #d79921;\n\t--color4: #458588;\n\t--color5: #b16286;\n\t--color6: #689d6a;\n\t--color7: #a89984;\n\t--color8: #928374;\n\t--color9: #fb4934;\n\t--color10: #b8bb26;\n\t--color11: #fabd2f;\n\t--color12: #83a598;\n\t--color13: #d3869b;\n\t--color14: #8ec07c;\n\t--color15: #ebdbb2;\n}\n"
  },
  {
    "path": "themes/intrigue.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #a6c1b8;\n    --cursor: #a6c1b8;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #554B41;\n    --color2: #962A30;\n    --color3: #F21B2B;\n    --color4: #DF4D49;\n    --color5: #2EA564;\n    --color6: #F7934A;\n    --color7: #a6c1b8;\n    --color8: #748780;\n    --color9: #554B41;\n    --color10: #962A30;\n    --color11: #F21B2B;\n    --color12: #DF4D49;\n    --color13: #2EA564;\n    --color14: #F7934A;\n    --color15: #a6c1b8;\n}\n"
  },
  {
    "path": "themes/just-red.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #e58997;\n    --cursor: #e58997;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #BB243D;\n    --color2: #CC1B37;\n    --color3: #E11F3D;\n    --color4: #D8213E;\n    --color5: #E2203E;\n    --color6: #B42D44;\n    --color7: #e58997;\n    --color8: #a05f69;\n    --color9: #BB243D;\n    --color10: #CC1B37;\n    --color11: #E11F3D;\n    --color12: #D8213E;\n    --color13: #E2203E;\n    --color14: #B42D44;\n    --color15: #e58997;\n}\n"
  },
  {
    "path": "themes/neon-pink-dark.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #9fc8e0;\n    --cursor: #9fc8e0;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #8B1374;\n    --color2: #2D3090;\n    --color3: #512F91;\n    --color4: #325AB7;\n    --color5: #4C5AA5;\n    --color6: #B91F9E;\n    --color7: #9fc8e0;\n    --color8: #6f8c9c;\n    --color9: #8B1374;\n    --color10: #2D3090;\n    --color11: #512F91;\n    --color12: #325AB7;\n    --color13: #4C5AA5;\n    --color14: #B91F9E;\n    --color15: #9fc8e0;\n}\n"
  },
  {
    "path": "themes/neon.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #93d2d4;\n    --cursor: #93d2d4;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #205556;\n    --color2: #445142;\n    --color3: #B63632;\n    --color4: #9A9746;\n    --color5: #2E52C2;\n    --color6: #C610BE;\n    --color7: #93d2d4;\n    --color8: #669394;\n    --color9: #205556;\n    --color10: #445142;\n    --color11: #B63632;\n    --color12: #9A9746;\n    --color13: #2E52C2;\n    --color14: #C610BE;\n    --color15: #93d2d4;\n}\n"
  },
  {
    "path": "themes/orange-dark.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #9f9f9f;\n    --cursor: #9f9f9f;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #2c3433;\n    --color2: #5e2711;\n    --color3: #303d44;\n    --color4: #9d350a;\n    --color5: #505c5b;\n    --color6: #5e7078;\n    --color7: #9f9f9f;\n    --color8: #3f3f3f;\n    --color9: #2c3433;\n    --color10: #5e2711;\n    --color11: #303d44;\n    --color12: #9d350a;\n    --color13: #505c5b;\n    --color14: #5e7078;\n    --color15: #9f9f9f;\n}\n"
  },
  {
    "path": "themes/slick-red.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #c5c5c5;\n    --cursor: #c5c5c5;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #26292e;\n    --color2: #292c31;\n    --color3: #842133;\n    --color4: #c91a36;\n    --color5: #cf1f3b;\n    --color6: #c52c46;\n    --color7: #c5c5c5;\n    --color8: #515152;\n    --color9: #26292e;\n    --color10: #292c31;\n    --color11: #842133;\n    --color12: #c91a36;\n    --color13: #cf1f3b;\n    --color14: #c52c46;\n    --color15: #c5c5c5;\n}\n"
  },
  {
    "path": "themes/this-ones-good.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #aba0cb;\n    --cursor: #aba0cb;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #8B2039;\n    --color2: #A5244B;\n    --color3: #E22A66;\n    --color4: #B55F40;\n    --color5: #EB9346;\n    --color6: #0A6389;\n    --color7: #aba0cb;\n    --color8: #77708e;\n    --color9: #8B2039;\n    --color10: #A5244B;\n    --color11: #E22A66;\n    --color12: #B55F40;\n    --color13: #EB9346;\n    --color14: #0A6389;\n    --color15: #aba0cb;\n}\n"
  },
  {
    "path": "themes/tomorrow-night-eighties.css",
    "content": ":root {\n    /* Special */\n    --background: #2d2d2d;\n    --foreground: #cccccc;\n    --cursor: #cccccc;\n\n    /* Colors */\n    --color0: #2d2d2d;\n    --color1: #f2777a;\n    --color2: #99cc99;\n    --color3: #ffcc66;\n    --color4: #6699cc;\n    --color5: #cc99cc;\n    --color6: #66cccc;\n    --color7: #cccccc;\n    --color8: #999999;\n    --color9: #f2777a;\n    --color10: #99cc99;\n    --color11: #ffcc66;\n    --color12: #6699cc;\n    --color13: #cc99cc;\n    --color14: #66cccc;\n    --color15: #ffffff;\n}\n"
  },
  {
    "path": "themes/void.css",
    "content": ":root {\n    /* Special */\n    --background: #06070A;\n    --foreground: #79c4c6;\n    --cursor: #79c4c6;\n\n    /* Colors */\n    --color0: #06070A;\n    --color1: #175564;\n    --color2: #066C71;\n    --color3: #414255;\n    --color4: #0E7587;\n    --color5: #64468F;\n    --color6: #8D419F;\n    --color7: #79c4c6;\n    --color8: #54898a;\n    --color9: #175564;\n    --color10: #066C71;\n    --color11: #414255;\n    --color12: #0E7587;\n    --color13: #64468F;\n    --color14: #8D419F;\n    --color15: #79c4c6;\n}\n"
  },
  {
    "path": "themes/water-fire.css",
    "content": ":root {\n    /* Special */\n    --background: #000000;\n    --foreground: #c0c6c7;\n    --cursor: #c0c6c7;\n\n    /* Colors */\n    --color0: #000000;\n    --color1: #128faa;\n    --color2: #558fa9;\n    --color3: #9790a6;\n    --color4: #b17379;\n    --color5: #b45255;\n    --color6: #bf3032;\n    --color7: #c0c6c7;\n    --color8: #425458;\n    --color9: #128faa;\n    --color10: #558fa9;\n    --color11: #9790a6;\n    --color12: #b17379;\n    --color13: #b45255;\n    --color14: #bf3032;\n    --color15: #c0c6c7;\n}\n"
  }
]