aboutsummaryrefslogtreecommitdiff
path: root/home-manager/modules/programs/irssi.nix
diff options
context:
space:
mode:
authorKatharina Fey <kookie@spacekookie.de>2019-10-05 12:06:29 +0000
committerKatharina Fey <kookie@spacekookie.de>2019-10-05 12:42:50 +0000
commit1148b1d122bc03e9a3665856c9b7bb96bd4e3994 (patch)
tree1a9586de593790e236349d5caa0abdff7f3f6856 /home-manager/modules/programs/irssi.nix
parent919d4e75699aa4ba456fd2d3d416a0522c9c7294 (diff)
parent8bddc1adab0f7a51476f819fa2197353e8e1d136 (diff)
Add 'home-manager/' from commit '8bddc1adab0f7a51476f819fa2197353e8e1d136'
git-subtree-dir: home-manager git-subtree-mainline: 919d4e75699aa4ba456fd2d3d416a0522c9c7294 git-subtree-split: 8bddc1adab0f7a51476f819fa2197353e8e1d136
Diffstat (limited to 'home-manager/modules/programs/irssi.nix')
-rw-r--r--home-manager/modules/programs/irssi.nix211
1 files changed, 211 insertions, 0 deletions
diff --git a/home-manager/modules/programs/irssi.nix b/home-manager/modules/programs/irssi.nix
new file mode 100644
index 00000000000..fc8fa8e6132
--- /dev/null
+++ b/home-manager/modules/programs/irssi.nix
@@ -0,0 +1,211 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ cfg = config.programs.irssi;
+
+ boolStr = b: if b then "yes" else "no";
+ quoteStr = s: escape ["\""] s;
+
+ assignFormat = set:
+ concatStringsSep "\n"
+ (mapAttrsToList (k: v: " ${k} = \"${quoteStr v}\";") set);
+
+ chatnetString =
+ concatStringsSep "\n"
+ (flip mapAttrsToList cfg.networks
+ (k: v: ''
+ ${k} = {
+ type = "${v.type}";
+ nick = "${quoteStr v.nick}";
+ autosendcmd = "${concatMapStringsSep ";" quoteStr v.autoCommands}";
+ };
+ ''));
+
+ serversString =
+ concatStringsSep ",\n"
+ (flip mapAttrsToList cfg.networks
+ (k: v: ''
+ {
+ chatnet = "${k}";
+ address = "${v.server.address}";
+ port = "${toString v.server.port}";
+ use_ssl = "${boolStr v.server.ssl.enable}";
+ ssl_verify = "${boolStr v.server.ssl.verify}";
+ autoconnect = "${boolStr v.server.autoConnect}";
+ }
+ ''));
+
+ channelString =
+ concatStringsSep ",\n"
+ (flip mapAttrsToList cfg.networks
+ (k: v:
+ concatStringsSep ",\n"
+ (flip mapAttrsToList v.channels
+ (c: cv: ''
+ {
+ chatnet = "${k}";
+ name = "${c}";
+ autojoin = "${boolStr cv.autoJoin}";
+ }
+ ''))));
+
+ channelType = types.submodule {
+ options = {
+ name = mkOption {
+ type = types.nullOr types.str;
+ visible = false;
+ default = null;
+ description = "Name of the channel.";
+ };
+
+ autoJoin = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Whether to join this channel on connect.";
+ };
+ };
+ };
+
+ networkType = types.submodule ({ name, ...}: {
+ options = {
+ name = mkOption {
+ visible = false;
+ default = name;
+ type = types.str;
+ };
+
+ nick = mkOption {
+ type = types.str;
+ description = "Nickname in that network.";
+ };
+
+ type = mkOption {
+ type = types.str;
+ description = "Type of the network.";
+ default = "IRC";
+ };
+
+ autoCommands = mkOption {
+ type = types.listOf types.str;
+ default = [];
+ description = "List of commands to execute on connect.";
+ };
+
+ server = {
+ address = mkOption {
+ type = types.str;
+ description = "Address of the chat server.";
+ };
+
+ port = mkOption {
+ type = types.port;
+ default = 6667;
+ description = "Port of the chat server.";
+ };
+
+ ssl = {
+ enable = mkOption {
+ type = types.bool;
+ default = true;
+ description = "Whether SSL should be used.";
+ };
+
+ verify = mkOption {
+ type = types.bool;
+ default = true;
+ description = "Whether the SSL certificate should be verified.";
+ };
+ };
+
+ autoConnect = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Whether Irssi connects to the server on launch.";
+ };
+ };
+
+ channels = mkOption {
+ description = "Channels for the given network.";
+ type = types.attrsOf channelType;
+ default = {};
+ };
+ };
+ });
+
+in
+
+{
+
+ options = {
+ programs.irssi = {
+ enable = mkEnableOption "the Irssi chat client";
+
+ extraConfig = mkOption {
+ default = "";
+ description = "These lines are appended to the Irssi configuration.";
+ type = types.str;
+ };
+
+ aliases = mkOption {
+ default = {};
+ example = { J = "join"; BYE = "quit";};
+ description = "An attribute set that maps aliases to commands.";
+ type = types.attrsOf types.str;
+ };
+
+ networks = mkOption {
+ default = {};
+ example = literalExample ''
+ {
+ freenode = {
+ nick = "hmuser";
+ server = {
+ address = "chat.freenode.net";
+ port = 6697;
+ autoConnect = true;
+ };
+ channels = {
+ nixos.autoJoin = true;
+ };
+ };
+ }
+ '';
+ description = "An attribute set of chat networks.";
+ type = types.attrsOf networkType;
+ };
+ };
+ };
+
+ config = mkIf cfg.enable {
+ home.packages = [ pkgs.irssi ];
+
+ home.file.".irssi/config".text = ''
+ settings = {
+ core = {
+ settings_autosave = "no";
+ };
+ };
+
+ aliases = {
+ ${assignFormat cfg.aliases}
+ };
+
+ chatnets = {
+ ${chatnetString}
+ };
+
+ servers = (
+ ${serversString}
+ );
+
+ channels = (
+ ${channelString}
+ );
+
+ ${cfg.extraConfig}
+ '';
+ };
+}