Skip to content

Commit

Permalink
broot: fix config file location (nix-community#3273)
Browse files Browse the repository at this point in the history
At commit [5666e6b9](Canop/broot@5666e6b),
broot refactored the content of the file `/resources/default-conf.hjson`
into multiple files under the directory `/resources/default-conf`, using
[`imports`](https://github.com/Canop/broot/blob/5666e6b9fb827c07c6c21fbe0fc60f538e1aaf60/resources/default-conf/conf.hjson#L152-L165)
to refer to other configurations.

This refactoring is effective since version 1.14.0 of broot.

After this refactoring, in `xdg.configFile.broot` (which defaults to
`~/.config/broot`):
- we need to copy all potentially referenced files (all files under
  `resources/default-conf`),
- except we need to leave out `conf.hjson` which conflicts with the
  `conf.toml` generated by home-manager (because broot [accepts both conf.toml and conf.hjson](https://dystroy.org/broot/conf_file/))

To implement this, we use `symlinkJoin` to create the content of
`xdg.configFile.broot` by merging multiple sources.
  • Loading branch information
Chan-Siu-Man authored Sep 27, 2022
1 parent 65b65ce commit 1f5ef2b
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 37 deletions.
29 changes: 23 additions & 6 deletions modules/programs/broot.nix
Original file line number Diff line number Diff line change
Expand Up @@ -206,16 +206,33 @@ in {
config = mkIf cfg.enable {
home.packages = [ cfg.package ];

xdg.configFile."broot/conf.toml".source =
tomlFormat.generate "broot-config" cfg.settings;

# Dummy file to prevent broot from trying to reinstall itself
xdg.configFile."broot/launcher/installed-v1".text = "";
xdg.configFile."broot" = {
recursive = true;
source = pkgs.symlinkJoin {
name = "xdg.configFile.broot";
paths = [
(pkgs.writeTextDir "conf.toml" (builtins.readFile
(tomlFormat.generate "broot-config" cfg.settings)))

# Copy all files under /resources/default-conf
"${cfg.package.src}/resources/default-conf"

# Dummy file to prevent broot from trying to reinstall itself
(pkgs.writeTextDir "launcher/installed-v1" "")
];

# Remove conf.hjson, whose content has been merged into programs.broot.settings
postBuild = ''
rm $out/conf.hjson
'';
};
};

programs.broot.settings = builtins.fromJSON (builtins.readFile
(pkgs.runCommand "default-conf.json" {
nativeBuildInputs = [ pkgs.hjson ];
} "hjson -c ${cfg.package.src}/resources/default-conf.hjson > $out"));
}
"hjson -c ${cfg.package.src}/resources/default-conf/conf.hjson > $out"));

programs.bash.initExtra = mkIf cfg.enableBashIntegration (shellInit "bash");

Expand Down
33 changes: 2 additions & 31 deletions tests/modules/programs/broot/broot.nix
Original file line number Diff line number Diff line change
Expand Up @@ -13,39 +13,10 @@ with lib;
assertFileExists home-files/.config/broot/conf.toml
assertFileContent home-files/.config/broot/conf.toml ${
pkgs.writeText "broot.expected" ''
imports = ["verbs.hjson", {file = "dark-blue-skin.hjson", luma = ["dark", "unknown"]}, {file = "white-skin.hjson", luma = "light"}]
modal = true
show_selection_mark = true
[[verbs]]
execution = "$EDITOR +{line} {file}"
invocation = "edit"
leave_broot = false
shortcut = "e"
[[verbs]]
execution = "$EDITOR {directory}/{subpath}"
invocation = "create {subpath}"
leave_broot = false
[[verbs]]
execution = "git difftool -y {file}"
invocation = "git_diff"
leave_broot = false
shortcut = "gd"
[[verbs]]
auto_exec = false
execution = "cp -r {file} {parent}/{file-stem}-{version}{file-dot-extension}"
invocation = "backup {version}"
key = "ctrl-b"
leave_broot = false
[[verbs]]
execution = "$SHELL"
invocation = "terminal"
key = "ctrl-t"
leave_broot = false
set_working_dir = true
verbs = []
[skin]
''
Expand Down

0 comments on commit 1f5ef2b

Please sign in to comment.