aboutsummaryrefslogtreecommitdiff
path: root/home-manager/tests/modules/programs
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/tests/modules/programs
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/tests/modules/programs')
-rw-r--r--home-manager/tests/modules/programs/alacritty/default.nix4
-rw-r--r--home-manager/tests/modules/programs/alacritty/empty-settings.nix13
-rw-r--r--home-manager/tests/modules/programs/alacritty/example-settings-expected.yml1
-rw-r--r--home-manager/tests/modules/programs/alacritty/example-settings.nix32
-rw-r--r--home-manager/tests/modules/programs/bash/default.nix4
-rw-r--r--home-manager/tests/modules/programs/bash/logout-expected.txt4
-rw-r--r--home-manager/tests/modules/programs/bash/logout.nix22
-rw-r--r--home-manager/tests/modules/programs/bash/session-variables-expected.txt8
-rw-r--r--home-manager/tests/modules/programs/bash/session-variables.nix28
-rw-r--r--home-manager/tests/modules/programs/browserpass.nix35
-rw-r--r--home-manager/tests/modules/programs/firefox/default.nix4
-rw-r--r--home-manager/tests/modules/programs/firefox/profile-settings-expected-user.js6
-rw-r--r--home-manager/tests/modules/programs/firefox/profile-settings.nix24
-rw-r--r--home-manager/tests/modules/programs/firefox/state-version-19_09.nix17
-rw-r--r--home-manager/tests/modules/programs/getmail-expected.conf15
-rw-r--r--home-manager/tests/modules/programs/getmail.nix26
-rw-r--r--home-manager/tests/modules/programs/git-expected.conf42
-rw-r--r--home-manager/tests/modules/programs/git-with-email-expected.conf15
-rw-r--r--home-manager/tests/modules/programs/git-with-email.nix33
-rw-r--r--home-manager/tests/modules/programs/git-with-str-extra-config-expected.conf5
-rw-r--r--home-manager/tests/modules/programs/git-with-str-extra-config.nix22
-rw-r--r--home-manager/tests/modules/programs/git.nix74
-rw-r--r--home-manager/tests/modules/programs/gpg/default.nix3
-rw-r--r--home-manager/tests/modules/programs/gpg/override-defaults-expected.conf19
-rw-r--r--home-manager/tests/modules/programs/gpg/override-defaults.nix22
-rw-r--r--home-manager/tests/modules/programs/mbsync-expected.conf55
-rw-r--r--home-manager/tests/modules/programs/mbsync.nix35
-rw-r--r--home-manager/tests/modules/programs/rofi/assert-on-both-theme-and-colors-expected.json1
-rw-r--r--home-manager/tests/modules/programs/rofi/assert-on-both-theme-and-colors.nix33
-rw-r--r--home-manager/tests/modules/programs/rofi/default.nix3
-rw-r--r--home-manager/tests/modules/programs/ssh/default-config-expected.conf15
-rw-r--r--home-manager/tests/modules/programs/ssh/default-config.nix23
-rw-r--r--home-manager/tests/modules/programs/ssh/default.nix17
-rw-r--r--home-manager/tests/modules/programs/ssh/forwards-dynamic-bind-path-with-port-asserts.nix32
-rw-r--r--home-manager/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts-expected.conf19
-rw-r--r--home-manager/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts.nix45
-rw-r--r--home-manager/tests/modules/programs/ssh/forwards-local-bind-path-with-port-asserts.nix36
-rw-r--r--home-manager/tests/modules/programs/ssh/forwards-local-host-path-with-port-asserts.nix36
-rw-r--r--home-manager/tests/modules/programs/ssh/forwards-paths-with-ports-error.json1
-rw-r--r--home-manager/tests/modules/programs/ssh/forwards-remote-bind-path-with-port-asserts.nix36
-rw-r--r--home-manager/tests/modules/programs/ssh/forwards-remote-host-path-with-port-asserts.nix36
-rw-r--r--home-manager/tests/modules/programs/ssh/match-blocks-attrs-expected.conf29
-rw-r--r--home-manager/tests/modules/programs/ssh/match-blocks-attrs.nix64
-rw-r--r--home-manager/tests/modules/programs/ssh/no-assertions.json1
-rw-r--r--home-manager/tests/modules/programs/texlive-minimal.nix13
-rw-r--r--home-manager/tests/modules/programs/tmux/default.nix7
-rw-r--r--home-manager/tests/modules/programs/tmux/disable-confirmation-prompt.conf31
-rw-r--r--home-manager/tests/modules/programs/tmux/disable-confirmation-prompt.nix28
-rw-r--r--home-manager/tests/modules/programs/tmux/emacs-with-plugins.conf54
-rw-r--r--home-manager/tests/modules/programs/tmux/emacs-with-plugins.nix41
-rw-r--r--home-manager/tests/modules/programs/tmux/hm-session-vars.sh5
-rw-r--r--home-manager/tests/modules/programs/tmux/not-enabled.nix13
-rw-r--r--home-manager/tests/modules/programs/tmux/secure-socket-enabled.nix17
-rw-r--r--home-manager/tests/modules/programs/tmux/vi-all-true.conf31
-rw-r--r--home-manager/tests/modules/programs/tmux/vi-all-true.nix30
-rw-r--r--home-manager/tests/modules/programs/zsh/default.nix3
-rw-r--r--home-manager/tests/modules/programs/zsh/session-variables.nix22
57 files changed, 1290 insertions, 0 deletions
diff --git a/home-manager/tests/modules/programs/alacritty/default.nix b/home-manager/tests/modules/programs/alacritty/default.nix
new file mode 100644
index 00000000000..f63e033d846
--- /dev/null
+++ b/home-manager/tests/modules/programs/alacritty/default.nix
@@ -0,0 +1,4 @@
+{
+ alacritty-example-settings = ./example-settings.nix;
+ alacritty-empty-settings = ./empty-settings.nix;
+}
diff --git a/home-manager/tests/modules/programs/alacritty/empty-settings.nix b/home-manager/tests/modules/programs/alacritty/empty-settings.nix
new file mode 100644
index 00000000000..f3f8486ad3d
--- /dev/null
+++ b/home-manager/tests/modules/programs/alacritty/empty-settings.nix
@@ -0,0 +1,13 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.alacritty.enable = true;
+
+ nmt.script = ''
+ assertPathNotExists home-files/.config/alacritty
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/alacritty/example-settings-expected.yml b/home-manager/tests/modules/programs/alacritty/example-settings-expected.yml
new file mode 100644
index 00000000000..061624192c3
--- /dev/null
+++ b/home-manager/tests/modules/programs/alacritty/example-settings-expected.yml
@@ -0,0 +1 @@
+{"key_bindings":[{"chars":"\x0c","key":"K","mods":"Control"}],"window":{"dimensions":{"columns":200,"lines":3}}} \ No newline at end of file
diff --git a/home-manager/tests/modules/programs/alacritty/example-settings.nix b/home-manager/tests/modules/programs/alacritty/example-settings.nix
new file mode 100644
index 00000000000..2c84710d100
--- /dev/null
+++ b/home-manager/tests/modules/programs/alacritty/example-settings.nix
@@ -0,0 +1,32 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.alacritty = {
+ enable = true;
+
+ settings = {
+ window.dimensions = {
+ lines = 3;
+ columns = 200;
+ };
+
+ key_bindings = [
+ {
+ key = "K";
+ mods = "Control";
+ chars = "\\x0c";
+ }
+ ];
+ };
+ };
+
+ nmt.script = ''
+ assertFileContent \
+ home-files/.config/alacritty/alacritty.yml \
+ ${./example-settings-expected.yml}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/bash/default.nix b/home-manager/tests/modules/programs/bash/default.nix
new file mode 100644
index 00000000000..e9f431cd2b9
--- /dev/null
+++ b/home-manager/tests/modules/programs/bash/default.nix
@@ -0,0 +1,4 @@
+{
+ bash-logout = ./logout.nix;
+ bash-session-variables = ./session-variables.nix;
+}
diff --git a/home-manager/tests/modules/programs/bash/logout-expected.txt b/home-manager/tests/modules/programs/bash/logout-expected.txt
new file mode 100644
index 00000000000..9462f58f732
--- /dev/null
+++ b/home-manager/tests/modules/programs/bash/logout-expected.txt
@@ -0,0 +1,4 @@
+# -*- mode: sh -*-
+
+clear-console
+
diff --git a/home-manager/tests/modules/programs/bash/logout.nix b/home-manager/tests/modules/programs/bash/logout.nix
new file mode 100644
index 00000000000..8f96dc7e1ae
--- /dev/null
+++ b/home-manager/tests/modules/programs/bash/logout.nix
@@ -0,0 +1,22 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.bash = {
+ enable = true;
+
+ logoutExtra = ''
+ clear-console
+ '';
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.bash_logout
+ assertFileContent \
+ home-files/.bash_logout \
+ ${./logout-expected.txt}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/bash/session-variables-expected.txt b/home-manager/tests/modules/programs/bash/session-variables-expected.txt
new file mode 100644
index 00000000000..c586477ec4d
--- /dev/null
+++ b/home-manager/tests/modules/programs/bash/session-variables-expected.txt
@@ -0,0 +1,8 @@
+# -*- mode: sh -*-
+
+. "@homeDirectory@/.nix-profile/etc/profile.d/hm-session-vars.sh"
+
+export V1="v1"
+export V2="v2-v1"
+
+
diff --git a/home-manager/tests/modules/programs/bash/session-variables.nix b/home-manager/tests/modules/programs/bash/session-variables.nix
new file mode 100644
index 00000000000..a7a69a2a1f8
--- /dev/null
+++ b/home-manager/tests/modules/programs/bash/session-variables.nix
@@ -0,0 +1,28 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.bash = {
+ enable = true;
+
+ sessionVariables = {
+ V1 = "v1";
+ V2 = "v2-${config.programs.bash.sessionVariables.V1}";
+ };
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.profile
+ assertFileContent \
+ home-files/.profile \
+ ${
+ pkgs.substituteAll {
+ src = ./session-variables-expected.txt;
+ inherit (config.home) homeDirectory;
+ }
+ }
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/browserpass.nix b/home-manager/tests/modules/programs/browserpass.nix
new file mode 100644
index 00000000000..229392e171b
--- /dev/null
+++ b/home-manager/tests/modules/programs/browserpass.nix
@@ -0,0 +1,35 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.browserpass = {
+ enable = true;
+ browsers = [
+ "chrome"
+ "chromium"
+ "firefox"
+ "vivaldi"
+ ];
+ };
+
+ nmt.script =
+ if pkgs.stdenv.hostPlatform.isDarwin then ''
+ for dir in "Google/Chrome" "Chromium" "Mozilla" "Vivaldi"; do
+ assertFileExists "home-files/Library/Application Support/$dir/NativeMessagingHosts/com.github.browserpass.native.json"
+ done
+
+ for dir in "Google/Chrome" "Chromium" "Vivaldi"; do
+ assertFileExists "home-files/Library/Application Support/$dir/policies/managed/com.github.browserpass.native.json"
+ done
+ '' else ''
+ for dir in "google-chrome" "chromium" "vivaldi"; do
+ assertFileExists "home-files/.config/$dir/NativeMessagingHosts/com.github.browserpass.native.json"
+ assertFileExists "home-files/.config/$dir/policies/managed/com.github.browserpass.native.json"
+ done
+
+ assertFileExists "home-files/.mozilla/native-messaging-hosts/com.github.browserpass.native.json"
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/firefox/default.nix b/home-manager/tests/modules/programs/firefox/default.nix
new file mode 100644
index 00000000000..6612a9ac978
--- /dev/null
+++ b/home-manager/tests/modules/programs/firefox/default.nix
@@ -0,0 +1,4 @@
+{
+ firefox-profile-settings = ./profile-settings.nix;
+ firefox-state-version-19_09 = ./state-version-19_09.nix;
+}
diff --git a/home-manager/tests/modules/programs/firefox/profile-settings-expected-user.js b/home-manager/tests/modules/programs/firefox/profile-settings-expected-user.js
new file mode 100644
index 00000000000..0edd47b9101
--- /dev/null
+++ b/home-manager/tests/modules/programs/firefox/profile-settings-expected-user.js
@@ -0,0 +1,6 @@
+// Generated by Home Manager.
+
+user_pref("general.smoothScroll", false);
+
+
+
diff --git a/home-manager/tests/modules/programs/firefox/profile-settings.nix b/home-manager/tests/modules/programs/firefox/profile-settings.nix
new file mode 100644
index 00000000000..45465b1d0bf
--- /dev/null
+++ b/home-manager/tests/modules/programs/firefox/profile-settings.nix
@@ -0,0 +1,24 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.firefox = {
+ enable = true;
+ profiles.test.settings = {
+ "general.smoothScroll" = false;
+ };
+ };
+
+ nmt.script = ''
+ assertFileRegex \
+ home-path/bin/firefox \
+ MOZ_APP_LAUNCHER
+
+ assertFileContent \
+ home-files/.mozilla/firefox/test/user.js \
+ ${./profile-settings-expected-user.js}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/firefox/state-version-19_09.nix b/home-manager/tests/modules/programs/firefox/state-version-19_09.nix
new file mode 100644
index 00000000000..0c93096190e
--- /dev/null
+++ b/home-manager/tests/modules/programs/firefox/state-version-19_09.nix
@@ -0,0 +1,17 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ home.stateVersion = "19.09";
+
+ programs.firefox.enable = true;
+
+ nmt.script = ''
+ assertFileRegex \
+ home-path/bin/firefox \
+ MOZ_APP_LAUNCHER
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/getmail-expected.conf b/home-manager/tests/modules/programs/getmail-expected.conf
new file mode 100644
index 00000000000..da54e709236
--- /dev/null
+++ b/home-manager/tests/modules/programs/getmail-expected.conf
@@ -0,0 +1,15 @@
+# Generated by Home-Manager.
+[retriever]
+type = SimpleIMAPSSLRetriever
+server = imap.example.com
+username = home.manager
+password_command = ('password-command')
+mailboxes = ( 'INBOX', 'Sent', 'Work' )
+
+[destination]
+type = MDA_external
+path = /bin/maildrop
+
+[options]
+delete = false
+read_all = true
diff --git a/home-manager/tests/modules/programs/getmail.nix b/home-manager/tests/modules/programs/getmail.nix
new file mode 100644
index 00000000000..12806c25679
--- /dev/null
+++ b/home-manager/tests/modules/programs/getmail.nix
@@ -0,0 +1,26 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ imports = [ ../accounts/email-test-accounts.nix ];
+
+ config = {
+ home.username = "hm-user";
+ home.homeDirectory = "/home/hm-user";
+
+ accounts.email.accounts = {
+ "hm@example.com".getmail = {
+ enable = true;
+ mailboxes = ["INBOX" "Sent" "Work"];
+ destinationCommand = "/bin/maildrop";
+ delete = false;
+ };
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.getmail/getmailhm@example.com
+ assertFileContent home-files/.getmail/getmailhm@example.com ${./getmail-expected.conf}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/git-expected.conf b/home-manager/tests/modules/programs/git-expected.conf
new file mode 100644
index 00000000000..d02ebf31649
--- /dev/null
+++ b/home-manager/tests/modules/programs/git-expected.conf
@@ -0,0 +1,42 @@
+[alias]
+a1=foo
+a2=baz
+
+[commit]
+gpgSign=true
+
+[extra]
+boolean=true
+integer=38
+multiple=1
+multiple=2
+name=value
+
+[extra "backcompat.with.dots"]
+previously=worked
+
+[extra "subsection"]
+value=test
+
+[filter "lfs"]
+clean=git-lfs clean -- %f
+process=git-lfs filter-process
+required=true
+smudge=git-lfs smudge -- %f
+
+[gpg]
+program=path-to-gpg
+
+[user]
+email=user@example.org
+name=John Doe
+signingKey=00112233445566778899AABBCCDDEEFF
+
+[include]
+path=~/path/to/config.inc
+
+[includeIf "gitdir:~/src/dir"]
+path=~/path/to/conditional.inc
+
+[includeIf "gitdir:~/src/dir"]
+path=@git_include_path@
diff --git a/home-manager/tests/modules/programs/git-with-email-expected.conf b/home-manager/tests/modules/programs/git-with-email-expected.conf
new file mode 100644
index 00000000000..01c1eec5823
--- /dev/null
+++ b/home-manager/tests/modules/programs/git-with-email-expected.conf
@@ -0,0 +1,15 @@
+[sendemail "hm-account"]
+from=hm@example.org
+smtpEncryption=tls
+smtpServer=smtp.example.org
+smtpUser=home.manager.jr
+
+[sendemail "hm@example.com"]
+from=hm@example.com
+smtpEncryption=tls
+smtpServer=smtp.example.com
+smtpUser=home.manager
+
+[user]
+email=hm@example.com
+name=H. M. Test
diff --git a/home-manager/tests/modules/programs/git-with-email.nix b/home-manager/tests/modules/programs/git-with-email.nix
new file mode 100644
index 00000000000..f8a762dcceb
--- /dev/null
+++ b/home-manager/tests/modules/programs/git-with-email.nix
@@ -0,0 +1,33 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ imports = [ ../accounts/email-test-accounts.nix ];
+
+ config = {
+ programs.git = {
+ enable = true;
+ userEmail = "hm@example.com";
+ userName = "H. M. Test";
+ };
+
+ nmt.script = ''
+ function assertGitConfig() {
+ local value
+ value=$(${pkgs.git}/bin/git config \
+ --file $TESTED/home-files/.config/git/config \
+ --get $1)
+ if [[ $value != $2 ]]; then
+ fail "Expected option '$1' to have value '$2' but it was '$value'"
+ fi
+ }
+
+ assertFileExists home-files/.config/git/config
+ assertFileContent home-files/.config/git/config ${./git-with-email-expected.conf}
+
+ assertGitConfig "sendemail.hm@example.com.from" "hm@example.com"
+ assertGitConfig "sendemail.hm-account.from" "hm@example.org"
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/git-with-str-extra-config-expected.conf b/home-manager/tests/modules/programs/git-with-str-extra-config-expected.conf
new file mode 100644
index 00000000000..957438de13a
--- /dev/null
+++ b/home-manager/tests/modules/programs/git-with-str-extra-config-expected.conf
@@ -0,0 +1,5 @@
+This can be anything.
+
+[user]
+email=user@example.org
+name=John Doe
diff --git a/home-manager/tests/modules/programs/git-with-str-extra-config.nix b/home-manager/tests/modules/programs/git-with-str-extra-config.nix
new file mode 100644
index 00000000000..734c5ee764c
--- /dev/null
+++ b/home-manager/tests/modules/programs/git-with-str-extra-config.nix
@@ -0,0 +1,22 @@
+{ config, lib, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.git = {
+ enable = true;
+ extraConfig = ''
+ This can be anything.
+ '';
+ userEmail = "user@example.org";
+ userName = "John Doe";
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.config/git/config
+ assertFileContent home-files/.config/git/config \
+ ${./git-with-str-extra-config-expected.conf}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/git.nix b/home-manager/tests/modules/programs/git.nix
new file mode 100644
index 00000000000..c5203e417dc
--- /dev/null
+++ b/home-manager/tests/modules/programs/git.nix
@@ -0,0 +1,74 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ gitInclude = {
+ user = {
+ name = "John Doe";
+ email = "user@example.org";
+ };
+ };
+
+ substituteExpected = path: pkgs.substituteAll {
+ src = path;
+
+ git_include_path = pkgs.writeText "contents" (generators.toINI {} gitInclude);
+ };
+
+in
+
+{
+ config = {
+ programs.git = mkMerge [
+ {
+ enable = true;
+ aliases = {
+ a1 = "foo";
+ a2 = "bar";
+ };
+ extraConfig = {
+ extra = {
+ name = "value";
+ multiple = [1];
+ };
+ };
+ ignores = [ "*~" "*.swp" ];
+ includes = [
+ { path = "~/path/to/config.inc"; }
+ {
+ path = "~/path/to/conditional.inc";
+ condition = "gitdir:~/src/dir";
+ }
+ {
+ condition = "gitdir:~/src/dir";
+ contents = gitInclude;
+ }
+ ];
+ signing = {
+ gpgPath = "path-to-gpg";
+ key = "00112233445566778899AABBCCDDEEFF";
+ signByDefault = true;
+ };
+ userEmail = "user@example.org";
+ userName = "John Doe";
+ lfs.enable = true;
+ }
+
+ {
+ aliases.a2 = mkForce "baz";
+ extraConfig."extra \"backcompat.with.dots\"".previously = "worked";
+ extraConfig.extra.boolean = true;
+ extraConfig.extra.integer = 38;
+ extraConfig.extra.multiple = [2];
+ extraConfig.extra.subsection.value = "test";
+ }
+ ];
+
+ nmt.script = ''
+ assertFileExists home-files/.config/git/config
+ assertFileContent home-files/.config/git/config ${substituteExpected ./git-expected.conf}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/gpg/default.nix b/home-manager/tests/modules/programs/gpg/default.nix
new file mode 100644
index 00000000000..5cb24817cb0
--- /dev/null
+++ b/home-manager/tests/modules/programs/gpg/default.nix
@@ -0,0 +1,3 @@
+{
+ gpg-override-defaults = ./override-defaults.nix;
+}
diff --git a/home-manager/tests/modules/programs/gpg/override-defaults-expected.conf b/home-manager/tests/modules/programs/gpg/override-defaults-expected.conf
new file mode 100644
index 00000000000..3198183f723
--- /dev/null
+++ b/home-manager/tests/modules/programs/gpg/override-defaults-expected.conf
@@ -0,0 +1,19 @@
+cert-digest-algo SHA512
+charset utf-8
+default-preference-list SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed
+fixed-list-mode
+keyid-format 0xlong
+list-options show-uid-validity
+
+no-emit-version
+no-symkey-cache
+personal-cipher-preferences AES256 AES192 AES
+personal-compress-preferences ZLIB BZIP2 ZIP Uncompressed
+personal-digest-preferences SHA512 SHA384 SHA256
+require-cross-certification
+s2k-cipher-algo AES128
+s2k-digest-algo SHA512
+throw-keyids
+use-agent
+verify-options show-uid-validity
+with-fingerprint \ No newline at end of file
diff --git a/home-manager/tests/modules/programs/gpg/override-defaults.nix b/home-manager/tests/modules/programs/gpg/override-defaults.nix
new file mode 100644
index 00000000000..850334dc589
--- /dev/null
+++ b/home-manager/tests/modules/programs/gpg/override-defaults.nix
@@ -0,0 +1,22 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.gpg = {
+ enable = true;
+
+ settings = {
+ no-comments = false;
+ s2k-cipher-algo = "AES128";
+ throw-keyids = true;
+ };
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.gnupg/gpg.conf
+ assertFileContent home-files/.gnupg/gpg.conf ${./override-defaults-expected.conf}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/mbsync-expected.conf b/home-manager/tests/modules/programs/mbsync-expected.conf
new file mode 100644
index 00000000000..f1ca79fe738
--- /dev/null
+++ b/home-manager/tests/modules/programs/mbsync-expected.conf
@@ -0,0 +1,55 @@
+# Generated by Home Manager.
+
+IMAPAccount hm-account
+CertificateFile /etc/ssl/certs/ca-certificates.crt
+Host imap.example.org
+PassCmd "password-command 2"
+SSLType IMAPS
+User home.manager.jr
+
+IMAPStore hm-account-remote
+Account hm-account
+
+MaildirStore hm-account-local
+Inbox /home/hm-user/Mail/hm-account/Inbox
+Path /home/hm-user/Mail/hm-account/
+SubFolders Verbatim
+
+Channel hm-account
+Create None
+Expunge None
+Master :hm-account-remote:
+Patterns *
+Remove None
+Slave :hm-account-local:
+SyncState *
+
+
+IMAPAccount hm@example.com
+CertificateFile /etc/ssl/certs/ca-certificates.crt
+Host imap.example.com
+PassCmd password-command
+SSLType IMAPS
+User home.manager
+
+IMAPStore hm@example.com-remote
+Account hm@example.com
+
+MaildirStore hm@example.com-local
+Inbox /home/hm-user/Mail/hm@example.com/Inbox
+Path /home/hm-user/Mail/hm@example.com/
+SubFolders Verbatim
+
+Channel hm@example.com
+Create None
+Expunge None
+Master :hm@example.com-remote:
+Patterns *
+Remove None
+Slave :hm@example.com-local:
+SyncState *
+
+
+Group inboxes
+Channel hm-account:Inbox
+Channel hm@example.com:Inbox1,Inbox2
diff --git a/home-manager/tests/modules/programs/mbsync.nix b/home-manager/tests/modules/programs/mbsync.nix
new file mode 100644
index 00000000000..fa9768a2fe1
--- /dev/null
+++ b/home-manager/tests/modules/programs/mbsync.nix
@@ -0,0 +1,35 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ imports = [ ../accounts/email-test-accounts.nix ];
+
+ config = {
+ home.username = "hm-user";
+ home.homeDirectory = "/home/hm-user";
+
+ programs.mbsync = {
+ enable = true;
+ groups.inboxes = {
+ "hm@example.com" = [ "Inbox1" "Inbox2" ];
+ hm-account = [ "Inbox" ];
+ };
+ };
+
+ accounts.email.accounts = {
+ "hm@example.com".mbsync = {
+ enable = true;
+ };
+
+ hm-account.mbsync = {
+ enable = true;
+ };
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.mbsyncrc
+ assertFileContent home-files/.mbsyncrc ${./mbsync-expected.conf}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/rofi/assert-on-both-theme-and-colors-expected.json b/home-manager/tests/modules/programs/rofi/assert-on-both-theme-and-colors-expected.json
new file mode 100644
index 00000000000..808288f4193
--- /dev/null
+++ b/home-manager/tests/modules/programs/rofi/assert-on-both-theme-and-colors-expected.json
@@ -0,0 +1 @@
+["Cannot use the rofi options 'theme' and 'colors' simultaneously.\n"] \ No newline at end of file
diff --git a/home-manager/tests/modules/programs/rofi/assert-on-both-theme-and-colors.nix b/home-manager/tests/modules/programs/rofi/assert-on-both-theme-and-colors.nix
new file mode 100644
index 00000000000..2558a25832f
--- /dev/null
+++ b/home-manager/tests/modules/programs/rofi/assert-on-both-theme-and-colors.nix
@@ -0,0 +1,33 @@
+{ config, lib, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.rofi = {
+ enable = true;
+ theme = "foo";
+ colors = {
+ window = {
+ background = "background";
+ border = "border";
+ separator = "separator";
+ };
+ rows = {
+ };
+ };
+ };
+
+ home.file.result.text =
+ builtins.toJSON
+ (map (a: a.message)
+ (filter (a: !a.assertion)
+ config.assertions));
+
+ nmt.script = ''
+ assertFileContent \
+ home-files/result \
+ ${./assert-on-both-theme-and-colors-expected.json}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/rofi/default.nix b/home-manager/tests/modules/programs/rofi/default.nix
new file mode 100644
index 00000000000..b42b43e949a
--- /dev/null
+++ b/home-manager/tests/modules/programs/rofi/default.nix
@@ -0,0 +1,3 @@
+{
+ rofi-assert-on-both-theme-and-colors = import ./assert-on-both-theme-and-colors.nix;
+}
diff --git a/home-manager/tests/modules/programs/ssh/default-config-expected.conf b/home-manager/tests/modules/programs/ssh/default-config-expected.conf
new file mode 100644
index 00000000000..55748ea6c82
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/default-config-expected.conf
@@ -0,0 +1,15 @@
+
+
+
+
+Host *
+ ForwardAgent no
+ Compression no
+ ServerAliveInterval 0
+ HashKnownHosts no
+ UserKnownHostsFile ~/.ssh/known_hosts
+ ControlMaster no
+ ControlPath ~/.ssh/master-%r@%n:%p
+ ControlPersist no
+
+
diff --git a/home-manager/tests/modules/programs/ssh/default-config.nix b/home-manager/tests/modules/programs/ssh/default-config.nix
new file mode 100644
index 00000000000..266bc9d1f5d
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/default-config.nix
@@ -0,0 +1,23 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.ssh = {
+ enable = true;
+ };
+
+ home.file.assertions.text =
+ builtins.toJSON
+ (map (a: a.message)
+ (filter (a: !a.assertion)
+ config.assertions));
+
+ nmt.script = ''
+ assertFileExists home-files/.ssh/config
+ assertFileContent home-files/.ssh/config ${./default-config-expected.conf}
+ assertFileContent home-files/assertions ${./no-assertions.json}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/ssh/default.nix b/home-manager/tests/modules/programs/ssh/default.nix
new file mode 100644
index 00000000000..507eef0bdb8
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/default.nix
@@ -0,0 +1,17 @@
+{
+ ssh-defaults = ./default-config.nix;
+ ssh-match-blocks = ./match-blocks-attrs.nix;
+
+ ssh-forwards-dynamic-valid-bind-no-asserts =
+ ./forwards-dynamic-valid-bind-no-asserts.nix;
+ ssh-forwards-dynamic-bind-path-with-port-asserts =
+ ./forwards-dynamic-bind-path-with-port-asserts.nix;
+ ssh-forwards-local-bind-path-with-port-asserts =
+ ./forwards-local-bind-path-with-port-asserts.nix;
+ ssh-forwards-local-host-path-with-port-asserts =
+ ./forwards-local-host-path-with-port-asserts.nix;
+ ssh-forwards-remote-bind-path-with-port-asserts =
+ ./forwards-remote-bind-path-with-port-asserts.nix;
+ ssh-forwards-remote-host-path-with-port-asserts =
+ ./forwards-remote-host-path-with-port-asserts.nix;
+}
diff --git a/home-manager/tests/modules/programs/ssh/forwards-dynamic-bind-path-with-port-asserts.nix b/home-manager/tests/modules/programs/ssh/forwards-dynamic-bind-path-with-port-asserts.nix
new file mode 100644
index 00000000000..2e9082de378
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/forwards-dynamic-bind-path-with-port-asserts.nix
@@ -0,0 +1,32 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.ssh = {
+ enable = true;
+ matchBlocks = {
+ dynamicBindPathWithPort = {
+ dynamicForwards = [
+ {
+ # Error:
+ address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+ port = 3000;
+ }
+ ];
+ };
+ };
+ };
+
+ home.file.result.text =
+ builtins.toJSON
+ (map (a: a.message)
+ (filter (a: !a.assertion)
+ config.assertions));
+
+ nmt.script = ''
+ assertFileContent home-files/result ${./forwards-paths-with-ports-error.json}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts-expected.conf b/home-manager/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts-expected.conf
new file mode 100644
index 00000000000..5213d282c28
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts-expected.conf
@@ -0,0 +1,19 @@
+
+
+Host dynamicBindAddressWithPort
+ DynamicForward [127.0.0.1]:3000
+
+Host dynamicBindPathNoPort
+ DynamicForward /run/user/1000/gnupg/S.gpg-agent.extra
+
+Host *
+ ForwardAgent no
+ Compression no
+ ServerAliveInterval 0
+ HashKnownHosts no
+ UserKnownHostsFile ~/.ssh/known_hosts
+ ControlMaster no
+ ControlPath ~/.ssh/master-%r@%n:%p
+ ControlPersist no
+
+
diff --git a/home-manager/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts.nix b/home-manager/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts.nix
new file mode 100644
index 00000000000..15ab59e82ca
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/forwards-dynamic-valid-bind-no-asserts.nix
@@ -0,0 +1,45 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.ssh = {
+ enable = true;
+ matchBlocks = {
+ dynamicBindPathNoPort = {
+ dynamicForwards = [
+ {
+ # OK:
+ address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+ }
+ ];
+ };
+
+ dynamicBindAddressWithPort = {
+ dynamicForwards = [
+ {
+ # OK:
+ address = "127.0.0.1";
+ port = 3000;
+ }
+ ];
+ };
+ };
+ };
+
+ home.file.result.text =
+ builtins.toJSON
+ (map (a: a.message)
+ (filter (a: !a.assertion)
+ config.assertions));
+
+ nmt.script = ''
+ assertFileExists home-files/.ssh/config
+ assertFileContent \
+ home-files/.ssh/config \
+ ${./forwards-dynamic-valid-bind-no-asserts-expected.conf}
+ assertFileContent home-files/result ${./no-assertions.json}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/ssh/forwards-local-bind-path-with-port-asserts.nix b/home-manager/tests/modules/programs/ssh/forwards-local-bind-path-with-port-asserts.nix
new file mode 100644
index 00000000000..c05cba82791
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/forwards-local-bind-path-with-port-asserts.nix
@@ -0,0 +1,36 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.ssh = {
+ enable = true;
+ matchBlocks = {
+ localBindPathWithPort = {
+ localForwards = [
+ {
+ # OK:
+ host.address = "127.0.0.1";
+ host.port = 3000;
+
+ # Error:
+ bind.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+ bind.port = 3000;
+ }
+ ];
+ };
+ };
+ };
+
+ home.file.result.text =
+ builtins.toJSON
+ (map (a: a.message)
+ (filter (a: !a.assertion)
+ config.assertions));
+
+ nmt.script = ''
+ assertFileContent home-files/result ${./forwards-paths-with-ports-error.json}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/ssh/forwards-local-host-path-with-port-asserts.nix b/home-manager/tests/modules/programs/ssh/forwards-local-host-path-with-port-asserts.nix
new file mode 100644
index 00000000000..8cecc5e5121
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/forwards-local-host-path-with-port-asserts.nix
@@ -0,0 +1,36 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.ssh = {
+ enable = true;
+ matchBlocks = {
+ localHostPathWithPort = {
+ localForwards = [
+ {
+ # OK:
+ bind.address = "127.0.0.1";
+ bind.port = 3000;
+
+ # Error:
+ host.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+ host.port = 3000;
+ }
+ ];
+ };
+ };
+ };
+
+ home.file.result.text =
+ builtins.toJSON
+ (map (a: a.message)
+ (filter (a: !a.assertion)
+ config.assertions));
+
+ nmt.script = ''
+ assertFileContent home-files/result ${./forwards-paths-with-ports-error.json}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/ssh/forwards-paths-with-ports-error.json b/home-manager/tests/modules/programs/ssh/forwards-paths-with-ports-error.json
new file mode 100644
index 00000000000..e7e3a374ecc
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/forwards-paths-with-ports-error.json
@@ -0,0 +1 @@
+["Forwarded paths cannot have ports."] \ No newline at end of file
diff --git a/home-manager/tests/modules/programs/ssh/forwards-remote-bind-path-with-port-asserts.nix b/home-manager/tests/modules/programs/ssh/forwards-remote-bind-path-with-port-asserts.nix
new file mode 100644
index 00000000000..a0473147bd3
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/forwards-remote-bind-path-with-port-asserts.nix
@@ -0,0 +1,36 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.ssh = {
+ enable = true;
+ matchBlocks = {
+ remoteBindPathWithPort = {
+ remoteForwards = [
+ {
+ # OK:
+ host.address = "127.0.0.1";
+ host.port = 3000;
+
+ # Error:
+ bind.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+ bind.port = 3000;
+ }
+ ];
+ };
+ };
+ };
+
+ home.file.result.text =
+ builtins.toJSON
+ (map (a: a.message)
+ (filter (a: !a.assertion)
+ config.assertions));
+
+ nmt.script = ''
+ assertFileContent home-files/result ${./forwards-paths-with-ports-error.json}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/ssh/forwards-remote-host-path-with-port-asserts.nix b/home-manager/tests/modules/programs/ssh/forwards-remote-host-path-with-port-asserts.nix
new file mode 100644
index 00000000000..770b8ab2870
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/forwards-remote-host-path-with-port-asserts.nix
@@ -0,0 +1,36 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.ssh = {
+ enable = true;
+ matchBlocks = {
+ remoteHostPathWithPort = {
+ remoteForwards = [
+ {
+ # OK:
+ bind.address = "127.0.0.1";
+ bind.port = 3000;
+
+ # Error:
+ host.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+ host.port = 3000;
+ }
+ ];
+ };
+ };
+ };
+
+ home.file.result.text =
+ builtins.toJSON
+ (map (a: a.message)
+ (filter (a: !a.assertion)
+ config.assertions));
+
+ nmt.script = ''
+ assertFileContent home-files/result ${./forwards-paths-with-ports-error.json}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/ssh/match-blocks-attrs-expected.conf b/home-manager/tests/modules/programs/ssh/match-blocks-attrs-expected.conf
new file mode 100644
index 00000000000..f0d768375f0
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/match-blocks-attrs-expected.conf
@@ -0,0 +1,29 @@
+
+
+Host * !github.com
+ Port 516
+ IdentityFile file1
+ IdentityFile file2
+
+Host abc
+ ProxyJump jump-host
+
+Host xyz
+ ServerAliveInterval 60
+ IdentityFile file
+ LocalForward [localhost]:8080 [10.0.0.1]:80
+ RemoteForward [localhost]:8081 [10.0.0.2]:80
+ RemoteForward /run/user/1000/gnupg/S.gpg-agent.extra /run/user/1000/gnupg/S.gpg-agent
+ DynamicForward [localhost]:2839
+
+Host *
+ ForwardAgent no
+ Compression no
+ ServerAliveInterval 0
+ HashKnownHosts no
+ UserKnownHostsFile ~/.ssh/known_hosts
+ ControlMaster no
+ ControlPath ~/.ssh/master-%r@%n:%p
+ ControlPersist no
+
+
diff --git a/home-manager/tests/modules/programs/ssh/match-blocks-attrs.nix b/home-manager/tests/modules/programs/ssh/match-blocks-attrs.nix
new file mode 100644
index 00000000000..94263ef9d27
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/match-blocks-attrs.nix
@@ -0,0 +1,64 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.ssh = {
+ enable = true;
+ matchBlocks = {
+ abc = {
+ identityFile = null;
+ proxyJump = "jump-host";
+ };
+
+ xyz = {
+ identityFile = "file";
+ serverAliveInterval = 60;
+ localForwards = [
+ {
+ bind.port = 8080;
+ host.address = "10.0.0.1";
+ host.port = 80;
+ }
+ ];
+ remoteForwards = [
+ {
+ bind.port = 8081;
+ host.address = "10.0.0.2";
+ host.port = 80;
+ }
+ {
+ bind.address = "/run/user/1000/gnupg/S.gpg-agent.extra";
+ host.address = "/run/user/1000/gnupg/S.gpg-agent";
+ }
+ ];
+ dynamicForwards = [
+ {
+ port = 2839;
+ }
+ ];
+ };
+
+ "* !github.com" = {
+ identityFile = ["file1" "file2"];
+ port = 516;
+ };
+ };
+ };
+
+ home.file.assertions.text =
+ builtins.toJSON
+ (map (a: a.message)
+ (filter (a: !a.assertion)
+ config.assertions));
+
+ nmt.script = ''
+ assertFileExists home-files/.ssh/config
+ assertFileContent \
+ home-files/.ssh/config \
+ ${./match-blocks-attrs-expected.conf}
+ assertFileContent home-files/assertions ${./no-assertions.json}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/ssh/no-assertions.json b/home-manager/tests/modules/programs/ssh/no-assertions.json
new file mode 100644
index 00000000000..0637a088a01
--- /dev/null
+++ b/home-manager/tests/modules/programs/ssh/no-assertions.json
@@ -0,0 +1 @@
+[] \ No newline at end of file
diff --git a/home-manager/tests/modules/programs/texlive-minimal.nix b/home-manager/tests/modules/programs/texlive-minimal.nix
new file mode 100644
index 00000000000..df143dbc660
--- /dev/null
+++ b/home-manager/tests/modules/programs/texlive-minimal.nix
@@ -0,0 +1,13 @@
+{ config, lib, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.texlive.enable = true;
+
+ nmt.script = ''
+ assertFileExists home-path/bin/tex
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/tmux/default.nix b/home-manager/tests/modules/programs/tmux/default.nix
new file mode 100644
index 00000000000..d4501c60981
--- /dev/null
+++ b/home-manager/tests/modules/programs/tmux/default.nix
@@ -0,0 +1,7 @@
+{
+ tmux-emacs-with-plugins = ./emacs-with-plugins.nix;
+ tmux-not-enabled = ./not-enabled.nix;
+ tmux-vi-all-true = ./vi-all-true.nix;
+ tmux-secure-socket-enabled = ./secure-socket-enabled.nix;
+ tmux-disable-confirmation-prompt = ./disable-confirmation-prompt.nix;
+}
diff --git a/home-manager/tests/modules/programs/tmux/disable-confirmation-prompt.conf b/home-manager/tests/modules/programs/tmux/disable-confirmation-prompt.conf
new file mode 100644
index 00000000000..b599e603e4a
--- /dev/null
+++ b/home-manager/tests/modules/programs/tmux/disable-confirmation-prompt.conf
@@ -0,0 +1,31 @@
+# ============================================= #
+# Start with defaults from the Sensible plugin #
+# --------------------------------------------- #
+run-shell @sensible_rtp@
+# ============================================= #
+
+set -g default-terminal "screen"
+set -g base-index 0
+setw -g pane-base-index 0
+
+
+
+
+
+set -g status-keys emacs
+set -g mode-keys emacs
+
+
+
+
+
+bind-key & kill-window
+bind-key x kill-pane
+
+
+setw -g aggressive-resize off
+setw -g clock-mode-style 12
+set -s escape-time 500
+set -g history-limit 2000
+
+
diff --git a/home-manager/tests/modules/programs/tmux/disable-confirmation-prompt.nix b/home-manager/tests/modules/programs/tmux/disable-confirmation-prompt.nix
new file mode 100644
index 00000000000..82c53438b00
--- /dev/null
+++ b/home-manager/tests/modules/programs/tmux/disable-confirmation-prompt.nix
@@ -0,0 +1,28 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ substituteExpected = path: pkgs.substituteAll {
+ src = path;
+
+ sensible_rtp = pkgs.tmuxPlugins.sensible.rtp;
+ };
+
+in
+
+{
+ config = {
+ programs.tmux = {
+ enable = true;
+ disableConfirmationPrompt = true;
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.tmux.conf
+ assertFileContent home-files/.tmux.conf \
+ ${substituteExpected ./disable-confirmation-prompt.conf}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/tmux/emacs-with-plugins.conf b/home-manager/tests/modules/programs/tmux/emacs-with-plugins.conf
new file mode 100644
index 00000000000..b047c97a766
--- /dev/null
+++ b/home-manager/tests/modules/programs/tmux/emacs-with-plugins.conf
@@ -0,0 +1,54 @@
+# ============================================= #
+# Start with defaults from the Sensible plugin #
+# --------------------------------------------- #
+run-shell @tmuxplugin_sensible_rtp@
+# ============================================= #
+
+set -g default-terminal "screen"
+set -g base-index 0
+setw -g pane-base-index 0
+
+new-session
+
+bind v split-window -h
+bind s split-window -v
+
+
+set -g status-keys emacs
+set -g mode-keys emacs
+
+
+
+
+
+
+
+setw -g aggressive-resize on
+setw -g clock-mode-style 24
+set -s escape-time 500
+set -g history-limit 2000
+
+
+
+# ============================================= #
+# Load plugins with Home Manager #
+# --------------------------------------------- #
+
+# tmuxplugin-logging
+# ---------------------
+
+run-shell @tmuxplugin_logging@/share/tmux-plugins/logging/logging.tmux
+
+
+# tmuxplugin-prefix-highlight
+# ---------------------
+
+run-shell @tmuxplugin_prefix_highlight@/share/tmux-plugins/prefix-highlight/prefix_highlight.tmux
+
+
+# tmuxplugin-fzf-tmux-url
+# ---------------------
+
+run-shell @tmuxplugin_fzf_tmux_url@/share/tmux-plugins/fzf-tmux-url/fzf-url.tmux
+
+# ============================================= #
diff --git a/home-manager/tests/modules/programs/tmux/emacs-with-plugins.nix b/home-manager/tests/modules/programs/tmux/emacs-with-plugins.nix
new file mode 100644
index 00000000000..5e147b7290e
--- /dev/null
+++ b/home-manager/tests/modules/programs/tmux/emacs-with-plugins.nix
@@ -0,0 +1,41 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ substituteExpected = path: pkgs.substituteAll {
+ src = path;
+
+ tmuxplugin_fzf_tmux_url = pkgs.tmuxPlugins.fzf-tmux-url;
+ tmuxplugin_logging = pkgs.tmuxPlugins.logging;
+ tmuxplugin_prefix_highlight = pkgs.tmuxPlugins.prefix-highlight;
+ tmuxplugin_sensible_rtp = pkgs.tmuxPlugins.sensible.rtp;
+ };
+
+in
+
+{
+ config = {
+ programs.tmux = {
+ aggressiveResize = true;
+ clock24 = true;
+ enable = true;
+ keyMode = "emacs";
+ newSession = true;
+ reverseSplit = true;
+
+ plugins = with pkgs.tmuxPlugins; [
+ logging
+ prefix-highlight
+ fzf-tmux-url
+ ];
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.tmux.conf
+ assertFileContent home-files/.tmux.conf \
+ ${substituteExpected ./emacs-with-plugins.conf}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/tmux/hm-session-vars.sh b/home-manager/tests/modules/programs/tmux/hm-session-vars.sh
new file mode 100644
index 00000000000..40d9c24b50d
--- /dev/null
+++ b/home-manager/tests/modules/programs/tmux/hm-session-vars.sh
@@ -0,0 +1,5 @@
+# Only source this once.
+if [ -n "$__HM_SESS_VARS_SOURCED" ]; then return; fi
+export __HM_SESS_VARS_SOURCED=1
+
+export TMUX_TMPDIR="${XDG_RUNTIME_DIR:-"/run/user/\$(id -u)"}"
diff --git a/home-manager/tests/modules/programs/tmux/not-enabled.nix b/home-manager/tests/modules/programs/tmux/not-enabled.nix
new file mode 100644
index 00000000000..b7c675a83a2
--- /dev/null
+++ b/home-manager/tests/modules/programs/tmux/not-enabled.nix
@@ -0,0 +1,13 @@
+{ config, lib, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.tmux = { enable = false; };
+
+ nmt.script = ''
+ assertPathNotExists home-files/.tmux.conf
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/tmux/secure-socket-enabled.nix b/home-manager/tests/modules/programs/tmux/secure-socket-enabled.nix
new file mode 100644
index 00000000000..34e9129c5a4
--- /dev/null
+++ b/home-manager/tests/modules/programs/tmux/secure-socket-enabled.nix
@@ -0,0 +1,17 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.tmux = {
+ enable = true;
+ secureSocket = true;
+ };
+
+ nmt.script = ''
+ assertFileExists home-path/etc/profile.d/hm-session-vars.sh
+ assertFileContent home-path/etc/profile.d/hm-session-vars.sh ${./hm-session-vars.sh}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/tmux/vi-all-true.conf b/home-manager/tests/modules/programs/tmux/vi-all-true.conf
new file mode 100644
index 00000000000..08e37e19b97
--- /dev/null
+++ b/home-manager/tests/modules/programs/tmux/vi-all-true.conf
@@ -0,0 +1,31 @@
+# ============================================= #
+# Start with defaults from the Sensible plugin #
+# --------------------------------------------- #
+run-shell @sensible_rtp@
+# ============================================= #
+
+set -g default-terminal "screen"
+set -g base-index 0
+setw -g pane-base-index 0
+
+new-session
+
+bind v split-window -h
+bind s split-window -v
+
+
+set -g status-keys vi
+set -g mode-keys vi
+
+
+
+
+
+
+
+setw -g aggressive-resize on
+setw -g clock-mode-style 24
+set -s escape-time 500
+set -g history-limit 2000
+
+
diff --git a/home-manager/tests/modules/programs/tmux/vi-all-true.nix b/home-manager/tests/modules/programs/tmux/vi-all-true.nix
new file mode 100644
index 00000000000..e88ed587c03
--- /dev/null
+++ b/home-manager/tests/modules/programs/tmux/vi-all-true.nix
@@ -0,0 +1,30 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+
+ substituteExpected = path: pkgs.substituteAll {
+ src = path;
+
+ sensible_rtp = pkgs.tmuxPlugins.sensible.rtp;
+ };
+
+in {
+ config = {
+ programs.tmux = {
+ aggressiveResize = true;
+ clock24 = true;
+ enable = true;
+ keyMode = "vi";
+ newSession = true;
+ reverseSplit = true;
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.tmux.conf
+ assertFileContent home-files/.tmux.conf \
+ ${substituteExpected ./vi-all-true.conf}
+ '';
+ };
+}
diff --git a/home-manager/tests/modules/programs/zsh/default.nix b/home-manager/tests/modules/programs/zsh/default.nix
new file mode 100644
index 00000000000..da5dd5b55ed
--- /dev/null
+++ b/home-manager/tests/modules/programs/zsh/default.nix
@@ -0,0 +1,3 @@
+{
+ zsh-session-variables = ./session-variables.nix;
+}
diff --git a/home-manager/tests/modules/programs/zsh/session-variables.nix b/home-manager/tests/modules/programs/zsh/session-variables.nix
new file mode 100644
index 00000000000..a87d39820cf
--- /dev/null
+++ b/home-manager/tests/modules/programs/zsh/session-variables.nix
@@ -0,0 +1,22 @@
+{ config, lib, ... }:
+
+with lib;
+
+{
+ config = {
+ programs.zsh = {
+ enable = true;
+
+ sessionVariables = {
+ V1 = "v1";
+ V2 = "v2-${config.programs.zsh.sessionVariables.V1}";
+ };
+ };
+
+ nmt.script = ''
+ assertFileExists home-files/.zshrc
+ assertFileRegex home-files/.zshrc 'export V1="v1"'
+ assertFileRegex home-files/.zshrc 'export V2="v2-v1"'
+ '';
+ };
+}