2310 Commits
Author SHA1 Message Date
Benedikt RipsandAustin Horstman 079a3b5d1a sshAuthSock: for Zsh, initialize in .zprofile and .zshenv 2026-07-24 12:12:39 -05:00
Marius BärandRobert Helgesson 32de400b6a direnv: fix nushell integration failing to unset variables
The nushell pre_prompt hook applied direnv's export diff with `load-env`,
which cannot remove a variable. Variables direnv marks for removal (null
values) were left behind as empty ghosts. Hide those keys explicitly and
drop them before `load-env`.
2026-07-24 09:16:45 +02:00
abba1081f5 rclone: add nfsmount mount type
Add a per-mount 'mountType' option ('mount' | 'nfsmount') selecting
which rclone command performs the mount. 'nfsmount' runs rclone's
in-process NFS server and mounts it via the system NFS client, so no
FUSE driver is needed — on macOS this removes the module's documented
macFUSE requirement (and the kernel-extension approval plus Reduced
Security boot policy that come with it).

When 'nfsmount' is selected, 'nfs-cache-type = "disk"' is merged
into the mount's options (user-overridable, mirroring the existing
'vfs-cache-mode' defaulting) so NFS file handles survive rclone
restarts; with the in-memory default, every service restart would
leave the kernel client with stale handles.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 22:13:44 -05:00
yaaaarnandAustin Horstman a2a9fec572 senpai: use correct config directory on darwin systems 2026-07-21 22:13:04 -05:00
JessandRobert Helgesson 7e2199f4bc rclone: set programs.fuse.enable to fix integration tests 2026-07-21 00:23:33 +02:00
DimaniojkandRobert Helgesson 56ccab8918 programs.claude-code: avoid watching the Nix store 2026-07-21 00:19:38 +02:00
AstreaprtclandRobert Helgesson a02190edf9 wlsunset: add duration option
Add an option to set the easing duration if the times have been set
manually.
2026-07-20 23:18:26 +02:00
Jason BowmanandRobert Helgesson 39411a8e12 syncthing: use localhost authority for unix-socket REST calls
When services.syncthing.guiAddress is a unix socket, curlAddressArgs built
`--unix-socket <sock> http://.<path>`. curl >= 8.21 tightened URL parsing and
rejects the bare-dot authority with "URL rejected: Bad hostname" (exit 3), so
every REST call in the merge script fails. Combined with `--retry 1000
--retry-delay 1 --retry-all-errors`, syncthing-init.service retries until
systemd terminates it at the start timeout and Home Manager activation fails.

Use `localhost` as the placeholder authority; --unix-socket still routes the
request to the socket, and localhost is accepted by all curl versions. Add a
regression test asserting the unix-socket path uses http://localhost.
2026-07-18 22:41:57 +02:00
Austin Horstman 165228b0ef launchd: restore gui domain defaults
User-domain agents are not rediscovered from the user LaunchAgents directory after reboot. Let built-in agents inherit the GUI default while keeping explicit user-domain configuration available.
2026-07-15 10:29:26 -05:00
David ThievonandAustin Horstman 7566825d46 swayimg: support new lua config
Closes: #9479
2026-07-11 21:30:09 -05:00
Rachit Kumar VermaandAustin Horstman 564bc37de5 kitty: fix diff.conf being generated regardless of user config
'cfg.diffConfig' is an implicit submodule with sub-options that carry
their own defaults, so it never actually equals `{ }` - the previous
`cfg.diffConfig != { }` check was always true. This caused
'kitty/diff.conf' to be written (and clobber any existing unmanaged file)
even when the user configured nothing under `programs.kitty.diffConfig`.
2026-07-11 18:56:44 -05:00
csanthiagoandAustin Horstman 0992a29487 television: add extraPackages option with default dependencies
Add an extraPackages option to the television module that wraps the `tv`
binary with additional packages in PATH. Defaults to fd, bat, and ripgrep
which are the dependencies required by television's default channels.

Existing tests updated to set extraPackages = [ ] since they test config
generation, not binary wrapping.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-07-11 15:00:36 -05:00
Austin Horstman 2afec152df tests/darwinScrublist: add podman
podman pulls in vfkit on darwin, which fails to build on
aarch64-darwin with the current nixpkgs pin (cctools ld crashes
with 'Trace/BPT trap: 5'). The podman darwin tests reference the
real package through the machine watchdog script, establishing a
build dependency. Stub it on darwin test runs.
2026-07-10 23:35:26 -05:00
Austin Horstman 3e2af6c9e5 tests/darwinScrublist: add colima, gurk-rs
Both fail to build on aarch64-darwin with the current nixpkgs pin
(cctools ld crashes with 'Trace/BPT trap: 5'): gurk-rs directly, and
vfkit as a colima dependency. Stub them on darwin test runs.
2026-07-10 23:06:34 -05:00
Austin Horstman 437ae5be42 claude-code: test plugin collisions
Cover duplicate personal-plugin directory names and collisions between managed plugins and configured skills.
2026-07-10 14:19:11 -05:00
Austin Horstman 1c029fb0dc claude-code: load plugins without wrapper
Persist managed plugins in Claude Code's personal skills directory so strict-parser subcommands do not receive injected --plugin-dir arguments. Retain version-gated legacy behavior for older and unversioned packages.
2026-07-10 14:19:11 -05:00
Eason20000andAustin Horstman 79e6082586 launchd: treat absent domain as harmless in bootoutAgent
When an agent's launchd.agents.<name>.domain is changed from gui to
user (or the agent is newly installed on a headless macOS system
where the gui/<UID> domain never existed), bootoutAgent attempts to
unload the agent from the old domain first. On such systems, this
fails with: Boot-out failed: 125: Domain does not support specified
action.

The bootoutAgent function only treated "No such process" as a
non-fatal condition (return 2). This change adds the domain-not-exist
error to the same handling path: the agent wasn't running in a domain
that doesn't exist, so we can safely skip the boot-out and proceed
with bootstrap into the new domain.
2026-07-10 08:22:30 -05:00
Austin Horstman 144f4e36d0 files: respect executable for recursive directories
Apply explicit executable settings to recursive directory leaves so directory sources behave like documented file sources.
2026-07-09 12:27:58 -05:00
reesilvaandAustin Horstman f4d01c1d87 posting: add module
posting: add news
2026-07-08 17:33:28 -05:00
Austin Horstman 1aac8895fe home-cursor: warn before removing implicit enable
Follow up on home-cursor: remove legacy enable by preserving the implicit enable path that was not covered by the earlier deprecation warning.

Configurations that set home.pointerCursor without top-level enable now continue to work and emit a warning asking users to set home.pointerCursor.enable explicitly.
2026-07-08 10:46:52 -05:00
Austin Horstman cee3f0e7fe yubikey-agent: switch to gui domain for hardware key PIN prompts
yubikey-agent triggers OS-level CCID/PIV PIN entry dialogs when SSH
authentication is requested. These system security prompts require
access to the macOS Aqua session (window server). Running in the user
domain (LimitLoadToSessionType=Background) blocks these prompts,
causing authentication to fail or hang.

Revert to the default gui domain so PIN prompts can render in the
graphical login session.
2026-07-07 22:02:13 -05:00
Austin Horstman 7a62d63707 gpg-agent: switch to gui domain for graphical pinentry support
gpg-agent is commonly configured with graphical pinentry programs
(pinentry-mac, pinentry-gnome3) on macOS that need access to the Aqua
session to display passphrase prompts. Running in the user domain
(LimitLoadToSessionType=Background) prevents these prompts from
rendering, causing passphrase entry to fail silently or hang.

Revert to the default gui domain so the agent runs in the graphical
login session where pinentry can interact with the window server.
2026-07-07 22:02:13 -05:00
Thierry DelafontaineandAustin Horstman 53ebbdc405 proton-pass-agent: switch to gui domain to prevent error accessing keyring
Fixes the following accessing issue:

```
Error accessing credential on keyring: PlatformFailure(Error { code: -25308, message: "User interaction is not allowed." })
```
2026-07-07 16:08:19 -05:00
isabelandAustin Horstman 2ad49968c3 home-cursor: remove legacy enable
its been 482 days since this was merged. users should have had enough
time to migrate
2026-07-07 15:47:40 -05:00
Batuhan Baserdem, Ph.D.andGitHub 3c6f1244ed firefox: allow setting persistent StoreID
Added a new config option programs.firefox.profiles.<name>.storeId.
Setting this option now writes the StoreID both to the profiles.ini
and to the settings."toolkit.profiles.storeID" of the profile.
Firefox has two different profile implementations;
- the old one that home-manager module can declare
- the new "Selectable Profile Service" introduced in 150
The new profiles are managed in a runtime db, and reads from profiles.ini
Migration without database operations is not possible right now,
but when it becomes available, this option will stop home-manager from
clobbering the linked storeIDs.
2026-07-07 15:46:26 -05:00
Austin Horstman cd863288d4 codex: stop duplicating hook script deployment
Write path-backed hook bundles only under the active Codex home so XDG mode no longer mirrors scripts into ~/.codex.
2026-07-07 09:53:53 -05:00
RatakorandAustin Horstman 52f93adbac walker: fix systemd dependency cycle with elephant
Signed-off-by: Ratakor <ratakor@disroot.org>
2026-07-07 09:50:48 -05:00
RatakorandAustin Horstman 8de7488af2 elephant: fix service unit
Signed-off-by: Ratakor <ratakor@disroot.org>
2026-07-07 09:50:48 -05:00
Leon SchwarzäuglandAustin Horstman 63d02d1c19 attic-client: init module 2026-07-06 20:46:24 -05:00
Austin Horstman 0d33882bd4 codex: support path-backed hooks
Allow path-backed hook bundles to provide both hooks.json and supporting scripts through programs.codex.hooks.
2026-07-06 12:20:20 -05:00
SigheryandAustin Horstman a7209b6794 syncthing: fix badly escaped ignore patterns test
The previous test would pass no matter what the `ignoreString` was. I
don't know enough Bash/Grep to explain it, but it was easy to test by
just changing the pattern to have `WRONG` instead of `val1`, and that
would still pass the `assertFileContains` test.

I've hopefully fixed it now, by using `lib.escapeShellArg` before
passing it to `assertFileContains`, and I've also added a negative test
case, to ensure that a bad ignore string is _not_ found in the merge
script.
2026-07-04 22:02:21 -05:00
b885baad53 syncthing: add option for ignore patterns
Taken from this nixpkgs commit by @zorrobert:
https://github.com/NixOS/nixpkgs/commit/7a223b26858aaebb44009c8966a1756918e936e3

Syncthing shared folders can be configured to ignore paths. These
changes add support for this functionality.

Co-authored-by: zorrobert <118135271+zorrobert@users.noreply.github.com>
2026-07-03 22:08:35 -05:00
Ben BrownandAustin Horstman b2e4390ff3 kanshi: Add test to check service when settings are unset 2026-07-03 12:27:00 -05:00
isabelandAustin Horstman 3a60d513d0 clipse: use rfc 042 style settings 2026-07-03 12:26:19 -05:00
Austin Horstman a4d410db95 fzf: group related module attributes
Group repeated attr prefixes so the fzf module and new tests are easier to scan without changing behavior.
2026-07-02 15:28:15 -05:00
Austin Horstman 0396024ea5 fzf: warn on conflicting ctrl-r bindings
Detect active fzf and history-manager Ctrl-R bindings by their configured values, warn with the winning precedence, and let the normal binding options silence the warning.
2026-07-02 15:28:15 -05:00
Austin Horstman f15a4bf065 fzf: add per-shell widget overrides
Allow each shell integration to override widget commands and options before fzf is sourced, so users can disable or tune bindings only where needed.
2026-07-02 15:28:15 -05:00
Austin Horstman 2d92f5398d fzf: export environment variables to nushell
Pure Nushell sessions do not source hm-session-vars, so feed the same FZF_* values through programs.nushell.environmentVariables before sourcing fzf integration.
2026-07-02 15:28:15 -05:00
Austin Horstman fe3ce0a527 fzf: add historyWidget.command option
Expose FZF_CTRL_R_COMMAND again so users can disable fzf's Ctrl-R binding explicitly, and warn when the configured package is too old to support it.
2026-07-02 15:28:15 -05:00
Austin Horstman cde77509b6 fzf: restructure widget options
Move widget settings under nested option groups while preserving behavior through rename aliases, and centralize FZF environment variable rendering for later reuse.
2026-07-02 15:28:15 -05:00
Austin Horstman 2fca6a7372 atuin: order nushell integration after fzf
Source the Nushell integration at order 2000 so fzf can keep chaining carapace at mkAfter while Atuin still wins Ctrl-R like it does in other shells.

Users who used programs.nushell.extraConfig = lib.mkAfter ... to beat Atuin now need lib.mkOrder 2001 or later.
2026-07-02 15:28:15 -05:00
_andAustin Horstman d32537981c lib: escape backslash in lib.hm.generators.toKDL 2026-06-30 23:49:47 -05:00
Austin Horstman 2f3da3d45f launchd: fix user domain agents
User-domain agents need the Background session type to bootstrap into user/501, and activation should fail rather than silently unloading services when launchctl bootstrap fails.
2026-06-30 23:39:07 -05:00
Amadej KastelicandAustin Horstman 2a37d71bbe herdr: add module 2026-06-30 12:14:44 -05:00
Jure VarlecandAustin Horstman 4ad9aaae70 generic-linux-gpu: add EGL support for Nvidia 2026-06-28 09:30:28 -05:00
Peter BittnerandAustin Horstman 6eba758fee uv: prune Python versions and tools by diff
The prune option uninstalled all managed Python versions (and tools)
and reinstalled them on every activation, which is slow. Instead,
resolve each requested version to the install target uv would produce
and uninstall only the difference; already-correct versions are left
untouched. Resolving to the install target (not every installed match)
also prunes superseded patch releases, which uv retains on upgrade.

Tools are diffed by PEP 503-normalized package name: requested names
are extracted and normalized at build time, and the installed set is
read from uv's tool directory, whose entries are already normalized, so
no uv output is parsed. Pruning to an empty set still removes everything.
2026-06-26 20:08:04 -05:00
Vinicius DeolindoandAustin Horstman 5d320ab301 fzf: source nushell integration after carapace 2026-06-25 16:45:22 -05:00
Austin Horstman 2ebe9c0fe7 codex: sanitize plugin cache paths
Use sanitized plugin name and version components for cache targets while preserving manifest names in Codex config.
2026-06-25 14:21:12 -05:00
Austin Horstman 64221f9c87 codex: add lifecycle hooks option
Manage CODEX_HOME/hooks.json directly while covering the generated file in the existing TOML test.
2026-06-25 14:21:12 -05:00
Austin Horstman 1c64122e70 codex: add context override file
Expose AGENTS.override.md declaratively and cover it in the existing TOML generation test.
2026-06-25 14:21:12 -05:00