diff options
author | Katharina Fey <kookie@spacekookie.de> | 2019-10-05 12:06:29 +0000 |
---|---|---|
committer | Katharina Fey <kookie@spacekookie.de> | 2019-10-05 12:42:50 +0000 |
commit | 1148b1d122bc03e9a3665856c9b7bb96bd4e3994 (patch) | |
tree | 1a9586de593790e236349d5caa0abdff7f3f6856 /home-manager/tests/modules/programs | |
parent | 919d4e75699aa4ba456fd2d3d416a0522c9c7294 (diff) | |
parent | 8bddc1adab0f7a51476f819fa2197353e8e1d136 (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')
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"' + ''; + }; +} |