diff --git a/hosts/common/programs/default.nix b/hosts/common/programs/default.nix index 9240b689..de856fbd 100644 --- a/hosts/common/programs/default.nix +++ b/hosts/common/programs/default.nix @@ -44,6 +44,7 @@ ./newsflash.nix ./nheko.nix ./nix-index.nix + ./ntfy-sh.nix ./obsidian.nix ./offlineimap.nix ./playerctl.nix diff --git a/hosts/common/programs/ntfy-sh.nix b/hosts/common/programs/ntfy-sh.nix new file mode 100644 index 00000000..590f4a9a --- /dev/null +++ b/hosts/common/programs/ntfy-sh.nix @@ -0,0 +1,40 @@ +# notification system, used especially to remotely wake moby +# source: +# docs: +# +# send a test notification with: +# - `ntfy pub "https://ntfy.uninsane.org/$(cat ~/.config/ntfy-sh/topic)" test` +{ config, lib, ... }: +let + cfg = config.sane.programs.ntfy-sh; +in +{ + sane.programs.ntfy-sh = { + configOption = with lib; mkOption { + default = {}; + type = types.submodule { + options.autostart = mkOption { + type = types.bool; + default = true; + }; + }; + }; + + secrets.".config/ntfy-sh/topic" = ../../../secrets/common/ntfy-sh-topic.bin; + + services.ntfy-sub = { + description = "listen for push-notifications"; + wantedBy = lib.mkIf cfg.config.autostart [ "default.target" ]; + path = [ cfg.package ]; + script = '' + topic=$(cat ~/.config/ntfy-sh/topic) + ntfy sub "https://ntfy.uninsane.org/$topic" + ''; + serviceConfig = { + Type = "simple"; + Restart = "always"; + RestartSec = "20s"; + }; + }; + }; +} diff --git a/hosts/modules/gui/default.nix b/hosts/modules/gui/default.nix index 2cbf0fb0..9ebd5935 100644 --- a/hosts/modules/gui/default.nix +++ b/hosts/modules/gui/default.nix @@ -49,6 +49,7 @@ "mepo" # maps viewer "mpv" "networkmanagerapplet" # for nm-connection-editor: it's better than not having any gui! + "ntfy-sh" # notification service # "newsflash" "pavucontrol" # "picard" # music tagging diff --git a/secrets/common/ntfy-sh-topic.bin b/secrets/common/ntfy-sh-topic.bin new file mode 100644 index 00000000..d6ec8b42 --- /dev/null +++ b/secrets/common/ntfy-sh-topic.bin @@ -0,0 +1,48 @@ +{ + "data": "ENC[AES256_GCM,data:deInpJCgj2S9uwCvXDc=,iv:IytIBIPOosPtTjO6LHkW4fPdSmoBGHUTMX8RkPQBVhc=,tag:NDbI+pTY184Y0Njn/Sp+xA==,type:str]", + "sops": { + "kms": null, + "gcp_kms": null, + "azure_kv": null, + "hc_vault": null, + "age": [ + { + "recipient": "age1tnl4jfgacwkargzeqnhzernw29xx8mkv73xh6ufdyde6q7859slsnzf24x", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvN1Nza3hHWm1pVzlpMGxX\nUWZJZUIxZHhRSnh1OXVtRWhEZVYxUGluUEdBCkZlQ1NNTjNLLzQ0MXZseTk3V2ZZ\nWGlSclRsTHBNV1ppVkZHNEpxb1dtQjQKLS0tIGxlUm9NRXA2WHhaYW5LZ2VHbjMy\namJHeFdsaVR2amkrdmo1b1RiL1pDeU0K5E8Ps6QI+8v3X9xJ1gvw7Rp1nv2G0V2i\nlWM0U8KG8qnh8rLf4Izal+68Zpi2MCKQ8cfyCrW/ga+GoxDq6cc+2Q==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1j2pqnl8j0krdzk6npe93s4nnqrzwx978qrc0u570gzlamqpnje9sc8le2g", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnckJVVTdsT1U0ZVU0YVJB\nbGJHeGdJTTlmNy8xdGxGT2hmSWNpeTBWbUNBClNOdkZFL0x0d1NNaHFYZXlIV1g2\nY290dDUxVTBSblA5K2NzZ2pxOEtoZmMKLS0tIEw4YzJDK1lCMENlYW9tRllBZDND\ndUVQbURuSkJxMmRoakdiUDJ2ZzN2aEEKqXLx7YKJJ5/Z7tAkoOHqaMoTOpzHW+bQ\najRypOcADmw82uKq715djN+WAq5Xj8/v+94jBCZFmE0/Z0dSTb6I4w==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1z8fauff34cdecr6sjkre260luzxcca05kpcwvhx988d306tpcejsp63znu", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBqRERDY0QzNkZtUDRMUkJU\nMVdUQ2FFNytKdW55WTdPT0tiV2JaVDNXemlvCjhhV2ZGTEYyU0dYNjdQMnBDMjAx\nMmkvL0JGWGh2UjluSFNZWVMrc1JpWTgKLS0tIGZnU1FOZ253bGFncE5UOXBKMVBz\nUHJ2NGloNjNKNUJha25jdXI3djg5cUkKD+k+RiS7LtDa8JlubZt/Tv3rlegqVjYF\nqlrundR3oVFJ+Y+VZh6a0xAtJexZ5BrdKtCAIgbdKAJUHF8lIB06WQ==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1zsrsvd7j6l62fjxpfd2qnhqlk8wk4p8r0dtxpe4sdgnh2474095qdu7xj9", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDZktDRmpmb3JtVHQ2bUor\nWElQYkdCLzVPYWJUa1VXOThrMVo5SDBKcEFRClhaWHAwZHBaSU53OUsySEUyRG4z\nNS96UFFlSnBTR1EvbFBqOVhISEtXWVUKLS0tIHdKWGp3UmZ4akFwVlNNNnNWU0hH\neUdZUkpMQWMxS2JHUGhWMnBZSHRvZmsKP6Fv+Opk7rNK7SBcqvMgQ0/hfv/PXRYE\nALCySAJpo8oEZ5wVxucJgDsn/1pWWQe7LvownV0ZoVwTe83/Gr7+sQ==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1vnw7lnfpdpjn62l3u5nyv5xt2c965k96p98kc43mcnyzpetrts9q54mc9v", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYM0hnSE4ydTVIbE9aRGtC\nRlIvS1hxZkxLOU9PZ1N6N2N2RzRHWDRpK3hBCjNDVmdwaFY4M05SVy8raENzaFlE\nNVFiMzg0TUF2REdUZHM5N20wWjlHb0EKLS0tIFN1dmdTS2g5ZXZnY2NIWWZ2TS83\nOXZmWTN1aXZONTZ2NTB1endoTmxBYlUKZ6pl9sDpp2puQ8UYZhd0/JmFusTfdbWr\nhxpDyMQ+4kdXztFqVZd3/MRMPGpJrlsMIHsCVdFBu0hquHGZgph9rg==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1w7mectcjku6x3sd8plm8wkn2qfrhv9n6zhzlf329e2r2uycgke8qkf9dyn", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2NFlUYThYU2dDcjZHckJB\nSVB1T0RlZnJRclRtRkt0Y28wMGdIZnl1T1ZNCkxNT2I0SFUrb0dISms3eFJoZnor\nSjdNai9pa0I0aEFNSlFsdnVWSzFnV0EKLS0tIFYrWlM3elVIMkFxdTd6VEJ4UVE2\nVFQ5Si9nUEptV1BZU1pETnVHTk40d2MKDupPEAcm9smyOOCbv9TF74wA+gr2rBAf\nPYoKhUPfa+KkahdUQDu19DPrGHfKgUO44hAR+sMqKPM9+0r72La+BA==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age1tzlyex2z6t88tg9h82943e39shxhmqeyr7ywhlwpdjmyqsndv3qq27x0rf", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAybXFsQTdyV1hpV3lteGxl\ncC95eko1MHoremczOEo0dklHM0FqRlBjdG1RCksxck5kWlp0ZTIxUzAxWGhxdGMv\nUS9LRHc0T0l0NDV2bTVCTkFqTER0Z1kKLS0tIEZXaFBWVU4zOEJSVDRPWlVya1pW\ndEdUbE9WSmZCN01uaTdjekNuSmNOY2cKMIeJFfDJVDJPj7sXWJKRQIEmFrZzPm7f\nmM6F3C1oT5mJF8GSkZ7HMrdbVTi/JL2t7yqZpeC34HMnLXMPHPTayw==\n-----END AGE ENCRYPTED FILE-----\n" + }, + { + "recipient": "age18vq5ktwgeaysucvw9t67drqmg5zd5c5k3le34yqxckkfj7wqdqgsd4ejmt", + "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyaFRxQTZpUUxnZXdKQ3dP\nRUVlNkEwT2N0N1FGbWZDejVLM3dPWks1aVNFCk0vTVU5UjlKWUI5YnhUb2QwK2w1\nYjMvYXA0NnhRczBZWGtZeUxQTkJBdUkKLS0tIEJWcm1OMjdMNm83dllSQW5yRnNl\nRWdudm43eEY4SVdpVkhsWjgwTjlhWlkKSprhV93WhL6uLPeW/dW2ZibXMghLMI9t\nTm50jEzcg+kp7AIxSUOdTjnPM5TG05q8edq1TLYOol+cbh0fPBH02g==\n-----END AGE ENCRYPTED FILE-----\n" + } + ], + "lastmodified": "2023-09-25T16:35:34Z", + "mac": "ENC[AES256_GCM,data:lIcb9Ppvg8Yfzfw+yU3WqDbtUmch5A9cvEOkOvVtSmWfMCxB07mU30lBfXqm5UI5F2Mmv0GrTyVfL3MTpMcQdVlmTfKV/3f3rASNRPU9DzR8XOhxvJTyVu6xXk/aYJvpsgo+usAR5jtur53qwH3lk7dUtXyQJa3DmatDmOhawME=,iv:lEfnN0WkQmBmeJp1/oX89zp/xjLwnlqmXN7T30GteCY=,tag:DSUTSwBdPb3mzys9Chst4Q==,type:str]", + "pgp": null, + "unencrypted_suffix": "_unencrypted", + "version": "3.8.0" + } +} \ No newline at end of file