96 Commits

Author SHA1 Message Date
Austin Horstman
bf3f7a120d astroid: migrate to native JSON settings
Add programs.astroid.settings for native JSON configuration and
generate the configuration file from it.

The extraConfig and externalEditor options become deprecated aliases
into settings. Home Manager no longer writes its bundled template;
Astroid's built-in defaults match it except editor.markdown_processor.
Astroid accounts still supply account settings, the notmuch path, and
the GPG path as per-key defaults. Empty settings write no file.

externalEditor now merges at ordinary priority instead of replacing
the editor keys, and priorities on extraConfig sections apply to the
section as a unit. The release notes describe both changes.
2026-09-30 08:40:10 -05:00
Austin Horstman
d4941d9c8d notmuch: migrate to native INI settings
Add programs.notmuch.settings for native INI configuration with list
values, and generate the configuration file from it.

The new.ignore, new.tags, maildir.synchronizeFlags, search.excludeTags,
and extraConfig options become deprecated aliases into settings.
Settings carry no static defaults: new.tags, new.ignore, and
maildir.synchronize_flags fall back to notmuch's identical defaults.
State versions before 26.11 keep search.exclude_tags = deleted;spam and
write database.path even without email accounts. Enabled email
accounts supply database.path, and notmuch-enabled accounts the user
identity. Null values and empty sections are omitted so a derived
value can be removed.

extraConfig no longer overwrites modeled values unconditionally: forced
definitions win and ordinary collisions fail. The release notes
describe the migration.

Mbsync, lieer, and mujmap now write settings.new.ignore directly, so
they do not trigger deprecation warnings.
2026-09-30 08:23:14 -05:00
Austin Horstman
7d46509d83 borgmatic: migrate backups to native settings
Add programs.borgmatic.backups.<name>.settings for native borgmatic
YAML and generate each backup file from it.

The location, storage, retention, and consistency options and the
section extraConfig options become deprecated aliases into settings.
Warnings name the affected backup. Legacy configurations without
overlapping keys produce the same YAML, and Home Manager symlink
exclusions still append to exclude_from.

Drop the assertions that rejected backups setting both or neither of
sourceDirectories and patterns, so native source patterns and
database-only backups work.
2026-09-30 07:59:27 -05:00
Austin Horstman
afa6821c70 grobi: migrate to freeform settings
Generate grobi.conf from unrestricted JSON settings so root fields such as on_failure and nested rule values are configurable.

Migrate rules and executeAfter through the ordered settings rename helper, retaining historical empty defaults, alias reads, priorities, and list ordering.
2026-09-16 23:20:56 -05:00
Austin Horstman
efa3ccb4c3 openstackclient: expose whole-file settings
The old cloud-only mappings cannot express root-level cache and client
settings. Expose complete YAML documents while preserving existing
configurations through standard rename aliases.
2026-09-15 09:27:35 -05:00
Austin Horstman
fe48612c53 twmn: migrate to freeform INI settings
Use native INI settings instead of a copied option schema, retaining
legacy conversions, default behavior, and font-package installation.
Preserve extraConfig's final override while users migrate to settings.
2026-09-12 12:44:47 -05:00
Ihar Hrachyshka
17bf375751 firefox: adjust relnote and news for macOS 27
Don't nudge users to change their version. Instead, ask to set
configPath explicitly.
2026-09-12 11:22:12 -05:00
Austin Horstman
e4345d5ae8 xsuspender: migrate to freeform settings (#9927)
Replace the native option schema with generator-backed INI settings
and standard rename aliases to reduce module maintenance. Retain
historical defaults only for legacy options at option-default priority,
so ordinary settings assignments override them during migration.
Cover legacy reads, priorities, conditions, and settings-only behavior.
2026-09-11 13:16:59 -05:00
Ihar Hrachyshka
6960c16659 firefox: document darwin configPath migration 2026-09-10 22:57:58 -05:00
repparw
9dc641cd52 voxtype: start after graphical-session.target
The daemon was wanted by default.target, so it raced the compositor for
the GPU render node at login. whisper.cpp registers its backends once
per process, so a daemon that started before the render node existed
logged "ggml_vulkan: No devices found" and stayed on CPU until manually
restarted mid-session.

Want the unit from graphical-session.target instead and order it After
it. Device units do not exist in the user manager, so the target is the
earliest reliable ordering point. The model-loader oneshot now sets
RemainAfterExit so it does not re-run and flap on every
graphical-session reactivation.

Assisted-by: opencode (ox-alpha)
2026-08-26 20:04:49 -05:00
Peter Bittner
a0d058ef22 docs: link release note highlights to module pages
Changes the option anchors in the 26.05 and 26.11 highlights that
describe a whole module, so they point at the module's options page
instead of its `enable` option. Both entries previously rendered as
"The programs.uv.enable module ..." and "The programs.rclone.enable
module ...", naming an option where a module was meant. The rewriter in
docs/mdbook/convert-markup.py maps programs.<name> to that module's
page and derives the link label from the anchor, so the empty link text
is kept.
2026-08-12 07:40:00 -05:00
MithicSpirit
3d25fa94cf lib: option to escape tabs in lib.hm.generators.toKDL
Disabled by default for backwards compatibility.

Enabled for zellij and niri as per escapeBackslashes.
2026-07-28 15:16:56 -05:00
Austin Horstman
165228b0ef launchd: restore gui domain defaults
User-domain agents are not rediscovered from the user LaunchAgents directory after reboot. Let built-in agents inherit the GUI default while keeping explicit user-domain configuration available.
2026-07-15 10:29:26 -05:00
Vyacheslav Matyukhin
6dc9e081ba docs: fix cross-page links broken by mdbook migration
The mdBook migration split the manual into one HTML page per section,
but same-page fragment links (e.g. [Standalone setup](#sec-flakes-standalone))
were left pointing at anchors that now live on other pages, so they
silently do nothing when clicked.

Rewrite all cross-page fragment links in docs/manual and
docs/release-notes to page-qualified relative links. Option anchor
links (#opt-*, #nixos-opt-*, #nix-darwin-opt-*) are untouched since
convert-markup.py rewrites those at build time.

Also give the previously empty-label [](#sec-tests) link in the 25.05
release notes a "Tests" label, since the mdBook renderer does not
auto-fill labels from the target heading.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 08:56:06 -05:00
_
d32537981c lib: escape backslash in lib.hm.generators.toKDL 2026-06-30 23:49:47 -05:00
Austin Horstman
dc89b0c0bb launchd: add agent domain option
Allow Darwin LaunchAgents to target either the GUI or user launchd domain while preserving gui as the compatibility default.
2026-06-24 20:38:38 -05:00
Peter Bittner
c51ac59e59 uv: manage Python versions and tools
Add programs.uv.python.{versions,default,prune} and
programs.uv.tool.{packages,prune} to install uv-managed Python versions
and tools during activation.

Install requests are passed verbatim to uv. Unpinned entries track the
latest release on each activation while pinned ones stay put: Python
requests without a patch component are installed with `uv python install
--upgrade` (exact patches, which uv refuses to upgrade, get a plain
install), and tools are refreshed with `uv tool upgrade <packages>`
scoped to the configured list. Both upgrades are scoped to the managed
entries, so installs Home Manager does not own are left untouched. prune
makes a set declarative by running `uv ... uninstall --all` before
reinstalling the listed entries.

The activation blocks run after linkGeneration so uv sees the freshly
linked uv.toml, and a null programs.uv.package is rejected once the
module emits activation commands.
2026-06-17 15:47:24 -05:00
Austin Horstman
bb68a1a2e7 docs: add release notes contributing guidance 2026-06-11 09:05:37 -05:00
Austin Horstman
2b394beca7 docs: fix sshAuthSock reference in rl-2605
The link to `#opt-sshAuthSock.enable` broke the manual build on
release-26.05, where the `enable` option does not exist. Drop the
broken reference and the inaccurate "enabled and" wording.
2026-06-10 13:05:30 -05:00
Austin Horstman
c30f177760 docs: update release notes for 26.05
Lots of missing information about major changes throughout the last
release.
2026-06-09 22:44:48 -05:00
Austin Horstman
948753061a home-manager: prepare 26.11
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2026-05-29 19:01:27 -05:00
Austin Horstman
1a95e2efb4 home-manager: set 26.05 as stable
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2026-05-25 11:31:36 -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
Austin Horstman
acd9d8af2f hyprland: migrate settings to native lua option API 2026-05-13 16:13:28 -05:00
cinereal
fb6a0c6d39 modules: add modular services support
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.
2026-05-04 17:22:16 +02:00
Austin Horstman
b869d6cadb firefox: default configPath to XDG on 26.05
Use `lib.hm.deprecations.mkStateVersionOptionDefault` to keep the legacy `.mozilla/firefox` default for existing configurations while switching new Linux configurations to `"${config.xdg.configHome}/mozilla/firefox"`.

Add focused tests for the legacy and XDG defaults plus a news entry describing the transition.

Closes #8200.
Supersedes #8716 and the earlier attempt in #8672.

Co-authored-by: Heitor <44377258+HeitorAugustoLN@users.noreply.github.com>
2026-04-23 22:58:59 -05:00
tarzst
98b4d61cfa neovim: disable python3 and ruby providers by default 2026-04-07 16:44:58 -05:00
philip-730
92d382b982 programs.wezterm: add settings option
Add a `settings` option that allows WezTerm to be configured
declaratively using a Nix attribute set. Settings are serialized to
Lua using `lib.generators.toLua`. Raw Lua expressions such as
`wezterm.font` and `wezterm.action.*` can be embedded using
`lib.generators.mkLuaInline`.

When `settings` is set, `extraConfig` is still supported. It is
wrapped in an immediately invoked function expression so that any
`return` statement (including the common `return {}` and
`return config` patterns) is captured and merged on top of the
generated settings, preserving full backward compatibility.

The merge between `settings` and `extraConfig` is shallow: a key
returned from `extraConfig` replaces the entire corresponding value
from `settings`, including nested tables and arrays.

Closes #6047
2026-04-07 13:39:56 -05:00
luo jiyin
7d06e0cefe treewide: fix spelling errors 2026-03-11 22:32:16 -05:00
Vinicius Deolindo
2dedeb55b2 man: make package nullable and default to null on darwin 2026-02-18 21:19:39 -06:00
Austin Horstman
1e53254671 news: inform about yazi alias change
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2026-02-14 23:14:41 -06:00
Greg Pfeil
c8f9edda94 xdg.userDirs: add notes for stateVersion changes 2026-02-04 21:16:02 -06:00
Robert Helgesson
bc43546503 docs: turn option references into links 2026-01-03 11:29:29 +01:00
Vladislav
18f9d668aa anki: fix UI scale configuration
Use `numbers.between 1.0 2.0` for the UI scale type to match Anki's
actual behavior where ProfileManager.uiScale clamps values below 1.0
to 1.0.
2026-01-03 10:49:37 +01:00
Austin Horstman
f84f474c1b zsh: respect xdg.enable for dotDir
Make sure we actually respect a user's `xdg.enable` preference.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-12-27 17:58:46 -06:00
Austin Horstman
20728df08f release/25.11: add darwin copy apps change
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-12-23 16:36:16 -06:00
Austin Horstman
af3c24de76 release/25.05: add git signing format change
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-12-23 16:36:16 -06:00
Austin Horstman
624c7e80fb release/23.05: add swaylock stateVersion change
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-12-23 16:36:16 -06:00
Fugi
ae9f38e889 gtk4: don't enable theme by default
This is not officially supported and causes issues in some cases.
Also adds a warning to the option.
2025-11-28 14:14:32 -06:00
Austin Horstman
8433591183 home-manager: prepare 26.05
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-11-26 11:16:38 -06:00
Austin Horstman
f47d2e3821 home-manager: set 25.11 as stable
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-11-26 10:43:01 -06:00
octvs
14bc4c56fc password-store: do not set non-default dir 2025-11-25 23:33:06 -06:00
Eman Resu
44931fdc5d modules: add minimal entrypoint to only enable core modules 2025-11-22 21:50:04 -06:00
Robert Helgesson
173a29f735 docs: add note of Synthing tray option removal 2025-09-26 10:47:47 +02:00
Robert Helgesson
de448dcb57 home-manager: avoid profile management during activation
This commit deprecates profile management from the activation script.
The profile management is instead the responsibility of the driving
software, for example, the `home-manager` tool in the case of
standalone installs.

The legacy behavior is still available for backwards compatibility but
may be removed in the future.

The new behavior resolves (or moves us closer to resolving) a number
of long standing open issues:

- `home-manager switch --rollback`, which performs a rollback to the
  previous Home Manager generation before activating. While it was
  previously possible to accomplish this by activating an old
  generation, it did always create a new profile generation.

  This option has been implemented as part of this commit.

- `home-manager switch --specialisation NAME`, which switches to the
  named specialisation. While it was previously possible to accomplish
  this by manually running the specialisation activate script, it did
  always create a new profile generation.

  This option has been implemented as part of this commit.

- `home-manager switch --test`, which activates the configuration but
  does not create a new profile generation.

  This option has _not_ been implemented here since it relies on the
  current configuration being activated on login, which we do not
  currently do.

- When using the "Home Manager as a NixOS module" installation method
  we previously created an odd `home-manager` per-user "shadow
  profile" for the user. This is no longer necessary.

  This has been implemented as part of this commit.

Fixes #3450
2025-07-22 11:00:18 +02:00
Robert Helgesson
ee85cfc5c1 home-manager: add missing file 2025-05-18 11:07:58 +02:00
Robert Helgesson
9a4a9f1d6e home-manager: prepare 25.11 2025-05-18 10:26:50 +02:00
Robert Helgesson
e08e6e2389 home-manager: set 25.05 as stable 2025-05-18 10:26:29 +02:00
Robert Helgesson
1b9fe46e9f home-manager: move tests into new test flake
Having the tests available in the main Nix Flake introduces
unnecessary evaluation for non-developer users and, worse, a
dependency on the nmt library.

Fixes #6354
2025-01-24 22:31:22 +01:00
Robert Helgesson
9a9fef316a systemd: use sd-switch by default
Also remove the legacy Ruby alternative.

Fixes #5452
2025-01-01 16:31:32 +01:00