Add a service module for Elephant with package installation, provider selection, TOML config generation, and a systemd user service.
This gives Elephant its own configuration surface instead of wiring it through Walker.
Use parameter expansion with a default value when checking Home Manager's session-variable sentinels.
Users with zsh NO_UNSET or shell nounset enabled were seeing parameter-not-set errors before the generated session variables had a chance to export the sentinel variables.
Update the home session-variable and zsh fixtures to cover the generated guards.
Different discord branches use different config locations, but home-manager
uses `${configDir}/discord` unconditionally. This adds an option that changes
that to `${configDir}/${configName}`.
Insert the command-option terminator before values passed to kwriteconfig6 so negative numeric settings are not parsed as command flags.
This fixes KDE settings such as DimDisplayIdleTimeoutSec = -1, which previously produced an unknown-option error from kwriteconfig6.
Cover the regression in the existing qt-basic NMT test by checking the generated activation command includes the terminator before the negative value.
Quote generated Quadlet key-value entries when attrset-backed values contain whitespace, preserving the value as a single systemd/Quadlet field.
Without quoting, label values such as Traefik rules are split by podman-system-generator into multiple invalid --label arguments.
Extend the container NMT fixture with a label containing spaces and assert the generated service preserves it as one label.
Adds programs.t3code so T3 Code can be installed and configured from Home
Manager, including optional merge semantics when the app mutates its config
files. Includes a news entry and tests for empty, merged, and immutable setups.
Make the location of Claude Code's configuration files configurable.
The option defaults to `~/.claude` so existing setups are unaffected,
and exports the `CLAUDE_CONFIG_DIR` environment variable automatically
whenever the directory differs from the upstream default so the CLI
reads from the same location home-manager wrote to.
The option follows the convention established by
`programs.github-copilot-cli`: an absolute-path string with a
`defaultText` for clean documentation rendering, an `upstreamConfigDir`
constant, and a session variable wired only when the user opts out of
the upstream default.
Commit f4bcc1ae1c contains what looks like
a merge issue in some golden testdata (only used by some tests that
require enableLegacyIfd). Fix this.
`nix build .#test-all-enableBig-false-enableLegacyIfd-true` does not
pass (on my NixOS / Linux system) without this change, but does with it.
This fixes the path of the wallust config file to be under Library/Application Support/wallust when on Darwin, instead of assuming it always falls under the XDG_CONFIG_HOME (for whatever reason the owner of the Rust dirs package refuses to allow XDG on macOS, since it's non-standard)
This reverts commit 9dc93220c1.
On one hand, conflicting definitions for `sshAuthSock.initialization.*`
were triggering before the assertion triggered, hereby making the
assertion redundant. On the other hand, the assertion prevents users
from running multiple agents side-by-side even after resolving the
definition conflict.
See https://github.com/nix-community/home-manager/pull/8533#issuecomment-4224165151.
Adds `home.services`, an attribute set of nixpkgs
[modular services](https://nixos.org/manual/nixos/unstable/#modular-services)
sourced from `<nixpkgs/lib/services/lib.nix>`. Each service exposes
`process.argv` and the upstream NixOS-style systemd schema
(`systemd.lib`, `systemd.mainExecStart`, `systemd.service`,
`systemd.services`, `systemd.sockets`) by re-exporting
`nixos/modules/system/service/systemd/service.nix`. Service modules
shipped with `_class = "service"` (e.g.
`pkgs.<name>.passthru.services.default`) drop in unchanged --
service portability across module systems is the point of modular
services.
Lifted units are evaluated and translated from NixOS-style attrs
(`wantedBy`, `serviceConfig`, `unitConfig`, `environment`, ...) into
the section-based INI shape (`{ Unit; Service; Install; }`) that
home-manager's `systemd.user.{services,sockets}` consumes; only the
common keys are mapped, uncommon options remain reachable via
`unitConfig` / `serviceConfig` / `socketConfig`. Sub-services and
their units are dashed under the parent service name;
`process.argv` becomes the default `ExecStart` for the service's
primary unit, which defaults to `WantedBy=default.target`.
Mirrors the surface of nixpkgs' portable systemd module (services +
sockets only); other unit kinds home-manager supports natively
(timers etc.) are intentionally not modeled until upstream grows
them.
Each service's `configData.<name>` entries are materialized at
`$XDG_CONFIG_HOME/system-services/<service-prefix>/<name>` (mirroring
how `nixos/modules/system/service/systemd/{config-data-path,system}.nix`
lifts `configData` to `environment.etc`), with the absolute path
injected back into `configData.<name>.path` so the service can refer
to its files at a stable location.
Includes nmt tests covering: a basic `process.argv`-only service, a
service with a `configData` entry, and importing
`pkgs.ghostunnel.passthru.services.default` to assert the lifted user
unit contains the expected ExecStart flags and `LoadCredential`
entries.
Existing configs setting `programs.vscode.package` to a fork package
(e.g. `pkgs.vscodium`) silently kept evaluating but wrote files to
Visual Studio Code's paths instead of the fork's. Detect known fork
pnames and emit an actionable warning pointing to the dedicated
module.
The `pname` option, previously used with `package = null`, no longer
has any effect since `nameShort`/`dataFolderName` are now factory
arguments. Replace it with `mkRemovedOptionModule` so the migration
fails loudly rather than silently.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add standalone modules for Antigravity, Cursor, Kiro, VSCodium, and
Windsurf using the mkVscodeModule factory. Each module provides its own
programs.<name> option namespace, allowing multiple VSCode-based editors
to be configured simultaneously.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Extract the core vscode module logic into a reusable factory function
(mkVscodeModule.nix), following the established mkFirefoxModule pattern.
This is a pure refactor with no behavior change — programs.vscode
retains the same interface.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PR #2637 added a 'type' field denoting the language used to configure
neovim plugins. However, when the type is set to "fennel" or "teal"
the configuration is silently ignored.
This commit enables support for Fennel by transpiling it to Lua before
appending the generated code to `init.lua`.
This commit __does not__ provide spport for configs written in Teal;
they are still silently ignored.
Allow boolean values in sessionVariables for Home Manager shell modules and serialize them consistently in generated session files.
- modules/lib/shell: stringify boolean values using lib.boolToString in export helper
- modules/home-environment, programs.bash, programs.zsh: include lib.types.bool in sessionVariables option type
- tests: add IS_TRUE/IS_FALSE assertions in home-environment, bash, and zsh session-variables tests