Add obsidian plugins
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
@@ -84,6 +84,12 @@ in
|
||||
];
|
||||
};
|
||||
|
||||
plugins = mkOption {
|
||||
description = "Community plugins to activate.";
|
||||
type = raw;
|
||||
default = [ ];
|
||||
};
|
||||
|
||||
cssSnippets = mkOption {
|
||||
description = "CSS snippets to install.";
|
||||
type = raw;
|
||||
@@ -135,6 +141,12 @@ in
|
||||
default = cfg.sharedSettings.corePlugins;
|
||||
};
|
||||
|
||||
plugins = mkOption {
|
||||
description = "Community plugins to activate.";
|
||||
type = listOf package;
|
||||
default = cfg.sharedSettings.plugins;
|
||||
};
|
||||
|
||||
cssSnippets = mkOption {
|
||||
description = "CSS snippets to install.";
|
||||
type = listOf path;
|
||||
@@ -160,7 +172,13 @@ in
|
||||
config =
|
||||
let
|
||||
vaults = builtins.filter (vault: vault.enable == true) (builtins.attrValues cfg.vaults);
|
||||
getThemeName = theme: (builtins.fromJSON (builtins.readFile "${theme}/manifest.json")).name;
|
||||
getManifestId =
|
||||
pkg:
|
||||
let
|
||||
manifest = builtins.fromJSON (builtins.readFile "${pkg}/manifest.json");
|
||||
in
|
||||
manifest.id or manifest.name;
|
||||
readDir = dir: builtins.attrNames (builtins.readDir dir);
|
||||
in
|
||||
lib.mkIf cfg.enable {
|
||||
home = {
|
||||
@@ -185,7 +203,7 @@ in
|
||||
) vault.settings.cssSnippets;
|
||||
}
|
||||
// lib.attrsets.optionalAttrs (vault.settings.theme != null) {
|
||||
cssTheme = getThemeName vault.settings.theme;
|
||||
cssTheme = getManifestId vault.settings.theme;
|
||||
}
|
||||
);
|
||||
};
|
||||
@@ -211,6 +229,38 @@ in
|
||||
};
|
||||
}
|
||||
];
|
||||
mkCommunityPlugins =
|
||||
vault:
|
||||
[
|
||||
{
|
||||
name = "${vault.target}/.obsidian/community-plugins.json";
|
||||
value = {
|
||||
source = (pkgs.formats.json { }).generate "community-plugins.json" (
|
||||
builtins.map getManifestId vault.settings.plugins
|
||||
);
|
||||
};
|
||||
}
|
||||
]
|
||||
/*
|
||||
We can't do the following since plugins often write files in their directories,
|
||||
and symlinking the entire folder does not give us write permissions.
|
||||
|
||||
builtins.map (plugin: {
|
||||
name = "${vault.target}/.obsidian/plugins/${getManifestId plugin}";
|
||||
value = { source = plugin; };
|
||||
}) vault.settings.plugins;
|
||||
|
||||
This is why we do a double loop over plugins and their files.
|
||||
*/
|
||||
++ builtins.map (
|
||||
plugin:
|
||||
builtins.map (file: {
|
||||
name = "${vault.target}/.obsidian/plugins/${getManifestId plugin}/${file}";
|
||||
value = {
|
||||
source = "${plugin}/${file}";
|
||||
};
|
||||
}) (readDir plugin)
|
||||
) vault.settings.plugins;
|
||||
mkCssSnippets =
|
||||
vault:
|
||||
builtins.map (snippet: {
|
||||
@@ -222,7 +272,7 @@ in
|
||||
mkTheme =
|
||||
vault:
|
||||
lib.attrsets.optionalAttrs (vault.settings.theme != null) {
|
||||
name = "${vault.target}/.obsidian/themes/${getThemeName vault.settings.theme}";
|
||||
name = "${vault.target}/.obsidian/themes/${getManifestId vault.settings.theme}";
|
||||
value = {
|
||||
source = vault.settings.theme;
|
||||
};
|
||||
@@ -234,6 +284,7 @@ in
|
||||
(mkApp vault)
|
||||
(mkAppearance vault)
|
||||
(mkCorePlugins vault)
|
||||
(mkCommunityPlugins vault)
|
||||
(mkCssSnippets vault)
|
||||
(mkTheme vault)
|
||||
]) vaults
|
||||
|
Reference in New Issue
Block a user