also assert when overriding accounts. I had overriden settings when
testing this module, forgot about it and then wondered why my email
accounts were ignored.
Generally best to avoid telling normal users to adjust their
stateVersion to avoid other home-manager module logic changes based on
stateVersion.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Default has changed to respect `xdg.enable`. Let user's know in case it
affects them surprisingly.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Fixes issue where dotDir with trailing slash caused failures.
Refactors lib.nix to use raw paths internally, fixing issues with spaces
in paths.
Updates history.path logic to correctly handle raw absolute paths.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Add systemd service ordering dependencies to prevent EasyEffects from
starting before the Wayland compositor is ready.
**Problem:** EasyEffects would crash during login with "Failed to create
wl_display (No such file or directory)" if started before the Wayland
display server was fully initialized.
**Solution:** Declaring the "After" property ensures EasyEffects waits
for the graphical session to be fully ready. The "PartOf" properly stops
EasyEffects when logging out. Got the tip from
https://github.com/wwmm/easyeffects/issues/1310.
Tested on NixOS 25.11 (Xantusia, 20251223.76701a1) and Home Manager 25.11
(0999ed8) with GNOME 49 on Wayland.
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:** 0 maintainers
**Removed:** 0 maintainers
**Total:** 282 → 282 maintainers
Generated by: lib/python/generate-all-maintainers.py
Add support for extraName, autowrapRuntimeDeps, waylandSupport, and
withPerl options in the neovim module. These options are passed to the
neovim wrapper to allow for more granular configuration.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Since PR #8099, the module sets `$SSH_AUTH_SOCK` through shells' options
for interactive shell initialization instead of
`home.sessionVariablesExtra`. The replacement was not faithful, however,
since `home.sessionVariablesExtra` is sourced also in non-interactive
shells. With this commit, the shells' profile options (where
`home.sessionVariablesExtra` is sourced) are used to set
`$SSH_AUTH_SOCK`.
Fixes#8129.
This change brings the homeConfigurations output inline with how the
nixosConfiguration output presents its attributes.
The primary purpose is for exposing the graph attribute however there is
no downside to exposing the rest along with it to prevent needing to add
each desired attribute individually in the future if more are added.
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:** 0 maintainers
**Removed:** 0 maintainers
**Total:** 282 → 282 maintainers
Generated by: lib/python/generate-all-maintainers.py
The `herbstclient` alias in the generated `autostart` made it impossible
to use bash functions.
This makes the `herbstclient` alias optional by adding an extra
`herbstclientAlias` option on the herbstluftwm configuration. The new
option defaults to `false` as to not confuse newcomers to the
herbstluftwm module, which is not a breaking change because it was only
an optimization.
The defaultEditor option sets {env}`EDITOR` however strictly speaking
{env}`EDITOR` is intended for editors that are fully compatible with
teletype terminals (ex: `ed` or `vi`'s `ex` mode).
The {env}`VISUAL variable is intended for modern "visual mode"
terminal editors (ex: `vi` or `emacs`).
Technically speaking editors that are assigned to {env}`EDITOR` should
be configured to operate in teletype compatible mode (see `vi -e` and
`vim -e`).
We don't do this currently because for most users this would be
unintuitive behavior when a script or program mistakenly checks
{env}`EDITOR` instead of first checking {env}`VISUAL`.
In the future it may be worthwhile to introduce an additional option to
these modules to configure {env}`EDITOR` in a strictly conforming manner
(i.e. using the teletype/`ex` mode flags or unsetting {env}`EDITOR`
entirely).
Related Issue: #8314
Signed-off-by: Jacob Abel <jacobabel@nullpo.dev>
If snixembed is enabled and you try to use the waybar tray the two tools
conflict with eachother and often waybar's tray will not show any icons.
This adds a warning about it, as the problem can be difficult to
diagnose.
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:** 281 → 282 maintainers
**✅ Added:** xavwe
Generated by: lib/python/generate-all-maintainers.py
Git package can be made nullable now, but module is written with
expectation of its availability.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
When nix-darwin has `nix.enable = false` (e.g., for Determinate Nix
users), accessing `config.nix.package` throws an error:
error: nix.package: accessed when `nix.enable` is off
This regression was introduced in commit a521eab when adding the
`home.uid` option. The code restructuring changed `inherit (config.nix)
package` to be evaluated unconditionally, whereas PR #6383 had
previously ensured this worked correctly.
The fix wraps the package assignment in `mkIf config.nix.enable` to
only access `config.nix.package` when nix management is enabled in the
host OS configuration.
Fixes: #8303
`uid` isn't guaranteed to be defined, have fallback logic in place to
account for that. Even if we require it eventually, we can't show a
proper assertion/warning without being able to eval.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Add a home.uid option similar to home.username. When set, the
activation script verifies the current UID matches the expected
value using the new checkUid function.
When using the NixOS or nix-darwin modules, home.uid is
auto-discovered from users.users.<name>.uid when that value
is set.
This is useful for constructing paths that depend on the user's
UID, such as /run/user/<uid> paths for gpg-agent sockets or
other user-specific runtime directories.
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.
This includes the calendar/contacts prefix in the storage name as well
as the pair name to ensure that if the same name is used for contacts
and calendar then it is correctly referenced.
With swayidle one can configure two different kinds of hooks:
- Idle timeouts are executed after the session has been idle for a
specific amount of time.
- Events are executed when systemd notifies us that for example the
user session is locked or that the device is about to suspend.
While not obvious, there is a significant difference between how these
two kinds are configured: there can be several timeouts with separate
commands to be executed, but each event can only be specified once. If
an event is specified multiple times, then the last command wins.
This can be very easy to miss in swayidle's documentation. Furthermore,
because the config is a list of `{ event = "..."; command = "..."; }`
attrset, we double down on this confusion and make it seem like having
multiple handlers for an event was actually supported.
Fix this by converting from a list of "event" submodules to an attrset
where the key is the event name and the value is the command to be
executed. This makes it impossible to specify multiple commands for a
single event by accident.
If a user _does_ want to have multiple commands executed on any event
they can for example use `pkgs.writeShellScript` and manually chain the
commands in that script.
`lib` comes from the Nixpkgs used to instantiate Home Manager itself and
cannot change within the module fixpoint. However, `pkgs` is configurable
(via `nixpkgs.*` or `_module.args`) and may come from a different Nixpkgs
instance from the one providing `lib`.
Mismatches between Home Manager's release and the release of the `pkgs`
instance are more common and also more likely to cause subtle issues.
This change extends the release check to include `pkgs.lib.trivial.release`
so that such mismatches can be detected and reported.
You would encounter an eval error when a module (such as pimsync) would
try to access an attribute of `accounts.contacts.<name>.local`, since it
would default to `null`. The same problem was encountered in the
`accounts.calendar` module, and fixed in
2c157e22dc which has the same solution.
Closes#8258
Reported-by: redbeardymcgee
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:** 280 → 281 maintainers
**✅ Added:** arunoruto
Generated by: lib/python/generate-all-maintainers.py
home-manager's generated completions shadow built-in completion scripts.
fish actually has logic to deal with this when the path ends with
/generated_completions, so let's take advantage of it.
Link: 47c773300a/src/autoload.rs (L421-L424)
By default, dconf uses $XDG_CONFIG_HOME/dconf/user as the user database, but this can be changed by specifying user-db:<name> in a profile file and setting the DCONF_PROFILE environment variable to that profile. One may want to use different user databases for different DE/WMs to avoid collision.
Currently the module invokes dconf without touching DCONF_PROFILE, which means that 1) it is unable to configure multiple different user databases, and 2) the behavior of activation script will be affected by the DCONF_PROFILE environment variable when it is invoked, possibly leading to undesired results.
This PR adds a dconf.databases option, so that settings under dconf.databases.<name> will be written to $XDG_CONFIG_HOME/dconf/<name>. The old dconf.settings option is left as-is to avoid breaking compatibility.
This is a fix for PR #7108 that forcibly enables xdg-desktop-autostart
units, whether or not `config.xdg.autostart` is enabled.
Partially fixes#7708, there is still a risk for conflict if
`xdg.autostart` and `services.picom` are enabled.
The fish shell comes with builtin completions. For example, git
completion supports context-aware completion of things like commit
hashes, branch names, sub-commands, etc.
Until fish 4.2, builtin completions were explicitly loaded from
`share/fish/completions`, however that is now deprecated and disabled.
In effect, this means generating manpage-based completion will shadow
and disable builtin completion.
Avoid that, by only generating completion when fish does not have
builtin support for the command.
Root cause: DeterminateSystems/update-flake-lock@v27 uses
peter-evans/create-pull-request@v6.0.5 internally, which is incompatible
with actions/checkout@v6's new credential storage mechanism.
The Problem Chain:
- actions/checkout@v6 moved credentials from .git/config to $RUNNER_TEMP
(security improvement)
- peter-evans/create-pull-request@v6.0.5 cannot access credentials from
the new $RUNNER_TEMP location
- This causes exit code 128 when update-flake-lock tries to create PRs
The Fix:
- create-pull-request@v7.0.9 fixed v6 compatibility
- However, update-flake-lock@v27 (released July 2025) hasn't upgraded yet
- Reverting to v5 restores working credential access
Next Steps:
- Can upgrade to v6 once update-flake-lock uses create-pull-request@v7.0.9+
- https://github.com/DeterminateSystems/update-flake-lock/pull/224
- Dependabot configured to ignore v6 upgrades until compatibility is fixed
Fixes: https://github.com/nix-community/home-manager/actions/runs/19712979574
See: https://github.com/peter-evans/create-pull-request/issues/690
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
When creating a new release branch, dependabot.yml needs to be updated
to include the new branch for automated dependency updates.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
checkwinsize is enabled by default since bash5.
It's not much hassle if enabled, but it's not necessary anymore and it conflicts if attempting to piggy-back on .bashrc with other kinda-compatible shells (e.g. osh).
bash5 is default for a couple of years already, and there is no bash4 in there at all
Fixes#8185
The upstream easyeffects project has migrated from GTK to Qt, deprecating --gapplication-service and removing DBus integration. See #8185 for more details.
Tested with version 8.0.3 and 7.2.5 , uses lib.versionOlder cfg.package.version "8.0.0" to be backwards compatible.
Removed DBus service configuration (Type=dbus, BusName)
Move presets and config dir from $XDG_CONFIG_HOME to $XDG_DATA_HOME (new upstream location)
Other notes
Since they have moved config directory, it will warn show warnings because of empty dirs. These warnings will also show in the service until you remove them. I dont think this is a problem and new users will not experience this.
easyeffects --version
easyeffects: presets_directory_manager.cpp:140 Old /home/hausken/.config/easyeffects/output directory detected. Migrating its files to /home/hausken/.local/share/easyeffects/output
easyeffects: presets_directory_manager.cpp:149 Could not copy any file. Aborting migration of /home/hausken/.config/easyeffects/output
easyeffects: presets_directory_manager.cpp:140 Old /home/hausken/.config/easyeffects/irs directory detected. Migrating its files to /home/hausken/.local/share/easyeffects/irs
easyeffects: presets_directory_manager.cpp:149 Could not copy any file. Aborting migration of /home/hausken/.config/easyeffects/irs
easyeffects: presets_directory_manager.cpp:140 Old /home/hausken/.config/easyeffects/rnnoise directory detected. Migrating its files to /home/hausken/.local/share/easyeffects/rnnoise
easyeffects: presets_directory_manager.cpp:149 Could not copy any file. Aborting migration of /home/hausken/.config/easyeffects/rnnoise
easyeffects: presets_directory_manager.cpp:140 Old /home/hausken/.config/easyeffects/autoload/output directory detected. Migrating its files to /home/hausken/.local/share/easyeffects/autoload/output
easyeffects: presets_directory_manager.cpp:149 Could not copy any file. Aborting migration of /home/hausken/.config/easyeffects/autoload/output
This removes the possibility of running `home-manager rollback`. It
was added by mistake at some point and has never worked since it
immediately calls a non-existent function `doRollback`.
* easyeffects: Fix service hanging on system shutdown
* Make systemd take dependencies automatically from dbus service instead of setting them manually
* Add TimeoutStopSpec for 10 seconds
Adds a finalPackage option to chromium-based browsers. Allows users to use overriden package binary in their setups, without relying on PATH availability.
As of v0.15.0, theme files use TOML instead of JSON and have a new structure.
The test actually didn't previously assert the existence of a theme file even though the example settings had a theme in them...
Didn't fail even with incorrect assertion. Multi line string for
assertFileContains didn't properly work. Don't want to manage an entire
zsh config file in assertFileContent so just multi step asserting the
generated file.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Add `mutableUserDebug` and `userDebug` options to generate `debug.json` file.
The options are heavily inspired by `mutableUserTasks` and `userTasks` options implementation.
Closes#8091
When passing `gpg.publicKeys` a `source` including _multiple_ keys,
only the first one in `source` will have `trust` set correctly.
This commit fixes the issue and adds a corresponding test
(failing without the patch, fixed with it).
- added a test to the standalone-basics unit: the option subcommand queries the `home.username` value and ensures that something sane is returned.
details:
- the option subcommand was broken by upstream changes to the `nixos-option` command.
- hm had no tests for the option subcommand, so the problem was discovered by users.
- output from nixos-option probably starts with 'Value:\n "alice"', but we're only looking for 'alice' because the output format is not guaranteed.
- calls nix-instatiate instead of nixos-option (using nix-option's underlying nix script).
- loops over options to display since nixos-option can only process a single option.
- passes through the --recursive flag from nixos-option. and includes --help and man page for the flag.
details:
nixos-option was changed from a C++ command to a shell script that feeds a nix script (with arguments) to nix-instatiate. in the process, the --config_expr and --options_expr we once passed to nixos-option were removed.
without changing the nixos-option shell script, we have no may to override the arguments to the nixos-option nix script.
luckily, we can use our modulesExpr as a direct argument to the new nixos-option nix script.
unluckily, the nix script does not accept multiple options per instantiation. so we are also looping through the given options ourselves and feeding them each to nixos-option's nix script.
the nixos-option shell and nix scripts are in different places in the nix store, so we have to search the store for the nix script given the location of the shell script.
also, the nixos-option nix script wants a 'recursive' flag, so we now honor that flag for the home-manager option subcommand.
Add an option to set rclone's log-level per mount:
programs.rclone.remotes.<name>.mounts.<name>.logLevel = "DEBUG";
If no value is set, it'll use rclone's implicit default ("NOTICE")
Previously, the debug log-level got enforced (via "-vv"),
which caused noisy logs, and there was no easy way to change that.
Note: rclone global-flags can't be configured in the config file,
so this uses the environment variable approach.
references:
- https://rclone.org/docs/#logging
- https://rclone.org/docs/#v-vv-verbose
If no value is given, use the implicit default of rclone instead of redefining it through the options
Ensure NIX_CONFIG is correctly configured for the tests command.
It is possible that someone may enable experimental features on an
ad-hoc basis, e.g. via the `--extra-experimental-features` CLI flag.
In this scenario, the tests script cannot assume they are already
enabled.
In the future, we may also wish to configure other things, like extra
binary substitutors.
Extract the `tests` package from `flake.nix` into its own file
`tests/package.nix`.
This a) de-couples it from the flake (to a degree) and b) allows more
neatly using the callPackage pattern.
This adds a new backupCommand option to allow users to specify a
custom command to run on existing files during activation, as an
alternative to the existing backupFileExtension mechanism.
Adds backupCommand option to NixOS and nix-darwin modules.
Exports HOME_MANAGER_BACKUP_COMMAND environment variable when set.
Updates file activation logic to use the custom backup command if
provided, falling back to the existing backup extension logic.
Updates collision checking and user-facing instructions to
mention the new option.
This enables advanced backup workflows, such as moving files to
trash or archiving with custom tools, before managing them with
Home Manager.
Fix the trailing slash bug described in issue #8024 by conditionally adding a slash only for filesystem type, not for singlefile. Also update the expected test output to match the correct order.
This is writing `.DS_Store` files as root in "~/Applications/Home
Manager Apps/<app>", and causing errors during the `rsync` call since it
will try to delete any files that is not present in the app bundle.
Fix#8067.
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:** 276 → 277 maintainers
**✅ Added:** lorenzleutgeb
Generated by: lib/python/generate-all-maintainers.py
Adds the ability for the auto-upgrade service to update a Nix flake
instead of Nix channels.
This is controlled by a new `useFlake` boolean option. When enabled, the
service will run `nix flake update` in the directory specified by the
`flakeDir` option.
`flakeDir` defaults to the standard Home Manager configuration directory
(`~/.config/home-manager`), making this feature work out-of-the-box for
most users. The path is passed to the upgrade script via an environment
variable in the systemd service unit.
Sometimes a race condition will make the events stream start after the
daemon is running, and then no events will be streamed.
This fixes the problem by checking the daemon status and failing the
unit if not ready yet. It will restart 5 seconds later, which will
probably be enough.
@moduon MT-1075
The picom module's `services.picom.settings` converts Nix expressions
to the libconfig format. However, that option currently does not have
a way to specify libconfig lists (enclosed in parentheses `()`), and
can only specify arrays (enclosed in square brackets `[]`). This makes
it impossible to specify certain picom configuration options, such as
animations (which are specified using lists).
This commit adds an `extraConfig` option to the picom module as an
escape hatch so that users can still specify picom options that are not
currently representable through `services.picom.settings`.
This is basically a better version of `targets.darwin.linkApps` that
copy apps instead of linking (hence the name). While this is a
convoluted approach, it works with Spotlight, where the previous
approach doesn't. This is also the approach adopted by nix-darwin, see
PR: https://github.com/nix-darwin/nix-darwin/pull/1396.
There are a few particularities about this implementation, for one the
flags we use in rsync are different since we are not using root to copy
the apps to `~/Applications`. This may or may not cause some issues with
specific applications so further testing will be needed. Also the check
for App Management permission needs root (via sudo), so this check is
gated behind a flag that can be disabled if needed.
Fix: #1341.
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:** 275 → 276 maintainers
**✅ Added:** will-lol
Generated by: lib/python/generate-all-maintainers.py
I did not want to break any current configurations, and as it seems that
senpai doesn't rely on any of the patterns that weren't possible with
the old toSCFG generator.
The former toSCFG implementation had several shortcomings which
did not consider a few possibilities SCFG provides. Details were lined
out in #7465.
The new interface needs more verbosity, but reflects better the
properties of the SCFG format. I also chose to use the names used in the
[Specification].
[Specification]: https://git.sr.ht/~emersion/scfg#specification-draft
Replace the use of `~` in the documentation for the command and agent
settings with the `XDG_CONFIG_DIR` environment variable to avoid
ambiguity about the config directory. Also switch to the
`{file}` path macro so paths render correctly in the docs and tooling.
Mergiraf expects merge.conflictStyle to be "diff3" in git. If this isn't
the case, mergiraf cannot operate correctly. This change adds this
option to git's configuration.
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:** 0 maintainers
**Removed:** 0 maintainers
**Total:** 275 → 275 maintainers
Generated by: lib/python/generate-all-maintainers.py
At the top of maintainers.nix it says that:
> Entries here are expected to be follow the same format as described in [1]
Typo aside, [1] links to NixOS' maintainer-list.nix file off a 5 year
old commit, which contains outdated information on which maintainer
fields are required. Notably, `github` and `githubId` have since become
mandatory, while `email` was moved to the list of optional fields.
This updates the link to point to the current version of the file.
Add two new options to customize how extension permissions are checked:
- `extensions.exhaustivePermissions`
Ensures that the permissions requested by all extensions managed by
home-manager are authorized
- `extensions.exactPermissions`
When enabled, the user must authorize only the permissions that the
extensions requests, not more nor less.
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:** 0 maintainers
**Removed:** 1 maintainers
**Total:** 276 → 275 maintainers
**❌ Removed:** Kritnich
Generated by: lib/python/generate-all-maintainers.py
error: The option `home.sessionVariables.GCC_COLORS' was accessed but
has no value defined. Try setting the option.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
error: The option `home.sessionVariables.GREP_COLORS' was accessed but
has no value defined. Try setting the option.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Upstream package removed and unmaintained project. Recommended to
replace with maintained alternatives such as `deskflow` and `input-leap`
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
The VSCode packages contain a product.json which is used to determine
the extension and config dirs. When the package name is not known,
this change parses this file (using IFD) (which may appear in a few
places) and uses that to generate the paths.
This hopefully allows more VSCode derivatives to "just work" without
Home Manager updates.
Co-authored-by: andre4ik3 <andre4ik3@fastmail.com>
When using the backupFileExtension option, if the backup file exists,
the activation process fails. This adds an option to instead overwrite
the old backup instead of failing.
Render each bullet as a single line at runtime while keeping ~80-column source formatting. Prevents truncation of the colliding path in service logs, reducing the need to inspect journal output.
Right now we load `hm-session-vars.sh` from
`config.home.profileDirectory`, generally resulting in the following
code being generated in `zshenv`:
```
. "/etc/profiles/per-user/<username>/etc/profile.d/hm-session-vars.sh"
```
This is problematic in a few situations. For example, when entering a
`distrobox` environment I got the following error:
```
/home/<username>/.zshenv:.:2: no such file or directory: /etc/profiles/per-user/<username>/etc/profile.d/hm-session-vars.sh
```
Instead, let's point to the path directly to the `/nix/store` by using
`config.home.sessionVariablesPackage` instead. This is more robust and
it is more consistent with other things we source in ZSH.
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:** 276 → 277 maintainers
**✅ Added:** aionescu
Generated by: lib/python/generate-all-maintainers.py
Configuration entry similar to;
```nix
programs.radio-active.enable = true;
```
By default `ffplay` is used for recording/playback, but that can be
changed by applying either of the following;
```nix
programs.radio-active.settings.AppConfig.player = "vlc";
programs.radio-active.settings.AppConfig.player = "mpv";
```
All other configuration options documented by;
https://github.com/deep5050/radio-active?tab=readme-ov-file#default-configs
maybe applied under the `AppConfig` attribute set.
Finally, the `aliases` attribute set allows for defining key/value pares
that will generate a `~/.radio-active-alias` of bookmarked stations, for
example something like;
```nix
programs.radio-active.aliases = {
"Deep House Lounge" = "http://198.15.94.34:8006/stream";
};
```
... will result in;
```
Deep House Lounge==http://198.15.94.34:8006/stream
```
WARN: Darwin hosts may report issues about `pkgs.vlc`
Co-authored-by: Robert Helgesson <robert@rycee.net>
Add test to verify intelligent width optimization of shell arrays.
The test demonstrates how formatShellArrayContent packs multiple items
per line
within reasonable width limits rather than one item per line.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Replace individual setopt statements with array-based loops for cfg.setOptions.
Use lib.hm.zsh.define for consistent array formatting and add unset statements
to clean up temporary variables, improving consistency with other zsh optimizations.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Replace individual setopt/unsetopt statements for history options with efficient
array-based loops. Also optimize history substring search key bindings using
the same pattern. Use lib.hm.zsh.define for consistent array formatting and
add unset statements to clean up temporary variables.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Replace individual plugin PATH/fpath statements and conditional sourcing with
efficient array-based loops. Use lib.hm.zsh.define for consistent array
formatting and add unset statements to clean up temporary variables.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Replace naive string quoting with lib.escapeShellArg for proper shell escaping
of special characters, spaces, and quotes. Integrate with new formatShellArrayContent
for intelligent multi-line array formatting in zsh array definitions.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Add shared utility function that formats shell arrays with smart width optimization.
Packs multiple items per line based on available width (~78 chars per line) while
maintaining readability. Includes helper functions wrapLines and formatMultiLine.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
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:** 275 → 276 maintainers
**✅ Added:** andre4ik3
Generated by: lib/python/generate-all-maintainers.py
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:** 0 maintainers
**Removed:** 1 maintainers
**Total:** 276 → 275 maintainers
**❌ Removed:** 06kellyjac
Generated by: lib/python/generate-all-maintainers.py
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:** 275 → 276 maintainers
**✅ Added:** mdaniels5757
Generated by: lib/python/generate-all-maintainers.py
Package removed from nixpkgs, project repository was archived two years
ago and no longer maintained.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This option allows a user to inject default applications directly from
a list of specified packages. It was previously possible to do this,
but only through import from derivation.
There's a warning already in place for this, but instead of skipping the
shell integration the build process would fail due to `lib.getExe` being
passed a null value.
The service fails on Home Manager switch every now and then. This
commit add explicit stop and restart settings to it.
This also adds some additional parameters used in the upstream service
definition.
Currently translated at 100.0% (17 of 17 strings)
Translate using Weblate (Bulgarian)
Currently translated at 100.0% (17 of 17 strings)
Translate using Weblate (Bulgarian)
Currently translated at 100.0% (17 of 17 strings)
Translate using Weblate (Bulgarian)
Currently translated at 100.0% (39 of 39 strings)
Co-authored-by: Borislav Rangelov <borislav.y.rangelov@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/home-manager/cli/bg/
Translate-URL: https://hosted.weblate.org/projects/home-manager/modules/bg/
Translation: Home Manager/Home Manager CLI
Translation: Home Manager/Home Manager Modules
According to the nushell docs (https://www.nushell.sh/book/configuration.html#configuration-overview):
"The first file loaded is env.nu, which was historically used to override environment variables. However, the current "best-practice" recommendation is to set all environment variables (and other configuration) using config.nu and the autoload directories below."
Include various tests for the agents and command file generation and
different ways of configuring it.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Opencode can support loading agents/commands from files in the config
folder. This allows re-using the same agents/commands between different
coding assistants easier than trying to fit their structured json
configuration.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We only use one of the config methods, let user know their configuration
will be discarded if they attempt to use more than one.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Program removed upstream, let module stay around for a bit in case it came back.
We can re-introduce if the situation changes, but we have an alternative.
It's not really clear why this was done in the first place, and
furthermore it means that the secrets have been getting printed to
stdout and appear on the system journal as a result.
Configuration entry similar to;
```nix
programs.pianobar = {
enable = true;
user = "groovy-tunes@example.com";
password_command = "cat /run/secrets/pianobar/groovy-tunes";
};
```
... will produce a `~/.config/pianobar/config` file with content of;
```conf
user = groovy-tunes@example.com
password_command = cat /run/secrets/pianobar/groovy-tunes
```
... and add `pianobar` to `home.packages` list.
All configurations that `man pianobar` documents _should_ available via
`extraOptions` attribute.
License, according to `NixOS/nixpkgs` is MIT, and that seems to match
what's shown on `PromyLOPh/pianobar` repo too;
- d92bfd5feb/pkgs/by-name/pi/pianobar/package.nix (L42o)
- https://github.com/PromyLOPh/pianobar/?tab=License-1-ov-file#readme
* add cache clearing for oh-my-posh package changes
Using oh-my-posh creates script files in `~/.cache/oh-my-posh` which include an old derivation path. Once that path is garbage collected, oh-my-posh stops working preventing to successfully create new shells.
```
bash: /nix/store/5ddhz8nsahf1d03smzx2xpmynjspjfh8-oh-my-posh-26.8.0/bin/oh-my-posh: No such file or directory
```
* fix oh-my-posh package reference in cache clear
Use the configured value from programs.oh-my-posh.package as the value of oh-my-posh to compare during cache cleanup.
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:** 0 maintainers
**Removed:** 1 maintainers
**Total:** 275 → 274 maintainers
**❌ Removed:** ehmry
Generated by: lib/python/generate-all-maintainers.py
...and since according to commit
f9b5172d95 the defaults are the upstream
values, default `colors` to null.
Setting JQ_COLORS is just unnecessary environment clutter when using the
default colors.
Although the module now does nothing besides (optionally) installing
`jq` when `colors` is left at its default value, that is still useful:
from a flake with multiple home-manager configurations, some of which
have `jq` provided through other means, setting/forcing
`programs.jq.package` to null is more convenient than conditionally
adding `jq` to `home.packages`.
According to <https://rclone.org/commands/rclone_mount/#systemd>,
it should be possible to set `Type=notify` to ensure that `rclone`
is not marked as started until the mountpoint has actually been
successfully mounted.
Add quotes to the preview command to prevent the shell from interpreting
options with `<name>` as writing the output of the command name to a
file with the name of the remainder of the option name.
Don't need to encourage triaging git history to bother people who
haven't opted to maintain a module.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This patch updates all usage of toPlist such that it escapes any strings
in the final output.
The motication for this change is to avoid confusion when end-users of
home-manager's APIs are not aware that the option values they set end up
being passed un-escaped to XML files.
BREAKING CHANGE: Consumers doing manual escaping will now be doubly escaped.
Co-authored-by: Linnnus <linnnus@users.noreply.github.com>
sheldon: add module
sheldon: some fixes
Revert "sheldon: some fixes"
This reverts commit ea859bc3e3.
sheldon: fix missed variable name
sheldon: add description and example (blank)
sheldon: add shell configs
sheldon: format code
sheldon: add test case
maintainers: add Kyure-A as maintainer
sheldon: add completions option and various fixes
sheldon: fix missed file name
sheldon: fix setting to simple
sheldon: add option to enable completion script
sheldon: change default value of options to enable completions to true
sheldon: fix how commands are combined
sheldon: fix missing prefix
sheldon: change mkIf to be enclosed in parentheses
sheldon: fix expression type
sheldon: add mainrs as maintainer
Allow a user to disable an email account by setting
`accounts.email.accounts.<name>.enable = false`. This is useful if
someone wants to configure email accounts globally but only use them in
certain circumstances.
Everywhere email account configuration is used, check if the account is
enabled before checking any attributes of the account.
- Configuration file is now placed in XDG_CONFIG_HOME/codex/config.toml by default for versions >=0.2.0 when preferXdgDirectories is enabled.
- Falls back to ~/.codex/config.yaml for versions <0.2.0 and to ~/.codex/config.toml when preferXdgDirectories is disabled
- Sets CODEX_HOME environment variable to $XDG_CONFIG_HOME/codex when using XDG directories.
- Updated tests to verify XDG directory behavior and environment variable presence.
One of the most annoying things is finding the test you want to run and
executing it, manually. Created a python script to leverage fuzzy
finding our available test outputs to execute with the CI commands.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We generate the news id from the message. This news entry was the same
as an earlier one but for a different platform, which resulted in the
same entry id.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We need to catch the news entry issues sooner. Right now we don't have
any testing around them.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Creating a sherlock module for the sherlock launcher. Prefer a file be
controlled by a single option and using settings for the main config
file.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Create the programs/nix-search-tv module, with options to enable,
change settings, and television integration.
Co-authored-by: awwpotato <awwpotato@voidq.com>
According to upstream documentation, they recommend at end of file. But,
realistically just needs to be after compinit.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
adjusting the tmux lines for setting the prefix.
previously the prefix option would be set in the prefix key table, causing it to not register correctly.
- updated tests
It was a bit too ambitious to also remove production of the gcroot, we
need it to keep track of the currently active Home Manager
configuration.
Fixes#7583
Allow easily seeing what tests are involved in a chunk so you can
identify tests -> chunks easily.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Adding a package option to udiskie created an evaluation warning as
there is no default executable for udiskie. This replaces `pkgs.getExe`
with `pkgs.getExe'`, which removes this evaluation warning, but does
require that the package has a binary named udiskie.
- Add basic-service.nix test for caffeine service configuration
- Test systemd service generation with proper graphical-session.target
integration
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
- Add basic-service.nix test for default gnome-keyring configuration
- Add custom-components.nix test for pkcs11, secrets, and ssh components
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Allow calling the cli from PATH so you can invoke your own changes
without relying on the service.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Adds tests to ensure that the services are still created correctly and the correct deprecation warnings are shown
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Adds tests to verify that the configuration files and services were created sucessfully, even in a no configuration case
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We dont want to try re-adding people that get removed manually.
Otherwise you start fighting CI.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Warn users when they configure a relative path. We want to encourage
using absolute paths and env variables.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
- Add comprehensive documentation for upgrading Home Manager channels.
- Cover channel-based, flake-based, and NixOS module methods.
- Include troubleshooting section and state version updates.
- Update examples for NixOS 25.05 compatibility.
We have moved towards running more tests on buildbot for better
performance. Don't duplicate efforts on github actions.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We currently only need the tests covered by test-chunks in CI. We will
migrate more tests into the buildbot CI, as we are able to flesh them
out more.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We have lots of tests and would like to add more. However, adding more
testing coverage comes at the cost of a slower CI when we run them
sequentially. This adds test outputs that are chunked however we'd like
to tune for batch sizes. Allowing us to create a parallelized CI
workflow.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
The poison module is intended to catch cases where the documentation
depends on the user's configuration. We want to keep such dependencies
to a minimum as it increases the risk of documentation rebuilds and
confusion caused by documentation being different depending on the
source.
Currently, we send all files as a list but it can be problematic with
files that can't be evaluated properly. Instead of crashing the entire
extraction process, we will send a file at a time for eval so we can
just bypass files causing issues.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Previously, a stateVersion check for 20.03 determined whether or not the input to
`programs.zsh.history.path` would be prepended with `$HOME`. However, this was not
communicated in the documentation, which stated the version check determined whether
the default histfile location would be in `programs.zsh.dotDir` or
`home.homeDirectory`.
The current change simplifies matters and brings path handling in-line with that of
the preceding work on dotDir path handling. If a relative path is provided, it is
parsed as being relative to `home.homeDirectory`. Both absolute and relative paths
are supported, and are cleaned before being passed to other functions.
Tests have been rewritten for the new logic, with case handling for reusability.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Previously, `config.programs.zsh.dotDir` prepended strings with `$HOME`.
This caused issues like nix-community#5100, where `$HOME` is
inconsistently resolved in time for the evaluation of the option. The handling
of this variable is also inconsistent with how paths are handled elsewhere,
including within the same module, where `config.programs.zsh.history.path`
does not mutate the supplied string.
To preserve backwards compatibility, this change prepends
`config.home.homeDirectory` to relative paths, while assigning absolute paths
unchanged. Tests for both cases are added.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This should have the same effect `system.checks` has in nixpkgs:
adds paths to the build closure without being becoming part of the
generated configuration.
This is useful for built-time checks as these should not leave a
trace in the built home configuration.
The implementation mirrors nixpkgs: add an unused argument to the
home-manager-generation derivation.
- Automatically include "$schema": "https://opencode.ai/config.json" in the generated
opencode config.json file
- Update documentation to mention the added schema property
- Add corresponding "$schema" entry in test config.json file for validation purposes
Closes#7506
- Introduce `rules` option to provide global custom instructions for opencode
- Write `rules` content to `~/.config/opencode/AGENTS.md` if non-empty
- Update tests to cover presence and absence of `AGENTS.md` file with rules content
On macOS, configuration files are stored in the platform-standard
directory `~/Library/Application Support/` by default. However, if the
user enables the XDG Base Directory specification by setting
`xdg.enable = true`, iamb should respect the `XDG_CONFIG_HOME`
environment variable (along with other related XDG variables).
Currently, this behavior is not implemented in iamb, a PR has been
opened to fix that -> https://github.com/ulyssa/iamb/pull/478.
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:** 262 → 263 maintainers
**✅ Added:** yethal
Generated by: lib/python/generate-all-maintainers.py
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
If neither neomutt.sendMailCommand nor passCmd are set, leave
configuration for sending emails unset. This will leave neomutt to
manage sending emails itself, which matches the existing description of
the `accounts.email.accounts.<name>.neomutt.sendMailCommand`
configuration option.
This also removes the assertion added in bd680a8c (neomutt: allow
default email sending behaviour, 2025-07-12), since it is now valid to
have neither passCmd nor neomutt.sendMailCommand on an account.
When the silent flag was refactored to pass in configuration. We
accidentally introduced a bug that clobbered any `global` settings.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Since https://github.com/nushell/nushell/pull/16007, the recommended
flag to avoid erroring on missing fields is `--optional`. To avoid
compatibility issues, the builtin optional access syntax is used
instead, which is backwards-compatible.
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:** 261 → 262 maintainers
**✅ Added:** FriedrichAltheide
Generated by: lib/python/generate-all-maintainers.py
Since we're checking out the `pull_request_target` and not the
`pull_request` branch. We can't evaluate the files from the PR branch.
We can skip the files for evaluation without crashing the entire
extraction.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
These were removed as part of dead code removal, but they are actually
needed in the integration tests for comparing with the configuration
generated by the installation.
This adds support for generating ordered children and nodes with
attributes and/or properties but no children. These are both needed to
generate zellij keybinding configuration.
VS Code 1.102 separates MCP configuration from `settings.json` to a profile-specific `mcp.json`. VS Code automatically performs this separation if MCP configuration is detected inside `settings.json` which conflicts with the immutability of the settings.json that home-manager supplies.
Currently we create a systemd unit that will throw an error when
settings aren't configured because we try to link to a file that wont be
created with empty config.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Break the workflow into multiple scripts to make it easier to test /
maintain. Also fix the remove reviewer process to not review reviews
from people that were manually requested.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Simplify extraction and generation of file. We dont need the comments
and can leverage the appropriate lib.generator function.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Better support updating existing PRs and summary of changes in workflow
summary. Tested in nixvim.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
The file grew in complexity while adding customization. Separate
concerns for each gtk versions customization and use lib helpers to
consolidate logic.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We can now customize a lot more in the gtk module. Test more scenarios
to ensure a user has more control over what gets generated.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This notably allows to specify a custom SMTP server or GPG keys, to be
able to respond as the alias without depending entirely on the parent
account's configuration.
Signed-off-by: tsrk. <tsrk@tsrk.me>
Adds extension permissions as suggested in
https://github.com/nix-community/home-manager/issues/7001.
Adds the 'profiles.<name>.extensions.settings.<name>.permissions' to Firefox
derivatives. If set, this option adds an assertion that fails if an extension
package requests permissions that weren't added to the permissions option. In
order to not require 'profiles.<name>.extensions.force' to be set when only
permissions, but no extension settings were defined, the relevant assertions
were changed. They now check whether any 'extensions.settings.<name>.settings'
was set instead of checking whether 'extensions.settings' was set.
---------
Co-authored-by: Robert Helgesson <robert@rycee.net>
Co-authored-by: awwpotato <awwpotato@voidq.com>
f there's an account under accounts.email.accounts with neomutt.enable set to true but neither passwordCommand nor neomutt.sendMailCommand set, then building the Neomutt rc file will fail. Ensure that failure has a useful error message, rather than a confusing type error.
While we're here, make the module code slightly less repetitious by just building the set of email accounts that have Neomutt enabled once, rather than multiple times in multiple contexts.
Needless spam and doesn't really make sense to default to repo
maintainers. Also, clearly hasn't been utilized for a long time.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Make a more detailed form for filing a feature request. This will help
steer users towards more helpful feature requests, similar to our bug
reporting.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This resolves issue that someone might try and configure bookmarks and a
policy will prevent it from applying properly.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Currently, we aggressively limit what modifier can be used in the module
system that blocks valid configurations. Allow any strings to unblock
these configs. But, could be refactored further to support list of
modifiers and automatically convert to a config string.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Add an example of using extension settings to control installation and
accesibility of a extension in the policies option.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Automated update of the master maintainers list combining:
- Home Manager specific maintainers from modules/lib/maintainers.nix
- Nixpkgs maintainers referenced in Home Manager modules
Changes: +17 -0 lines
Generated by: lib/python/generate-all-maintainers.py
Co-authored-by: home-manager-ci[bot] <214323736+home-manager-ci[bot]@users.noreply.github.com>
We can simplify maintainance of HM while providing more consistency
across modules by relying on the nixpkgs module primitive mkBefore /
mkOrder as it was done in the Zsh module.
Deprecates:
- programs.msmtp.extraConfig
- programs.msmtp.extraAccounts
programs.msmtp: merge extraConfig and extraAccount into configContent
We can simplify maintainance of HM while providing more consistency
across modules by relying on the nixpkgs module primitive mkBefore /
mkOrder as it was done in the Zsh module.
Deprecates:
- programs.msmtp.extraConfig
- programs.msmtp.extraAccounts
Similar purpose to the `mkSettingsRenamedOptionsModule` for migrating
users configuration to the new format needed by a module. But,
supporting freeform options that shouldn't get option definitions.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Should remove maintainers that existed, but weren't assigned to modules.
Will add maintainers that we missed during last refactoring.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We dont want need to maintain duplicate entries for maintainers in HM
that already exist in Nixpkgs. Add a check that calls out users that
don't need an entry in our internal list.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We generate the maintainer list from `meta.maintainers` and need the
attribute to be available on eval of all modules. It was set in the
`config` option which would only be evaluated when a module was enabled.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We just need to run it once properly and dont need to keep running it
for every push until the last.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
We want to ping maintainers whenever files are affected. Right now it
requires changing a PR to a draft and reopening, but we should be more
clever and request the review whenever the file is updated.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Was relying on flawed logic and fragile parsing to identify maintainers
on changed files. Rework to use nix eval to grab the `meta.maintainers`
to use when requesting a review.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Previously, we had to hack together some string matching to identify and
retrieve the maintainers in the repo. We can just eval the modules to
retrieve the list of maintainers more accurately.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Used to eval home-manager and fetch meta.maintainers to accurately
retrieve maintainers for the master list.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Cancel existing runs when a new push happens so we don't unnecessarily
run jobs that are irrelevant.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
https://github.com/nix-community/home-manager/pull/7117#issuecomment-3018582819
noted that #7117 broke compatibility with forwarding ssh-agents using
`ssh -A`/`ForwardAgent`. In order to continue supporting the fix for
the issue raised in #5997 and address the compatibility problem
mentioned by @euank, this commit introduces the solution described in
https://github.com/nix-community/home-manager/pull/7117#issuecomment-3025001779.
The code now checks the following:
1. is this shell part of an SSH connection and is `SSH_AUTH_SOCK` set?
if so, assume the socket variable was set by sshd to point at a
forwarded socket; bail out to skip setting `SSH_AUTH_SOCK".
1. is the current process a child of `gpg-agent --daemon`? if so, then
bail out to skip setting `SSH_AUTH_SOCK`.
1. if we got this far, then set `SSH_AUTH_SOCK`.
I've tested this fix locally and can confirm that both #5997 as well as
the regression are fixed.
Signed-off-by: squat <lserven@gmail.com>
We need to make sure that we don't insert invalid maintainers otherwise
it breaks the RFC39 invite workflow. Check that we have valid nix and
the required attributes are able to be parsed properly.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Creates the user.js if profile.extensions.settings is set.
This fixes the case when profile.extensions.settings is set but every
other option in the mkIf is false, resulting in no user.js creation.
Want to create an easier way to notify maintainers that someone is
working on their module. Added a workflow for requesting a review from any maintainers that have joined the `home-manager-maintainers` team in the organization.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Automated update of the master maintainers list combining:
- Home Manager specific maintainers from modules/lib/maintainers.nix
- Nixpkgs maintainers referenced in Home Manager modules
Changes: +6 -4 lines
Generated by: lib/python/generate-all-maintainers.py
Co-authored-by: home-manager-ci[bot] <214323736+home-manager-ci[bot]@users.noreply.github.com>
We need a nixpkgs on NIX_PATH. Right now we have been using the latest
from channel. But, we can actually just fetch the nixpkgs from our
flake.lock by parsing the flake.lock.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Not every PR requires the overhead of spinning up runners and running
our entire test suite. Filter on paths affected and only run the
relevant steps.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Create initial master maintainer list from the home manager and nixpkgs
maintainers that are referenced in the repository.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Create a script for generating the master maintainer list we will use
for inviting / pinging on changed files.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Before:
> Existing file '' would be clobbered by backing up '/home/winter/.config/fish/config.fish'
After:
> Existing file '/home/winter/.config/fish/config.fish' would be clobbered
I had programs.bash.sessionVariables.CDPATH = ... defined in the
different nix files. One was taken into account and the other one
ignored.
Turns out plain "types.attrs" has the following merging strategy:
===
merge = loc: foldl' (res: def: res // def.value) { };
===
Changing it to "attrsOf", the module system warned me of the conflicting
values.
Similar to the `nixos-rebuild repl` command, `home-manager repl` will
launch the Nix read-evaluate-print-loop environment with the Home
Manager configuration loaded.
To make that more useful, also add the pkgs and options attributes from
the generated Home Manager configuration to the environment.
This doesn't currently work with flakes, because I don't use them and
I'm not confident I could safely test that function.
We have a configuration option services.syncthing.guiAddress which is an explicit option because we need it in the syncthing-init service, but why not also set it in the actual syncthing config as well as (or instead of?) the current CLI override? This way other software that parses the config file / REST API like syncthingtray just works with it instead of erroring out and unexpectedly requesting user interaction.
I guess we could actually also scrap the explicit services.syncthing.guiAddress option in favor of the syncthing-native services.syncthing.settings.gui.address because these two (valid!) options conflict otherwise.
Also, a next PR (or addition to this one) could be to make sure the syncthing-init service treats services.syncthing.settings.gui differently by not PUTting but PATCHing the configuration as PUTting triggers an API key regeneration, again breaking REST API access for other tools.
This commit addresses https://github.com/nix-community/home-manager/issues/5997
At the root, the gpg-agent SSH integration is not working on Darwin
because shells are started with `SSH_AUTH_SOCK` already set to something
like `/private/tmp/com.apple.launchd.ozLmoURHDC/Listeners`, which
prevents the hook from setting the variable to the gpg-agent's socket.
This commit fixes the issue using a different mechanism to detect if the
current shell has already had the `SSH_AUTH_SOCK` variable set to the
gpg-agent's socket, namely by checking for `gnupg_SSH_AUTH_SOCK_by` as
documented in
https://www.gnupg.org/documentation/manuals/gnupg/Agent-Examples.html#Agent-Examples.
This is essentially a simplified version of
https://github.com/nix-community/home-manager/pull/5901 that does not
attempt to migrate gpg-agent over to launchd.
Signed-off-by: squat <lserven@gmail.com>
Zed uses JSON5 for settings files. JQ doesn't understand that format and
fails if found, when merging with preexisting settings.
Here I add a conversion step that converts JSON5 to JSON before handling
the contents to JQ.
Besides, I changed the arguments in the jq function, so instead of using
`[0]` and `[1]`, we now use `$dynamic` and `$static` respectively. This
should make scripts more readable.
Fixes https://github.com/nix-community/home-manager/issues/7247
Fixes https://github.com/nix-community/home-manager/issues/7226
Currently only running on the master branch. But, we can schedule on the
release branch, as well.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Right now, we grab the latest home-manager pushed to remote. We need to
test against the code we are pushing out.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
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>
Fix so that you can still generate `programs.helix.extraConfig` without
using `programs.helix.settings`. Useful particularly in the case of
`extraConfig = lib.readFile ./config.toml;`.
As I noticed in
<https://github.com/nix-community/home-manager/pull/7277#issuecomment-2985781610>,
it seems hyprland changed its domain name from `hyprland.org` to
`hypr.land`. (The old domain redirects to the new one)
These changes are made by the following:
find . \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i 's/hyprland\.org/hypr.land/g'
Not run in CI so didn't notice. We had a shared file. But, now attrset
and list differ in what they can generate. Separate the expected test
files.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Since we're creating a new derivation, we drop the original package
attributes. Add our own meta.mainProgram to resolve those warnings.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This is good for when displays are not considered part of the home configuration and are instead considered ephemeral.
Great for laptops but I use it for my desktop as well.
these hardcoded freeformat settings dont add anything over the default,
worse they generate empty sections which can then clash with user included config (my usecase).
It's best to move those to example.
so one can mix nix generated and manual configs
Instead of using `readFile` on the generated file, we included the generated config to avoid IFD. Because this approach makes ~/.config/meli/config.toml less readable (it referecens another generated file) I disabled it when the user does not "include" personal config. This feels a bit hackish but this is the best way I could find to keep the best of both worlds.
Fix an issue where the generated ~/.config/nvim/init.lua lacks a newline after the vim.cmd [[source ...]] directive. Without this newline, subsequent lua configuration is concatenated onto the same line, breaking lua syntax.
init.lua Before:
vim.cmd [[source /nix/store/...]]vim.opt.rtp:prepend(...)
After:
vim.cmd [[source /nix/store/...]]
vim.opt.rtp:prepend(...)
Using ./. forces Nix to copy the flake to the store a second time.
Using bulitins.path like this, forcing the name to be "source", reduces the extraneous copy.
as per cha-config, keybindings should be under section `page` and not `pager`.
Also replaced the line with an example from man page because the current one wasn't working properly
Autocompletion scripts and additional plugin functions are located in
specific directories that might not match the plugin source script but
need to be included in fpath before calling compinit.
An option to provide a path to these scripts is added to add the paths
to fpath before calling completionInit.
Co-authored-by: @zimeg <zim@o526.net>
jellyfin-mpv-shim has a bug, that causes it to not be able to read the
configuration file if it's not writeable (even though it never writes
anything).
This commit works around that by storing the actual link to the Nix
store in a different file, and making a writable copy in `conf.json`.
Ideally, this should be fixed either with a patch in nixpkgs or (even
better) upstream.
Providing dconf via hm in this manner provided to be problematic for
user with systems that were already providing dconf (like ubunut).
Revert ff73544e4a
aichat is an all in one CLI tool for AI interactions.
On first run it prompts you to create a config so I made a home manager module to do this declaratively.
No longer serves a purpose, was short lived and most people are either
using `settings` or will use `extraConfig`
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
In some setups, this would cause missing Gio modules that cause e.g.
Nautilus to not be able to view the XDG trash, and potentially other
issues.
Fixes: ec8205c3 ("dconf: set env var")
Fixes: #7143
Adds the bindswitches option to the sway module.
Bindswitches allows you to run a sway command when a state changes (when a certain event occurs).
See https://github.com/swaywm/sway/wiki#clamshell-mode and sway(5) for more information
It was already possible to configure this through sway.extraConfig but I find this approach dirty as described by the Nix RFC 42, and there is currently no settings as it describes.
Use finalPackage pattern with wrapper so that people who don't use the
service can benefit from the other options.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This commit converts `package = mkOption` declarations throughout the
codebase to use the more modern and consistent `lib.mkPackageOption`
function.
Key changes:
- Simple package options: `mkOption { type = types.package; default = pkgs.foo; }`
becomes `lib.mkPackageOption pkgs "foo" { }`
- Package set options: Uses correct package set as first argument with
`pkgsText` parameter (e.g., `lib.mkPackageOption pkgs.vimPlugins "plugin" { pkgsText = "pkgs.vimPlugins"; }`)
- Removes redundant descriptions that just restate the package name
- Preserves examples and extra context where meaningful
- Handles submodule plugin options properly with `null` defaults
This modernizes the option declarations and makes them more consistent
with current nixpkgs patterns while maintaining full backward compatibility.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Add `programs.qutebrowser.perDomainSettings` which let's one to set
configuration options for specific URLs [1].
It option doesn't check if the options passed to it are valid, it
translates the config to python code to be written on the file as is.
Mimicking the behaviour of `programs.qutebrowser.settings`.
Added a new test case `test-qutebrowser-url-settings` for testing the
implementation.
[1]: bb7bbb6ead/doc/help/configuring.asciidoc (per-domain-settings)
currently ./format does a bunch of stuff with git that was only necessary for nixfmt but not nixfmt-tree, so I deleted it (just use treefmt command directly instead). I also added keep sorted to keep the really long module lists sorted (already used in nixpkgs).
This adds gtk.gtk2.force enable option which maps directly onto home.files.${cfg2.configLocation}.force to allow overwrite of the gtkrc-2.0 file (workaround for bug #6188).
Enables users to provide paths to JSON files for VS Code settings,
tasks, and keybindings. This allows for more flexible configuration
management and reuse of existing configuration files instead of using inline configurations.
The `hash` argument was mistakenly removed during dead code cleanup in #6985.
This argument is required by `fetchPluginTarballFromRegistry`, so `pluginFromRegistry` must pass it through.
To avoid future removals by `deadnix`, `pluginFromRegistry` now explicitly takes and forwards the `hash` argument.
Previously, if an invalid value was passed, the build would fail with:
error: attribute '"00:02:03"' missing
at /nix/store/sz92b5gqi0ma61d18fwbihi8p37mkvir-source/modules/services/nix-gc.nix:69:5:
68| in
69| freq.${frequency};
| ^
70|
There was an assertion that should have prevented this from happening
but the crash would happen before the assertion gets a chance to stop
the build with a nice error message.
This commit both gives the assertion a chance to trigger and improves
the assertion's error message.
This adds a module for dbus with only one option, `packages`.
The `dbus.packages` options allows users to specify packages to have
their dbus service files (from `/share/dbus-1/services`) linked to the
users dbus services directory (`$XDG_DATA_HOME/dbus-1/services/`),
effectively enabling the services.
Currently on Darwin, services.emacs.defaultEditor = true isn't respected, as the variable is only configured on Linux.
This PR simply moves the variable out to a common block, so it's applied on all platforms.
In #7057 changed the definition of how the prezto files where loaded
(from using `.source` to `.text`) and also manually add the text from
`zsh.{profile,login,logout,env}Extra` files to the prezto definitions,
but the last part was unnecessary and now we have duplicates inside the
file.
This commit fixes it.
Right now the `zsh.prezto` module ignores the contents of the
`zsh.{profile,login,logout,env}Extra` options, so it means that if you
try to set, e.g., `zsh.profileExtra = "something";` this option will be
(silently) ignored.
This commit fixes another issue: since the main `zsh` module sets
`home.file."${relToDotDir".zshenv"}".text` while `zsh.prezto` set the
same file using `.source`, `zsh.prezto` would have priority so the
environment variables from Home-Manager would not be loaded in non-NixOS
systems. Now that we are using `.text` for both, the issue is fixed.
This commit adds proper deprecation warnings and documentation for the 'criteria' option, guiding users to use the more flexible 'settings' option with nested attributes instead.
- Added warning message when users use the deprecated option
- Updated documentation with examples showing the new approach
This commit refactors the mako module to properly handle mako INI-style
configuration with sections:
1. Enhanced the `settings` option to support both global settings and
nested sections
2. Update custom INI generator that:
- Properly formats global settings and sections
- Adds appropriate newlines between sections
This change allows users to define both global settings and criteria
sections
in a single `settings` attribute, resulting in cleaner and more
intuitive configuration.
Move all inlined news entries from news.nix into separate files
organized
by year and month. This makes the news system more maintainable and
easier to navigate.
- Extract 202 inlined entries to individual files in YYYY/MM directory
structure
- Update news.nix to only contain the module definition
- Use recursive directory traversal to find all news entries
- Update news.nix to recursively search for news entries in
subdirectories
- Update create-news-entry.sh to place new entries in YYYY/MM/
directories
- Move existing 2025 news entries to the new structure
This makes the news directory more organized and easier to navigate.
Update the documentation to inform users they can create news entries
themselves using `nix run .#create-news-entry` without waiting for
maintainers. This makes the contribution process more self-service
and improves the documentation to match the recently exposed flake
package.
Following https://github.com/jj-vcs/jj/pull/6300, Jujutsu has deprecated
support for configuration files in `~/Library/Application Support` for
darwin. The XDG-standard configuration location can be used instead, for
all platforms.
Direnv exports PATH as a string, nu expects it to be a list and breaks
some functionality like external command completion. This requires
nushell 0.104.0, which is merged into nixpkgs-unstable.
Add any number of wine packages
Add any number of proton packages
Link runners directly from nix instead of using lutris.
Specify the steam package lutris should use.
Extra packages passed to lutris (mainly since it's often missing essential things, such as umu-launcher)
In Sbt (prior to 2.0) a sbt key not scoped to `ThisBuild` will always be at the project level, rather than at the build level.
In order to do some things, like use a private repository configured by sbt with sbt-scalafix, we need the credentials scope to the build, otherwise the credentials show as non-existent.
Previously, maildir path was not escaped in any way, so using a path with commas
lead to a TypeError:
```
TypeError: expected string or bytes-like object, got 'list'
```
Import-from-derivation (IFD) has problematic performance, and is disabled in
Nixpkgs by policy. It is arguably good practice for libraries to avoid
it whenever possible, as it has poor ergonomics in some cases,
especially with dry builds, as it requires multiple eval+build phases.
As such, prevent its use in Home Manager by default by putting existing
tests that use IFD behind a config. In CI, run a first pass with IFD
disabled, skipping tests without the config. Then run a second pass with
IFD enabled and including tests with the config. This second pass will
also run tests without the config, but they should be cached from the
previous run, so the cost is not double (only eval time should be paid
twice). It’s necessary to change from using NMT’s `run` to `build` as
`run` itself uses IFD.
Of the tests that have the config:
- kitty/theme-to-themeFile: this is a test for deprecated config, and so
should be removed eventually anyway
- podman: the implementation relies on IFD to create individual systemd
units from the derivation output, and so it is not straightforward to
remove the IFD; doing so would require rethinking how the module works
to instead have the systemd unit files included as-is rather than as
individually configured units in the Nix config.
Update mako module to pass lib.hm.strings.toKebabCase to the
mkSettingsRenamedOptionModules
function, which ensures option names are properly converted to
kebab-case format.
Add a new library module for deprecation utilities with a configurable
transformation function that allows specifying how option names should
be
converted (snake_case, kebab-case, etc.).
Home Manager creates broken link to the Ghostty config
syntax highlighting definition file, because it has different location
on Darwin. This commit updates path to the config for Darwin users.
Fixes#6961
Refactors the services.mako module to replace all its configuration options with a freeform settings option and criterias. I also added a test for the configuration.
Even if no accounts were configured, it was defaulting to just account1,
which meant all other accounts were deleted every time thunderbird was
restarted. This fixes that by defaulting to the empty list (so it
remains unset in the user.js).
...even empty ones.
For packages in `home.packages` with no Fish completions, we build an
empty directory that is not included in our runtime closure (because we
build a collection of symlinks to their contents: if there are no
contents, there is nothing to symlink). This means these empty
completion packages get garbage-collected by Nix. They are not that
expensive to rebuild but there can be enough of them it adds up, and any
change to any package in `home.packages` is enough to trigger a rebuild.
Fix this by forcing a dependency on all of them. Since we already
depended on them anyway if they were non-empty, this only adds
dependencies on empty directories (so should not significantly affect
storage space).
Fixes#6157.
This should have the same effect `system.extraDependencies` has in
nixpkgs: adds paths to the runtime closure without installing them
anywhere.
This is useful for preventing garbage collection of packages that are
expensive to rebuild. For example:
- nixpkgs itself suggests using this for `factorio.src`, which requires
a token to fetch.
- we can use it to address #6157: avoid needlessly rebuilding
completions for packages that do not have any.
The implementation mirrors nixpkgs: add a file containing the store
paths we want to keep around to the home-manager-generation derivation.
This removes the automatic update of the Home Manager packaging in
<https://gitlab.com/rycee/nur-expressions/>. That setup is very old
and brittle, it should therefore not be used.
fcitx5 overwrites config files unless the entire folder is readonly. With this PR, a single fcitx5 symlink is made instead of multiple fcitx5/* ones. The link is only created when relevant options are set.
`carapace _carapace nushell` adds `/homeless-shelter/.config/carapace/bin`
to PATH, this changes it to ` $HOME/.config/carapace/bin`. Other shells
don't have this problem as they run the command and source on startup
whereas Nix writes the command output to a file as part of the build.
Alternative option for allowing a user to automatically configure what
binary to use from a `pinentry` package. Previously, we always used
`meta.mainProgram` but, there are packages that provide multiple
binaries and this would allow flexibility for a user to override the
default program used.
Pass `--non-interactive` flag to `rclone config update` calls so that an
incomplete config is not used, resulting in failure on some remotes,
for example gdrive.
Provides a module for configuring mpvpaper a video wallpaper program for wlroots based wayland compositors. It provides options for setting the 'pauselist' and 'stoplist'.
We change `$HOME` to something not writable, but newer treefmt fails if
it cannot write. We could use a tmpdir, but there’s not much point to a
cache that will be removed, as just add the flag to not use the cache.
As empty string might get interpreted as `/`, and thus probably has
things in it. This dir is always(?) present on *nix systems, empty, and
owned by root, so ideal and typical for this sort of usage.
I've started seeing $HOME/log $HOME/.msmtp.queue.log populated after using
msmtp via neomutt. Although the latter is not, the former is a bit
annoying. Home-manager already tries to avoids this 1, so I was curious to why
this occured.
Interestingly this didn't happen until a month ago, so I've tried to git blame my way out of the problem both on my configuration and on upstream
home-manager however I didn't find a fitting change on the suspected dates.
Home-manager uses2 msmtpq script3 to send emails through which manages
also the queue of mails to be sent. As stated on upstream source of the script
4, it looks for MSMTPQ_Q and MSMTPQ_LOG variables to decide where to
https://git.marlam.de/gitweb/?p=msmtp.git;a=blob_plain;f=scripts/msmtpq/msmtpq;hb=HEAD
Previously shell arguments were not escaped properly, leading to breakage on
group names containing characters with special meaning to the shell (in
particular spaces); theoretically keys containing single quotes would be
affected too. Escape all arguments passed to the shell properly instead.
Add new option `accounts.contact.accounts.<name>.khard.addressbooks`.
Remove the previous soln,
`accounts.contact.accounts.<name>.khard.defaultCollection`, which is
superseded with the new option.
Add a new test to check the new `addressbooks` option. Modify an
existing test which was checking the removed `defaultCollection`.
Previous commit a38f88 allowed a hardcoded path to be set for khard if
the path set for its local storage is not the actual `vdir`. This was
accomplished via adding the `defaultCollection` option. However this
accepted only a single sub-directory, and when one has more than a
single collection on the same dir this would require repetition on
configuration to set [1].
This is a continuation of the soln given to
nix-community/home-manager#4531, refer to there and the previous PR [2]
for reference.
[1]: https://github.com/nix-community/home-manager/issues/4531#issuecomment-2701156246
[2]: https://github.com/nix-community/home-manager/pull/5220
This is a super cool TUI browser capable of CSS and other cool stuff.
Reminiscent of ELinks but modern and better.
More info here: https://sr.ht/~bptato/chawan/
This allows `programs.firefox.profiles.*.userChrome` to be set to a:
derivation, path/path-like string to directory or file, or multiline
text to be used as content verbatim.
This allows setting, for example(s):
```nix
programs.firefox.profiles."jacob.default".userChrome = pkgs.wavefox;
programs.firefox.profiles."jacob.default".userChrome =
"${pkgs.wavefox}/userChrome.css";
```
From what I understand, the warning removed in this PR was incorrect.
There shouldn't be any conflict between osConfig.nix.gc and
programs.nh.clean as our home-manager service only cleans user profiles
(which nix-collect-garbage does not do).
In this scenario they should both work at the same time as they are
cleaning two different things.
Feature testing flakes / nix-command is more robust over configuration
sniffing. Ultimately, the deciding factor should be if flakes work --
not if the config looks like they will / won't work.
This alternative test both asserts that the `nix` command is enabled,
and that flakes are enabled, without depending on whether or not
flakes are emitted as an experimental feature.
This is both repairing support for Determinate Nix 3, and prepares for
a potential future where Nix itself considers Flakes stable.
Closes#6702
The resulting YAML file is mangled by the use of `lib.mkDefault`,
causing the service to fail. But we can safely remove it anyway due to
the use of `mergeSets` here.
This reverts commits 95861b5d9f and
d2c014e1c7 (PR #6778), as they broke
Aerospace configuration loading. Whilst the generated TOML configuration
wasn't the best, it was completely valid, whereas after the
aforementioned PR it was no longer valid.
This adds defaults to the `localModule` that match the ones in
accounts/calendar. This way there is no need to explicitly define the
local part, only if the defaults should be changed.
* formatter: use a different treefmt root
Problem: i use jujutsu as a VCS these days https://jj-vcs.github.io/jj/
and when using jujutsu workspaces, they dont contain the `.git`
file/folder that git worktrees have.
solution: use a different (unique) root file. I first tried with flake.nix for instnace but we have several in the tree while is only one "release.json"
* Update flake.nix
Co-authored-by: Austin Horstman <khaneliman12@gmail.com>
---------
Co-authored-by: Austin Horstman <khaneliman12@gmail.com>
Instead of managing our own formatter file, we can leverage a tool
specifically tailored for formatting a repository and allowing
configuration to be passed to formatters.
Each of `polybar.service`, `stalonetray.service` and `taffybar.service`
contains `WantedBy=tray.target`. So we can use a single `tray.target` in
`kdeconnect-indicator.service`'s `After=`.
This also makes the applet service tray implementation agnostic, so long
as it integrates with `tray.target`.
We have stuff that's referenced in CI but not available as flake outputs
to build. Adding default.nix outputs to flake.nix so flake users can
reference them easier.
Use x-restart-triggers to reload on file change, since users
with impermanence setups were running into issues with onChange and calling the `swaync-client` to handle the hot reload.
The current way to define a news entry in Home-Manager is error prone
(since you need to type the date manually) and also it is common cause
of conflicts after merges because all entries are defined in the same
file.
This commit fixes this: we can now create individual news entries for
each new entry. A script `create-news-entry.sh` also helps to create it
in the correct format (with the correct filenames and structure).
Fix a missing dependency for `tray.target` in `redshift/gammastep` module when the tray feature is enabled.
This caused a race condition that could result in the redshift/gammastep systemd user unit failing because the tray provider (e.g. waybar) isn't ready yet.
Sets SDL_IM_MODULE to fcitxto make fcitx5 work with sdl2 programs.
See fcitx-im.org/wiki/Setup_Fcitx_5#SDL_IM_MODULE and wiki.archlinux.org/title/Fcitx5#IM_modules
This reverts commit 216690777e.
Reverts #6622
Seems to be causing issues for other users, though. Will revert and we can try again with some tests in place.
This commit moves both mcfly and mcfly-fzf into the main is-interactive block for fish, which is technically unneccesary as the checks are done internally (but mcfly-fzf is broken in this regard bnprks/mcfly-fzf#10)
Pushing users.users.<name>.packages from matching home-manager users leads to a circular dependency when
one attribute set is calculated from the other.
A configuration pull approach replaces the previous one to break up the circular dependency. This new approach
allows more flexibility in configuring both option sets, including calculating from each other.
EXAMPLE;
```nix
{lib, /* custom arg */ flake, config, ...}: {
home-manager.useUserPackages = true;
home-manager.users = builtins.intersectAttrs (lib.filterAttrs (_: v: v.isNormalUser) config.users.users) (flake.outputs.homeModules.users);
}
```
EXAMPLE;
```nix
{lib, /* custom arg */ flake, config, ...}: {
home-manager.useUserPackages = true;
home-manager.users = { inherit (flake.outputs.homeModules.users) demo-user; };
users.users = lib.mapAttrs (_: _: { isNormalUser = true; }) (lib.filterAttrs (_: v: v.programs.git.enable) config.home-manager.users);
}
```
fixes#594
* options-manual: Remove `users` option set from documentation
The option declaration `users.users` is owned by the upstream
nixos modules and should not be documented by home-manager.
Home-manager declares an incomplete/partial option definition for
`users.users` that cannot be documented without the full definition from
the nixos modules. This partial definition is removed from the options
set while generating documentation for the home-manager nixos module.
When `readOnly` is set to `true` the autostart entries are linked from
a readonly directory in the nix store and `XDG_CONFIG_HOME/autostart` is
a link to that directory, so that programs cannot install arbitrary
autostart services.
zsh-abbr has a global abbreviations feature. The global abbreviations expand anywhere on the line and are defined by using the -g option.
https://zsh-abbr.olets.dev/types.html#global
fzf history keybind (^R) was being rewritten by omz.
This PR moves the initialization of the fzf zsh integration just after omz integration (but sill before other history managers, eg: atuin)
The version check for VSCode fails when using Cursor.
Cursor has its own versioning and is currently at
0.45.14 (based on VSCode version 1.96.2).
The version checks for generating the `extensions.json` in the
module look at the package version,
which causes them not to be generated for Cursor.
The legacy attrset option type for `firefox.profiles.<name>.bookmarks`
was accidentally removed in 9d55428. This adds back support for this
type by refactoring the bookmarks submodule. This also adds a new test
ensuring this won't happen again.
To support easier migration of deprecating old zsh options. We can
adjust the internal priorities to fit within the `mkBefore` (500) and
default (1000). Makes it easier for `initExtraFirst` migrationg to
`mkBefore` and `initExtra` to default prio.
Added programs/distrobox.nix module. It provides the option "programs.distrobox.containers", which makes it possible to declare a list of containers to be created. Since building those containers is not possible at build time (because none container backend is available at that time), I also added a Systemd Unit to build those containers after switching the configuration.
mcfly-fzf's initialization steps don't properly check for interactive
shells. It does check, but only after checking if mcfly has been
initialized. Because mcfly does not initiate itself on non-interactive
shells, that causes mcfly-fzf to return an exit code, breaking
non-interactive shells.
Librespot is a Spotify client. While there is already a module for
spotifyd, which uses Librespot as a library, this adds one for the
upstream frontend.
The fish shell has added a flag to the abbr command which allows one to expand it only if it is typed after a real command e.g.:
git s -> git status
s -> s
Also see the last example here: https://fishshell.com/docs/current/cmds/abbr.html#examples
Podman uses systemd-run to setup transient systemd timers, e.g. for healthchecks.
On systems where systemd is not present in /run/current-system/sw/bin or ~/.nix-profile/bin (like one of my Ubuntu hosts), setting up the transient timers will fail. For containers with healthchecks configured, this results in the container being stuck in starting state.
Relevant issue here: containers/podman#25034
podman's systemd generator can automatically resolve unit dependencies, so instead of us guessing these links to create them, we provide the sources during generation
Rclone is a command-line program to manage files on cloud storage, it
also featrues support for FUSE mounts.
"Users call rclone *"The Swiss army knife of cloud storage"* and
*"Technology indistinguishable from magic"*" - https://rclone.org/
This module manages the configuration of rclone remotes.
This splits the bookmarks submodule into a seperate file, to make it easier to maintain (like how the search module was previously split out in #5697).
This also refactors bookmarks to require a new force option, to be more explicit about overriding existing bookmarks.
* thunderbird: add message filters option
Add option to declare account-specific message filters.
* tests/thunderbird: add second filter for sort
Make sure they are generated in correct order.
* thunderbird: use profilePath for messageFilters
In testing on darwin and NixOS, they use this path.
---------
Co-authored-by: 347Online | Katie Janzen <katiejanzen@347online.me>
Update the `initContent` option example in `zsh.nix` to use
`lib.literalExpression` for correctly display in documentation.
Signed-off-by: Qiming Chu <cchuqiming@gmail.com>
* zsh: add initContent option for custom .zshrc content insertion
- Users can add content anywhere by using `lib.mkOrder`, `lib.mkBefore`
and `lib.mkAfter` custom configurations.
- Add test cases to verify the insertion of content before and after
existing configurations in `.zshrc`.
consolidate zshrc content tests into a single priorities test
Without `$argv` the function will not pass any flags or arguments to the
`assume.fish` script. These are necessary to use assume to access the
AWS console or use IAM role chaining.
Added support for build, image, and volume quadlets
Resolved test failures due to podman 5.3.0 upgrade
Replaced several instances of pkgs.podman with services.podman.package
I updated my flake a few weeks back and `zoxide` has been giving me an error recently:
```
zoxide: detected a possible configuration issue.
Please ensure that zoxide is initialized right at the end of your shell configuration file (usually ~/.bashrc).
If the issue persists, consider filing an issue at:
https://github.com/ajeetdsouza/zoxide/issues
Disable this message by setting _ZO_DOCTOR=0.
```
To be fair, I haven't noticed any issues with `zoxide` apart from this error message.
The `zoxide` eval statement in my `.bashrc` is not "right at the end" of the file as mentioned in the message which isn't surprising given that it is given a `mkOrder 150`. In my own config, I increased this to `2000` (to ensure it comes after any `mkAfter`s which are `mkOrder 1500` to ensure it happens at the end of the script. After doing so, it appears at the end of my `bashrc` and I no longer get the error message.
When email account is gmail in thunderbird, set additional server
settings.
As of March 2025, gmail only allows ssl/oauth0 authentication, so here I
set the authMethod accordingly.
Also setting 'is_gmail' to true in thunderbird settings such that labels
and trash work out of the box when the email account flavor is "gmail".
This brings in the gmail configs for how it handles folders, labels, and
archiving messages.
PR #6593 broke activation when `sessionVariablesExtra` is used, e.g.:
`services.ssh-agent` because it concatenate the strings without a line
break, so the resulting `hm-session-vars.sh` file became:
```bash
export XCURSOR_PATH="/etc/profiles/per-user/thiagoko/share/icons${XCURSOR_PATH:+:}$XCURSOR_PATH"if [ -z "$SSH_AUTH_SOCK" ]; then
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent
fi
```
This commit fixes it by enforcing a line break between
`sessionSearchVariables` and `sessionVariablesExtra`.
This commit introduces `home.sessionSearchVariables` option, that is
created to be a "generic" version of `home.sessionPath` for any
environment variables that is similar to PATH (e.g.: MANPATH). This
allows composition of those variables between multiple modules, avoiding
issues like this one:
https://github.com/nix-community/home-manager/pull/4579/files#r1364374048
This commit also reimplements `home.sessionPath` as terms of
`home.sessionSearchVariables`, to reduce code duplication and show that
the code is correct.
The behavior is to prepend the new search paths. This will allow
the user to override the defaults easily by setting it later in the
configuration.
This reverts commit 066ba0c5cf. After
further discussion, we want to maintain this as the naming scheme going
forward to be similar to standards that have been trying to be
implemented in naming configurations and modules.
Can generate the config without installing application through home-manager. Helpful when a package is broken (or not provided) on a specific platform through nixpkgs and needs to be installed through other means but you still can benefit from the declarative configuration.
As per systemd.special(7)[0] graphical-session-pre.target is strictly
for units that set up things for a graphical session. Most notably,
these are usually started *before* the compositor/session is actually
ready.
While Home Manager's current implementation of graphical-session.target
allows these units to work regardless of what systemd.special(7)
specifies, other setups like ones with uwsm[1] do not allow these units
to start properly.
[0]: https://www.freedesktop.org/software/systemd/man/latest/systemd.special.html#graphical-session-pre.target
[1]: https://github.com/Vladimir-csp/uwsm
* nixos: remove with lib
* nix-darwin: remove with lib
* home-manager: remove with lib
* modules/accounts: remove with lib
* modules/config: remove with lib
* modules/i18n: remove with lib
* modules/misc: remove with lib
* modules: remove with lib
* modules/targets: remove with lib
* tests/modules/firefox: remove with lib
* tests/modules/services: remove with lib
A path may be preferred for some uses, and allowing it avoids the user
needing to `builtins.readFile`, thus creating duplicates and making it
more difficult to determine the actual store path.
In manpage of git-send-email --smtp-server,
For backward compatibility, this option can also specify
full pathname of a sendmail-like program instead; the program
must support the -i option. This method does not support
passing arguments or using plain command names. For those use
cases, consider using --sendmail-cmd instead.
The or operator is left associative, and since there is another
argument after the first term, the interpreter tries to apply whatever
the or-expression evaluates to. If the first operand is unset, it
evaluates to removeAttrs, and everything is fine, but if it is set to
a boolean (which is what it should be set to), then it tries to apply
a boolean to arguments, and we get a type error. Bracketing
explicitly with parentheses fixes this.
It presumably went unnoticed because not many people have tried
setting the option
`programs.firefox.profiles.<profile>.search.engines.<engine>.isAppProvided`.
This commit fixes an issue in aerc-accounts that prevents oauth2
accounts from being generated from given parameters. It also allows
users to add XOAUTH2 credentials without having to add all four of
client_id, client_secret, token_endpoint, and scope. It further adds
tests for the XOAUTH2 config generation.
Assigning a plain list to extraLuaPackages is deprecated.
Please assign a function taking a package set
as argument, so
extraLuaPackages = [ pkgs.lua51Packages.xxx
];
should become
extraLuaPackages = ps: [ ps.xxx ];
This commit adds a systemd service to run it, and accordingly moves it to services.wpaperd.
In addition, the existing tests have been migrated to services, and an entry in the newslist has been created alerting users to this change.
clipse is a configurable, TUI-based clipboard manager application written in Go with minimal dependency. Though the app is optimized for a Linux OS using a dedicated window manager, clipse can also be used on any Unix-based system.
Native messaging hosts module assumed all hosts are packages, and we
were passing null before.
The patch also adds a test case for a null firefox package to avoid
regressions in the future for this common (on Darwin at least) scenario.
Note: Thunderbird doesn't need a similar change because it doesn't allow
a null package.
Signed-off-by: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
Instead, pick just the required packages to pass the tests.
Note: we have to refer to real derivations because symlinkJoin assumes
the passed derivation is a directory with files, otherwise it fails as:
@thunderbird@: No such file or directory
Signed-off-by: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
Before the patch, both directories for firefox and thunderbird were
created, even when only one of the programs was enabled.
Signed-off-by: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
On Linux, both Thunderbird and Firefox use the same directory to contain
native messaging host modules. On this platform, we have to merge both
directories with native hosts into one.
The patch introduces a separate helper module to manage native host
directory generation. Now program modules (firefox, thunderbird) declare
native hosts to initialize; while the new helper module determines
*where* and *how* to merge them on disc.
Signed-off-by: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
Prevents extensions settings from accidentally being overriden when
using `profiles.<name>.extensions.settings`. Adds the
`profiles.<name>.extensions.force` option to acknowledge the risk.
since the `imports` attributes of modules allows for paths we can remove
the `import` making the consumption of nixosModules, darwinModules and
flakeModules cheaper
This commit refactors programs.firefox.profiles.<name>.extensions in
order to support both installation of extensions (addons) and their
configuration. It does this by setting the
`extensions.webextensions.ExtensionStorageIDB.enabled` user_pref to
false.
When this preference is set to false, support for storing extension
settings in sqlite databases, also known as IndexedDB or IDB, is
reverted back to the JSON format present in firefox versions prior to
version 63, as seen here:
https://blog.mozilla.org/addons/2018/08/03/new-backend-for-storage-local-api/
IndexedDB was made the default due to performance improvements, but had
the consequence of removing any possibility of declarative extension
configuration without the assistance of firefox's policy system. The
policy system is supported by a small amount of extensions, such as
uBlock Origin, but has to be explicitly supported. Even when supported,
it provides significantly less granular control when compared to the
JSON storage format.
This was resolving to `lib.options.nix.enable.visible or true`,
which is always `true`, and therefore using `nix.enable` where it
shouldn’t be used. Oops…
The path for messaging hosts seems to have been
~/.mozilla/native-messaging-hosts/ and ~/Library/Application Support/Mozilla so vendorPath has been adjusted
This extends the recently merged PR #5616, which expanded the Synching config to allow declarative settings under Linux, such that it also works under Darwin.
Changes:
* Update the module's `syncthing` launchd agent to copy the synching key/certificate before starting syncthing, analogously to the systemd service from the above mentioned PR #5616.
* Adds an `syncthing-init`launchd agent (analogously to the systemd service `synching-init` from the above mentioned PR #5616) that updates the configuration files. Since this must be run after the syncthing service started, we use a `WatchPath` to coordinate both launchd agents.
The Git module now supports SSH and X.509 signing in addition to
OpenPGP/GnuPG, via setting the `programs.git.signing.format` option.
It defaults to `openpgp` for now as a backwards compatibility measure,
but I feel like we shouldn't enforce GPG as the default on everyone,
especially for people who use SSH signing like me.
Accordingly, `programs.git.signing.gpgPath` has been renamed to
`programs.git.signing.signer`, as now the signer binary is not
restricted to GnuPG. Users should only get a warning and everything
should continue to work.
Fixes#4221, supersedes #4235
Co-authored-by: Mario Rodas <marsam@users.noreply.github.com>
Co-authored-by: Sumner Evans <me@sumnerevans.com>
Co-authored-by: Leah Amelia Chen <hi@pluie.me>
with the default to `{}`, this table is always set in the generated
config. this change allows `null` for
`workspace-to-monitor-force-assignment` and sets the default to `null`
Co-authored-by: derrik.fleming <derrik.fleming@spindance.com>
https://github.com/nix-community/home-manager/pull/1885 changed 'map'
from a string to a list of string but the default wasn't updated accordingly.
When not defining map, you would get the warning `evaluation warning: teto profile: Specifying 'programs.neomutt.(binds|macros).map' as a string is deprecated, use a list of strings instead. See `.
This allows better support for using kitty's built-in shell integration
method by setting `shellIntegration.mode' to `null', which makes it not
be set at all in the config file and disables modification to shell
initialization scripts by default. If this is used, the user should set
`settings.shell_integration' instead (if shell integration is desired),
which receives no special handling.
Adds `tldr-update` module for enabling automatic `tldr update` on a schedule.
Adds option to `tealdeer` to enable integration with new `tldr-update` module.
Standardize all 'programs.<PROGRAM>.enable<SHELL>Integration' options
with the following new functions:
- lib.hm.shell.mkBashIntegrationOption
- lib.hm.shell.mkFishIntegrationOption
- lib.hm.shell.mkIonIntegrationOption
- lib.hm.shell.mkNushellIntegrationOption
- lib.hm.shell.mkZshIntegrationOption
These functions should default to their corresponding global option:
- home.shell.enableBashIntegration
- home.shell.enableFishIntegration
- home.shell.enableIonIntegration
- home.shell.enableNushellIntegration
- home.shell.enableZshIntegration
All these global options default to the
'home.shell.enableShellIntegration' value.
This hierarchy standardizes the shell integration and increases end-user
flexibility.
BREAKING CHANGE: The following inconsistent default values change from
'false' to 'true':
- programs.zellij.enableBashIntegration
- programs.zellij.enableFishIntegration
- programs.zellij.enableZshIntegration
Link: https://github.com/nix-community/home-manager/pull/6358
Co-authored-by: Robert Helgesson <robert@rycee.net>
Create a internal/read-only trayTarget option for the xsession, which is
also used in wayland's config, if the former is not enabled.
Remove all other definitions of `systemd.user.targets.tray`, i. e, the
ones from the following modules: hyprland, sway, river and wayfire.
Within the context of the profiles submodule, `${name}` refers to the
profile name, and not the Firefox fork name.
This fixes all descriptions to use the right name. This fixes a
previous commit that introduced a dependency between the documentation
and the user's configuration.
* firefox: fix referencing firefox fork name in profile-specific docs
Within the context of the profiles submodule, `${name}` refers to the
profile name, and not the firefox fork name.
This fixes all descriptions to use `${cfg.name}` instead.
* firefox: prefer cfg.name instead of name for consistency
Instead of having to manually stub packages that should not be
downloaded we instead automatically stub all packages (except a small
list of whitelisted ones). Tests can re-introduce the real package by
using the `realPkgs` module argument.
This is a pretty common configuration option, and one that many people
will find useful to discover, specially if they're not using a window
manager.
I thought I would add it. It is also useful to have for
pass-secret-service in the future, since you'd likely want to avoid DE
keyrings.
Signed-off-by: Christina Sørensen <ces@fem.gg>
Add a flake-parts module, output as flakeModules.home-manager and flakeModules.default.
The module defines options for flake.homeModules and flake.homeConfigurations, based on the respective nixos equivalents; flake.nixosModules and flake.nixosConfigurations.
Without this fix a `nix-buid . -A home-manager` would successfully
create a `home-manager`. And one could use the included binary until
the next garbage collection, after that it would fail with an
error that it can not find the `home-manager` sources.
Similarily a `nix-copy-closure`d `home-manager` would fail with the
same error on the copies target machine.
This problem existed on both, the flake as well as the non-flake build
of `home-manager`.
This allows making the systemd user unit appear without it autostarting,
which is useful if you want to start it manually from a specific display
manager config only.
* ghostty: allow darwin users to manager their config
Currently nixpkgs does not contain a package defintion for ghostty
compatible with Darwin. Darwin users may still want to use this module
to manage their config or share config between systems. This carries
over behaviour from the beta period where this same technique was used.
see: 887e13a6e7/module.nix (L167-L173)
Also improves validation to cover theme files.
* ghostty: guard all package access with isLinux
ghostty is currently marked as broken in nixpkgs. Darwin users still
want to manage ghostty config via home-manager. Avoiding installing the
package and any extra files that depend on the package outside Linux
allows this.
* ghostty: allow nullable
Using a space separated list of targets as a single string element in
the list doesn't work properly. Change property to support list of
targets and backwards compatibility with warning for single string.
Add `preConfig`, which acts like `extraConfig`, but placed before
`settings`. This will allow to overwrite settings in `preConfig`,
using `settings` option.
When `cfg.package` is already wrapped, and wrapped without the
`ExtensionSettings` key set, this would always add that key, even if its
value was blank. This would result in `cfg.finalPackage` being a
functionally-identical, but differently-input-addressed package. This is
generally undesirable as it may result in multiple derivations being
built, and also if the value of `cfg.package` is expected to be
unchanged by the user (e.g. because they want it to be consistent
between NixOS and HM configuration).
Add a test to ensure this does not regress in the default case. Only
test on newish stateVersion since the logic for `isWrapped` differs on
older versions.
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
Calls yazi as `command yazi`, allowing to use "yazi" as
`shellWrapperName`. Also defines the wrapper with
`programs.fish.functions` instead of `interactiveShellInit`.
Allows for the database path for mu to be configured. Useful for keeping
the maildir and mu xapian cache together without having to modify
XDG_CACHE_HOME. Add test to check for custom home setting.
Fixes#5534
This update introduces support for icons.yaml in the lsd module,
enhancing the customization options for file icons.
Co-authored-by: pancho horrillo <pancho@pancho.name>
Replaces the check attribute on overlayType with lib.isFunction so it matches the nixpkgs overlayType.
This lets functions that were made by lib.setFunctionArgs to be used as overlays just like the nixpkgs overlayType.
Sometimes plugins doesn't follow the form
```
addSbtPlugin("${plugin.org}" % "${plugin.artifact}" % "${plugin.version}")
```
for instance
```
addDependencyTreePlugin
```
This commit allow free form plugin dependency.
Since hyprwm/hyprlock@00d2cbf hyprlock supports the animation and bezier
keywords from Hyprland. But, bezier needs to be defined before an
animation can use it.
Currently the following, will produce `some_opt=false` in the
rendered config:
```nix
programs.mangohud.settings = {
some_opt = false;
};
```
With the intention being to disable the option, this would be
incorrect, as per the following stated at:
<0575c8eb1f/data/MangoHud.conf (L3C5-L4C1)>
> Use some_parameter=0 to disable a parameter (only works with on/off
> parameters)
As such, I changed the rendering to follow this.
This will be output instead: `some_opt=0`
* todoman: add todoman module
Adds Mikilio as maintainer for new module for todoman a standards-based
task manager based on iCalendar
Apply suggestions from code review
Co-authored-by: Robert Helgesson <robert@rycee.net>
Update modules/programs/todoman.nix
Co-authored-by: Robert Helgesson <robert@rycee.net>
* fix: correct config name
* chore: add test
---------
Co-authored-by: Robert Helgesson <robert@rycee.net>
This commit separates profile management (setting profile and creating
GC root) from file management (removing and adding managed files
within the user's home directory).
This is a step towards deprecating profile management within the
activation script, instead relying on the caller of the activation
script managing the profile.
This can cause failures if the user has configuration that is
incompatible with the version of git pinned in the format script.
Potentially it could have other undesired effects as well.
Fix#5736
bacon reads its preferences from a different directory on Darwin.
Fix the path to read out of:
~/Library/Application\ Support/org.dystroy.bacon/prefs.toml
Linux behavior should be unchanged.
When the user changes which addresses mu should consider 'personal',
mu's store should be reinitialized.
After this change, the activation script parses the previously
configured list of addresses and compares it with the new one. If they
differ, it runs the init command even when the store has already been
initialized.
Else I get a
===
… while calling the 'throw' builtin
at /nix/store/afpmddfrmx5df3h16bdh00yy8i7db8w4-source/pkgs/desktops/gnome/default.nix:96:28:
95| gnome-shell = throw "The ‘gnome.gnome-shell’ was moved to top-level. Please use ‘pkgs.gnome-shell’ directly."; # Added on 2024-08-28.
96| gnome-shell-extensions = throw "The ‘gnome.gnome-shell-extensions’ was moved to top-level. Please use ‘pkgs.gnome-shell-extensions’ directly."; # Added on 2024-08-11.
| ^
97| gnome-software = throw "The ‘gnome.gnome-software’ was moved to top-level. Please use ‘pkgs.gnome-software’ directly."; # Added on 2024-08-11.
error: The ‘gnome.gnome-shell-extensions’ was moved to top-level. Please use ‘pkgs.gnome-shell-extensions’ directly.
===
on rebuild
GitHub Pages / publish (ubuntu-latest) (push) Waiting to run
The home manager script fails when $USER contains special characters.
For example, my work PC is managed by company's LDAP and username is <COMPANY>\<user>). When running home-manager switch I get the following error:
```
error: flake 'path:/home/<COMPANY>/<user>/.config/home-manager' does not provide attribute 'packages.x86_64-linux.homeConfigurations."<COMPANY>\<user>".activationPackage', 'legacyPackages.x86_64-linux.homeConfigurations."<COMPANY>\<user>".activationPackage' or 'homeConfigurations."<COMPANY>\<user>".activationPackage'
Did you mean <COMPANY><user>?
```
There are two types of strings that need escaping:
strings in Nix expressions (e.g. home.nix generated by home-manager init)
they need backslashes before special chars
flake URI (passed to nix build)
they need URI's percent encoding, luckily jq supports that
GitHub Pages / publish (ubuntu-latest) (push) Waiting to run
Previously, only the main identity of an account would get the proper SMTP
server assigned. Identities corresponding to aliases would not get an SMTP
server assigned at all, leading to a (Thunderbird-internal) fallback to the
SMTP server associated to the primary account. This is obviously wrong for
non-primary accounts having aliases associated to them. Fix it by specifying
the SMTP server explicitly for all identities.
* mbsync: Add NEWS entry about isync 1.5.0 changes
* mbsync: Place config file in $XDG_CONFIG_HOME
mbsync 1.5.0 supports placing isync's configuration file in
$XDG_CONFIG_HOME/isyncrc [1].
[1] https://sourceforge.net/projects/isync/files/isync/1.5.0/
* mbsync: Replace SSLType with TLSType
mbsync 1.5.0 replaced the name of the configuration option [1].
Also update SSLVersions to TLSVersions for the same reason. Inform the
user if the option was renamed.
[1] https://sourceforge.net/projects/isync/files/isync/1.5.0/
* mbsync: Replace SSLVersions with TLSVerisons
* mbsync: Update extraConfig.account example with SSL->TLS changes
Some fish plugins such as https://github.com/acomagu/fish-async-prompt
require that starship be initialized as non-interactive.
When the `programs.starship.enableInteractive` option is enabled,
starship is initialized at the end of the init script, outside the
interactive block.
Now accepts an empty list, which turns off the code so the user can
manually set ZSH_AUTOSUGGEST_STRATEGY anywhere they want via any of the
`*Variables` module options.
The initExtra code is executed after systemd graphical-session.target
starts, which means graphical applications started by
graphical-session.target cannot get these X settings.
The initExtra code is executed after systemd graphical-session.target
starts, which means graphical applications started by
graphical-session.target cannot get these X settings.
This configures the atuin daemon for Linux and Darwin systems using
systemd and launchd, respectively. For systemd, a socket is also
automatically configured to exist at atuin's default socket location.
GitHub Pages / publish (ubuntu-latest) (push) Waiting to run
This makes it easy to declaratively manage the color scheme for
kakoune via a nix package in your `~/.config/kak/colors` folder. The
color scheme can then be declaratively selected by name using the
existing Home Manager option `programs.kakoune.config.colorScheme`.
The systemd user service depends on
config.xdg.configFile."hypr/hypridle.conf".source
for `X-Restart-Triggers`. When `cfg.settings` is the default `{}`,
this causes failure since
config.xdg.configFile."hypr/hypridle.conf".source
will not exist.
Making the addition conditional on `cfg.settings` actually having
content, which would mean `xdg.configFile."hypr/hypridle.conf"` does
exist, avoids the error.
The systemd user service depends on
config.xdg.configFile."hypr/hyprpaper.conf".source
for `X-Restart-Triggers`. When `cfg.settings` is the default `{}`,
this causes failure since
config.xdg.configFile."hypr/hyprpaper.conf".source
will not exist.
Making the addition conditional on `cfg.settings` actually having
content, which would mean `xdg.configFile."hypr/hyprpaper.conf"` does
exist, avoids the error.
GitHub Pages / publish (ubuntu-latest) (push) Waiting to run
This expands the Syncthing configuration to allow declarative
settings. Code mostly pulled from the Nixpkgs module.
Changes compared to the NixOS module are:
Removed the following options:
- user, group, systemService: Unnecessary since Syncthing always runs
as the user declaring the configuration.
- dataDir configDir, databaseDir: Pointed to ~/.local/state/syncthing,
the default Syncthing directory.
- openDefaultPorts: We don't have access to the system firewall.
Furthermore, multiple changes to systemd services were made to
maintain consistency with other Home Manager modules, sandboxing
options might need to be reviewed further.
Fixes#4049
Using a fixed application name in the salt for the search engine name
hash can break with minor branding changes. For example, LibreWolf 127
used the application name "LibreWolf", but in version 128 it is
"Firefox".
The proper name can be found in about:support -> Application Basics.
Because it doesn't have to be related to the product name visible in
most of the browser (for example in the window title and help menus),
we shouldn't rely on cfg.name for that.
The application name can be read from lib/*/application.ini and we can
use that if the browser was installed via Home Manager. If not, we can
fall back to cfg.name.
By adding `key`, this allows users to disable this shared module or they can choose to not disable this shared module (by filtering by key before disabling)
This means users can disable all shared modules if all modules are paths or attrsets with a key:
`configuration.nix`:
```nix
{ config, ... }:
{
home-manager.users.enzime = { ... }: {
disabledModules = config.home-manager.sharedModules;
};
}
```
Or disabling just this module specifically:
```nix
{ ... }:
{
home-manager.users.enzime = { ... }: {
disabledModules = [ { key = "home-manager#nixos-shared-module"; } ];
};
}
```
Or disabling all modules when you have modules you can't disable (like lambdas):
```nix
{ ... }:
{
home-manager.users.enzime = { ... }: {
disabledModules = lib.filter (v: lib.isString v || lib.isPath v || (lib.isAttrs v && v ? key)) config.home-manager.sharedModules;
};
}
```
https://nixos.org/manual/nixos/unstable/#sec-replace-modules
Currently, the home-manager systemd service will only get restarted when
the home-manager configuration changes. This can lead to issues in
users' home directories not getting corrected for a while.
$ rm ~/.zshrc
$ sudo nixos-rebuild switch
$ ls ~/.zshrc
ls: cannot access '/home/enzime/.zshrc': No such file or directory
systemd rejects the service unit due to whitespace in the environment
variable assignment, pointing to the repo path, being invalid for
systemd's unit format.
See https://github.com/nix-community/home-manager/issues/6023 for
details.
The git-sync variable should also be escaped due to similar issues
with e.g. local git urls.
This makes extraPackages the default, but they do not shadow the env
so you can still have packages (e.g. LSPs) with a different version
than the global one in you local env like nix's shells.
Adds a new Podman module for creating user containers and networks as
systemd services. These are installed to the user's
`$XDG_CONFIG/systemd/user` directory.
This facilitates a legitimate use-case for browserless systems. From the
README:
> On systems without a web browser, set the -device flag to authenticate
> on another device using [OAuth device flow]:
> ```ini
[credential]
helper = cache --timeout 7200 # two hours
helper = oauth -device
```
[OAuth device flow]: https://www.rfc-editor.org/rfc/rfc8628
Please note that, for the documentation about the man-page to be
accurate, https://github.com/NixOS/nixpkgs/pull/302922 must be merged.
Previously,
- `programs.yazi.enableNushellIntegration`,
- `programs.yazi.enableFishIntegration`, and
- `programs.yazi.enableZshIntegration`
were set to false by default. It seems more appropriate to enable
these integrations by default.
makeWrapper is more consistent with the rest of nixpkgs & home-manager,
so it should be a little more maintainable. It can also validate that
the wrapper command is executable at build time.
Some desktop files will refer to the absolute path of the original
derivation, which would bypass nixGL wrapping. So we need to replace the
path with the path to the wrapper derivation to ensure the wrapped
version is always launched.
When zoxide initializes after fzf it causes fzf " ** " trigger to not
work.
To fix the issue we needed to make zoxide initialize earlier than fzf
but after bash-completion.
PR #5955
* xdg-mime: allow overrides to shared-mime-info and desktop-file-utils
The `xdg-mime` module now exposes packages to determine what will be run
for update-mime-database and update-desktop-database. This allows users
to select a different version of these packages if the are incompatible.
This should, in combination with an override to the version of
`shared-mime-info` (can be found here notalltim/home-manager-config#4),
resolve#4955, #5102, #4682, and possibly #4941. The problem seems to stem
from a mismatch in the version of `shared-mime-info` with the host.
I also switched from using `buildPackages` to `pkgs` to improve
cross-compilation compatibility.
* xdg-mime: Add tests for xdg-mime module
The xdg-mime module was missing tests so I added basic test for all the
options and checked the basic behavior. It covers ensuring that the
proper files/folders are created and that the package overrides work.
* zathura: add float to acceptable types for `options` attrset
The man page states that the `set` directive can take 4 types of values:
INT, FLOAT, STRING, BOOL. But the FLOAT part was missing from the
home-manager module
* zathura: make type of `programs.zathura.options` more readable
Change from cascading mess of `either` to `oneOf`
This is nescesarry for non-default locations, and without it, many
programs like element-desktop break in very confusing ways.
Signed-off-by: Christina Sørensen <christina@cafkafk.com>
They have been broken for a long time now and makes the PR flow quite
cumbersome. Thus we disable them until somebody is able to get them to
work again.
The value of the option `programs.zoxide.options` is passed to `zoxide
init` at shell initialization time, not to the command itself when
it's called by the user from their shell. This change makes that a
little bit clearer in the documentation.
This fixes a regression introduced in
8d7e352a4b. That commit made the false
assumption that utils would have propagated from Nixpkgs to Home
Manager. This commit copies in `escapeSystemdExecArgs` to fix the
immediate issue, perhaps we can pull this in some other way later down
the line.
- Implicitly disable checkConfig when `cfg.package = null` as we don’t
have any exe to use for the check
- Implicitly disable `swaymsg reload` on activation, since we have no
exe to use for running it
See https://github.com/nix-community/home-manager/issues/5307
Neovide is a simple, no-nonsense, cross-platform graphical user
interface for Neovim See <https://neovide.dev/>.
Used ruff's module as reference during creation.
- Add `services.kanshi.profiles.<name>.outputs.*.alias` to support new
alias directive from kanshi [1].
- Add an assertion to reject aliases not on global scope, which are
not allowed on kanshi [2].
- Add a new test to check alias rejection, `alias-assertion`.
- Add relevant coverage by modifying the existing "new-configuration"
test.
- Kanshi also doesn't allow wildcards on global scope [3], correct the
faulty test case.
[1]: 1ed86ce523
[2]: 1605f7c813/item/doc/kanshi.5.scd (L78)
[3]: 1605f7c813/item/doc/kanshi.5.scd (L80)
Add an option to programs.autorandr's configModule to allow arbitrary
extra config lines.
No option exists for adding arbitrary key/values to generated autorandr
profile config, as is common in other nix modules. This commit adds one.
Since 89670e27e1, FQDN lookup errors
from `hostname -f` may cause an early exit of the whole program.
This commit fixes the problem by absorbing the FQDN query inside the
`if` statement.
The lastUserContextId value should match the highest context ID from
the containers set in a given profile. This update ensures that this
always is the case.
This way the end user can easily check whether the home-manager
configuration is part of the module or not. Example of use:
```nix
{ lib, nixosConfig, ... }:
let
mkIfNixos = lib.mkIf nixosConfig != null;
in
{
programs.foot.enable = mkIfNixos true;
}
```
This switches `systemd.user.startServices = true` to be the same as
`systemd.user.startServices = "sd-switch"`, previously it would use
the "legacy" method. It also introduces a warning that triggers if the
user explicitly have `systemd.user.startServices = "legacy"`.
See #5452
fastfetch: update example for JsonConfig settings
Using the present version of the example, trows an error:
JsonConfig Error: `display.binaryPrefix` has been renamed to
`display.size.binaryPrefix`. Sorry for another break change.
It occurs because of change in fastfetch 2.19 of JsonConfig - moving
`display.binaryPrefix` to `display.size.binaryPrefix`
To not confuse the users, this commit changes the example to fit
current standard
See <b3ac696312/CHANGELOG.md (L85)>
`hostname -f` could fail depending on the resolver. Discard any stderr
and test for the exit status before using the value for flake attribute
lookup.
I was unable to repro the exact bad exit status in #5665.
With
- nscd disabled,
- nsswitch.conf pointing to 'files',
- hostname entry removed from /etc/hosts
`hostname -f` from inetutils-2.5 fell back to showing just the nodename
from `uname(2)`. Injecting an empty string into the
`(struct utsname).nodename` field of `uname(2)` using strace still
exited with empty output and 0 exit-status.
Fixes#5665
Adds support for Firefox forks by introducing methods that create
generic configs and options. Additional configs and options can be
added in separate modules.
The `pkgs.gnome.gnome-terminal` package was moved to
`pkgs.gnome-terminal`. The former is now a deprecated alias that
throws a warning whenever a configuration enabling the module is used:
```
The ‘gnome.gnome-terminal’ was moved to top-level. Please use
‘pkgs.gnome-terminal’ directly.
```
Related: https://github.com/NixOS/nixpkgs/pull/319659
Related: https://github.com/nix-community/home-manager/pull/5611
Should fix an issue where swayosd.service would stop without starting
again after restarting too quickly.
Triggered by ending a Hyprland session and logging in with tuigreet.
Related: https://github.com/nix-community/home-manager/pull/4316
Add an extra option,
accounts.contact.accounts.<name>.khard.defaultCollection
to hardcode a subdirectory for khard to function as intended. Khard
expects to be given a collection directory directly, from which there
can be multiple of in a vdir. This contrasts khal or vdirsyncer which
support recursive search.
Fixes#4531
Previously, type check of `programs.starship.settings` fails for some
valid settings, such as `c.commands = [["cc" "--version"]]`.
The commit fix the `type` argument passed to `mkOption`, so
`programs.starship.settings` can accept all valid values (of toml
type).
Sometimes services can fail. Failed services will generally not be
restarted by systemd. To start previously failed services we can
just reset their failed state before starting our session target.
GNOME and Plasma do the same thing.
See: https://github.com/alebastr/sway-systemd/pull/11
"lib.cartesianProductOfSets is a deprecated alias of lib.cartesianProduct."
Rename happened in nixpkgs commit `228621e42dc43f936b66e0ed042c90c511aa0535`.
rbw expects a protocol for its base_url setting[1]. Otherwise fails
with `rbw unlock: failed to parse base url: relative URL without a
base`.
[1] 741a72cf0d/README.md (configuration)
If the user has template services in their systemd configuration, these
can't be restarted, and will produces warnings during the activation
phase. Avoid those warnings by skipping any uninstantiated templates
when looking for services to start or stop.
After update to sd-switch 0.5.0, `home-manager switch` failed with the
following error message:
> Error: Error switching
>
> Caused by:
> 0: Failed to build switch plan
> 1: No such file or directory (os error 2)
This was caused by a non-existing target unit directory due to no user
services being managed by home-manager. This change makes sd-switch
run with pkgs.emptyDirectory as the target in such cases.
Closes: https://github.com/nix-community/home-manager/issues/5552
The program shell wrappers have been renamed from `ya` to `yy`
following the introduction of the new CLI tool named `ya`.
With this in mind, the `shellWrapperName` option has been introduced
to provide users with more flexibility in choosing the name they're
most accustomed to (ra, lf, ...).
Co-authored-by: XYenon <register@xyenon.bid>
Co-authored-by: 三咲雅 · Misaki Masa <sxyazi@gmail.com>
- Always append suffix `.yazi` to plugin's and flavor's attribute names.
- Warn if the attribute names already have the suffix.
- Assert that plugin's and flavor's values point to directories
containing an `init.lua` file.
- Append suffix `.yazi` to symlink targets of yazi plugins, if needed
- Improve some docs, especially links to upstream docs.
- Update tests to make use of this feature.
* nix: add options 'nixPath' and 'keepOldNixPath'
By default, the system value for $NIX_PATH is kept as a fallback.
To completely override the system value for $NIX_PATH:
nix.keepOldNixPath = false;
* nix: add more tests
* nix: add a declarative alternative to Nix channels
This adds a new option, 'nix.channels'. It's the Nix channels equivalent
of the 'nix.registry' option, and compatible with pre-Flake Nix tooling
including nix-env and nix-shell. Like 'nix.registry', this option is
useful for pinning Nix channels.
Channels defined in the new option can coexist with channels introduced
through the nix-channel command. If the same channel exists in both, the
one from Home Manager will be prioritized.
* nix: add news entry
* nix: make channels respect use-xdg-base-directories
* nix: remove 'with lib;'
---------
Co-authored-by: Michael Hoang <enzime@users.noreply.github.com>
Some prefer to handle modules-* imperatively for more flexibility, e.g.,
via waybar "includes" (https://github.com/Alexays/Waybar/wiki/Configuration).
Current HM defaults modules-* to `[]` instead of null for most other
settings, so they get written to ~/.config/waybar/config even though
no explicit configuration has been made.
And they take precedence over the imperative ones because of how
waybar's includes work:
====
Paths to additional configuration files.
Each file can contain a single object with any of the bar configuration options. In case of duplicate options, the first defined value takes precedence, i.e. including file -> first included file -> etc. Nested includes are permitted, but make sure to avoid circular imports.
For a multi-bar config, the include directive affects only current bar configuration object.
====
After migrating to nixos-render-docs, the extension move to .xtml.
Unfortunately, this broke links to the previous Options Page.
This patch provides a basic redirect support to the new Options Page.
To avoid this kind of message:
swayidle[181123]: - [Line 1054] Unable to connect to the compositor. If your compositor is running, check or set the WAYLAND_DISPLAY environment variable.
MacOS doesn't support the long-style `--fqdn` option to `hostname` that
was added by 1b589257f7.
Switch to short style `-f` that should be supported on every platform.
The 24.05 update for KDE Connect moved the kdeconnectd binary from
`/libexec` to `/bin`, so this fix will check the version of the
package used and set the path accordingly.
Since nixpkgs commit 993baa587c4b82e791686f6ce711bcd4ee8ef933,
`networking.hostName` is not allowed to be a FQDN.
Add `hostname --fqdn` to the default flake attribute names that are
searched.
If
netorking.hostname = "hostname";
networking.domain = "example.com";
is set in the system NixOS configuration, this allows defining
homeConfigurations."username@hostname.example.com" = ...
and still use
home-manager switch --flake .
instead of having to type out
home-manager switch --flake .#$(whoami)@$(hostname --fqdn)
`splitString "" "some string"` would throw exception `error: invalid
regular expression` on Darwin (or accurately, on Nix built against
libc++). Refer to https://github.com/NixOS/nix/issues/7208 for
details.
Before Nix handles that issue correctly, we should refrain from using
`splitString ""`, and luckliy `lib.stringAsChars` can do the same thing.
Using the option
wayland.windowManager.hyprland.systemd.enableXdgAutostart
users can now choose to start applications present in
`$XDG_CONFIG_HOME/autostart` when starting their sway session.
See 0144ac418e and
https://github.com/nix-community/home-manager/pull/3747
We currently have no way of specifying the sender's name inside the
From field, making a patch sent through `git send-email` appear as
coming from "xxx@domain.com".
In this commit we make this field follow the standard
realName <email>
format.
In the generated neomutt configuration, source the optional
`vim-keys.rc` before applying the `binds` configuration, to allow the
user to override keybindings from `vim-keys.rc`.
Adapt the test files to account for the empty space left by the unset
`vimKeys` option.
This enables a module system feature documented here:
https://nixos.org/manual/nixpkgs/stable/index.html#module-system-lib-evalModules-param-class
For example, it allows a mistake to be caught, which is loading a
NixOS module into home-manager. This only works when the offending
module declares what it's for with a `_class` attribute.
It is not expected that users declare the `_type`, because the payoff
is small. It is only expected to be set by generic code, such as
functions or libraries that help with the "publishing" of modules
(e.g. flake-parts, flake-utils).
The class feature has been available in the module system since
https://github.com/NixOS/nixpkgs/pull/197547, merged May 6, 2023. It
has been part of all releases since 23.05-beta. The last NixOS release
that did _not_ support it has been end-of-life for close to a year
now.
Example:
(lib.homeManagerConfiguration {
pkgs = nixpkgs.legacyPackages.x86_64-linux;
modules = [{ _class = "nixos"; imports = [ ./foo.nix ]; }];
}).activation-script
Corresponding error:
error: The module <unknown-file> was imported into homeManager instead of nixos.
(`<unknown-file>` can be improved by also setting `_file`, if known; a
much older feature)
PR #5339
Specifically, avoid duplicate remove duplicate slashes in the
`news-read-ids` file path.
Also quote the use of `newsReadIdsFile` to reduce problems with
potential spaces.
To configure zsh's autosuggest "highlight style" we use ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE but it's currently set to AUTOSUGGESTION_HIGHLIGHT_COLOR (via autosuggestion.highlight). This change was apparently made back in 2016 or earlier.
This PR fixes two issues that cause rebuild to fail, see #5222.
The first was caused when sync.target and sync.interval were not set,
this was fixed by changing the default values from null to "undefined"
and filtering these out later.
The second error occurred when the .config/joplin-desktop directory
didn't exist (e.g. when installing Joplin for the first time) which
caused the touch command to fail. This was fixed using mkdir to ensure
that .config/joplin-desktop exists.
The PR #5299[0] actually adds the requirement on "tray.target" for the
kdeconnect service, when kdeconnect-indicator is set to true. What it
should do is add the requirement directly to the latter. This commit
fixes it.
[0]: https://github.com/nix-community/home-manager/pull/5299#issue-2252834123
Helps avoid successful build but Sway failing to start.
To meaningfully test this, I had to actually use `pkgs.sway` in the
test rather than the stub, but left all other tests using the stub and
changed them to skipping the test.
We need to pass `--unsupported-gpu` as Sway checks for `nvidia` in
`/proc/modules`, and the Nix sandbox has `/proc/modules` available.
Adds a module to enable managing Remmina, an RDP client, with a Home
Manager module, providing a systemd service and mimetype integration
that can be disabled if so desired.
The `postHook` option was being processed and reset to a string, even if
the user set it to null, causing issues under certain conditions (see
Using `if-then-else` instead of `optionalString` keeps the option as
null, instead of setting it to an empty string.
Instead of an error
line 958: $1: unbound variable
we now emit an error such as
missing argument for --cores
Note, this is not perfect. In many cases you still get sub-optimal
error messages.
Support alternate configuration files for k9s in darwin where XDG is
not mandated and k9s expects configuration files in
`~/Library/Application Support/k9s/`.
* neovim: add extraWrapperArgs option
pass external arguments to neovim-unwrapper
this gives users more flexibility in managing neovim configuration
* neovim: add test for `extraWrapperArgs`
Firefox, upon exit, creates the default containers.json file in place of
the one that home-manager created. This leads to errors when switching
to a new profile, as home-manager is careful with overwriting existing
files. The added option toggles that behaviour.
Closes: https://github.com/nix-community/home-manager/issues/4989
The `home-manager` package was being passed a `path` string pointing a
store path while the string didn't have context. As a result the
`home-manager` derivation was created without this path as an input
source allowing it to be garbage collected even though it it being
used by the `home-manager` script. This in turn caused certain
warnings and errors to occur.
The current module constrains to values in enum but khal supports RGB
colors as well
khal.readthedocs.io/en/latest/configure.html#the-calendars-section !
(be careful when setting an RGB value, it has to be quoted else it is ignored, got bitten by it with a manual config )
NB: It's also not possible to set addresses khal.readthedocs.io/en/latest/configure.html#the-calendars-section
Nixpkgs has recently made a few major changes to its
xdg-desktop-portal package, which silently breaks our module here:
- The NIXOS_XDG_DESKTOP_PORTAL_CONFIG_DIR variable patch has been
removed (in favor of putting portal configurations in /etc or
XDG_CONFIG_HOME).
- A new variable, NIX_XDG_DESKTOP_PORTAL_DIR, was introduced in a
patch to avoid setting XDG_DESKTOP_PORTAL_DIR (which also affected
portal configuration reading, not only portal definitions)
I updated our module to match the changes, but this breakage also made
me revisit this module and look into some improvements.
Long story short, I think it's worth it to make it more similar to the
NixOS one, as it will make behavior more predictable and consistent.
The main change is relying on the upstream linked systemd
unit (instead of using systemd.user.services), and setting the
environment variables globally instead of scoping it to the unit, as
it's a very global thing anyway.
The systemd.time documentation defines the shorthands `daily` and
`minutely` which are currently not included in the nix-gc module.
This commit adds the `daily` option, but omits `minutely` since it's not
a timescale that would make sense to run a gc for.
https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html
The documentation for the option says...
> If you want a default binding to be passed through to the website,
> bind it to null.
but if you actually try to set a key to `null`, it causes an error.
> A definition for option
> `programs.qutebrowser.keyBindings."<Ctrl+Shift+Tab>".normal' is not
> of type `strings concatenated with " ;; "'.
So this commit implements unbinding as it is documented.
The beets package no longer has the "enableCheck" option so this was
confusing. Also the word override was used to mean two different
things so I modified the FAQ to use the word "change" and linked to
documentation regarding package overrides.
Using `mkDefault` for the individual aliases makes it easier to
override or replace individual entries by the user, without having to
use `mkForce` which is often confusing for new users.
Adding unmailboxes option to neomutt, which adds the `unmailboxes`
option it to every account.email with neomutt enabled.
See https://www.mutt.org/doc/manual/#mailboxes for more.
Fixes warnings about the non-existent `~/.nix-defexpr` folder when
using `use-xdg-base-directories = true`.
Example:
warning: Nix search path entry '/home/user/.nix-defexpr/channels' does not exist, ignoring
Starting Home Manager activation
Activating checkFilesChanged
Activating checkLinkTargets
Activating writeBoundary
Activating installPackages
replacing old 'home-manager-path'
installing 'home-manager-path'
Activating dconfSettings
Activating linkDesktopApplications
Activating linkGeneration
Cleaning up orphan links from /home/user
No change so reusing latest profile generation 13
Creating home file links in /home/user
Activating onFilesChange
Activating reloadSystemd
warning: Nix search path entry '/home/user/.nix-defexpr/channels' does not exist, ignoring
Borgmatic has support for Borg's pattern matching. It is mutually
exclusive with the existing `sourceDirectories` option, so assertions
have been added to make sure that both are not set at the same
time (but also that at least one of them is). Additionally, tests have
been added to test the following configurations: `patterns` instead of
`sourceDirectories`, both at the same time, and neither.
In Nix 2.3, all GC roots must be stored under `/nix/var/nix/gcroots`,
unless `--indirect` is specified. In Nix 2.4 and above, this flag is
ignored, because all GC roots created by `--add-root` are indirect.
Change-Id: I3eb3d7bc774af2ff336a2cdf312d30a99cdcb928
In most cases where this function is used, suppressing only the standard
output is more appropriate. Culling diagnostic output hides error
messages and makes debugging more difficult and confusing.
`$DRY_RUN_NULL`, which the `--silence` flag replaced, was used both for
suppressing standard output on its own, and for doing so along with
diagnostic output; however, when the `run` function was added this
distinction was lost, and both outputs would be discarded.
This reintroduces the needed functionality, and changes usages of
`--silence` to `--quiet` where previously only standard output was
suppressed, or where this should have probably been the case anyway.
Change-Id: Ifb1b52a1d1eea0117261c782d686ad7c71b43162
When a non-directory, such as a file or a dead symlink, already exists,
mkdir -p fails with "cannot create directory ‘...’: File exists".
This is a problem when, for example, a symlink points to a directory on
a filesystem that isn't mounted yet.
This commit changes the way aliases are rendered, adding the "no more
flags" flag `--`, which means that, for example, the alias `"-" = "cd
-";` will work as expected. (I was getting a syntax error before this
change.)
Additionally, now the alias key is shell escaped, which may help some
edge cases. I'm honestly not sure if this part is necessary since I
assume an alias can't contain spaces anyway, but it definitely
shouldn't break anything.
* vdirsyncer: change verify to type path
accounts.<calendar/contacts>.accounts.<name>.vdirsyncer.verify should not be a bool, it should be a path.
* vdirsyncer: Add example of verify use
* programs.khal: fix build failure due to null value
* calendar: allow null value for primaryCollection
* calendar / programs.khal: set default values to avoid common errors
* khal: fix contact integration
- Add tests for contact+khal
- Make options `color`/`priority` available for contact accounts
* khal: add separate calendar for each contact collection
A contact account may have multiple VCARD collections, but Khal doesn't
search recursively. Collection folder names must be hardcoded, and each
has its own calendar.
- Add khal.collections option for contact accounts
- Default to previous setup for accounts with a single collection
- Add tests
* khal: specify how priority is defined by Khal
See https://khal.readthedocs.io/en/latest/configure.html
The `exec` command does not do any shell parsing and does not
understand the `&&` which is how the extraCommands are added after
dbus activation. There doesn't seem to be a reason for `exec` here
anyway so just remove it and allow shell parsing.
* Skip font installation if the derivation hasn't changed.
* Use `rsync` instead of `install` to copy font files, to avoid useless
copying of pre-existent identical files.
This introduces some rudimentary integration tests using the NixOS
test framework. The intent is to better catch regressions when doing
more elaborate changes that may affect overall Home Manager behavior.
Note, the tests are currently not run automatically.
When using the `init` sub-command, it is now possible to set the Home
Manager and Nixpkgs input URLs. Note, for now these options are
considered experimental.
neomutt: Updated options and added tests
neomutt: Added test for individual mailbox type
neomutt: Formatted code
neomutt: Enable ssl_force_tls based on IMAP instead of SMTP
neomutt: Applied suggestions from @chayleaf
neomutt: fix breaking tests
* imapnotify: enable STARTTLS if enabled in email account config
Since version 2.3.10 goimapnotify supports starttls. In version 2.3.11 a
typo in the settings was fixed, using tlsOptions.starttls to enable it.
This commit enables starttls in the goimapnotify config file if it is
enabled in the email account's imap settings.
* imapnotify: test generated config file
Compare the generated service config file with a manually verified
sample.
workspace 10 is part of upstream's default config, but was missing in home-manager.
The initial "sway: add module" PR (02d6040003) went through multiple iterations and had workspace 10 included for a brief moment.
Until the author removed it in a force-push commenting
> Have removed the last change which added bound ${modifer}+0 to workspace number 10 as this messed up workspace numbering in sway.
The reason might have been, that sway used to sort the workspaces in the order they appeared in the config.
Attribute sets in nix are sorted, but not "naturally sorted", meaning `bindsym Mod1+0 workspace number 10` comes before `bindsym Mod1+0 workspace number 1`.
It's unclear if that's what really happened. A workaround would have been to use `lib.lists.naturalSort` in `keybindingsStr`.
But I cannot reproduce this anymore in any way.
I assume this has been fixed many years ago by now.
upstream config: 020a572ed6/config.in (L113-L134)
In order to manage the extensions and configs from openvscode-server,
the only additional requirement was some mapping missing between the
name of the package and the default configDir/extensionDir
This ensures that `KITTY_SHELL_INTEGRATION` is manually set to the
user's `shellIntegration.mode`. This is necessary because sometimes
the variable is not set in subshells or splits.
`shellIntegration.mode` is also now ensured to always contain `no-rc`.
Since the module system doesn't allow specifying order on types.lines
users can't specify anything to run after what modules have put into
shellInitInteractive since it runs last. This implements a fourth field
that runs after all others, not to be used by HM modules, but regular
users.
Co-authored-by: Carl Hjerpe <git@hjerpe.xyz>
The `run` function export was removed in #4965. This broke the
expectation in this module that `run` would be available outside of
main activation script, as `$DRY_RUN_CMD` once was.
Fixes#4980
Farm links from the selected firefox package,
programs.firefox.nativeMessagingHosts and a package with a .keep file
for always creating the ~/.mozilla/native-messaging-hosts folder as a
regular folder with links in it.
Fixes#4959
The `home-manager.lib.homeManagerConfiguration` function now has an
additional attribute that can be used to extend a Home Manager
configuration with additional modules outside the project tree.
It works similar to the result of `lib.nixosSystem` from Nixpkgs
This removes the services.keepassx module and all options related to it.
This is because KeePassX has been unmaintaned for a long time, and the
migration path to KeePassXC is not clear.
Note, this package probably hasn't worked for nearly a year since the
package was removed from Nixpkgs:
https://github.com/NixOS/nixpkgs/pull/216748Closes#4949
Signed-off-by: Sumner Evans <me@sumnerevans.com>
Since nushell 0.89, automatically spreading lists is deprecated. This
commit introduces a string replace for the zoxide init script to replace
the deprecated code.
See: https://github.com/ajeetdsouza/zoxide/issues/662Fixes: #4916
The previous syntax (`plugin:name { ...settings}`) is not working with
more than one plugin. There is no documentation for this, just the
source code [1].
With this update the plugins paths aren't generated together with the
full config (so the "plugin" field is not "important" anymore) and the
plugins settings are generated like the other fields.
[1] 4d403dac32/src/config/ConfigManager.cpp (L1574)
The plugin setting in the Hyprland config is used both for defining
plugin paths and configuring the plugins. This fix removes the
silent override of the plugins settings converting them to the
`plugin:<name> { ...settings }` syntax.
Turns out pulling nmt and nmd from Nixpkgs causes an IFD, even when
the packages are fixed-output derivations.
Thus, since Sourcehut is up and well, we can revert to simply fetching
nmd and nmt directly.
See discussion in <https://github.com/nix-community/home-manager/pull/4884>.
DBus activated services such as mako use the XCURSOR_THEME and
XCURSOR_SIZE environment variables to decide how to show the cursor,
so without these, the cursor may not match the rest of the desktop
when hovering over (in this example) mako notification surfaces.
The gradle package from nixpkgs will install a default Java version and
pass it to the gradle executable without polluting the global env.
Users can customize this by overriding the gradle package like so:
programs.gradle = {
package = (pkgs.gradle.override {
java = pkgs.jdk21;
});
}
This commit makes it possible to specify Firefox' extraPolicies
through:
programs.firefox.package = pkgs.firefox.override {
extraPolicies = {... }
}
This was possible in the past but was broken by:
3feeb77155
firefox: add support for specifying policies (#4626)
This adds a Boolean option `uninstall`. When enabled this option will
reset side-effecting configurations to their "empty" state. The intent
is that this will cause the activation script to remove all managed
files and packages.
Doing it this way should hopefully be more robust than the previous
solution. It also allows a somewhat more convenient uninstall process
when using Flakes; put `uninstall = true` in your existing
configuration and then do a switch.
Also add simple uninstall test in CI test job.
The identity's signature will be configured according to signature.text
and signature.showSignature. Signature commands are not supported by
Thunderbird.
> -e file
> True if file exists.
> -f file
> True if file exists and is a regular file.
> [...]
> -L file
> True if file exists and is a symbolic link.
>
> (Source: bash(1))
Minor fix in documentation. The example in
`programs.zsh.prezto.pmoduleDirs` is not compatible with shell
environment variables like `$HOME`, must be replaced with nix
compatible variables eg: `home.homeDirectory`.
Fixes#4452
Osmscout-server includes a setting in its UI to create a systemd user
service and socket to run the server on demand. This does not function
correctly on NixOS, for two reasons:
1. It assumes that the binary path is stable (e.g.
/usr/bin/osmscout-server), which is not the case on NixOS.
2. It auto-detects the unwrapped binary path, which doesn't work.
This module allows the user to access the same functionality on NixOS.
Having the module enabled but never using gh will result in the config file
existing but no hosts.yml. In that scenario we won't have anything to
migrate, so only test for hosts.yml.
The service was never marked with a failed state with the previous
approach, which could lead broken synchronisation pair states to go
undetected.
The module now uses a timer instead of unlimited restarts, which does
not have this issue.
* aerc-accounts: support for maildirpp
aerc-accounts now is aware of the mbsync.subFolders setting
* aerc: Adds test for maildirpp format
---------
Co-authored-by: lgehr <lgehr@mailbox.org>
Commit 8cedd6 `fish: support flexible abbreviations` removed shell
escaping for fish shell abbr values. This was a dangerous breaking
change offered little value and made writing abbr expansions more
difficult. This commit restores automatic shell escaping of fish abbr
values.
In nushell, the ENV_CONVERSIONS environment variable is used to
transform the defined variables from a string to a nushell value (PATH
to a list being one of the most common uses). This commit applies
user-defined conversions to direnv-loaded variables.
This fixes binary autocompletion not being triggered for newly added
paths and makes direnv work consistently with nushell
Introduces a new program called gradle for managing files stored in
the home directory by the [Gradle Build Tool](https://gradle.org).
Gradle uses the $HOME/.gradle folder for all it's configuration.
Features of the new program module are:
- Automatically setting programs.java.enable = true to make a Java
installation available for running Gradle.
- Specifying an alternate Gradle home directory
- Setting of abitrary values for gradle.properties stored inside the
Gradle home directory.
- Defining init scripts that will be linked into the init.d inside
the Gradle home directory.
Co-authored-by: Olli Helenius <liff@iki.fi>
Co-authored-by: Robert Helgesson <robert@rycee.net>
Adds a program module for [Sapling](https://sapling-scm.com/).
Since Sapling itself is very similar in nature to Mercurial,
`modules/programs/mercurial.nix` was copied to make this module with
the ignore pieces removed (Sapling respects gitignore).
If `nix.settings.use-xdg-base-directories` is true, the
`~/.nix-profile` directory may not exist, and `home.profileDirectory`
should be checked instead.
Co-authored-by: Bruno BELANYI <bruno@belanyi.fr>
The release notes used to be an appendix in the manual. After
converting to markdown that appendix got lost. This commit
reintroduces the release notes into the manual.
When using the previous approach I've always gotten errors that I can't
reload config on the .lock file that exists in /tmp when you run a
standard configured hyprland.
This commit improves this by using hyprctl to find instances to reload
instead.
We can remove the HYPRLAND_INSTANCE_SIGNATURE bogus assignment once
https://github.com/hyprwm/Hyprland/issues/4088 is resolved.
Co-authored-by: Carl Hjerpe <git@hjerpe.xyz>
The example is missing a `;` which causes this error when you attempt
a `darwin-rebuild switch`.
```
error: syntax error, unexpected '=', expecting ';'
at /Users/968713/.nixpkgs/darwin-configuration.nix:17:30:
16| }
17| home-manager.users.eve = { pkgs, ... }: {
| ^
18| home.packages = [
```
Add the option sourceFirst to the hyprland module. When this option is
enabled source entries will be put near the top of the file, so that
the variables declared in other files can be used by the other
configuration entries.
Add "source" to the list of important prefixes when the former option
is enabled.
Resolves#4729
This resolves the long-standing deprecation warning by migrating the
documentation to using the nixos-render-docs tool. As part of this,
the documentation markup language is migrated to Markdown.
See pull-request #4673 for more.
The `nixos-render-docs` tool outputs XHTML formatted content. In
order to convince browsers like `firefox` to treat the data as XHTML
the extension must be `.xhtml` and not `.html`.
Using the XHTML-formatted content as HTML is mainly an issue with
self-closing `<a />` tags.
`document-highlighter` now outputs a `<code>` block inside the
pre-formatted `<pre>` tag. This changes the required CSS for
rendering code snippets. Moreover, this commit uses the highlightjs
as provided by the `document-highlighter` package instead of the
version packaged in `nmd`.
The `man home-configuration.nix` is configured to left
align the text similar to `man configuration.nix`. This
commit updates the `man home-manager` page to be consitent
with the two manpages mentioned above.
This commit removes the `home-manager-render-docs` package in favor
of upstream `nixos-render-docs` where the manpage generator has been
updated to take a `--header` and a `--footer` flag specifying static
content around the content derived from the options.json file.
This commit extracts the htmlOpenTool from `nmd` into a module
in the home-manager docs directory. This is done to provide feature
parity with the documentation generated using the docbook .xml files.
The `optionsDocBook` function is deprecated in nixpkgs since
nixos-23.11. This commit updates the manual and manpages to
use commonmark formatted documentation instead of the deprecated
docbook format.
Previously, users cannot enable boolean flags like `--show-all` in bat's
config since all options were expected to be either a string, or a list
of strings. With this commit boolean flags are simply appended to the
end of the config if they are set to `true`, and discarded otherwise.
For example, the config
{
theme = "TwoDark";
show-all = true;
lessopen = false;
}
would produce a config file that looks like
--theme='TwoDark'
--show-all
Fixes#4657
Occasionally, swayidle crashes with a failure to connect to the
Wayland session. Ideally, swayidle should automatically restart
instead of leaving the system in a vulnerable state.
When a user references config.programs.firefox.package in her/his
configuration, s·he will get a different path than what is in the
$PATH variable. To make it possible to get the same path, this commit
introduces the finalPackage read-only option.
Due to the defaults in `systemd.user.settings`, the default value when
there are no settings explicitly set is `{ Manager = { }; }`. This
means an empty file is created even when `systemd.user.settings` is
never used in home-manager configuration. Since user’s `user.conf` is
preferred to the global `/etc/systemd/user.conf`, this can cause any
values set in the latter to be discarded.
The `systemd.user.extraConfig` provides a way to generate a
`systemd-user.conf(5)` file for the user.
This is the home-manager equivalent of NixOS’s option of the same
name, with the difference that NixOS’s option generates a `user.conf`
file that is shared between all users.
This commit fixes a typo in XDG data directory link location in the
`home.pointerCursor` module where the link is placed at
$XDG_DATA_HOME/.icons instead of the correct location
$XDG_DATA_HOME/icons.
Fixes#4638
This commit changes the config format of repositories to the
soon-be-expected `{ "path": "repository-path", }`. The Home Manager
configuration allows a simple string (which will get translated), the
new format by directly using the path attribute, and the one with the
optional label attribute. More information about the background can be
found here https://torsion.org/borgmatic/docs/reference/configuration/
When xdg.enable is set, aerc uses the $XDG_CONFIG_HOME variable instead
of the default $HOME/Library/Preferences. home-manager needs to check
this to make sure aerc can find the proper file in both cases.
When a process inside the sxhkd scope is OOM killed, if the OOM policy
is set to `stop` then the sxhkd scope itself will exit, terminating
every process launched from the keyboard.
This is undesirable, set it to `continue` instead to keep other
processes running.
For devices with more than one battery, cbatticon allows to set the
battery ID as optional positional argument. If this argument is not
given, it default to the first battery it would list with `cbatticon
-p`. This commit adds support for the batteryId option to the cbatticon
module.
Includes the following changes:
- Remove unused reference definition.
- Sort reference definitions.
- Internally reference "Words of warning" section.
- Consistently reference.
- Fix typo.
- Format HTML code.
- Link only to first occurence per section.
- Simplify list formatting.
- Adapt 'Installation' section to manual.
- Fix punctuation.
- Wrap text at 80 characters.
- Simplify link phrasing.
- Add missing punctuation.
PR #4363
Since fzf 0.43.0, the fzf_key_bindings function is only defined when
fish is running interactively, see [1].
This caused errors when entering non-interactive fish shells since we
called fzf_key_bindings during startup.
[1]: 7e89458a3b
The configuration file format of borgmatic has changed in version
1.8.0:
https://projects.torsion.org/borgmatic-collective/borgmatic/src/branch/main/NEWS
This commit makes Home Manager generate borgmatic's configuration file
using the new format.
Even though the NEWS file indicates that old configuration files are
compatible, this is not 100% the case: empty sections work fine in old
borgmatic but stop working in new ones. I've reported the bug upstream
by email as I couldn't create an account on the forge.
Specifically, allow variable expansion for the key codes by switching
from single to double quotes.
This also adds a helpful suggestion to descriptions. Taken from the
project's README, see
4abed97b6e/README.md (L71-L74))
Allows users to customize which environment variables to import in DBus
and SystemD user environments, and to specify which commands will be run
after the environment activation.
The way the `bat` module is currently written makes it essentially
impossible to use themes and syntaxes without IFD, since you must
provide the contents as string, instead of just giving a path to be
linked.
With this change, setting themes/syntaxes by-string will start issuing
warnings, and a new attribute model is added, lightly inspired by how
`programs.zsh.plugins` avoided this issue.
For some reason, Firefox completely discards the ADD_DATE and
LAST_MODIFIED attributes if they are set to 0. This has been
confirmed by exporting a sample set of bookmarks generated by
Nix using home-manager and comparing it to the same sample of
bookmarks set manually and then exported.
Missing these attributes can cause problems for extensions and
other tools that try to read bookmarks. A known example is the
Tridactyl extension.
Currently translated at 94.4% (17 of 18 strings)
Translate using Weblate (Indonesian)
Currently translated at 68.5% (24 of 35 strings)
Translate using Weblate (Indonesian)
Currently translated at 61.1% (11 of 18 strings)
Translate using Weblate (Indonesian)
Currently translated at 42.8% (15 of 35 strings)
Co-authored-by: Reza Almanda <rezaalmanda27@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/home-manager/cli/id/
Translate-URL: https://hosted.weblate.org/projects/home-manager/modules/id/
Translation: Home Manager/Home Manager CLI
Translation: Home Manager/Home Manager Modules
We only need the Home Manager path variables when performing a few
operations, so only set the variables for those operations.
This avoids problems on fresh installations, where no profile
directory exists.
Fixes#4403
- If the parse does not match/returns an empty list, transpose does
not transform it into a record and thus load-env fails.
- The parsing assumes keychain to emit bash-style completions, so set
SHELL=bash to ensure keychain output is in the expected format.
PR #4459
Make the `finalPackage` option public, but still read-only. The final
package option is quite useful for users.
For example, to integrate `lazy.nvim` with Nix there are three things
that must be done:
1. `lazy.nvim` resets packpath, which should be managed by Nix; it has
to be turned off with `performance.reset_packpath = false` option in
`lazy.nvim`
2. Same thing applies to rtp, the relevant option is
`performance.rtp.reset = false`
3. `dev.path` must be specified as the folder that contains the plugins.
This folder is the path to Nix store path with Neovim plugins, and
the plugins that are managed by Nix must be marked as `dev = true`
The third condition can not be fulfilled without this PR, as the final
package that Home Manager produces is not exposed, therefore it is
impossible to extract the Nix store path. This PR makes it more
accessible via
${
pkgs.vimUtils.packDir config.programs.neovim.finalPackage.passthru.packpathDirs
}/pack/myNeovimPackages/start
With nushell `0.85.0` this is no longer valid syntax. This change fixes
the syntax error with `0.85.0` while still remaining valid for `0.84.0`
and earlier.
Fixesnix-community/home-manager#4488
The default config for sway generates a bar block with tray_output primary. But wayland (or sway, take your pick?) has no concept of a primary display so this just results in no tray anywhere.
A better default is "*" which puts the tray on every monitor, since sway can do so without issue.
Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
Adds a programs.rio module to control Rio installation and configuration, a gpu accelerated terminal
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
I'm experiencing timeouts for home-manager-$USER.service in my NixOS VM
tests. The NixOS testing framework increases the default timeout from
1m30 to 5m, but since home-manager specifies a timeout, that value wins.
There's no point in having a tight timeout value, so increase it to 5m.
Fixes a regression of GitHub issue #594. Before this commit,
attempting to dynamically configure Home Manager with contents of
nixos's users.users when using the nixos module would result in
infinite recursion.
PR #4368
An IFD was introduced in bdb5bcad01 from
reading the top-level directories of the `home.pointerCursor.package`
at instantiation time.
This commit removes the IFD introduced when linking icon directories
by linking only the icon directory matching `home.pointerCursor.name`
in `home.pointerCursor.package`. This should be functionally
equivalent to linking all top-level directories of the supplied icon
package as the module only generates cursor configurations pertaining
to the cursor identified by `home.pointerCursor.name`. Deviations in
behavior caused by additional files linked in $HOME/.icons as of the
status quo should be treated as impurities.
The current cursor configuration poorly accomodate applications not
following the XDG icon theme spec. As a result, some applications fail
to locate user defined icons and themes.
To address this, symlinks from icon directories in the provided cursor
package was to $HOME/.icons were added added for greater compatibility
with applications using hardcoded icons directories. This approach was
chosen to allow for coexistence of declarative and non-declarative
icon files in the icons directory. In addition, symlinks of icon
directories were mirrored in $XDG_DATA_HOME/.icons for backwards
compatibility. As per the XDG icon theme spec, applications are to
search in $HOME/.icons first for icons and themes so the existing
behavior should not break for XDG compliant applications[1].
[1] https://specifications.freedesktop.org/icon-theme-spec/latest/ar01s03.html
Remove xwayland.hidpi option, since we're dropping HiDPI XWayland
patches support, opting to use the builtin xwayland:force_zero_scaling
option instead. It is described in more detail in
https://wiki.hyprland.org/ Configuring/XWayland.
Don't try to validate a limited set of hardcoded options, instead just
convert them as-is. Now, users can keep all their options in a single
attribute set, including arbitrary `user_{option}`s which was impossible
to express with a hard-coded submodule. As a plus, there is also less
maintainence burden.
While the locale options were declared, the weren't used in the
generation of the config file, because the locale submodule missed a
default, which failed the tests. I added an empty attribute set as a
default, which fixes the test, and works with the defaults in the
submodule options as expected.
* gh: option to enable helper for additional hosts
`gh` can also be used with github enterprise
hosts, for which there exists no easy option
to enable the credential helper except for
directly working with `programs.git.extraConfig`.
Not sure if this is a needed addition since it's
somewhat niche, at the same time it's not very
complex and makes the life of github enterprise
a little easier.
* gh: update credential-helper tests
* gh: refactor credential helper option
this moves from `enableGitCredentialHelper` to
`gitCredentialHelper.enable` and
`gitCredentialHelper.hosts`.
* gh: lib.mkIf -> mkIf
- On darwin, creates a launch agent to run git-sync on an interval and
when the `path` changes.
- The `uri` option is not used on Darwin. The auto-creation of the
local git directory from the `uri` is a feature of the
git-sync-on-inotify [1] wrapper (which won't work on Darwin afaik)
and not `git-sync` itself.
[1] https://github.com/simonthum/git-sync/blob/master/contrib/git-sync-on-inotify
* hyprland: prioritize variables and beziers
The `settings` key now handles `$variables` and `bezier`s differently,
putting them at the top of the file.
Also, proper indentation has been implemented.
* Update modules/services/window-managers/hyprland.nix
Co-authored-by: Naïm Favier <n@monade.li>
* hyprland: add animations & beziers test
---------
Co-authored-by: Naïm Favier <n@monade.li>
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
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
The NixOS variant of Markdown doesn't make a distinction between
`<code>` and `<literal>` or `<quote>` and... quotes, and doesn't
support `<parameter>` or `<replaceable>`. These are infrequently used
(apart from `<code>`) and don't add much, so just convert them to
simpler forms to allow the options containing them to be converted
to Markdown automatically.
A few minor syntactic adjustments were also made to make
`nix-doc-munge`'s job easier.
The Markdown options processor cannot handle rendering tables
to DocBook. This could be fixed, but as we won't be using the
DocBook output for long I just removed them for now in the interest
of expediency; they were all well-suited to being description lists
showing option types anyway, apart from one awkward case in the form
of trayer, which also had ad-hoc syntax for enumerating acceptable
values in the documentation. Since the types aren't actually used for
option processing anyway, I changed them to use `enum` and similar to
give a single description of the acceptable values without a big table.
`nix-doc-munge` can't handle these, which is understandable as I can
barely handle them either. There are a few infelicities here: the
current processor can't handle multiple terms to one description in
a description list so they get comma-separated in one case, and one
case that should ideally render as a `<figure>` with a `<figcaption>`
in HTML is reduced to a paragraph with some `<strong>` text. (Which, in
fairness, is how it rendered in practice with the DocBook anyway.) The
docs generator has since been updated to handle figures, but we can't
use it until moving off DocBook output.
These files all have options that trip up the `nix-doc-munge`
conversion tool for one reason or another (syntax that clashes with
Markdown, options that were already using Markdown syntax despite not
being marked that way, output that differs slightly after conversion,
syntax too elaborate to convert with some cheap regular expressions,
...). Translate them manually and do a little copyediting to options
in the vicinity while we're at it.
Output is mostly unchanged aside from some minor typographical and
formatting changes, along with better source links.
We temporarily export `options.docBookForMigration` to allow
`nix-doc-munge` to check its conversions.
This removes the hard-coded fallback Home Manager paths. Specifically
${XDG_CONFIG_HOME:-$HOME/.config}/nixpkgs/home-manager
and
"$HOME/.nixpkgs/home-manager"
Use `@HOME_MANAGER_PATH@` if it has been provided and points to
something that exists. Warn the user if it does not point to
something.
If we have not been provided with a `@HOME_MANAGER_PATH@` that exists,
then for both hard-coded paths show a warning if something exists
where the paths are pointing.
This no longer attempts to use either of the hard-coded paths as
fallback for the Home Manager path.
Prior to this change, it was impossible to nest attrsets in
accounts.email.accounts.<name>.imapnotify.extraConfig. However,
goimapnotify's configuration is JSON-based, and the recommended
configuration has:
```
"tlsOptions": {
"rejectUnauthorized": true
},
```
This change changes the type from an attrset of str/int/bool to the
JSON type provided by nixpkg's `pkgs.formats.json`.
Previously, lines in .zshrc were added with quotes in keys
(e.g. ZSH_HIGHLIGHT_STYLES['comment']='fg=#6c6c6c'). However, zsh
considered these quotes to be part of the key, so the "comment" key
remained unchanged.
* home-cursor.nix: enable gtk module when enabling gtk config generation
The gtk configurations are not generated unless config.gtk is enabled.
This is a point of confusion because config.home.pointerCursor.gtk can essentially be disabled,
despite having it enabled.
* home-cursor.nix: Add note to gtk config generation description instead of enabling gtk module
* home-cursor.nix: Add note about applying pointerCursor configs to main submodule desc
* home-cursor.nix: Change tabs to spaces
* aerc: fix per-account extraConfig section names
The aerc configuration file `aerc.conf` can contain 10 different
sections, but only the UI section supports what the aerc manual calls
contextual configuration. This works by appending to the section heading
either `:account=name` or `:folder=bar`.
The aerc-accounts module, however, applied `mkAccountConfig` to each
section heading declared in
`config.accounts.email.accounts.<name>.aerc.extraConfig.*`. This means
home-manager will generate files with `[general:account=default]` and
the options will not be recognized by aerc.
To address this, and since it doesn't make sense for other sections to
only be under a single account's scope, an assertion has been added
to confirm that only sectons that support contextual config (i.e.,
only the UI section) is declared.
This also addresses confusions like declaring
`accounts.email.accounts.*.aerc.extraConfig.general.unsafe-accounts-conf
= true` and triggering a warning message because
`programs.aerc.extraConfig.general.unsafe-accounts-conf` was unset.
This commit also updated documentation throughout the aerc modules to
be in line with this change, and fixed minor typos/formatting therein.
Co-authored-by: Genevieve <genevieve@sunlashed.garden>
* aerc: make assertion plaintext and add test case
This commit adds a test case to check both the warning on unset
`unsafe-accounts-conf = true` when aerc accounts are configured
with Nix, and the new assertion when per-account configuration
contains unsupported subsections (i.e. general).
It also fixes minor formatting issues and typos.
As pointed out in #3291, using the XDG symlink means the agent/unit
files don’t change when the contents of the config changes, and so the
service will not be restarted.
Nushell has the option to source from the login.nu file in the case
that nushell is used as a login shell. This commit adds the login file
alongside the existing config and env files as another configuration
option.
Previously, IMAP was preferred over notmuch, even if notmuch was
configured, causing problems with setting account flavor (which
automatically sets IMAP settings). The new backend order is:
notmuch > IMAP > maildir
This also fixes the notmuch DB path being set to the wrong location.
The notmuch DB is located at the maildir base path, not in each
account's maildir.
Unison supports the same option to be given several times as a command
line argument (e.g. unison -path xxx -path yyy).
This commit adds Home Manager support for this by allowing a list of
strings to be given to services.unison.pairs.<name>.commandOptions values.
# Veuillez saisir le message de validation pour vos modifications. Les lignes
* imapnotify: expose package (and exe) options
There are multiple packages that provide an imapnotify interface. Those
packages have differently named executables. This can now be customized.
This change also means test configurations can use stub packages.
* imapnotify: use/create config in configHome
Exposing the configuration file makes testing imapnotify configurations much
easier. It also allows for golden tests in home-manager.
* imapnotify: extend with launchd agent
Now that home-manager supports launchd agents, the imapnotify service
can be configured (and enabled) for darwin. The configuration matches
that of the linux/systemd version. In particular, by not setting a
`UserName`, this runs as the user whose configuration includes the
module.
Due to the launchd `Program` implementation (it must take an absolute
path) it is not possible to use that for the program and stub the path
in tests. Instead, this uses `ProgramArguments` for the program name.
The `ThrottleInterval` is equivalent to `RestartSec`. `KeepAlive` is
equivalent to `Restart`.
The `ExitTimeOut` default is 20 seconds, but goimapnotify should not
time out — this is achieved by setting the `ExitTimeout` to 0.
* imapnotify: add launchd plist test
This only tests the generated plist (which is new), not the original
systemd implementation, nor the json config file.
(Note the lack of a newline at the end of the plist file.)
This will reduce the system closure size by about 200MB under NixOS by
sharing the glibcLocales package.
When home-manager is installed on Linux without the NixOS module, all
glibc locales are installed, as before.
Resolves: #2333
Nix interprets a path-like URI as a git repository if any of the path's
parents is a git repository. Since home-manager uses a default flake URI
of ~/.config/nixpkgs/flake.nix, if you have a git repository as your
home directory and a '*' .gitignore it leads to the following problems:
evaluating derivation 'git+file:///Users/dongcarl?dir=.config%2fnixpkgs#homeConfigurations."dongcarl".activationPackage'
The following paths are ignored by one of your .gitignore files:
.config
This is solved by explicitly specifying the `path:` URI type prefix for
the default flake URI argument.
This removes the Nix Pills reference, because they are not a good
introduction to the Nix ecosystem, but rather a thorough explanation
of many disparate things. Reading through them might give some light
bulb moments for an intermediate reader, but that does not mean that
they're good for a beginner.
I've also removed the mention of infinite recursion without source
location. That's an old meme for a problem that has been mostly
solved. Mentioning it here has two effects:
- Propagate the outdated meme.
- Make users insensitive to bad errors. Learned helplessness. That
kind of thing. What we really want is for them to report bad error
messages, so that they can be fixed. And they can be fixed; just
report them at `NixOS/nix`.
The current `lla` alias, together with the `total-size` option try to get
the size of the `..` directory, and for this has to recursively open all
sibling folders. This may be super slow if some of those siblings
contain too many files, and raise a ton of useless errors if some of
those siblings contains non-readable files.
I'm suggesting to use `-A` instead, which will skip the obvious `.` and
`..` folders.
While here, I think we could also add `llt`.
* format: improve argument handling
For now, fail if the user tries to format a specific file/directory,
or runs the formatter from within a subdirectory.
Handling these situations is slightly tricky because `find -path` is
not very flexible.
* flake: add formatter
This allows running the formatter with `nix fmt`, added in Nix 2.8.
* format: use git ls-files
This is cleaner than `find` and allows us to restrict formatting to
particular files or subdirectories.
We can't test for the whole contents of the config file because that is
out of our control and may change unexpectedly. Only check for the
settings we know should be set.
Many of the terminals supported inside emacs work perfectly fine with STARSHIP.
The TERM=dumb case already handles the tramp and eterm cases, so as far as I can
tell, this is basically just a check for the benefit of OLD versions of
term-mode (see
emacswiki.org/emacs/AnsiTerm#:~:text=Historically%2C%20'M%2Dx%20ansi%2Dterm,the%20older%20'C%2Dc'%20binding.,
which indicates that it also now handles colors).
PR #3747 renamed the option wayland.windowManager.sway.systemdIntegration
to wayland.windowManager.sway.systemd.enable.
This commit simply updates documentation to reference the new format.
Starship has an advanced, experimental feature where fancy stuff in the
prompt can be replaced with something more simple after the command is
ran. This is very helpful for copy and pasting shell history somewhere
else.
docs: https://starship.rs/advanced-config/#transientprompt-and-transientrightprompt-in-fish
Fish is currently the only shell as far as I can tell that both
home-manager and starship support for this feature. Since the function
has to be called after starship is loaded, this seems like the best
place to put it.
format
In 176e455 the order between the action of `-I` parameters getting
added to `EXTRA_NIX_PATH` and the action of a static path getting
added to `EXTRA_NIX_PATH` was reversed, also reversing the order of
`-I` parameters and the static `-I home-manager=...` leading to the
static `-I home-manager=...` to always come before any of the `-I`
parameters to later calls to Nix commands.
This made it impossible to override the static Home Manager path when
calling the home-manager tool with `-I home-manager=...`. This was
previously possible.
* qt: always apply qt.style.package
Before this commit this was only being applied if `qt.platformName` was
set to "gnome". With this change we will always apply the package.
* qt: only set ~/config/Trolltech.conf in GTK or GNOME
* qt: add qtstyleplugin-kvantum-qt4 and qt6Packages.qtstyleplugin-kvantum
qt: add qtstyleplugin-kvantum-qt4
* news: add news entry about the qt module refactors
* qt: add thiagokokada as maintainer
* qt: add "qtct" to qt.platformTheme
This allows usage of qt5ct/qt6ct tool to configure Qt theme/icons/fonts
in non-KDE platforms.
* qt: add missing relatedPackages for qt.platformTheme = "kde"
* qt: add "kvantum" for qt.styles.name
This allow you to configure Qt integration using KDE instead of
qgnomeplatform or qtstyleplugins. Useful if your theme supports both GTK
and KDE, for example Nordic.
To use this properly you will need to do some manual configuration for
now. You can set the theme settings using `~/.config/kdeglobals`.
Example:
```nix
{ ... }:
{
qt = {
enable = true;
platformTheme = "kde";
};
xdg = {
configFile.kdeglobals.text = lib.generators.toINI { } {
General = {
ColorScheme = "nordicbluish";
Name = "nordic-bluish";
shadeSortColumn = true;
};
Icons = {
Theme = "Nordic-bluish";
};
KDE = {
LookAndFeelPackage = "Nordic-bluish";
contrast = 4;
};
};
dataFile = {
# For General.ColorScheme
color-schemes = {
source = "${pkgs.nordic}/share/color-schemes";
recursive = true;
};
# For KDE.LookAndFeelPackage
plasma = {
source = "${pkgs.nordic}/share/plasma";
recursive = true;
};
};
};
}
```
* aerc: add space after definitions
* aerc: only generate files, if options were set
* aerc: improve file permission warning
* aerc: remove redundant access to builtins
* aerc: allow overwriting of derived values
the order of merging the config subsets did not allow the user to specify
outgoing, source and password command values,
if they were previously derived from the SMTP, IMAP, Maildir etc config.
The values from `account.<name>.extraAccounts` now have the highest precedence.
Appropriate tests were added as well.
* aerc: write primary account first
* Add infrastructure for contacts and calendars
This also adds the modules
- programs.vdirsyncer,
- programs.khal, and
- services.vdirsyncer
that integrate with the new infrastructure.
Co-authored-by: Andrew Scott <3648487+ayyjayess@users.noreply.github.com>
Co-authored-by: Sebastian Zivota <sebastian.zivota@mailbox.org>
wip
* vdirsyncer: allow option userName, disallow userNameCommand
1. account option `userName` is now allowed by `programs.vdirsyncer`
2. The commented out account option `userNameCommand` was required to be set
by `programs.vdirsyncer` (e.g. as `null`).
It is now disallowed (commented out) by vdirsyncer.
* khal: added options 'color' and 'priority'
* Apply nixfmt
---------
Co-authored-by: Sebastian Zivota <sebastian.zivota@mailbox.org>
Co-authored-by: Johannes Rosenberger <johannes.rosenberger@jorsn.eu>
Co-authored-by: Johannes Rosenberger <johannes@jorsn.eu>
Co-authored-by: Robert Helgesson <robert@rycee.net>
* sway: add support for XDG autostart using systemd
Using the option wayland.windowManager.sway.systemd.xdgAutostart, users
can now choose to start applications present in
$XDG_CONFIG_HOME/autostart when starting their sway session.
This change also renames wayland.windowManager.sway.systemdIntegration
to wayland.windowManager.sway.systemd.enable;
Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
* sway: add Scrumplex to maintainers
Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
---------
Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
* boxxy: add module
* boxxy: added nikp123 to maintainers list
* boxxy: use mkPackageOption instead for the package
Co-authored-by: Naïm Favier <n@monade.li>
* boxxy: use yaml generator instead of json
Co-authored-by: Naïm Favier <n@monade.li>
* boxxy: various fixes
* boxxy: various fixes (part 2)
* boxxy: various fixes (part 3)
* boxxy: various fixes (part 4)
forgot to run ./format, whoops
* boxxy: use literalExpression for the rewrite example
Co-authored-by: Naïm Favier <n@monade.li>
* boxxy: add news entry
---------
Co-authored-by: Naïm Favier <n@monade.li>
* Revert "maintainers: add rasmus-kirk as a maintainer"
This reverts commit 301b364892.
* Revert "joshuto: add the joshuto file manager"
This reverts commit e7fdcb40b2.
* Fix espanso module to work with 2.x version
* espanso: fix espanso module
This module is currently broken. It does not create `config` and `match` folders which are required by espanso 2.x version.
This PR fixed this issue and support creating multiple files under `config` and
`match` folder.
* Espanso: fix espanso module
This module is currently broken. It does not create `config` and `match` folders which are required by espanso 2.x version.
This PR fixed this issue and support creating multiple files under `config` and `match` folder.
Add descriptions
* Add versionAtLeast and mkRemovedOptionModule
* Correct maintainers list
* remove config key from example
* format basic-configuration.nix
* Update modules/services/espanso.nix
Co-authored-by: Naïm Favier <n@monade.li>
* fix maintainers list
---------
Co-authored-by: Naïm Favier <n@monade.li>
Setting `outputSpecified` prevents `getOutput` from descending into
outputs, which don't have an overridden `outPath`.
Additionally, use `__spliced` to permit derivations to use the dummy as
an input.
* home-environment: add `home.sessionVariablesPackage`
Allow the `hm-session-vars.sh` derivation to be referenced from other
modules, e.g. to translate it to fish with babelfish at build time.
* fish: use babelfish for `hm-session-vars.sh`
Translate `hm-session-vars.sh` to fish at system build time,
significantly decreasing shell startup time.
Based on https://github.com/NixOS/nixpkgs/pull/108947 by @kevingriffin.
This is backwards compatible and allows for more flexibility(eg.
allows for defining custom waybar modules in separate nixos modules,
before merging them together)
Co-authored-by: mae <git@badat.dev>
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.
The generation activation script should be run by the user specified
in `home.username` and `home.homeDirectory`. If some other user runs
the activation script, then files may end up in the wrong place or
with the wrong owner.
This commits adds a check early in the activation script that verifies
that the running user match the user in the configuration.
Fixes#4019
Before this commit, running the hasFlakeSupport function causes an
error message
error: experimental Nix feature 'nix-command' is disabled; use
'--extra-experimental-features nix-command' to override
when the Nix installation does not support the nix tool. The error
message should not be visible to the user since its just part of the
Flake support check.
* PR_TEMPLATE: Note nix3 test method in checklist
Allows for running with the `nixpkgs` from the lock file, as well as
using a more familiar interface for users of the experimental CLI, which
would've avoided me opening #3971.
Also updates the corresponding note in `docs/contributing.adoc` to have
the correct invocation path.
* PR_TEMPLATE: `the experimental CLI` -> `Flakes`
* zellij: adds options to integrate with zsh, bash and fish shells
* zellij: add tests for shell integration options
* zellij: eval setup auto start for fish integration
* zellij: use interactiveShellInit for fish integration
* zellij: fixes format issues
* zellij: enable shell integrations by default
* zellij: compresses shell integration test cases
* zellij: removes the disabled shell integration tests
* zellij: formats tests
* pass-secret-service: Add dbus file, assert
Add the dbus service file in the package folder to XDG_DATA_HOME, as
well as adding an assertion to ensure both it and `gnome-keyring` aren't
enabled at the same time.
* pass-secret-service: Add self to CODEOWNERS
* pass-secret-service: Call out conflicting module(s)
* pass-secret-service: Revert `storePath` change
Signed-off-by: Cynthia Fox <cyntheticfox@gh0st.sh>
* pass-secret-service: Add password-store module default changes info
* pass-secret-service: Fix default info, modularize conflict checks
Signed-off-by: Cynthia Fox <cyntheticfox@gh0st.sh>
* Revert "pass-secret-service: Fix default info, modularize conflict checks"
This reverts commit 851df4fe49.
* pass-secret-service: Fix default info
Signed-off-by: Cynthia Fox <cyntheticfox@gh0st.sh>
* pass-secret-service: Indent `storePath` description
---------
Signed-off-by: Cynthia Fox <cyntheticfox@gh0st.sh>
* himalaya: add soywod to maintainers
* himalaya: make the config safer
Also added two services and more tests.
* himalaya: fix doc + typos
* himalaya: use freeform
* himalaya: run ./format
* himalaya: make use of mkPackageOption
It's pretty common to need multiple bindings to
history-substring-search, since different terminals will send different
keys for up/down.
This does not break back-compatibility, and introduces a new test
The current zplug nixpkgs puts everything under `$out/`. It pollutes the nix
profile dir.
This is a breaking change. It depends on an change of the output path in the
nixpkgs zplug package.
This reverts commit 6f9781b1b0 to fix
errors of `nix flake check` and `nix flake show`.
The `devShells` attribute is expected to be an attrset of derivations,
not nested attrsets.
Virtual mailboxes (described by Notmuch queries) can now configured for each account in NeoMutt.
Plus, it is possible to disable Notmuch section for a specific account.
Without this, even if you configure a preference for Electron apps to
use Ozone by setting `NIXOS_OZONE_WL=1`, GUI apps launched through
systemd user services use XWayland, since the variable is not set in
their environment.
This fixes that issue by importing it, like we do other variables.
The previous implementation tried to rename the tag named "default" to
the first tag in `cfg.tags`. This was a wrong approach because if a
tag with the same name already existed, the renaming failed and the
default tag would continue to exist.
The looking up of the default tag also contained a bug because it
should have used `by-name` in the path.
Before this change, the default config provided by this module wrote
an empty file to `$HOME/.config/avizo/config.ini`, which caused a
bunch of errors, as Avizo tries to read a 'group' from the ini file,
which fails.
This commit also adds associated test cases.
PR #3871
The added extraConfig option allowes users to insert custom text at
the end of the generated profile `user.js` file. This allows the users
to import templates as part of their configuration.
The link to the Nix RFC 42 is invalid. Replace this with a valid link to the
upstream NixOS/rfcs repo, pinning it to the commit that introduced the RFC.
The Nix profiles path may not exist right after installing Nix. In
that case, it is created on demand by the Nix CLI tools. However, Home
Manager assumes it exists and fails if it doesn't.
This change makes sure to trigger the creation of the Nix profiles
path before attempting to access it.
If the user runs a recent Nix version that places per-user profiles in
`$XDG_STATE_DIR/nix/profiles`, then migrate the home-manager profile
there.
Also clean up `setupVars` a bit.
While technically dconf on darwin could work, our activation step
requires dbus, which only *lightly* supports Darwin in general, and not
at all in the way it's packaged in nixpkgs. Because of this, we just
disable dconf for darwin hosts by default.
In the future, if someone gets dbus working, this _could_ be re-enabled,
unclear whether there's actual value in it though.
link the packpath in expected folder so that even unwrapped neovim can pick home-manager's plugins.
I sometimes need to run neovim not wrapped/configured by nix (when
developing neovim or when other projects bring their own neovim in
PATH). Currently they dont find plugins installed by home-manager in the
cases where packpath is not set to the generated nix packpath directory.
With this change, neovim can discover HM-installed plugins by itself.
Some of the email providers (like GMail and Fastmail) save Sent messages
automatically, so make the folders optional in the configuration.
Make Drafts folder optional as well, to allow it to be configured
manually in the extraConf with location outside of the maildir.
* i3status-rust: update it to handle 0.30.x releases
0.30.0 is a major release that brings many breaking changes to the
configuration file. See:
https://github.com/greshake/i3status-rust/blob/master/NEWS.md#i3status-rust-0300
The only one that actually affects the module though is the change in
how the theme/icons are defined. Other changes are mostly on how to
specify formatting/blocks, and since we just generate the TOML as-is, it
needs changes in the user side.
So most changes in this commit are documentation updates, having
up-to-date examples from things that changed, e.g.: the new `click`
attribute that now can be applied to any block.
* i3status-rust: only use new format if i3status-rust >= 0.30.0
* news: document the i3status-rust changes
* i3status-rust: add thiagokokada as maintainer
The `XCURSOR_*` environment variables specified in libxcursor
are used by many applications and libraries to load and configure
cursor settings. Setting these variables is a no-op if ignored but
is useful as a fallback when other sources of configuration are
unreliable.
This commit sets some commonly used `XCURSOR_*` environment variables
(i.e XCURSOR_THEME, XCURSOR_SIZE) by default when `home.pointerCursor`
is enabled.
The init command is essentially the old install script but integrated
into the home-manager tool. This simplifies things slightly since we
can use the existing code infrastructure.
The init command is Nix flake aware in the sense that, if we detect
that the user's Nix setup supports flakes, then we also create an
initial `flake.nix` file.
Finally, we update the installation instructions for the Nix flakes
standalone setup to use the new init command.
Zsh completion update provided by Anund <anundm@gmail.com>.
This command adds the ability to specify lists of qutebrowser
commands as values for key bindings, which avoids the need for
concatenating commands with ` ;; `.
This changes the default configuration location for Home Manager
configurations from
$XDG_CONFIG_HOME/nixpkgs
to
$XDG_CONFIG_HOME/home-manager
The old location is still supported but using it will trigger a
warning message.
Fixes#3640
Added a generator for the KDL document language.
This is in order for home-manager to natively generate
the new config format for zellij, as described in nix-community#3364.
There is not a one to one mapping between KDL and nix types,
but attrset translation is heavily based on KDLs JSON-IN-KDL microsyntax.
The exception here is the `_args` and `_props` arguments, which lets you
specify arguments and properties as described in the spec.
See more here:
- https://kdl.dev/
- https://github.com/kdl-org/kdl/blob/main/SPEC.md
The generator also conforms to the interface from the nixpkgs manual:
https://nixos.org/manual/nixpkgs/stable/#sec-generators
Co-authored-by: Gaetan Lepage <gaetan@glepage.com>
Install home-manager via `nix run` rather than `nix-build` then running
the activation script out of the store manually.
Co-authored-by: Cédric Barreteau <cbarrete@users.noreply.github.com>
Specifically, if the global per-user profiles path do not exist and we
cannot create it during the activation, then place our profile in the
Home Manager data directory. We prefer to use the global location,
though, since it makes it visible to `nix-collect-garbage`.
This is intended to improve compatibility with Nix version 2.14 and
later, which no longer creates the per-user directories.
Also, use the Home Manager data directory to manage the gcroot for the
current generation. It does not have to sit in the global per-user
gcroots directory since it should never be eligible for GC.
If used inside the NixOS/nix-darwin module, we get conflicting definitions
of `name` inside the specialization: one is the user name coming from the
NixOS module definition and the other is `configuration`, the name of this
option. Thus we need to explicitly wire the former into the module arguments.
See discussion at https://github.com/nix-community/home-manager/issues/3716
* exa: add more options
* exa: use `escapeShellArgs`
* exa: don't hardcode executable path in aliases
Prevents aliases from going stale in open terminals when the system is updated.
* exa: use `command` for self-referential alias
Otherwise fish complains about the recursive call.
Drop the aliases from ion shell since it doesn't implement the POSIX
`command` built-in.
* exa: re-add ion aliases
* exa: drop `command`
Fish doesn't complain about recursion if `exa` isn't escaped.
---------
Co-authored-by: Naïm Favier <n@monade.li>
The `-X` prevents that screen is cleared when showing a diff that's
larger than my screen.
I.e. when running `git diff` and press `q`, the last thing I want to see
is the prompt with `git diff` and *not* the part of the diff I browsed,
to be clear
$ git diff
$ <cursor>
Considering that this is somewhat opinionated, I decided to build an
option which allows you to pass arbitrary commands to the less
invocation.
Xsession (and hence ~/.xsession) is executed in bash but does not set
SHELL to the full path to bash. In case the user's login shell is
something other than bash then SHELL is set to that shell. Keychain
inspects the SHELL variable to find out what shell it has to generate
code for, so in .xsession it generates code for the user's login shell
instead for bash.
This change forces SHELL to bash for keychain when invoked from
.xsession, the same way it's done when generating keychain's code for
bash integration.
Closes#3693
* vscode: add extensions.json file in extensions dir
This change generates an 'extensions.json` file the same way that
nixpkgs' vscode-with-extensions does, and makes sure it is placed in the
directory with the extensions.
* vscode: remove leftover trace
Co-authored-by: Naïm Favier <n@monade.li>
* vscode: fix adding extensions.json with mutable extension dir
Co-authored-by: Naïm Favier <n@monade.li>
* vscode: let vscode regenerate the mutable extensions.json
* Remove nixpkgs duplication; only apply on vscodes new enough to need it
* Use lib.versionAtLeast
Co-authored-by: Naïm Favier <n@monade.li>
* Format vscode.nix
---------
Co-authored-by: Naïm Favier <n@monade.li>
Allow modules to define systemd services on macOS. It won't actually
have any effect, but it would allow modules to define both systemd
services and launchd agents without boilerplate conditionals.
As a consequence of this change, each module would have to check for
compatibility with the OS target instead.
Internally we already managed them per-profile but exposed a global
option to maintain backwards compatibility. The benefit to having
per-profile extensions is quite large though, so it is time to switch.
Users of the global extensions option will get an error message that
indicates how to edit their configuration to work again.
Firefox internally only supports bool, int, and string types for
preferences, but often stores objects, arrays and floats as strings.
This change makes it nicer to specify those type of preferences in
Nix, and it also makes it possible to merge objects & arrays across
multiple modules.
This flag is useful to force Nix to re-fetch cached flakes. Without it,
you cannot deploy from a non-local flake in quick succession, since the
caching causes the flake to not be re-fetched.
This reflects a systemd service sample file change made in borgmatic
1.7.6, commit 2e9f70d49647d47fb4ca05f428c592b0e4319544:
When backing up a machine with a monitor using logind to control
idle timeout and things like DPMS, borgmatic can block the screen
from turning on/off with systemd-inhibit. This is because by
default systemd-inhibit will block
"idle:sleep:shutdown". Borgmatic does not need to care about idle,
only about suspend and shutdown. So, add an explicit `--what` flag
for what borgmatic should inhibit.
For more information see systemd-inhibit(1).
Some JVMs pass through `home` as a derivation rather than as a string, as `openjdk` does. Since the module option for session variables expects a string, this is a type error. I suspect that this incorrect, and have changed the assignment here to coerce the `cfg.package.home` attribute to a string to be safe.
After discussing with @NobbZ, we have decided it is best to mitigate this problem in HM rather than to make potentially breaking changes to Nixpkgs.
Please do mention if you think we ought to propose a change to Nixpkgs instead.
Allow setting the application package and storePath used by the
config. Since the `programs.password-store` Home Manager module sets
config values via global environment variables, the default behavior
of the module should continue to behave as before for the user.
Additionally,
- Adds a few tests.
- Use "escapeShellArg" function call to the path parameter call to
ensure paths with spaces work.
- Allow not setting storePath, which will cause `pass_secret_service`
to default to using `~/.password-store`.
- If `pass-secret-service` is enabled, set its store path to default
to the one defined in our password-store environment settings.
- Add myself (houstdav000) as maintainer.
- [ ] Code tested through `nix-shell --pure tests -A run.all`.
- [ ] Code tested through `nix run .#tests -- test-all` or
`nix-shell --pure tests -A run.all`.
- [ ] Test cases updated/added. See [example](https://github.com/nix-community/home-manager/commit/f3fbb50b68df20da47f9b0def5607857fcc0d021#diff-b61a6d542f9036550ba9c401c80f00ef).
- [ ] Commit messages are formatted like
```
{component}: {description}
```
{component}: {description}
{long description}
```
{long description}
```
See [CONTRIBUTING](https://github.com/nix-community/home-manager/blob/master/docs/contributing.adoc#sec-commit-style) for more information and [recent commit messages](https://github.com/nix-community/home-manager/commits/master) for examples.
See [CONTRIBUTING](https://nix-community.github.io/home-manager/#sec-commit-style) for more information and [recent commit messages](https://github.com/nix-community/home-manager/commits/master) for examples.
- If this PR adds a new module
- [ ] Added myself as module maintainer. See [example](https://github.com/nix-community/home-manager/blob/068ff76a10e95820f886ac46957edcff4e44621d/modules/programs/lesspipe.nix#L6).
- [ ] Added myself as module maintainer. See [example](https://github.com/nix-community/home-manager/blob/a51598236f23c89e59ee77eb8e0614358b0e896c/modules/programs/lesspipe.nix#L11).
- [ ] Generate a news entry. See [News](https://nix-community.github.io/home-manager/index.xhtml#sec-news)
- [ ] Basic tests added. See [Tests](https://nix-community.github.io/home-manager/index.xhtml#sec-tests)
- [ ] Added myself and the module files to `.github/CODEOWNERS`.
- If this PR adds an exciting new feature or contains a breaking change.
- [ ] Generate a news entry. See [News](https://nix-community.github.io/home-manager/index.xhtml#sec-news)
- **Validation:** File syntax verified with `nix eval`
---
🤖 *This PR was automatically created by the [update-maintainers workflow](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})*
Contributions to Home Manager are very welcome. To make the process as smooth as possible for both you and the Home Manager maintainers we provide some guidelines that we ask you to follow. See <<sec-contrib-getting-started>> for information on how to set up a suitable development environment and <<sec-guidelines>> for the actual guidelines.
This text is mainly directed at those who would like to make code contributions to Home Manager. If you just want to report a bug then first look among the already {open-issues}[open issues], if you find one matching yours then feel free to comment on it to add any additional information you may have. If no matching issue exists then go to the {new-issue}[new issue] page and write a description of your problem. Include as much information as you can, ideally also include relevant excerpts from your Home Manager configuration.
[[sec-contrib-getting-started]]
=== Getting started
If you have not previously forked Home Manager then you need to do that first. Have a look at GitHub's {fork-a-repo}[Fork a repo] for instructions on how to do this.
Once you have a fork of Home Manager you should create a branch starting at the most recent `master` branch. Give your branch a reasonably descriptive name. Commit your changes to this branch and when you are happy with the result and it fulfills <<sec-guidelines>> then push the branch to GitHub and {create-a-pull-request}[create a pull request].
Assuming your clone is at `$HOME/devel/home-manager` then you can make the `home-manager` command use it by either
1. overriding the default path by using the `-I` command line option:
If your contribution satisfy the following rules then there is a good chance it will be merged without too much trouble. The rules are enforced by the Home Manager maintainers and to a lesser extent the Home Manager CI system.
If you are uncertain how these rules affect the change you would like to make then feel free to start a discussion in the {irc-home-manager}[#home-manager] IRC channel, ideally before you start developing.
[[sec-guidelines-back-compat]]
==== Maintain backward compatibility
Your contribution should not cause another user's existing configuration to break unless there is a very good reason and the change should be announced to the user through an {assertions}[assertion] or similar.
Remember that Home Manager is used in many different environments and you should consider how your change may effect others. For example,
- Does your change work for people that do not use NixOS? Consider other GNU/Linux distributions and macOS.
- Does your change work for people whose configuration is built on one system and deployed on another system?
[[sec-guidelines-forward-compat]]
==== Keep forward compatibility in mind
The master branch of Home Manager tracks the unstable channel of Nixpkgs, which may update package versions at any time. It is therefore important to consider how a package update may affect your code and try to reduce the risk of breakage.
The most effective way to reduce this risk is to follow the advice in <<sec-guidelines-valuable-options>>.
[[sec-guidelines-valuable-options]]
==== Add only valuable options
When creating a new module it is tempting to include every option supported by the software. This is _strongly_ discouraged. Providing many options increases maintenance burden and risk of breakage considerably. This is why only the most {valuable-options}[important software options] should be modeled explicitly. Less important options should be expressible through an `extraConfig` escape hatch.
A good rule of thumb for the first implementation of a module is to only add explicit options for those settings that absolutely must be set for the software to function correctly. It follows that a module for software that provides sensible default values for all settings would require no explicit options at all.
If the software uses a structured configuration format like a JSON, YAML, INI, TOML, or even a plain list of key/value pairs then consider using a `settings` option as described in {rfc-42}[Nix RFC 42].
[[sec-guidelines-add-tests]]
==== Add relevant tests
If at all possible, make sure to add new tests and expand existing tests so that your change will keep working in the future. See <<sec-tests>> for more information about the Home Manager test suite.
Many code changes require changing the documentation as well. Module options should be documented with DocBook. See {docbook-rocks}[DocBook rocks!] for a quick introduction and {docbook}[DocBook 5: The Definitive Guide] for in-depth information of DocBook. Home Manager is itself documented using a combination of DocBook and {asciidoc}[AsciiDoc]. All text is hosted in Home Manager's Git repository.
The HTML version of the manual containing both the module option descriptions and the documentation of Home Manager can be generated and opened by typing the following in a shell within a clone of the Home Manager Git repository:
When you have made changes to a module, it is a good idea to check that the man page version of the module options looks good:
[source,console]
$ nix-build -A docs.manPages
$ man ./result/share/man/man5/home-configuration.nix.5.gz
==== Add yourself as a module maintainer
Every new module _must_ include a named maintainer using the `meta.maintainers` attribute. If you are a user of a module that currently lacks a maintainer then please consider adopting it.
If you are present in the NixOS maintainer list then you can use that entry. If you are not then you can add yourself to `modules/lib/maintainers.nix` in the Home Manager project.
Also add yourself to `.github/CODEOWNERS` as owner of the associated module files, including the test files. You will then be automatically added as a reviewer on any new pull request that touches your files.
Maintainers are encouraged to join the IRC channel and participate when they have opportunity.
[[sec-guidelines-code-style]]
==== Format your code
Make sure your code is formatted as described in <<sec-code-style>>. To maintain consistency throughout the project you are encouraged to browse through existing code and adopt its style also in new code.
[[sec-guidelines-commit-message-style]]
==== Format your commit messages
Similar to <<sec-guidelines-code-style>> we encourage a consistent commit message format as described in <<sec-commit-style>>.
[[sec-guidelines-news-style]]
==== Format your news entries
If your contribution includes a change that should be communicated to users of Home Manager then you can add a news entry. The entry must be formatted as described in <<sec-news>>.
When new modules are added a news entry should be included but you do not need to create this entry manually. The merging maintainer will create the entry for you. This is to reduce the risk of merge conflicts.
[[sec-guidelines-conditional-modules]]
==== Use conditional modules and news
Home Manager includes a number of modules that are only usable on some of the supported platforms. The most common example of platform specific modules are those that define systemd user services, which only works on Linux systems.
If you add a module that is platform specific then make sure to include a condition in the `loadModule` function call. This will make the module accessible only on systems where the condition evaluates to `true`.
Similarly, if you are adding a news entry then it should be shown only to users that may find it relevant, see <<sec-news>> for a description of conditional news.
[[sec-guidelines-licensing]]
==== Mind the license
The Home Manager project is covered by the MIT license and we can only accept contributions that fall under this license, or are licensed in a compatible way. When you contribute self written code and documentation it is assumed that you are doing so under the MIT license.
A potential gotcha with respect to licensing are option descriptions. Often it is convenient to copy from the upstream software documentation. When this is done it is important to verify that the license of the upstream documentation allows redistribution under the terms of the MIT license.
[[sec-commit-style]]
=== Commits
The commits in your pull request should be reasonably self-contained, that is, each commit should make sense in isolation. In particular, you will be asked to amend any commit that introduces syntax errors or similar problems even if they are fixed in a later commit.
The commit messages should follow the {seven-rules}[seven rules], except for "Capitalize the subject line". We also ask you to include the affected code component or module in the first line. That is, a commit message should follow the template
----
{component}: {description}
{long description}
----
where `{component}` refers to the code component (or module) your change affects, `{description}` is a very brief description of your change, and `{long description}` is an optional clarifying description. As a rare exception, if there is no clear component, or your change affects many components, then the `{component}` part is optional. See <<ex-commit-message>> for a commit message that fulfills these requirements.
Finally, when adding a new module, say `programs/foo.nix`, we use the fixed commit format `foo: add module`. You can, of course, still include a long description if you wish.
[[sec-code-style]]
=== Code Style
The code in Home Manager is formatted by the {nixfmt}[nixfmt] tool and the formatting is checked in the pull request tests. Run the `format` tool inside the project repository before submitting your pull request.
Keep lines at a reasonable width, ideally 80 characters or less. This also applies to string literals.
We prefer `lowerCamelCase` for variable and attribute names with the accepted exception of variables directly referencing packages in Nixpkgs which use a hyphenated style. For example, the Home Manager option `services.gpg-agent.enableSshSupport` references the `gpg-agent` package in Nixpkgs.
[[sec-news]]
=== News
Home Manager includes a system for presenting news to the user. When making a change you, therefore, have the option to also include an associated news entry. In general, a news entry should only be added for truly noteworthy news. For example, a bug fix or new option does generally not need a news entry.
If you do have a change worthy of a news entry then please add one in {news-nix}[`news.nix`] but you should follow some basic guidelines:
- The entry timestamp should be in ISO-8601 format having "+00:00" as time zone. For example, "2017-09-13T17:10:14+00:00". A suitable timestamp can be produced by the command
+
[source,console]
$ date --iso-8601=second --universal
- The entry condition should be as specific as possible. For example, if you are changing or deprecating a specific option then you could restrict the news to those users who actually use this option.
- Wrap the news message so that it will fit in the typical terminal, that is, at most 80 characters wide. Ideally a bit less.
- Unlike commit messages, news will be read without any connection to the Home Manager source code. It is therefore important to make the message understandable in isolation and to those who do not have knowledge of the Home Manager internals. To this end it should be written in more descriptive, prose like way.
- If you refer to an option then write its full attribute path. That is, instead of writing
+
----
The option 'foo' has been deprecated, please use 'bar' instead.
----
+
it should read
+
----
The option 'services.myservice.foo' has been deprecated, please
use 'services.myservice.bar' instead.
----
- A new module, say `foo.nix`, should always include a news entry that has a message along the lines of
+
----
A new module is available: 'services.foo'.
----
+
If the module is platform specific, e.g., a service module using systemd, then a condition like
+
[source,nix]
condition = hostPlatform.isLinux;
+
should be added. If you contribute a module then you don't need to add this entry, the merger will create an entry for you.
[[sec-tests]]
=== Tests
Home Manager includes a basic test suite and it is highly recommended to include at least one test when adding a module. Tests are typically in the form of "golden tests" where, for example, a generated configuration file is compared to a known correct file.
It is relatively easy to create tests by modeling the existing tests, found in the `tests` project directory.
The full Home Manager test suite can be run by executing
[source,console]
$ nix-shell --pure tests -A run.all
in the project root. List all test cases through
[source,console]
$ nix-shell --pure tests -A list
and run an individual test, for example `alacritty-empty-settings`, through
[source,console]
$ nix-shell --pure tests -A run.alacritty-empty-settings
However, those invocations will impurely source the system’s nixpkgs, and may cause failures. To run against the nixpkgs from the flake.lock, use instead e.g.
=== Why is there a collision error when switching generation?
Home Manager currently installs packages into the user environment, precisely as if the packages were installed through `nix-env--install`. This means that you will get a collision error if your Home Manager configuration attempts to install a package that you already have installed manually, that is, packages that shows up when you run `nix-env--query`.
For example, imagine you have the `hello` package installed in your environment
[source,console]
----
$ nix-env --query
hello-2.10
----
and your Home Manager configuration contains
[source,nix]
----
home.packages = [ pkgs.hello ];
----
Then attempting to switch to this configuration will result in an error similar to
building path(s) ‘/nix/store/b5c0asjz9f06l52l9812w6k39ifr49jj-user-environment’
Wide character in die at /nix/store/64jc9gd2rkbgdb4yjx3nrgc91bpjj5ky-buildenv.pl line 79.
collision between ‘/nix/store/fmwa4axzghz11cnln5absh31nbhs9lq1-home-manager-path/bin/hello’ and ‘/nix/store/c2wyl8b9p4afivpcz8jplc9kis8rj36d-hello-2.10/bin/hello’; use ‘nix-env --set-flag priority NUMBER PKGNAME’ to change the priority of one of the conflicting packages
builder for ‘/nix/store/b37x3s7pzxbasfqhaca5dqbf3pjjw0ip-user-environment.drv’ failed with exit code 2
error: build of ‘/nix/store/b37x3s7pzxbasfqhaca5dqbf3pjjw0ip-user-environment.drv’ failed
----
The solution is typically to uninstall the package from the environment using `nix-env--uninstall` and reattempt the Home Manager generation switch.
You could also opt to unistall _all_ of the packages from your profile with `nix-env--uninstall'*'`.
Home Manager is only able to set session variables automatically if it manages your Bash, Z shell, or fish shell configuration. To enable such management you use <<opt-programs.bash.enable>>, <<opt-programs.zsh.enable>>, or <<opt-programs.fish.enable>>.
If you don't want to let Home Manager manage your shell then you will have to manually source the `~/.nix-profile/etc/profile.d/hm-session-vars.sh` file in an appropriate way. In Bash and Z shell this can be done by adding
to your `.profile` and `.zshrc` files, respectively. The `hm-session-vars.sh` file should work in most Bourne-like shells. For fish shell, it is possible to source it using {foreign-env}[the foreign-env plugin]
A typical way to prepare a repository of configurations for multiple logins and machines is to prepare one "top-level" file for each unique combination.
For example, if you have two machines, called "kronos" and "rhea" on which you want to configure your user "jane" then you could create the files
- `kronos-jane.nix`,
- `rhea-jane.nix`, and
- `common.nix`
in your repository. On the kronos and rhea machines you can then make `~jane/.config/nixpkgs/home.nix` be a symbolic link to the corresponding file in your configuration repository.
The `kronos-jane.nix` and `rhea-jane.nix` files follow the format
[source,nix]
----
{ ... }:
{
imports = [ ./common.nix ];
# Various options that are specific for this machine/user.
}
----
while the `common.nix` file contains configuration shared across the two logins. Of course, instead of just a single `common.nix` file you can have multiple ones, even one per program or service.
You can get some inspiration from the {post-your-homenix}[Post your home-manager home.nix file!] Reddit thread.
=== Why do I get an error message about `ca.desrt.dconf` or `dconf.service`?
You are most likely trying to configure something that uses dconf
but the DBus session is not aware of the dconf service.
The full error you might get is
----
error: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name ca.desrt.dconf was not provided by any .service files
----
or
----
error: GDBus.Error:org.freedesktop.systemd1.NoSuchUnit: Unit dconf.service not found.
----
The solution on NixOS is to add
[source,nix]
programs.dconf.enable = true;
to your system configuration.
=== How do I install packages from Nixpkgs unstable?
If you are using a stable version of Nixpkgs but would like to install some particular packages from Nixpkgs unstable – or some other channel – then you can import the unstable Nixpkgs and refer to its packages within your configuration. Something like
[source,nix]
----
{ pkgs, config, ... }:
let
pkgsUnstable = import <nixpkgs-unstable> {};
in
{
home.packages = [
pkgsUnstable.foo
];
# …
}
----
should work provided you have a Nix channel called `nixpkgs-unstable`.
You can add the `nixpkgs-unstable` channel by running
By default Home Manager will install the package provided by your chosen `nixpkgs` channel but occasionally you might end up needing to change this package. This can typically be done in two ways.
1. If the module provides a `package` option, such as `programs.beets.package`, then this is the recommended way to perform the override. For example,
.\" disable justification (adjust text to left margin only)
.adl
.\" enable line breaks after slashes
.cflags4/
.SH"NAME"
\fIhome\-configuration\&.nix\fP\- Home Manager configuration specification
.SH"DESCRIPTION"
.sp
The file ~/\&.config/home\-manager/home\&.nix contains the declarative specification of your Home Manager configuration\&. The command \fBhome\-manager\fR takes this file and realises the user environment configuration specified therein\&.
Build Home Manager configuration from the flake, which must contain the output homeConfigurations.name. If no name is specified it will first try username@hostname and then username.
.RE
.Pp
.ItCmFlbArextension
.RS4
Enable automatic resolution of collisions between unmanaged and managed files\&. The name of the original file will be suffixed by the given extension\&. For example,
.sp
.ifn\{\
.RS4
.\}
.nf
$ \fBhome\-manager \-b bck switch\fR
.fi
.ifn\{\
.RE
.\}
.sp
will cause a colliding file
~/\&.config/foo\&.conf
to be moved to
~/\&.config/foo\&.conf\&.bck\&.
.RE
.Pp
.ItCmFlfArpath,Fl-fileArpath
.RS4
Indicates the path to the Home Manager configuration file. If not given,
$XDG_CONFIG_HOME/home-manager/home.nix
is used.
.RE
.Pp
.ItCmFlh,Fl-help
.RS4
Prints usage information for the
\fBhome\-manager\fR
tool.
.RE
.Pp
.ItCmFl-version
.RS4
Prints the version number of the
\fBhome\-manager\fR
tool.
.RE
.Pp
.ItCmFln,Fl-dry-run
.RS4
Perform a dry-run of the given operation, only prints what actions would be taken.
.RE
.Pp
.ItCmFl-optionArnameArvalue
.RS4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.ItCmFl-coresArnumber
.RS4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.ItCmFljArnumber,Fl-max-jobsArnumber
.RS4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.\" TODO
.Pp
.ItCmFl-debug
.RS4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.ItCmFl-impure
.RS4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.ItCmFl-keep-failed
.RS4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.ItCmFl-keep-going
.RS4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.ItCmFlL,Fl-print-build-logs
.RS4
Passed on to
\fBnix build\fR()
when building from a flake\&.
.RE
.Pp
.ItCmFl-log-formatArformat
.RS4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.ItCmFl-show-trace
.RS4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.ItCmFl-(no-)substitute
.RS4
Passed on to
\fBnix-build\fR(1)\&.
.RE
.Pp
.ItCmFl-no-out-link
.RS4
Passed on to
\fBnix-build\fR(1)
when running
\fBhome\-manager build\fR\&.
.RE
.Pp
.ItCmFl-refresh
.RS4
Passed on to
\fBnix-build\fR(1)
.RE
.Pp
.ItCmFlv,Fl-verbose
.RS4
Activates verbose output\&.
.RE
.El
.ShFILES
.Pp
$XDG_DATA_HOME/home\-manager/news\-read\-ids
.RS4
Identifiers of news items that have been shown\&. Can be deleted to reset the read news indicator\&.
.RE
.ShBUGS
.Pp
Please report any bugs on the
\m[blue]\fBproject issue tracker\fR\m[]\&.
.ShSEEALSO
.Pp
\fBhome-configuration.nix\fR(5)
.ShAUTHOR
.Pp
\fBHome Manager contributors\fR
.RS4
Author.
.RE
.ShCOPYRIGHT
.br
Copyright \(co 2017\(en2025 Home Manager contributors
# Why do I get an error message about `ca.desrt.dconf` or `dconf.service`? {#_why_do_i_get_an_error_message_about_literal_ca_desrt_dconf_literal_or_literal_dconf_service_literal}
You are most likely trying to configure something that uses dconf but
the DBus session is not aware of the dconf service. The full error you
might get is
error: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name ca.desrt.dconf was not provided by any .service files
or
error: GDBus.Error:org.freedesktop.systemd1.NoSuchUnit: Unit dconf.service not found.
building path(s) ‘/nix/store/b5c0asjz9f06l52l9812w6k39ifr49jj-user-environment’
Wide character in die at /nix/store/64jc9gd2rkbgdb4yjx3nrgc91bpjj5ky-buildenv.pl line 79.
collision between ‘/nix/store/fmwa4axzghz11cnln5absh31nbhs9lq1-home-manager-path/bin/hello’ and ‘/nix/store/c2wyl8b9p4afivpcz8jplc9kis8rj36d-hello-2.10/bin/hello’; use ‘nix-env --set-flag priority NUMBER PKGNAME’ to change the priority of one of the conflicting packages
builder for ‘/nix/store/b37x3s7pzxbasfqhaca5dqbf3pjjw0ip-user-environment.drv’ failed with exit code 2
error: build of ‘/nix/store/b37x3s7pzxbasfqhaca5dqbf3pjjw0ip-user-environment.drv’ failed
```
The solution is typically to uninstall the package from the environment
using `nix-env --uninstall` and reattempt the Home Manager generation
switch.
You could also opt to uninstall *all* of the packages from your profile
Home Manager is a [Nix](https://nix.dev/)-powered tool for reproducible management of the contents of users' home directories.
This includes programs, configuration files, environment variables and, well… arbitrary files.
The following example snippet of Nix code:
```nix
programs.git={
enable=true;
userEmail="joe@example.org";
userName="joe";
};
```
would make available to a user the `git` executable and man pages and a configuration file `~/.config/git/config`:
```ini
[user]
email="joe@example.org"
name = "joe"
```
Since Home Manager is implemented in Nix, it provides several benefits:
- Contents are reproducible — a home will be the exact same every time it is built, unless of course, an intentional change is made.
This also means you can have the exact same home on different hosts.
- Significantly faster and more powerful than various backup strategies.
- Unlike "dotfiles" repositories, Home Manager supports specifying programs, as well as their configurations.
- Supported by <http://cache.nixos.org/>, so that you don't have to build from source.
- If you do want to build some programs from source, there is hardly a tool more useful than Nix for that, and the build instructions can be neatly integrated in your Home Manager usage.
- Infinitely composable, so that values in different configuration files and build instructions can share a source of truth.
- Connects you with the [most extensive](https://repology.org/repositories/statistics/total) and [most up-to-date](https://repology.org/repositories/statistics/newest) software package repository on earth, [Nixpkgs](https://github.com/NixOS/nixpkgs).
Support for the list form will be removed in Home Manager version
20.09.
## State Version Changes {#sec-release-20.03-state-version-changes}
The state version in this release includes the changes below. These
changes are only active if the `home.stateVersion` option is set to
\"20.03\" or later.
- The [programs.zsh.history.path](#opt-programs.zsh.history.path) option is no longer
prepended by `$HOME`, which allows specifying absolute paths, for
example, using the xdg module. Also, the default value is fixed to
`$HOME/.zsh_history` and `dotDir` path is not prepended to it
anymore.
- The newsboat module will now default in displaying `queries` before
`urls` in its main window. This makes sense in the case when one has
a lot of URLs and few queries.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.