From 306c4d4c24e7f3cdca22c4694cc50d5ee08fc78c Mon Sep 17 00:00:00 2001 From: brooke Date: Tue, 23 Jul 2024 18:45:45 -0400 Subject: [PATCH] init hugo --- .gitea/workflows/deploy.yaml | 35 +- .gitignore | 146 ++++++ .gitmodules | 3 + Makefile | 5 + README.md | 6 + archetypes/default.md | 5 + config.toml | 4 + package-lock.json | 55 +++ package.json | 6 + public/index.html | 248 ---------- public/script.js | 103 ---- public/simplex.js | 461 ------------------ public/style.css | 288 ----------- static | 1 + tailwind.config.js | 4 + themes/icbm/LICENSE | 21 + themes/icbm/README.md | 7 + themes/icbm/archetypes/default.md | 5 + themes/icbm/assets/css/main.css | 22 + themes/icbm/assets/js/main.js | 1 + themes/icbm/content/_index.md | 9 + themes/icbm/content/posts/_index.md | 7 + themes/icbm/content/posts/post-1.md | 10 + themes/icbm/content/posts/post-2.md | 10 + .../content/posts/post-3/bryce-canyon.jpg | Bin 0 -> 19224 bytes themes/icbm/content/posts/post-3/index.md | 12 + themes/icbm/hugo.toml | 23 + themes/icbm/layouts/_default/baseof.html | 17 + themes/icbm/layouts/_default/home.html | 7 + themes/icbm/layouts/_default/list.html | 8 + themes/icbm/layouts/_default/single.html | 10 + themes/icbm/layouts/partials/footer.html | 1 + themes/icbm/layouts/partials/head.html | 5 + themes/icbm/layouts/partials/head/css.html | 9 + themes/icbm/layouts/partials/head/js.html | 12 + themes/icbm/layouts/partials/header.html | 2 + themes/icbm/layouts/partials/menu.html | 51 ++ themes/icbm/layouts/partials/terms.html | 23 + themes/icbm/src/input.css | 37 ++ themes/icbm/static/css/tailwind.min.css | 1 + themes/icbm/theme.toml | 31 ++ 41 files changed, 593 insertions(+), 1118 deletions(-) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 archetypes/default.md create mode 100644 config.toml create mode 100644 package-lock.json create mode 100644 package.json delete mode 100755 public/index.html delete mode 100755 public/script.js delete mode 100644 public/simplex.js delete mode 100755 public/style.css create mode 160000 static create mode 100644 tailwind.config.js create mode 100644 themes/icbm/LICENSE create mode 100644 themes/icbm/README.md create mode 100644 themes/icbm/archetypes/default.md create mode 100644 themes/icbm/assets/css/main.css create mode 100644 themes/icbm/assets/js/main.js create mode 100644 themes/icbm/content/_index.md create mode 100644 themes/icbm/content/posts/_index.md create mode 100644 themes/icbm/content/posts/post-1.md create mode 100644 themes/icbm/content/posts/post-2.md create mode 100644 themes/icbm/content/posts/post-3/bryce-canyon.jpg create mode 100644 themes/icbm/content/posts/post-3/index.md create mode 100644 themes/icbm/hugo.toml create mode 100644 themes/icbm/layouts/_default/baseof.html create mode 100644 themes/icbm/layouts/_default/home.html create mode 100644 themes/icbm/layouts/_default/list.html create mode 100644 themes/icbm/layouts/_default/single.html create mode 100644 themes/icbm/layouts/partials/footer.html create mode 100644 themes/icbm/layouts/partials/head.html create mode 100644 themes/icbm/layouts/partials/head/css.html create mode 100644 themes/icbm/layouts/partials/head/js.html create mode 100644 themes/icbm/layouts/partials/header.html create mode 100644 themes/icbm/layouts/partials/menu.html create mode 100644 themes/icbm/layouts/partials/terms.html create mode 100644 themes/icbm/src/input.css create mode 100644 themes/icbm/static/css/tailwind.min.css create mode 100644 themes/icbm/theme.toml diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index 1acd0bc..c6873e9 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -1,26 +1,25 @@ -name: Static +name: Hugo -on: [push] +on: + push: + branches: + - main jobs: build: - - runs-on: ubuntu-22.04 - + runs-on: hugo-latest steps: - - uses: actions/checkout@v3 - with: - submodules: 'recursive' - - name: Grab packages - run: | - apt-get update && \ - apt-get install --no-install-recommends --no-install-suggests -y jq rsync - - name: Test static page - run: bash ${{ gitea.workspace }}/bin/test_static_page.sh - - name: Deploy to Server - uses: easingthemes/ssh-deploy@main - env: - SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + - uses: actions/checkout@v4 + with: + submodules: 'true' + - name: Run build task + run: hugo --minify + - name: pre-compress + run: find ./public/* -type f \( -name '*.html' -o -name '*.js' -o -name '*.css' \) -exec gzip -v -k -f --best {} \; + - name: Deploy to Server + uses: https://git.myco.systems/mirrors/ssh-deploy@main + env: + SSH_PRIVATE_KEY: ${{ secrets.RUNNER_SSH_PRIVATE_KEY }} ARGS: "-rlgoDzvc -i --delete" SOURCE: "public/" REMOTE_HOST: ${{ secrets.REMOTE_HOST }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e63219c --- /dev/null +++ b/.gitignore @@ -0,0 +1,146 @@ +# ---> Hugo +# Generated files by hugo +/resources/_gen/ +/assets/jsconfig.json +hugo_stats.json + +# Executable may be added to repository +hugo.exe +hugo.darwin +hugo.linux + +# Temporary lock file while building +/.hugo_build.lock + +# ---> Node +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + diff --git a/.gitmodules b/.gitmodules index 728d3e6..b5d1c27 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "public/icons"] path = public/icons url = https://git.myco.systems/mycosystems/icons.git +[submodule "static"] + path = static + url = https://git.myco.systems/mycosystems/favicons.git diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4a2a74b --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +.PHONY: dev + +dev: + hugo server --disableFastRender & \ + tailwindcss -i ./themes/icbm/src/input.css -o ./themes/icbm/static/css/tailwind.min.css --watch --minify \ No newline at end of file diff --git a/README.md b/README.md index 0aba929..374a5da 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,9 @@ Update 2: Started from the ground up again, everything has been redone to encour Update 3: Starting from scratch again but this time using hugo and creating a tailwindcss3 theme file. I wanted something that could be easier to maintain so now I want to turn the current style into something we can edit/build using our CMS. +``` +git submodule update --init --recursive +``` +``` +npm i +``` \ No newline at end of file diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..c6f3fce --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,5 @@ ++++ +title = '{{ replace .File.ContentBaseName "-" " " | title }}' +date = {{ .Date }} +draft = true ++++ diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..9152ed0 --- /dev/null +++ b/config.toml @@ -0,0 +1,4 @@ +baseURL = 'https://example.org/' +languageCode = 'en-us' +title = 'My New Hugo Site' +theme = "icbm" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1c17434 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,55 @@ +{ + "name": "myco.systems", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "prettier": "^3.3.3", + "prettier-plugin-go-template": "^0.0.15" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-go-template": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/prettier-plugin-go-template/-/prettier-plugin-go-template-0.0.15.tgz", + "integrity": "sha512-WqU92E1NokWYNZ9mLE6ijoRg6LtIGdLMePt2C7UBDjXeDH9okcRI3zRqtnWR4s5AloiqyvZ66jNBAa9tmRY5EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ulid": "^2.3.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "prettier": "^3.0.0" + } + }, + "node_modules/ulid": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ulid/-/ulid-2.3.0.tgz", + "integrity": "sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==", + "dev": true, + "license": "MIT", + "bin": { + "ulid": "bin/cli.js" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..ba6a52e --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "devDependencies": { + "prettier": "^3.3.3", + "prettier-plugin-go-template": "^0.0.15" + } +} diff --git a/public/index.html b/public/index.html deleted file mode 100755 index 37bccb6..0000000 --- a/public/index.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - The Mycelial Network - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
- - - - - Uptime -
-
-

Hi! It's good to see you \( ‘ o ‘ )/

- - - -
- -
-

Welcome to the MycoSystems homepage, we're a tech collective that's - trying to make open source hosted services more viable in a broad - variety of cases.

We build deployments for companies, - non-profits, and individuals to expand the reach of open source - services.

If you're interested in getting our help or just - want to chat, send us a message through our contact email on the next - tab.



-

ദ്ദി ˉ͈̀꒳ˉ͈́ )✧

-
- -
-

Send us a cool message and we'll get back to you d-(´▽`)-b

-
    -

    contact(at)myco(dot)systems

    -----BEGIN PGP PUBLIC KEY BLOCK-----
    mDMEZcQaFBYJKwYBBAHaRw8BAQdAKjok4wl0tBlYyTj6qw4nu6AqTdU+OGorGE5d8N7bLXW0Ik15Y29TeXN0ZW1zIDxjb250YWN0QG15Y28uc3lzdGVtcz6IkwQTFgoAOxYhBCw75FUiGzj0ZvOJhZ1ZZp3r0s3IBQJlxBoUAhsDBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEJ1ZZp3r0s3I38QA/3yK6QODeRsfoGimd1OX3BA/Y1OxKTl2GS7OiyTcRotyAQC905hPTwaAYFbru1W1S8p+zDrWjGJ7jXMevOZlsF9GD7g4BGXEGhQSCisGAQQBl1UBBQEBB0B2d2SSG7eCIrTKA9xO45414eS3THHwX63dkaqbexwHJwMBCAeIeAQYFgoAIBYhBCw75FUiGzj0ZvOJhZ1ZZp3r0s3IBQJlxBoUAhsMAAoJEJ1ZZp3r0s3INzMA/AoCN+h/eG+7ByTsZUAGY6gKsSfQgy86PjijfrusC/3TAQDMNrMjzq2sIZhUZSaK8Q5pzgSFPloqk4QG1FRi4x0zAA===Pg50
    -----END - PGP PUBLIC KEY BLOCK-----
    -
-
- -
-

Check out some of our free services and projects (⌐⊙_⊙)

-
- - -
-
-
- - - - - diff --git a/public/script.js b/public/script.js deleted file mode 100755 index d37c205..0000000 --- a/public/script.js +++ /dev/null @@ -1,103 +0,0 @@ -(function () { - "use strict"; - - const enc = (x) => - ((x & 0x08) << 3) | ((x & 0x70) >> 1) | (x & 0x87) | 0x2800; - const row = (x) => String.fromCharCode(...Array.from(x, enc)); - - const create = (width, height) => - Array.from(Array(height >> 2), () => new Uint8Array(width >> 1)); - - const set = (table, x, y) => - (table[y >> 2][x >> 1] |= 1 << ((y & 3) | ((x & 1) << 2))); - - const render = (table) => table.map(row).join("\n"); - - const frame = () => new Promise((resolve) => requestAnimationFrame(resolve)); - - const element = (name, options) => - Object.assign(document.createElement(name), options); - - const bayer = (order, x, y) => { - let z = 0; - for (let i = order; i--; x >>= 1, y >>= 1) - z = ((((x & 1) ^ (y & 1)) | (z << 1)) << 1) | (y & 1); - return z; - }; - - const lut = (order) => { - const size = 1 << order, - area = size * size; - const lut = new Float32Array(area); - for (let y = 0; y < size; y++) - for (let x = 0; x < size; x++) - lut[x + y * size] = (bayer(order, x, y) + 0.5) / area; - return (x, y) => lut[(x % size) + (y % size) * size]; - }; - - const simplex = new SimplexNoise(); - const bayer4 = lut(4); - - const fbm = (freq, amp, x, y, z) => - simplex.noise3D(x * (freq *= 2), y * freq, z * freq) * (amp /= 2) + - simplex.noise3D(x * (freq *= 2), y * freq, z * freq) * (amp /= 2) + - simplex.noise3D(x * (freq *= 2), y * freq, z * freq) * (amp /= 2) + - simplex.noise3D(x * (freq *= 2), y * freq, z * freq) * (amp /= 2) + - simplex.noise3D(x * (freq *= 2), y * freq, z * freq) * (amp /= 2) + - simplex.noise3D(x * (freq *= 2), y * freq, z * freq) * (amp /= 2) + - simplex.noise3D(x * (freq *= 2), y * freq, z * freq) * (amp /= 2) + - simplex.noise3D(x * (freq *= 2), y * freq, z * freq) * (amp /= 2); - - const texture = (u, v, w) => (2 * (0.5 + 0.5 * fbm(0.5, 1, u, v, w))) % 1; - - const globe = (x, y, u, v, w) => { - const d = u * u + v * v; - if (d > 1) return false; - - const f = 1 / ((1 - d ** 0.5) ** 0.5 + 1); - const t = texture(1e-1 * w + f * u, f * v, 1e-2 * w); - return t > bayer4(x, y); - }; - - const main = async () => { - const fillerSize = 100; - const filler = - "\u28ff".repeat(fillerSize) + "\n\u28ff".repeat(fillerSize - 1); - - const root = element("div", { className: "braille" }); - const hidden = element("div", { className: "hidden", textContent: filler }); - const visible = element("div", { className: "visible" }); - - root.appendChild(hidden); - root.appendChild(visible); - document.body.appendChild(root); - - for (; ; await frame()) { - const hr = hidden.getBoundingClientRect(); - const fontWidth = hr.width / fillerSize; - const fontHeight = hr.height / fillerSize; - - const rr = root.getBoundingClientRect(); - const ratio = rr.width / rr.height; - const width = (rr.width / fontWidth) << 2; - const height = (rr.height / fontHeight) << 3; - - const pixels = create(width, height); - const time = 1e-3 * Date.now(); - - for (let y = 0; y < height; y++) { - const v = (2 * y) / height - 1; - for (let x = 0; x < width; x++) { - const u = ratio * ((2 * x) / width - 3.3); - const shiftedU = u + 1.2; - if (globe(x, y, shiftedU, v, time)) set(pixels, x, y); - - } - } - - visible.textContent = render(pixels); - } - }; - - main(); -})(); \ No newline at end of file diff --git a/public/simplex.js b/public/simplex.js deleted file mode 100644 index cf7a671..0000000 --- a/public/simplex.js +++ /dev/null @@ -1,461 +0,0 @@ -(function () { - "use strict"; - - var F2 = 0.5 * (Math.sqrt(3.0) - 1.0); - var G2 = (3.0 - Math.sqrt(3.0)) / 6.0; - var F3 = 1.0 / 3.0; - var G3 = 1.0 / 6.0; - var F4 = (Math.sqrt(5.0) - 1.0) / 4.0; - var G4 = (5.0 - Math.sqrt(5.0)) / 20.0; - - function SimplexNoise(randomOrSeed) { - var random; - if (typeof randomOrSeed == "function") { - random = randomOrSeed; - } else if (randomOrSeed) { - random = alea(randomOrSeed); - } else { - random = Math.random; - } - this.p = buildPermutationTable(random); - this.perm = new Uint8Array(512); - this.permMod12 = new Uint8Array(512); - for (var i = 0; i < 512; i++) { - this.perm[i] = this.p[i & 255]; - this.permMod12[i] = this.perm[i] % 12; - } - } - SimplexNoise.prototype = { - grad3: new Float32Array([ - 1, 1, 0, -1, 1, 0, 1, -1, 0, - - -1, -1, 0, 1, 0, 1, -1, 0, 1, - - 1, 0, -1, -1, 0, -1, 0, 1, 1, - - 0, -1, 1, 0, 1, -1, 0, -1, -1, - ]), - grad4: new Float32Array([ - 0, 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, 0, -1, 1, 1, 0, -1, 1, - -1, 0, -1, -1, 1, 0, -1, -1, -1, 1, 0, 1, 1, 1, 0, 1, -1, 1, 0, -1, 1, 1, - 0, -1, -1, -1, 0, 1, 1, -1, 0, 1, -1, -1, 0, -1, 1, -1, 0, -1, -1, 1, 1, - 0, 1, 1, 1, 0, -1, 1, -1, 0, 1, 1, -1, 0, -1, -1, 1, 0, 1, -1, 1, 0, -1, - -1, -1, 0, 1, -1, -1, 0, -1, 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, - -1, 0, -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, 0, - ]), - noise2D: function (xin, yin) { - var permMod12 = this.permMod12; - var perm = this.perm; - var grad3 = this.grad3; - var n0 = 0; - var n1 = 0; - var n2 = 0; - - var s = (xin + yin) * F2; - var i = Math.floor(xin + s); - var j = Math.floor(yin + s); - var t = (i + j) * G2; - var X0 = i - t; - var Y0 = j - t; - var x0 = xin - X0; - var y0 = yin - Y0; - - var i1, j1; - if (x0 > y0) { - i1 = 1; - j1 = 0; - } else { - i1 = 0; - j1 = 1; - } - - var x1 = x0 - i1 + G2; - var y1 = y0 - j1 + G2; - var x2 = x0 - 1.0 + 2.0 * G2; - var y2 = y0 - 1.0 + 2.0 * G2; - - var ii = i & 255; - var jj = j & 255; - - var t0 = 0.5 - x0 * x0 - y0 * y0; - if (t0 >= 0) { - var gi0 = permMod12[ii + perm[jj]] * 3; - t0 *= t0; - n0 = t0 * t0 * (grad3[gi0] * x0 + grad3[gi0 + 1] * y0); - } - var t1 = 0.5 - x1 * x1 - y1 * y1; - if (t1 >= 0) { - var gi1 = permMod12[ii + i1 + perm[jj + j1]] * 3; - t1 *= t1; - n1 = t1 * t1 * (grad3[gi1] * x1 + grad3[gi1 + 1] * y1); - } - var t2 = 0.5 - x2 * x2 - y2 * y2; - if (t2 >= 0) { - var gi2 = permMod12[ii + 1 + perm[jj + 1]] * 3; - t2 *= t2; - n2 = t2 * t2 * (grad3[gi2] * x2 + grad3[gi2 + 1] * y2); - } - - return 70.0 * (n0 + n1 + n2); - }, - - noise3D: function (xin, yin, zin) { - var permMod12 = this.permMod12; - var perm = this.perm; - var grad3 = this.grad3; - var n0, n1, n2, n3; - - var s = (xin + yin + zin) * F3; - var i = Math.floor(xin + s); - var j = Math.floor(yin + s); - var k = Math.floor(zin + s); - var t = (i + j + k) * G3; - var X0 = i - t; - var Y0 = j - t; - var Z0 = k - t; - var x0 = xin - X0; - var y0 = yin - Y0; - var z0 = zin - Z0; - - var i1, j1, k1; - var i2, j2, k2; - if (x0 >= y0) { - if (y0 >= z0) { - i1 = 1; - j1 = 0; - k1 = 0; - i2 = 1; - j2 = 1; - k2 = 0; - } else if (x0 >= z0) { - i1 = 1; - j1 = 0; - k1 = 0; - i2 = 1; - j2 = 0; - k2 = 1; - } else { - i1 = 0; - j1 = 0; - k1 = 1; - i2 = 1; - j2 = 0; - k2 = 1; - } - } else { - if (y0 < z0) { - i1 = 0; - j1 = 0; - k1 = 1; - i2 = 0; - j2 = 1; - k2 = 1; - } else if (x0 < z0) { - i1 = 0; - j1 = 1; - k1 = 0; - i2 = 0; - j2 = 1; - k2 = 1; - } else { - i1 = 0; - j1 = 1; - k1 = 0; - i2 = 1; - j2 = 1; - k2 = 0; - } - } - - var x1 = x0 - i1 + G3; - var y1 = y0 - j1 + G3; - var z1 = z0 - k1 + G3; - var x2 = x0 - i2 + 2.0 * G3; - var y2 = y0 - j2 + 2.0 * G3; - var z2 = z0 - k2 + 2.0 * G3; - var x3 = x0 - 1.0 + 3.0 * G3; - var y3 = y0 - 1.0 + 3.0 * G3; - var z3 = z0 - 1.0 + 3.0 * G3; - - var ii = i & 255; - var jj = j & 255; - var kk = k & 255; - - var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0; - if (t0 < 0) n0 = 0.0; - else { - var gi0 = permMod12[ii + perm[jj + perm[kk]]] * 3; - t0 *= t0; - n0 = - t0 * - t0 * - (grad3[gi0] * x0 + grad3[gi0 + 1] * y0 + grad3[gi0 + 2] * z0); - } - var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1; - if (t1 < 0) n1 = 0.0; - else { - var gi1 = permMod12[ii + i1 + perm[jj + j1 + perm[kk + k1]]] * 3; - t1 *= t1; - n1 = - t1 * - t1 * - (grad3[gi1] * x1 + grad3[gi1 + 1] * y1 + grad3[gi1 + 2] * z1); - } - var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2; - if (t2 < 0) n2 = 0.0; - else { - var gi2 = permMod12[ii + i2 + perm[jj + j2 + perm[kk + k2]]] * 3; - t2 *= t2; - n2 = - t2 * - t2 * - (grad3[gi2] * x2 + grad3[gi2 + 1] * y2 + grad3[gi2 + 2] * z2); - } - var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3; - if (t3 < 0) n3 = 0.0; - else { - var gi3 = permMod12[ii + 1 + perm[jj + 1 + perm[kk + 1]]] * 3; - t3 *= t3; - n3 = - t3 * - t3 * - (grad3[gi3] * x3 + grad3[gi3 + 1] * y3 + grad3[gi3 + 2] * z3); - } - - return 32.0 * (n0 + n1 + n2 + n3); - }, - - noise4D: function (x, y, z, w) { - var perm = this.perm; - var grad4 = this.grad4; - - var n0, n1, n2, n3, n4; - - var s = (x + y + z + w) * F4; - var i = Math.floor(x + s); - var j = Math.floor(y + s); - var k = Math.floor(z + s); - var l = Math.floor(w + s); - var t = (i + j + k + l) * G4; - var X0 = i - t; - var Y0 = j - t; - var Z0 = k - t; - var W0 = l - t; - var x0 = x - X0; - var y0 = y - Y0; - var z0 = z - Z0; - var w0 = w - W0; - - var rankx = 0; - var ranky = 0; - var rankz = 0; - var rankw = 0; - if (x0 > y0) rankx++; - else ranky++; - if (x0 > z0) rankx++; - else rankz++; - if (x0 > w0) rankx++; - else rankw++; - if (y0 > z0) ranky++; - else rankz++; - if (y0 > w0) ranky++; - else rankw++; - if (z0 > w0) rankz++; - else rankw++; - var i1, j1, k1, l1; - var i2, j2, k2, l2; - var i3, j3, k3, l3; - - i1 = rankx >= 3 ? 1 : 0; - j1 = ranky >= 3 ? 1 : 0; - k1 = rankz >= 3 ? 1 : 0; - l1 = rankw >= 3 ? 1 : 0; - - i2 = rankx >= 2 ? 1 : 0; - j2 = ranky >= 2 ? 1 : 0; - k2 = rankz >= 2 ? 1 : 0; - l2 = rankw >= 2 ? 1 : 0; - - i3 = rankx >= 1 ? 1 : 0; - j3 = ranky >= 1 ? 1 : 0; - k3 = rankz >= 1 ? 1 : 0; - l3 = rankw >= 1 ? 1 : 0; - - var x1 = x0 - i1 + G4; - var y1 = y0 - j1 + G4; - var z1 = z0 - k1 + G4; - var w1 = w0 - l1 + G4; - var x2 = x0 - i2 + 2.0 * G4; - var y2 = y0 - j2 + 2.0 * G4; - var z2 = z0 - k2 + 2.0 * G4; - var w2 = w0 - l2 + 2.0 * G4; - var x3 = x0 - i3 + 3.0 * G4; - var y3 = y0 - j3 + 3.0 * G4; - var z3 = z0 - k3 + 3.0 * G4; - var w3 = w0 - l3 + 3.0 * G4; - var x4 = x0 - 1.0 + 4.0 * G4; - var y4 = y0 - 1.0 + 4.0 * G4; - var z4 = z0 - 1.0 + 4.0 * G4; - var w4 = w0 - 1.0 + 4.0 * G4; - - var ii = i & 255; - var jj = j & 255; - var kk = k & 255; - var ll = l & 255; - - var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0; - if (t0 < 0) n0 = 0.0; - else { - var gi0 = (perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32) * 4; - t0 *= t0; - n0 = - t0 * - t0 * - (grad4[gi0] * x0 + - grad4[gi0 + 1] * y0 + - grad4[gi0 + 2] * z0 + - grad4[gi0 + 3] * w0); - } - var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1; - if (t1 < 0) n1 = 0.0; - else { - var gi1 = - (perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32) * - 4; - t1 *= t1; - n1 = - t1 * - t1 * - (grad4[gi1] * x1 + - grad4[gi1 + 1] * y1 + - grad4[gi1 + 2] * z1 + - grad4[gi1 + 3] * w1); - } - var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2; - if (t2 < 0) n2 = 0.0; - else { - var gi2 = - (perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32) * - 4; - t2 *= t2; - n2 = - t2 * - t2 * - (grad4[gi2] * x2 + - grad4[gi2 + 1] * y2 + - grad4[gi2 + 2] * z2 + - grad4[gi2 + 3] * w2); - } - var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3; - if (t3 < 0) n3 = 0.0; - else { - var gi3 = - (perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32) * - 4; - t3 *= t3; - n3 = - t3 * - t3 * - (grad4[gi3] * x3 + - grad4[gi3 + 1] * y3 + - grad4[gi3 + 2] * z3 + - grad4[gi3 + 3] * w3); - } - var t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4; - if (t4 < 0) n4 = 0.0; - else { - var gi4 = - (perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32) * 4; - t4 *= t4; - n4 = - t4 * - t4 * - (grad4[gi4] * x4 + - grad4[gi4 + 1] * y4 + - grad4[gi4 + 2] * z4 + - grad4[gi4 + 3] * w4); - } - - return 27.0 * (n0 + n1 + n2 + n3 + n4); - }, - }; - - function buildPermutationTable(random) { - var i; - var p = new Uint8Array(256); - for (i = 0; i < 256; i++) { - p[i] = i; - } - for (i = 0; i < 255; i++) { - var r = i + ~~(random() * (256 - i)); - var aux = p[i]; - p[i] = p[r]; - p[r] = aux; - } - return p; - } - SimplexNoise._buildPermutationTable = buildPermutationTable; - - function alea() { - var s0 = 0; - var s1 = 0; - var s2 = 0; - var c = 1; - - var mash = masher(); - s0 = mash(" "); - s1 = mash(" "); - s2 = mash(" "); - - for (var i = 0; i < arguments.length; i++) { - s0 -= mash(arguments[i]); - if (s0 < 0) { - s0 += 1; - } - s1 -= mash(arguments[i]); - if (s1 < 0) { - s1 += 1; - } - s2 -= mash(arguments[i]); - if (s2 < 0) { - s2 += 1; - } - } - mash = null; - return function () { - var t = 2091639 * s0 + c * 2.3283064365386963e-10; - s0 = s1; - s1 = s2; - return (s2 = t - (c = t | 0)); - }; - } - function masher() { - var n = 0xefc8249d; - return function (data) { - data = data.toString(); - for (var i = 0; i < data.length; i++) { - n += data.charCodeAt(i); - var h = 0.02519603282416938 * n; - n = h >>> 0; - h -= n; - h *= n; - n = h >>> 0; - h -= n; - n += h * 0x100000000; - } - return (n >>> 0) * 2.3283064365386963e-10; - }; - } - - if (typeof define !== "undefined" && define.amd) - define(function () { - return SimplexNoise; - }); - - if (typeof exports !== "undefined") exports.SimplexNoise = SimplexNoise; - else if (typeof window !== "undefined") window.SimplexNoise = SimplexNoise; - - if (typeof module !== "undefined") { - module.exports = SimplexNoise; - } -})(); diff --git a/public/style.css b/public/style.css deleted file mode 100755 index 22729dd..0000000 --- a/public/style.css +++ /dev/null @@ -1,288 +0,0 @@ -:root { - --size: calc(100vmin / 1.618033988749895); -} - -html, -body { - width: 100%; - height: 100vh; - overflow: hidden; -} - -body { - margin: 0; - background: #241917; - color: #f3bbae; - font-family: Monaco, monospace !important; -} - -body, -.braille { - display: flex; - align-items: center; - justify-content: center; - flex-flow: row; -} - -.braille { - max-width: 100%; - max-height: 100%; - width: var(--size); - height: var(--size); - font: 12px/12px "Iosevka Web", monospace; -} - -.braille > * { - white-space: pre; -} - -.braille .hidden { - position: fixed; - bottom: 100%; - right: 100%; -} - -.globe-txt { - display: flex; - position: fixed; - right: 0; -} - -@media only screen and (max-width: 625px) { - .globe-txt { - position: fixed; - right: 50%; - top: 50%; - transform: translate(50%, -50%); - } -} - -.center-text { - position: fixed; - gap: 25px; - display: flex; - flex-direction: column; - border: 4px solid #f3bbae92; - text-align: left; - z-index: 10; - background-color: #241917; - max-width: 35rem; - top: 30%; - left: 15%; -} - -@media only screen and (max-width: 625px) { - .center-text { - left: 15px; - right: 15px; - margin-left: 0; - margin-top: 0; - max-width: 100vw; - } -} - -.tabs { - display: flex; - overflow-x: auto; - white-space: nowrap; - padding-bottom: 2px; -} - -::-webkit-scrollbar { - height: 3px; -} - -::-webkit-scrollbar-track { - background: #241917; -} - -::-webkit-scrollbar-thumb { - background: #f3bbae; -} - -.tab, -.tab-link { - cursor: pointer; - padding: 4px 15px; - border-width: 0 4px 4px 0; - border-style: solid; - border-color: #f3bbae92; - font-size: 12px; -} - -.tab-link { - color: #f3bbae; - text-decoration: none; - margin-right: 2.5rem; - min-width: 4.5rem; -} - -.tab-link svg { - fill: #f3bbae; - width: 12px; -} - -.tab-content { - word-wrap: break-word; - display: none; - padding: 20px 20px; - padding-top: 0px; -} - -.pgp-address { - word-wrap: break-word; - display: block; - font-size: 12px !important; - background-color: #241917; - color: #fff; - border: 4px solid #f3bbae92; - padding: 5px; -} - -#linksTab, -#contactTab, -#dashTab { - display: none; -} - -#tab-links:checked ~ #linksTab, -#tab-contact:checked ~ #contactTab, -#tab-about:checked ~ #aboutTab, -#tab-dash:checked ~ #dashTab { - display: block; -} - -.bullet-text { - font-size: 14px; - text-align: left; - z-index: 2; - position: relative; -} - -.tab-content p { - color: #f3bbae; - font-size: 14px; - margin: 0 !important; -} - -.tab-content a { - color: #f3bbae; - transition: color 0.1s ease; - font-size: 14px; -} - -.tab-content a[href]:hover { - color: #ffffff; -} - -.visible { - z-index: 0; - position: absolute; - right: 0; -} -ul { - list-style-type: none; -} - -ul li::before { - content: "-"; - display: inline-block; - width: 1em; -} - -.alt-bullet { - padding-left: 1rem !important; -} - -.modal[open] .modal__toggle { - left: calc(50vw + 200px); - top: calc(15vh - 5px); - position: fixed; - z-index: 11; -} -.modal[open] .modal__toggle:focus { - outline: 2px solid #00f; -} -.modal__toggle::before { - content: "Donate"; - cursor: pointer; - padding-left: 10px; - padding-right: 10px; - background-color: #241917; - color: #fff; - border: 4px solid #f3bbae92; -} -.modal[open] .modal__toggle::before { - content: "✖"; - color: #fff !important; - font-size: 25px; -} -.modal__toggle { - position: relative; - list-style: none; - font-size: 14px; - font-family: Monaco, monospace; - text-align: left; - z-index: 4; -} -.modal__toggle::-webkit-details-marker { - display: none; -} -.modal__toggle:hover { - cursor: pointer; - opacity: 0.8; -} -.modal__background { - background-color: rgba(0, 0, 0, 0.65); - display: flex; - height: 100vh; - justify-content: center; - left: 0; - position: fixed; - top: 0; - width: 100vw; - z-index: 3; -} -.modal__body { - border: 4px solid #f3bbae92; - background: rgba(36, 25, 23, 1); - color: #f3bbae; - font-size: 1.6rem; - font-weight: 600; - padding: 20px 20px; - position: fixed; - text-align: left; - top: 15vh; - left: 50%; - transform: translateX(-50%); - width: 80%; - max-width: 400px; - z-index: 10; - word-wrap: break-word; - font-family: Monaco, monospace; -} - -.modal__text { - line-height: 1.6; - margin: 0; - font-size: 12px; -} - -.crypto-address { - word-wrap: break-word; - display: block; - font-size: 12px !important; - background-color: #241917; - color: #fff; - border: 4px solid #f3bbae92; - padding: 5px; -} - -.links { - padding-left: 0.85rem; -} - -.dashboard { - display: flex; - flex-direction: row; -} diff --git a/static b/static new file mode 160000 index 0000000..ba702a7 --- /dev/null +++ b/static @@ -0,0 +1 @@ +Subproject commit ba702a7e28a69a6dc72ed5e7aeae54a85c1bb2f9 diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..c75fff2 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,4 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./themes/icbm/**/*.html"], +}; diff --git a/themes/icbm/LICENSE b/themes/icbm/LICENSE new file mode 100644 index 0000000..8aa2645 --- /dev/null +++ b/themes/icbm/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) [year] [fullname] + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/themes/icbm/README.md b/themes/icbm/README.md new file mode 100644 index 0000000..7cec74e --- /dev/null +++ b/themes/icbm/README.md @@ -0,0 +1,7 @@ +# Theme Name + +## Features + +## Installation + +## Configuration diff --git a/themes/icbm/archetypes/default.md b/themes/icbm/archetypes/default.md new file mode 100644 index 0000000..c6f3fce --- /dev/null +++ b/themes/icbm/archetypes/default.md @@ -0,0 +1,5 @@ ++++ +title = '{{ replace .File.ContentBaseName "-" " " | title }}' +date = {{ .Date }} +draft = true ++++ diff --git a/themes/icbm/assets/css/main.css b/themes/icbm/assets/css/main.css new file mode 100644 index 0000000..166ade9 --- /dev/null +++ b/themes/icbm/assets/css/main.css @@ -0,0 +1,22 @@ +body { + color: #222; + font-family: sans-serif; + line-height: 1.5; + margin: 1rem; + max-width: 768px; +} + +header { + border-bottom: 1px solid #222; + margin-bottom: 1rem; +} + +footer { + border-top: 1px solid #222; + margin-top: 1rem; +} + +a { + color: #00e; + text-decoration: none; +} diff --git a/themes/icbm/assets/js/main.js b/themes/icbm/assets/js/main.js new file mode 100644 index 0000000..e2aac52 --- /dev/null +++ b/themes/icbm/assets/js/main.js @@ -0,0 +1 @@ +console.log('This site was generated by Hugo.'); diff --git a/themes/icbm/content/_index.md b/themes/icbm/content/_index.md new file mode 100644 index 0000000..652623b --- /dev/null +++ b/themes/icbm/content/_index.md @@ -0,0 +1,9 @@ ++++ +title = 'Home' +date = 2023-01-01T08:00:00-07:00 +draft = false ++++ + +Laborum voluptate pariatur ex culpa magna nostrud est incididunt fugiat +pariatur do dolor ipsum enim. Consequat tempor do dolor eu. Non id id anim anim +excepteur excepteur pariatur nostrud qui irure ullamco. diff --git a/themes/icbm/content/posts/_index.md b/themes/icbm/content/posts/_index.md new file mode 100644 index 0000000..e7066c0 --- /dev/null +++ b/themes/icbm/content/posts/_index.md @@ -0,0 +1,7 @@ ++++ +title = 'Posts' +date = 2023-01-01T08:30:00-07:00 +draft = false ++++ + +Tempor est exercitation ad qui pariatur quis adipisicing aliquip nisi ea consequat ipsum occaecat. Nostrud consequat ullamco laboris fugiat esse esse adipisicing velit laborum ipsum incididunt ut enim. Dolor pariatur nulla quis fugiat dolore excepteur. Aliquip ad quis aliqua enim do consequat. diff --git a/themes/icbm/content/posts/post-1.md b/themes/icbm/content/posts/post-1.md new file mode 100644 index 0000000..3e3fc6b --- /dev/null +++ b/themes/icbm/content/posts/post-1.md @@ -0,0 +1,10 @@ ++++ +title = 'Post 1' +date = 2023-01-15T09:00:00-07:00 +draft = false +tags = ['red'] ++++ + +Tempor proident minim aliquip reprehenderit dolor et ad anim Lorem duis sint eiusmod. Labore ut ea duis dolor. Incididunt consectetur proident qui occaecat incididunt do nisi Lorem. Tempor do laborum elit laboris excepteur eiusmod do. Eiusmod nisi excepteur ut amet pariatur adipisicing Lorem. + +Occaecat nulla excepteur dolore excepteur duis eiusmod ullamco officia anim in voluptate ea occaecat officia. Cillum sint esse velit ea officia minim fugiat. Elit ea esse id aliquip pariatur cupidatat id duis minim incididunt ea ea. Anim ut duis sunt nisi. Culpa cillum sit voluptate voluptate eiusmod dolor. Enim nisi Lorem ipsum irure est excepteur voluptate eu in enim nisi. Nostrud ipsum Lorem anim sint labore consequat do. diff --git a/themes/icbm/content/posts/post-2.md b/themes/icbm/content/posts/post-2.md new file mode 100644 index 0000000..22b8287 --- /dev/null +++ b/themes/icbm/content/posts/post-2.md @@ -0,0 +1,10 @@ ++++ +title = 'Post 2' +date = 2023-02-15T10:00:00-07:00 +draft = false +tags = ['red','green'] ++++ + +Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia. + +Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud. diff --git a/themes/icbm/content/posts/post-3/bryce-canyon.jpg b/themes/icbm/content/posts/post-3/bryce-canyon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a923bea0d182c65213ad3a105fa05f61c881976 GIT binary patch literal 19224 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 + + + {{ partial "head.html" . }} + + +
+ {{ partial "header.html" . }} +
+
+ {{ block "main" . }}{{ end }} +
+
+ {{ partial "footer.html" . }} +
+ + diff --git a/themes/icbm/layouts/_default/home.html b/themes/icbm/layouts/_default/home.html new file mode 100644 index 0000000..0df6597 --- /dev/null +++ b/themes/icbm/layouts/_default/home.html @@ -0,0 +1,7 @@ +{{ define "main" }} + {{ .Content }} + {{ range site.RegularPages }} +

{{ .LinkTitle }}

+ {{ .Summary }} + {{ end }} +{{ end }} diff --git a/themes/icbm/layouts/_default/list.html b/themes/icbm/layouts/_default/list.html new file mode 100644 index 0000000..50fc92d --- /dev/null +++ b/themes/icbm/layouts/_default/list.html @@ -0,0 +1,8 @@ +{{ define "main" }} +

{{ .Title }}

+ {{ .Content }} + {{ range .Pages }} +

{{ .LinkTitle }}

+ {{ .Summary }} + {{ end }} +{{ end }} diff --git a/themes/icbm/layouts/_default/single.html b/themes/icbm/layouts/_default/single.html new file mode 100644 index 0000000..7e286c8 --- /dev/null +++ b/themes/icbm/layouts/_default/single.html @@ -0,0 +1,10 @@ +{{ define "main" }} +

{{ .Title }}

+ + {{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }} + {{ $dateHuman := .Date | time.Format ":date_long" }} + + + {{ .Content }} + {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }} +{{ end }} diff --git a/themes/icbm/layouts/partials/footer.html b/themes/icbm/layouts/partials/footer.html new file mode 100644 index 0000000..a7cd916 --- /dev/null +++ b/themes/icbm/layouts/partials/footer.html @@ -0,0 +1 @@ +

Copyright {{ now.Year }}. All rights reserved.

diff --git a/themes/icbm/layouts/partials/head.html b/themes/icbm/layouts/partials/head.html new file mode 100644 index 0000000..02c2240 --- /dev/null +++ b/themes/icbm/layouts/partials/head.html @@ -0,0 +1,5 @@ + + +{{ if .IsHome }}{{ site.Title }}{{ else }}{{ printf "%s | %s" .Title site.Title }}{{ end }} +{{ partialCached "head/css.html" . }} +{{ partialCached "head/js.html" . }} diff --git a/themes/icbm/layouts/partials/head/css.html b/themes/icbm/layouts/partials/head/css.html new file mode 100644 index 0000000..91b928d --- /dev/null +++ b/themes/icbm/layouts/partials/head/css.html @@ -0,0 +1,9 @@ +{{- with resources.Get "css/main.css" }} + {{- if eq hugo.Environment "development" }} + + {{- else }} + {{- with . | minify | fingerprint }} + + {{- end }} + {{- end }} +{{- end }} diff --git a/themes/icbm/layouts/partials/head/js.html b/themes/icbm/layouts/partials/head/js.html new file mode 100644 index 0000000..18fe842 --- /dev/null +++ b/themes/icbm/layouts/partials/head/js.html @@ -0,0 +1,12 @@ +{{- with resources.Get "js/main.js" }} + {{- if eq hugo.Environment "development" }} + {{- with . | js.Build }} + + {{- end }} + {{- else }} + {{- $opts := dict "minify" true }} + {{- with . | js.Build $opts | fingerprint }} + + {{- end }} + {{- end }} +{{- end }} diff --git a/themes/icbm/layouts/partials/header.html b/themes/icbm/layouts/partials/header.html new file mode 100644 index 0000000..7980a00 --- /dev/null +++ b/themes/icbm/layouts/partials/header.html @@ -0,0 +1,2 @@ +

{{ site.Title }}

+{{ partial "menu.html" (dict "menuID" "main" "page" .) }} diff --git a/themes/icbm/layouts/partials/menu.html b/themes/icbm/layouts/partials/menu.html new file mode 100644 index 0000000..7183180 --- /dev/null +++ b/themes/icbm/layouts/partials/menu.html @@ -0,0 +1,51 @@ +{{- /* +Renders a menu for the given menu ID. + +@context {page} page The current page. +@context {string} menuID The menu ID. + +@example: {{ partial "menu.html" (dict "menuID" "main" "page" .) }} +*/}} + +{{- $page := .page }} +{{- $menuID := .menuID }} + +{{- with index site.Menus $menuID }} + +{{- end }} + +{{- define "partials/inline/menu/walk.html" }} + {{- $page := .page }} + {{- range .menuEntries }} + {{- $attrs := dict "href" .URL }} + {{- if $page.IsMenuCurrent .Menu . }} + {{- $attrs = merge $attrs (dict "class" "active" "aria-current" "page") }} + {{- else if $page.HasMenuCurrent .Menu .}} + {{- $attrs = merge $attrs (dict "class" "ancestor" "aria-current" "true") }} + {{- end }} + {{- $name := .Name }} + {{- with .Identifier }} + {{- with T . }} + {{- $name = . }} + {{- end }} + {{- end }} +
  • + {{ $name }} + {{- with .Children }} +
      + {{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }} +
    + {{- end }} +
  • + {{- end }} +{{- end }} diff --git a/themes/icbm/layouts/partials/terms.html b/themes/icbm/layouts/partials/terms.html new file mode 100644 index 0000000..8a6ebec --- /dev/null +++ b/themes/icbm/layouts/partials/terms.html @@ -0,0 +1,23 @@ +{{- /* +For a given taxonomy, renders a list of terms assigned to the page. + +@context {page} page The current page. +@context {string} taxonomy The taxonomy. + +@example: {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }} +*/}} + +{{- $page := .page }} +{{- $taxonomy := .taxonomy }} + +{{- with $page.GetTerms $taxonomy }} + {{- $label := (index . 0).Parent.LinkTitle }} +
    +
    {{ $label }}:
    + +
    +{{- end }} diff --git a/themes/icbm/src/input.css b/themes/icbm/src/input.css new file mode 100644 index 0000000..9e4e7d4 --- /dev/null +++ b/themes/icbm/src/input.css @@ -0,0 +1,37 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer utilities { + .noselect { + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Old versions of Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; /* Non-prefixed version, currently + supported by Chrome, Edge, Opera and Firefox */ + } + #s::-webkit-scrollbar { + width: 10px; + } + #s::-webkit-scrollbar-track { + background-color: white; + } + #s::-webkit-scrollbar-thumb { + background-color: #606060; + border-radius: 20px; + } + #s::-webkit-scrollbar-thumb:hover { + background-color: #909090; + } + #sc::-webkit-scrollbar { + width: 10px; + } + #sc::-webkit-scrollbar-track { + background-color: white; + } + #sc::-webkit-scrollbar-thumb { + background-color: #666b7a; + } +} diff --git a/themes/icbm/static/css/tailwind.min.css b/themes/icbm/static/css/tailwind.min.css new file mode 100644 index 0000000..0165f20 --- /dev/null +++ b/themes/icbm/static/css/tailwind.min.css @@ -0,0 +1 @@ +/*! tailwindcss v3.4.4 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.block{display:block}#s::-webkit-scrollbar{width:10px}#s::-webkit-scrollbar-track{background-color:#fff}#s::-webkit-scrollbar-thumb{background-color:#606060;border-radius:20px}#s::-webkit-scrollbar-thumb:hover{background-color:#909090}#sc::-webkit-scrollbar{width:10px}#sc::-webkit-scrollbar-track{background-color:#fff}#sc::-webkit-scrollbar-thumb{background-color:#666b7a} \ No newline at end of file diff --git a/themes/icbm/theme.toml b/themes/icbm/theme.toml new file mode 100644 index 0000000..3ba3164 --- /dev/null +++ b/themes/icbm/theme.toml @@ -0,0 +1,31 @@ +name = 'Theme name' +license = 'MIT' +licenselink = 'https://github.com/owner/repo/LICENSE' +description = 'Theme description' + +# The home page of the theme, where the source can be found +homepage = 'https://github.com/owner/repo' + +# If you have a running demo of the theme +demosite = 'https://owner.github.io/repo' + +# Taxonomy terms +tags = ['blog', 'company'] +features = ['some', 'awesome', 'features'] + +# If the theme has multiple authors +authors = [ + {name = 'Name of author', homepage = 'Website of author'}, + {name = 'Name of author', homepage = 'Website of author'} +] + +# If the theme has a single author +[author] + name = 'Your name' + homepage = 'Your website' + +# If porting an existing theme +[original] + author = 'Name of original author' + homepage = 'Website of original author' + repo = 'https://github.com/owner/repo'