1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-03-18 14:28:15 +00:00
home-manager/modules/services/clipse.nix

168 lines
4.4 KiB
Nix
Raw Normal View History

{ pkgs, config, lib, ... }:
let
cfg = config.services.clipse;
jsonFormat = pkgs.formats.json { };
in {
meta.maintainers = [ lib.hm.maintainers.dsoverlord ];
options.services.clipse = {
enable = lib.mkEnableOption "Enable clipse clipboard manager";
package = lib.mkPackageOption pkgs "clipse" { nullable = true; };
systemdTarget = lib.mkOption {
type = lib.types.str;
default = "graphical-session.target";
example = "sway-session.target";
description = ''
The systemd target that will automatically start the clipse service.
When setting this value to `"sway-session.target"`,
make sure to also enable {option}`wayland.windowManager.sway.systemd.enable`,
otherwise the service may never be started.
'';
};
allowDuplicates = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Allow duplicates";
};
historySize = lib.mkOption {
type = lib.types.int;
default = 100;
description = "Number of history lines to keep.";
};
2025-02-25 16:39:21 +02:00
imageDisplay = {
type = lib.mkOption {
type = lib.types.enum [ "basic" "kitty" "sixel" ];
default = "basic";
description = "Preview image method";
};
scaleX = lib.mkOption {
type = lib.types.int;
default = 9;
description = "Image scaling factor X";
};
scaleY = lib.mkOption {
type = lib.types.int;
default = 9;
description = "Image scaling factor Y";
};
heightCut = lib.mkOption {
type = lib.types.int;
default = 2;
description = "Height cut";
};
};
keyBindings = lib.mkOption {
type = jsonFormat.type;
default = { };
example = lib.literalExpression ''
{
"choose": "enter",
"clearSelected": "S",
"down": "down",
"end": "end",
"filter": "/",
"home": "home",
"more": "?",
"nextPage": "right",
"prevPage": "left",
"preview": "t",
"quit": "q",
"remove": "x",
"selectDown": "ctrl+down",
"selectSingle": "s",
"selectUp": "ctrl+up",
"togglePin": "p",
"togglePinned": "tab",
"up": "up",
"yankFilter": "ctrl+s"
}
'';
description = "Custom key bindings";
};
theme = lib.mkOption {
type = jsonFormat.type;
default = { useCustomTheme = false; };
example = lib.literalExpression ''
{
useCustomTheme = true;
DimmedDesc = "#ffffff";
DimmedTitle = "#ffffff";
FilteredMatch = "#ffffff";
NormalDesc = "#ffffff";
NormalTitle = "#ffffff";
SelectedDesc = "#ffffff";
SelectedTitle = "#ffffff";
SelectedBorder = "#ffffff";
SelectedDescBorder = "#ffffff";
TitleFore = "#ffffff";
Titleback = "#434C5E";
StatusMsg = "#ffffff";
PinIndicatorColor = "#ff0000";
};
'';
description = ''
Configuration written to
{file}`$XDG_CONFIG_HOME/clipse/custom_theme.json`.
'';
};
};
config = lib.mkIf cfg.enable {
assertions = [
(lib.hm.assertions.assertPlatform "services.clipse" pkgs
lib.platforms.linux)
];
home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];
xdg.configFile."clipse/config.json".source =
jsonFormat.generate "settings" {
allowDuplicates = cfg.allowDuplicates;
historyFile = "clipboard_history.json";
maxHistory = cfg.historySize;
logFile = "clipse.log";
themeFile = "custom_theme.json";
tempDir = "tmp_files";
2025-02-25 16:39:21 +02:00
keyBindings = cfg.keyBindings;
imageDisplay = cfg.imageDisplay;
};
xdg.configFile."clipse/custom_theme.json".source =
jsonFormat.generate "theme" cfg.theme;
systemd.user.services.clipse =
lib.mkIf (pkgs.stdenv.isLinux && (cfg.package != null)) {
Unit = {
Description = "Clipse listener";
PartOf = [ "graphical-session.target" ];
After = [ "graphical-session.target" ];
};
Service = {
Type = "oneshot";
RemainAfterExit = true;
ExecStart = "${cfg.package}/bin/clipse -listen";
};
Install = { WantedBy = [ cfg.systemdTarget ]; };
};
};
}