-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
files: don't handle symlinks in a special way when home.file.<name>.recursive is set to true #5381
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This comes back to bite again!
@Luflosi For another native messenger i changed the package to copy the files instead of symlinking within the package. While it's not "pretty" and duplicates some kilobytes of data it worked just fine. Considering the "It's use is not recommended" mention and how wide the blast radius of this change is, I'd try that option first even though it's not "covering all bases". https://gist.github.com/Lillecarl/1e4669bd7546eed5cdfcea900fa1c64e <- nixpkgs patch
You could also try this (untested) overlay. |
Thank you for your contribution! I marked this pull request as stale due to inactivity. Please read the relevant sections below before commenting. If you are the original author of the PR
If you are not the original author of the PR
|
This pull request has been mentioned on NixOS Discourse. There might be relevant details there: https://discourse.nixos.org/t/hm-24-11-firefox-with-passff-host/57108/2 |
Thank you for your contribution! I marked this pull request as stale due to inactivity. Please read the relevant sections below before commenting. If you are the original author of the PR
If you are not the original author of the PR
|
be9177f
to
571e313
Compare
@khaneliman is there a reason why this is not being merged? |
"I don't know how breaking of a change this is" Too much uncertainty and I haven't had any time to verify / test it and its a core piece of HM. |
This branch is outdated and wouldn't work in my nix flake so I created my own based on the latest home manager: I ran all tests and they were successful. But I am not sure if there are tests that would catch breakage of this type. So I rebuilt my system with After being rebuilt Do you have any ideas of what could break because of this change so I could test it? |
…ecursive is set to true I'm using `pass` as my password manager. In order to use it in Firefox, I use the passff extension. The passff extension needs the `passff-host` native messaging host to access the passwords. Here is what the file structure of the `passff-host` package looks like: ``` result ├── etc │ ├── chromium │ │ └── native-messaging-hosts │ │ └── passff.json -> ../../../share/passff-host/passff.json │ ├── opt │ │ └── chrome │ │ └── native-messaging-hosts │ │ └── passff.json -> ../../../../share/passff-host/passff.json │ └── vivaldi │ └── native-messaging-hosts │ └── passff.json -> ../../../share/passff-host/passff.json ├── lib │ ├── librewolf │ │ └── native-messaging-hosts │ │ └── passff.json -> ../../../share/passff-host/passff.json │ └── mozilla │ └── native-messaging-hosts │ └── passff.json -> ../../../share/passff-host/passff.json └── share └── passff-host ├── passff.json └── passff.py ``` As you can see, `lib/mozilla/native-messaging-hosts/passff.json` is a relative symlink. This is perfectly reasonable. When adding `programs.firefox.nativeMessagingHosts = [ pkgs.passff-host ]` to the home-manager configuration, the firefox module first joins all the `nativeMessagingHosts` using `symlinkJoin` and stores the result in a variable called `nativeMessagingHostsJoined`. This creates `ff_native-messaging-hosts` in the Nix store: ``` /nix/store/bv62k5yl7jwzkhyci838ir3vgz59gqsa-ff_native-messaging-hosts ├── bin │ └── firefox -> /nix/store/0zqxaz44w75gjq32xj53i32jl2j91pzy-firefox-125.0.1/bin/firefox ├── etc │ ├── chromium │ │ └── native-messaging-hosts │ │ └── passff.json -> ../../../share/passff-host/passff.json │ ├── opt │ │ └── chrome │ │ └── native-messaging-hosts │ │ └── passff.json -> ../../../../share/passff-host/passff.json │ └── vivaldi │ └── native-messaging-hosts │ └── passff.json -> ../../../share/passff-host/passff.json ├── lib │ ├── [...] │ ├── librewolf │ │ └── native-messaging-hosts │ │ └── passff.json -> ../../../share/passff-host/passff.json │ └── mozilla │ ├── native-messaging-hosts │ │ └── passff.json -> ../../../share/passff-host/passff.json │ └── pkcs11-modules └── share ├── [...] └── passff-host ├── passff.json -> /nix/store/pag1akgbmls1xa63h6rzmb0h6xxwwzmy-passff-host-1.2.4/share/passff-host/passff.json └── passff.py -> /nix/store/pag1akgbmls1xa63h6rzmb0h6xxwwzmy-passff-host-1.2.4/share/passff-host/passff.py ``` Still perfectly fine. Then the `firefox` module sets ```nix home.file.".mozilla/native-messaging-hosts" = { source = "${nativeMessagingHostsJoined}/lib/mozilla/native-messaging-hosts"; recursive = true; } ``` The `file` module then calls `lndir -silent "/nix/store/bv62k5yl7jwzkhyci838ir3vgz59gqsa-ff_native-messaging-hosts/lib/mozilla/native-messaging-hosts" ".mozilla/native-messaging-hosts"` To see the problem, here is the resulting directory tree: ``` .mozilla ├── [...] └── native-messaging-hosts └── passff.json -> ../../../share/passff-host/passff.json ``` Obviously this symlink doesn't go anywhere. `lndir` created a broken symlink. To fix this, add the `-ignorelinks` argument to `lndir`, which causes it to instead just create a symlink to the symlink in `ff_native-messaging-hosts`: ``` .mozilla ├── [...] └── native-messaging-hosts └── passff.json -> /nix/store/bv62k5yl7jwzkhyci838ir3vgz59gqsa-ff_native-messaging-hosts/lib/mozilla/native-messaging-hosts/passff.json ```
571e313
to
95a1ec0
Compare
Updated real quick, thanks.
Yeah, not sure what our test suite looks like for recursive usages.
Not off the top of my head, I didn't spend much time looking at this though. I mostly forgot about it, tbh. Apparently it wasn't in my tabs for PRs I was tracking. I just worried there would be some unexpected usage in the wild. I don't have much time atm to dedicate to troubleshooting/triage so would probably revert if an issue pops up from merging.. .otherwise just hold until after release is cut. |
@jaredmontoya @khaneliman If you guys want this merged you should probably create an option somewhere that defaults to false that changes that parameter only, as mentioned previously the blast radius is huge and in the wild people depend on all kinds of implementation details. I like using my phone as a hammer! (/s) I'm not sure where the option would be placed but I'll leave figuring that out to you guys 😄 It'll be easy for anyone to evaluate if things break once it's in master, but getting people to try a PR is 10x harder EDIT: I'll happily review the default off state for the PR once it's ready, just mention me |
Description
I'm using
pass
as my password manager.In order to use it in Firefox, I use the passff extension. The passff extension needs the
passff-host
native messaging host to access the passwords. Here is what the file structure of thepassff-host
package looks like:As you can see,
lib/mozilla/native-messaging-hosts/passff.json
is a relative symlink. This is perfectly reasonable.When adding
programs.firefox.nativeMessagingHosts = [ pkgs.passff-host ]
to the home-manager configuration, the firefox module first joins all thenativeMessagingHosts
usingsymlinkJoin
and stores the result in a variable callednativeMessagingHostsJoined
. This createsff_native-messaging-hosts
in the Nix store:Still perfectly fine.
Then the
firefox
module setsThe
file
module then callslndir -silent "/nix/store/bv62k5yl7jwzkhyci838ir3vgz59gqsa-ff_native-messaging-hosts/lib/mozilla/native-messaging-hosts" ".mozilla/native-messaging-hosts"
To see the problem, here is the resulting directory tree:Obviously this symlink doesn't go anywhere.
lndir
created a broken symlink. To fix this, add the-ignorelinks
argument tolndir
, which causes it to instead just create a symlink to the symlink inff_native-messaging-hosts
:Checklist
Change is backwards compatible. (I'm honestly not 100% sure on this one)
Code formatted with
./format
.Code tested through
nix-shell --pure tests -A run.all
ornix develop --ignore-environment .#all
using Flakes.Test cases updated/added. See example.
Commit messages are formatted like
See CONTRIBUTING for more information and recent commit messages for examples.
If this PR adds a new module
Maintainer CC
@rycee @kira-bruneau @Lillecarl @mlyxshi