mirror of
https://github.com/nix-community/home-manager
synced 2024-11-16 16:19:44 +01:00
2846d5230a
This PR fixes two issues that cause rebuild to fail, see #5222. The first was caused when sync.target and sync.interval were not set, this was fixed by changing the default values from null to "undefined" and filtering these out later. The second error occurred when the .config/joplin-desktop directory didn't exist (e.g. when installing Joplin for the first time) which caused the touch command to fail. This was fixed using mkdir to ensure that .config/joplin-desktop exists.
135 lines
3.6 KiB
Nix
135 lines
3.6 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
let
|
|
|
|
cfg = config.programs.joplin-desktop;
|
|
|
|
jsonFormat = pkgs.formats.json { };
|
|
|
|
# config path is the same for linux and mac
|
|
configPath = "${config.xdg.configHome}/joplin-desktop/settings.json";
|
|
|
|
in {
|
|
meta.maintainers = [ lib.hm.maintainers.zorrobert ];
|
|
|
|
options.programs.joplin-desktop = {
|
|
enable = lib.mkEnableOption "joplin-desktop";
|
|
|
|
package = lib.mkPackageOption pkgs "joplin-desktop" { };
|
|
|
|
extraConfig = lib.mkOption {
|
|
type = lib.types.attrs;
|
|
default = { };
|
|
example = {
|
|
"newNoteFocus" = "title";
|
|
"markdown.plugin.mark" = true;
|
|
};
|
|
description = ''
|
|
Use this to add other options to the Joplin config file. Settings are
|
|
written in JSON, so `"sync.interval": 600` would be written as
|
|
`"sync.interval" = 600`.
|
|
'';
|
|
};
|
|
|
|
### General
|
|
general = {
|
|
editor = lib.mkOption {
|
|
type = lib.types.nullOr lib.types.str;
|
|
default = null;
|
|
example = "kate";
|
|
description = ''
|
|
The editor command (may include arguments) that will be used to open a
|
|
note. If none is provided Joplin will try to auto-detect the default
|
|
editor.
|
|
'';
|
|
};
|
|
};
|
|
|
|
### Sync
|
|
sync = {
|
|
target = lib.mkOption {
|
|
type = lib.types.enum [
|
|
"undefined"
|
|
"none"
|
|
"file-system"
|
|
"onedrive"
|
|
"nextcloud"
|
|
"webdav"
|
|
"dropbox"
|
|
"s3"
|
|
"joplin-server"
|
|
"joplin-cloud"
|
|
];
|
|
default = "undefined";
|
|
example = "dropbox";
|
|
description = "What is the type of sync target.";
|
|
};
|
|
|
|
interval = lib.mkOption {
|
|
type = lib.types.enum [
|
|
"undefined"
|
|
"disabled"
|
|
"5m"
|
|
"10m"
|
|
"30m"
|
|
"1h"
|
|
"12h"
|
|
"1d"
|
|
];
|
|
default = "undefined";
|
|
example = "10m";
|
|
description = ''
|
|
Set the synchronisation interval.
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
home.packages = [ cfg.package ];
|
|
|
|
home.activation = {
|
|
activateJoplinDesktopConfig = let
|
|
newConfig = jsonFormat.generate "joplin-settings.json"
|
|
(lib.attrsets.filterAttrs (n: v: (v != null) && (v != "")) ({
|
|
# TODO: find a better way to convert nix attribute names to strings:
|
|
# sync.interval = ... -> "sync.interval" = ...
|
|
|
|
"editor" = cfg.general.editor;
|
|
|
|
"sync.target" = {
|
|
"undefined" = null;
|
|
"none" = 0;
|
|
"file-system" = 2;
|
|
"onedrive" = 3;
|
|
"nextcloud" = 5;
|
|
"webdav" = 6;
|
|
"dropbox" = 7;
|
|
"s3" = 8;
|
|
"joplin-server" = 9;
|
|
"joplin-cloud" = 10;
|
|
}.${cfg.sync.target};
|
|
|
|
"sync.interval" = {
|
|
"undefined" = null;
|
|
"disabled" = 0;
|
|
"5m" = 300;
|
|
"10m" = 600;
|
|
"30m" = 1800;
|
|
"1h" = 3600;
|
|
"12h" = 43200;
|
|
"1d" = 86400;
|
|
}.${cfg.sync.interval};
|
|
} // cfg.extraConfig));
|
|
in lib.hm.dag.entryAfter [ "linkGeneration" ] ''
|
|
# Ensure that settings.json exists.
|
|
mkdir -p ${builtins.dirOf configPath}
|
|
touch ${configPath}
|
|
# Config has to be written to temporary variable because jq cannot edit files in place.
|
|
config="$(jq -s '.[0] + .[1]' ${configPath} ${newConfig})"
|
|
printf '%s\n' "$config" > ${configPath}
|
|
unset config
|
|
'';
|
|
};
|
|
};
|
|
}
|