58 Commits

Author SHA1 Message Date
Austin Horstman
b3c5197b68 ssh: remove deprecated top-level option aliases
The top-level `programs.ssh` options such as `forwardAgent`,
`serverAliveInterval`, and `controlPath` were deprecated in 25.11.
Remove their aliases ahead of the 26.11 release; set the native
directives under `programs.ssh.settings."*"` instead.

The `enableDefaultConfig` default and the newer `matchBlocks`
compatibility are unchanged.

Setting a removed option now fails with an error that explains what
to do instead.
2026-10-15 16:12:44 -05:00
Austin Horstman
55730a2e34 ssh: document DAG ordering patterns
Expand the settings example so users can discover stable headers and list-shaped DAG helpers for ordered Host and Match blocks.
2026-06-19 10:13:44 -05:00
Ramses
16663cb138 ssh: add settings.<name>.header option
The RFC 42 settings option derives the Host/Match line from the
attribute name. That makes it impossible to express headers that carry
Nix string context (e.g. Match exec referring to a store path), and
forces long computed patterns into attribute names where a stable
logical name would be nicer for dag ordering.

Add an explicit `header` option on each block that defaults to the
attribute name (with the existing Host/Match prefix detection), and
have the legacy matchBlocks shim populate it instead of the
__hmSshBlockHeader internal.
2026-05-19 09:50:05 -05:00
Austin Horstman
fab3fd7327 ssh: fix ssh enableDefaultConfig description
Text wasn't rendering properly in the generated docs.
2026-05-18 12:25:51 -05:00
Austin Horstman
936ae1b1eb ssh: add RFC 42 settings option
Add programs.ssh.settings as a freeform DAG for OpenSSH client configuration blocks. Render Host and Match blocks directly from the new settings option while preserving ordering support.

Render known ssh_config comma-list directives from Nix lists as single comma-separated lines and known space-list directives as single whitespace-separated lines. This keeps directives like KexAlgorithms, Ciphers, MACs, HostKeyAlgorithms, ProxyJump, SendEnv, GlobalKnownHostsFile, and PermitRemoteOpen from being emitted as duplicate directives where OpenSSH may only use the first value.

Migrate legacy matchBlocks into settings, keep root SSH option redirects pointed at the new option names, and hide the deprecated matchBlocks option from generated docs.

Update SSH tests, docs references, and news coverage for the new option.
2026-05-18 12:25:51 -05:00
cyberworm
2809b9e3f8 ssh: allow explicit "no" for identitiesOnly in matchBlocks
Allows overriding identitiesOnly from "yes" to "no" under a more specific matchBlock.
2026-05-14 12:28:56 -05:00
Benedikt Rips
71402c5df3 treewide: mark unused lambda arguments 2026-04-13 22:02:40 -05:00
Austin Horstman
11ad9d2e42 statix: enable useless_has_attr
Enable statix's useless_has_attr rule and apply its auto-fixes across the affected modules.
2026-04-08 16:00:28 -05:00
Bruno BELANYI
bec08ef6e3 programs/ssh: DRY address/port options
The end goal is to hoist the forwarded path assertion directly into this
module rather than the top-level.
2025-12-27 15:12:05 -06:00
Oliver Geneser
2d36a6de2f ssh: add kexAlgorithms to matchBlocks
This commit adds the option to add kexAlgorithms as an matchBlock
option with updated test case.
2025-12-27 16:54:14 +01:00
Bruno BELANYI
12e7786854 programs/ssh: use 'toList' 2025-12-03 09:48:51 -06:00
Bruno BELANYI
28741978a3 programs/ssh: use 'toKeyValue' for 'extraOptions'
A first step towards refactoring the module.

Unfortunately the config is not consistent in using comma-separated
values or repeated keys for lists, since the user can always add commas
by themselves, we should default to repeated keys in the generator.
2025-12-03 09:44:29 -06:00
Aguirre Matteo
77a71380c3 ssh: provide code snippet in enableDefaultConfig description 2025-08-29 14:46:41 -05:00
Aguirre Matteo
3882f88691 ssh: remove top level options 2025-08-26 17:12:13 -05:00
Austin Horstman
86402a17b6 treewide: flatten single file modules
Some files don't need nesting and can be root level again to reduce
conflicts with other PRs.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-06-23 16:20:26 -05:00
Austin Horstman
4fca600cb1 treewide: implement auto importing for modules
Reduce maintenance burden and increase efficiency by automatically
importing modules following a specific convention.

Co-authored-by: awwpotato <awwpotato@voidq.com>
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-06-22 23:58:37 -05:00
awwpotato
5da6eafceb treewide: remove unused code (#6985) 2025-05-07 10:03:21 -05:00
Cole Mickens
4040c5779c modules/programs/ssh: support identityAgent (#6783) 2025-04-08 23:16:14 -05:00
Austin Horstman
cba2f9ce95 treewide: reformat nixfmt-rfc-style
Reformat repository using new nixfmt-rfc-style.
2025-04-08 08:50:05 -07:00
Austin Horstman
0b491b460f treewide: remove with lib (#6735)
Continuation of `with lib;` cleanup.
2025-03-31 22:32:16 -05:00
Robert Helgesson
f2942f3385 Remove some formatting exceptions
This formats a few more file using nixfmt.
2024-01-13 19:05:27 +01:00
Jan Schmitt
7a69b3e738 ssh: add addKeysToAgent option 2023-12-14 00:11:45 +01:00
Emily
9f9e277b60 treewide: remove now-redundant lib.mdDoc calls
These (and the `*MD` functions apart from `literalMD`) are now no-ops
in nixpkgs and serve no purpose other than to add additional noise and
potentially mislead people into thinking unmarked DocBook documentation
will still be accepted.

Note that if backporting changes including documentation to 23.05,
the `mdDoc` calls will need to be re-added.

To reproduce this commit, run:

    $ NIX_PATH=nixpkgs=flake:nixpkgs/e7e69199f0372364a6106a1e735f68604f4c5a25 \
      nix shell nixpkgs#coreutils \
      -c find . -name '*.nix' \
      -exec nix run -- github:emilazy/nix-doc-munge/98dadf1f77351c2ba5dcb709a2a171d655f15099 \
      --strip {} +
    $ ./format
2023-07-17 18:49:09 +01:00
Emily
36a53d9f26 treewide: convert all option docs to Markdown
This process was automated by [my fork of `nix-doc-munge`]. All
conversions were automatically checked to produce the same DocBook
result when converted back, modulo minor typographical/formatting
differences on the acceptable-to-desirable spectrum.

To reproduce this commit, run:

  $ NIX_PATH=nixpkgs=flake:nixpkgs/e7e69199f0372364a6106a1e735f68604f4c5a25 \
    nix shell nixpkgs#coreutils \
    -c find . -name '*.nix' \
    -exec nix run -- github:emilazy/nix-doc-munge/98dadf1f77351c2ba5dcb709a2a171d655f15099 \
    {} +
  $ ./format

[my fork of `nix-doc-munge`]: https://github.com/emilazy/nix-doc-munge/tree/home-manager
2023-07-17 18:40:56 +01:00
Emily
e04de5b308 treewide: mkPackageOption -> mkPackageOptionMD 2023-07-17 16:49:35 +01:00
Robert Helgesson
79e03fbe24 lib: remove listOrDagOf type
It has been deprecated for a long time and should be safe to remove.
2023-06-05 23:08:29 +02:00
Naïm Favier
2d963854ae ssh: don't install a client by default (#4016)
Make use of the recently added nullable `mkPackageOption` feature
to disable installing an SSH client by default: most people should use
the client provided by their system.
2023-05-27 14:11:50 +02:00
Maria
c10403a573 Update ssh.nix (#4000)
fix typo
2023-05-18 22:37:19 +02:00
George Macon
6702b22b98 ssh: install an ssh client
Fixes #3667
2023-05-13 16:50:10 +02:00
Gaétan Lepage
6be873663e ssh: add setEnv option (#3935) 2023-05-11 14:22:40 +02:00
Jakub Fišer
1bdbebc3f8 ssh: add generic Match support for matchBlocks (#2992)
* ssh: add generic Match support for matchBlocks

Introduce conservative support for actual `Match`
blocks in ssh config.

"Conservative" means this PR doesn'tt try to process
the `match` expression and simply uses it as a string
provided by the user.

If set, `match` has precedence over `host` meaning
if both are set, `match` is used and `host` is ignored.

* Add news entry
2022-11-27 16:15:32 +01:00
Sumner Evans
f911ebbec9 lib.booleans: add yesNo function (#2818)
Closes #2772
2022-04-07 22:36:13 -06:00
Tobias Happ
5559ef0023 ssh: add includes option (#2453) 2021-11-16 11:51:10 -07:00
Naïm Favier
bd11e2c5e6 Replace usage of literalExample
Instead use the new function `literalExpression`. See

  https://github.com/NixOS/nixpkgs/pull/136909
2021-10-13 00:16:10 +02:00
Tad Fisher
18ad12d52b programs.ssh: Use nullable types for optional forward attrs (#1946)
Attempting to build a flake configuration using `ssh.remoteForwards' results in
evaluation errors when `port' is undefined, as `!(entry ? port)' evaluates to
false. This was verified in the nix repl, and also occurs for `nix flake
check'.

Set optional attrs in `bindOptions' and `forwardModule' to `null' by default
and adjust the assertion to check for `null' instead of attr definitions.
2021-04-27 17:16:33 -04:00
Damien Cassou
a21c97d011 ssh: add support for ServerAliveCountMax
PR #1299
2020-06-03 23:16:43 +02:00
Robert Helgesson
022228e0aa ssh: switch type of matchBlocks to listOrDagOf
This switches the type of `matchBlocks` from `loaOf` to `listOrDagOf`.
The former has been deprecated in Nixpkgs. The latter allows
dependencies between entries to be expressed using the DAG functions.
2020-04-13 23:24:40 +02:00
Ashish SHUKLA
805d82e1be ssh: make certificateFile similar to identityFile
PR #998
2020-01-21 21:10:11 +01:00
David Wood
e8dbc35613 ssh: sockets forwards; remote and dynamic forwards
This commit adds support for forwarding paths rather than just
addresses/ports. It also adds options for specifying remote and
dynamic forwards.
2019-10-02 20:42:29 +02:00
Tobias Happ
0e871b490e ssh: add localForwards option for matchBlocks 2019-08-20 12:11:00 +02:00
Robert Helgesson
ed4f66185f Use types.port where applicable
This changes the type of all options that specify ports to
`types.port`. This type restricts values to between 0 and 65535.
2019-08-19 20:37:48 +02:00
Robert Helgesson
eec78fbd1e ssh: support multiple identity files in a match block
Fixes #625
2019-03-19 22:35:13 +01:00
John Wiegley
3cf8b9ea86 ssh: add proxyJump option 2019-01-15 22:31:08 +01:00
dsx
6ce3ce69b9 ssh: add addressFamily option 2018-12-05 00:24:34 +01:00
Robert Helgesson
6826521ec5 ssh: add certificateFile option 2018-12-05 00:19:40 +01:00
Robert Helgesson
5fe62660aa ssh: realign options 2018-12-05 00:14:15 +01:00
zimbatm
40b279e3a3 ssh: tweak default controlPath
Instead of using the hostname `%h`, which can be changed by the
~/.ssh/config file, use the commandline-given hostname `%n`.

This allows to alias a host with different hostnames, which then point
to different configurations. A common use-case for this is if you have
multiple accounts on github with each access to different private repos:

    Host github.com
      IdentitiesOnly yes
      User git
      IdentityFile ~/.ssh/id_rsa

    Host customer.github.com
      IdentitiesOnly yes
      User git
      IdentityFile ~/.ssh/customer
      HostName github.com

Without this change, if a connection was established with the first
github.com alias, then the user would try to pull a repo from the second
account, ssh would re-use the SSH connection which doesn't have access
to that repository.
2018-11-30 00:13:50 +01:00
zimbatm
456e2d7ed5 ssh: add more options 2018-11-25 22:46:06 +01:00
Robert Helgesson
4205c91609 ssh: move options to end of configuration file
This is needed to support overriding these options inside match
blocks. A new option `programs.ssh.extraOptionOverrides` has been
added to allow global overrides.
2018-03-25 08:51:20 +02:00
Robert Helgesson
32b3f7f2d2 ssh: allow disabling compression in host block
Fixes #181.
2018-01-14 22:08:31 +01:00