The servers and ports come from Purelymail's setup guide [1], which
says to log in with the full address and to use port 587 for SMTP
when the client only supports STARTTLS.
[1]: https://purelymail.com/docs/setup/technical
Every interactive shell ran `mkdir -p "$(dirname "$HISTFILE")"`, which
forks twice, even though the directory almost always exists. It costs
~10ms on macOS 27.
We now test if the directory exists first and use zsh's `:h` modifier
instead of dirname, so the most of the time no processes are started.
The directory is still created when missing.
Automated update of the master maintainers list combining:
- Home Manager specific maintainers from modules/lib/maintainers.nix
- Nixpkgs maintainers referenced in Home Manager modules
**Added:** 1 maintainers
**Removed:** 0 maintainers
**Total:** 324 → 325 maintainers
**✅ Added:** sand4rt
Generated by: lib/python/generate-all-maintainers.py
Macros can now set an optional `description`, written as the final
argument of the `macro` command so it shows in the help screen.
Macros without a description generate the same output as before.
mandb may exit successfully without creating output when no manual pages
are available. Create the output directory before invoking it so the
man-cache derivation always has its declared output.
Add a regression test for an empty manual page set.
Fixes#9962
Track the final enabled configuration source at the path Atuin reads so daemon settings that require a restart take effect. Respect file replacements and omit dependencies for themes, disabled files, and retargeted configuration without changing systemd behavior.
Keep settings writable while applying declared values. Match packages by
native npm, Git and lexical local-path identities so declarations
replace equivalent saved entries without reordering unrelated packages.
The nushell integration set $env.GPG_TTY = (tty) unconditionally.
Unlike the bash/zsh/fish variants, which use a plain command
substitution and silently continue with an empty value on failure,
nushell aborts the whole script when an external command used as an
expression value exits non-zero. A missing controlling terminal (e.g.
a login shell invoked non-interactively, such as by WSL's generated
Windows app launchers) made nu exit immediately, breaking every
command run through that login shell.
Wrap the call in try/catch so nushell degrades the same way the other
shell integrations do.
Add programs.opencode.cli for OpenCode 2's global cli.json, while
retaining programs.opencode.tui for OpenCode 1.
Support mutable CLI configuration through OPENCODE_CLI_CONFIG_CONTENT,
leaving cli.json writable by OpenCode. Add validation against the
configured package's CLI schema and warn when CLI or TUI settings do
not match the package version.
T3 Code 0.0.40 renamed enableAssistantStreaming to
enableLegacyTokenStreaming and drops the old key when reading
settings.json, so the userSettings example now sets
enableProviderUpdateChecks instead.
The desktop app writes client-settings.json without the legacy
{ settings = ...; } wrapper. It still reads a wrapped file, but then
ignores every top-level key, so with mutableClientSettings a wrapped
declaration hides the app's own changes. Write the clientSettings
example without the wrapper.
Codex refuses to load a config that redefines a built-in provider, and
ollama is one. Replace the custom provider config with the built-in
ollama provider.
Alistral 0.6.9 has no listenbrainz_url field and ignores it; the
ListenBrainz server is set with listenbrainz_domain. musicbrainz_url is
deprecated in favour of musicbrainz_server.
With mutableSettings, config.toml is merged recursively, so switching a
declared MCP server from command to url kept command and args next to
the new url, and switching back kept url and the HTTP options. Codex
refuses such a server and does not start: "failed to load bootstrap
configuration … url is not supported for stdio in
`
mcp_servers.<name>`".
When a declared server sets url or command, remove the keys that only
the other transport accepts. Keys both transports share, and those
Codex adds, such as tool approvals, are kept.
nixpkgs only builds Readest for Linux, so on Darwin the module needs
package = null to evaluate. Say so in the package option, as
programs.ghostty does.
Readest keeps settings.json in Tauri's app config directory, which on
Darwin is ~/Library/Application Support/com.bilingify.readest rather
than $XDG_CONFIG_HOME/com.bilingify.readest. The module wrote to the
latter, so declared settings had no effect on Darwin.
Source the OS and Home Manager POSIX environment scripts when Nushell
starts so runtime HOME and USER expansions and profile paths match managed
POSIX shells.
Add programs.t3code.server to run the headless server as a user service
with systemd on Linux and launchd on Darwin. Support extra arguments
and an optional environment file for runtime secrets.
Add tests for generated service files and launchd environment loading.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Track the final enabled configuration source at the native Tomat path so startup-only hooks, sound, and notification settings take effect after activation. Respect file replacements, disabling, and retargeting without changing the Linux service.
Track the final enabled configuration source at the Flameshot target so declarative changes restart the launchd agent, matching Linux behavior. Respect source overrides and omit dependencies for disabled or retargeted files without changing Linux restart triggers.
Track the final enabled native configuration source with shared launchd
restart triggers. Prefer .config/borders/bordersrc and track .bordersrc
only when no managed primary exists, preserving source identity and
respecting disabled or retargeted files.
Tealdeer starting from version 1.9.0 respects
the XDG directories spec on Darwin and uses `~/.config`
instead of `~/Library/Application Support` to read the config file.
Declare the final installed configuration source as a restart dependency instead of kicking launchd from a file hook. This respects file overrides and lets the shared lifecycle preserve stopped agents and report failures.
Restart running agents when declared dependency identities change without replacing unchanged plists or starting stopped jobs. Keep per-agent applied and pending state so interrupted switches and rollbacks retry unapplied changes.
Document recurring module design and testing expectations so contributors
can address them before review. Preserve upstream-specific exceptions
and configuration-only use when package installation is disabled.
Custom executable-only packages must retain the shipped integration scripts
when shell initialization sources them directly. Describe that migration in
targeted activation news and the upcoming release notes.
Use the shell scripts shipped by the configured package instead of
starting fzf to print them. This removes the target executable invocation
from Nushell integration builds and startup generation in other shells.
Preserve legacy fish binding setup and optional completion files, and
document the package script layout required by shell integration.
This is needed by some tools that integrate with PAM. In particular,
[soteria][1] as configured by NixOS's `security.soteria.enable` option
will crash on launch if this variable is not found:
```
soteria[106713]: Error: Could not get XDG session id, make sure that it is set and try again.
soteria[106713]: Caused by:
soteria[106713]: environment variable not found
soteria[106713]: Location:
soteria[106713]: src/main.rs:88:18
```
[1]: https://github.com/ImVaskel/soteria
List the option aliases, value conversions, and other compatibility code
removed across modules before the 26.11 cutoff, with the replacement for
each, so users upgrading from 26.05 know what to change. The removals
themselves are separate per-module changes.