#!/usr/bin/env nix-script #!>haskell #! shell | bup git #! env | BUP_DIR #! haskell | shell-conduit filepath import Data.List (intersperse) import Data.Conduit.Shell import Data.Conduit.Shell.Segments (strings) import Data.Conduit.Shell.Variadic (variadicProcess) import System.FilePath excluded :: [String] excluded = intersperse "--exclude" [ "/home/rnhmjoj/.cache/" , "/home/rnhmjoj/games/" ] main :: IO () main = run (strings (bup "ls") >>= mapM_ backup) findPath :: String -> Segment FilePath findPath path = do files <- strings (bup "ls" path) if length files /= 1 then return ("/" final path) else findPath (path head files) where final = concat . drop 2 . splitPath backup :: String -> Segment () backup name = do path <- findPath (name "latest") proc "bup" ("index" : "-v" : path : "--exclude" : excluded) bup "save" "-n" name path bup :: ProcessType r => String -> r bup = variadicProcess "bup"