aboutsummaryrefslogtreecommitdiff
path: root/tmux-tsunami/modules/installer.nix
blob: 9cff8115f66aafc5db9c6ba0b89719b5a784dccd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
{pkgs, ...}: let
  tsunamiLib = {
    scriptPath = f: "$HOME/.config/tmux/scripts/${f}.sh";
    filePath = f: "$HOME/.config/tmux/files/${f}";
  };
  config = pkgs.lib.evalModules {
    modules =
      [
        {_module.args = {inherit pkgs tsunamiLib;};}
      ]
      ++ (pkgs.lib.filesystem.listFilesRecursive ./common);
  };

  moduleConfig = pkgs.writeText "tsunami-installer-config.json" (builtins.toJSON {
    inherit (config.config.tsunami) scripts files confs;
  });
in {
  mkInstaller =
    pkgs.runCommand "tsunami-installer" {
      buildInputs = [pkgs.jq];
    } ''
      mkdir -p $out
      {
        cat ${moduleConfig} | jq -r '
          (.scripts | to_entries[] | "cat <<\"EOF\" > $HOME/.config/tmux/scripts/\(.key).sh\n\(.value)\nEOF\n"),
          (.files   | to_entries[] | "cat <<\"EOF\" > $HOME/.config/tmux/files/\(.key)\n\(.value)\nEOF\n"),
          (.confs   | to_entries[] | "cat <<\"EOF\" > $HOME/.config/tmux/conf.d/\(.key).conf\n\(.value)\nEOF\n")
        '
        printf '
          cat <<EOF > $HOME/.config/tmux/tmux.conf
          run-shell "find $out/conf.d -print0 | xargs -0 -n1 tmux source-file"
          EOF
        '
      } > $out/tsunami-installer

      chmod +x $out/tsunami-installer
    '';
}