diff --git a/modules/programs/screen.nix b/modules/programs/screen.nix new file mode 100644 index 000000000..e3f28924e --- /dev/null +++ b/modules/programs/screen.nix @@ -0,0 +1,55 @@ +{ + lib, + pkgs, + config, + ... +}: +let + inherit (lib) + types + mkIf + mkEnableOption + mkPackageOption + mkOption + ; + + cfg = config.programs.screen; +in +{ + meta.maintainers = with lib.hm.maintainers; [ aguirre-matteo ]; + options.programs.screen = { + enable = mkEnableOption "screen"; + package = mkPackageOption pkgs "screen" { nullable = true; }; + screenrc = mkOption { + type = with types; nullOr (either path lines); + default = null; + example = '' + screen -t rtorrent rtorrent + screen -t irssi irssi + screen -t centerim centerim + screen -t ncmpc ncmpc -c + screen -t bash4 + screen -t bash5 + screen -t bash6 + screen -t bash7 + screen -t bash8 + screen -t bash9 + altscreen on + term screen-256color + bind ',' prev + bind '.' next + ''; + description = '' + Config file for GNU Screen. All the details can be found here: + . + ''; + }; + }; + + config = mkIf cfg.enable { + home.packages = mkIf (cfg.package != null) [ cfg.package ]; + home.file.".screenrc" = mkIf (cfg.screenrc != null) { + source = if lib.isPath cfg.screenrc then cfg.screenrc else pkgs.writeText "screenrc" cfg.screenrc; + }; + }; +} diff --git a/tests/modules/programs/screen/default.nix b/tests/modules/programs/screen/default.nix new file mode 100644 index 000000000..574fee86d --- /dev/null +++ b/tests/modules/programs/screen/default.nix @@ -0,0 +1 @@ +{ screen-settings = ./settings.nix; } diff --git a/tests/modules/programs/screen/screenrc b/tests/modules/programs/screen/screenrc new file mode 100644 index 000000000..fb33699d5 --- /dev/null +++ b/tests/modules/programs/screen/screenrc @@ -0,0 +1,14 @@ +screen -t rtorrent rtorrent +screen -t irssi irssi +screen -t centerim centerim +screen -t ncmpc ncmpc -c +screen -t bash4 +screen -t bash5 +screen -t bash6 +screen -t bash7 +screen -t bash8 +screen -t bash9 +altscreen on +term screen-256color +bind ',' prev +bind '.' next diff --git a/tests/modules/programs/screen/settings.nix b/tests/modules/programs/screen/settings.nix new file mode 100644 index 000000000..45be7ba68 --- /dev/null +++ b/tests/modules/programs/screen/settings.nix @@ -0,0 +1,26 @@ +{ + programs.screen = { + enable = true; + screenrc = '' + screen -t rtorrent rtorrent + screen -t irssi irssi + screen -t centerim centerim + screen -t ncmpc ncmpc -c + screen -t bash4 + screen -t bash5 + screen -t bash6 + screen -t bash7 + screen -t bash8 + screen -t bash9 + altscreen on + term screen-256color + bind ',' prev + bind '.' next + ''; + }; + + nmt.script = '' + assertFileExists home-files/.screenrc + assertFileContent home-files/.screenrc ${./screenrc} + ''; +}