diff options
Diffstat (limited to 'users/Profpatsch/nix-home')
-rw-r--r-- | users/Profpatsch/nix-home/default.nix | 180 |
1 files changed, 114 insertions, 66 deletions
diff --git a/users/Profpatsch/nix-home/default.nix b/users/Profpatsch/nix-home/default.nix index cf9ab0d4d4ae..8f52055ade31 100644 --- a/users/Profpatsch/nix-home/default.nix +++ b/users/Profpatsch/nix-home/default.nix @@ -2,97 +2,145 @@ let bins = depot.nix.getBins pkgs.stow [ "stow" ] - // depot.nix.getBins pkgs.coreutils [ "mkdir" "ln" "printenv" "rm" ] - // depot.nix.getBins pkgs.xe [ "xe" ] - // depot.nix.getBins pkgs.lr [ "lr" ] - // depot.nix.getBins pkgs.nix [ "nix-store" ] - ; + // depot.nix.getBins pkgs.coreutils [ "mkdir" "ln" "printenv" "rm" ] + // depot.nix.getBins pkgs.xe [ "xe" ] + // depot.nix.getBins pkgs.lr [ "lr" ] + // depot.nix.getBins pkgs.nix [ "nix-store" ] + ; # run stow to populate the target directory with the given stow package, read from stowDir. # Bear in mind that `stowDirOriginPath` should always be semantically bound to the given `stowDir`, otherwise stow might become rather confused. - runStow = { - # “stow package” to stow (see manpage) - stowPackage, - # “target directory” to stow in (see manpage) - targetDir, - # The “stow directory” (see manpage), containing “stow packages” (see manpage) - stowDir, - # representative directory for the stowDir in the file system, against which stow will create relative links. - # ATTN: this is always overwritten with the contents of `stowDir`! You shouldn’t re-use the same `stowDirOriginPath` for different `stowDir`s, otherwise there might be surprises. - stowDirOriginPath, - }: depot.nix.writeExecline "stow-${stowPackage}" {} [ - # first, create a temporary stow directory to use as source - # (stow will use it to determine the origin of files) - "if" [ bins.mkdir "-p" stowDirOriginPath ] - # remove old symlinks - "if" [ - "pipeline" [ - bins.lr "-0" "-t" "depth == 1 && type == l" stowDirOriginPath + runStow = + { + # “stow package” to stow (see manpage) + stowPackage + , # “target directory” to stow in (see manpage) + targetDir + , # The “stow directory” (see manpage), containing “stow packages” (see manpage) + stowDir + , # representative directory for the stowDir in the file system, against which stow will create relative links. + # ATTN: this is always overwritten with the contents of `stowDir`! You shouldn’t re-use the same `stowDirOriginPath` for different `stowDir`s, otherwise there might be surprises. + stowDirOriginPath + , + }: depot.nix.writeExecline "stow-${stowPackage}" { } [ + # first, create a temporary stow directory to use as source + # (stow will use it to determine the origin of files) + "if" + [ bins.mkdir "-p" stowDirOriginPath ] + # remove old symlinks + "if" + [ + "pipeline" + [ + bins.lr + "-0" + "-t" + "depth == 1 && type == l" + stowDirOriginPath + ] + bins.xe + "-0" + bins.rm ] - bins.xe "-0" bins.rm - ] - # create an indirect gc root so our config is not cleaned under our asses by a garbage collect - "if" [ - bins.nix-store + # create an indirect gc root so our config is not cleaned under our asses by a garbage collect + "if" + [ + bins.nix-store "--realise" "--indirect" - "--add-root" "${stowDirOriginPath}/.nix-stowdir-gc-root" + "--add-root" + "${stowDirOriginPath}/.nix-stowdir-gc-root" stowDir - ] - # populate with new stow targets - "if" [ - "elglob" "-w0" "stowPackages" "${stowDir}/*" - bins.ln "--force" "-st" stowDirOriginPath "$stowPackages" - ] - # stow always looks for $HOME/.stowrc to read more arguments - "export" "HOME" "/homeless-shelter" - bins.stow + ] + # populate with new stow targets + "if" + [ + "elglob" + "-w0" + "stowPackages" + "${stowDir}/*" + bins.ln + "--force" + "-st" + stowDirOriginPath + "$stowPackages" + ] + # stow always looks for $HOME/.stowrc to read more arguments + "export" + "HOME" + "/homeless-shelter" + bins.stow # always run restow for now; this does more stat but will remove stale links "--restow" - "--dir" stowDirOriginPath - "--target" targetDir + "--dir" + stowDirOriginPath + "--target" + targetDir stowPackage - ]; + ]; # create a stow dir from a list of drv paths and a stow package name. makeStowDir = (with depot.nix.yants; - defun - [ (list (struct { + defun + [ + (list (struct { originalDir = drv; stowPackage = string; })) drv - ] ) - (dirs: - depot.nix.runExecline "make-stow-dir" { - stdin = lib.pipe dirs [ - (map depot.users.Profpatsch.netencode.gen.dwim) - depot.users.Profpatsch.netstring.toNetstringList - ]; - } [ - "importas" "out" "out" - "if" [ bins.mkdir "-p" "$out" ] - "forstdin" "-d" "" "-o" "0" "line" - "pipeline" [ - depot.users.Profpatsch.execline.print-one-env "line" - ] - depot.users.Profpatsch.netencode.record-splice-env - "importas" "-ui" "originalDir" "originalDir" - "importas" "-ui" "stowPackage" "stowPackage" - bins.ln "-sT" "$originalDir" "\${out}/\${stowPackage}" - ]); + ]) + (dirs: + depot.nix.runExecline "make-stow-dir" + { + stdin = lib.pipe dirs [ + (map depot.users.Profpatsch.netencode.gen.dwim) + depot.users.Profpatsch.netstring.toNetstringList + ]; + } [ + "importas" + "out" + "out" + "if" + [ bins.mkdir "-p" "$out" ] + "forstdin" + "-d" + "" + "-o" + "0" + "line" + "pipeline" + [ + depot.users.Profpatsch.execline.print-one-env + "line" + ] + depot.users.Profpatsch.netencode.record-splice-env + "importas" + "-ui" + "originalDir" + "originalDir" + "importas" + "-ui" + "stowPackage" + "stowPackage" + bins.ln + "-sT" + "$originalDir" + "\${out}/\${stowPackage}" + ]); in # TODO: temp setup -lib.pipe {} [ +lib.pipe { } [ (_: makeStowDir [{ stowPackage = "scripts"; originalDir = pkgs.linkFarm "scripts-farm" [ - { name = "scripts/ytextr"; - path = depot.users.Profpatsch.ytextr; } - ]; + { + name = "scripts/ytextr"; + path = depot.users.Profpatsch.ytextr; + } + ]; }]) (d: runStow { stowDir = d; |