From 1c5581679fb84a939fbbc88af3624183eaa526e9 Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Mon, 24 Jun 2024 18:20:29 +0200 Subject: [PATCH] Add iamb (tui matrix client) --- home/programs/terminal/tools/default.nix | 1 + home/programs/terminal/tools/iamb.nix | 48 ++++++++++++++++++++++ hosts/voyager/default.nix | 7 ++++ options/home/programs/default.nix | 4 ++ options/home/programs/iamb.nix | 51 ++++++++++++++++++++++++ 5 files changed, 111 insertions(+) create mode 100644 home/programs/terminal/tools/iamb.nix create mode 100644 options/home/programs/iamb.nix diff --git a/home/programs/terminal/tools/default.nix b/home/programs/terminal/tools/default.nix index 6dd48fb..ceff65d 100644 --- a/home/programs/terminal/tools/default.nix +++ b/home/programs/terminal/tools/default.nix @@ -14,5 +14,6 @@ _: { ./bottom.nix ./bat.nix ./nix-index.nix + ./iamb.nix ]; } diff --git a/home/programs/terminal/tools/iamb.nix b/home/programs/terminal/tools/iamb.nix new file mode 100644 index 0000000..31ad96d --- /dev/null +++ b/home/programs/terminal/tools/iamb.nix @@ -0,0 +1,48 @@ +{ + lib, + pkgs, + config, + osConfig, + ... +}: let + inherit (lib) mkIf; + + cfg = osConfig.myOptions.home-manager.programs.applications.iamb; +in { + config = mkIf cfg.enable { + home.packages = with pkgs; [ iamb ]; + + xdg.configFile."iamb/config.json".text = builtins.toJSON { + settings = { + log_level = "warn"; + reaction_display = true; + reaction_shortcode_display = false; + read_receipt_send = false; + read_receipt_display = true; + request_timeout = 15000; + typing_notice_send = true; + typing_notice_display = true; + + image_preview = { + protocol.type = "kitty"; + size = { + width = 80; + height = 24; + }; + }; + }; + + default_profile = cfg.defaultProfile; + profiles = lib.mapAttrs (name: profile: { + user_id = profile.userId; + url = profile.homeServer; + }) cfg.profiles; + + dirs = { + cache = "${config.xdg.cacheHome}/iamb/"; + logs = "${config.xdg.dataHome}/iamb/logs/"; + downloads = "${config.xdg.userDirs.download}/"; + }; + }; + }; +} diff --git a/hosts/voyager/default.nix b/hosts/voyager/default.nix index 3e91cd1..f7ee539 100644 --- a/hosts/voyager/default.nix +++ b/hosts/voyager/default.nix @@ -186,6 +186,13 @@ qimgv.enable = true; qbittorrent.enable = true; obs.enable = true; + iamb = { + enable = true; + profiles.default = { + userId = "@itsdrike:envs.net"; + homeServer = "https://matrix.envs.net"; + }; + }; }; }; diff --git a/options/home/programs/default.nix b/options/home/programs/default.nix index 73ae056..639dcc4 100644 --- a/options/home/programs/default.nix +++ b/options/home/programs/default.nix @@ -2,6 +2,10 @@ inherit (lib) mkEnableOption mkOption types; in { + imports = [ + ./iamb.nix + ]; + options.myOptions.home-manager.programs = { launchers = { wofi.enable = mkEnableOption "Wofi launcher"; diff --git a/options/home/programs/iamb.nix b/options/home/programs/iamb.nix new file mode 100644 index 0000000..fc99bd3 --- /dev/null +++ b/options/home/programs/iamb.nix @@ -0,0 +1,51 @@ +{ + lib, + config, + ... +}: let + inherit (lib) mkEnableOption mkOption types mkIf; + + cfg = config.myOptions.home-manager.programs.applications.iamb; +in +{ + options.myOptions.home-manager.programs.applications.iamb = { + enable = mkEnableOption "iamb (vim-inspired terminal Matrix client)"; + defaultProfile = mkOption { + type = types.str; + default = "default"; + description = "Default profile to be used when the app starts"; + }; + profiles = mkOption { + type = types.attrsOf (types.submodule { + options = { + userId = mkOption { + type = types.str; + example = "@itsdrike:envs.net"; + description = "Your Matrix user ID"; + }; + homeServer = mkOption { + type = types.nullOr types.str; + example = "https://matrix.envs.net"; + default = null; + description = '' + If your homeserver is located on a different domain than the server part + of the `userId`, then you can explicitly specify a homeserver URL to use. + ''; + }; + }; + }); + default = {}; + description = "Profiles for the iamb client, keyed by profile name"; + }; + }; + + config = mkIf cfg.enable { + assertions = [ + { + assertion = builtins.elem cfg.defaultProfile (lib.attrNames cfg.profiles); + message = "Default profile must be present in profiles configuration"; + } + ]; + }; +} +