espanso: add module

This commit adds a module to configure espanso, a program to do text
expansions that is configured using a YAML configuration file.
This commit is contained in:
lucasew 2021-10-24 19:27:41 -03:00 committed by Robert Helgesson
parent 5b208b42b2
commit 4f4165a8b9
No known key found for this signature in database
GPG key ID: 36BDAA14C2797E89
9 changed files with 171 additions and 0 deletions

2
.github/CODEOWNERS vendored
View file

@ -278,6 +278,8 @@
/modules/services/etesync-dav.nix @Valodim
/modules/services/espanso.nix @lucasew
/modules/services/flameshot.nix @moredhel
/modules/services/fluidsynth.nix @Valodim

View file

@ -2417,6 +2417,14 @@ in
A new module is available: 'programs.eww'.
'';
}
{
time = "2022-02-17T23:11:13+00:00";
condition = hostPlatform.isLinux;
message = ''
A new module is available: 'services.espanso'.
'';
}
];
};
}

View file

@ -178,6 +178,7 @@ let
./services/easyeffects.nix
./services/emacs.nix
./services/etesync-dav.nix
./services/espanso.nix
./services/flameshot.nix
./services/fluidsynth.nix
./services/fnott.nix

View file

@ -0,0 +1,86 @@
{ pkgs, config, lib, ... }:
let
inherit (lib)
mkOption mkEnableOption mkIf maintainers literalExpression types platforms;
inherit (lib.hm.assertions) assertPlatform;
cfg = config.services.espanso;
yaml = pkgs.formats.yaml { };
in {
meta.maintainers = with maintainers; [ lucasew ];
options = {
services.espanso = {
enable = mkEnableOption "Espanso: cross platform text expander in Rust";
package = mkOption {
type = types.package;
description = "Which espanso package to use";
default = pkgs.espanso;
defaultText = literalExpression "pkgs.espanso";
};
settings = mkOption {
type = yaml.type;
default = { matches = [ ]; };
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"; };
}];
}
];
}
'';
description = ''
The Espanso configuration to use. See
<link xlink:href="https://espanso.org/docs/configuration/"/>
for a description of available options.
'';
};
};
};
config = mkIf cfg.enable {
assertions = [ (assertPlatform "services.espanso" pkgs platforms.linux) ];
home.packages = [ cfg.package ];
xdg.configFile."espanso/default.yml".source =
yaml.generate "espanso-default.yml" cfg.settings;
systemd.user.services.espanso = {
Unit = { Description = "Espanso: cross platform text expander in Rust"; };
Service = {
Type = "exec";
ExecStart = "${cfg.package}/bin/espanso daemon";
Restart = "on-failure";
};
Install = { WantedBy = [ "default.target" ]; };
};
};
}

View file

@ -137,6 +137,7 @@ import nmt {
./modules/services/devilspie2
./modules/services/dropbox
./modules/services/emacs
./modules/services/espanso
./modules/services/flameshot
./modules/services/fluidsynth
./modules/services/fnott

View file

@ -0,0 +1,45 @@
{ ... }:
{
services.espanso = {
enable = true;
settings = {
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"; };
}];
}
];
};
};
test.stubs.espanso = { };
nmt.script = ''
serviceFile=home-files/.config/systemd/user/espanso.service
assertFileExists "$serviceFile"
assertFileContent "$serviceFile" ${./basic-configuration.service}
configFile=home-files/.config/espanso/default.yml
assertFileExists "$configFile"
assertFileContent "$configFile" ${./basic-configuration.yaml}
'';
}

View file

@ -0,0 +1,10 @@
[Install]
WantedBy=default.target
[Service]
ExecStart=@espanso@/bin/espanso daemon
Restart=on-failure
Type=exec
[Unit]
Description=Espanso: cross platform text expander in Rust

View file

@ -0,0 +1,17 @@
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

View file

@ -0,0 +1 @@
{ espanso-basic-configuration = ./basic-configuration.nix; }