commit - 77bc171b2bced0c205bfc538659ffa63675c06f7
commit + 08a3bef2c7456931b6790dc39e201921c621669a
blob - ae713d5a60955308932884059c11ebcd02017ede
blob + 6c7ed502dfa7df4856480decf61552578cf1c502
--- flake.lock
+++ flake.lock
]
},
"locked": {
- "lastModified": 1785168662,
- "narHash": "sha256-kGJTc0oEUQuEwV66lSlMxYtOEtpk9N/HS43k+rFAvs8=",
+ "lastModified": 1785269816,
+ "narHash": "sha256-6JkNDlJ18NY1iAuoSYCPDO7O+yYN/vPwpFmHOHNpVvY=",
"owner": "nix-community",
"repo": "home-manager",
- "rev": "cbb77679b3d992c8b62f884cd3a84af534a28621",
+ "rev": "3d25fa94cf355cf7da64c77bb9c3c15806486329",
"type": "github"
},
"original": {
blob - 8116a81cf81ca4eadadd8856ff665ff17bdf9b0f
blob + fa2347094aa00b6eaf670ca8e6f30c665e769958
Binary files hosts/nixaran/configuration.nix and hosts/nixaran/configuration.nix differ
blob - 0ec26662adfd2295bd67b1c594f3164ca8fcb4b3
blob + d95e7427ef7f93d3a4b2d8412b0109392631746c
--- hosts/void/default.nix
+++ hosts/void/default.nix
jdupes
plakar
mdcat
+ sigtop
];
vcs = [
other = [
go
rustup
+ deno
];
}));
}
blob - 809df8ddb783c0fc1576a3ce2b3be3e03d5b0b8f
blob + 7c902d4266cc04338302f85490c4f1a07d2b6acb
--- modules/mixins/dotfiles/bin/backup
+++ modules/mixins/dotfiles/bin/backup
"releases" => "#{HOME}/src/mtmn.name/releases"
}.freeze
- RCLONE_DIRS = {
- "books" => "#{HOME}/misc/books",
- "www" => "#{HOME}/misc/www"
- }.freeze
RCLONE_REMOTE = "backup"
def self.run_cmd(verbose, *args)
def self.plakar_stores_hash = plakar_stores
def self.plakar_stores_list = plakar_stores.keys
def self.plakar_sources_list = plakar_sources.keys
+ def self.plakar_source_dirs = plakar_sources.transform_values { |cfg| cfg["location"] }.freeze
def self.plakar_ignore_file(store)
path = File.join(PLAKAR_CONFIG_DIR, "#{store}.ignore")
end
end
+ def self.list_rclone
+ puts("rclone")
+ puts(" sources")
+ plakar_source_dirs.keys.sort.each { |s| puts(" #{s}") }
+ puts(" #{RCLONE_REMOTE}")
+ end
+
def self.git_run(verbose:, push:, fetch:, parts:)
if parts.empty?
GIT_DIRS.each { |n, d| sync_repo(verbose: verbose, push: push, fetch: fetch, name: n, dir: d) }
def self.rclone_run(verbose:, parts:)
if parts.empty?
- RCLONE_DIRS.each { |n, d| rclone_backup(verbose: verbose, name: n, dir: d) }
+ plakar_source_dirs.each { |n, d| rclone_backup(verbose: verbose, name: n, dir: d) }
else
name = parts.first
rclone_backup(
verbose: verbose,
name: name,
- dir: RCLONE_DIRS.fetch(name) { fatal("Unknown rclone target: #{name}") }
+ dir: plakar_source_dirs.fetch(name) { fatal("Unknown rclone target: #{name}") }
)
end
end
elsif parts.size == 1
plakar_store(verbose: verbose, store: parts.first)
else
- plakar_source(verbose: verbose, store: parts[0], source: parts[1])
+ store = parts[0]
+ parts[1].split(",").each do |source|
+ plakar_source(verbose: verbose, store: store, source: source)
+ end
end
end
run: ->(verbose:, push:, fetch:, parts:) { plakar_run(verbose: verbose, parts: parts) }
),
"rclone" => Backend.new(
- list: -> { list_flat("rclone", RCLONE_DIRS) },
+ list: -> { list_rclone },
run: ->(verbose:, push:, fetch:, parts:) { rclone_run(verbose: verbose, parts: parts) }
)
}.freeze
options = {verbose: true, push: false, fetch: false, list: false}
parser = OptionParser.new do |o|
o.banner = "Usage: backup [options] [target]\n" \
- " target: git, plakar, tarsnap, rclone, <backend>:<name>"
+ " target: git, plakar, tarsnap, rclone, <backend>:<name>\n" \
+ " plakar sources may be comma-separated: plakar:<store>:<src1,src2,...>"
o.on("-p", "--push", "Fetch and push changes after commit") { options[:push] = true }
o.on("-f", "--fetch", "Run git pull for git targets before backup") { options[:fetch] = true }
o.on("-q", "--quiet", "Suppress command output") { options[:verbose] = false }
blob - 592b9e7e46aba70ec738289f6b699af62c6293d6
blob + b62ba0a4f132ec5a1a0fb8d57706613216d7a6b0
--- modules/mixins/dotfiles/config/newsraft/feeds
+++ modules/mixins/dotfiles/config/newsraft/feeds
@ other < reload-period 120
https://plan.cat/rss
+https://haravara.org/~m/humno.xml
@ music < reload-period 120