- VALIDATE configuration file (toml):
  - if format is valid
  - if required fields are present (packages)
  - if packages are valid

-- VALIDATE: atomicity
  - if all packages are valid perform the link/unlink operation

-- VALIDATE packages:
  - are not duplicated. What to do them? (ignore, error, warning)

-- VALIDATE source file: 
  - if exists
  - if is a file
  - if is readable

-- VALIDATE destination file:
  - if exists
  - if is a file
  - if is writable


- GENERATE: config file by scanning a directory and creating a package for each file

- GENERATE: config file with default values

- CROSS-SYSTEM:
  example of a symlink creation function that works on both unix and windows
  ```rust
    fn create_symlink(source: &Path, target: &Path) -> io::Result<()> {
      #[cfg(target_family = "unix")]
      std::os::unix::fs::symlink(source, target)?;

      #[cfg(target_family = "windows")]
      std::os::windows::fs::symlink_file(source, target)?;

      Ok(())
  }
  ```
