diff --git a/modules/darwin/dock/default.nix b/modules/darwin/dock/default.nix index fa3226d..6741ae8 100644 --- a/modules/darwin/dock/default.nix +++ b/modules/darwin/dock/default.nix @@ -1,4 +1,9 @@ -{ config, pkgs, lib, ... }: +{ + config, + pkgs, + lib, + ... +}: # Original source: https://gist.github.com/antifuchs/10138c4d838a63c0a05e725ccd7bccdd @@ -15,10 +20,11 @@ in example = false; }; - local.dock.entries = mkOption - { - description = "Entries on the Dock"; - type = with types; listOf (submodule { + local.dock.entries = mkOption { + description = "Entries on the Dock"; + type = + with types; + listOf (submodule { options = { path = lib.mkOption { type = str; }; section = lib.mkOption { @@ -31,40 +37,64 @@ in }; }; }); - readOnly = true; - }; + readOnly = true; + }; }; - config = - mkIf cfg.enable - ( - let - normalize = path: if hasSuffix ".app" path then path + "/" else path; - entryURI = path: "file://" + (builtins.replaceStrings - [" " "!" "\"" "#" "$" "%" "&" "'" "(" ")"] - ["%20" "%21" "%22" "%23" "%24" "%25" "%26" "%27" "%28" "%29"] - (normalize path) - ); - wantURIs = concatMapStrings - (entry: "${entryURI entry.path}\n") - cfg.entries; - createEntries = concatMapStrings - (entry: "${dockutil}/bin/dockutil --no-restart --add '${entry.path}' --section ${entry.section} ${entry.options}\n") - cfg.entries; - in + config = mkIf cfg.enable ( + let + normalize = path: if hasSuffix ".app" path then path + "/" else path; + entryURI = + path: + "file://" + + (builtins.replaceStrings + [ + " " + "!" + "\"" + "#" + "$" + "%" + "&" + "'" + "(" + ")" + ] + [ + "%20" + "%21" + "%22" + "%23" + "%24" + "%25" + "%26" + "%27" + "%28" + "%29" + ] + (normalize path) + ); + wantURIs = concatMapStrings (entry: "${entryURI entry.path}\n") cfg.entries; + createEntries = concatMapStrings ( + entry: + "if [ -d '${entry.path}' ]; then ${dockutil}/bin/dockutil --no-restart --add '${entry.path}' --section ${entry.section} ${entry.options} ; fi \n " + ) cfg.entries; + in + { + system.activationScripts.postUserActivation.text = '' + echo >&2 "Setting up the Dock..." + haveURIs="$(${dockutil}/bin/dockutil --list | ${pkgs.coreutils}/bin/cut -f2)" + if ! diff -wu <(echo -n "$haveURIs") <(echo -n '${wantURIs}') >&2 ; then { - system.activationScripts.postUserActivation.text = '' - echo >&2 "Setting up the Dock..." - haveURIs="$(${dockutil}/bin/dockutil --list | ${pkgs.coreutils}/bin/cut -f2)" - if ! diff -wu <(echo -n "$haveURIs") <(echo -n '${wantURIs}') >&2 ; then - echo >&2 "Resetting Dock." - ${dockutil}/bin/dockutil --no-restart --remove all - ${createEntries} - killall Dock - else - echo >&2 "Dock setup complete." - fi - ''; - } - ); + echo >&2 "Resetting Dock." + ${dockutil}/bin/dockutil --no-restart --remove all + ${createEntries} + killall Dock + } + else + echo >&2 "Dock setup complete." + fi + ''; + } + ); }