From e21c8ff99f66ff0125514b82f02a6ba8cb94aa15 Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Thu, 11 Jul 2024 16:37:45 +0300 Subject: [PATCH] Add obsidian theme Signed-off-by: Nikolaos Karaolidis --- .../user/configs/gui/ags/config/default.nix | 2 +- .../user/configs/gui/firefox/default.nix | 8 ++++++ .../user/configs/gui/obsidian/default.nix | 2 ++ .../user/configs/gui/obsidian/options.nix | 25 +++++++++++++++++ .../configs/gui/obsidian/themes/minimal.nix | 28 +++++++++++++++++++ 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 hosts/common/user/configs/gui/obsidian/themes/minimal.nix diff --git a/hosts/common/user/configs/gui/ags/config/default.nix b/hosts/common/user/configs/gui/ags/config/default.nix index c2034e6..b737604 100644 --- a/hosts/common/user/configs/gui/ags/config/default.nix +++ b/hosts/common/user/configs/gui/ags/config/default.nix @@ -3,7 +3,7 @@ ... }: pkgs.stdenv.mkDerivation { - name = "ags-config"; + name = "ags.config"; src = ./.; diff --git a/hosts/common/user/configs/gui/firefox/default.nix b/hosts/common/user/configs/gui/firefox/default.nix index 1a761d7..5fed19f 100644 --- a/hosts/common/user/configs/gui/firefox/default.nix +++ b/hosts/common/user/configs/gui/firefox/default.nix @@ -57,6 +57,10 @@ name = "type"; value = "packages"; } + { + name = "channel"; + value = "unstable"; + } { name = "query"; value = "{searchTerms}"; @@ -78,6 +82,10 @@ name = "type"; value = "options"; } + { + name = "channel"; + value = "unstable"; + } { name = "query"; value = "{searchTerms}"; diff --git a/hosts/common/user/configs/gui/obsidian/default.nix b/hosts/common/user/configs/gui/obsidian/default.nix index 350efff..a90098f 100644 --- a/hosts/common/user/configs/gui/obsidian/default.nix +++ b/hosts/common/user/configs/gui/obsidian/default.nix @@ -52,6 +52,8 @@ ./snippets/editor-monospace.css ./snippets/file-explorer-separators.css ]; + + theme = import ./themes/minimal.nix { inherit pkgs; }; }; }; diff --git a/hosts/common/user/configs/gui/obsidian/options.nix b/hosts/common/user/configs/gui/obsidian/options.nix index 5e9cba6..98731c0 100644 --- a/hosts/common/user/configs/gui/obsidian/options.nix +++ b/hosts/common/user/configs/gui/obsidian/options.nix @@ -89,6 +89,12 @@ in type = raw; default = [ ]; }; + + theme = mkOption { + description = "Obsidian theme package."; + type = raw; + default = null; + }; }; vaults = mkOption { @@ -134,6 +140,12 @@ in type = listOf path; default = cfg.sharedSettings.cssSnippets; }; + + theme = mkOption { + description = "Obsidian theme package."; + type = nullOr package; + default = cfg.sharedSettings.theme; + }; }; }; @@ -148,6 +160,7 @@ in config = let vaults = builtins.filter (vault: vault.enable == true) (builtins.attrValues cfg.vaults); + getThemeName = theme: (builtins.fromJSON (builtins.readFile "${theme}/manifest.json")).name; in lib.mkIf cfg.enable { home = { @@ -171,6 +184,9 @@ in snippet: lib.strings.removeSuffix ".css" (builtins.baseNameOf snippet) ) vault.settings.cssSnippets; } + // lib.attrsets.optionalAttrs (vault.settings.theme != null) { + cssTheme = getThemeName vault.settings.theme; + } ); }; }; @@ -203,6 +219,14 @@ in source = snippet; }; }) vault.settings.cssSnippets; + mkTheme = + vault: + lib.attrsets.optionalAttrs (vault.settings.theme != null) { + name = "${vault.target}/.obsidian/themes/${getThemeName vault.settings.theme}"; + value = { + source = vault.settings.theme; + }; + }; in builtins.listToAttrs ( lib.lists.flatten ( @@ -211,6 +235,7 @@ in (mkAppearance vault) (mkCorePlugins vault) (mkCssSnippets vault) + (mkTheme vault) ]) vaults ) ); diff --git a/hosts/common/user/configs/gui/obsidian/themes/minimal.nix b/hosts/common/user/configs/gui/obsidian/themes/minimal.nix new file mode 100644 index 0000000..f8298c5 --- /dev/null +++ b/hosts/common/user/configs/gui/obsidian/themes/minimal.nix @@ -0,0 +1,28 @@ +{ + pkgs ? import { }, + ... +}: +let + version = "7.7.7"; + + css = builtins.fetchurl { + url = "https://github.com/kepano/obsidian-minimal/releases/download/${version}/theme.css"; + sha256 = "sha256:1j7w6dsl20fbpzy9ldplf658qhg5ka1bkd2a8ac9q4n15lbqnp3a"; + }; +in +pkgs.stdenv.mkDerivation { + name = "obsidian.themes.minimal"; + + src = builtins.fetchurl { + url = "https://github.com/kepano/obsidian-minimal/releases/download/${version}/manifest.json"; + sha256 = "sha256:1hcp8kpzkb2hdj520mqdaar9dh0fcaqwcgji7dd1ws37yzw44kc5"; + }; + + phases = [ "installPhase" ]; + + installPhase = '' + mkdir -p $out + cp $src $out/manifest.json + cp ${css} $out/theme.css + ''; +}