diff options
Diffstat (limited to 'users/tazjin/homepage')
-rw-r--r-- | users/tazjin/homepage/default.nix | 62 | ||||
-rw-r--r-- | users/tazjin/homepage/entries.nix | 111 | ||||
-rw-r--r-- | users/tazjin/homepage/feed.nix | 28 | ||||
-rw-r--r-- | users/tazjin/homepage/header.html | 18 | ||||
-rw-r--r-- | users/tazjin/homepage/static/tazjin.css | 57 |
5 files changed, 209 insertions, 67 deletions
diff --git a/users/tazjin/homepage/default.nix b/users/tazjin/homepage/default.nix index 2ce1cf632255..b46f9d4917f4 100644 --- a/users/tazjin/homepage/default.nix +++ b/users/tazjin/homepage/default.nix @@ -12,16 +12,21 @@ with nix.yants; let inherit (builtins) readFile replaceStrings sort; - inherit (pkgs) writeFile runCommandNoCC; + inherit (pkgs) writeFile runCommand; # The different types of entries on the homepage. - entryClass = enum "entryClass" [ "blog" "project" "misc" ]; + entryClass = enum "entryClass" [ + "blog" + "project" + "note" + "misc" + ]; # The definition of a single entry. entry = struct "entry" { class = entryClass; - title = string; - url = string; + title = option string; + url = option string; date = int; # epoch description = option string; }; @@ -33,28 +38,42 @@ let title = post.title; url = "/blog/${post.key}"; date = post.date; + description = post.description or "Blog post from ${formatDate post.date}"; }); - formatDate = defun [ int string ] (date: readFile (runCommandNoCC "date" {} '' - date --date='@${toString date}' '+%Y-%m-%d' > $out + formatDate = defun [ int string ] (date: readFile (runCommand "date" { } '' + date --date='@${toString date}' '+%Y-%m-%d' | tr -d '\n' > $out '')); - formatEntryDate = defun [ entry string ] (entry: entryClass.match entry.class { - blog = "Blog post from ${formatDate entry.date}"; - project = "Project from ${formatDate entry.date}"; - misc = "Posted on ${formatDate entry.date}"; - }); + entryUrl = defun [ entry string ] (entry: + if entry.class == "note" + then "#${toString entry.date}" + else entry.url + ); + + hasDescription = defun [ entry bool ] (entry: + ((entry ? description) && (entry.description != null)) + ); + + entryTitle = defun [ entry string ] (entry: + let + optionalColon = lib.optionalString (hasDescription entry) ":"; + titleText = + if (!(entry ? title) && (entry.class == "note")) + then "[${formatDate entry.date}]" + else lib.optionalString (entry ? title) ((escape entry.title) + optionalColon); + in + lib.optionalString (titleText != "") + ''<span class="entry-title ${entry.class}">${titleText}</span>'' + ); entryToDiv = defun [ entry string ] (entry: '' - <a href="${entry.url}" class="entry ${entry.class}"> - <div> - <p class="entry-title">${escape entry.title}</p> - ${ - lib.optionalString ((entry ? description) && (entry.description != null)) - "<p class=\"entry-description\">${escape entry.description}</p>" - } - <p class="entry-date">${formatEntryDate entry}</p> - </div> + <a href="${entryUrl entry}" id="${toString entry.date}" class="entry"> + ${entryTitle entry} + ${ + lib.optionalString (hasDescription entry) + "<span class=\"entry-description\">${escape entry.description}</span>" + } </a> ''); @@ -67,7 +86,8 @@ let pageEntries = import ./entries.nix; homepage = index ((map postToEntry users.tazjin.blog.posts) ++ pageEntries); atomFeed = import ./feed.nix (args // { inherit entry pageEntries; }); -in runCommandNoCC "website" {} '' +in +runCommand "website" { } '' mkdir $out cp ${homepage} $out/index.html cp ${atomFeed} $out/feed.atom diff --git a/users/tazjin/homepage/entries.nix b/users/tazjin/homepage/entries.nix index 1e2b0b03dfc9..0e98c073efba 100644 --- a/users/tazjin/homepage/entries.nix +++ b/users/tazjin/homepage/entries.nix @@ -1,12 +1,52 @@ +let + note = date: description: { + class = "note"; + inherit description date; + }; +in [ { + class = "project"; + title = "VolgaSprint - Nix hacking in Kazan"; + url = "https://volgasprint.org/"; + date = 1712307024; + description = '' + Hacking on Nix projects for a week in Kazan, Russia, in August + 2024. Come join us! + ''; + } + { + class = "misc"; + title = "@tazlog on Telegram"; + url = "https://t.me/tazlog"; + date = 1643321164; + description = '' + My Telegram channel with occasional random life updates and musings. + ''; + } + { + class = "project"; + title = "Ship It! #37"; + url = "https://changelog.com/shipit/37"; + date = 1641819600; + description = '' + Podcast episode about TVL, Nix, monorepos and all sorts of related things. + ''; + } + { + class = "project"; + title = "Tvix"; + url = "https://tvl.fyi/blog/rewriting-nix"; + date = 1638381387; + description = "TVL is rewriting Nix with funding from NLNet."; + } + { class = "misc"; title = "Interview with Joscha Bach"; url = "https://www.youtube.com/watch?v=P-2P3MSZrBM"; date = 1594594800; description = '' - A fascinating, mind-bending interview by Lex Fridman with Joscha - Bach about the Nature of the Universe. + Mind-bending discussion with philosopher Joscha Bach. ''; } { @@ -14,7 +54,7 @@ title = "The Virus Lounge"; url = "https://tvl.fyi"; date = 1587435629; - description = "A daily social video call in these trying pandemic times. Join us!"; + description = "A community around Nix, monorepos, build tooling and more!"; } { class = "project"; @@ -42,7 +82,7 @@ title = "dottime"; url = "https://dotti.me/"; date = 1560898800; - description = "A universal convention for conveying time (by edef <3)"; + description = "A universal convention for conveying time"; } { class = "project"; @@ -57,18 +97,63 @@ url = "https://principiadiscordia.com/book/1.php"; date = 1495494000; description = '' - The Principia is a short book I read as a child, and didn't - understand until much later. It shaped much of my world view. + A short book about everything that everyone should read. ''; } { class = "misc"; - title = "This Week in Virology"; - url = "http://www.microbe.tv/twiv/"; - date = 1585517557; - description = '' - Podcast with high-quality information about virology, - epidemiology and so on. Highly relevant to COVID19. - ''; + title = "Nix — не только пакетный менеджер"; + date = 1663923600; + url = "https://www.youtube.com/watch?v=0Lhahzs-Wos"; + description = "Двухчасовой (!) разговор с введением в Nix, NixOS и так далее"; + } + { + class = "project"; + title = "yandex-cloud-rs"; + date = 1650877200; + url = "https://docs.rs/yandex-cloud"; + description = "Простой SDK на Rust для работы с API Yandex Cloud."; + } + { + class = "project"; + title = "nix-1p"; + date = 1564650000; + url = "https://code.tvl.fyi/about/nix/nix-1p"; + description = "A (more or less) one-page introduction to the Nix language."; + } + { + class = "misc"; + title = "Ставим NixOS!"; + date = 1678784400; + url = "https://progmsk.timepad.ru/event/2358560/"; + description = "Встреча в undef.space для помощи в начале работы с Nix/NixOS"; + } + { + class = "misc"; + title = "Tvix - September '22"; + date = 1662973200; + url = "https://tvl.fyi/blog/tvix-status-september-22"; + description = "Tvix update blog post over on TVL"; + } + { + class = "project"; + title = "Tvixbolt"; + date = 1667293200; + url = "https://bolt.tvix.dev/"; + description = "In-browser language evaluator for Nix, based on Tvix"; + } + { + class = "project"; + title = "ООО ТВЛ"; + date = 1609491600; + url = "https://tvl.su/ru/"; + description = "Официальный сайт моей компании по IT-консалтингу."; } + + # Notes. + (note 1676106000 "If you have a Huawei device that sometimes struggles on public Wi-Fi networks, try enabling MAC-address randomisation. Huawei devices often get pushed onto management networks!") + (note 1686868637 "I moved some of my pages (including this one) to a machine in my flat in Moscow. If you end up having access trouble because your ISP blocks Russian resources, please let me know.") + (note 1686868636 "Protip: Use the Reddit blackout to click the 'Logout' button, and never come back.") + (note 1486550941 "↓ I no longer recommend people to use this. Generate your configuration from a language like Nix instead.") + (note 1576800001 "↓ No longer just my projects, it's all of TVL! Go check it out.") ] diff --git a/users/tazjin/homepage/feed.nix b/users/tazjin/homepage/feed.nix index 984b1c295017..8043d7ff308a 100644 --- a/users/tazjin/homepage/feed.nix +++ b/users/tazjin/homepage/feed.nix @@ -4,25 +4,11 @@ with depot.nix.yants; let - inherit (builtins) map readFile sort foldl'; + inherit (builtins) filter map readFile; inherit (lib) max singleton; inherit (pkgs) writeText; - inherit (depot.nix) renderMarkdown; inherit (depot.web) blog atom-feed; - postToEntry = defun [ blog.post atom-feed.entry ] (post: rec { - id = "https://tazj.in/blog/${post.key}"; - title = post.title; - content = readFile (renderMarkdown post.content); - published = post.date; - updated = post.updated or post.date; - - links = singleton { - rel = "alternate"; - href = id; - }; - }); - pageEntryToEntry = defun [ entry atom-feed.entry ] (e: { id = "tazjin:${e.class}:${toString e.date}"; updated = e.date; @@ -36,16 +22,13 @@ let }; }); - allEntries = (map postToEntry depot.users.tazjin.blog.posts) - ++ (map pageEntryToEntry pageEntries); - - mostRecentlyUpdated = foldl' max 0 (map (e: e.updated) allEntries); + allEntries = (with depot.users.tazjin.blog; map (blog.toFeedEntry config) posts) + ++ (map pageEntryToEntry (filter (e: e.class != "note") pageEntries)); feed = { id = "https://tazj.in/"; title = "tazjin's interblag"; subtitle = "my posts, projects and other interesting things"; - updated = mostRecentlyUpdated; rights = "© 2020 tazjin"; authors = [ "tazjin" ]; @@ -54,6 +37,7 @@ let href = "https://tazjin/feed.atom"; }; - entries = sort (a: b: a.published > b.published) allEntries; + entries = allEntries; }; -in writeText "feed.atom" (atom-feed.renderFeed feed) +in +writeText "feed.atom" (atom-feed.renderFeed feed) diff --git a/users/tazjin/homepage/header.html b/users/tazjin/homepage/header.html index 2a5aed4fed57..320b5ded8c74 100644 --- a/users/tazjin/homepage/header.html +++ b/users/tazjin/homepage/header.html @@ -3,6 +3,7 @@ <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="tazjin's blog"> <link rel="stylesheet" type="text/css" href="static/tvl.css" media="all"> + <link rel="stylesheet" type="text/css" href="static/tazjin.css" media="all"> <link rel="icon" type="image/webp" href="/static/favicon.webp"> <link rel="alternate" type="application/atom+xml" href="/feed.atom"> <title>tazjin's interblag</title> @@ -15,19 +16,14 @@ <hr> </header> <div class="introduction"> - <p>Hello, illuminated visitor.</p> <p> - I'm tazjin. Usually you can find - me <a class="dark-link" href="https://git.tazj.in/about">programming computers</a> - using tools such as <a class="dark-link" href="https://nixos.org/nix">Nix</a> - and <a class="dark-link" href="https://www.gnu.org/software/emacs/">Emacs</a>. - </p> - <p> - Below is a collection of + Below are some of my <span class="project">projects</span>, <span class="blog">blog - posts</span> and some <span class="misc">random things</span> by - me or others. If you'd like to get in touch about anything, send - me a mail at mail@[this domain] or ping me on IRC. + posts</span>, <span class="note">notes</span> and some + other <span class="misc">random things</span>. If you'd like to + get in touch, email me at mail@[this domain] or ping me + on <a class="dark-link" href="https://tvl.fyi">TVL</a> IRC. </p> + <hr> </div> <div class="entry-container"> diff --git a/users/tazjin/homepage/static/tazjin.css b/users/tazjin/homepage/static/tazjin.css new file mode 100644 index 000000000000..f921b562ee6c --- /dev/null +++ b/users/tazjin/homepage/static/tazjin.css @@ -0,0 +1,57 @@ +/* Homepage styling */ + +.dark { + background-color: #181818; + color: #e4e4ef; +} + +.dark-link, .interblag-title { + color: #96a6c8; +} + + +.interblag-title { + text-decoration: none; +} + +.entry-container { + display: flex; + flex-direction: column; + flex-wrap: nowrap; + justify-content: flex-start; +} + +.entry { + margin-top: 5px; + margin-bottom: 5px; + padding-left: 5px; + text-decoration: none; +} + +.entry:nth-child(odd) { + background: #282828; +} + +.entry-description { + color: #e4e4ef; +} + +.misc { + color: #73c936; + border-color: #73c936; +} + +.blog { + color: #268bd2; + border-color: #268bd2; +} + +.project { + color: #ff4f58; + border-color: #ff4f58; +} + +.note { + color: #ffdd33; + border-color: #ffdd33; +} |