From 1f5ef2bb419a327fae28a83b50fab50959132c24 Mon Sep 17 00:00:00 2001 From: Chan Siu Man <25467044+Chan-Siu-Man@users.noreply.github.com> Date: Tue, 27 Sep 2022 03:19:02 -0700 Subject: [PATCH] broot: fix config file location (#3273) At commit [5666e6b9](https://github.com/Canop/broot/commit/5666e6b9fb827c07c6c21fbe0fc60f538e1aaf60), 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. --- modules/programs/broot.nix | 27 +++++++++++++++++---- tests/modules/programs/broot/broot.nix | 33 ++------------------------ 2 files changed, 24 insertions(+), 36 deletions(-) diff --git a/modules/programs/broot.nix b/modules/programs/broot.nix index 5197c8484..d78074ef4 100644 --- a/modules/programs/broot.nix +++ b/modules/programs/broot.nix @@ -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; + 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))) - # Dummy file to prevent broot from trying to reinstall itself - xdg.configFile."broot/launcher/installed-v1".text = ""; + # 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"); diff --git a/tests/modules/programs/broot/broot.nix b/tests/modules/programs/broot/broot.nix index 58a281083..440691cf5 100644 --- a/tests/modules/programs/broot/broot.nix +++ b/tests/modules/programs/broot/broot.nix @@ -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] ''