Only create dock entries when directory path exists
This commit is contained in:
		| @@ -1,4 +1,9 @@ | |||||||
| { config, pkgs, lib, ... }: | { | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  |  | ||||||
| # Original source: https://gist.github.com/antifuchs/10138c4d838a63c0a05e725ccd7bccdd | # Original source: https://gist.github.com/antifuchs/10138c4d838a63c0a05e725ccd7bccdd | ||||||
|  |  | ||||||
| @@ -15,10 +20,11 @@ in | |||||||
|       example = false; |       example = false; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     local.dock.entries = mkOption |     local.dock.entries = mkOption { | ||||||
|       { |  | ||||||
|       description = "Entries on the Dock"; |       description = "Entries on the Dock"; | ||||||
|         type = with types; listOf (submodule { |       type = | ||||||
|  |         with types; | ||||||
|  |         listOf (submodule { | ||||||
|           options = { |           options = { | ||||||
|             path = lib.mkOption { type = str; }; |             path = lib.mkOption { type = str; }; | ||||||
|             section = lib.mkOption { |             section = lib.mkOption { | ||||||
| @@ -35,32 +41,56 @@ in | |||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   config = |   config = mkIf cfg.enable ( | ||||||
|     mkIf cfg.enable |  | ||||||
|       ( |  | ||||||
|     let |     let | ||||||
|       normalize = path: if hasSuffix ".app" path then path + "/" else path; |       normalize = path: if hasSuffix ".app" path then path + "/" else path; | ||||||
|           entryURI = path: "file://" + (builtins.replaceStrings |       entryURI = | ||||||
|             [" "   "!"   "\""  "#"   "$"   "%"   "&"   "'"   "("   ")"] |         path: | ||||||
|             ["%20" "%21" "%22" "%23" "%24" "%25" "%26" "%27" "%28" "%29"] |         "file://" | ||||||
|  |         + (builtins.replaceStrings | ||||||
|  |           [ | ||||||
|  |             " " | ||||||
|  |             "!" | ||||||
|  |             "\"" | ||||||
|  |             "#" | ||||||
|  |             "$" | ||||||
|  |             "%" | ||||||
|  |             "&" | ||||||
|  |             "'" | ||||||
|  |             "(" | ||||||
|  |             ")" | ||||||
|  |           ] | ||||||
|  |           [ | ||||||
|  |             "%20" | ||||||
|  |             "%21" | ||||||
|  |             "%22" | ||||||
|  |             "%23" | ||||||
|  |             "%24" | ||||||
|  |             "%25" | ||||||
|  |             "%26" | ||||||
|  |             "%27" | ||||||
|  |             "%28" | ||||||
|  |             "%29" | ||||||
|  |           ] | ||||||
|           (normalize path) |           (normalize path) | ||||||
|         ); |         ); | ||||||
|           wantURIs = concatMapStrings |       wantURIs = concatMapStrings (entry: "${entryURI entry.path}\n") cfg.entries; | ||||||
|             (entry: "${entryURI entry.path}\n") |       createEntries = concatMapStrings ( | ||||||
|             cfg.entries; |         entry: | ||||||
|           createEntries = concatMapStrings |         "if [ -d '${entry.path}' ]; then ${dockutil}/bin/dockutil --no-restart --add '${entry.path}' --section ${entry.section} ${entry.options} ; fi \n " | ||||||
|             (entry: "${dockutil}/bin/dockutil --no-restart --add '${entry.path}' --section ${entry.section} ${entry.options}\n") |       ) cfg.entries; | ||||||
|             cfg.entries; |  | ||||||
|     in |     in | ||||||
|     { |     { | ||||||
|       system.activationScripts.postUserActivation.text = '' |       system.activationScripts.postUserActivation.text = '' | ||||||
|         echo >&2 "Setting up the Dock..." |         echo >&2 "Setting up the Dock..." | ||||||
|         haveURIs="$(${dockutil}/bin/dockutil --list | ${pkgs.coreutils}/bin/cut -f2)" |         haveURIs="$(${dockutil}/bin/dockutil --list | ${pkgs.coreutils}/bin/cut -f2)" | ||||||
|         if ! diff -wu <(echo -n "$haveURIs") <(echo -n '${wantURIs}') >&2 ; then |         if ! diff -wu <(echo -n "$haveURIs") <(echo -n '${wantURIs}') >&2 ; then | ||||||
|  |         { | ||||||
|           echo >&2 "Resetting Dock." |           echo >&2 "Resetting Dock." | ||||||
|           ${dockutil}/bin/dockutil --no-restart --remove all |           ${dockutil}/bin/dockutil --no-restart --remove all | ||||||
|           ${createEntries} |           ${createEntries} | ||||||
|           killall Dock |           killall Dock | ||||||
|  |           } | ||||||
|         else |         else | ||||||
|           echo >&2 "Dock setup complete." |           echo >&2 "Dock setup complete." | ||||||
|         fi |         fi | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user