commit 493c6846808f43c448d279c01dde3d7e0313aea3 Author: cuqmbr Date: Mon Nov 25 16:31:37 2024 +0200 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a48cf0d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +public diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..a6851ba --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "themes/terminal"] + path = themes/terminal + url = https://github.com/panr/hugo-theme-terminal.git diff --git a/.hugo_build.lock b/.hugo_build.lock new file mode 100644 index 0000000..e69de29 diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..25b6752 --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,5 @@ ++++ +date = '{{ .Date }}' +draft = true +title = '{{ replace .File.ContentBaseName "-" " " | title }}' ++++ diff --git a/assets/css/terminal.css b/assets/css/terminal.css new file mode 100644 index 0000000..cf93f69 --- /dev/null +++ b/assets/css/terminal.css @@ -0,0 +1,368 @@ +:root { + --background: #1d2021; + --foreground: #c2b394; + --accent: #ac413b; + --font-size: 1rem; + --line-height: 1.54rem; + --radius: 0px; +} + +html { + box-sizing: border-box; +} + +*, +*:before, +*:after { + box-sizing: inherit; + margin: 0; + padding: 0; +} + +body { + margin: 0; + padding: 0; + font-family: "Fira Code", Monaco, Consolas, "Ubuntu Mono", monospace; + font-size: 1rem; + font-weight: 400; + line-height: var(--line-height); + letter-spacing: -0.02em; + background-color: var(--background); + color: var(--foreground); + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -webkit-overflow-scrolling: touch; + -webkit-text-size-adjust: 100%; +} + +::placeholder { + color: color-mix(in srgb var(--foreground) 50%, black); +} + +h1, +h2 { + font-size: calc(var(--font-size) * 1.1); + text-transform: uppercase; + letter-spacing: 0.04em; +} + +h1 { + text-decoration: underline; + text-decoration-thickness: 2px; + text-underline-offset: calc(var(--font-size) * 0.2); +} + +h3, +h4, +h5, +h6 { + font-size: calc(var(--font-size) * 1.1); + letter-spacing: 0.04em; +} + +h1, +h2, +h3, +h4, +h5, +h6, +p, +ul, +ol, +img, +figure, +video, +table { + margin: calc(var(--line-height) * 1.2) 0; +} + +a { + color: var(--accent); +} + +button { + position: relative; + font: inherit; + font-weight: bold; + text-decoration: none; + text-align: center; + background: transparent; + color: var(--accent); + padding: 5px 18px; + border: 4px solid var(--accent); + border-radius: var(--radius); + transition: background 0.15s linear; + appearance: none; + cursor: pointer; + outline: none; +} + +button:hover { + background: color-mix(in srgb, var(--accent) 15%, transparent); +} + +button:focus-visible, +a:focus-visible { + outline: 1px solid var(--accent); + outline-offset: 2px; +} + +fieldset { + display: inline-block; + border: 2px solid var(--foreground); + border-radius: calc(var(--radius) * 1.6); + padding: 10px; +} + +fieldset *:first-child { + margin-top: 0; +} + +fieldset input, +fieldset select, +fieldset textarea, +fieldset label, +fieldset button { + margin-top: calc(var(--line-height) * 0.5); + width: 100%; +} + +label { + display: inline-block; +} + +label input { + margin-top: 0; +} + +input, +textarea, +select { + background: transparent; + color: var(--foreground); + border: 1px solid var(--foreground); + border-radius: var(--radius); + padding: 10px; + font: inherit; + appearance: none; +} + +input[type="checkbox"] { + width: auto; +} + +input:focus-visible, +input:active, +textarea:focus-visible, +textarea:active, +select:focus-visible, +select:active { + border-color: var(--accent); + outline: 1px solid var(--accent); + outline-offset: 2px; +} + +input:active, +textarea:active, +select:active { + box-shadow: none; +} + +select { + background-image: linear-gradient( + 45deg, + transparent 50%, + var(--foreground) 50% + ), + linear-gradient(135deg, var(--foreground) 50%, transparent 50%); + background-position: calc(100% - 20px), calc(100% - 1em); + background-size: + 5px 5px, + 5px 5px; + background-repeat: no-repeat; + padding-right: 40px; +} + +select option { + background: var(--background); +} + +input[type="checkbox"] { + vertical-align: middle; + padding: 10px; + box-shadow: inset 0 0 0 3px var(--background); +} + +input[type="checkbox"]:checked { + background: var(--accent); +} + +img { + display: block; + max-width: 100%; + border: 8px solid var(--accent); + border-radius: var(--radius); + padding: 8px; + overflow: hidden; +} + +figure img, +figure video { + margin-bottom: 0; +} + +figure figcaption { + background: var(--accent); + color: var(--background); + text-align: center; + font-size: 1rem; + font-weight: normal; + margin-top: -8px; + border-radius: 0 0 var(--radius) var(--radius); +} + +ul, +ol { + margin-left: 4ch; + padding: 0; +} + +ul ul, +ul ol, +ol ul, +ol ol { + margin-top: 0; +} + +li::marker { + color: var(--accent); +} + +ul li, +ol li { + position: relative; +} + +code, +kbd { + font-family: + "Fira Code", + Monaco, + Consolas, + Ubuntu Mono, + monospace !important; + font-feature-settings: normal; + background: color-mix(in srgb, var(--foreground) 5%, transparent); + color: var(--accent); + padding: 1px 6px; + margin: 0 2px; + font-size: 0.95rem; +} + +kbd { + border-top: 1px solid color-mix(in srgb, var(--accent) 25%, transparent); + border-left: 1px solid var(--accent); + border-right: 1px solid var(--accent); + border-bottom: 4px solid var(--accent); + border-radius: 4px; +} + +code code { + background: transparent; + padding: 0; + margin: 0; +} + +pre { + tab-size: 4; + background: color-mix(in srgb, var(--foreground) 5%, transparent) !important; + color: var(--foreground); + padding: 20px 10px; + font-size: 0.95rem !important; + overflow: auto; + border-radius: var(--radius); + border: 1px solid color-mix(in srgb, var(--foreground) 10%, transparent); +} + +pre code { + background: none !important; + margin: 0; + padding: 0; + font-size: inherit; + border: none; +} + +sup { + line-height: 0; +} + +abbr { + position: relative; + text-decoration-style: wavy; + text-decoration-color: var(--accent); + cursor: help; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.25em; +} + +mark { + background: color-mix(in srgb, var(--accent) 45%, transparent); + color: var(--foreground); +} + +blockquote { + position: relative; + border-top: 1px solid var(--accent); + border-bottom: 1px solid var(--accent); + margin: 0; + padding: 25px; +} + +blockquote:before { + content: ">"; + display: block; + position: absolute; + left: 0; + color: var(--accent); +} + +blockquote p:first-child { + margin-top: 0; +} + +blockquote p:last-child { + margin-bottom: 0; +} + +table { + table-layout: auto; + border-collapse: collapse; +} + +table, +th, +td { + border: 2px solid var(--foreground); + padding: 10px; +} + +th { + border-style: solid; + color: var(--foreground); + text-align: left; + text-transform: uppercase; + letter-spacing: 0.04em; +} + +hr { + width: 100%; + border: none; + background: var(--accent); + height: 2px; +} diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..5e8ac25 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,16 @@ ++++ +title = 'Home' ++++ + +# Dan Nazarko aka cuqmbr + +Linux sysadmin and a privacy enthusiast + + +# Welcome to My Webpage + +Hi! I am a 21-years-old Software Engineering student and this is my little website to host my interests in. + +I am currently interested in Linux system administration, DevOps engineering and privacy-respecting tech. + +Check out my [services](/services). There are not a lot of them, but I have a desire to host more. Some of them you can find useful, such as: [SearxNG](https://searxng.cuqmbr.xyz). diff --git a/content/contact.md b/content/contact.md new file mode 100644 index 0000000..121dcf6 --- /dev/null +++ b/content/contact.md @@ -0,0 +1,19 @@ ++++ +title = 'Contacts and Links' ++++ + +# Contacts + +- Email: [me@cuqmbr.xyz](mailto:me@cuqmbr.xyz) + - PGP key: [me@cuqmbr.xyz.gpg.pub](/me@cuqmbr.xyz.gpg.pub) + - Fingerprint: `FF8B 1DD4 EA6F F627 144A 454C E6B2 2F45 1C32 7A98` + - All legitimate emails from me will be signed with my PGP key +- Telegram: [@cuqmbr](https://telegram.me/cuqmbr) + + + +# Links + +- Git: https://gitea.cuqmbr.xyz/cuqmbr +- Mastodon: [@cuqmbr@mastodon.social](https://mastodon.social/@cuqmbr) + diff --git a/content/posts/hello-webpage/index.md b/content/posts/hello-webpage/index.md new file mode 100644 index 0000000..ec60e97 --- /dev/null +++ b/content/posts/hello-webpage/index.md @@ -0,0 +1,19 @@ ++++ +title = "Hello Webpage" +date = "2024-11-25T15:44:26+02:00" +author = "cuqmbr" +tags = ["update", "cuqmbr.xyz"] +showFullContent = false ++++ + +For the past year my webpage looked, to put it midly, ugly. It is shown on the image below. + +{{< image src="old-webpage.webp" alt="A list of services and contacts with default font and white background. No stylyng applied, html only." >}} + +As you noticed, now it changed. I decided to use [Hugo](https://gohugo.io) static site generator to build it for it's simplicity over content management systems like WordPress or Drupal. [Terminal](https://github.com/panr/terminal-css/) theme helped me to get up and running quickly. + +Planned content of the website: + +- Updates related to hosted services +- Occasional thoughts on some topics +- Maybe guides and tutorials diff --git a/content/posts/hello-webpage/old-webpage.png b/content/posts/hello-webpage/old-webpage.png new file mode 100644 index 0000000..757e5ba Binary files /dev/null and b/content/posts/hello-webpage/old-webpage.png differ diff --git a/content/posts/hello-webpage/old-webpage.webp b/content/posts/hello-webpage/old-webpage.webp new file mode 100644 index 0000000..0f64e11 Binary files /dev/null and b/content/posts/hello-webpage/old-webpage.webp differ diff --git a/content/services.md b/content/services.md new file mode 100644 index 0000000..ed45233 --- /dev/null +++ b/content/services.md @@ -0,0 +1,9 @@ ++++ +title = 'Services' ++++ + +- [Gitea](https://gitea.cuqmbr.xyz) - painless, self-hosted, all-in-one software development service. It includes Git hosting, code review, team collaboration, package registry, and CI/CD. It is similar to GitHub, Bitbucket and GitLab. + +- [SearxNG](https://searxng.cuqmbr.xyz) - SearXNG is a free internet metasearch engine which aggregates results from various search services and databases. Users are neither tracked nor profiled. + +- [Uptime Kuma](https://status.cuqmbr.xyz) - an easy-to-use self-hosted monitoring tool. diff --git a/hugo.toml b/hugo.toml new file mode 100644 index 0000000..dd689dc --- /dev/null +++ b/hugo.toml @@ -0,0 +1,97 @@ +baseURL = 'https://cuqmbr.xyz/' +languageCode = 'en-us' +theme = 'terminal' +# copyright = 'cuqmbr ©' + + +[params] + # dir name of your main content (default is `content/posts`). + # the list of set content will show up on your index page (baseurl). + contentTypeName = "posts" + + # if you set this to 0, only submenu trigger will be visible + showMenuItems = 5 + + # show selector to switch language + showLanguageSelector = false + + # set theme to full screen width + fullWidthTheme = false + + # center theme with default width + centerTheme = true + + # if your resource directory contains an image called `cover.(jpg|png|webp)`, + # then the file will be used as a cover automatically. + # With this option you don't have to put the `cover` param in a front-matter. + autoCover = true + + # set post to show the last updated + # If you use git, you can set `enableGitInfo` to `true` and then post will automatically get the last updated + showLastUpdated = false + + dateFormat = "02-01-2006" + + # Provide a string as a prefix for the last update date. By default, it looks like this: 2020-xx-xx [Updated: 2020-xx-xx] :: Author + # updatedDatePrefix = "Updated" + + # whether to show a page's estimated reading time + readingTime = true # default: false + + # whether to show a table of contents + # can be overridden in a page's front-matter + # Toc = true # default: false + + # set title for the table of contents + # can be overridden in a page's front-matter + # TocTitle = "Table of Contents" # default + + +[params.twitter] + # set Twitter handles for Twitter cards + # see https://developer.twitter.com/en/docs/tweets/optimize-with-cards/guides/getting-started#card-and-content-attribution + # do not include @ + creator = "" + site = "" + +[languages] + [languages.en] + languageName = "🇬🇧 EN" + title = "cuqmbr's Webpage" + + [languages.en.params] + subtitle = "" + owner = "" + keywords = "" + copyright = "" + menuMore = "Show more" + readMore = "Read more" + readOtherPosts = "Read other posts" + newerPosts = "Newer posts" + olderPosts = "Older posts" + missingContentMessage = "Page not found" + missingBackButtonLabel = "Back to home page" + minuteReadingTime = "min read" + words = "words" + + [languages.en.params.logo] + logoText = "cuqmbr's Webpage" + logoHomeLink = "/" + + [languages.en.menu] + # [[languages.en.menu.main]] + # identifier = "about" + # name = "About" + # url = "/about" + [[languages.en.menu.main]] + identifier = "services" + name = "Services" + url = "/services" + [[languages.en.menu.main]] + identifier = "posts" + name = "Blog Posts" + url = "/posts" + [[languages.en.menu.main]] + identifier = "contact" + name = "Contact" + url = "/contact" diff --git a/static/favicon.png b/static/favicon.png new file mode 100644 index 0000000..8164186 Binary files /dev/null and b/static/favicon.png differ diff --git a/static/me@cuqmbr.xyz.gpg.pub b/static/me@cuqmbr.xyz.gpg.pub new file mode 100644 index 0000000..d07d491 --- /dev/null +++ b/static/me@cuqmbr.xyz.gpg.pub @@ -0,0 +1,112 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBGW1ACUBEADABO4s444LSDzGK7z25d4bQOyaHYYlpEYx2XoiFFTeEacta+gy +LusNimoY9riGeZPpSzdvnhHgdDz9Ojb9wTx1AU1iq9N8tdFoDrm9Nh4L1W6fOnF3 +K54t0auku2XdrqcfS7C98HQOap7R44WBOyr5EtRetVVL3NCR4HF/8xUDEgPpCszn +Ysf9+PhzJWPcBHFnX50pQgqKrJYm0xw6C6UlCEmftnjwvRJv5zJAdgEtopTn0odi +5wN1xM1ZINQC2onhz0KIaK6ZbnMKHODvdhm/OTLuU9O5BtOeX4nE9iMnOJSfj217 +TP9nmepZhkTF10WwIK/KPjZnOcnOb84Bxvb+hnxXeZpvUpY6rYzoMArLXMPIAYTn +PoJCWrMqM0cGZjw4NtRTahZCSGIx0nXi+9z886GCMHjE002Y1y3bDkVQb8BxyIcM +x4wsf720J1GE28ZgB6ycDIHqDS3Y3b85GovQPB1vd7nW5AH1Qy+iM9RueHMkFJEt +FABfqXd8vfA0u9Z4LtrVGn5pgQReU+ZyG4NbqnACEGVsOq+E2A9jEXorLeqzeLt8 +wrqgOqawtJ6bD6NGlRGvez3DTHM26GC9A/8RX0gC6OzhTl+V09s7BAZFIvLsvPoc ++rTrmlkd1m+VeefTAOcfEwE886bCA7D1inuBYFAxWPgWfsPF+zKUlvcKSwARAQAB +tBZjdXFtYnIgPG1lQGN1cW1ici54eXo+iQJaBBMBCABEAhsBBQkFo5qABQsJCAcC +AiICBhUKCQgLAgQWAgMBAh4HAheAFiEE/4sd1Opv9icUSkVM5rIvRRwyepgFAmW9 +QMcCGQEACgkQ5rIvRRwyepgNJA/9ELl81LBc6mpKJUUlhHN4hC4rztz3HUoI48ok +U+lYfwNGxTHLuu39Ns+G+4V2AcXsFcycHgnkxuSjgd3z4BcBRzBnHzkOzN1kut4K +mIFHZq5TCILDSV/QJ8TFsGD3ziQaATS/QlneI7bBF94lbL1+uVB8uqyITkXHh4kB +CCQVTK+i0c22DqGvRNlqDbb5CHg++/iDpv1IqtPyfgI9Fpo6raOO7lrRHnuDWmK8 +zt1TCWKk38DqpCDWp8r6MKcwHHab8ftKlds/ZdPgmOgh3cHs6JKo4DbjBVp+Ju0t +5ZiXWotszSnHemxox1Kf53JbCDNSj1c5u+CmukdpgW3WSvZ+OR299++r6wwOOY1i +ayjsUKTH39RsBgWocPvsnTC6tUH67zdZqlANChfSXNUCFEXs/gtG/9O6qlV0/LLJ +fl7YvTKj/qyGsqCiNUxEC6pUsEjChFu9JwS2mv7nNMbO8kEz38EvqB/kw7p69jCY +u5mMZ2RipQ3W8eI/dFP9EhmTsp5cmw49cRO7nk+ab5LEeDbrXz+M5fu548/jiRuH +C5ocelHLR2Tx83GQCflJ8Skank17z9fVDL+eyZ/XyBvXuofJazHxsogfJjdknaYW +w1rpc5ClvZMQAqKqVNWfioNt498SmhQ2Kbj4GzmIexfUczDkXzHsjSQcJlFcGbkX +LrfC4J60NtCU0LDQvdC40LvQviDQndCw0LfQsNGA0YzQutC+IDxkYW55bG8ubmF6 +YXJrb0BudXJlLnVhPokCVwQTAQgAQRYhBP+LHdTqb/YnFEpFTOayL0UcMnqYBQJl +tQDuAhsBBQkFo5qABQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEOayL0Uc +MnqY718QAKbLEdauQEHhreTV5MqsAHes1wfePaClB0RnMqSwzU/zHPT9p0Pp0ZVo +xXIsnqs/zSLW5KwKnSlKk8Km538Vbg156NKbRhh2wjP9QZPwSZLLnHSAuwCa13h0 +CzktrbT9j3crymbmt1DPtS1KNPfqysCxIDLrt8wymg08Utqz+B/EIyXK7RB66M3M ++hQM7k0dfMBLthNEvlwAQotaEDhMmVa50i7UUIT3b3I1M2mYB2DOvyDKp+Nhbgyg +NnDnoTZsKqkWxYcDjXhStRepTKiGWsvzJ+voyMMaBZf7toDoDxbqPJPhXU99t2VL +59lksbrIImbY4q0KYVvMG1pltPqMbDKloefQPPwtFeOgI5qrNnBms45bUKzX1QmL +s+tVNYIQ8C5mupQ0ispcWKRTu1b34aEwW2i0uCdz9wY/PZrLu+he3P5UVqMMwyrh +pshrVm4IEQS/hAZdRCcSYRxRLE/fc1+FQK0XG1B4J73vMnXAfLeVFcI+vaPsOVh8 +AfmLUT6Ze876Jzld1hAYmDgoIyn1GX/gUWFbuRlVQXLWn6nb8PB7SJamTcY8VHL1 +yumshsmPiTQs2xW4bTbM+AiE0a8O5jJCw2lAKochWlkyzpxyXO4lLGUWw/M9zrot +66jjDk/kSvNGGUCzS6HfB8Aj4/4TV1tq5IgGqF5nrkpaHGqMuYk/uQGNBGW1AFAB +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 +=Qd7H +-----END PGP PUBLIC KEY BLOCK----- diff --git a/static/og-image.png b/static/og-image.png new file mode 100644 index 0000000..fbb0563 Binary files /dev/null and b/static/og-image.png differ diff --git a/themes/terminal b/themes/terminal new file mode 160000 index 0000000..b09f47a --- /dev/null +++ b/themes/terminal @@ -0,0 +1 @@ +Subproject commit b09f47aae7bc7f2fdeab523d15d2a8d217c4dad1