From f544f3b93faae7abe9ac5d8baccee011ed7089c4 Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Tue, 3 Sep 2024 18:08:10 +0800 Subject: [PATCH] users/foo-dogsquared/programs/custom-homepage: init YOOOOOOOOO! This is cool, a Nix-configurable homepage (made with Hugo) by taking advantage of the way how data are merged within the virtual filesystem, hell yeah. Aaaaaand... its novelty wears off a minute later in my setup because Tridactyl needs to override the tab. :/ --- .../foo-dogsquared/modules/default.nix | 1 + .../modules/programs/custom-homepage.nix | 70 +++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 configs/home-manager/foo-dogsquared/modules/programs/custom-homepage.nix diff --git a/configs/home-manager/foo-dogsquared/modules/default.nix b/configs/home-manager/foo-dogsquared/modules/default.nix index 9f5d6b4c..62f9fad7 100644 --- a/configs/home-manager/foo-dogsquared/modules/default.nix +++ b/configs/home-manager/foo-dogsquared/modules/default.nix @@ -11,6 +11,7 @@ ./programs/jujutsu.nix ./programs/keys.nix ./programs/nixvim + ./programs/custom-homepage.nix ./programs/research.nix ./programs/shell.nix ./programs/terminal-multiplexer.nix diff --git a/configs/home-manager/foo-dogsquared/modules/programs/custom-homepage.nix b/configs/home-manager/foo-dogsquared/modules/programs/custom-homepage.nix new file mode 100644 index 00000000..6f0e0876 --- /dev/null +++ b/configs/home-manager/foo-dogsquared/modules/programs/custom-homepage.nix @@ -0,0 +1,70 @@ +{ config, lib, pkgs, ... }: + +let + userCfg = config.users.foo-dogsquared; + cfg = userCfg.programs.custom-homepage; + + settingsFormat = pkgs.formats.toml { }; +in +{ + options.users.foo-dogsquared.programs.custom-homepage = { + enable = lib.mkEnableOption "addition of custom homepage"; + + sections = lib.mkOption { + type = with lib.types; attrsOf settingsFormat.type; + description = '' + List of additional sections with their settings to be configured + alongside the hardcoded sections. + ''; + default = { }; + example = lib.literalExpression '' + { + services = { + name = "Local services"; + flavorText = "for the local productivity"; + textOnly = true; + + links = lib.singleton { + url = "localhost:''${builtins.toString config.services.mopidy.settings.port}"; + text = "Music streaming server"; + }; + }; + } + ''; + }; + + package = lib.mkOption { + type = lib.types.package; + description = '' + The package derivation of the website. + ''; + default = pkgs.callPackage ../../files/homepage/package.nix { }; + }; + + finalPackage = lib.mkOption { + type = lib.types.package; + description = '' + Output derivation containing the website with all of its modifications. + ''; + readOnly = true; + }; + }; + + config = { + users.foo-dogsquared.programs.custom-homepage.finalPackage = + let + data = lib.mapAttrs (n: v: + settingsFormat.generate "fds-homepage-section-${n}" v) cfg.sections; + + installDataDir = lib.foldlAttrs (acc: n: v: '' + ${acc} + install -Dm0644 ${v} './data/foodogsquared-homepage/links/${n}.toml' + '') "" data; + in + cfg.package.overrideAttrs (prevAttrs: { + preBuild = (prevAttrs.preBuild or "") + '' + ${installDataDir} + ''; + }); + }; +}