Clean commit without large files
This commit is contained in:
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
github: [LukeGus]
|
||||||
116
.github/workflows/docker-image.yml
vendored
Normal file
116
.github/workflows/docker-image.yml
vendored
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
name: Build and Push Docker Image
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- development
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
- '.gitignore'
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
tag_name:
|
||||||
|
description: "Custom tag name for the Docker image"
|
||||||
|
required: false
|
||||||
|
default: ""
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 1
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
with:
|
||||||
|
platforms: arm64
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
with:
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
driver-opts: |
|
||||||
|
image=moby/buildkit:master
|
||||||
|
network=host
|
||||||
|
|
||||||
|
- name: Cache npm dependencies
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.npm
|
||||||
|
node_modules
|
||||||
|
*/*/node_modules
|
||||||
|
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-node-
|
||||||
|
|
||||||
|
- name: Cache Docker layers
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: /tmp/.buildx-cache
|
||||||
|
key: ${{ runner.os }}-buildx-${{ github.ref_name }}-${{ hashFiles('docker/Dockerfile') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-buildx-${{ github.ref_name }}-
|
||||||
|
${{ runner.os }}-buildx-
|
||||||
|
|
||||||
|
- name: Login to Docker Registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Determine Docker image tag
|
||||||
|
run: |
|
||||||
|
echo "REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV
|
||||||
|
if [ "${{ github.event.inputs.tag_name }}" != "" ]; then
|
||||||
|
IMAGE_TAG="${{ github.event.inputs.tag_name }}"
|
||||||
|
elif [ "${{ github.ref }}" == "refs/heads/main" ]; then
|
||||||
|
IMAGE_TAG="latest"
|
||||||
|
elif [ "${{ github.ref }}" == "refs/heads/development" ]; then
|
||||||
|
IMAGE_TAG="development-latest"
|
||||||
|
else
|
||||||
|
IMAGE_TAG="${{ github.ref_name }}-development-latest"
|
||||||
|
fi
|
||||||
|
echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Build and Push Multi-Arch Docker Image
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
file: ./docker/Dockerfile
|
||||||
|
push: true
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
tags: ghcr.io/${{ env.REPO_OWNER }}/termix:${{ env.IMAGE_TAG }}
|
||||||
|
labels: |
|
||||||
|
org.opencontainers.image.source=https://github.com/${{ github.repository }}
|
||||||
|
org.opencontainers.image.revision=${{ github.sha }}
|
||||||
|
cache-from: type=local,src=/tmp/.buildx-cache
|
||||||
|
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
|
||||||
|
build-args: |
|
||||||
|
BUILDKIT_INLINE_CACHE=1
|
||||||
|
BUILDKIT_CONTEXT_KEEP_GIT_DIR=1
|
||||||
|
outputs: type=registry,compression=zstd,compression-level=19
|
||||||
|
|
||||||
|
- name: Move cache
|
||||||
|
run: |
|
||||||
|
rm -rf /tmp/.buildx-cache
|
||||||
|
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
|
||||||
|
|
||||||
|
- name: Delete all untagged image versions
|
||||||
|
if: success()
|
||||||
|
uses: quartx-analytics/ghcr-cleaner@v1
|
||||||
|
with:
|
||||||
|
owner-type: user
|
||||||
|
token: ${{ secrets.GHCR_TOKEN }}
|
||||||
|
repository-owner: ${{ github.repository_owner }}
|
||||||
|
delete-untagged: true
|
||||||
|
|
||||||
|
- name: Cleanup Docker Images Locally
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
docker image prune -af
|
||||||
|
docker system prune -af --volumes
|
||||||
25
.gitignore
vendored
Normal file
25
.gitignore
vendored
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
.DS_Store
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
|
/db/
|
||||||
13
LICENSE
Normal file
13
LICENSE
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
Copyright 2025 Luke Gustafson
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
87
README.md
Normal file
87
README.md
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
# Repo Stats
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
<a href="https://discord.gg/jVQGdvHDrf"><img alt="Discord" src="https://img.shields.io/discord/1347374268253470720"></a>
|
||||||
|
#### Top Technologies
|
||||||
|
[](#)
|
||||||
|
[](#)
|
||||||
|
[](#)
|
||||||
|
[](#)
|
||||||
|
[](#)
|
||||||
|
[](#)
|
||||||
|
[](#)
|
||||||
|
[](#)
|
||||||
|
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<p align="center">
|
||||||
|
<a href="https://github.com/LukeGus/Termix">
|
||||||
|
<img alt="Termix Banner" src=./public/icon.svg style="width: 250px; height: auto;"> </a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
If you would like, you can support the project here!\
|
||||||
|
[](https://github.com/sponsors/LukeGus)
|
||||||
|
|
||||||
|
# Overview
|
||||||
|
Termix is an open-source, forever-free, self-hosted all-in-one server management platform. It provides a web-based solution for managing your servers and infrastructure through a single, intuitive interface. Termix offers SSH terminal access, SSH tunneling capabilities, and remote file configuration editing, with many more tools to come.
|
||||||
|
|
||||||
|
# Features
|
||||||
|
- **SSH Terminal Access** - Full-featured terminal with split-screen support (up to 4 panels) and tab system
|
||||||
|
- **SSH Tunnel Management** - Create and manage SSH tunnels with automatic reconnection and health monitoring
|
||||||
|
- **Remote Config Editor** - Edit files directly on remote servers with syntax highlighting and file management
|
||||||
|
- **SSH Host Manager** - Save, organize, and manage your SSH connections with tags and folders
|
||||||
|
- **User Authentication** - Secure user management with admin controls
|
||||||
|
- **Modern UI** - Clean interface built with React, Tailwind CSS, and the amazing Shadcn
|
||||||
|
|
||||||
|
# Planned Features
|
||||||
|
- **Improved Admin Control** - Ability to manage admins, and give more fine-grained control over their permissions, share hosts, reset passwords, delete accounts, etc
|
||||||
|
- **More auth types** - Add 2FA, OCID support, etc
|
||||||
|
- **Theming** - Modify themeing for all tools
|
||||||
|
- **Improved SFTP Support** - Ability to manage files easier with the config editor by uploading, creating, and removing files
|
||||||
|
- **Improved Terminal Support** - Add more terminal protocols such as VNC and RDP (anyone who has experience in integrating RDP into a web-application similar to Apache Guacamole, please contact me by creating an issue)
|
||||||
|
|
||||||
|
# Installation
|
||||||
|
Visit the Termix [Docs](https://docs.termix.site/docs) for more information on how to install Termix. Otherwise, view a sample docker-compose file here:
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
termix:
|
||||||
|
image: ghcr.io/lukegus/termix:latest
|
||||||
|
container_name: termix
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
volumes:
|
||||||
|
- termix-data:/app/data
|
||||||
|
environment:
|
||||||
|
PORT: "8080"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
termix-data:
|
||||||
|
driver: local
|
||||||
|
```
|
||||||
|
|
||||||
|
# Support
|
||||||
|
If you need help with Termix, you can join the [Discord](https://discord.gg/jVQGdvHDrf) server and visit the support channel. You can also open an issue or open a pull request on the [GitHub](https://github.com/LukeGus/Termix/issues) repo.
|
||||||
|
|
||||||
|
# Show-off
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="./repo-images/Image 1.png" width="400" alt="Termix Demo 1"/>
|
||||||
|
<img src="./repo-images/Image 2.png" width="400" alt="Termix Demo 2"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="./repo-images/Image 3.png" width="250" alt="Termix Demo 3"/>
|
||||||
|
<img src="./repo-images/Image 4.png" width="250" alt="Termix Demo 4"/>
|
||||||
|
<img src="./repo-images/Image 5.png" width="250" alt="Termix Demo 5"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<video src="https://github.com/user-attachments/assets/0f95495d-c5db-48f5-b18b-9ab48bb10d31" width="800" controls>
|
||||||
|
Your browser does not support the video tag.
|
||||||
|
</video>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
# License
|
||||||
|
Distributed under the Apache License Version 2.0. See LICENSE for more information.
|
||||||
21
components.json
Normal file
21
components.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://ui.shadcn.com/schema.json",
|
||||||
|
"style": "new-york",
|
||||||
|
"rsc": false,
|
||||||
|
"tsx": true,
|
||||||
|
"tailwind": {
|
||||||
|
"config": "",
|
||||||
|
"css": "src/index.css",
|
||||||
|
"baseColor": "zinc",
|
||||||
|
"cssVariables": true,
|
||||||
|
"prefix": ""
|
||||||
|
},
|
||||||
|
"aliases": {
|
||||||
|
"components": "@/components",
|
||||||
|
"utils": "@/lib/utils",
|
||||||
|
"ui": "@/components/ui",
|
||||||
|
"lib": "@/lib",
|
||||||
|
"hooks": "@/hooks"
|
||||||
|
},
|
||||||
|
"iconLibrary": "lucide"
|
||||||
|
}
|
||||||
78
docker/Dockerfile
Normal file
78
docker/Dockerfile
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
# Stage 1: Install dependencies and build frontend
|
||||||
|
FROM node:18-alpine AS deps
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
RUN apk add --no-cache python3 make g++
|
||||||
|
|
||||||
|
COPY package*.json ./
|
||||||
|
|
||||||
|
RUN npm ci --force && \
|
||||||
|
npm cache clean --force
|
||||||
|
|
||||||
|
# Stage 2: Build frontend
|
||||||
|
FROM deps AS frontend-builder
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# Stage 3: Build backend TypeScript
|
||||||
|
FROM deps AS backend-builder
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN npm run build:backend
|
||||||
|
|
||||||
|
# Stage 4: Production dependencies
|
||||||
|
FROM node:18-alpine AS production-deps
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY package*.json ./
|
||||||
|
|
||||||
|
RUN npm ci --only=production --ignore-scripts --force && \
|
||||||
|
npm cache clean --force
|
||||||
|
|
||||||
|
# Stage 5: Build native modules
|
||||||
|
FROM node:18-alpine AS native-builder
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
RUN apk add --no-cache python3 make g++
|
||||||
|
|
||||||
|
COPY package*.json ./
|
||||||
|
|
||||||
|
RUN npm ci --only=production bcryptjs better-sqlite3 --force && \
|
||||||
|
npm cache clean --force
|
||||||
|
|
||||||
|
# Stage 6: Final image
|
||||||
|
FROM node:18-alpine
|
||||||
|
ENV DATA_DIR=/app/data \
|
||||||
|
PORT=8080 \
|
||||||
|
NODE_ENV=production
|
||||||
|
|
||||||
|
RUN apk add --no-cache nginx gettext su-exec && \
|
||||||
|
mkdir -p /app/data && \
|
||||||
|
chown -R node:node /app/data
|
||||||
|
|
||||||
|
COPY docker/nginx.conf /etc/nginx/nginx.conf
|
||||||
|
COPY --from=frontend-builder /app/dist /usr/share/nginx/html
|
||||||
|
RUN chown -R nginx:nginx /usr/share/nginx/html
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY --from=production-deps /app/node_modules /app/node_modules
|
||||||
|
COPY --from=native-builder /app/node_modules/bcryptjs /app/node_modules/bcryptjs
|
||||||
|
COPY --from=native-builder /app/node_modules/better-sqlite3 /app/node_modules/better-sqlite3
|
||||||
|
COPY --from=backend-builder /app/dist/backend ./dist/backend
|
||||||
|
|
||||||
|
COPY package.json ./
|
||||||
|
RUN chown -R node:node /app
|
||||||
|
|
||||||
|
VOLUME ["/app/data"]
|
||||||
|
|
||||||
|
EXPOSE ${PORT} 8081 8082 8083 8084
|
||||||
|
|
||||||
|
COPY docker/entrypoint.sh /entrypoint.sh
|
||||||
|
RUN chmod +x /entrypoint.sh
|
||||||
|
CMD ["/entrypoint.sh"]
|
||||||
15
docker/docker-compose.yml
Normal file
15
docker/docker-compose.yml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
services:
|
||||||
|
termix:
|
||||||
|
image: ghcr.io/lukegus/termix:latest
|
||||||
|
container_name: termix
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
volumes:
|
||||||
|
- termix-data:/app/data
|
||||||
|
environment:
|
||||||
|
PORT: "8080"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
termix-data:
|
||||||
|
driver: local
|
||||||
29
docker/entrypoint.sh
Normal file
29
docker/entrypoint.sh
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
export PORT=${PORT:-8080}
|
||||||
|
echo "Configuring web UI to run on port: $PORT"
|
||||||
|
|
||||||
|
envsubst '${PORT}' < /etc/nginx/nginx.conf > /etc/nginx/nginx.conf.tmp
|
||||||
|
mv /etc/nginx/nginx.conf.tmp /etc/nginx/nginx.conf
|
||||||
|
|
||||||
|
mkdir -p /app/data
|
||||||
|
chown -R node:node /app/data
|
||||||
|
chmod 755 /app/data
|
||||||
|
|
||||||
|
echo "Starting nginx..."
|
||||||
|
nginx
|
||||||
|
|
||||||
|
echo "Starting backend services..."
|
||||||
|
cd /app
|
||||||
|
export NODE_ENV=production
|
||||||
|
|
||||||
|
if command -v su-exec > /dev/null 2>&1; then
|
||||||
|
su-exec node node dist/backend/starter.js
|
||||||
|
else
|
||||||
|
su -s /bin/sh node -c "node dist/backend/starter.js"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "All services started"
|
||||||
|
|
||||||
|
tail -f /dev/null
|
||||||
84
docker/nginx.conf
Normal file
84
docker/nginx.conf
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
include mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
keepalive_timeout 65;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen ${PORT};
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html index.htm;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /users/ {
|
||||||
|
proxy_pass http://127.0.0.1:8081;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /ssh/db/ {
|
||||||
|
proxy_pass http://127.0.0.1:8081;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /ssh/websocket/ {
|
||||||
|
proxy_pass http://127.0.0.1:8082/;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "Upgrade";
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /ssh/tunnel/ {
|
||||||
|
proxy_pass http://127.0.0.1:8083;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /ssh/config_editor/ {
|
||||||
|
proxy_pass http://127.0.0.1:8084;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ ^/ssh/config_editor/(recent|pinned|shortcuts) {
|
||||||
|
proxy_pass http://127.0.0.1:8081;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
location = /50x.html {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
23
eslint.config.js
Normal file
23
eslint.config.js
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import js from '@eslint/js'
|
||||||
|
import globals from 'globals'
|
||||||
|
import reactHooks from 'eslint-plugin-react-hooks'
|
||||||
|
import reactRefresh from 'eslint-plugin-react-refresh'
|
||||||
|
import tseslint from 'typescript-eslint'
|
||||||
|
import { globalIgnores } from 'eslint/config'
|
||||||
|
|
||||||
|
export default tseslint.config([
|
||||||
|
globalIgnores(['dist']),
|
||||||
|
{
|
||||||
|
files: ['**/*.{ts,tsx}'],
|
||||||
|
extends: [
|
||||||
|
js.configs.recommended,
|
||||||
|
tseslint.configs.recommended,
|
||||||
|
reactHooks.configs['recommended-latest'],
|
||||||
|
reactRefresh.configs.vite,
|
||||||
|
],
|
||||||
|
languageOptions: {
|
||||||
|
ecmaVersion: 2020,
|
||||||
|
globals: globals.browser,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
])
|
||||||
10
how --name-only 9d11bbb
Normal file
10
how --name-only 9d11bbb
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
[33m25148c3[m[33m ([m[1;36mHEAD[m[33m -> [m[1;32mdev-1.1[m[33m)[m Update fonts
|
||||||
|
[33m9d11bbb[m Hide ssh password, add rss like feed to homepage, support utf8 encoding and nerdfonts/ohmyzsh
|
||||||
|
[33m7dd28f8[m[33m ([m[1;31morigin/dev-1.1[m[33m)[m Move .env
|
||||||
|
[33m7b7b070[m Start on update indicators
|
||||||
|
[33m8247369[m Finalized OIDC for beta testing
|
||||||
|
[33maf53ef2[m Update hard coded frontend url
|
||||||
|
[33m0ee1746[m Update hard coded frontend url
|
||||||
|
[33m840a048[m Update auth for ocid
|
||||||
|
[33m3abdf1d[m Update auth for ocid
|
||||||
|
[33m11a8791[m Update auth for ocid
|
||||||
13
index.html
Normal file
13
index.html
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/favicon.ico" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Termix</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="root"></div>
|
||||||
|
<script type="module" src="/src/main.tsx"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
8437
package-lock.json
generated
Normal file
8437
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
98
package.json
Normal file
98
package.json
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
{
|
||||||
|
"name": "termix",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.0.0",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite",
|
||||||
|
"build": "vite build",
|
||||||
|
"build:backend": "tsc -p tsconfig.node.json",
|
||||||
|
"dev:backend": "tsc -p tsconfig.node.json && node ./dist/backend/starter.js",
|
||||||
|
"lint": "eslint .",
|
||||||
|
"preview": "vite preview"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@hookform/resolvers": "^5.1.1",
|
||||||
|
"@radix-ui/react-accordion": "^1.2.11",
|
||||||
|
"@radix-ui/react-avatar": "^1.1.10",
|
||||||
|
"@radix-ui/react-checkbox": "^1.3.2",
|
||||||
|
"@radix-ui/react-collapsible": "^1.1.11",
|
||||||
|
"@radix-ui/react-dialog": "^1.1.14",
|
||||||
|
"@radix-ui/react-dropdown-menu": "^2.1.15",
|
||||||
|
"@radix-ui/react-label": "^2.1.7",
|
||||||
|
"@radix-ui/react-popover": "^1.1.14",
|
||||||
|
"@radix-ui/react-scroll-area": "^1.2.9",
|
||||||
|
"@radix-ui/react-select": "^2.2.5",
|
||||||
|
"@radix-ui/react-separator": "^1.1.7",
|
||||||
|
"@radix-ui/react-slider": "^1.3.5",
|
||||||
|
"@radix-ui/react-slot": "^1.2.3",
|
||||||
|
"@radix-ui/react-switch": "^1.2.5",
|
||||||
|
"@radix-ui/react-tabs": "^1.1.12",
|
||||||
|
"@radix-ui/react-tooltip": "^1.2.7",
|
||||||
|
"@tailwindcss/vite": "^4.1.11",
|
||||||
|
"@types/bcryptjs": "^2.4.6",
|
||||||
|
"@types/multer": "^2.0.0",
|
||||||
|
"@uiw/codemirror-extensions-hyper-link": "^4.24.1",
|
||||||
|
"@uiw/codemirror-extensions-langs": "^4.24.1",
|
||||||
|
"@uiw/codemirror-themes": "^4.24.1",
|
||||||
|
"@uiw/react-codemirror": "^4.24.1",
|
||||||
|
"@xterm/addon-attach": "^0.11.0",
|
||||||
|
"@xterm/addon-clipboard": "^0.1.0",
|
||||||
|
"@xterm/addon-fit": "^0.10.0",
|
||||||
|
"@xterm/addon-search": "^0.15.0",
|
||||||
|
"@xterm/addon-unicode11": "^0.8.0",
|
||||||
|
"@xterm/addon-web-links": "^0.11.0",
|
||||||
|
"@xterm/xterm": "^5.5.0",
|
||||||
|
"axios": "^1.10.0",
|
||||||
|
"bcryptjs": "^3.0.2",
|
||||||
|
"better-sqlite3": "^12.2.0",
|
||||||
|
"chalk": "^4.1.2",
|
||||||
|
"class-variance-authority": "^0.7.1",
|
||||||
|
"clsx": "^2.1.1",
|
||||||
|
"cookie-parser": "^1.4.7",
|
||||||
|
"cors": "^2.8.5",
|
||||||
|
"dotenv": "^17.2.0",
|
||||||
|
"drizzle-orm": "^0.44.3",
|
||||||
|
"express": "^5.1.0",
|
||||||
|
"jose": "^5.2.3",
|
||||||
|
"jsonwebtoken": "^9.0.2",
|
||||||
|
"lucide-react": "^0.525.0",
|
||||||
|
"multer": "^2.0.2",
|
||||||
|
"nanoid": "^5.1.5",
|
||||||
|
"node-fetch": "^3.3.2",
|
||||||
|
"react": "^19.1.0",
|
||||||
|
"react-dom": "^19.1.0",
|
||||||
|
"react-hook-form": "^7.60.0",
|
||||||
|
"react-resizable-panels": "^3.0.3",
|
||||||
|
"react-xtermjs": "^1.0.10",
|
||||||
|
"ssh2": "^1.16.0",
|
||||||
|
"tailwind-merge": "^3.3.1",
|
||||||
|
"tailwindcss": "^4.1.11",
|
||||||
|
"validator": "^13.15.15",
|
||||||
|
"ws": "^8.18.3",
|
||||||
|
"zod": "^4.0.5"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@eslint/js": "^9.30.1",
|
||||||
|
"@types/better-sqlite3": "^7.6.13",
|
||||||
|
"@types/cors": "^2.8.19",
|
||||||
|
"@types/express": "^5.0.3",
|
||||||
|
"@types/jsonwebtoken": "^9.0.10",
|
||||||
|
"@types/node": "^24.0.13",
|
||||||
|
"@types/react": "^19.1.8",
|
||||||
|
"@types/react-dom": "^19.1.6",
|
||||||
|
"@types/ssh2": "^1.15.5",
|
||||||
|
"@types/ws": "^8.18.1",
|
||||||
|
"@vitejs/plugin-react-swc": "^3.10.2",
|
||||||
|
"autoprefixer": "^10.4.21",
|
||||||
|
"eslint": "^9.30.1",
|
||||||
|
"eslint-plugin-react-hooks": "^5.2.0",
|
||||||
|
"eslint-plugin-react-refresh": "^0.4.20",
|
||||||
|
"globals": "^16.3.0",
|
||||||
|
"ts-node": "^10.9.2",
|
||||||
|
"tw-animate-css": "^1.3.5",
|
||||||
|
"typescript": "~5.8.3",
|
||||||
|
"typescript-eslint": "^8.35.1",
|
||||||
|
"vite": "^7.0.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
public/favicon.ico
Normal file
BIN
public/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 221 KiB |
BIN
public/fonts/JetBrainsMonoNLNerdFont-Bold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-Bold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-BoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-BoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-ExtraBold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-ExtraBold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-ExtraBoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-ExtraBoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-ExtraLight.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-ExtraLight.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-ExtraLightItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-ExtraLightItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-Italic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-Italic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-Light.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-Light.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-LightItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-LightItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-Medium.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-Medium.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-MediumItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-MediumItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-Regular.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-Regular.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-SemiBold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-SemiBold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-SemiBoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-SemiBoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-Thin.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-Thin.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFont-ThinItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFont-ThinItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-Bold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-Bold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-BoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-BoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-ExtraBold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-ExtraBold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-ExtraBoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-ExtraBoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-ExtraLight.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-ExtraLight.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-ExtraLightItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-ExtraLightItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-Italic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-Italic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-Light.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-Light.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-LightItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-LightItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-Medium.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-Medium.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-MediumItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-MediumItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-Regular.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-Regular.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-SemiBold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-SemiBold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-SemiBoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-SemiBoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-Thin.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-Thin.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-ThinItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontMono-ThinItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-Bold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-Bold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-BoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-BoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-ExtraBold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-ExtraBold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-ExtraBoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-ExtraBoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-ExtraLight.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-ExtraLight.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-ExtraLightItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-ExtraLightItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-Italic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-Italic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-Light.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-Light.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-LightItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-LightItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-Medium.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-Medium.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-MediumItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-MediumItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-Regular.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-Regular.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-SemiBold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-SemiBold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-SemiBoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-SemiBoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-Thin.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-Thin.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-ThinItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNLNerdFontPropo-ThinItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-Bold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-Bold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-BoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-BoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-ExtraBold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-ExtraBold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-ExtraBoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-ExtraBoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-ExtraLight.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-ExtraLight.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-ExtraLightItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-ExtraLightItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-Italic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-Italic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-Light.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-Light.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-LightItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-LightItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-Medium.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-Medium.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-MediumItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-MediumItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-Regular.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-Regular.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-SemiBold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-SemiBold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-SemiBoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-SemiBoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-Thin.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-Thin.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFont-ThinItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFont-ThinItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-Bold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-Bold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-BoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-BoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-ExtraBold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-ExtraBold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-ExtraBoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-ExtraBoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-ExtraLight.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-ExtraLight.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-ExtraLightItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-ExtraLightItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-Italic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-Italic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-Light.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-Light.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-LightItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-LightItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-Medium.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-Medium.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-MediumItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-MediumItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-Regular.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-Regular.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-SemiBold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-SemiBold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-SemiBoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-SemiBoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-Thin.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-Thin.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontMono-ThinItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontMono-ThinItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontPropo-Bold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontPropo-Bold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontPropo-BoldItalic.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontPropo-BoldItalic.ttf
Normal file
Binary file not shown.
BIN
public/fonts/JetBrainsMonoNerdFontPropo-ExtraBold.ttf
Normal file
BIN
public/fonts/JetBrainsMonoNerdFontPropo-ExtraBold.ttf
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user