Skip to content

Latest commit

 

History

History
91 lines (84 loc) · 4.49 KB

roadmap.md

File metadata and controls

91 lines (84 loc) · 4.49 KB

Roadmap

Core

  • 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 is symlink
    • 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
  • 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 the write 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 and staging
  • Handle non-existing source, give warnings when encountered
  • Add local.for to separate groups for different machines w.r.t. their hostname (with gethostname 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 to true
  • Make local.per_host default to true, 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's basedir
  • 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 named xxxxxxxx.$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

CLI

  • 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

Server

  • Serve files with an HTTP server, grouped by their group names
  • Use the same config layout as dt-cli
  • Add confidential flag to local 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]