Files
nix/hosts/common/configs/user/gui/clipbook/options.nix
Nikolaos Karaolidis 0ae8128304 Refactor packages
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
2025-02-23 23:52:29 +00:00

71 lines
1.7 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
cfg = config.programs.clipbook;
in
{
options.programs.clipbook =
with lib;
with types;
{
enable = mkEnableOption "Clipbook";
bookmarks =
let
bookmarksOptions =
{ config, ... }:
{
options = {
source = mkOption {
type = nullOr str;
description = "Path to the file to copy.";
default = null;
};
text = mkOption {
type = nullOr str;
description = "Text to copy.";
default = null;
};
};
};
in
mkOption {
type = attrsOf (submodule bookmarksOptions);
description = "Clipboard Bookmarks.";
default = { };
};
finalPackage = mkOption {
type = package;
description = "The clipbook rofi package.";
default = import ./rofi.nix {
rofi = config.programs.rofi.finalPackage;
bookmarks = builtins.mapAttrs (_: bookmark: {
type = if bookmark.source != null then "file" else "text";
content = if bookmark.source != null then bookmark.source else bookmark.text;
}) cfg.bookmarks;
inherit lib pkgs;
};
readOnly = true;
};
};
config = {
assertions = [
{
assertion = builtins.all (
bookmark:
(bookmark.source == null || bookmark.text == null)
&& (bookmark.source != null || bookmark.text != null)
) (builtins.attrValues cfg.bookmarks);
message = "Each bookmark must have one of 'source' or 'text' set.";
}
];
};
}