diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7b409c4fd..2723ed8db 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -365,6 +365,8 @@ Makefile @thiagokokada /modules/services/autorandr.nix @GaetanLepage +/modules/services/avizo.nix @pltanton + /modules/services/barrier.nix @Kritnich /tests/modules/services/barrier @Kritnich diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 4eecb2817..74b877069 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -923,6 +923,14 @@ in A new module is available: 'services.mpd-mpris'. ''; } + + { + time = "2023-02-22T22:16:37+00:00"; + condition = hostPlatform.isLinux; + message = '' + A new module is available: 'services.avizo'. + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index 2a25b8a0b..4110bfa46 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -205,6 +205,7 @@ let ./programs/zsh.nix ./programs/zsh/prezto.nix ./services/autorandr.nix + ./services/avizo.nix ./services/barrier.nix ./services/betterlockscreen.nix ./services/blueman-applet.nix diff --git a/modules/services/avizo.nix b/modules/services/avizo.nix new file mode 100644 index 000000000..11d7d7524 --- /dev/null +++ b/modules/services/avizo.nix @@ -0,0 +1,75 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.avizo; + settingsFormat = pkgs.formats.ini { }; +in { + meta.maintainers = [ hm.maintainers.pltanton ]; + + options.services.avizo = { + enable = mkEnableOption "avizo, a simple notification daemon"; + + settings = mkOption { + type = (pkgs.formats.ini { }).type; + default = { }; + example = literalExpression '' + { + default = { + time = 1.0; + y-offset = 0.5; + fade-in = 0.1; + fade-out = 0.2; + padding = 10; + }; + } + ''; + description = '' + The settings that will be written to the avizo configuration file. + ''; + }; + + package = mkOption { + type = types.package; + default = pkgs.avizo; + defaultText = literalExpression "pkgs.avizo"; + example = literalExpression '' + pkgs.avizo.overrideAttrs (final: prev: { + patchPhase = "cp ''${./images}/*.png data/images/"; + }) + ''; + description = "The avizo package to use."; + }; + }; + + config = mkIf cfg.enable { + assertions = + [ (hm.assertions.assertPlatform "services.avizo" pkgs platforms.linux) ]; + + home.packages = [ cfg.package ]; + + xdg.configFile."avizo/config.ini".source = + settingsFormat.generate "avizo-config.ini" cfg.settings; + + systemd.user = { + services.avizo = { + Unit = { + Description = "Volume/backlight OSD indicator"; + PartOf = [ "graphical-session.target" ]; + After = [ "graphical-session.target" ]; + ConditionEnvironment = "WAYLAND_DISPLAY"; + Documentation = "man:avizo(1)"; + }; + + Service = { + Type = "simple"; + ExecStart = "${cfg.package}/bin/avizo-service"; + Restart = "always"; + }; + + Install = { WantedBy = [ "graphical-session.target" ]; }; + }; + }; + }; +}