- Expand tilde and globs in source paths
- Add ignore patterns to LocalSyncConfig
- Add [global] section to config file, which defines global settings like
staging directory, and default behaviours like whether to
copy
/symlink
when syncing. - Implement staging when
global.method
issymlink
- Make
local.basedir
mandatory (instead of optional) so as to preserve directory structure in the stating directory- Do not expand tilde in sources, because sources are relative paths after making basedir mandatory
- Make
- Add
basedir
to LocalSyncConfig for easier configuring in sources -
Manage permission bits on a per-group basis-
Handle permission denied error when target file is created by current user but thewrite
permission is not set -
Set permissions after all syncing process
-
- Keep target file modes and their corresponding source files identical
- Return error when
sources
contains.*
or similar globs, because this glob also matches current directory (.
) and parent directory (..
) - Expand environment variables in
local.basedir
,local.sources
,local.target
andstaging
- Handle non-existing source, give warnings when encountered
-
Addlocal.for
to separate groups for different machines w.r.t. their hostname (withgethostname
crate) - Add
global.ignored
as fallback ignoring list - Add
local.name
for local groups as namespaces, to properly handle files from different groups having the same relative path to their basedir. - Let
ignored
array(s) match more intelligently - Add
local.per_host
to check for per-host syncing items for groups that has this key set totrue
- Make
local.per_host
default totrue
, or remove this from config - Add group name to logging message
- Do not touch filesystem when parsing config for faster execution, only query filesystem when syncing
- Warn about items without a source in the staging directory
- Add
global.hostname_sep
as default value, overridden by group configs - Deny sources that start with "./" or "../" or similar
- Define group type (like one of "General", "App", "Dropin"), to define
priority when syncing (priority order: Dropin > App > General), so that
user won't have to carefully separate configurations of specific
applications from its parent directory (like separating
~/.ssh
(which will be of type "App") from~
(which will be of type "General"), or separating~/.config/nvim
from~/.config
) - Recursively expand all sources in function
syncing::expand
- Add README.md
- Do not remove host-specific suffix in staging directory
- Warn when a group's
target
is inside another group'sbasedir
- Set maximum recursion depth when expanding sources
- Deny empty
name
/basedir
/target
- Better logging messages:
- error: shows errors
- warn: shows warnings
- info: shows coarse step messages, like "syncing group [xxx]"
- debug: shows how items are synced
- trace: shows messages that contains multiple lines Paths in log messages should be single quoted.
- Keep track of items that are synced last time, so that deletion of source items can also be propagated to local fs properly.
- ?Make
target
an array - ?Expand globs in
target
to sync to multiple target directories (use case:user.js
under Firefox user profile, which is namedxxxxxxxx.$profile_name
and can be globbed) - Do not remove existing target file when overwriting, because it causes some X compositor (like picom) to flash or fail to automatically load config file after overwriting
- Add
global.include
array to allow including other config files - Templating
- Find config in
$XDG_CONFIG_HOME/dt/cli.toml
by default - Add command line option to specify which group to sync via passing name of the group
- Change default config path to
$XDG_CONFIG_HOME/dt/config.toml
- Serve files with an HTTP server, grouped by their group names
- Use the same config layout as
dt-cli
- Add
confidential
flag tolocal
group to determine whether this group should be served in the HTTP server - Make URL prefix (like
/raw/
) configurable - Optionally serve static files at a given root
- Encryption
Author: Blurgy [email protected] Date: Sep 29 2021, 00:18 [CST]