* tests: `--show-trace` in CI (#4070) (cherry picked from commitf889ec0ec3
) * tests/stubs: inherit default versions from pkgs (#4069) * tests/stubs: inherit default versions from pkgs * tests/browserpass: temporarily disable on darwin The package currently fails to evaluate on darwin due to a nixpkgs problem: https://github.com/NixOS/nixpkgs/pull/236258#issuecomment-1583450593 (cherry picked from commit69bdd6de50
) * 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> (cherry picked from commit1e5d741ea3
) --------- Co-authored-by: Li Yang <71299093+liyangau@users.noreply.github.com>
This commit is contained in:
parent
93db05480c
commit
e753d659c6
6
.github/workflows/test.yml
vendored
6
.github/workflows/test.yml
vendored
|
@ -24,7 +24,7 @@ jobs:
|
|||
echo "Error: literalExample should be replaced by literalExpression" > /dev/stderr
|
||||
exit 1
|
||||
fi
|
||||
- run: nix-build -A docs.jsonModuleMaintainers
|
||||
- run: nix-build --show-trace -A docs.jsonModuleMaintainers
|
||||
- run: ./format -c
|
||||
- run: nix-shell . -A install
|
||||
- run: nix-shell --arg enableBig false --pure tests -A run.all
|
||||
- run: nix-shell --show-trace . -A install
|
||||
- run: nix-shell --show-trace --arg enableBig false --pure tests -A run.all
|
||||
|
|
|
@ -394,4 +394,10 @@
|
|||
github = "natecox";
|
||||
githubId = 2782695;
|
||||
};
|
||||
liyangau = {
|
||||
name = "Li Yang";
|
||||
email = "d@aufomm.com";
|
||||
github = "liyangau";
|
||||
githubId = 71299093;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,19 +1,25 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
|
||||
let
|
||||
|
||||
inherit (lib)
|
||||
mkOption mkEnableOption mkIf maintainers literalExpression types platforms;
|
||||
mkOption mkEnableOption mkIf maintainers literalExpression types platforms
|
||||
mkRemovedOptionModule versionAtLeast;
|
||||
|
||||
inherit (lib.hm.assertions) assertPlatform;
|
||||
|
||||
cfg = config.services.espanso;
|
||||
espansoVersion = cfg.package.version;
|
||||
|
||||
yaml = pkgs.formats.yaml { };
|
||||
|
||||
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 = {
|
||||
services.espanso = {
|
||||
enable = mkEnableOption "Espanso: cross platform text expander in Rust";
|
||||
|
@ -25,40 +31,67 @@ in {
|
|||
defaultText = literalExpression "pkgs.espanso";
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
configs = mkOption {
|
||||
type = yaml.type;
|
||||
default = { matches = [ ]; };
|
||||
default = { default = { }; };
|
||||
example = literalExpression ''
|
||||
{
|
||||
matches = [
|
||||
{ # Simple text replacement
|
||||
trigger = ":espanso";
|
||||
replace = "Hi there!";
|
||||
}
|
||||
{ # Dates
|
||||
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"; };
|
||||
}];
|
||||
}
|
||||
];
|
||||
}
|
||||
default = {
|
||||
show_notifications = false;
|
||||
};
|
||||
vscode = {
|
||||
filter_title = "Visual Studio Code$";
|
||||
backend = "Clipboard";
|
||||
};
|
||||
};
|
||||
'';
|
||||
description = ''
|
||||
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.
|
||||
'';
|
||||
};
|
||||
|
@ -66,12 +99,28 @@ in {
|
|||
};
|
||||
|
||||
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 ];
|
||||
|
||||
xdg.configFile."espanso/default.yml".source =
|
||||
yaml.generate "espanso-default.yml" cfg.settings;
|
||||
xdg.configFile = let
|
||||
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 = {
|
||||
Unit = { Description = "Espanso: cross platform text expander in Rust"; };
|
||||
|
|
|
@ -64,7 +64,6 @@ import nmt {
|
|||
./modules/programs/bat
|
||||
./modules/programs/bottom
|
||||
./modules/programs/broot
|
||||
./modules/programs/browserpass
|
||||
./modules/programs/btop
|
||||
./modules/programs/dircolors
|
||||
./modules/programs/direnv
|
||||
|
@ -155,6 +154,7 @@ import nmt {
|
|||
./modules/programs/autorandr
|
||||
./modules/programs/beets # One test relies on services.mpd
|
||||
./modules/programs/borgmatic
|
||||
./modules/programs/browserpass # TODO re-enable on Darwin when https://github.com/NixOS/nixpkgs/pull/236258#issuecomment-1583450593 is fixed
|
||||
./modules/programs/firefox
|
||||
./modules/programs/foot
|
||||
./modules/programs/fuzzel
|
||||
|
|
|
@ -3,31 +3,38 @@
|
|||
{
|
||||
services.espanso = {
|
||||
enable = true;
|
||||
settings = {
|
||||
matches = [
|
||||
{ # Simple text replacement
|
||||
trigger = ":espanso";
|
||||
replace = "Hi there!";
|
||||
}
|
||||
{ # Dates
|
||||
trigger = ":date";
|
||||
replace = "{{mydate}}";
|
||||
vars = [{
|
||||
name = "mydate";
|
||||
configs = { default = { show_notifications = false; }; };
|
||||
matches = {
|
||||
base = {
|
||||
matches = [
|
||||
{
|
||||
trigger = ":now";
|
||||
replace = "It's {{currentdate}} {{currenttime}}";
|
||||
}
|
||||
{
|
||||
trigger = ":hello";
|
||||
replace = ''
|
||||
line1
|
||||
line2'';
|
||||
}
|
||||
{
|
||||
regex = ":hi(?P<person>.*)\\.";
|
||||
replace = "Hi {{person}}!";
|
||||
}
|
||||
];
|
||||
global_vars = [
|
||||
{
|
||||
name = "currentdate";
|
||||
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"; };
|
||||
}];
|
||||
}
|
||||
];
|
||||
params = { format = "%d/%m/%Y"; };
|
||||
}
|
||||
{
|
||||
name = "currenttime";
|
||||
type = "date";
|
||||
params = { format = "%R"; };
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -38,8 +45,12 @@
|
|||
assertFileExists "$serviceFile"
|
||||
assertFileContent "$serviceFile" ${./basic-configuration.service}
|
||||
|
||||
configFile=home-files/.config/espanso/default.yml
|
||||
configFile=home-files/.config/espanso/config/default.yml
|
||||
assertFileExists "$configFile"
|
||||
assertFileContent "$configFile" ${./basic-configuration.yaml}
|
||||
|
||||
matchFile=home-files/.config/espanso/match/base.yml
|
||||
assertFileExists "$matchFile"
|
||||
assertFileContent "$matchFile" ${./basic-matches.yaml}
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,17 +1 @@
|
|||
matches:
|
||||
- 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
|
||||
show_notifications: false
|
||||
|
|
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}}!
|
|
@ -15,12 +15,13 @@ let
|
|||
outPath = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = "@${name}@";
|
||||
defaultText = "@\${name}@";
|
||||
defaultText = literalExpression ''"@''${name}@"'';
|
||||
};
|
||||
|
||||
version = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
defaultText = literalExpression "pkgs.\${name}.version or null";
|
||||
};
|
||||
|
||||
buildScript = mkOption {
|
||||
|
@ -55,7 +56,12 @@ in {
|
|||
config = {
|
||||
lib.test.mkStubPackage = mkStubPackage;
|
||||
|
||||
nixpkgs.overlays = mkIf (config.test.stubs != { })
|
||||
[ (self: super: mapAttrs (n: mkStubPackage) config.test.stubs) ];
|
||||
nixpkgs.overlays = mkIf (config.test.stubs != { }) [
|
||||
(self: super:
|
||||
mapAttrs (n: v:
|
||||
mkStubPackage (v // optionalAttrs (v.version == null) {
|
||||
version = super.${n}.version or null;
|
||||
})) config.test.stubs)
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue