Add clipbook

Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2025-02-13 13:41:03 +00:00
parent 97a042adcd
commit c907cdeca6
11 changed files with 203 additions and 31 deletions

View File

@@ -0,0 +1,69 @@
{
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 = pkgs.callPackage ./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;
};
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.";
}
];
};
}