Personal Nix setup
at main 2.0 kB view raw
1{ lib, pkgs, ... }: 2 3with lib; 4{ 5 mkSymlinks = name: symlinks: 6 pkgs.writeShellScript "${name}-symlinks" 7 (concatStringsSep "\n" 8 (mapAttrsToList 9 (n: v: '' 10 if [[ -L "${n}" ]]; then 11 unlink "${n}" 12 elif [[ -e "${n}" ]]; then 13 echo "${n} already exists, moving" 14 mv "${n}" "${n}.bak" 15 fi 16 mkdir -p "$(dirname "${n}")" 17 ln -sf "${v}" "${n}" 18 '') 19 symlinks)); 20 21 mkFiles = name: files: 22 pkgs.writeShellScript "${name}-files" 23 (concatStringsSep "\n" 24 (mapAttrsToList 25 (n: v: '' 26 if [[ -L "${n}" ]]; then 27 unlink "${n}" 28 elif ${pkgs.diffutils}/bin/cmp -s "${n}" "${v}"; then 29 rm "${n}" 30 elif [[ -e "${n}" ]]; then 31 echo "${n} already exists, moving" 32 mv "${n}" "${n}.bak" 33 fi 34 mkdir -p $(dirname "${n}") 35 ${pkgs.gawk}/bin/awk '{ 36 for(varname in ENVIRON) 37 gsub("@"varname"@", ENVIRON[varname]) 38 print 39 }' "${v}" > "${n}" 40 chmod --reference="${v}" "${n}" 41 '') 42 files)); 43 44 mkDirs = name: dirs: 45 pkgs.writeShellScript "${name}-dirs" 46 (concatStringsSep "\n" 47 (mapAttrsToList 48 (n: v: '' 49 if [[ -L "${n}" ]]; then 50 unlink "${n}" 51 elif [[ ! -d "${n}" ]]; then 52 echo "${n} already exists and isn't a directory, moving" 53 mv "${n}" "${n}.bak" 54 fi 55 ${pkgs.rsync}/bin/rsync -avu "${v}/" "${n}" 56 chmod -R u+w "${n}" 57 '') 58 dirs)); 59 60 rmSymlinks = name: symlinks: 61 pkgs.writeShellScript "${name}-rm-symlinks" 62 ( 63 concatStringsSep "\n" 64 (mapAttrsToList (n: _v: "unlink \"${n}\"") symlinks) 65 ); 66 67 rmFiles = name: files: 68 pkgs.writeShellScript "${name}-rm-symlinks" 69 ( 70 concatStringsSep "\n" 71 (mapAttrsToList (n: _v: "rm \"${n}\"") files) 72 ); 73}