61 lines
1.6 KiB
Nix
61 lines
1.6 KiB
Nix
{ config, pkgs, lib, ... }:
|
|
|
|
let
|
|
vaultName = "main";
|
|
notesDir = "${config.home.homeDirectory}/Obsidian";
|
|
vaultDir = "${notesDir}/${vaultName}";
|
|
plugins = [
|
|
"calendar"
|
|
"advanced-tables"
|
|
"dataview"
|
|
"markdown-formatting-assistant"
|
|
];
|
|
pluginDir = "${vaultDir}/.obsidian/plugins";
|
|
setupPlugins = pkgs.writeShellScriptBin "setup-obsidian-plugins" ''
|
|
set -e
|
|
mkdir -p "${pluginDir}"
|
|
cd "${pluginDir}"
|
|
|
|
${lib.concatMapStringsSep "\n" (plugin:
|
|
''
|
|
if [ ! -d "${plugin}" ]; then
|
|
echo "Installing plugin: ${plugin}"
|
|
git clone --depth=1 https://github.com/obsidianmd/obsidian-releases/tree/master/community-plugins/${plugin} ${plugin} || true
|
|
fi
|
|
''
|
|
) plugins}
|
|
'';
|
|
cfg = config.homeModules.obsidian;
|
|
in
|
|
|
|
lib.mkIf cfg.enable {
|
|
home.packages = with pkgs; [
|
|
obsidian
|
|
setupPlugins
|
|
];
|
|
|
|
# Ensure Notes and vault directory exist
|
|
home.file."Obsidian/.keep".text = "";
|
|
|
|
# Shell alias
|
|
programs.zsh.shellAliases = {
|
|
obsidian = "obsidian ${vaultDir}";
|
|
};
|
|
|
|
# Obsidian desktop entry
|
|
xdg.desktopEntries.obsidian = {
|
|
name = "Obsidian";
|
|
genericName = "Markdown Notes";
|
|
comment = "A powerful knowledge base with Markdown and local storage.";
|
|
exec = "obsidian ${vaultDir}";
|
|
icon = "obsidian";
|
|
type = "Application";
|
|
categories = [ "Office" ];
|
|
};
|
|
|
|
# Reminder to run plugin setup
|
|
home.activation.obsidianPluginSetup = lib.hm.dag.entryAfter ["writeBoundary"] ''
|
|
echo "💡 Run 'setup-obsidian-plugins' to install default plugins into ${pluginDir}"
|
|
'';
|
|
}
|