Avoid failing Home Manager activation when the generated AeroSpace
configuration changes while AeroSpace is not yet running.
The onChange hook can run before a running AeroSpace instance is
available. Probe the running instance with `aerospace list-modes --current`
before calling `reload-config`, and skip the reload if AeroSpace is not
yet running.
Preserve shell-variable paths for programs.zsh.oh-my-zsh.custom while
still escaping values for a double-quoted shell assignment.
This restores runtime expansion for values like $HOME/extra/zsh, which
otherwise became a literal path after the previous escapeShellArg
change.
The option appended directories to fpath, but fpath is zsh's lookup path for all autoloadable functions, not just completion functions.
Rename the option to functions with mkRenamedOptionModule so existing completions users are migrated through the standard Home Manager deprecation path.
Link: https://github.com/nix-community/home-manager/discussions/8701#discussioncomment-16966141
Named directory hash values are rendered into zsh code. Interpolating them inside double quotes is not enough for values containing quotes, glob syntax, or other shell metacharacters.
Render both the hash name and target with shell escaping so dirHashes entries are emitted as literal zsh arguments.
Zsh cdpath is an array. Rendering entries by joining on spaces breaks paths containing spaces, glob characters, or other shell syntax.
Use the shared shell array formatter so each configured cdpath entry is emitted as a quoted array element.
Nixpkgs zsh plugin packages often install functions and completions below share/zsh/plugins/<name>, share/zsh/site-functions, or share/zsh/vendor-completions rather than at the package root.
Keep the existing root path and fpath entries, but add those standard subdirectories to fpath when present so plugin-provided functions and completions are discoverable without extra per-plugin configuration.
Link: https://github.com/nix-community/home-manager/discussions/8701#discussioncomment-16966141
Zsh reads .zshenv before system login startup files. On NixOS and macOS those later files can replace or reorder PATH, so home.sessionPath entries loaded from .zshenv may disappear or move behind system paths.
Keep .zshenv coverage for non-login shells, but source Home Manager session variables from .zprofile for login shells so PATH-like values are applied after system login setup.
Fixes#2991
Vicinae extension helpers always used importNpmLock, which reads package.json and package-lock.json during evaluation. When extension src comes from fetchgit or fetchFromGitHub, that forces Nix to realize the fetched source during eval and trips allow-import-from-derivation = false.
Accept npmDepsHash in mkExtension and mkRayCastExtension so fetched extension sources can use buildNpmPackage's fixed npm dependency fetcher path instead. Keep the existing importNpmLock behavior for local sources and document the hash requirement in the option example.
The mount user-service set Environment=PATH=/run/wrappers/bin, which is
a NixOS-only directory. On standalone home-manager hosts running other
Linux distros the directory does not exist, and because Environment=PATH=
replaces systemd's inherited PATH, the resulting unit has no usable PATH
at all.
libfuse falls back to a hardcoded /usr/bin/fusermount3 lookup so the
helper still executes, but the eventual mount(2) syscall returns EPERM,
likely because libfuse's internal system()/popen() invocations into
mount.fuse3 fail without /bin/sh and friends on PATH. Empirically, the
EPERM goes away the moment PATH is widened to include standard Linux
locations.
Enumerate /run/wrappers/bin and /run/current-system/sw/bin alongside the
usual /usr/{local/,}{s,}bin and /{s,}bin entries. Path search order is
preserved, so the NixOS wrappers still win where they exist, and
fusermount/fusermount3 is found at /usr/bin on Ubuntu/Debian/Fedora and
similar distros.
The option only feeds the systemd config-install service; on Darwin the
launchd agent ignores it, and on any other non-Linux platform the
option is similarly inert. Marking it readOnly with a null default
when systemd is unavailable prevents users from setting a value that
would silently do nothing, and surfaces the platform constraint in the
option itself rather than only in the description.
mkLaunchdSidecar uses a strict argument pattern that did not include
sidecarType, but the call site was passing it via inherit, breaking
evaluation of any darwin config that defined a mount or serve sidecar.
Since isMount already encodes the same information as
sidecarType == "mounts", remove sidecarType from the call site and
replace the two systemd uses with isMount / !isMount.
Bash helper that waits up to 5 minutes for rclone.conf to exist
before exec'ing its arguments. Will be wired into the launchd
sidecar agents in a follow-up commit.
Linux keeps the systemd %C/rclone cache-dir specifier. Darwin has no
%C specifier, so the cache-dir default there is
${config.xdg.cacheHome}/rclone. Behaviour on Linux is unchanged.
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.
This allows the git config to be used by programs that have git
installed natively and where other programs access git but don't have
the nix path available, so cannot access git-lfs.
Use the standalone User Themes extension package when enabling GNOME Shell theme support instead of installing the full gnome-shell-extensions package.
Closes#9171
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.
Adds Home Manager module for ec, a 3-way terminal native Git merge conflict resolver.
The module supports:
- Git integration by configuring ec as a mergetool.