Espanso: Fix broken module to be compatible with Espanso version 2.x (#4066)
* Fix espanso module to work with 2.x version * espanso: fix espanso module This module is currently broken. It does not create `config` and `match` folders which are required by espanso 2.x version. This PR fixed this issue and support creating multiple files under `config` and `match` folder. * Espanso: fix espanso module This module is currently broken. It does not create `config` and `match` folders which are required by espanso 2.x version. This PR fixed this issue and support creating multiple files under `config` and `match` folder. Add descriptions * Add versionAtLeast and mkRemovedOptionModule * Correct maintainers list * remove config key from example * format basic-configuration.nix * Update modules/services/espanso.nix Co-authored-by: Naïm Favier <n@monade.li> * fix maintainers list --------- Co-authored-by: Naïm Favier <n@monade.li>
This commit is contained in:
parent
9b8ba302ff
commit
1e5d741ea3
|
@ -400,4 +400,10 @@
|
||||||
github = "pedorich-n";
|
github = "pedorich-n";
|
||||||
githubId = 15573098;
|
githubId = 15573098;
|
||||||
};
|
};
|
||||||
|
liyangau = {
|
||||||
|
name = "Li Yang";
|
||||||
|
email = "d@aufomm.com";
|
||||||
|
github = "liyangau";
|
||||||
|
githubId = 71299093;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,25 @@
|
||||||
{ pkgs, config, lib, ... }:
|
{ pkgs, config, lib, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
|
||||||
inherit (lib)
|
inherit (lib)
|
||||||
mkOption mkEnableOption mkIf maintainers literalExpression types platforms;
|
mkOption mkEnableOption mkIf maintainers literalExpression types platforms
|
||||||
|
mkRemovedOptionModule versionAtLeast;
|
||||||
|
|
||||||
inherit (lib.hm.assertions) assertPlatform;
|
inherit (lib.hm.assertions) assertPlatform;
|
||||||
|
|
||||||
cfg = config.services.espanso;
|
cfg = config.services.espanso;
|
||||||
|
espansoVersion = cfg.package.version;
|
||||||
|
|
||||||
yaml = pkgs.formats.yaml { };
|
yaml = pkgs.formats.yaml { };
|
||||||
|
|
||||||
in {
|
in {
|
||||||
meta.maintainers = with maintainers; [ lucasew ];
|
imports = [
|
||||||
|
(mkRemovedOptionModule [ "services" "espanso" "settings" ]
|
||||||
|
"Use services.espanso.configs and services.espanso.matches instead.")
|
||||||
|
];
|
||||||
|
meta.maintainers = [
|
||||||
|
maintainers.lucasew
|
||||||
|
maintainers.bobvanderlinden
|
||||||
|
lib.hm.maintainers.liyangau
|
||||||
|
];
|
||||||
options = {
|
options = {
|
||||||
services.espanso = {
|
services.espanso = {
|
||||||
enable = mkEnableOption "Espanso: cross platform text expander in Rust";
|
enable = mkEnableOption "Espanso: cross platform text expander in Rust";
|
||||||
|
@ -25,40 +31,67 @@ in {
|
||||||
defaultText = literalExpression "pkgs.espanso";
|
defaultText = literalExpression "pkgs.espanso";
|
||||||
};
|
};
|
||||||
|
|
||||||
settings = mkOption {
|
configs = mkOption {
|
||||||
type = yaml.type;
|
type = yaml.type;
|
||||||
default = { matches = [ ]; };
|
default = { default = { }; };
|
||||||
example = literalExpression ''
|
example = literalExpression ''
|
||||||
{
|
{
|
||||||
matches = [
|
default = {
|
||||||
{ # Simple text replacement
|
show_notifications = false;
|
||||||
trigger = ":espanso";
|
};
|
||||||
replace = "Hi there!";
|
vscode = {
|
||||||
}
|
filter_title = "Visual Studio Code$";
|
||||||
{ # Dates
|
backend = "Clipboard";
|
||||||
trigger = ":date";
|
};
|
||||||
replace = "{{mydate}}";
|
};
|
||||||
vars = [{
|
|
||||||
name = "mydate";
|
|
||||||
type = "date";
|
|
||||||
params = { format = "%m/%d/%Y"; };
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
{ # Shell commands
|
|
||||||
trigger = ":shell";
|
|
||||||
replace = "{{output}}";
|
|
||||||
vars = [{
|
|
||||||
name = "output";
|
|
||||||
type = "shell";
|
|
||||||
params = { cmd = "echo Hello from your shell"; };
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
'';
|
'';
|
||||||
description = ''
|
description = ''
|
||||||
The Espanso configuration to use. See
|
The Espanso configuration to use. See
|
||||||
<link xlink:href="https://espanso.org/docs/configuration/"/>
|
<link xlink:href="https://espanso.org/docs/configuration/basics/"/>
|
||||||
|
for a description of available options.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
matches = mkOption {
|
||||||
|
type = yaml.type;
|
||||||
|
default = { default.matches = [ ]; };
|
||||||
|
example = literalExpression ''
|
||||||
|
{
|
||||||
|
base = {
|
||||||
|
matches = [
|
||||||
|
{
|
||||||
|
trigger = ":now";
|
||||||
|
replace = "It's {{currentdate}} {{currenttime}}";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
trigger = ":hello";
|
||||||
|
replace = "line1\nline2";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
regex = ":hi(?P<person>.*)\\.";
|
||||||
|
replace = "Hi {{person}}!";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
global_vars = {
|
||||||
|
global_vars = [
|
||||||
|
{
|
||||||
|
name = "currentdate";
|
||||||
|
type = "date";
|
||||||
|
params = {format = "%d/%m/%Y";};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "currenttime";
|
||||||
|
type = "date";
|
||||||
|
params = {format = "%R";};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
'';
|
||||||
|
description = ''
|
||||||
|
The Espanso matches to use. See
|
||||||
|
<link xlink:href="https://espanso.org/docs/matches/basics/"/>
|
||||||
for a description of available options.
|
for a description of available options.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
@ -66,12 +99,28 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
assertions = [ (assertPlatform "services.espanso" pkgs platforms.linux) ];
|
assertions = [
|
||||||
|
(assertPlatform "services.espanso" pkgs platforms.linux)
|
||||||
|
{
|
||||||
|
assertion = versionAtLeast espansoVersion "2";
|
||||||
|
message = ''
|
||||||
|
The services.espanso module only supports Espanso version 2 or later.
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
home.packages = [ cfg.package ];
|
home.packages = [ cfg.package ];
|
||||||
|
|
||||||
xdg.configFile."espanso/default.yml".source =
|
xdg.configFile = let
|
||||||
yaml.generate "espanso-default.yml" cfg.settings;
|
configFiles = lib.mapAttrs' (name: value: {
|
||||||
|
name = "espanso/config/${name}.yml";
|
||||||
|
value = { source = yaml.generate "${name}.yml" value; };
|
||||||
|
}) cfg.configs;
|
||||||
|
matchesFiles = lib.mapAttrs' (name: value: {
|
||||||
|
name = "espanso/match/${name}.yml";
|
||||||
|
value = { source = yaml.generate "${name}.yml" value; };
|
||||||
|
}) cfg.matches;
|
||||||
|
in configFiles // matchesFiles;
|
||||||
|
|
||||||
systemd.user.services.espanso = {
|
systemd.user.services.espanso = {
|
||||||
Unit = { Description = "Espanso: cross platform text expander in Rust"; };
|
Unit = { Description = "Espanso: cross platform text expander in Rust"; };
|
||||||
|
|
|
@ -3,31 +3,38 @@
|
||||||
{
|
{
|
||||||
services.espanso = {
|
services.espanso = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
configs = { default = { show_notifications = false; }; };
|
||||||
matches = [
|
matches = {
|
||||||
{ # Simple text replacement
|
base = {
|
||||||
trigger = ":espanso";
|
matches = [
|
||||||
replace = "Hi there!";
|
{
|
||||||
}
|
trigger = ":now";
|
||||||
{ # Dates
|
replace = "It's {{currentdate}} {{currenttime}}";
|
||||||
trigger = ":date";
|
}
|
||||||
replace = "{{mydate}}";
|
{
|
||||||
vars = [{
|
trigger = ":hello";
|
||||||
name = "mydate";
|
replace = ''
|
||||||
|
line1
|
||||||
|
line2'';
|
||||||
|
}
|
||||||
|
{
|
||||||
|
regex = ":hi(?P<person>.*)\\.";
|
||||||
|
replace = "Hi {{person}}!";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
global_vars = [
|
||||||
|
{
|
||||||
|
name = "currentdate";
|
||||||
type = "date";
|
type = "date";
|
||||||
params = { format = "%m/%d/%Y"; };
|
params = { format = "%d/%m/%Y"; };
|
||||||
}];
|
}
|
||||||
}
|
{
|
||||||
{ # Shell commands
|
name = "currenttime";
|
||||||
trigger = ":shell";
|
type = "date";
|
||||||
replace = "{{output}}";
|
params = { format = "%R"; };
|
||||||
vars = [{
|
}
|
||||||
name = "output";
|
];
|
||||||
type = "shell";
|
};
|
||||||
params = { cmd = "echo Hello from your shell"; };
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -38,8 +45,12 @@
|
||||||
assertFileExists "$serviceFile"
|
assertFileExists "$serviceFile"
|
||||||
assertFileContent "$serviceFile" ${./basic-configuration.service}
|
assertFileContent "$serviceFile" ${./basic-configuration.service}
|
||||||
|
|
||||||
configFile=home-files/.config/espanso/default.yml
|
configFile=home-files/.config/espanso/config/default.yml
|
||||||
assertFileExists "$configFile"
|
assertFileExists "$configFile"
|
||||||
assertFileContent "$configFile" ${./basic-configuration.yaml}
|
assertFileContent "$configFile" ${./basic-configuration.yaml}
|
||||||
|
|
||||||
|
matchFile=home-files/.config/espanso/match/base.yml
|
||||||
|
assertFileExists "$matchFile"
|
||||||
|
assertFileContent "$matchFile" ${./basic-matches.yaml}
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1 @@
|
||||||
matches:
|
show_notifications: false
|
||||||
- replace: Hi there!
|
|
||||||
trigger: :espanso
|
|
||||||
- replace: '{{mydate}}'
|
|
||||||
trigger: :date
|
|
||||||
vars:
|
|
||||||
- name: mydate
|
|
||||||
params:
|
|
||||||
format: '%m/%d/%Y'
|
|
||||||
type: date
|
|
||||||
- replace: '{{output}}'
|
|
||||||
trigger: :shell
|
|
||||||
vars:
|
|
||||||
- name: output
|
|
||||||
params:
|
|
||||||
cmd: echo Hello from your shell
|
|
||||||
type: shell
|
|
||||||
|
|
18
tests/modules/services/espanso/basic-matches.yaml
Normal file
18
tests/modules/services/espanso/basic-matches.yaml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
global_vars:
|
||||||
|
- name: currentdate
|
||||||
|
params:
|
||||||
|
format: '%d/%m/%Y'
|
||||||
|
type: date
|
||||||
|
- name: currenttime
|
||||||
|
params:
|
||||||
|
format: '%R'
|
||||||
|
type: date
|
||||||
|
matches:
|
||||||
|
- replace: It's {{currentdate}} {{currenttime}}
|
||||||
|
trigger: :now
|
||||||
|
- replace: 'line1
|
||||||
|
|
||||||
|
line2'
|
||||||
|
trigger: :hello
|
||||||
|
- regex: :hi(?P<person>.*)\.
|
||||||
|
replace: Hi {{person}}!
|
Loading…
Reference in a new issue